1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.bcel.verifier.tests;
20
21 import static org.junit.jupiter.api.Assertions.assertNotNull;
22
23 import java.io.IOException;
24 import java.io.OutputStream;
25
26 import org.apache.bcel.Const;
27 import org.apache.bcel.generic.ClassGen;
28 import org.apache.bcel.generic.ConstantPoolGen;
29 import org.apache.bcel.generic.InstructionConst;
30 import org.apache.bcel.generic.InstructionFactory;
31 import org.apache.bcel.generic.InstructionHandle;
32 import org.apache.bcel.generic.InstructionList;
33 import org.apache.bcel.generic.MethodGen;
34 import org.apache.bcel.generic.ObjectType;
35 import org.apache.bcel.generic.PUSH;
36 import org.apache.bcel.generic.Type;
37
38 public class TestArrayAccess02Creator extends TestCreator {
39 private final InstructionFactory instructionFactory;
40 private final ConstantPoolGen constantPoolGen;
41 private final ClassGen classGen;
42
43 public TestArrayAccess02Creator() {
44 classGen = new ClassGen(TEST_PACKAGE + ".TestArrayAccess02", "java.lang.Object", "TestArrayAccess02.java", Const.ACC_PUBLIC | Const.ACC_SUPER,
45 new String[] {});
46
47 constantPoolGen = classGen.getConstantPool();
48 instructionFactory = new InstructionFactory(classGen, constantPoolGen);
49 }
50
51 @Override
52 public void create(final OutputStream out) throws IOException {
53 createMethod_0();
54 createMethod_1();
55 classGen.getJavaClass().dump(out);
56 }
57
58 private void createMethod_0() {
59 final InstructionList il = new InstructionList();
60 final MethodGen method = new MethodGen(Const.ACC_PUBLIC, Type.VOID, Type.NO_ARGS, new String[] {}, "<init>", TEST_PACKAGE + ".TestArrayAccess02", il,
61 constantPoolGen);
62
63 final InstructionHandle ih_0 = il.append(InstructionFactory.createLoad(Type.OBJECT, 0));
64 assertNotNull(ih_0);
65 il.append(instructionFactory.createInvoke("java.lang.Object", "<init>", Type.VOID, Type.NO_ARGS, Const.INVOKESPECIAL));
66 final InstructionHandle ih_4 = il.append(InstructionFactory.createReturn(Type.VOID));
67 assertNotNull(ih_4);
68 method.setMaxStack();
69 method.setMaxLocals();
70 classGen.addMethod(method.getMethod());
71 il.dispose();
72 }
73
74 private void createMethod_1() {
75 final InstructionList il = new InstructionList();
76 final MethodGen method = new MethodGen(Const.ACC_PUBLIC | Const.ACC_STATIC, Type.VOID, Type.NO_ARGS, new String[] {}, "test",
77 TEST_PACKAGE + ".TestArrayAccess02", il, constantPoolGen);
78
79 final InstructionHandle ih_0 = il.append(new PUSH(constantPoolGen, 1));
80 assertNotNull(ih_0);
81 il.append(instructionFactory.createNewArray(new ObjectType(TEST_PACKAGE + ".TestArrayAccess02"), (short) 1));
82 il.append(InstructionFactory.createStore(Type.OBJECT, 0));
83 final InstructionHandle ih_5 = il.append(new PUSH(constantPoolGen, 1));
84 assertNotNull(ih_5);
85 il.append(instructionFactory.createNewArray(Type.STRING, (short) 1));
86 il.append(InstructionFactory.createStore(Type.OBJECT, 1));
87 final InstructionHandle ih_10 = il.append(InstructionFactory.createLoad(Type.OBJECT, 1));
88 assertNotNull(ih_10);
89 il.append(new PUSH(constantPoolGen, 0));
90 il.append(instructionFactory.createNew(TEST_PACKAGE + ".TestArrayAccess02"));
91 il.append(InstructionConst.DUP);
92 il.append(instructionFactory.createInvoke(TEST_PACKAGE + ".TestArrayAccess02", "<init>", Type.VOID, Type.NO_ARGS, Const.INVOKESPECIAL));
93 il.append(InstructionConst.AASTORE);
94 final InstructionHandle ih_20 = il.append(InstructionFactory.createReturn(Type.VOID));
95 assertNotNull(ih_20);
96 method.setMaxStack();
97 method.setMaxLocals();
98 classGen.addMethod(method.getMethod());
99 il.dispose();
100 }
101 }