Jens Geyer created THRIFT-5993:
----------------------------------

             Summary: Haxe generator: cross-package import shadowing and Haxe 
base-type name collisions
                 Key: THRIFT-5993
                 URL: https://issues.apache.org/jira/browse/THRIFT-5993
             Project: Thrift
          Issue Type: Bug
          Components: Haxe - Compiler
            Reporter: Jens Geyer


The Haxe code generator has two related type-naming issues:

1. *Cross-package import shadowing*: When a struct or service references a 
same-named type from another package (e.g. struct {{Foo}} in package A imports 
{{B.Foo}}), the generator emits {{import B.Foo;}} inside the file that defines 
{{Foo}}. This causes the Haxe compiler to reject the file because the import 
name collides with the enclosing class name. Additionally, when multiple 
referenced packages each export an identically-named type, the generator emits 
multiple {{import}} statements with the same short name, producing an 
unresolvable ambiguity error. Fix: {{haxe_thrift_add_import()}} now suppresses 
any import whose short name matches either the entity being defined or an 
already-imported short name.

2. *Haxe built-in base-type name collision*: When a Thrift struct, enum, or 
service is named {{String}}, {{Bool}}, {{Float}}, {{Int}}, or {{Void}}, the 
generated Haxe file uses that name verbatim as the class/enum identifier and 
file name. This shadows the corresponding Haxe built-in type throughout the 
file, causing compilation failures in any generated code that uses those 
built-ins. Fix: add {{make_haxe_user_type_name()}} which extends 
{{get_cap_name()}} to append {{_}} when the result is one of the five Haxe 
base-type names. Apply it at all struct/enum/service file-name, class-header, 
import, and {{type_name()}} sites.



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

Reply via email to