[LL API] Fix on-air analysis for scripts (KTIJ-21108)

The implementation is rather limited. Advanced cases, such as
replacing a script with another one with different import directives,
won't work because of non-trivial relationship between 'FirFile' and
'FirScript'.
This commit is contained in:
Yan Zhulanow
2023-02-27 19:58:08 +09:00
committed by Space Team
parent ae40ddcf03
commit 1cfd2ae7ff
6 changed files with 80 additions and 43 deletions
@@ -70,3 +70,23 @@ inline fun buildScript(init: FirScriptBuilder.() -> Unit): FirScript {
}
return FirScriptBuilder().apply(init).build()
}
@OptIn(ExperimentalContracts::class)
inline fun buildScriptCopy(original: FirScript, init: FirScriptBuilder.() -> Unit): FirScript {
contract {
callsInPlace(init, kotlin.contracts.InvocationKind.EXACTLY_ONCE)
}
val copyBuilder = FirScriptBuilder()
copyBuilder.source = original.source
copyBuilder.resolvePhase = original.resolvePhase
copyBuilder.annotations.addAll(original.annotations)
copyBuilder.moduleData = original.moduleData
copyBuilder.origin = original.origin
copyBuilder.attributes = original.attributes.copy()
copyBuilder.name = original.name
copyBuilder.statements.addAll(original.statements)
copyBuilder.symbol = original.symbol
copyBuilder.parameters.addAll(original.parameters)
copyBuilder.contextReceivers.addAll(original.contextReceivers)
return copyBuilder.apply(init).build()
}
@@ -357,6 +357,10 @@ object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTree
fields from resolvedQualifier
}
builder(script) {
withCopy()
}
builder(resolvedQualifier) {
parents += abstractResolvedQualifierBuilder
defaultFalse("isNullableLHSForCallableReference", "isFullyQualified")