Java类的RFC是可以响应消息传递到类的对象或通过类中的某种方法调用的所有方法的集合。 RFC = M + R其中 M =类中方法的数量。 R =从M直接调用的其他方法的总数。在Java中执行RFC计算的算法
Thinking C是.class,J是我们需要计算RFC的.java文件。
class J{ a(){} b(){} c(){ e1.e(); e1.f(); e1.g(); } h(){ i.k(); i.j(); } m(){} n(){ i.o(); i.p(); i.p(); i.p(); } }
这里M = 6 和R = 9(不要担心在一个循环中调用。它被认为是一个单一的呼叫)
计算M是容易的。使用类加载器加载C并使用反射来获取方法的数量。
计算R不是直接的。我们需要计算该类的方法调用次数。仅限第一级。
对于计算R我必须使用正则表达式。一般格式将是(不使用电话。不计算在内)
[variable_name].[method_name]([zero or more parameters]);
或
[variable_name].[method_name]([zero or more parameters])
与出分号时调用的返回是直接成为参数的另一方法。 或
[variable_name].[method_name]([zero or more parameters]).method2();
这变成了两个方法调用
你能想到的是什么方法调用的其他模式?是否有可用于计算R.
比使用正则表达式等任何其他方式UPDATE:
@McDowell 看起来像使用BCEL我可以简化整个过程。让我试试看。