RFC для Java-класса - это набор всех методов, которые могут быть вызваны в ответ на сообщение объекту класса или некоторым методом в классе. RFC = M + R где M = Количество методов в классе. R = Общее количество других методов, непосредственно вызываемых из M.Алгоритм для выполнения расчета RFC в Java
Мышление C является .class, а J - это .java-файл, который нам нужно рассчитать RFC.
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(); } }
здесь М = 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 я могу упростить весь процесс. Позвольте мне попробовать.