我用的是 build 要接受的包 .dart 文件并查找某个类或其子类的定义。罐头 ClassElement 也用于子类?
build
.dart
ClassElement
我只期望在项目的一个文件中有一个特定类的单一定义,但是客户机没有理由不能进行子类化和疯狂化。
没有直接获取所有子类的方法,但是您可以找到所有类并检查每个类是否都是您感兴趣的子类。
从获得 LibraryElement 为其生成代码的文件 BuildStep.inputLibrary . 从那里找到图书馆里所有的课程 var classes = libraryElement.units.expand((cu) => cu.types); . 然后通过检查 ClassElement 对于你感兴趣的类型 ClassElement.allSupertypes 对于您要检查的类型。 var subtypes = classes.where((c) => c.allSupertypes.contains(lookingFor)); .
LibraryElement
BuildStep.inputLibrary
var classes = libraryElement.units.expand((cu) => cu.types);
ClassElement.allSupertypes
var subtypes = classes.where((c) => c.allSupertypes.contains(lookingFor));
你可以找到 LibraryReader 和 TypeChecker 公用设施来自 source_gen 有用。
LibraryReader
TypeChecker
source_gen