diff options
| author | Michael Williamson <mike@zwobble.org> | 2015-10-10 14:46:18 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2015-10-10 14:46:18 +0100 |
| commit | cb97484d4694c94946a109fd6d09252767fa1652 (patch) | |
| tree | d149248cd3207418dcbd82f63034cc3db15481b5 /src | |
| parent | 9f72ebdf07d4b704c48807a6b4577f980e6c5588 (diff) | |
Support Java constructor calls
Diffstat (limited to 'src')
| -rw-r--r-- | src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java | 22 | ||||
| -rw-r--r-- | src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java | 8 |
2 files changed, 26 insertions, 4 deletions
diff --git a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java index 1ab6dfb..3306dbf 100644 --- a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java +++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java @@ -5,6 +5,7 @@ import java.util.List; import org.eclipse.jdt.core.dom.ASTNode; import org.eclipse.jdt.core.dom.BooleanLiteral; +import org.eclipse.jdt.core.dom.ClassInstanceCreation; import org.eclipse.jdt.core.dom.CompilationUnit; import org.eclipse.jdt.core.dom.ConditionalExpression; import org.eclipse.jdt.core.dom.Expression; @@ -16,6 +17,7 @@ import org.eclipse.jdt.core.dom.StringLiteral; import org.eclipse.jdt.core.dom.TypeDeclaration; import org.zwobble.couscous.ast.ClassNode; import org.zwobble.couscous.ast.ClassNodeBuilder; +import org.zwobble.couscous.ast.ConstructorCallNode; import org.zwobble.couscous.ast.ExpressionNode; import org.zwobble.couscous.ast.LiteralNode; import org.zwobble.couscous.ast.MethodCallNode; @@ -85,6 +87,8 @@ public class JavaReader { return readStringLiteral((StringLiteral)expression); case ASTNode.METHOD_INVOCATION: return readMethodInvocation((MethodInvocation)expression); + case ASTNode.CLASS_INSTANCE_CREATION: + return readClassInstanceCreation((ClassInstanceCreation)expression); case ASTNode.CONDITIONAL_EXPRESSION: return readConditionalExpression((ConditionalExpression)expression); default: @@ -104,12 +108,9 @@ public class JavaReader { return LiteralNode.literal(expression.getLiteralValue()); } - @SuppressWarnings("unchecked") private static ExpressionNode readMethodInvocation(MethodInvocation expression) { val methodName = expression.getName().getIdentifier(); - val arguments = Lists.transform( - (List<Expression>)expression.arguments(), - JavaReader::readExpression); + val arguments = readArguments(expression.arguments()); if (expression.getExpression().getNodeType() == ASTNode.SIMPLE_NAME) { val receiver = expression.getExpression().resolveTypeBinding(); return StaticMethodCallNode.staticMethodCall(receiver.getQualifiedName(), methodName, arguments); @@ -122,6 +123,19 @@ public class JavaReader { } } + private static ExpressionNode readClassInstanceCreation(ClassInstanceCreation expression) { + return ConstructorCallNode.constructorCall( + TypeName.of(expression.resolveTypeBinding().getQualifiedName()), + readArguments(expression.arguments())); + } + + @SuppressWarnings({ "unchecked", "rawtypes" }) + private static List<ExpressionNode> readArguments(final List javaArguments) { + return Lists.transform( + (List<Expression>)javaArguments, + JavaReader::readExpression); + } + private static ExpressionNode readConditionalExpression(ConditionalExpression expression) { return new TernaryConditionalNode( readExpression(expression.getExpression()), diff --git a/src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java b/src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java index efcd337..cb2a707 100644 --- a/src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java +++ b/src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java @@ -12,6 +12,7 @@ import org.zwobble.couscous.values.BooleanValue; import static java.util.Arrays.asList; import static org.junit.Assert.assertEquals; +import static org.zwobble.couscous.ast.ConstructorCallNode.constructorCall; import static org.zwobble.couscous.ast.LiteralNode.literal; import static org.zwobble.couscous.ast.MethodCallNode.methodCall; import static org.zwobble.couscous.ast.StaticMethodCallNode.staticMethodCall; @@ -44,6 +45,13 @@ public class JavaReaderTests { } @Test + public void canReadConstructorCalls() { + assertEquals( + constructorCall(TypeName.of("java.lang.String"), asList(literal("_"), literal(42))), + readExpression("new String(\"_\", 42)")); + } + + @Test public void canReadTernaryConditionals() { assertEquals( new TernaryConditionalNode(literal(true), literal(1), literal(2)), |
