diff options
| author | Michael Williamson <mike@zwobble.org> | 2017-03-27 22:47:09 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2017-03-27 22:47:09 +0100 |
| commit | c2d08e2f4fbc729f0a519ae81c61c16c31fb7000 (patch) | |
| tree | 9847f4a2fd0687cb2649043e6f05dda6e94d35f0 /src/main/java | |
| parent | 2d99cb15aeecd1149a76b976d5431efda43d1f41 (diff) | |
Include position in file when failing to read statement
Diffstat (limited to 'src/main/java')
4 files changed, 59 insertions, 45 deletions
diff --git a/src/main/java/org/zwobble/couscous/frontends/java/ExpressionReadError.java b/src/main/java/org/zwobble/couscous/frontends/java/ExpressionReadError.java deleted file mode 100644 index 9c15875..0000000 --- a/src/main/java/org/zwobble/couscous/frontends/java/ExpressionReadError.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.zwobble.couscous.frontends.java; - -public class ExpressionReadError extends RuntimeException { - public ExpressionReadError(String message, Exception cause) { - super(message, cause); - } -} diff --git a/src/main/java/org/zwobble/couscous/frontends/java/JavaExpressionReader.java b/src/main/java/org/zwobble/couscous/frontends/java/JavaExpressionReader.java index caeb8aa..afc2eab 100644 --- a/src/main/java/org/zwobble/couscous/frontends/java/JavaExpressionReader.java +++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaExpressionReader.java @@ -131,13 +131,13 @@ public class JavaExpressionReader { } } catch (Exception exception) { - if (exception instanceof ExpressionReadError) { + if (expression == null || exception instanceof ReadError) { throw exception; } else { CompilationUnit root = (CompilationUnit) expression.getRoot(); int lineNumber = root.getLineNumber(expression.getStartPosition()); int columnNumber = root.getColumnNumber(expression.getStartPosition()); - throw new ExpressionReadError( + throw new ReadError( "Failed to read expression at " + lineNumber + ":" + columnNumber, exception); } diff --git a/src/main/java/org/zwobble/couscous/frontends/java/JavaStatementReader.java b/src/main/java/org/zwobble/couscous/frontends/java/JavaStatementReader.java index 6a8bf3c..21a73c0 100644 --- a/src/main/java/org/zwobble/couscous/frontends/java/JavaStatementReader.java +++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaStatementReader.java @@ -42,42 +42,56 @@ class JavaStatementReader { } List<StatementNode> readStatement(Statement statement) { - switch (statement.getNodeType()) { - case ASTNode.BLOCK: - return readBlock((Block)statement); - - case ASTNode.RETURN_STATEMENT: - return list(readReturnStatement((ReturnStatement)statement)); - - case ASTNode.THROW_STATEMENT: - return list(readThrowStatement((ThrowStatement)statement)); - - case ASTNode.EXPRESSION_STATEMENT: - return list(readExpressionStatement((ExpressionStatement)statement)); - - case ASTNode.IF_STATEMENT: - return list(readIfStatement((IfStatement)statement)); - - case ASTNode.WHILE_STATEMENT: - return list(readWhileStatement((WhileStatement)statement)); - - case ASTNode.FOR_STATEMENT: - return readForStatement((ForStatement)statement); - - case ASTNode.ENHANCED_FOR_STATEMENT: - return readEnhancedForStatement((EnhancedForStatement)statement); - - case ASTNode.VARIABLE_DECLARATION_STATEMENT: - return readVariableDeclarationStatement((VariableDeclarationStatement)statement); - - case ASTNode.SWITCH_STATEMENT: - return readSwitchStatement((SwitchStatement)statement); - - case ASTNode.TRY_STATEMENT: - return readTryStatement((TryStatement)statement); - - default: - throw new RuntimeException("Unsupported statement: " + statement.getClass()); + try { + switch (statement.getNodeType()) { + case ASTNode.BLOCK: + return readBlock((Block)statement); + + case ASTNode.RETURN_STATEMENT: + return list(readReturnStatement((ReturnStatement)statement)); + + case ASTNode.THROW_STATEMENT: + return list(readThrowStatement((ThrowStatement)statement)); + + case ASTNode.EXPRESSION_STATEMENT: + return list(readExpressionStatement((ExpressionStatement)statement)); + + case ASTNode.IF_STATEMENT: + return list(readIfStatement((IfStatement)statement)); + + case ASTNode.WHILE_STATEMENT: + return list(readWhileStatement((WhileStatement)statement)); + + case ASTNode.FOR_STATEMENT: + return readForStatement((ForStatement)statement); + + case ASTNode.ENHANCED_FOR_STATEMENT: + return readEnhancedForStatement((EnhancedForStatement)statement); + + case ASTNode.VARIABLE_DECLARATION_STATEMENT: + return readVariableDeclarationStatement((VariableDeclarationStatement)statement); + + case ASTNode.SWITCH_STATEMENT: + return readSwitchStatement((SwitchStatement)statement); + + case ASTNode.TRY_STATEMENT: + return readTryStatement((TryStatement)statement); + + default: + throw new RuntimeException("Unsupported statement: " + statement.getClass()); + } + } catch (Exception exception) { + if (statement == null || exception instanceof ReadError) { + throw exception; + } else { + CompilationUnit root = (CompilationUnit) statement.getRoot(); + int lineNumber = root.getLineNumber(statement.getStartPosition()); + int columnNumber = root.getColumnNumber(statement.getStartPosition()); + throw new ReadError( + "Failed to read statement at " + lineNumber + ":" + columnNumber, + exception + ); + } } } diff --git a/src/main/java/org/zwobble/couscous/frontends/java/ReadError.java b/src/main/java/org/zwobble/couscous/frontends/java/ReadError.java new file mode 100644 index 0000000..320e379 --- /dev/null +++ b/src/main/java/org/zwobble/couscous/frontends/java/ReadError.java @@ -0,0 +1,7 @@ +package org.zwobble.couscous.frontends.java; + +public class ReadError extends RuntimeException { + public ReadError(String message, Exception cause) { + super(message, cause); + } +} |
