project configurables migrated to new 'instance' attribute (to create new instance each time when dialog is opened)

This commit is contained in:
nik
2010-09-01 12:46:20 +04:00
parent 0029ed6167
commit ea207fcf3f
17 changed files with 101 additions and 53 deletions
@@ -22,6 +22,7 @@ import com.intellij.openapi.options.OptionalConfigurable;
import com.intellij.openapi.project.Project;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.Iterator;
@@ -38,7 +39,7 @@ public class ConfigurableExtensionPointUtil {
}
public static List<Configurable> buildConfigurablesList(final ConfigurableEP[] extensions, final Configurable[] components, ConfigurableFilter filter) {
public static List<Configurable> buildConfigurablesList(final ConfigurableEP[] extensions, final Configurable[] components, @Nullable ConfigurableFilter filter) {
List<Configurable> result = new ArrayList<Configurable>();
for (ConfigurableEP extension : extensions) {
ContainerUtil.addIfNotNull(extension.createConfigurable(), result);
@@ -0,0 +1,54 @@
/*
* 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.openapi.options.ex;
import com.intellij.openapi.components.ComponentManager;
import com.intellij.openapi.extensions.ExtensionPointName;
import com.intellij.openapi.options.Configurable;
import com.intellij.openapi.options.ConfigurableEP;
import com.intellij.openapi.options.ConfigurableGroup;
import org.jetbrains.annotations.Nullable;
import java.util.List;
/**
* @author nik
*/
public abstract class ConfigurablesGroupBase implements ConfigurableGroup {
private Configurable[] myChildren;
private ComponentManager myComponentManager;
private final ExtensionPointName<ConfigurableEP> myConfigurablesExtensionPoint;
protected ConfigurablesGroupBase(ComponentManager componentManager, final ExtensionPointName<ConfigurableEP> configurablesExtensionPoint) {
myComponentManager = componentManager;
myConfigurablesExtensionPoint = configurablesExtensionPoint;
}
@Override
public Configurable[] getConfigurables() {
if (myChildren == null) {
final ConfigurableEP[] extensions = myComponentManager.getExtensions(myConfigurablesExtensionPoint);
Configurable[] components = myComponentManager.getComponents(Configurable.class);
List<Configurable> result = ConfigurableExtensionPointUtil.buildConfigurablesList(extensions, components, getConfigurableFilter());
myChildren = result.toArray(new Configurable[result.size()]);
}
return myChildren;
}
@Nullable
protected abstract ConfigurableFilter getConfigurableFilter();
}
@@ -15,11 +15,9 @@
*/
package com.intellij.openapi.options.ex;
import com.intellij.openapi.application.Application;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.options.*;
import java.util.List;
import com.intellij.openapi.options.ConfigurableGroup;
import com.intellij.openapi.options.OptionsBundle;
/**
* Created by IntelliJ IDEA.
@@ -28,7 +26,10 @@ import java.util.List;
* Time: 3:35:56 PM
* To change this template use Options | File Templates.
*/
public class IdeConfigurablesGroup implements ConfigurableGroup {
public class IdeConfigurablesGroup extends ConfigurablesGroupBase implements ConfigurableGroup {
public IdeConfigurablesGroup() {
super(ApplicationManager.getApplication(), ConfigurableExtensionPointUtil.APPLICATION_CONFIGURABLES);
}
public String getDisplayName() {
return OptionsBundle.message("ide.settings.display.name");
@@ -38,14 +39,9 @@ public class IdeConfigurablesGroup implements ConfigurableGroup {
return OptionsBundle.message("ide.settings.short.name");
}
public Configurable[] getConfigurables() {
final Application app = ApplicationManager.getApplication();
final ConfigurableEP[] extensions = app.getExtensions(ConfigurableExtensionPointUtil.APPLICATION_CONFIGURABLES);
Configurable[] components = app.getComponents(Configurable.class);
List<Configurable> result = ConfigurableExtensionPointUtil.buildConfigurablesList(extensions, components, null);
return result.toArray(new Configurable[result.size()]);
@Override
protected ConfigurableFilter getConfigurableFilter() {
return null;
}
public boolean equals(Object object) {
@@ -15,18 +15,20 @@
*/
package com.intellij.openapi.options.ex;
import com.intellij.openapi.options.*;
import com.intellij.openapi.options.Configurable;
import com.intellij.openapi.options.ConfigurableGroup;
import com.intellij.openapi.options.NonDefaultProjectConfigurable;
import com.intellij.openapi.options.OptionsBundle;
import com.intellij.openapi.project.Project;
import java.util.List;
/**
* @author max
*/
public class ProjectConfigurablesGroup implements ConfigurableGroup {
private Project myProject;
public class ProjectConfigurablesGroup extends ConfigurablesGroupBase implements ConfigurableGroup {
private final Project myProject;
public ProjectConfigurablesGroup(Project project) {
super(project, ConfigurableExtensionPointUtil.PROJECT_CONFIGURABLES);
myProject = project;
}
@@ -44,17 +46,14 @@ public class ProjectConfigurablesGroup implements ConfigurableGroup {
return myProject.isDefault();
}
public Configurable[] getConfigurables() {
final ConfigurableEP[] extensions = myProject.getExtensions(ConfigurableExtensionPointUtil.PROJECT_CONFIGURABLES);
Configurable[] components = myProject.getComponents(Configurable.class);
List<Configurable> result = ConfigurableExtensionPointUtil.buildConfigurablesList(extensions, components, new ConfigurableFilter() {
@Override
protected ConfigurableFilter getConfigurableFilter() {
return new ConfigurableFilter() {
public boolean isIncluded(final Configurable configurable) {
if (isDefault() && configurable instanceof NonDefaultProjectConfigurable) return false;
return true;
}
});
return result.toArray(new Configurable[result.size()]);
};
}
public int hashCode() {
@@ -259,7 +259,7 @@
<!-- Global Code Style -->
<projectConfigurable implementation="com.intellij.application.options.CodeStyleSchemesConfigurable" order="after colors"/>
<projectConfigurable instance="com.intellij.application.options.CodeStyleSchemesConfigurable" order="after colors"/>
<!-- File Types -->
<applicationConfigurable implementation="com.intellij.openapi.fileTypes.impl.FileTypeConfigurable"/>
@@ -543,8 +543,8 @@
factoryClass="com.intellij.ide.structureView.impl.StructureViewToolWindowFactory"/>
<psi.fileReferenceHelper implementation="com.intellij.psi.impl.source.resolve.reference.impl.providers.PsiFileReferenceHelper"/>
<psi.fileReferenceHelper implementation="com.intellij.psi.impl.source.resolve.reference.impl.providers.JarFileReferenceHelper"/>
<projectConfigurable implementation="com.intellij.openapi.vfs.encoding.FileEncodingConfigurable"/>
<projectConfigurable implementation="com.intellij.ui.tabs.FileColorsConfigurable" id="fileColors"/>
<projectConfigurable instance="com.intellij.openapi.vfs.encoding.FileEncodingConfigurable"/>
<projectConfigurable instance="com.intellij.ui.tabs.FileColorsConfigurable" id="fileColors"/>
<uiDebuggerExtension implementation="com.intellij.ui.debugger.extensions.PlaybackDebugger"/>
<uiDebuggerExtension implementation="com.intellij.ui.debugger.extensions.DisposerDebugger"/>
@@ -198,7 +198,7 @@
<ComponentRoamingType component="PropertiesComponent" type="DISABLED"/>
<progressFunComponentProvider implementation="com.intellij.featureStatistics.ProgressFunProvider"/>
<projectConfigurable implementation="com.intellij.javaee.ExternalResourceConfigurable"/>
<projectConfigurable instance="com.intellij.javaee.ExternalResourceConfigurable"/>
<bundledKeymapProvider implementation="com.intellij.openapi.keymap.impl.DefaultBundledKeymaps"/>
<!-- <checkinHandlerFactory implementation="com.intellij.openapi.vcs.CheckRemoteStatusCheckinHandlerFactory"/> -->
@@ -9,7 +9,7 @@
<selectInTarget implementation="com.intellij.openapi.vcs.changes.SelectInChangesViewTarget"/>
<projectConfigurable implementation="com.intellij.openapi.vcs.configurable.VcsManagerConfigurable" id="vcs"/>
<projectConfigurable instance="com.intellij.openapi.vcs.configurable.VcsManagerConfigurable" id="vcs"/>
<changesViewContent tabName="Repository" className="com.intellij.openapi.vcs.changes.committed.CommittedChangesViewManager"
predicateClassName="com.intellij.openapi.vcs.changes.committed.CommittedChangesVisibilityPredicate"/>
+1 -1
View File
@@ -9,7 +9,7 @@
a consistent copyright notice.
</description>
<extensions defaultExtensionNs="com.intellij">
<projectConfigurable implementation="com.maddyhome.idea.copyright.ui.CopyrightProjectConfigurable"/>
<projectConfigurable instance="com.maddyhome.idea.copyright.ui.CopyrightProjectConfigurable"/>
<errorHandler implementation="com.intellij.diagnostic.ITNReporter"/>
<checkinHandlerFactory implementation="com.maddyhome.idea.copyright.actions.UpdateCopyrightCheckinHandlerFactory"/>
<projectService serviceInterface="com.maddyhome.idea.copyright.actions.UpdateCopyrightCheckinHandlerState"
+2 -2
View File
@@ -98,8 +98,8 @@
<errorHandler implementation="com.intellij.diagnostic.ITNReporter"/>
<fileTypeFactory implementation="org.jetbrains.plugins.groovy.GroovyFileTypeLoader"/>
<projectConfigurable implementation="org.jetbrains.plugins.groovy.gant.GantConfigurable"/>
<projectConfigurable implementation="org.jetbrains.plugins.groovy.gradle.GradleConfigurable"/>
<projectConfigurable instance="org.jetbrains.plugins.groovy.gant.GantConfigurable"/>
<projectConfigurable instance="org.jetbrains.plugins.groovy.gradle.GradleConfigurable"/>
<projectService serviceInterface="org.jetbrains.plugins.groovy.gant.GantSettings" serviceImplementation="org.jetbrains.plugins.groovy.gant.GantSettings"/>
<projectService serviceInterface="org.jetbrains.plugins.groovy.gradle.GradleSettings" serviceImplementation="org.jetbrains.plugins.groovy.gradle.GradleSettings"/>
@@ -24,7 +24,7 @@
<applicationService serviceImplementation="org.jetbrains.idea.maven.indices.MavenIndicesManager"/>
<applicationService serviceImplementation="org.jetbrains.idea.maven.services.MavenServicesManager"/>
<projectConfigurable implementation="org.jetbrains.idea.maven.utils.MavenSettings" order="last"/>
<projectConfigurable instance="org.jetbrains.idea.maven.utils.MavenSettings" order="last"/>
<stepsBeforeRunProvider implementation="org.jetbrains.idea.maven.tasks.MavenBeforeRunTasksProvider"/>
<keymapExtension implementation="org.jetbrains.idea.maven.tasks.MavenKeymapExtension"/>
+1 -1
View File
@@ -54,7 +54,7 @@
<projectService serviceInterface="com.intellij.spellchecker.SpellCheckerManager"
serviceImplementation="com.intellij.spellchecker.SpellCheckerManager"/>
<editorCustomization implementation="com.intellij.spellchecker.ui.SpellCheckingEditorCustomization"/>
<projectConfigurable implementation="com.intellij.spellchecker.settings.SpellCheckerSettingsManager"/>
<projectConfigurable instance="com.intellij.spellchecker.settings.SpellCheckerSettingsManager"/>
<inspectionToolProvider
@@ -17,7 +17,6 @@ package com.intellij.spellchecker.settings;
import com.intellij.openapi.options.ConfigurationException;
import com.intellij.openapi.options.SearchableConfigurable;
import com.intellij.openapi.options.ShowSettingsUtil;
import com.intellij.openapi.project.Project;
import com.intellij.spellchecker.util.SpellCheckerBundle;
import org.jetbrains.annotations.Nls;
@@ -31,9 +30,9 @@ public class SpellCheckerSettingsManager implements SearchableConfigurable {
private final SpellCheckerSettings settings;
private final Project project;
public SpellCheckerSettingsManager(Project project) {
public SpellCheckerSettingsManager(Project project, SpellCheckerSettings settings) {
this.project = project;
settings = SpellCheckerSettings.getInstance(project);
this.settings = settings;
}
@Nls
+1 -1
View File
@@ -32,7 +32,7 @@
<i18nInspectionTool implementation="com.intellij.uiDesigner.i18n.I18nFormInspection"/>
<java15InspectionTool implementation="com.intellij.uiDesigner.inspections.Java15FormInspection"/>
<projectConfigurable implementation="com.intellij.uiDesigner.GuiDesignerConfigurable"/> <!-- GUI Designer -->
<projectConfigurable instance="com.intellij.uiDesigner.GuiDesignerConfigurable"/>
<favoriteNodeProvider implementation="com.intellij.uiDesigner.projectView.UIDesignerFavoriteNodeProvider"/>
<renameHandler implementation="com.intellij.uiDesigner.projectView.FormRenameHandler"/>
@@ -39,7 +39,7 @@ public class FileAssociationsConfigurable implements SearchableConfigurable, Non
private final UIState myState;
private AssociationsEditor myEditor;
FileAssociationsConfigurable(Project project) {
public FileAssociationsConfigurable(Project project) {
myProject = project;
myState = ServiceManager.getService(project, UIState.class);
}
@@ -61,7 +61,7 @@
serviceInterface="org.intellij.lang.xpath.xslt.psi.XsltElementFactory"
serviceImplementation="org.intellij.lang.xpath.xslt.psi.impl.XsltElementFactoryImpl" />
<projectConfigurable implementation="org.intellij.lang.xpath.xslt.associations.impl.FileAssociationsConfigurable" />
<projectConfigurable instance="org.intellij.lang.xpath.xslt.associations.impl.FileAssociationsConfigurable" />
<projectService
serviceInterface="org.intellij.lang.xpath.xslt.associations.impl.FileAssociationsConfigurable$UIState"
+2 -2
View File
@@ -634,10 +634,10 @@
<projectConfigurable implementation="com.intellij.profile.codeInspection.ui.ProjectInspectionToolsConfigurable"/>
<!-- Project Structure -->
<projectConfigurable implementation="com.intellij.compiler.options.CompilerConfigurable" order="after project"/>
<projectConfigurable instance="com.intellij.compiler.options.CompilerConfigurable" order="after project"/>
<!-- Compiler -->
<projectConfigurable implementation="com.intellij.psi.templateLanguages.TemplateDataLanguageConfigurable"/>
<projectConfigurable instance="com.intellij.psi.templateLanguages.TemplateDataLanguageConfigurable"/>
<!-- Scopes -->
<!-- This is registered as a top-level configurable in IDEA, and as a service (accessible from certain dialogs) in platform. -->
@@ -19,6 +19,7 @@ import com.intellij.javaee.ExternalResourceConfigurable;
import com.intellij.javaee.ExternalResourceManager;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.options.ShowSettingsUtil;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiFile;
import com.intellij.util.IncorrectOperationException;
import org.jetbrains.annotations.NotNull;
@@ -34,16 +35,14 @@ public class ManuallySetupExtResourceAction extends BaseExtResourceAction {
protected void doInvoke(@NotNull final PsiFile file, final int offset, @NotNull final String uri, final Editor editor) throws IncorrectOperationException {
ExternalResourceManager.getInstance().addResource(uri,"");
final ExternalResourceConfigurable component = ShowSettingsUtil.getInstance().createProjectConfigurable(file.getProject(), ExternalResourceConfigurable.class);
ShowSettingsUtil.getInstance().editConfigurable(
file.getProject(),
component,
new Runnable() {
public void run() {
component.selectResource(uri);
}
final ShowSettingsUtil util = ShowSettingsUtil.getInstance();
final Project project = file.getProject();
final ExternalResourceConfigurable component = util.createProjectConfigurable(project, ExternalResourceConfigurable.class);
util.editConfigurable(project, component, new Runnable() {
public void run() {
component.selectResource(uri);
}
);
});
}
public boolean startInWriteAction() {