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 }