aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/frontends
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-07-14 22:50:55 +0100
committerMichael Williamson <mike@zwobble.org>2016-07-14 22:50:55 +0100
commit0970f5a5074da34fffaea70f3b42d012edb501c5 (patch)
tree27ab840b4de91e790abd2606307cba47e2e4d053 /src/main/java/org/zwobble/couscous/frontends
parentdc601f2d7cdec8cc9c366f70be59fc0666f132cb (diff)
Simplify dynamic visitor creation
Diffstat (limited to 'src/main/java/org/zwobble/couscous/frontends')
-rw-r--r--src/main/java/org/zwobble/couscous/frontends/java/FreeVariables.java13
1 files changed, 4 insertions, 9 deletions
diff --git a/src/main/java/org/zwobble/couscous/frontends/java/FreeVariables.java b/src/main/java/org/zwobble/couscous/frontends/java/FreeVariables.java
index 623179d..b904f0d 100644
--- a/src/main/java/org/zwobble/couscous/frontends/java/FreeVariables.java
+++ b/src/main/java/org/zwobble/couscous/frontends/java/FreeVariables.java
@@ -1,7 +1,6 @@
package org.zwobble.couscous.frontends.java;
import com.google.common.collect.ImmutableSet;
-import net.bytebuddy.description.type.TypeDescription;
import org.zwobble.couscous.ast.*;
import org.zwobble.couscous.ast.visitors.DynamicNodeMapper;
import org.zwobble.couscous.types.*;
@@ -20,14 +19,10 @@ import static org.zwobble.couscous.util.ExtraLists.list;
import static org.zwobble.couscous.util.ExtraStreams.toStream;
public class FreeVariables {
- private static final Function<Node, Stream<Type>> findFreeTypeParameters =
- DynamicNodeMapper.<FindReferencedTypes, Stream<Type>>build(
- FindReferencedTypes.class,
- new TypeDescription.ForLoadedType(Stream.class),
- "visit"
- ).instantiate(new FindReferencedTypes());
-
public static class FindReferencedTypes {
+ private static final Function<Node, Stream<Type>> VISITOR =
+ DynamicNodeMapper.instantiate(new FindReferencedTypes(), "visit");
+
public Stream<Type> visit(Node node) {
return Stream.empty();
}
@@ -58,7 +53,7 @@ public class FreeVariables {
public static Set<TypeParameter> findFreeTypeParameters(Node root) {
// TODO: this assumes that *all* type parameters are free, which is often but not always true in inner types
Iterable<Type> types = iterable(() -> descendantNodesAndSelf(root)
- .flatMap(findFreeTypeParameters));
+ .flatMap(FindReferencedTypes.VISITOR));
return ImmutableSet.copyOf(lazyFlatMap(types, type -> type.accept(new Type.Visitor<Iterable<TypeParameter>>() {
@Override