diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/ex/EditorSettingsExternalizable.java b/platform/platform-impl/src/com/intellij/openapi/editor/ex/EditorSettingsExternalizable.java index 38149ef3f7a3..7ab5edb57334 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/ex/EditorSettingsExternalizable.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/ex/EditorSettingsExternalizable.java @@ -15,31 +15,30 @@ */ package com.intellij.openapi.editor.ex; -import com.intellij.openapi.application.Application; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.PathManager; -import com.intellij.openapi.components.ExportableApplicationComponent; +import com.intellij.openapi.components.*; import com.intellij.openapi.editor.impl.softwrap.SoftWrapAppliancePlaces; import com.intellij.openapi.options.OptionsBundle; -import com.intellij.openapi.util.DefaultJDOMExternalizer; -import com.intellij.openapi.util.InvalidDataException; -import com.intellij.openapi.util.NamedJDOMExternalizable; -import com.intellij.openapi.util.WriteExternalException; +import com.intellij.openapi.util.text.StringUtil; import org.intellij.lang.annotations.MagicConstant; -import org.jdom.Element; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; import java.io.File; -import java.lang.reflect.Field; import java.util.EnumSet; import java.util.Set; -public class EditorSettingsExternalizable implements NamedJDOMExternalizable, ExportableApplicationComponent, Cloneable { +@State( + name = "EditorSettings", + storages = {@Storage(file = StoragePathMacros.APP_CONFIG + "/editor.xml")} +) +public class EditorSettingsExternalizable implements PersistentStateComponent, ExportableComponent { //Q: make it interface? - public static class OptionSet implements Cloneable { + public static final class OptionSet { public String LINE_SEPARATOR; public String USE_SOFT_WRAPS; public boolean USE_CUSTOM_SOFT_WRAP_INDENT = false; @@ -64,6 +63,7 @@ public class EditorSettingsExternalizable implements NamedJDOMExternalizable, Ex public boolean IS_LEADING_WHITESPACES_SHOWN = true; public boolean IS_INNER_WHITESPACES_SHOWN = true; public boolean IS_TRAILING_WHITESPACES_SHOWN = true; + @SuppressWarnings("SpellCheckingInspection") public boolean IS_ALL_SOFTWRAPS_SHOWN = false; public boolean IS_INDENT_GUIDES_SHOWN = true; public boolean IS_ANIMATED_SCROLLING = true; @@ -71,6 +71,7 @@ public class EditorSettingsExternalizable implements NamedJDOMExternalizable, Ex public boolean ADDITIONAL_PAGE_AT_BOTTOM = false; public boolean IS_DND_ENABLED = true; + @SuppressWarnings("SpellCheckingInspection") public boolean IS_WHEEL_FONTCHANGE_ENABLED = false; public boolean IS_MOUSE_CLICK_SELECTION_HONORS_CAMEL_WORDS = true; @@ -81,16 +82,8 @@ public class EditorSettingsExternalizable implements NamedJDOMExternalizable, Ex public boolean REFRAIN_FROM_SCROLLING = false; public boolean SHOW_REFORMAT_DIALOG = true; + @SuppressWarnings("SpellCheckingInspection") public boolean SHOW_OPIMIZE_IMPORTS_DIALOG = true; - - @Override - public Object clone() { - try { - return super.clone(); - } catch (CloneNotSupportedException e) { - return null; - } - } } private static final String COMPOSITE_PROPERTY_SEPARATOR = ":"; @@ -104,7 +97,7 @@ public class EditorSettingsExternalizable implements NamedJDOMExternalizable, Ex //private boolean myUseTabCharacter = false; private int myAdditionalLinesCount = 10; - private int myAdditinalColumnsCount = 20; + private int myAdditionalColumnsCount = 20; private boolean myLineMarkerAreaShown = true; @NonNls public static final String STRIP_TRAILING_SPACES_NONE = "None"; @@ -117,16 +110,12 @@ public class EditorSettingsExternalizable implements NamedJDOMExternalizable, Ex @NonNls public static final String DEFAULT_FONT_NAME = "Courier"; public static EditorSettingsExternalizable getInstance() { - final Application app = ApplicationManager.getApplication(); - if (app.isDisposed()) return new EditorSettingsExternalizable(); - return app.getComponent(EditorSettingsExternalizable.class); - } - - @Override - public void initComponent() { } - - @Override - public void disposeComponent() { + if (ApplicationManager.getApplication().isDisposed()) { + return new EditorSettingsExternalizable(); + } + else { + return ServiceManager.getService(EditorSettingsExternalizable.class); + } } public void addPropertyChangeListener(PropertyChangeListener listener){ @@ -137,24 +126,20 @@ public class EditorSettingsExternalizable implements NamedJDOMExternalizable, Ex myPropertyChangeSupport.removePropertyChangeListener(listener); } + @Nullable @Override - public void readExternal(Element element) throws InvalidDataException { - DefaultJDOMExternalizer.readExternal(myOptions, element); + public OptionSet getState() { + return myOptions; + } + + @Override + public void loadState(OptionSet state) { + myOptions = state; parseRawSoftWraps(); } - @Override - public void writeExternal(Element element) throws WriteExternalException { - DefaultJDOMExternalizer.writeExternal(myOptions, element, new DefaultJDOMExternalizer.JDOMFilter() { - @Override - public boolean isAccept(@NotNull final Field field) { - return !field.getName().equals("IS_NATIVE2ASCII_FOR_PROPERTIES_FILES") && !field.getName().equals("DEFAULT_PROPERTIES_FILES_CHARSET_NAME"); - } - }); - } - private void parseRawSoftWraps() { - if (myOptions.USE_SOFT_WRAPS == null || myOptions.USE_SOFT_WRAPS.isEmpty()) { + if (StringUtil.isEmpty(myOptions.USE_SOFT_WRAPS)) { return; } @@ -188,11 +173,6 @@ public class EditorSettingsExternalizable implements NamedJDOMExternalizable, Ex myOptions.USE_SOFT_WRAPS = buffer.toString(); } - @Override - public String getExternalFileName() { - return "editor"; - } - public OptionSet getOptions() { return myOptions; } @@ -221,12 +201,13 @@ public class EditorSettingsExternalizable implements NamedJDOMExternalizable, Ex myAdditionalLinesCount = additionalLinesCount; } + @SuppressWarnings({"UnusedDeclaration", "SpellCheckingInspection"}) public int getAdditinalColumnsCount() { - return myAdditinalColumnsCount; + return myAdditionalColumnsCount; } - public void setAdditionalColumnsCount(int additinalColumnsCount) { - myAdditinalColumnsCount = additinalColumnsCount; + public void setAdditionalColumnsCount(int value) { + myAdditionalColumnsCount = value; } public boolean isLineMarkerAreaShown() { @@ -408,30 +389,10 @@ public class EditorSettingsExternalizable implements NamedJDOMExternalizable, Ex myOptions.REFRAIN_FROM_SCROLLING = b; } - @Override - public Object clone() { - EditorSettingsExternalizable copy = new EditorSettingsExternalizable(); - copy.myOptions = (OptionSet) myOptions.clone(); - copy.myBlockIndent = myBlockIndent; - //copy.myTabSize = myTabSize; - //copy.myUseTabCharacter = myUseTabCharacter; - copy.myAdditionalLinesCount = myAdditionalLinesCount; - copy.myAdditinalColumnsCount = myAdditinalColumnsCount; - copy.myLineMarkerAreaShown = myLineMarkerAreaShown; - - return copy; - } - - @Override - @NotNull - public String getComponentName() { - return "EditorSettings"; - } - @Override @NotNull public File[] getExportFiles() { - return new File[]{PathManager.getOptionsFile(this)}; + return new File[]{PathManager.getOptionsFile("editor")}; } @Override @@ -559,6 +520,4 @@ public class EditorSettingsExternalizable implements NamedJDOMExternalizable, Ex public void setShowInlineLocalDialog(final boolean val) { myOptions.SHOW_INLINE_DIALOG = val; } - - } diff --git a/platform/platform-resources/src/META-INF/PlatformExtensions.xml b/platform/platform-resources/src/META-INF/PlatformExtensions.xml index 540ac2e53463..4fea3b7d2dc2 100644 --- a/platform/platform-resources/src/META-INF/PlatformExtensions.xml +++ b/platform/platform-resources/src/META-INF/PlatformExtensions.xml @@ -247,6 +247,10 @@ serviceImplementation="com.intellij.openapi.actionSystem.impl.AbbreviationManagerImpl"/> + + + diff --git a/platform/platform-resources/src/componentSets/Editor.xml b/platform/platform-resources/src/componentSets/Editor.xml index 25719abb23f3..b05cf224a461 100644 --- a/platform/platform-resources/src/componentSets/Editor.xml +++ b/platform/platform-resources/src/componentSets/Editor.xml @@ -1,9 +1,5 @@ - - com.intellij.openapi.editor.ex.EditorSettingsExternalizable - com.intellij.openapi.editor.ex.EditorSettingsExternalizable - com.intellij.ide.actionMacro.ActionMacroManager diff --git a/platform/platform-tests/testSrc/com/intellij/openapi/editor/impl/StripTrailingSpacesTest.java b/platform/platform-tests/testSrc/com/intellij/openapi/editor/impl/StripTrailingSpacesTest.java index 285aadbef402..7ac5f7bb2a7f 100644 --- a/platform/platform-tests/testSrc/com/intellij/openapi/editor/impl/StripTrailingSpacesTest.java +++ b/platform/platform-tests/testSrc/com/intellij/openapi/editor/impl/StripTrailingSpacesTest.java @@ -23,7 +23,6 @@ import com.intellij.openapi.editor.ex.DocumentEx; import com.intellij.openapi.editor.ex.EditorSettingsExternalizable; import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.testFramework.LightPlatformCodeInsightTestCase; -import org.jdom.Element; import org.jetbrains.annotations.NonNls; import java.awt.event.FocusEvent; @@ -34,25 +33,24 @@ import java.io.IOException; * User: cdr */ public class StripTrailingSpacesTest extends LightPlatformCodeInsightTestCase { - private final Element oldSettings = new Element("temp"); + private EditorSettingsExternalizable.OptionSet oldSettings; @Override protected void setUp() throws Exception { super.setUp(); EditorSettingsExternalizable settings = EditorSettingsExternalizable.getInstance(); - settings.writeExternal(oldSettings); + oldSettings = settings.getState(); settings.setStripTrailingSpaces(EditorSettingsExternalizable.STRIP_TRAILING_SPACES_CHANGED); settings.setVirtualSpace(false); } @Override protected void tearDown() throws Exception { - EditorSettingsExternalizable settings = EditorSettingsExternalizable.getInstance(); - settings.readExternal(oldSettings); + EditorSettingsExternalizable.getInstance().loadState(oldSettings); super.tearDown(); } - private void doTest(@NonNls String before, @NonNls String after) throws IOException { + private void doTest(@NonNls String before, @NonNls String after) { configureFromFileText("x.txt", before); type(' '); backspace();