aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org')
-rw-r--r--src/main/java/org/zwobble/couscous/frontends/java/JavaExpressionReader.java2
-rw-r--r--src/main/java/org/zwobble/couscous/frontends/java/JavaMethods.java43
-rw-r--r--src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java33
3 files changed, 45 insertions, 33 deletions
diff --git a/src/main/java/org/zwobble/couscous/frontends/java/JavaExpressionReader.java b/src/main/java/org/zwobble/couscous/frontends/java/JavaExpressionReader.java
index 72766b3..096162f 100644
--- a/src/main/java/org/zwobble/couscous/frontends/java/JavaExpressionReader.java
+++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaExpressionReader.java
@@ -184,7 +184,7 @@ public class JavaExpressionReader {
List<ExpressionNode> arguments = readArguments(
expression.resolveMethodBinding(),
expression.arguments());
- MethodSignature signature = JavaReader.signature(expression.resolveMethodBinding());
+ MethodSignature signature = JavaMethods.signature(expression.resolveMethodBinding());
final Type type = signature.getReturnType();
IMethodBinding methodBinding = expression.resolveMethodBinding();
diff --git a/src/main/java/org/zwobble/couscous/frontends/java/JavaMethods.java b/src/main/java/org/zwobble/couscous/frontends/java/JavaMethods.java
new file mode 100644
index 0000000..42211fe
--- /dev/null
+++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaMethods.java
@@ -0,0 +1,43 @@
+package org.zwobble.couscous.frontends.java;
+
+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.ast.types.BoundTypeParameter;
+import org.zwobble.couscous.ast.types.Type;
+import org.zwobble.couscous.ast.types.TypeParameter;
+
+import java.util.List;
+
+import static java.util.Arrays.asList;
+import static org.zwobble.couscous.frontends.java.JavaTypes.typeOf;
+import static org.zwobble.couscous.util.ExtraLists.eagerMap;
+
+class JavaMethods {
+ static MethodSignature signature(IMethodBinding method) {
+ ITypeBinding declaringClass = method.getDeclaringClass();
+ ITypeBinding erasedDeclaringClass = declaringClass.getErasure();
+
+ List<Type> argumentTypes = eagerMap(asList(method.getParameterTypes()), JavaTypes::typeOf);
+ Type returnType = typeOf(method.getReturnType());
+
+ if (declaringClass.isEqualTo(erasedDeclaringClass)) {
+ return new MethodSignature(method.getName(), argumentTypes, returnType);
+ } else {
+ IMethodBinding[] erasedMethods = erasedDeclaringClass.getDeclaredMethods();
+ IMethodBinding erasedMethod = Iterables.getOnlyElement(Iterables.filter(
+ asList(erasedMethods),
+ m -> m.isSubsignature(method)));
+ return new MethodSignature(
+ method.getName(),
+ eagerMap(
+ argumentTypes,
+ asList(erasedMethod.getParameterTypes()),
+ (argumentType, erasedParameterType) -> new BoundTypeParameter((TypeParameter) typeOf(erasedParameterType), argumentType)),
+ new BoundTypeParameter(
+ (TypeParameter) typeOf(erasedMethod.getReturnType()),
+ returnType));
+ }
+ }
+}
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 382c592..4afe02b 100644
--- a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java
+++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java
@@ -1,7 +1,6 @@
package org.zwobble.couscous.frontends.java;
import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Iterables;
import com.google.common.collect.Maps;
import org.eclipse.jdt.core.compiler.IProblem;
import org.eclipse.jdt.core.dom.*;
@@ -9,10 +8,8 @@ import org.zwobble.couscous.ast.*;
import org.zwobble.couscous.ast.sugar.AnonymousClass;
import org.zwobble.couscous.ast.sugar.Lambda;
import org.zwobble.couscous.ast.sugar.TypeDeclarationBody;
-import org.zwobble.couscous.ast.types.BoundTypeParameter;
import org.zwobble.couscous.ast.types.ScalarType;
import org.zwobble.couscous.ast.types.Type;
-import org.zwobble.couscous.ast.types.TypeParameter;
import org.zwobble.couscous.ast.visitors.NodeTransformer;
import org.zwobble.couscous.util.ExtraLists;
@@ -434,38 +431,10 @@ public class JavaReader {
return ExtraLists.concat(list(declaringClass), asList(declaringClass.getInterfaces()))
.stream()
.flatMap(type -> asList(type.getDeclaredMethods()).stream().filter(superMethod -> methodBinding.overrides(superMethod)))
- .map(JavaReader::signature)
+ .map(JavaMethods::signature)
.collect(Collectors.toList());
}
- // TODO: move this elsewhere
- static MethodSignature signature(IMethodBinding method) {
- ITypeBinding declaringClass = method.getDeclaringClass();
- ITypeBinding erasedDeclaringClass = declaringClass.getErasure();
-
- List<Type> argumentTypes = eagerMap(asList(method.getParameterTypes()), JavaTypes::typeOf);
- Type returnType = typeOf(method.getReturnType());
-
- if (declaringClass.isEqualTo(erasedDeclaringClass)) {
- return new MethodSignature(method.getName(), argumentTypes, returnType);
- } else {
- IMethodBinding[] erasedMethods = erasedDeclaringClass.getDeclaredMethods();
- IMethodBinding erasedMethod = Iterables.getOnlyElement(Iterables.filter(
- asList(erasedMethods),
- m -> m.isSubsignature(method)));
- return new MethodSignature(
- method.getName(),
- eagerMap(
- argumentTypes,
- asList(erasedMethod.getParameterTypes()),
- (argumentType, erasedParameterType) -> new BoundTypeParameter((TypeParameter) typeOf(erasedParameterType), argumentType)),
- new BoundTypeParameter(
- (TypeParameter) typeOf(erasedMethod.getReturnType()),
- returnType));
- }
- }
-
-
private List<AnnotationNode> readAnnotations(MethodDeclaration method) {
return eagerMap(asList(method.resolveBinding().getAnnotations()), this::readAnnotation);
}