aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/backends
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/backends
parentdc601f2d7cdec8cc9c366f70be59fc0666f132cb (diff)
Simplify dynamic visitor creation
Diffstat (limited to 'src/main/java/org/zwobble/couscous/backends')
-rw-r--r--src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java19
-rw-r--r--src/main/java/org/zwobble/couscous/backends/python/PythonCodeGenerator.java12
2 files changed, 11 insertions, 20 deletions
diff --git a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java
index 8765b9b..91a4400 100644
--- a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java
+++ b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java
@@ -132,11 +132,9 @@ public class CsharpSerializer {
private CsharpSerializer(SourceCodeWriter writer) {
this.writer = writer;
- this.write = WRITE_BUILDER.instantiate(this);
+ this.write = DynamicNodeVisitor.instantiate(this, "visit");
}
- private static final DynamicNodeVisitor<CsharpSerializer> WRITE_BUILDER = DynamicNodeVisitor.build(CsharpSerializer.class, "visit");
-
private void write(Node node) {
write.accept(node);
}
@@ -675,13 +673,14 @@ public class CsharpSerializer {
}
}
- private static final Function<Node, Integer> precedence = DynamicNodeMapper.build(
- Precedence.class,
- Integer.class,
- "visit"
- ).instantiate(new Precedence());
+ private static int precedence(Node node) {
+ return Precedence.OF.apply(node);
+ }
public static class Precedence {
+ private final static Function<Node, Integer> OF =
+ DynamicNodeMapper.instantiate(new Precedence(), "visit");
+
public Integer visit(LiteralNode literal) {
return Integer.MAX_VALUE;
}
@@ -770,8 +769,4 @@ public class CsharpSerializer {
return 0;
}
}
-
- private static int precedence(Node node) {
- return precedence.apply(node);
- }
}
diff --git a/src/main/java/org/zwobble/couscous/backends/python/PythonCodeGenerator.java b/src/main/java/org/zwobble/couscous/backends/python/PythonCodeGenerator.java
index be3b81f..993b6aa 100644
--- a/src/main/java/org/zwobble/couscous/backends/python/PythonCodeGenerator.java
+++ b/src/main/java/org/zwobble/couscous/backends/python/PythonCodeGenerator.java
@@ -4,7 +4,6 @@ import com.google.common.base.Strings;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;
import com.google.common.collect.Iterators;
-import net.bytebuddy.description.type.TypeDescription;
import org.zwobble.couscous.ast.*;
import org.zwobble.couscous.ast.structure.NodeStructure;
import org.zwobble.couscous.ast.visitors.DynamicNodeMapper;
@@ -114,17 +113,14 @@ public class PythonCodeGenerator {
private static Set<ScalarType> findReferencedClasses(TypeNode classNode) {
return NodeStructure.descendantNodes(classNode)
- .flatMap(findDirectlyReferencedClasses)
+ .flatMap(FindDirectlyReferencedClasses.VISITOR)
.collect(Collectors.toSet());
}
- private static final Function<Node, Stream<ScalarType>> findDirectlyReferencedClasses =
- DynamicNodeMapper.<FindDirectlyReferencedClasses, Stream<ScalarType>>build(
- FindDirectlyReferencedClasses.class,
- new TypeDescription.ForLoadedType(Stream.class),
- "visit"
- ).instantiate(new FindDirectlyReferencedClasses());
public static class FindDirectlyReferencedClasses {
+ private static final Function<Node, Stream<ScalarType>> VISITOR =
+ DynamicNodeMapper.instantiate(new FindDirectlyReferencedClasses(), "visit");
+
public Stream<ScalarType> visit(Node node) {
return Stream.empty();
}