diff --git a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/autoimport/ExternalSystemProjectsWatcherImpl.java b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/autoimport/ExternalSystemProjectsWatcherImpl.java index b101cd13a474..220ee055e5ed 100644 --- a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/autoimport/ExternalSystemProjectsWatcherImpl.java +++ b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/autoimport/ExternalSystemProjectsWatcherImpl.java @@ -23,6 +23,7 @@ import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.EditorFactory; import com.intellij.openapi.editor.event.*; +import com.intellij.openapi.extensions.ExtensionPointName; import com.intellij.openapi.externalSystem.ExternalSystemAutoImportAware; import com.intellij.openapi.externalSystem.ExternalSystemManager; import com.intellij.openapi.externalSystem.model.DataNode; @@ -64,6 +65,7 @@ import com.intellij.util.messages.MessageBusConnection; import com.intellij.util.ui.update.MergingUpdateQueue; import com.intellij.util.ui.update.Update; import gnu.trove.THashSet; +import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -81,6 +83,10 @@ import static com.intellij.util.ui.update.MergingUpdateQueue.ANY_COMPONENT; */ public class ExternalSystemProjectsWatcherImpl extends ExternalSystemTaskNotificationListenerAdapter implements ExternalSystemProjectsWatcher { + + private static final ExtensionPointName EP_NAME = + ExtensionPointName.create("com.intellij.externalProjectWatcherContributor"); + private static final Key CRC_WITHOUT_SPACES_CURRENT = Key.create("ExternalSystemProjectsWatcher.CRC_WITHOUT_SPACES_CURRENT"); private static final Key CRC_WITHOUT_SPACES_BEFORE_LAST_IMPORT = @@ -137,11 +143,17 @@ public class ExternalSystemProjectsWatcherImpl extends ExternalSystemTaskNotific @Override public void markDirtyAllExternalProjects() { findLinkedProjectsSettings().forEach(this::scheduleUpdate); + for (Contributor contributor : EP_NAME.getExtensions()) { + contributor.markDirtyAllExternalProjects(myProject); + } } @Override public void markDirty(Module module) { scheduleUpdate(ExternalSystemApiUtil.getExternalProjectPath(module)); + for (Contributor contributor : EP_NAME.getExtensions()) { + contributor.markDirty(module); + } } @Override @@ -709,4 +721,12 @@ public class ExternalSystemProjectsWatcherImpl extends ExternalSystemTaskNotific } return newCrc; } + + @ApiStatus.Experimental + public interface Contributor { + + void markDirtyAllExternalProjects(@NotNull Project project); + + void markDirty(@NotNull Module module); + } } diff --git a/platform/platform-resources/src/META-INF/ExternalSystemExtensionPoints.xml b/platform/platform-resources/src/META-INF/ExternalSystemExtensionPoints.xml index 30277874e72a..f1455f1af75a 100644 --- a/platform/platform-resources/src/META-INF/ExternalSystemExtensionPoints.xml +++ b/platform/platform-resources/src/META-INF/ExternalSystemExtensionPoints.xml @@ -21,5 +21,7 @@ interface="com.intellij.openapi.externalSystem.execution.ExternalSystemExecutionConsoleManager"/> + \ No newline at end of file diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsManager.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsManager.java index f1ed21541412..58c33587bfae 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsManager.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsManager.java @@ -34,6 +34,7 @@ import com.intellij.openapi.components.State; import com.intellij.openapi.externalSystem.ExternalSystemModulePropertyManager; import com.intellij.openapi.externalSystem.service.project.IdeModifiableModelsProvider; import com.intellij.openapi.externalSystem.service.project.IdeModifiableModelsProviderImpl; +import com.intellij.openapi.externalSystem.service.project.autoimport.ExternalSystemProjectsWatcherImpl; import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.module.Module; import com.intellij.openapi.project.DumbAwareRunnable; @@ -75,6 +76,7 @@ import java.nio.file.Path; import java.util.*; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.locks.ReentrantLock; +import java.util.function.Consumer; import java.util.stream.Collectors; @State(name = "MavenProjectsManager") @@ -1276,4 +1278,27 @@ public class MavenProjectsManager extends MavenSimpleProjectComponent default void importAndResolveScheduled() { } } + + public static class MavenProjectsWatcherContributor implements ExternalSystemProjectsWatcherImpl.Contributor { + + @Override + public void markDirtyAllExternalProjects(@NotNull Project project) { + runWhenFullyOpen(project, (manager) -> manager.doScheduleUpdateProjects(null, true, true)); + } + + @Override + public void markDirty(@NotNull Module module) { + runWhenFullyOpen(module.getProject(), (manager) -> { + MavenProject mavenProject = manager.findProject(module); + if (mavenProject != null) { + manager.doScheduleUpdateProjects(ContainerUtil.list(mavenProject), true, true); + } + }); + } + + private static void runWhenFullyOpen(@NotNull Project project, @NotNull Consumer consumer) { + MavenProjectsManager manager = getInstance(project); + manager.runWhenFullyOpen(() -> consumer.accept(manager)); + } + } } diff --git a/plugins/maven/src/main/resources/META-INF/plugin.xml b/plugins/maven/src/main/resources/META-INF/plugin.xml index c80619fc8e94..be89f658993b 100644 --- a/plugins/maven/src/main/resources/META-INF/plugin.xml +++ b/plugins/maven/src/main/resources/META-INF/plugin.xml @@ -65,6 +65,7 @@ +