[
https://issues.apache.org/jira/browse/THRIFT-6239?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Sylwester Lachiewicz updated THRIFT-6239:
-----------------------------------------
Fix Version/s: 0.25.0
> Go -remote tool does not compile for functions inherited from a file that is
> not included directly
> --------------------------------------------------------------------------------------------------
>
> Key: THRIFT-6239
> URL: https://issues.apache.org/jira/browse/THRIFT-6239
> Project: Thrift
> Issue Type: Bug
> Components: Go - Compiler
> Affects Versions: 0.24.0
> Reporter: Jens Geyer
> Priority: Minor
> Fix For: 0.25.0
>
>
> The {{-remote}} command-line tool that the Go generator writes for a service
> does not compile when the service inherits functions from a service two
> include levels away. The tool imports only the service's own package and the
> packages of the files that service includes directly, and
> {{generate_service_remote()}} falls back to the service's own package for
> anything declared elsewhere.
> {noformat}
> // GrandC.thrift
> namespace go grandc
> enum Color {
> RED = 1,
> }
> struct Pt {
> 1: i32 x
> }
> service GrandService {
> void grandList(1: list<i32> zs),
> void grandEnum(1: Color c),
> void grandStruct(1: Pt pt),
> }
> // MidA.thrift
> include "GrandC.thrift"
> namespace go mida
> service MidService extends GrandC.GrandService {
> void mid(1: i32 x),
> }
> // LeafB.thrift
> include "MidA.thrift"
> namespace go leafb
> service LeafService extends MidA.MidService {
> void leaf(1: i32 y),
> }
> {noformat}
> In a Go module named {{exp}}:
> {noformat}
> $ thrift -r -out gen --gen go:package_prefix=exp/gen/ LeafB.thrift
> $ go build ./gen/leafb/leaf_service-remote
> gen/leafb/leaf_service-remote/leaf_service-remote.go:197:29: undefined:
> leafb.NewGrandServiceGrandListArgs
> gen/leafb/leaf_service-remote/leaf_service-remote.go:218:22: undefined:
> leafb.Color
> gen/leafb/leaf_service-remote/leaf_service-remote.go:238:22: undefined:
> leafb.NewPt
> {noformat}
> All three are declared in {{grandc}}, which the tool does not import.
> Container, enum and struct arguments fail alike.
> One level away, THRIFT-6200 fixes enum arguments. Container and exception
> arguments fail there as well: {{func_to_service}} (THRIFT-5002) records only
> the name of the service that declares an inherited function, not its package,
> so the args constructor is qualified with the service's own package. For a
> service in {{childb}} that extends one in {{parenta}}, the tool fails with
> {{undefined: childb.NewParentServiceTakeListArgs}}.
> Reproduced with 0.24.0 and current master.
> _Drafted with AI assistance (Claude Opus 5); reviewed and posted by Jens
> Geyer._
--
This message was sent by Atlassian Jira
(v8.20.10#820010)