minor: rename FirScript.statements do declarations...

to simplify the following commit that actually convert the types
and wrap statements into blocks.
This commit is contained in:
Ilya Chernikov
2023-12-08 10:13:59 +01:00
committed by Space Team
parent a29a7e6307
commit c9aee5bf09
26 changed files with 52 additions and 53 deletions
@@ -67,7 +67,6 @@ import org.jetbrains.kotlin.resolve.calls.tower.CandidateApplicability
import org.jetbrains.kotlin.utils.addIfNotNull import org.jetbrains.kotlin.utils.addIfNotNull
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull
import org.jetbrains.kotlin.utils.exceptions.errorWithAttachment import org.jetbrains.kotlin.utils.exceptions.errorWithAttachment
import java.util.Arrays
internal class KtFirReferenceShortener( internal class KtFirReferenceShortener(
override val analysisSession: KtFirAnalysisSession, override val analysisSession: KtFirAnalysisSession,
@@ -433,7 +432,7 @@ private class CollectingVisitor(private val collector: ElementsToShortenCollecto
} }
override fun visitScript(script: FirScript) { override fun visitScript(script: FirScript) {
script.statements.forEach { script.declarations.forEach {
it.accept(this) it.accept(this)
} }
} }
@@ -25,7 +25,7 @@ internal class KtFirResultPropertySymbolPointer(private val scriptPointer: KtSym
scriptPointer.restoreSymbol()?.firSymbol?.fir as? FirScript scriptPointer.restoreSymbol()?.firSymbol?.fir as? FirScript
} ?: return null } ?: return null
val lastProperty = script.statements.lastOrNull() as? FirProperty ?: return null val lastProperty = script.declarations.lastOrNull() as? FirProperty ?: return null
if (lastProperty.origin !is FirDeclarationOrigin.ScriptCustomization.ResultProperty) return null if (lastProperty.origin !is FirDeclarationOrigin.ScriptCustomization.ResultProperty) return null
return analysisSession.firSymbolBuilder.variableLikeBuilder.buildPropertySymbol(lastProperty.symbol) as? KtKotlinPropertySymbol return analysisSession.firSymbolBuilder.variableLikeBuilder.buildPropertySymbol(lastProperty.symbol) as? KtKotlinPropertySymbol
} }
@@ -364,9 +364,9 @@ object LowLevelFirApiFacadeForResolveOnAir {
* We assume that [newScript] has the same declarations as [originalScript] * We assume that [newScript] has the same declarations as [originalScript]
*/ */
private fun restoreOriginalDeclarationsInScript(originalScript: FirScript, newScript: FirScript) { private fun restoreOriginalDeclarationsInScript(originalScript: FirScript, newScript: FirScript) {
val updatedStatements = ArrayList<FirStatement>(newScript.statements.size) val updatedStatements = ArrayList<FirStatement>(newScript.declarations.size)
val originalDeclarations = originalScript.statements.iterator() val originalDeclarations = originalScript.declarations.iterator()
for (recreatedStatement in newScript.statements) { for (recreatedStatement in newScript.declarations) {
updatedStatements += if (recreatedStatement.isScriptStatement) { updatedStatements += if (recreatedStatement.isScriptStatement) {
recreatedStatement recreatedStatement
} else { } else {
@@ -379,12 +379,12 @@ object LowLevelFirApiFacadeForResolveOnAir {
scriptDeclarationInconsistencyError(originalScript, newScript) scriptDeclarationInconsistencyError(originalScript, newScript)
} }
newScript.replaceStatements(updatedStatements) newScript.replaceDeclarations(updatedStatements)
} }
private fun scriptDeclarationInconsistencyError(originalScript: FirScript, newScript: FirScript): Nothing { private fun scriptDeclarationInconsistencyError(originalScript: FirScript, newScript: FirScript): Nothing {
val originalDeclarations = originalScript.statements.filterNot(FirStatement::isScriptStatement) val originalDeclarations = originalScript.declarations.filterNot(FirStatement::isScriptStatement)
val newDeclarations = newScript.statements.filterNot(FirStatement::isScriptStatement) val newDeclarations = newScript.declarations.filterNot(FirStatement::isScriptStatement)
errorWithAttachment("New script has ${if (newDeclarations.size > originalDeclarations.size) "more" else "less"} declarations") { errorWithAttachment("New script has ${if (newDeclarations.size > originalDeclarations.size) "more" else "less"} declarations") {
withFirEntry("originalScript", originalScript) withFirEntry("originalScript", originalScript)
withFirEntry("newScript", newScript) withFirEntry("newScript", newScript)
@@ -141,7 +141,7 @@ internal class RootScriptStructureElement(
internal fun <T, R> visitScriptDependentElements(script: FirScript, visitor: FirVisitor<T, R>, data: R) { internal fun <T, R> visitScriptDependentElements(script: FirScript, visitor: FirVisitor<T, R>, data: R) {
script.annotations.forEach { it.accept(visitor, data) } script.annotations.forEach { it.accept(visitor, data) }
script.contextReceivers.forEach { it.accept(visitor, data) } script.contextReceivers.forEach { it.accept(visitor, data) }
script.statements.forEach { script.declarations.forEach {
if (it.isScriptStatement) { if (it.isScriptStatement) {
it.accept(visitor, data) it.accept(visitor, data)
} }
@@ -87,7 +87,7 @@ internal object FirLazyBodiesCalculator {
fun createStatementsForScript(script: FirScript): List<FirStatement> { fun createStatementsForScript(script: FirScript): List<FirStatement> {
val newScript = revive<FirScript>(FirDesignation(emptyList(), script)) val newScript = revive<FirScript>(FirDesignation(emptyList(), script))
return newScript.statements return newScript.declarations
} }
fun needCalculatingAnnotationCall(firAnnotationCall: FirAnnotationCall): Boolean = fun needCalculatingAnnotationCall(firAnnotationCall: FirAnnotationCall): Boolean =
@@ -37,7 +37,7 @@ internal object LLFirPhaseUpdater {
is FirAnonymousInitializer -> target.body?.accept(PhaseUpdatingTransformer, newPhase) is FirAnonymousInitializer -> target.body?.accept(PhaseUpdatingTransformer, newPhase)
is FirScript -> { is FirScript -> {
target.parameters.forEach { it.accept(PhaseUpdatingTransformer, newPhase) } target.parameters.forEach { it.accept(PhaseUpdatingTransformer, newPhase) }
for (statement in target.statements) { for (statement in target.declarations) {
if (!statement.isScriptStatement) continue if (!statement.isScriptStatement) continue
statement.accept(PhaseUpdatingTransformer, newPhase) statement.accept(PhaseUpdatingTransformer, newPhase)
} }
@@ -85,7 +85,7 @@ internal abstract class LLFirAbstractBodyTargetResolver(
protected fun resolveScript(script: FirScript) { protected fun resolveScript(script: FirScript) {
transformer.declarationsTransformer?.withScript(script) { transformer.declarationsTransformer?.withScript(script) {
script.parameters.forEach { it.transformSingle(transformer, ResolutionMode.ContextIndependent) } script.parameters.forEach { it.transformSingle(transformer, ResolutionMode.ContextIndependent) }
script.transformStatements( script.transformDeclarations(
transformer = object : FirTransformer<Any?>() { transformer = object : FirTransformer<Any?>() {
override fun <E : FirElement> transformElement(element: E, data: Any?): E { override fun <E : FirElement> transformElement(element: E, data: Any?): E {
if (element !is FirStatement || !element.isScriptStatement) return element if (element !is FirStatement || !element.isScriptStatement) return element
@@ -291,11 +291,11 @@ private class LLFirBodyTargetResolver(
internal object BodyStateKeepers { internal object BodyStateKeepers {
val SCRIPT: StateKeeper<FirScript, FirDesignationWithFile> = stateKeeper { script, designation -> val SCRIPT: StateKeeper<FirScript, FirDesignationWithFile> = stateKeeper { script, designation ->
val oldStatements = script.statements val oldStatements = script.declarations
if (oldStatements.none { it.isScriptStatement } || script.isCertainlyResolved) return@stateKeeper if (oldStatements.none { it.isScriptStatement } || script.isCertainlyResolved) return@stateKeeper
add(RESULT_PROPERTY, designation) add(RESULT_PROPERTY, designation)
add(FirScript::statements, FirScript::replaceStatements) { add(FirScript::declarations, FirScript::replaceDeclarations) {
val recreatedStatements = FirLazyBodiesCalculator.createStatementsForScript(script) val recreatedStatements = FirLazyBodiesCalculator.createStatementsForScript(script)
requireSameSize(oldStatements, recreatedStatements) requireSameSize(oldStatements, recreatedStatements)
@@ -447,7 +447,7 @@ private fun StateKeeperScope<FirFunction, FirDesignationWithFile>.preserveContra
} }
} }
private fun FirScript.findResultProperty(): FirProperty? = statements.findIsInstanceAnd<FirProperty> { private fun FirScript.findResultProperty(): FirProperty? = declarations.findIsInstanceAnd<FirProperty> {
it.origin == FirDeclarationOrigin.ScriptCustomization.ResultProperty it.origin == FirDeclarationOrigin.ScriptCustomization.ResultProperty
} }
@@ -321,7 +321,7 @@ private fun FirAnnotationContainer.hasAnnotationsToResolve(): Boolean {
this.setter?.hasAnnotationsToResolve() == true || this.setter?.hasAnnotationsToResolve() == true ||
this.backingField?.hasAnnotationsToResolve() == true this.backingField?.hasAnnotationsToResolve() == true
is FirScript -> statements.any { it.isScriptDependentDeclaration && it.hasAnnotationsToResolve() } is FirScript -> declarations.any { it.isScriptDependentDeclaration && it.hasAnnotationsToResolve() }
else -> false else -> false
} }
} }
@@ -168,7 +168,7 @@ internal class LLFirImplicitBodyTargetResolver(
} }
is FirScript -> { is FirScript -> {
if (target.statements.any { it.isScriptDependentDeclaration }) { if (target.declarations.any { it.isScriptDependentDeclaration }) {
resolve(target, BodyStateKeepers.SCRIPT) resolve(target, BodyStateKeepers.SCRIPT)
} }
} }
@@ -97,7 +97,7 @@ internal object FirElementFinder {
} }
subDeclaration is FirScript -> { subDeclaration is FirScript -> {
val scriptDeclarations = subDeclaration.statements.asSequence().filterIsInstance<FirDeclaration>() val scriptDeclarations = subDeclaration.declarations.asSequence().filterIsInstance<FirDeclaration>()
if (find(scriptDeclarations.asIterable(), classIdPathIndex)) { if (find(scriptDeclarations.asIterable(), classIdPathIndex)) {
return true return true
} }
@@ -60,7 +60,7 @@ internal fun KtDeclaration.findSourceNonLocalFirDeclaration(firFile: FirFile, pr
return@findSourceNonLocalFirDeclarationByProvider firScript?.takeIf { it.psi == declaration } return@findSourceNonLocalFirDeclarationByProvider firScript?.takeIf { it.psi == declaration }
} }
firScript?.statements?.filterIsInstance<FirDeclaration>() firScript?.declarations?.filterIsInstance<FirDeclaration>()
} else { } else {
firFile.declarations firFile.declarations
} }
@@ -211,7 +211,7 @@ val FirDeclaration.isGeneratedDeclaration
get() = realPsi == null get() = realPsi == null
internal inline fun FirScript.forEachDeclaration(action: (FirDeclaration) -> Unit) { internal inline fun FirScript.forEachDeclaration(action: (FirDeclaration) -> Unit) {
for (statement in statements) { for (statement in declarations) {
if (statement.isScriptStatement) continue if (statement.isScriptStatement) continue
action(statement as FirDeclaration) action(statement as FirDeclaration)
} }
@@ -242,7 +242,7 @@ internal val FirStatement.isScriptDependentDeclaration: Boolean
get() = this is FirDeclaration && origin == FirDeclarationOrigin.ScriptCustomization.ResultProperty get() = this is FirDeclaration && origin == FirDeclarationOrigin.ScriptCustomization.ResultProperty
internal inline fun FirScript.forEachDependentDeclaration(action: (FirDeclaration) -> Unit) { internal inline fun FirScript.forEachDependentDeclaration(action: (FirDeclaration) -> Unit) {
for (statement in statements) { for (statement in declarations) {
if (statement !is FirDeclaration || !statement.isScriptDependentDeclaration) continue if (statement !is FirDeclaration || !statement.isScriptDependentDeclaration) continue
action(statement) action(statement)
} }
@@ -108,7 +108,7 @@ internal fun checkBodyIsResolved(function: FirFunction) {
} }
internal fun checkStatementsAreResolved(script: FirScript) { internal fun checkStatementsAreResolved(script: FirScript) {
for (statement in script.statements) { for (statement in script.declarations) {
if (statement.isScriptStatement && statement is FirExpression) { if (statement.isScriptStatement && statement is FirExpression) {
checkExpressionTypeIsResolved(statement.coneTypeOrNull, "script statement", script) { checkExpressionTypeIsResolved(statement.coneTypeOrNull, "script statement", script) {
withFirEntry("expression", statement) withFirEntry("expression", statement)
@@ -91,7 +91,7 @@ abstract class AbstractFirLazyDeclarationResolveTestCase : AbstractLowLevelApiLa
val (classSymbol, declarations) = when (symbol) { val (classSymbol, declarations) = when (symbol) {
is FirClassSymbol -> symbol to symbol.declarationSymbols is FirClassSymbol -> symbol to symbol.declarationSymbols
is FirScriptSymbol -> { is FirScriptSymbol -> {
symbol to symbol.fir.let { it.parameters + it.statements }.mapNotNull { (it as? FirDeclaration)?.symbol } symbol to symbol.fir.let { it.parameters + it.declarations }.mapNotNull { (it as? FirDeclaration)?.symbol }
} }
else -> error("Unknown container: ${symbol::class.simpleName}") else -> error("Unknown container: ${symbol::class.simpleName}")
@@ -41,7 +41,7 @@ object FirTopLevelPropertiesChecker : FirFileChecker() {
object FirScriptPropertiesChecker : FirScriptChecker() { object FirScriptPropertiesChecker : FirScriptChecker() {
override fun check(declaration: FirScript, context: CheckerContext, reporter: DiagnosticReporter) { override fun check(declaration: FirScript, context: CheckerContext, reporter: DiagnosticReporter) {
val topLevelProperties = declaration.statements.filterIsInstance<FirProperty>() val topLevelProperties = declaration.declarations.filterIsInstance<FirProperty>()
checkFileLikeDeclaration(declaration, topLevelProperties, context, reporter) checkFileLikeDeclaration(declaration, topLevelProperties, context, reporter)
} }
} }
@@ -518,7 +518,7 @@ class Fir2IrConverter(
addDeclarationToParentIfNeeded(irScript) addDeclarationToParentIfNeeded(irScript)
declarationStorage.withScope(irScript.symbol) { declarationStorage.withScope(irScript.symbol) {
irScript.parent = parent irScript.parent = parent
for (scriptStatement in declaration.statements) { for (scriptStatement in declaration.declarations) {
when (scriptStatement) { when (scriptStatement) {
is FirRegularClass -> { is FirRegularClass -> {
registerClassAndNestedClasses(scriptStatement, irScript) registerClassAndNestedClasses(scriptStatement, irScript)
@@ -528,7 +528,7 @@ class Fir2IrConverter(
else -> {} else -> {}
} }
} }
for (scriptStatement in declaration.statements) { for (scriptStatement in declaration.declarations) {
if (scriptStatement is FirDeclaration) { if (scriptStatement is FirDeclaration) {
processMemberDeclaration(scriptStatement, containingClass = null, irScript, delegateFieldToPropertyMap = null) processMemberDeclaration(scriptStatement, containingClass = null, irScript, delegateFieldToPropertyMap = null)
} }
@@ -254,7 +254,7 @@ class Fir2IrVisitor(
conversionScope.withParent(irScript) { conversionScope.withParent(irScript) {
val destructComposites = mutableMapOf<FirVariableSymbol<*>, IrComposite>() val destructComposites = mutableMapOf<FirVariableSymbol<*>, IrComposite>()
for (statement in script.statements) { for (statement in script.declarations) {
val irStatement = if (statement is FirDeclaration) { val irStatement = if (statement is FirDeclaration) {
when { when {
statement is FirProperty && statement.name == SpecialNames.UNDERSCORE_FOR_UNUSED_VAR -> { statement is FirProperty && statement.name == SpecialNames.UNDERSCORE_FOR_UNUSED_VAR -> {
@@ -22,7 +22,7 @@ class FirScriptDeclarationsScope(
private val callablesIndex: Map<Name, List<FirCallableSymbol<*>>> = run { private val callablesIndex: Map<Name, List<FirCallableSymbol<*>>> = run {
val result = mutableMapOf<Name, MutableList<FirCallableSymbol<*>>>() val result = mutableMapOf<Name, MutableList<FirCallableSymbol<*>>>()
loop@ for (statement in script.statements) { loop@ for (statement in script.declarations) {
if (statement is FirCallableDeclaration) { if (statement is FirCallableDeclaration) {
val name = when (statement) { val name = when (statement) {
is FirVariable -> if (statement.isSynthetic) continue@loop else statement.name is FirVariable -> if (statement.isSynthetic) continue@loop else statement.name
@@ -38,7 +38,7 @@ class FirScriptDeclarationsScope(
private val classIndex: Map<Name, FirRegularClassSymbol> = run { private val classIndex: Map<Name, FirRegularClassSymbol> = run {
val result = mutableMapOf<Name, FirRegularClassSymbol>() val result = mutableMapOf<Name, FirRegularClassSymbol>()
for (declaration in script.statements) { for (declaration in script.declarations) {
if (declaration is FirRegularClass) { if (declaration is FirRegularClass) {
result[declaration.name] = declaration.symbol result[declaration.name] = declaration.symbol
} }
@@ -1286,7 +1286,7 @@ open class PsiRawFirBuilder(
for (declaration in script.declarations) { for (declaration in script.declarations) {
when (declaration) { when (declaration) {
is KtScriptInitializer -> { is KtScriptInitializer -> {
declaration.body?.let { statements.add(it.toFirStatement()) } declaration.body?.let { declarations.add(it.toFirStatement()) }
} }
is KtDestructuringDeclaration -> { is KtDestructuringDeclaration -> {
val destructuringContainerVar = generateTemporaryVariable( val destructuringContainerVar = generateTemporaryVariable(
@@ -1299,9 +1299,9 @@ open class PsiRawFirBuilder(
).apply { ).apply {
isDestructuringDeclarationContainerVariable = true isDestructuringDeclarationContainerVariable = true
} }
statements.add(destructuringContainerVar) declarations.add(destructuringContainerVar)
statements.addDestructuringVariables( declarations.addDestructuringVariables(
moduleData, moduleData,
declaration, declaration,
destructuringContainerVar, destructuringContainerVar,
@@ -1312,7 +1312,7 @@ open class PsiRawFirBuilder(
} }
} }
else -> { else -> {
statements.add(declaration.toFirStatement()) declarations.add(declaration.toFirStatement())
} }
} }
} }
@@ -403,7 +403,7 @@ abstract class AbstractFirSpecificAnnotationResolveTransformer(
computationSession.recordThatAnnotationsAreResolved(script) computationSession.recordThatAnnotationsAreResolved(script)
transformDeclaration(script, null).also { transformDeclaration(script, null).also {
transformChildren(script) { transformChildren(script) {
script.transformStatements(this, data) script.transformDeclarations(this, data)
} }
} }
} }
@@ -30,7 +30,7 @@ abstract class FirScript : FirDeclaration(), FirControlFlowGraphOwner {
abstract override val attributes: FirDeclarationAttributes abstract override val attributes: FirDeclarationAttributes
abstract override val controlFlowGraphReference: FirControlFlowGraphReference? abstract override val controlFlowGraphReference: FirControlFlowGraphReference?
abstract val name: Name abstract val name: Name
abstract val statements: List<FirStatement> abstract val declarations: List<FirStatement>
abstract override val symbol: FirScriptSymbol abstract override val symbol: FirScriptSymbol
abstract val parameters: List<FirVariable> abstract val parameters: List<FirVariable>
abstract val contextReceivers: List<FirContextReceiver> abstract val contextReceivers: List<FirContextReceiver>
@@ -47,9 +47,9 @@ abstract class FirScript : FirDeclaration(), FirControlFlowGraphOwner {
abstract override fun replaceControlFlowGraphReference(newControlFlowGraphReference: FirControlFlowGraphReference?) abstract override fun replaceControlFlowGraphReference(newControlFlowGraphReference: FirControlFlowGraphReference?)
abstract fun replaceStatements(newStatements: List<FirStatement>) abstract fun replaceDeclarations(newDeclarations: List<FirStatement>)
abstract override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirScript abstract override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirScript
abstract fun <D> transformStatements(transformer: FirTransformer<D>, data: D): FirScript abstract fun <D> transformDeclarations(transformer: FirTransformer<D>, data: D): FirScript
} }
@@ -32,7 +32,7 @@ class FirScriptBuilder : FirAnnotationContainerBuilder {
lateinit var origin: FirDeclarationOrigin lateinit var origin: FirDeclarationOrigin
var attributes: FirDeclarationAttributes = FirDeclarationAttributes() var attributes: FirDeclarationAttributes = FirDeclarationAttributes()
lateinit var name: Name lateinit var name: Name
val statements: MutableList<FirStatement> = mutableListOf() val declarations: MutableList<FirStatement> = mutableListOf()
lateinit var symbol: FirScriptSymbol lateinit var symbol: FirScriptSymbol
val parameters: MutableList<FirVariable> = mutableListOf() val parameters: MutableList<FirVariable> = mutableListOf()
val contextReceivers: MutableList<FirContextReceiver> = mutableListOf() val contextReceivers: MutableList<FirContextReceiver> = mutableListOf()
@@ -47,7 +47,7 @@ class FirScriptBuilder : FirAnnotationContainerBuilder {
origin, origin,
attributes, attributes,
name, name,
statements.toMutableOrEmpty(), declarations.toMutableOrEmpty(),
symbol, symbol,
parameters, parameters,
contextReceivers.toMutableOrEmpty(), contextReceivers.toMutableOrEmpty(),
@@ -78,7 +78,7 @@ inline fun buildScriptCopy(original: FirScript, init: FirScriptBuilder.() -> Uni
copyBuilder.origin = original.origin copyBuilder.origin = original.origin
copyBuilder.attributes = original.attributes.copy() copyBuilder.attributes = original.attributes.copy()
copyBuilder.name = original.name copyBuilder.name = original.name
copyBuilder.statements.addAll(original.statements) copyBuilder.declarations.addAll(original.declarations)
copyBuilder.symbol = original.symbol copyBuilder.symbol = original.symbol
copyBuilder.parameters.addAll(original.parameters) copyBuilder.parameters.addAll(original.parameters)
copyBuilder.contextReceivers.addAll(original.contextReceivers) copyBuilder.contextReceivers.addAll(original.contextReceivers)
@@ -33,7 +33,7 @@ internal class FirScriptImpl(
override val origin: FirDeclarationOrigin, override val origin: FirDeclarationOrigin,
override val attributes: FirDeclarationAttributes, override val attributes: FirDeclarationAttributes,
override val name: Name, override val name: Name,
override var statements: MutableOrEmptyList<FirStatement>, override var declarations: MutableOrEmptyList<FirStatement>,
override val symbol: FirScriptSymbol, override val symbol: FirScriptSymbol,
override val parameters: MutableList<FirVariable>, override val parameters: MutableList<FirVariable>,
override var contextReceivers: MutableOrEmptyList<FirContextReceiver>, override var contextReceivers: MutableOrEmptyList<FirContextReceiver>,
@@ -49,7 +49,7 @@ internal class FirScriptImpl(
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) { override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
annotations.forEach { it.accept(visitor, data) } annotations.forEach { it.accept(visitor, data) }
controlFlowGraphReference?.accept(visitor, data) controlFlowGraphReference?.accept(visitor, data)
statements.forEach { it.accept(visitor, data) } declarations.forEach { it.accept(visitor, data) }
parameters.forEach { it.accept(visitor, data) } parameters.forEach { it.accept(visitor, data) }
contextReceivers.forEach { it.accept(visitor, data) } contextReceivers.forEach { it.accept(visitor, data) }
} }
@@ -57,7 +57,7 @@ internal class FirScriptImpl(
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirScriptImpl { override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirScriptImpl {
transformAnnotations(transformer, data) transformAnnotations(transformer, data)
controlFlowGraphReference = controlFlowGraphReference?.transform(transformer, data) controlFlowGraphReference = controlFlowGraphReference?.transform(transformer, data)
transformStatements(transformer, data) transformDeclarations(transformer, data)
parameters.transformInplace(transformer, data) parameters.transformInplace(transformer, data)
contextReceivers.transformInplace(transformer, data) contextReceivers.transformInplace(transformer, data)
return this return this
@@ -68,8 +68,8 @@ internal class FirScriptImpl(
return this return this
} }
override fun <D> transformStatements(transformer: FirTransformer<D>, data: D): FirScriptImpl { override fun <D> transformDeclarations(transformer: FirTransformer<D>, data: D): FirScriptImpl {
statements.transformInplace(transformer, data) declarations.transformInplace(transformer, data)
return this return this
} }
@@ -81,7 +81,7 @@ internal class FirScriptImpl(
controlFlowGraphReference = newControlFlowGraphReference controlFlowGraphReference = newControlFlowGraphReference
} }
override fun replaceStatements(newStatements: List<FirStatement>) { override fun replaceDeclarations(newDeclarations: List<FirStatement>) {
statements = newStatements.toMutableOrEmpty() declarations = newDeclarations.toMutableOrEmpty()
} }
} }
@@ -223,7 +223,7 @@ class FirRenderer(
printer.newLine() printer.newLine()
script.statements.forEach { script.declarations.forEach {
it.accept(this) it.accept(this)
printer.newLine() printer.newLine()
} }
@@ -494,7 +494,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
script.configure { script.configure {
+name +name
+fieldList(statement, withReplace = true, useMutableOrEmpty = true).withTransform() +FieldList("declarations", statement, withReplace = true, useMutableOrEmpty = true).withTransform()
+symbol("FirScriptSymbol") +symbol("FirScriptSymbol")
+fieldList("parameters", variable, withReplace = false) +fieldList("parameters", variable, withReplace = false)
+fieldList(contextReceiver, useMutableOrEmpty = true) +fieldList(contextReceiver, useMutableOrEmpty = true)
@@ -137,10 +137,10 @@ class FirScriptConfiguratorExtensionImpl(
} }
configuration[ScriptCompilationConfiguration.resultField]?.takeIf { it.isNotBlank() }?.let { resultFieldName -> configuration[ScriptCompilationConfiguration.resultField]?.takeIf { it.isNotBlank() }?.let { resultFieldName ->
val lastExpression = statements.lastOrNull() val lastExpression = declarations.lastOrNull()
if (lastExpression != null && lastExpression is FirExpression) { if (lastExpression != null && lastExpression is FirExpression) {
statements.removeAt(statements.size - 1) declarations.removeAt(declarations.size - 1)
statements.add( declarations.add(
@OptIn(UnresolvedExpressionTypeAccess::class) @OptIn(UnresolvedExpressionTypeAccess::class)
buildProperty { buildProperty {
this.name = Name.identifier(resultFieldName) this.name = Name.identifier(resultFieldName)