From 6aed29ed46535506b27aee8121ca56116356a2d9 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Wed, 27 Apr 2016 22:24:04 +0100 Subject: Read array creation nodes --- .../couscous/frontends/java/JavaExpressionReader.java | 13 +++++++++++++ .../tests/frontends/java/ExpressionReadingTests.java | 10 ++++++++++ 2 files changed, 23 insertions(+) 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 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 @@ -46,6 +46,16 @@ public class ExpressionReadingTests { assertEquals(literal(Types.STRING), readExpression("Class", "String.class")); } + @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)")); -- cgit v1.2.3