aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/interpreter
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-04-02 00:29:32 +0100
committerMichael Williamson <mike@zwobble.org>2016-04-02 00:29:32 +0100
commit7fbbbf62b303ee819017844ff8058b764465e246 (patch)
tree4c1966008c3972856d6d7de812000fe9e2d1b0c8 /src/main/java/org/zwobble/couscous/interpreter
parent65503a9acc04d27d7118cd7fc9077aad5e3179a4 (diff)
Defer generation overrides until necessary, don't mangle C# names
Diffstat (limited to 'src/main/java/org/zwobble/couscous/interpreter')
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/types/UserDefinedInterpreterType.java19
1 files changed, 12 insertions, 7 deletions
diff --git a/src/main/java/org/zwobble/couscous/interpreter/types/UserDefinedInterpreterType.java b/src/main/java/org/zwobble/couscous/interpreter/types/UserDefinedInterpreterType.java
index c26fb32..b8c007b 100644
--- a/src/main/java/org/zwobble/couscous/interpreter/types/UserDefinedInterpreterType.java
+++ b/src/main/java/org/zwobble/couscous/interpreter/types/UserDefinedInterpreterType.java
@@ -19,10 +19,10 @@ import java.util.Set;
import static com.google.common.collect.Iterables.filter;
import static org.zwobble.couscous.types.ParameterizedType.parameterizedType;
import static org.zwobble.couscous.util.Casts.tryCast;
-import static org.zwobble.couscous.util.ExtraLists.eagerMap;
-import static org.zwobble.couscous.util.ExtraLists.list;
-import static org.zwobble.couscous.util.ExtraMaps.map;
-import static org.zwobble.couscous.util.ExtraMaps.toMapWithKeys;
+import static org.zwobble.couscous.util.ExtraIterables.lazyFlatMap;
+import static org.zwobble.couscous.util.ExtraIterables.lazyMap;
+import static org.zwobble.couscous.util.ExtraLists.*;
+import static org.zwobble.couscous.util.ExtraMaps.*;
public class UserDefinedInterpreterType implements InterpreterType {
private final TypeNode type;
@@ -34,9 +34,14 @@ public class UserDefinedInterpreterType implements InterpreterType {
this.fields = tryCast(ClassNode.class, type)
.map(classNode -> toMapWithKeys(classNode.getFields(), FieldDeclarationNode::getName))
.orElse(map());
- this.methods = toMapWithKeys(
- filter(type.getMethods(), method -> !method.isAbstract()),
- method -> method.signature().generic());
+
+ Iterable<MethodNode> concreteMethods = filter(type.getMethods(), method -> !method.isAbstract());
+
+ Iterable<Map.Entry<MethodSignature, MethodNode>> entries = lazyFlatMap(concreteMethods, method -> {
+ List<MethodSignature> signatures = cons(method.signature(), method.getOverrides());
+ return lazyMap(signatures, signature -> entry(signature.generic(), method));
+ });
+ this.methods = toMap(entries);
}
@Override