From 9b645211e3ca6f43a873a3abdca32b86a64b316c Mon Sep 17 00:00:00 2001 From: Alexander Zolotov Date: Thu, 7 Jul 2016 21:42:54 +0300 Subject: [PATCH] Merge CSS and XML folding settings (WEB-21768) --- .../src/messages/ApplicationBundle.properties | 1 + .../editor/XmlCodeFoldingOptionsProvider.java | 1 + .../intellij/lang/XmlCodeFoldingSettings.java | 16 +++++ .../options/editor/CssFoldingSettings.java | 62 +++++++++++++++++++ .../options/editor/XmlFoldingSettings.java | 19 +++++- .../intellij/lang/XmlCodeFoldingBuilder.java | 5 +- 6 files changed, 99 insertions(+), 5 deletions(-) create mode 100644 xml/xml-psi-impl/src/com/intellij/application/options/editor/CssFoldingSettings.java diff --git a/platform/platform-resources-en/src/messages/ApplicationBundle.properties b/platform/platform-resources-en/src/messages/ApplicationBundle.properties index fb0ab61a8f02..02c16408a64a 100644 --- a/platform/platform-resources-en/src/messages/ApplicationBundle.properties +++ b/platform/platform-resources-en/src/messages/ApplicationBundle.properties @@ -375,6 +375,7 @@ group.code.folding=Code Folding checkbox.collapse.xml.tags=XML tags checkbox.collapse.html.style.attribute=HTML 'style' attribute checkbox.collapse.entities=XML entities +checkbox.collapse.data.uri=Data URIs checkbox.collapse.anonymous.classes=Anonymous classes checkbox.collapse.closures="Closures" (anonymous classes implementing one method, before Java 8) checkbox.collapse.generic.constructor.parameters=Generic constructor and method parameters 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 abdb42ee438b..ace39250c6ed 100644 --- a/xml/impl/src/com/intellij/application/options/editor/XmlCodeFoldingOptionsProvider.java +++ b/xml/impl/src/com/intellij/application/options/editor/XmlCodeFoldingOptionsProvider.java @@ -29,5 +29,6 @@ public class XmlCodeFoldingOptionsProvider extends BeanConfigurable { + public static CssFoldingSettings getInstance() { + return ServiceManager.getService(CssFoldingSettings.class); + } + + private boolean myCollapseDataUri = true; + + public boolean isCollapseDataUri() { + return myCollapseDataUri; + } + + @SuppressWarnings("UnusedDeclaration") + public void setCollapseDataUri(boolean value) { + myCollapseDataUri = value; + } + + @Nullable + @Override + public CssFoldingSettings getState() { + return this; + } + + @Override + public void loadState(CssFoldingSettings state) { + XmlSerializerUtil.copyBean(state, this); + } +} 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 70ad3b4fad57..103e9c8015e9 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 @@ -20,15 +20,24 @@ 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.xmlb.XmlSerializerUtil; @State(name = "XmlFoldingSettings", storages = @Storage("editor.codeinsight.xml")) public class XmlFoldingSettings implements XmlCodeFoldingSettings, PersistentStateComponent { - private XmlFoldingSettings.State myState; + private final XmlFoldingSettings.State myState = new State(); public static XmlFoldingSettings getInstance() { return ServiceManager.getService(XmlFoldingSettings.class); } + public XmlFoldingSettings() { + // todo: remove after 2017.1 release + CssFoldingSettings cssFoldingSettings = CssFoldingSettings.getInstance(); + if (cssFoldingSettings != null) { + myState.COLLAPSE_DATA_URI = cssFoldingSettings.isCollapseDataUri(); + } + } + @Override public boolean isCollapseXmlTags() { return myState.COLLAPSE_XML_TAGS; @@ -43,6 +52,11 @@ public class XmlFoldingSettings implements XmlCodeFoldingSettings, PersistentSta return myState.COLLAPSE_ENTITIES; } + @Override + public boolean isCollapseDataUri() { + return myState.COLLAPSE_DATA_URI; + } + @Override public State getState() { return myState; @@ -50,12 +64,13 @@ public class XmlFoldingSettings implements XmlCodeFoldingSettings, PersistentSta @Override public void loadState(State state) { - myState = state; + XmlSerializerUtil.copyBean(state, myState); } public static final class State { public boolean COLLAPSE_XML_TAGS = false; public boolean COLLAPSE_HTML_STYLE_ATTRIBUTE = true; public boolean COLLAPSE_ENTITIES = true; + public boolean COLLAPSE_DATA_URI = true; } } \ No newline at end of file diff --git a/xml/xml-psi-impl/src/com/intellij/lang/XmlCodeFoldingBuilder.java b/xml/xml-psi-impl/src/com/intellij/lang/XmlCodeFoldingBuilder.java index 6bad0fd8d0ab..eac4396847da 100644 --- a/xml/xml-psi-impl/src/com/intellij/lang/XmlCodeFoldingBuilder.java +++ b/xml/xml-psi-impl/src/com/intellij/lang/XmlCodeFoldingBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2014 JetBrains s.r.o. + * Copyright 2000-2016 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. @@ -28,7 +28,6 @@ import com.intellij.openapi.util.UnfairTextRange; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiWhiteSpace; -import com.intellij.psi.impl.source.html.HtmlFileImpl; import com.intellij.psi.impl.source.xml.XmlEntityRefImpl; import com.intellij.psi.impl.source.xml.XmlTokenImpl; import com.intellij.psi.tree.TokenSet; @@ -266,7 +265,7 @@ public abstract class XmlCodeFoldingBuilder implements FoldingBuilder, DumbAware } private static boolean isAttributeShouldBeFolded(XmlAttribute child) { - return child.getContainingFile() instanceof HtmlFileImpl && + return HtmlUtil.isHtmlFile(child.getContainingFile()) && HtmlUtil.STYLE_ATTRIBUTE_NAME.equalsIgnoreCase(child.getName()); }