如何检查MethodDeclaration是否属于内部类

时间:2012-03-28 12:40:23

标签: eclipse abstract-syntax-tree eclipse-jdt

有没有办法使用JDT ASTParser,通过它我们可以识别方法声明是否在Anonymous内部类中?

我正在创建一个Eclipse插件来查找项目中未使用的公共方法。我在MethodDeclaration节点上使用ASTVisitor,然后使用JDT搜索。问题是,当遍历每个Java类时,我正在访问匿名内部类(如Listeners)的MethodDeclaration。我需要避免这些方法。

提前致谢。

2 个答案:

答案 0 :(得分:1)

如果CLASS_INSTANCE_CREATION是匿名类的节点类型,那应该可行。我不是Java专家;在我看来,有几种方法可以创建匿名类,因此您需要检查此节点类型是否涵盖了所有这些类。

...您的匿名侦听器(?)类是否必须继承/实现Listener接口?如果是这种情况,您应该能够爬到CLASS_INSTANCE_CREATION附近的树的一部分,这是继承/ implements子句,并检查它是否确实实现/继承了您的期望。要做到这一点,您需要全名和类型解析;仅仅因为接口名称拼写为“Listener”并不意味着它是你想要的那个

答案 1 :(得分:1)

最后我找到了解决方案。 ASTParser中有一个AnonymousClassDeclaration ASTNode,表示Java文件中的匿名内部类。在访问这些节点时,我们可以指定不需要完全访问这些节点(通过返回false)。

public boolean visit(AnonymousClassDeclaration classDeclarationStatement) {

        return false;

    }