ClassFinder { {{ static Set predefined; //class name only static Set packageNames; static ClassFinder self; static { self = new ClassFinder(); predefined = new HashSet(); packageNames = new HashSet(); // add primitive types // primitive types aren't really classes... predefined.add("int"); predefined.add("float"); predefined.add("boolean"); predefined.add("short"); predefined.add("byte"); predefined.add("long"); predefined.add("double"); predefined.add("char"); packageNames.add("java.lang"); packageNames.add("edu.neu.ccs.demeter"); } static void addClass(String className) { predefined.add(className); } static void removeClass(String className) { predefined.remove(className); } static void addPackage(String packageName) { packageNames.add(packageName); } static String combine(String packageName, String className) { if ((packageName==null) || packageName.equals("")) return className; return packageName + "." + className; } static boolean classExist(String partialClassName) { if (classExistLocal(partialClassName)) return true; for (Iterator iter = packageNames.iterator(); iter.hasNext(); ) { if (classExistGlobal((String)iter.next(), partialClassName)) return true; } return false; } static boolean classExistLocal(String partialClassName) { if (predefined.contains(partialClassName)) return true; else return false; } static boolean classExistGlobal(String packageName, String className) { if (classExistGlobal(combine(packageName, className))) { addClass(className); return true; } else return false; } static boolean classExistGlobal(String fullClassName) { try { self.loadClass(fullClassName, true); return true; } catch (ClassNotFoundException cnfe) { return false; } } }} }