1*f1fbf3c2SXin Li package sample; 2*f1fbf3c2SXin Li 3*f1fbf3c2SXin Li import javassist.*; 4*f1fbf3c2SXin Li 5*f1fbf3c2SXin Li /* 6*f1fbf3c2SXin Li A very simple sample program 7*f1fbf3c2SXin Li 8*f1fbf3c2SXin Li This program overwrites sample/Test.class (the class file of this 9*f1fbf3c2SXin Li class itself) for adding a method g(). If the method g() is not 10*f1fbf3c2SXin Li defined in class Test, then this program adds a copy of 11*f1fbf3c2SXin Li f() to the class Test with name g(). Otherwise, this program does 12*f1fbf3c2SXin Li not modify sample/Test.class at all. 13*f1fbf3c2SXin Li 14*f1fbf3c2SXin Li To see the modified class definition, execute: 15*f1fbf3c2SXin Li 16*f1fbf3c2SXin Li % javap sample.Test 17*f1fbf3c2SXin Li 18*f1fbf3c2SXin Li after running this program. 19*f1fbf3c2SXin Li */ 20*f1fbf3c2SXin Li public class Test { f(int i)21*f1fbf3c2SXin Li public int f(int i) { 22*f1fbf3c2SXin Li return i + 1; 23*f1fbf3c2SXin Li } 24*f1fbf3c2SXin Li main(String[] args)25*f1fbf3c2SXin Li public static void main(String[] args) throws Exception { 26*f1fbf3c2SXin Li ClassPool pool = ClassPool.getDefault(); 27*f1fbf3c2SXin Li 28*f1fbf3c2SXin Li CtClass cc = pool.get("sample.Test"); 29*f1fbf3c2SXin Li try { 30*f1fbf3c2SXin Li cc.getDeclaredMethod("g"); 31*f1fbf3c2SXin Li System.out.println("g() is already defined in sample.Test."); 32*f1fbf3c2SXin Li } 33*f1fbf3c2SXin Li catch (NotFoundException e) { 34*f1fbf3c2SXin Li /* getDeclaredMethod() throws an exception if g() 35*f1fbf3c2SXin Li * is not defined in sample.Test. 36*f1fbf3c2SXin Li */ 37*f1fbf3c2SXin Li CtMethod fMethod = cc.getDeclaredMethod("f"); 38*f1fbf3c2SXin Li CtMethod gMethod = CtNewMethod.copy(fMethod, "g", cc, null); 39*f1fbf3c2SXin Li cc.addMethod(gMethod); 40*f1fbf3c2SXin Li cc.writeFile(); // update the class file 41*f1fbf3c2SXin Li System.out.println("g() was added."); 42*f1fbf3c2SXin Li } 43*f1fbf3c2SXin Li } 44*f1fbf3c2SXin Li } 45