Я не могу просто заменить весь метод.Мне нужно просто ввести переназначение локальной переменной после того, как она в последний раз была установлена, но до того, как она будет использована ближе к концу метода.
Вот некоторый псевдокод
void test() {
/* stuff */
String thing = null;
if (case1) {
thing = "case1"
}
if (case2) {
thing = "case2"
}
if (case3) {
thing = "case3"
}
if (thing == null) {
thing = "default";
}
/* I want to insert this code below with ASM */
thing = "Injected by ASM";
/* stuff */
}
Iможет также просто заменить присвоение по умолчанию, когда код достигает той точки, где он проверяет, если thing == null
.Но байт-код для назначения по умолчанию довольно длинный StringBuilder
с большим количеством добавлений.Есть LDC, который я могу использовать, чтобы однозначно идентифицировать это, но в строке я не знаю, как заменить все назначение thing
для этой строки.Я знаю только, как заменить LDC (чего недостаточно).
Идея в том, что я хочу игнорировать все case1-3
, чтобы thing
всегда было тем, что я говорю ASM, чтобы установить его как
Но /* stuff */
вверху и внизу метода нельзя удалить