Я анализирую Groovy-источники, используя встроенные AstBuilder
. В приведенном ниже примере переменная def f
обнаруживается как Object
через AST, хотя ясно, что там 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')
PS Изменение типа f
с def
на File
в источниках делает узел AST типа File
, но это не такрешение.
Groovy 2.5.8, JDK 1.8