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 полезно.

Другие вопросы по тегам