diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-04-27 22:24:04 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-04-27 22:24:04 +0100 |
| commit | 6aed29ed46535506b27aee8121ca56116356a2d9 (patch) | |
| tree | 879e9286c43d957430872385cdc87de80cf7b126 /src | |
| parent | f6c49ce6ffe91ba1f7ea143884fb800ad3be78bb (diff) | |
Read array creation nodes
Diffstat (limited to 'src')
| -rw-r--r-- | src/main/java/org/zwobble/couscous/frontends/java/JavaExpressionReader.java | 13 | ||||
| -rw-r--r-- | src/test/java/org/zwobble/couscous/tests/frontends/java/ExpressionReadingTests.java | 10 |
2 files changed, 23 insertions, 0 deletions
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 4f08151..fcce1e1 100644 --- a/src/main/java/org/zwobble/couscous/frontends/java/JavaExpressionReader.java +++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaExpressionReader.java @@ -73,6 +73,9 @@ public class JavaExpressionReader { case ASTNode.TYPE_LITERAL: return readTypeLiteral((TypeLiteral)expression); + case ASTNode.ARRAY_CREATION: + return readArrayCreation((ArrayCreation)expression); + case ASTNode.PARENTHESIZED_EXPRESSION: return readParenthesizedExpression((ParenthesizedExpression)expression); @@ -158,6 +161,16 @@ public class JavaExpressionReader { return literal(erasure(typeOf(expression.getType()))); } + private ExpressionNode readArrayCreation(ArrayCreation expression) { + if (expression.getType().getDimensions() != 1) { + throw new UnsupportedOperationException(); + } + Type elementType = typeOf(expression.getType().getElementType()); + @SuppressWarnings("unchecked") + List<Expression> expressions = expression.getInitializer().expressions(); + return array(elementType, eagerMap(expressions, element -> readExpression(elementType, element))); + } + private ExpressionNode readParenthesizedExpression(ParenthesizedExpression expression) { return readExpressionWithoutBoxing(expression.getExpression()); } diff --git a/src/test/java/org/zwobble/couscous/tests/frontends/java/ExpressionReadingTests.java b/src/test/java/org/zwobble/couscous/tests/frontends/java/ExpressionReadingTests.java index 9291895..fb7a25b 100644 --- a/src/test/java/org/zwobble/couscous/tests/frontends/java/ExpressionReadingTests.java +++ b/src/test/java/org/zwobble/couscous/tests/frontends/java/ExpressionReadingTests.java @@ -47,6 +47,16 @@ public class ExpressionReadingTests { } @Test + public void canReadEmptyArray() { + assertEquals(array(Types.INT, list()), readExpression("int[]", "new int[]{}")); + } + + @Test + public void canReadArrayWithElements() { + assertEquals(array(Types.INT, list(literal(42), literal(5))), readExpression("int[]", "new int[]{42, 5}")); + } + + @Test public void canReadParenthesizedExpression() { assertEquals(literal(42), readIntExpression("(42)")); } |
