mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
EditorOptionsProvider extension reworked to create new instance each time when the Settings dialog is opened
This commit is contained in:
+1
-3
@@ -17,7 +17,6 @@
|
||||
package com.intellij.codeInsight.daemon.impl.actions;
|
||||
|
||||
import com.intellij.application.options.editor.AutoImportOptionsConfigurable;
|
||||
import com.intellij.application.options.editor.EditorOptionsProvider;
|
||||
import com.intellij.application.options.editor.JavaAutoImportOptions;
|
||||
import com.intellij.codeInsight.CodeInsightSettings;
|
||||
import com.intellij.codeInsight.CodeInsightUtilBase;
|
||||
@@ -34,7 +33,6 @@ import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.ui.popup.JBPopupFactory;
|
||||
import com.intellij.openapi.ui.popup.PopupStep;
|
||||
import com.intellij.openapi.ui.popup.util.BaseListPopupStep;
|
||||
import com.intellij.openapi.wm.IdeFocusManager;
|
||||
import com.intellij.psi.PsiClass;
|
||||
import com.intellij.psi.PsiDocumentManager;
|
||||
import com.intellij.psi.PsiFile;
|
||||
@@ -157,7 +155,7 @@ public class AddImportAction implements QuestionAction {
|
||||
public void run() {
|
||||
if (project.isDisposed()) return;
|
||||
|
||||
final AutoImportOptionsConfigurable configurable = EditorOptionsProvider.EP_NAME.findExtension(AutoImportOptionsConfigurable.class);
|
||||
final AutoImportOptionsConfigurable configurable = new AutoImportOptionsConfigurable();
|
||||
ShowSettingsUtil.getInstance().editConfigurable(project, configurable, new Runnable() {
|
||||
public void run() {
|
||||
final JavaAutoImportOptions options = ContainerUtil.findInstance(configurable.getConfigurables(), JavaAutoImportOptions.class);
|
||||
|
||||
+13
@@ -18,6 +18,7 @@ package com.intellij.application.options.colors;
|
||||
|
||||
import com.intellij.application.options.OptionsContainingConfigurable;
|
||||
import com.intellij.application.options.editor.EditorOptionsProvider;
|
||||
import com.intellij.application.options.editor.EditorOptionsProviderEP;
|
||||
import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer;
|
||||
import com.intellij.codeInsight.daemon.impl.DaemonCodeAnalyzerImpl;
|
||||
import com.intellij.openapi.Disposable;
|
||||
@@ -35,6 +36,7 @@ import com.intellij.openapi.editor.colors.impl.EditorColorsSchemeImpl;
|
||||
import com.intellij.openapi.editor.colors.impl.ReadOnlyColorsScheme;
|
||||
import com.intellij.openapi.editor.markup.EffectType;
|
||||
import com.intellij.openapi.editor.markup.TextAttributes;
|
||||
import com.intellij.openapi.extensions.Extensions;
|
||||
import com.intellij.openapi.options.Configurable;
|
||||
import com.intellij.openapi.options.ConfigurationException;
|
||||
import com.intellij.openapi.options.ExternalizableScheme;
|
||||
@@ -89,6 +91,17 @@ public class ColorAndFontOptions extends SearchableConfigurable.Parent.Abstract
|
||||
private boolean myDisposeCompleted = false;
|
||||
private final Disposable myDisposable = Disposer.newDisposable();
|
||||
|
||||
public static ColorAndFontOptions getColorAndFontsInstance() {
|
||||
ColorAndFontOptions colorAndFontOptions = null;
|
||||
for (EditorOptionsProviderEP provider : Extensions.getExtensions(EditorOptionsProviderEP.EP_NAME)) {
|
||||
if (ColorAndFontOptions.class.getName().equals(provider.implementationClass)) {
|
||||
colorAndFontOptions = (ColorAndFontOptions)provider.createConfigurable();
|
||||
break;
|
||||
}
|
||||
}
|
||||
return colorAndFontOptions;
|
||||
}
|
||||
|
||||
public boolean isModified() {
|
||||
boolean listModified = isSchemeListModified();
|
||||
boolean schemeModified = isSomeSchemeModified();
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
package com.intellij.application.options.editor;
|
||||
|
||||
import com.intellij.openapi.application.ApplicationBundle;
|
||||
import com.intellij.openapi.extensions.Extensions;
|
||||
import com.intellij.openapi.options.AbstractConfigurableEP;
|
||||
import com.intellij.openapi.options.Configurable;
|
||||
import com.intellij.openapi.options.ConfigurationException;
|
||||
import com.intellij.openapi.options.SearchableConfigurable;
|
||||
@@ -25,19 +25,19 @@ import com.intellij.openapi.util.IconLoader;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.util.List;
|
||||
|
||||
public class EditorOptions implements SearchableConfigurable.Parent {
|
||||
|
||||
@NonNls public static final String ID = "preferences.editor";
|
||||
|
||||
private EditorOptionsPanel myEditorOptionsPanel;
|
||||
private Configurable[] myChildren;
|
||||
|
||||
public Configurable[] getConfigurables() {
|
||||
return getOptionsConfigurables();
|
||||
}
|
||||
|
||||
public static EditorOptionsProvider[] getOptionsConfigurables() {
|
||||
return Extensions.getExtensions(EditorOptionsProvider.EP_NAME);
|
||||
if (myChildren == null) {
|
||||
final List<EditorOptionsProvider> configurables = AbstractConfigurableEP.createConfigurables(EditorOptionsProviderEP.EP_NAME);
|
||||
myChildren = configurables.toArray(new EditorOptionsProvider[configurables.size()]);
|
||||
}
|
||||
return myChildren;
|
||||
}
|
||||
|
||||
public String getDisplayName() {
|
||||
|
||||
-2
@@ -20,9 +20,7 @@
|
||||
*/
|
||||
package com.intellij.application.options.editor;
|
||||
|
||||
import com.intellij.openapi.extensions.ExtensionPointName;
|
||||
import com.intellij.openapi.options.SearchableConfigurable;
|
||||
|
||||
public interface EditorOptionsProvider extends SearchableConfigurable {
|
||||
ExtensionPointName<EditorOptionsProvider> EP_NAME = ExtensionPointName.create("com.intellij.editorOptionsProvider");
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
/*
|
||||
* Copyright 2000-2010 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.application.options.editor;
|
||||
|
||||
import com.intellij.openapi.extensions.ExtensionPointName;
|
||||
import com.intellij.openapi.options.AbstractConfigurableEP;
|
||||
|
||||
/**
|
||||
* @author nik
|
||||
*/
|
||||
public class EditorOptionsProviderEP extends AbstractConfigurableEP<EditorOptionsProvider> {
|
||||
public static final ExtensionPointName<EditorOptionsProviderEP> EP_NAME = ExtensionPointName.create("com.intellij.editorOptionsProvider");
|
||||
}
|
||||
+1
-8
@@ -17,11 +17,9 @@
|
||||
package com.intellij.codeInsight.intention.impl;
|
||||
|
||||
import com.intellij.application.options.editor.CodeFoldingConfigurable;
|
||||
import com.intellij.application.options.editor.EditorOptions;
|
||||
import com.intellij.codeInsight.intention.IntentionAction;
|
||||
import com.intellij.openapi.application.ApplicationBundle;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.options.Configurable;
|
||||
import com.intellij.openapi.options.ShowSettingsUtil;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.PsiFile;
|
||||
@@ -47,12 +45,7 @@ public class EditFoldingOptionsAction implements IntentionAction {
|
||||
}
|
||||
|
||||
public void invoke(@NotNull Project project, Editor editor, PsiFile file) throws IncorrectOperationException {
|
||||
for (Configurable c : EditorOptions.getOptionsConfigurables()) {
|
||||
if (c instanceof CodeFoldingConfigurable) {
|
||||
ShowSettingsUtil.getInstance().editConfigurable(project, c);
|
||||
break;
|
||||
}
|
||||
}
|
||||
ShowSettingsUtil.getInstance().editConfigurable(project, new CodeFoldingConfigurable());
|
||||
}
|
||||
|
||||
public boolean startInWriteAction() {
|
||||
|
||||
@@ -20,7 +20,6 @@ import com.intellij.application.options.colors.ColorAndFontDescriptionPanel;
|
||||
import com.intellij.application.options.colors.ColorAndFontOptions;
|
||||
import com.intellij.application.options.colors.InspectionColorSettingsPage;
|
||||
import com.intellij.application.options.colors.TextAttributesDescription;
|
||||
import com.intellij.application.options.editor.EditorOptionsProvider;
|
||||
import com.intellij.codeInsight.daemon.impl.HighlightInfoType;
|
||||
import com.intellij.codeInsight.daemon.impl.SeverityRegistrar;
|
||||
import com.intellij.codeInspection.InspectionsBundle;
|
||||
@@ -34,7 +33,6 @@ import com.intellij.openapi.editor.colors.CodeInsightColors;
|
||||
import com.intellij.openapi.editor.colors.EditorColorsScheme;
|
||||
import com.intellij.openapi.editor.colors.TextAttributesKey;
|
||||
import com.intellij.openapi.editor.markup.TextAttributes;
|
||||
import com.intellij.openapi.extensions.Extensions;
|
||||
import com.intellij.openapi.options.SearchableConfigurable;
|
||||
import com.intellij.openapi.options.ShowSettingsUtil;
|
||||
import com.intellij.openapi.options.newEditor.OptionsEditor;
|
||||
@@ -122,13 +120,7 @@ public class SeverityEditorDialog extends DialogWrapper {
|
||||
final String toConfigure = getSelectedType().getSeverity(null).myName;
|
||||
doOKAction();
|
||||
myOptionsList.clearSelection();
|
||||
ColorAndFontOptions colorAndFontOptions = null;
|
||||
for (EditorOptionsProvider provider : Extensions.getExtensions(EditorOptionsProvider.EP_NAME)) {
|
||||
if (provider.getClass().isAssignableFrom(ColorAndFontOptions.class)) {
|
||||
colorAndFontOptions = (ColorAndFontOptions)provider;
|
||||
break;
|
||||
}
|
||||
}
|
||||
ColorAndFontOptions colorAndFontOptions = ColorAndFontOptions.getColorAndFontsInstance();
|
||||
assert colorAndFontOptions != null;
|
||||
final SearchableConfigurable javaPage = colorAndFontOptions.findSubConfigurable(InspectionColorSettingsPage.class);
|
||||
LOG.assertTrue(javaPage != null);
|
||||
|
||||
@@ -15,11 +15,13 @@
|
||||
*/
|
||||
package com.intellij.openapi.options;
|
||||
|
||||
import com.intellij.openapi.options.AbstractConfigurableEP;
|
||||
import com.intellij.openapi.options.Configurable;
|
||||
import com.intellij.openapi.module.Module;
|
||||
|
||||
/**
|
||||
* @author nik
|
||||
*/
|
||||
public class ModuleConfigurableEP extends AbstractConfigurableEP<Configurable> {
|
||||
public ModuleConfigurableEP(Module module) {
|
||||
super(module.getPicoContainer());
|
||||
}
|
||||
}
|
||||
|
||||
+29
-1
@@ -18,6 +18,7 @@ package com.intellij.openapi.options;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.extensions.AbstractExtensionPointBean;
|
||||
import com.intellij.openapi.extensions.ExtensionPointName;
|
||||
import com.intellij.openapi.util.AtomicNotNullLazyValue;
|
||||
import com.intellij.util.xmlb.annotations.Attribute;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.picocontainer.PicoContainer;
|
||||
@@ -31,7 +32,34 @@ import java.util.List;
|
||||
public class AbstractConfigurableEP<T extends UnnamedConfigurable> extends AbstractExtensionPointBean {
|
||||
@Attribute("instance")
|
||||
public String instanceClass;
|
||||
|
||||
/**
|
||||
* @deprecated
|
||||
*/
|
||||
@Attribute("implementation")
|
||||
public String implementationClass;
|
||||
|
||||
private final PicoContainer myPicoContainer;
|
||||
private final AtomicNotNullLazyValue<T> myImplementation = new AtomicNotNullLazyValue<T>() {
|
||||
@NotNull
|
||||
@Override
|
||||
protected T compute() {
|
||||
if (implementationClass == null) {
|
||||
throw new IllegalArgumentException("Neither 'instance' nor 'implementation' attribute is not specified for " + AbstractConfigurableEP.this.getClass() + " extension");
|
||||
}
|
||||
try {
|
||||
final Class<T> aClass = findClass(implementationClass);
|
||||
return instantiate(aClass, myPicoContainer, true);
|
||||
}
|
||||
catch (ClassNotFoundException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
protected AbstractConfigurableEP(PicoContainer picoContainer) {
|
||||
myPicoContainer = picoContainer;
|
||||
}
|
||||
|
||||
public AbstractConfigurableEP() {
|
||||
myPicoContainer = ApplicationManager.getApplication().getPicoContainer();
|
||||
@@ -40,7 +68,7 @@ public class AbstractConfigurableEP<T extends UnnamedConfigurable> extends Abstr
|
||||
@NotNull
|
||||
public T createConfigurable() {
|
||||
if (instanceClass == null) {
|
||||
throw new IllegalArgumentException("'instance' attribute isn't specified for " + getClass().getName() + " extension");
|
||||
return myImplementation.getValue();
|
||||
}
|
||||
try {
|
||||
final Class<T> aClass = findClass(instanceClass);
|
||||
|
||||
@@ -308,7 +308,7 @@
|
||||
interface="com.intellij.openapi.options.colors.ColorSettingsPage"/>
|
||||
|
||||
<extensionPoint name="codeInsight.parameterInfo" beanClass="com.intellij.lang.LanguageExtensionPoint"/>
|
||||
<extensionPoint name="editorOptionsProvider" interface="com.intellij.application.options.editor.EditorOptionsProvider"/>
|
||||
<extensionPoint name="editorOptionsProvider" beanClass="com.intellij.application.options.editor.EditorOptionsProviderEP"/>
|
||||
<extensionPoint name="fileTypeIndentOptionsProvider" interface="com.intellij.psi.codeStyle.FileTypeIndentOptionsProvider"/>
|
||||
<extensionPoint name="referenceImporter" interface="com.intellij.codeInsight.daemon.ReferenceImporter"/>
|
||||
<extensionPoint name="elementLookupRenderer" interface="com.intellij.codeInsight.lookup.impl.ElementLookupRenderer"/>
|
||||
|
||||
@@ -432,15 +432,15 @@
|
||||
<codeInsight.linkHandler prefix="#navigation/" handlerClass="com.intellij.codeInsight.hint.NavigationLinkHandler"/>
|
||||
|
||||
<codeFoldingOptionsProvider instance="com.intellij.application.options.editor.BaseCodeFoldingOptionsProvider" order="first"/>
|
||||
<editorOptionsProvider implementation="com.intellij.application.options.editor.EditorSmartKeysConfigurable"/>
|
||||
<editorOptionsProvider implementation="com.intellij.application.options.editor.EditorAppearanceConfigurable"/>
|
||||
<editorOptionsProvider instance="com.intellij.application.options.editor.EditorSmartKeysConfigurable"/>
|
||||
<editorOptionsProvider instance="com.intellij.application.options.editor.EditorAppearanceConfigurable"/>
|
||||
<editorCustomization implementation="com.intellij.ui.SoftWrapsEditorCustomization"/>
|
||||
<!-- Colors & Fonts-->
|
||||
<editorOptionsProvider implementation="com.intellij.application.options.colors.ColorAndFontOptions"/>
|
||||
<editorOptionsProvider implementation="com.intellij.application.options.editor.EditorTabsConfigurable"/>
|
||||
<editorOptionsProvider implementation="com.intellij.application.options.editor.CodeFoldingConfigurable"/>
|
||||
<editorOptionsProvider implementation="com.intellij.application.options.CodeCompletionOptions"/>
|
||||
<editorOptionsProvider implementation="com.intellij.application.options.editor.AutoImportOptionsConfigurable"/>
|
||||
<editorOptionsProvider instance="com.intellij.application.options.editor.EditorTabsConfigurable"/>
|
||||
<editorOptionsProvider instance="com.intellij.application.options.editor.CodeFoldingConfigurable"/>
|
||||
<editorOptionsProvider instance="com.intellij.application.options.CodeCompletionOptions"/>
|
||||
<editorOptionsProvider instance="com.intellij.application.options.editor.AutoImportOptionsConfigurable"/>
|
||||
|
||||
<editorTabColorProvider implementation="com.intellij.ui.tabs.EditorTabColorProviderImpl"/>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user