mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
EditorSettings should be PersistentStateComponent
This commit is contained in:
+33
-74
@@ -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<EditorSettingsExternalizable.OptionSet>, 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;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -247,6 +247,10 @@
|
||||
serviceImplementation="com.intellij.openapi.actionSystem.impl.AbbreviationManagerImpl"/>
|
||||
<exportable serviceInterface="com.intellij.openapi.actionSystem.AbbreviationManager"/>
|
||||
|
||||
<applicationService serviceInterface="com.intellij.openapi.editor.ex.EditorSettingsExternalizable"
|
||||
serviceImplementation="com.intellij.openapi.editor.ex.EditorSettingsExternalizable"/>
|
||||
<exportable serviceInterface="com.intellij.openapi.editor.ex.EditorSettingsExternalizable"/>
|
||||
|
||||
<scopeParserExtension implementation="com.intellij.psi.search.scope.packageSet.FilePackageSetParserExtension"/>
|
||||
<applicationService serviceInterface="com.intellij.openapi.ui.popup.StackingPopupDispatcher" serviceImplementation="com.intellij.ui.popup.StackingPopupDispatcherImpl"/>
|
||||
|
||||
|
||||
@@ -1,9 +1,5 @@
|
||||
<components>
|
||||
<application-components>
|
||||
<component>
|
||||
<interface-class>com.intellij.openapi.editor.ex.EditorSettingsExternalizable</interface-class>
|
||||
<implementation-class>com.intellij.openapi.editor.ex.EditorSettingsExternalizable</implementation-class>
|
||||
</component>
|
||||
<component>
|
||||
<implementation-class>com.intellij.ide.actionMacro.ActionMacroManager</implementation-class>
|
||||
</component>
|
||||
|
||||
+4
-6
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user