Dart Analyzer: поиск экземпляров класса или его потомков - PullRequest
0 голосов
/ 19 сентября 2018

Я использую пакет build, чтобы взять файл .dart и найти определения определенного класса или его подклассов.Можно ли использовать ClassElement и для подклассов?

Я ожидаю, что только одно определение определенного класса будет в одном файле проекта, но нет причин, по которым клиенты не могутподкласс и сойти с ума.

1 Ответ

0 голосов
/ 20 сентября 2018

Нет способа напрямую захватить все подклассы, но вы можете найти все классы и проверить, является ли каждый подклассом того, который вас интересует.

Начните с получения 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.

...