我正在使用该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));
.
您可能会发现LibraryReader
和TypeChecker
实用程序source_gen
有用。