mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-04 17:20:55 +07:00
IDEA-170039 Honor new foldings 'collapse by default' state - revert previous fix
This commit is contained in:
@@ -49,8 +49,7 @@ public class SuppressWarningsFoldingBuilder extends FoldingBuilderEx {
|
||||
@Override
|
||||
public void visitAnnotation(PsiAnnotation annotation) {
|
||||
if (Comparing.strEqual(annotation.getQualifiedName(), SuppressWarnings.class.getName())) {
|
||||
result.add(new FoldingDescriptor(annotation, annotation.getTextRange(),
|
||||
JavaCodeFoldingSettings.getInstance().getCollapseSuppressWarningsProperty()));
|
||||
result.add(new FoldingDescriptor(annotation, annotation.getTextRange()));
|
||||
}
|
||||
super.visitAnnotation(annotation);
|
||||
}
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
package com.intellij.codeInsight.folding;
|
||||
|
||||
import com.intellij.openapi.components.ServiceManager;
|
||||
import com.intellij.util.BooleanTrackableProperty;
|
||||
|
||||
public abstract class JavaCodeFoldingSettings {
|
||||
|
||||
@@ -27,57 +26,43 @@ public abstract class JavaCodeFoldingSettings {
|
||||
|
||||
public abstract boolean isCollapseImports();
|
||||
public abstract void setCollapseImports(boolean value);
|
||||
public abstract BooleanTrackableProperty getCollapseImportsProperty();
|
||||
|
||||
public abstract boolean isCollapseLambdas();
|
||||
public abstract void setCollapseLambdas(boolean value);
|
||||
public abstract BooleanTrackableProperty getCollapseLambdasProperty();
|
||||
|
||||
public abstract boolean isCollapseMethods();
|
||||
public abstract void setCollapseMethods(boolean value);
|
||||
public abstract BooleanTrackableProperty getCollapseMethodsProperty();
|
||||
|
||||
public abstract boolean isCollapseConstructorGenericParameters();
|
||||
public abstract void setCollapseConstructorGenericParameters(boolean value);
|
||||
public abstract BooleanTrackableProperty getCollapseConstructorGenericParametersProperty();
|
||||
|
||||
public abstract boolean isCollapseAccessors();
|
||||
public abstract void setCollapseAccessors(boolean value);
|
||||
public abstract BooleanTrackableProperty getCollapseAccessorsProperty();
|
||||
|
||||
public abstract boolean isCollapseOneLineMethods();
|
||||
public abstract void setCollapseOneLineMethods(boolean value);
|
||||
public abstract BooleanTrackableProperty getCollapseOneLineMethodsProperty();
|
||||
|
||||
public abstract boolean isCollapseInnerClasses();
|
||||
public abstract void setCollapseInnerClasses(boolean value);
|
||||
public abstract BooleanTrackableProperty getCollapseInnerClassesProperty();
|
||||
|
||||
public abstract boolean isCollapseJavadocs();
|
||||
public abstract void setCollapseJavadocs(boolean value);
|
||||
public abstract BooleanTrackableProperty getCollapseJavadocsProperty();
|
||||
|
||||
public abstract boolean isCollapseFileHeader();
|
||||
public abstract void setCollapseFileHeader(boolean value);
|
||||
public abstract BooleanTrackableProperty getCollapseFileHeaderProperty();
|
||||
|
||||
public abstract boolean isCollapseAnonymousClasses();
|
||||
public abstract void setCollapseAnonymousClasses(boolean value);
|
||||
public abstract BooleanTrackableProperty getCollapseAnonymousClassesProperty();
|
||||
|
||||
public abstract boolean isCollapseAnnotations();
|
||||
public abstract void setCollapseAnnotations(boolean value);
|
||||
public abstract BooleanTrackableProperty getCollapseAnnotationsProperty();
|
||||
|
||||
public abstract boolean isCollapseI18nMessages();
|
||||
public abstract void setCollapseI18nMessages(boolean value);
|
||||
public abstract BooleanTrackableProperty getCollapseI18nMessagesProperty();
|
||||
|
||||
public abstract boolean isCollapseSuppressWarnings();
|
||||
public abstract void setCollapseSuppressWarnings(boolean value);
|
||||
public abstract BooleanTrackableProperty getCollapseSuppressWarningsProperty();
|
||||
|
||||
public abstract boolean isCollapseEndOfLineComments();
|
||||
public abstract void setCollapseEndOfLineComments(boolean value);
|
||||
public abstract BooleanTrackableProperty getCollapseEndOfLineCommentsProperty();
|
||||
}
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
package com.intellij.codeInsight.folding.impl;
|
||||
|
||||
import com.intellij.codeInsight.daemon.impl.analysis.HighlightUtilBase;
|
||||
import com.intellij.codeInsight.folding.JavaCodeFoldingSettings;
|
||||
import com.intellij.codeInsight.generation.OverrideImplementExploreUtil;
|
||||
import com.intellij.lang.folding.NamedFoldingDescriptor;
|
||||
import com.intellij.openapi.editor.Document;
|
||||
@@ -25,7 +24,6 @@ import com.intellij.openapi.project.IndexNotReadyException;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
import com.intellij.util.BooleanTrackableProperty;
|
||||
import com.intellij.util.ObjectUtils;
|
||||
import com.intellij.util.text.CharArrayUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -128,11 +126,10 @@ class ClosureFolding {
|
||||
if (rangeStart >= rangeEnd) return null;
|
||||
|
||||
FoldingGroup group = FoldingGroup.newGroup("lambda");
|
||||
BooleanTrackableProperty collapseSetting = JavaCodeFoldingSettings.getInstance().getCollapseLambdasProperty();
|
||||
List<NamedFoldingDescriptor> foldElements = new ArrayList<>();
|
||||
foldElements.add(new NamedFoldingDescriptor(myNewExpression, getClosureStartOffset(), rangeStart, group, header, collapseSetting));
|
||||
foldElements.add(new NamedFoldingDescriptor(myNewExpression, getClosureStartOffset(), rangeStart, group, header));
|
||||
if (rangeEnd + 1 < getClosureEndOffset()) {
|
||||
foldElements.add(new NamedFoldingDescriptor(classRBrace, rangeEnd, getClosureEndOffset(), group, footer, collapseSetting));
|
||||
foldElements.add(new NamedFoldingDescriptor(classRBrace, rangeEnd, getClosureEndOffset(), group, footer));
|
||||
}
|
||||
return foldElements;
|
||||
}
|
||||
|
||||
@@ -17,227 +17,155 @@ package com.intellij.codeInsight.folding.impl;
|
||||
|
||||
import com.intellij.codeInsight.folding.CodeFoldingSettings;
|
||||
import com.intellij.codeInsight.folding.JavaCodeFoldingSettings;
|
||||
import com.intellij.util.BooleanTrackableProperty;
|
||||
|
||||
public class JavaCodeFoldingSettingsBase extends JavaCodeFoldingSettings {
|
||||
private BooleanTrackableProperty COLLAPSE_ACCESSORS = new BooleanTrackableProperty();
|
||||
private BooleanTrackableProperty COLLAPSE_ONE_LINE_METHODS = new BooleanTrackableProperty(true);
|
||||
private BooleanTrackableProperty COLLAPSE_INNER_CLASSES = new BooleanTrackableProperty();
|
||||
private BooleanTrackableProperty COLLAPSE_ANONYMOUS_CLASSES = new BooleanTrackableProperty();
|
||||
private BooleanTrackableProperty COLLAPSE_ANNOTATIONS = new BooleanTrackableProperty();
|
||||
private BooleanTrackableProperty COLLAPSE_CLOSURES = new BooleanTrackableProperty(true);
|
||||
private BooleanTrackableProperty COLLAPSE_CONSTRUCTOR_GENERIC_PARAMETERS = new BooleanTrackableProperty(true);
|
||||
private BooleanTrackableProperty COLLAPSE_I18N_MESSAGES = new BooleanTrackableProperty(true);
|
||||
private BooleanTrackableProperty COLLAPSE_SUPPRESS_WARNINGS = new BooleanTrackableProperty(true);
|
||||
private BooleanTrackableProperty COLLAPSE_END_OF_LINE_COMMENTS = new BooleanTrackableProperty();
|
||||
private boolean COLLAPSE_ACCESSORS;
|
||||
private boolean COLLAPSE_ONE_LINE_METHODS = true;
|
||||
private boolean COLLAPSE_INNER_CLASSES;
|
||||
private boolean COLLAPSE_ANONYMOUS_CLASSES;
|
||||
private boolean COLLAPSE_ANNOTATIONS;
|
||||
private boolean COLLAPSE_CLOSURES = true;
|
||||
private boolean COLLAPSE_CONSTRUCTOR_GENERIC_PARAMETERS = true;
|
||||
private boolean COLLAPSE_I18N_MESSAGES = true;
|
||||
private boolean COLLAPSE_SUPPRESS_WARNINGS = true;
|
||||
private boolean COLLAPSE_END_OF_LINE_COMMENTS;
|
||||
|
||||
@Override
|
||||
public boolean isCollapseImports() {
|
||||
return CodeFoldingSettings.getInstance().isCollapseImports();
|
||||
return CodeFoldingSettings.getInstance().COLLAPSE_IMPORTS;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCollapseImports(boolean value) {
|
||||
CodeFoldingSettings.getInstance().setCollapseImports(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BooleanTrackableProperty getCollapseImportsProperty() {
|
||||
return CodeFoldingSettings.getInstance().getCollapseImportsProperty();
|
||||
CodeFoldingSettings.getInstance().COLLAPSE_IMPORTS = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCollapseLambdas() {
|
||||
return COLLAPSE_CLOSURES.getValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCollapseLambdas(boolean value) {
|
||||
COLLAPSE_CLOSURES.setValue(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BooleanTrackableProperty getCollapseLambdasProperty() {
|
||||
return COLLAPSE_CLOSURES;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCollapseLambdas(boolean value) {
|
||||
COLLAPSE_CLOSURES = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCollapseConstructorGenericParameters() {
|
||||
return COLLAPSE_CONSTRUCTOR_GENERIC_PARAMETERS.getValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCollapseConstructorGenericParameters(boolean value) {
|
||||
COLLAPSE_CONSTRUCTOR_GENERIC_PARAMETERS.setValue(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BooleanTrackableProperty getCollapseConstructorGenericParametersProperty() {
|
||||
return COLLAPSE_CONSTRUCTOR_GENERIC_PARAMETERS;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCollapseConstructorGenericParameters(boolean value) {
|
||||
COLLAPSE_CONSTRUCTOR_GENERIC_PARAMETERS = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCollapseMethods() {
|
||||
return CodeFoldingSettings.getInstance().isCollapseMethods();
|
||||
return CodeFoldingSettings.getInstance().COLLAPSE_METHODS;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCollapseMethods(boolean value) {
|
||||
CodeFoldingSettings.getInstance().setCollapseMethods(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BooleanTrackableProperty getCollapseMethodsProperty() {
|
||||
return CodeFoldingSettings.getInstance().getCollapseMethodsProperty();
|
||||
CodeFoldingSettings.getInstance().COLLAPSE_METHODS = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCollapseAccessors() {
|
||||
return COLLAPSE_ACCESSORS.getValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCollapseAccessors(boolean value) {
|
||||
COLLAPSE_ACCESSORS.setValue(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BooleanTrackableProperty getCollapseAccessorsProperty() {
|
||||
return COLLAPSE_ACCESSORS;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCollapseAccessors(boolean value) {
|
||||
COLLAPSE_ACCESSORS = value;
|
||||
}
|
||||
@Override
|
||||
public boolean isCollapseOneLineMethods() {
|
||||
return COLLAPSE_ONE_LINE_METHODS.getValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCollapseOneLineMethods(boolean value) {
|
||||
COLLAPSE_ONE_LINE_METHODS.setValue(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BooleanTrackableProperty getCollapseOneLineMethodsProperty() {
|
||||
return COLLAPSE_ONE_LINE_METHODS;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCollapseOneLineMethods(boolean value) {
|
||||
COLLAPSE_ONE_LINE_METHODS = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCollapseInnerClasses() {
|
||||
return COLLAPSE_INNER_CLASSES.getValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCollapseInnerClasses(boolean value) {
|
||||
COLLAPSE_INNER_CLASSES.setValue(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BooleanTrackableProperty getCollapseInnerClassesProperty() {
|
||||
return COLLAPSE_INNER_CLASSES;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCollapseInnerClasses(boolean value) {
|
||||
COLLAPSE_INNER_CLASSES = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCollapseJavadocs() {
|
||||
return CodeFoldingSettings.getInstance().isCollapseDocComments();
|
||||
return CodeFoldingSettings.getInstance().COLLAPSE_DOC_COMMENTS;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCollapseJavadocs(boolean value) {
|
||||
CodeFoldingSettings.getInstance().setCollapseDocComments(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BooleanTrackableProperty getCollapseJavadocsProperty() {
|
||||
return CodeFoldingSettings.getInstance().getCollapseDocCommentsProperty();
|
||||
CodeFoldingSettings.getInstance().COLLAPSE_DOC_COMMENTS = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCollapseFileHeader() {
|
||||
return CodeFoldingSettings.getInstance().isCollapseFileHeader();
|
||||
return CodeFoldingSettings.getInstance().COLLAPSE_FILE_HEADER;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCollapseFileHeader(boolean value) {
|
||||
CodeFoldingSettings.getInstance().setCollapseFileHeader(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BooleanTrackableProperty getCollapseFileHeaderProperty() {
|
||||
return CodeFoldingSettings.getInstance().getCollapseFileHeaderProperty();
|
||||
CodeFoldingSettings.getInstance().COLLAPSE_FILE_HEADER = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCollapseAnonymousClasses() {
|
||||
return COLLAPSE_ANONYMOUS_CLASSES.getValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCollapseAnonymousClasses(boolean value) {
|
||||
COLLAPSE_ANONYMOUS_CLASSES.setValue(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BooleanTrackableProperty getCollapseAnonymousClassesProperty() {
|
||||
return COLLAPSE_ANONYMOUS_CLASSES;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCollapseAnonymousClasses(boolean value) {
|
||||
COLLAPSE_ANONYMOUS_CLASSES = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCollapseAnnotations() {
|
||||
return COLLAPSE_ANNOTATIONS.getValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCollapseAnnotations(boolean value) {
|
||||
COLLAPSE_ANNOTATIONS.setValue(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BooleanTrackableProperty getCollapseAnnotationsProperty() {
|
||||
return COLLAPSE_ANNOTATIONS;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCollapseAnnotations(boolean value) {
|
||||
COLLAPSE_ANNOTATIONS = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCollapseI18nMessages() {
|
||||
return COLLAPSE_I18N_MESSAGES.getValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCollapseI18nMessages(boolean value) {
|
||||
COLLAPSE_I18N_MESSAGES.setValue(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BooleanTrackableProperty getCollapseI18nMessagesProperty() {
|
||||
return COLLAPSE_I18N_MESSAGES;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCollapseI18nMessages(boolean value) {
|
||||
COLLAPSE_I18N_MESSAGES = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCollapseSuppressWarnings() {
|
||||
return COLLAPSE_SUPPRESS_WARNINGS.getValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCollapseSuppressWarnings(boolean value) {
|
||||
COLLAPSE_SUPPRESS_WARNINGS.setValue(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BooleanTrackableProperty getCollapseSuppressWarningsProperty() {
|
||||
return COLLAPSE_SUPPRESS_WARNINGS;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCollapseSuppressWarnings(boolean value) {
|
||||
COLLAPSE_SUPPRESS_WARNINGS = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCollapseEndOfLineComments() {
|
||||
return COLLAPSE_END_OF_LINE_COMMENTS.getValue();
|
||||
return COLLAPSE_END_OF_LINE_COMMENTS;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCollapseEndOfLineComments(boolean value) {
|
||||
COLLAPSE_END_OF_LINE_COMMENTS.setValue(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BooleanTrackableProperty getCollapseEndOfLineCommentsProperty() {
|
||||
return COLLAPSE_END_OF_LINE_COMMENTS;
|
||||
COLLAPSE_END_OF_LINE_COMMENTS = value;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -43,7 +43,6 @@ import com.intellij.psi.util.PropertyUtil;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
import com.intellij.psi.util.PsiUtilCore;
|
||||
import com.intellij.util.BooleanTrackableProperty;
|
||||
import com.intellij.util.text.CharArrayUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -231,8 +230,7 @@ public abstract class JavaFoldingBuilderBase extends CustomFoldingBuilder implem
|
||||
for (int i = 0; i < children.length; i++) {
|
||||
PsiElement child = children[i];
|
||||
if (child instanceof PsiAnnotation) {
|
||||
addToFold(foldElements, child, document, false,
|
||||
JavaCodeFoldingSettings.getInstance().getCollapseAnnotationsProperty());
|
||||
addToFold(foldElements, child, document, false);
|
||||
int j;
|
||||
for (j = i + 1; j < children.length; j++) {
|
||||
PsiElement nextChild = children[j];
|
||||
@@ -291,8 +289,7 @@ public abstract class JavaFoldingBuilderBase extends CustomFoldingBuilder implem
|
||||
|
||||
if (end != null && !containsCustomRegionMarker) {
|
||||
foldElements.add(
|
||||
new FoldingDescriptor(comment, new TextRange(comment.getTextRange().getStartOffset(), end.getTextRange().getEndOffset()),
|
||||
JavaCodeFoldingSettings.getInstance().getCollapseEndOfLineCommentsProperty())
|
||||
new FoldingDescriptor(comment, new TextRange(comment.getTextRange().getStartOffset(), end.getTextRange().getEndOffset()))
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -399,8 +396,7 @@ public abstract class JavaFoldingBuilderBase extends CustomFoldingBuilder implem
|
||||
final String text = list.getText();
|
||||
if (text.startsWith("<") && text.endsWith(">") && text.length() > ifLongerThan) {
|
||||
final TextRange range = list.getTextRange();
|
||||
addFoldRegion(foldElements, list, document, true, range,
|
||||
JavaCodeFoldingSettings.getInstance().getCollapseConstructorGenericParametersProperty());
|
||||
addFoldRegion(foldElements, list, document, true, range);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -409,19 +405,17 @@ public abstract class JavaFoldingBuilderBase extends CustomFoldingBuilder implem
|
||||
private static boolean addToFold(@NotNull List<FoldingDescriptor> list,
|
||||
@NotNull PsiElement elementToFold,
|
||||
@NotNull Document document,
|
||||
boolean allowOneLiners,
|
||||
@Nullable BooleanTrackableProperty dependency) {
|
||||
boolean allowOneLiners) {
|
||||
PsiUtilCore.ensureValid(elementToFold);
|
||||
TextRange range = getRangeToFold(elementToFold);
|
||||
return range != null && addFoldRegion(list, elementToFold, document, allowOneLiners, range, dependency);
|
||||
return range != null && addFoldRegion(list, elementToFold, document, allowOneLiners, range);
|
||||
}
|
||||
|
||||
private static boolean addFoldRegion(@NotNull List<FoldingDescriptor> list,
|
||||
@NotNull PsiElement elementToFold,
|
||||
@NotNull Document document,
|
||||
boolean allowOneLiners,
|
||||
@NotNull TextRange range,
|
||||
@Nullable BooleanTrackableProperty dependency) {
|
||||
@NotNull TextRange range) {
|
||||
final TextRange fileRange = elementToFold.getContainingFile().getTextRange();
|
||||
if (range.equals(fileRange)) return false;
|
||||
|
||||
@@ -434,14 +428,14 @@ public abstract class JavaFoldingBuilderBase extends CustomFoldingBuilder implem
|
||||
int startLine = document.getLineNumber(range.getStartOffset());
|
||||
int endLine = document.getLineNumber(range.getEndOffset() - 1);
|
||||
if (startLine < endLine && range.getLength() > 1) {
|
||||
list.add(new FoldingDescriptor(elementToFold, range, dependency));
|
||||
list.add(new FoldingDescriptor(elementToFold, range));
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
else {
|
||||
if (range.getLength() > getPlaceholderText(elementToFold).length()) {
|
||||
list.add(new FoldingDescriptor(elementToFold, range, dependency));
|
||||
list.add(new FoldingDescriptor(elementToFold, range));
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@@ -457,7 +451,6 @@ public abstract class JavaFoldingBuilderBase extends CustomFoldingBuilder implem
|
||||
return;
|
||||
}
|
||||
PsiJavaFile file = (PsiJavaFile) root;
|
||||
JavaCodeFoldingSettings settings = JavaCodeFoldingSettings.getInstance();
|
||||
|
||||
PsiImportList importList = file.getImportList();
|
||||
if (importList != null) {
|
||||
@@ -465,7 +458,7 @@ public abstract class JavaFoldingBuilderBase extends CustomFoldingBuilder implem
|
||||
if (statements.length > 1) {
|
||||
final TextRange rangeToFold = getRangeToFold(importList);
|
||||
if (rangeToFold != null && rangeToFold.getLength() > 1) {
|
||||
FoldingDescriptor descriptor = new FoldingDescriptor(importList, rangeToFold, settings.getCollapseImportsProperty());
|
||||
FoldingDescriptor descriptor = new FoldingDescriptor(importList, rangeToFold);
|
||||
// imports are often added/removed automatically, so we enable autoupdate of folded region for foldings even if it's collapsed
|
||||
descriptor.setCanBeRemovedWhenCollapsed(true);
|
||||
descriptors.add(descriptor);
|
||||
@@ -498,7 +491,7 @@ public abstract class JavaFoldingBuilderBase extends CustomFoldingBuilder implem
|
||||
anchorElementToUse = candidate;
|
||||
}
|
||||
}
|
||||
descriptors.add(new FoldingDescriptor(anchorElementToUse, range, settings.getCollapseFileHeaderProperty()));
|
||||
descriptors.add(new FoldingDescriptor(anchorElementToUse, range));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -507,21 +500,15 @@ public abstract class JavaFoldingBuilderBase extends CustomFoldingBuilder implem
|
||||
@NotNull Document document,
|
||||
boolean foldJavaDocs,
|
||||
boolean quick) {
|
||||
JavaCodeFoldingSettings settings = JavaCodeFoldingSettings.getInstance();
|
||||
|
||||
if (!(aClass.getParent() instanceof PsiJavaFile) || ((PsiJavaFile)aClass.getParent()).getClasses().length > 1) {
|
||||
addToFold(list, aClass, document, true,
|
||||
aClass.getParent() instanceof PsiFile ? null
|
||||
: aClass instanceof PsiAnonymousClass
|
||||
? settings.getCollapseAnonymousClassesProperty()
|
||||
: settings.getCollapseInnerClassesProperty());
|
||||
addToFold(list, aClass, document, true);
|
||||
}
|
||||
|
||||
PsiDocComment docComment;
|
||||
if (foldJavaDocs) {
|
||||
docComment = aClass.getDocComment();
|
||||
if (docComment != null) {
|
||||
addToFold(list, docComment, document, true, settings.getCollapseJavadocsProperty());
|
||||
addToFold(list, docComment, document, true);
|
||||
}
|
||||
}
|
||||
addAnnotationsToFold(aClass.getModifierList(), list, document);
|
||||
@@ -535,16 +522,14 @@ public abstract class JavaFoldingBuilderBase extends CustomFoldingBuilder implem
|
||||
PsiMethod method = (PsiMethod)child;
|
||||
boolean oneLiner = addOneLineMethodFolding(list, method);
|
||||
if (!oneLiner) {
|
||||
addToFold(list, method, document, true, isSimplePropertyAccessor(method)
|
||||
? settings.getCollapseAccessorsProperty()
|
||||
: settings.getCollapseMethodsProperty());
|
||||
addToFold(list, method, document, true);
|
||||
}
|
||||
addAnnotationsToFold(method.getModifierList(), list, document);
|
||||
|
||||
if (foldJavaDocs) {
|
||||
docComment = method.getDocComment();
|
||||
if (docComment != null) {
|
||||
addToFold(list, docComment, document, true, settings.getCollapseJavadocsProperty());
|
||||
addToFold(list, docComment, document, true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -558,7 +543,7 @@ public abstract class JavaFoldingBuilderBase extends CustomFoldingBuilder implem
|
||||
if (foldJavaDocs) {
|
||||
docComment = field.getDocComment();
|
||||
if (docComment != null) {
|
||||
addToFold(list, docComment, document, true, settings.getCollapseJavadocsProperty());
|
||||
addToFold(list, docComment, document, true);
|
||||
}
|
||||
}
|
||||
addAnnotationsToFold(field.getModifierList(), list, document);
|
||||
@@ -571,7 +556,7 @@ public abstract class JavaFoldingBuilderBase extends CustomFoldingBuilder implem
|
||||
}
|
||||
else if (child instanceof PsiClassInitializer) {
|
||||
PsiClassInitializer initializer = (PsiClassInitializer)child;
|
||||
addToFold(list, initializer, document, true, settings.getCollapseMethodsProperty());
|
||||
addToFold(list, initializer, document, true);
|
||||
addCodeBlockFolds(initializer, list, processedComments, document, quick);
|
||||
}
|
||||
else if (child instanceof PsiClass) {
|
||||
@@ -584,8 +569,7 @@ public abstract class JavaFoldingBuilderBase extends CustomFoldingBuilder implem
|
||||
}
|
||||
|
||||
private boolean addOneLineMethodFolding(@NotNull List<FoldingDescriptor> descriptorList, @NotNull PsiMethod method) {
|
||||
JavaCodeFoldingSettings settings = JavaCodeFoldingSettings.getInstance();
|
||||
if (!settings.isCollapseOneLineMethods()) {
|
||||
if (!JavaCodeFoldingSettings.getInstance().isCollapseOneLineMethods()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -637,9 +621,8 @@ public abstract class JavaFoldingBuilderBase extends CustomFoldingBuilder implem
|
||||
}
|
||||
|
||||
FoldingGroup group = FoldingGroup.newGroup("one-liner");
|
||||
BooleanTrackableProperty collapseSetting = settings.getCollapseOneLineMethodsProperty();
|
||||
descriptorList.add(new NamedFoldingDescriptor(lBrace, leftStart, leftEnd, group, leftText, collapseSetting));
|
||||
descriptorList.add(new NamedFoldingDescriptor(rBrace, rightStart, rightEnd, group, rightText, collapseSetting));
|
||||
descriptorList.add(new NamedFoldingDescriptor(lBrace, leftStart, leftEnd, group, leftText));
|
||||
descriptorList.add(new NamedFoldingDescriptor(rBrace, rightStart, rightEnd, group, rightText));
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -731,8 +714,7 @@ public abstract class JavaFoldingBuilderBase extends CustomFoldingBuilder implem
|
||||
@Override
|
||||
public void visitClass(PsiClass aClass) {
|
||||
if (dumb || !addClosureFolding(aClass, document, foldElements, processedComments, quick)) {
|
||||
addToFold(foldElements, aClass, document, true,
|
||||
JavaCodeFoldingSettings.getInstance().getCollapseAnonymousClassesProperty());
|
||||
addToFold(foldElements, aClass, document, true);
|
||||
addElementsToFold(foldElements, aClass, document, false, quick);
|
||||
}
|
||||
}
|
||||
@@ -759,8 +741,7 @@ public abstract class JavaFoldingBuilderBase extends CustomFoldingBuilder implem
|
||||
public void visitLambdaExpression(PsiLambdaExpression expression) {
|
||||
PsiElement body = expression.getBody();
|
||||
if (body instanceof PsiCodeBlock) {
|
||||
addToFold(foldElements, expression, document, true,
|
||||
JavaCodeFoldingSettings.getInstance().getCollapseAnonymousClassesProperty());
|
||||
addToFold(foldElements, expression, document, true);
|
||||
}
|
||||
super.visitLambdaExpression(expression);
|
||||
}
|
||||
|
||||
@@ -487,15 +487,15 @@ class Test {
|
||||
};
|
||||
}
|
||||
"""
|
||||
boolean oldValue = CodeFoldingSettings.instance.isCollapseCustomFoldingRegions();
|
||||
boolean oldValue = CodeFoldingSettings.instance.COLLAPSE_CUSTOM_FOLDING_REGIONS;
|
||||
try {
|
||||
CodeFoldingSettings.instance.setCollapseCustomFoldingRegions(true);
|
||||
CodeFoldingSettings.instance.COLLAPSE_CUSTOM_FOLDING_REGIONS = true;
|
||||
configure text
|
||||
def foldingModel = myFixture.editor.foldingModel as FoldingModelImpl
|
||||
assert foldingModel.getCollapsedRegionAtOffset(text.indexOf("//<editor-fold"))
|
||||
}
|
||||
finally {
|
||||
CodeFoldingSettings.instance.setCollapseCustomFoldingRegions(oldValue);
|
||||
CodeFoldingSettings.instance.COLLAPSE_CUSTOM_FOLDING_REGIONS = oldValue;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -16,110 +16,15 @@
|
||||
package com.intellij.codeInsight.folding;
|
||||
|
||||
import com.intellij.openapi.components.ServiceManager;
|
||||
import com.intellij.util.BooleanTrackableProperty;
|
||||
import com.intellij.util.xmlb.annotations.OptionTag;
|
||||
import com.intellij.util.xmlb.annotations.Transient;
|
||||
|
||||
@SuppressWarnings({"deprecation", "DeprecatedIsStillUsed"})
|
||||
public class CodeFoldingSettings {
|
||||
/** @deprecated Use corresponding getters/setters or property */
|
||||
@Transient
|
||||
public boolean COLLAPSE_IMPORTS = true;
|
||||
|
||||
/** @deprecated Use corresponding getters/setters or property */
|
||||
@Transient
|
||||
public boolean COLLAPSE_METHODS;
|
||||
|
||||
/** @deprecated Use corresponding getters/setters or property */
|
||||
@Transient
|
||||
public boolean COLLAPSE_FILE_HEADER = true;
|
||||
|
||||
/** @deprecated Use corresponding getters/setters or property */
|
||||
@Transient
|
||||
public boolean COLLAPSE_DOC_COMMENTS;
|
||||
|
||||
/** @deprecated Use corresponding getters/setters or property */
|
||||
@Transient
|
||||
public boolean COLLAPSE_CUSTOM_FOLDING_REGIONS;
|
||||
|
||||
private BooleanTrackableProperty myCollapseImports = new BooleanTrackableProperty(true);
|
||||
private BooleanTrackableProperty myCollapseMethods = new BooleanTrackableProperty();
|
||||
private BooleanTrackableProperty myCollapseFileHeader = new BooleanTrackableProperty(true);
|
||||
private BooleanTrackableProperty myCollapseDocComments = new BooleanTrackableProperty();
|
||||
private BooleanTrackableProperty myCollapseCustomFoldingRegions = new BooleanTrackableProperty();
|
||||
|
||||
|
||||
public static CodeFoldingSettings getInstance() {
|
||||
return ServiceManager.getService(CodeFoldingSettings.class);
|
||||
}
|
||||
|
||||
@OptionTag("COLLAPSE_IMPORTS")
|
||||
public boolean isCollapseImports() {
|
||||
return COLLAPSE_IMPORTS;
|
||||
}
|
||||
|
||||
public void setCollapseImports(boolean value) {
|
||||
COLLAPSE_IMPORTS = value;
|
||||
myCollapseImports.setValue(value);
|
||||
}
|
||||
|
||||
public BooleanTrackableProperty getCollapseImportsProperty() {
|
||||
return myCollapseImports;
|
||||
}
|
||||
|
||||
@OptionTag("COLLAPSE_METHODS")
|
||||
public boolean isCollapseMethods() {
|
||||
return COLLAPSE_METHODS;
|
||||
}
|
||||
|
||||
public void setCollapseMethods(boolean value) {
|
||||
COLLAPSE_METHODS = value;
|
||||
myCollapseMethods.setValue(value);
|
||||
}
|
||||
|
||||
public BooleanTrackableProperty getCollapseMethodsProperty() {
|
||||
return myCollapseMethods;
|
||||
}
|
||||
|
||||
@OptionTag("COLLAPSE_FILE_HEADER")
|
||||
public boolean isCollapseFileHeader() {
|
||||
return COLLAPSE_FILE_HEADER;
|
||||
}
|
||||
|
||||
public void setCollapseFileHeader(boolean value) {
|
||||
COLLAPSE_FILE_HEADER = value;
|
||||
myCollapseFileHeader.setValue(value);
|
||||
}
|
||||
|
||||
public BooleanTrackableProperty getCollapseFileHeaderProperty() {
|
||||
return myCollapseFileHeader;
|
||||
}
|
||||
|
||||
@OptionTag("COLLAPSE_DOC_COMMENTS")
|
||||
public boolean isCollapseDocComments() {
|
||||
return COLLAPSE_DOC_COMMENTS;
|
||||
}
|
||||
|
||||
public void setCollapseDocComments(boolean value) {
|
||||
COLLAPSE_DOC_COMMENTS = value;
|
||||
myCollapseDocComments.setValue(value);
|
||||
}
|
||||
|
||||
public BooleanTrackableProperty getCollapseDocCommentsProperty() {
|
||||
return myCollapseDocComments;
|
||||
}
|
||||
|
||||
@OptionTag("COLLAPSE_CUSTOM_FOLDING_REGIONS")
|
||||
public boolean isCollapseCustomFoldingRegions() {
|
||||
return COLLAPSE_CUSTOM_FOLDING_REGIONS;
|
||||
}
|
||||
|
||||
public void setCollapseCustomFoldingRegions(boolean value) {
|
||||
COLLAPSE_CUSTOM_FOLDING_REGIONS = value;
|
||||
myCollapseCustomFoldingRegions.setValue(value);
|
||||
}
|
||||
|
||||
public BooleanTrackableProperty getCollapseCustomFoldingRegionsProperty() {
|
||||
return myCollapseCustomFoldingRegions;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,6 +44,6 @@ public abstract class CustomFoldingProvider {
|
||||
public abstract String getEndString();
|
||||
|
||||
public boolean isCollapsedByDefault(String text) {
|
||||
return CodeFoldingSettings.getInstance().isCollapseCustomFoldingRegions();
|
||||
return CodeFoldingSettings.getInstance().COLLAPSE_CUSTOM_FOLDING_REGIONS;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,10 +31,9 @@ import java.util.Set;
|
||||
* Defines a single folding region in the code.
|
||||
*
|
||||
* <p><a name="Dependencies"><b>Dependencies</b></a></p>
|
||||
* Dependencies are objects (in particular, instances of {@link com.intellij.openapi.util.ModificationTracker}),
|
||||
* Dependencies are objects (in particular, instances of {@link com.intellij.openapi.util.ModificationTracker},
|
||||
* more info - {@link com.intellij.psi.util.CachedValueProvider.Result#getDependencyItems here}),
|
||||
* which can be tracked for changes, that should trigger folding regions recalculation for an editor (initiating code folding pass).
|
||||
* Changed dependency for a specific region causes its regeneration according to potentially updated folding rules,
|
||||
* e.g. with regard to 'collapsed by default' state.
|
||||
*
|
||||
* @author max
|
||||
* @see FoldingBuilder
|
||||
@@ -61,25 +60,10 @@ public class FoldingDescriptor {
|
||||
this(node, range, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param dependency see <a href="#Dependencies">Dependencies</a>
|
||||
*/
|
||||
public FoldingDescriptor(@NotNull ASTNode node, @NotNull TextRange range, @Nullable Object dependency) {
|
||||
this(node, range, null, dependency);
|
||||
}
|
||||
|
||||
public FoldingDescriptor(@NotNull PsiElement element, @NotNull TextRange range) {
|
||||
this(ObjectUtils.assertNotNull(element.getNode()), range, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param dependency see <a href="#Dependencies">Dependencies</a>
|
||||
*/
|
||||
public FoldingDescriptor(@NotNull PsiElement element, @NotNull TextRange range, @Nullable Object dependency) {
|
||||
this(ObjectUtils.assertNotNull(element.getNode()), range, null,
|
||||
dependency == null ? Collections.emptySet() : Collections.singleton(dependency));
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a folding region related to the specified AST node and covering the specified
|
||||
* text range.
|
||||
@@ -93,13 +77,6 @@ public class FoldingDescriptor {
|
||||
this(node, range, group, Collections.emptySet());
|
||||
}
|
||||
|
||||
/**
|
||||
* @param dependency see <a href="#Dependencies">Dependencies</a>
|
||||
*/
|
||||
public FoldingDescriptor(@NotNull ASTNode node, @NotNull TextRange range, @Nullable FoldingGroup group, @Nullable Object dependency) {
|
||||
this(node, range, group, dependency == null ? Collections.emptySet() : Collections.singleton(dependency));
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a folding region related to the specified AST node and covering the specified
|
||||
* text range.
|
||||
|
||||
@@ -1,50 +0,0 @@
|
||||
/*
|
||||
* Copyright 2000-2017 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.intellij.util;
|
||||
|
||||
import com.intellij.openapi.util.ModificationTracker;
|
||||
|
||||
/**
|
||||
* Boolean property that implements {@link ModificationTracker}.
|
||||
* Not thread safe (external synchronization is required).
|
||||
*/
|
||||
public class BooleanTrackableProperty implements ModificationTracker {
|
||||
private boolean myValue;
|
||||
private long myModificationCount;
|
||||
|
||||
public BooleanTrackableProperty() {
|
||||
this(false);
|
||||
}
|
||||
|
||||
public BooleanTrackableProperty(boolean value) {
|
||||
myValue = value;
|
||||
}
|
||||
|
||||
public boolean getValue() {
|
||||
return myValue;
|
||||
}
|
||||
|
||||
public void setValue(boolean value) {
|
||||
boolean oldValue = myValue;
|
||||
myValue = value;
|
||||
if (value != oldValue) myModificationCount++;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getModificationCount() {
|
||||
return myModificationCount;
|
||||
}
|
||||
}
|
||||
@@ -33,11 +33,6 @@ public class NamedFoldingDescriptor extends FoldingDescriptor {
|
||||
this(e.getNode(), new TextRange(start, end), group, placeholderText);
|
||||
}
|
||||
|
||||
public NamedFoldingDescriptor(@NotNull PsiElement e, int start, int end, @Nullable FoldingGroup group, @NotNull String placeholderText,
|
||||
@Nullable Object dependency) {
|
||||
this(e.getNode(), new TextRange(start, end), group, placeholderText, dependency);
|
||||
}
|
||||
|
||||
public NamedFoldingDescriptor(@NotNull ASTNode node, int start, int end, @Nullable FoldingGroup group, @NotNull String placeholderText) {
|
||||
this(node, new TextRange(start, end), group, placeholderText);
|
||||
}
|
||||
@@ -46,15 +41,7 @@ public class NamedFoldingDescriptor extends FoldingDescriptor {
|
||||
@NotNull final TextRange range,
|
||||
@Nullable FoldingGroup group,
|
||||
@NotNull String placeholderText) {
|
||||
this(node, range, group, placeholderText, null);
|
||||
}
|
||||
|
||||
public NamedFoldingDescriptor(@NotNull ASTNode node,
|
||||
@NotNull final TextRange range,
|
||||
@Nullable FoldingGroup group,
|
||||
@NotNull String placeholderText,
|
||||
@Nullable Object dependency) {
|
||||
super(node, range, group, dependency);
|
||||
super(node, range, group);
|
||||
myPlaceholderText = placeholderText;
|
||||
}
|
||||
|
||||
|
||||
@@ -27,10 +27,10 @@ public class BaseCodeFoldingOptionsProvider extends BeanConfigurable<CodeFolding
|
||||
public BaseCodeFoldingOptionsProvider() {
|
||||
super(CodeFoldingSettings.getInstance());
|
||||
CodeFoldingSettings settings = getInstance();
|
||||
checkBox(ApplicationBundle.message("checkbox.collapse.file.header"), settings::isCollapseFileHeader, settings::setCollapseFileHeader);
|
||||
checkBox(ApplicationBundle.message("checkbox.collapse.title.imports"), settings::isCollapseImports, settings::setCollapseImports);
|
||||
checkBox(ApplicationBundle.message("checkbox.collapse.javadoc.comments"), settings::isCollapseDocComments, settings::setCollapseDocComments);
|
||||
checkBox(ApplicationBundle.message("checkbox.collapse.method.bodies"), settings::isCollapseMethods, settings::setCollapseMethods);
|
||||
checkBox(ApplicationBundle.message("checkbox.collapse.custom.folding.regions"), settings::isCollapseCustomFoldingRegions, settings::setCollapseCustomFoldingRegions);
|
||||
checkBox(ApplicationBundle.message("checkbox.collapse.file.header"), ()->settings.COLLAPSE_FILE_HEADER, v->settings.COLLAPSE_FILE_HEADER=v);
|
||||
checkBox(ApplicationBundle.message("checkbox.collapse.title.imports"), ()->settings.COLLAPSE_IMPORTS, v->settings.COLLAPSE_IMPORTS=v);
|
||||
checkBox(ApplicationBundle.message("checkbox.collapse.javadoc.comments"), ()->settings.COLLAPSE_DOC_COMMENTS, v->settings.COLLAPSE_DOC_COMMENTS=v);
|
||||
checkBox(ApplicationBundle.message("checkbox.collapse.method.bodies"), ()->settings.COLLAPSE_METHODS, v->settings.COLLAPSE_METHODS=v);
|
||||
checkBox(ApplicationBundle.message("checkbox.collapse.custom.folding.regions"), ()->settings.COLLAPSE_CUSTOM_FOLDING_REGIONS, v->settings.COLLAPSE_CUSTOM_FOLDING_REGIONS=v);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,15 +29,12 @@ import com.intellij.openapi.progress.ProgressManager;
|
||||
import com.intellij.openapi.project.IndexNotReadyException;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Key;
|
||||
import com.intellij.openapi.util.ModificationTracker;
|
||||
import com.intellij.openapi.util.TextRange;
|
||||
import com.intellij.openapi.util.registry.Registry;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.SmartPointerManager;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import gnu.trove.THashMap;
|
||||
import gnu.trove.THashSet;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.*;
|
||||
@@ -50,8 +47,6 @@ class UpdateFoldRegionsOperation implements Runnable {
|
||||
|
||||
private static final Logger LOG = Logger.getInstance("#" + UpdateFoldRegionsOperation.class.getName());
|
||||
private static final Key<Boolean> CAN_BE_REMOVED_WHEN_COLLAPSED = Key.create("canBeRemovedWhenCollapsed");
|
||||
private static final Key<ModificationTracker[]> DEPENDENCIES = Key.create("dependencies");
|
||||
private static final Key<Map<ModificationTracker, Long>> MODIFICATION_STAMPS = Key.create("modificationStamps");
|
||||
|
||||
private final Project myProject;
|
||||
private final Editor myEditor;
|
||||
@@ -84,17 +79,15 @@ class UpdateFoldRegionsOperation implements Runnable {
|
||||
EditorFoldingInfo info = EditorFoldingInfo.get(myEditor);
|
||||
FoldingModelEx foldingModel = (FoldingModelEx)myEditor.getFoldingModel();
|
||||
Map<TextRange,Boolean> rangeToExpandStatusMap = new THashMap<>();
|
||||
Set<TextRange> rangesToResetToDefault = new THashSet<>();
|
||||
|
||||
// FoldingUpdate caches instances of our object, so they must be immutable.
|
||||
FoldingUpdate.FoldingMap elementsToFold = new FoldingUpdate.FoldingMap(myElementsToFoldMap);
|
||||
|
||||
removeInvalidRegions(info, foldingModel, elementsToFold, rangeToExpandStatusMap, rangesToResetToDefault);
|
||||
removeInvalidRegions(info, foldingModel, elementsToFold, rangeToExpandStatusMap);
|
||||
|
||||
Map<FoldRegion, Boolean> shouldExpand = new THashMap<>();
|
||||
Map<FoldingGroup, Boolean> groupExpand = new THashMap<>();
|
||||
List<FoldRegion> newRegions = addNewRegions(info, foldingModel, elementsToFold, rangeToExpandStatusMap, shouldExpand, groupExpand,
|
||||
rangesToResetToDefault);
|
||||
List<FoldRegion> newRegions = addNewRegions(info, foldingModel, elementsToFold, rangeToExpandStatusMap, shouldExpand, groupExpand);
|
||||
|
||||
applyExpandStatus(newRegions, shouldExpand, groupExpand);
|
||||
|
||||
@@ -116,11 +109,9 @@ class UpdateFoldRegionsOperation implements Runnable {
|
||||
|
||||
private List<FoldRegion> addNewRegions(@NotNull EditorFoldingInfo info,
|
||||
@NotNull FoldingModelEx foldingModel,
|
||||
FoldingUpdate.FoldingMap elementsToFold,
|
||||
@NotNull Map<TextRange, Boolean> rangeToExpandStatusMap,
|
||||
FoldingUpdate.FoldingMap elementsToFold, @NotNull Map<TextRange, Boolean> rangeToExpandStatusMap,
|
||||
@NotNull Map<FoldRegion, Boolean> shouldExpand,
|
||||
@NotNull Map<FoldingGroup, Boolean> groupExpand,
|
||||
@NotNull Set<TextRange> rangesToResetToDefault) {
|
||||
@NotNull Map<FoldingGroup, Boolean> groupExpand) {
|
||||
List<FoldRegion> newRegions = new ArrayList<>();
|
||||
SmartPointerManager smartPointerManager = SmartPointerManager.getInstance(myProject);
|
||||
for (PsiElement element : elementsToFold.keySet()) {
|
||||
@@ -154,13 +145,11 @@ class UpdateFoldRegionsOperation implements Runnable {
|
||||
}
|
||||
|
||||
if (descriptor.canBeRemovedWhenCollapsed()) region.putUserData(CAN_BE_REMOVED_WHEN_COLLAPSED, Boolean.TRUE);
|
||||
storeAssociatedDependencies(region, descriptor.getDependencies());
|
||||
|
||||
info.addRegion(region, smartPointerManager.createSmartPsiElementPointer(psi));
|
||||
newRegions.add(region);
|
||||
|
||||
boolean expandStatus = !descriptor.isNonExpandable() &&
|
||||
shouldExpandNewRegion(element, range, rangeToExpandStatusMap, rangesToResetToDefault.contains(range));
|
||||
boolean expandStatus = !descriptor.isNonExpandable() && shouldExpandNewRegion(element, range, rangeToExpandStatusMap);
|
||||
if (group == null) {
|
||||
shouldExpand.put(region, expandStatus);
|
||||
}
|
||||
@@ -174,39 +163,10 @@ class UpdateFoldRegionsOperation implements Runnable {
|
||||
return newRegions;
|
||||
}
|
||||
|
||||
private static void storeAssociatedDependencies(@NotNull FoldRegion region, @NotNull Set<Object> dependencies) {
|
||||
if (dependencies.isEmpty()) return;
|
||||
ModificationTracker[] modificationTrackers = ContainerUtil.findAllAsArray(dependencies, ModificationTracker.class);
|
||||
if (modificationTrackers.length == 0) return;
|
||||
region.putUserData(DEPENDENCIES, modificationTrackers);
|
||||
Map<ModificationTracker, Long> stamps = region.getEditor().getUserData(MODIFICATION_STAMPS);
|
||||
if (stamps == null) {
|
||||
region.getEditor().putUserData(MODIFICATION_STAMPS, stamps = new WeakHashMap<>());
|
||||
}
|
||||
for (ModificationTracker tracker : modificationTrackers) {
|
||||
stamps.put(tracker, tracker.getModificationCount());
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean hasExpiredDependencies(@NotNull FoldRegion region) {
|
||||
ModificationTracker[] dependencies = region.getUserData(DEPENDENCIES);
|
||||
if (dependencies == null) return false;
|
||||
Map<ModificationTracker, Long> stamps = region.getEditor().getUserData(MODIFICATION_STAMPS);
|
||||
if (stamps == null) return false;
|
||||
for (ModificationTracker tracker : dependencies) {
|
||||
Long initialValue = stamps.get(tracker);
|
||||
if (initialValue != null && initialValue != tracker.getModificationCount()) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private boolean shouldExpandNewRegion(PsiElement element,
|
||||
TextRange range,
|
||||
Map<TextRange, Boolean> rangeToExpandStatusMap,
|
||||
boolean forceReset) {
|
||||
if (myApplyDefaultState != ApplyDefaultStateMode.NO || forceReset) {
|
||||
private boolean shouldExpandNewRegion(PsiElement element, TextRange range, Map<TextRange, Boolean> rangeToExpandStatusMap) {
|
||||
if (myApplyDefaultState != ApplyDefaultStateMode.NO) {
|
||||
// Considering that this code is executed only on initial fold regions construction on editor opening.
|
||||
if (myApplyDefaultState == ApplyDefaultStateMode.EXCEPT_CARET_REGION || forceReset) {
|
||||
if (myApplyDefaultState == ApplyDefaultStateMode.EXCEPT_CARET_REGION) {
|
||||
TextRange lineRange = OpenFileDescriptor.getRangeToUnfoldOnNavigation(myEditor);
|
||||
if (lineRange.intersects(range)) {
|
||||
return true;
|
||||
@@ -221,18 +181,10 @@ class UpdateFoldRegionsOperation implements Runnable {
|
||||
|
||||
private void removeInvalidRegions(@NotNull EditorFoldingInfo info,
|
||||
@NotNull FoldingModelEx foldingModel,
|
||||
FoldingUpdate.FoldingMap elementsToFold,
|
||||
@NotNull Map<TextRange, Boolean> rangeToExpandStatusMap,
|
||||
@NotNull Set<TextRange> rangesToResetToDefault) {
|
||||
FoldingUpdate.FoldingMap elementsToFold, @NotNull Map<TextRange, Boolean> rangeToExpandStatusMap) {
|
||||
List<FoldRegion> toRemove = new ArrayList<>();
|
||||
InjectedLanguageManager injectedManager = InjectedLanguageManager.getInstance(myProject);
|
||||
for (FoldRegion region : foldingModel.getAllFoldRegions()) {
|
||||
if (hasExpiredDependencies(region)) {
|
||||
toRemove.add(region);
|
||||
rangesToResetToDefault.add(new TextRange(region.getStartOffset(), region.getEndOffset()));
|
||||
continue;
|
||||
}
|
||||
|
||||
if (myKeepCollapsedRegions && !region.isExpanded() && !regionOrGroupCanBeRemovedWhenCollapsed(region)) continue;
|
||||
|
||||
PsiElement element = info.getPsiElement(region);
|
||||
|
||||
@@ -81,7 +81,6 @@ public class PropertyFoldingBuilder extends FoldingBuilderEx {
|
||||
if (isI18nProperty(expression)) {
|
||||
final IProperty property = getI18nProperty(expression);
|
||||
final HashSet<Object> set = new HashSet<>();
|
||||
set.add(JavaCodeFoldingSettings.getInstance().getCollapseI18nMessagesProperty());
|
||||
set.add(property != null ? property : PsiModificationTracker.OUT_OF_CODE_BLOCK_MODIFICATION_COUNT);
|
||||
final String msg = formatI18nProperty(expression, property);
|
||||
|
||||
|
||||
@@ -233,15 +233,15 @@ public class PythonFoldingBuilder extends CustomFoldingBuilder implements DumbAw
|
||||
@Override
|
||||
protected boolean isRegionCollapsedByDefault(@NotNull ASTNode node) {
|
||||
if (isImport(node)) {
|
||||
return CodeFoldingSettings.getInstance().isCollapseImports();
|
||||
return CodeFoldingSettings.getInstance().COLLAPSE_IMPORTS;
|
||||
}
|
||||
if (node.getElementType() == PyElementTypes.STRING_LITERAL_EXPRESSION) {
|
||||
if (getDocStringOwnerType(node) == PyElementTypes.FUNCTION_DECLARATION && CodeFoldingSettings.getInstance().isCollapseMethods()) {
|
||||
if (getDocStringOwnerType(node) == PyElementTypes.FUNCTION_DECLARATION && CodeFoldingSettings.getInstance().COLLAPSE_METHODS) {
|
||||
// method will be collapsed, no need to also collapse docstring
|
||||
return false;
|
||||
}
|
||||
if (getDocStringOwnerType(node) != null) {
|
||||
return CodeFoldingSettings.getInstance().isCollapseDocComments();
|
||||
return CodeFoldingSettings.getInstance().COLLAPSE_DOC_COMMENTS;
|
||||
}
|
||||
return PythonFoldingSettings.getInstance().isCollapseLongStrings();
|
||||
}
|
||||
@@ -249,7 +249,7 @@ public class PythonFoldingBuilder extends CustomFoldingBuilder implements DumbAw
|
||||
return PythonFoldingSettings.getInstance().isCollapseSequentialComments();
|
||||
}
|
||||
if (node.getElementType() == PyElementTypes.STATEMENT_LIST && node.getTreeParent().getElementType() == PyElementTypes.FUNCTION_DECLARATION) {
|
||||
return CodeFoldingSettings.getInstance().isCollapseMethods();
|
||||
return CodeFoldingSettings.getInstance().COLLAPSE_METHODS;
|
||||
}
|
||||
if (FOLDABLE_COLLECTIONS_LITERALS.contains(node.getElementType())) {
|
||||
return PythonFoldingSettings.getInstance().isCollapseLongCollections();
|
||||
|
||||
@@ -27,9 +27,9 @@ public class XmlCodeFoldingOptionsProvider extends BeanConfigurable<XmlFoldingSe
|
||||
public XmlCodeFoldingOptionsProvider() {
|
||||
super(XmlFoldingSettings.getInstance().getState());
|
||||
XmlFoldingSettings settings = XmlFoldingSettings.getInstance();
|
||||
checkBox(ApplicationBundle.message("checkbox.collapse.xml.tags"), settings::isCollapseXmlTags, settings::setCollapseXmlTags);
|
||||
checkBox(ApplicationBundle.message("checkbox.collapse.html.style.attribute"),settings::isCollapseHtmlStyleAttribute, settings::setCollapseHtmlStyleAttribute);
|
||||
checkBox(ApplicationBundle.message("checkbox.collapse.entities"),settings::isCollapseEntities, settings::setCollapseEntities);
|
||||
checkBox(ApplicationBundle.message("checkbox.collapse.data.uri"),settings::isCollapseDataUri, settings::setCollapseDataUri);
|
||||
checkBox(ApplicationBundle.message("checkbox.collapse.xml.tags"), settings::isCollapseXmlTags, value->settings.getState().COLLAPSE_XML_TAGS=value);
|
||||
checkBox(ApplicationBundle.message("checkbox.collapse.html.style.attribute"),settings::isCollapseHtmlStyleAttribute, value->settings.getState().COLLAPSE_HTML_STYLE_ATTRIBUTE=value);
|
||||
checkBox(ApplicationBundle.message("checkbox.collapse.entities"),settings::isCollapseEntities, value->settings.getState().COLLAPSE_ENTITIES=value);
|
||||
checkBox(ApplicationBundle.message("checkbox.collapse.data.uri"),settings::isCollapseDataUri, value->settings.getState().COLLAPSE_DATA_URI=value);
|
||||
}
|
||||
}
|
||||
@@ -83,7 +83,7 @@ public class RncFoldingBuilder implements FoldingBuilder {
|
||||
|
||||
@Override
|
||||
public boolean isCollapsedByDefault(@NotNull ASTNode node) {
|
||||
return isCommentLike(node.getElementType()) && CodeFoldingSettings.getInstance().isCollapseDocComments();
|
||||
return isCommentLike(node.getElementType()) && CodeFoldingSettings.getInstance().COLLAPSE_DOC_COMMENTS;
|
||||
}
|
||||
|
||||
private static void process(@Nullable ASTNode node, Document document, ArrayList<FoldingDescriptor> regions) {
|
||||
|
||||
@@ -15,19 +15,9 @@
|
||||
*/
|
||||
package com.intellij.lang;
|
||||
|
||||
import com.intellij.util.BooleanTrackableProperty;
|
||||
|
||||
public interface XmlCodeFoldingSettings {
|
||||
boolean isCollapseXmlTags();
|
||||
void setCollapseXmlTags(boolean value);
|
||||
BooleanTrackableProperty getCollapseXmlTagsProperty();
|
||||
boolean isCollapseHtmlStyleAttribute();
|
||||
void setCollapseHtmlStyleAttribute(boolean value);
|
||||
BooleanTrackableProperty getCollapseHtmlStyleAttributeProperty();
|
||||
boolean isCollapseEntities();
|
||||
void setCollapseEntities(boolean value);
|
||||
BooleanTrackableProperty getCollapseEntitiesProperty();
|
||||
boolean isCollapseDataUri();
|
||||
void setCollapseDataUri(boolean value);
|
||||
BooleanTrackableProperty getCollapseDataUriProperty();
|
||||
}
|
||||
|
||||
@@ -20,9 +20,7 @@ import com.intellij.openapi.components.PersistentStateComponent;
|
||||
import com.intellij.openapi.components.ServiceManager;
|
||||
import com.intellij.openapi.components.State;
|
||||
import com.intellij.openapi.components.Storage;
|
||||
import com.intellij.util.BooleanTrackableProperty;
|
||||
import com.intellij.util.xmlb.XmlSerializerUtil;
|
||||
import com.intellij.util.xmlb.annotations.OptionTag;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@State(name = "XmlFoldingSettings", storages = @Storage("editor.codeinsight.xml"))
|
||||
@@ -37,68 +35,28 @@ public class XmlFoldingSettings implements XmlCodeFoldingSettings, PersistentSta
|
||||
// todo: remove after 2017.1 release
|
||||
CssFoldingSettings cssFoldingSettings = CssFoldingSettings.getInstance();
|
||||
if (cssFoldingSettings != null) {
|
||||
myState.myCollapseDataUri.setValue(cssFoldingSettings.isCollapseDataUri());
|
||||
myState.COLLAPSE_DATA_URI = cssFoldingSettings.isCollapseDataUri();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCollapseXmlTags() {
|
||||
return myState.isCollapseXmlTags();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCollapseXmlTags(boolean value) {
|
||||
myState.myCollapseXmlTags.setValue(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BooleanTrackableProperty getCollapseXmlTagsProperty() {
|
||||
return myState.myCollapseXmlTags;
|
||||
return myState.COLLAPSE_XML_TAGS;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCollapseHtmlStyleAttribute() {
|
||||
return myState.isCollapseHtmlStyleAttribute();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCollapseHtmlStyleAttribute(boolean value) {
|
||||
myState.myCollapseHtmlStyleAttributes.setValue(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BooleanTrackableProperty getCollapseHtmlStyleAttributeProperty() {
|
||||
return myState.myCollapseHtmlStyleAttributes;
|
||||
return myState.COLLAPSE_HTML_STYLE_ATTRIBUTE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCollapseEntities() {
|
||||
return myState.isCollapseEntities();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCollapseEntities(boolean value) {
|
||||
myState.myCollapseEntities.setValue(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BooleanTrackableProperty getCollapseEntitiesProperty() {
|
||||
return myState.myCollapseEntities;
|
||||
return myState.COLLAPSE_ENTITIES;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCollapseDataUri() {
|
||||
return myState.isCollapseDataUri();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCollapseDataUri(boolean value) {
|
||||
myState.myCollapseDataUri.setValue(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BooleanTrackableProperty getCollapseDataUriProperty() {
|
||||
return myState.myCollapseDataUri;
|
||||
return myState.COLLAPSE_DATA_URI;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -113,29 +71,9 @@ public class XmlFoldingSettings implements XmlCodeFoldingSettings, PersistentSta
|
||||
}
|
||||
|
||||
public static final class State {
|
||||
private BooleanTrackableProperty myCollapseXmlTags = new BooleanTrackableProperty();
|
||||
private BooleanTrackableProperty myCollapseHtmlStyleAttributes = new BooleanTrackableProperty(true);
|
||||
private BooleanTrackableProperty myCollapseEntities = new BooleanTrackableProperty(true);
|
||||
private BooleanTrackableProperty myCollapseDataUri = new BooleanTrackableProperty(true);
|
||||
|
||||
@OptionTag("COLLAPSE_XML_TAGS")
|
||||
public boolean isCollapseXmlTags() {
|
||||
return myCollapseXmlTags.getValue();
|
||||
}
|
||||
|
||||
@OptionTag("COLLAPSE_HTML_STYLE_ATTRIBUTE")
|
||||
public boolean isCollapseHtmlStyleAttribute() {
|
||||
return myCollapseHtmlStyleAttributes.getValue();
|
||||
}
|
||||
|
||||
@OptionTag("COLLAPSE_ENTITIES")
|
||||
public boolean isCollapseEntities() {
|
||||
return myCollapseEntities.getValue();
|
||||
}
|
||||
|
||||
@OptionTag("COLLAPSE_DATA_URI")
|
||||
public boolean isCollapseDataUri() {
|
||||
return myCollapseDataUri.getValue();
|
||||
}
|
||||
public boolean COLLAPSE_XML_TAGS;
|
||||
public boolean COLLAPSE_HTML_STYLE_ATTRIBUTE = true;
|
||||
public boolean COLLAPSE_ENTITIES = true;
|
||||
public boolean COLLAPSE_DATA_URI = true;
|
||||
}
|
||||
}
|
||||
@@ -34,7 +34,6 @@ import com.intellij.psi.impl.source.xml.XmlTokenImpl;
|
||||
import com.intellij.psi.tree.TokenSet;
|
||||
import com.intellij.psi.util.PsiUtilCore;
|
||||
import com.intellij.psi.xml.*;
|
||||
import com.intellij.util.BooleanTrackableProperty;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.io.URLUtil;
|
||||
import com.intellij.xml.util.HtmlUtil;
|
||||
@@ -213,14 +212,7 @@ public abstract class XmlCodeFoldingBuilder extends CustomFoldingBuilder impleme
|
||||
final boolean entity = isEntity(elementToFold);
|
||||
if (startLine < endLine || elementToFold instanceof XmlAttribute || entity) {
|
||||
if (range.getStartOffset() + MIN_TEXT_RANGE_LENGTH < range.getEndOffset() || entity) {
|
||||
XmlCodeFoldingSettings settings = getFoldingSettings();
|
||||
BooleanTrackableProperty dependency =
|
||||
elementToFold instanceof XmlTag ? settings.getCollapseXmlTagsProperty() :
|
||||
elementToFold instanceof XmlAttribute ?
|
||||
(isSrcAttribute((XmlAttribute)elementToFold) ? settings.getCollapseDataUriProperty()
|
||||
: isStyleAttribute((XmlAttribute)elementToFold) ? settings.getCollapseHtmlStyleAttributeProperty() : null) :
|
||||
isEntity(elementToFold) ? settings.getCollapseEntitiesProperty() : null;
|
||||
foldings.add(new FoldingDescriptor(elementToFold.getNode(), range, dependency));
|
||||
foldings.add(new FoldingDescriptor(elementToFold.getNode(), range));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -277,17 +269,16 @@ public abstract class XmlCodeFoldingBuilder extends CustomFoldingBuilder impleme
|
||||
final PsiElement psi = node.getPsi();
|
||||
final XmlCodeFoldingSettings foldingSettings = getFoldingSettings();
|
||||
return (psi instanceof XmlTag && foldingSettings.isCollapseXmlTags())
|
||||
|| (psi instanceof XmlAttribute && (foldingSettings.isCollapseHtmlStyleAttribute() && isStyleAttribute((XmlAttribute)psi) ||
|
||||
foldingSettings.isCollapseDataUri() && isSrcAttribute((XmlAttribute)psi)))
|
||||
|| (psi instanceof XmlAttribute && (foldStyle((XmlAttribute)psi, foldingSettings) || foldSrc((XmlAttribute)psi, foldingSettings)))
|
||||
|| isEntity(psi) && foldingSettings.isCollapseEntities() && getEntityPlaceholder(psi) != null;
|
||||
}
|
||||
|
||||
private static boolean isSrcAttribute(XmlAttribute psi) {
|
||||
return "src".equals(psi.getName());
|
||||
private static boolean foldSrc(XmlAttribute psi, XmlCodeFoldingSettings settings) {
|
||||
return settings.isCollapseDataUri() && "src".equals(psi.getName());
|
||||
}
|
||||
|
||||
private static boolean isStyleAttribute(XmlAttribute psi) {
|
||||
return HtmlUtil.STYLE_ATTRIBUTE_NAME.equalsIgnoreCase(psi.getName());
|
||||
private static boolean foldStyle(XmlAttribute psi, XmlCodeFoldingSettings settings) {
|
||||
return settings.isCollapseHtmlStyleAttribute() && HtmlUtil.STYLE_ATTRIBUTE_NAME.equalsIgnoreCase(psi.getName());
|
||||
}
|
||||
|
||||
protected boolean isEntity(PsiElement psi) {
|
||||
@@ -297,7 +288,8 @@ public abstract class XmlCodeFoldingBuilder extends CustomFoldingBuilder impleme
|
||||
|
||||
private static boolean isAttributeShouldBeFolded(XmlAttribute child) {
|
||||
return HtmlUtil.isHtmlFile(child.getContainingFile()) &&
|
||||
(isStyleAttribute(child) || isSrcAttribute(child) && child.getValue() != null && URLUtil.isDataUri(child.getValue()));
|
||||
(HtmlUtil.STYLE_ATTRIBUTE_NAME.equalsIgnoreCase(child.getName()) ||
|
||||
"src".equals(child.getName()) && child.getValue() != null && URLUtil.isDataUri(child.getValue()));
|
||||
}
|
||||
|
||||
protected abstract XmlCodeFoldingSettings getFoldingSettings();
|
||||
|
||||
Reference in New Issue
Block a user