FIR: make class member helper names more consistent
This commit is contained in:
committed by
Space Team
parent
e2a83a0ed0
commit
d4fc2248ff
+2
-2
@@ -10,7 +10,7 @@ import org.jetbrains.kotlin.analysis.api.symbols.*
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.llFirModuleData
|
||||
import org.jetbrains.kotlin.analysis.project.structure.KtModule
|
||||
import org.jetbrains.kotlin.fir.dispatchReceiverClassOrNull
|
||||
import org.jetbrains.kotlin.fir.dispatchReceiverClassLookupTagOrNull
|
||||
import org.jetbrains.kotlin.fir.resolve.toFirRegularClassSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.*
|
||||
@@ -36,7 +36,7 @@ fun FirBasedSymbol<*>.getContainingKtModule(firResolveSession: LLFirResolveSessi
|
||||
val target = when (this) {
|
||||
is FirCallableSymbol -> {
|
||||
// callable fake overrides have use-site FirModuleData
|
||||
dispatchReceiverClassOrNull()?.toFirRegularClassSymbol(firResolveSession.useSiteFirSession) ?: this
|
||||
dispatchReceiverClassLookupTagOrNull()?.toFirRegularClassSymbol(firResolveSession.useSiteFirSession) ?: this
|
||||
}
|
||||
else -> this
|
||||
}
|
||||
|
||||
+1
-1
@@ -224,7 +224,7 @@ class FirElementSerializer private constructor(
|
||||
if (declaration.isSubstitutionOrIntersectionOverride) return
|
||||
|
||||
// non-intersection or substitution fake override
|
||||
if (!declaration.isStatic && declaration.dispatchReceiverClassOrNull() != this@declarations.symbol.toLookupTag()) return
|
||||
if (!declaration.isStatic && declaration.dispatchReceiverClassLookupTagOrNull() != this@declarations.symbol.toLookupTag()) return
|
||||
|
||||
add(declaration)
|
||||
}
|
||||
|
||||
@@ -414,7 +414,7 @@ fun FirTypeScope.processOverriddenFunctionsFromSuperClasses(
|
||||
): ProcessorAction =
|
||||
processDirectOverriddenFunctionsWithBaseScope(functionSymbol) { overridden, _ ->
|
||||
val unwrapped = if (overridden.fir.isSubstitutionOverride &&
|
||||
overridden.dispatchReceiverClassOrNull() == containingClass.symbol.toLookupTag()
|
||||
overridden.dispatchReceiverClassLookupTagOrNull() == containingClass.symbol.toLookupTag()
|
||||
)
|
||||
overridden.originalForSubstitutionOverride!!
|
||||
else
|
||||
@@ -430,7 +430,7 @@ fun FirTypeScope.processOverriddenPropertiesFromSuperClasses(
|
||||
): ProcessorAction =
|
||||
processDirectOverriddenPropertiesWithBaseScope(propertySymbol) { overridden, _ ->
|
||||
val unwrapped = if (overridden.fir.isSubstitutionOverride &&
|
||||
overridden.dispatchReceiverClassOrNull() == containingClass.symbol.toLookupTag()
|
||||
overridden.dispatchReceiverClassLookupTagOrNull() == containingClass.symbol.toLookupTag()
|
||||
)
|
||||
overridden.originalForSubstitutionOverride!!
|
||||
else
|
||||
|
||||
+2
-2
@@ -1406,8 +1406,8 @@ class Fir2IrDeclarationStorage(
|
||||
symbolTable.declareProperty(signature, { symbol }) {
|
||||
val isFakeOverride =
|
||||
fir.isSubstitutionOrIntersectionOverride &&
|
||||
firPropertySymbol.dispatchReceiverClassOrNull() !=
|
||||
firPropertySymbol.originalForSubstitutionOverride?.dispatchReceiverClassOrNull()
|
||||
firPropertySymbol.dispatchReceiverClassLookupTagOrNull() !=
|
||||
firPropertySymbol.originalForSubstitutionOverride?.dispatchReceiverClassLookupTagOrNull()
|
||||
Fir2IrLazyProperty(
|
||||
components, startOffset, endOffset, declarationOrigin, fir, (lazyParent as? Fir2IrLazyClass)?.fir, symbol, isFakeOverride
|
||||
).apply {
|
||||
|
||||
+1
-1
@@ -698,7 +698,7 @@ class CallAndReferenceGenerator(
|
||||
val resolvedReference = callableReferenceAccess.calleeReference as FirResolvedNamedReference
|
||||
val firCallableSymbol = resolvedReference.resolvedSymbol as FirCallableSymbol<*>
|
||||
// Make sure the reference indeed refers to a member of that companion
|
||||
if (firCallableSymbol.dispatchReceiverClassOrNull() != classSymbol.toLookupTag()) {
|
||||
if (firCallableSymbol.dispatchReceiverClassLookupTagOrNull() != classSymbol.toLookupTag()) {
|
||||
return null
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -14,7 +14,7 @@ import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertySetter
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.isExpect
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.isFromEnumClass
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.visibility
|
||||
import org.jetbrains.kotlin.fir.dispatchReceiverClassOrNull
|
||||
import org.jetbrains.kotlin.fir.dispatchReceiverClassLookupTagOrNull
|
||||
import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.impl.FirNoReceiverExpression
|
||||
@@ -175,7 +175,7 @@ internal class ClassMemberGenerator(
|
||||
irFunction.body = IrSyntheticBodyImpl(startOffset, endOffset, kind)
|
||||
}
|
||||
irFunction.parent is IrClass && irFunction.parentAsClass.isData -> {
|
||||
val lookupTag = firFunction?.symbol?.dispatchReceiverClassOrNull()
|
||||
val lookupTag = firFunction?.symbol?.dispatchReceiverClassLookupTagOrNull()
|
||||
when {
|
||||
DataClassResolver.isComponentLike(irFunction.name) ->
|
||||
firFunction?.body?.let { irFunction.body = visitor.convertToIrBlockBody(it) }
|
||||
|
||||
+3
-3
@@ -176,7 +176,7 @@ class FakeOverrideGenerator(
|
||||
}
|
||||
|
||||
private fun FirCallableSymbol<*>.shouldHaveComputedBaseSymbolsForClass(classLookupTag: ConeClassLikeLookupTag): Boolean =
|
||||
fir.origin.fromSupertypes && dispatchReceiverClassOrNull() == classLookupTag
|
||||
fir.origin.fromSupertypes && dispatchReceiverClassLookupTagOrNull() == classLookupTag
|
||||
|
||||
private inline fun <reified D : FirCallableDeclaration, reified S : FirCallableSymbol<D>, reified I : IrDeclaration> createFakeOverriddenIfNeeded(
|
||||
klass: FirClass,
|
||||
@@ -197,7 +197,7 @@ class FakeOverrideGenerator(
|
||||
val classLookupTag = klass.symbol.toLookupTag()
|
||||
val originalDeclaration = originalSymbol.fir
|
||||
|
||||
if (originalSymbol.dispatchReceiverClassOrNull() == classLookupTag && !originalDeclaration.origin.fromSupertypes) return
|
||||
if (originalSymbol.dispatchReceiverClassLookupTagOrNull() == classLookupTag && !originalDeclaration.origin.fromSupertypes) return
|
||||
// Data classes' methods from Any (toString/equals/hashCode) are not handled by the line above because they have Any-typed dispatch receiver
|
||||
// (there are no special FIR method for them, it's just fake overrides)
|
||||
// But they are treated differently in IR (real declarations have already been declared before) and such methods are present among realDeclarationSymbols
|
||||
@@ -330,7 +330,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.dispatchReceiverClassOrNull() == containingClass)
|
||||
if (it.fir.isSubstitutionOverride && it.dispatchReceiverClassLookupTagOrNull() == containingClass)
|
||||
it.originalForSubstitutionOverride!!
|
||||
else
|
||||
it
|
||||
|
||||
@@ -10,11 +10,9 @@ import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.fir.backend.*
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.*
|
||||
import org.jetbrains.kotlin.fir.dispatchReceiverClassOrNull
|
||||
import org.jetbrains.kotlin.fir.dispatchReceiverClassLookupTagOrNull
|
||||
import org.jetbrains.kotlin.fir.isNewPlaceForBodyGeneration
|
||||
import org.jetbrains.kotlin.fir.isSubstitutionOrIntersectionOverride
|
||||
import org.jetbrains.kotlin.fir.scopes.getDeclaredConstructors
|
||||
import org.jetbrains.kotlin.fir.scopes.impl.declaredMemberScope
|
||||
import org.jetbrains.kotlin.fir.scopes.unsubstitutedScope
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
||||
@@ -197,7 +195,7 @@ class Fir2IrLazyClass(
|
||||
scope.processFunctionsByName(name) {
|
||||
if (it.isSubstitutionOrIntersectionOverride) return@processFunctionsByName
|
||||
if (!shouldBuildStub(it.fir)) return@processFunctionsByName
|
||||
if (it.dispatchReceiverClassOrNull() == ownerLookupTag) {
|
||||
if (it.dispatchReceiverClassLookupTagOrNull() == ownerLookupTag) {
|
||||
if (it.isAbstractMethodOfAny()) {
|
||||
return@processFunctionsByName
|
||||
}
|
||||
@@ -207,7 +205,7 @@ class Fir2IrLazyClass(
|
||||
scope.processPropertiesByName(name) {
|
||||
if (it.isSubstitutionOrIntersectionOverride) return@processPropertiesByName
|
||||
if (!shouldBuildStub(it.fir)) return@processPropertiesByName
|
||||
if (it is FirPropertySymbol && it.dispatchReceiverClassOrNull() == ownerLookupTag) {
|
||||
if (it is FirPropertySymbol && it.dispatchReceiverClassLookupTagOrNull() == ownerLookupTag) {
|
||||
result.addIfNotNull(
|
||||
declarationStorage.getIrPropertySymbol(it, forceTopLevelPrivate = isTopLevelPrivate).owner as? IrDeclaration
|
||||
)
|
||||
|
||||
+1
-1
@@ -91,7 +91,7 @@ class FirBasedSignatureComposer(override val mangler: FirMangler) : Fir2IrSignat
|
||||
if (declaration is FirRegularClass && declaration.classId.isLocal) return null
|
||||
if (declaration is FirCallableDeclaration) {
|
||||
if (declaration.visibility == Visibilities.Local) return null
|
||||
if (!allowLocalClasses && (declaration.dispatchReceiverClassOrNull()?.classId?.isLocal == true || containingClass?.classId?.isLocal == true)) return null
|
||||
if (!allowLocalClasses && (declaration.dispatchReceiverClassLookupTagOrNull()?.classId?.isLocal == true || containingClass?.classId?.isLocal == true)) return null
|
||||
}
|
||||
|
||||
val declarationWithParentId = FirDeclarationWithParentId(declaration, containingClass?.classId)
|
||||
|
||||
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.fir.java.scopes
|
||||
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
|
||||
import org.jetbrains.kotlin.fir.dispatchReceiverClassOrNull
|
||||
import org.jetbrains.kotlin.fir.dispatchReceiverClassLookupTagOrNull
|
||||
import org.jetbrains.kotlin.fir.java.scopes.ClassicBuiltinSpecialProperties.getBuiltinSpecialPropertyGetterName
|
||||
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
||||
import org.jetbrains.kotlin.fir.scopes.*
|
||||
@@ -159,7 +159,7 @@ object ClassicBuiltinSpecialProperties {
|
||||
}
|
||||
|
||||
private fun FirCallableSymbol<*>.isFromBuiltinClass(session: FirSession): Boolean {
|
||||
return dispatchReceiverClassOrNull()?.toSymbol(session)?.fir?.origin == FirDeclarationOrigin.BuiltIns
|
||||
return dispatchReceiverClassLookupTagOrNull()?.toSymbol(session)?.fir?.origin == FirDeclarationOrigin.BuiltIns
|
||||
}
|
||||
|
||||
private fun FirNamedFunctionSymbol.firstOverriddenFunction(
|
||||
|
||||
@@ -304,7 +304,7 @@ abstract class FirVisibilityChecker : FirSessionComponent {
|
||||
val dispatchReceiverParameterClassSymbol =
|
||||
(fir as? FirCallableDeclaration)
|
||||
?.propertyIfAccessor?.propertyIfBackingField
|
||||
?.dispatchReceiverClassOrNull()?.toSymbol(session)
|
||||
?.dispatchReceiverClassLookupTagOrNull()?.toSymbol(session)
|
||||
?: return true
|
||||
|
||||
val dispatchReceiverParameterClassLookupTag = dispatchReceiverParameterClassSymbol.toLookupTag()
|
||||
|
||||
@@ -125,7 +125,7 @@ class FirSyntheticPropertiesScope private constructor(
|
||||
})
|
||||
}
|
||||
|
||||
val classLookupTag = getterSymbol.originalOrSelf().dispatchReceiverClassOrNull()
|
||||
val classLookupTag = getterSymbol.originalOrSelf().dispatchReceiverClassLookupTagOrNull()
|
||||
val packageName = classLookupTag?.classId?.packageFqName ?: getterSymbol.callableId.packageName
|
||||
val className = classLookupTag?.classId?.relativeClassName
|
||||
|
||||
|
||||
+2
-2
@@ -12,7 +12,7 @@ import org.jetbrains.kotlin.fir.caches.*
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.visibility
|
||||
import org.jetbrains.kotlin.fir.dispatchReceiverClassOrNull
|
||||
import org.jetbrains.kotlin.fir.dispatchReceiverClassLookupTagOrNull
|
||||
import org.jetbrains.kotlin.fir.originalForSubstitutionOverride
|
||||
import org.jetbrains.kotlin.fir.resolve.ScopeSessionKey
|
||||
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
|
||||
@@ -286,7 +286,7 @@ class FirClassSubstitutionScope(
|
||||
member as FirTypeParameterRefsOwner,
|
||||
symbolForOverride,
|
||||
substitutor,
|
||||
forceTypeParametersRecreation = dispatchReceiverTypeForSubstitutedMembers.lookupTag != member.dispatchReceiverClassOrNull()
|
||||
forceTypeParametersRecreation = dispatchReceiverTypeForSubstitutedMembers.lookupTag != member.dispatchReceiverClassLookupTagOrNull()
|
||||
)
|
||||
|
||||
val receiverType = member.receiverTypeRef?.coneType
|
||||
|
||||
+2
-2
@@ -356,7 +356,7 @@ class FirTypeIntersectionScopeContext(
|
||||
val key = mostSpecific.first() as FirNamedFunctionSymbol
|
||||
val keyFir = key.fir
|
||||
val callableId = CallableId(
|
||||
dispatchReceiverType.classId ?: keyFir.dispatchReceiverClassOrNull()?.classId!!,
|
||||
dispatchReceiverType.classId ?: keyFir.dispatchReceiverClassLookupTagOrNull()?.classId!!,
|
||||
keyFir.name
|
||||
)
|
||||
val newSymbol = FirIntersectionOverrideFunctionSymbol(callableId, overrides)
|
||||
@@ -381,7 +381,7 @@ class FirTypeIntersectionScopeContext(
|
||||
val key = mostSpecific.first() as FirPropertySymbol
|
||||
val keyFir = key.fir
|
||||
val callableId = CallableId(
|
||||
dispatchReceiverType.classId ?: keyFir.dispatchReceiverClassOrNull()?.classId!!,
|
||||
dispatchReceiverType.classId ?: keyFir.dispatchReceiverClassLookupTagOrNull()?.classId!!,
|
||||
keyFir.name
|
||||
)
|
||||
val newSymbol = FirIntersectionOverridePropertySymbol(callableId, overrides)
|
||||
|
||||
@@ -541,7 +541,7 @@ fun FirFunction.getAsForbiddenNamedArgumentsTarget(
|
||||
}
|
||||
// referenced function of a Kotlin function type
|
||||
FirDeclarationOrigin.BuiltIns -> {
|
||||
if (dispatchReceiverClassOrNull()?.isBuiltinFunctionalType() == true) {
|
||||
if (dispatchReceiverClassLookupTagOrNull()?.isBuiltinFunctionalType() == true) {
|
||||
ForbiddenNamedArgumentsTarget.INVOKE_ON_FUNCTION_TYPE
|
||||
} else {
|
||||
null
|
||||
|
||||
@@ -11,7 +11,7 @@ import org.jetbrains.kotlin.descriptors.isClass
|
||||
import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration
|
||||
import org.jetbrains.kotlin.fir.declarations.FirVariable
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.modality
|
||||
import org.jetbrains.kotlin.fir.dispatchReceiverClassOrNull
|
||||
import org.jetbrains.kotlin.fir.dispatchReceiverClassLookupTagOrNull
|
||||
import org.jetbrains.kotlin.fir.expressions.FirFunctionCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccess
|
||||
import org.jetbrains.kotlin.fir.references.FirNamedReference
|
||||
@@ -151,5 +151,5 @@ private fun BodyResolveComponents.isConcreteMember(supertype: ConeKotlinType, me
|
||||
val classSymbol =
|
||||
(supertype as? ConeClassLikeType)?.lookupTag?.toSymbol(session) as? FirRegularClassSymbol ?: return true
|
||||
if (classSymbol.fir.classKind != ClassKind.INTERFACE) return true
|
||||
return member.symbol.unwrapFakeOverrides().dispatchReceiverClassOrNull()?.classId != StandardClassIds.Any
|
||||
return member.symbol.unwrapFakeOverrides().dispatchReceiverClassLookupTagOrNull()?.classId != StandardClassIds.Any
|
||||
}
|
||||
|
||||
+1
-1
@@ -333,7 +333,7 @@ class ScopeTowerLevel(
|
||||
return null
|
||||
}
|
||||
|
||||
val lookupTag = candidate.fir.propertySymbol.dispatchReceiverClassOrNull()
|
||||
val lookupTag = candidate.fir.propertySymbol.dispatchReceiverClassLookupTagOrNull()
|
||||
return when {
|
||||
lookupTag != null -> {
|
||||
bodyResolveComponents.implicitReceiverStack.lastDispatchReceiver { implicitReceiverValue ->
|
||||
|
||||
@@ -16,22 +16,23 @@ import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
||||
fun FirCallableSymbol<*>.dispatchReceiverTypeOrNull(): ConeKotlinType? =
|
||||
fir.dispatchReceiverType
|
||||
|
||||
fun FirCallableSymbol<*>.dispatchReceiverClassOrNull(): ConeClassLikeLookupTag? =
|
||||
fir.dispatchReceiverClassOrNull()
|
||||
|
||||
fun FirCallableDeclaration.dispatchReceiverClassTypeOrNull(): ConeClassLikeType? =
|
||||
if (dispatchReceiverType is ConeIntersectionType && isIntersectionOverride)
|
||||
baseForIntersectionOverride!!.dispatchReceiverClassTypeOrNull()
|
||||
else
|
||||
dispatchReceiverType as? ConeClassLikeType
|
||||
|
||||
fun FirCallableDeclaration.dispatchReceiverClassOrNull(): ConeClassLikeLookupTag? =
|
||||
fun FirCallableSymbol<*>.dispatchReceiverClassLookupTagOrNull(): ConeClassLikeLookupTag? =
|
||||
fir.dispatchReceiverClassLookupTagOrNull()
|
||||
|
||||
fun FirCallableDeclaration.dispatchReceiverClassLookupTagOrNull(): ConeClassLikeLookupTag? =
|
||||
dispatchReceiverClassTypeOrNull()?.lookupTag
|
||||
|
||||
fun FirCallableSymbol<*>.containingClassLookupTag(): ConeClassLikeLookupTag? = fir.containingClassLookupTag()
|
||||
fun FirCallableDeclaration.containingClassLookupTag(): ConeClassLikeLookupTag? {
|
||||
return (containingClassForStaticMemberAttr ?: dispatchReceiverClassOrNull())
|
||||
}
|
||||
fun FirCallableSymbol<*>.containingClassLookupTag(): ConeClassLikeLookupTag? =
|
||||
fir.containingClassLookupTag()
|
||||
|
||||
fun FirCallableDeclaration.containingClassLookupTag(): ConeClassLikeLookupTag? =
|
||||
containingClassForStaticMemberAttr ?: dispatchReceiverClassLookupTagOrNull()
|
||||
|
||||
fun FirRegularClass.containingClassForLocal(): ConeClassLikeLookupTag? =
|
||||
if (isLocal) containingClassForLocalAttr else null
|
||||
|
||||
+1
-1
@@ -856,7 +856,7 @@ class FirVisualizer(private val firFile: FirFile) : BaseRenderer() {
|
||||
return when (val fir = this.fir) {
|
||||
is FirConstructor -> fir.returnTypeRef.coneType.isLocal()
|
||||
is FirCallableDeclaration -> {
|
||||
fir.dispatchReceiverClassOrNull()?.toFirRegularClassSymbol(session)?.isLocal ?: false
|
||||
fir.dispatchReceiverClassLookupTagOrNull()?.toFirRegularClassSymbol(session)?.isLocal ?: false
|
||||
}
|
||||
else -> false
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user