rfc メトリック (クラスの応答) をコーディングしようとしています。メソッド宣言 + メソッド呼び出しがカウントされます。
メソッド宣言は正常に機能しますが、JavaParser API を使用してメソッド呼び出しをカウントする際に問題が発生しました。
これが私のコードです:
public class MethodPrinter {
public static void main(String[] args) throws Exception {
// creates an input stream for the file to be parsed
FileInputStream in = new FileInputStream("D://test.java");
CompilationUnit cu;
try {
// parse the file
cu = JavaParser.parse(in);
} finally {
in.close();
}
// visit and print the methods names
MethodVisitor MV =new MethodVisitor();
cu.accept(new VoidVisitorAdapter<Void>(){
@Override
public void visit(final MethodCallExpr n, final Void arg){
System.out.println("method call :"+n);
super.visit(n, arg);
}
}, null);
}
}
test.java
package test;
import java.util.*;
public class ClassA
{
private int test;
private ClassB classB = new ClassB();
public void doSomething(int t){
System.out.println ( toString());
int i= doSomethingBasedOnClassBBV(classB.toString());
}
protected void doSomethingBasedOnClassB(){
System.out.println (classB.toString());
}
}
public class ClassB
{
private ClassA classA = new ClassA();
public void doSomethingBasedOneClassA(){
System.out.println (classA.toString());
}
private String toString(){
return "classB";
}
private String toString(){
return "classB";
}
public void doSomethingBasedOneClassA(){
System.out.println (classA.toString());
}
protected void doSomethingBasedOnClassB(){
System.out.println (classB.toString());
}
}
そのコードの結果:
*method call :System.out.println(toString())
method call :toString()
method call :doSomethingBasedOnClassBBV(classB.toString())
method call :classB.toString()
method call :System.out.println(classB.toString())
method call :classB.toString()
method call :System.out.println(classA.toString())
method call :classA.toString()
method call :System.out.println(classA.toString())
method call :classA.toString()
method call :System.out.println(classB.toString())
method call :classB.toString()*
確かに、そのコードはメソッド呼び出しを検査しますが、私の場合、 System.out.println のようなライブラリ メソッド呼び出しをカウントしたくありませ(toString())
んtoString()
。
より良いコード、または使用する別の API を入手した場合...どんな助けも歓迎します。事前に感謝します。