From 485753856e0e97d64c5e36dbb5b81afa6efbe06a Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 22 Nov 2015 11:27:23 +0000 Subject: Read lambdas with arguments --- .../couscous/frontends/java/JavaReader.java | 45 ++++++++++++++-------- 1 file changed, 30 insertions(+), 15 deletions(-) (limited to 'src/main/java') 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 ba80bf4..cca29dc 100644 --- a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java +++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java @@ -2,14 +2,11 @@ package org.zwobble.couscous.frontends.java; import com.google.common.collect.ImmutableList; import org.eclipse.jdt.core.dom.*; -import org.zwobble.couscous.ast.ClassNode; -import org.zwobble.couscous.ast.ClassNodeBuilder; -import org.zwobble.couscous.ast.StatementNode; -import org.zwobble.couscous.ast.TypeName; +import org.zwobble.couscous.ast.*; +import org.zwobble.couscous.ast.VariableDeclaration; import java.io.IOException; import java.nio.file.Path; -import java.util.Collections; import java.util.List; import java.util.Optional; import java.util.stream.Stream; @@ -114,7 +111,7 @@ public class JavaReader { private interface FunctionDeclaration { List getAnnotations(); - List parameters(); + Stream getFormalArguments(); // TODO: add tests around void methods Stream getBody(); } @@ -131,10 +128,11 @@ public class JavaReader { return asList(method.resolveBinding().getAnnotations()); } - @SuppressWarnings("unchecked") @Override - public List parameters() { - return method.parameters(); + public Stream getFormalArguments() { + @SuppressWarnings("unchecked") + List parameters = method.parameters(); + return parameters.stream().map(parameter -> readSingleVariableDeclaration(parameter)); } @Override @@ -164,8 +162,21 @@ public class JavaReader { } @Override - public List parameters() { - return Collections.emptyList(); + public Stream getFormalArguments() { + return ((List)expression.parameters()).stream() + .map(this::readParameter); + } + + private FormalArgumentNode readParameter(Object parameter) { + if (parameter instanceof SingleVariableDeclaration) { + return readSingleVariableDeclaration((SingleVariableDeclaration) parameter); + } else { + VariableDeclarationFragment fragment = (VariableDeclarationFragment)parameter; + return FormalArgumentNode.formalArg(VariableDeclaration.var( + fragment.resolveBinding().getKey(), + fragment.getName().getIdentifier(), + typeOf(fragment.resolveBinding().getType()))); + } } @SuppressWarnings("unchecked") @@ -191,10 +202,7 @@ public class JavaReader { for (IAnnotationBinding annotation : method.getAnnotations()) { builder.annotation(typeOf(annotation.getAnnotationType())); } - for (Object parameterObject : method.parameters()) { - SingleVariableDeclaration parameter = (SingleVariableDeclaration)parameterObject; - builder.argument(parameter.resolveBinding().getKey(), parameter.getName().getIdentifier(), typeOf(parameter.resolveBinding())); - } + method.getFormalArguments().forEach(builder::argument); method.getBody().forEach(builder::statement); return builder; } @@ -210,6 +218,13 @@ public class JavaReader { return ast.getPackage().getName().getFullyQualifiedName() + "." + type.getName().getFullyQualifiedName(); } + private FormalArgumentNode readSingleVariableDeclaration(SingleVariableDeclaration parameter) { + return FormalArgumentNode.formalArg(VariableDeclaration.var( + parameter.resolveBinding().getKey(), + parameter.getName().getIdentifier(), + typeOf(parameter.resolveBinding()))); + } + private JavaExpressionReader expressionReader() { return new JavaExpressionReader(this); } -- cgit v1.2.3