1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.commons.lang3.builder;
19
20 import org.objectweb.asm.ClassWriter;
21 import org.objectweb.asm.MethodVisitor;
22 import org.objectweb.asm.Opcodes;
23
24
25
26
27 public class TestClassBuilder {
28
29
30
31
32 static final class DynamicClassLoader extends ClassLoader {
33 public Class<?> defineClass(final String name, final byte[] b) {
34 return defineClass(name, b, 0, b.length);
35 }
36 }
37
38
39
40
41
42
43
44 static Class<?> defineSimpleClass(final String name) {
45 final ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS);
46 classWriter.visit(Opcodes.V1_8, Opcodes.ACC_PUBLIC, name, null, "java/lang/Object", new String[] {});
47 final MethodVisitor ctor = classWriter.visitMethod(Opcodes.ACC_PUBLIC, "<init>", "()V", null, null);
48 ctor.visitCode();
49 ctor.visitVarInsn(Opcodes.ALOAD, 0);
50 ctor.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/lang/Object", "<init>", "()V", false);
51 ctor.visitInsn(Opcodes.RETURN);
52 ctor.visitMaxs(1, 1);
53 return new DynamicClassLoader().defineClass(name.replace('/', '.'), classWriter.toByteArray());
54 }
55
56 static Class<?> defineSimpleClass(final String packageName, final int i) {
57 return defineSimpleClass(packageName.replace('.', '/') + "/C" + i);
58 }
59
60 }