aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2015-10-20 19:00:49 +0100
committerMichael Williamson <mike@zwobble.org>2015-10-20 19:00:49 +0100
commit4054a250df414bb2c756d12b133aaaa8cd6bbce3 (patch)
treec7c1951aa372a3d1846cb06dfa1fc3f721c0e6ef /src/main/java/org/zwobble/couscous
parent4655cf0dc523484a05f4b648fd87ff9fdd0605ca (diff)
Java: read formal method arguments
Diffstat (limited to 'src/main/java/org/zwobble/couscous')
-rw-r--r--src/main/java/org/zwobble/couscous/ast/ClassNodeBuilder.java8
-rw-r--r--src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java13
2 files changed, 21 insertions, 0 deletions
diff --git a/src/main/java/org/zwobble/couscous/ast/ClassNodeBuilder.java b/src/main/java/org/zwobble/couscous/ast/ClassNodeBuilder.java
index b4ddad9..7466f07 100644
--- a/src/main/java/org/zwobble/couscous/ast/ClassNodeBuilder.java
+++ b/src/main/java/org/zwobble/couscous/ast/ClassNodeBuilder.java
@@ -5,6 +5,9 @@ import java.util.function.Function;
import com.google.common.collect.ImmutableList;
+import static org.zwobble.couscous.ast.FormalArgumentNode.formalArg;
+import static org.zwobble.couscous.ast.VariableDeclaration.var;
+
public class ClassNodeBuilder {
private final TypeName name;
private final ImmutableList.Builder<FieldDeclarationNode> fields;
@@ -85,6 +88,11 @@ public class ClassNodeBuilder {
return ThisReferenceNode.thisReference(name);
}
+ public MethodBuilder<T> argument(String id, String name, TypeName type) {
+ arguments.add(formalArg(var(id, name, type)));
+ return this;
+ }
+
public MethodBuilder<T> argument(FormalArgumentNode argument) {
arguments.add(argument);
return this;
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 b8a3b62..22d42ab 100644
--- a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java
+++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java
@@ -22,6 +22,7 @@ import org.eclipse.jdt.core.dom.Modifier;
import org.eclipse.jdt.core.dom.NumberLiteral;
import org.eclipse.jdt.core.dom.ReturnStatement;
import org.eclipse.jdt.core.dom.SimpleName;
+import org.eclipse.jdt.core.dom.SingleVariableDeclaration;
import org.eclipse.jdt.core.dom.Statement;
import org.eclipse.jdt.core.dom.StringLiteral;
import org.eclipse.jdt.core.dom.ThisExpression;
@@ -102,6 +103,14 @@ public class JavaReader {
method.getName().getIdentifier(),
true,
builder -> {
+ for (Object parameterObject : method.parameters()) {
+ val parameter = (SingleVariableDeclaration)parameterObject;
+ builder.argument(
+ parameter.resolveBinding().getKey(),
+ parameter.getName().getIdentifier(),
+ typeOf(parameter.resolveBinding()));
+ }
+
for (Object statement : method.getBody().statements()) {
for (StatementNode intermediateStatement : readStatement((Statement)statement)) {
builder.statement(intermediateStatement);
@@ -282,6 +291,10 @@ public class JavaReader {
return typeOf(expression.resolveTypeBinding());
}
+ private static TypeName typeOf(IVariableBinding variableBinding) {
+ return typeOf(variableBinding.getType());
+ }
+
private static TypeName typeOf(ITypeBinding typeBinding) {
return TypeName.of(typeBinding.getQualifiedName());
}