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

Eclipse 如何检查MethodDeclaration是否属于内部类,eclipse,abstract-syntax-tree,eclipse-jdt,Eclipse,Abstract Syntax Tree,Eclipse Jdt,使用JDT ASTParser是否有任何方法可以识别方法声明是否在匿名内部类中 我正在创建一个Eclipse插件来查找项目中未使用的公共方法。我在MethodDeclaration节点上使用ASTVisitor,然后使用JDT搜索。问题是,在遍历每个Java类时,我访问的是匿名内部类(如侦听器)的MethodDeclaration。我需要避免这些方法 提前感谢。如果类\u实例\u创建是匿名类的节点类型,那么应该可以工作。我不是Java专家;在我看来,有几种方法可以创建匿名类,所以您需要检查这个节

使用JDT ASTParser是否有任何方法可以识别方法声明是否在匿名内部类中

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


提前感谢。

如果类\u实例\u创建是匿名类的节点类型,那么应该可以工作。我不是Java专家;在我看来,有几种方法可以创建匿名类,所以您需要检查这个节点类型是否涵盖了所有这些方法


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

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


如果那个匿名类使用了一个方法呢?如果你看不到这一点,你可能会认为这种方法已经过时了。我认为您不想跳过内部类。我不会将内部类移出搜索范围。事实上,我正在遍历这个项目,得到符合某些命名标准的java文件。然后我使用ASTParser解析这些文件,并列出公共方法。然后以整个工作区为范围,对每个方法执行引用搜索。我的要求是,我不需要对内部类中的方法执行引用搜索,因为我使用的文件只有ActionListeners、SelectionListeners等作为内部类。我可以通过使用:
node.getParent().getParent().getNodeType()来确定该方法是否对应于内部类==ASTNode.CLASS\u实例\u创建
。但不确定这是否在所有情况下都有效。我还没找到答案。。。。。。我不知道什么是倾听者;你似乎认为这是某种特殊的内部阶级。但是,如果您想避免这些(而不是非侦听器的匿名类),则需要对“侦听器”进行额外检查。因为我不知道你是怎么认出它的,所以我不能提供任何关于如何检查它的建议。谢谢巴克斯特的回复。对于您的信息,侦听器是一个界面,它侦听某些用户事件,如选择、鼠标单击等。在我的代码中,我使用这些侦听器通过实例化侦听器并实现其方法来捕获用户输入。事实上,我假设CLASS_INSTANCE_CREATION是类实例化的类型。但是由于我需要避免的方法在这个实例化的内部类中,所以我能够跟踪它。虽然我觉得这很好,但我相信这不是一个通用的方法,也不会在所有情况下都有效。我不会直接实现这个接口。我实例化已经实现了这个接口的类,并重写其中的方法。但是正如您所回答的,我仍然需要找出匿名类是否继承了侦听器。
public boolean visit(AnonymousClassDeclaration classDeclarationStatement) {

        return false;

    }