Dart Analyzer: поиск экземпляров класса или его потомков
Я использую build
пакет, чтобы взять .dart
файл и искать определения определенного класса или его подклассов. Можно ClassElement
быть использованы для подклассов тоже?
Я ожидаю, что только одно определение определенного класса будет в одном файле проекта, но нет причин, по которым клиенты не могли бы создавать подклассы и сходить с ума.
1 ответ
Нет способа напрямую захватить все подклассы, но вы можете найти все классы и проверить, является ли каждый подклассом того, который вас интересует.
Начните с получения 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
полезно.