- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在实现一个 ASTVisitor,当我访问一个 MethodInvocation 节点时,我想访问它对应的 MethodDeclaration 节点。以下示例显示了我需要的内容:
public boolean visit(MethodInvocation node){
MethodDeclaration mDeclaration = getMethodDeclaration( node );
}
我知道我可以先访问我的整个项目,将所有方法声明保存在一个映射中。然后,在第二个访问者中,我可以访问 MethodInvocation 节点并从第一个访问者生成的映射中获取其对应的 MethodDeclaration。但我想访问相应的 MethodDeclaration 节点,而不必多次访问整个项目。我怎样才能做到这一点?可能吗?
最佳答案
通过方法的绑定(bind)找到对应的编译单元,解析为另一个AST,从树中获取声明:
IMethodBinding binding = (IMethodBinding) node.getName().resolveBinding();
ICompilationUnit unit = (ICompilationUnit) binding.getJavaElement().getAncestor( IJavaElement.COMPILATION_UNIT );
if ( unit == null ) {
// not available, external declaration
}b
ASTParser parser = ASTParser.newParser( AST.JLS8 );
parser.setKind( ASTParser.K_COMPILATION_UNIT );
parser.setSource( unit );
parser.setResolveBindings( true );
CompilationUnit cu = (CompilationUnit) parser.createAST( null );
MethodDeclaration decl = (MethodDeclaration)cu.findDeclaringNode( binding.getKey() );
当然,这只适用于在 Eclipse 项目中声明该方法,而不是在外部 JAR 中。
您正在遍历的第一个 AST 也需要解析绑定(bind):ASTParser.setResolveBindings( true )
。
关于java - 在 JDT AST 中,如何从 MethodInvocation 节点检索 MethodDeclaration 节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27507895/
这是对 Programatically writing Java 的后续问题 我正在寻找 JDT 来构建一个独立的应用程序(不是 eclipse 插件)来以编程方式编写 JUnit 测试类。 我想知道
我正在尝试使用 JDT SearchEngine 查找对给定对象的引用。但是我在调用 org.eclipse.jdt.core.search.SearchEngine 的“搜索”方法时遇到“Nul
在Rational Software Archtect上安装AJDT 2.2.3之后,每个编辑器都会显示错误:插件org.eclipse.jdt.ui无法加载类org.eclipse.jdt.inte
以下明显不正确的代码(受 @dexter's answer to a question of mine 启发): Class[] exceptions; try { // some stuff
我在我的 adt eclipse 中遇到了这个错误。我正在使用更新版本的 java。请有人帮我解决这个问题。 最佳答案 我在 Eclipse 中发现了一次相同的错误。 这发生在我的 Windows 更
假设变量 i 的初始化如下: int i = 0; 我正在尝试检测简单的 java 变量更改,例如: i=i+1; 这可以使用带有 JDT 的访问者模式来完成,例如: public boolean v
我目前在使用 JDT Batch Compiler 时遇到问题.我的问题涉及在我上面发布的链接中概述的命令中指定源路径。我可以指定一个源路径,但不能指定多个。让我用一个简短的例子来解释: 假设我有两个
如何在没有 JDT 或其他插件的情况下获得 Eclipse,以便我可以安装 D Development Tools并为 D 制作一个 IDE? 最佳答案 Eclipse 项目下载站点 ( here f
我正在尝试编写一个插件,它将改变(更像是添加)当前 eclipse java 调试器的功能。有关我想要完成的详细信息,您可以查看此线程:Writing a custom eclipse debugge
我需要解析java方法,查看其内部的所有其他方法调用(以及它们内部和更深层次的等等),以便找到某个字符串的所有出现,比如说“System.out.println(“Blabla”) );" 我如何使用
我使用 JDT 来编译我的 java 类。 BatchCompiler 返回一个字符串,但我需要一系列问题/错误及其列和行信息。编译器.编译(单位);将错误打印到它的 printwriter,comp
如何在没有 Eclipse IDE 的情况下禁用(抑制)Eclipse jdt 编译器中不必要的转换警告?也许有任何编译选项? 最佳答案 转到:- Windows -> Preferences ->
我有一个访问者,它应该输出调用者类型、其名称、参数类型、方法声明中的相应类型,如果它是常量变量,则输出其值 public boolean visit(MethodInvocation e) {
例如,我有这样的代码 SomeObject1 obj1 = new SomeObject1(); SomeObject2 obj2 = new SomeObject2(); ... obj1.foo(
在eclipse中,有“调用层次结构”可以轻松找到调用图(或方法调用关系)。我想找一些API来提取这种关系。但是我找不到任何现有的教程来帮助我。有人能给我一些线索吗?主要是想知道应该使用JDT中的哪个
如何在 eclipse Juno (4.2) 中将方法入口断点设置为不可编辑(库)类的合成默认构造函数? 例如 public class Foo {} // can't change that co
我有一个 VariableDeclarationStatement,我通过访问 AST 保留了它。想在声明范围内找到对这个局部变量的所有引用。这包括当前范围内的嵌套 block 。 一种方法是访问下面
我正在使用 eclipse JDT,想知道是否有任何方法可以从命令行导入项目。对于 eclipse CDT, headless 构建应用程序可以达到目的,但我无法为 eclipse JDT 做到这一点
我想开发一个Java编辑器eclipse插件,它与普通的Java编辑器略有不同。是否可以扩展普通 Java 编辑器本身?提前致谢 最佳答案 在 Eclipse 中,您通常不会扩展(子类)编辑器(或其他
我正在创建一个实用程序来检测代码库中未使用的方法。通过使用下面的代码,我能够成功找到未使用的方法(没有引用)。但我还需要删除这些未使用的方法。如果可以通过 JDT,请告诉我。 // Get all t
我是一名优秀的程序员,十分优秀!