aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-10-30 20:33:27 +0000
committerMichael Williamson <mike@zwobble.org>2016-10-30 20:33:27 +0000
commitbbc153ecf8a956ae09a1031c49339dcf76cc1576 (patch)
tree79703aa27b5ac92b587feba2096f219a8bb57ad3
parent76f3ac478316f401a6e55208198201c9a12713cb (diff)
Simplify closure generation
-rw-r--r--src/main/java/org/zwobble/couscous/transforms/ClosureGenerator.java13
1 files changed, 5 insertions, 8 deletions
diff --git a/src/main/java/org/zwobble/couscous/transforms/ClosureGenerator.java b/src/main/java/org/zwobble/couscous/transforms/ClosureGenerator.java
index 8c454d4..dd54946 100644
--- a/src/main/java/org/zwobble/couscous/transforms/ClosureGenerator.java
+++ b/src/main/java/org/zwobble/couscous/transforms/ClosureGenerator.java
@@ -29,8 +29,7 @@ import static org.zwobble.couscous.frontends.java.FreeVariables.findFreeVariable
import static org.zwobble.couscous.types.Types.erasure;
import static org.zwobble.couscous.util.Casts.tryCast;
import static org.zwobble.couscous.util.ExtraIterables.lazyMap;
-import static org.zwobble.couscous.util.ExtraIterables.only;
-import static org.zwobble.couscous.util.ExtraLists.*;
+import static org.zwobble.couscous.util.ExtraLists.list;
public class ClosureGenerator {
public static GeneratedClosure classWithCapture(
@@ -59,7 +58,7 @@ public class ClosureGenerator {
NodeTransformer transformer = replaceCaptureReferencesTransformer(classNode.getName(), capturedVariables);
- ClassNode generatedClass = new ClassNode(
+ ClassNode generatedClass = transformer.transformClass(new ClassNode(
classNode.getName(),
// TODO: generate fresh type parameter and replace in body
ExtraLists.concat(lazyMap(freeTypeParameters, parameter -> formalTypeParameter(parameter)), classNode.getTypeParameters()),
@@ -67,11 +66,9 @@ public class ClosureGenerator {
fields,
list(),
buildConstructor(scope, classNode.getName(), capturedVariables, classNode.getConstructor()),
- eagerMap(classNode.getMethods(), method ->
- method.mapBody(body -> transformer.transformStatements(body))),
- // TODO: should just call replaceCaptureReferences over entire class?
- eagerMap(classNode.getInnerTypes(), type -> only(transformer.transformTypeDeclaration(type)))
- );
+ classNode.getMethods(),
+ classNode.getInnerTypes()
+ ));
return new GeneratedClosure(generatedClass, freeTypeParameters, freeVariables);
}