package com.thoughtworks.gauge.folding;
import com.intellij.lang.ASTNode;
import com.intellij.lang.folding.FoldingBuilder;
import com.intellij.lang.folding.FoldingDescriptor;
import com.intellij.openapi.util.TextRange;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.List;
abstract class GaugeFoldingBuilder implements FoldingBuilder {
protected void addNode(List<FoldingDescriptor> descriptors, ASTNode node, ASTNode heading) {
if (heading == null) return;
String text = node.getText().endsWith("\n") ? node.getText() : node.getText() + "\n";
int startOffset = node.getStartOffset() + getLength(heading);
int endOffset = node.getStartOffset() + text.lastIndexOf("\n");
if (text.endsWith("\n\n")) endOffset--;
if (endOffset <= startOffset) return;
TextRange textRange = new TextRange(startOffset, endOffset);
descriptors.add(new FoldingDescriptor(node, textRange));
}
@Nullable
@Override
public String getPlaceholderText(@NotNull ASTNode astNode) {
return " ...";
}
@Override
public boolean isCollapsedByDefault(@NotNull ASTNode astNode) {
return false;
}
@NotNull
private Integer getLength(ASTNode heading) {
return heading.getText().length();
}
}