- 236
- 4
- 22
Всем привет, опять у меня вопрос по этому долбаному ASM. Не очень уж давно спрашивал тут, как проверить есть ли определённый класс в цепочке классов-родителей трансформируемого класса, но ответ оказался нерабочим. (Тот самый пост) Я пробовал и полностью скопировать код, и "переиначить" под себя, не выходит. На текущий момент у меня есть такой метод:
Этот рекурсивный поиск ломается на 1 же этапе, выбрасывая NPE в try catch при попытке создать класс ридер класса-родителя, из-за чего я не могу идти "в глубину" для сбора полной цепочки родителей класса...
Гуглил в Интернете, как же правильно через ASM собрать цепочку родителей класса - ответы, примерно, такие же, как и этот код. Я вставлял System.out.println`ы для отладки - className, передаваемый в конструктор - не равен нулл. Он выглядит примерно так: "path/to/class/TestClass". Интересно также то, что точно такой же поиск обычно без проблем находит всю цепочку родителей, если запускать игру из IDEA через "жука", а вот на сервере - дело плохо. Помогите, пожалуйста!
Нерабочий поиск наследников:
private void findSuperClasses(String className, ArrayList<String> list) {
if(className == null) return;
ClassReader classReader;
try {
classReader = new ClassReader(className);
} catch(Throwable i) {
return;
}
var superName = classReader.getSuperName();
if(superName != null && !superName.equals("java/lang/Object")){
list.add(superName);
this.findSuperClasses(superName, list);
}
}
Запускаю этот поиск родителей так::
//в методе transform
var classNode = new ClassNode(); //loombok, если что
var classReader = new ClassReader(basicClass);
classReader.accept(classNode, 0);
ArrayList<String> l = new ArrayList<>();
this.findSuperClasses(classNode.name, l);
Гуглил в Интернете, как же правильно через ASM собрать цепочку родителей класса - ответы, примерно, такие же, как и этот код. Я вставлял System.out.println`ы для отладки - className, передаваемый в конструктор - не равен нулл. Он выглядит примерно так: "path/to/class/TestClass". Интересно также то, что точно такой же поиск обычно без проблем находит всю цепочку родителей, если запускать игру из IDEA через "жука", а вот на сервере - дело плохо. Помогите, пожалуйста!