1

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

我只希望特定类的单个定义在项目的一个文件中,但没有理由客户不能子类化并疯狂。

4

1 回答 1

2

没有办法直接获取所有子类,但是您可以找到所有类并检查每个类是否是您感兴趣的类的子类。

首先获取LibraryElement要生成代码的文件的BuildStep.inputLibrary. 从那里找到库中的所有类var classes = libraryElement.units.expand((cu) => cu.types);。然后通过检查ClassElement您感兴趣的类型是否ClassElement.allSupertypes适用于您正在检查的类型来检查每个是否是您感兴趣的类的子类。var subtypes = classes.where((c) => c.allSupertypes.contains(lookingFor));.

您可能会发现LibraryReaderTypeChecker实用程序source_gen有用。

于 2018-09-20T17:11:04.910 回答