Заменить операторы Java методами в байт-коде с помощью javassist

Моя цель

Иметь возможность определять, когда во время выполнения выполняется сравнение (или любая другая операция, например, *, - , /, >, < ,...

Это должно быть достигнуто для редактирования байт-кода класса с помощью Javassist или ow2 ASM

Что должно быть достигнуто

Этот код

public class Test{

    public void m(){

        if(a>2){
        //blablabla         
        }

    }  

}

Должен стать

public class Test{

    public void m(){

        if(someExternalClass.greaterThan(a,2)){
            //blalbla           
    }

    }

}

GreaterThan вернет точно такой же результат, как '>', но также будет использоваться для сохранения количества сравнений. Затем внешний класс будет уведомляться каждый раз, когда производится сравнение.

Дополнительное примечание

Это должно быть сделано везде, где есть операция. Так что не только в операторах if.

Это означает, что

int a = c+d;

также должен стать

int a = someExternalClass.add(c,d);

Есть ли у вас какие-либо предложения о том, как я могу добиться этого с помощью Javassist или других библиотек.

Я предполагаю, что это как-то связано с опкодами, такими как IFLT, IFGT

6
задан tgoossens 9 April 2012 в 10:06
поделиться