[ 
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)

Reply via email to