Выявление методов - Система автоматизированного разделения кода прикладных программ

Из-за особенностей javaparser получать метод и необходимый к нему набор данных приходится в 2 этапа.

Как уже говорилось ранее, во многих случаях невозможно перейти от вершины, относящейся к внутренней части метода к самому методу. Также нет возможности поиска по набору выражений, чтобы узнать, присутствует ли там конструкция заданного типа.

Последовательный перебор всех конструкций в рамках одного метода возможен, однако выделить определенный тип выражения будет достаточно сложно. Пример сложной конструкции:

Int a= SomeClass. b + (++j) *o. CallSomeMethod(parameter);

Данная строчка содержит: бинарные выражения (операторы + и *), обращение к полю (SomeClass. b), Вызов метода (O. CallSomeMethod(parameter), унарное выражение (++j), объявление переменной (int a) и выражение присваивания (=).

Данная конструкция получит тип объявление переменной (VariableDeclarationExpr). Для того, чтобы получить выражение типа вызов метода (MethodCallExpr) Путем перебора всех выражений в рамках метода, необходимо будет переопределить методы visit для всех вышеназванных типов конструкций, а так как видов конструкций, частью которых может быть вызов метода достаточно много, то эффективнее будет разбить данный процесс на 2 более простых этапа. К тому же переопределение будет частично повторять возможности самого Javaparser.

В данном случае необходимо воспользоваться тем, что каждая вершина АСД хранит в себе номер начальной и номер завершающей строки. Так как АСД строится для единицы компиляции, то оба шага должны выполняться последовательно на Одном и том же Файле.

    1) Необходимо обойти все вершины типа "вызов метода". Если вызываемый метод принадлежит к методам из списка JDBC методов, то запоминается номер начальной строки. 2) Производится обход вершин "объявление метода" и "объявление класса". Если номер строки лежит в интервале [Номер_строки_начала_метода; номер_строки_завершения_метода], вершина "объявление метода", добавляется в список. Для классов такая же процедура.

Данная функциональность не может быть реализована в рамках одного класса, так как Javaparser обходит дерево в глубину.

В результате мы получаем списки методов, соответствующих им единиц компиляции, классов, все то, что необходимо для генерирования классов взаимодействия.

Похожие статьи




Выявление методов - Система автоматизированного разделения кода прикладных программ

Предыдущая | Следующая