From 1be56305942dc56a792c0bafcf80c39853a43730 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Wed, 30 Mar 2016 15:05:43 +0100 Subject: Rename Java{Expression->}MethodReferenceReader --- .../java/JavaExpressionMethodReferenceReader.java | 92 ---------------------- .../frontends/java/JavaMethodReferenceReader.java | 92 ++++++++++++++++++++++ .../couscous/frontends/java/JavaReader.java | 4 +- 3 files changed, 94 insertions(+), 94 deletions(-) delete mode 100644 src/main/java/org/zwobble/couscous/frontends/java/JavaExpressionMethodReferenceReader.java create mode 100644 src/main/java/org/zwobble/couscous/frontends/java/JavaMethodReferenceReader.java (limited to 'src/main/java') diff --git a/src/main/java/org/zwobble/couscous/frontends/java/JavaExpressionMethodReferenceReader.java b/src/main/java/org/zwobble/couscous/frontends/java/JavaExpressionMethodReferenceReader.java deleted file mode 100644 index c95e84b..0000000 --- a/src/main/java/org/zwobble/couscous/frontends/java/JavaExpressionMethodReferenceReader.java +++ /dev/null @@ -1,92 +0,0 @@ -package org.zwobble.couscous.frontends.java; - -import com.google.common.collect.ImmutableList; -import org.eclipse.jdt.core.dom.*; -import org.zwobble.couscous.ast.ExpressionNode; -import org.zwobble.couscous.ast.FormalArgumentNode; -import org.zwobble.couscous.ast.VariableReferenceNode; -import org.zwobble.couscous.ast.sugar.Lambda; -import org.zwobble.couscous.types.Type; -import org.zwobble.couscous.types.Types; - -import java.util.List; -import java.util.function.Function; - -import static org.zwobble.couscous.ast.ConstructorCallNode.constructorCall; -import static org.zwobble.couscous.ast.MethodCallNode.methodCall; -import static org.zwobble.couscous.ast.MethodCallNode.staticMethodCall; -import static org.zwobble.couscous.ast.ReturnNode.returns; -import static org.zwobble.couscous.ast.sugar.Lambda.lambda; -import static org.zwobble.couscous.frontends.java.JavaTypes.typeOf; -import static org.zwobble.couscous.util.ExtraLists.eagerMap; -import static org.zwobble.couscous.util.ExtraLists.list; - -public class JavaExpressionMethodReferenceReader { - private final JavaReader javaReader; - - public JavaExpressionMethodReferenceReader(JavaReader javaReader) { - this.javaReader = javaReader; - } - - public Lambda toLambda(Scope scope, ExpressionMethodReference expression) { - return toLambda( - scope, - expression, - arguments -> generateValue(scope, expression, arguments)); - } - - public Lambda toLambda(Scope scope, CreationReference expression) { - return toLambda( - scope, - expression, - arguments -> constructorCall(typeOf(expression.getType()), arguments)); - } - - private Lambda toLambda( - Scope scope, - MethodReference expression, - Function, ExpressionNode> generateValue) - { - IMethodBinding functionalInterfaceMethod = expression.resolveTypeBinding().getFunctionalInterfaceMethod(); - List formalArguments = formalArguments(scope, functionalInterfaceMethod); - List arguments = eagerMap(formalArguments, VariableReferenceNode::reference); - - return lambda( - formalArguments, - list(returns(JavaExpressionReader.coerceExpression( - typeOf(functionalInterfaceMethod.getReturnType()), - generateValue.apply(arguments))))); - } - - private List formalArguments(Scope scope, IMethodBinding functionalInterfaceMethod) { - ImmutableList.Builder arguments = ImmutableList.builder(); - - ITypeBinding[] parameterTypes = functionalInterfaceMethod.getParameterTypes(); - for (int index = 0; index < parameterTypes.length; index++) { - ITypeBinding parameterType = parameterTypes[index]; - arguments.add(scope.formalArgument("arg" + index, typeOf(parameterType))); - } - - return arguments.build(); - } - - private ExpressionNode generateValue(Scope scope, ExpressionMethodReference expression, List arguments) { - IMethodBinding methodBinding = expression.resolveMethodBinding(); - String methodName = expression.getName().getIdentifier(); - Type type = typeOf(methodBinding.getReturnType()); - - if (Modifier.isStatic(methodBinding.getModifiers())) { - return staticMethodCall( - Types.erasure(typeOf(methodBinding.getDeclaringClass())), - methodName, - arguments, - type); - } else { - return methodCall( - javaReader.readExpressionWithoutBoxing(scope, expression.getExpression()), - methodName, - arguments, - type); - } - } -} diff --git a/src/main/java/org/zwobble/couscous/frontends/java/JavaMethodReferenceReader.java b/src/main/java/org/zwobble/couscous/frontends/java/JavaMethodReferenceReader.java new file mode 100644 index 0000000..d2d5666 --- /dev/null +++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaMethodReferenceReader.java @@ -0,0 +1,92 @@ +package org.zwobble.couscous.frontends.java; + +import com.google.common.collect.ImmutableList; +import org.eclipse.jdt.core.dom.*; +import org.zwobble.couscous.ast.ExpressionNode; +import org.zwobble.couscous.ast.FormalArgumentNode; +import org.zwobble.couscous.ast.VariableReferenceNode; +import org.zwobble.couscous.ast.sugar.Lambda; +import org.zwobble.couscous.types.Type; +import org.zwobble.couscous.types.Types; + +import java.util.List; +import java.util.function.Function; + +import static org.zwobble.couscous.ast.ConstructorCallNode.constructorCall; +import static org.zwobble.couscous.ast.MethodCallNode.methodCall; +import static org.zwobble.couscous.ast.MethodCallNode.staticMethodCall; +import static org.zwobble.couscous.ast.ReturnNode.returns; +import static org.zwobble.couscous.ast.sugar.Lambda.lambda; +import static org.zwobble.couscous.frontends.java.JavaTypes.typeOf; +import static org.zwobble.couscous.util.ExtraLists.eagerMap; +import static org.zwobble.couscous.util.ExtraLists.list; + +public class JavaMethodReferenceReader { + private final JavaReader javaReader; + + public JavaMethodReferenceReader(JavaReader javaReader) { + this.javaReader = javaReader; + } + + public Lambda toLambda(Scope scope, ExpressionMethodReference expression) { + return toLambda( + scope, + expression, + arguments -> generateValue(scope, expression, arguments)); + } + + public Lambda toLambda(Scope scope, CreationReference expression) { + return toLambda( + scope, + expression, + arguments -> constructorCall(typeOf(expression.getType()), arguments)); + } + + private Lambda toLambda( + Scope scope, + MethodReference expression, + Function, ExpressionNode> generateValue) + { + IMethodBinding functionalInterfaceMethod = expression.resolveTypeBinding().getFunctionalInterfaceMethod(); + List formalArguments = formalArguments(scope, functionalInterfaceMethod); + List arguments = eagerMap(formalArguments, VariableReferenceNode::reference); + + return lambda( + formalArguments, + list(returns(JavaExpressionReader.coerceExpression( + typeOf(functionalInterfaceMethod.getReturnType()), + generateValue.apply(arguments))))); + } + + private List formalArguments(Scope scope, IMethodBinding functionalInterfaceMethod) { + ImmutableList.Builder arguments = ImmutableList.builder(); + + ITypeBinding[] parameterTypes = functionalInterfaceMethod.getParameterTypes(); + for (int index = 0; index < parameterTypes.length; index++) { + ITypeBinding parameterType = parameterTypes[index]; + arguments.add(scope.formalArgument("arg" + index, typeOf(parameterType))); + } + + return arguments.build(); + } + + private ExpressionNode generateValue(Scope scope, ExpressionMethodReference expression, List arguments) { + IMethodBinding methodBinding = expression.resolveMethodBinding(); + String methodName = expression.getName().getIdentifier(); + Type type = typeOf(methodBinding.getReturnType()); + + if (Modifier.isStatic(methodBinding.getModifiers())) { + return staticMethodCall( + Types.erasure(typeOf(methodBinding.getDeclaringClass())), + methodName, + arguments, + type); + } else { + return methodCall( + javaReader.readExpressionWithoutBoxing(scope, expression.getExpression()), + methodName, + arguments, + type); + } + } +} 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 037d1d2..e6dbe50 100644 --- a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java +++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java @@ -120,14 +120,14 @@ public class JavaReader { return readLambda( outerScope, expression, - scope -> new JavaExpressionMethodReferenceReader(this).toLambda(scope, expression)); + scope -> new JavaMethodReferenceReader(this).toLambda(scope, expression)); } GeneratedClosure readCreationReference(Scope outerScope, CreationReference expression) { return readLambda( outerScope, expression, - scope -> new JavaExpressionMethodReferenceReader(this).toLambda(scope, expression)); + scope -> new JavaMethodReferenceReader(this).toLambda(scope, expression)); } GeneratedClosure readLambda(Scope outerScope, LambdaExpression expression) { -- cgit v1.2.3