From bf09d91e80eb2c8bdbb5f883cd8fc4697b105805 Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Mon, 3 Jul 2017 19:23:14 +0300 Subject: [PATCH] script.runtime: restore old apis and mark as deprecated Needed for compatibility (i.e. with old gradle kdsl versions) --- .../dependencies/dependencies_deprecated.kt | 61 +++++++++++++++++++ .../kotlin/script/dependencies/resolvers.kt | 5 +- .../dependencies/resolvers_deprecated.kt | 49 +++++++++++++++ .../kotlin/script/templates/annotations.kt | 5 +- 4 files changed, 117 insertions(+), 3 deletions(-) create mode 100644 core/script.runtime/src/kotlin/script/dependencies/dependencies_deprecated.kt create mode 100644 core/script.runtime/src/kotlin/script/dependencies/resolvers_deprecated.kt diff --git a/core/script.runtime/src/kotlin/script/dependencies/dependencies_deprecated.kt b/core/script.runtime/src/kotlin/script/dependencies/dependencies_deprecated.kt new file mode 100644 index 00000000000..a5f063e8c60 --- /dev/null +++ b/core/script.runtime/src/kotlin/script/dependencies/dependencies_deprecated.kt @@ -0,0 +1,61 @@ +/* + * 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") + +package kotlin.script.dependencies + +import java.io.File + +@Deprecated("Deprecated API. Use ScriptDependencies class.") +interface KotlinScriptExternalDependencies : Comparable { + val javaHome: String? get() = null + val classpath: Iterable get() = emptyList() + val imports: Iterable get() = emptyList() + val sources: Iterable get() = emptyList() + val scripts: Iterable get() = emptyList() + + override fun compareTo(other: KotlinScriptExternalDependencies): Int = + compareValues(javaHome, other.javaHome) + .chainCompare { compareIterables(classpath, other.classpath) } + .chainCompare { compareIterables(imports, other.imports) } + .chainCompare { compareIterables(sources, other.sources) } + .chainCompare { compareIterables(scripts, other.scripts) } +} + +// copied form Comparisons.kt to resolve temporary build issues with dependency on stdlib +private fun > compareValues(a: T?, b: T?): Int { + if (a === b) return 0 + if (a == null) return -1 + if (b == null) return 1 + + @Suppress("UNCHECKED_CAST") + return (a as Comparable).compareTo(b) +} + +private fun > compareIterables(a: Iterable, b: Iterable): Int { + val ia = a.iterator() + val ib = b.iterator() + while (true) { + if (ia.hasNext() && !ib.hasNext()) return 1 + if (!ia.hasNext() && !ib.hasNext()) return 0 + if (!ia.hasNext()) return -1 + val compRes = compareValues(ia.next(), ib.next()) + if (compRes != 0) return compRes + } +} + +private inline fun Int.chainCompare(compFn: () -> Int): Int = if (this != 0) this else compFn() \ No newline at end of file diff --git a/core/script.runtime/src/kotlin/script/dependencies/resolvers.kt b/core/script.runtime/src/kotlin/script/dependencies/resolvers.kt index d566a48db7f..ff102997c9f 100644 --- a/core/script.runtime/src/kotlin/script/dependencies/resolvers.kt +++ b/core/script.runtime/src/kotlin/script/dependencies/resolvers.kt @@ -23,7 +23,7 @@ import kotlin.script.dependencies.DependenciesResolver.ResolveResult typealias Environment = Map -interface DependenciesResolver { +interface DependenciesResolver : @Suppress("DEPRECATION") ScriptDependenciesResolver { fun resolve(scriptContents: ScriptContents, environment: Environment): ResolveResult object NoDependencies : DependenciesResolver { @@ -51,6 +51,9 @@ interface ScriptContents { val file: File? val annotations: Iterable val text: CharSequence? + + @Deprecated("Use DependenciesResolver interface") + data class Position(val line: Int, val col: Int) } data class ScriptReport(val message: String, val severity: Severity = ScriptReport.Severity.ERROR, val position: Position? = null) { diff --git a/core/script.runtime/src/kotlin/script/dependencies/resolvers_deprecated.kt b/core/script.runtime/src/kotlin/script/dependencies/resolvers_deprecated.kt new file mode 100644 index 00000000000..78fc5e14936 --- /dev/null +++ b/core/script.runtime/src/kotlin/script/dependencies/resolvers_deprecated.kt @@ -0,0 +1,49 @@ +/* + * 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") + +package kotlin.script.dependencies + +import java.util.concurrent.Future +import java.util.concurrent.TimeUnit + +@Deprecated("Use DependenciesResolver interface") +interface ScriptDependenciesResolver { + + enum class ReportSeverity { ERROR, WARNING, INFO, DEBUG } + + fun resolve(script: ScriptContents, + environment: Environment?, + report: (ReportSeverity, String, ScriptContents.Position?) -> Unit, + previousDependencies: KotlinScriptExternalDependencies? + ): Future = PseudoFuture(null) +} + +@Deprecated("Use DependenciesResolver interface") +class BasicScriptDependenciesResolver : ScriptDependenciesResolver + +@Deprecated("Use DependenciesResolver interface") +fun KotlinScriptExternalDependencies?.asFuture(): PseudoFuture = PseudoFuture(this) + +@Deprecated("Use DependenciesResolver interface") +class PseudoFuture(private val value: T): Future { + override fun get(): T = value + override fun get(p0: Long, p1: TimeUnit): T = value + override fun cancel(p0: Boolean): Boolean = false + override fun isDone(): Boolean = true + override fun isCancelled(): Boolean = false +} diff --git a/core/script.runtime/src/kotlin/script/templates/annotations.kt b/core/script.runtime/src/kotlin/script/templates/annotations.kt index 43392b340f5..f0b83d7c9fe 100644 --- a/core/script.runtime/src/kotlin/script/templates/annotations.kt +++ b/core/script.runtime/src/kotlin/script/templates/annotations.kt @@ -19,13 +19,14 @@ package kotlin.script.templates import kotlin.reflect.KClass -import kotlin.script.dependencies.DependenciesResolver +import kotlin.script.dependencies.DependenciesResolver.NoDependencies +import kotlin.script.dependencies.ScriptDependenciesResolver const val DEFAULT_SCRIPT_FILE_PATTERN = ".*\\.kts" @Target(AnnotationTarget.CLASS) @Retention(AnnotationRetention.RUNTIME) -annotation class ScriptTemplateDefinition(val resolver: KClass = DependenciesResolver.NoDependencies::class, +annotation class ScriptTemplateDefinition(val resolver: KClass = NoDependencies::class, val scriptFilePattern: String = DEFAULT_SCRIPT_FILE_PATTERN) @Target(AnnotationTarget.FUNCTION, AnnotationTarget.CLASS)