From 4054a250df414bb2c756d12b133aaaa8cd6bbce3 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Tue, 20 Oct 2015 19:00:49 +0100 Subject: Java: read formal method arguments --- .../java/org/zwobble/couscous/ast/ClassNodeBuilder.java | 8 ++++++++ .../org/zwobble/couscous/frontends/java/JavaReader.java | 13 +++++++++++++ 2 files changed, 21 insertions(+) (limited to 'src/main/java') 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 fields; @@ -85,6 +88,11 @@ public class ClassNodeBuilder { return ThisReferenceNode.thisReference(name); } + public MethodBuilder argument(String id, String name, TypeName type) { + arguments.add(formalArg(var(id, name, type))); + return this; + } + public MethodBuilder 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()); } -- cgit v1.2.3