GWT Generators - Определите, есть ли ссылка на класс в любом месте - PullRequest
1 голос
/ 21 марта 2011

У меня есть проект GWT, который использует генераторы для создания объектов динамического отражения света.

Мне было интересно, знает ли кто-нибудь, как определить, есть ли ссылка на определенный класс в дереве зависимостей, начинающемся со всех EntryPoints. Если бы я мог сделать это, я бы мог избежать генерации данных отражения для классов, которые никогда не будут использоваться.

Насколько я понимаю, когда GWT выполняет компиляцию, он выполняет аналогичную проверку, чтобы уменьшить общий размер скомпилированного кода, но я не смог найти связанных методов в TypeOracle или чем-то подобном.

1 Ответ

0 голосов
/ 21 марта 2011

Это косвенный метод достижения того, к чему вы стремитесь.Я считаю, что каждый модуль GWT полностью упакован в обычный пакет Java.Вы можете использовать

TypeOracle.findPackage(String pkgName)

, чтобы получить экземпляр JPackage, и в этом случае вы используете findType (String typeName), чтобы увидеть, присутствует ли тип в этом пакете.Если он присутствует, вполне вероятно, что на него ссылаются в каком-то файле, и GWT скомпилирует его.

Существует также этот метод getPackages (), который возвращает массив всех пакетов, известных этому оракулу этого типа, поэтому он доступен для компилятора GWT..

JPackage[] getPackages()

Вы можете итеративно findType() в каждом пакете определить, будет ли тип скомпилирован или нет.

Лучший метод - определить пользовательскую аннотацию и все белые списки.классы, которые вы хотите создать код отражения.Вы можете аннотировать необходимые классы с его помощью и проверять наличие аннотаций перед созданием кода для него.

Мой любимый способ - следовать соглашению об именах над аннотациями (я делал оба вместе) и, таким образом, поддерживатьвнесите в белый список и сделайте соглашение (обычно это REGEX) «настройкой», которую можно изменить по желанию команды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...