gpt4 book ai didi

java - 如何使用 SPOON API 创建调用图

转载 作者:行者123 更新时间:2023-12-01 21:08:23 25 4
gpt4 key购买 nike

如果有人使用 SPOON API,您能给我一些如何创建调用图以及我需要做什么的线索吗?

我认为我需要创建一些像这样的处理器:

public class InvocationProcessor extends AbstractProcessor<CtInvocation> {
@Override
public void process(CtInvocation element) {
System.out.println(element.getActualTypeArguments());
}
}

然后使用Launcher进行运行分析

public void getCallers(){

final Launcher launcher = new Launcher();
launcher.setArgs("-i D:\\IntelliJ_projects\\ComprehensionTool\\ -p comprehensionTool.analyse.processor.InvocationProcessor".split(" "));
launcher.run();
}

但我不确定......我想问一下使用Launcher是否需要一些特殊的依赖项?

我认为我错了,因为当我执行它时,会抛出此错误:

Exception in thread "main" java.lang.NoSuchMethodError: org.eclipse.jdt.internal.compiler.batch.Main.<init>(Ljava/io/PrintWriter;Ljava/io/PrintWriter;ZLjava/util/Map;Lorg/eclipse/jdt/core/compiler/CompilationProgress;)V
at spoon.support.compiler.jdt.JDTBatchCompiler.<init>(JDTBatchCompiler.java:58)
at spoon.support.compiler.jdt.JDTBatchCompiler.<init>(JDTBatchCompiler.java:54)
at spoon.support.compiler.jdt.JDTBasedSpoonCompiler.createBatchCompiler(JDTBasedSpoonCompiler.java:352)
at spoon.support.compiler.jdt.JDTBasedSpoonCompiler.createBatchCompiler(JDTBasedSpoonCompiler.java:356)
at spoon.support.compiler.jdt.JDTBasedSpoonCompiler.buildUnits(JDTBasedSpoonCompiler.java:388)
at spoon.support.compiler.jdt.JDTBasedSpoonCompiler.buildUnitsAndModel(JDTBasedSpoonCompiler.java:372)
at spoon.support.compiler.jdt.JDTBasedSpoonCompiler.buildSources(JDTBasedSpoonCompiler.java:348)
at spoon.support.compiler.jdt.JDTBasedSpoonCompiler.build(JDTBasedSpoonCompiler.java:119)
at spoon.support.compiler.jdt.JDTBasedSpoonCompiler.build(JDTBasedSpoonCompiler.java:102)
at spoon.Launcher.buildModel(Launcher.java:700)
at spoon.Launcher.run(Launcher.java:651)

最佳答案

您需要 eclipse JDT 的依赖项,我们正在使用这个:

<dependency>
<groupId>org.eclipse.tycho</groupId>
<artifactId>org.eclipse.jdt.core</artifactId>
<version>3.12.0.v20160516-2131</version>
</dependency>

您启动 Spoon 的方式似乎不错,但是您的处理器将遍历整个模型并打印调用类型:它不遵循调用。创建调用图并不那么容易:您必须首先获得起点(例如方法),然后跟踪调用。

获取起点很容易:查看 Spoon documentation ,但是您需要手动遍历调用图来构建它。

关于java - 如何使用 SPOON API 创建调用图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41895303/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com