diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-04-02 00:29:32 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-04-02 00:29:32 +0100 |
| commit | 7fbbbf62b303ee819017844ff8058b764465e246 (patch) | |
| tree | 4c1966008c3972856d6d7de812000fe9e2d1b0c8 /src/main/java/org/zwobble/couscous/interpreter | |
| parent | 65503a9acc04d27d7118cd7fc9077aad5e3179a4 (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.java | 19 |
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 |
