Dart Analyzer:查找类或其后代的实例

时间:2018-09-19 02:50:33

标签: dart dart-analyzer dart-build

我正在使用build包来获取.dart文件,并寻找某个类或其子类的定义。 ClassElement也可以用于子类吗?

我只希望特定类的单个定义位于项目的一个文件中,但是没有理由客户不能继承子类并且变得疯狂。

1 个答案:

答案 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中的LibraryReaderTypeChecker实用工具。