Reduce GradleScriptTemplateProvider dependency from gradle plugin, add missing pieses to it's environment
Fixes #KT-12913
This commit is contained in:
+35
-11
@@ -16,30 +16,54 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.idea.core.script
|
package org.jetbrains.kotlin.idea.core.script
|
||||||
|
|
||||||
|
import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
|
import org.gradle.tooling.ProjectConnection
|
||||||
import org.jetbrains.kotlin.script.ScriptTemplateProvider
|
import org.jetbrains.kotlin.script.ScriptTemplateProvider
|
||||||
import org.jetbrains.plugins.gradle.service.GradleInstallationManager
|
import org.jetbrains.plugins.gradle.service.execution.GradleExecutionHelper
|
||||||
|
import org.jetbrains.plugins.gradle.settings.GradleExecutionSettings
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
class GradleScriptTemplateProvider(project: Project, gim: GradleInstallationManager?): ScriptTemplateProvider {
|
class GradleScriptTemplateProvider(project: Project): ScriptTemplateProvider {
|
||||||
|
|
||||||
private val gradleHome: File? = project.basePath?.let { gim?.getGradleHome(project, it) }
|
private val gradleExeSettings: GradleExecutionSettings? by lazy {
|
||||||
private val gradleLibsPath: File? = gradleHome?.let { File(it, "lib") }?.let { if (it.exists()) it else null }
|
try {
|
||||||
|
ExternalSystemApiUtil.getExecutionSettings<GradleExecutionSettings>(
|
||||||
|
project,
|
||||||
|
com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil.toCanonicalPath(project.basePath!!),
|
||||||
|
org.jetbrains.plugins.gradle.util.GradleConstants.SYSTEM_ID)
|
||||||
|
}
|
||||||
|
catch (e: NoClassDefFoundError) {
|
||||||
|
// TODO: log warning and consider displaying it to user
|
||||||
|
null
|
||||||
|
}
|
||||||
|
catch (e: ClassNotFoundException) {
|
||||||
|
null // see todo above
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override val id: String = "Gradle"
|
override val id: String = "Gradle"
|
||||||
override val version: Int = 1
|
override val version: Int = 1
|
||||||
override val isValid: Boolean = gradleHome != null
|
override val isValid: Boolean get() = gradleExeSettings?.gradleHome != null
|
||||||
|
|
||||||
override val templateClassName: String = "org.gradle.script.lang.kotlin.KotlinBuildScript"
|
override val templateClassName: String = "org.gradle.script.lang.kotlin.KotlinBuildScript"
|
||||||
override val dependenciesClasspath: Iterable<String> =
|
override val dependenciesClasspath: Iterable<String> by lazy {
|
||||||
gradleLibsPath?.listFiles { file -> file.extension == "jar" && depLibsPrefixes.any { file.name.startsWith(it) } }
|
gradleExeSettings?.gradleHome?.let { File(it, "lib") }
|
||||||
?.map { it.canonicalPath }
|
?.let { if (it.exists()) it else null }
|
||||||
|
?.listFiles { file -> file.extension == "jar" && depLibsPrefixes.any { file.name.startsWith(it) } }
|
||||||
|
?.map { it.canonicalPath }
|
||||||
?: emptyList()
|
?: emptyList()
|
||||||
override val environment: Map<String, Any?>? = mapOf(
|
}
|
||||||
"gradleHome" to gradleHome,
|
override val environment: Map<String, Any?>? by lazy { mapOf(
|
||||||
"projectRoot" to (project.basePath ?: project.baseDir.canonicalPath )?.let { File(it) })
|
"gradleHome" to gradleExeSettings?.gradleHome?.let { File(it) },
|
||||||
|
"projectRoot" to (project.basePath ?: project.baseDir.canonicalPath)?.let { File(it) },
|
||||||
|
"projectActionExecutor" to { action: (ProjectConnection) -> Unit ->
|
||||||
|
GradleExecutionHelper().execute(project.basePath!!, null) { action(it) } },
|
||||||
|
"gradleJavaHome" to gradleExeSettings?.javaHome)
|
||||||
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private val depLibsPrefixes = listOf("gradle-script-kotlin", "gradle-core")
|
private val depLibsPrefixes = listOf("gradle-script-kotlin", "gradle-core")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user