Я пытаюсь использовать API дерева байт-кода ASM для статического анализа кода Java. У меня есть ClassNode cn, MethodNode m, и список инструкций в этом методе называется InsnList list.
Предположим, что для заданной инструкции (например, AbstractInsnNode) s мне нужно найти все определения/назначения переменной в s в приведенном выше списке инструкций. Чтобы было понятнее, предположим, что переменная var определена и инициализирована в строке 2, затем ей присвоено какое-то другое значение в строке номер 8, а затем она используется в строке номер 12. Строка номер 12 — это моя s в данном случае. Кроме того, предположим, что в строках между ними много условного кода.
Возможно ли это сделать с помощью ASM? Как??
Спасибо и С уважением, SJ
Для ясности,
public void funcToAnalyze(String k, SomeClass v) {
int numIter = 0;
/*
Do cool stuff here.... modifies member variables and passed params too
*/
if (v.rank > 1 || numIter>200) {
magicFunction(k, 1);
}
}
Здесь предположим, что условное выражение — это JumpInsnNode (текущая инструкция), и мне нужно выяснить, изменяются ли (и где) какие-либо переменные в условном выражении (в данном случае v.rank и numIter) или присваиваются ли они где-нибудь в приведенном выше коде. Будьте проще, просто переменные-члены (без статической функции или делегирования функции другого класса).