aboutsummaryrefslogtreecommitdiffstats
path: root/src/test/javassist/bytecode/InsertGap0.java
diff options
context:
space:
mode:
authorchiba <chiba@30ef5769-5b8d-40dd-aea6-55b5d6557bb3>2011-08-31 10:29:34 +0000
committerchiba <chiba@30ef5769-5b8d-40dd-aea6-55b5d6557bb3>2011-08-31 10:29:34 +0000
commitd72870bfb6b09927e10944bdd129ce18dfcf7366 (patch)
tree27f56e4d1523a8cecc8976df60155e6b8429e504 /src/test/javassist/bytecode/InsertGap0.java
parent76a1cba9c433e8242bb6648e72b3ed43c7a4995a (diff)
downloadjavassist-d72870bfb6b09927e10944bdd129ce18dfcf7366.tar.gz
javassist-d72870bfb6b09927e10944bdd129ce18dfcf7366.zip
JvstTest test case.
git-svn-id: http://anonsvn.jboss.org/repos/javassist/trunk@589 30ef5769-5b8d-40dd-aea6-55b5d6557bb3
Diffstat (limited to 'src/test/javassist/bytecode/InsertGap0.java')
-rw-r--r--src/test/javassist/bytecode/InsertGap0.java228
1 files changed, 228 insertions, 0 deletions
diff --git a/src/test/javassist/bytecode/InsertGap0.java b/src/test/javassist/bytecode/InsertGap0.java
new file mode 100644
index 00000000..31fec3aa
--- /dev/null
+++ b/src/test/javassist/bytecode/InsertGap0.java
@@ -0,0 +1,228 @@
+package javassist.bytecode;
+
+import javassist.*;
+
+final class Gap0Example {
+ public static int counter = 1;
+
+ public Gap0Example() {}
+
+ public int run(int x) { return counter; }
+
+ private static final int INTVALUE = 100000;
+ private int i1, i2, i3, i4, i5, i6, i7, i8, i9, i10;
+ private int i11, i12, i13, i14, i15, i16, i17, i18, i19, i20;
+ private int i21, i22, i23, i24, i25, i26, i27, i28, i29, i30;
+ private int i31, i32, i33, i34, i35, i36, i37, i38, i39, i40;
+
+ public void doit() {
+
+ i1 = INTVALUE;
+ i2 = INTVALUE;
+ i3 = INTVALUE;
+ i4 = INTVALUE;
+ i5 = INTVALUE;
+ i6 = INTVALUE;
+ i7 = INTVALUE;
+ i8 = INTVALUE;
+ i9 = INTVALUE;
+ i10 = INTVALUE;
+ i11 = INTVALUE;
+ i12 = INTVALUE;
+ i13 = INTVALUE;
+ i14 = INTVALUE;
+ i15 = INTVALUE;
+ i16 = INTVALUE;
+ i17 = INTVALUE;
+ i18 = INTVALUE;
+ i19 = INTVALUE;
+ i20 = INTVALUE;
+ i21 = INTVALUE;
+ i22 = INTVALUE;
+ i23 = INTVALUE;
+ i24 = INTVALUE;
+ i25 = INTVALUE;
+ i26 = INTVALUE;
+ i27 = INTVALUE;
+ i28 = INTVALUE;
+ i29 = INTVALUE;
+ i20 = INTVALUE;
+ i21 = INTVALUE;
+ i22 = INTVALUE;
+ i23 = INTVALUE;
+ i24 = INTVALUE;
+ i25 = INTVALUE;
+ i26 = INTVALUE;
+ i27 = INTVALUE;
+ i28 = INTVALUE;
+ i29 = INTVALUE;
+ i30 = INTVALUE;
+ i31 = INTVALUE;
+ i32 = INTVALUE;
+ i33 = INTVALUE;
+ i34 = INTVALUE;
+ i35 = INTVALUE;
+ i36 = INTVALUE;
+ i37 = INTVALUE;
+ i38 = INTVALUE;
+ i39 = INTVALUE;
+ i40 = INTVALUE;
+ }
+}
+
+final class Gap0Example2 {
+ public static int counter = 1;
+
+ public Gap0Example2() {}
+
+ public int run(int x) { return counter; }
+
+ private static final int INTVALUE = 100000;
+ private int i1, i2, i3, i4, i5, i6, i7, i8, i9, i10;
+ private int i11, i12, i13, i14, i15, i16, i17, i18, i19, i20;
+ private int i21, i22, i23, i24, i25, i26, i27, i28, i29, i30;
+ private int i31, i32, i33, i34, i35, i36, i37, i38, i39, i40;
+
+ public int run2(int x) {
+ switch (x) {
+ case 0:
+ i1 = INTVALUE;
+ i2 = INTVALUE;
+ i3 = INTVALUE;
+ i4 = INTVALUE;
+ i5 = INTVALUE;
+ i6 = INTVALUE;
+ i7 = INTVALUE;
+ break;
+ case 100:
+ i8 = INTVALUE;
+ i9 = INTVALUE;
+ i10 = INTVALUE;
+ i11 = INTVALUE;
+ i12 = INTVALUE;
+ i13 = INTVALUE;
+ i14 = INTVALUE;
+ break;
+ default:
+ i15 = INTVALUE;
+ i16 = INTVALUE;
+ i17 = INTVALUE;
+ if (x > 0) {
+ i18 = INTVALUE;
+ i19 = INTVALUE;
+ i20 = INTVALUE;
+ i21 = INTVALUE;
+ i22 = INTVALUE;
+ i23 = INTVALUE;
+ i24 = INTVALUE;
+ }
+ i25 = INTVALUE;
+ i26 = INTVALUE;
+ i27 = INTVALUE;
+ i28 = INTVALUE;
+ i29 = INTVALUE;
+ i20 = INTVALUE;
+ i21 = INTVALUE;
+ i22 = INTVALUE;
+ i23 = INTVALUE;
+ i24 = INTVALUE;
+ i25 = INTVALUE;
+ i26 = INTVALUE;
+ i27 = INTVALUE;
+ i28 = INTVALUE;
+ i29 = INTVALUE;
+ i30 = INTVALUE;
+ i31 = INTVALUE;
+ i32 = INTVALUE;
+ i33 = INTVALUE;
+ i34 = INTVALUE;
+ i35 = INTVALUE;
+ i36 = INTVALUE;
+ i37 = INTVALUE;
+ i38 = INTVALUE;
+ i39 = INTVALUE;
+ i40 = INTVALUE;
+ break;
+ }
+ switch (x) {
+ case 0:
+ break;
+ default:
+ return x + 1;
+ }
+
+ return x;
+ }
+}
+
+public final class InsertGap0 extends JvstTestRoot {
+ public InsertGap0(String name) {
+ super(name);
+ }
+
+ public void testExample() throws Throwable {
+ ClassPool pool = ClassPool.getDefault();
+ CtClass cc = pool.get("javassist.bytecode.Gap0Example");
+ CtMethod[] ms = cc.getDeclaredMethods();
+ for (int i = 0; i < ms.length; i++) {
+ addMethod(ms[i], cc);
+ }
+
+ cc.setModifiers(Modifier.PUBLIC | Modifier.FINAL);
+ cc.addField(new CtField(CtClass.intType, "i", cc), "++counter");
+ boolean p = cc.stopPruning(true);
+ cc.writeFile();
+ Class c = cc.toClass();
+ cc.stopPruning(p);
+
+ Object obj = c.newInstance();
+ assertEquals(2, invoke(obj, "run", 0));
+ }
+
+ public void testExample2() throws Throwable {
+ ClassPool pool = ClassPool.getDefault();
+ CtClass cc = pool.get("javassist.bytecode.Gap0Example2");
+ CtMethod[] ms = cc.getDeclaredMethods();
+ for (int i = 0; i < ms.length; i++) {
+ addMethod(ms[i], cc);
+ }
+
+ cc.setModifiers(Modifier.PUBLIC | Modifier.FINAL);
+ cc.addField(new CtField(CtClass.intType, "i", cc), "++counter");
+ boolean p = cc.stopPruning(true);
+ cc.writeFile();
+ Class c = cc.toClass();
+ cc.stopPruning(p);
+
+ Object obj = c.newInstance();
+ assertEquals(0, invoke(obj, "run2", 0));
+ }
+
+ private void addMethod(CtMethod method, CtClass target)
+ throws CannotCompileException, NotFoundException {
+
+ CtClass[] ts = method.getParameterTypes();
+ CtClass[] newts = new CtClass[ts.length + 1];
+ for (int i = 0; i < ts.length; i++) {
+ newts[i] = ts[i];
+ }
+ ClassPool p = method.getDeclaringClass().getClassPool();
+ newts[ts.length] = target;
+
+ CtMethod m =
+ CtNewMethod.make(
+ method.getModifiers(),
+ method.getReturnType(),
+ method.getName(),
+ newts,
+ method.getExceptionTypes(),
+ null,
+ method.getDeclaringClass());
+
+ m.setBody(method, null);
+
+ CodeAttribute ca = m.getMethodInfo().getCodeAttribute();
+ ca.setMaxLocals(ca.getMaxLocals() + 1);
+ target.addMethod(m);
+ }
+}