Repository: incubator-systemml Updated Branches: refs/heads/master c27e74547 -> 3095fd4e5
More elegant way to throw parse errors. Thanks to Luciano's tip :) Project: http://git-wip-us.apache.org/repos/asf/incubator-systemml/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-systemml/commit/3095fd4e Tree: http://git-wip-us.apache.org/repos/asf/incubator-systemml/tree/3095fd4e Diff: http://git-wip-us.apache.org/repos/asf/incubator-systemml/diff/3095fd4e Branch: refs/heads/master Commit: 3095fd4e5c302cefb80479adb93607e3a00e431a Parents: c27e745 Author: Niketan Pansare <npan...@us.ibm.com> Authored: Tue Dec 8 13:32:16 2015 -0800 Committer: Niketan Pansare <npan...@us.ibm.com> Committed: Tue Dec 8 13:32:16 2015 -0800 ---------------------------------------------------------------------- .../org/apache/sysml/parser/ParseException.java | 5 +++- .../sysml/parser/antlr4/DMLParserWrapper.java | 25 ++++--------------- .../sysml/parser/python/PyDMLParserWrapper.java | 26 +++++--------------- 3 files changed, 15 insertions(+), 41 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/3095fd4e/src/main/java/org/apache/sysml/parser/ParseException.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/parser/ParseException.java b/src/main/java/org/apache/sysml/parser/ParseException.java index 5937689..414dabf 100644 --- a/src/main/java/org/apache/sysml/parser/ParseException.java +++ b/src/main/java/org/apache/sysml/parser/ParseException.java @@ -63,7 +63,10 @@ public class ParseException extends Exception public ParseException(String message) { super(message); } - + + public ParseException(String message, Exception e) { + super(message, e); + } /** * This is the last token that has been consumed successfully. If * this object has been created due to a parse error, the token http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/3095fd4e/src/main/java/org/apache/sysml/parser/antlr4/DMLParserWrapper.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/parser/antlr4/DMLParserWrapper.java b/src/main/java/org/apache/sysml/parser/antlr4/DMLParserWrapper.java index ff16c0d..be7eb3d 100644 --- a/src/main/java/org/apache/sysml/parser/antlr4/DMLParserWrapper.java +++ b/src/main/java/org/apache/sysml/parser/antlr4/DMLParserWrapper.java @@ -174,11 +174,11 @@ public class DMLParserWrapper extends AParserWrapper // in = new org.antlr.v4.runtime.ANTLRInputStream(new java.io.FileInputStream(fileName)); // } } catch (FileNotFoundException e) { - throw new ParseException("ERROR: Cannot find file:" + fileName); + throw new ParseException("ERROR: Cannot find file:" + fileName, e); } catch (IOException e) { - throw new ParseException("ERROR: Cannot open file:" + fileName); + throw new ParseException("ERROR: Cannot open file:" + fileName, e); } catch (LanguageException e) { - throw new ParseException("ERROR: " + e.getMessage()); + throw new ParseException("ERROR: " + e.getMessage(), e); } DmlprogramContext ast = null; @@ -230,7 +230,7 @@ public class DMLParserWrapper extends AParserWrapper } } catch(Exception e) { - throw getParseException(e, "ERROR: Cannot parse the program:" + fileName); + throw new ParseException("ERROR: Cannot parse the program:" + fileName, e); } @@ -250,27 +250,12 @@ public class DMLParserWrapper extends AParserWrapper dmlPgm = createDMLProgram(ast); } catch(Exception e) { - throw getParseException(e, "ERROR: Cannot translate the parse tree into DMLProgram"); + throw new ParseException("ERROR: Cannot translate the parse tree into DMLProgram" + e.getMessage(), e); } return dmlPgm; } - // Alternative is to uncomment the try/catch. But this method is preferred as it allows throwing "ParseException" as - // well as providing a given message (such as "Cannot translate the parse tree"). - private ParseException getParseException(Exception e, String message) { - String stackTrace = null; - try { - PrintWriter printWriter = new PrintWriter(new StringWriter()); - e.printStackTrace(printWriter); - stackTrace = printWriter.toString(); - } catch(Exception e1) {} - if(stackTrace != null) - return new ParseException(message + ":\n" + stackTrace); - else - return new ParseException(message); - } - private DMLProgram createDMLProgram(DmlprogramContext ast) { DMLProgram dmlPgm = new DMLProgram(); http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/3095fd4e/src/main/java/org/apache/sysml/parser/python/PyDMLParserWrapper.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/parser/python/PyDMLParserWrapper.java b/src/main/java/org/apache/sysml/parser/python/PyDMLParserWrapper.java index 72a9f0a..ffcf38c 100644 --- a/src/main/java/org/apache/sysml/parser/python/PyDMLParserWrapper.java +++ b/src/main/java/org/apache/sysml/parser/python/PyDMLParserWrapper.java @@ -151,11 +151,11 @@ public class PyDMLParserWrapper extends AParserWrapper // in = new ANTLRInputStream(new FileInputStream(fileName)); // } } catch (FileNotFoundException e) { - throw new ParseException("ERROR: Cannot find file:" + fileName); + throw new ParseException("ERROR: Cannot find file:" + fileName, e); } catch (IOException e) { - throw new ParseException("ERROR: Cannot open file:" + fileName); + throw new ParseException("ERROR: Cannot open file:" + fileName, e); } catch (LanguageException e) { - throw new ParseException("ERROR: " + e.getMessage()); + throw new ParseException("ERROR: " + e.getMessage(), e); } PmlprogramContext ast = null; @@ -205,7 +205,7 @@ public class PyDMLParserWrapper extends AParserWrapper } } catch(Exception e) { - throw getParseException(e, "ERROR: Cannot parse the program:" + fileName); + throw new ParseException("ERROR: Cannot parse the program:" + fileName, e); } @@ -225,26 +225,12 @@ public class PyDMLParserWrapper extends AParserWrapper dmlPgm = createDMLProgram(ast); } catch(Exception e) { - throw getParseException(e, "ERROR: Cannot translate the parse tree into DMLProgram"); + throw new ParseException("ERROR: Cannot translate the parse tree into DMLProgram" + e.getMessage(), e); } return dmlPgm; } - - // Alternative is to uncomment the try/catch. But this method is preferred as it allows throwing "ParseException" as - // well as providing a given message (such as "Cannot translate the parse tree"). - private ParseException getParseException(Exception e, String message) { - String stackTrace = null; - try { - PrintWriter printWriter = new PrintWriter(new StringWriter()); - e.printStackTrace(printWriter); - stackTrace = printWriter.toString(); - } catch(Exception e1) {} - if(stackTrace != null) - return new ParseException(message + ":\n" + stackTrace); - else - return new ParseException(message); - } + private DMLProgram createDMLProgram(PmlprogramContext ast) {