Skip to content

Commit 495c97e

Browse files
committed
fix result if quite after leave
1 parent c77ec0d commit 495c97e

File tree

2 files changed

+4
-1
lines changed

2 files changed

+4
-1
lines changed

src/main/java/graphql/util/Traverser.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ public TraverserResult traverse(Collection<? extends T> roots, TraverserVisitor<
7878
// end-of-list marker, we are done recursing children,
7979
// mark the current node as fully visited
8080
TraverserContext contextForLeave = (TraverserContext) traverserState.pop();
81+
currentContext = contextForLeave;
8182
TraversalControl traversalControl = visitor.leave(contextForLeave);
8283
assertNotNull(traversalControl, "result of leave must not be null");
8384
assertTrue(CONTINUE_OR_QUIT.contains(traversalControl), "result can only return CONTINUE or QUIT");

src/test/groovy/graphql/util/TraverserTest.groovy

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,13 +105,15 @@ class TraverserTest extends Specification {
105105
def "quit traversal in first leave"() {
106106
given:
107107
def initialData = new ArrayList()
108+
def leaveResult = "Leave result"
108109
def leaveCount = 0
109110
def visitor = [
110111
enter: { TraverserContext context ->
111112
context.getInitialData().add(context.thisNode().number)
112113
TraversalControl.CONTINUE
113114
},
114115
leave: { TraverserContext context ->
116+
context.setResult(leaveResult)
115117
leaveCount++
116118
TraversalControl.QUIT
117119
},
@@ -122,9 +124,9 @@ class TraverserTest extends Specification {
122124
def result = Traverser.depthFirst({ n -> n.children }, initialData).traverse(root, visitor)
123125

124126
then:
127+
result.result == leaveResult
125128
initialData == [0, 1, 3]
126129
leaveCount == 1
127-
128130
}
129131

130132
def "abort subtree traversal depth-first"() {

0 commit comments

Comments
 (0)