package jmsltestsuite; import java.io.IOException; import java.util.Enumeration; import java.util.Vector; import com.softsynth.jmsl.util.JMSLClassLoader; import com.softsynth.jmsl.util.classbrowser.ClassBrowser; import com.softsynth.jmsl.util.classbrowser.ClassListener; /** * Look for instances of com.softsynth.jsyn.SynthNote in classpath * * bug: grinds to a silent halt when it encounters JMSLInstrumentToMax which Class.forName() croaks on any subclass of MaxObject * * @author Nick Didkovsky 4/17/02 11:56PM */ public class ClassBrowserTest implements ClassListener { // ClassLoader classLoader; Class superClassToFind; Vector foundClasses; public ClassBrowserTest() throws ClassNotFoundException { // classLoader = this.getClass().getClassLoader(); // superClassToFind = Class.forName("com.softsynth.jsyn.SynthNote", // false, classLoader); superClassToFind = JMSLClassLoader.load("com.softsynth.jsyn.SynthNote"); foundClasses = new Vector(); } public void handleClass(String fullyQualifiedClassName) { System.out.println("ClassBrowserTest.handleClass()" + fullyQualifiedClassName); try { // Class c = Class.forName(fullyQualifiedClassName, false, // classLoader); // System.out.println("1"); Class c = JMSLClassLoader.load(fullyQualifiedClassName); // System.out.println("2"); if (superClassToFind.isAssignableFrom(c)) { // System.out.println("3"); foundClasses.addElement(fullyQualifiedClassName); } // System.out.println("4"); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (NoClassDefFoundError e) { e.printStackTrace(); } catch (ClassFormatError e) { e.printStackTrace(); } catch (Throwable t) { t.printStackTrace(); } } public Enumeration foundClasses() { return foundClasses.elements(); } public static void main(String args[]) { try { System.out.println("Wait ... examining all classes in classpath, including jar's ..."); ClassBrowserTest findSynthNotes = new ClassBrowserTest(); ClassBrowser browser = new ClassBrowser(); browser.addClassListener(findSynthNotes); browser.browse(); System.out.println("\n\nFound the following SynthNotes in your classpath:"); for (Enumeration e = findSynthNotes.foundClasses(); e.hasMoreElements();) { System.out.println((String) e.nextElement()); } System.out.println("done"); System.exit(0); } catch (IOException e) { e.printStackTrace(); System.out.println("ERROR " + e); } catch (ClassNotFoundException e) { e.printStackTrace(); System.out.println("ERROR " + e); } } }