aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java22
-rw-r--r--src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java8
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)),