java-callgraph-spoon,使用静态分析工具spoon构造方法调用图callgraph ,源代码方法级别

java-callgraph-spoon,使用静态分析工具spoon构造方法调用图callgraph ,源代码方法级别

项目开源可访问:https://github.com/nhjclxc/java-callgraph-spoon.git

函数调用图call graph,用节点vertex表示过程,用边edge表示过程之间的调用关系

使用dot格式语言表示图结构
build.dot

digraph "org.nhjclxc.cg.SpoonCGProcessor.build(java.lang.String)" {
"org.nhjclxc.cg.SpoonCGProcessor.build(java.lang.String)" -> "spoon.Launcher()";

"org.nhjclxc.cg.SpoonCGProcessor.build(java.lang.String)" -> "spoon.Launcher.addInputResource(java.lang.String)";

"org.nhjclxc.cg.SpoonCGProcessor.build(java.lang.String)" -> "spoon.Launcher.addProcessor(spoon.processing.Processor)";

"org.nhjclxc.cg.SpoonCGProcessor.build(java.lang.String)" -> "spoon.Launcher.run()";

"org.nhjclxc.cg.SpoonCGVisitor.getSpoonCGNodeMap()" -> "java.util.Collection.removeIf(java.util.function.Predicate)";

"org.nhjclxc.cg.SpoonCGVisitor.getSpoonCGNodeMap()" -> "java.util.Map.entrySet()";

"org.nhjclxc.cg.SpoonCGVisitor.getSpoonCGNodeMap()" -> "java.util.Set.contains(java.lang.Object)";

"org.nhjclxc.cg.SpoonCGVisitor.getSpoonCGNodeMap()" -> "java.util.Map$Entry.getKey()";

"org.nhjclxc.cg.SpoonCGProcessor.build(java.lang.String)" -> "org.nhjclxc.cg.SpoonCGVisitor.getSpoonCGNodeMap()";

"org.nhjclxc.cg.FileUtils.toDot(java.util.Map)" -> "java.util.HashMap()";

"org.nhjclxc.cg.FileUtils.toDot(java.util.Map)" -> "java.util.Map.entrySet()";

"org.nhjclxc.cg.FileUtils.toDot(java.util.Map)" -> "java.util.Map$Entry.getKey()";

"org.nhjclxc.cg.FileUtils.toDot(java.util.Map)" -> "java.util.Map$Entry.getValue()";

"org.nhjclxc.cg.FileUtils.toDot(java.util.Map)" -> "java.lang.StringBuilder(java.lang.String)";

"org.nhjclxc.cg.FileUtils.toDot(java.util.Map)" -> "java.util.LinkedList()";

"org.nhjclxc.cg.FileUtils.buildEdges(org.nhjclxc.cg.SpoonCGNode,java.util.List)" -> "org.nhjclxc.cg.SpoonCGNode.getSpoonCGDotList()";

"org.nhjclxc.cg.FileUtils.buildEdges(org.nhjclxc.cg.SpoonCGNode,java.util.List)" -> "java.util.List.size()";

"org.nhjclxc.cg.FileUtils.buildEdges(org.nhjclxc.cg.SpoonCGNode,java.util.List)" -> "org.nhjclxc.cg.SpoonCGNode.getMethodQualifiedName()";

"org.nhjclxc.cg.FileUtils.buildEdges(org.nhjclxc.cg.SpoonCGNode,java.util.List)" -> "org.nhjclxc.cg.SpoonCGNode.getMethodQualifiedName()";

"org.nhjclxc.cg.FileUtils.buildEdges(org.nhjclxc.cg.SpoonCGNode,java.util.List)" -> "org.nhjclxc.cg.FileUtils.buildEdges(org.nhjclxc.cg.SpoonCGNode,java.util.List)";

"org.nhjclxc.cg.FileUtils.buildEdges(org.nhjclxc.cg.SpoonCGNode,java.util.List)" -> "java.util.List.add(java.lang.Object)";

"org.nhjclxc.cg.FileUtils.toDot(java.util.Map)" -> "org.nhjclxc.cg.FileUtils.buildEdges(org.nhjclxc.cg.SpoonCGNode,java.util.List)";

"org.nhjclxc.cg.FileUtils.toDot(java.util.Map)" -> "java.util.List.size()";

"org.nhjclxc.cg.FileUtils.toDot(java.util.Map)" -> "java.lang.StringBuilder.append(java.lang.String)";

"org.nhjclxc.cg.FileUtils.toDot(java.util.Map)" -> "java.lang.StringBuilder.append(java.lang.String)";

"org.nhjclxc.cg.FileUtils.toDot(java.util.Map)" -> "java.util.Map.put(java.lang.Object,java.lang.Object)";

"org.nhjclxc.cg.FileUtils.toDot(java.util.Map)" -> "java.lang.String.valueOf(java.lang.Object)";

"org.nhjclxc.cg.FileUtils.writeDotFile(java.lang.String,java.util.Map)" -> "org.nhjclxc.cg.FileUtils.toDot(java.util.Map)";

"org.nhjclxc.cg.FileUtils.writeDotFile(java.lang.String,java.util.Map)" -> "java.util.Map.entrySet()";

"org.nhjclxc.cg.FileUtils.writeDotFile(java.lang.String,java.util.Map)" -> "java.util.Map$Entry.getKey()";

"org.nhjclxc.cg.FileUtils.writeDotFile(java.lang.String,java.util.Map)" -> "java.util.Map$Entry.getValue()";

"org.nhjclxc.cg.FileUtils.write(java.lang.String,java.lang.String)" -> "java.io.File(java.lang.String)";

"org.nhjclxc.cg.FileUtils.write(java.lang.String,java.lang.String)" -> "java.io.File.getParentFile()";

"org.nhjclxc.cg.FileUtils.write(java.lang.String,java.lang.String)" -> "java.io.File.exists()";

"org.nhjclxc.cg.FileUtils.write(java.lang.String,java.lang.String)" -> "java.io.File.mkdirs()";

"org.nhjclxc.cg.FileUtils.write(java.lang.String,java.lang.String)" -> "java.io.FileWriter(java.io.File)";

"org.nhjclxc.cg.FileUtils.write(java.lang.String,java.lang.String)" -> "java.io.Writer.write(java.lang.String)";

"org.nhjclxc.cg.FileUtils.write(java.lang.String,java.lang.String)" -> "java.io.OutputStreamWriter.flush()";

"org.nhjclxc.cg.FileUtils.write(java.lang.String,java.lang.String)" -> "java.io.OutputStreamWriter.close()";

"org.nhjclxc.cg.FileUtils.write(java.lang.String,java.lang.String)" -> "java.lang.RuntimeException(java.lang.Throwable)";

"org.nhjclxc.cg.FileUtils.writeDotFile(java.lang.String,java.util.Map)" -> "org.nhjclxc.cg.FileUtils.write(java.lang.String,java.lang.String)";

"org.nhjclxc.cg.FileUtils.getFilePath(java.lang.String)" -> "java.util.regex.Pattern.matcher(java.lang.CharSequence)";

"org.nhjclxc.cg.FileUtils.getFilePath(java.lang.String)" -> "java.util.regex.Pattern.compile(java.lang.String)";

"org.nhjclxc.cg.FileUtils.getFilePath(java.lang.String)" -> "java.util.regex.Matcher.find()";

"org.nhjclxc.cg.FileUtils.getFilePath(java.lang.String)" -> "java.util.regex.Matcher.group(int)";

"org.nhjclxc.cg.FileUtils.getFilePath(java.lang.String)" -> "java.lang.System.currentTimeMillis()";

"org.nhjclxc.cg.FileUtils.getFilePath(java.lang.String)" -> "java.lang.String.replaceAll(java.lang.String,java.lang.String)";

"org.nhjclxc.cg.FileUtils.writeDotFile(java.lang.String,java.util.Map)" -> "org.nhjclxc.cg.FileUtils.getFilePath(java.lang.String)";

"org.nhjclxc.graphviz.GraphvizAssistant.getFilePathPerfix(java.lang.String)" -> "java.lang.String.lastIndexOf(java.lang.String)";

"org.nhjclxc.graphviz.GraphvizAssistant.getFilePathPerfix(java.lang.String)" -> "java.lang.String.substring(int,int)";

"org.nhjclxc.graphviz.GraphvizAssistant.createImage(java.io.File,java.lang.String,java.lang.String)" -> "org.nhjclxc.graphviz.GraphvizAssistant.getFilePathPerfix(java.lang.String)";

"org.nhjclxc.graphviz.GraphvizAssistant.createImage(java.io.File,java.lang.String,java.lang.String)" -> "java.io.File.getAbsolutePath()";

"org.nhjclxc.graphviz.GraphvizAssistant.createImage(java.io.File,java.lang.String,java.lang.String)" -> "java.io.File(java.lang.String)";

"org.nhjclxc.graphviz.GraphvizAssistant.createImage(java.io.File,java.lang.String,java.lang.String)" -> "java.lang.Runtime.getRuntime()";

"org.nhjclxc.graphviz.GraphvizAssistant.createImage(java.io.File,java.lang.String,java.lang.String)" -> "java.io.File.getAbsolutePath()";

"org.nhjclxc.graphviz.GraphvizAssistant.createImage(java.io.File,java.lang.String,java.lang.String)" -> "java.io.File.getAbsolutePath()";

"org.nhjclxc.graphviz.GraphvizAssistant.createImage(java.io.File,java.lang.String,java.lang.String)" -> "java.lang.Runtime.exec(java.lang.String[])";

"org.nhjclxc.graphviz.GraphvizAssistant.createImage(java.io.File,java.lang.String,java.lang.String)" -> "java.lang.Process.waitFor()";

"org.nhjclxc.graphviz.GraphvizAssistant.createImage(java.io.File,java.lang.String,java.lang.String)" -> "java.lang.Throwable.printStackTrace()";

"org.nhjclxc.cg.FileUtils.writeDotFile(java.lang.String,java.util.Map)" -> "org.nhjclxc.graphviz.GraphvizAssistant.createImage(java.io.File,java.lang.String,java.lang.String)";

"org.nhjclxc.cg.SpoonCGProcessor.build(java.lang.String)" -> "org.nhjclxc.cg.FileUtils.writeDotFile(java.lang.String,java.util.Map)";

"org.nhjclxc.cg.SpoonCGProcessor.build(java.lang.String)" -> "java.io.PrintStream.println(java.lang.String)";

"org.nhjclxc.cg.SpoonCGProcessor.build(java.lang.String)" -> "java.io.PrintStream.println(java.lang.String)";

"org.nhjclxc.cg.SpoonCGProcessor.build(java.lang.String)" -> "java.io.PrintStream.println(java.lang.String)";

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值