aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2015-11-22 11:27:23 +0000
committerMichael Williamson <mike@zwobble.org>2015-11-22 11:27:23 +0000
commit485753856e0e97d64c5e36dbb5b81afa6efbe06a (patch)
tree679b14025d6040ccfbc047fc1737cb7247c01c05 /src/main/java
parent7b13fe3b90542a276355e8b8de1fe49afe68c7b3 (diff)
Read lambdas with arguments
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java45
1 files changed, 30 insertions, 15 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 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<IAnnotationBinding> getAnnotations();
- List<SingleVariableDeclaration> parameters();
+ Stream<FormalArgumentNode> getFormalArguments();
// TODO: add tests around void methods
Stream<StatementNode> getBody();
}
@@ -131,10 +128,11 @@ public class JavaReader {
return asList(method.resolveBinding().getAnnotations());
}
- @SuppressWarnings("unchecked")
@Override
- public List<SingleVariableDeclaration> parameters() {
- return method.parameters();
+ public Stream<FormalArgumentNode> getFormalArguments() {
+ @SuppressWarnings("unchecked")
+ List<SingleVariableDeclaration> parameters = method.parameters();
+ return parameters.stream().map(parameter -> readSingleVariableDeclaration(parameter));
}
@Override
@@ -164,8 +162,21 @@ public class JavaReader {
}
@Override
- public List<SingleVariableDeclaration> parameters() {
- return Collections.emptyList();
+ public Stream<FormalArgumentNode> 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);
}