Как проверить, принадлежит ли MethodDeclaration внутреннему классу - PullRequest
2 голосов
/ 28 марта 2012

Есть ли способ с помощью JDT ASTParser, с помощью которого мы можем определить, находится ли объявление метода внутри внутреннего класса Anonymous?

Я создаю подключаемый модуль Eclipse для поиска неиспользуемых общедоступных методов в проекте. Я использую ASTVisitor на узле MethodDeclaration, а затем использую поиск JDT. Проблема заключается в том, что при прохождении каждого Java-класса я посещаю MethodDeclaration анонимных внутренних классов, таких как Listeners. Мне нужно избегать этих методов.

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 03 апреля 2012

Наконец-то я нашел решение. В ASTParser есть AnonymousClassDeclaration ASTNode, который обозначает анонимные внутренние классы в файле Java. При посещении таких узлов мы можем указать, что эти узлы не должны посещаться полностью (возвращая false).

public boolean visit(AnonymousClassDeclaration classDeclarationStatement) {

        return false;

    }
1 голос
/ 03 апреля 2012

Если CLASS_INSTANCE_CREATION - это тип узла для анонимного класса, он должен работать. Я не эксперт по Java; Мне кажется, есть несколько способов создать анонимный класс, поэтому вам нужно проверить, что этот тип узла охватывает их все.

... разве ваш анонимный класс слушателя (?) Не должен наследовать / реализовывать интерфейс слушателя? Если это так, вы должны иметь возможность забраться на ту часть дерева рядом с CLASS_INSTANCE_CREATION, которая является предложением наследует / внедряет, и проверить, что она действительно реализует / наследует то, что вы ожидаете. Чтобы сделать это правильно, вам нужно полное имя и разрешение типа; просто потому, что имя интерфейса написано "Слушатель", не означает, что это то, что вы намеревались

...