Load main-kts jar automatically from scripting plugin, if available
This commit is contained in:
@@ -4,6 +4,7 @@ Buildfile: [TestData]/build.xml
|
|||||||
build:
|
build:
|
||||||
[kotlin2js] Compiling [[TestData]/root1] => [[Temp]/out.js]
|
[kotlin2js] Compiling [[TestData]/root1] => [[Temp]/out.js]
|
||||||
[kotlin2js] logging: using Kotlin home directory [KotlinProjectHome]/dist/kotlinc
|
[kotlin2js] logging: using Kotlin home directory [KotlinProjectHome]/dist/kotlinc
|
||||||
|
[kotlin2js] logging: configure scripting: Added template org.jetbrains.kotlin.mainKts.MainKtsScript from [[CompilerLib]/kotlin-main-kts.jar, [CompilerLib]/kotlin-reflect.jar, [CompilerLib]/kotlin-script-runtime.jar, [CompilerLib]/kotlin-stdlib.jar]
|
||||||
[kotlin2js] logging: compiling source files: [TestData]/root1/foo.kt
|
[kotlin2js] logging: compiling source files: [TestData]/root1/foo.kt
|
||||||
|
|
||||||
BUILD SUCCESSFUL
|
BUILD SUCCESSFUL
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ build:
|
|||||||
[kotlinc] Compiling [[TestData]/hello.kt] => [[Temp]/hello.jar]
|
[kotlinc] Compiling [[TestData]/hello.kt] => [[Temp]/hello.jar]
|
||||||
[kotlinc] logging: using Kotlin home directory [KotlinProjectHome]/dist/kotlinc
|
[kotlinc] logging: using Kotlin home directory [KotlinProjectHome]/dist/kotlinc
|
||||||
[kotlinc] logging: configuring the compilation environment
|
[kotlinc] logging: configuring the compilation environment
|
||||||
|
[kotlinc] logging: configure scripting: Added template org.jetbrains.kotlin.mainKts.MainKtsScript from [[CompilerLib]/kotlin-main-kts.jar, [CompilerLib]/kotlin-reflect.jar, [CompilerLib]/kotlin-script-runtime.jar, [CompilerLib]/kotlin-stdlib.jar]
|
||||||
|
|
||||||
BUILD SUCCESSFUL
|
BUILD SUCCESSFUL
|
||||||
Total time: [time]
|
Total time: [time]
|
||||||
|
|||||||
+46
@@ -0,0 +1,46 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.scripting.definitions
|
||||||
|
|
||||||
|
import java.io.File
|
||||||
|
import kotlin.script.experimental.host.ScriptingHostConfiguration
|
||||||
|
import kotlin.script.experimental.jvm.impl.tryGetResourcePathForClass
|
||||||
|
import kotlin.script.experimental.jvm.util.matchMaybeVersionedFile
|
||||||
|
|
||||||
|
class AutoloadedScriptDefinitions(
|
||||||
|
private val hostConfiguration: ScriptingHostConfiguration,
|
||||||
|
private val baseClassloader: ClassLoader,
|
||||||
|
private val messageReporter: MessageReporter
|
||||||
|
) : ScriptDefinitionsSource {
|
||||||
|
|
||||||
|
private val basePath by lazy(LazyThreadSafetyMode.PUBLICATION) {
|
||||||
|
tryGetResourcePathForClass(AutoloadedScriptDefinitions::class.java)?.parentFile?.takeIf { it.isDirectory } ?: File(".")
|
||||||
|
}
|
||||||
|
|
||||||
|
override val definitions: Sequence<ScriptDefinition> = sequence {
|
||||||
|
val mainKtsJars = basePath.listFiles { f: File ->
|
||||||
|
MAIN_KTS_JARS.any { expected ->
|
||||||
|
f.matchMaybeVersionedFile(expected) && f.extension == "jar"
|
||||||
|
}
|
||||||
|
}?.toList()
|
||||||
|
if (mainKtsJars != null && mainKtsJars.size >= MAIN_KTS_JARS.size) {
|
||||||
|
yieldAll(
|
||||||
|
loadScriptTemplatesFromClasspath(
|
||||||
|
listOf("org.jetbrains.kotlin.mainKts.MainKtsScript"),
|
||||||
|
mainKtsJars,
|
||||||
|
emptyList(),
|
||||||
|
baseClassloader,
|
||||||
|
hostConfiguration,
|
||||||
|
messageReporter
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
private val MAIN_KTS_JARS = listOf("kotlin-main-kts", "kotlin-stdlib", "kotlin-script-runtime", "kotlin-reflect")
|
||||||
|
}
|
||||||
|
}
|
||||||
+1
-1
@@ -311,7 +311,7 @@ private fun loadScriptDefinition(
|
|||||||
if (def != null) {
|
if (def != null) {
|
||||||
messageReporter(
|
messageReporter(
|
||||||
ScriptDiagnostic.Severity.DEBUG,
|
ScriptDiagnostic.Severity.DEBUG,
|
||||||
"Configure scripting: Added template $templateClassName from ${classpathWithLoader.classpath}"
|
"Configure scripting: Added template $templateClassName from ${classpathWithLoader.classpath.sorted()}"
|
||||||
)
|
)
|
||||||
return def
|
return def
|
||||||
}
|
}
|
||||||
|
|||||||
+9
-9
@@ -18,10 +18,7 @@ import org.jetbrains.kotlin.idea.KotlinFileType
|
|||||||
import org.jetbrains.kotlin.scripting.compiler.plugin.definitions.CliScriptDefinitionProvider
|
import org.jetbrains.kotlin.scripting.compiler.plugin.definitions.CliScriptDefinitionProvider
|
||||||
import org.jetbrains.kotlin.scripting.compiler.plugin.impl.reporter
|
import org.jetbrains.kotlin.scripting.compiler.plugin.impl.reporter
|
||||||
import org.jetbrains.kotlin.scripting.configuration.ScriptingConfigurationKeys
|
import org.jetbrains.kotlin.scripting.configuration.ScriptingConfigurationKeys
|
||||||
import org.jetbrains.kotlin.scripting.definitions.ScriptDefinition
|
import org.jetbrains.kotlin.scripting.definitions.*
|
||||||
import org.jetbrains.kotlin.scripting.definitions.ScriptDefinitionProvider
|
|
||||||
import org.jetbrains.kotlin.scripting.definitions.ScriptDefinitionsFromClasspathDiscoverySource
|
|
||||||
import org.jetbrains.kotlin.scripting.definitions.getEnvironment
|
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import kotlin.script.experimental.host.ScriptingHostConfiguration
|
import kotlin.script.experimental.host.ScriptingHostConfiguration
|
||||||
|
|
||||||
@@ -70,12 +67,15 @@ class ScriptingCompilerConfigurationExtension(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
configuration.add(
|
configuration.addAll(
|
||||||
ScriptingConfigurationKeys.SCRIPT_DEFINITIONS_SOURCES,
|
ScriptingConfigurationKeys.SCRIPT_DEFINITIONS_SOURCES,
|
||||||
ScriptDefinitionsFromClasspathDiscoverySource(
|
listOf(
|
||||||
configuration.jvmClasspathRoots,
|
ScriptDefinitionsFromClasspathDiscoverySource(
|
||||||
hostConfiguration,
|
configuration.jvmClasspathRoots,
|
||||||
messageCollector.reporter
|
hostConfiguration,
|
||||||
|
messageCollector.reporter
|
||||||
|
),
|
||||||
|
AutoloadedScriptDefinitions(hostConfiguration, this::class.java.classLoader, messageCollector.reporter)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user