java - 使用 JDT 获取方法调用的起始位置和长度

标签 java eclipse eclipse-jdt

假设我有这个 Java 源代码。如何获取“extractedMethod(amount)”调用的起始位置和长度?

package smcho;

public class Extract {
String _name = "";

public int extractedMethod(int amount)
{
    ....
}

public int getValue(int amount) {
    if (amount > 10) {
    int z = extractedMethod(amount);
    return z;
    }
    ....
}

enter image description here

我可以使用 hexa 查看器来查找起始位置为 0x1FA,长度为 len("extracted(method)") == 17,但我想使用 JDT 以编程方式执行此操作。

一旦我可以获得 CompilationUnit,但我需要知道如何获取该 CompilationUnit 中的调用引用。

IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
IProject orig = root.getProject(this.projectName);
orig.open(pm);
javaProject = JavaCore.create(orig);
IType type = this.javaProject.findType(this.className);
ICompilationUnit unit = type.getCompilationUnit();
ASTParser parser = ASTParser.newParser(AST.JLS3);
parser.setSource(unit);
parser.setResolveBindings(true);
CompilationUnit cunit = (CompilationUnit) parser.createAST(null);

ASTNode root = parser.createAST(null);

root.accept(new ASTVisitor() {
    public bool visit(...)
});

最佳答案

您可以获取 ASTNode 的起始行号和长度,如下所示

int startLineNumber = compilationUnit.getLineNumber(node.getStartPosition()) - 1;
int nodeLength = node.getLength();
int endLineNumber = compilationUnit.getLineNumber(node.getStartPosition() + nodeLength) - 1;

请参阅以下帖子了解更多信息

关于java - 使用 JDT 获取方法调用的起始位置和长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14371526/

相关文章:

java - tomcat 显示 org.apache.catalina.LifecycleException

java - 如何使用代码将一个或多个包正确地 move 到java中的另一个包中

java - 寻找具有超过 1 个连通分量的邻接矩阵的最小生成树

Java线程中断并加入(加入后线程还活着)

java - 从动态壁纸读取倾斜传感器

eclipse - 有没有办法在 Eclipse 中手动折叠代码?

java - 如何在自定义 Eclipse 插件中访问默认的 JDT 完成建议?

java - 使用 Eclipse Code Formatter 在其自己的行上配置枚举常量

java - 沉浸式模式 Android Studio

java - 如何让JTextField失去焦点?