aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2017-03-27 22:47:09 +0100
committerMichael Williamson <mike@zwobble.org>2017-03-27 22:47:09 +0100
commitc2d08e2f4fbc729f0a519ae81c61c16c31fb7000 (patch)
tree9847f4a2fd0687cb2649043e6f05dda6e94d35f0 /src/main/java/org/zwobble
parent2d99cb15aeecd1149a76b976d5431efda43d1f41 (diff)
Include position in file when failing to read statement
Diffstat (limited to 'src/main/java/org/zwobble')
-rw-r--r--src/main/java/org/zwobble/couscous/frontends/java/ExpressionReadError.java7
-rw-r--r--src/main/java/org/zwobble/couscous/frontends/java/JavaExpressionReader.java4
-rw-r--r--src/main/java/org/zwobble/couscous/frontends/java/JavaStatementReader.java86
-rw-r--r--src/main/java/org/zwobble/couscous/frontends/java/ReadError.java7
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);
+ }
+}