From 55f16d56fa8770f885673fdd1740db7ce0e46d9c Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Tue, 30 Apr 2019 19:23:27 +0300 Subject: [PATCH] OMG fix project leak at last (which crashed UsageViewTest) GitOrigin-RevId: c1a6cc0d0f66f3c8ea1a4f0e5ae8cc91555a6fce --- .../testSrc/ModuleStoreRenameTest.kt | 12 ++++++++++++ .../src/com/intellij/testFramework/FixtureRule.kt | 7 +++++++ 2 files changed, 19 insertions(+) diff --git a/platform/configuration-store-impl/testSrc/ModuleStoreRenameTest.kt b/platform/configuration-store-impl/testSrc/ModuleStoreRenameTest.kt index 9108469db9ad..e50ae5b5d0da 100644 --- a/platform/configuration-store-impl/testSrc/ModuleStoreRenameTest.kt +++ b/platform/configuration-store-impl/testSrc/ModuleStoreRenameTest.kt @@ -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 { diff --git a/platform/testFramework/src/com/intellij/testFramework/FixtureRule.kt b/platform/testFramework/src/com/intellij/testFramework/FixtureRule.kt index 1e06e9d9e787..fefb1515f890 100644 --- a/platform/testFramework/src/com/intellij/testFramework/FixtureRule.kt +++ b/platform/testFramework/src/com/intellij/testFramework/FixtureRule.kt @@ -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) } } } }