diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirFunctionSymbol.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirFunctionSymbol.kt index e5d4c49c1ad..fe67f7a0a3b 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirFunctionSymbol.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirFunctionSymbol.kt @@ -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.Visibility 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.resolve.getHasStableParameterNames import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol @@ -86,9 +85,7 @@ internal class KtFirFunctionSymbol( override val visibility: Visibility get() = withValidityAssertion { firSymbol.visibility } override fun createPointer(): KtSymbolPointer = withValidityAssertion { - if (firSymbol.fir.origin != FirDeclarationOrigin.SubstitutionOverride) { - KtPsiBasedSymbolPointer.createForSymbolFromSource(this)?.let { return it } - } + KtPsiBasedSymbolPointer.createForSymbolFromSource(this)?.let { return it } return when (symbolKind) { KtSymbolKind.TOP_LEVEL -> diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirKotlinPropertySymbol.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirKotlinPropertySymbol.kt index 28b0d1ec75b..74f87f2e940 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirKotlinPropertySymbol.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirKotlinPropertySymbol.kt @@ -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.lifetime.withValidityAssertion 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.Visibility 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.synthetic.FirSyntheticProperty 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.FirSyntheticPropertySymbol 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.Name @@ -121,9 +118,7 @@ internal class KtFirKotlinPropertySymbol( override val hasSetter: Boolean get() = withValidityAssertion { firSymbol.setterSymbol != null } override fun createPointer(): KtSymbolPointer = withValidityAssertion { - if (firSymbol.fir.origin != FirDeclarationOrigin.SubstitutionOverride) { - KtPsiBasedSymbolPointer.createForSymbolFromSource(this)?.let { return it } - } + KtPsiBasedSymbolPointer.createForSymbolFromSource(this)?.let { return it } return when (symbolKind) { KtSymbolKind.TOP_LEVEL -> TODO("Creating symbol for top level properties is not supported yet") diff --git a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/symbols/pointers/KtPsiBasedSymbolPointer.kt b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/symbols/pointers/KtPsiBasedSymbolPointer.kt index fba476d2cc1..ea576733d73 100644 --- a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/symbols/pointers/KtPsiBasedSymbolPointer.kt +++ b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/symbols/pointers/KtPsiBasedSymbolPointer.kt @@ -37,12 +37,15 @@ public class KtPsiBasedSymbolPointer(private val psiPointer: Smart public fun createForSymbolFromSource(symbol: S): KtPsiBasedSymbolPointer? { 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 - * psi by which it can be found - */ + // 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 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) { is KtDeclaration -> psi is KtFile -> psi diff --git a/analysis/analysis-api/testData/scopes/memberScopeByFqName/Int.kt b/analysis/analysis-api/testData/scopes/memberScopeByFqName/Int.kt index d17b54cc167..869ae0b4998 100644 --- a/analysis/analysis-api/testData/scopes/memberScopeByFqName/Int.kt +++ b/analysis/analysis-api/testData/scopes/memberScopeByFqName/Int.kt @@ -1,4 +1,3 @@ // WITH_STDLIB -// DO_NOT_CHECK_SYMBOL_RESTORE // class: kotlin/Int diff --git a/analysis/analysis-api/testData/scopes/memberScopeByFqName/enumEntry.kt b/analysis/analysis-api/testData/scopes/memberScopeByFqName/enumEntry.kt index 27631dee541..9abcb1f294e 100644 --- a/analysis/analysis-api/testData/scopes/memberScopeByFqName/enumEntry.kt +++ b/analysis/analysis-api/testData/scopes/memberScopeByFqName/enumEntry.kt @@ -7,4 +7,3 @@ enum class E { } // callable: test/E.A -// DO_NOT_CHECK_SYMBOL_RESTORE diff --git a/analysis/analysis-api/testData/scopes/memberScopeByFqName/java.lang.String.kt b/analysis/analysis-api/testData/scopes/memberScopeByFqName/java.lang.String.kt index f3c6fb47e3a..89c8b44d821 100644 --- a/analysis/analysis-api/testData/scopes/memberScopeByFqName/java.lang.String.kt +++ b/analysis/analysis-api/testData/scopes/memberScopeByFqName/java.lang.String.kt @@ -1,3 +1 @@ -// DO_NOT_CHECK_SYMBOL_RESTORE - // class: java/lang/String