xref: /aosp_15_r20/external/javassist/sample/Test.java (revision f1fbf3c2ab775ce834e0af96b7a85bdc7a0eac65)
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