aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-04-10 20:31:52 +0100
committerMichael Williamson <mike@zwobble.org>2016-04-10 20:31:52 +0100
commitbc72e3b1a1c07f0c6efbb54867de412abd9480ef (patch)
tree9769f991876b06921dd82d841e93c362a2948918 /src/main/java
parentea34ea9174721c09f0ca332a0840e556540a0021 (diff)
Add better exception when failing to read expression
Diffstat (limited to 'src/main/java')
-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.java100
2 files changed, 63 insertions, 44 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
new file mode 100644
index 0000000..9c15875
--- /dev/null
+++ b/src/main/java/org/zwobble/couscous/frontends/java/ExpressionReadError.java
@@ -0,0 +1,7 @@
+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 0fa3c30..bb0f64d 100644
--- a/src/main/java/org/zwobble/couscous/frontends/java/JavaExpressionReader.java
+++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaExpressionReader.java
@@ -55,70 +55,82 @@ public class JavaExpressionReader {
}
ExpressionNode readExpressionWithoutBoxing(Expression expression) {
- switch (expression.getNodeType()) {
- case ASTNode.BOOLEAN_LITERAL:
- return readBooleanLiteral((BooleanLiteral)expression);
+ try {
- case ASTNode.NUMBER_LITERAL:
- return readNumberLiteral((NumberLiteral)expression);
+ switch (expression.getNodeType()) {
+ case ASTNode.BOOLEAN_LITERAL:
+ return readBooleanLiteral((BooleanLiteral)expression);
- case ASTNode.CHARACTER_LITERAL:
- return readCharacterLiteral((CharacterLiteral)expression);
+ case ASTNode.NUMBER_LITERAL:
+ return readNumberLiteral((NumberLiteral)expression);
- case ASTNode.STRING_LITERAL:
- return readStringLiteral((StringLiteral)expression);
+ case ASTNode.CHARACTER_LITERAL:
+ return readCharacterLiteral((CharacterLiteral)expression);
- case ASTNode.TYPE_LITERAL:
- return readTypeLiteral((TypeLiteral)expression);
+ case ASTNode.STRING_LITERAL:
+ return readStringLiteral((StringLiteral)expression);
- case ASTNode.SIMPLE_NAME:
- return readSimpleName((SimpleName)expression);
+ case ASTNode.TYPE_LITERAL:
+ return readTypeLiteral((TypeLiteral)expression);
- case ASTNode.THIS_EXPRESSION:
- return readThisExpression((ThisExpression)expression);
+ case ASTNode.SIMPLE_NAME:
+ return readSimpleName((SimpleName)expression);
- case ASTNode.FIELD_ACCESS:
- return readFieldAccess((FieldAccess)expression);
+ case ASTNode.THIS_EXPRESSION:
+ return readThisExpression((ThisExpression)expression);
- case ASTNode.QUALIFIED_NAME:
- return readQualifiedName((QualifiedName)expression);
+ case ASTNode.FIELD_ACCESS:
+ return readFieldAccess((FieldAccess)expression);
- case ASTNode.METHOD_INVOCATION:
- return readMethodInvocation((MethodInvocation)expression);
+ case ASTNode.QUALIFIED_NAME:
+ return readQualifiedName((QualifiedName)expression);
- case ASTNode.CLASS_INSTANCE_CREATION:
- return readClassInstanceCreation((ClassInstanceCreation)expression);
+ case ASTNode.METHOD_INVOCATION:
+ return readMethodInvocation((MethodInvocation)expression);
- case ASTNode.LAMBDA_EXPRESSION:
- return readLambdaExpression((LambdaExpression)expression);
+ case ASTNode.CLASS_INSTANCE_CREATION:
+ return readClassInstanceCreation((ClassInstanceCreation)expression);
- case ASTNode.EXPRESSION_METHOD_REFERENCE:
- return readExpressionMethodReference((ExpressionMethodReference)expression);
+ case ASTNode.LAMBDA_EXPRESSION:
+ return readLambdaExpression((LambdaExpression)expression);
- case ASTNode.CREATION_REFERENCE:
- return readCreationReference((CreationReference)expression);
+ case ASTNode.EXPRESSION_METHOD_REFERENCE:
+ return readExpressionMethodReference((ExpressionMethodReference)expression);
- case ASTNode.INFIX_EXPRESSION:
- return readInfixExpression((InfixExpression)expression);
+ case ASTNode.CREATION_REFERENCE:
+ return readCreationReference((CreationReference)expression);
- case ASTNode.PREFIX_EXPRESSION:
- return readPrefixExpression((PrefixExpression)expression);
+ case ASTNode.INFIX_EXPRESSION:
+ return readInfixExpression((InfixExpression)expression);
- case ASTNode.CONDITIONAL_EXPRESSION:
- return readConditionalExpression((ConditionalExpression)expression);
+ case ASTNode.PREFIX_EXPRESSION:
+ return readPrefixExpression((PrefixExpression)expression);
- case ASTNode.ASSIGNMENT:
- return readAssignment((Assignment)expression);
+ case ASTNode.CONDITIONAL_EXPRESSION:
+ return readConditionalExpression((ConditionalExpression)expression);
- case ASTNode.CAST_EXPRESSION:
- return readCastExpression((CastExpression)expression);
+ case ASTNode.ASSIGNMENT:
+ return readAssignment((Assignment)expression);
- default:
- CompilationUnit root = (CompilationUnit) expression.getRoot();
- throw new RuntimeException(
- "Unsupported expression: " + expression.getClass() +
- "\n" + root.getLineNumber(expression.getStartPosition()) + ":" + root.getColumnNumber(expression.getStartPosition()));
+ case ASTNode.CAST_EXPRESSION:
+ return readCastExpression((CastExpression)expression);
+
+ default:
+ throw new RuntimeException(
+ "Unsupported expression: " + expression.getClass());
+ }
+ } catch (Exception exception) {
+ if (exception instanceof ExpressionReadError) {
+ throw exception;
+ } else {
+ CompilationUnit root = (CompilationUnit) expression.getRoot();
+ int lineNumber = root.getLineNumber(expression.getStartPosition());
+ int columnNumber = root.getColumnNumber(expression.getStartPosition());
+ throw new ExpressionReadError(
+ "Failed to read expression at " + lineNumber + ":" + columnNumber,
+ exception);
+ }
}
}