[AA LC] Correctly determine override status for accessor methods
This commit is contained in:
+6
-1
@@ -44,7 +44,12 @@ internal class KtFirPropertyGetterSymbol(
|
||||
|
||||
override val isDefault: Boolean get() = withValidityAssertion { firSymbol.fir is FirDefaultPropertyAccessor }
|
||||
override val isInline: Boolean get() = withValidityAssertion { firSymbol.isInline }
|
||||
override val isOverride: Boolean get() = withValidityAssertion { firSymbol.isOverride }
|
||||
override val isOverride: Boolean
|
||||
get() = withValidityAssertion {
|
||||
if (firSymbol.isOverride) return@withValidityAssertion true
|
||||
return firSymbol.fir.propertySymbol?.isOverride == true
|
||||
}
|
||||
|
||||
override val hasBody: Boolean get() = withValidityAssertion { firSymbol.fir.body != null }
|
||||
|
||||
override val modality: Modality get() = withValidityAssertion { firSymbol.modalityOrFinal }
|
||||
|
||||
+20
-3
@@ -10,13 +10,13 @@ import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder
|
||||
import org.jetbrains.kotlin.analysis.api.fir.annotations.KtFirAnnotationListForDeclaration
|
||||
import org.jetbrains.kotlin.analysis.api.fir.findPsi
|
||||
import org.jetbrains.kotlin.analysis.api.fir.utils.cached
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtPropertySetterSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtValueParameterSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtPsiBasedSymbolPointer
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
||||
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.Modality
|
||||
import org.jetbrains.kotlin.descriptors.Visibility
|
||||
@@ -27,6 +27,9 @@ import org.jetbrains.kotlin.fir.declarations.utils.isOverride
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.modalityOrFinal
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.visibility
|
||||
import org.jetbrains.kotlin.fir.resolve.getHasStableParameterNames
|
||||
import org.jetbrains.kotlin.fir.resolve.scope
|
||||
import org.jetbrains.kotlin.fir.scopes.FakeOverrideTypeCalculator
|
||||
import org.jetbrains.kotlin.fir.scopes.getDirectOverriddenProperties
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertyAccessorSymbol
|
||||
import org.jetbrains.kotlin.name.CallableId
|
||||
|
||||
@@ -45,7 +48,21 @@ internal class KtFirPropertySetterSymbol(
|
||||
|
||||
override val isDefault: Boolean get() = withValidityAssertion { firSymbol.fir is FirDefaultPropertyAccessor }
|
||||
override val isInline: Boolean get() = withValidityAssertion { firSymbol.isInline }
|
||||
override val isOverride: Boolean get() = withValidityAssertion { firSymbol.isOverride }
|
||||
override val isOverride: Boolean
|
||||
get() = withValidityAssertion {
|
||||
if (firSymbol.isOverride) return true
|
||||
val propertySymbol = firSymbol.fir.propertySymbol ?: return@withValidityAssertion false
|
||||
if (!propertySymbol.isOverride) return false
|
||||
val session = firResolveSession.useSiteFirSession
|
||||
val containingClassScope = firSymbol.dispatchReceiverType?.scope(
|
||||
session,
|
||||
firResolveSession.getScopeSessionFor(session),
|
||||
FakeOverrideTypeCalculator.DoNothing
|
||||
) ?: return false
|
||||
val overriddenProperties = containingClassScope.getDirectOverriddenProperties(propertySymbol)
|
||||
overriddenProperties.any { it.isVar }
|
||||
}
|
||||
|
||||
override val hasBody: Boolean get() = withValidityAssertion { firSymbol.fir.body != null }
|
||||
|
||||
override val modality: Modality get() = withValidityAssertion { firSymbol.modalityOrFinal }
|
||||
|
||||
@@ -47,7 +47,7 @@ KtPropertyGetterSymbol:
|
||||
isDefault: false
|
||||
isExtension: false
|
||||
isInline: false
|
||||
isOverride: false
|
||||
isOverride: true
|
||||
modality: FINAL
|
||||
origin: SOURCE
|
||||
receiverType: null
|
||||
@@ -163,4 +163,4 @@ KtNamedClassOrObjectSymbol:
|
||||
typeParameters: []
|
||||
visibility: Public
|
||||
getContainingModule: KtSourceModule "Sources of main"
|
||||
deprecationStatus: null
|
||||
deprecationStatus: null
|
||||
|
||||
Reference in New Issue
Block a user