Implement scripting configuration gradle plugin

This commit is contained in:
Ilya Chernikov
2018-03-12 09:54:28 +01:00
parent d05f67127d
commit 63d601e1be
8 changed files with 182 additions and 0 deletions
@@ -0,0 +1,57 @@
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
description = "Kotlin Scripting Compiler Plugin for Gradle"
apply { plugin("kotlin") }
plugins {
id("com.gradle.plugin-publish")
`java-gradle-plugin`
}
val packedJars by configurations.creating
dependencies {
compile(project(":kotlin-gradle-plugin-api"))
compileOnly(project(":kotlin-scripting-compiler-plugin"))
packedJars(project(":kotlin-scripting-compiler-plugin")) { isTransitive = false }
runtime(project(":kotlin-scripting-common"))
runtime(project(":kotlin-scripting-jvm"))
}
sourceSets {
"main" { projectDefault() }
"test" { projectDefault() }
}
val jar: Jar by tasks
jar.apply {
classifier = "base"
}
runtimeJar(rewriteDepsToShadedCompiler(
task<ShadowJar>("shadowJar") {
from(packedJars)
from(the<JavaPluginConvention>().sourceSets.getByName("main").output)
}
))
sourcesJar()
javadocJar()
val gradlePluginId = "org.jetbrains.kotlin.plugin.scripting"
pluginBundle {
(plugins) {
gradlePluginId {
id = gradlePluginId
displayName = "Gradle plugin for kotlin scripting"
description = displayName
}
}
}
publish()
projectTest {
workingDir = rootDir
}
@@ -0,0 +1,3 @@
apply from: "$rootDir/libraries/tools/gradle-tools/pluginMarkers.gradle"
pluginMarkerProject('kotlin-scripting-gradle-plugin')
@@ -0,0 +1 @@
implementation-class=org.jetbrains.kotlin.scripting.gradle.ScriptingGradleSubplugin
@@ -0,0 +1 @@
implementation-class=org.jetbrains.kotlin.scripting.gradle.ScriptingGradleSubplugin
@@ -0,0 +1 @@
org.jetbrains.kotlin.scripting.gradle.ScriptingKotlinGradleSubplugin
@@ -0,0 +1,45 @@
/*
* Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.scripting.gradle
open class ScriptingExtension {
internal val myScriptDefinitions = mutableListOf<String>()
internal val myScriptDefinitionsClasspath = mutableListOf<String>()
internal var myDisableScriptDefinitionsFromClasspath = false
internal val myScriptResolverEnvironment = mutableMapOf<String, String?>()
open fun scriptDefinition(fqName: String) {
myScriptDefinitions.add(fqName)
}
open fun scriptDefinitions(fqNames: List<String>) {
myScriptDefinitions.addAll(fqNames)
}
open fun scriptDefinitions(vararg fqNames: String) {
myScriptDefinitions.addAll(fqNames)
}
open fun scriptDefinitionsClasspath(vararg paths: String) {
myScriptDefinitionsClasspath.addAll(paths)
}
open fun scriptDefinitionsClasspath(paths: List<String>) {
myScriptDefinitionsClasspath.addAll(paths)
}
open fun disableScriptDefinitionsFromClasspath(disable: Boolean) {
myDisableScriptDefinitionsFromClasspath = disable
}
open fun scriptResolverEnvironment(vararg pairs: Pair<String, String?>) {
myScriptResolverEnvironment.putAll(pairs)
}
open fun scriptResolverEnvironment(pairs: List<Pair<String, String?>>) {
myScriptResolverEnvironment.putAll(pairs)
}
}
@@ -0,0 +1,70 @@
/*
* Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.scripting.gradle
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.tasks.SourceSet
import org.gradle.api.tasks.compile.AbstractCompile
import org.jetbrains.kotlin.gradle.plugin.KotlinGradleSubplugin
import org.jetbrains.kotlin.gradle.plugin.SubpluginOption
class ScriptingGradleSubplugin : Plugin<Project>
{
companion object {
fun isEnabled(project: Project) = project.plugins.findPlugin(ScriptingGradleSubplugin::class.java) != null
}
override fun apply(project: Project) {}
}
class ScriptingKotlinGradleSubplugin : KotlinGradleSubplugin<AbstractCompile> {
companion object {
val SCRIPTING_GROUP_NAME = "org.jetbrains.kotlin"
val SCRIPTING_ARTIFACT_NAME = "kotlin-scripting"
val SCRIPT_DEFINITIONS_OPTION = "script-definitions"
val SCRIPT_DEFINITIONS_CLASSPATH_OPTION = "script-definitions-classpath"
val DISABLE_SCRIPT_DEFINITIONS_FROM_CLSSPATH_OPTION = "disable-script-definitions-from-classpath"
val LEGACY_SCRIPT_RESOLVER_ENVIRONMENT_OPTION = "script-resolver-environment"
}
override fun isApplicable(project: Project, task: AbstractCompile) = ScriptingGradleSubplugin.isEnabled(project)
override fun apply(
project: Project,
kotlinCompile: AbstractCompile,
javaCompile: AbstractCompile,
variantData: Any?,
androidProjectHandler: Any?,
javaSourceSet: SourceSet?
): List<SubpluginOption> {
if (!ScriptingGradleSubplugin.isEnabled(project)) return emptyList()
val scriptingExtension = project.extensions.findByType(ScriptingExtension::class.java) ?: return emptyList()
val options = mutableListOf<SubpluginOption>()
for (scriptDef in scriptingExtension.myScriptDefinitions) {
options += SubpluginOption(SCRIPT_DEFINITIONS_OPTION, scriptDef)
}
for (path in scriptingExtension.myScriptDefinitionsClasspath) {
options += SubpluginOption(SCRIPT_DEFINITIONS_CLASSPATH_OPTION, path)
}
if (scriptingExtension.myDisableScriptDefinitionsFromClasspath) {
options += SubpluginOption(DISABLE_SCRIPT_DEFINITIONS_FROM_CLSSPATH_OPTION, "true")
}
for (pair in scriptingExtension.myScriptResolverEnvironment) {
options += SubpluginOption(LEGACY_SCRIPT_RESOLVER_ENVIRONMENT_OPTION, "${pair.key}=${pair.value}")
}
return options
}
override fun getArtifactName() = "kotlin-scripting-gradle"
override fun getGroupName() = "org.jetbrains.kotlin"
override fun getCompilerPluginId() = "kotlin.scripting"
}