diff --git a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/manage/ReprocessContentRootDataActivity.java b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/manage/ReprocessContentRootDataActivity.java deleted file mode 100644 index bc48d78bcca5..000000000000 --- a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/manage/ReprocessContentRootDataActivity.java +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. -package com.intellij.openapi.externalSystem.service.project.manage; - -import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.externalSystem.ExternalSystemManager; -import com.intellij.openapi.externalSystem.model.DataNode; -import com.intellij.openapi.externalSystem.model.ExternalProjectInfo; -import com.intellij.openapi.externalSystem.model.ProjectSystemId; -import com.intellij.openapi.externalSystem.model.project.ContentRootData; -import com.intellij.openapi.externalSystem.model.project.ProjectData; -import com.intellij.openapi.externalSystem.service.project.IdeModifiableModelsProviderImpl; -import com.intellij.openapi.externalSystem.service.project.ProjectDataManager; -import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil; -import com.intellij.openapi.module.ModuleManager; -import com.intellij.openapi.project.DumbAware; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.startup.StartupActivity; -import org.jetbrains.annotations.NotNull; - -import java.util.Collection; - -import static com.intellij.openapi.externalSystem.model.ProjectKeys.CONTENT_ROOT; - -public class ReprocessContentRootDataActivity implements StartupActivity, DumbAware { - - private static final Logger LOG = Logger.getInstance(ReprocessContentRootDataActivity.class); - - @Override - public void runActivity(@NotNull Project project) { - - final ProjectDataManager dataManager = ProjectDataManager.getInstance(); - final ContentRootDataService service = new ContentRootDataService(); - final IdeModifiableModelsProviderImpl modifiableModelsProvider = new IdeModifiableModelsProviderImpl(project); - - logUnitTest("Adding 'reprocess content root data' activity to 'runWhenSmart' queue in project [hash=" + project.hashCode() + "]"); - ApplicationManager.getApplication().invokeLater(() -> { - logUnitTest("Reprocessing content root data for project [hash=" + project.hashCode() + "]"); - ExternalProjectsManagerImpl.getInstance(project).init(); - final boolean haveModulesToProcess = ModuleManager.getInstance(project).getModules().length > 0; - if (!haveModulesToProcess) { - logUnitTest("Have zero modules to process, returning"); - return; - } - try { - final Collection> managers = ExternalSystemApiUtil.getAllManagers(); - logUnitTest("Found [" + managers.size() + "] external system managers"); - for (ExternalSystemManager manager : managers) { - ProjectSystemId id = manager.getSystemId(); - final Collection data = dataManager.getExternalProjectsData(project, id); - logUnitTest("Found [" + data.size() + "] external project infos using manager class=[" + dataManager.getClass().getCanonicalName() + "]"); - for (ExternalProjectInfo info : data) { - DataNode projectStructure = info.getExternalProjectStructure(); - logUnitTest("External data graph root is " - + (projectStructure == null ? "" : "not") - + " null for external project path=[" + info.getExternalProjectPath() + "]"); - if (projectStructure != null) { - Collection> roots = ExternalSystemApiUtil.findAllRecursively(projectStructure, CONTENT_ROOT); - service.importData(roots, null, project, modifiableModelsProvider); - } - } - } - } finally { - ExternalSystemApiUtil.doWriteAction(() -> modifiableModelsProvider.commit()); - } - }, project.getDisposed()); - } - - protected void logUnitTest(String message) { - if (ApplicationManager.getApplication().isUnitTestMode()) { - LOG.info(message); - } - } -} diff --git a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/manage/ReprocessContentRootDataActivity.kt b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/manage/ReprocessContentRootDataActivity.kt new file mode 100644 index 000000000000..250696bdb07d --- /dev/null +++ b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/manage/ReprocessContentRootDataActivity.kt @@ -0,0 +1,43 @@ +// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +package com.intellij.openapi.externalSystem.service.project.manage + +import com.intellij.openapi.externalSystem.model.ProjectKeys.CONTENT_ROOT +import com.intellij.openapi.externalSystem.service.project.IdeModifiableModelsProviderImpl +import com.intellij.openapi.externalSystem.service.project.ProjectDataManager +import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil +import com.intellij.openapi.module.ModuleManager +import com.intellij.openapi.project.DumbAware +import com.intellij.openapi.project.Project +import com.intellij.openapi.startup.StartupActivity + +class ReprocessContentRootDataActivity : StartupActivity, DumbAware { + + override fun runActivity(project: Project) { + val dataManager = ProjectDataManager.getInstance() + val service = ContentRootDataService() + + val externalProjectsManager = ExternalProjectsManagerImpl.getInstance(project) + externalProjectsManager.init() + externalProjectsManager.runWhenInitialized { + val haveModulesToProcess = ModuleManager.getInstance(project).modules.isNotEmpty() + if (!haveModulesToProcess) { + return@runWhenInitialized + } + var modifiableModelsProvider: IdeModifiableModelsProviderImpl? = null + try { + modifiableModelsProvider = IdeModifiableModelsProviderImpl(project) + ExternalSystemApiUtil.getAllManagers() + .flatMap { dataManager.getExternalProjectsData(project, it.getSystemId()) } + .mapNotNull { it.externalProjectStructure } + .map { ExternalSystemApiUtil.findAllRecursively(it, CONTENT_ROOT) } + .forEach { + service.importData(it, null, project, modifiableModelsProvider) + } + println("hello!") + } + finally { + ExternalSystemApiUtil.doWriteAction { modifiableModelsProvider?.commit() } + } + } + } +} diff --git a/plugins/gradle/testSources/org/jetbrains/plugins/gradle/importing/GradleFoldersImportingTest.java b/plugins/gradle/testSources/org/jetbrains/plugins/gradle/importing/GradleFoldersImportingTest.java index 6b2775303c08..f30e73ebef6a 100644 --- a/plugins/gradle/testSources/org/jetbrains/plugins/gradle/importing/GradleFoldersImportingTest.java +++ b/plugins/gradle/testSources/org/jetbrains/plugins/gradle/importing/GradleFoldersImportingTest.java @@ -15,20 +15,12 @@ */ package org.jetbrains.plugins.gradle.importing; -import com.intellij.openapi.application.WriteAction; import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil; import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; -import com.intellij.openapi.project.ex.ProjectManagerEx; import com.intellij.openapi.roots.ContentEntry; import com.intellij.openapi.roots.ModuleRootManager; -import com.intellij.openapi.util.Disposer; -import com.intellij.openapi.util.Ref; -import com.intellij.openapi.vfs.VirtualFileManager; -import com.intellij.testFramework.PlatformTestUtil; -import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.SystemIndependent; import org.jetbrains.jps.model.java.JavaSourceRootType; import org.jetbrains.plugins.gradle.tooling.annotation.TargetVersions; import org.junit.Test; @@ -320,42 +312,6 @@ public class GradleFoldersImportingTest extends GradleImportingTestCase { assertTestSources("project", "test-src/java"); } - @Test - public void testRootsListenersRestoredWhenProjectOpen() throws Exception { - createProjectSubFile("src/main/java/A.java"); - importProjectUsingSingeModulePerGradleProject("apply plugin: 'java'"); - - @SystemIndependent final String path = myProject.getProjectFilePath(); - - edt(() -> { - VirtualFileManager.getInstance().syncRefresh(); - UIUtil.dispatchAllInvocationEvents(); - PlatformTestUtil.saveProject(myProject); - ProjectManagerEx.getInstanceEx().closeProject(myProject); - UIUtil.dispatchAllInvocationEvents(); - }); - - final ProjectManagerEx projectManager = ProjectManagerEx.getInstanceEx(); - final Ref projectRef = new Ref<>(); - try { - projectRef.set(projectManager.loadProject(path)); - edt(() -> projectManager.openTestProject(projectRef.get())); - createProjectSubFile("src/test/java/ATest.java"); - - edt(() -> UIUtil.dispatchAllInvocationEvents()); - assertTestSources(projectRef.get(), "project", "src/test/java"); - } - finally { - if (!projectRef.isNull()) { - edt(() -> { - projectManager.closeTestProject(projectRef.get()); - WriteAction.run(() -> Disposer.dispose(projectRef.get())); - }); - } - } - } - - protected void assertDefaultGradleJavaProjectFolders(@NotNull String mainModuleName) { assertExcludes(mainModuleName, ".gradle", "build", "out"); final String mainSourceSetModuleName = mainModuleName + "_main";