From d375c3a4c3bee71bb9739d8d1086bfdc26b697ae Mon Sep 17 00:00:00 2001 From: Christian Bender Date: Sun, 1 Jul 2018 23:34:06 +0200 Subject: [PATCH 1/6] simple extended error message --- java/src/processing/mode/java/Compiler.java | 31 +++++++++++++++++++-- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/java/src/processing/mode/java/Compiler.java b/java/src/processing/mode/java/Compiler.java index cfe9eb97d9..207111be5c 100644 --- a/java/src/processing/mode/java/Compiler.java +++ b/java/src/processing/mode/java/Compiler.java @@ -62,6 +62,8 @@ static public boolean compile(JavaBuild build) throws SketchException { SketchException exception = null; boolean success = false; + // System.out.printf("DEBUG: class Compiler -- BEGIN compile(...)\n"); //DEBUG + String baseCommand[] = new String[] { "-g", "-Xemacs", @@ -79,6 +81,8 @@ static public boolean compile(JavaBuild build) throws SketchException { String[] command = PApplet.concat(baseCommand, sourceFiles); //PApplet.println(command); + // System.out.printf("DEBUG: class Compiler -- BEGIN -- compile(...) exception=%s\n",exception); // DEBUG + try { // Load errors into a local StringBuilder final StringBuilder errorBuffer = new StringBuilder(); @@ -107,6 +111,10 @@ public void close() { } // Version that *is* dynamically loaded. First gets the mode class loader // so that it can grab the compiler JAR files from it. ClassLoader loader = build.mode.getClassLoader(); + + // System.out.printf("DEBUG: class Compiler -- line 114 -- compile(...) exception=%s\n",exception); // DEBUG + // System.err.println(errorBuffer.toString()); //DEBUG + try { Class batchClass = Class.forName("org.eclipse.jdt.core.compiler.batch.BatchCompiler", false, loader); @@ -117,28 +125,33 @@ public void close() { } Method compileMethod = batchClass.getMethod("compile", compileArgs); success = (Boolean) compileMethod.invoke(null, new Object[] { command, outWriter, writer, null }); + // System.err.println(errorBuffer.toString()); //DEBUG + } catch (Exception e) { e.printStackTrace(); throw new SketchException("Unknown error inside the compiler."); } + // System.err.println(errorBuffer.toString()); //DEBUG + // Close out the stream for good measure writer.flush(); writer.close(); BufferedReader reader = new BufferedReader(new StringReader(errorBuffer.toString())); - //System.err.println(errorBuffer.toString()); + // System.err.println(errorBuffer.toString()); //DEBUG String line = null; while ((line = reader.readLine()) != null) { - //System.out.println("got line " + line); // debug + // System.out.println("got line " + line); // debug // get first line, which contains file name, line number, // and at least the first line of the error message String errorFormat = "([\\w\\d_]+.java):(\\d+):\\s*(.*):\\s*(.*)\\s*"; String[] pieces = PApplet.match(line, errorFormat); - //PApplet.println(pieces); + // PApplet.println(pieces); + // System.out.println(pieces[4]); //DEBUG // if it's something unexpected, die and print the mess to the console if (pieces == null) { @@ -159,11 +172,19 @@ public void close() { } int dotJavaLineIndex = PApplet.parseInt(pieces[2]) - 1; String errorMessage = pieces[4]; + // extended error message + if (errorMessage.length() <= 3) { + errorMessage = pieces[3] + " " + errorMessage; + } + + exception = build.placeException(errorMessage, dotJavaFilename, dotJavaLineIndex); + if (exception == null) { + // System.err.println(errorMessage); //DEBUG exception = new SketchException(errorMessage); } @@ -304,6 +325,8 @@ public void close() { } break; } } + + // System.out.printf("DEBUG: class Compiler -- end of first try -- compile(...) exception=%s\n",exception); // DEBUG } catch (IOException e) { String bigSigh = "Error while compiling. (" + e.getMessage() + ")"; exception = new SketchException(bigSigh); @@ -313,6 +336,8 @@ public void close() { } // In case there was something else. if (exception != null) throw exception; + // System.out.printf("DEBUG: class Compiler -- END of compile(...)\n"); // DEBUG + return success; } From 3351997ff093fd0ca9044599278d224ab697b0d1 Mon Sep 17 00:00:00 2001 From: Christian Bender Date: Tue, 3 Jul 2018 17:17:17 +0200 Subject: [PATCH 2/6] changed mechanism --- java/src/processing/mode/java/Compiler.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/java/src/processing/mode/java/Compiler.java b/java/src/processing/mode/java/Compiler.java index 207111be5c..b991f40927 100644 --- a/java/src/processing/mode/java/Compiler.java +++ b/java/src/processing/mode/java/Compiler.java @@ -172,9 +172,16 @@ public void close() { } int dotJavaLineIndex = PApplet.parseInt(pieces[2]) - 1; String errorMessage = pieces[4]; - // extended error message + // extended error message or certain error message if (errorMessage.length() <= 3) { - errorMessage = pieces[3] + " " + errorMessage; + switch (errorMessage) { + case "23)": // cast error: int -> boolean + errorMessage = "int constant cannot be casted into boolean"; + break; + default: + errorMessage = pieces[3] + " " + errorMessage; + break; + } } From 6aeaec5328ff8f3e005dc45996fd25a7398c495b Mon Sep 17 00:00:00 2001 From: Christian Bender Date: Wed, 4 Jul 2018 17:00:53 +0200 Subject: [PATCH 3/6] add regex-method and tidy up the code --- java/src/processing/mode/java/Compiler.java | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/java/src/processing/mode/java/Compiler.java b/java/src/processing/mode/java/Compiler.java index b991f40927..7f3b0a430b 100644 --- a/java/src/processing/mode/java/Compiler.java +++ b/java/src/processing/mode/java/Compiler.java @@ -62,8 +62,6 @@ static public boolean compile(JavaBuild build) throws SketchException { SketchException exception = null; boolean success = false; - // System.out.printf("DEBUG: class Compiler -- BEGIN compile(...)\n"); //DEBUG - String baseCommand[] = new String[] { "-g", "-Xemacs", @@ -112,9 +110,6 @@ public void close() { } // so that it can grab the compiler JAR files from it. ClassLoader loader = build.mode.getClassLoader(); - // System.out.printf("DEBUG: class Compiler -- line 114 -- compile(...) exception=%s\n",exception); // DEBUG - // System.err.println(errorBuffer.toString()); //DEBUG - try { Class batchClass = Class.forName("org.eclipse.jdt.core.compiler.batch.BatchCompiler", false, loader); @@ -125,33 +120,26 @@ public void close() { } Method compileMethod = batchClass.getMethod("compile", compileArgs); success = (Boolean) compileMethod.invoke(null, new Object[] { command, outWriter, writer, null }); - // System.err.println(errorBuffer.toString()); //DEBUG } catch (Exception e) { e.printStackTrace(); throw new SketchException("Unknown error inside the compiler."); } - // System.err.println(errorBuffer.toString()); //DEBUG - // Close out the stream for good measure writer.flush(); writer.close(); BufferedReader reader = new BufferedReader(new StringReader(errorBuffer.toString())); - // System.err.println(errorBuffer.toString()); //DEBUG String line = null; while ((line = reader.readLine()) != null) { - // System.out.println("got line " + line); // debug // get first line, which contains file name, line number, // and at least the first line of the error message String errorFormat = "([\\w\\d_]+.java):(\\d+):\\s*(.*):\\s*(.*)\\s*"; String[] pieces = PApplet.match(line, errorFormat); - // PApplet.println(pieces); - // System.out.println(pieces[4]); //DEBUG // if it's something unexpected, die and print the mess to the console if (pieces == null) { @@ -173,7 +161,8 @@ public void close() { } String errorMessage = pieces[4]; // extended error message or certain error message - if (errorMessage.length() <= 3) { + + if (!errorMessage.matches("(a-zA-Z| )+")) { switch (errorMessage) { case "23)": // cast error: int -> boolean errorMessage = "int constant cannot be casted into boolean"; @@ -191,7 +180,6 @@ public void close() { } if (exception == null) { - // System.err.println(errorMessage); //DEBUG exception = new SketchException(errorMessage); } From 10f8624971b9c9cba97b466cb613f6fc7ab886cf Mon Sep 17 00:00:00 2001 From: Christian Bender Date: Wed, 4 Jul 2018 21:47:21 +0200 Subject: [PATCH 4/6] removed some println`s --- java/src/processing/mode/java/Compiler.java | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/java/src/processing/mode/java/Compiler.java b/java/src/processing/mode/java/Compiler.java index 7f3b0a430b..3b3b074b6c 100644 --- a/java/src/processing/mode/java/Compiler.java +++ b/java/src/processing/mode/java/Compiler.java @@ -73,13 +73,9 @@ static public boolean compile(JavaBuild build) throws SketchException { "-nowarn", // we're not currently interested in warnings (works in ecj) "-d", build.getBinFolder().getAbsolutePath() // output the classes in the buildPath }; - //PApplet.println(baseCommand); String[] sourceFiles = Util.listFiles(build.getSrcFolder(), false, ".java"); String[] command = PApplet.concat(baseCommand, sourceFiles); - //PApplet.println(command); - - // System.out.printf("DEBUG: class Compiler -- BEGIN -- compile(...) exception=%s\n",exception); // DEBUG try { // Load errors into a local StringBuilder @@ -193,7 +189,6 @@ public void close() { } String[] m = PApplet.match(errorMessage, "The import (.*) cannot be resolved"); //what = what.substring(0, what.indexOf(' ')); if (m != null) { -// System.out.println("'" + m[1] + "'"); if (m[1].equals("processing.xml")) { exception.setMessage("processing.xml no longer exists, this code needs to be updated for 2.0."); System.err.println("The processing.xml library has been replaced " + @@ -237,9 +232,7 @@ public void close() { } } } else if (errorMessage.endsWith("cannot be resolved")) { - // xxx cannot be resolved - //println(xxx); - + String what = errorMessage.substring(0, errorMessage.indexOf(' ')); if (what.equals("LINE_LOOP") || From b00f68956ee4b66f23666ff56ff1fe00d0e829cc Mon Sep 17 00:00:00 2001 From: Christian Bender Date: Wed, 4 Jul 2018 21:52:05 +0200 Subject: [PATCH 5/6] modified the regex expression --- java/src/processing/mode/java/Compiler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/src/processing/mode/java/Compiler.java b/java/src/processing/mode/java/Compiler.java index 3b3b074b6c..dfaea7af1a 100644 --- a/java/src/processing/mode/java/Compiler.java +++ b/java/src/processing/mode/java/Compiler.java @@ -158,7 +158,7 @@ public void close() { } // extended error message or certain error message - if (!errorMessage.matches("(a-zA-Z| )+")) { + if (!errorMessage.matches("(a-zA-Z|\\s)+")) { switch (errorMessage) { case "23)": // cast error: int -> boolean errorMessage = "int constant cannot be casted into boolean"; From a38f29c3f334a8ebdaeef8af3abc18e0a23c421a Mon Sep 17 00:00:00 2001 From: Christian Bender Date: Wed, 4 Jul 2018 21:54:52 +0200 Subject: [PATCH 6/6] modified the regex expression for proper error message --- java/src/processing/mode/java/Compiler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/src/processing/mode/java/Compiler.java b/java/src/processing/mode/java/Compiler.java index dfaea7af1a..3ece91049c 100644 --- a/java/src/processing/mode/java/Compiler.java +++ b/java/src/processing/mode/java/Compiler.java @@ -158,7 +158,7 @@ public void close() { } // extended error message or certain error message - if (!errorMessage.matches("(a-zA-Z|\\s)+")) { + if (!errorMessage.matches("([\\w\\d_]+.java):(\\d+):\\s*(.*):\\s*(.*)\\s*")) { switch (errorMessage) { case "23)": // cast error: int -> boolean errorMessage = "int constant cannot be casted into boolean";