我正在为我的 Flutter 项目生成一些代码。我基本上想用 source_gen 重建整个类。我正在使用 SimpleElementVisitor 来获取大部分数据。我在获取字段、字段类型、方法名称和类名称时没有遇到任何问题。
这是例如我如何获得我的班级名称:
@override
void visitConstructorElement(ConstructorElement element) {
final returnType = element.returnType.toString();
className = returnType.replaceFirst('*', '');
}
我想我可以获得我的第一个接口名称,例如像这样。
@override
void visitClassElement(ClassElement element) {
firstInterfaceName = element.interfaces.first;
}
但不知何故,我觉得根本没有访问访问类元素函数。甚至其中的打印语句也不会被执行。其他功能都可以正常使用。
另外我怎样才能获得方法体?请不要只发布任何 ChatGPT 答案。我已经尝试过了。 预先感谢!
您的 visitClassElement 方法不起作用,因为 ElementVisitor 应该迭代的元素列表中没有单个 ClassElement。但有些方法、字段和构造函数会触发相应的方法 visitMethodElement、visitFieldElement、visitConstructorElement。
但是,如果您要求您的 ElementVisitor 迭代 CompilationUnitElement 的子级(可以从 buildStep 获取),那么在其子级中有一个 ClassElement ,肯定会调用它的 visitClassElement 方法。 这是一个代码示例,将允许调用 visitClassElement 方法 -
@override
FutureOr<void> build(BuildStep buildStep) async {
var visitor = ModelVisitor();
final LibraryElement library = await buildStep.resolver.libraryFor(buildStep.inputId, allowSyntaxErrors: true);
List<CompilationUnitElement> units = library.units;
for (var unit in units) {
unit.visitChildren(visitor);
}
}