[external system][IDEA-306074] flush workspace model's cache in Gradle related tests

GitOrigin-RevId: ab8f16dbf7fac6a940f7847c7249945a91cc605c
This commit is contained in:
Alexander.Glukhov
2024-04-02 12:46:23 +00:00
committed by intellij-monorepo-bot
parent 9d8824c5c2
commit d718c22e53
5 changed files with 65 additions and 32 deletions
@@ -32,6 +32,7 @@ import com.intellij.openapi.vfs.LocalFileSystem
import com.intellij.openapi.vfs.VfsUtil
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.openapi.vfs.impl.VirtualFilePointerTracker
import com.intellij.platform.backend.workspace.WorkspaceModelCache
import com.intellij.project.TestProjectManager
import com.intellij.project.stateStore
import com.intellij.util.containers.forEachGuaranteed
@@ -432,11 +433,17 @@ private inline fun <R> closeOpenedProjectsIfFailImpl(closeProject: Project.() ->
private fun Project.closeProject(save: Boolean = false) {
invokeAndWaitIfNeeded {
if (save) {
saveWorkspaceModel()
}
ProjectManagerEx.getInstanceEx().forceCloseProject(this, save = save)
}
}
suspend fun Project.closeProjectAsync(save: Boolean = false) {
if (save) {
saveWorkspaceModel()
}
ProjectManagerEx.getInstanceEx().forceCloseProjectAsync(this, save = save)
}
@@ -579,6 +586,14 @@ suspend fun createOrLoadProject(
createOrLoadProject(projectPath = file, loadComponentState = loadComponentState, options = options, task = task)
}
private fun Project.saveWorkspaceModel() {
val workspaceModelCache = WorkspaceModelCache.getInstance(this)
requireNotNull(workspaceModelCache) {
"WorkspaceModelCache should be enabled explicitly if you need to save the project in tests."
}
workspaceModelCache.saveCacheNow()
}
private suspend fun createOrLoadProject(projectPath: Path,
loadComponentState: Boolean,
options: OpenProjectTask,
@@ -6,9 +6,12 @@ import com.intellij.ide.projectWizard.generators.BuildSystemJavaNewProjectWizard
import com.intellij.ide.wizard.NewProjectWizardBaseData.Companion.baseData
import com.intellij.idea.IJIgnore
import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil
import com.intellij.openapi.util.Disposer
import com.intellij.openapi.util.use
import com.intellij.testFramework.useProjectAsync
import com.intellij.testFramework.utils.module.assertModules
import com.intellij.testFramework.withProjectAsync
import com.intellij.workspaceModel.ide.impl.WorkspaceModelCacheImpl
import kotlinx.coroutines.runBlocking
import org.jetbrains.plugins.gradle.service.project.wizard.GradleJavaNewProjectWizardData.Companion.javaGradleData
import org.jetbrains.plugins.gradle.service.project.wizard.GradleNewProjectWizardStep.GradleDsl
@@ -20,8 +23,8 @@ import org.junit.jupiter.api.Test
class GradleCreateProjectTest : GradleCreateProjectTestCase() {
@Test
fun `test project create`() {
runBlocking {
fun `test project re-create`() = runBlocking {
Disposer.newDisposable().use { disposable ->
val projectInfo = projectInfo("project") {
withJavaBuildFile()
withSettingsFile {
@@ -36,6 +39,8 @@ class GradleCreateProjectTest : GradleCreateProjectTestCase() {
withJavaBuildFile()
}
}
WorkspaceModelCacheImpl.forceEnableCaching(disposable)
createProjectByWizard(projectInfo)
.useProjectAsync(save = true) { project ->
assertProjectState(project, projectInfo)
@@ -3,6 +3,8 @@ package org.jetbrains.plugins.gradle.setup
import com.intellij.codeHighlighting.HighlightDisplayLevel
import com.intellij.openapi.application.writeAction
import com.intellij.openapi.util.Disposer
import com.intellij.openapi.util.use
import com.intellij.openapi.vfs.writeText
import com.intellij.profile.codeInspection.InspectionProfileManager
import com.intellij.profile.codeInspection.ProjectInspectionProfileManager
@@ -10,6 +12,7 @@ import com.intellij.testFramework.PlatformTestUtil
import com.intellij.testFramework.useProjectAsync
import com.intellij.testFramework.utils.module.assertModules
import com.intellij.testFramework.utils.vfs.createFile
import com.intellij.workspaceModel.ide.impl.WorkspaceModelCacheImpl
import kotlinx.coroutines.runBlocking
import org.jetbrains.plugins.gradle.settings.GradleSettings
import org.junit.jupiter.api.Assertions
@@ -45,13 +48,14 @@ class GradleOpenProjectTest : GradleOpenProjectTestCase() {
}
@Test
fun `test project re-open`() {
runBlocking {
fun `test project re-open`() = runBlocking {
Disposer.newDisposable().use { disposable ->
val projectInfo = getComplexProjectInfo("project")
val linkedProjectInfo = getComplexProjectInfo("linked_project")
initProject(projectInfo)
initProject(linkedProjectInfo)
WorkspaceModelCacheImpl.forceEnableCaching(disposable)
openProject("project")
.useProjectAsync(save = true) {
assertProjectState(it, projectInfo)
@@ -67,13 +71,14 @@ class GradleOpenProjectTest : GradleOpenProjectTestCase() {
}
@Test
fun `test project re-import deprecation`() {
runBlocking {
fun `test project re-import deprecation`() = runBlocking {
Disposer.newDisposable().use { disposable ->
val projectInfo = getComplexProjectInfo("project")
val linkedProjectInfo = getComplexProjectInfo("linked_project")
initProject(projectInfo)
initProject(linkedProjectInfo)
WorkspaceModelCacheImpl.forceEnableCaching(disposable)
openProject("project")
.useProjectAsync(save = true) {
assertProjectState(it, projectInfo)
@@ -9,11 +9,13 @@ import com.intellij.openapi.observable.operation.core.whenOperationStarted
import com.intellij.openapi.project.Project
import com.intellij.openapi.project.modules
import com.intellij.openapi.util.Disposer
import com.intellij.openapi.util.use
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.testFramework.*
import com.intellij.testFramework.common.runAll
import com.intellij.testFramework.fixtures.SdkTestFixture
import com.intellij.util.indexing.FileBasedIndexEx
import com.intellij.workspaceModel.ide.impl.WorkspaceModelCacheImpl
import kotlinx.coroutines.runBlocking
import org.gradle.util.GradleVersion
import org.jetbrains.plugins.gradle.service.project.wizard.util.generateGradleWrapper
@@ -65,6 +67,7 @@ internal class GradleProjectTestFixtureImpl private constructor(
override fun setUp() {
_testDisposable = Disposer.newDisposable()
WorkspaceModelCacheImpl.forceEnableCaching(testDisposable)
sdkFixture.setUp()
fileFixture.setUp()
@@ -7,6 +7,7 @@ import com.intellij.openapi.project.getProjectCacheFileName
import com.intellij.openapi.util.registry.Registry
import com.intellij.testFramework.openProjectAsync
import com.intellij.testFramework.useProjectAsync
import com.intellij.workspaceModel.ide.impl.WorkspaceModelCacheImpl
import kotlinx.coroutines.runBlocking
import org.jetbrains.idea.maven.project.MavenProjectsManager
import org.junit.Test
@@ -39,7 +40,6 @@ class MavenSetupProjectTest : MavenSetupProjectTestCase() {
openProjectAsync(projectInfo.projectFile)
}.useProjectAsync {
assertProjectState(it, projectInfo)
}
}
@@ -50,7 +50,6 @@ class MavenSetupProjectTest : MavenSetupProjectTestCase() {
importProjectActionAsync(projectInfo.projectFile)
}.useProjectAsync {
assertProjectState(it, projectInfo)
}
}
@@ -97,6 +96,8 @@ class MavenSetupProjectTest : MavenSetupProjectTestCase() {
fun `test project re-open`() = runBlocking {
val projectInfo = generateProject("A")
val linkedProjectInfo = generateProject("L")
WorkspaceModelCacheImpl.forceEnableCaching(testRootDisposable)
waitForImport {
openProjectAsync(projectInfo.projectFile)
}.useProjectAsync(save = true) {
@@ -137,6 +138,8 @@ class MavenSetupProjectTest : MavenSetupProjectTestCase() {
runBlocking {
val projectInfo = ProjectInfo(projectPom, "project", "m (1)", "M (2)")
WorkspaceModelCacheImpl.forceEnableCaching(testRootDisposable)
waitForImport {
openProjectAsync(projectInfo.projectFile)
}.useProjectAsync(save = true) {
@@ -154,6 +157,7 @@ class MavenSetupProjectTest : MavenSetupProjectTestCase() {
val projectInfo = generateProject("A")
val linkedProjectInfo = generateProject("L")
WorkspaceModelCacheImpl.forceEnableCaching(testRootDisposable)
waitForImport {
openProjectAsync(projectInfo.projectFile)
}.useProjectAsync(save = true) {
@@ -175,25 +179,26 @@ class MavenSetupProjectTest : MavenSetupProjectTestCase() {
val projectInfo = generateProject("A")
MavenProjectLegacyImporter.setAnswerToDeleteObsoleteModulesQuestion(true)
val p1 = openProjectAsync(projectInfo.projectFile)
p1.useProjectAsync(true) {
// initial state: workspace import is disabled, has not been forced yet
val mavenProjectsManager = MavenProjectsManager.getInstance(it)
mavenProjectsManager.importingSettings.isWorkspaceImportForciblyTurnedOn = false
waitForImportWithinTimeout(it) {
mavenProjectsManager.importingSettings.isWorkspaceImportEnabled = false
Unit
}
}
WorkspaceModelCacheImpl.forceEnableCaching(testRootDisposable)
val p2 = openProjectAsync(projectInfo.projectFile)
p2.useProjectAsync(true) {
// check that workspace import has been forced
val mavenProjectsManager = MavenProjectsManager.getInstance(it)
assertTrue(mavenProjectsManager.importingSettings.isWorkspaceImportEnabled)
// user still chooses legacy import
mavenProjectsManager.importingSettings.isWorkspaceImportEnabled = false
}
openProjectAsync(projectInfo.projectFile)
.useProjectAsync(save = true) {
// initial state: workspace import is disabled, has not been forced yet
val mavenProjectsManager = MavenProjectsManager.getInstance(it)
mavenProjectsManager.importingSettings.isWorkspaceImportForciblyTurnedOn = false
waitForImportWithinTimeout(it) {
mavenProjectsManager.importingSettings.isWorkspaceImportEnabled = false
}
}
openProjectAsync(projectInfo.projectFile)
.useProjectAsync(save = true) {
// check that workspace import has been forced
val mavenProjectsManager = MavenProjectsManager.getInstance(it)
assertTrue(mavenProjectsManager.importingSettings.isWorkspaceImportEnabled)
// user still chooses legacy import
mavenProjectsManager.importingSettings.isWorkspaceImportEnabled = false
}
val projectFileDir = projectInfo.projectFile.parent.toNioPath()
val moduleFilePath = appSystemDir
@@ -211,11 +216,11 @@ class MavenSetupProjectTest : MavenSetupProjectTestCase() {
assertTrue("Module file is empty", Files.size(moduleFilePath) > 0)
}
val p3 = openProjectAsync(projectInfo.projectFile)
p3.useProjectAsync(true) {
// check that workspace import has not been forced twice
val mavenProjectsManager = MavenProjectsManager.getInstance(it)
assertFalse(mavenProjectsManager.importingSettings.isWorkspaceImportEnabled)
}
openProjectAsync(projectInfo.projectFile)
.useProjectAsync(save = true) {
// check that workspace import has not been forced twice
val mavenProjectsManager = MavenProjectsManager.getInstance(it)
assertFalse(mavenProjectsManager.importingSettings.isWorkspaceImportEnabled)
}
}
}