为解析的Groovy AST树解析def符号的类型

时间:2019-11-11 02:33:57

标签: groovy

我使用内置的AstBuilder解析Groovy源。在下面的示例中,def f变量是通过产生的AST被发现为Object的,尽管很明显这里是File

是否可以重用groovy的大型代码库来解析与静态分析尽可能精确的var类型?

import org.codehaus.groovy.ast.builder.AstBuilder

String source = """def f = new File("."); return f"""
def nodes = new AstBuilder().buildFromString(source)
def expr = nodes[0].statements[1].expression as VariableExpression

assert(expr.variable == 'f')
assert(expr.type.toString() == 'java.lang.Object') // 'File' wanted
assert(expr.originType.toString() == 'java.lang.Object')

P.S。在源中将f的类型从def更改为File会使AST节点具有类型File,但这不是解决方案。

Groovy 2.5.8,JDK 1.8

0 个答案:

没有答案