diff options
| author | Michael Williamson <mike@zwobble.org> | 2015-11-21 11:48:14 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2015-11-21 11:48:14 +0000 |
| commit | 9604bf821f926e9fc653705ec78093ccb19d1195 (patch) | |
| tree | ba2dc08ac2f7ca02cf3360b711f8dd8e3def86c7 /src/main/java/org/zwobble/couscous/ast/structure/NodeStructure.java | |
| parent | df43ad49026543712029ca1a7155b4bd764fdcf2 (diff) | |
Only explore statements when finding declarations
Diffstat (limited to 'src/main/java/org/zwobble/couscous/ast/structure/NodeStructure.java')
| -rw-r--r-- | src/main/java/org/zwobble/couscous/ast/structure/NodeStructure.java | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/main/java/org/zwobble/couscous/ast/structure/NodeStructure.java b/src/main/java/org/zwobble/couscous/ast/structure/NodeStructure.java index 5fdd505..6054711 100644 --- a/src/main/java/org/zwobble/couscous/ast/structure/NodeStructure.java +++ b/src/main/java/org/zwobble/couscous/ast/structure/NodeStructure.java @@ -3,11 +3,22 @@ package org.zwobble.couscous.ast.structure; import org.zwobble.couscous.ast.*; import org.zwobble.couscous.ast.visitors.NodeMapper; +import java.util.function.Predicate; import java.util.stream.Stream; import static org.zwobble.couscous.util.ExtraStreams.concatStreams; public class NodeStructure { + public static Stream<? extends Node> descendantNodesAndSelf(Node node, Predicate<Node> predicate) { + return Stream.concat(Stream.of(node), descendantNodes(node, predicate)); + } + + public static Stream<? extends Node> descendantNodes(Node node, Predicate<Node> predicate) { + return childNodes(node) + .filter(predicate) + .flatMap(child -> descendantNodesAndSelf(child, predicate)); + } + public static Stream<? extends Node> descendantNodesAndSelf(Node node) { return Stream.concat(Stream.of(node), descendantNodes(node)); } |
