Der RFC für eine Java-Klasse besteht aus allen Methoden, die als Reaktion auf eine Nachricht an ein Objekt der Klasse oder durch eine Methode in der Klasse aufgerufen werden können. RFC = M + R wo M = Anzahl der Methoden in der Klasse. R = Gesamtzahl der direkt vom M aufgerufenen MethodenAlgorithmus zur RFC-Berechnung in Java
Denken C ist die .class und J ist die .java-Datei, von der wir RFC berechnen müssen.
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(); } }
hier M = 6 und R = 9 (Keine Sorge in einer Schleife über Anruf. Dieser wird als einziger Aufruf betrachtet wird)
Berechnung M ist einfach. Laden Sie C mit dem Classloader und verwenden Sie reflection, um die Anzahl der Methoden zu ermitteln.
Berechnung von R ist nicht direkt. Wir müssen die Anzahl der Methodenaufrufe von der Klasse zählen. Nur erste Ebene.
Für die Berechnung von R muss ich Regex verwenden. Normalerweise würde Format (Anrufe ohne Verwendung. Werden nicht gezählt) sein
[variable_name].[method_name]([zero or more parameters]);
oder
[variable_name].[method_name]([zero or more parameters])
mit aus Semikolon, wenn der Anruf Rückkehr wird direkt Parameter an eine andere Methode. oder
[variable_name].[method_name]([zero or more parameters]).method2();
wird dies zwei Methodenaufrufe
Was andere Muster des Methodenaufruf können Sie sich vorstellen? Gibt es eine andere Art und Weise andere als RegEx verwenden, die verwendet werden können, R. zu berechnen
UPDATE:
@McDowell Sieht aus wie BCEL ich mit dem gesamten Prozess vereinfachen kann. Lass mich es versuchen.