[FIR] Remove FirAnnotation.classId from FirParcelize
The same reasoning as with the serialization. If we decide to support it, we wouldn't need to think about unexpanded types.
This commit is contained in:
committed by
Space Team
parent
647cdb1c9a
commit
cf73d59e29
+2
-2
@@ -13,9 +13,9 @@ import org.jetbrains.kotlin.fir.analysis.checkers.expression.FirAnnotationCallCh
|
|||||||
import org.jetbrains.kotlin.fir.analysis.checkers.findClosestClassOrObject
|
import org.jetbrains.kotlin.fir.analysis.checkers.findClosestClassOrObject
|
||||||
import org.jetbrains.kotlin.fir.correspondingProperty
|
import org.jetbrains.kotlin.fir.correspondingProperty
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.toAnnotationClassId
|
||||||
import org.jetbrains.kotlin.fir.declarations.utils.fromPrimaryConstructor
|
import org.jetbrains.kotlin.fir.declarations.utils.fromPrimaryConstructor
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||||
import org.jetbrains.kotlin.fir.expressions.classId
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
|
import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
|
||||||
import org.jetbrains.kotlin.fir.resolve.toFirRegularClassSymbol
|
import org.jetbrains.kotlin.fir.resolve.toFirRegularClassSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl
|
import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl
|
||||||
@@ -76,7 +76,7 @@ object FirParcelizeAnnotationChecker : FirAnnotationCallChecker() {
|
|||||||
val annotationContainer = context.annotationContainers.lastOrNull()
|
val annotationContainer = context.annotationContainers.lastOrNull()
|
||||||
val duplicatingAnnotationCount = annotationContainer
|
val duplicatingAnnotationCount = annotationContainer
|
||||||
?.annotations
|
?.annotations
|
||||||
?.filter { it.classId in TYPE_PARCELER_CLASS_IDS }
|
?.filter { it.toAnnotationClassId(context.session) in TYPE_PARCELER_CLASS_IDS }
|
||||||
?.mapNotNull { it.typeArguments.takeIf { it.size == 2 }?.first()?.toConeTypeProjection()?.type }
|
?.mapNotNull { it.typeArguments.takeIf { it.size == 2 }?.first()?.toConeTypeProjection()?.type }
|
||||||
?.count { it == thisMappedType }
|
?.count { it == thisMappedType }
|
||||||
|
|
||||||
|
|||||||
+5
-9
@@ -12,12 +12,8 @@ import org.jetbrains.kotlin.diagnostics.reportOn
|
|||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
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.FirClassChecker
|
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.FirClassChecker
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirClass
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.constructors
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.delegateFieldsMap
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.utils.*
|
import org.jetbrains.kotlin.fir.declarations.utils.*
|
||||||
import org.jetbrains.kotlin.fir.expressions.classId
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
|
import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
|
||||||
import org.jetbrains.kotlin.fir.resolve.lookupSuperTypes
|
import org.jetbrains.kotlin.fir.resolve.lookupSuperTypes
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl
|
import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl
|
||||||
@@ -124,10 +120,10 @@ fun FirClassSymbol<*>?.isParcelize(session: FirSession): Boolean {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (this == null) return false
|
if (this == null) return false
|
||||||
if (this.annotations.any { it.classId in PARCELIZE_CLASS_CLASS_IDS }) return true
|
if (this.annotations.any { it.toAnnotationClassId(session) in PARCELIZE_CLASS_CLASS_IDS }) return true
|
||||||
return resolvedSuperTypeRefs.any {
|
return resolvedSuperTypeRefs.any { superTypeRef ->
|
||||||
val symbol = it.type.fullyExpandedType(session).toRegularClassSymbol(session) ?: return@any false
|
val symbol = superTypeRef.type.fullyExpandedType(session).toRegularClassSymbol(session) ?: return@any false
|
||||||
symbol.annotations.any { it.classId in PARCELIZE_CLASS_CLASS_IDS }
|
symbol.annotations.any { it.toAnnotationClassId(session) in PARCELIZE_CLASS_CLASS_IDS }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -13,7 +13,7 @@ import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
|||||||
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.FirConstructorChecker
|
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.FirConstructorChecker
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirConstructor
|
import org.jetbrains.kotlin.fir.declarations.FirConstructor
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
||||||
import org.jetbrains.kotlin.fir.expressions.classId
|
import org.jetbrains.kotlin.fir.declarations.toAnnotationClassId
|
||||||
import org.jetbrains.kotlin.parcelize.ParcelizeNames
|
import org.jetbrains.kotlin.parcelize.ParcelizeNames
|
||||||
|
|
||||||
object FirParcelizeConstructorChecker : FirConstructorChecker() {
|
object FirParcelizeConstructorChecker : FirConstructorChecker() {
|
||||||
@@ -38,7 +38,7 @@ object FirParcelizeConstructorChecker : FirConstructorChecker() {
|
|||||||
}
|
}
|
||||||
if (valueParameter.defaultValue == null) {
|
if (valueParameter.defaultValue == null) {
|
||||||
val illegalAnnotation = valueParameter.annotations.firstOrNull {
|
val illegalAnnotation = valueParameter.annotations.firstOrNull {
|
||||||
it.classId in ParcelizeNames.IGNORED_ON_PARCEL_CLASS_IDS
|
it.toAnnotationClassId(context.session) in ParcelizeNames.IGNORED_ON_PARCEL_CLASS_IDS
|
||||||
}
|
}
|
||||||
if (illegalAnnotation != null) {
|
if (illegalAnnotation != null) {
|
||||||
reporter.reportOn(
|
reporter.reportOn(
|
||||||
|
|||||||
Reference in New Issue
Block a user