如何消除FieldAccess和QualifiedName之间的歧义?

时间:2013-06-26 15:17:13

标签: code-generation abstract-syntax-tree eclipse-jdt

我正在生成Java代码作为字符串,我有像

这样的表达式
parameter.field.method();

然后我用Eclipse JDT的ASTParser和子表达式将生成的代码解析为AST

parameter.field

变为QualifiedName,而不是FieldAccess。这会导致问题,因为稍后我会清理限定名称(使用Clean Qualified Types Plugin中的代码)。

正如JavaDoc of FieldAccess所述:

  

像“foo.bar”这样的表达式可以表示为限定词   名称(QualifiedName)或字段访问表达式(FieldAccess)   包含简单的名称。要么是可以接受的,也没有办法   在他们之间做出选择,而不知道名称解决的问题   to(ASTParser可能会返回)。

我应该生成什么,以便解析器能够明确地知道这是FieldAccess

(一个有趣的问题:Java编译器如何消除可能性之间的歧义?每当遇到QualifiedName时,它还会尝试通过解析名称将其解释为FieldAccess?)< / p>

1 个答案:

答案 0 :(得分:1)

我找到的最小解决方案是围绕参数生成括号:

(parameter).field.method();