You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@thrift.apache.org by "Jens Geyer (JIRA)" <ji...@apache.org> on 2014/05/27 00:44:02 UTC

[jira] [Closed] (THRIFT-2435) Java compiler doesn't like struct member names that are identical to an existing enum or struct type

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

Jens Geyer closed THRIFT-2435.
------------------------------


> Java compiler doesn't like struct member names that are identical to an existing enum or struct type
> ----------------------------------------------------------------------------------------------------
>
>                 Key: THRIFT-2435
>                 URL: https://issues.apache.org/jira/browse/THRIFT-2435
>             Project: Thrift
>          Issue Type: Bug
>          Components: Java - Compiler
>    Affects Versions: 0.9
>            Reporter: Lucas Partridge
>            Assignee: Jens Geyer
>            Priority: Minor
>             Fix For: 0.9.2
>
>         Attachments: DataType.java, Metadata.java, THRIFT-2435_java_enum_type__conflicts_with_struct_member.patch, TestService.java, test.thrift
>
>
> The following IDL works fine in Python and C# but generates a compiler error in Java:
> {code}
> namespace * test
> enum DataType {
>     Text
> }
> struct Metadata {
>     1: string Name,
>     2: DataType DataType
> }
> service TestService {
>     void SendData(1:string Data, 2:Metadata Metadata)
> }
> {code}
> The generated test.Metadata.java file has 2 compile errors:
> {{Cannot make a static reference to the non-static field DataType}}
> at line 422:
> {code}
> struct.DataType = DataType.findByValue(iprot.readI32());
> {code}
> and line 495:
> {code}
> struct.DataType = DataType.findByValue(iprot.readI32());
> {code}
> If the IDL is changed to use {{DataType dataType}} instead then the compile errors don't occur.
> This issue is annoying because the same IDL works fine in Python and C#. To make the IDL work for Java we have to change the IDL, which means we have to change our Python clients (I haven't checked the C# clients yet). See also http://stackoverflow.com/questions/22691634/what-is-the-recommended-naming-convention-for-thrift-identifiers-in-order-to-max



--
This message was sent by Atlassian JIRA
(v6.2#6252)