diff --git a/plugins/kotlinx-serialization/kotlinx-serialization.k2/src/org/jetbrains/kotlinx/serialization/compiler/fir/SerializationFirResolveExtension.kt b/plugins/kotlinx-serialization/kotlinx-serialization.k2/src/org/jetbrains/kotlinx/serialization/compiler/fir/SerializationFirResolveExtension.kt index becfac73a09..8afc3d91dc1 100644 --- a/plugins/kotlinx-serialization/kotlinx-serialization.k2/src/org/jetbrains/kotlinx/serialization/compiler/fir/SerializationFirResolveExtension.kt +++ b/plugins/kotlinx-serialization/kotlinx-serialization.k2/src/org/jetbrains/kotlinx/serialization/compiler/fir/SerializationFirResolveExtension.kt @@ -309,7 +309,6 @@ class SerializationFirResolveExtension(session: FirSession) : FirDeclarationGene get() = session.predicateBasedProvider.matches(FirSerializationPredicates.serializerFor, this) context(FirSession) - @Suppress("IncorrectFormatting") // KTIJ-22227 private val FirClassSymbol<*>.companionNeedsSerializerFactory: Boolean get() { if (!(moduleData.platform.isNative() || moduleData.platform.isJs())) return false diff --git a/plugins/kotlinx-serialization/kotlinx-serialization.k2/src/org/jetbrains/kotlinx/serialization/compiler/fir/SerializationFirSupertypesExtension.kt b/plugins/kotlinx-serialization/kotlinx-serialization.k2/src/org/jetbrains/kotlinx/serialization/compiler/fir/SerializationFirSupertypesExtension.kt index a5a5c3a0508..7cf44061081 100644 --- a/plugins/kotlinx-serialization/kotlinx-serialization.k2/src/org/jetbrains/kotlinx/serialization/compiler/fir/SerializationFirSupertypesExtension.kt +++ b/plugins/kotlinx-serialization/kotlinx-serialization.k2/src/org/jetbrains/kotlinx/serialization/compiler/fir/SerializationFirSupertypesExtension.kt @@ -36,7 +36,6 @@ class SerializationFirSupertypesExtension(session: FirSession) : FirSupertypeGen } context(TypeResolveServiceContainer) - @Suppress("IncorrectFormatting") // KTIJ-22227 override fun computeAdditionalSupertypes( classLikeDeclaration: FirClassLikeDeclaration, resolvedSupertypes: List @@ -59,7 +58,6 @@ class SerializationFirSupertypesExtension(session: FirSession) : FirSupertypeGen // Function helps to resolve class call from annotation argument to `ConeKotlinType` context(TypeResolveServiceContainer) - @Suppress("IncorrectFormatting") // KTIJ-22227 private fun resolveConeTypeFromArgument(getClassCall: FirGetClassCall): ConeKotlinType { val typeToResolve = buildUserTypeFromQualifierParts(isMarkedNullable = false) { fun visitQualifiers(expression: FirExpression) { diff --git a/plugins/kotlinx-serialization/kotlinx-serialization.k2/src/org/jetbrains/kotlinx/serialization/compiler/fir/SerializationFirUtils.kt b/plugins/kotlinx-serialization/kotlinx-serialization.k2/src/org/jetbrains/kotlinx/serialization/compiler/fir/SerializationFirUtils.kt index 2d6af1d79c1..21d5635ddab 100644 --- a/plugins/kotlinx-serialization/kotlinx-serialization.k2/src/org/jetbrains/kotlinx/serialization/compiler/fir/SerializationFirUtils.kt +++ b/plugins/kotlinx-serialization/kotlinx-serialization.k2/src/org/jetbrains/kotlinx/serialization/compiler/fir/SerializationFirUtils.kt @@ -8,29 +8,21 @@ package org.jetbrains.kotlinx.serialization.compiler.fir import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.fir.FirAnnotationContainer import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder import org.jetbrains.kotlin.fir.declarations.* -import org.jetbrains.kotlin.fir.declarations.utils.* import org.jetbrains.kotlin.fir.expressions.* -import org.jetbrains.kotlin.fir.expressions.FirAnnotation -import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall -import org.jetbrains.kotlin.fir.expressions.arguments -import org.jetbrains.kotlin.fir.resolve.createSubstitutionForSupertype import org.jetbrains.kotlin.fir.expressions.builder.buildAnnotationCall import org.jetbrains.kotlin.fir.extensions.FirExtension import org.jetbrains.kotlin.fir.extensions.predicateBasedProvider import org.jetbrains.kotlin.fir.moduleData import org.jetbrains.kotlin.fir.references.builder.buildResolvedNamedReference +import org.jetbrains.kotlin.fir.resolve.createSubstitutionForSupertype import org.jetbrains.kotlin.fir.resolve.defaultType import org.jetbrains.kotlin.fir.resolve.fullyExpandedType -import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider +import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider import org.jetbrains.kotlin.fir.resolve.substitution.ChainedSubstitutor import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol -import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider -import org.jetbrains.kotlin.fir.scopes.platformSpecificOverridabilityRules -import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirConstructorSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol import org.jetbrains.kotlin.fir.types.* @@ -79,7 +71,6 @@ fun FirBasedSymbol<*>.getSerialTransientAnnotation(session: FirSession): FirAnno getAnnotationByClassId(SerializationAnnotations.serialTransientClassId, session) context(FirSession) -@Suppress("IncorrectFormatting") // KTIJ-22227 val FirClassSymbol<*>.hasSerializableAnnotation: Boolean get() = serializableAnnotation(needArguments = false, this@FirSession) != null @@ -128,17 +119,14 @@ internal fun FirClassLikeDeclaration.getSerializerFor(session: FirSession): FirG ?.getGetKClassArgument(AnnotationParameterNames.FOR_CLASS) context(FirSession) -@Suppress("IncorrectFormatting") // KTIJ-22227 internal val FirClassSymbol<*>.isInternallySerializableObject: Boolean get() = classKind.isObject && hasSerializableOrMetaAnnotationWithoutArgs context(FirSession) -@Suppress("IncorrectFormatting") // KTIJ-22227 internal val FirClassSymbol<*>.isSerializableObject: Boolean get() = classKind.isObject && hasSerializableOrMetaAnnotation context(FirSession) -@Suppress("IncorrectFormatting") // KTIJ-22227 internal val FirClassSymbol<*>.isSealedSerializableInterface: Boolean get() = classKind.isInterface && rawStatus.modality == Modality.SEALED && hasSerializableOrMetaAnnotation @@ -151,7 +139,6 @@ val FirClassSymbol<*>.hasMetaSerializableAnnotation: Boolean get() = predicateBasedProvider.matches(FirSerializationPredicates.hasMetaAnnotation, this) context(FirSession) -@Suppress("IncorrectFormatting") // KTIJ-22227 internal val FirClassSymbol<*>.shouldHaveGeneratedMethodsInCompanion: Boolean get() = isSerializableObject || isSerializableEnum @@ -159,7 +146,6 @@ internal val FirClassSymbol<*>.shouldHaveGeneratedMethodsInCompanion: Boolean || isSealedSerializableInterface context(FirSession) -@Suppress("IncorrectFormatting") // KTIJ-22227 internal val FirClassSymbol<*>.isInternalSerializable: Boolean get() { if (!classKind.isClass) return false @@ -172,7 +158,6 @@ val FirClassSymbol<*>.hasSerializableOrMetaAnnotationWithoutArgs: Boolean (!hasSerializableAnnotation && hasMetaSerializableAnnotation) context(FirSession) -@Suppress("IncorrectFormatting") // KTIJ-22227 internal val FirClassSymbol<*>.isAbstractOrSealedSerializableClass: Boolean get() = isInternalSerializable && (rawStatus.modality == Modality.ABSTRACT || rawStatus.modality == Modality.SEALED) @@ -180,7 +165,6 @@ internal val FirClassSymbol<*>.isAbstractOrSealedSerializableClass: Boolean * Check that class is enum and marked by `Serializable` or meta-serializable annotation. */ context(FirSession) -@Suppress("IncorrectFormatting") // KTIJ-22227 internal val FirClassSymbol<*>.isSerializableEnum: Boolean get() = classKind.isEnumClass && hasSerializableOrMetaAnnotation diff --git a/plugins/kotlinx-serialization/kotlinx-serialization.k2/src/org/jetbrains/kotlinx/serialization/compiler/fir/checkers/FirSerializationPluginClassChecker.kt b/plugins/kotlinx-serialization/kotlinx-serialization.k2/src/org/jetbrains/kotlinx/serialization/compiler/fir/checkers/FirSerializationPluginClassChecker.kt index 3a0c375d82e..6acdd139c6d 100644 --- a/plugins/kotlinx-serialization/kotlinx-serialization.k2/src/org/jetbrains/kotlinx/serialization/compiler/fir/checkers/FirSerializationPluginClassChecker.kt +++ b/plugins/kotlinx-serialization/kotlinx-serialization.k2/src/org/jetbrains/kotlinx/serialization/compiler/fir/checkers/FirSerializationPluginClassChecker.kt @@ -8,7 +8,9 @@ package org.jetbrains.kotlinx.serialization.compiler.fir.checkers import org.jetbrains.kotlin.KtSourceElement import org.jetbrains.kotlin.config.KotlinCompilerVersion import org.jetbrains.kotlin.descriptors.ClassKind -import org.jetbrains.kotlin.diagnostics.* +import org.jetbrains.kotlin.diagnostics.DiagnosticReporter +import org.jetbrains.kotlin.diagnostics.SourceElementPositioningStrategies +import org.jetbrains.kotlin.diagnostics.reportOn import org.jetbrains.kotlin.fir.analysis.checkers.containsRepeatableAnnotation import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext import org.jetbrains.kotlin.fir.analysis.checkers.declaration.FirClassChecker @@ -22,13 +24,13 @@ import org.jetbrains.kotlin.fir.resolve.defaultType import org.jetbrains.kotlin.fir.resolve.fullyExpandedType import org.jetbrains.kotlin.fir.symbols.impl.* import org.jetbrains.kotlin.fir.types.* -import org.jetbrains.kotlin.name.* +import org.jetbrains.kotlin.name.ClassId +import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.resolve.jvm.annotations.TRANSIENT_ANNOTATION_CLASS_ID import org.jetbrains.kotlin.types.AbstractTypeChecker import org.jetbrains.kotlinx.serialization.compiler.diagnostic.RuntimeVersions import org.jetbrains.kotlinx.serialization.compiler.fir.* import org.jetbrains.kotlinx.serialization.compiler.fir.checkers.FirSerializationErrors.EXTERNAL_SERIALIZER_USELESS -import org.jetbrains.kotlinx.serialization.compiler.fir.getSerializerForClass import org.jetbrains.kotlinx.serialization.compiler.fir.services.dependencySerializationInfoProvider import org.jetbrains.kotlinx.serialization.compiler.fir.services.findTypeSerializerOrContextUnchecked import org.jetbrains.kotlinx.serialization.compiler.fir.services.serializablePropertiesProvider @@ -84,7 +86,6 @@ object FirSerializationPluginClassChecker : FirClassChecker() { } context(CheckerContext) - @Suppress("IncorrectFormatting") // KTIJ-22227 private fun checkExternalSerializer(classSymbol: FirClassSymbol<*>, reporter: DiagnosticReporter) { val serializableKType = classSymbol.getSerializerForClass(session) ?: return val serializableClassSymbol = serializableKType.toRegularClassSymbol(session) ?: return @@ -128,7 +129,6 @@ object FirSerializationPluginClassChecker : FirClassChecker() { } context(CheckerContext) - @Suppress("IncorrectFormatting") // KTIJ-22227 private fun checkInheritedAnnotations(classSymbol: FirClassSymbol<*>, reporter: DiagnosticReporter) { fun annotationsFilter(annotations: List): List> { return annotations @@ -158,7 +158,6 @@ object FirSerializationPluginClassChecker : FirClassChecker() { } context(CheckerContext) - @Suppress("IncorrectFormatting") // KTIJ-22227 private fun FirAnnotation.hasSameArguments(other: FirAnnotation): Boolean { val m1 = argumentMapping.mapping val m2 = other.argumentMapping.mapping @@ -171,7 +170,6 @@ object FirSerializationPluginClassChecker : FirClassChecker() { } context(CheckerContext) - @Suppress("IncorrectFormatting") // KTIJ-22227 private fun FirExpression.isEqualTo(other: FirExpression): Boolean { return when { this is FirConstExpression<*> && other is FirConstExpression<*> -> kind == other.kind && value == other.value @@ -202,7 +200,6 @@ object FirSerializationPluginClassChecker : FirClassChecker() { } context(CheckerContext) - @Suppress("IncorrectFormatting") // KTIJ-22227 private fun checkVersions(classSymbol: FirClassSymbol<*>, reporter: DiagnosticReporter) { val currentVersions = session.versionReader.runtimeVersions ?: return if (!currentVersions.implementationVersionMatchSupported()) { @@ -226,7 +223,6 @@ object FirSerializationPluginClassChecker : FirClassChecker() { } context(CheckerContext) - @Suppress("IncorrectFormatting") // KTIJ-22227 private fun checkCorrectTransientAnnotationIsUsed( classSymbol: FirClassSymbol<*>, properties: List, @@ -246,7 +242,6 @@ object FirSerializationPluginClassChecker : FirClassChecker() { } context(CheckerContext) - @Suppress("IncorrectFormatting") // KTIJ-22227 private fun canBeSerializedInternally(classSymbol: FirClassSymbol<*>, reporter: DiagnosticReporter): Boolean { // if enum has meta or SerialInfo annotation on a class or entries and used plugin-generated serializer if (session.dependencySerializationInfoProvider.useGeneratedEnumSerializer && classSymbol.isSerializableEnumWithMissingSerializer) { @@ -363,7 +358,6 @@ object FirSerializationPluginClassChecker : FirClassChecker() { context(CheckerContext) - @Suppress("IncorrectFormatting") // KTIJ-22227 private fun checkClassWithCustomSerializer(classSymbol: FirClassSymbol<*>, reporter: DiagnosticReporter) { val serializerType = classSymbol.getSerializableWith(session)?.fullyExpandedType(session) ?: return checkCustomSerializerMatch(classSymbol, source = null, classSymbol.defaultType(), serializerType, reporter) @@ -371,7 +365,6 @@ object FirSerializationPluginClassChecker : FirClassChecker() { } context(CheckerContext) - @Suppress("IncorrectFormatting") // KTIJ-22227 private val FirClassSymbol<*>.isAnonymousObjectOrInsideIt: Boolean get() { if (this is FirAnonymousObjectSymbol) return true @@ -379,7 +372,6 @@ object FirSerializationPluginClassChecker : FirClassChecker() { } context(CheckerContext) - @Suppress("IncorrectFormatting") // KTIJ-22227 private fun checkEnum(classSymbol: FirClassSymbol<*>, reporter: DiagnosticReporter) { if (!classSymbol.isEnumClass) return val entryBySerialName = mutableMapOf() @@ -403,7 +395,6 @@ object FirSerializationPluginClassChecker : FirClassChecker() { context(CheckerContext) - @Suppress("IncorrectFormatting") // KTIJ-22227 private fun buildSerializableProperties(classSymbol: FirClassSymbol<*>, reporter: DiagnosticReporter): FirSerializableProperties? { with(session) { if (!classSymbol.hasSerializableOrMetaAnnotation) return null @@ -431,7 +422,6 @@ object FirSerializationPluginClassChecker : FirClassChecker() { } context(CheckerContext) - @Suppress("IncorrectFormatting") // KTIJ-22227 private fun checkTransients(classSymbol: FirClassSymbol<*>, reporter: DiagnosticReporter) { for (propertySymbol in classSymbol.declarationSymbols.filterIsInstance()) { val isInitialized = propertySymbol.isLateInit || declarationHasInitializer(propertySymbol) @@ -455,7 +445,6 @@ object FirSerializationPluginClassChecker : FirClassChecker() { } context(CheckerContext) - @Suppress("IncorrectFormatting") // KTIJ-22227 private fun analyzePropertiesSerializers( classSymbol: FirClassSymbol<*>, properties: List, @@ -506,7 +495,6 @@ object FirSerializationPluginClassChecker : FirClassChecker() { } context(CheckerContext) - @Suppress("IncorrectFormatting") // KTIJ-22227 private fun checkTypeArguments(type: ConeKotlinType, source: KtSourceElement?, reporter: DiagnosticReporter) { for (typeArgument in type.typeArguments) { checkType( @@ -518,18 +506,15 @@ object FirSerializationPluginClassChecker : FirClassChecker() { } context(CheckerContext) - @Suppress("IncorrectFormatting") // KTIJ-22227 private fun canSupportInlineClasses(): Boolean { return session.versionReader.canSupportInlineClasses } context(CheckerContext) - @Suppress("IncorrectFormatting") // KTIJ-22227 private val ConeKotlinType.isUnsupportedInlineType: Boolean get() = isSingleFieldValueClass(session) && !isPrimitiveOrNullablePrimitive context(CheckerContext) - @Suppress("IncorrectFormatting") // KTIJ-22227 private fun checkType(type: ConeKotlinType, source: KtSourceElement?, reporter: DiagnosticReporter) { if (type.lowerBoundIfFlexible().isTypeParameter) return // type parameters always have serializer stored in class' field if (type.isUnsupportedInlineType && !canSupportInlineClasses()) { @@ -559,7 +544,6 @@ object FirSerializationPluginClassChecker : FirClassChecker() { } context(CheckerContext) - @Suppress("IncorrectFormatting") // KTIJ-22227 private fun checkCustomSerializerMatch( containingClassSymbol: FirClassSymbol<*>, source: KtSourceElement?, @@ -583,7 +567,6 @@ object FirSerializationPluginClassChecker : FirClassChecker() { } context(CheckerContext) - @Suppress("IncorrectFormatting") // KTIJ-22227 private fun checkCustomSerializerIsNotLocal( source: KtSourceElement?, classSymbol: FirClassSymbol<*>, @@ -601,7 +584,6 @@ object FirSerializationPluginClassChecker : FirClassChecker() { } context(CheckerContext) - @Suppress("IncorrectFormatting") // KTIJ-22227 private fun checkSerializerNullability( classType: ConeKotlinType, serializerType: ConeKotlinType, diff --git a/plugins/kotlinx-serialization/kotlinx-serialization.k2/src/org/jetbrains/kotlinx/serialization/compiler/fir/checkers/SerializationFirCheckerUtils.kt b/plugins/kotlinx-serialization/kotlinx-serialization.k2/src/org/jetbrains/kotlinx/serialization/compiler/fir/checkers/SerializationFirCheckerUtils.kt index 11cae278c1e..05328e08d32 100644 --- a/plugins/kotlinx-serialization/kotlinx-serialization.k2/src/org/jetbrains/kotlinx/serialization/compiler/fir/checkers/SerializationFirCheckerUtils.kt +++ b/plugins/kotlinx-serialization/kotlinx-serialization.k2/src/org/jetbrains/kotlinx/serialization/compiler/fir/checkers/SerializationFirCheckerUtils.kt @@ -32,7 +32,6 @@ import org.jetbrains.kotlin.fir.types.toRegularClassSymbol import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.StandardClassIds import org.jetbrains.kotlinx.serialization.compiler.fir.* -import org.jetbrains.kotlinx.serialization.compiler.fir.getSerializableWith import org.jetbrains.kotlinx.serialization.compiler.fir.services.dependencySerializationInfoProvider import org.jetbrains.kotlinx.serialization.compiler.resolve.SerialEntityNames import org.jetbrains.kotlinx.serialization.compiler.resolve.SerializationAnnotations @@ -41,7 +40,6 @@ import org.jetbrains.kotlinx.serialization.compiler.resolve.SpecialBuiltins // ---------------------- search utils ---------------------- context(CheckerContext) -@Suppress("IncorrectFormatting") // KTIJ-22227 internal val FirClassSymbol<*>?.classSerializer: FirClassSymbol<*>? get() { if (this == null) return null @@ -61,7 +59,6 @@ internal val FirClassSymbol<*>?.classSerializer: FirClassSymbol<*>? } context(CheckerContext) -@Suppress("IncorrectFormatting") // KTIJ-22227 val FirClassSymbol<*>.polymorphicSerializerIfApplicableAutomatically: FirClassSymbol<*>? get() { val serializerName = when { @@ -84,27 +81,23 @@ val FirClassSymbol<*>.polymorphicSerializerIfApplicableAutomatically: FirClassSy // ---------------------- annotation utils ---------------------- context(CheckerContext) -@Suppress("IncorrectFormatting") // KTIJ-22227 internal val FirAnnotation.annotationClassSymbol: FirRegularClassSymbol? get() = annotationTypeRef.coneType .fullyExpandedType(session) .toRegularClassSymbol(session) context(CheckerContext) -@Suppress("IncorrectFormatting") // KTIJ-22227 internal val FirAnnotation.isMetaSerializableAnnotation: Boolean get() = annotationClassSymbol?.hasAnnotation(SerializationAnnotations.metaSerializableAnnotationClassId, session) ?: false context(CheckerContext) -@Suppress("IncorrectFormatting") // KTIJ-22227 internal fun FirClassSymbol<*>.metaSerializableAnnotation(needArguments: Boolean): FirAnnotation? { val annotations = if (needArguments) resolvedAnnotationsWithClassIds else resolvedAnnotationsWithArguments return annotations.firstOrNull { it.isMetaSerializableAnnotation } } context(CheckerContext) -@Suppress("IncorrectFormatting") // KTIJ-22227 internal val FirClassSymbol<*>.serializableOrMetaAnnotationSource: KtSourceElement? get() { serializableAnnotation(needArguments = false, session)?.source?.let { return it } @@ -113,7 +106,6 @@ internal val FirClassSymbol<*>.serializableOrMetaAnnotationSource: KtSourceEleme } context(CheckerContext) -@Suppress("IncorrectFormatting") // KTIJ-22227 internal val FirBasedSymbol<*>.hasAnySerialAnnotation: Boolean get() = getSerialNameValue(session) != null || resolvedAnnotationsWithClassIds.any { with(session) { it.annotationClassSymbol?.isSerialInfoAnnotation == true } @@ -134,7 +126,6 @@ fun FirClassSymbol<*>.getSuperClassOrAny(session: FirSession): FirRegularClassSy } context(CheckerContext) -@Suppress("IncorrectFormatting") // KTIJ-22227 internal val FirClassSymbol<*>.isSerializableEnumWithMissingSerializer: Boolean get() { if (!isEnumClass) return false @@ -144,7 +135,6 @@ internal val FirClassSymbol<*>.isSerializableEnumWithMissingSerializer: Boolean } context(FirSession) -@Suppress("IncorrectFormatting") // KTIJ-22227 internal val FirClassSymbol<*>.serializableAnnotationIsUseless: Boolean get() = !classKind.isEnumClass && hasSerializableOrMetaAnnotationWithoutArgs && @@ -155,13 +145,11 @@ internal val FirClassSymbol<*>.serializableAnnotationIsUseless: Boolean // ---------------------- type utils ---------------------- context(CheckerContext) -@Suppress("IncorrectFormatting") // KTIJ-22227 internal val ConeKotlinType.serializableWith: ConeKotlinType? get() = customAnnotations.getSerializableWith(session) ?: toRegularClassSymbol(session)?.getSerializableWith(session) context(CheckerContext) -@Suppress("IncorrectFormatting") // KTIJ-22227 internal val ConeKotlinType.overriddenSerializer: ConeKotlinType? get() = toRegularClassSymbol(session)?.getSerializableWith(session)