Add script config refinement before compilation into API

This commit is contained in:
Ilya Chernikov
2018-11-29 18:14:46 +01:00
parent 3fe324bbb4
commit e0a542234f
2 changed files with 50 additions and 16 deletions
@@ -44,19 +44,22 @@ class BridgeDependenciesResolver(
val defaultImports = scriptCompilationConfiguration[ScriptCompilationConfiguration.defaultImports]?.toList() ?: emptyList()
val refineFn = scriptCompilationConfiguration[ScriptCompilationConfiguration.refineConfigurationOnAnnotations]?.handler
?: return DependenciesResolver.ResolveResult.Success(
ScriptDependencies(
classpath = oldClasspath,
sources = scriptCompilationConfiguration[ScriptCompilationConfiguration.ide.dependenciesSources].toClassPathOrEmpty(),
imports = defaultImports
),
diagnostics
)
val refineResults = refineFn(
ScriptConfigurationRefinementContext(scriptContents.toScriptSource(), scriptCompilationConfiguration, processedScriptData)
fun ScriptCompilationConfiguration.toDependencies(classpath: List<File>): ScriptDependencies = ScriptDependencies(
classpath = classpath,
sources = this[ScriptCompilationConfiguration.ide.dependenciesSources].toClassPathOrEmpty(),
imports = defaultImports
)
val refineResults = scriptCompilationConfiguration.refineWith(
scriptCompilationConfiguration[ScriptCompilationConfiguration.refineConfigurationOnAnnotations]?.handler,
scriptContents, processedScriptData
).onSuccess {
it.refineWith(
scriptCompilationConfiguration[ScriptCompilationConfiguration.refineConfigurationBeforeCompiling]?.handler,
scriptContents, processedScriptData
)
}
val refinedConfiguration = when (refineResults) {
is ResultWithDiagnostics.Failure ->
return DependenciesResolver.ResolveResult.Failure(refineResults.reports.mapScriptReportsToDiagnostics())
@@ -98,3 +101,20 @@ internal fun ScriptContents.toScriptSource(): SourceCode = when {
}
internal fun List<ScriptDependency>?.toClassPathOrEmpty() = this?.flatMap { (it as JvmDependency).classpath } ?: emptyList()
internal fun List<SourceCode>?.toFilesOrEmpty() = this?.map {
val externalSource = it as? ExternalSourceCode
externalSource?.externalLocation?.toFile()
?: throw RuntimeException("Unsupported source in requireSources parameter - only local files are supported now (${externalSource?.externalLocation})")
} ?: emptyList()
fun ScriptCompilationConfiguration.refineWith(
handler: RefineScriptCompilationConfigurationHandler?, scriptContents: ScriptContents, processedScriptData: ScriptCollectedData
): ResultWithDiagnostics<ScriptCompilationConfiguration> {
if (handler == null) return this.asSuccess()
return handler(
ScriptConfigurationRefinementContext(scriptContents.toScriptSource(), this, processedScriptData)
)
}