Reduce GradleScriptTemplateProvider dependency from gradle plugin, add missing pieses to it's environment

Fixes #KT-12913
This commit is contained in:
Ilya Chernikov
2016-06-30 15:01:08 +02:00
parent 55e084db8e
commit d345d2bc95
@@ -16,30 +16,54 @@
package org.jetbrains.kotlin.idea.core.script
import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil
import com.intellij.openapi.project.Project
import org.gradle.tooling.ProjectConnection
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
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 gradleLibsPath: File? = gradleHome?.let { File(it, "lib") }?.let { if (it.exists()) it else null }
private val gradleExeSettings: GradleExecutionSettings? by lazy {
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 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 dependenciesClasspath: Iterable<String> =
gradleLibsPath?.listFiles { file -> file.extension == "jar" && depLibsPrefixes.any { file.name.startsWith(it) } }
?.map { it.canonicalPath }
override val dependenciesClasspath: Iterable<String> by lazy {
gradleExeSettings?.gradleHome?.let { File(it, "lib") }
?.let { if (it.exists()) it else null }
?.listFiles { file -> file.extension == "jar" && depLibsPrefixes.any { file.name.startsWith(it) } }
?.map { it.canonicalPath }
?: emptyList()
override val environment: Map<String, Any?>? = mapOf(
"gradleHome" to gradleHome,
"projectRoot" to (project.basePath ?: project.baseDir.canonicalPath )?.let { File(it) })
}
override val environment: Map<String, Any?>? by lazy { mapOf(
"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 {
private val depLibsPrefixes = listOf("gradle-script-kotlin", "gradle-core")
}
}