Implement composable refinement handlers...
for compilation and evaluation configurations. Add utilities to apply refinements uniformly. Also fix one invoke for list values - it was not consistent with other builders
This commit is contained in:
+7
-5
@@ -56,12 +56,14 @@ abstract class KotlinScriptDefinitionAdapterFromNewAPIBase : KotlinScriptDefinit
|
||||
}
|
||||
|
||||
override val acceptedAnnotations: List<KClass<out Annotation>> by lazy(LazyThreadSafetyMode.PUBLICATION) {
|
||||
scriptCompilationConfiguration[ScriptCompilationConfiguration.refineConfigurationOnAnnotations]?.annotations
|
||||
.orEmpty()
|
||||
.map {
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
getScriptingClass(it) as KClass<out Annotation>
|
||||
scriptCompilationConfiguration[ScriptCompilationConfiguration.refineConfigurationOnAnnotations]
|
||||
?.flatMap {
|
||||
it.annotations.map { ann ->
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
getScriptingClass(ann) as KClass<out Annotation>
|
||||
}
|
||||
}
|
||||
.orEmpty()
|
||||
}
|
||||
|
||||
override val implicitReceivers: List<KType> by lazy(LazyThreadSafetyMode.PUBLICATION) {
|
||||
|
||||
+10
-11
@@ -227,15 +227,12 @@ fun refineScriptCompilationConfiguration(
|
||||
val collectedData =
|
||||
getScriptCollectedData(ktFileSource.ktFile, compilationConfiguration, project, definition.contextClassLoader)
|
||||
|
||||
return compilationConfiguration.refineWith(
|
||||
compilationConfiguration[ScriptCompilationConfiguration.refineConfigurationOnAnnotations]?.handler, collectedData, script
|
||||
).onSuccess {
|
||||
it.refineWith(
|
||||
compilationConfiguration[ScriptCompilationConfiguration.refineConfigurationBeforeCompiling]?.handler, collectedData, script
|
||||
)
|
||||
}.onSuccess {
|
||||
ScriptCompilationConfigurationWrapper.FromCompilationConfiguration(ktFileSource, it).asSuccess()
|
||||
}
|
||||
return compilationConfiguration.refineOnAnnotations(script, collectedData)
|
||||
.onSuccess {
|
||||
it.refineBeforeCompiling(script, collectedData)
|
||||
}.onSuccess {
|
||||
ScriptCompilationConfigurationWrapper.FromCompilationConfiguration(ktFileSource, it).asSuccess()
|
||||
}
|
||||
} else {
|
||||
val file = script.getVirtualFile(definition)
|
||||
val scriptContents =
|
||||
@@ -335,8 +332,10 @@ fun getScriptCollectedData(
|
||||
val jvmGetScriptingClass = (getScriptingClass as? JvmGetScriptingClass)
|
||||
?: throw IllegalArgumentException("Expecting JvmGetScriptingClass in the hostConfiguration[getScriptingClass], got $getScriptingClass")
|
||||
val acceptedAnnotations =
|
||||
compilationConfiguration[ScriptCompilationConfiguration.refineConfigurationOnAnnotations]?.annotations?.mapNotNull {
|
||||
jvmGetScriptingClass(it, contextClassLoader, hostConfiguration) as? KClass<Annotation> // TODO errors
|
||||
compilationConfiguration[ScriptCompilationConfiguration.refineConfigurationOnAnnotations]?.flatMap {
|
||||
it.annotations.mapNotNull { ann ->
|
||||
jvmGetScriptingClass(ann, contextClassLoader, hostConfiguration) as? KClass<Annotation> // TODO errors
|
||||
}
|
||||
}.orEmpty()
|
||||
val annotations = scriptFile.annotationEntries.construct(contextClassLoader, acceptedAnnotations, project)
|
||||
return ScriptCollectedData(
|
||||
|
||||
Reference in New Issue
Block a user