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.api.LLFirResolveSession
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.llFirModuleData
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.llFirModuleData
|
||||||
import org.jetbrains.kotlin.analysis.project.structure.KtModule
|
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.resolve.toFirRegularClassSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.*
|
import org.jetbrains.kotlin.fir.symbols.impl.*
|
||||||
@@ -36,7 +36,7 @@ fun FirBasedSymbol<*>.getContainingKtModule(firResolveSession: LLFirResolveSessi
|
|||||||
val target = when (this) {
|
val target = when (this) {
|
||||||
is FirCallableSymbol -> {
|
is FirCallableSymbol -> {
|
||||||
// callable fake overrides have use-site FirModuleData
|
// callable fake overrides have use-site FirModuleData
|
||||||
dispatchReceiverClassOrNull()?.toFirRegularClassSymbol(firResolveSession.useSiteFirSession) ?: this
|
dispatchReceiverClassLookupTagOrNull()?.toFirRegularClassSymbol(firResolveSession.useSiteFirSession) ?: this
|
||||||
}
|
}
|
||||||
else -> this
|
else -> this
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -224,7 +224,7 @@ class FirElementSerializer private constructor(
|
|||||||
if (declaration.isSubstitutionOrIntersectionOverride) return
|
if (declaration.isSubstitutionOrIntersectionOverride) return
|
||||||
|
|
||||||
// non-intersection or substitution fake override
|
// 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)
|
add(declaration)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -414,7 +414,7 @@ fun FirTypeScope.processOverriddenFunctionsFromSuperClasses(
|
|||||||
): ProcessorAction =
|
): ProcessorAction =
|
||||||
processDirectOverriddenFunctionsWithBaseScope(functionSymbol) { overridden, _ ->
|
processDirectOverriddenFunctionsWithBaseScope(functionSymbol) { overridden, _ ->
|
||||||
val unwrapped = if (overridden.fir.isSubstitutionOverride &&
|
val unwrapped = if (overridden.fir.isSubstitutionOverride &&
|
||||||
overridden.dispatchReceiverClassOrNull() == containingClass.symbol.toLookupTag()
|
overridden.dispatchReceiverClassLookupTagOrNull() == containingClass.symbol.toLookupTag()
|
||||||
)
|
)
|
||||||
overridden.originalForSubstitutionOverride!!
|
overridden.originalForSubstitutionOverride!!
|
||||||
else
|
else
|
||||||
@@ -430,7 +430,7 @@ fun FirTypeScope.processOverriddenPropertiesFromSuperClasses(
|
|||||||
): ProcessorAction =
|
): ProcessorAction =
|
||||||
processDirectOverriddenPropertiesWithBaseScope(propertySymbol) { overridden, _ ->
|
processDirectOverriddenPropertiesWithBaseScope(propertySymbol) { overridden, _ ->
|
||||||
val unwrapped = if (overridden.fir.isSubstitutionOverride &&
|
val unwrapped = if (overridden.fir.isSubstitutionOverride &&
|
||||||
overridden.dispatchReceiverClassOrNull() == containingClass.symbol.toLookupTag()
|
overridden.dispatchReceiverClassLookupTagOrNull() == containingClass.symbol.toLookupTag()
|
||||||
)
|
)
|
||||||
overridden.originalForSubstitutionOverride!!
|
overridden.originalForSubstitutionOverride!!
|
||||||
else
|
else
|
||||||
|
|||||||
+2
-2
@@ -1406,8 +1406,8 @@ class Fir2IrDeclarationStorage(
|
|||||||
symbolTable.declareProperty(signature, { symbol }) {
|
symbolTable.declareProperty(signature, { symbol }) {
|
||||||
val isFakeOverride =
|
val isFakeOverride =
|
||||||
fir.isSubstitutionOrIntersectionOverride &&
|
fir.isSubstitutionOrIntersectionOverride &&
|
||||||
firPropertySymbol.dispatchReceiverClassOrNull() !=
|
firPropertySymbol.dispatchReceiverClassLookupTagOrNull() !=
|
||||||
firPropertySymbol.originalForSubstitutionOverride?.dispatchReceiverClassOrNull()
|
firPropertySymbol.originalForSubstitutionOverride?.dispatchReceiverClassLookupTagOrNull()
|
||||||
Fir2IrLazyProperty(
|
Fir2IrLazyProperty(
|
||||||
components, startOffset, endOffset, declarationOrigin, fir, (lazyParent as? Fir2IrLazyClass)?.fir, symbol, isFakeOverride
|
components, startOffset, endOffset, declarationOrigin, fir, (lazyParent as? Fir2IrLazyClass)?.fir, symbol, isFakeOverride
|
||||||
).apply {
|
).apply {
|
||||||
|
|||||||
+1
-1
@@ -698,7 +698,7 @@ class CallAndReferenceGenerator(
|
|||||||
val resolvedReference = callableReferenceAccess.calleeReference as FirResolvedNamedReference
|
val resolvedReference = callableReferenceAccess.calleeReference as FirResolvedNamedReference
|
||||||
val firCallableSymbol = resolvedReference.resolvedSymbol as FirCallableSymbol<*>
|
val firCallableSymbol = resolvedReference.resolvedSymbol as FirCallableSymbol<*>
|
||||||
// Make sure the reference indeed refers to a member of that companion
|
// Make sure the reference indeed refers to a member of that companion
|
||||||
if (firCallableSymbol.dispatchReceiverClassOrNull() != classSymbol.toLookupTag()) {
|
if (firCallableSymbol.dispatchReceiverClassLookupTagOrNull() != classSymbol.toLookupTag()) {
|
||||||
return null
|
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.isExpect
|
||||||
import org.jetbrains.kotlin.fir.declarations.utils.isFromEnumClass
|
import org.jetbrains.kotlin.fir.declarations.utils.isFromEnumClass
|
||||||
import org.jetbrains.kotlin.fir.declarations.utils.visibility
|
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.FirDelegatedConstructorCall
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||||
import org.jetbrains.kotlin.fir.expressions.impl.FirNoReceiverExpression
|
import org.jetbrains.kotlin.fir.expressions.impl.FirNoReceiverExpression
|
||||||
@@ -175,7 +175,7 @@ internal class ClassMemberGenerator(
|
|||||||
irFunction.body = IrSyntheticBodyImpl(startOffset, endOffset, kind)
|
irFunction.body = IrSyntheticBodyImpl(startOffset, endOffset, kind)
|
||||||
}
|
}
|
||||||
irFunction.parent is IrClass && irFunction.parentAsClass.isData -> {
|
irFunction.parent is IrClass && irFunction.parentAsClass.isData -> {
|
||||||
val lookupTag = firFunction?.symbol?.dispatchReceiverClassOrNull()
|
val lookupTag = firFunction?.symbol?.dispatchReceiverClassLookupTagOrNull()
|
||||||
when {
|
when {
|
||||||
DataClassResolver.isComponentLike(irFunction.name) ->
|
DataClassResolver.isComponentLike(irFunction.name) ->
|
||||||
firFunction?.body?.let { irFunction.body = visitor.convertToIrBlockBody(it) }
|
firFunction?.body?.let { irFunction.body = visitor.convertToIrBlockBody(it) }
|
||||||
|
|||||||
+3
-3
@@ -176,7 +176,7 @@ class FakeOverrideGenerator(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun FirCallableSymbol<*>.shouldHaveComputedBaseSymbolsForClass(classLookupTag: ConeClassLikeLookupTag): Boolean =
|
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(
|
private inline fun <reified D : FirCallableDeclaration, reified S : FirCallableSymbol<D>, reified I : IrDeclaration> createFakeOverriddenIfNeeded(
|
||||||
klass: FirClass,
|
klass: FirClass,
|
||||||
@@ -197,7 +197,7 @@ class FakeOverrideGenerator(
|
|||||||
val classLookupTag = klass.symbol.toLookupTag()
|
val classLookupTag = klass.symbol.toLookupTag()
|
||||||
val originalDeclaration = originalSymbol.fir
|
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
|
// 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)
|
// (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
|
// 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 {
|
return scope.directOverridden(symbol).map {
|
||||||
// Unwrapping should happen only for fake overrides members from the same class, not from supertypes
|
// 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!!
|
it.originalForSubstitutionOverride!!
|
||||||
else
|
else
|
||||||
it
|
it
|
||||||
|
|||||||
@@ -10,11 +10,9 @@ import org.jetbrains.kotlin.descriptors.*
|
|||||||
import org.jetbrains.kotlin.fir.backend.*
|
import org.jetbrains.kotlin.fir.backend.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.utils.*
|
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.isNewPlaceForBodyGeneration
|
||||||
import org.jetbrains.kotlin.fir.isSubstitutionOrIntersectionOverride
|
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.scopes.unsubstitutedScope
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
||||||
@@ -197,7 +195,7 @@ class Fir2IrLazyClass(
|
|||||||
scope.processFunctionsByName(name) {
|
scope.processFunctionsByName(name) {
|
||||||
if (it.isSubstitutionOrIntersectionOverride) return@processFunctionsByName
|
if (it.isSubstitutionOrIntersectionOverride) return@processFunctionsByName
|
||||||
if (!shouldBuildStub(it.fir)) return@processFunctionsByName
|
if (!shouldBuildStub(it.fir)) return@processFunctionsByName
|
||||||
if (it.dispatchReceiverClassOrNull() == ownerLookupTag) {
|
if (it.dispatchReceiverClassLookupTagOrNull() == ownerLookupTag) {
|
||||||
if (it.isAbstractMethodOfAny()) {
|
if (it.isAbstractMethodOfAny()) {
|
||||||
return@processFunctionsByName
|
return@processFunctionsByName
|
||||||
}
|
}
|
||||||
@@ -207,7 +205,7 @@ class Fir2IrLazyClass(
|
|||||||
scope.processPropertiesByName(name) {
|
scope.processPropertiesByName(name) {
|
||||||
if (it.isSubstitutionOrIntersectionOverride) return@processPropertiesByName
|
if (it.isSubstitutionOrIntersectionOverride) return@processPropertiesByName
|
||||||
if (!shouldBuildStub(it.fir)) return@processPropertiesByName
|
if (!shouldBuildStub(it.fir)) return@processPropertiesByName
|
||||||
if (it is FirPropertySymbol && it.dispatchReceiverClassOrNull() == ownerLookupTag) {
|
if (it is FirPropertySymbol && it.dispatchReceiverClassLookupTagOrNull() == ownerLookupTag) {
|
||||||
result.addIfNotNull(
|
result.addIfNotNull(
|
||||||
declarationStorage.getIrPropertySymbol(it, forceTopLevelPrivate = isTopLevelPrivate).owner as? IrDeclaration
|
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 FirRegularClass && declaration.classId.isLocal) return null
|
||||||
if (declaration is FirCallableDeclaration) {
|
if (declaration is FirCallableDeclaration) {
|
||||||
if (declaration.visibility == Visibilities.Local) return null
|
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)
|
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.FirSession
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
|
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.java.scopes.ClassicBuiltinSpecialProperties.getBuiltinSpecialPropertyGetterName
|
||||||
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
||||||
import org.jetbrains.kotlin.fir.scopes.*
|
import org.jetbrains.kotlin.fir.scopes.*
|
||||||
@@ -159,7 +159,7 @@ object ClassicBuiltinSpecialProperties {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun FirCallableSymbol<*>.isFromBuiltinClass(session: FirSession): Boolean {
|
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(
|
private fun FirNamedFunctionSymbol.firstOverriddenFunction(
|
||||||
|
|||||||
@@ -304,7 +304,7 @@ abstract class FirVisibilityChecker : FirSessionComponent {
|
|||||||
val dispatchReceiverParameterClassSymbol =
|
val dispatchReceiverParameterClassSymbol =
|
||||||
(fir as? FirCallableDeclaration)
|
(fir as? FirCallableDeclaration)
|
||||||
?.propertyIfAccessor?.propertyIfBackingField
|
?.propertyIfAccessor?.propertyIfBackingField
|
||||||
?.dispatchReceiverClassOrNull()?.toSymbol(session)
|
?.dispatchReceiverClassLookupTagOrNull()?.toSymbol(session)
|
||||||
?: return true
|
?: return true
|
||||||
|
|
||||||
val dispatchReceiverParameterClassLookupTag = dispatchReceiverParameterClassSymbol.toLookupTag()
|
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 packageName = classLookupTag?.classId?.packageFqName ?: getterSymbol.callableId.packageName
|
||||||
val className = classLookupTag?.classId?.relativeClassName
|
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.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty
|
import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty
|
||||||
import org.jetbrains.kotlin.fir.declarations.utils.visibility
|
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.originalForSubstitutionOverride
|
||||||
import org.jetbrains.kotlin.fir.resolve.ScopeSessionKey
|
import org.jetbrains.kotlin.fir.resolve.ScopeSessionKey
|
||||||
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
|
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
|
||||||
@@ -286,7 +286,7 @@ class FirClassSubstitutionScope(
|
|||||||
member as FirTypeParameterRefsOwner,
|
member as FirTypeParameterRefsOwner,
|
||||||
symbolForOverride,
|
symbolForOverride,
|
||||||
substitutor,
|
substitutor,
|
||||||
forceTypeParametersRecreation = dispatchReceiverTypeForSubstitutedMembers.lookupTag != member.dispatchReceiverClassOrNull()
|
forceTypeParametersRecreation = dispatchReceiverTypeForSubstitutedMembers.lookupTag != member.dispatchReceiverClassLookupTagOrNull()
|
||||||
)
|
)
|
||||||
|
|
||||||
val receiverType = member.receiverTypeRef?.coneType
|
val receiverType = member.receiverTypeRef?.coneType
|
||||||
|
|||||||
+2
-2
@@ -356,7 +356,7 @@ class FirTypeIntersectionScopeContext(
|
|||||||
val key = mostSpecific.first() as FirNamedFunctionSymbol
|
val key = mostSpecific.first() as FirNamedFunctionSymbol
|
||||||
val keyFir = key.fir
|
val keyFir = key.fir
|
||||||
val callableId = CallableId(
|
val callableId = CallableId(
|
||||||
dispatchReceiverType.classId ?: keyFir.dispatchReceiverClassOrNull()?.classId!!,
|
dispatchReceiverType.classId ?: keyFir.dispatchReceiverClassLookupTagOrNull()?.classId!!,
|
||||||
keyFir.name
|
keyFir.name
|
||||||
)
|
)
|
||||||
val newSymbol = FirIntersectionOverrideFunctionSymbol(callableId, overrides)
|
val newSymbol = FirIntersectionOverrideFunctionSymbol(callableId, overrides)
|
||||||
@@ -381,7 +381,7 @@ class FirTypeIntersectionScopeContext(
|
|||||||
val key = mostSpecific.first() as FirPropertySymbol
|
val key = mostSpecific.first() as FirPropertySymbol
|
||||||
val keyFir = key.fir
|
val keyFir = key.fir
|
||||||
val callableId = CallableId(
|
val callableId = CallableId(
|
||||||
dispatchReceiverType.classId ?: keyFir.dispatchReceiverClassOrNull()?.classId!!,
|
dispatchReceiverType.classId ?: keyFir.dispatchReceiverClassLookupTagOrNull()?.classId!!,
|
||||||
keyFir.name
|
keyFir.name
|
||||||
)
|
)
|
||||||
val newSymbol = FirIntersectionOverridePropertySymbol(callableId, overrides)
|
val newSymbol = FirIntersectionOverridePropertySymbol(callableId, overrides)
|
||||||
|
|||||||
@@ -541,7 +541,7 @@ fun FirFunction.getAsForbiddenNamedArgumentsTarget(
|
|||||||
}
|
}
|
||||||
// referenced function of a Kotlin function type
|
// referenced function of a Kotlin function type
|
||||||
FirDeclarationOrigin.BuiltIns -> {
|
FirDeclarationOrigin.BuiltIns -> {
|
||||||
if (dispatchReceiverClassOrNull()?.isBuiltinFunctionalType() == true) {
|
if (dispatchReceiverClassLookupTagOrNull()?.isBuiltinFunctionalType() == true) {
|
||||||
ForbiddenNamedArgumentsTarget.INVOKE_ON_FUNCTION_TYPE
|
ForbiddenNamedArgumentsTarget.INVOKE_ON_FUNCTION_TYPE
|
||||||
} else {
|
} else {
|
||||||
null
|
null
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import org.jetbrains.kotlin.descriptors.isClass
|
|||||||
import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration
|
import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirVariable
|
import org.jetbrains.kotlin.fir.declarations.FirVariable
|
||||||
import org.jetbrains.kotlin.fir.declarations.utils.modality
|
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.FirFunctionCall
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccess
|
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccess
|
||||||
import org.jetbrains.kotlin.fir.references.FirNamedReference
|
import org.jetbrains.kotlin.fir.references.FirNamedReference
|
||||||
@@ -151,5 +151,5 @@ private fun BodyResolveComponents.isConcreteMember(supertype: ConeKotlinType, me
|
|||||||
val classSymbol =
|
val classSymbol =
|
||||||
(supertype as? ConeClassLikeType)?.lookupTag?.toSymbol(session) as? FirRegularClassSymbol ?: return true
|
(supertype as? ConeClassLikeType)?.lookupTag?.toSymbol(session) as? FirRegularClassSymbol ?: return true
|
||||||
if (classSymbol.fir.classKind != ClassKind.INTERFACE) 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
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
val lookupTag = candidate.fir.propertySymbol.dispatchReceiverClassOrNull()
|
val lookupTag = candidate.fir.propertySymbol.dispatchReceiverClassLookupTagOrNull()
|
||||||
return when {
|
return when {
|
||||||
lookupTag != null -> {
|
lookupTag != null -> {
|
||||||
bodyResolveComponents.implicitReceiverStack.lastDispatchReceiver { implicitReceiverValue ->
|
bodyResolveComponents.implicitReceiverStack.lastDispatchReceiver { implicitReceiverValue ->
|
||||||
|
|||||||
@@ -16,22 +16,23 @@ import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
|||||||
fun FirCallableSymbol<*>.dispatchReceiverTypeOrNull(): ConeKotlinType? =
|
fun FirCallableSymbol<*>.dispatchReceiverTypeOrNull(): ConeKotlinType? =
|
||||||
fir.dispatchReceiverType
|
fir.dispatchReceiverType
|
||||||
|
|
||||||
fun FirCallableSymbol<*>.dispatchReceiverClassOrNull(): ConeClassLikeLookupTag? =
|
|
||||||
fir.dispatchReceiverClassOrNull()
|
|
||||||
|
|
||||||
fun FirCallableDeclaration.dispatchReceiverClassTypeOrNull(): ConeClassLikeType? =
|
fun FirCallableDeclaration.dispatchReceiverClassTypeOrNull(): ConeClassLikeType? =
|
||||||
if (dispatchReceiverType is ConeIntersectionType && isIntersectionOverride)
|
if (dispatchReceiverType is ConeIntersectionType && isIntersectionOverride)
|
||||||
baseForIntersectionOverride!!.dispatchReceiverClassTypeOrNull()
|
baseForIntersectionOverride!!.dispatchReceiverClassTypeOrNull()
|
||||||
else
|
else
|
||||||
dispatchReceiverType as? ConeClassLikeType
|
dispatchReceiverType as? ConeClassLikeType
|
||||||
|
|
||||||
fun FirCallableDeclaration.dispatchReceiverClassOrNull(): ConeClassLikeLookupTag? =
|
fun FirCallableSymbol<*>.dispatchReceiverClassLookupTagOrNull(): ConeClassLikeLookupTag? =
|
||||||
|
fir.dispatchReceiverClassLookupTagOrNull()
|
||||||
|
|
||||||
|
fun FirCallableDeclaration.dispatchReceiverClassLookupTagOrNull(): ConeClassLikeLookupTag? =
|
||||||
dispatchReceiverClassTypeOrNull()?.lookupTag
|
dispatchReceiverClassTypeOrNull()?.lookupTag
|
||||||
|
|
||||||
fun FirCallableSymbol<*>.containingClassLookupTag(): ConeClassLikeLookupTag? = fir.containingClassLookupTag()
|
fun FirCallableSymbol<*>.containingClassLookupTag(): ConeClassLikeLookupTag? =
|
||||||
fun FirCallableDeclaration.containingClassLookupTag(): ConeClassLikeLookupTag? {
|
fir.containingClassLookupTag()
|
||||||
return (containingClassForStaticMemberAttr ?: dispatchReceiverClassOrNull())
|
|
||||||
}
|
fun FirCallableDeclaration.containingClassLookupTag(): ConeClassLikeLookupTag? =
|
||||||
|
containingClassForStaticMemberAttr ?: dispatchReceiverClassLookupTagOrNull()
|
||||||
|
|
||||||
fun FirRegularClass.containingClassForLocal(): ConeClassLikeLookupTag? =
|
fun FirRegularClass.containingClassForLocal(): ConeClassLikeLookupTag? =
|
||||||
if (isLocal) containingClassForLocalAttr else null
|
if (isLocal) containingClassForLocalAttr else null
|
||||||
|
|||||||
+1
-1
@@ -856,7 +856,7 @@ class FirVisualizer(private val firFile: FirFile) : BaseRenderer() {
|
|||||||
return when (val fir = this.fir) {
|
return when (val fir = this.fir) {
|
||||||
is FirConstructor -> fir.returnTypeRef.coneType.isLocal()
|
is FirConstructor -> fir.returnTypeRef.coneType.isLocal()
|
||||||
is FirCallableDeclaration -> {
|
is FirCallableDeclaration -> {
|
||||||
fir.dispatchReceiverClassOrNull()?.toFirRegularClassSymbol(session)?.isLocal ?: false
|
fir.dispatchReceiverClassLookupTagOrNull()?.toFirRegularClassSymbol(session)?.isLocal ?: false
|
||||||
}
|
}
|
||||||
else -> false
|
else -> false
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user