diff --git a/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/projectStructureDSL.kt b/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/projectStructureDSL.kt index 2c01373844d..60176ff3def 100644 --- a/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/projectStructureDSL.kt +++ b/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/projectStructureDSL.kt @@ -223,6 +223,10 @@ class ModuleInfo( ) } } + + if (rootModel.sdk == null) { + projectInfo.messageCollector.report("Module '${module.name}': No SDK defined") + } } private fun checkDependencyScope(library: ExportableOrderEntry, scope: DependencyScope) { diff --git a/idea/src/org/jetbrains/kotlin/idea/facet/facetUtils.kt b/idea/src/org/jetbrains/kotlin/idea/facet/facetUtils.kt index 909a3950c9d..5bc414f7a88 100644 --- a/idea/src/org/jetbrains/kotlin/idea/facet/facetUtils.kt +++ b/idea/src/org/jetbrains/kotlin/idea/facet/facetUtils.kt @@ -24,6 +24,7 @@ import com.intellij.openapi.projectRoots.ProjectJdkTable import com.intellij.openapi.roots.ExternalProjectSystemRegistry import com.intellij.openapi.roots.ModuleRootManager import com.intellij.openapi.roots.ModuleRootModel +import com.intellij.openapi.roots.ProjectRootManager import com.intellij.openapi.util.io.FileUtil import com.intellij.openapi.util.text.StringUtil import org.jetbrains.kotlin.cli.common.arguments.* @@ -228,22 +229,32 @@ private val CommonCompilerArguments.ignoredFields: List } private fun Module.configureSdkIfPossible(compilerArguments: CommonCompilerArguments, modelsProvider: IdeModifiableModelsProvider) { + val projectSdk = ProjectRootManager.getInstance(project).projectSdk val allSdks = ProjectJdkTable.getInstance().allJdks val sdk = if (compilerArguments is K2JVMCompilerArguments) { val jdkHome = compilerArguments.jdkHome - allSdks.firstOrNull { it.sdkType is JavaSdk && FileUtil.comparePaths(it.homePath, jdkHome) == 0 } + when { + jdkHome != null -> allSdks.firstOrNull { it.sdkType is JavaSdk && FileUtil.comparePaths(it.homePath, jdkHome) == 0 } + projectSdk != null && projectSdk.sdkType is JavaSdk -> projectSdk + else -> allSdks.firstOrNull { it.sdkType is JavaSdk } + } } else { allSdks.firstOrNull { it.sdkType is KotlinSdkType } - ?: modelsProvider - .modifiableModuleModel - .modules - .asSequence() - .mapNotNull { modelsProvider.getModifiableRootModel(it).sdk } - .firstOrNull { it.sdkType is KotlinSdkType } - ?: KotlinSdkType.INSTANCE.createSdkWithUniqueName(allSdks.toList()) + ?: modelsProvider + .modifiableModuleModel + .modules + .asSequence() + .mapNotNull { modelsProvider.getModifiableRootModel(it).sdk } + .firstOrNull { it.sdkType is KotlinSdkType } + ?: KotlinSdkType.INSTANCE.createSdkWithUniqueName(allSdks.toList()) } - modelsProvider.getModifiableRootModel(this).sdk = sdk + val rootModel = modelsProvider.getModifiableRootModel(this) + if (sdk == null || sdk == projectSdk) { + rootModel.inheritSdk() + } else { + rootModel.sdk = sdk + } } fun parseCompilerArgumentsToFacet(