From ae251d56bb07373146fdf6559423ca644dc339df Mon Sep 17 00:00:00 2001 From: Dmitry Batrak Date: Thu, 6 Apr 2017 17:17:30 +0300 Subject: [PATCH] IDEA-170039 Honor new foldings 'collapse by default' state - convert Java and XML folding settings to use properties with modification tracking --- .../folding/JavaCodeFoldingSettings.java | 17 +- .../impl/JavaCodeFoldingSettingsBase.java | 150 +++++++++++++----- .../folding/JavaFoldingTest.groovy | 6 +- .../folding/CodeFoldingSettings.java | 97 ++++++++++- .../lang/folding/CustomFoldingProvider.java | 4 +- .../util/BooleanTrackableProperty.java | 50 ++++++ .../BaseCodeFoldingOptionsProvider.java | 16 +- .../python/PythonFoldingBuilder.java | 10 +- .../editor/XmlCodeFoldingOptionsProvider.java | 10 +- .../compact/folding/RncFoldingBuilder.java | 2 +- .../intellij/lang/XmlCodeFoldingSettings.java | 12 +- .../options/editor/XmlFoldingSettings.java | 82 ++++++++-- 12 files changed, 380 insertions(+), 76 deletions(-) create mode 100644 platform/core-api/src/com/intellij/util/BooleanTrackableProperty.java diff --git a/java/java-psi-api/src/com/intellij/codeInsight/folding/JavaCodeFoldingSettings.java b/java/java-psi-api/src/com/intellij/codeInsight/folding/JavaCodeFoldingSettings.java index 951962778627..dfa880f95b8e 100644 --- a/java/java-psi-api/src/com/intellij/codeInsight/folding/JavaCodeFoldingSettings.java +++ b/java/java-psi-api/src/com/intellij/codeInsight/folding/JavaCodeFoldingSettings.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * 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. @@ -17,6 +17,7 @@ package com.intellij.codeInsight.folding; import com.intellij.openapi.components.ServiceManager; +import com.intellij.util.BooleanTrackableProperty; public abstract class JavaCodeFoldingSettings { @@ -26,43 +27,57 @@ 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(); } diff --git a/java/java-psi-impl/src/com/intellij/codeInsight/folding/impl/JavaCodeFoldingSettingsBase.java b/java/java-psi-impl/src/com/intellij/codeInsight/folding/impl/JavaCodeFoldingSettingsBase.java index 6e039fc87b65..c85fbd684ea2 100644 --- a/java/java-psi-impl/src/com/intellij/codeInsight/folding/impl/JavaCodeFoldingSettingsBase.java +++ b/java/java-psi-impl/src/com/intellij/codeInsight/folding/impl/JavaCodeFoldingSettingsBase.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2016 JetBrains s.r.o. + * 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. @@ -17,155 +17,227 @@ 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 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; + 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(); @Override public boolean isCollapseImports() { - return CodeFoldingSettings.getInstance().COLLAPSE_IMPORTS; + return CodeFoldingSettings.getInstance().isCollapseImports(); } @Override public void setCollapseImports(boolean value) { - CodeFoldingSettings.getInstance().COLLAPSE_IMPORTS = value; + CodeFoldingSettings.getInstance().setCollapseImports(value); + } + + @Override + public BooleanTrackableProperty getCollapseImportsProperty() { + return CodeFoldingSettings.getInstance().getCollapseImportsProperty(); } @Override public boolean isCollapseLambdas() { - return COLLAPSE_CLOSURES; + return COLLAPSE_CLOSURES.getValue(); } @Override public void setCollapseLambdas(boolean value) { - COLLAPSE_CLOSURES = value; + COLLAPSE_CLOSURES.setValue(value); + } + + @Override + public BooleanTrackableProperty getCollapseLambdasProperty() { + return COLLAPSE_CLOSURES; } @Override public boolean isCollapseConstructorGenericParameters() { - return COLLAPSE_CONSTRUCTOR_GENERIC_PARAMETERS; + return COLLAPSE_CONSTRUCTOR_GENERIC_PARAMETERS.getValue(); } @Override public void setCollapseConstructorGenericParameters(boolean value) { - COLLAPSE_CONSTRUCTOR_GENERIC_PARAMETERS = value; + COLLAPSE_CONSTRUCTOR_GENERIC_PARAMETERS.setValue(value); + } + + @Override + public BooleanTrackableProperty getCollapseConstructorGenericParametersProperty() { + return COLLAPSE_CONSTRUCTOR_GENERIC_PARAMETERS; } @Override public boolean isCollapseMethods() { - return CodeFoldingSettings.getInstance().COLLAPSE_METHODS; + return CodeFoldingSettings.getInstance().isCollapseMethods(); } @Override public void setCollapseMethods(boolean value) { - CodeFoldingSettings.getInstance().COLLAPSE_METHODS = value; + CodeFoldingSettings.getInstance().setCollapseMethods(value); + } + + @Override + public BooleanTrackableProperty getCollapseMethodsProperty() { + return CodeFoldingSettings.getInstance().getCollapseMethodsProperty(); } @Override public boolean isCollapseAccessors() { - return COLLAPSE_ACCESSORS; + return COLLAPSE_ACCESSORS.getValue(); } @Override public void setCollapseAccessors(boolean value) { - COLLAPSE_ACCESSORS = value; + COLLAPSE_ACCESSORS.setValue(value); } + + @Override + public BooleanTrackableProperty getCollapseAccessorsProperty() { + return COLLAPSE_ACCESSORS; + } + @Override public boolean isCollapseOneLineMethods() { - return COLLAPSE_ONE_LINE_METHODS; + return COLLAPSE_ONE_LINE_METHODS.getValue(); } @Override public void setCollapseOneLineMethods(boolean value) { - COLLAPSE_ONE_LINE_METHODS = value; + COLLAPSE_ONE_LINE_METHODS.setValue(value); + } + + @Override + public BooleanTrackableProperty getCollapseOneLineMethodsProperty() { + return COLLAPSE_ONE_LINE_METHODS; } @Override public boolean isCollapseInnerClasses() { - return COLLAPSE_INNER_CLASSES; + return COLLAPSE_INNER_CLASSES.getValue(); } @Override public void setCollapseInnerClasses(boolean value) { - COLLAPSE_INNER_CLASSES = value; + COLLAPSE_INNER_CLASSES.setValue(value); + } + + @Override + public BooleanTrackableProperty getCollapseInnerClassesProperty() { + return COLLAPSE_INNER_CLASSES; } @Override public boolean isCollapseJavadocs() { - return CodeFoldingSettings.getInstance().COLLAPSE_DOC_COMMENTS; + return CodeFoldingSettings.getInstance().isCollapseDocComments(); } @Override public void setCollapseJavadocs(boolean value) { - CodeFoldingSettings.getInstance().COLLAPSE_DOC_COMMENTS = value; + CodeFoldingSettings.getInstance().setCollapseDocComments(value); + } + + @Override + public BooleanTrackableProperty getCollapseJavadocsProperty() { + return CodeFoldingSettings.getInstance().getCollapseDocCommentsProperty(); } @Override public boolean isCollapseFileHeader() { - return CodeFoldingSettings.getInstance().COLLAPSE_FILE_HEADER; + return CodeFoldingSettings.getInstance().isCollapseFileHeader(); } @Override public void setCollapseFileHeader(boolean value) { - CodeFoldingSettings.getInstance().COLLAPSE_FILE_HEADER = value; + CodeFoldingSettings.getInstance().setCollapseFileHeader(value); + } + + @Override + public BooleanTrackableProperty getCollapseFileHeaderProperty() { + return CodeFoldingSettings.getInstance().getCollapseFileHeaderProperty(); } @Override public boolean isCollapseAnonymousClasses() { - return COLLAPSE_ANONYMOUS_CLASSES; + return COLLAPSE_ANONYMOUS_CLASSES.getValue(); } @Override public void setCollapseAnonymousClasses(boolean value) { - COLLAPSE_ANONYMOUS_CLASSES = value; + COLLAPSE_ANONYMOUS_CLASSES.setValue(value); + } + + @Override + public BooleanTrackableProperty getCollapseAnonymousClassesProperty() { + return COLLAPSE_ANONYMOUS_CLASSES; } @Override public boolean isCollapseAnnotations() { - return COLLAPSE_ANNOTATIONS; + return COLLAPSE_ANNOTATIONS.getValue(); } @Override public void setCollapseAnnotations(boolean value) { - COLLAPSE_ANNOTATIONS = value; + COLLAPSE_ANNOTATIONS.setValue(value); + } + + @Override + public BooleanTrackableProperty getCollapseAnnotationsProperty() { + return COLLAPSE_ANNOTATIONS; } @Override public boolean isCollapseI18nMessages() { - return COLLAPSE_I18N_MESSAGES; + return COLLAPSE_I18N_MESSAGES.getValue(); } @Override public void setCollapseI18nMessages(boolean value) { - COLLAPSE_I18N_MESSAGES = value; + COLLAPSE_I18N_MESSAGES.setValue(value); + } + + @Override + public BooleanTrackableProperty getCollapseI18nMessagesProperty() { + return COLLAPSE_I18N_MESSAGES; } @Override public boolean isCollapseSuppressWarnings() { - return COLLAPSE_SUPPRESS_WARNINGS; + return COLLAPSE_SUPPRESS_WARNINGS.getValue(); } @Override public void setCollapseSuppressWarnings(boolean value) { - COLLAPSE_SUPPRESS_WARNINGS = value; + COLLAPSE_SUPPRESS_WARNINGS.setValue(value); + } + + @Override + public BooleanTrackableProperty getCollapseSuppressWarningsProperty() { + return COLLAPSE_SUPPRESS_WARNINGS; } @Override public boolean isCollapseEndOfLineComments() { - return COLLAPSE_END_OF_LINE_COMMENTS; + return COLLAPSE_END_OF_LINE_COMMENTS.getValue(); } @Override public void setCollapseEndOfLineComments(boolean value) { - COLLAPSE_END_OF_LINE_COMMENTS = value; + COLLAPSE_END_OF_LINE_COMMENTS.setValue(value); + } + + @Override + public BooleanTrackableProperty getCollapseEndOfLineCommentsProperty() { + return COLLAPSE_END_OF_LINE_COMMENTS; } } diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/folding/JavaFoldingTest.groovy b/java/java-tests/testSrc/com/intellij/codeInsight/folding/JavaFoldingTest.groovy index aea519878cb1..d1b49e3ea25b 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/folding/JavaFoldingTest.groovy +++ b/java/java-tests/testSrc/com/intellij/codeInsight/folding/JavaFoldingTest.groovy @@ -487,15 +487,15 @@ class Test { }; } """ - boolean oldValue = CodeFoldingSettings.instance.COLLAPSE_CUSTOM_FOLDING_REGIONS; + boolean oldValue = CodeFoldingSettings.instance.isCollapseCustomFoldingRegions(); try { - CodeFoldingSettings.instance.COLLAPSE_CUSTOM_FOLDING_REGIONS = true; + CodeFoldingSettings.instance.setCollapseCustomFoldingRegions(true); configure text def foldingModel = myFixture.editor.foldingModel as FoldingModelImpl assert foldingModel.getCollapsedRegionAtOffset(text.indexOf("//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); + 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); } } diff --git a/python/src/com/jetbrains/python/PythonFoldingBuilder.java b/python/src/com/jetbrains/python/PythonFoldingBuilder.java index 7978fd5deead..7761354984d1 100644 --- a/python/src/com/jetbrains/python/PythonFoldingBuilder.java +++ b/python/src/com/jetbrains/python/PythonFoldingBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2014 JetBrains s.r.o. + * 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. @@ -233,15 +233,15 @@ public class PythonFoldingBuilder extends CustomFoldingBuilder implements DumbAw @Override protected boolean isRegionCollapsedByDefault(@NotNull ASTNode node) { if (isImport(node)) { - return CodeFoldingSettings.getInstance().COLLAPSE_IMPORTS; + return CodeFoldingSettings.getInstance().isCollapseImports(); } if (node.getElementType() == PyElementTypes.STRING_LITERAL_EXPRESSION) { - if (getDocStringOwnerType(node) == PyElementTypes.FUNCTION_DECLARATION && CodeFoldingSettings.getInstance().COLLAPSE_METHODS) { + if (getDocStringOwnerType(node) == PyElementTypes.FUNCTION_DECLARATION && CodeFoldingSettings.getInstance().isCollapseMethods()) { // method will be collapsed, no need to also collapse docstring return false; } if (getDocStringOwnerType(node) != null) { - return CodeFoldingSettings.getInstance().COLLAPSE_DOC_COMMENTS; + return CodeFoldingSettings.getInstance().isCollapseDocComments(); } 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().COLLAPSE_METHODS; + return CodeFoldingSettings.getInstance().isCollapseMethods(); } if (FOLDABLE_COLLECTIONS_LITERALS.contains(node.getElementType())) { return PythonFoldingSettings.getInstance().isCollapseLongCollections(); diff --git a/xml/impl/src/com/intellij/application/options/editor/XmlCodeFoldingOptionsProvider.java b/xml/impl/src/com/intellij/application/options/editor/XmlCodeFoldingOptionsProvider.java index 09101e1a0c55..87498964dd7c 100644 --- a/xml/impl/src/com/intellij/application/options/editor/XmlCodeFoldingOptionsProvider.java +++ b/xml/impl/src/com/intellij/application/options/editor/XmlCodeFoldingOptionsProvider.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2016 JetBrains s.r.o. + * 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. @@ -27,9 +27,9 @@ public class XmlCodeFoldingOptionsProvider extends BeanConfigurablesettings.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); + 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); } } \ No newline at end of file diff --git a/xml/relaxng/src/org/intellij/plugins/relaxNG/compact/folding/RncFoldingBuilder.java b/xml/relaxng/src/org/intellij/plugins/relaxNG/compact/folding/RncFoldingBuilder.java index 12456caf75ba..c7d234e675a5 100644 --- a/xml/relaxng/src/org/intellij/plugins/relaxNG/compact/folding/RncFoldingBuilder.java +++ b/xml/relaxng/src/org/intellij/plugins/relaxNG/compact/folding/RncFoldingBuilder.java @@ -83,7 +83,7 @@ public class RncFoldingBuilder implements FoldingBuilder { @Override public boolean isCollapsedByDefault(@NotNull ASTNode node) { - return isCommentLike(node.getElementType()) && CodeFoldingSettings.getInstance().COLLAPSE_DOC_COMMENTS; + return isCommentLike(node.getElementType()) && CodeFoldingSettings.getInstance().isCollapseDocComments(); } private static void process(@Nullable ASTNode node, Document document, ArrayList regions) { diff --git a/xml/xml-psi-api/src/com/intellij/lang/XmlCodeFoldingSettings.java b/xml/xml-psi-api/src/com/intellij/lang/XmlCodeFoldingSettings.java index c4b444612dbe..ba572cacc041 100644 --- a/xml/xml-psi-api/src/com/intellij/lang/XmlCodeFoldingSettings.java +++ b/xml/xml-psi-api/src/com/intellij/lang/XmlCodeFoldingSettings.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2016 JetBrains s.r.o. + * 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. @@ -15,9 +15,19 @@ */ 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(); } diff --git a/xml/xml-psi-impl/src/com/intellij/application/options/editor/XmlFoldingSettings.java b/xml/xml-psi-impl/src/com/intellij/application/options/editor/XmlFoldingSettings.java index 0d2efdf2fbbe..67c03eee02f3 100644 --- a/xml/xml-psi-impl/src/com/intellij/application/options/editor/XmlFoldingSettings.java +++ b/xml/xml-psi-impl/src/com/intellij/application/options/editor/XmlFoldingSettings.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2016 JetBrains s.r.o. + * 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. @@ -20,7 +20,9 @@ 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")) @@ -35,28 +37,68 @@ public class XmlFoldingSettings implements XmlCodeFoldingSettings, PersistentSta // todo: remove after 2017.1 release CssFoldingSettings cssFoldingSettings = CssFoldingSettings.getInstance(); if (cssFoldingSettings != null) { - myState.COLLAPSE_DATA_URI = cssFoldingSettings.isCollapseDataUri(); + myState.myCollapseDataUri.setValue(cssFoldingSettings.isCollapseDataUri()); } } @Override public boolean isCollapseXmlTags() { - return myState.COLLAPSE_XML_TAGS; + return myState.isCollapseXmlTags(); + } + + @Override + public void setCollapseXmlTags(boolean value) { + myState.myCollapseXmlTags.setValue(value); + } + + @Override + public BooleanTrackableProperty getCollapseXmlTagsProperty() { + return myState.myCollapseXmlTags; } @Override public boolean isCollapseHtmlStyleAttribute() { - return myState.COLLAPSE_HTML_STYLE_ATTRIBUTE; + return myState.isCollapseHtmlStyleAttribute(); + } + + @Override + public void setCollapseHtmlStyleAttribute(boolean value) { + myState.myCollapseHtmlStyleAttributes.setValue(value); + } + + @Override + public BooleanTrackableProperty getCollapseHtmlStyleAttributeProperty() { + return myState.myCollapseHtmlStyleAttributes; } @Override public boolean isCollapseEntities() { - return myState.COLLAPSE_ENTITIES; + return myState.isCollapseEntities(); + } + + @Override + public void setCollapseEntities(boolean value) { + myState.myCollapseEntities.setValue(value); + } + + @Override + public BooleanTrackableProperty getCollapseEntitiesProperty() { + return myState.myCollapseEntities; } @Override public boolean isCollapseDataUri() { - return myState.COLLAPSE_DATA_URI; + return myState.isCollapseDataUri(); + } + + @Override + public void setCollapseDataUri(boolean value) { + myState.myCollapseDataUri.setValue(value); + } + + @Override + public BooleanTrackableProperty getCollapseDataUriProperty() { + return myState.myCollapseDataUri; } @Override @@ -71,9 +113,29 @@ public class XmlFoldingSettings implements XmlCodeFoldingSettings, PersistentSta } public static final class State { - public boolean COLLAPSE_XML_TAGS; - public boolean COLLAPSE_HTML_STYLE_ATTRIBUTE = true; - public boolean COLLAPSE_ENTITIES = true; - public boolean COLLAPSE_DATA_URI = true; + 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(); + } } } \ No newline at end of file