Skip to content

Commit 3b1e749

Browse files
committed
Change dependencies resolver API - it gets message reporter and returns Future now
1 parent 464445c commit 3b1e749

File tree

2 files changed

+32
-7
lines changed

2 files changed

+32
-7
lines changed

compiler/frontend/src/org/jetbrains/kotlin/script/scriptTemplate.kt

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ import org.jetbrains.kotlin.psi.KtScript
3030
import org.jetbrains.kotlin.types.KotlinType
3131
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull
3232
import java.io.File
33+
import java.util.concurrent.Future
34+
import java.util.concurrent.TimeUnit
3335
import kotlin.reflect.*
3436

3537
const val DEFAULT_SCRIPT_FILE_PATTERN = "*.\\.kts"
@@ -50,17 +52,34 @@ annotation class ScriptFilePattern(val pattern: String)
5052
annotation class ScriptDependencyResolver(val resolver: KClass<out ScriptDependenciesResolver>)
5153

5254
interface ScriptContents {
55+
56+
data class Position(val line: Int, val col: Int)
57+
5358
val file: File?
5459
val annotations: Iterable<Annotation>
5560
val text: CharSequence?
5661
}
5762

63+
class PseudoFuture<T>(private val value: T): Future<T> {
64+
override fun get(): T = value
65+
override fun get(p0: Long, p1: TimeUnit): T = value
66+
override fun cancel(p0: Boolean): Boolean = false
67+
override fun isDone(): Boolean = true
68+
override fun isCancelled(): Boolean = false
69+
}
70+
71+
fun KotlinScriptExternalDependencies?.asFuture(): PseudoFuture<KotlinScriptExternalDependencies?> = PseudoFuture(this)
72+
5873
// TODO: rename to just ScriptDependenciesResolver as soon as current deprecated one will be dropped
5974
interface ScriptDependenciesResolverEx {
75+
76+
enum class ReportSeverity { ERROR, WARNING, INFO, DEBUG }
77+
6078
fun resolve(script: ScriptContents,
6179
environment: Map<String, Any?>?,
62-
previousDependencies: KotlinScriptExternalDependencies? = null
63-
): KotlinScriptExternalDependencies? = null
80+
report: (ReportSeverity, String, ScriptContents.Position?) -> Unit,
81+
previousDependencies: KotlinScriptExternalDependencies?
82+
): Future<KotlinScriptExternalDependencies?> = PseudoFuture(null)
6483
}
6584

6685
@Deprecated("Use new ScriptDependenciesResolverEx")
@@ -108,14 +127,16 @@ data class KotlinScriptDefinitionFromTemplate(val template: KClass<out Any>,
108127
private val resolver by lazy { resolverAnn?.resolver?.primaryConstructor?.call() }
109128
override fun resolve(script: ScriptContents,
110129
environment: Map<String, Any?>?,
130+
report: (ScriptDependenciesResolverEx.ReportSeverity, String, ScriptContents.Position?) -> Unit,
111131
previousDependencies: KotlinScriptExternalDependencies?
112-
): KotlinScriptExternalDependencies? =
132+
): Future<KotlinScriptExternalDependencies?> =
113133
resolver?.resolve(
114134
environment?.get("projectRoot") as? File?,
115135
script.file,
116136
emptyList(),
117137
environment as Any?
118138
)
139+
.asFuture()
119140
}
120141

121142
private val definitionData by lazy {
@@ -158,8 +179,11 @@ data class KotlinScriptDefinitionFromTemplate(val template: KClass<out Any>,
158179
psiAnn.typeName.let { it == ann.simpleName || it == ann.qualifiedName }
159180
}?.let { KtAnnotationWrapper(psiAnn, classLoader.loadClass(it.qualifiedName).kotlin as KClass<out Annotation>) }
160181
}
161-
val fileDeps = definitionData.resolver?.resolve(BasicScriptContents(file, annotationWrappers.map { it.getProxy(classLoader) }), environment, previousDependencies)
162-
return fileDeps
182+
val fileDeps = definitionData.resolver?.resolve(BasicScriptContents(file, annotationWrappers.map { it.getProxy(classLoader) }),
183+
environment,
184+
{ reportSeverity: ScriptDependenciesResolverEx.ReportSeverity, s: String, position: ScriptContents.Position? -> },
185+
previousDependencies)
186+
return fileDeps?.get()
163187
}
164188

165189
private fun <TF> getAnnotationEntries(file: TF, project: Project): Iterable<KtAnnotationEntry> = when (file) {

compiler/tests/org/jetbrains/kotlin/scripts/ScriptTest2.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,8 +133,9 @@ class TestKotlinScriptDependenciesResolver : ScriptDependenciesResolverEx {
133133
@AcceptedAnnotations(DependsOn::class, DependsOnTwo::class)
134134
override fun resolve(script: ScriptContents,
135135
environment: Map<String, Any?>?,
136+
report: (ScriptDependenciesResolverEx.ReportSeverity, String, ScriptContents.Position?) -> Unit,
136137
previousDependencies: KotlinScriptExternalDependencies?
137-
): KotlinScriptExternalDependencies?
138+
): Future<KotlinScriptExternalDependencies?>
138139
{
139140
val cp = script.annotations.flatMap {
140141
when (it) {
@@ -153,7 +154,7 @@ class TestKotlinScriptDependenciesResolver : ScriptDependenciesResolverEx {
153154
return object : KotlinScriptExternalDependencies {
154155
override val classpath: Iterable<File> = classpathFromClassloader() + cp
155156
override val imports: Iterable<String> = listOf("org.jetbrains.kotlin.scripts.DependsOn", "org.jetbrains.kotlin.scripts.DependsOnTwo")
156-
}
157+
}.asFuture()
157158
}
158159

159160
private fun classpathFromClassloader(): List<File> =

0 commit comments

Comments
 (0)