Я не думаю, что это выполнимо. Я подозреваю, что эта функция намеренно исключена из IDE, потому что ее нельзя безопасно использовать, как другие рефакторинги «удалить неиспользуемые XXX».
Неиспользуемые объявления, которые ищет IDEA (и AFAIK, NetBeans), предназначены для частных членов и локальных переменных: вещей, которые недоступны, даже динамически, извне этого класса или области. (Ну, по крайней мере, не делая с Reflection или взломом JVM того, что вам не нужно.) Независимо от того, что внешний код делает с вашей библиотекой, это не приведет к использованию этих вещей, потому что их область действия ограничена, а IDE может все это увидеть. Компилятор может определить это, посмотрев только на ваш код.
Для классов, даже если у них нет public
доступа, на них можно ссылаться динамически Class.forName()
, и это действительно происходит в живом коде. Таким образом, даже если они явно не используются в коде вашего проекта, они могут использоваться в зависимости от того, что запускаете вы или внешний код, использующий вашу библиотеку. Таким образом, IDE не может гарантировать, что удаление этих классов не изменит наблюдаемого извне поведения.
Вот почему я думаю, что IDEA просто не обеспечивает такого поведения: это может дать пользователям ложные ожидания в отношении безопасности, и их удаление не является безопасным рефакторингом.