AA: do not create symbol pointers for (intersection|substitution) overridden members
This commit is contained in:
committed by
Ilya Kirillov
parent
e50da634bc
commit
efb867b46c
+1
-4
@@ -29,7 +29,6 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
|
|||||||
import org.jetbrains.kotlin.descriptors.Modality
|
import org.jetbrains.kotlin.descriptors.Modality
|
||||||
import org.jetbrains.kotlin.descriptors.Visibility
|
import org.jetbrains.kotlin.descriptors.Visibility
|
||||||
import org.jetbrains.kotlin.fir.containingClass
|
import org.jetbrains.kotlin.fir.containingClass
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.utils.*
|
import org.jetbrains.kotlin.fir.declarations.utils.*
|
||||||
import org.jetbrains.kotlin.fir.resolve.getHasStableParameterNames
|
import org.jetbrains.kotlin.fir.resolve.getHasStableParameterNames
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
||||||
@@ -86,9 +85,7 @@ internal class KtFirFunctionSymbol(
|
|||||||
override val visibility: Visibility get() = withValidityAssertion { firSymbol.visibility }
|
override val visibility: Visibility get() = withValidityAssertion { firSymbol.visibility }
|
||||||
|
|
||||||
override fun createPointer(): KtSymbolPointer<KtFunctionSymbol> = withValidityAssertion {
|
override fun createPointer(): KtSymbolPointer<KtFunctionSymbol> = withValidityAssertion {
|
||||||
if (firSymbol.fir.origin != FirDeclarationOrigin.SubstitutionOverride) {
|
KtPsiBasedSymbolPointer.createForSymbolFromSource(this)?.let { return it }
|
||||||
KtPsiBasedSymbolPointer.createForSymbolFromSource(this)?.let { return it }
|
|
||||||
}
|
|
||||||
|
|
||||||
return when (symbolKind) {
|
return when (symbolKind) {
|
||||||
KtSymbolKind.TOP_LEVEL ->
|
KtSymbolKind.TOP_LEVEL ->
|
||||||
|
|||||||
+1
-6
@@ -28,11 +28,9 @@ import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
|
|||||||
import org.jetbrains.kotlin.analysis.api.types.KtType
|
import org.jetbrains.kotlin.analysis.api.types.KtType
|
||||||
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
|
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
|
||||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
|
||||||
import org.jetbrains.kotlin.descriptors.Modality
|
import org.jetbrains.kotlin.descriptors.Modality
|
||||||
import org.jetbrains.kotlin.descriptors.Visibility
|
import org.jetbrains.kotlin.descriptors.Visibility
|
||||||
import org.jetbrains.kotlin.fir.containingClass
|
import org.jetbrains.kotlin.fir.containingClass
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||||
import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty
|
import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty
|
||||||
import org.jetbrains.kotlin.fir.declarations.utils.*
|
import org.jetbrains.kotlin.fir.declarations.utils.*
|
||||||
@@ -40,7 +38,6 @@ import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase
|
|||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirSyntheticPropertySymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirSyntheticPropertySymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.isExtension
|
import org.jetbrains.kotlin.fir.symbols.impl.isExtension
|
||||||
import org.jetbrains.kotlin.fir.types.toRegularClassSymbol
|
|
||||||
import org.jetbrains.kotlin.name.CallableId
|
import org.jetbrains.kotlin.name.CallableId
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
@@ -121,9 +118,7 @@ internal class KtFirKotlinPropertySymbol(
|
|||||||
override val hasSetter: Boolean get() = withValidityAssertion { firSymbol.setterSymbol != null }
|
override val hasSetter: Boolean get() = withValidityAssertion { firSymbol.setterSymbol != null }
|
||||||
|
|
||||||
override fun createPointer(): KtSymbolPointer<KtKotlinPropertySymbol> = withValidityAssertion {
|
override fun createPointer(): KtSymbolPointer<KtKotlinPropertySymbol> = withValidityAssertion {
|
||||||
if (firSymbol.fir.origin != FirDeclarationOrigin.SubstitutionOverride) {
|
KtPsiBasedSymbolPointer.createForSymbolFromSource(this)?.let { return it }
|
||||||
KtPsiBasedSymbolPointer.createForSymbolFromSource(this)?.let { return it }
|
|
||||||
}
|
|
||||||
|
|
||||||
return when (symbolKind) {
|
return when (symbolKind) {
|
||||||
KtSymbolKind.TOP_LEVEL -> TODO("Creating symbol for top level properties is not supported yet")
|
KtSymbolKind.TOP_LEVEL -> TODO("Creating symbol for top level properties is not supported yet")
|
||||||
|
|||||||
+7
-4
@@ -37,12 +37,15 @@ public class KtPsiBasedSymbolPointer<S : KtSymbol>(private val psiPointer: Smart
|
|||||||
public fun <S : KtSymbol> createForSymbolFromSource(symbol: S): KtPsiBasedSymbolPointer<S>? {
|
public fun <S : KtSymbol> createForSymbolFromSource(symbol: S): KtPsiBasedSymbolPointer<S>? {
|
||||||
if (symbol.origin == KtSymbolOrigin.LIBRARY) return null
|
if (symbol.origin == KtSymbolOrigin.LIBRARY) return null
|
||||||
|
|
||||||
/**
|
// If symbol points to a generated member, we won't be able to recover it later on, because there is no corresponding
|
||||||
* If symbol points to a generated member, we won't be able to recover it later on, because there is no corresponding
|
// psi by which it can be found
|
||||||
* psi by which it can be found
|
|
||||||
*/
|
|
||||||
if (symbol.origin == KtSymbolOrigin.SOURCE_MEMBER_GENERATED) return null
|
if (symbol.origin == KtSymbolOrigin.SOURCE_MEMBER_GENERATED) return null
|
||||||
|
|
||||||
|
// (intersection | substitution) overrides are intermediate, non-materialized (i.e., fake) members, coming from super type(s).
|
||||||
|
// Therefore, no corresponding psi either.
|
||||||
|
if (symbol.origin == KtSymbolOrigin.INTERSECTION_OVERRIDE) return null
|
||||||
|
if (symbol.origin == KtSymbolOrigin.SUBSTITUTION_OVERRIDE) return null
|
||||||
|
|
||||||
val psi = when (val psi = symbol.psi) {
|
val psi = when (val psi = symbol.psi) {
|
||||||
is KtDeclaration -> psi
|
is KtDeclaration -> psi
|
||||||
is KtFile -> psi
|
is KtFile -> psi
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// WITH_STDLIB
|
// WITH_STDLIB
|
||||||
// DO_NOT_CHECK_SYMBOL_RESTORE
|
|
||||||
|
|
||||||
// class: kotlin/Int
|
// class: kotlin/Int
|
||||||
|
|||||||
@@ -7,4 +7,3 @@ enum class E {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// callable: test/E.A
|
// callable: test/E.A
|
||||||
// DO_NOT_CHECK_SYMBOL_RESTORE
|
|
||||||
|
|||||||
@@ -1,3 +1 @@
|
|||||||
// DO_NOT_CHECK_SYMBOL_RESTORE
|
|
||||||
|
|
||||||
// class: java/lang/String
|
// class: java/lang/String
|
||||||
|
|||||||
Reference in New Issue
Block a user