Если вы хотите знать, какой конкретный метод mB (из всех названных «mB» в вашем огромном массиве классов) вызывается m1, вам нужно больше, чем просто AST. Вам нужна полная таблица символов, которая связывает каждое использование символа с возможными определениями, которые ему соответствуют.
Процесс вычисления такой таблицы символов сложен для многих языков и очень сложен для Java (но не так плохо, как для C ++). Кто-то должен кодировать правила поиска идентификатора перед лицом (локальных) областей, наследования, перегрузок, подразумеваемых приведений и т. Д., И справочное руководство по Java посвящает значительную часть своего содержания, пытаясь объяснить это. Вы не хотите делать это самостоятельно.
Что вам действительно нужно, так это полноценный внешний интерфейс Java, который имеет как AST, так и соответствующие таблицы символов для каждого метода, который вы хотите проверить. Я думаю, вы можете получить это из интерфейсов к компилятору Java (Sun?) (Я лично не знаю, как это сделать), из компилятора Jikes, из модуля Eclipse Java AST (?) И из таких инструментов, как как наш интерфейс Java . Другой подход заключается в обработке файлов классов, содержащих вызовы методов в форме JVM, с преимуществом, которое все инструкции JVM создали с помощью таблицы символов.
Если вы хотите вычислить вызовы m1, вызовы mA, вызовы mQ .... mZ, вам нужен инструмент, который готов читать всю базу исходного кода сразу. Компиляторы не сделают этого за вас, но вы можете использовать Eclipse или наш интерфейс для этого.