gpt4 book ai didi

dart - 如何在 Dart 分析器/source-gen 中从某些元素获取 AstNode?

转载 作者:行者123 更新时间:2023-12-01 19:01:57 24 4
gpt4 key购买 nike

我正在使用source_gen解析一些Dart文件,通过Dart analyzer

我正在延长 GeneratorForAnnotation<> ,以及重写方法 FutureOr<String> generateForAnnotatedElement(Element element, ConstantReader annotation, BuildStep buildStep) 。此方法为我提供了一个基本元素,我可以导航该元素,直到找到其他元素,例如 MethodElement .

一旦我掌握了这个MethodElement ,我想分析一下该方法的 block ,详细信息。我想要这样的东西:

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

最佳答案

明白了:

AstNode getAstNodeFromElement(Element element) {
AnalysisSession session = element.session;
ParsedLibraryResult parsedLibResult = session.getParsedLibraryByElement(element.library);
ElementDeclarationResult elDeclarationResult = parsedLibResult.getElementDeclaration(element);
return elDeclarationResult.node;
}

关于dart - 如何在 Dart 分析器/source-gen 中从某些元素获取 AstNode?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57030992/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com