diff --git a/app/PdeCompiler.java b/app/PdeCompiler.java index e7740919f..69fbed2f9 100644 --- a/app/PdeCompiler.java +++ b/app/PdeCompiler.java @@ -338,6 +338,10 @@ public class PdeCompiler implements PdeMessageConsumer { * any .jar or .zip files inside that folder. * This will prepend a colon (or whatever the path separator is) * so that it can be directly appended to another path string. + * + * This will always add the root folder as well, and doesn't bother + * checking to see if there are any .class files in the folder or + * within a subfolder. */ static public String contentsToClassPath(File folder) { if (folder == null) return ""; diff --git a/app/PdePreprocessor.java b/app/PdePreprocessor.java index 214c9d222..4777c5c78 100644 --- a/app/PdePreprocessor.java +++ b/app/PdePreprocessor.java @@ -43,6 +43,11 @@ public class PdePreprocessor { static final int JDK14 = 2; static String defaultImports[][] = new String[3][]; + + // these ones have the .* at the end, since a class name + // might be at the end instead of .* whcih would make trouble + // other classes using this can lop of the . and anything after + // it to produce a package name consistently. String extraImports[]; static final int STATIC = 0; // formerly BEGINNER @@ -134,9 +139,8 @@ public class PdePreprocessor { // just in case it's not an advanced mode sketch PatternMatcher matcher = new Perl5Matcher(); PatternCompiler compiler = new Perl5Compiler(); - //String mess = "^\\s*(import\\s*[\\w\\d_\\.]+\\s*\\;)"; - //String mess = "^\\s*(import\\s*[\\w\\d\\_\\.]+\\s*\\;)"; - String mess = "^\\s*(import\\s+\\S+\\s*;)"; + //String mess = "^\\s*(import\\s+\\S+\\s*;)"; + String mess = "^\\s*(import\\s+)(\\S+)(\\s*;)"; java.util.Vector imports = new java.util.Vector(); Pattern pattern = null; @@ -152,10 +156,14 @@ public class PdePreprocessor { if (!matcher.contains(input, pattern)) break; MatchResult result = matcher.getMatch(); - String piece = result.group(1).toString(); + String piece1 = result.group(1).toString(); + String piece2 = result.group(2).toString(); // the package name + String piece3 = result.group(3).toString(); + String piece = piece1 + piece2 + piece3; int len = piece.length(); - imports.add(piece); + //imports.add(piece); + imports.add(piece2); int idx = program.indexOf(piece); // just remove altogether? program = program.substring(0, idx) + program.substring(idx + len); @@ -241,7 +249,8 @@ public class PdePreprocessor { File streamFile = new File(buildPath, name + ".java"); PrintStream stream = new PrintStream(new FileOutputStream(streamFile)); - writeHeader(stream, extraImports, name); + //writeHeader(stream, extraImports, name); + writeHeader(stream, name); emitter.setOut(stream); emitter.print(rootNode); @@ -277,25 +286,24 @@ public class PdePreprocessor { * @param exporting Is this being exported from PDE? * @param name Name of the class being created. */ - void writeHeader(PrintStream out, String imports[], - String className) { + void writeHeader(PrintStream out, String className) { // must include processing.core out.print("import processing.core.*; "); // emit emports that are needed for classes from the code folder - /* - if (imports != null) { - for (int i = 0; i < imports.length; i++) { - out.print("import " + imports[i] + ".*; "); - } + if (extraImports != null) { + for (int i = 0; i < extraImports.length; i++) { + out.print("import " + extraImports[i] + "; "); + } } - */ + /* if (imports != null) { for (int i = 0; i < imports.length; i++) { out.print(imports[i]); } } + */ // emit standard imports (read from pde.properties) // for each language level that's being used. diff --git a/app/PdeSketch.java b/app/PdeSketch.java index fdb678053..b713022fa 100644 --- a/app/PdeSketch.java +++ b/app/PdeSketch.java @@ -72,7 +72,7 @@ public class PdeSketch { String classPath; String libraryPath; boolean externalRuntime; - + Vector importedLibraries; // vec of File objects /** * path is location of the main .pde file, because this is also @@ -1138,6 +1138,19 @@ public class PdeSketch { throw new PdeException(ex.toString()); } + // grab the imports from the code just preproc'd + + importedLibraries = new Vector(); + String imports[] = preprocessor.extraImports; + for (int i = 0; i < imports.length; i++) { + // remove things up to the last dot + String entry = imports[i].substring(0, imports[i].lastIndexOf('.')); + System.out.println("found package " + entry); + Object libFolder = PdeSketchbook.importToLibraryTable.get(entry); + System.out.println(" found lib folder " + libFolder); + importedLibraries.add(libFolder); + } + // 3. then loop over the code[] and save each .java file diff --git a/app/PdeSketchbook.java b/app/PdeSketchbook.java index e979802ad..b87207050 100644 --- a/app/PdeSketchbook.java +++ b/app/PdeSketchbook.java @@ -65,6 +65,9 @@ public class PdeSketchbook { static File librariesFolder; static String librariesPath; + // maps imported packages to their library folder + static Hashtable importToLibraryTable = new Hashtable(); + // classpath for all known libraries for p5 // (both those in the p5/libs folder and those with lib subfolders // found in the sketchbook) @@ -525,10 +528,19 @@ public class PdeSketchbook { continue; } + // get the path for all .jar files in this code folder + String libraryClassPath = + PdeCompiler.contentsToClassPath(exported); // grab all jars and classes from this folder, // and append them to the library classpath - librariesClassPath += File.pathSeparatorChar + - PdeCompiler.contentsToClassPath(exported); + librariesClassPath += + File.pathSeparatorChar + libraryClassPath; + // need to associate each import with a library folder + String packages[] = + PdeCompiler.packageListFromClassPath(libraryClassPath); + for (int k = 0; k < packages.length; k++) { + importToLibraryTable.put(packages[k], exported); + } JMenuItem item = new JMenuItem(list[i]); item.addActionListener(listener); diff --git a/todo.txt b/todo.txt index 55b3f25a9..85554efdb 100644 --- a/todo.txt +++ b/todo.txt @@ -70,23 +70,11 @@ X "Processing" folder not properly created on new install X add noLoop() to static mode apps X remove "loop" from special inserts on preproc +040920 afternoon +o when running externally, build into sketch folder? + _ add all imported libs to hash table of jars -_ after export of library, rebuild "import library" menu - -_ when running externally, build into sketch folder? - - -_ static applets need to be able to resize themselves on 'play' -_ figure out what to do with static apps exported as application -_ needs to just hang there -_ scripts will need to call exit() explicitly -_ "create font" not working well with postscript font names -_ need to remap the postscript name back to the java font name -_ or keep a list of font objects, not just the names -_ since already have the list, can use deriveFont -_ tabs on macosx are stinking.. need to use line metrics class - _ libraries _ attachLibrary(new libsomething()) and attachLibrary("pitaru.Sonia"); o final stop() for static shutdown of lib @@ -99,15 +87,11 @@ _ be able to link against, but not export, certain parts of lib _ jsyn.jar not needed on export, netscape libs not needed on export _ where do libraries for distribution go? _ libraries subfolder of p5 - -_ exception in setup() on external app doesn't kill run button -_ also doesn't kill external vm -_ make preferences a modal dialog - -_ System.out isn't being heard from P* classes -_ errors inside those classes also causing weirdness -_ this might be a broader running as external app problem -_ errorMessage in PSerial/PClient/PServer are all using System.out +_ netscape.javascript not properly working in 1.4 +_ include 'netscape.javascript' as a library to be added +_ but don't export it.. ugh.. +_ http://processing.org/discourse/yabb/YaBB.cgi?board=Proce55ing_software_bugs;action=display;num=1088034754;start=0 +_ after export of library, rebuild "import library" menu _ get export working again _ make multiple jar files thing work as an option @@ -118,6 +102,32 @@ _ buttons on side of sketch do default (last) behavior _ include a note that 'applet' folder will get emptied/rewritten _ or rename the old applet folder to something else? (nah, too messy) +_ System.out isn't being heard from P* classes +_ errors inside those classes also causing weirdness +_ this might be a broader running as external app problem +_ errorMessage in PSerial/PClient/PServer are all using System.out + + +_ write better handler for compiler error: +_ c:/fry/processing/build/windows/work/lib/build/Temporary_8501_3382.java:1:63:1:70: Semantic Error: You need to modify your classpath, sourcepath, bootclasspath, and/or extdirs setup. Package "poo/shoe" could not be found in: + +_ write handler for loop() error, warning user to rename loop to draw +_ c:/fry/processing/build/windows/work/lib/build/Temporary_1452_9170.java:29:6:29:11: Semantic Error: The method "void loop();" with default access cannot replace the accessible method "void loop();" with public access declared in type "processing.core.PApplet". + +_ static applets need to be able to resize themselves on 'play' +_ figure out what to do with static apps exported as application +_ needs to just hang there +_ scripts (no graphics) will need to call exit() explicitly +_ "create font" not working well with postscript font names +_ need to remap the postscript name back to the java font name +_ or keep a list of font objects, not just the names +_ since already have the list, can use deriveFont +_ tabs on macosx are stinking.. need to use line metrics class + +_ exception in setup() on external app doesn't kill run button +_ also doesn't kill external vm +_ make preferences a modal dialog + _ package processing.app for PdeBase, PdeEditor.. _ support for editor plugins @@ -218,10 +228,6 @@ _ http://processing.org/discourse/yabb/YaBB.cgi?board=Proce55ing_Software;acti o is PdeEditorHeader one pixel too tall? _ menu option for Renderer > to "Core" or "OpenGL" _ on export, uses this setting to determine if jogl is added to project -_ netscape.javascript not properly working in 1.4 -_ include 'netscape.javascript' as a library to be added -_ but don't export it.. ugh.. -_ http://processing.org/discourse/yabb/YaBB.cgi?board=Proce55ing_software_bugs;action=display;num=1088034754;start=0 _ add a "make archive" option _ doesn't rename sketch, just names zip file sketch + time stamp _ need showError/Message/Warning/Prompt design from casey @@ -230,6 +236,7 @@ _ with an 'email this' button? (include source code too?) _ also need a "prompt" dialog for asking filenames, etc _ implement and remove PdeEditorStatus stuff _ check into open-source paperwork for p5 +_ ..................................................................