001 package sysModel;
002
003 import sysModel.classFile.ClassFile;
004 import sysModel.classFile.MethodInfo;
005 import sysModel.classFile.attributes.CodeAttributeInfo;
006 import sysModel.classFile.constantPool.APoolInfo;
007 import sysModel.classFile.constantPool.ClassPoolInfo;
008 import sysModel.classFile.constantPool.visitors.ADefaultPoolInfoVisitor;
009
010 import java.io.File;
011 import java.io.FileInputStream;
012 import java.io.IOException;
013 import java.io.InputStream;
014 import java.util.ArrayList;
015 import java.util.HashMap;
016 import java.util.jar.JarEntry;
017 import java.util.jar.JarFile;
018
019 /**
020 * Class loader used for loading fish classes.
021 * @author Mathias Ricken
022 */
023 public class MBSClassLoader extends ClassLoader {
024 /**
025 * Classes already loaded.
026 */
027 HashMap<String,Class<?>> _classes = new HashMap<String,Class<?>>();
028
029 /**
030 * String with class path.
031 */
032 private String _classPathString;
033
034 /**
035 * String with the Java home directory.
036 */
037 private static final String JAVA_HOME_STRING = System.getProperty("java.home");
038
039 /**
040 * Character with separator character.
041 */
042 private static final char SEPARATOR_CHAR = File.separatorChar;
043
044 /**
045 * String with path separator character.
046 */
047 private static final String PATH_SEPARATOR_STRING = File.pathSeparator;
048
049 /**
050 * Security manager in use.
051 */
052 private MBSSecurityManager _securityManager;
053
054 /**
055 * List of built-in classes that should not be checked and be loaded with the regular class loader.
056 */
057 private ArrayList<String> _buildinClasses = new ArrayList<String>();
058
059 /**
060 * Create a new class loader.
061 * @param securityManager security manager that lets us enable and disable security measures
062 */
063 public MBSClassLoader(MBSSecurityManager securityManager) {
064 // prefix with rt.jar
065 _classPathString = JAVA_HOME_STRING + SEPARATOR_CHAR + "lib" + SEPARATOR_CHAR + "rt.jar" + PATH_SEPARATOR_STRING +
066 System.getProperty("java.class.path");
067 if (!_classPathString.endsWith(PATH_SEPARATOR_STRING)) {
068 _classPathString += PATH_SEPARATOR_STRING;
069 }
070 _classPathString += '.';
071 _securityManager = securityManager;
072 for(String className: BUILTIN_CLASSES) {
073 _buildinClasses.add(className);
074 }
075 }
076
077 /**
078 * Load a class.
079 * @param name class name
080 * @param resolveIt resolve class?
081 * @return class object
082 * @throws ClassNotFoundException
083 */
084 public synchronized Class<?> loadClass(String name, boolean resolveIt) throws ClassNotFoundException {
085 try {
086 _securityManager.pushProtected(false);
087 Class<?> result = null;
088
089 if (!_buildinClasses.contains(name)) {
090 // Check our local cache of classes
091 result = _classes.get(name);
092 if (null != result) {
093 return result;
094 }
095
096 result = loadFromClassPath(name, resolveIt);
097 }
098
099 if (null == result) {
100 // Check with the primordial class loader
101 try {
102 result = getParent().loadClass(name);
103 return result;
104 }
105 catch (ClassNotFoundException e) {
106 throw new ClassNotFoundException(e.toString());
107 }
108 }
109
110 return result;
111 }
112 finally {
113 _securityManager.popProtected();
114 }
115 }
116
117 /**
118 * Load class from class path.
119 * @param name class name
120 * @param resolveIt
121 * @return loaded class or null if not found
122 */
123 private Class<?> loadFromClassPath(String name, boolean resolveIt) {
124 // Try to load it from our repository
125 String[] classPath = _classPathString.split(PATH_SEPARATOR_STRING);
126
127 byte[] classData = null;
128 String sourceClassPathEntry = "";
129 for(String classPathEntry: classPath) {
130 classData = loadBytes(name.replace('.','/'), classPathEntry);
131 if (null != classData) {
132 sourceClassPathEntry = classPathEntry;
133 break;
134 }
135 }
136 if ((null == classData) || (sourceClassPathEntry.startsWith(JAVA_HOME_STRING)) ) {
137 // not found or found from rt.jar; try system loader
138 return null;
139 }
140
141 // Perform the check
142 checkClass(name, classData);
143
144 // Define it (parse the class file)
145 Class<?> result = defineClass(name, classData, 0, classData.length);
146 if (null == result) {
147 throw new ClassFormatError();
148 }
149
150 if (resolveIt) {
151 resolveClass(result);
152 }
153
154 _classes.put(name, result);
155
156 return result;
157 }
158
159 /**
160 * Load byte array from name and path.
161 * @param name class file name (without .class)
162 * @param path path to look in (or jar file)
163 * @return byte array
164 */
165 private byte[] loadBytes(String name, String path) {
166 byte[] classData;
167 try {
168 InputStream fi = null;
169 if (path.toLowerCase().endsWith(".jar")) {
170 JarFile jar = new JarFile(path);
171 JarEntry entry = jar.getJarEntry(name+".class");
172 if (null == entry) {
173 return null;
174 }
175 fi = jar.getInputStream(entry);
176 }
177 else {
178 fi = new FileInputStream(path+SEPARATOR_CHAR+name+".class");
179 }
180 classData = loadFromStream(fi);
181 }
182 catch (IOException e) {
183 return null;
184 }
185
186 return classData;
187 }
188
189 /**
190 * Load byte array from stream.
191 * @param fi input stream
192 * @return byte array
193 * @throws IOException
194 */
195 private byte[] loadFromStream(InputStream fi) throws IOException {
196 byte[] classData;
197 classData = new byte[fi.available()];
198 fi.read(classData);
199 return classData;
200 }
201
202 /**
203 * Check if the class is safe to load.
204 * @param name class name
205 * @param classData bytes of the class file
206 */
207 public void checkClass(final String name, byte[] classData) {
208 try {
209 ClassFile cf = new ClassFile(classData);
210
211 // scan constant pool
212 Boolean found = false;
213 ADefaultPoolInfoVisitor<Boolean, Object> checkClassUsageVisitor = new ADefaultPoolInfoVisitor<Boolean, Object>() {
214 public Boolean classCase(ClassPoolInfo host, Object param) {
215 return (("java/lang/Throwable".equals(host.getName().toString())) ||
216 ("java/lang/Error".equals(host.getName().toString())) ||
217 ("java/lang/ThreadDeath".equals(host.getName().toString())));
218 }
219
220 public Boolean defaultCase(APoolInfo host, Object param) {
221 return false;
222 }
223 };
224 for (APoolInfo pi: cf.getConstantPool()) {
225 found |= pi.execute(checkClassUsageVisitor, null);
226 }
227 if (!found) {
228 // if none of these classes are referenced, then nothing in this class
229 // can catch ThreadDeath, so the class is safe
230 return;
231 }
232
233
234 ADefaultPoolInfoVisitor<Object, MethodInfo> checkThrowVisitor = new ADefaultPoolInfoVisitor<Object, MethodInfo>() {
235 public Object classCase(ClassPoolInfo host, MethodInfo param) {
236 if (("java/lang/Throwable".equals(host.getName().toString())) ||
237 ("java/lang/Error".equals(host.getName().toString())) ||
238 ("java/lang/ThreadDeath".equals(host.getName().toString()))) {
239 throw new ClassFormatError("Class " + name + " is potentially unsafe: catch clause in " + param
240 + " too general");
241 }
242 return null;
243 }
244
245 public Object defaultCase(APoolInfo host, MethodInfo param) {
246 // not a class, should never happen
247 throw new ClassFormatError("Exception table entry's catch type in " + name + '.' + param
248 + " references non-class constant pool item.");
249 }
250 };
251
252 // scan methods
253 for (final MethodInfo mi: cf.getMethods()) {
254 if (0 != (mi.getAccessFlags() & (ClassFile.ACC_ABSTRACT | ClassFile.ACC_NATIVE))) {
255 continue;
256 }
257
258 CodeAttributeInfo ca;
259
260 try {
261 ca = mi.getCodeAttributeInfo();
262 }
263 catch (ClassFormatError cfe) {
264 continue;
265 }
266
267 // check all exception table entries
268 for (CodeAttributeInfo.ExceptionTableEntry eta: ca.getExceptionTableEntries()) {
269 if (0 != eta.catchType) {
270 // if it's not a catch-all from the implementation of finally, we need
271 // to check the type of exception caught
272 cf.getConstantPoolItem(eta.catchType).execute(checkThrowVisitor, null);
273 }
274 }
275 }
276
277 }
278 catch (IOException e) {
279 throw new ClassFormatError("Could not check class "+name+"for safety: "+e);
280 }
281 }
282
283 /**
284 * Array of built-in classes that should not be checked and be loaded with the regular class loader.
285 */
286 private static final String[] BUILTIN_CLASSES = new String[] {
287 "controller.IDisplayAdapter",
288 "controller.IEditAdapter",
289 "controller.IEnvAdapter",
290 "controller.IScrollAdapter",
291 "controller.ISimAdapter",
292 "controller.MBSController$1",
293 "controller.MBSController$2",
294 "controller.MBSController$3",
295 "controller.MBSController$4",
296 "controller.MBSController",
297 "lrs.ANode$1$1",
298 "lrs.ANode$1",
299 "lrs.ANode",
300 "lrs.EmptyNode",
301 "lrs.IAlgo",
302 "lrs.LRStruct",
303 "lrs.NENode",
304 "lrs.visitor.Apply",
305 "lrs.visitor.Clear",
306 "lrs.visitor.GetLength$1",
307 "lrs.visitor.GetLength",
308 "lrs.visitor.GetNth",
309 "lrs.visitor.Remove",
310 "model.ILambda",
311 "model.RandNumGenerator",
312 "sysModel.env.AEnvFactory",
313 "sysModel.env.AGlobalEnv$1",
314 "sysModel.env.AGlobalEnv$2",
315 "sysModel.env.AGlobalEnv$3",
316 "sysModel.env.AGlobalEnv$4",
317 "sysModel.env.AGlobalEnv$5$1",
318 "sysModel.env.AGlobalEnv$5$2",
319 "sysModel.env.AGlobalEnv$5$3",
320 "sysModel.env.AGlobalEnv$5$4",
321 "sysModel.env.AGlobalEnv$5",
322 "sysModel.env.AGlobalEnv$6",
323 "sysModel.env.AGlobalEnv$ALocalEnv$1",
324 "sysModel.env.AGlobalEnv$ALocalEnv$2",
325 "sysModel.env.AGlobalEnv$ALocalEnv",
326 "sysModel.env.AGlobalEnv$BreedLambda",
327 "sysModel.env.AGlobalEnv$ILocalEnvVisitor",
328 "sysModel.env.AGlobalEnv",
329 "sysModel.env.ASquareEnv$1",
330 "sysModel.env.ASquareEnv$2",
331 "sysModel.env.ASquareEnv$3$1",
332 "sysModel.env.ASquareEnv$3$2$1",
333 "sysModel.env.ASquareEnv$3$2",
334 "sysModel.env.ASquareEnv$3",
335 "sysModel.env.ASquareEnv$ASquareLocalEnvironment",
336 "sysModel.env.ASquareEnv$Direction$1$1$1$1$1",
337 "sysModel.env.ASquareEnv$Direction$1$1$1$1",
338 "sysModel.env.ASquareEnv$Direction$1$1$1",
339 "sysModel.env.ASquareEnv$Direction$1$1",
340 "sysModel.env.ASquareEnv$Direction$1",
341 "sysModel.env.ASquareEnv$Direction",
342 "sysModel.env.ASquareEnv$Location$1$1$1$1$1",
343 "sysModel.env.ASquareEnv$Location$1$1$1$1",
344 "sysModel.env.ASquareEnv$Location$1$1$1",
345 "sysModel.env.ASquareEnv$Location$1$1",
346 "sysModel.env.ASquareEnv$Location$1",
347 "sysModel.env.ASquareEnv$Location",
348 "sysModel.env.ASquareEnv",
349 "sysModel.env.BoundedEnv$1",
350 "sysModel.env.BoundedEnv$2$1",
351 "sysModel.env.BoundedEnv$2",
352 "sysModel.env.BoundedEnv$3",
353 "sysModel.env.BoundedEnv$EmptyField",
354 "sysModel.env.BoundedEnv$IField",
355 "sysModel.env.BoundedEnv$IFieldVisitor",
356 "sysModel.env.BoundedEnv$LocalEnvironment$MoveLambda",
357 "sysModel.env.BoundedEnv$LocalEnvironment",
358 "sysModel.env.BoundedEnv$NonEmptyField",
359 "sysModel.env.BoundedEnv$Test_BoundedEnv$1",
360 "sysModel.env.BoundedEnv$Test_BoundedEnv$2",
361 "sysModel.env.BoundedEnv$Test_BoundedEnv$3",
362 "sysModel.env.BoundedEnv$Test_BoundedEnv$4",
363 "sysModel.env.BoundedEnv$Test_BoundedEnv$5",
364 "sysModel.env.BoundedEnv$Test_BoundedEnv$6",
365 "sysModel.env.BoundedEnv$Test_BoundedEnv$7",
366 "sysModel.env.BoundedEnv$Test_BoundedEnv",
367 "sysModel.env.BoundedEnv$Test_BoundedEnv_LocalEnv$1",
368 "sysModel.env.BoundedEnv$Test_BoundedEnv_LocalEnv$10",
369 "sysModel.env.BoundedEnv$Test_BoundedEnv_LocalEnv$11",
370 "sysModel.env.BoundedEnv$Test_BoundedEnv_LocalEnv$12",
371 "sysModel.env.BoundedEnv$Test_BoundedEnv_LocalEnv$13",
372 "sysModel.env.BoundedEnv$Test_BoundedEnv_LocalEnv$14",
373 "sysModel.env.BoundedEnv$Test_BoundedEnv_LocalEnv$15",
374 "sysModel.env.BoundedEnv$Test_BoundedEnv_LocalEnv$16",
375 "sysModel.env.BoundedEnv$Test_BoundedEnv_LocalEnv$17",
376 "sysModel.env.BoundedEnv$Test_BoundedEnv_LocalEnv$18",
377 "sysModel.env.BoundedEnv$Test_BoundedEnv_LocalEnv$19",
378 "sysModel.env.BoundedEnv$Test_BoundedEnv_LocalEnv$2",
379 "sysModel.env.BoundedEnv$Test_BoundedEnv_LocalEnv$20",
380 "sysModel.env.BoundedEnv$Test_BoundedEnv_LocalEnv$21",
381 "sysModel.env.BoundedEnv$Test_BoundedEnv_LocalEnv$22",
382 "sysModel.env.BoundedEnv$Test_BoundedEnv_LocalEnv$23",
383 "sysModel.env.BoundedEnv$Test_BoundedEnv_LocalEnv$24",
384 "sysModel.env.BoundedEnv$Test_BoundedEnv_LocalEnv$25",
385 "sysModel.env.BoundedEnv$Test_BoundedEnv_LocalEnv$26",
386 "sysModel.env.BoundedEnv$Test_BoundedEnv_LocalEnv$27",
387 "sysModel.env.BoundedEnv$Test_BoundedEnv_LocalEnv$28",
388 "sysModel.env.BoundedEnv$Test_BoundedEnv_LocalEnv$29",
389 "sysModel.env.BoundedEnv$Test_BoundedEnv_LocalEnv$3",
390 "sysModel.env.BoundedEnv$Test_BoundedEnv_LocalEnv$30",
391 "sysModel.env.BoundedEnv$Test_BoundedEnv_LocalEnv$31",
392 "sysModel.env.BoundedEnv$Test_BoundedEnv_LocalEnv$32",
393 "sysModel.env.BoundedEnv$Test_BoundedEnv_LocalEnv$33",
394 "sysModel.env.BoundedEnv$Test_BoundedEnv_LocalEnv$34",
395 "sysModel.env.BoundedEnv$Test_BoundedEnv_LocalEnv$35",
396 "sysModel.env.BoundedEnv$Test_BoundedEnv_LocalEnv$36",
397 "sysModel.env.BoundedEnv$Test_BoundedEnv_LocalEnv$37",
398 "sysModel.env.BoundedEnv$Test_BoundedEnv_LocalEnv$38",
399 "sysModel.env.BoundedEnv$Test_BoundedEnv_LocalEnv$39",
400 "sysModel.env.BoundedEnv$Test_BoundedEnv_LocalEnv$4",
401 "sysModel.env.BoundedEnv$Test_BoundedEnv_LocalEnv$40",
402 "sysModel.env.BoundedEnv$Test_BoundedEnv_LocalEnv$41",
403 "sysModel.env.BoundedEnv$Test_BoundedEnv_LocalEnv$42",
404 "sysModel.env.BoundedEnv$Test_BoundedEnv_LocalEnv$43",
405 "sysModel.env.BoundedEnv$Test_BoundedEnv_LocalEnv$44",
406 "sysModel.env.BoundedEnv$Test_BoundedEnv_LocalEnv$45",
407 "sysModel.env.BoundedEnv$Test_BoundedEnv_LocalEnv$46",
408 "sysModel.env.BoundedEnv$Test_BoundedEnv_LocalEnv$47",
409 "sysModel.env.BoundedEnv$Test_BoundedEnv_LocalEnv$48",
410 "sysModel.env.BoundedEnv$Test_BoundedEnv_LocalEnv$49",
411 "sysModel.env.BoundedEnv$Test_BoundedEnv_LocalEnv$5",
412 "sysModel.env.BoundedEnv$Test_BoundedEnv_LocalEnv$50",
413 "sysModel.env.BoundedEnv$Test_BoundedEnv_LocalEnv$51",
414 "sysModel.env.BoundedEnv$Test_BoundedEnv_LocalEnv$52",
415 "sysModel.env.BoundedEnv$Test_BoundedEnv_LocalEnv$6",
416 "sysModel.env.BoundedEnv$Test_BoundedEnv_LocalEnv$7",
417 "sysModel.env.BoundedEnv$Test_BoundedEnv_LocalEnv$8",
418 "sysModel.env.BoundedEnv$Test_BoundedEnv_LocalEnv$9",
419 "sysModel.env.BoundedEnv$Test_BoundedEnv_LocalEnv$SuccessException",
420 "sysModel.env.BoundedEnv$Test_BoundedEnv_LocalEnv",
421 "sysModel.env.BoundedEnv",
422 "sysModel.env.DeactivatableLambda",
423 "sysModel.env.EmptyLocalEnvState",
424 "sysModel.env.FishApplyParams",
425 "sysModel.env.IBlockedCommand",
426 "sysModel.env.ILocalEnvState",
427 "sysModel.env.IOpenCommand",
428 "sysModel.env.NoGridEnv$1",
429 "sysModel.env.NoGridEnv$2",
430 "sysModel.env.NoGridEnv$3$1$1$1",
431 "sysModel.env.NoGridEnv$3$1$1",
432 "sysModel.env.NoGridEnv$3$1",
433 "sysModel.env.NoGridEnv$3",
434 "sysModel.env.NoGridEnv$4",
435 "sysModel.env.NoGridEnv$5",
436 "sysModel.env.NoGridEnv$6$1",
437 "sysModel.env.NoGridEnv$6$2$1",
438 "sysModel.env.NoGridEnv$6$2",
439 "sysModel.env.NoGridEnv$6",
440 "sysModel.env.NoGridEnv$Direction$1$1$1$1$1",
441 "sysModel.env.NoGridEnv$Direction$1$1$1$1",
442 "sysModel.env.NoGridEnv$Direction$1$1$1",
443 "sysModel.env.NoGridEnv$Direction$1$1",
444 "sysModel.env.NoGridEnv$Direction$1",
445 "sysModel.env.NoGridEnv$Direction",
446 "sysModel.env.NoGridEnv$LocalEnvironment$MoveLambda",
447 "sysModel.env.NoGridEnv$LocalEnvironment",
448 "sysModel.env.NoGridEnv$Location$1$1$1$1$1",
449 "sysModel.env.NoGridEnv$Location$1$1$1$1",
450 "sysModel.env.NoGridEnv$Location$1$1$1",
451 "sysModel.env.NoGridEnv$Location$1$1",
452 "sysModel.env.NoGridEnv$Location$1",
453 "sysModel.env.NoGridEnv$Location",
454 "sysModel.env.NoGridEnv$Test_NoGridEnv$1",
455 "sysModel.env.NoGridEnv$Test_NoGridEnv$2",
456 "sysModel.env.NoGridEnv$Test_NoGridEnv$3",
457 "sysModel.env.NoGridEnv$Test_NoGridEnv$4",
458 "sysModel.env.NoGridEnv$Test_NoGridEnv$5",
459 "sysModel.env.NoGridEnv$Test_NoGridEnv$6",
460 "sysModel.env.NoGridEnv$Test_NoGridEnv",
461 "sysModel.env.NoGridEnv$Test_NoGridEnv_LocalEnv$1",
462 "sysModel.env.NoGridEnv$Test_NoGridEnv_LocalEnv$10",
463 "sysModel.env.NoGridEnv$Test_NoGridEnv_LocalEnv$11",
464 "sysModel.env.NoGridEnv$Test_NoGridEnv_LocalEnv$12",
465 "sysModel.env.NoGridEnv$Test_NoGridEnv_LocalEnv$13",
466 "sysModel.env.NoGridEnv$Test_NoGridEnv_LocalEnv$14",
467 "sysModel.env.NoGridEnv$Test_NoGridEnv_LocalEnv$15",
468 "sysModel.env.NoGridEnv$Test_NoGridEnv_LocalEnv$16",
469 "sysModel.env.NoGridEnv$Test_NoGridEnv_LocalEnv$17",
470 "sysModel.env.NoGridEnv$Test_NoGridEnv_LocalEnv$18",
471 "sysModel.env.NoGridEnv$Test_NoGridEnv_LocalEnv$19",
472 "sysModel.env.NoGridEnv$Test_NoGridEnv_LocalEnv$2",
473 "sysModel.env.NoGridEnv$Test_NoGridEnv_LocalEnv$20",
474 "sysModel.env.NoGridEnv$Test_NoGridEnv_LocalEnv$21",
475 "sysModel.env.NoGridEnv$Test_NoGridEnv_LocalEnv$22",
476 "sysModel.env.NoGridEnv$Test_NoGridEnv_LocalEnv$23",
477 "sysModel.env.NoGridEnv$Test_NoGridEnv_LocalEnv$24",
478 "sysModel.env.NoGridEnv$Test_NoGridEnv_LocalEnv$25",
479 "sysModel.env.NoGridEnv$Test_NoGridEnv_LocalEnv$26",
480 "sysModel.env.NoGridEnv$Test_NoGridEnv_LocalEnv$27",
481 "sysModel.env.NoGridEnv$Test_NoGridEnv_LocalEnv$28",
482 "sysModel.env.NoGridEnv$Test_NoGridEnv_LocalEnv$29",
483 "sysModel.env.NoGridEnv$Test_NoGridEnv_LocalEnv$3",
484 "sysModel.env.NoGridEnv$Test_NoGridEnv_LocalEnv$30",
485 "sysModel.env.NoGridEnv$Test_NoGridEnv_LocalEnv$31",
486 "sysModel.env.NoGridEnv$Test_NoGridEnv_LocalEnv$32",
487 "sysModel.env.NoGridEnv$Test_NoGridEnv_LocalEnv$33",
488 "sysModel.env.NoGridEnv$Test_NoGridEnv_LocalEnv$34",
489 "sysModel.env.NoGridEnv$Test_NoGridEnv_LocalEnv$35",
490 "sysModel.env.NoGridEnv$Test_NoGridEnv_LocalEnv$36",
491 "sysModel.env.NoGridEnv$Test_NoGridEnv_LocalEnv$37",
492 "sysModel.env.NoGridEnv$Test_NoGridEnv_LocalEnv$38",
493 "sysModel.env.NoGridEnv$Test_NoGridEnv_LocalEnv$39",
494 "sysModel.env.NoGridEnv$Test_NoGridEnv_LocalEnv$4",
495 "sysModel.env.NoGridEnv$Test_NoGridEnv_LocalEnv$40",
496 "sysModel.env.NoGridEnv$Test_NoGridEnv_LocalEnv$41",
497 "sysModel.env.NoGridEnv$Test_NoGridEnv_LocalEnv$42",
498 "sysModel.env.NoGridEnv$Test_NoGridEnv_LocalEnv$43",
499 "sysModel.env.NoGridEnv$Test_NoGridEnv_LocalEnv$44",
500 "sysModel.env.NoGridEnv$Test_NoGridEnv_LocalEnv$45",
501 "sysModel.env.NoGridEnv$Test_NoGridEnv_LocalEnv$46",
502 "sysModel.env.NoGridEnv$Test_NoGridEnv_LocalEnv$47",
503 "sysModel.env.NoGridEnv$Test_NoGridEnv_LocalEnv$48",
504 "sysModel.env.NoGridEnv$Test_NoGridEnv_LocalEnv$49",
505 "sysModel.env.NoGridEnv$Test_NoGridEnv_LocalEnv$5",
506 "sysModel.env.NoGridEnv$Test_NoGridEnv_LocalEnv$50",
507 "sysModel.env.NoGridEnv$Test_NoGridEnv_LocalEnv$51",
508 "sysModel.env.NoGridEnv$Test_NoGridEnv_LocalEnv$52",
509 "sysModel.env.NoGridEnv$Test_NoGridEnv_LocalEnv$6",
510 "sysModel.env.NoGridEnv$Test_NoGridEnv_LocalEnv$7",
511 "sysModel.env.NoGridEnv$Test_NoGridEnv_LocalEnv$8",
512 "sysModel.env.NoGridEnv$Test_NoGridEnv_LocalEnv$9",
513 "sysModel.env.NoGridEnv$Test_NoGridEnv_LocalEnv$SuccessException",
514 "sysModel.env.NoGridEnv$Test_NoGridEnv_LocalEnv",
515 "sysModel.env.NoGridEnv",
516 "sysModel.env.NonEmptyLocalEnvState",
517 "sysModel.env.NullEnv$1",
518 "sysModel.env.NullEnv$2",
519 "sysModel.env.NullEnv",
520 "sysModel.env.tests.Test_ASquareEnv_Direction$1",
521 "sysModel.env.tests.Test_ASquareEnv_Direction$2",
522 "sysModel.env.tests.Test_ASquareEnv_Direction$3",
523 "sysModel.env.tests.Test_ASquareEnv_Direction$4",
524 "sysModel.env.tests.Test_ASquareEnv_Direction$5",
525 "sysModel.env.tests.Test_ASquareEnv_Direction$6",
526 "sysModel.env.tests.Test_ASquareEnv_Direction",
527 "sysModel.env.tests.Test_ASquareEnv_Location$1",
528 "sysModel.env.tests.Test_ASquareEnv_Location$2",
529 "sysModel.env.tests.Test_ASquareEnv_Location$3",
530 "sysModel.env.tests.Test_ASquareEnv_Location$4",
531 "sysModel.env.tests.Test_ASquareEnv_Location$5",
532 "sysModel.env.tests.Test_ASquareEnv_Location$6",
533 "sysModel.env.tests.Test_ASquareEnv_Location",
534 "sysModel.env.tests.Test_DeactivatableLambda$1",
535 "sysModel.env.tests.Test_DeactivatableLambda$2",
536 "sysModel.env.tests.Test_DeactivatableLambda$3",
537 "sysModel.env.tests.Test_DeactivatableLambda",
538 "sysModel.env.UnboundedEnv$1",
539 "sysModel.env.UnboundedEnv$2",
540 "sysModel.env.UnboundedEnv$LocalEnvironment$MoveLambda",
541 "sysModel.env.UnboundedEnv$LocalEnvironment",
542 "sysModel.env.UnboundedEnv$Test_UnboundedEnv$1",
543 "sysModel.env.UnboundedEnv$Test_UnboundedEnv$2",
544 "sysModel.env.UnboundedEnv$Test_UnboundedEnv$3",
545 "sysModel.env.UnboundedEnv$Test_UnboundedEnv$4",
546 "sysModel.env.UnboundedEnv$Test_UnboundedEnv$5",
547 "sysModel.env.UnboundedEnv$Test_UnboundedEnv$6",
548 "sysModel.env.UnboundedEnv$Test_UnboundedEnv",
549 "sysModel.env.UnboundedEnv$Test_UnboundedEnv_LocalEnv$1",
550 "sysModel.env.UnboundedEnv$Test_UnboundedEnv_LocalEnv$10",
551 "sysModel.env.UnboundedEnv$Test_UnboundedEnv_LocalEnv$11",
552 "sysModel.env.UnboundedEnv$Test_UnboundedEnv_LocalEnv$12",
553 "sysModel.env.UnboundedEnv$Test_UnboundedEnv_LocalEnv$13",
554 "sysModel.env.UnboundedEnv$Test_UnboundedEnv_LocalEnv$14",
555 "sysModel.env.UnboundedEnv$Test_UnboundedEnv_LocalEnv$15",
556 "sysModel.env.UnboundedEnv$Test_UnboundedEnv_LocalEnv$16",
557 "sysModel.env.UnboundedEnv$Test_UnboundedEnv_LocalEnv$17",
558 "sysModel.env.UnboundedEnv$Test_UnboundedEnv_LocalEnv$18",
559 "sysModel.env.UnboundedEnv$Test_UnboundedEnv_LocalEnv$19",
560 "sysModel.env.UnboundedEnv$Test_UnboundedEnv_LocalEnv$2",
561 "sysModel.env.UnboundedEnv$Test_UnboundedEnv_LocalEnv$20",
562 "sysModel.env.UnboundedEnv$Test_UnboundedEnv_LocalEnv$21",
563 "sysModel.env.UnboundedEnv$Test_UnboundedEnv_LocalEnv$22",
564 "sysModel.env.UnboundedEnv$Test_UnboundedEnv_LocalEnv$23",
565 "sysModel.env.UnboundedEnv$Test_UnboundedEnv_LocalEnv$24",
566 "sysModel.env.UnboundedEnv$Test_UnboundedEnv_LocalEnv$25",
567 "sysModel.env.UnboundedEnv$Test_UnboundedEnv_LocalEnv$26",
568 "sysModel.env.UnboundedEnv$Test_UnboundedEnv_LocalEnv$27",
569 "sysModel.env.UnboundedEnv$Test_UnboundedEnv_LocalEnv$28",
570 "sysModel.env.UnboundedEnv$Test_UnboundedEnv_LocalEnv$29",
571 "sysModel.env.UnboundedEnv$Test_UnboundedEnv_LocalEnv$3",
572 "sysModel.env.UnboundedEnv$Test_UnboundedEnv_LocalEnv$30",
573 "sysModel.env.UnboundedEnv$Test_UnboundedEnv_LocalEnv$31",
574 "sysModel.env.UnboundedEnv$Test_UnboundedEnv_LocalEnv$32",
575 "sysModel.env.UnboundedEnv$Test_UnboundedEnv_LocalEnv$33",
576 "sysModel.env.UnboundedEnv$Test_UnboundedEnv_LocalEnv$34",
577 "sysModel.env.UnboundedEnv$Test_UnboundedEnv_LocalEnv$35",
578 "sysModel.env.UnboundedEnv$Test_UnboundedEnv_LocalEnv$36",
579 "sysModel.env.UnboundedEnv$Test_UnboundedEnv_LocalEnv$37",
580 "sysModel.env.UnboundedEnv$Test_UnboundedEnv_LocalEnv$38",
581 "sysModel.env.UnboundedEnv$Test_UnboundedEnv_LocalEnv$39",
582 "sysModel.env.UnboundedEnv$Test_UnboundedEnv_LocalEnv$4",
583 "sysModel.env.UnboundedEnv$Test_UnboundedEnv_LocalEnv$40",
584 "sysModel.env.UnboundedEnv$Test_UnboundedEnv_LocalEnv$41",
585 "sysModel.env.UnboundedEnv$Test_UnboundedEnv_LocalEnv$42",
586 "sysModel.env.UnboundedEnv$Test_UnboundedEnv_LocalEnv$43",
587 "sysModel.env.UnboundedEnv$Test_UnboundedEnv_LocalEnv$44",
588 "sysModel.env.UnboundedEnv$Test_UnboundedEnv_LocalEnv$45",
589 "sysModel.env.UnboundedEnv$Test_UnboundedEnv_LocalEnv$46",
590 "sysModel.env.UnboundedEnv$Test_UnboundedEnv_LocalEnv$47",
591 "sysModel.env.UnboundedEnv$Test_UnboundedEnv_LocalEnv$48",
592 "sysModel.env.UnboundedEnv$Test_UnboundedEnv_LocalEnv$49",
593 "sysModel.env.UnboundedEnv$Test_UnboundedEnv_LocalEnv$5",
594 "sysModel.env.UnboundedEnv$Test_UnboundedEnv_LocalEnv$50",
595 "sysModel.env.UnboundedEnv$Test_UnboundedEnv_LocalEnv$6",
596 "sysModel.env.UnboundedEnv$Test_UnboundedEnv_LocalEnv$7",
597 "sysModel.env.UnboundedEnv$Test_UnboundedEnv_LocalEnv$8",
598 "sysModel.env.UnboundedEnv$Test_UnboundedEnv_LocalEnv$9",
599 "sysModel.env.UnboundedEnv$Test_UnboundedEnv_LocalEnv$SuccessException",
600 "sysModel.env.UnboundedEnv$Test_UnboundedEnv_LocalEnv",
601 "sysModel.env.UnboundedEnv",
602 "sysModel.env.WrappingEnv$1",
603 "sysModel.env.WrappingEnv$2$1",
604 "sysModel.env.WrappingEnv$2",
605 "sysModel.env.WrappingEnv$Location",
606 "sysModel.env.WrappingEnv$Test_WrappingEnv$1",
607 "sysModel.env.WrappingEnv$Test_WrappingEnv$2",
608 "sysModel.env.WrappingEnv$Test_WrappingEnv$3",
609 "sysModel.env.WrappingEnv$Test_WrappingEnv$4",
610 "sysModel.env.WrappingEnv$Test_WrappingEnv$5",
611 "sysModel.env.WrappingEnv$Test_WrappingEnv$6",
612 "sysModel.env.WrappingEnv$Test_WrappingEnv$7",
613 "sysModel.env.WrappingEnv$Test_WrappingEnv",
614 "sysModel.env.WrappingEnv$Test_WrappingEnv_LocalEnv$1",
615 "sysModel.env.WrappingEnv$Test_WrappingEnv_LocalEnv$10",
616 "sysModel.env.WrappingEnv$Test_WrappingEnv_LocalEnv$11",
617 "sysModel.env.WrappingEnv$Test_WrappingEnv_LocalEnv$12",
618 "sysModel.env.WrappingEnv$Test_WrappingEnv_LocalEnv$13",
619 "sysModel.env.WrappingEnv$Test_WrappingEnv_LocalEnv$14",
620 "sysModel.env.WrappingEnv$Test_WrappingEnv_LocalEnv$15",
621 "sysModel.env.WrappingEnv$Test_WrappingEnv_LocalEnv$16",
622 "sysModel.env.WrappingEnv$Test_WrappingEnv_LocalEnv$17",
623 "sysModel.env.WrappingEnv$Test_WrappingEnv_LocalEnv$18",
624 "sysModel.env.WrappingEnv$Test_WrappingEnv_LocalEnv$19",
625 "sysModel.env.WrappingEnv$Test_WrappingEnv_LocalEnv$2",
626 "sysModel.env.WrappingEnv$Test_WrappingEnv_LocalEnv$20",
627 "sysModel.env.WrappingEnv$Test_WrappingEnv_LocalEnv$21",
628 "sysModel.env.WrappingEnv$Test_WrappingEnv_LocalEnv$22",
629 "sysModel.env.WrappingEnv$Test_WrappingEnv_LocalEnv$23",
630 "sysModel.env.WrappingEnv$Test_WrappingEnv_LocalEnv$24",
631 "sysModel.env.WrappingEnv$Test_WrappingEnv_LocalEnv$25",
632 "sysModel.env.WrappingEnv$Test_WrappingEnv_LocalEnv$26",
633 "sysModel.env.WrappingEnv$Test_WrappingEnv_LocalEnv$27",
634 "sysModel.env.WrappingEnv$Test_WrappingEnv_LocalEnv$28",
635 "sysModel.env.WrappingEnv$Test_WrappingEnv_LocalEnv$29",
636 "sysModel.env.WrappingEnv$Test_WrappingEnv_LocalEnv$3",
637 "sysModel.env.WrappingEnv$Test_WrappingEnv_LocalEnv$30",
638 "sysModel.env.WrappingEnv$Test_WrappingEnv_LocalEnv$31",
639 "sysModel.env.WrappingEnv$Test_WrappingEnv_LocalEnv$32",
640 "sysModel.env.WrappingEnv$Test_WrappingEnv_LocalEnv$33",
641 "sysModel.env.WrappingEnv$Test_WrappingEnv_LocalEnv$34",
642 "sysModel.env.WrappingEnv$Test_WrappingEnv_LocalEnv$35",
643 "sysModel.env.WrappingEnv$Test_WrappingEnv_LocalEnv$36",
644 "sysModel.env.WrappingEnv$Test_WrappingEnv_LocalEnv$37",
645 "sysModel.env.WrappingEnv$Test_WrappingEnv_LocalEnv$38",
646 "sysModel.env.WrappingEnv$Test_WrappingEnv_LocalEnv$39",
647 "sysModel.env.WrappingEnv$Test_WrappingEnv_LocalEnv$4",
648 "sysModel.env.WrappingEnv$Test_WrappingEnv_LocalEnv$40",
649 "sysModel.env.WrappingEnv$Test_WrappingEnv_LocalEnv$41",
650 "sysModel.env.WrappingEnv$Test_WrappingEnv_LocalEnv$42",
651 "sysModel.env.WrappingEnv$Test_WrappingEnv_LocalEnv$43",
652 "sysModel.env.WrappingEnv$Test_WrappingEnv_LocalEnv$44",
653 "sysModel.env.WrappingEnv$Test_WrappingEnv_LocalEnv$45",
654 "sysModel.env.WrappingEnv$Test_WrappingEnv_LocalEnv$46",
655 "sysModel.env.WrappingEnv$Test_WrappingEnv_LocalEnv$47",
656 "sysModel.env.WrappingEnv$Test_WrappingEnv_LocalEnv$48",
657 "sysModel.env.WrappingEnv$Test_WrappingEnv_LocalEnv$49",
658 "sysModel.env.WrappingEnv$Test_WrappingEnv_LocalEnv$5",
659 "sysModel.env.WrappingEnv$Test_WrappingEnv_LocalEnv$50",
660 "sysModel.env.WrappingEnv$Test_WrappingEnv_LocalEnv$51",
661 "sysModel.env.WrappingEnv$Test_WrappingEnv_LocalEnv$52",
662 "sysModel.env.WrappingEnv$Test_WrappingEnv_LocalEnv$6",
663 "sysModel.env.WrappingEnv$Test_WrappingEnv_LocalEnv$7",
664 "sysModel.env.WrappingEnv$Test_WrappingEnv_LocalEnv$8",
665 "sysModel.env.WrappingEnv$Test_WrappingEnv_LocalEnv$9",
666 "sysModel.env.WrappingEnv$Test_WrappingEnv_LocalEnv$SuccessException",
667 "sysModel.env.WrappingEnv$Test_WrappingEnv_LocalEnv",
668 "sysModel.env.WrappingEnv$Test_WrappingEnv_Location$1",
669 "sysModel.env.WrappingEnv$Test_WrappingEnv_Location$2",
670 "sysModel.env.WrappingEnv$Test_WrappingEnv_Location$3",
671 "sysModel.env.WrappingEnv$Test_WrappingEnv_Location$4",
672 "sysModel.env.WrappingEnv$Test_WrappingEnv_Location$5",
673 "sysModel.env.WrappingEnv$Test_WrappingEnv_Location",
674 "sysModel.env.WrappingEnv",
675 "sysModel.fish.DynamicFishFactory",
676 "sysModel.fish.AFish",
677 "sysModel.fish.FishException",
678 "sysModel.fish.AFish$1",
679 "sysModel.fish.AFish$2$1",
680 "sysModel.fish.AFish$2",
681 "sysModel.fish.AFish$3$1",
682 "sysModel.fish.AFish$3",
683 "sysModel.fish.AFish$4$1",
684 "sysModel.fish.AFish$4",
685 "sysModel.fish.AFish$5",
686 "sysModel.fish.IFishBehavior",
687 "sysModel.fish.IFishDisplay",
688 "sysModel.fish.IFishFactory",
689 "sysModel.fish.tests.Test_Fish$1",
690 "sysModel.fish.tests.Test_Fish$2",
691 "sysModel.fish.tests.Test_Fish$3",
692 "sysModel.fish.tests.Test_Fish$4",
693 "sysModel.fish.tests.Test_Fish$5",
694 "sysModel.fish.tests.Test_Fish$6",
695 "sysModel.fish.tests.Test_Fish$7",
696 "sysModel.fish.tests.Test_Fish$TestFish$1",
697 "sysModel.fish.tests.Test_Fish$TestFish$2",
698 "sysModel.fish.tests.Test_Fish$TestFish",
699 "sysModel.fish.tests.Test_Fish$TestGlobalEnv$1",
700 "sysModel.fish.tests.Test_Fish$TestGlobalEnv",
701 "sysModel.fish.tests.Test_Fish",
702 "sysModel.ICmdFactory",
703 "sysModel.ISecurityAdapter",
704 "sysModel.MBSClassLoader",
705 "sysModel.MBSSecurityManager",
706 "sysModel.NoOpLambda",
707 "sysModel.parser.CloseToken",
708 "sysModel.parser.CommaToken",
709 "sysModel.parser.DefaultTokenVisitor",
710 "sysModel.parser.EndOfStreamToken",
711 "sysModel.parser.IToken",
712 "sysModel.parser.ITokenVisitor",
713 "sysModel.parser.Lexer",
714 "sysModel.parser.NumberToken",
715 "sysModel.parser.OpenToken",
716 "sysModel.parser.Parser$1",
717 "sysModel.parser.Parser",
718 "sysModel.parser.ParserException",
719 "sysModel.parser.WordToken",
720 "sysModel.PolicyFile$1",
721 "sysModel.PolicyFile",
722 "sysModel.SimDriver$1$1",
723 "sysModel.SimDriver$1$2",
724 "sysModel.SimDriver$1$3",
725 "sysModel.SimDriver$1",
726 "sysModel.SimDriver$2",
727 "sysModel.SimDriver$3",
728 "sysModel.SimDriver$4",
729 "sysModel.SimDriver",
730 "sysModel.SimEngine$1",
731 "sysModel.SimEngine",
732 "tests.DrJava_Test_BoundedEnv",
733 "tests.DrJava_Test_BoundedEnv_LocalEnv",
734 "tests.DrJava_Test_NoGridEnv",
735 "tests.DrJava_Test_NoGridEnv_LocalEnv",
736 "tests.DrJava_Test_UnboundedEnv",
737 "tests.DrJava_Test_UnboundedEnv_LocalEnv",
738 "tests.DrJava_Test_WrappingEnv",
739 "tests.DrJava_Test_WrappingEnv_LocalEnv",
740 "tests.DrJava_Test_WrappingEnv_Location",
741 "view.CreateEnvDialog$1",
742 "view.CreateEnvDialog$2",
743 "view.CreateEnvDialog$3",
744 "view.CreateEnvDialog$AddEnvChoice",
745 "view.CreateEnvDialog$ConcreteEnvChoice",
746 "view.CreateEnvDialog$IEnvChoice",
747 "view.CreateEnvDialog",
748 "view.DisplayPanel$1",
749 "view.DisplayPanel",
750 "view.DisplayViewport$1",
751 "view.DisplayViewport$Pannable",
752 "view.DisplayViewport",
753 "view.EditToolbar$1",
754 "view.EditToolbar$2",
755 "view.EditToolbar$3",
756 "view.EditToolbar$4",
757 "view.EditToolbar$5",
758 "view.EditToolbar$ChoiceWithIcon",
759 "view.EditToolbar$ChoiceWithIconRenderer",
760 "view.EditToolbar$ColorChoice",
761 "view.EditToolbar$ColorIcon",
762 "view.EditToolbar$FishChoice",
763 "view.EditToolbar$FishIcon",
764 "view.EditToolbar",
765 "view.EnvFileChooser$1",
766 "view.EnvFileChooser",
767 "view.InputStringDialog$1",
768 "view.InputStringDialog$2",
769 "view.InputStringDialog",
770 "view.IRunIdleAdapter",
771 "view.MBSView$1",
772 "view.MBSView$10$1",
773 "view.MBSView$10",
774 "view.MBSView$11$1",
775 "view.MBSView$11",
776 "view.MBSView$12$1",
777 "view.MBSView$12",
778 "view.MBSView$13$1",
779 "view.MBSView$13",
780 "view.MBSView$14$1",
781 "view.MBSView$14",
782 "view.MBSView$15",
783 "view.MBSView$16",
784 "view.MBSView$17",
785 "view.MBSView$18",
786 "view.MBSView$19",
787 "view.MBSView$2",
788 "view.MBSView$20",
789 "view.MBSView$21",
790 "view.MBSView$3",
791 "view.MBSView$4",
792 "view.MBSView$5",
793 "view.MBSView$6",
794 "view.MBSView$7",
795 "view.MBSView$8",
796 "view.MBSView$9",
797 "view.MBSView$GUIExceptionHandler",
798 "view.MBSView$StepItLambda",
799 "view.MBSView",
800 "view.SimToolbar$1",
801 "view.SimToolbar$2",
802 "view.SimToolbar$3",
803 "view.SimToolbar$4",
804 "view.SimToolbar"
805 };
806 }