Scripting: remove obsolete script-util module
#KT-58367 fixed
This commit is contained in:
committed by
Space Team
parent
c332e1beb5
commit
6877fa8e42
@@ -329,7 +329,6 @@
|
||||
/libraries/tools/kotlin-noarg/ "Kotlin Build Tools"
|
||||
/libraries/tools/kotlin-prepush-hook/ "Kotlin Build Infrastructure"
|
||||
/libraries/tools/kotlin-sam-with-receiver/ "Kotlin Build Tools"
|
||||
/libraries/tools/kotlin-script-util/ "Kotlin Compiler Core"
|
||||
/libraries/tools/kotlin-serialization/ "Kotlin Build Tools"
|
||||
/libraries/tools/kotlin-serialization-unshaded/ "Kotlin Build Tools"
|
||||
/libraries/tools/kotlin-stdlib-docs/ A.Qurbonzoda Vsevolod.Tolstopyato Ilya.Gorbunov Filipp.Zhinkin
|
||||
|
||||
@@ -1,40 +0,0 @@
|
||||
|
||||
description = "Kotlin scripting support utilities"
|
||||
|
||||
plugins {
|
||||
kotlin("jvm")
|
||||
id("jps-compatible")
|
||||
}
|
||||
|
||||
dependencies {
|
||||
api(kotlinStdlib())
|
||||
api(project(":kotlin-script-runtime"))
|
||||
api(project(":kotlin-scripting-jvm"))
|
||||
api(commonDependency("org.jetbrains.intellij.deps", "trove4j"))
|
||||
compileOnly(project(":compiler:cli"))
|
||||
compileOnly(project(":daemon-common"))
|
||||
compileOnly(project(":kotlin-scripting-compiler"))
|
||||
api(project(":kotlin-daemon-client"))
|
||||
testCompileOnly(project(":compiler:cli"))
|
||||
testApi(project(":kotlin-test:kotlin-test-junit"))
|
||||
testImplementation(libs.junit4)
|
||||
testApi(project(":kotlin-scripting-compiler"))
|
||||
testRuntimeOnly(project(":kotlin-compiler"))
|
||||
testApi(intellijCore())
|
||||
}
|
||||
|
||||
optInToExperimentalCompilerApi()
|
||||
|
||||
configurations.all {
|
||||
resolutionStrategy {
|
||||
force(libs.junit4)
|
||||
}
|
||||
}
|
||||
|
||||
projectTest {
|
||||
workingDir = rootDir
|
||||
}
|
||||
|
||||
runtimeJar()
|
||||
sourcesJar()
|
||||
javadocJar()
|
||||
-85
@@ -1,85 +0,0 @@
|
||||
/*
|
||||
* Copyright 2010-2016 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.script.jsr223
|
||||
|
||||
import org.jetbrains.kotlin.cli.common.messages.MessageRenderer
|
||||
import org.jetbrains.kotlin.cli.common.messages.PrintingMessageCollector
|
||||
import org.jetbrains.kotlin.cli.common.repl.*
|
||||
import org.jetbrains.kotlin.daemon.client.DaemonReportMessage
|
||||
import org.jetbrains.kotlin.daemon.client.DaemonReportingTargets
|
||||
import org.jetbrains.kotlin.daemon.client.KotlinCompilerClient
|
||||
import org.jetbrains.kotlin.daemon.client.KotlinRemoteReplCompilerClient
|
||||
import org.jetbrains.kotlin.daemon.common.*
|
||||
import java.io.File
|
||||
import java.io.OutputStream
|
||||
import java.io.PrintStream
|
||||
import java.util.concurrent.locks.ReentrantReadWriteLock
|
||||
import javax.script.ScriptContext
|
||||
import javax.script.ScriptEngineFactory
|
||||
import javax.script.ScriptException
|
||||
import kotlin.reflect.KClass
|
||||
|
||||
// TODO: need to manage resources here, i.e. call replCompiler.dispose when engine is collected
|
||||
|
||||
@Deprecated("Use kotlin-scripting-jsr223 instead")
|
||||
class KotlinJsr223JvmDaemonCompileScriptEngine(
|
||||
factory: ScriptEngineFactory,
|
||||
compilerClasspath: List<File>,
|
||||
templateClasspath: List<File>,
|
||||
templateClassName: String,
|
||||
val getScriptArgs: (ScriptContext, Array<out KClass<out Any>>?) -> ScriptArgsWithTypes?,
|
||||
val scriptArgsTypes: Array<out KClass<out Any>>?,
|
||||
compilerOut: OutputStream = System.err
|
||||
) : KotlinJsr223JvmScriptEngineBase(factory), KotlinJsr223JvmInvocableScriptEngine {
|
||||
|
||||
private val daemon by lazy { connectToCompileService(compilerClasspath) }
|
||||
|
||||
override val replCompiler by lazy {
|
||||
daemon.let {
|
||||
KotlinRemoteReplCompilerClient(
|
||||
it,
|
||||
makeAutodeletingFlagFile("jsr223-repl-session"),
|
||||
CompileService.TargetPlatform.JVM,
|
||||
emptyArray(),
|
||||
PrintingMessageCollector(PrintStream(compilerOut), MessageRenderer.WITHOUT_PATHS, false),
|
||||
templateClasspath,
|
||||
templateClassName)
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: bindings passing works only once on the first eval, subsequent setContext/setBindings call have no effect. Consider making it dynamic, but take history into account
|
||||
val localEvaluator by lazy { GenericReplCompilingEvaluator(replCompiler, templateClasspath, Thread.currentThread().contextClassLoader, getScriptArgs(getContext(), scriptArgsTypes)) }
|
||||
|
||||
override val replEvaluator: ReplFullEvaluator get() = localEvaluator
|
||||
|
||||
override val state: IReplStageState<*> get() = getCurrentState(getContext())
|
||||
|
||||
override fun createState(lock: ReentrantReadWriteLock): IReplStageState<*> = replEvaluator.createState(lock)
|
||||
|
||||
override fun overrideScriptArgs(context: ScriptContext): ScriptArgsWithTypes? = getScriptArgs(context, scriptArgsTypes)
|
||||
|
||||
private fun connectToCompileService(compilerCP: List<File>): CompileService {
|
||||
val compilerId = CompilerId.makeCompilerId(*compilerCP.toTypedArray())
|
||||
val daemonOptions = configureDaemonOptions()
|
||||
val daemonJVMOptions = DaemonJVMOptions()
|
||||
|
||||
val daemonReportMessages = arrayListOf<DaemonReportMessage>()
|
||||
|
||||
return KotlinCompilerClient.connectToCompileService(compilerId, daemonJVMOptions, daemonOptions, DaemonReportingTargets(null, daemonReportMessages), true, true)
|
||||
?: throw ScriptException("Unable to connect to repl server:" + daemonReportMessages.joinToString("\n ", prefix = "\n ") { "${it.category.name} ${it.message}" })
|
||||
}
|
||||
}
|
||||
-83
@@ -1,83 +0,0 @@
|
||||
/*
|
||||
* Copyright 2010-2016 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
@file:Suppress("DEPRECATION")
|
||||
|
||||
package org.jetbrains.kotlin.script.jsr223
|
||||
|
||||
import org.jetbrains.kotlin.cli.common.messages.MessageRenderer
|
||||
import org.jetbrains.kotlin.cli.common.messages.PrintingMessageCollector
|
||||
import org.jetbrains.kotlin.cli.common.repl.*
|
||||
import org.jetbrains.kotlin.cli.jvm.config.configureJdkClasspathRoots
|
||||
import org.jetbrains.kotlin.cli.jvm.config.addJvmClasspathRoots
|
||||
import org.jetbrains.kotlin.cli.jvm.config.addJvmSdkRoots
|
||||
import org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar
|
||||
import org.jetbrains.kotlin.config.*
|
||||
import org.jetbrains.kotlin.scripting.compiler.plugin.ScriptingCompilerConfigurationComponentRegistrar
|
||||
import org.jetbrains.kotlin.scripting.compiler.plugin.repl.GenericReplCompiler
|
||||
import org.jetbrains.kotlin.scripting.definitions.KotlinScriptDefinition
|
||||
import org.jetbrains.kotlin.scripting.resolve.KotlinScriptDefinitionFromAnnotatedTemplate
|
||||
import org.jetbrains.kotlin.utils.PathUtil
|
||||
import java.io.File
|
||||
import java.net.URLClassLoader
|
||||
import java.util.concurrent.locks.ReentrantReadWriteLock
|
||||
import javax.script.ScriptContext
|
||||
import javax.script.ScriptEngineFactory
|
||||
import kotlin.reflect.KClass
|
||||
|
||||
@Deprecated("Use kotlin-scripting-jsr223 instead")
|
||||
class KotlinJsr223JvmLocalScriptEngine(
|
||||
factory: ScriptEngineFactory,
|
||||
val templateClasspath: List<File>,
|
||||
templateClassName: String,
|
||||
val getScriptArgs: (ScriptContext, Array<out KClass<out Any>>?) -> ScriptArgsWithTypes?,
|
||||
val scriptArgsTypes: Array<out KClass<out Any>>?
|
||||
) : KotlinJsr223JvmScriptEngineBase(factory), KotlinJsr223JvmInvocableScriptEngine {
|
||||
|
||||
override val replCompiler: ReplCompiler by lazy {
|
||||
GenericReplCompiler(
|
||||
makeScriptDefinition(templateClasspath, templateClassName),
|
||||
makeCompilerConfiguration(),
|
||||
PrintingMessageCollector(System.out, MessageRenderer.WITHOUT_PATHS, false))
|
||||
}
|
||||
// TODO: bindings passing works only once on the first eval, subsequent setContext/setBindings call have no effect. Consider making it dynamic, but take history into account
|
||||
private val localEvaluator by lazy { GenericReplCompilingEvaluator(replCompiler, templateClasspath, Thread.currentThread().contextClassLoader, getScriptArgs(getContext(), scriptArgsTypes)) }
|
||||
|
||||
override val replEvaluator: ReplFullEvaluator get() = localEvaluator
|
||||
|
||||
override val state: IReplStageState<*> get() = getCurrentState(getContext())
|
||||
|
||||
override fun createState(lock: ReentrantReadWriteLock): IReplStageState<*> = replEvaluator.createState(lock)
|
||||
|
||||
override fun overrideScriptArgs(context: ScriptContext): ScriptArgsWithTypes? = getScriptArgs(context, scriptArgsTypes)
|
||||
|
||||
private fun makeScriptDefinition(templateClasspath: List<File>, templateClassName: String): KotlinScriptDefinition {
|
||||
val classloader = URLClassLoader(templateClasspath.map { it.toURI().toURL() }.toTypedArray(), this.javaClass.classLoader)
|
||||
val cls = classloader.loadClass(templateClassName)
|
||||
return KotlinScriptDefinitionFromAnnotatedTemplate(cls.kotlin, emptyMap())
|
||||
}
|
||||
|
||||
private fun makeCompilerConfiguration() = CompilerConfiguration().apply {
|
||||
addJvmSdkRoots(PathUtil.getJdkClassesRootsFromCurrentJre())
|
||||
addJvmClasspathRoots(templateClasspath)
|
||||
configureJdkClasspathRoots()
|
||||
add(ComponentRegistrar.PLUGIN_COMPONENT_REGISTRARS, ScriptingCompilerConfigurationComponentRegistrar())
|
||||
put(CommonConfigurationKeys.MODULE_NAME, "kotlin-script")
|
||||
languageVersionSettings = LanguageVersionSettingsImpl(
|
||||
LanguageVersion.LATEST_STABLE, ApiVersion.LATEST_STABLE, mapOf(AnalysisFlags.skipMetadataVersionCheck to true)
|
||||
)
|
||||
}
|
||||
}
|
||||
-55
@@ -1,55 +0,0 @@
|
||||
/*
|
||||
* Copyright 2010-2016 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
@file:Suppress("unused", "DEPRECATION") // could be used externally in javax.script.ScriptEngineFactory META-INF file
|
||||
|
||||
package org.jetbrains.kotlin.script.jsr223
|
||||
|
||||
import org.jetbrains.kotlin.cli.common.repl.KotlinJsr223JvmScriptEngineFactoryBase
|
||||
import org.jetbrains.kotlin.cli.common.repl.ScriptArgsWithTypes
|
||||
import javax.script.Bindings
|
||||
import javax.script.ScriptContext
|
||||
import javax.script.ScriptEngine
|
||||
import kotlin.script.experimental.jvm.util.KotlinJars
|
||||
import kotlin.script.experimental.jvm.util.scriptCompilationClasspathFromContext
|
||||
|
||||
@Deprecated("Use kotlin-scripting-jsr223 instead")
|
||||
class KotlinJsr223JvmLocalScriptEngineFactory : KotlinJsr223JvmScriptEngineFactoryBase() {
|
||||
|
||||
override fun getScriptEngine(): ScriptEngine =
|
||||
KotlinJsr223JvmLocalScriptEngine(
|
||||
this,
|
||||
scriptCompilationClasspathFromContext("kotlin-script-util.jar", wholeClasspath = true),
|
||||
KotlinStandardJsr223ScriptTemplate::class.qualifiedName!!,
|
||||
{ ctx, types -> ScriptArgsWithTypes(arrayOf(ctx.getBindings(ScriptContext.ENGINE_SCOPE)), types ?: emptyArray()) },
|
||||
arrayOf(Bindings::class)
|
||||
)
|
||||
}
|
||||
|
||||
@Deprecated("Use kotlin-scripting-jsr223 instead")
|
||||
class KotlinJsr223JvmDaemonLocalEvalScriptEngineFactory : KotlinJsr223JvmScriptEngineFactoryBase() {
|
||||
|
||||
override fun getScriptEngine(): ScriptEngine =
|
||||
KotlinJsr223JvmDaemonCompileScriptEngine(
|
||||
this,
|
||||
KotlinJars.compilerWithScriptingClasspath,
|
||||
scriptCompilationClasspathFromContext("kotlin-script-util.jar", wholeClasspath = true),
|
||||
KotlinStandardJsr223ScriptTemplate::class.qualifiedName!!,
|
||||
{ ctx, types -> ScriptArgsWithTypes(arrayOf(ctx.getBindings(ScriptContext.ENGINE_SCOPE)), types ?: emptyArray()) },
|
||||
arrayOf(Bindings::class)
|
||||
)
|
||||
}
|
||||
|
||||
-43
@@ -1,43 +0,0 @@
|
||||
package org.jetbrains.kotlin.script.jsr223
|
||||
|
||||
import org.jetbrains.kotlin.cli.common.repl.KOTLIN_SCRIPT_ENGINE_BINDINGS_KEY
|
||||
import org.jetbrains.kotlin.cli.common.repl.KOTLIN_SCRIPT_STATE_BINDINGS_KEY
|
||||
import javax.script.Bindings
|
||||
import javax.script.ScriptEngine
|
||||
import kotlin.script.templates.ScriptTemplateDefinition
|
||||
import kotlin.script.templates.standard.ScriptTemplateWithBindings
|
||||
|
||||
@Suppress("unused")
|
||||
@ScriptTemplateDefinition
|
||||
@Deprecated("Use kotlin-scripting-jsr223 instead")
|
||||
abstract class KotlinStandardJsr223ScriptTemplate(val jsr223Bindings: Bindings) : ScriptTemplateWithBindings(jsr223Bindings) {
|
||||
|
||||
private val myEngine: ScriptEngine? get() = bindings[KOTLIN_SCRIPT_ENGINE_BINDINGS_KEY]?.let { it as? ScriptEngine }
|
||||
|
||||
private inline fun<T> withMyEngine(body: (ScriptEngine) -> T): T =
|
||||
myEngine?.let(body) ?: throw IllegalStateException("Script engine for `eval` call is not found")
|
||||
|
||||
fun eval(script: String, newBindings: Bindings): Any? =
|
||||
withMyEngine {
|
||||
val savedState = newBindings[KOTLIN_SCRIPT_STATE_BINDINGS_KEY]?.takeIf { it === this.jsr223Bindings[KOTLIN_SCRIPT_STATE_BINDINGS_KEY] }?.apply {
|
||||
newBindings[KOTLIN_SCRIPT_STATE_BINDINGS_KEY] = null
|
||||
}
|
||||
val res = it.eval(script, newBindings)
|
||||
savedState?.apply {
|
||||
newBindings[KOTLIN_SCRIPT_STATE_BINDINGS_KEY] = savedState
|
||||
}
|
||||
res
|
||||
}
|
||||
|
||||
fun eval(script: String): Any? =
|
||||
withMyEngine {
|
||||
val savedState = jsr223Bindings.remove(KOTLIN_SCRIPT_STATE_BINDINGS_KEY)
|
||||
val res = it.eval(script, jsr223Bindings)
|
||||
savedState?.apply {
|
||||
jsr223Bindings[KOTLIN_SCRIPT_STATE_BINDINGS_KEY] = savedState
|
||||
}
|
||||
res
|
||||
}
|
||||
|
||||
fun createBindings(): Bindings = withMyEngine { it.createBindings() }
|
||||
}
|
||||
-41
@@ -1,41 +0,0 @@
|
||||
/*
|
||||
* Copyright 2010-2016 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.script.util
|
||||
|
||||
@Deprecated("Use annotations an processing code from the kotlin-scripting-dependencies library")
|
||||
@Target(AnnotationTarget.FILE)
|
||||
@Repeatable
|
||||
@Retention(AnnotationRetention.SOURCE)
|
||||
annotation class DependsOn(val value: String = "", val groupId: String = "", val artifactId: String = "", val version: String = "")
|
||||
|
||||
@Deprecated("Use annotations an processing code from the kotlin-scripting-dependencies library")
|
||||
@Target(AnnotationTarget.FILE)
|
||||
@Repeatable
|
||||
@Retention(AnnotationRetention.SOURCE)
|
||||
annotation class Repository(val value: String = "", val id: String = "", val url: String = "")
|
||||
|
||||
@Deprecated("Use your own annotations, this will be removed soon")
|
||||
@Target(AnnotationTarget.FILE)
|
||||
@Repeatable
|
||||
@Retention(AnnotationRetention.SOURCE)
|
||||
annotation class Import(vararg val paths: String)
|
||||
|
||||
@Deprecated("Use your own annotations, this will be removed soon")
|
||||
@Target(AnnotationTarget.FILE)
|
||||
@Repeatable
|
||||
@Retention(AnnotationRetention.SOURCE)
|
||||
annotation class CompilerOptions(vararg val options: String)
|
||||
-61
@@ -1,61 +0,0 @@
|
||||
package org.jetbrains.kotlin.script.util
|
||||
|
||||
import java.io.File
|
||||
import kotlin.reflect.KClass
|
||||
import kotlin.script.experimental.jvm.util.matchMaybeVersionedFile as newMatchMaybeVersionedFile
|
||||
import kotlin.script.experimental.jvm.util.hasParentNamed as newHasParentName
|
||||
|
||||
@Deprecated("Use the function from kotlin.script.experimental.jvm.util")
|
||||
fun classpathFromClassloader(classLoader: ClassLoader): List<File>? =
|
||||
kotlin.script.experimental.jvm.util.classpathFromClassloader(classLoader)
|
||||
|
||||
@Deprecated("Use the function from kotlin.script.experimental.jvm.util")
|
||||
fun classpathFromClasspathProperty(): List<File>? =
|
||||
kotlin.script.experimental.jvm.util.classpathFromClasspathProperty()
|
||||
|
||||
@Deprecated("Use the function from kotlin.script.experimental.jvm.util")
|
||||
fun classpathFromClass(classLoader: ClassLoader, klass: KClass<out Any>): List<File>? =
|
||||
kotlin.script.experimental.jvm.util.classpathFromClass(classLoader, klass)
|
||||
|
||||
@Deprecated("Use the function from kotlin.script.experimental.jvm.util")
|
||||
fun classpathFromFQN(classLoader: ClassLoader, fqn: String): List<File>? =
|
||||
kotlin.script.experimental.jvm.util.classpathFromFQN(classLoader, fqn)
|
||||
|
||||
@Deprecated("Use the function from kotlin.script.experimental.jvm.util")
|
||||
fun File.matchMaybeVersionedFile(baseName: String) = newMatchMaybeVersionedFile(baseName)
|
||||
|
||||
@Deprecated("Use the function from kotlin.script.experimental.jvm.util")
|
||||
fun File.hasParentNamed(baseName: String): Boolean = newHasParentName(baseName)
|
||||
|
||||
@Deprecated("Use the function from kotlin.script.experimental.jvm.util")
|
||||
fun scriptCompilationClasspathFromContextOrNull(
|
||||
vararg keyNames: String,
|
||||
classLoader: ClassLoader = Thread.currentThread().contextClassLoader,
|
||||
wholeClasspath: Boolean = false
|
||||
): List<File>? =
|
||||
kotlin.script.experimental.jvm.util.scriptCompilationClasspathFromContextOrNull(
|
||||
*keyNames, classLoader = classLoader, wholeClasspath = wholeClasspath
|
||||
)
|
||||
|
||||
@Deprecated("Use the function from kotlin.script.experimental.jvm.util")
|
||||
fun scriptCompilationClasspathFromContextOrStlib(
|
||||
vararg keyNames: String,
|
||||
classLoader: ClassLoader = Thread.currentThread().contextClassLoader,
|
||||
wholeClasspath: Boolean = false
|
||||
): List<File> =
|
||||
kotlin.script.experimental.jvm.util.scriptCompilationClasspathFromContextOrStdlib(
|
||||
*keyNames, classLoader = classLoader, wholeClasspath = wholeClasspath
|
||||
)
|
||||
|
||||
@Deprecated("Use the function from kotlin.script.experimental.jvm.util")
|
||||
fun scriptCompilationClasspathFromContext(
|
||||
vararg keyNames: String,
|
||||
classLoader: ClassLoader = Thread.currentThread().contextClassLoader,
|
||||
wholeClasspath: Boolean = false
|
||||
): List<File> =
|
||||
kotlin.script.experimental.jvm.util.scriptCompilationClasspathFromContext(
|
||||
*keyNames, classLoader = classLoader, wholeClasspath = wholeClasspath
|
||||
)
|
||||
|
||||
@Deprecated("Use the object from kotlin.script.experimental.jvm.util")
|
||||
val KotlinJars = kotlin.script.experimental.jvm.util.KotlinJars
|
||||
-82
@@ -1,82 +0,0 @@
|
||||
/*
|
||||
* Copyright 2010-2017 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
@file:Suppress("DEPRECATION")
|
||||
|
||||
package org.jetbrains.kotlin.script.util
|
||||
|
||||
import org.jetbrains.kotlin.script.util.resolvers.DirectResolver
|
||||
import org.jetbrains.kotlin.script.util.resolvers.FlatLibDirectoryResolver
|
||||
import org.jetbrains.kotlin.script.util.resolvers.Resolver
|
||||
import org.jetbrains.kotlin.scripting.resolve.InvalidScriptResolverAnnotation
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull
|
||||
import java.io.File
|
||||
import java.util.concurrent.Future
|
||||
import kotlin.script.dependencies.KotlinScriptExternalDependencies
|
||||
import kotlin.script.dependencies.ScriptContents
|
||||
import kotlin.script.dependencies.ScriptDependenciesResolver
|
||||
import kotlin.script.dependencies.asFuture
|
||||
import kotlin.script.templates.AcceptedAnnotations
|
||||
|
||||
@Deprecated("Use new resolving classes from kotlin-scripting-dependencies and kotlin-scripting-dependencies-maven")
|
||||
open class KotlinAnnotatedScriptDependenciesResolver(val baseClassPath: List<File>, resolvers: Iterable<Resolver>)
|
||||
: ScriptDependenciesResolver
|
||||
{
|
||||
private val resolvers: MutableList<Resolver> = resolvers.toMutableList()
|
||||
|
||||
inner class ResolvedDependencies(previousDependencies: KotlinScriptExternalDependencies?, depsFromAnnotations: List<File> ) : KotlinScriptExternalDependencies {
|
||||
override val classpath = if (resolvers.isEmpty()) baseClassPath else baseClassPath + depsFromAnnotations
|
||||
override val imports = if (previousDependencies != null) emptyList() else listOf(DependsOn::class.java.`package`.name + ".*")
|
||||
}
|
||||
|
||||
@AcceptedAnnotations(DependsOn::class, Repository::class)
|
||||
override fun resolve(script: ScriptContents,
|
||||
environment: Map<String, Any?>?,
|
||||
report: (ScriptDependenciesResolver.ReportSeverity, String, ScriptContents.Position?) -> Unit,
|
||||
previousDependencies: KotlinScriptExternalDependencies?
|
||||
): Future<KotlinScriptExternalDependencies?> {
|
||||
val depsFromAnnotations: List<File> = resolveFromAnnotations(script)
|
||||
return (if (previousDependencies != null && depsFromAnnotations.isEmpty()) previousDependencies
|
||||
else ResolvedDependencies(previousDependencies, depsFromAnnotations)
|
||||
).asFuture()
|
||||
}
|
||||
|
||||
private fun resolveFromAnnotations(script: ScriptContents): List<File> {
|
||||
script.annotations.forEach { annotation ->
|
||||
when (annotation) {
|
||||
is Repository -> {
|
||||
val isFlat: Boolean = resolvers.firstIsInstanceOrNull<FlatLibDirectoryResolver>()?.tryAddRepo(annotation)
|
||||
?: (FlatLibDirectoryResolver.tryCreate(annotation)?.also { resolvers.add(it) } != null)
|
||||
if (!isFlat) {
|
||||
resolvers.find { it !is FlatLibDirectoryResolver && it.tryAddRepo(annotation) }
|
||||
?: throw IllegalArgumentException("Illegal argument for Repository annotation: $annotation")
|
||||
}
|
||||
}
|
||||
is DependsOn -> {}
|
||||
is InvalidScriptResolverAnnotation -> throw Exception("Invalid annotation ${annotation.name}", annotation.error)
|
||||
else -> throw Exception("Unknown annotation ${annotation.javaClass}")
|
||||
}
|
||||
}
|
||||
return script.annotations.filterIsInstance(DependsOn::class.java).flatMap { dep ->
|
||||
resolvers.asSequence().mapNotNull { it.tryResolve(dep) }.firstOrNull() ?:
|
||||
throw Exception("Unable to resolve dependency $dep")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated("Use FileSystemDependenciesResolver from kotlin-scripting-dependencies instead")
|
||||
class LocalFilesResolver :
|
||||
KotlinAnnotatedScriptDependenciesResolver(emptyList(), arrayListOf(DirectResolver()))
|
||||
-85
@@ -1,85 +0,0 @@
|
||||
/*
|
||||
* Copyright 2010-2017 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
@file:Suppress("DEPRECATION")
|
||||
|
||||
package org.jetbrains.kotlin.script.util.resolvers
|
||||
|
||||
import org.jetbrains.kotlin.script.util.Repository
|
||||
import org.jetbrains.kotlin.script.util.resolvers.experimental.*
|
||||
import java.io.File
|
||||
import java.net.MalformedURLException
|
||||
import java.net.URL
|
||||
|
||||
@Deprecated("Use new resolving classes from kotlin-scripting-dependencies")
|
||||
class DirectResolver : GenericRepositoryWithBridge {
|
||||
override fun tryResolve(artifactCoordinates: GenericArtifactCoordinates): Iterable<File>? =
|
||||
artifactCoordinates.string.takeUnless(String::isBlank)
|
||||
?.let(::File)?.takeIf { it.exists() && (it.isFile || it.isDirectory) }?.let { listOf(it) }
|
||||
|
||||
override fun tryAddRepository(repositoryCoordinates: GenericRepositoryCoordinates): Boolean = false
|
||||
}
|
||||
|
||||
@Deprecated("Use new resolving classes from kotlin-scripting-dependencies")
|
||||
class FlatLibDirectoryResolver(vararg paths: File) : GenericRepositoryWithBridge {
|
||||
|
||||
private val localRepos = arrayListOf<File>()
|
||||
|
||||
init {
|
||||
for (path in paths) {
|
||||
if (!path.exists() || !path.isDirectory) throw IllegalArgumentException("Invalid flat lib directory repository path '$path'")
|
||||
}
|
||||
localRepos.addAll(paths)
|
||||
}
|
||||
|
||||
override fun tryResolve(artifactCoordinates: GenericArtifactCoordinates): Iterable<File>? {
|
||||
for (path in localRepos) {
|
||||
// TODO: add coordinates and wildcard matching
|
||||
val res = artifactCoordinates.string.takeUnless(String::isBlank)
|
||||
?.let { File(path, it) }
|
||||
?.takeIf { it.exists() && (it.isFile || it.isDirectory) }
|
||||
if (res != null) return listOf(res)
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
override fun tryAddRepository(repositoryCoordinates: GenericRepositoryCoordinates): Boolean {
|
||||
val repoDir = repositoryCoordinates.file ?: return false
|
||||
localRepos.add(repoDir)
|
||||
return true
|
||||
}
|
||||
|
||||
companion object {
|
||||
fun tryCreate(annotation: Repository): FlatLibDirectoryResolver? = tryCreate(
|
||||
BasicRepositoryCoordinates(
|
||||
annotation.url.takeUnless(String::isBlank) ?: annotation.value, annotation.id.takeUnless(String::isBlank)
|
||||
)
|
||||
)
|
||||
|
||||
fun tryCreate(repositoryCoordinates: GenericRepositoryCoordinates): FlatLibDirectoryResolver? =
|
||||
repositoryCoordinates.file?.let { FlatLibDirectoryResolver(it) }
|
||||
}
|
||||
}
|
||||
|
||||
internal fun String.toRepositoryUrlOrNull(): URL? =
|
||||
try {
|
||||
URL(this)
|
||||
} catch (_: MalformedURLException) {
|
||||
null
|
||||
}
|
||||
|
||||
internal fun String.toRepositoryFileOrNull(): File? =
|
||||
File(this).takeIf { it.exists() && it.isDirectory }
|
||||
-76
@@ -1,76 +0,0 @@
|
||||
/*
|
||||
* Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
@file:Suppress("DEPRECATION")
|
||||
|
||||
package org.jetbrains.kotlin.script.util.resolvers.experimental
|
||||
|
||||
import org.jetbrains.kotlin.script.util.DependsOn
|
||||
import org.jetbrains.kotlin.script.util.Repository
|
||||
import org.jetbrains.kotlin.script.util.resolvers.Resolver
|
||||
import org.jetbrains.kotlin.script.util.resolvers.toRepositoryFileOrNull
|
||||
import org.jetbrains.kotlin.script.util.resolvers.toRepositoryUrlOrNull
|
||||
import java.io.File
|
||||
import java.net.URL
|
||||
|
||||
@Deprecated("Use new resolving classes from kotlin-scripting-dependencies")
|
||||
interface GenericArtifactCoordinates {
|
||||
val string: String
|
||||
}
|
||||
|
||||
@Deprecated("Use new resolving classes from kotlin-scripting-dependencies")
|
||||
interface GenericRepositoryCoordinates {
|
||||
val string: String
|
||||
val name: String? get() = null
|
||||
val url: URL? get() = string.toRepositoryUrlOrNull()
|
||||
val file: File? get() = (url?.takeIf { it.protocol == "file" }?.path ?: string).toRepositoryFileOrNull()
|
||||
}
|
||||
|
||||
@Deprecated("Use new resolving classes from kotlin-scripting-dependencies")
|
||||
interface GenericResolver {
|
||||
fun tryResolve(artifactCoordinates: GenericArtifactCoordinates): Iterable<File>?
|
||||
fun tryAddRepository(repositoryCoordinates: GenericRepositoryCoordinates): Boolean
|
||||
|
||||
fun tryResolve(artifactCoordinates: String): Iterable<File>? = tryResolve(BasicArtifactCoordinates(artifactCoordinates))
|
||||
|
||||
fun tryAddRepository(repositoryCoordinates: String, id: String? = null): Boolean =
|
||||
tryAddRepository(BasicRepositoryCoordinates(repositoryCoordinates, id))
|
||||
}
|
||||
|
||||
@Deprecated("Use new resolving classes from kotlin-scripting-dependencies")
|
||||
open class BasicArtifactCoordinates(override val string: String) : GenericArtifactCoordinates
|
||||
|
||||
@Deprecated("Use new resolving classes from kotlin-scripting-dependencies")
|
||||
open class BasicRepositoryCoordinates(override val string: String, override val name: String? = null) : GenericRepositoryCoordinates
|
||||
|
||||
@Deprecated("Use new resolving classes from kotlin-scripting-dependencies")
|
||||
interface GenericRepositoryWithBridge : GenericResolver, Resolver {
|
||||
override fun tryResolve(dependsOn: DependsOn): Iterable<File>? =
|
||||
tryResolve(
|
||||
with(dependsOn) {
|
||||
MavenArtifactCoordinates(value, groupId, artifactId, version)
|
||||
}
|
||||
)
|
||||
|
||||
override fun tryAddRepo(annotation: Repository): Boolean =
|
||||
with(annotation) {
|
||||
tryAddRepository(
|
||||
value.takeIf { it.isNotBlank() } ?: url,
|
||||
id.takeIf { it.isNotBlank() }
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated("Use new resolving classes from kotlin-scripting-dependencies")
|
||||
open class MavenArtifactCoordinates(
|
||||
val value: String?,
|
||||
val groupId: String?,
|
||||
val artifactId: String?,
|
||||
val version: String?
|
||||
) : GenericArtifactCoordinates {
|
||||
override val string: String
|
||||
get() = value.takeIf { it?.isNotBlank() ?: false }
|
||||
?: listOf(groupId, artifactId, version).filter { it?.isNotBlank() ?: false }.joinToString(":")
|
||||
}
|
||||
-18
@@ -1,18 +0,0 @@
|
||||
/*
|
||||
* Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
@file:Suppress("DEPRECATION")
|
||||
|
||||
package org.jetbrains.kotlin.script.util.resolvers
|
||||
|
||||
import org.jetbrains.kotlin.script.util.DependsOn
|
||||
import org.jetbrains.kotlin.script.util.Repository
|
||||
import java.io.File
|
||||
|
||||
@Deprecated("Use new resolving classes from kotlin-scripting-dependencies")
|
||||
interface Resolver {
|
||||
fun tryResolve(dependsOn: DependsOn): Iterable<File>?
|
||||
fun tryAddRepo(annotation: Repository): Boolean
|
||||
}
|
||||
-28
@@ -1,28 +0,0 @@
|
||||
/*
|
||||
* Copyright 2010-2017 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
@file:Suppress("unused", "DEPRECATION")
|
||||
|
||||
package org.jetbrains.kotlin.script.util.templates
|
||||
|
||||
import org.jetbrains.kotlin.script.util.LocalFilesResolver
|
||||
import kotlin.script.templates.ScriptTemplateDefinition
|
||||
|
||||
@ScriptTemplateDefinition(resolver = LocalFilesResolver::class, scriptFilePattern = ".*\\.kts")
|
||||
abstract class StandardArgsScriptTemplateWithLocalResolving(val args: Array<String>)
|
||||
|
||||
@ScriptTemplateDefinition(resolver = LocalFilesResolver::class, scriptFilePattern = ".*\\.kts")
|
||||
abstract class BindingsScriptTemplateWithLocalResolving(val bindings: Map<String, Any?>)
|
||||
-221
@@ -1,221 +0,0 @@
|
||||
/*
|
||||
* Copyright 2010-2017 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
@file:Suppress("DEPRECATION")
|
||||
|
||||
package org.jetbrains.kotlin.script.util
|
||||
|
||||
import com.intellij.openapi.util.Disposer
|
||||
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
|
||||
import org.jetbrains.kotlin.cli.common.config.addKotlinSourceRoot
|
||||
import org.jetbrains.kotlin.cli.common.messages.*
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
||||
import org.jetbrains.kotlin.cli.jvm.config.configureJdkClasspathRoots
|
||||
import org.jetbrains.kotlin.cli.jvm.config.addJvmClasspathRoot
|
||||
import org.jetbrains.kotlin.cli.jvm.config.addJvmClasspathRoots
|
||||
import org.jetbrains.kotlin.cli.jvm.config.jvmClasspathRoots
|
||||
import org.jetbrains.kotlin.codegen.CompilationException
|
||||
import org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar
|
||||
import org.jetbrains.kotlin.config.CommonConfigurationKeys
|
||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||
import org.jetbrains.kotlin.config.JVMConfigurationKeys
|
||||
import org.jetbrains.kotlin.script.util.templates.BindingsScriptTemplateWithLocalResolving
|
||||
import org.jetbrains.kotlin.script.util.templates.StandardArgsScriptTemplateWithLocalResolving
|
||||
import org.jetbrains.kotlin.scripting.compiler.plugin.ScriptingCompilerConfigurationComponentRegistrar
|
||||
import org.jetbrains.kotlin.scripting.compiler.plugin.impl.ScriptJvmCompilerFromEnvironment
|
||||
import org.jetbrains.kotlin.scripting.compiler.plugin.toCompilerMessageSeverity
|
||||
import org.jetbrains.kotlin.scripting.configuration.ScriptingConfigurationKeys
|
||||
import org.jetbrains.kotlin.scripting.definitions.KotlinScriptDefinition
|
||||
import org.jetbrains.kotlin.scripting.definitions.ScriptDefinition
|
||||
import org.jetbrains.kotlin.scripting.definitions.ScriptDefinitionProvider
|
||||
import org.jetbrains.kotlin.scripting.definitions.findScriptDefinition
|
||||
import org.jetbrains.kotlin.scripting.resolve.KotlinScriptDefinitionFromAnnotatedTemplate
|
||||
import org.jetbrains.kotlin.utils.PathUtil.getResourcePathForClass
|
||||
import org.junit.Assert
|
||||
import org.junit.Test
|
||||
import java.io.ByteArrayOutputStream
|
||||
import java.io.File
|
||||
import java.io.PrintStream
|
||||
import kotlin.reflect.KClass
|
||||
import kotlin.script.experimental.api.onSuccess
|
||||
import kotlin.script.experimental.api.valueOr
|
||||
import kotlin.script.experimental.host.toScriptSource
|
||||
import kotlin.script.experimental.impl.internalScriptingRunSuspend
|
||||
import kotlin.script.experimental.jvm.defaultJvmScriptingHostConfiguration
|
||||
import kotlin.script.experimental.jvm.util.scriptCompilationClasspathFromContext
|
||||
|
||||
const val KOTLIN_JAVA_RUNTIME_JAR = "kotlin-stdlib.jar"
|
||||
|
||||
class ScriptUtilIT {
|
||||
|
||||
companion object {
|
||||
private const val argsHelloWorldOutput =
|
||||
"""Hello, world!
|
||||
a1
|
||||
done
|
||||
"""
|
||||
private const val bindingsHelloWorldOutput =
|
||||
"""Hello, world!
|
||||
a1 = 42
|
||||
done
|
||||
"""
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testArgsHelloWorld() {
|
||||
val scriptClass = compileScript("args-hello-world.kts", StandardArgsScriptTemplateWithLocalResolving::class)
|
||||
Assert.assertNotNull(scriptClass)
|
||||
val ctor = scriptClass?.getConstructor(Array<String>::class.java)
|
||||
Assert.assertNotNull(ctor)
|
||||
captureOut {
|
||||
ctor!!.newInstance(arrayOf("a1"))
|
||||
}.let {
|
||||
Assert.assertEquals(argsHelloWorldOutput.linesSplitTrim(), it.linesSplitTrim())
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testBndHelloWorld() {
|
||||
val scriptClass = compileScript("bindings-hello-world.kts", BindingsScriptTemplateWithLocalResolving::class)
|
||||
Assert.assertNotNull(scriptClass)
|
||||
val ctor = scriptClass?.getConstructor(Map::class.java)
|
||||
Assert.assertNotNull(ctor)
|
||||
captureOut {
|
||||
ctor!!.newInstance(hashMapOf("a1" to 42))
|
||||
}.let {
|
||||
Assert.assertEquals(bindingsHelloWorldOutput.linesSplitTrim(), it.linesSplitTrim())
|
||||
}
|
||||
}
|
||||
|
||||
private fun compileScript(
|
||||
scriptFileName: String,
|
||||
scriptTemplate: KClass<out Any>,
|
||||
environment: Map<String, Any?>? = null,
|
||||
suppressOutput: Boolean = false
|
||||
): Class<*>? =
|
||||
compileScriptImpl(
|
||||
"libraries/tools/kotlin-script-util/src/test/resources/scripts/$scriptFileName",
|
||||
KotlinScriptDefinitionFromAnnotatedTemplate(
|
||||
scriptTemplate,
|
||||
environment
|
||||
), suppressOutput
|
||||
)
|
||||
|
||||
private fun compileScriptImpl(
|
||||
scriptPath: String,
|
||||
scriptDefinition: KotlinScriptDefinition,
|
||||
suppressOutput: Boolean
|
||||
): Class<*>? {
|
||||
val messageCollector =
|
||||
if (suppressOutput) MessageCollector.NONE
|
||||
else PrintingMessageCollector(System.err, MessageRenderer.PLAIN_FULL_PATHS, true)
|
||||
|
||||
val rootDisposable = Disposer.newDisposable()
|
||||
try {
|
||||
val configuration = CompilerConfiguration().apply {
|
||||
addJvmClasspathRoots(scriptCompilationClasspathFromContext(KOTLIN_JAVA_RUNTIME_JAR))
|
||||
configureJdkClasspathRoots()
|
||||
|
||||
put(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY, messageCollector)
|
||||
addKotlinSourceRoot(scriptPath)
|
||||
@Suppress("DEPRECATION")
|
||||
getResourcePathForClass(DependsOn::class.java).let {
|
||||
if (it.exists()) {
|
||||
addJvmClasspathRoot(it)
|
||||
}
|
||||
}
|
||||
put(CommonConfigurationKeys.MODULE_NAME, "kotlin-script-util-test")
|
||||
add(
|
||||
ScriptingConfigurationKeys.SCRIPT_DEFINITIONS,
|
||||
ScriptDefinition.FromLegacy(
|
||||
defaultJvmScriptingHostConfiguration, scriptDefinition
|
||||
)
|
||||
)
|
||||
put(JVMConfigurationKeys.RETAIN_OUTPUT_IN_MEMORY, true)
|
||||
|
||||
add(ComponentRegistrar.PLUGIN_COMPONENT_REGISTRARS, ScriptingCompilerConfigurationComponentRegistrar())
|
||||
}
|
||||
|
||||
val environment = KotlinCoreEnvironment.createForTests(rootDisposable, configuration, EnvironmentConfigFiles.JVM_CONFIG_FILES)
|
||||
|
||||
environment.getSourceFiles().forEach {
|
||||
messageCollector.report(CompilerMessageSeverity.LOGGING, "file: $it -> script def: ${it.findScriptDefinition()?.name}")
|
||||
}
|
||||
messageCollector.report(
|
||||
CompilerMessageSeverity.LOGGING,
|
||||
"compilation classpath:\n ${environment.configuration.jvmClasspathRoots.joinToString("\n ")}"
|
||||
)
|
||||
|
||||
val scriptCompiler = ScriptJvmCompilerFromEnvironment(environment)
|
||||
|
||||
return try {
|
||||
val script = File(scriptPath).toScriptSource()
|
||||
val newScriptDefinition = ScriptDefinitionProvider.getInstance(environment.project)!!.findDefinition(script)!!
|
||||
val compiledScript = scriptCompiler.compile(script, newScriptDefinition.compilationConfiguration).onSuccess {
|
||||
@Suppress("DEPRECATION_ERROR")
|
||||
internalScriptingRunSuspend {
|
||||
it.getClass(newScriptDefinition.evaluationConfiguration)
|
||||
}
|
||||
}.valueOr {
|
||||
for (report in it.reports) {
|
||||
messageCollector.report(report.severity.toCompilerMessageSeverity(), report.render(withSeverity = false))
|
||||
}
|
||||
return null
|
||||
}
|
||||
compiledScript.java
|
||||
} catch (e: CompilationException) {
|
||||
messageCollector.report(
|
||||
CompilerMessageSeverity.EXCEPTION, OutputMessageUtil.renderException(e),
|
||||
MessageUtil.psiElementToMessageLocation(e.element)
|
||||
)
|
||||
null
|
||||
} catch (e: IllegalStateException) {
|
||||
messageCollector.report(CompilerMessageSeverity.EXCEPTION, OutputMessageUtil.renderException(e))
|
||||
null
|
||||
} catch (t: Throwable) {
|
||||
MessageCollectorUtil.reportException(messageCollector, t)
|
||||
throw t
|
||||
}
|
||||
|
||||
} finally {
|
||||
Disposer.dispose(rootDisposable)
|
||||
}
|
||||
}
|
||||
|
||||
private fun String.linesSplitTrim() =
|
||||
split('\n', '\r').map(String::trim).filter(String::isNotBlank)
|
||||
|
||||
private fun captureOut(body: () -> Unit): String = captureOutAndErr(body).first
|
||||
|
||||
private fun captureOutAndErr(body: () -> Unit): Pair<String, String> {
|
||||
val outStream = ByteArrayOutputStream()
|
||||
val errStream = ByteArrayOutputStream()
|
||||
val prevOut = System.out
|
||||
val prevErr = System.err
|
||||
System.setOut(PrintStream(outStream))
|
||||
System.setErr(PrintStream(errStream))
|
||||
try {
|
||||
body()
|
||||
} finally {
|
||||
System.out.flush()
|
||||
System.err.flush()
|
||||
System.setOut(prevOut)
|
||||
System.setErr(prevErr)
|
||||
}
|
||||
return outStream.toString() to errStream.toString()
|
||||
}
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
|
||||
println("Hello, world!")
|
||||
|
||||
if (args.isNotEmpty()) {
|
||||
println(args.joinToString())
|
||||
}
|
||||
|
||||
println("done")
|
||||
-12
@@ -1,12 +0,0 @@
|
||||
|
||||
@file:DependsOn("junit:junit:4.11")
|
||||
|
||||
org.junit.Assert.assertTrue(true)
|
||||
|
||||
println("Hello, world!")
|
||||
|
||||
if (args.isNotEmpty()) {
|
||||
println(args.joinToString())
|
||||
}
|
||||
|
||||
println("done")
|
||||
@@ -1,8 +0,0 @@
|
||||
|
||||
println("Hello, world!")
|
||||
|
||||
if (bindings.isNotEmpty()) {
|
||||
println(bindings.entries.joinToString { "${it.key} = ${it.value}" })
|
||||
}
|
||||
|
||||
println("done")
|
||||
@@ -226,7 +226,6 @@ include ":kotlin-imports-dumper-compiler-plugin",
|
||||
":kotlin-assignment",
|
||||
":kotlin-gradle-subplugin-example",
|
||||
":examples:annotation-processor-example",
|
||||
":kotlin-script-util",
|
||||
":kotlin-annotation-processing",
|
||||
":kotlin-annotation-processing-cli",
|
||||
":kotlin-annotation-processing-base",
|
||||
@@ -762,7 +761,6 @@ project(':kotlin-assignment').projectDir = "$rootDir/libraries/tools/kotlin-assi
|
||||
project(':kotlin-lombok').projectDir = "$rootDir/libraries/tools/kotlin-lombok" as File
|
||||
project(':kotlin-gradle-subplugin-example').projectDir = "$rootDir/libraries/examples/kotlin-gradle-subplugin-example" as File
|
||||
project(':examples:annotation-processor-example').projectDir = "$rootDir/libraries/examples/annotation-processor-example" as File
|
||||
project(':kotlin-script-util').projectDir = "$rootDir/libraries/tools/kotlin-script-util" as File
|
||||
project(':kotlin-annotation-processing-embeddable').projectDir = "$rootDir/plugins/kapt3/kotlin-annotation-processing-embeddable" as File
|
||||
project(':kotlin-daemon-embeddable').projectDir = "$rootDir/prepare/kotlin-daemon-embeddable" as File
|
||||
project(':kotlin-annotation-processing-compiler').projectDir = "$rootDir/plugins/kapt3/kapt3-compiler" as File
|
||||
|
||||
Reference in New Issue
Block a user