[LL FIR] adapt RawFirNonLocalDeclarationBuilder for new FirDesignation

Effectively nothing changed right now, but now it is possible to process
`FirScript` as `containingDeclaration` inside `moveNext`

^KT-65345
This commit is contained in:
Dmitrii Gridin
2024-01-31 17:16:07 +01:00
committed by Space Team
parent eb8e3f64f0
commit 9b60e5ca06
2 changed files with 6 additions and 9 deletions
@@ -102,11 +102,6 @@ class FirDesignation(
} }
val scriptOrNull: FirScript? get() = path.getOrNull(0) as? FirScript ?: path.getOrNull(1) as? FirScript ?: target as? FirScript val scriptOrNull: FirScript? get() = path.getOrNull(0) as? FirScript ?: path.getOrNull(1) as? FirScript ?: target as? FirScript
/**
* This property exists only for compatibility and should be dropped after KT-65345
*/
val classPath: List<FirRegularClass> get() = path.filterIsInstance<FirRegularClass>()
} }
fun ExceptionAttachmentBuilder.withFirDesignationEntry(name: String, designation: FirDesignation) { fun ExceptionAttachmentBuilder.withFirDesignationEntry(name: String, designation: FirDesignation) {
@@ -132,7 +127,7 @@ private fun collectDesignationPath(target: FirElementWithResolveState): List<Fir
is FirConstructor, is FirConstructor,
is FirEnumEntry, is FirEnumEntry,
is FirPropertyAccessor, is FirPropertyAccessor,
is FirErrorProperty is FirErrorProperty,
-> { -> {
requireIsInstance<FirCallableDeclaration>(target) requireIsInstance<FirCallableDeclaration>(target)
// We shouldn't try to build a designation path for such fake declarations as they // We shouldn't try to build a designation path for such fake declarations as they
@@ -99,13 +99,14 @@ internal class RawFirNonLocalDeclarationBuilder private constructor(
functionsToRebind = functionsToRebind, functionsToRebind = functionsToRebind,
replacementApplier = replacementApplier replacementApplier = replacementApplier
) )
builder.context.packageFqName = rootNonLocalDeclaration.containingKtFile.packageFqName builder.context.packageFqName = rootNonLocalDeclaration.containingKtFile.packageFqName
if (rebindContainingSymbol) { if (rebindContainingSymbol) {
@OptIn(PrivateForInline::class) @OptIn(PrivateForInline::class)
builder.context.forcedContainerSymbol = designation.target.symbol builder.context.forcedContainerSymbol = designation.target.symbol
} }
return builder.moveNext(designation.classPath.iterator(), containingClass = null) return builder.moveNext(designation.path.iterator(), containingDeclaration = null)
} }
} }
@@ -316,8 +317,9 @@ internal class RawFirNonLocalDeclarationBuilder private constructor(
} }
} }
private fun moveNext(iterator: Iterator<FirDeclaration>, containingClass: FirRegularClass?): FirDeclaration { private fun moveNext(iterator: Iterator<FirDeclaration>, containingDeclaration: FirDeclaration?): FirDeclaration {
if (!iterator.hasNext()) { if (!iterator.hasNext()) {
val containingClass = containingDeclaration as? FirRegularClass
val visitor = VisitorWithReplacement(containingClass) val visitor = VisitorWithReplacement(containingClass)
return when (declarationToBuild) { return when (declarationToBuild) {
is KtProperty -> { is KtProperty -> {
@@ -350,7 +352,7 @@ internal class RawFirNonLocalDeclarationBuilder private constructor(
} }
val parent = iterator.next() val parent = iterator.next()
if (parent !is FirRegularClass) return moveNext(iterator, containingClass = null) if (parent !is FirRegularClass) return moveNext(iterator, containingDeclaration = null)
val classOrObject = parent.psi val classOrObject = parent.psi
if (classOrObject !is KtClassOrObject) { if (classOrObject !is KtClassOrObject) {