[FIR] Introduce isRealOwnerOf utility function
This commit is contained in:
committed by
Space Team
parent
bfc0126105
commit
7ce0284e81
@@ -446,33 +446,33 @@ fun FirTypeScope.processOverriddenFunctionsFromSuperClasses(
|
||||
functionSymbol: FirNamedFunctionSymbol,
|
||||
containingClass: FirClass,
|
||||
processor: (FirNamedFunctionSymbol) -> ProcessorAction
|
||||
): ProcessorAction =
|
||||
processDirectOverriddenFunctionsWithBaseScope(functionSymbol) { overridden, _ ->
|
||||
val unwrapped = if (overridden.fir.isSubstitutionOverride &&
|
||||
overridden.dispatchReceiverClassLookupTagOrNull() == containingClass.symbol.toLookupTag()
|
||||
)
|
||||
): ProcessorAction {
|
||||
val ownerTag = containingClass.symbol.toLookupTag()
|
||||
return processDirectOverriddenFunctionsWithBaseScope(functionSymbol) { overridden, _ ->
|
||||
val unwrapped = if (overridden.fir.isSubstitutionOverride && ownerTag.isRealOwnerOf(overridden))
|
||||
overridden.originalForSubstitutionOverride!!
|
||||
else
|
||||
overridden
|
||||
|
||||
processor(unwrapped)
|
||||
}
|
||||
}
|
||||
|
||||
fun FirTypeScope.processOverriddenPropertiesFromSuperClasses(
|
||||
propertySymbol: FirPropertySymbol,
|
||||
containingClass: FirClass,
|
||||
processor: (FirPropertySymbol) -> ProcessorAction
|
||||
): ProcessorAction =
|
||||
processDirectOverriddenPropertiesWithBaseScope(propertySymbol) { overridden, _ ->
|
||||
val unwrapped = if (overridden.fir.isSubstitutionOverride &&
|
||||
overridden.dispatchReceiverClassLookupTagOrNull() == containingClass.symbol.toLookupTag()
|
||||
)
|
||||
): ProcessorAction {
|
||||
val ownerTag = containingClass.symbol.toLookupTag()
|
||||
return processDirectOverriddenPropertiesWithBaseScope(propertySymbol) { overridden, _ ->
|
||||
val unwrapped = if (overridden.fir.isSubstitutionOverride && ownerTag.isRealOwnerOf(overridden))
|
||||
overridden.originalForSubstitutionOverride!!
|
||||
else
|
||||
overridden
|
||||
|
||||
processor(unwrapped)
|
||||
}
|
||||
}
|
||||
|
||||
context(Fir2IrComponents)
|
||||
internal fun FirProperty.processOverriddenPropertySymbols(
|
||||
|
||||
+3
-2
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.fir.backend.*
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.*
|
||||
import org.jetbrains.kotlin.fir.resolve.defaultType
|
||||
import org.jetbrains.kotlin.fir.resolve.isRealOwnerOf
|
||||
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
||||
import org.jetbrains.kotlin.fir.scopes.*
|
||||
import org.jetbrains.kotlin.fir.scopes.impl.FirFakeOverrideGenerator
|
||||
@@ -212,7 +213,7 @@ class FakeOverrideGenerator(
|
||||
}
|
||||
|
||||
private fun FirCallableSymbol<*>.shouldHaveComputedBaseSymbolsForClass(classLookupTag: ConeClassLikeLookupTag): Boolean =
|
||||
fir.origin.fromSupertypes && dispatchReceiverClassLookupTagOrNull() == classLookupTag
|
||||
fir.origin.fromSupertypes && classLookupTag.isRealOwnerOf(this)
|
||||
|
||||
@Suppress("IncorrectFormatting")
|
||||
private inline fun <
|
||||
@@ -383,7 +384,7 @@ class FakeOverrideGenerator(
|
||||
|
||||
return scope.directOverridden(symbol).map {
|
||||
// Unwrapping should happen only for fake overrides members from the same class, not from supertypes
|
||||
if (it.fir.isSubstitutionOverride && it.dispatchReceiverClassLookupTagOrNull() == containingClass)
|
||||
if (it.fir.isSubstitutionOverride && containingClass.isRealOwnerOf(it))
|
||||
it.originalForSubstitutionOverride!!
|
||||
else
|
||||
it
|
||||
|
||||
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.classId
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.isFinal
|
||||
import org.jetbrains.kotlin.fir.resolve.defaultType
|
||||
import org.jetbrains.kotlin.fir.resolve.isRealOwnerOf
|
||||
import org.jetbrains.kotlin.fir.resolve.lookupSuperTypes
|
||||
import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider
|
||||
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
|
||||
@@ -186,7 +187,7 @@ class JvmMappedScope(
|
||||
it.origin == FirDeclarationOrigin.Library
|
||||
|
||||
private fun FirNamedFunctionSymbol.isDeclaredInMappedJavaClass(): Boolean {
|
||||
return !fir.isSubstitutionOrIntersectionOverride && fir.dispatchReceiverClassLookupTagOrNull() == firJavaClass.symbol.toLookupTag()
|
||||
return !fir.isSubstitutionOrIntersectionOverride && firJavaClass.symbol.toLookupTag().isRealOwnerOf(fir.symbol)
|
||||
}
|
||||
|
||||
private fun getJdkMethodStatus(jvmDescriptor: String): JDKMemberStatus {
|
||||
|
||||
@@ -30,6 +30,7 @@ import org.jetbrains.kotlin.fir.scopes.FirTypeScope
|
||||
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
||||
import org.jetbrains.kotlin.fir.scopes.impl.importedFromObjectOrStaticData
|
||||
import org.jetbrains.kotlin.fir.scopes.processOverriddenFunctions
|
||||
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
|
||||
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.*
|
||||
import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase
|
||||
@@ -628,4 +629,7 @@ fun FirNamedReferenceWithCandidate.toErrorReference(diagnostic: ConeDiagnostic):
|
||||
}
|
||||
|
||||
val FirTypeParameterSymbol.defaultType: ConeTypeParameterType
|
||||
get() = ConeTypeParameterTypeImpl(toLookupTag(), isNullable = false)
|
||||
get() = ConeTypeParameterTypeImpl(toLookupTag(), isNullable = false)
|
||||
|
||||
fun ConeClassLikeLookupTag.isRealOwnerOf(declarationSymbol: FirCallableSymbol<*>): Boolean =
|
||||
this == declarationSymbol.dispatchReceiverClassLookupTagOrNull()
|
||||
+2
-2
@@ -567,11 +567,11 @@ abstract class FirDataFlowAnalyzer(
|
||||
// return true
|
||||
// }
|
||||
|
||||
val ownerTag = this.toLookupTag()
|
||||
return this.unsubstitutedScope(
|
||||
session, components.scopeSession, withForcedTypeCalculator = false, memberRequiredPhase = FirResolvePhase.STATUS
|
||||
).getFunctions(OperatorNameConventions.EQUALS).any {
|
||||
!it.isSubstitutionOrIntersectionOverride && it.fir.isEquals(session) &&
|
||||
it.dispatchReceiverClassLookupTagOrNull() == this.toLookupTag()
|
||||
!it.isSubstitutionOrIntersectionOverride && it.fir.isEquals(session) && ownerTag.isRealOwnerOf(it)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+3
-2
@@ -18,11 +18,11 @@ import org.jetbrains.kotlin.fir.analysis.checkers.toRegularClassSymbol
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.declarations.annotationPlatformSupport
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.*
|
||||
import org.jetbrains.kotlin.fir.dispatchReceiverClassLookupTagOrNull
|
||||
import org.jetbrains.kotlin.fir.expressions.*
|
||||
import org.jetbrains.kotlin.fir.moduleData
|
||||
import org.jetbrains.kotlin.fir.resolve.defaultType
|
||||
import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
|
||||
import org.jetbrains.kotlin.fir.resolve.isRealOwnerOf
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.*
|
||||
import org.jetbrains.kotlin.fir.types.*
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
@@ -453,9 +453,10 @@ object FirSerializationPluginClassChecker : FirClassChecker() {
|
||||
properties: List<FirSerializableProperty>,
|
||||
reporter: DiagnosticReporter
|
||||
) {
|
||||
val classLookupTag = classSymbol.toLookupTag()
|
||||
for (property in properties) {
|
||||
// Don't report anything on properties from supertypes
|
||||
if (property.propertySymbol.dispatchReceiverClassLookupTagOrNull() != classSymbol.toLookupTag()) continue
|
||||
if (!classLookupTag.isRealOwnerOf(property.propertySymbol)) continue
|
||||
val customSerializerType = property.serializableWith
|
||||
val serializerSymbol = customSerializerType?.toRegularClassSymbol(session)
|
||||
val propertySymbol = property.propertySymbol
|
||||
|
||||
Reference in New Issue
Block a user