diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/GradleImportHelper.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/GradleImportHelper.kt index a3579bccdc5..661d3ac82ba 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/GradleImportHelper.kt +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/GradleImportHelper.kt @@ -22,16 +22,13 @@ import org.jetbrains.plugins.gradle.settings.GradleProjectSettings import org.jetbrains.plugins.gradle.util.GradleConstants fun runPartialGradleImport(project: Project) { - val gradleSettings = ExternalSystemApiUtil.getSettings(project, GradleConstants.SYSTEM_ID) - val projectSettings = gradleSettings.getLinkedProjectsSettings() - .filterIsInstance() - .firstOrNull() ?: return - - ExternalSystemUtil.refreshProject( - projectSettings.externalProjectPath, - ImportSpecBuilder(project, GradleConstants.SYSTEM_ID) - .build() - ) + getGradleProjectSettings(project).forEach { + ExternalSystemUtil.refreshProject( + it.externalProjectPath, + ImportSpecBuilder(project, GradleConstants.SYSTEM_ID) + .build() + ) + } } private const val kotlinDslNotificationGroupId = "Gradle Kotlin DSL Scripts" diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/GradleImportHelper.kt.201 b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/GradleImportHelper.kt.201 index 97b7984ad2a..b41b7cb94ad 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/GradleImportHelper.kt.201 +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/GradleImportHelper.kt.201 @@ -31,18 +31,15 @@ import org.jetbrains.plugins.gradle.util.GradleConstants import java.util.function.Predicate fun runPartialGradleImport(project: Project) { - val gradleSettings = ExternalSystemApiUtil.getSettings(project, GradleConstants.SYSTEM_ID) - val projectSettings = gradleSettings.getLinkedProjectsSettings() - .filterIsInstance() - .firstOrNull() ?: return - - ExternalSystemUtil.refreshProject( - projectSettings.externalProjectPath, - ImportSpecBuilder(project, GradleConstants.SYSTEM_ID) - .projectResolverPolicy( - GradlePartialResolverPolicy(Predicate { it is KotlinDslScriptModelResolver }) - ) - ) + getGradleProjectSettings(project).forEach { + ExternalSystemUtil.refreshProject( + it.externalProjectPath, + ImportSpecBuilder(project, GradleConstants.SYSTEM_ID) + .projectResolverPolicy( + GradlePartialResolverPolicy(Predicate { it is KotlinDslScriptModelResolver }) + ) + ) + } } private var Project.shouldShowLoadConfiguraionsAction: Boolean? diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScrtiptModelProcessor.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScrtiptModelProcessor.kt index 11441811d99..164fb233fa2 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScrtiptModelProcessor.kt +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScrtiptModelProcessor.kt @@ -7,7 +7,6 @@ package org.jetbrains.kotlin.idea.scripting.gradle.importing import com.intellij.openapi.components.service import com.intellij.openapi.externalSystem.model.task.ExternalSystemTaskId -import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil import com.intellij.openapi.project.Project import com.intellij.openapi.util.Key import com.intellij.openapi.vfs.VfsUtil @@ -17,15 +16,13 @@ import org.jetbrains.kotlin.idea.KotlinIdeaGradleBundle import org.jetbrains.kotlin.idea.scripting.gradle.GradleScriptInputsWatcher import org.jetbrains.kotlin.idea.scripting.gradle.GradleScriptingSupport import org.jetbrains.kotlin.idea.scripting.gradle.getGradleScriptInputsStamp +import org.jetbrains.kotlin.idea.scripting.gradle.getJavaHomeForGradleProject import org.jetbrains.kotlin.psi.NotNullableUserDataProperty import org.jetbrains.kotlin.scripting.definitions.findScriptDefinition import org.jetbrains.kotlin.scripting.resolve.ScriptCompilationConfigurationWrapper import org.jetbrains.kotlin.scripting.resolve.VirtualFileScriptSource import org.jetbrains.kotlin.scripting.resolve.adjustByDefinition import org.jetbrains.plugins.gradle.service.project.ProjectResolverContext -import org.jetbrains.plugins.gradle.settings.GradleExecutionSettings -import org.jetbrains.plugins.gradle.settings.GradleProjectSettings -import org.jetbrains.plugins.gradle.util.GradleConstants import java.io.File import kotlin.script.experimental.api.* import kotlin.script.experimental.jvm.JvmDependency @@ -115,17 +112,7 @@ private fun KotlinDslScriptsModel.toListOfScriptModels(project: Project): List().firstOrNull() ?: return null - - val gradleExeSettings = ExternalSystemApiUtil.getExecutionSettings( - project, - gradleProjectSettings.externalProjectPath, - GradleConstants.SYSTEM_ID - ) - - val javaHome = gradleExeSettings.javaHome?.let { File(it)} + val javaHome = getJavaHomeForGradleProject(project)?.let { File(it)} return GradleKtsContext(project, javaHome) } diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslSyncListener.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslSyncListener.kt index cda3e05179f..c05ef6eaa14 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslSyncListener.kt +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslSyncListener.kt @@ -8,11 +8,8 @@ package org.jetbrains.kotlin.idea.scripting.gradle.importing import com.intellij.openapi.externalSystem.model.task.ExternalSystemTaskId import com.intellij.openapi.externalSystem.model.task.ExternalSystemTaskNotificationListenerAdapter import com.intellij.openapi.externalSystem.model.task.ExternalSystemTaskType -import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil import org.jetbrains.kotlin.idea.framework.GRADLE_SYSTEM_ID -import org.jetbrains.plugins.gradle.settings.GradleExecutionSettings -import org.jetbrains.plugins.gradle.settings.GradleProjectSettings -import org.jetbrains.plugins.gradle.util.GradleConstants +import org.jetbrains.kotlin.idea.scripting.gradle.getJavaHomeForGradleProject class KotlinDslSyncListener : ExternalSystemTaskNotificationListenerAdapter() { override fun onEnd(id: ExternalSystemTaskId) { @@ -27,17 +24,8 @@ class KotlinDslSyncListener : ExternalSystemTaskNotificationListenerAdapter() { if (models.isEmpty()) return - val gradleSettings = ExternalSystemApiUtil.getSettings(project, GradleConstants.SYSTEM_ID) - val projectSettings = gradleSettings.getLinkedProjectsSettings() - .filterIsInstance().firstOrNull() - ?: return + val javaHome = getJavaHomeForGradleProject(project) - val gradleExeSettings = ExternalSystemApiUtil.getExecutionSettings( - project, - projectSettings.externalProjectPath, - GradleConstants.SYSTEM_ID - ) - - saveScriptModels(project, id, gradleExeSettings.javaHome, models) + saveScriptModels(project, id, javaHome, models) } } diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/utils.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/utils.kt index f5eeb4f9f3c..68a9c4d3f73 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/utils.kt +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/utils.kt @@ -20,6 +20,7 @@ import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtScriptInitializer import org.jetbrains.kotlin.psi.psiUtil.getChildrenOfType import org.jetbrains.plugins.gradle.settings.GradleLocalSettings +import org.jetbrains.plugins.gradle.settings.GradleExecutionSettings import org.jetbrains.plugins.gradle.settings.GradleProjectSettings import org.jetbrains.plugins.gradle.settings.GradleSettings import org.jetbrains.plugins.gradle.util.GradleConstants @@ -69,7 +70,8 @@ fun getGradleScriptInputsStamp( super.visitElement(element) when (element) { is PsiWhiteSpace -> if (element.text.contains("\n")) result.append("\n") - is PsiComment -> { } + is PsiComment -> { + } is LeafPsiElement -> result.append(element.text) } } @@ -93,7 +95,7 @@ fun useScriptConfigurationFromImportOnly(): Boolean { return Registry.`is`("kotlin.gradle.scripts.useIdeaProjectImport", false) } -fun getGradleVersion(externalProjectPath: String): String? { +fun getGradleVersion(project: Project, externalProjectPath: String): String? { val localVersion = GradleLocalSettings.getInstance(project).getGradleVersion(externalProjectPath) if (localVersion != null) return localVersion @@ -101,13 +103,26 @@ fun getGradleVersion(externalProjectPath: String): String? { } fun getGradleVersion(project: Project): String? { - val gradleSettings = ExternalSystemApiUtil.getSettings(project, GradleConstants.SYSTEM_ID) - val projectSettings = gradleSettings.getLinkedProjectsSettings() - .filterIsInstance() - .firstOrNull() + val projectSettings = getGradleProjectSettings(project).firstOrNull() if (projectSettings != null) { return getGradleVersion(projectSettings.externalProjectPath) } return null -} \ No newline at end of file +} + +fun getJavaHomeForGradleProject(project: Project): String? { + val projectSettings = getGradleProjectSettings(project).firstOrNull() ?: return null + + val gradleExeSettings = ExternalSystemApiUtil.getExecutionSettings( + project, + projectSettings.externalProjectPath, + GradleConstants.SYSTEM_ID + ) + return gradleExeSettings.javaHome +} + +fun getGradleProjectSettings(project: Project): Collection { + val gradleSettings = ExternalSystemApiUtil.getSettings(project, GradleConstants.SYSTEM_ID) as GradleSettings + return gradleSettings.getLinkedProjectsSettings() +}