OMG fix project leak at last (which crashed UsageViewTest)

GitOrigin-RevId: c1a6cc0d0f66f3c8ea1a4f0e5ae8cc91555a6fce
This commit is contained in:
Alexey Kudravtsev
2019-05-03 03:06:48 +03:00
committed by intellij-monorepo-bot
parent a33fb84a47
commit 55f16d56fa
2 changed files with 19 additions and 0 deletions
@@ -3,10 +3,13 @@ package com.intellij.configurationStore
import com.intellij.ProjectTopics
import com.intellij.ide.highlighter.ModuleFileType
import com.intellij.idea.IdeaTestApplication
import com.intellij.openapi.application.AppUIExecutor
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.application.impl.coroutineDispatchingContext
import com.intellij.openapi.application.impl.inWriteAction
import com.intellij.openapi.command.impl.UndoManagerImpl
import com.intellij.openapi.command.undo.UndoManager
import com.intellij.openapi.components.StoragePathMacros
import com.intellij.openapi.components.stateStore
import com.intellij.openapi.module.Module
@@ -25,6 +28,7 @@ import com.intellij.util.io.readText
import com.intellij.util.io.systemIndependentPath
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.withContext
import org.junit.After
import org.junit.ClassRule
import org.junit.Rule
import org.junit.Test
@@ -87,6 +91,14 @@ internal class ModuleStoreRenameTest {
DisposeModulesRule(projectRule)
)
@After
fun tearDown() {
ApplicationManager.getApplication().invokeAndWait {
(UndoManager.getInstance(projectRule.project) as UndoManagerImpl).dropHistoryInTests()
(UndoManager.getInstance(projectRule.project) as UndoManagerImpl).flushCurrentCommandMerger()
}
}
// project structure
@Test
fun `rename module using model`() = runBlocking<Unit> {
@@ -10,6 +10,7 @@ import com.intellij.openapi.application.impl.coroutineDispatchingContext
import com.intellij.openapi.application.runUndoTransparentWriteAction
import com.intellij.openapi.command.impl.UndoManagerImpl
import com.intellij.openapi.command.undo.DocumentReferenceManager
import com.intellij.openapi.command.undo.UndoManager
import com.intellij.openapi.components.impl.stores.IProjectStore
import com.intellij.openapi.diagnostic.Logger
import com.intellij.openapi.module.Module
@@ -97,6 +98,12 @@ class ProjectRule(val projectDescriptor: LightProjectDescriptor = LightProjectDe
public override fun after() {
if (projectOpened.compareAndSet(true, false)) {
if (sharedProject != null) {
ApplicationManager.getApplication().invokeAndWait {
(UndoManager.getInstance(sharedProject!!) as UndoManagerImpl).dropHistoryInTests()
(UndoManager.getInstance(sharedProject!!) as UndoManagerImpl).flushCurrentCommandMerger()
}
}
sharedProject?.let { runInEdtAndWait { ProjectManagerEx.getInstanceEx().forceCloseProject(it, false) } }
}
}