我正在使用build
包来获取.dart
文件,并寻找某个类或其子类的定义。 ClassElement
也可以用于子类吗?
我只希望特定类的单个定义位于项目的一个文件中,但是没有理由客户不能继承子类并且变得疯狂。
答案 0 :(得分:0)
无法直接获取所有子类,但是您可以找到所有类,并检查每个类是否是您感兴趣的子类的子类。
首先使用BuildStep.inputLibrary
获取要为其生成代码的文件的LibraryElement
。从那里找到var classes = libraryElement.units.expand((cu) => cu.types);
在库中的所有类。然后,通过检查您感兴趣的类型的ClassElement
是否在您正在检查的类型的ClassElement.allSupertypes
中来检查每个人是否都是您感兴趣的类的子类。 var subtypes = classes.where((c) => c.allSupertypes.contains(lookingFor));
。
您可能会发现source_gen
中的LibraryReader
和TypeChecker
实用工具。