Refactor definition keys
This commit is contained in:
+24
-19
@@ -30,38 +30,43 @@ val ScriptCompileConfigurationKeys.sourceFragments by PropertiesCollection.key<L
|
||||
|
||||
val ScriptCompileConfigurationKeys.scriptBodyTarget by PropertiesCollection.keyCopy(ScriptDefinition.scriptBodyTarget)
|
||||
|
||||
val ScriptCompileConfigurationKeys.scriptImplicitReceivers by PropertiesCollection.keyCopy(ScriptDefinition.scriptImplicitReceivers)
|
||||
val ScriptCompileConfigurationKeys.scriptImplicitReceivers by PropertiesCollection.keyCopy(ScriptDefinition.implicitReceivers)
|
||||
|
||||
val ScriptCompileConfigurationKeys.contextVariables by PropertiesCollection.keyCopy(ScriptDefinition.contextVariables)
|
||||
val ScriptCompileConfigurationKeys.providedProperties by PropertiesCollection.keyCopy(ScriptDefinition.providedProperties)
|
||||
|
||||
val ScriptCompileConfigurationKeys.defaultImports by PropertiesCollection.keyCopy(ScriptDefinition.defaultImports)
|
||||
|
||||
val ScriptCompileConfigurationKeys.restrictions by PropertiesCollection.keyCopy(ScriptDefinition.restrictions)
|
||||
|
||||
val ScriptCompileConfigurationKeys.importedScripts by PropertiesCollection.keyCopy(ScriptDefinition.importedScripts)
|
||||
|
||||
val ScriptCompileConfigurationKeys.dependencies by PropertiesCollection.keyCopy(ScriptDefinition.dependencies)
|
||||
|
||||
val ScriptCompileConfigurationKeys.compilerOptions by PropertiesCollection.keyCopy(ScriptDefinition.compilerOptions)
|
||||
|
||||
|
||||
interface ProcessedScriptDataKeys
|
||||
interface ScriptCollectedDataKeys
|
||||
|
||||
class ProcessedScriptData(properties: Map<PropertiesCollection.Key<*>, Any>) : PropertiesCollection(properties) {
|
||||
class ScriptCollectedData(properties: Map<PropertiesCollection.Key<*>, Any>) : PropertiesCollection(properties) {
|
||||
|
||||
companion object : ProcessedScriptDataKeys
|
||||
companion object : ScriptCollectedDataKeys
|
||||
}
|
||||
|
||||
val ProcessedScriptDataKeys.foundAnnotations by PropertiesCollection.key<List<Annotation>>()
|
||||
val ScriptCollectedDataKeys.foundAnnotations by PropertiesCollection.key<List<Annotation>>()
|
||||
|
||||
val ProcessedScriptDataKeys.foundFragments by PropertiesCollection.key<List<ScriptSourceNamedFragment>>()
|
||||
val ScriptCollectedDataKeys.foundFragments by PropertiesCollection.key<List<ScriptSourceNamedFragment>>()
|
||||
|
||||
class ScriptDataFacade(
|
||||
val source: ScriptSource,
|
||||
val definition: ScriptDefinition,
|
||||
val configuration: ScriptCompileConfiguration?,
|
||||
val collectedData: ScriptCollectedData? = null
|
||||
)
|
||||
|
||||
interface RefineScriptCompilationConfigurationHandler {
|
||||
suspend operator fun invoke(
|
||||
scriptSource: ScriptSource,
|
||||
scriptDefinition: ScriptDefinition,
|
||||
configuration: ScriptCompileConfiguration?,
|
||||
processedScriptData: ProcessedScriptData? = null
|
||||
): ResultWithDiagnostics<ScriptCompileConfiguration?>
|
||||
}
|
||||
typealias RefineScriptCompilationConfigurationHandler = (ScriptDataFacade) -> ResultWithDiagnostics<ScriptCompileConfiguration?>
|
||||
|
||||
class RefineConfigurationOnAnnotationsData(
|
||||
val annotations: List<KotlinType>,
|
||||
val handler: RefineScriptCompilationConfigurationHandler
|
||||
)
|
||||
|
||||
class RefineConfigurationOnSectionsData(
|
||||
val sections: List<String>,
|
||||
val handler: RefineScriptCompilationConfigurationHandler
|
||||
)
|
||||
|
||||
@@ -22,7 +22,7 @@ data class ScriptSourceNamedFragment(val name: String?, val range: ScriptSource.
|
||||
|
||||
enum class ScriptBodyTarget {
|
||||
Constructor,
|
||||
SingleAbstractMethod
|
||||
SAMFunction
|
||||
}
|
||||
|
||||
data class ResolvingRestrictionRule(
|
||||
|
||||
@@ -29,7 +29,7 @@ open class ScriptDefinition(baseDefinitions: Iterable<ScriptDefinition>, body: B
|
||||
}
|
||||
}
|
||||
|
||||
val ScriptDefinitionKeys.name by PropertiesCollection.key<String>("Kotlin script") // Name of the script type
|
||||
val ScriptDefinitionKeys.displayName by PropertiesCollection.key<String>("Kotlin script") // Name of the script type
|
||||
|
||||
val ScriptDefinitionKeys.fileExtension by PropertiesCollection.key<String>("kts") // file extension
|
||||
|
||||
@@ -37,31 +37,25 @@ val ScriptDefinitionKeys.baseClass by PropertiesCollection.key<KotlinType>() //
|
||||
|
||||
val ScriptDefinitionKeys.scriptBodyTarget by PropertiesCollection.key<ScriptBodyTarget>(ScriptBodyTarget.Constructor)
|
||||
|
||||
val ScriptDefinitionKeys.scriptImplicitReceivers by PropertiesCollection.key<List<KotlinType>>() // in the order from outer to inner scope
|
||||
val ScriptDefinitionKeys.implicitReceivers by PropertiesCollection.key<List<KotlinType>>() // in the order from outer to inner scope
|
||||
|
||||
val ScriptDefinitionKeys.contextVariables by PropertiesCollection.key<Map<String, KotlinType>>() // external variables
|
||||
val ScriptDefinitionKeys.providedProperties by PropertiesCollection.key<Map<String, KotlinType>>() // external variables
|
||||
|
||||
val ScriptDefinitionKeys.defaultImports by PropertiesCollection.key<List<String>>()
|
||||
|
||||
val ScriptDefinitionKeys.restrictions by PropertiesCollection.key<List<ResolvingRestrictionRule>>()
|
||||
|
||||
val ScriptDefinitionKeys.importedScripts by PropertiesCollection.key<List<ScriptSource>>()
|
||||
|
||||
val ScriptDefinitionKeys.dependencies by PropertiesCollection.key<List<ScriptDependency>>()
|
||||
|
||||
val ScriptDefinitionKeys.generatedClassAnnotations by PropertiesCollection.key<List<Annotation>>()
|
||||
|
||||
val ScriptDefinitionKeys.generatedMethodAnnotations by PropertiesCollection.key<List<Annotation>>()
|
||||
val ScriptDefinitionKeys.copyAnnotationsFrom by PropertiesCollection.key<List<KotlinType>>()
|
||||
|
||||
val ScriptDefinitionKeys.compilerOptions by PropertiesCollection.key<List<String>>() // Q: CommonCompilerOptions instead?
|
||||
|
||||
val ScriptDefinitionKeys.refineConfigurationHandler by PropertiesCollection.key<RefineScriptCompilationConfigurationHandler>() // dynamic configurator
|
||||
val ScriptDefinitionKeys.refineConfigurationBeforeParsing by PropertiesCollection.key<RefineScriptCompilationConfigurationHandler>() // default: false
|
||||
|
||||
val ScriptDefinitionKeys.refineConfigurationBeforeParsing by PropertiesCollection.key<Boolean>() // default: false
|
||||
val ScriptDefinitionKeys.refineConfigurationOnAnnotations by PropertiesCollection.key<RefineConfigurationOnAnnotationsData>()
|
||||
|
||||
val ScriptDefinitionKeys.refineConfigurationOnAnnotations by PropertiesCollection.key<List<KotlinType>>()
|
||||
|
||||
val ScriptDefinitionKeys.refineConfigurationOnSections by PropertiesCollection.key<List<String>>()
|
||||
val ScriptDefinitionKeys.refineConfigurationOnSections by PropertiesCollection.key<RefineConfigurationOnSectionsData>()
|
||||
|
||||
// DSL:
|
||||
|
||||
@@ -70,36 +64,36 @@ val ScriptDefinition.Builder.refineConfiguration get() = RefineConfigurationBuil
|
||||
|
||||
class RefineConfigurationBuilder : PropertiesCollection.Builder() {
|
||||
|
||||
fun handler(fn: RefineScriptCompilationConfigurationHandler) {
|
||||
set(ScriptDefinition.refineConfigurationHandler, fn)
|
||||
fun beforeParsing(handler: RefineScriptCompilationConfigurationHandler) {
|
||||
set(ScriptDefinition.refineConfigurationBeforeParsing, handler)
|
||||
}
|
||||
|
||||
fun triggerBeforeParsing(value: Boolean = true) {
|
||||
set(ScriptDefinition.refineConfigurationBeforeParsing, value)
|
||||
fun onAnnotations(annotations: List<KotlinType>, handler: RefineScriptCompilationConfigurationHandler) {
|
||||
set(ScriptDefinition.refineConfigurationOnAnnotations, RefineConfigurationOnAnnotationsData(annotations, handler))
|
||||
}
|
||||
|
||||
fun triggerOnAnnotations(annotations: Iterable<KotlinType>) {
|
||||
ScriptDefinition.refineConfigurationOnAnnotations.append(annotations)
|
||||
fun onAnnotations(vararg annotations: KotlinType, handler: RefineScriptCompilationConfigurationHandler) {
|
||||
onAnnotations(annotations.asList(), handler)
|
||||
}
|
||||
|
||||
fun triggerOnAnnotations(vararg annotations: KotlinType) {
|
||||
triggerOnAnnotations(annotations.asIterable())
|
||||
inline fun <reified T : Annotation> onAnnotations(noinline handler: RefineScriptCompilationConfigurationHandler) {
|
||||
onAnnotations(listOf(KotlinType(T::class)), handler)
|
||||
}
|
||||
|
||||
inline fun <reified T : Annotation> triggerOnAnnotations() {
|
||||
triggerOnAnnotations(KotlinType(T::class))
|
||||
fun onAnnotations(vararg annotations: KClass<out Annotation>, handler: RefineScriptCompilationConfigurationHandler) {
|
||||
onAnnotations(annotations.map { KotlinType(it) }, handler)
|
||||
}
|
||||
|
||||
fun triggerOnAnnotations(vararg annotations: KClass<out Annotation>) {
|
||||
triggerOnAnnotations(annotations.map { KotlinType(it) })
|
||||
fun onAnnotations(annotations: Iterable<KClass<out Annotation>>, handler: RefineScriptCompilationConfigurationHandler) {
|
||||
onAnnotations(annotations.map { KotlinType(it) }, handler)
|
||||
}
|
||||
|
||||
fun triggerOnSections(sections: Iterable<String>) {
|
||||
ScriptDefinition.refineConfigurationOnSections.append(sections)
|
||||
fun onSections(sections: List<String>, handler: RefineScriptCompilationConfigurationHandler) {
|
||||
set(ScriptDefinition.refineConfigurationOnSections, RefineConfigurationOnSectionsData(sections, handler))
|
||||
}
|
||||
|
||||
fun triggerOnSections(vararg sections: String) {
|
||||
ScriptDefinition.refineConfigurationOnSections.append(*sections)
|
||||
fun onSections(vararg sections: String, handler: RefineScriptCompilationConfigurationHandler) {
|
||||
onSections(sections.asList(), handler)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user