Refactor scripting examples:
- split into script def and host part - remove bad dependencies - organize it in a way that should be typical for user scenarios
This commit is contained in:
@@ -1 +0,0 @@
|
|||||||
import org.jetbrains.kotlin.gradle.dsl.Coroutines
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import org.jetbrains.kotlin.gradle.dsl.Coroutines
|
||||||
+48
@@ -0,0 +1,48 @@
|
|||||||
|
/*
|
||||||
|
* 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.script.examples.jvm.resolve.maven.host
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.script.examples.jvm.resolve.maven.MyScriptWithMavenDeps
|
||||||
|
import org.jetbrains.kotlin.script.examples.jvm.resolve.maven.myJvmConfig
|
||||||
|
import java.io.File
|
||||||
|
import kotlin.script.experimental.api.EvaluationResult
|
||||||
|
import kotlin.script.experimental.api.ResultWithDiagnostics
|
||||||
|
import kotlin.script.experimental.api.ScriptEvaluationEnvironment
|
||||||
|
import kotlin.script.experimental.api.toConfigEntry
|
||||||
|
import kotlin.script.experimental.definitions.ScriptDefinitionFromAnnotatedBaseClass
|
||||||
|
import kotlin.script.experimental.host.toScriptSource
|
||||||
|
import kotlin.script.experimental.jvm.DummyCompiledJvmScriptCache
|
||||||
|
import kotlin.script.experimental.jvm.JvmBasicScriptingHost
|
||||||
|
import kotlin.script.experimental.jvm.JvmScriptCompiler
|
||||||
|
import kotlin.script.experimental.jvmhost.impl.KJVMCompilerImpl
|
||||||
|
|
||||||
|
fun evalFile(scriptFile: File): ResultWithDiagnostics<EvaluationResult> {
|
||||||
|
val scriptCompiler = JvmScriptCompiler(KJVMCompilerImpl(), DummyCompiledJvmScriptCache())
|
||||||
|
val scriptDefinition = ScriptDefinitionFromAnnotatedBaseClass(MyScriptWithMavenDeps::class)
|
||||||
|
|
||||||
|
val host = JvmBasicScriptingHost(
|
||||||
|
scriptDefinition.configurator,
|
||||||
|
scriptCompiler,
|
||||||
|
scriptDefinition.runner
|
||||||
|
)
|
||||||
|
|
||||||
|
return host.eval(myJvmConfig { add(scriptFile.toScriptSource().toConfigEntry()) }, ScriptEvaluationEnvironment())
|
||||||
|
}
|
||||||
|
|
||||||
|
fun main(vararg args: String) {
|
||||||
|
if (args.size != 1) {
|
||||||
|
println("usage: <app> <script file>")
|
||||||
|
} else {
|
||||||
|
val scriptFile = File(args[0])
|
||||||
|
println("Executing script $scriptFile")
|
||||||
|
|
||||||
|
val res = evalFile(scriptFile)
|
||||||
|
|
||||||
|
res.reports.forEach {
|
||||||
|
println(" : ${it.message}" + if (it.exception == null) "" else ": ${it.exception}")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+1
-1
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.script.examples.jvm.resolve.maven.test
|
package org.jetbrains.kotlin.script.examples.jvm.resolve.maven.test
|
||||||
|
|
||||||
import org.jetbrains.kotlin.script.examples.jvm.resolve.maven.evalFile
|
import org.jetbrains.kotlin.script.examples.jvm.resolve.maven.host.evalFile
|
||||||
import org.junit.Assert
|
import org.junit.Assert
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
import java.io.File
|
import java.io.File
|
||||||
+29
-59
@@ -1,35 +1,47 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
* Copyright 2010-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.
|
* that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.jetbrains.kotlin.script.examples.jvm.resolve.maven
|
package org.jetbrains.kotlin.script.examples.jvm.resolve.maven
|
||||||
|
|
||||||
import org.jetbrains.kotlin.script.util.*
|
import org.jetbrains.kotlin.script.util.DependsOn
|
||||||
import org.jetbrains.kotlin.script.util.impl.getResourcePathForClass
|
import org.jetbrains.kotlin.script.util.FilesAndMavenResolver
|
||||||
|
import org.jetbrains.kotlin.script.util.Repository
|
||||||
|
import org.jetbrains.kotlin.script.util.scriptCompilationClasspathFromContext
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import kotlin.reflect.KClass
|
import kotlin.reflect.KClass
|
||||||
import kotlin.script.dependencies.ScriptContents
|
import kotlin.script.dependencies.ScriptContents
|
||||||
import kotlin.script.dependencies.ScriptDependenciesResolver
|
import kotlin.script.dependencies.ScriptDependenciesResolver
|
||||||
|
import kotlin.script.experimental.annotations.KotlinScript
|
||||||
import kotlin.script.experimental.api.*
|
import kotlin.script.experimental.api.*
|
||||||
import kotlin.script.experimental.definitions.ScriptDefinitionFromAnnotatedBaseClass
|
import kotlin.script.experimental.basic.DefaultScriptSelector
|
||||||
import kotlin.script.experimental.host.toScriptSource
|
|
||||||
import kotlin.script.experimental.jvm.*
|
import kotlin.script.experimental.jvm.*
|
||||||
import kotlin.script.experimental.jvmhost.impl.KJVMCompilerImpl
|
import kotlin.script.experimental.jvm.runners.BasicJvmScriptRunner
|
||||||
|
|
||||||
val stdlibFile: File by lazy {
|
@KotlinScript(
|
||||||
KotlinJars.stdlib
|
DefaultScriptSelector::class,
|
||||||
?: throw Exception("Unable to find kotlin stdlib, please specify it explicitly via \"kotlin.java.stdlib.jar\" property")
|
MyConfigurator::class,
|
||||||
|
BasicJvmScriptRunner::class
|
||||||
|
)
|
||||||
|
abstract class MyScriptWithMavenDeps {
|
||||||
|
// abstract fun body(vararg args: String): Int
|
||||||
}
|
}
|
||||||
|
|
||||||
val selfFile: File by lazy {
|
inline fun myJvmConfig(
|
||||||
getResourcePathForClass(MyScriptWithMavenDeps::class.java).takeIf(File::exists)
|
from: HeterogeneousMap = HeterogeneousMap(),
|
||||||
?: throw Exception("Unable to get path to the script base")
|
crossinline body: JvmScriptCompileConfigurationParams.Builder.() -> Unit = {}
|
||||||
}
|
) = jvmConfigWithJavaHome(from) {
|
||||||
|
signature<MyScriptWithMavenDeps>()
|
||||||
val scriptUtilsJarFile: File by lazy {
|
ScriptCompileConfigurationParams.importedPackages(listOf(DependsOn::class.qualifiedName!!, Repository::class.qualifiedName!!))
|
||||||
getResourcePathForClass(DependsOn::class.java).takeIf(File::exists)
|
dependencies(
|
||||||
?: throw Exception("Unable to get path to the kotlin-script-util.jar")
|
scriptCompilationClasspathFromContext(
|
||||||
|
"script", // script library jar name
|
||||||
|
"kotlin-script-util" // DependsOn annotation is taken from script-util
|
||||||
|
)
|
||||||
|
)
|
||||||
|
ScriptCompileConfigurationParams.updateConfigurationOnAnnotations(listOf(DependsOn::class, Repository::class))
|
||||||
|
body()
|
||||||
}
|
}
|
||||||
|
|
||||||
class MyConfigurator(val baseClass: KClass<Any>? = null) : ScriptConfigurator {
|
class MyConfigurator(val baseClass: KClass<Any>? = null) : ScriptConfigurator {
|
||||||
@@ -69,45 +81,3 @@ class MyConfigurator(val baseClass: KClass<Any>? = null) : ScriptConfigurator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
inline fun myJvmConfig(
|
|
||||||
from: HeterogeneousMap = HeterogeneousMap(),
|
|
||||||
crossinline body: JvmScriptCompileConfigurationParams.Builder.() -> Unit = {}
|
|
||||||
) = jvmConfigWithJavaHome(from) {
|
|
||||||
signature<MyScriptWithMavenDeps>()
|
|
||||||
ScriptCompileConfigurationParams.importedPackages(listOf(DependsOn::class.qualifiedName!!, Repository::class.qualifiedName!!))
|
|
||||||
dependencies(
|
|
||||||
listOf(stdlibFile),
|
|
||||||
listOf(selfFile),
|
|
||||||
listOf(scriptUtilsJarFile)
|
|
||||||
)
|
|
||||||
ScriptCompileConfigurationParams.updateConfigurationOnAnnotations(listOf(DependsOn::class, Repository::class))
|
|
||||||
body()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun evalFile(scriptFile: File): ResultWithDiagnostics<EvaluationResult> {
|
|
||||||
val scriptCompiler = JvmScriptCompiler(KJVMCompilerImpl(), DummyCompiledJvmScriptCache())
|
|
||||||
val scriptDefinition = ScriptDefinitionFromAnnotatedBaseClass(MyScriptWithMavenDeps::class)
|
|
||||||
|
|
||||||
val host = JvmBasicScriptingHost(
|
|
||||||
scriptDefinition.configurator,
|
|
||||||
scriptCompiler,
|
|
||||||
scriptDefinition.runner
|
|
||||||
)
|
|
||||||
|
|
||||||
return host.eval(myJvmConfig { add(scriptFile.toScriptSource().toConfigEntry()) }, ScriptEvaluationEnvironment())
|
|
||||||
}
|
|
||||||
|
|
||||||
fun main(vararg args: String) {
|
|
||||||
if (args.size != 1) {
|
|
||||||
println("usage: <app> <script file>")
|
|
||||||
} else {
|
|
||||||
val scriptFile = File(args[0])
|
|
||||||
println("Executing script $scriptFile")
|
|
||||||
|
|
||||||
val res = evalFile(scriptFile)
|
|
||||||
|
|
||||||
res.reports.forEach {
|
|
||||||
println(" : ${it.message}" + if (it.exception == null) "" else ": ${it.exception}")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-19
@@ -1,19 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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.script.examples.jvm.resolve.maven
|
|
||||||
|
|
||||||
import kotlin.script.experimental.annotations.KotlinScript
|
|
||||||
import kotlin.script.experimental.basic.DefaultScriptSelector
|
|
||||||
import kotlin.script.experimental.jvm.runners.BasicJvmScriptRunner
|
|
||||||
|
|
||||||
@KotlinScript(
|
|
||||||
DefaultScriptSelector::class,
|
|
||||||
MyConfigurator::class,
|
|
||||||
BasicJvmScriptRunner::class
|
|
||||||
)
|
|
||||||
abstract class MyScriptWithMavenDeps {
|
|
||||||
// abstract fun body(vararg args: String): Int
|
|
||||||
}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
import org.jetbrains.kotlin.gradle.dsl.Coroutines
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import org.jetbrains.kotlin.gradle.dsl.Coroutines
|
||||||
+5
-16
@@ -1,12 +1,12 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
* Copyright 2010-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.
|
* that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.jetbrains.kotlin.script.examples.jvm.simple
|
package org.jetbrains.kotlin.script.examples.jvm.simple.host
|
||||||
|
|
||||||
import org.jetbrains.kotlin.script.util.KotlinJars
|
import org.jetbrains.kotlin.script.examples.jvm.simple.MyScript
|
||||||
import org.jetbrains.kotlin.utils.PathUtil
|
import org.jetbrains.kotlin.script.util.*
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import kotlin.script.experimental.api.*
|
import kotlin.script.experimental.api.*
|
||||||
import kotlin.script.experimental.definitions.ScriptDefinitionFromAnnotatedBaseClass
|
import kotlin.script.experimental.definitions.ScriptDefinitionFromAnnotatedBaseClass
|
||||||
@@ -14,26 +14,15 @@ import kotlin.script.experimental.host.toScriptSource
|
|||||||
import kotlin.script.experimental.jvm.*
|
import kotlin.script.experimental.jvm.*
|
||||||
import kotlin.script.experimental.jvmhost.impl.KJVMCompilerImpl
|
import kotlin.script.experimental.jvmhost.impl.KJVMCompilerImpl
|
||||||
|
|
||||||
val stdlibFile: File by lazy {
|
|
||||||
KotlinJars.stdlib
|
|
||||||
?: throw Exception("Unable to find kotlin stdlib, please specify it explicitly via \"kotlin.java.stdlib.jar\" property")
|
|
||||||
}
|
|
||||||
|
|
||||||
val selfFile: File by lazy {
|
|
||||||
PathUtil.getResourcePathForClass(MyScript::class.java).takeIf(File::exists)
|
|
||||||
?: throw Exception("Unable to get path to the script base")
|
|
||||||
}
|
|
||||||
|
|
||||||
inline fun myJvmConfig(
|
inline fun myJvmConfig(
|
||||||
from: HeterogeneousMap = HeterogeneousMap(),
|
from: HeterogeneousMap = HeterogeneousMap(),
|
||||||
crossinline body: JvmScriptCompileConfigurationParams.Builder.() -> Unit = {}
|
crossinline body: JvmScriptCompileConfigurationParams.Builder.() -> Unit = {}
|
||||||
) = jvmConfigWithJavaHome(from) {
|
) = jvmConfigWithJavaHome(from) {
|
||||||
signature<MyScript>()
|
signature<MyScript>()
|
||||||
dependencies(listOf(stdlibFile), listOf(selfFile))
|
dependencies(scriptCompilationClasspathFromContext("script" /* script library jar name */))
|
||||||
body()
|
body()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fun evalFile(scriptFile: File): ResultWithDiagnostics<EvaluationResult> {
|
fun evalFile(scriptFile: File): ResultWithDiagnostics<EvaluationResult> {
|
||||||
val scriptCompiler = JvmScriptCompiler(KJVMCompilerImpl(), DummyCompiledJvmScriptCache())
|
val scriptCompiler = JvmScriptCompiler(KJVMCompilerImpl(), DummyCompiledJvmScriptCache())
|
||||||
val scriptDefinition = ScriptDefinitionFromAnnotatedBaseClass(MyScript::class)
|
val scriptDefinition = ScriptDefinitionFromAnnotatedBaseClass(MyScript::class)
|
||||||
+1
-1
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.script.examples.jvm.simple.test
|
package org.jetbrains.kotlin.script.examples.jvm.simple.test
|
||||||
|
|
||||||
import org.jetbrains.kotlin.script.examples.jvm.simple.evalFile
|
import org.jetbrains.kotlin.script.examples.jvm.simple.host.evalFile
|
||||||
import org.junit.Assert
|
import org.junit.Assert
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
@@ -12,6 +12,7 @@ dependencies {
|
|||||||
compile(project(":kotlin-stdlib"))
|
compile(project(":kotlin-stdlib"))
|
||||||
compile(project(":kotlin-scripting-common"))
|
compile(project(":kotlin-scripting-common"))
|
||||||
compile(project(":kotlin-scripting-jvm"))
|
compile(project(":kotlin-scripting-jvm"))
|
||||||
|
compile(project(":kotlin-script-util"))
|
||||||
compileOnly(project(":compiler:cli"))
|
compileOnly(project(":compiler:cli"))
|
||||||
compileOnly(intellijCoreDep())
|
compileOnly(intellijCoreDep())
|
||||||
}
|
}
|
||||||
|
|||||||
+8
-4
@@ -156,8 +156,10 @@ include ":kotlin-build-common",
|
|||||||
":kotlin-scripting-compiler",
|
":kotlin-scripting-compiler",
|
||||||
":kotlin-scripting-idea",
|
":kotlin-scripting-idea",
|
||||||
":kotlin-scripting-gradle",
|
":kotlin-scripting-gradle",
|
||||||
":examples:scripting-jvm-simple-script",
|
":examples:scripting-jvm-simple-script:script",
|
||||||
":examples:scripting-jvm-maven-deps",
|
":examples:scripting-jvm-simple-script:host",
|
||||||
|
":examples:scripting-jvm-maven-deps:script",
|
||||||
|
":examples:scripting-jvm-maven-deps:host",
|
||||||
":pill:generate-all-tests",
|
":pill:generate-all-tests",
|
||||||
":include:kotlin-compiler",
|
":include:kotlin-compiler",
|
||||||
|
|
||||||
@@ -258,8 +260,10 @@ project(':kotlin-scripting-jvm-host').projectDir = "$rootDir/libraries/scripting
|
|||||||
project(':kotlin-scripting-compiler').projectDir = "$rootDir/plugins/scripting/scripting-cli" as File
|
project(':kotlin-scripting-compiler').projectDir = "$rootDir/plugins/scripting/scripting-cli" as File
|
||||||
project(':kotlin-scripting-idea').projectDir = "$rootDir/plugins/scripting/scripting-idea" as File
|
project(':kotlin-scripting-idea').projectDir = "$rootDir/plugins/scripting/scripting-idea" as File
|
||||||
project(':kotlin-scripting-gradle').projectDir = "$rootDir/plugins/scripting/scripting-gradle" as File
|
project(':kotlin-scripting-gradle').projectDir = "$rootDir/plugins/scripting/scripting-gradle" as File
|
||||||
project(':examples:scripting-jvm-simple-script').projectDir = "$rootDir/libraries/examples/scripting/jvm-simple-script" as File
|
project(':examples:scripting-jvm-simple-script:script').projectDir = "$rootDir/libraries/examples/scripting/jvm-simple-script/script" as File
|
||||||
project(':examples:scripting-jvm-maven-deps').projectDir = "$rootDir/libraries/examples/scripting/jvm-maven-deps" as File
|
project(':examples:scripting-jvm-simple-script:host').projectDir = "$rootDir/libraries/examples/scripting/jvm-simple-script/host" as File
|
||||||
|
project(':examples:scripting-jvm-maven-deps:script').projectDir = "$rootDir/libraries/examples/scripting/jvm-maven-deps/script" as File
|
||||||
|
project(':examples:scripting-jvm-maven-deps:host').projectDir = "$rootDir/libraries/examples/scripting/jvm-maven-deps/host" as File
|
||||||
project(':pill:generate-all-tests').projectDir = "$rootDir/plugins/pill/generate-all-tests" as File
|
project(':pill:generate-all-tests').projectDir = "$rootDir/plugins/pill/generate-all-tests" as File
|
||||||
|
|
||||||
// plugin markers:
|
// plugin markers:
|
||||||
|
|||||||
Reference in New Issue
Block a user