[FIR][K/N] Get rid of SymbolInternals in FirObjCInterop
This commit is contained in:
committed by
Space Team
parent
37e9062fcc
commit
07938205bc
+2
-2
@@ -18,13 +18,13 @@ import org.jetbrains.kotlin.fir.analysis.checkers.classKind
|
|||||||
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.FirPropertyChecker
|
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.FirPropertyChecker
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.needsMultiFieldValueClassFlattening
|
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.needsMultiFieldValueClassFlattening
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.getContainingDeclarationSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors
|
||||||
import org.jetbrains.kotlin.fir.containingClassLookupTag
|
import org.jetbrains.kotlin.fir.containingClassLookupTag
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirProperty
|
import org.jetbrains.kotlin.fir.declarations.FirProperty
|
||||||
import org.jetbrains.kotlin.fir.declarations.getAnnotationByClassId
|
import org.jetbrains.kotlin.fir.declarations.getAnnotationByClassId
|
||||||
import org.jetbrains.kotlin.fir.declarations.utils.*
|
import org.jetbrains.kotlin.fir.declarations.utils.*
|
||||||
import org.jetbrains.kotlin.fir.languageVersionSettings
|
import org.jetbrains.kotlin.fir.languageVersionSettings
|
||||||
|
import org.jetbrains.kotlin.fir.resolve.getContainingDeclaration
|
||||||
import org.jetbrains.kotlin.fir.resolve.toFirRegularClassSymbol
|
import org.jetbrains.kotlin.fir.resolve.toFirRegularClassSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
|
||||||
@@ -105,7 +105,7 @@ object FirJvmFieldApplicabilityChecker : FirPropertyChecker() {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
val outerClassKind = getContainingDeclarationSymbol(session)?.classKind
|
val outerClassKind = getContainingDeclaration(session)?.classKind
|
||||||
return outerClassKind == ClassKind.INTERFACE || outerClassKind == ClassKind.ANNOTATION_CLASS
|
return outerClassKind == ClassKind.INTERFACE || outerClassKind == ClassKind.ANNOTATION_CLASS
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -11,7 +11,6 @@ import org.jetbrains.kotlin.diagnostics.reportOn
|
|||||||
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.context.findClosest
|
import org.jetbrains.kotlin.fir.analysis.checkers.context.findClosest
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.expression.FirBasicExpressionChecker
|
import org.jetbrains.kotlin.fir.analysis.checkers.expression.FirBasicExpressionChecker
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.getContainingDeclarationSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirClass
|
import org.jetbrains.kotlin.fir.declarations.FirClass
|
||||||
import org.jetbrains.kotlin.fir.declarations.getAnnotationByClassId
|
import org.jetbrains.kotlin.fir.declarations.getAnnotationByClassId
|
||||||
@@ -20,6 +19,7 @@ import org.jetbrains.kotlin.fir.declarations.utils.visibility
|
|||||||
import org.jetbrains.kotlin.fir.expressions.*
|
import org.jetbrains.kotlin.fir.expressions.*
|
||||||
import org.jetbrains.kotlin.fir.references.toResolvedCallableSymbol
|
import org.jetbrains.kotlin.fir.references.toResolvedCallableSymbol
|
||||||
import org.jetbrains.kotlin.fir.resolve.defaultType
|
import org.jetbrains.kotlin.fir.resolve.defaultType
|
||||||
|
import org.jetbrains.kotlin.fir.resolve.getContainingDeclaration
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
|
||||||
import org.jetbrains.kotlin.fir.types.resolvedType
|
import org.jetbrains.kotlin.fir.types.resolvedType
|
||||||
@@ -52,7 +52,7 @@ object FirJvmProtectedInSuperClassCompanionCallChecker : FirBasicExpressionCheck
|
|||||||
if (resolvedSymbol.getAnnotationByClassId(JVM_STATIC_ANNOTATION_CLASS_ID, context.session) != null) return
|
if (resolvedSymbol.getAnnotationByClassId(JVM_STATIC_ANNOTATION_CLASS_ID, context.session) != null) return
|
||||||
if (!dispatchClassSymbol.isCompanion) return
|
if (!dispatchClassSymbol.isCompanion) return
|
||||||
val companionContainingClassSymbol =
|
val companionContainingClassSymbol =
|
||||||
dispatchClassSymbol.getContainingDeclarationSymbol(context.session) as? FirRegularClassSymbol ?: return
|
dispatchClassSymbol.getContainingDeclaration(context.session) as? FirRegularClassSymbol ?: return
|
||||||
|
|
||||||
// Called from within a derived class
|
// Called from within a derived class
|
||||||
val companionContainingType = companionContainingClassSymbol.defaultType()
|
val companionContainingType = companionContainingClassSymbol.defaultType()
|
||||||
|
|||||||
+1
-2
@@ -16,7 +16,6 @@ import org.jetbrains.kotlin.fir.backend.native.interop.getObjCInitMethod
|
|||||||
import org.jetbrains.kotlin.fir.backend.native.interop.isKotlinObjCClass
|
import org.jetbrains.kotlin.fir.backend.native.interop.isKotlinObjCClass
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.utils.isExpect
|
import org.jetbrains.kotlin.fir.declarations.utils.isExpect
|
||||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.getSuperClassSymbolOrAny
|
import org.jetbrains.kotlin.fir.resolve.getSuperClassSymbolOrAny
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.declaredMemberScope
|
import org.jetbrains.kotlin.fir.scopes.impl.declaredMemberScope
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
||||||
@@ -67,7 +66,7 @@ object FirNativeObjCOverrideInitChecker : FirClassChecker() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
val initMethod = superConstructor.getObjCInitMethod(session, ScopeSession())!!
|
val initMethod = superConstructor.getObjCInitMethod(session)!!
|
||||||
|
|
||||||
// Remove fake overrides of this init method, also check for explicit overriding:
|
// Remove fake overrides of this init method, also check for explicit overriding:
|
||||||
firClass.declarations.forEach {
|
firClass.declarations.forEach {
|
||||||
|
|||||||
@@ -30,7 +30,6 @@ import org.jetbrains.kotlin.fir.references.FirSuperReference
|
|||||||
import org.jetbrains.kotlin.fir.references.toResolvedCallableSymbol
|
import org.jetbrains.kotlin.fir.references.toResolvedCallableSymbol
|
||||||
import org.jetbrains.kotlin.fir.resolve.*
|
import org.jetbrains.kotlin.fir.resolve.*
|
||||||
import org.jetbrains.kotlin.fir.resolve.providers.firProvider
|
import org.jetbrains.kotlin.fir.resolve.providers.firProvider
|
||||||
import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider
|
|
||||||
import org.jetbrains.kotlin.fir.scopes.*
|
import org.jetbrains.kotlin.fir.scopes.*
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.declaredMemberScope
|
import org.jetbrains.kotlin.fir.scopes.impl.declaredMemberScope
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.multipleDelegatesWithTheSameSignature
|
import org.jetbrains.kotlin.fir.scopes.impl.multipleDelegatesWithTheSameSignature
|
||||||
@@ -173,22 +172,7 @@ fun FirDeclaration.getContainingClassSymbol(session: FirSession) = symbol.getCon
|
|||||||
|
|
||||||
fun FirClassLikeSymbol<*>.outerClassSymbol(context: CheckerContext): FirClassLikeSymbol<*>? {
|
fun FirClassLikeSymbol<*>.outerClassSymbol(context: CheckerContext): FirClassLikeSymbol<*>? {
|
||||||
if (this !is FirClassSymbol<*>) return null
|
if (this !is FirClassSymbol<*>) return null
|
||||||
return getContainingDeclarationSymbol(context.session)
|
return getContainingDeclaration(context.session)
|
||||||
}
|
|
||||||
|
|
||||||
@OptIn(SymbolInternals::class)
|
|
||||||
fun FirClassSymbol<*>.getContainingDeclarationSymbol(session: FirSession): FirClassLikeSymbol<*>? {
|
|
||||||
if (isLocal) {
|
|
||||||
return (this as FirRegularClassSymbol).fir.containingClassForLocalAttr?.toFirRegularClassSymbol(session)
|
|
||||||
} else {
|
|
||||||
val parentId = classId.relativeClassName.parent()
|
|
||||||
if (!parentId.isRoot) {
|
|
||||||
val containingDeclarationId = ClassId(classId.packageFqName, parentId, isLocal = false)
|
|
||||||
return session.symbolProvider.getClassLikeSymbolByClassId(containingDeclarationId)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return null
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
+1
-1
@@ -53,7 +53,7 @@ private class FirObjCFunctionNameMangleComputer(
|
|||||||
|
|
||||||
override fun getObjCMethodInfo(): ObjCMethodInfo? {
|
override fun getObjCMethodInfo(): ObjCMethodInfo? {
|
||||||
val scopeSession = ScopeSession()
|
val scopeSession = ScopeSession()
|
||||||
return function.symbol.getInitMethodIfObjCConstructor(session, scopeSession)
|
return function.symbol.getInitMethodIfObjCConstructor(session)
|
||||||
?.getObjCMethodInfoFromOverriddenFunctions(session, scopeSession)
|
?.getObjCMethodInfoFromOverriddenFunctions(session, scopeSession)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+7
-14
@@ -11,18 +11,12 @@ import org.jetbrains.kotlin.fir.declarations.*
|
|||||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
|
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirConstExpression
|
import org.jetbrains.kotlin.fir.expressions.FirConstExpression
|
||||||
import org.jetbrains.kotlin.fir.resolve.*
|
import org.jetbrains.kotlin.fir.resolve.*
|
||||||
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
|
|
||||||
import org.jetbrains.kotlin.fir.scopes.getDirectOverriddenFunctions
|
import org.jetbrains.kotlin.fir.scopes.getDirectOverriddenFunctions
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.declaredMemberScope
|
import org.jetbrains.kotlin.fir.scopes.impl.declaredMemberScope
|
||||||
import org.jetbrains.kotlin.fir.scopes.processAllFunctions
|
import org.jetbrains.kotlin.fir.scopes.processAllFunctions
|
||||||
import org.jetbrains.kotlin.fir.scopes.scopeForClass
|
|
||||||
import org.jetbrains.kotlin.fir.scopes.unsubstitutedScope
|
import org.jetbrains.kotlin.fir.scopes.unsubstitutedScope
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
|
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
|
||||||
import org.jetbrains.kotlin.fir.symbols.SymbolInternals
|
import org.jetbrains.kotlin.fir.symbols.impl.*
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirConstructorSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.name.NativeStandardInteropNames
|
import org.jetbrains.kotlin.name.NativeStandardInteropNames
|
||||||
@@ -54,7 +48,7 @@ internal fun FirFunctionSymbol<*>.getObjCMethodInfoFromOverriddenFunctions(sessi
|
|||||||
/**
|
/**
|
||||||
* mimics ConstructorDescriptor.getObjCInitMethod()
|
* mimics ConstructorDescriptor.getObjCInitMethod()
|
||||||
*/
|
*/
|
||||||
fun FirConstructorSymbol.getObjCInitMethod(session: FirSession, scopeSession: ScopeSession): FirFunctionSymbol<*>? {
|
fun FirConstructorSymbol.getObjCInitMethod(session: FirSession): FirFunctionSymbol<*>? {
|
||||||
this.annotations.getAnnotationByClassId(NativeStandardInteropNames.objCConstructorClassId, session)?.let { annotation ->
|
this.annotations.getAnnotationByClassId(NativeStandardInteropNames.objCConstructorClassId, session)?.let { annotation ->
|
||||||
val initSelector: String = annotation.constStringArgument("initSelector")
|
val initSelector: String = annotation.constStringArgument("initSelector")
|
||||||
val classSymbol = containingClassLookupTag()?.toSymbol(session) as FirClassSymbol<*>
|
val classSymbol = containingClassLookupTag()?.toSymbol(session) as FirClassSymbol<*>
|
||||||
@@ -128,9 +122,9 @@ private fun FirClassSymbol<*>.selfOrAnySuperClass(session: FirSession, predicate
|
|||||||
lookupSuperTypes(listOf(this), lookupInterfaces = true, deep = true, session, substituteTypes = false)
|
lookupSuperTypes(listOf(this), lookupInterfaces = true, deep = true, session, substituteTypes = false)
|
||||||
.any { predicate(it.lookupTag) }
|
.any { predicate(it.lookupTag) }
|
||||||
|
|
||||||
internal fun FirFunctionSymbol<*>.getInitMethodIfObjCConstructor(session: FirSession, scopeSession: ScopeSession): FirFunctionSymbol<*>? =
|
internal fun FirFunctionSymbol<*>.getInitMethodIfObjCConstructor(session: FirSession): FirFunctionSymbol<*>? =
|
||||||
if (this is FirConstructorSymbol && isObjCConstructor(session))
|
if (this is FirConstructorSymbol && isObjCConstructor(session))
|
||||||
getObjCInitMethod(session, scopeSession)
|
getObjCInitMethod(session)
|
||||||
else
|
else
|
||||||
this
|
this
|
||||||
|
|
||||||
@@ -139,13 +133,12 @@ fun FirProperty.isExternalObjCClassProperty(session: FirSession): Boolean =
|
|||||||
|
|
||||||
internal fun FirClassSymbol<*>.isExternalObjCClass(session: FirSession): Boolean =
|
internal fun FirClassSymbol<*>.isExternalObjCClass(session: FirSession): Boolean =
|
||||||
isObjCClass(session) &&
|
isObjCClass(session) &&
|
||||||
parentsWithSelf(session).filterIsInstance<FirClass>().any {
|
parentsWithSelf(session).filterIsInstance<FirClassSymbol<*>>().any {
|
||||||
it.hasAnnotation(NativeStandardInteropNames.externalObjCClassClassId, session)
|
it.hasAnnotation(NativeStandardInteropNames.externalObjCClassClassId, session)
|
||||||
}
|
}
|
||||||
|
|
||||||
@OptIn(SymbolInternals::class)
|
fun FirClassSymbol<*>.parentsWithSelf(session: FirSession): Sequence<FirClassLikeSymbol<out FirClassLikeDeclaration>> {
|
||||||
fun FirClassSymbol<*>.parentsWithSelf(session: FirSession): Sequence<FirClassLikeDeclaration> {
|
return generateSequence<FirClassLikeSymbol<out FirClassLikeDeclaration>>(this) { it.getContainingDeclaration(session) }
|
||||||
return generateSequence<FirClassLikeDeclaration>(fir) { it.getContainingDeclaration(session) }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun FirClassSymbol<*>.isKotlinObjCClass(session: FirSession): Boolean = isObjCClass(session) && !isExternalObjCClass(session)
|
fun FirClassSymbol<*>.isKotlinObjCClass(session: FirSession): Boolean = isObjCClass(session) && !isExternalObjCClass(session)
|
||||||
|
|||||||
@@ -34,6 +34,20 @@ fun FirClassLikeDeclaration.getContainingDeclaration(session: FirSession): FirCl
|
|||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun FirClassLikeSymbol<out FirClassLikeDeclaration>.getContainingDeclaration(session: FirSession): FirClassLikeSymbol<out FirClassLikeDeclaration>? {
|
||||||
|
if (isLocal) {
|
||||||
|
return (this as? FirRegularClassSymbol)?.containingClassForLocalAttr?.toFirRegularClassSymbol(session)
|
||||||
|
} else {
|
||||||
|
val parentId = classId.relativeClassName.parent()
|
||||||
|
if (!parentId.isRoot) {
|
||||||
|
val containingDeclarationId = ClassId(classId.packageFqName, parentId, isLocal = false)
|
||||||
|
return session.symbolProvider.getClassLikeSymbolByClassId(containingDeclarationId)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
fun isValidTypeParameterFromOuterDeclaration(
|
fun isValidTypeParameterFromOuterDeclaration(
|
||||||
typeParameterSymbol: FirTypeParameterSymbol,
|
typeParameterSymbol: FirTypeParameterSymbol,
|
||||||
declaration: FirDeclaration?,
|
declaration: FirDeclaration?,
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.fir.declarations.utils.isSynthetic
|
|||||||
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
|
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
|
||||||
import org.jetbrains.kotlin.fir.types.ConeClassLikeType
|
import org.jetbrains.kotlin.fir.types.ConeClassLikeType
|
||||||
import org.jetbrains.kotlin.fir.types.ConeIntersectionType
|
import org.jetbrains.kotlin.fir.types.ConeIntersectionType
|
||||||
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
||||||
@@ -56,6 +57,8 @@ private object ContainingClassKey : FirDeclarationDataKey()
|
|||||||
var FirCallableDeclaration.containingClassForStaticMemberAttr: ConeClassLikeLookupTag? by FirDeclarationDataRegistry.data(ContainingClassKey)
|
var FirCallableDeclaration.containingClassForStaticMemberAttr: ConeClassLikeLookupTag? by FirDeclarationDataRegistry.data(ContainingClassKey)
|
||||||
var FirRegularClass.containingClassForLocalAttr: ConeClassLikeLookupTag? by FirDeclarationDataRegistry.data(ContainingClassKey)
|
var FirRegularClass.containingClassForLocalAttr: ConeClassLikeLookupTag? by FirDeclarationDataRegistry.data(ContainingClassKey)
|
||||||
var FirDanglingModifierList.containingClassAttr: ConeClassLikeLookupTag? by FirDeclarationDataRegistry.data(ContainingClassKey)
|
var FirDanglingModifierList.containingClassAttr: ConeClassLikeLookupTag? by FirDeclarationDataRegistry.data(ContainingClassKey)
|
||||||
|
val FirRegularClassSymbol.containingClassForLocalAttr: ConeClassLikeLookupTag?
|
||||||
|
get() = fir.containingClassForLocalAttr
|
||||||
|
|
||||||
private object HasNoEnumEntriesKey : FirDeclarationDataKey()
|
private object HasNoEnumEntriesKey : FirDeclarationDataKey()
|
||||||
var FirClass.hasNoEnumEntriesAttr: Boolean? by FirDeclarationDataRegistry.data(HasNoEnumEntriesKey)
|
var FirClass.hasNoEnumEntriesAttr: Boolean? by FirDeclarationDataRegistry.data(HasNoEnumEntriesKey)
|
||||||
|
|||||||
+2
-2
@@ -9,7 +9,6 @@ import org.jetbrains.kotlin.descriptors.ClassKind
|
|||||||
import org.jetbrains.kotlin.descriptors.Modality
|
import org.jetbrains.kotlin.descriptors.Modality
|
||||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.getContainingDeclarationSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.containingClassForStaticMemberAttr
|
import org.jetbrains.kotlin.fir.containingClassForStaticMemberAttr
|
||||||
import org.jetbrains.kotlin.fir.copy
|
import org.jetbrains.kotlin.fir.copy
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
|
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
|
||||||
@@ -20,6 +19,7 @@ import org.jetbrains.kotlin.fir.declarations.utils.isCompanion
|
|||||||
import org.jetbrains.kotlin.fir.extensions.*
|
import org.jetbrains.kotlin.fir.extensions.*
|
||||||
import org.jetbrains.kotlin.fir.plugin.*
|
import org.jetbrains.kotlin.fir.plugin.*
|
||||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||||
|
import org.jetbrains.kotlin.fir.resolve.getContainingDeclaration
|
||||||
import org.jetbrains.kotlin.fir.resolve.lookupSuperTypes
|
import org.jetbrains.kotlin.fir.resolve.lookupSuperTypes
|
||||||
import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider
|
import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirTypeScope
|
import org.jetbrains.kotlin.fir.scopes.FirTypeScope
|
||||||
@@ -155,7 +155,7 @@ class SerializationFirResolveExtension(session: FirSession) : FirDeclarationGene
|
|||||||
val owner = context?.owner ?: return emptyList()
|
val owner = context?.owner ?: return emptyList()
|
||||||
if (callableId.callableName == SerialEntityNames.SERIALIZER_PROVIDER_NAME) {
|
if (callableId.callableName == SerialEntityNames.SERIALIZER_PROVIDER_NAME) {
|
||||||
val serializableClass = if (owner.isCompanion) {
|
val serializableClass = if (owner.isCompanion) {
|
||||||
val containingSymbol = owner.getContainingDeclarationSymbol(session) as? FirClassSymbol<*> ?: return emptyList()
|
val containingSymbol = owner.getContainingDeclaration(session) as? FirClassSymbol<*> ?: return emptyList()
|
||||||
if (with(session) { containingSymbol.shouldHaveGeneratedMethodsInCompanion }) containingSymbol else null
|
if (with(session) { containingSymbol.shouldHaveGeneratedMethodsInCompanion }) containingSymbol else null
|
||||||
} else {
|
} else {
|
||||||
if (with(session) { owner.isSerializableObject }) owner else null
|
if (with(session) { owner.isSerializableObject }) owner else null
|
||||||
|
|||||||
+2
-2
@@ -7,7 +7,6 @@ package org.jetbrains.kotlinx.serialization.compiler.fir
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.isObject
|
import org.jetbrains.kotlin.descriptors.isObject
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.getContainingDeclarationSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirClass
|
import org.jetbrains.kotlin.fir.declarations.FirClass
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirClassLikeDeclaration
|
import org.jetbrains.kotlin.fir.declarations.FirClassLikeDeclaration
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
||||||
@@ -21,6 +20,7 @@ import org.jetbrains.kotlin.fir.extensions.buildUserTypeFromQualifierParts
|
|||||||
import org.jetbrains.kotlin.fir.extensions.predicateBasedProvider
|
import org.jetbrains.kotlin.fir.extensions.predicateBasedProvider
|
||||||
import org.jetbrains.kotlin.fir.moduleData
|
import org.jetbrains.kotlin.fir.moduleData
|
||||||
import org.jetbrains.kotlin.fir.references.impl.FirSimpleNamedReference
|
import org.jetbrains.kotlin.fir.references.impl.FirSimpleNamedReference
|
||||||
|
import org.jetbrains.kotlin.fir.resolve.getContainingDeclaration
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef
|
import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef
|
||||||
@@ -51,7 +51,7 @@ class SerializationFirSupertypesExtension(session: FirSession) : FirSupertypeGen
|
|||||||
if (isJvmOrMetadata) return false
|
if (isJvmOrMetadata) return false
|
||||||
if (declaration !is FirRegularClass) return false
|
if (declaration !is FirRegularClass) return false
|
||||||
if (!declaration.isCompanion) return false
|
if (!declaration.isCompanion) return false
|
||||||
val parentSymbol = declaration.symbol.getContainingDeclarationSymbol(session) as FirClassSymbol<*>
|
val parentSymbol = declaration.symbol.getContainingDeclaration(session) as FirClassSymbol<*>
|
||||||
return session.predicateBasedProvider.matches(annotatedWithSerializableOrMeta, parentSymbol)
|
return session.predicateBasedProvider.matches(annotatedWithSerializableOrMeta, parentSymbol)
|
||||||
&& parentSymbol.companionNeedsSerializerFactory
|
&& parentSymbol.companionNeedsSerializerFactory
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user