- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想要做的是获取方法的类名。例如,我想获得一类“直到”和“搜索”方法。这是代码。
Query query = new Query(queryStr).until(dateStr);
QueryResult queryResult = twitter1.search(query);
从这些示例中,预期结果是 Query.until 和 SearchResource.search。但是当我使用下面的代码时,我只得到了 until 和 search,没有类名。如果我使用 MethodInitation.getExpression(),我可以获得实例的名称:new Query(queryStr) 和 twitter1。但它们并不是我真正想要的。
ASTParser parser = ASTParser.newParser(AST.JLS3);
parser.setSource(str.toCharArray());
parser.setKind(ASTParser.K_COMPILATION_UNIT);
parser.setResolveBindings(true);
final CompilationUnit cu = (CompilationUnit) parser.createAST(null);
cu.accept(new ASTVisitor() {
public boolean visit(MethodDeclaration node){
System.out.println("Declaration of '"+node.getName()+"' at line"
+ cu.getLineNumber(node.getStartPosition()));
if (node.getName().toString().equals("testSearch")){
Block block =node.getBody();
block.accept(new ASTVisitor() {
public boolean visit(MethodInvocation node) {
//System.out.println(node.getExpression());
System.out.println("Name: " + node.getName());
return true;
}
});
}
return true;
}
最佳答案
类似于 java - VariableDeclarationFragment node resolveBindind() returns null in eclipse/jdt/ast - Stack Overflow或者 java - bindings not resolving with AST processing in eclipse - Stack Overflow
这是一个 RCP headless 应用程序的简单示例。(使用 Java 项目“JavaProject”,其中包含类 Query、QueryResult、SearchResult 作为虚拟)
package test;
import org.eclipse.jdt.core.dom.AST;
import org.eclipse.jdt.core.dom.ASTParser;
import org.eclipse.jdt.core.dom.ASTVisitor;
import org.eclipse.jdt.core.dom.Block;
import org.eclipse.jdt.core.dom.CompilationUnit;
import org.eclipse.jdt.core.dom.Expression;
import org.eclipse.jdt.core.dom.IMethodBinding;
import org.eclipse.jdt.core.dom.ITypeBinding;
import org.eclipse.jdt.core.dom.MethodDeclaration;
import org.eclipse.jdt.core.dom.MethodInvocation;
public class Test {
String str = "package javaproject;" // package for all classes
+ "class Dummy {" //
+ " void testSearch(String queryStr, String dateStr, SearchResources twitter1) {" //
+ " Query query = new Query(queryStr).until(dateStr);" //
+ " QueryResult queryResult = twitter1.search(query);" //
+ " }" //
+ "}";
public void testrun() {
ASTParser parser = ASTParser.newParser(AST.JLS4);
parser.setSource(str.toCharArray());
parser.setKind(ASTParser.K_COMPILATION_UNIT);
parser.setResolveBindings(true);
parser.setEnvironment( // apply classpath
new String[] { "C:\\eclipse\\workspace\\JavaProject\\bin" }, //
null, null, true);
parser.setUnitName("any_name");
final CompilationUnit cu = (CompilationUnit) parser.createAST(null);
cu.accept(new ASTVisitor() {
public boolean visit(MethodDeclaration node) {
if (node.getName().getIdentifier().equals("testSearch")) {
Block block = node.getBody();
block.accept(new ASTVisitor() {
public boolean visit(MethodInvocation node) {
System.out.println("Name: " + node.getName());
Expression expression = node.getExpression();
if (expression != null) {
System.out.println("Expr: " + expression.toString());
ITypeBinding typeBinding = expression.resolveTypeBinding();
if (typeBinding != null) {
System.out.println("Type: " + typeBinding.getName());
}
}
IMethodBinding binding = node.resolveMethodBinding();
if (binding != null) {
ITypeBinding type = binding.getDeclaringClass();
if (type != null) {
System.out.println("Decl: " + type.getName());
}
}
return true;
}
});
}
return true;
}
});
}
}
关于java - 如何使用 Eclipse JDT ASTParser 获取方法的类名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18939857/
这是对 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
我是一名优秀的程序员,十分优秀!