Fix AWT freeze in KotlinNativeABICompatibilityChecker (part 2)

Issue #KT-35052
This commit is contained in:
Dmitriy Dolovov
2019-11-22 20:57:54 +07:00
parent 0747a4d9b7
commit 58dd9a6004
17 changed files with 73 additions and 53 deletions
@@ -8,13 +8,12 @@ package org.jetbrains.kotlin.idea.caches.project
import com.intellij.openapi.module.Module import com.intellij.openapi.module.Module
import com.intellij.openapi.module.ModuleManager import com.intellij.openapi.module.ModuleManager
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.openapi.projectRoots.ProjectJdkTable
import com.intellij.openapi.projectRoots.Sdk import com.intellij.openapi.projectRoots.Sdk
import com.intellij.openapi.roots.JdkOrderEntry import com.intellij.openapi.roots.JdkOrderEntry
import com.intellij.openapi.roots.LibraryOrderEntry import com.intellij.openapi.roots.LibraryOrderEntry
import com.intellij.openapi.roots.ModuleRootManager import com.intellij.openapi.roots.ModuleRootManager
import org.jetbrains.kotlin.caches.project.cacheInvalidatingOnRootModifications import org.jetbrains.kotlin.caches.project.cacheInvalidatingOnRootModifications
import org.jetbrains.kotlin.idea.util.application.runReadAction import org.jetbrains.kotlin.idea.util.getProjectJdkTableSafe
import org.jetbrains.kotlin.platform.TargetPlatform import org.jetbrains.kotlin.platform.TargetPlatform
import org.jetbrains.kotlin.platform.isCommon import org.jetbrains.kotlin.platform.isCommon
import org.jetbrains.kotlin.types.typeUtil.closure import org.jetbrains.kotlin.types.typeUtil.closure
@@ -93,6 +92,4 @@ private fun mergePlatformModules(
return rest + platformModules return rest + platformModules
} }
internal fun getAllProjectSdks(): Array<Sdk> = runReadAction { internal fun getAllProjectSdks(): Array<Sdk> = getProjectJdkTableSafe().allJdks
ProjectJdkTable.getInstance().allJdks
}
@@ -0,0 +1,13 @@
/*
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
@file:JvmName("IjPlatformUtil")
package org.jetbrains.kotlin.idea.util
import com.intellij.openapi.projectRoots.ProjectJdkTable
import org.jetbrains.kotlin.idea.util.application.runReadAction
fun getProjectJdkTableSafe(): ProjectJdkTable = runReadAction { ProjectJdkTable.getInstance() }
@@ -19,7 +19,6 @@ import com.intellij.openapi.extensions.Extensions
import com.intellij.openapi.fileTypes.FileTypeManager import com.intellij.openapi.fileTypes.FileTypeManager
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.openapi.projectRoots.JavaSdk import com.intellij.openapi.projectRoots.JavaSdk
import com.intellij.openapi.projectRoots.ProjectJdkTable
import com.intellij.openapi.projectRoots.ex.PathUtilEx import com.intellij.openapi.projectRoots.ex.PathUtilEx
import com.intellij.openapi.roots.ProjectRootManager import com.intellij.openapi.roots.ProjectRootManager
import com.intellij.openapi.vfs.VfsUtil import com.intellij.openapi.vfs.VfsUtil
@@ -29,6 +28,7 @@ import org.jetbrains.kotlin.idea.KotlinFileType
import org.jetbrains.kotlin.idea.caches.project.SdkInfo import org.jetbrains.kotlin.idea.caches.project.SdkInfo
import org.jetbrains.kotlin.idea.caches.project.getScriptRelatedModuleInfo import org.jetbrains.kotlin.idea.caches.project.getScriptRelatedModuleInfo
import org.jetbrains.kotlin.idea.core.script.settings.KotlinScriptingSettings import org.jetbrains.kotlin.idea.core.script.settings.KotlinScriptingSettings
import org.jetbrains.kotlin.idea.util.getProjectJdkTableSafe
import org.jetbrains.kotlin.script.ScriptTemplatesProvider import org.jetbrains.kotlin.script.ScriptTemplatesProvider
import org.jetbrains.kotlin.scripting.definitions.* import org.jetbrains.kotlin.scripting.definitions.*
import org.jetbrains.kotlin.utils.PathUtil import org.jetbrains.kotlin.utils.PathUtil
@@ -343,7 +343,7 @@ class BundledKotlinScriptDependenciesResolver(private val project: Project) : De
} }
val jdk = ProjectRootManager.getInstance(project).projectSdk val jdk = ProjectRootManager.getInstance(project).projectSdk
?: ProjectJdkTable.getInstance().allJdks.firstOrNull { sdk -> sdk.sdkType is JavaSdk } ?: getProjectJdkTableSafe().allJdks.firstOrNull { sdk -> sdk.sdkType is JavaSdk }
?: PathUtilEx.getAnyJdk(project) ?: PathUtilEx.getAnyJdk(project)
return jdk?.homePath return jdk?.homePath
} }
@@ -26,7 +26,6 @@ import com.intellij.openapi.externalSystem.util.ExternalSystemUtil
import com.intellij.openapi.fileTypes.FileTypeManager import com.intellij.openapi.fileTypes.FileTypeManager
import com.intellij.openapi.module.ModuleManager import com.intellij.openapi.module.ModuleManager
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.openapi.projectRoots.ProjectJdkTable
import com.intellij.openapi.projectRoots.SimpleJavaSdkType import com.intellij.openapi.projectRoots.SimpleJavaSdkType
import com.intellij.openapi.roots.ModuleRootManager import com.intellij.openapi.roots.ModuleRootManager
import com.intellij.openapi.roots.ProjectRootManager import com.intellij.openapi.roots.ProjectRootManager
@@ -46,6 +45,7 @@ import junit.framework.TestCase
import org.jetbrains.kotlin.idea.codeInsight.gradle.ExternalSystemImportingTestCase.LATEST_STABLE_GRADLE_PLUGIN_VERSION import org.jetbrains.kotlin.idea.codeInsight.gradle.ExternalSystemImportingTestCase.LATEST_STABLE_GRADLE_PLUGIN_VERSION
import org.jetbrains.kotlin.idea.codeInsight.gradle.GradleImportingTestCase import org.jetbrains.kotlin.idea.codeInsight.gradle.GradleImportingTestCase
import org.jetbrains.kotlin.idea.configuration.KotlinGradleAbstractMultiplatformModuleBuilder import org.jetbrains.kotlin.idea.configuration.KotlinGradleAbstractMultiplatformModuleBuilder
import org.jetbrains.kotlin.idea.util.getProjectJdkTableSafe
import org.jetbrains.plugins.gradle.service.execution.GradleExecutionHelper import org.jetbrains.plugins.gradle.service.execution.GradleExecutionHelper
import org.jetbrains.plugins.gradle.settings.DistributionType import org.jetbrains.plugins.gradle.settings.DistributionType
import org.jetbrains.plugins.gradle.settings.GradleExecutionSettings import org.jetbrains.plugins.gradle.settings.GradleExecutionSettings
@@ -250,7 +250,7 @@ abstract class AbstractGradleMultiplatformWizardTest : ProjectWizardTestCase<Abs
addSdk(SimpleJavaSdkType().createJdk("_other", javaHome)) addSdk(SimpleJavaSdkType().createJdk("_other", javaHome))
println("ProjectWizardTestCase.configureJdk:") println("ProjectWizardTestCase.configureJdk:")
println(listOf(*ProjectJdkTable.getInstance().allJdks)) println(listOf(*getProjectJdkTableSafe().allJdks))
FileTypeManager.getInstance().associateExtension(GroovyFileType.GROOVY_FILE_TYPE, "gradle") FileTypeManager.getInstance().associateExtension(GroovyFileType.GROOVY_FILE_TYPE, "gradle")
} }
@@ -20,7 +20,6 @@ import com.intellij.openapi.application.Result
import com.intellij.openapi.application.WriteAction import com.intellij.openapi.application.WriteAction
import com.intellij.openapi.application.runReadAction import com.intellij.openapi.application.runReadAction
import com.intellij.openapi.projectRoots.JavaSdk import com.intellij.openapi.projectRoots.JavaSdk
import com.intellij.openapi.projectRoots.ProjectJdkTable
import com.intellij.openapi.roots.LibraryOrderEntry import com.intellij.openapi.roots.LibraryOrderEntry
import com.intellij.openapi.roots.ModuleRootManager import com.intellij.openapi.roots.ModuleRootManager
import com.intellij.openapi.roots.OrderRootType import com.intellij.openapi.roots.OrderRootType
@@ -45,6 +44,7 @@ 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.KotlinSdkType import org.jetbrains.kotlin.idea.framework.KotlinSdkType
import org.jetbrains.kotlin.idea.project.languageVersionSettings import org.jetbrains.kotlin.idea.project.languageVersionSettings
import org.jetbrains.kotlin.idea.util.getProjectJdkTableSafe
import org.jetbrains.kotlin.idea.util.projectStructure.allModules import org.jetbrains.kotlin.idea.util.projectStructure.allModules
import org.jetbrains.kotlin.idea.util.projectStructure.sdk import org.jetbrains.kotlin.idea.util.projectStructure.sdk
import org.jetbrains.kotlin.platform.TargetPlatform import org.jetbrains.kotlin.platform.TargetPlatform
@@ -762,7 +762,7 @@ class GradleFacetImportTest : GradleImportingTestCase() {
object : WriteAction<Unit>() { object : WriteAction<Unit>() {
override fun run(result: Result<Unit>) { override fun run(result: Result<Unit>) {
val jdk = JavaSdk.getInstance().createJdk("myJDK", "my/path/to/jdk") val jdk = JavaSdk.getInstance().createJdk("myJDK", "my/path/to/jdk")
ProjectJdkTable.getInstance().addJdk(jdk) getProjectJdkTableSafe().addJdk(jdk)
} }
}.execute() }.execute()
@@ -777,7 +777,7 @@ class GradleFacetImportTest : GradleImportingTestCase() {
} finally { } finally {
object : WriteAction<Unit>() { object : WriteAction<Unit>() {
override fun run(result: Result<Unit>) { override fun run(result: Result<Unit>) {
val jdkTable = ProjectJdkTable.getInstance() val jdkTable = getProjectJdkTableSafe()
jdkTable.removeJdk(jdkTable.findJdk("myJDK")!!) jdkTable.removeJdk(jdkTable.findJdk("myJDK")!!)
} }
}.execute() }.execute()
@@ -28,7 +28,6 @@ import com.intellij.openapi.fileEditor.FileDocumentManager
import com.intellij.openapi.fileEditor.impl.LoadTextUtil import com.intellij.openapi.fileEditor.impl.LoadTextUtil
import com.intellij.openapi.fileTypes.FileTypeManager import com.intellij.openapi.fileTypes.FileTypeManager
import com.intellij.openapi.projectRoots.JavaSdk import com.intellij.openapi.projectRoots.JavaSdk
import com.intellij.openapi.projectRoots.ProjectJdkTable
import com.intellij.openapi.projectRoots.impl.SdkConfigurationUtil import com.intellij.openapi.projectRoots.impl.SdkConfigurationUtil
import com.intellij.openapi.ui.Messages import com.intellij.openapi.ui.Messages
import com.intellij.openapi.ui.TestDialog import com.intellij.openapi.ui.TestDialog
@@ -45,6 +44,7 @@ import org.intellij.lang.annotations.Language
import org.jetbrains.annotations.NonNls import org.jetbrains.annotations.NonNls
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.idea.test.PluginTestCaseBase
import org.jetbrains.kotlin.idea.util.getProjectJdkTableSafe
import org.jetbrains.kotlin.test.JUnitParameterizedWithIdeaConfigurationRunner import org.jetbrains.kotlin.test.JUnitParameterizedWithIdeaConfigurationRunner
import org.jetbrains.kotlin.test.KotlinTestUtils import org.jetbrains.kotlin.test.KotlinTestUtils
import org.jetbrains.plugins.gradle.settings.DistributionType import org.jetbrains.plugins.gradle.settings.DistributionType
@@ -110,13 +110,14 @@ abstract class GradleImportingTestCase : ExternalSystemImportingTestCase() {
assumeTrue(isApplicableTest()) assumeTrue(isApplicableTest())
assumeThat(gradleVersion, versionMatcherRule.matcher) assumeThat(gradleVersion, versionMatcherRule.matcher)
runWrite { runWrite {
ProjectJdkTable.getInstance().findJdk(GRADLE_JDK_NAME)?.let { val jdkTable = getProjectJdkTableSafe()
ProjectJdkTable.getInstance().removeJdk(it) jdkTable.findJdk(GRADLE_JDK_NAME)?.let {
jdkTable.removeJdk(it)
} }
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)
ProjectJdkTable.getInstance().addJdk(jdk!!) jdkTable.addJdk(jdk!!)
FileTypeManager.getInstance().associateExtension(GroovyFileType.GROOVY_FILE_TYPE, "gradle") FileTypeManager.getInstance().associateExtension(GroovyFileType.GROOVY_FILE_TYPE, "gradle")
} }
@@ -135,7 +136,7 @@ abstract class GradleImportingTestCase : ExternalSystemImportingTestCase() {
override fun tearDown() { override fun tearDown() {
try { try {
runWrite { runWrite {
val old = ProjectJdkTable.getInstance().findJdk(GRADLE_JDK_NAME) val old = getProjectJdkTableSafe().findJdk(GRADLE_JDK_NAME)
if (old != null) { if (old != null) {
SdkConfigurationUtil.removeSdk(old) SdkConfigurationUtil.removeSdk(old)
} }
@@ -20,7 +20,6 @@ import com.intellij.application.options.CodeStyle
import com.intellij.openapi.application.Result import com.intellij.openapi.application.Result
import com.intellij.openapi.application.WriteAction import com.intellij.openapi.application.WriteAction
import com.intellij.openapi.projectRoots.JavaSdk import com.intellij.openapi.projectRoots.JavaSdk
import com.intellij.openapi.projectRoots.ProjectJdkTable
import com.intellij.openapi.roots.CompilerModuleExtension import com.intellij.openapi.roots.CompilerModuleExtension
import com.intellij.openapi.roots.LibraryOrderEntry import com.intellij.openapi.roots.LibraryOrderEntry
import com.intellij.openapi.roots.ModuleRootManager import com.intellij.openapi.roots.ModuleRootManager
@@ -45,6 +44,7 @@ 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.KotlinSdkType import org.jetbrains.kotlin.idea.framework.KotlinSdkType
import org.jetbrains.kotlin.idea.project.languageVersionSettings import org.jetbrains.kotlin.idea.project.languageVersionSettings
import org.jetbrains.kotlin.idea.util.getProjectJdkTableSafe
import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.test.JUnit3WithIdeaConfigurationRunner import org.jetbrains.kotlin.test.JUnit3WithIdeaConfigurationRunner
import org.jetbrains.kotlin.platform.CommonPlatforms import org.jetbrains.kotlin.platform.CommonPlatforms
@@ -2540,7 +2540,7 @@ class KotlinMavenImporterTest : MavenImportingTestCase() {
object : WriteAction<Unit>() { object : WriteAction<Unit>() {
override fun run(result: Result<Unit>) { override fun run(result: Result<Unit>) {
val jdk = JavaSdk.getInstance().createJdk("myJDK", "my/path/to/jdk") val jdk = JavaSdk.getInstance().createJdk("myJDK", "my/path/to/jdk")
ProjectJdkTable.getInstance().addJdk(jdk) getProjectJdkTableSafe().addJdk(jdk)
} }
}.execute() }.execute()
@@ -2597,7 +2597,7 @@ class KotlinMavenImporterTest : MavenImportingTestCase() {
} finally { } finally {
object : WriteAction<Unit>() { object : WriteAction<Unit>() {
override fun run(result: Result<Unit>) { override fun run(result: Result<Unit>) {
val jdkTable = ProjectJdkTable.getInstance() val jdkTable = getProjectJdkTableSafe()
jdkTable.removeJdk(jdkTable.findJdk("myJDK")!!) jdkTable.removeJdk(jdkTable.findJdk("myJDK")!!)
} }
}.execute() }.execute()
@@ -18,7 +18,6 @@ package org.jetbrains.kotlin.idea.test
import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.module.Module import com.intellij.openapi.module.Module
import com.intellij.openapi.projectRoots.ProjectJdkTable
import com.intellij.openapi.projectRoots.Sdk import com.intellij.openapi.projectRoots.Sdk
import com.intellij.openapi.roots.LibraryOrderEntry import com.intellij.openapi.roots.LibraryOrderEntry
import com.intellij.openapi.roots.ModifiableRootModel import com.intellij.openapi.roots.ModifiableRootModel
@@ -33,6 +32,7 @@ import com.intellij.openapi.vfs.VfsUtil
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.util.application.runWriteAction import org.jetbrains.kotlin.idea.util.application.runWriteAction
import org.jetbrains.kotlin.idea.util.getProjectJdkTableSafe
import org.jetbrains.kotlin.test.InTextDirectivesUtils import org.jetbrains.kotlin.test.InTextDirectivesUtils
import org.jetbrains.kotlin.utils.PathUtil import org.jetbrains.kotlin.utils.PathUtil
import java.io.File import java.io.File
@@ -109,7 +109,7 @@ object ConfigLibraryUtil {
val rootModel = rootManager.modifiableModel val rootModel = rootManager.modifiableModel
assertNotNull( assertNotNull(
ProjectJdkTable.getInstance().findJdk(sdk.name), getProjectJdkTableSafe().findJdk(sdk.name),
"Cannot find sdk in ProjectJdkTable. This may cause sdk leak.\n" + "Cannot find sdk in ProjectJdkTable. This may cause sdk leak.\n" +
"You can use ProjectPluginTestBase.addJdk(Disposable ...) to register sdk in ProjectJdkTable.\n" + "You can use ProjectPluginTestBase.addJdk(Disposable ...) to register sdk in ProjectJdkTable.\n" +
"Then sdk will be removed in tearDown" "Then sdk will be removed in tearDown"
@@ -7,23 +7,23 @@ package org.jetbrains.kotlin.idea.test
import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.application.runWriteAction import com.intellij.openapi.application.runWriteAction
import com.intellij.openapi.projectRoots.ProjectJdkTable
import com.intellij.openapi.projectRoots.Sdk import com.intellij.openapi.projectRoots.Sdk
import org.jetbrains.kotlin.idea.framework.KotlinSdkType import org.jetbrains.kotlin.idea.framework.KotlinSdkType
import org.jetbrains.kotlin.idea.util.getProjectJdkTableSafe
class KotlinSdkCreationChecker { class KotlinSdkCreationChecker {
private val sdksBefore: Array<out Sdk> = ProjectJdkTable.getInstance().allJdks private val sdksBefore: Array<out Sdk> = getProjectJdkTableSafe().allJdks
fun getKotlinSdks() = ProjectJdkTable.getInstance().allJdks.filter { it.sdkType is KotlinSdkType } fun getKotlinSdks() = getProjectJdkTableSafe().allJdks.filter { it.sdkType is KotlinSdkType }
private fun getCreatedKotlinSdks() = private fun getCreatedKotlinSdks() =
ProjectJdkTable.getInstance().allJdks.filter { !sdksBefore.contains(it) && it.sdkType is KotlinSdkType } getProjectJdkTableSafe().allJdks.filter { !sdksBefore.contains(it) && it.sdkType is KotlinSdkType }
fun isKotlinSdkCreated() = getCreatedKotlinSdks().isNotEmpty() fun isKotlinSdkCreated() = getCreatedKotlinSdks().isNotEmpty()
fun removeNewKotlinSdk() { fun removeNewKotlinSdk() {
val jdkTable = ProjectJdkTable.getInstance() val jdkTable = getProjectJdkTableSafe()
ApplicationManager.getApplication().invokeAndWait { ApplicationManager.getApplication().invokeAndWait {
runWriteAction { runWriteAction {
getCreatedKotlinSdks().forEach { jdkTable.removeJdk(it) } getCreatedKotlinSdks().forEach { jdkTable.removeJdk(it) }
@@ -28,6 +28,7 @@ import com.intellij.openapi.vfs.newvfs.impl.VfsRootAccess;
import kotlin.jvm.functions.Function0; import kotlin.jvm.functions.Function0;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.TestOnly; import org.jetbrains.annotations.TestOnly;
import org.jetbrains.kotlin.idea.util.IjPlatformUtil;
import org.jetbrains.kotlin.test.KotlinTestUtils; import org.jetbrains.kotlin.test.KotlinTestUtils;
import org.jetbrains.kotlin.test.TestJdkKind; import org.jetbrains.kotlin.test.TestJdkKind;
@@ -53,7 +54,7 @@ public class PluginTestCaseBase {
@NotNull @NotNull
private static Sdk getSdk(String sdkHome, String name) { private static Sdk getSdk(String sdkHome, String name) {
ProjectJdkTable table = ProjectJdkTable.getInstance(); ProjectJdkTable table = IjPlatformUtil.getProjectJdkTableSafe();
Sdk existing = table.findJdk(name); Sdk existing = table.findJdk(name);
if (existing != null) { if (existing != null) {
return existing; return existing;
@@ -93,7 +94,7 @@ public class PluginTestCaseBase {
@NotNull @NotNull
public static Sdk addJdk(@NotNull Disposable disposable, @NotNull Function0<Sdk> getJdk) { public static Sdk addJdk(@NotNull Disposable disposable, @NotNull Function0<Sdk> getJdk) {
Sdk jdk = getJdk.invoke(); Sdk jdk = getJdk.invoke();
ApplicationManager.getApplication().runWriteAction(() -> ProjectJdkTable.getInstance().addJdk(jdk, disposable)); ApplicationManager.getApplication().runWriteAction(() -> IjPlatformUtil.getProjectJdkTableSafe().addJdk(jdk, disposable));
return jdk; return jdk;
} }
@@ -120,7 +121,7 @@ public class PluginTestCaseBase {
@TestOnly @TestOnly
public static void clearSdkTable(@NotNull Disposable disposable) { public static void clearSdkTable(@NotNull Disposable disposable) {
Disposer.register(disposable, () -> ApplicationManager.getApplication().runWriteAction(() -> { Disposer.register(disposable, () -> ApplicationManager.getApplication().runWriteAction(() -> {
ProjectJdkTable jdkTable = ProjectJdkTable.getInstance(); ProjectJdkTable jdkTable = IjPlatformUtil.getProjectJdkTableSafe();
for (Sdk sdk : jdkTable.getAllJdks()) { for (Sdk sdk : jdkTable.getAllJdks()) {
jdkTable.removeJdk(sdk); jdkTable.removeJdk(sdk);
} }
@@ -28,7 +28,6 @@ import com.intellij.openapi.project.Project
import com.intellij.openapi.project.ex.ProjectManagerEx import com.intellij.openapi.project.ex.ProjectManagerEx
import com.intellij.openapi.project.impl.ProjectImpl import com.intellij.openapi.project.impl.ProjectImpl
import com.intellij.openapi.projectRoots.JavaSdk import com.intellij.openapi.projectRoots.JavaSdk
import com.intellij.openapi.projectRoots.ProjectJdkTable
import com.intellij.openapi.projectRoots.Sdk import com.intellij.openapi.projectRoots.Sdk
import com.intellij.openapi.projectRoots.impl.JavaAwareProjectJdkTableImpl import com.intellij.openapi.projectRoots.impl.JavaAwareProjectJdkTableImpl
import com.intellij.openapi.roots.ProjectRootManager import com.intellij.openapi.roots.ProjectRootManager
@@ -59,6 +58,7 @@ import org.jetbrains.kotlin.idea.testFramework.Fixture.Companion.cleanupCaches
import org.jetbrains.kotlin.idea.testFramework.Fixture.Companion.isAKotlinScriptFile import org.jetbrains.kotlin.idea.testFramework.Fixture.Companion.isAKotlinScriptFile
import org.jetbrains.kotlin.idea.testFramework.Fixture.Companion.openFileInEditor import org.jetbrains.kotlin.idea.testFramework.Fixture.Companion.openFileInEditor
import org.jetbrains.kotlin.idea.testFramework.Fixture.Companion.openFixture import org.jetbrains.kotlin.idea.testFramework.Fixture.Companion.openFixture
import org.jetbrains.kotlin.idea.util.getProjectJdkTableSafe
import java.io.File import java.io.File
import java.nio.file.Paths import java.nio.file.Paths
@@ -89,7 +89,7 @@ abstract class AbstractPerformanceProjectsTest : UsefulTestCase() {
jdk18 = javaSdk.createJdk("1.8", homePath) jdk18 = javaSdk.createJdk("1.8", homePath)
val internal = javaSdk.createJdk("IDEA jdk", homePath) val internal = javaSdk.createJdk("IDEA jdk", homePath)
val jdkTable = ProjectJdkTable.getInstance() val jdkTable = getProjectJdkTableSafe()
jdkTable.addJdk(jdk18, testRootDisposable) jdkTable.addJdk(jdk18, testRootDisposable)
jdkTable.addJdk(internal, testRootDisposable) jdkTable.addJdk(internal, testRootDisposable)
KotlinSdkType.setUpIfNeeded() KotlinSdkType.setUpIfNeeded()
@@ -20,7 +20,6 @@ import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.application.ex.ApplicationEx import com.intellij.openapi.application.ex.ApplicationEx
import com.intellij.openapi.application.runWriteAction import com.intellij.openapi.application.runWriteAction
import com.intellij.openapi.projectRoots.JavaSdk import com.intellij.openapi.projectRoots.JavaSdk
import com.intellij.openapi.projectRoots.ProjectJdkTable
import com.intellij.openapi.projectRoots.impl.JavaAwareProjectJdkTableImpl import com.intellij.openapi.projectRoots.impl.JavaAwareProjectJdkTableImpl
import com.intellij.openapi.vfs.VirtualFile import com.intellij.openapi.vfs.VirtualFile
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
@@ -32,6 +31,7 @@ import com.intellij.xml.XmlSchemaProvider
import org.jetbrains.kotlin.idea.framework.KotlinSdkType import org.jetbrains.kotlin.idea.framework.KotlinSdkType
import org.jetbrains.kotlin.idea.perf.Stats.Companion.tcSuite import org.jetbrains.kotlin.idea.perf.Stats.Companion.tcSuite
import org.jetbrains.kotlin.idea.perf.Stats.Companion.tcTest import org.jetbrains.kotlin.idea.perf.Stats.Companion.tcTest
import org.jetbrains.kotlin.idea.util.getProjectJdkTableSafe
import java.io.* import java.io.*
abstract class WholeProjectPerformanceTest : DaemonAnalyzerTestCase(), WholeProjectFileProvider { abstract class WholeProjectPerformanceTest : DaemonAnalyzerTestCase(), WholeProjectFileProvider {
@@ -57,7 +57,7 @@ abstract class WholeProjectPerformanceTest : DaemonAnalyzerTestCase(), WholeProj
val javaSdk = JavaSdk.getInstance() val javaSdk = JavaSdk.getInstance()
val j8 = javaSdk.createJdk("1.8", homePath) val j8 = javaSdk.createJdk("1.8", homePath)
val jdkTable = ProjectJdkTable.getInstance() val jdkTable = getProjectJdkTableSafe()
jdkTable.addJdk(j8, testRootDisposable) jdkTable.addJdk(j8, testRootDisposable)
KotlinSdkType.setUpIfNeeded() KotlinSdkType.setUpIfNeeded()
} }
@@ -20,7 +20,6 @@ import com.intellij.openapi.externalSystem.service.project.IdeModifiableModelsPr
import com.intellij.openapi.module.Module import com.intellij.openapi.module.Module
import com.intellij.openapi.projectRoots.JavaSdk import com.intellij.openapi.projectRoots.JavaSdk
import com.intellij.openapi.projectRoots.JavaSdkVersion import com.intellij.openapi.projectRoots.JavaSdkVersion
import com.intellij.openapi.projectRoots.ProjectJdkTable
import com.intellij.openapi.roots.ExternalProjectSystemRegistry import com.intellij.openapi.roots.ExternalProjectSystemRegistry
import com.intellij.openapi.roots.ModuleRootManager import com.intellij.openapi.roots.ModuleRootManager
import com.intellij.openapi.roots.ModuleRootModel import com.intellij.openapi.roots.ModuleRootModel
@@ -39,6 +38,7 @@ import org.jetbrains.kotlin.idea.core.isAndroidModule
import org.jetbrains.kotlin.idea.framework.KotlinSdkType import org.jetbrains.kotlin.idea.framework.KotlinSdkType
import org.jetbrains.kotlin.idea.platform.tooling import org.jetbrains.kotlin.idea.platform.tooling
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.platform.* import org.jetbrains.kotlin.platform.*
import org.jetbrains.kotlin.platform.compat.toNewPlatform import org.jetbrains.kotlin.platform.compat.toNewPlatform
import org.jetbrains.kotlin.platform.impl.JvmIdePlatformKind import org.jetbrains.kotlin.platform.impl.JvmIdePlatformKind
@@ -279,7 +279,7 @@ private fun Module.configureSdkIfPossible(compilerArguments: CommonCompilerArgum
val projectSdk = ProjectRootManager.getInstance(project).projectSdk val projectSdk = ProjectRootManager.getInstance(project).projectSdk
KotlinSdkType.setUpIfNeeded() KotlinSdkType.setUpIfNeeded()
val allSdks = ProjectJdkTable.getInstance().allJdks val allSdks = getProjectJdkTableSafe().allJdks
val sdk = if (compilerArguments is K2JVMCompilerArguments) { val sdk = if (compilerArguments is K2JVMCompilerArguments) {
val jdkHome = compilerArguments.jdkHome val jdkHome = compilerArguments.jdkHome
when { when {
@@ -7,7 +7,6 @@ package org.jetbrains.kotlin.idea.caches.resolve
import com.intellij.openapi.module.Module import com.intellij.openapi.module.Module
import com.intellij.openapi.module.StdModuleTypes import com.intellij.openapi.module.StdModuleTypes
import com.intellij.openapi.projectRoots.ProjectJdkTable
import com.intellij.openapi.roots.DependencyScope import com.intellij.openapi.roots.DependencyScope
import com.intellij.openapi.roots.ModuleRootManager import com.intellij.openapi.roots.ModuleRootManager
import com.intellij.openapi.roots.ModuleRootModificationUtil import com.intellij.openapi.roots.ModuleRootModificationUtil
@@ -28,6 +27,7 @@ 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.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.test.JUnit3WithIdeaConfigurationRunner import org.jetbrains.kotlin.test.JUnit3WithIdeaConfigurationRunner
import org.jetbrains.kotlin.test.KotlinTestUtils import org.jetbrains.kotlin.test.KotlinTestUtils
import org.jetbrains.kotlin.test.util.addDependency import org.jetbrains.kotlin.test.util.addDependency
@@ -347,13 +347,15 @@ 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 {
ProjectJdkTable.getInstance().addJdk(mockJdk6()) val jdkTable = getProjectJdkTableSafe()
ProjectJdkTable.getInstance().addJdk(mockJdk9())
jdkTable.addJdk(mockJdk6())
jdkTable.addJdk(mockJdk9())
ProjectRootManager.getInstance(project).projectSdk = null ProjectRootManager.getInstance(project).projectSdk = null
} }
val firstSDK = ProjectJdkTable.getInstance().allJdks.first() val firstSDK = getProjectJdkTableSafe().allJdks.first()
with(createFileInProject("script.kts").moduleInfo) { with(createFileInProject("script.kts").moduleInfo) {
dependencies().filterIsInstance<SdkInfo>().single { it.sdk == firstSDK } dependencies().filterIsInstance<SdkInfo>().single { it.sdk == firstSDK }
@@ -362,8 +364,10 @@ class IdeaModuleInfoTest : ModuleTestCase() {
fun testSdkForScriptProjectSdk() { fun testSdkForScriptProjectSdk() {
runWriteAction { runWriteAction {
ProjectJdkTable.getInstance().addJdk(mockJdk6()) val jdkTable = getProjectJdkTableSafe()
ProjectJdkTable.getInstance().addJdk(mockJdk9())
jdkTable.addJdk(mockJdk6())
jdkTable.addJdk(mockJdk9())
ProjectRootManager.getInstance(project).projectSdk = mockJdk9() ProjectRootManager.getInstance(project).projectSdk = mockJdk9()
} }
@@ -377,8 +381,10 @@ class IdeaModuleInfoTest : ModuleTestCase() {
val a = module("a") val a = module("a")
runWriteAction { runWriteAction {
ProjectJdkTable.getInstance().addJdk(mockJdk6()) val jdkTable = getProjectJdkTableSafe()
ProjectJdkTable.getInstance().addJdk(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) {
@@ -10,7 +10,6 @@ import com.intellij.openapi.application.PathMacros
import com.intellij.openapi.module.Module import com.intellij.openapi.module.Module
import com.intellij.openapi.module.ModuleManager import com.intellij.openapi.module.ModuleManager
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.openapi.projectRoots.ProjectJdkTable
import com.intellij.openapi.projectRoots.Sdk import com.intellij.openapi.projectRoots.Sdk
import com.intellij.openapi.roots.ProjectRootManager import com.intellij.openapi.roots.ProjectRootManager
import com.intellij.openapi.util.io.FileUtil import com.intellij.openapi.util.io.FileUtil
@@ -22,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.util.getProjectJdkTableSafe
import org.jetbrains.kotlin.test.KotlinTestUtils import org.jetbrains.kotlin.test.KotlinTestUtils
import org.jetbrains.kotlin.utils.PathUtil import org.jetbrains.kotlin.utils.PathUtil
import java.io.File import java.io.File
@@ -49,9 +49,11 @@ abstract class AbstractConfigureKotlinTest : PlatformTestCase() {
KotlinSdkType.setUpIfNeeded() KotlinSdkType.setUpIfNeeded()
ApplicationManager.getApplication().runWriteAction { ApplicationManager.getApplication().runWriteAction {
ProjectJdkTable.getInstance().addJdk(PluginTestCaseBase.mockJdk6()) val jdkTable = getProjectJdkTableSafe()
ProjectJdkTable.getInstance().addJdk(PluginTestCaseBase.mockJdk8())
ProjectJdkTable.getInstance().addJdk(PluginTestCaseBase.mockJdk9()) jdkTable.addJdk(PluginTestCaseBase.mockJdk6())
jdkTable.addJdk(PluginTestCaseBase.mockJdk8())
jdkTable.addJdk(PluginTestCaseBase.mockJdk9())
} }
PluginTestCaseBase.clearSdkTable(testRootDisposable) PluginTestCaseBase.clearSdkTable(testRootDisposable)
@@ -5,8 +5,8 @@
package org.jetbrains.kotlin.idea.configuration package org.jetbrains.kotlin.idea.configuration
import com.intellij.openapi.projectRoots.ProjectJdkTable
import org.jetbrains.kotlin.idea.framework.KotlinSdkType import org.jetbrains.kotlin.idea.framework.KotlinSdkType
import org.jetbrains.kotlin.idea.util.getProjectJdkTableSafe
import org.jetbrains.kotlin.test.JUnit3WithIdeaConfigurationRunner import org.jetbrains.kotlin.test.JUnit3WithIdeaConfigurationRunner
import org.junit.Assert import org.junit.Assert
import org.junit.runner.RunWith import org.junit.runner.RunWith
@@ -15,6 +15,6 @@ import org.junit.runner.RunWith
@RunWith(JUnit3WithIdeaConfigurationRunner::class) @RunWith(JUnit3WithIdeaConfigurationRunner::class)
class AutoConfigureKotlinSdkOnStartupTest : AbstractConfigureKotlinInTempDirTest() { class AutoConfigureKotlinSdkOnStartupTest : AbstractConfigureKotlinInTempDirTest() {
fun testKotlinSdkAdded() { fun testKotlinSdkAdded() {
Assert.assertTrue(ProjectJdkTable.getInstance().allJdks.any { it.sdkType is KotlinSdkType }) Assert.assertTrue(getProjectJdkTableSafe().allJdks.any { it.sdkType is KotlinSdkType })
} }
} }
@@ -8,7 +8,6 @@ package org.jetbrains.kotlin.idea.script
import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.module.JavaModuleType import com.intellij.openapi.module.JavaModuleType
import com.intellij.openapi.module.Module import com.intellij.openapi.module.Module
import com.intellij.openapi.projectRoots.ProjectJdkTable
import com.intellij.openapi.projectRoots.Sdk import com.intellij.openapi.projectRoots.Sdk
import com.intellij.openapi.roots.ModuleRootModificationUtil import com.intellij.openapi.roots.ModuleRootModificationUtil
import com.intellij.openapi.roots.ProjectRootManager import com.intellij.openapi.roots.ProjectRootManager
@@ -30,6 +29,7 @@ import org.jetbrains.kotlin.idea.core.script.isScriptChangesNotifierDisabled
import org.jetbrains.kotlin.idea.highlighter.KotlinHighlightingUtil import org.jetbrains.kotlin.idea.highlighter.KotlinHighlightingUtil
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.psi.KtFile import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.scripting.definitions.findScriptDefinition import org.jetbrains.kotlin.scripting.definitions.findScriptDefinition
import org.jetbrains.kotlin.test.KotlinTestUtils import org.jetbrains.kotlin.test.KotlinTestUtils
@@ -78,7 +78,7 @@ abstract class AbstractScriptConfigurationTest : KotlinCompletionTestCase() {
private val sdk by lazy { private val sdk by lazy {
val jdk = PluginTestCaseBase.jdk(TestJdkKind.MOCK_JDK) val jdk = PluginTestCaseBase.jdk(TestJdkKind.MOCK_JDK)
runWriteAction { runWriteAction {
ProjectJdkTable.getInstance().addJdk(jdk, testRootDisposable) getProjectJdkTableSafe().addJdk(jdk, testRootDisposable)
ProjectRootManager.getInstance(project).projectSdk = jdk ProjectRootManager.getInstance(project).projectSdk = jdk
} }
jdk jdk
@@ -208,7 +208,7 @@ abstract class AbstractScriptConfigurationTest : KotlinCompletionTestCase() {
} }
runWriteAction { runWriteAction {
val jdk = PluginTestCaseBase.jdk(jdkKind) val jdk = PluginTestCaseBase.jdk(jdkKind)
ProjectJdkTable.getInstance().addJdk(jdk, testRootDisposable) getProjectJdkTableSafe().addJdk(jdk, testRootDisposable)
env["javaHome"] = File(jdk.homePath) env["javaHome"] = File(jdk.homePath)
} }