mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-89431: Collapse Inline CSS
#IDEA-89431 fixed
This commit is contained in:
@@ -30,9 +30,11 @@ import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiWhiteSpace;
|
||||
import com.intellij.psi.tree.TokenSet;
|
||||
import com.intellij.psi.xml.*;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.xml.util.XmlTagUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@@ -43,6 +45,7 @@ import java.util.List;
|
||||
public class XmlFoldingBuilder implements FoldingBuilder, DumbAware {
|
||||
private static final Logger LOG = Logger.getInstance("#com.intellij.lang.xml.XmlFoldingBuilder");
|
||||
private static final TokenSet XML_ATTRIBUTE_SET = TokenSet.create(XmlElementType.XML_ATTRIBUTE);
|
||||
private static final String[] XML_FOLDING_ATTRIBUTE_NAMES = new String[] {"style"};
|
||||
|
||||
@NotNull
|
||||
public FoldingDescriptor[] buildFoldRegions(@NotNull ASTNode node, @NotNull Document document) {
|
||||
@@ -101,6 +104,9 @@ public class XmlFoldingBuilder implements FoldingBuilder, DumbAware {
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(child instanceof XmlAttribute && isAttributeShouldBeFolded((XmlAttribute)child)) {
|
||||
addToFold(foldings, child, document);
|
||||
}
|
||||
else {
|
||||
final Language language = child.getLanguage();
|
||||
if (!(language instanceof XMLLanguage) && language != Language.ANY) {
|
||||
@@ -116,6 +122,7 @@ public class XmlFoldingBuilder implements FoldingBuilder, DumbAware {
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public TextRange getRangeToFold(PsiElement element) {
|
||||
if (element instanceof XmlTag) {
|
||||
final ASTNode tagNode = element.getNode();
|
||||
@@ -172,6 +179,9 @@ public class XmlFoldingBuilder implements FoldingBuilder, DumbAware {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
else if (element instanceof XmlAttribute) {
|
||||
return element.getTextRange();
|
||||
}
|
||||
else {
|
||||
return null;
|
||||
}
|
||||
@@ -180,7 +190,7 @@ public class XmlFoldingBuilder implements FoldingBuilder, DumbAware {
|
||||
protected int getCommentStartOffset(final XmlComment element) {
|
||||
return 4;
|
||||
}
|
||||
|
||||
|
||||
protected int getCommentStartEnd(final XmlComment element) {
|
||||
return 3;
|
||||
}
|
||||
@@ -189,25 +199,27 @@ public class XmlFoldingBuilder implements FoldingBuilder, DumbAware {
|
||||
LOG.assertTrue(elementToFold.isValid());
|
||||
TextRange range = getRangeToFold(elementToFold);
|
||||
if (range == null) return false;
|
||||
|
||||
if(range.getStartOffset() >= 0 &&
|
||||
|
||||
if(range.getStartOffset() >= 0 &&
|
||||
range.getEndOffset() <= elementToFold.getContainingFile().getTextRange().getEndOffset() &&
|
||||
range.getEndOffset() <= document.getTextLength() // psi and document maybe not in sync after error
|
||||
) {
|
||||
|
||||
int startLine = document.getLineNumber(range.getStartOffset());
|
||||
int endLine = document.getLineNumber(range.getEndOffset() - 1);
|
||||
if (startLine < endLine) {
|
||||
if (range.getStartOffset() + 1 < range.getEndOffset()) {
|
||||
foldings.add(new FoldingDescriptor(elementToFold.getNode(), range));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public String getPlaceholderText(@NotNull ASTNode node) {
|
||||
final PsiElement psi = node.getPsi();
|
||||
if(psi instanceof XmlAttribute) {
|
||||
final String attributeName = ((XmlAttribute)psi).getName();
|
||||
return attributeName.isEmpty() ? "..." : attributeName;
|
||||
}
|
||||
if (psi instanceof XmlTag ||
|
||||
psi instanceof XmlComment ||
|
||||
psi instanceof XmlConditionalSection
|
||||
@@ -217,6 +229,11 @@ public class XmlFoldingBuilder implements FoldingBuilder, DumbAware {
|
||||
|
||||
public boolean isCollapsedByDefault(@NotNull ASTNode node) {
|
||||
final PsiElement psi = node.getPsi();
|
||||
return psi instanceof XmlTag && XmlFoldingSettings.getInstance().isCollapseXmlTags();
|
||||
return psi instanceof XmlTag && XmlFoldingSettings.getInstance().isCollapseXmlTags()
|
||||
|| psi instanceof XmlAttribute;
|
||||
}
|
||||
|
||||
private static boolean isAttributeShouldBeFolded(XmlAttribute child) {
|
||||
return ArrayUtil.contains(((XmlAttribute)child).getName(), XML_FOLDING_ATTRIBUTE_NAMES);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user