Fix sdk duplication in ProjectSdkTable in tests

This commit is contained in:
Natalia Selezneva
2020-05-19 16:22:12 +03:00
committed by Sergey Rostov
parent 72aba2fce2
commit 5212054af6
7 changed files with 36 additions and 36 deletions
@@ -137,7 +137,9 @@ abstract class GradleImportingTestCase : ExternalSystemImportingTestCase() {
val jdkHomeDir = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(File(myJdkHome))!! val jdkHomeDir = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(File(myJdkHome))!!
val jdk = SdkConfigurationUtil.setupSdk(arrayOfNulls(0), jdkHomeDir, JavaSdk.getInstance(), true, null, GRADLE_JDK_NAME) val jdk = SdkConfigurationUtil.setupSdk(arrayOfNulls(0), jdkHomeDir, JavaSdk.getInstance(), true, null, GRADLE_JDK_NAME)
TestCase.assertNotNull("Cannot create JDK for $myJdkHome", jdk) TestCase.assertNotNull("Cannot create JDK for $myJdkHome", jdk)
jdkTable.addJdk(jdk!!) if (!jdkTable.allJdks.contains(jdk)) {
jdkTable.addJdk(jdk!!, testRootDisposable)
}
FileTypeManager.getInstance().associateExtension(GroovyFileType.GROOVY_FILE_TYPE, "gradle") FileTypeManager.getInstance().associateExtension(GroovyFileType.GROOVY_FILE_TYPE, "gradle")
} }
@@ -12,6 +12,7 @@ import com.intellij.openapi.projectRoots.SimpleJavaSdkType
import com.intellij.testFramework.IdeaTestUtil import com.intellij.testFramework.IdeaTestUtil
import com.intellij.testFramework.PlatformTestCase import com.intellij.testFramework.PlatformTestCase
import org.jetbrains.kotlin.idea.test.KotlinSdkCreationChecker import org.jetbrains.kotlin.idea.test.KotlinSdkCreationChecker
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase
import org.jetbrains.kotlin.test.testFramework.runWriteAction import org.jetbrains.kotlin.test.testFramework.runWriteAction
import org.jetbrains.kotlin.tools.projectWizard.cli.* import org.jetbrains.kotlin.tools.projectWizard.cli.*
import org.jetbrains.kotlin.tools.projectWizard.core.service.Services import org.jetbrains.kotlin.tools.projectWizard.core.service.Services
@@ -40,7 +41,7 @@ abstract class AbstractNewWizardProjectImportTest : PlatformTestCase() {
super.setUp() super.setUp()
runWriteAction { runWriteAction {
val sdk = SimpleJavaSdkType().createJdk(SDK_NAME, IdeaTestUtil.requireRealJdkHome()) val sdk = SimpleJavaSdkType().createJdk(SDK_NAME, IdeaTestUtil.requireRealJdkHome())
ProjectJdkTable.getInstance().addJdk(sdk, project) PluginTestCaseBase.addJdk(testRootDisposable, { sdk })
} }
sdkCreationChecker = KotlinSdkCreationChecker() sdkCreationChecker = KotlinSdkCreationChecker()
} }
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.idea.framework package org.jetbrains.kotlin.idea.framework
import com.intellij.openapi.Disposable
import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.projectRoots.* import com.intellij.openapi.projectRoots.*
import com.intellij.openapi.projectRoots.impl.ProjectJdkImpl import com.intellij.openapi.projectRoots.impl.ProjectJdkImpl
@@ -27,7 +28,7 @@ class KotlinSdkType : SdkType("KotlinSDK") {
get() = PathUtil.kotlinPathsForIdeaPlugin.homePath.absolutePath get() = PathUtil.kotlinPathsForIdeaPlugin.homePath.absolutePath
@JvmOverloads @JvmOverloads
fun setUpIfNeeded(checkIfNeeded: () -> Boolean = { true }) { fun setUpIfNeeded(disposable: Disposable? = null, checkIfNeeded: () -> Boolean = { true }) {
val projectSdks: Array<Sdk> = ProjectJdkTable.getInstance().allJdks val projectSdks: Array<Sdk> = ProjectJdkTable.getInstance().allJdks
if (projectSdks.any { it.sdkType is KotlinSdkType }) return if (projectSdks.any { it.sdkType is KotlinSdkType }) return
if (!checkIfNeeded()) return // do not create Kotlin SDK if (!checkIfNeeded()) return // do not create Kotlin SDK
@@ -40,7 +41,11 @@ class KotlinSdkType : SdkType("KotlinSDK") {
ApplicationManager.getApplication().invokeAndWait { ApplicationManager.getApplication().invokeAndWait {
runWriteAction { runWriteAction {
if (ProjectJdkTable.getInstance().allJdks.any { it.sdkType is KotlinSdkType }) return@runWriteAction if (ProjectJdkTable.getInstance().allJdks.any { it.sdkType is KotlinSdkType }) return@runWriteAction
ProjectJdkTable.getInstance().addJdk(newJdk) if (disposable != null) {
ProjectJdkTable.getInstance().addJdk(newJdk, disposable)
} else {
ProjectJdkTable.getInstance().addJdk(newJdk)
}
} }
} }
} }
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.idea.framework package org.jetbrains.kotlin.idea.framework
import com.intellij.openapi.Disposable
import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.projectRoots.* import com.intellij.openapi.projectRoots.*
import com.intellij.openapi.projectRoots.impl.ProjectJdkImpl import com.intellij.openapi.projectRoots.impl.ProjectJdkImpl
@@ -27,7 +28,7 @@ class KotlinSdkType : SdkType("KotlinSDK") {
get() = PathUtil.kotlinPathsForIdeaPlugin.homePath.absolutePath get() = PathUtil.kotlinPathsForIdeaPlugin.homePath.absolutePath
@JvmOverloads @JvmOverloads
fun setUpIfNeeded(checkIfNeeded: () -> Boolean = { true }) { fun setUpIfNeeded(disposable: Disposable? = null, checkIfNeeded: () -> Boolean = { true }) {
val projectSdks: Array<Sdk> = ProjectJdkTable.getInstance().allJdks val projectSdks: Array<Sdk> = ProjectJdkTable.getInstance().allJdks
if (projectSdks.any { it.sdkType is KotlinSdkType }) return if (projectSdks.any { it.sdkType is KotlinSdkType }) return
if (!checkIfNeeded()) return // do not create Kotlin SDK if (!checkIfNeeded()) return // do not create Kotlin SDK
@@ -40,7 +41,11 @@ class KotlinSdkType : SdkType("KotlinSDK") {
ApplicationManager.getApplication().invokeAndWait { ApplicationManager.getApplication().invokeAndWait {
runWriteAction { runWriteAction {
if (ProjectJdkTable.getInstance().allJdks.any { it.sdkType is KotlinSdkType }) return@runWriteAction if (ProjectJdkTable.getInstance().allJdks.any { it.sdkType is KotlinSdkType }) return@runWriteAction
ProjectJdkTable.getInstance().addJdk(newJdk) if (disposable != null) {
ProjectJdkTable.getInstance().addJdk(newJdk, disposable)
} else {
ProjectJdkTable.getInstance().addJdk(newJdk)
}
} }
} }
} }
@@ -26,6 +26,7 @@ import org.jetbrains.kotlin.idea.caches.project.ModuleTestSourceInfo
import org.jetbrains.kotlin.idea.framework.CommonLibraryKind import org.jetbrains.kotlin.idea.framework.CommonLibraryKind
import org.jetbrains.kotlin.idea.framework.JSLibraryKind import org.jetbrains.kotlin.idea.framework.JSLibraryKind
import org.jetbrains.kotlin.idea.framework.platform import org.jetbrains.kotlin.idea.framework.platform
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase.* import org.jetbrains.kotlin.idea.test.PluginTestCaseBase.*
import org.jetbrains.kotlin.idea.util.application.runWriteAction import org.jetbrains.kotlin.idea.util.application.runWriteAction
import org.jetbrains.kotlin.idea.util.getProjectJdkTableSafe import org.jetbrains.kotlin.idea.util.getProjectJdkTableSafe
@@ -349,10 +350,8 @@ class IdeaModuleInfoTest : ModuleTestCase() {
fun testSdkForScript() { fun testSdkForScript() {
// The first known jdk will be used for scripting if there is no jdk in the project // The first known jdk will be used for scripting if there is no jdk in the project
runWriteAction { runWriteAction {
val jdkTable = getProjectJdkTableSafe() addJdk(testRootDisposable, ::mockJdk6)
addJdk(testRootDisposable, ::mockJdk9)
jdkTable.addJdk(mockJdk6())
jdkTable.addJdk(mockJdk9())
ProjectRootManager.getInstance(project).projectSdk = null ProjectRootManager.getInstance(project).projectSdk = null
} }
@@ -366,10 +365,8 @@ class IdeaModuleInfoTest : ModuleTestCase() {
fun testSdkForScriptProjectSdk() { fun testSdkForScriptProjectSdk() {
runWriteAction { runWriteAction {
val jdkTable = getProjectJdkTableSafe() addJdk(testRootDisposable, ::mockJdk6)
addJdk(testRootDisposable, ::mockJdk9)
jdkTable.addJdk(mockJdk6())
jdkTable.addJdk(mockJdk9())
ProjectRootManager.getInstance(project).projectSdk = mockJdk9() ProjectRootManager.getInstance(project).projectSdk = mockJdk9()
} }
@@ -383,10 +380,8 @@ class IdeaModuleInfoTest : ModuleTestCase() {
val a = module("a") val a = module("a")
runWriteAction { runWriteAction {
val jdkTable = getProjectJdkTableSafe() addJdk(testRootDisposable, ::mockJdk6)
addJdk(testRootDisposable, ::mockJdk9)
jdkTable.addJdk(mockJdk6())
jdkTable.addJdk(mockJdk9())
ProjectRootManager.getInstance(project).projectSdk = mockJdk6() ProjectRootManager.getInstance(project).projectSdk = mockJdk6()
with(ModuleRootManager.getInstance(a).modifiableModel) { with(ModuleRootManager.getInstance(a).modifiableModel) {
@@ -493,8 +488,6 @@ class IdeaModuleInfoTest : ModuleTestCase() {
} }
override fun tearDown() { override fun tearDown() {
clearSdkTable(testRootDisposable)
VfsRootAccess.disallowRootAccess(KotlinTestUtils.getHomeDirectory()) VfsRootAccess.disallowRootAccess(KotlinTestUtils.getHomeDirectory())
super.tearDown() super.tearDown()
@@ -21,6 +21,7 @@ import junit.framework.TestCase
import org.jetbrains.kotlin.idea.configuration.KotlinWithLibraryConfigurator.FileState import org.jetbrains.kotlin.idea.configuration.KotlinWithLibraryConfigurator.FileState
import org.jetbrains.kotlin.idea.framework.KotlinSdkType import org.jetbrains.kotlin.idea.framework.KotlinSdkType
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase import org.jetbrains.kotlin.idea.test.PluginTestCaseBase
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase.*
import org.jetbrains.kotlin.idea.util.getProjectJdkTableSafe import org.jetbrains.kotlin.idea.util.getProjectJdkTableSafe
import org.jetbrains.kotlin.test.KotlinTestUtils import org.jetbrains.kotlin.test.KotlinTestUtils
import org.jetbrains.kotlin.test.isIgnoredInDatabaseWithLog import org.jetbrains.kotlin.test.isIgnoredInDatabaseWithLog
@@ -47,18 +48,14 @@ abstract class AbstractConfigureKotlinTest : PlatformTestCase() {
override fun initApplication() { override fun initApplication() {
super.initApplication() super.initApplication()
KotlinSdkType.setUpIfNeeded() KotlinSdkType.setUpIfNeeded(testRootDisposable)
ApplicationManager.getApplication().runWriteAction { ApplicationManager.getApplication().runWriteAction {
val jdkTable = getProjectJdkTableSafe() addJdk(testRootDisposable, ::mockJdk6)
addJdk(testRootDisposable, ::mockJdk8)
jdkTable.addJdk(PluginTestCaseBase.mockJdk6()) addJdk(testRootDisposable, ::mockJdk9)
jdkTable.addJdk(PluginTestCaseBase.mockJdk8())
jdkTable.addJdk(PluginTestCaseBase.mockJdk9())
} }
PluginTestCaseBase.clearSdkTable(testRootDisposable)
val tempLibDir = FileUtil.createTempDirectory("temp", null) val tempLibDir = FileUtil.createTempDirectory("temp", null)
PathMacros.getInstance().setMacro(TEMP_DIR_MACRO_KEY, FileUtilRt.toSystemDependentName(tempLibDir.absolutePath)) PathMacros.getInstance().setMacro(TEMP_DIR_MACRO_KEY, FileUtilRt.toSystemDependentName(tempLibDir.absolutePath))
} }
@@ -77,12 +77,11 @@ abstract class AbstractScriptConfigurationTest : KotlinCompletionTestCase() {
} }
private val sdk by lazy { private val sdk by lazy {
val jdk = PluginTestCaseBase.jdk(TestJdkKind.MOCK_JDK)
runWriteAction { runWriteAction {
getProjectJdkTableSafe().addJdk(jdk, testRootDisposable) val sdk = PluginTestCaseBase.addJdk(testRootDisposable) { PluginTestCaseBase.jdk(TestJdkKind.MOCK_JDK) }
ProjectRootManager.getInstance(project).projectSdk = jdk ProjectRootManager.getInstance(project).projectSdk = sdk
sdk
} }
jdk
} }
protected fun configureScriptFile(path: String) { protected fun configureScriptFile(path: String) {
@@ -225,10 +224,8 @@ abstract class AbstractScriptConfigurationTest : KotlinCompletionTestCase() {
else -> TestJdkKind.MOCK_JDK else -> TestJdkKind.MOCK_JDK
} }
runWriteAction { runWriteAction {
val jdk = PluginTestCaseBase.jdk(jdkKind) val jdk = PluginTestCaseBase.addJdk(testRootDisposable) {
val projectJdkTable = getProjectJdkTableSafe() PluginTestCaseBase.jdk(jdkKind)
if (jdk !in projectJdkTable.allJdks) {
projectJdkTable.addJdk(jdk, testRootDisposable)
} }
env["javaHome"] = File(jdk.homePath) env["javaHome"] = File(jdk.homePath)
} }