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
fun runPartialGradleImport(project: Project) {
val gradleSettings = ExternalSystemApiUtil.getSettings(project, GradleConstants.SYSTEM_ID)
val projectSettings = gradleSettings.getLinkedProjectsSettings()
.filterIsInstance<GradleProjectSettings>()
.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"
@@ -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<GradleProjectSettings>()
.firstOrNull() ?: return
ExternalSystemUtil.refreshProject(
projectSettings.externalProjectPath,
ImportSpecBuilder(project, GradleConstants.SYSTEM_ID)
.projectResolverPolicy(
GradlePartialResolverPolicy(Predicate<GradleProjectResolverExtension?> { it is KotlinDslScriptModelResolver })
)
)
getGradleProjectSettings(project).forEach {
ExternalSystemUtil.refreshProject(
it.externalProjectPath,
ImportSpecBuilder(project, GradleConstants.SYSTEM_ID)
.projectResolverPolicy(
GradlePartialResolverPolicy(Predicate<GradleProjectResolverExtension?> { it is KotlinDslScriptModelResolver })
)
)
}
}
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.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<K
}
fun createGradleKtsContextIfPossible(project: Project): GradleKtsContext? {
val gradleProjectSettings = ExternalSystemApiUtil.getSettings(project, GradleConstants.SYSTEM_ID)
.getLinkedProjectsSettings()
.filterIsInstance<GradleProjectSettings>().firstOrNull() ?: return null
val gradleExeSettings = ExternalSystemApiUtil.getExecutionSettings<GradleExecutionSettings>(
project,
gradleProjectSettings.externalProjectPath,
GradleConstants.SYSTEM_ID
)
val javaHome = gradleExeSettings.javaHome?.let { File(it)}
val javaHome = getJavaHomeForGradleProject(project)?.let { File(it)}
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.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<GradleProjectSettings>().firstOrNull()
?: return
val javaHome = getJavaHomeForGradleProject(project)
val gradleExeSettings = ExternalSystemApiUtil.getExecutionSettings<GradleExecutionSettings>(
project,
projectSettings.externalProjectPath,
GradleConstants.SYSTEM_ID
)
saveScriptModels(project, id, gradleExeSettings.javaHome, models)
saveScriptModels(project, id, javaHome, models)
}
}
@@ -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<GradleProjectSettings>()
.firstOrNull()
val projectSettings = getGradleProjectSettings(project).firstOrNull()
if (projectSettings != null) {
return getGradleVersion(projectSettings.externalProjectPath)
}
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()
}