java-callgraph2
java-callgraph2 copied to clipboard
代码中使用接口的方法调用没有解析到对应的实现类的方法调用
源码如下:
interface User{
public String getName();
public void setName(String name);
public void sayHello();
}
class Student implements User{
private String name;
public String getName(){
return name;
}
public void setName(String cname){
name = cname;
}
private void secret(){
System.out.println("secret");
}
public void sayHello(){
System.out.println("hello, " + name);
secret();
}
}
public class UrlArgParser {
public static void main(String args[]){
User a = new Student();
a.setName("great");
a.sayHello();
}
}
生成的调用链如下:
C:StudentStudent
C:Student User
C:Student java.io.PrintStream
C:Student java.lang.StringBuilder
C:Student java.lang.System
M:1 Student:<init>() (O)java.lang.Object:<init>() 12 1
M:2 Student:secret() (M)java.io.PrintStream:println(java.lang.String) 22 1
M:3 Student:sayHello() (O)java.lang.StringBuilder:<init>() 26 1
M:4 Student:sayHello() (M)java.lang.StringBuilder:append(java.lang.String) 26 1
M:5 Student:sayHello() (M)java.lang.StringBuilder:append(java.lang.String) 26 1
M:6 Student:sayHello() (M)java.lang.StringBuilder:toString() 26 1
M:7 Student:sayHello() (M)java.io.PrintStream:println(java.lang.String) 26 1
M:8 Student:sayHello() (O)Student:secret() 27 1
C:UrlArgParser Student
C:UrlArgParser UrlArgParser
C:UrlArgParser User
M:9 UrlArgParser:<init>() (O)java.lang.Object:<init>() 30 1
M:10 UrlArgParser:main(java.lang.String[]) (O)Student:<init>() 35 1
M:11 UrlArgParser:main(java.lang.String[]) (I)User:setName(java.lang.String) 36 1
M:12 UrlArgParser:main(java.lang.String[]) (I)User:sayHello() 37 1
main中调用的User接口的sayHello方法未关联到Student实现类的sayHello方法
需要等下一个版本,对于上面的代码可以识别到被调用的类型是Student 现在的版本会识别到被调用类型是User,还会生成一条调用关系是User调用Student,这样会间接地关联起来