Вопрос
Как мне переименовать вещи, используя BEL? Пока что я делаю, это проходить через каждый метод в классе и создать новую постоянную намандюпющую константу в постоянном бассейне, то я заменил старую постоянную Наменюндыпэ на этом
int nameRef = cpg.addNameAndType(newName, m.getSignature());
cpg.setConstant(m.getNameIndex(), cpg.getConstant(nameRef));
Похоже, это должно работать, но мой декомпилятор говорит мне, что постоянный бассейн коррумпирован после этого. Я упускаю шаг или что-то?
Решение
Вы предполагаете, что ConstantPoolGen
это просто таблица показателей и ценностей. Но я верю, что на самом деле он имеет гораздо более сложную внутреннюю структуру. Глядя на то ConstantPoolGen
Метод, ясно, что он также имеет ссылки на MethodGen
Объекты, которые могут или не обновляться, когда вы запускаете свой код.
Я советую вам не манипулировать постоянным пулом напрямую, но чтобы получить каждый метод класса (как MethodGen
объект) и используйте метод setName()
. Отказ Постоянный пул будет обновлен автоматически.