aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/frontends
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2017-03-30 22:06:49 +0100
committerMichael Williamson <mike@zwobble.org>2017-03-30 22:06:49 +0100
commit63bc7c39a52a3de9c578bbfbe42c0076f6a748c0 (patch)
tree4b346c1f7a021c2a24a783aa53703a87a91b2c56 /src/main/java/org/zwobble/couscous/frontends
parent412d0e3e286acde8a65df3636444e46580254e5b (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.java17
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;
- }
}