Я думаю, что процессор аннотаций был бы более подходящим для этой задачи. Из Ответ Мэтью Фарвелла «Вы не можете определить тип выражения».
Предположим, вы используете сторонний jar, который содержит класс FancyWriter, расширяющий FileWriter. Вы незаконно вставили x = new FancyWriter ( ) ;
в свой код. CheckStyle не найдет его, потому что он использует регулярные выражения, и он недостаточно умен, чтобы знать, что FancyWriter является FileWriter. Я думаю, что вы могли бы написать процессор аннотаций, который выяснит, что FancyWriter действительно FileWriter и является незаконным.
OTH, кто-то - теоретически - мог бы написать расширение недопустимого класса, которое устраняет системную зависимость. Например, предположим, что у FileWriter был метод, в котором он получает кодировку системы. Если LegalWriter расширяет FileWriter и переопределяет метод, мы не должны отказываться от LegalWriter, просто потому что он расширил недопустимый класс.
Если вы используете банки третьих сторон, как их классы будут законными. То, что они не расширяют нелегальный класс, не означает, что они им не пользуются. Затем, если вы используете один из их классов, ваш код зависит от системы.