return DefaultNearestNodeSearch.findNearestNodeAt(sourceCharIndex, (Node) this, tags);
private static Node findParentTaggedNode(Node node, Set<Class<? extends Tag>> tags) { if (isTaggedWith(node, tags)) { return node; } Node parent = node.getParent(); if (parent == null) { return null; } return findParentTaggedNode(parent, tags); }
SourceSection section = node.getSourceSection(); int startIndex = section.getCharIndex(); int endIndex = getCharEndIndex(section); if (startIndex <= offset && offset <= endIndex) { Node parent = findParentTaggedNode(node, tags); Node ch = findChildTaggedNode(node, offset, tags, parent != null, false); if (ch == null) { return parent; return findLastNode(node, tags); } else { // offset < o1 return findFirstNode(node, tags);
private static Node findLastNode(Node contextNode, Set<Class<? extends Tag>> tags) { if (isTaggedWith(contextNode, tags)) { return contextNode; } List<Node> children = NodeUtil.findNodeChildren(contextNode); for (int i = children.size() - 1; i >= 0; i--) { Node ch = children.get(i); if (ch instanceof WrapperNode) { ch = ((WrapperNode) ch).getDelegateNode(); } Node last = findLastNode(ch, tags); if (last != null) { return last; } } return null; }
if (isTaggedWith(primaryNode, tags)) { return primaryNode; if (!haveOuterCandidate) { if (primaryNode != null) { taggedNode = findChildTaggedNode(primaryNode, offset, tags, haveOuterCandidate, true); return primaryTaggedNode; if (isTaggedWith(secondaryNode, tags)) { return secondaryNode; taggedNode = findChildTaggedNode(secondaryNode, offset, tags, haveOuterCandidate, true);
private static boolean isTaggedWith(Node node, Set<Class<? extends Tag>> tags) { if (node instanceof InstrumentableNode && ((InstrumentableNode) node).isInstrumentable()) { InstrumentableNode inode = ((InstrumentableNode) node).materializeInstrumentableNodes(tags); return isTaggedWith(inode, tags); } return false; }
SourceSection section = node.getSourceSection(); int startIndex = section.getCharIndex(); int endIndex = getCharEndIndex(section); if (startIndex <= offset && offset <= endIndex) { Node parent = findParentTaggedNode(node, tags); Node ch = findChildTaggedNode(node, offset, tags, parent != null, false); while (ch == null) { if (node == parent) { break; ch = findChildTaggedNode(node, offset, tags, parent != null, false); return findLastNode(node, tags); } else { // offset < o1 return findFirstNode(node, tags);
private static Node findLastNode(Node contextNode, Set<Class<? extends Tag>> tags) { if (isTaggedWith(contextNode, tags)) { return contextNode; } List<Node> children = NodeUtil.findNodeChildren(contextNode); for (int i = children.size() - 1; i >= 0; i--) { Node ch = children.get(i); if (ch instanceof WrapperNode) { ch = ((WrapperNode) ch).getDelegateNode(); } Node last = findLastNode(ch, tags); if (last != null) { return last; } } return null; }
if (isTaggedWith(primaryNode, tags)) { return primaryNode; if (isTaggedWith(secondaryNode, tags)) { return secondaryNode; if (!haveOuterCandidate) { if (primaryNode != null) { taggedNode = findChildTaggedNode(primaryNode, offset, tags, haveOuterCandidate, true); taggedNode = findChildTaggedNode(secondaryNode, offset, tags, haveOuterCandidate, true);
private static boolean isTaggedWith(Node node, Set<Class<? extends Tag>> tags) { if (node instanceof InstrumentableNode && ((InstrumentableNode) node).isInstrumentable()) { InstrumentableNode inode = ((InstrumentableNode) node).materializeInstrumentableNodes(tags); return isTaggedWith(inode, tags); } return false; }
private static Node findParentTaggedNode(Node node, Set<Class<? extends Tag>> tags) { if (isTaggedWith(node, tags)) { return node; } Node parent = node.getParent(); if (parent == null) { return null; } return findParentTaggedNode(parent, tags); }
return DefaultNearestNodeSearch.findNearestNodeAt(sourceCharIndex, (Node) this, tags);