Разрешение типа символа def для разобранного Groovy AST-дерева - PullRequest
0 голосов
/ 11 ноября 2019

Я анализирую 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...