[AA FIR] add symbol restoring for $$result declaration
^KT-61431 Fixed ^KT-61451
This commit is contained in:
committed by
Space Team
parent
99510ca42b
commit
5aae053785
+24
-5
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
@@ -21,10 +21,13 @@ import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolKind
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtPsiBasedSymbolPointer
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.pointers.UnsupportedSymbolKind
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.pointers.symbolPointerOfType
|
||||
import org.jetbrains.kotlin.analysis.api.types.KtType
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.errorWithFirSpecificEntries
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.descriptors.Visibility
|
||||
import org.jetbrains.kotlin.fir.containingClassLookupTag
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
|
||||
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||
import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.*
|
||||
@@ -34,6 +37,7 @@ import org.jetbrains.kotlin.fir.symbols.impl.isExtension
|
||||
import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase
|
||||
import org.jetbrains.kotlin.name.CallableId
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
|
||||
internal class KtFirKotlinPropertySymbol(
|
||||
override val firSymbol: FirPropertySymbol,
|
||||
@@ -130,10 +134,25 @@ internal class KtFirKotlinPropertySymbol(
|
||||
}
|
||||
|
||||
return when (val kind = symbolKind) {
|
||||
KtSymbolKind.TOP_LEVEL -> KtFirTopLevelPropertySymbolPointer(
|
||||
firSymbol.callableId,
|
||||
FirCallableSignature.createSignature(firSymbol),
|
||||
)
|
||||
KtSymbolKind.TOP_LEVEL -> {
|
||||
if (firSymbol.fir.origin is FirDeclarationOrigin.ScriptCustomization.ResultProperty) {
|
||||
val file = psi?.containingFile as? KtFile
|
||||
if (file == null) {
|
||||
errorWithFirSpecificEntries(
|
||||
"ResultProperty restoring supported only for psi-based symbols yet",
|
||||
fir = firSymbol.fir,
|
||||
psi = psi,
|
||||
)
|
||||
}
|
||||
|
||||
KtFirResultPropertySymbolPointer(file.symbolPointerOfType<KtFirFileSymbol>())
|
||||
} else {
|
||||
KtFirTopLevelPropertySymbolPointer(
|
||||
firSymbol.callableId,
|
||||
FirCallableSignature.createSignature(firSymbol),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
KtSymbolKind.CLASS_MEMBER ->
|
||||
KtFirMemberPropertySymbolPointer(
|
||||
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
/*
|
||||
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.analysis.api.fir.symbols.pointers
|
||||
|
||||
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
|
||||
import org.jetbrains.kotlin.analysis.api.fir.KtFirAnalysisSession
|
||||
import org.jetbrains.kotlin.analysis.api.fir.symbols.KtFirFileSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtKotlinPropertySymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
|
||||
import org.jetbrains.kotlin.fir.declarations.FirProperty
|
||||
import org.jetbrains.kotlin.fir.declarations.FirScript
|
||||
|
||||
internal class KtFirResultPropertySymbolPointer(private val filePointer: KtSymbolPointer<KtFirFileSymbol>) :
|
||||
KtSymbolPointer<KtKotlinPropertySymbol>() {
|
||||
@Deprecated("Consider using org.jetbrains.kotlin.analysis.api.KtAnalysisSession.restoreSymbol")
|
||||
override fun restoreSymbol(analysisSession: KtAnalysisSession): KtKotlinPropertySymbol? {
|
||||
require(analysisSession is KtFirAnalysisSession)
|
||||
val file = with(analysisSession) {
|
||||
filePointer.restoreSymbol()?.firSymbol
|
||||
} ?: return null
|
||||
|
||||
val script = file.fir.declarations.singleOrNull() as? FirScript ?: return null
|
||||
val lastProperty = script.statements.lastOrNull() as? FirProperty ?: return null
|
||||
if (lastProperty.origin !is FirDeclarationOrigin.ScriptCustomization.ResultProperty) return null
|
||||
return analysisSession.firSymbolBuilder.variableLikeBuilder.buildPropertySymbol(lastProperty.symbol) as? KtKotlinPropertySymbol
|
||||
}
|
||||
|
||||
override fun pointsToTheSameSymbolAs(other: KtSymbolPointer<KtSymbol>): Boolean = this === other ||
|
||||
other is KtFirResultPropertySymbolPointer &&
|
||||
other.filePointer.pointsToTheSameSymbolAs(filePointer)
|
||||
}
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
// DO_NOT_CHECK_SYMBOL_RESTORE
|
||||
// DO_NOT_CHECK_NON_PSI_SYMBOL_RESTORE
|
||||
// script
|
||||
fun foo(action: () -> Int) {
|
||||
action()
|
||||
|
||||
Reference in New Issue
Block a user