【发布时间】:2019-11-23 15:21:07
【问题描述】:
我正在使用 source_gen 通过 Dart analyzer 解析一些 Dart 文件。
我正在扩展 GeneratorForAnnotation<>,并覆盖方法
FutureOr<String> generateForAnnotatedElement(Element element, ConstantReader annotation, BuildStep buildStep)。
这个方法给了我一个基本元素,我会一直导航到找到其他元素,比如MethodElement。
一旦我掌握了这个MethodElement,我想分析一下
该方法的块,详细。我想要这样的东西:
AstNode node = methodElement.computeNode();
更详细的:
class MyGenerator extends GeneratorForAnnotation<MyAnnotation> {
@override
FutureOr<String> generateForAnnotatedElement(
Element element, ConstantReader annotation, BuildStep buildStep,
) {
if (element is ClassElement)
for (MethodElement methodElement in element.methods) {
AstNode node = methodElement.computeNode();
processMyNode(node);
}
else
throw AssertionError();
}
}
很遗憾,computeNode 已被弃用。如果我尝试调用它,我会得到:
NoSuchMethodError: Class 'RestrictedAnalysisContext' has no instance method 'resolveCompilationUnit' with matching arguments.
Receiver: Instance of 'RestrictedAnalysisContext'
Tried calling: resolveCompilationUnit(Instance of 'FileSource', Instance of 'LibraryElementImpl')
Found: resolveCompilationUnit(Source, LibraryElement) => CompilationUnit
我的问题:如何获得AstNode?
【问题讨论】:
标签: dart dart-analyzer