annotate test/runtime/testlibrary/GeneratedClassLoader.java @ 20005:1671d9111c47

Truffle-DSL: fixed wrong type for implicit type cast elimination.
author Christian Humer <christian.humer@gmail.com>
date Mon, 23 Mar 2015 20:04:55 +0100
parents 699d9df07e59
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10344
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
1 /*
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
2 * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
4 *
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
7 * published by the Free Software Foundation.
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
8 *
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
13 * accompanied this code).
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
14 *
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
18 *
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
21 * questions.
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
22 */
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
23
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
24 import java.io.DataInputStream;
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
25 import java.io.File;
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
26 import java.io.FileInputStream;
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
27 import java.io.FileWriter;
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
28 import java.io.IOException;
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
29 import java.io.PrintWriter;
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
30 import javax.tools.JavaCompiler;
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
31 import javax.tools.ToolProvider;
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
32
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
33 /**
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
34 * A class loader that generates new classes.
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
35 * The generated classes are made by first emitting java sources with nested
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
36 * static classes, these are then compiled and the class files are read back.
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
37 * Some efforts are made to make the class instances unique and of not insignificant
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
38 * size.
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
39 */
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
40 public class GeneratedClassLoader extends ClassLoader {
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
41 /**
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
42 * Holds a pair of class bytecodes and class name (for use with defineClass).
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
43 */
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
44 private static class GeneratedClass {
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
45 public byte[] bytes;
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
46 public String name;
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
47 public GeneratedClass(byte[] bytes, String name) {
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
48 this.bytes = bytes; this.name = name;
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
49 }
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
50 }
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
51
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
52 /**
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
53 * Used to uniquely name every class generated.
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
54 */
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
55 private static int count = 0;
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
56 /**
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
57 * Used to enable/disable keeping the class files and java sources for
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
58 * the generated classes.
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
59 */
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
60 private static boolean deleteFiles = Boolean.parseBoolean(
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
61 System.getProperty("GeneratedClassLoader.deleteFiles", "true"));
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
62
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
63 private static String bigstr =
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
64 "Lorem ipsum dolor sit amet, consectetur adipiscing elit. "
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
65 + "In facilisis scelerisque vehicula. Donec congue nisi a "
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
66 + "leo posuere placerat lobortis felis ultrices. Pellentesque "
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
67 + "habitant morbi tristique senectus et netus et malesuada "
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
68 + "fames ac turpis egestas. Nam tristique velit at felis "
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
69 + "iaculis at tempor sem vestibulum. Sed adipiscing lectus "
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
70 + "non mi molestie sagittis. Morbi eu purus urna. Nam tempor "
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
71 + "tristique massa eget semper. Mauris cursus, nulla et ornare "
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
72 + "vehicula, leo dolor scelerisque metus, sit amet rutrum erat "
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
73 + "sapien quis dui. Nullam eleifend risus et velit accumsan sed "
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
74 + "suscipit felis pulvinar. Nullam faucibus suscipit gravida. "
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
75 + "Pellentesque habitant morbi tristique senectus et netus et "
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
76 + "malesuada fames ac turpis egestas. Nullam ut massa augue, "
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
77 + "nec viverra mauris.";
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
78
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
79 private static int getNextCount() {
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
80 return count++;
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
81 }
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
82
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
83 ////// end statics
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
84
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
85 private JavaCompiler javac;
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
86 private String nameBase;
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
87
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
88 public GeneratedClassLoader() {
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
89 javac = ToolProvider.getSystemJavaCompiler();
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
90 nameBase = "TestSimpleClass";
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
91 }
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
92
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
93 private long getBigValue(int which) {
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
94 // > 65536 is too large to encode in the bytecode
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
95 // so this will force us to emit a constant pool entry for this int
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
96 return (long)which + 65537;
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
97 }
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
98
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
99 private String getBigString(int which) {
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
100 return bigstr + which;
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
101 }
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
102
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
103 private String getClassName(int count) {
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
104 return nameBase + count;
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
105 }
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
106
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
107 private String generateSource(int count, int sizeFactor, int numClasses) {
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
108 StringBuilder sb = new StringBuilder();
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
109 sb.append("public class ").append(getClassName(count)).append("{\n");
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
110 for (int j = 0; j < numClasses; ++j) {
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
111 sb.append("public static class ")
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
112 .append("Class")
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
113 .append(j)
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
114 .append("{\n");
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
115 for (int i = 0; i < sizeFactor; ++i) {
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
116 int value = i;
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
117 sb.append("private long field")
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
118 .append(i).append(" = ")
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
119 .append(getBigValue(value++))
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
120 .append(";\n");
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
121 sb.append("public long method")
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
122 .append(i)
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
123 .append("() {\n");
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
124 sb.append("return ")
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
125 .append(getBigValue(value++))
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
126 .append(";");
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
127 sb.append("}\n");
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
128 sb.append("private String str").append(i)
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
129 .append(" = \"")
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
130 .append(getBigString(i))
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
131 .append("\";");
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
132 }
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
133 sb.append("\n}");
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
134 }
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
135 sb.append("\n}");
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
136 return sb.toString();
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
137 }
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
138
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
139 private GeneratedClass[] getGeneratedClass(int sizeFactor, int numClasses) throws IOException {
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
140 int uniqueCount = getNextCount();
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
141 String src = generateSource(uniqueCount, sizeFactor, numClasses);
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
142 String className = getClassName(uniqueCount);
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
143 File file = new File(className + ".java");
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
144 try (PrintWriter pw = new PrintWriter(new FileWriter(file))) {
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
145 pw.append(src);
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
146 pw.flush();
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
147 }
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
148 int exitcode = javac.run(null, null, null, file.getCanonicalPath());
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
149 if (exitcode != 0) {
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
150 throw new RuntimeException("javac failure when compiling: " +
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
151 file.getCanonicalPath());
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
152 } else {
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
153 if (deleteFiles) {
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
154 file.delete();
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
155 }
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
156 }
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
157 GeneratedClass[] gc = new GeneratedClass[numClasses];
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
158 for (int i = 0; i < numClasses; ++i) {
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
159 String name = className + "$" + "Class" + i;
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
160 File classFile = new File(name + ".class");
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
161 byte[] bytes;
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
162 try (DataInputStream dis = new DataInputStream(new FileInputStream(classFile))) {
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
163 bytes = new byte[dis.available()];
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
164 dis.readFully(bytes);
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
165 }
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
166 if (deleteFiles) {
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
167 classFile.delete();
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
168 }
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
169 gc[i] = new GeneratedClass(bytes, name);
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
170 }
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
171 if (deleteFiles) {
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
172 new File(className + ".class").delete();
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
173 }
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
174 return gc;
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
175 }
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
176
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
177 /**
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
178 * Generate a single class, compile it and load it.
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
179 * @param sizeFactor Fuzzy measure of how large the class should be.
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
180 * @return the Class instance.
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
181 * @throws IOException
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
182 */
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
183 public Class<?> generateClass(int sizeFactor) throws IOException {
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
184 return getGeneratedClasses(sizeFactor, 1)[0];
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
185 }
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
186
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
187 /**
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
188 * Generate several classes, compile and load them.
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
189 * @param sizeFactor Fuzzy measure of how large each class should be.
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
190 * @param numClasses The number of classes to create
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
191 * @return an array of the Class instances.
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
192 * @throws IOException
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
193 */
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
194 public Class<?>[] getGeneratedClasses(int sizeFactor, int numClasses) throws IOException {
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
195 GeneratedClass[] gc = getGeneratedClass(sizeFactor, numClasses);
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
196 Class<?>[] classes = new Class[numClasses];
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
197 for (int i = 0; i < numClasses; ++i) {
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
198 classes[i] = defineClass(gc[i].name, gc[i].bytes, 0 , gc[i].bytes.length);
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
199 }
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
200 return classes;
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
201 }
699d9df07e59 8009576: Test returns ClassNotFoundException
ctornqvi
parents:
diff changeset
202 }