blob: 5f4a698e6d11e0e1811d0140ab9c98d5e057125c [file] [log] [blame]
package org.chromium.devtools.jsdoc;
import com.google.javascript.rhino.head.ast.AstNode;
import com.google.javascript.rhino.head.ast.NodeVisitor;
import java.util.ArrayDeque;
import java.util.Deque;
public abstract class DoDidVisitorAdapter implements DoDidNodeVisitor, NodeVisitor {
private final Deque<AstNode> nodeStack = new ArrayDeque<>();
@Override
public boolean visit(AstNode node) {
AstNode topNode = nodeStack.peek();
if (topNode != null && topNode != node.getParent()) {
do {
topNode = nodeStack.pop();
didVisit(topNode);
} while (topNode.getParent() != node.getParent());
}
nodeStack.push(node);
doVisit(node);
return true;
}
/**
* This method MUST be called after {@code foo.visit(doDidVisitorAdapter)} has finished.
*/
public void flush() {
didVisit(nodeStack.remove());
}
}