Java 类的 RFC 包含所有方法,这些方法可以响应类对象的消息或类中的某些方法调用。RFC = M + R 其中 M = 类中的方法数。R = 从 M 中直接调用的其他方法的总数。
认为 C 是 .class 而 J 是我们需要计算 RFC 的 .java 文件。
J类{ 一种(){} b(){} C(){ e1.e(); e1.f(); e1.g(); } H(){ 我知道(); ij(); } m(){} n(){ io(); ip(); ip(); ip(); } }
这里 M=6 和 R=9 (不要担心循环内的调用。它被认为是单个调用)
计算 M 很容易。使用类加载器加载 C 并使用反射来获取方法的计数。
计算 R 不是直接的。我们需要计算类的方法调用次数。仅限第一级。
计算 RI 必须使用正则表达式。通常格式是(不使用 . 的调用不计算在内)
[variable_name].[method_name]([零个或多个参数]);
或者
[variable_name].[method_name]([零个或多个参数])
当调用返回直接成为另一个方法的参数时,没有分号。或者
[variable_name].[method_name]([零个或多个参数]).method2();
这变成了两个方法调用
你还能想到什么其他的方法调用模式?除了使用 RegEx 之外,还有其他方法可以用来计算 R。
更新:
@McDowell
看起来使用 BCEL 我可以简化整个过程。让我试试。