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/main/java/org/zwobble | |
| parent | 9f72ebdf07d4b704c48807a6b4577f980e6c5588 (diff) | |
Support Java constructor calls
Diffstat (limited to 'src/main/java/org/zwobble')
| -rw-r--r-- | src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java | 22 |
1 files changed, 18 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()), |
