package com.thoughtworks.gauge.folding; import com.intellij.lang.ASTNode; import com.intellij.lang.folding.FoldingDescriptor; import com.intellij.openapi.editor.Document; import com.intellij.psi.tree.IElementType; import com.intellij.psi.tree.TokenSet; import com.thoughtworks.gauge.language.token.SpecTokenTypes; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.List; public class SpecFoldingBuilder extends GaugeFoldingBuilder { @NotNull @Override public FoldingDescriptor[] buildFoldRegions(@NotNull ASTNode astNode, @NotNull Document document) { List<FoldingDescriptor> descriptors = new ArrayList<>(); addNodes(astNode, descriptors, SpecTokenTypes.SPEC_DETAIL, SpecTokenTypes.SPEC_HEADING); addNodes(astNode, descriptors, SpecTokenTypes.SCENARIO, SpecTokenTypes.SCENARIO_HEADING); addNodes(astNode, descriptors, SpecTokenTypes.TEARDOWN, SpecTokenTypes.TEARDOWN_IDENTIFIER); return descriptors.toArray(new FoldingDescriptor[0]); } private void addNodes(@NotNull ASTNode astNode, List<FoldingDescriptor> descriptors, IElementType pNode, IElementType cNode) { for (ASTNode node : astNode.getChildren(TokenSet.create(pNode))) addNode(descriptors, node, node.findChildByType(cNode)); } }