You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@thrift.apache.org by "Jens Geyer (Jira)" <ji...@apache.org> on 2026/09/15 20:03:00 UTC

[jira] [Resolved] (THRIFT-6200) Go -remote stub qualifies enum and inherited container arguments with the wrong package when they come from an included file

     [ https://issues.apache.org/jira/browse/THRIFT-6200?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Jens Geyer resolved THRIFT-6200.
--------------------------------
    Fix Version/s: 0.25.0
         Assignee: Sylwester Lachiewicz
       Resolution: Fixed

> Go -remote stub qualifies enum and inherited container arguments with the wrong package when they come from an included file
> ----------------------------------------------------------------------------------------------------------------------------
>
>                 Key: THRIFT-6200
>                 URL: https://issues.apache.org/jira/browse/THRIFT-6200
>             Project: Thrift
>          Issue Type: Bug
>          Components: Go - Compiler
>            Reporter: Sylwester Lachiewicz
>            Assignee: Sylwester Lachiewicz
>            Priority: Major
>             Fix For: 0.25.0
>
>          Time Spent: 40m
>  Remaining Estimate: 0h
>
> The Go {{-remote}} stub qualifies an enum argument with the package of the service, not the package the enum is declared in, so the stub does not compile whenever a service method takes an enum from an included file.
> h3. Reproduction
> {{lib/go/test/IncludesTest.thrift}} already has the shape:
> {code}
> include "ThriftTest.thrift"
> service testService extends ThriftTest.SecondService {
>   ThriftTest.CrazyNesting getCrazyNesting(
>     1: ThriftTest.StructA a,
>     2: ThriftTest.Numberz numbers
>   ) throws(1: ThriftTest.Xception err1),
> }
> {code}
> {{Numberz}} is declared in {{ThriftTest.thrift}} and generated into the {{thrifttest}} package, but the stub reaches for it in {{includestest}}:
> {code:go}
> tmp1, err := (strconv.Atoi(flag.Arg(2)))
> if err != nil {
> 	Usage()
> 	return
> }
> argvalue1 := includestest.Numberz(tmp1)
> {code}
> {noformat}
> gopath/src/includestest/test_service-remote/test_service-remote.go:179:29: undefined: includestest.Numberz
> gopath/src/includestest/extended_service-remote/extended_service-remote.go:197:29: undefined: includestest.Numberz
> {noformat}
> h3. Cause
> In {{t_go_generator::generate_service_remote}} the enum branch writes {{package_name_aliased}} unconditionally:
> {code:cpp}
> f_remote << indent() << "argvalue" << i << " := " << package_name_aliased << "."
>          << publicize(the_type->get_name()) << "(tmp" << i << ")" << '\n';
> {code}
> The struct branch a few lines below resolves the package with {{module_name()}} and falls back to {{package_name_aliased}} only when that is empty. The enum branch needs the same treatment.
> Unrelated to THRIFT-6197: the branch is unchanged by that work, and regenerating every IDL under test/, lib/go/test/ and tutorial/ with the released and the patched generator produces identical output for this file.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)