From 0ebe9d6cf6acfa31d8123d1d4dd3fa009b37fdcb Mon Sep 17 00:00:00 2001 From: "Denis.Zhdanov" Date: Thu, 27 Jun 2013 17:00:58 +0400 Subject: [PATCH] IDEA-109519 Gradle: Don't ignore user-defined settings on initial project import --- .../externalSystem/ExternalSystemManager.java | 2 +- .../AbstractExternalSystemLocalSettings.java | 2 +- .../AbstractExternalSystemSettings.java | 58 +++++++----- .../action/DetachExternalProjectAction.java | 14 ++- ...ctExternalSystemTaskConfigurationType.java | 3 +- .../ExternalSystemAutoImporter.java | 14 +-- .../AbstractExternalProjectImportBuilder.java | 91 +++++++++++++------ .../AbstractExternalSystemConfigurable.java | 2 +- ...ractExternalSystemToolWindowCondition.java | 2 +- ...stractImportFromExternalSystemControl.java | 9 +- .../service/ui/ExternalToolWindowManager.java | 10 +- .../ExternalSystemSettingsManager.java | 4 +- .../util/ExternalSystemUtil.java | 2 +- .../project/GradleAutoImportAware.java | 2 +- .../gradle/settings/GradleSettings.java | 7 +- 15 files changed, 145 insertions(+), 77 deletions(-) diff --git a/platform/external-system-api/src/com/intellij/openapi/externalSystem/ExternalSystemManager.java b/platform/external-system-api/src/com/intellij/openapi/externalSystem/ExternalSystemManager.java index df67190d2285..dd50bc8c8f57 100644 --- a/platform/external-system-api/src/com/intellij/openapi/externalSystem/ExternalSystemManager.java +++ b/platform/external-system-api/src/com/intellij/openapi/externalSystem/ExternalSystemManager.java @@ -30,7 +30,7 @@ import org.jetbrains.annotations.NotNull; public interface ExternalSystemManager< ProjectSettings extends ExternalProjectSettings, SettingsListener extends ExternalSystemSettingsListener, - Settings extends AbstractExternalSystemSettings, + Settings extends AbstractExternalSystemSettings, LocalSettings extends AbstractExternalSystemLocalSettings, ExecutionSettings extends ExternalSystemExecutionSettings> extends ParametersEnhancer diff --git a/platform/external-system-api/src/com/intellij/openapi/externalSystem/settings/AbstractExternalSystemLocalSettings.java b/platform/external-system-api/src/com/intellij/openapi/externalSystem/settings/AbstractExternalSystemLocalSettings.java index 5a3fd5a8eab3..f2cea2f0a771 100644 --- a/platform/external-system-api/src/com/intellij/openapi/externalSystem/settings/AbstractExternalSystemLocalSettings.java +++ b/platform/external-system-api/src/com/intellij/openapi/externalSystem/settings/AbstractExternalSystemLocalSettings.java @@ -195,7 +195,7 @@ public abstract class AbstractExternalSystemLocalSettings { toForget.add(taskInfo.getSettings().getExternalProjectPath()); } - AbstractExternalSystemSettings settings = manager.getSettingsProvider().fun(myProject); + AbstractExternalSystemSettings settings = manager.getSettingsProvider().fun(myProject); for (ExternalProjectSettings projectSettings : settings.getLinkedProjectsSettings()) { toForget.remove(projectSettings.getExternalProjectPath()); } diff --git a/platform/external-system-api/src/com/intellij/openapi/externalSystem/settings/AbstractExternalSystemSettings.java b/platform/external-system-api/src/com/intellij/openapi/externalSystem/settings/AbstractExternalSystemSettings.java index 9c3e5e7c5776..38ef1164a44f 100644 --- a/platform/external-system-api/src/com/intellij/openapi/externalSystem/settings/AbstractExternalSystemSettings.java +++ b/platform/external-system-api/src/com/intellij/openapi/externalSystem/settings/AbstractExternalSystemSettings.java @@ -32,12 +32,16 @@ import java.util.*; * @author Denis Zhdanov * @since 4/3/13 4:04 PM */ -public abstract class AbstractExternalSystemSettings> { - +public abstract class AbstractExternalSystemSettings< + SS extends AbstractExternalSystemSettings, + PS extends ExternalProjectSettings, + L extends ExternalSystemSettingsListener> +{ + @NotNull private final Topic myChangesTopic; @NotNull private final Project myProject; - @NotNull private final Map myLinkedProjectsSettings = ContainerUtilRt.newHashMap(); + @NotNull private final Map myLinkedProjectsSettings = ContainerUtilRt.newHashMap(); protected AbstractExternalSystemSettings(@NotNull Topic topic, @NotNull Project project) { myChangesTopic = topic; @@ -59,24 +63,34 @@ public abstract class AbstractExternalSystemSettings * That's why this method allows to wrap given 'generic listener' into external system-specific one. - * + * * @param listener target generic listener to wrap to external system-specific implementation */ - public abstract void subscribe(@NotNull ExternalSystemSettingsListener listener); + public abstract void subscribe(@NotNull ExternalSystemSettingsListener listener); + + public void copyFrom(@NotNull SS settings) { + myLinkedProjectsSettings.clear(); + for (PS projectSettings : settings.getLinkedProjectsSettings()) { + myLinkedProjectsSettings.put(projectSettings.getExternalProjectPath(), projectSettings); + } + copyExtraSettingsFrom(settings); + } + + protected abstract void copyExtraSettingsFrom(@NotNull SS settings); @SuppressWarnings("unchecked") @NotNull - public Collection getLinkedProjectsSettings() { + public Collection getLinkedProjectsSettings() { return myLinkedProjectsSettings.values(); } @Nullable - public S getLinkedProjectSettings(@NotNull String linkedProjectPath) { + public PS getLinkedProjectSettings(@NotNull String linkedProjectPath) { return myLinkedProjectsSettings.get(linkedProjectPath); } - public void linkProject(@NotNull S settings) throws IllegalArgumentException { - S existing = getLinkedProjectSettings(settings.getExternalProjectPath()); + public void linkProject(@NotNull PS settings) throws IllegalArgumentException { + PS existing = getLinkedProjectSettings(settings.getExternalProjectPath()); if (existing != null) { throw new IllegalArgumentException(String.format( "Can't link external project '%s'. Reason: it's already registered at the current ide project", @@ -96,7 +110,7 @@ public abstract class AbstractExternalSystemSettingsfalse otherwise */ public boolean unlinkExternalProject(@NotNull String linkedProjectPath) { - S removed = myLinkedProjectsSettings.remove(linkedProjectPath); + PS removed = myLinkedProjectsSettings.remove(linkedProjectPath); if (removed == null) { return false; } @@ -105,16 +119,16 @@ public abstract class AbstractExternalSystemSettings settings) { - List added = ContainerUtilRt.newArrayList(); - Map removed = ContainerUtilRt.newHashMap(myLinkedProjectsSettings); + public void setLinkedProjectsSettings(@NotNull Collection settings) { + List added = ContainerUtilRt.newArrayList(); + Map removed = ContainerUtilRt.newHashMap(myLinkedProjectsSettings); myLinkedProjectsSettings.clear(); - for (S current : settings) { + for (PS current : settings) { myLinkedProjectsSettings.put(current.getExternalProjectPath(), current); } - for (S current : settings) { - S old = removed.remove(current.getExternalProjectPath()); + for (PS current : settings) { + PS old = removed.remove(current.getExternalProjectPath()); if (old == null) { added.add(current); } @@ -140,7 +154,7 @@ public abstract class AbstractExternalSystemSettings getChangesTopic() { @@ -152,17 +166,17 @@ public abstract class AbstractExternalSystemSettings state) { + protected void fillState(@NotNull State state) { state.setLinkedExternalProjectsSettings(ContainerUtilRt.newTreeSet(myLinkedProjectsSettings.values())); } @SuppressWarnings("unchecked") - protected void loadState(@NotNull State state) { - Set settings = state.getLinkedExternalProjectsSettings(); + protected void loadState(@NotNull State state) { + Set settings = state.getLinkedExternalProjectsSettings(); if (settings != null) { myLinkedProjectsSettings.clear(); - for (S s : settings) { - myLinkedProjectsSettings.put(s.getExternalProjectPath(), s); + for (PS projectSettings : settings) { + myLinkedProjectsSettings.put(projectSettings.getExternalProjectPath(), projectSettings); } } } diff --git a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/action/DetachExternalProjectAction.java b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/action/DetachExternalProjectAction.java index a53d21df02c5..6c9687533b81 100644 --- a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/action/DetachExternalProjectAction.java +++ b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/action/DetachExternalProjectAction.java @@ -21,7 +21,6 @@ import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.actionSystem.PlatformDataKeys; import com.intellij.openapi.components.ServiceManager; -import com.intellij.openapi.externalSystem.ExternalSystemManager; import com.intellij.openapi.externalSystem.model.ExternalSystemDataKeys; import com.intellij.openapi.externalSystem.model.ProjectSystemId; import com.intellij.openapi.externalSystem.model.project.ExternalProjectPojo; @@ -31,7 +30,7 @@ import com.intellij.openapi.externalSystem.service.task.ui.ExternalSystemTasksTr import com.intellij.openapi.externalSystem.settings.AbstractExternalSystemLocalSettings; import com.intellij.openapi.externalSystem.settings.AbstractExternalSystemSettings; import com.intellij.openapi.externalSystem.settings.ExternalProjectSettings; -import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil; +import com.intellij.openapi.externalSystem.settings.ExternalSystemSettingsManager; import com.intellij.openapi.externalSystem.util.ExternalSystemBundle; import com.intellij.openapi.externalSystem.util.ExternalSystemConstants; import com.intellij.openapi.externalSystem.util.ExternalSystemUtil; @@ -129,11 +128,10 @@ public class DetachExternalProjectAction extends AnAction implements DumbAware { return MyInfo.EMPTY; } - ExternalSystemManager manager = ExternalSystemApiUtil.getManager(externalSystemId); - assert manager != null; - AbstractExternalSystemSettings settings = manager.getSettingsProvider().fun(ideProject); + ExternalSystemSettingsManager settingsManager = ServiceManager.getService(ExternalSystemSettingsManager.class); + AbstractExternalSystemSettings settings = settingsManager.getSettings(ideProject, externalSystemId); ExternalProjectSettings externalProjectSettings = settings.getLinkedProjectSettings(externalProject.getPath()); - AbstractExternalSystemLocalSettings localSettings = manager.getLocalSettingsProvider().fun(ideProject); + AbstractExternalSystemLocalSettings localSettings = settingsManager.getLocalSettings(ideProject, externalSystemId); return new MyInfo(externalProjectSettings == null ? null : settings, localSettings == null ? null : localSettings, @@ -146,13 +144,13 @@ public class DetachExternalProjectAction extends AnAction implements DumbAware { public static final MyInfo EMPTY = new MyInfo(null, null, null, null, null); - @Nullable public final AbstractExternalSystemSettings settings; + @Nullable public final AbstractExternalSystemSettings settings; @Nullable public final AbstractExternalSystemLocalSettings localSettings; @Nullable public final ExternalProjectPojo externalProject; @Nullable public final Project ideProject; @Nullable public final ProjectSystemId externalSystemId; - MyInfo(@Nullable AbstractExternalSystemSettings settings, + MyInfo(@Nullable AbstractExternalSystemSettings settings, @Nullable AbstractExternalSystemLocalSettings localSettings, @Nullable ExternalProjectPojo externalProject, @Nullable Project ideProject, diff --git a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/execution/AbstractExternalSystemTaskConfigurationType.java b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/execution/AbstractExternalSystemTaskConfigurationType.java index 9b57fd79127b..5f050bb0b276 100644 --- a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/execution/AbstractExternalSystemTaskConfigurationType.java +++ b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/execution/AbstractExternalSystemTaskConfigurationType.java @@ -71,6 +71,7 @@ public abstract class AbstractExternalSystemTaskConfigurationType implements Con return myFactories[0]; } + @SuppressWarnings("MethodMayBeStatic") @NotNull protected ExternalSystemRunConfiguration doCreateConfiguration(@NotNull ProjectSystemId externalSystemId, @NotNull Project project, @@ -124,7 +125,7 @@ public abstract class AbstractExternalSystemTaskConfigurationType implements Con { ExternalSystemManager manager = ExternalSystemApiUtil.getManager(externalSystemId); assert manager != null; - AbstractExternalSystemSettings s = manager.getSettingsProvider().fun(project); + AbstractExternalSystemSettings s = manager.getSettingsProvider().fun(project); Map rootProjectPaths = ContainerUtilRt.newHashMap(); for (ExternalProjectSettings projectSettings : s.getLinkedProjectsSettings()) { String path = projectSettings.getExternalProjectPath(); diff --git a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/autoimport/ExternalSystemAutoImporter.java b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/autoimport/ExternalSystemAutoImporter.java index 79b581f650bb..7bc63015e3a1 100644 --- a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/autoimport/ExternalSystemAutoImporter.java +++ b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/autoimport/ExternalSystemAutoImporter.java @@ -114,7 +114,7 @@ public class ExternalSystemAutoImporter implements BulkFileListener, DocumentLis List autoImportAware = ContainerUtilRt.newArrayList(); Collection> managers = ExternalSystemApiUtil.getAllManagers(); for (ExternalSystemManager manager : managers) { - AbstractExternalSystemSettings systemSettings = manager.getSettingsProvider().fun(project); + AbstractExternalSystemSettings systemSettings = manager.getSettingsProvider().fun(project); ExternalSystemAutoImportAware defaultImportAware = createDefault(systemSettings); final ExternalSystemAutoImportAware aware; if (manager instanceof ExternalSystemAutoImportAware) { @@ -153,7 +153,7 @@ public class ExternalSystemAutoImporter implements BulkFileListener, DocumentLis } @NotNull - private static ExternalSystemAutoImportAware createDefault(@NotNull final AbstractExternalSystemSettings systemSettings) { + private static ExternalSystemAutoImportAware createDefault(@NotNull final AbstractExternalSystemSettings systemSettings) { return new ExternalSystemAutoImportAware() { @Nullable @Override @@ -327,13 +327,13 @@ public class ExternalSystemAutoImporter implements BulkFileListener, DocumentLis } private static class MyEntry { - - @NotNull public final ProjectSystemId externalSystemId; - @NotNull public final AbstractExternalSystemSettings systemSettings; - @NotNull public final ExternalSystemAutoImportAware aware; + + @NotNull public final ProjectSystemId externalSystemId; + @NotNull public final AbstractExternalSystemSettings systemSettings; + @NotNull public final ExternalSystemAutoImportAware aware; MyEntry(@NotNull ProjectSystemId externalSystemId, - @NotNull AbstractExternalSystemSettings systemSettings, + @NotNull AbstractExternalSystemSettings systemSettings, @NotNull ExternalSystemAutoImportAware aware) { this.externalSystemId = externalSystemId; diff --git a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/wizard/AbstractExternalProjectImportBuilder.java b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/wizard/AbstractExternalProjectImportBuilder.java index 8bb7058a8fe1..7c1ae05fd372 100644 --- a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/wizard/AbstractExternalProjectImportBuilder.java +++ b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/wizard/AbstractExternalProjectImportBuilder.java @@ -1,6 +1,7 @@ package com.intellij.openapi.externalSystem.service.project.wizard; import com.intellij.ide.util.projectWizard.WizardContext; +import com.intellij.openapi.components.PersistentStateComponent; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.externalSystem.model.DataNode; import com.intellij.openapi.externalSystem.model.ExternalSystemDataKeys; @@ -41,10 +42,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.io.File; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import java.util.Set; +import java.util.*; /** * GoF builder for gradle-backed projects. @@ -58,13 +56,13 @@ public abstract class AbstractExternalProjectImportBuilder myExternalProjectNode; + private DataNode myExternalProjectNode; public AbstractExternalProjectImportBuilder(@NotNull ExternalSystemSettingsManager settingsManager, @NotNull ProjectDataManager projectDataManager, @@ -126,11 +124,8 @@ public abstract class AbstractExternalProjectImportBuilder projects = ContainerUtilRt.newHashSet(systemSettings.getLinkedProjectsSettings()); projects.add(projectSettings); systemSettings.setLinkedProjectsSettings(projects); @@ -157,7 +152,7 @@ public abstract class AbstractExternalProjectImportBuilder projectWithResolvedLibraries = task.getExternalProject(); if (projectWithResolvedLibraries == null) { @@ -176,6 +171,16 @@ public abstract class AbstractExternalProjectImportBuilder dataNode, @NotNull Project project); /** @@ -250,14 +255,14 @@ public abstract class AbstractExternalProjectImportBuilder error = new Ref(); - ExternalProjectRefreshCallback callback = new ExternalProjectRefreshCallback() { + final ExternalProjectRefreshCallback callback = new ExternalProjectRefreshCallback() { @Override public void onSuccess(@Nullable DataNode externalProject) { myExternalProjectNode = externalProject; @@ -275,18 +280,29 @@ public abstract class AbstractExternalProjectImportBuilder exRef = new Ref(); + executeAndRestoreSettings(project, new Runnable() { + @Override + public void run() { + try { + ExternalSystemUtil.refreshProject( + project, + myExternalSystemId, + finalProjectFile.getAbsolutePath(), + callback, + false, + true + ); + } + catch (IllegalArgumentException e) { + exRef.set(new ConfigurationException(e.getMessage(), ExternalSystemBundle.message("error.cannot.parse.project", externalSystemName))); + } + } + }); + ConfigurationException ex = exRef.get(); + if (ex != null) { + throw ex; } if (myExternalProjectNode == null) { ConfigurationException exception = error.get(); @@ -299,6 +315,29 @@ public abstract class AbstractExternalProjectImportBuilder diff --git a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/settings/AbstractExternalSystemConfigurable.java b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/settings/AbstractExternalSystemConfigurable.java index a92898b4f4b9..1773a53c1587 100644 --- a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/settings/AbstractExternalSystemConfigurable.java +++ b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/settings/AbstractExternalSystemConfigurable.java @@ -62,7 +62,7 @@ import java.util.List; public abstract class AbstractExternalSystemConfigurable< ProjectSettings extends ExternalProjectSettings, L extends ExternalSystemSettingsListener, - SystemSettings extends AbstractExternalSystemSettings + SystemSettings extends AbstractExternalSystemSettings > implements SearchableConfigurable, Configurable.NoScroll { diff --git a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/settings/AbstractExternalSystemToolWindowCondition.java b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/settings/AbstractExternalSystemToolWindowCondition.java index d3ebd3521258..75dc8ae23adf 100644 --- a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/settings/AbstractExternalSystemToolWindowCondition.java +++ b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/settings/AbstractExternalSystemToolWindowCondition.java @@ -45,7 +45,7 @@ public abstract class AbstractExternalSystemToolWindowCondition implements Condi if (manager == null) { return false; } - AbstractExternalSystemSettings settings = manager.getSettingsProvider().fun(project); + AbstractExternalSystemSettings settings = manager.getSettingsProvider().fun(project); return settings != null && !settings.getLinkedProjectsSettings().isEmpty(); } } diff --git a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/settings/AbstractImportFromExternalSystemControl.java b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/settings/AbstractImportFromExternalSystemControl.java index 4978dba0b82b..cb915f412041 100644 --- a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/settings/AbstractImportFromExternalSystemControl.java +++ b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/settings/AbstractImportFromExternalSystemControl.java @@ -44,7 +44,7 @@ import java.awt.*; public abstract class AbstractImportFromExternalSystemControl< ProjectSettings extends ExternalProjectSettings, L extends ExternalSystemSettingsListener, - SystemSettings extends AbstractExternalSystemSettings> + SystemSettings extends AbstractExternalSystemSettings> { @NotNull private final SystemSettings mySystemSettings; @NotNull private final ProjectSettings myProjectSettings; @@ -165,6 +165,11 @@ public abstract class AbstractImportFromExternalSystemControl< myLinkedProjectPathField.setText(path); } + @NotNull + public SystemSettings getSystemSettings() { + return mySystemSettings; + } + @NotNull public ProjectSettings getProjectSettings() { return myProjectSettings; @@ -186,7 +191,7 @@ public abstract class AbstractImportFromExternalSystemControl< else if (myCurrentProject != null) { ExternalSystemManager manager = ExternalSystemApiUtil.getManager(myExternalSystemId); assert manager != null; - AbstractExternalSystemSettings settings = manager.getSettingsProvider().fun(myCurrentProject); + AbstractExternalSystemSettings settings = manager.getSettingsProvider().fun(myCurrentProject); if (settings.getLinkedProjectSettings(linkedProjectPath) != null) { throw new ConfigurationException(ExternalSystemBundle.message("error.project.already.registered")); } diff --git a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/ui/ExternalToolWindowManager.java b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/ui/ExternalToolWindowManager.java index 2abba6d1a266..80af1b886051 100644 --- a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/ui/ExternalToolWindowManager.java +++ b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/ui/ExternalToolWindowManager.java @@ -9,6 +9,7 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.wm.ToolWindow; import com.intellij.openapi.wm.ToolWindowManager; import com.intellij.openapi.wm.impl.ToolWindowImpl; +import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -47,9 +48,14 @@ public class ExternalToolWindowManager { if (!settings.getLinkedProjectsSettings().isEmpty()) { return; } - ToolWindow toolWindow = getToolWindow(project, manager.getSystemId()); + final ToolWindow toolWindow = getToolWindow(project, manager.getSystemId()); if (toolWindow != null) { - toolWindow.setAvailable(false, null); + UIUtil.invokeLaterIfNeeded(new Runnable() { + @Override + public void run() { + toolWindow.setAvailable(false, null); + } + }); } } }); diff --git a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/settings/ExternalSystemSettingsManager.java b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/settings/ExternalSystemSettingsManager.java index 61b1d085819d..c238fdb7815b 100644 --- a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/settings/ExternalSystemSettingsManager.java +++ b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/settings/ExternalSystemSettingsManager.java @@ -54,7 +54,7 @@ public class ExternalSystemSettingsManager implements DisposableExternalSystemSe @NotNull ProjectSystemId externalSystemId) throws IllegalArgumentException { Holder holder = myHolder.getValue(); - Function> provider = holder.settingsProviders.get(externalSystemId); + Function> provider = holder.settingsProviders.get(externalSystemId); if (provider == null) { throw new IllegalArgumentException(String.format( "Can't retrieve settings for external system with id '%s'. Reason: no such system is registered. Known systems: %s", @@ -105,7 +105,7 @@ public class ExternalSystemSettingsManager implements DisposableExternalSystemSe private static class Holder { @NotNull - public final ConcurrentMap>> settingsProviders + public final ConcurrentMap>> settingsProviders = ContainerUtil.newConcurrentMap(); @NotNull diff --git a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/util/ExternalSystemUtil.java b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/util/ExternalSystemUtil.java index 0381d5cc3384..6e9a566052d9 100644 --- a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/util/ExternalSystemUtil.java +++ b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/util/ExternalSystemUtil.java @@ -169,7 +169,7 @@ public class ExternalSystemUtil { if (manager == null) { return; } - AbstractExternalSystemSettings settings = manager.getSettingsProvider().fun(project); + AbstractExternalSystemSettings settings = manager.getSettingsProvider().fun(project); final Collection projectsSettings = settings.getLinkedProjectsSettings(); if (projectsSettings.isEmpty()) { return; diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleAutoImportAware.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleAutoImportAware.java index 4e479ecd7ebe..ca748ed7c762 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleAutoImportAware.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleAutoImportAware.java @@ -45,7 +45,7 @@ public class GradleAutoImportAware implements ExternalSystemAutoImportAware { ExternalSystemManager manager = ExternalSystemApiUtil.getManager(GradleConstants.SYSTEM_ID); assert manager != null; - AbstractExternalSystemSettings systemSettings = manager.getSettingsProvider().fun(project); + AbstractExternalSystemSettings systemSettings = manager.getSettingsProvider().fun(project); Collection projectsSettings = systemSettings.getLinkedProjectsSettings(); if (projectsSettings.isEmpty()) { return null; diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/settings/GradleSettings.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/settings/GradleSettings.java index d9bdc07d4fcf..a295d754b9a5 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/settings/GradleSettings.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/settings/GradleSettings.java @@ -40,7 +40,7 @@ import java.util.Set; @Storage(file = StoragePathMacros.PROJECT_CONFIG_DIR + "/gradle.xml", scheme = StorageScheme.DIRECTORY_BASED) } ) -public class GradleSettings extends AbstractExternalSystemSettings +public class GradleSettings extends AbstractExternalSystemSettings implements PersistentStateComponent { @@ -62,6 +62,11 @@ public class GradleSettings extends AbstractExternalSystemSettings