com.intellij.psi.impl.source.tree.TreeUtil#findChildBackward ( )源码实例Demo

下面列出了com.intellij.psi.impl.source.tree.TreeUtil#findChildBackward ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

@Override
protected String convert(PsiElement element) {
    if (isLookupFunction(element.getNode()) || isNonStarCount(element.getNode())) {
        return element.getText().toLowerCase();
    }

    if (element.getNode().getElementType() == CypherTypes.FUNCTION_NAME
            && TreeUtil.findChildBackward(element.getNode(), CypherTypes.K_COUNT) == null) {
        String text = element.getText();

        if (text == null || text.isEmpty()) {
            return null;
        }

        if (Strings.isUpperCase(text)) {
            return text.toLowerCase();
        }

        char first = text.charAt(0);
        return Character.toLowerCase(first) + (text.length() > 1 ? text.substring(1) : "");
    }

    return null;
}
 
@SuppressWarnings("unchecked")
private static void addRuleRefFoldingDescriptors(List<FoldingDescriptor> descriptors, PsiElement root) {
    for (RuleSpecNode specNode : PsiTreeUtil.findChildrenOfType(root, RuleSpecNode.class)) {
        GrammarElementRefNode refNode = PsiTreeUtil.findChildOfAnyType(specNode, GrammarElementRefNode.class);
        if (refNode == null) continue;
        PsiElement nextSibling = refNode.getNextSibling();
        if (nextSibling == null) continue;
        int startOffset = nextSibling.getTextOffset();

        ASTNode backward = TreeUtil.findChildBackward(specNode.getNode(), SEMICOLON);
        if (backward == null) continue;
        int endOffset = backward.getTextRange().getEndOffset();
        if (startOffset >= endOffset) continue;

        descriptors.add(new FoldingDescriptor(specNode, new TextRange(startOffset, endOffset)));

    }
}