diff options
| author | Michael Williamson <mike@zwobble.org> | 2017-03-30 22:06:49 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2017-03-30 22:06:49 +0100 |
| commit | 63bc7c39a52a3de9c578bbfbe42c0076f6a748c0 (patch) | |
| tree | 4b346c1f7a021c2a24a783aa53703a87a91b2c56 /src/main/java/org/zwobble/couscous/frontends | |
| parent | 412d0e3e286acde8a65df3636444e46580254e5b (diff) | |
Fix type parameter capture
Diffstat (limited to 'src/main/java/org/zwobble/couscous/frontends')
| -rw-r--r-- | src/main/java/org/zwobble/couscous/frontends/java/GeneratedClosure.java | 17 |
1 files changed, 4 insertions, 13 deletions
diff --git a/src/main/java/org/zwobble/couscous/frontends/java/GeneratedClosure.java b/src/main/java/org/zwobble/couscous/frontends/java/GeneratedClosure.java index 0bf7649..9e0e4bb 100644 --- a/src/main/java/org/zwobble/couscous/frontends/java/GeneratedClosure.java +++ b/src/main/java/org/zwobble/couscous/frontends/java/GeneratedClosure.java @@ -1,27 +1,22 @@ package org.zwobble.couscous.frontends.java; -import com.google.common.collect.ImmutableList; import org.zwobble.couscous.ast.ClassNode; import org.zwobble.couscous.ast.ConstructorCallNode; import org.zwobble.couscous.ast.ExpressionNode; import org.zwobble.couscous.ast.ReferenceNode; import org.zwobble.couscous.types.ScalarType; -import org.zwobble.couscous.types.TypeParameter; import org.zwobble.couscous.util.InsertionOrderSet; import static org.zwobble.couscous.ast.ConstructorCallNode.constructorCall; import static org.zwobble.couscous.types.Types.addTypeParameters; -import static org.zwobble.couscous.util.ExtraLists.concat; -import static org.zwobble.couscous.util.ExtraLists.list; +import static org.zwobble.couscous.util.ExtraLists.*; public class GeneratedClosure { private final ClassNode classNode; - private final InsertionOrderSet<TypeParameter> capturedTypes; private final InsertionOrderSet<ReferenceNode> capturedVariables; - public GeneratedClosure(ClassNode classNode, InsertionOrderSet<TypeParameter> capturedTypes, InsertionOrderSet<ReferenceNode> capturedVariables) { + public GeneratedClosure(ClassNode classNode, InsertionOrderSet<ReferenceNode> capturedVariables) { this.classNode = classNode; - this.capturedTypes = capturedTypes; this.capturedVariables = capturedVariables; } @@ -36,19 +31,15 @@ public class GeneratedClosure { public ConstructorCallNode generateConstructor(Iterable<ExpressionNode> arguments) { return constructorCall( // TODO: tidy up type parameters to avoid copy - addTypeParameters(getType(), ImmutableList.copyOf(capturedTypes.asList())), + addTypeParameters(getType(), eagerMap(classNode.getTypeParameters(), parameter -> parameter.getType())), concat(capturedVariables, arguments)); } public boolean hasCaptures() { - return !capturedTypes.isEmpty() || !capturedVariables.isEmpty(); + return !capturedVariables.isEmpty(); } private ScalarType getType() { return classNode.getName(); } - - public InsertionOrderSet<TypeParameter> getCapturedTypes() { - return capturedTypes; - } } |
