Extract utils methods for getting gradle project settings

This commit is contained in:
Natalia Selezneva
2020-04-22 15:11:32 +03:00
parent f5f69ccc1b
commit f3687dcd00
5 changed files with 43 additions and 59 deletions
@@ -22,16 +22,13 @@ import org.jetbrains.plugins.gradle.settings.GradleProjectSettings
import org.jetbrains.plugins.gradle.util.GradleConstants import org.jetbrains.plugins.gradle.util.GradleConstants
fun runPartialGradleImport(project: Project) { fun runPartialGradleImport(project: Project) {
val gradleSettings = ExternalSystemApiUtil.getSettings(project, GradleConstants.SYSTEM_ID) getGradleProjectSettings(project).forEach {
val projectSettings = gradleSettings.getLinkedProjectsSettings() ExternalSystemUtil.refreshProject(
.filterIsInstance<GradleProjectSettings>() it.externalProjectPath,
.firstOrNull() ?: return ImportSpecBuilder(project, GradleConstants.SYSTEM_ID)
.build()
ExternalSystemUtil.refreshProject( )
projectSettings.externalProjectPath, }
ImportSpecBuilder(project, GradleConstants.SYSTEM_ID)
.build()
)
} }
private const val kotlinDslNotificationGroupId = "Gradle Kotlin DSL Scripts" private const val kotlinDslNotificationGroupId = "Gradle Kotlin DSL Scripts"
@@ -31,18 +31,15 @@ import org.jetbrains.plugins.gradle.util.GradleConstants
import java.util.function.Predicate import java.util.function.Predicate
fun runPartialGradleImport(project: Project) { fun runPartialGradleImport(project: Project) {
val gradleSettings = ExternalSystemApiUtil.getSettings(project, GradleConstants.SYSTEM_ID) getGradleProjectSettings(project).forEach {
val projectSettings = gradleSettings.getLinkedProjectsSettings() ExternalSystemUtil.refreshProject(
.filterIsInstance<GradleProjectSettings>() it.externalProjectPath,
.firstOrNull() ?: return ImportSpecBuilder(project, GradleConstants.SYSTEM_ID)
.projectResolverPolicy(
ExternalSystemUtil.refreshProject( GradlePartialResolverPolicy(Predicate<GradleProjectResolverExtension?> { it is KotlinDslScriptModelResolver })
projectSettings.externalProjectPath, )
ImportSpecBuilder(project, GradleConstants.SYSTEM_ID) )
.projectResolverPolicy( }
GradlePartialResolverPolicy(Predicate<GradleProjectResolverExtension?> { it is KotlinDslScriptModelResolver })
)
)
} }
private var Project.shouldShowLoadConfiguraionsAction: Boolean? private var Project.shouldShowLoadConfiguraionsAction: Boolean?
@@ -7,7 +7,6 @@ package org.jetbrains.kotlin.idea.scripting.gradle.importing
import com.intellij.openapi.components.service import com.intellij.openapi.components.service
import com.intellij.openapi.externalSystem.model.task.ExternalSystemTaskId 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.project.Project
import com.intellij.openapi.util.Key import com.intellij.openapi.util.Key
import com.intellij.openapi.vfs.VfsUtil 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.GradleScriptInputsWatcher
import org.jetbrains.kotlin.idea.scripting.gradle.GradleScriptingSupport import org.jetbrains.kotlin.idea.scripting.gradle.GradleScriptingSupport
import org.jetbrains.kotlin.idea.scripting.gradle.getGradleScriptInputsStamp 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.psi.NotNullableUserDataProperty
import org.jetbrains.kotlin.scripting.definitions.findScriptDefinition import org.jetbrains.kotlin.scripting.definitions.findScriptDefinition
import org.jetbrains.kotlin.scripting.resolve.ScriptCompilationConfigurationWrapper import org.jetbrains.kotlin.scripting.resolve.ScriptCompilationConfigurationWrapper
import org.jetbrains.kotlin.scripting.resolve.VirtualFileScriptSource import org.jetbrains.kotlin.scripting.resolve.VirtualFileScriptSource
import org.jetbrains.kotlin.scripting.resolve.adjustByDefinition import org.jetbrains.kotlin.scripting.resolve.adjustByDefinition
import org.jetbrains.plugins.gradle.service.project.ProjectResolverContext 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 java.io.File
import kotlin.script.experimental.api.* import kotlin.script.experimental.api.*
import kotlin.script.experimental.jvm.JvmDependency import kotlin.script.experimental.jvm.JvmDependency
@@ -115,17 +112,7 @@ private fun KotlinDslScriptsModel.toListOfScriptModels(project: Project): List<K
} }
fun createGradleKtsContextIfPossible(project: Project): GradleKtsContext? { fun createGradleKtsContextIfPossible(project: Project): GradleKtsContext? {
val gradleProjectSettings = ExternalSystemApiUtil.getSettings(project, GradleConstants.SYSTEM_ID) val javaHome = getJavaHomeForGradleProject(project)?.let { File(it)}
.getLinkedProjectsSettings()
.filterIsInstance<GradleProjectSettings>().firstOrNull() ?: return null
val gradleExeSettings = ExternalSystemApiUtil.getExecutionSettings<GradleExecutionSettings>(
project,
gradleProjectSettings.externalProjectPath,
GradleConstants.SYSTEM_ID
)
val javaHome = gradleExeSettings.javaHome?.let { File(it)}
return GradleKtsContext(project, javaHome) return GradleKtsContext(project, javaHome)
} }
@@ -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.ExternalSystemTaskId
import com.intellij.openapi.externalSystem.model.task.ExternalSystemTaskNotificationListenerAdapter import com.intellij.openapi.externalSystem.model.task.ExternalSystemTaskNotificationListenerAdapter
import com.intellij.openapi.externalSystem.model.task.ExternalSystemTaskType 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.kotlin.idea.framework.GRADLE_SYSTEM_ID
import org.jetbrains.plugins.gradle.settings.GradleExecutionSettings import org.jetbrains.kotlin.idea.scripting.gradle.getJavaHomeForGradleProject
import org.jetbrains.plugins.gradle.settings.GradleProjectSettings
import org.jetbrains.plugins.gradle.util.GradleConstants
class KotlinDslSyncListener : ExternalSystemTaskNotificationListenerAdapter() { class KotlinDslSyncListener : ExternalSystemTaskNotificationListenerAdapter() {
override fun onEnd(id: ExternalSystemTaskId) { override fun onEnd(id: ExternalSystemTaskId) {
@@ -27,17 +24,8 @@ class KotlinDslSyncListener : ExternalSystemTaskNotificationListenerAdapter() {
if (models.isEmpty()) return if (models.isEmpty()) return
val gradleSettings = ExternalSystemApiUtil.getSettings(project, GradleConstants.SYSTEM_ID) val javaHome = getJavaHomeForGradleProject(project)
val projectSettings = gradleSettings.getLinkedProjectsSettings()
.filterIsInstance<GradleProjectSettings>().firstOrNull()
?: return
val gradleExeSettings = ExternalSystemApiUtil.getExecutionSettings<GradleExecutionSettings>( saveScriptModels(project, id, javaHome, models)
project,
projectSettings.externalProjectPath,
GradleConstants.SYSTEM_ID
)
saveScriptModels(project, id, gradleExeSettings.javaHome, models)
} }
} }
@@ -20,6 +20,7 @@ import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.psi.KtScriptInitializer import org.jetbrains.kotlin.psi.KtScriptInitializer
import org.jetbrains.kotlin.psi.psiUtil.getChildrenOfType import org.jetbrains.kotlin.psi.psiUtil.getChildrenOfType
import org.jetbrains.plugins.gradle.settings.GradleLocalSettings 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.GradleProjectSettings
import org.jetbrains.plugins.gradle.settings.GradleSettings import org.jetbrains.plugins.gradle.settings.GradleSettings
import org.jetbrains.plugins.gradle.util.GradleConstants import org.jetbrains.plugins.gradle.util.GradleConstants
@@ -69,7 +70,8 @@ fun getGradleScriptInputsStamp(
super.visitElement(element) super.visitElement(element)
when (element) { when (element) {
is PsiWhiteSpace -> if (element.text.contains("\n")) result.append("\n") is PsiWhiteSpace -> if (element.text.contains("\n")) result.append("\n")
is PsiComment -> { } is PsiComment -> {
}
is LeafPsiElement -> result.append(element.text) is LeafPsiElement -> result.append(element.text)
} }
} }
@@ -93,7 +95,7 @@ fun useScriptConfigurationFromImportOnly(): Boolean {
return Registry.`is`("kotlin.gradle.scripts.useIdeaProjectImport", false) 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) val localVersion = GradleLocalSettings.getInstance(project).getGradleVersion(externalProjectPath)
if (localVersion != null) return localVersion if (localVersion != null) return localVersion
@@ -101,13 +103,26 @@ fun getGradleVersion(externalProjectPath: String): String? {
} }
fun getGradleVersion(project: Project): String? { fun getGradleVersion(project: Project): String? {
val gradleSettings = ExternalSystemApiUtil.getSettings(project, GradleConstants.SYSTEM_ID) val projectSettings = getGradleProjectSettings(project).firstOrNull()
val projectSettings = gradleSettings.getLinkedProjectsSettings()
.filterIsInstance<GradleProjectSettings>()
.firstOrNull()
if (projectSettings != null) { if (projectSettings != null) {
return getGradleVersion(projectSettings.externalProjectPath) return getGradleVersion(projectSettings.externalProjectPath)
} }
return null return null
} }
fun getJavaHomeForGradleProject(project: Project): String? {
val projectSettings = getGradleProjectSettings(project).firstOrNull() ?: return null
val gradleExeSettings = ExternalSystemApiUtil.getExecutionSettings<GradleExecutionSettings>(
project,
projectSettings.externalProjectPath,
GradleConstants.SYSTEM_ID
)
return gradleExeSettings.javaHome
}
fun getGradleProjectSettings(project: Project): Collection<GradleProjectSettings> {
val gradleSettings = ExternalSystemApiUtil.getSettings(project, GradleConstants.SYSTEM_ID) as GradleSettings
return gradleSettings.getLinkedProjectsSettings()
}