有没有办法使用JDT ASTParser,通过它我们可以识别方法声明是否在Anonymous内部类中?
我正在创建一个Eclipse插件来查找项目中未使用的公共方法。我在MethodDeclaration节点上使用ASTVisitor,然后使用JDT搜索。问题是,当遍历每个Java类时,我正在访问匿名内部类(如Listeners)的MethodDeclaration。我需要避免这些方法。
提前致谢。
答案 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;
}