aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-03-29 14:11:44 +0100
committerMichael Williamson <mike@zwobble.org>2016-03-29 14:11:44 +0100
commitd43cef47e186d11692cb7c8db571ca70487831de (patch)
tree8b63515d2846723369ab8148ee83cc27401bf7b9 /src/main/java/org
parent8599ab56fa59ec99c4db8b601ca92be0828b06de (diff)
Extract bind method to JavaTypes
Diffstat (limited to 'src/main/java/org')
-rw-r--r--src/main/java/org/zwobble/couscous/frontends/java/JavaMethods.java16
-rw-r--r--src/main/java/org/zwobble/couscous/frontends/java/JavaTypes.java10
2 files changed, 12 insertions, 14 deletions
diff --git a/src/main/java/org/zwobble/couscous/frontends/java/JavaMethods.java b/src/main/java/org/zwobble/couscous/frontends/java/JavaMethods.java
index 7b8a004..f803fff 100644
--- a/src/main/java/org/zwobble/couscous/frontends/java/JavaMethods.java
+++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaMethods.java
@@ -4,9 +4,7 @@ import com.google.common.collect.Iterables;
import org.eclipse.jdt.core.dom.IMethodBinding;
import org.eclipse.jdt.core.dom.ITypeBinding;
import org.zwobble.couscous.ast.MethodSignature;
-import org.zwobble.couscous.types.BoundTypeParameter;
import org.zwobble.couscous.types.Type;
-import org.zwobble.couscous.types.TypeParameter;
import java.util.List;
@@ -34,19 +32,9 @@ class JavaMethods {
eagerMap(
argumentTypes,
asList(erasedMethod.getParameterTypes()),
- (argumentType, erasedParameterType) -> typeParameterForGeneric(erasedParameterType, argumentType)),
- typeParameterForGeneric(erasedMethod.getReturnType(), returnType));
+ (argumentType, erasedParameterType) -> JavaTypes.bind(typeOf(erasedParameterType), argumentType)),
+ JavaTypes.bind(typeOf(erasedMethod.getReturnType()), returnType));
}
}
- private static Type typeParameterForGeneric(ITypeBinding erasedTypeBinding, Type type) {
- Type erasedType = typeOf(erasedTypeBinding);
- if (erasedType.equals(type)) {
- return type;
- } else if (!(erasedType instanceof TypeParameter)) {
- throw new RuntimeException("Type parameter was " + erasedType);
- } else {
- return new BoundTypeParameter((TypeParameter) typeOf(erasedTypeBinding), type);
- }
- }
}
diff --git a/src/main/java/org/zwobble/couscous/frontends/java/JavaTypes.java b/src/main/java/org/zwobble/couscous/frontends/java/JavaTypes.java
index 7282449..900ffe2 100644
--- a/src/main/java/org/zwobble/couscous/frontends/java/JavaTypes.java
+++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaTypes.java
@@ -80,4 +80,14 @@ class JavaTypes {
.map(JavaTypes::typeOf)
.filter(type -> !type.equals(Types.OBJECT));
}
+
+ static Type bind(Type genericType, Type concreteType) {
+ if (genericType.equals(concreteType)) {
+ return concreteType;
+ } else if (!(genericType instanceof TypeParameter)) {
+ throw new RuntimeException("Type parameter was " + genericType);
+ } else {
+ return new BoundTypeParameter((TypeParameter) genericType, concreteType);
+ }
+ }
}