From 7b7f87a3b781c6bd822f1f3dae16bf230dbf66bc Mon Sep 17 00:00:00 2001 From: Ilya Chernikov Date: Thu, 27 Sep 2018 11:07:37 +0200 Subject: [PATCH] Move ivy resolver to the main-kts to avoid classloading issues... e.g. when main-kts is loaded in IDEA #KT-26828 fixed --- .../tools/kotlin-main-kts/build.gradle.kts | 1 + .../org/jetbrains/kotlin/mainKts/impl}/ivy.kt | 19 +++++++++++++++++-- .../org/jetbrains/kotlin/mainKts/scriptDef.kt | 3 +-- .../tools/kotlin-script-util/build.gradle.kts | 2 -- .../kotlin-script-util/build.gradle.kts.173 | 2 -- .../kotlin-script-util/build.gradle.kts.as32 | 2 -- .../jetbrains/kotlin/script/util/resolve.kt | 2 -- .../kotlin/script/util/templates/templates.kt | 4 ---- .../kotlin/script/util/ScriptUtilIT.kt | 12 ------------ 9 files changed, 19 insertions(+), 28 deletions(-) rename libraries/tools/{kotlin-script-util/src/main/kotlin/org/jetbrains/kotlin/script/util/resolvers => kotlin-main-kts/src/org/jetbrains/kotlin/mainKts/impl}/ivy.kt (88%) diff --git a/libraries/tools/kotlin-main-kts/build.gradle.kts b/libraries/tools/kotlin-main-kts/build.gradle.kts index 62ab1642150..a9d5fe9cbdc 100644 --- a/libraries/tools/kotlin-main-kts/build.gradle.kts +++ b/libraries/tools/kotlin-main-kts/build.gradle.kts @@ -37,6 +37,7 @@ dependencies { fatJarContents(project(it)) { isTransitive = false } testCompile(project(it)) } + compileOnly("org.apache.ivy:ivy:2.4.0") runtime(project(":kotlin-compiler")) runtime(project(":kotlin-reflect")) fatJarContents("org.apache.ivy:ivy:2.4.0") diff --git a/libraries/tools/kotlin-script-util/src/main/kotlin/org/jetbrains/kotlin/script/util/resolvers/ivy.kt b/libraries/tools/kotlin-main-kts/src/org/jetbrains/kotlin/mainKts/impl/ivy.kt similarity index 88% rename from libraries/tools/kotlin-script-util/src/main/kotlin/org/jetbrains/kotlin/script/util/resolvers/ivy.kt rename to libraries/tools/kotlin-main-kts/src/org/jetbrains/kotlin/mainKts/impl/ivy.kt index 956db3af8bc..e788056925e 100644 --- a/libraries/tools/kotlin-script-util/src/main/kotlin/org/jetbrains/kotlin/script/util/resolvers/ivy.kt +++ b/libraries/tools/kotlin-main-kts/src/org/jetbrains/kotlin/mainKts/impl/ivy.kt @@ -3,7 +3,7 @@ * that can be found in the license/LICENSE.txt file. */ -package org.jetbrains.kotlin.script.util.resolvers +package org.jetbrains.kotlin.mainKts.impl import org.apache.ivy.Ivy import org.apache.ivy.core.LogOptions @@ -18,8 +18,13 @@ import org.apache.ivy.plugins.resolver.URLResolver import org.apache.ivy.util.DefaultMessageLogger import org.apache.ivy.util.Message import org.jetbrains.kotlin.script.util.DependsOn +import org.jetbrains.kotlin.script.util.KotlinAnnotatedScriptDependenciesResolver import org.jetbrains.kotlin.script.util.Repository +import org.jetbrains.kotlin.script.util.resolvers.DirectResolver +import org.jetbrains.kotlin.script.util.resolvers.Resolver import java.io.File +import java.net.MalformedURLException +import java.net.URL class IvyResolver : Resolver { @@ -116,4 +121,14 @@ class IvyResolver : Resolver { Message.setDefaultLogger(DefaultMessageLogger(1)) } } -} \ No newline at end of file +} + +private fun String.toRepositoryUrlOrNull(): URL? = + try { + URL(this) + } catch (_: MalformedURLException) { + null + } + +class FilesAndIvyResolver : + KotlinAnnotatedScriptDependenciesResolver(emptyList(), arrayListOf(DirectResolver(), IvyResolver()).asIterable()) diff --git a/libraries/tools/kotlin-main-kts/src/org/jetbrains/kotlin/mainKts/scriptDef.kt b/libraries/tools/kotlin-main-kts/src/org/jetbrains/kotlin/mainKts/scriptDef.kt index 67f0b7c1de8..8b62882b56a 100644 --- a/libraries/tools/kotlin-main-kts/src/org/jetbrains/kotlin/mainKts/scriptDef.kt +++ b/libraries/tools/kotlin-main-kts/src/org/jetbrains/kotlin/mainKts/scriptDef.kt @@ -5,8 +5,8 @@ package org.jetbrains.kotlin.mainKts +import org.jetbrains.kotlin.mainKts.impl.FilesAndIvyResolver import org.jetbrains.kotlin.script.util.DependsOn -import org.jetbrains.kotlin.script.util.FilesAndIvyResolver import org.jetbrains.kotlin.script.util.Repository import java.io.File import kotlin.script.dependencies.ScriptContents @@ -17,7 +17,6 @@ import kotlin.script.experimental.jvm.JvmDependency import kotlin.script.experimental.jvm.compat.mapLegacyDiagnosticSeverity import kotlin.script.experimental.jvm.compat.mapLegacyScriptPosition import kotlin.script.experimental.jvm.dependenciesFromClassContext -import kotlin.script.experimental.jvm.dependenciesFromCurrentContext import kotlin.script.experimental.jvm.jvm @Suppress("unused") diff --git a/libraries/tools/kotlin-script-util/build.gradle.kts b/libraries/tools/kotlin-script-util/build.gradle.kts index 536d597aa0e..ba14ab8c09d 100644 --- a/libraries/tools/kotlin-script-util/build.gradle.kts +++ b/libraries/tools/kotlin-script-util/build.gradle.kts @@ -16,7 +16,6 @@ dependencies { compileOnly("com.jcabi:jcabi-aether:0.10.1") compileOnly("org.sonatype.aether:aether-api:1.13.1") compileOnly("org.apache.maven:maven-core:3.0.3") - compileOnly("org.apache.ivy:ivy:2.4.0") testCompileOnly(project(":compiler:cli")) testCompile(project(":kotlin-test:kotlin-test-junit")) testRuntime(project(":kotlin-reflect")) @@ -25,7 +24,6 @@ dependencies { testRuntime("com.jcabi:jcabi-aether:0.10.1") testRuntime("org.sonatype.aether:aether-api:1.13.1") testRuntime("org.apache.maven:maven-core:3.0.3") - testRuntime("org.apache.ivy:ivy:2.4.0") compileOnly(intellijDep()) { includeJars("openapi", "util") } testCompile(intellijDep()) { includeJars("openapi", "platform-api", "util") } } diff --git a/libraries/tools/kotlin-script-util/build.gradle.kts.173 b/libraries/tools/kotlin-script-util/build.gradle.kts.173 index 319b3aa1dbf..fcf0b50c694 100644 --- a/libraries/tools/kotlin-script-util/build.gradle.kts.173 +++ b/libraries/tools/kotlin-script-util/build.gradle.kts.173 @@ -16,7 +16,6 @@ dependencies { compileOnly("com.jcabi:jcabi-aether:0.10.1") compileOnly("org.sonatype.aether:aether-api:1.13.1") compileOnly("org.apache.maven:maven-core:3.0.3") - compileOnly("org.apache.ivy:ivy:2.4.0") testCompileOnly(project(":compiler:cli")) testCompile(project(":kotlin-test:kotlin-test-junit")) testRuntime(project(":kotlin-reflect")) @@ -25,7 +24,6 @@ dependencies { testRuntime("com.jcabi:jcabi-aether:0.10.1") testRuntime("org.sonatype.aether:aether-api:1.13.1") testRuntime("org.apache.maven:maven-core:3.0.3") - testRuntime("org.apache.ivy:ivy:2.4.0") compileOnly(intellijDep()) { includeJars("openapi", "util") } testCompile(intellijDep()) { includeJars("openapi", "util") } } diff --git a/libraries/tools/kotlin-script-util/build.gradle.kts.as32 b/libraries/tools/kotlin-script-util/build.gradle.kts.as32 index 536d597aa0e..ba14ab8c09d 100644 --- a/libraries/tools/kotlin-script-util/build.gradle.kts.as32 +++ b/libraries/tools/kotlin-script-util/build.gradle.kts.as32 @@ -16,7 +16,6 @@ dependencies { compileOnly("com.jcabi:jcabi-aether:0.10.1") compileOnly("org.sonatype.aether:aether-api:1.13.1") compileOnly("org.apache.maven:maven-core:3.0.3") - compileOnly("org.apache.ivy:ivy:2.4.0") testCompileOnly(project(":compiler:cli")) testCompile(project(":kotlin-test:kotlin-test-junit")) testRuntime(project(":kotlin-reflect")) @@ -25,7 +24,6 @@ dependencies { testRuntime("com.jcabi:jcabi-aether:0.10.1") testRuntime("org.sonatype.aether:aether-api:1.13.1") testRuntime("org.apache.maven:maven-core:3.0.3") - testRuntime("org.apache.ivy:ivy:2.4.0") compileOnly(intellijDep()) { includeJars("openapi", "util") } testCompile(intellijDep()) { includeJars("openapi", "platform-api", "util") } } diff --git a/libraries/tools/kotlin-script-util/src/main/kotlin/org/jetbrains/kotlin/script/util/resolve.kt b/libraries/tools/kotlin-script-util/src/main/kotlin/org/jetbrains/kotlin/script/util/resolve.kt index fb8f26fc6f8..d347ad7133f 100644 --- a/libraries/tools/kotlin-script-util/src/main/kotlin/org/jetbrains/kotlin/script/util/resolve.kt +++ b/libraries/tools/kotlin-script-util/src/main/kotlin/org/jetbrains/kotlin/script/util/resolve.kt @@ -78,5 +78,3 @@ class LocalFilesResolver : class FilesAndMavenResolver : KotlinAnnotatedScriptDependenciesResolver(emptyList(), arrayListOf(DirectResolver(), MavenResolver())) -class FilesAndIvyResolver : - KotlinAnnotatedScriptDependenciesResolver(emptyList(), arrayListOf(DirectResolver(), IvyResolver())) diff --git a/libraries/tools/kotlin-script-util/src/main/kotlin/org/jetbrains/kotlin/script/util/templates/templates.kt b/libraries/tools/kotlin-script-util/src/main/kotlin/org/jetbrains/kotlin/script/util/templates/templates.kt index a6e70e6941b..33982dd6309 100644 --- a/libraries/tools/kotlin-script-util/src/main/kotlin/org/jetbrains/kotlin/script/util/templates/templates.kt +++ b/libraries/tools/kotlin-script-util/src/main/kotlin/org/jetbrains/kotlin/script/util/templates/templates.kt @@ -18,7 +18,6 @@ package org.jetbrains.kotlin.script.util.templates -import org.jetbrains.kotlin.script.util.FilesAndIvyResolver import org.jetbrains.kotlin.script.util.FilesAndMavenResolver import org.jetbrains.kotlin.script.util.LocalFilesResolver import kotlin.script.templates.ScriptTemplateDefinition @@ -29,9 +28,6 @@ abstract class StandardArgsScriptTemplateWithLocalResolving(val args: Array) -@ScriptTemplateDefinition(resolver = FilesAndIvyResolver::class, scriptFilePattern = ".*\\.kts") -abstract class StandardArgsScriptTemplateWithIvyResolving(val args: Array) - @ScriptTemplateDefinition(resolver = LocalFilesResolver::class, scriptFilePattern = ".*\\.kts") abstract class BindingsScriptTemplateWithLocalResolving(val bindings: Map) diff --git a/libraries/tools/kotlin-script-util/src/test/kotlin/org/jetbrains/kotlin/script/util/ScriptUtilIT.kt b/libraries/tools/kotlin-script-util/src/test/kotlin/org/jetbrains/kotlin/script/util/ScriptUtilIT.kt index 73c26641ef7..0126d6839e0 100644 --- a/libraries/tools/kotlin-script-util/src/test/kotlin/org/jetbrains/kotlin/script/util/ScriptUtilIT.kt +++ b/libraries/tools/kotlin-script-util/src/test/kotlin/org/jetbrains/kotlin/script/util/ScriptUtilIT.kt @@ -32,7 +32,6 @@ import org.jetbrains.kotlin.config.JVMConfigurationKeys import org.jetbrains.kotlin.script.KotlinScriptDefinition import org.jetbrains.kotlin.script.KotlinScriptDefinitionFromAnnotatedTemplate import org.jetbrains.kotlin.script.util.templates.BindingsScriptTemplateWithLocalResolving -import org.jetbrains.kotlin.script.util.templates.StandardArgsScriptTemplateWithIvyResolving import org.jetbrains.kotlin.script.util.templates.StandardArgsScriptTemplateWithLocalResolving import org.jetbrains.kotlin.script.util.templates.StandardArgsScriptTemplateWithMavenResolving import org.jetbrains.kotlin.utils.PathUtil.getResourcePathForClass @@ -106,17 +105,6 @@ done } } - @Test - fun testIvyResolveStdJUnitHelloWorld() { - val scriptClass = compileScript("args-junit-hello-world.kts", StandardArgsScriptTemplateWithIvyResolving::class) - Assert.assertNotNull(scriptClass) - captureOut { - scriptClass!!.getConstructor(Array::class.java)!!.newInstance(arrayOf("a1")) - }.let { - Assert.assertEquals(argsHelloWorldOutput.linesSplitTrim(), it.linesSplitTrim()) - } - } - private fun compileScript( scriptFileName: String, scriptTemplate: KClass,