K2: Use ClassId instead of FqName in FIR diagnostics

IJ-CR-118828
KT-MR-13391
This commit is contained in:
Alexey Belkov
2023-12-06 15:27:47 +04:00
committed by Space Team
parent 061734d84b
commit 1766d0e86a
8 changed files with 38 additions and 41 deletions
@@ -976,25 +976,25 @@ sealed interface KtFirDiagnostic<PSI : PsiElement> : KtDiagnosticWithPsi<PSI> {
interface OptInUsage : KtFirDiagnostic<PsiElement> {
override val diagnosticClass get() = OptInUsage::class
val optInMarkerFqName: FqName
val optInMarkerClassId: ClassId
val message: String
}
interface OptInUsageError : KtFirDiagnostic<PsiElement> {
override val diagnosticClass get() = OptInUsageError::class
val optInMarkerFqName: FqName
val optInMarkerClassId: ClassId
val message: String
}
interface OptInOverride : KtFirDiagnostic<PsiElement> {
override val diagnosticClass get() = OptInOverride::class
val optInMarkerFqName: FqName
val optInMarkerClassId: ClassId
val message: String
}
interface OptInOverrideError : KtFirDiagnostic<PsiElement> {
override val diagnosticClass get() = OptInOverrideError::class
val optInMarkerFqName: FqName
val optInMarkerClassId: ClassId
val message: String
}
@@ -1016,7 +1016,7 @@ sealed interface KtFirDiagnostic<PSI : PsiElement> : KtDiagnosticWithPsi<PSI> {
interface OptInArgumentIsNotMarker : KtFirDiagnostic<KtAnnotationEntry> {
override val diagnosticClass get() = OptInArgumentIsNotMarker::class
val notMarkerFqName: FqName
val notMarkerClassId: ClassId
}
interface OptInMarkerWithWrongTarget : KtFirDiagnostic<KtAnnotationEntry> {
@@ -1799,7 +1799,7 @@ sealed interface KtFirDiagnostic<PSI : PsiElement> : KtDiagnosticWithPsi<PSI> {
interface PlatformClassMappedToKotlin : KtFirDiagnostic<PsiElement> {
override val diagnosticClass get() = PlatformClassMappedToKotlin::class
val kotlinClass: FqName
val kotlinClass: ClassId
}
interface InferredTypeVariableIntoEmptyIntersectionError : KtFirDiagnostic<PsiElement> {
@@ -1170,28 +1170,28 @@ internal class WrongJsQualifierImpl(
) : KtAbstractFirDiagnostic<KtElement>(firDiagnostic, token), KtFirDiagnostic.WrongJsQualifier
internal class OptInUsageImpl(
override val optInMarkerFqName: FqName,
override val optInMarkerClassId: ClassId,
override val message: String,
firDiagnostic: KtPsiDiagnostic,
token: KtLifetimeToken,
) : KtAbstractFirDiagnostic<PsiElement>(firDiagnostic, token), KtFirDiagnostic.OptInUsage
internal class OptInUsageErrorImpl(
override val optInMarkerFqName: FqName,
override val optInMarkerClassId: ClassId,
override val message: String,
firDiagnostic: KtPsiDiagnostic,
token: KtLifetimeToken,
) : KtAbstractFirDiagnostic<PsiElement>(firDiagnostic, token), KtFirDiagnostic.OptInUsageError
internal class OptInOverrideImpl(
override val optInMarkerFqName: FqName,
override val optInMarkerClassId: ClassId,
override val message: String,
firDiagnostic: KtPsiDiagnostic,
token: KtLifetimeToken,
) : KtAbstractFirDiagnostic<PsiElement>(firDiagnostic, token), KtFirDiagnostic.OptInOverride
internal class OptInOverrideErrorImpl(
override val optInMarkerFqName: FqName,
override val optInMarkerClassId: ClassId,
override val message: String,
firDiagnostic: KtPsiDiagnostic,
token: KtLifetimeToken,
@@ -1218,7 +1218,7 @@ internal class OptInWithoutArgumentsImpl(
) : KtAbstractFirDiagnostic<KtAnnotationEntry>(firDiagnostic, token), KtFirDiagnostic.OptInWithoutArguments
internal class OptInArgumentIsNotMarkerImpl(
override val notMarkerFqName: FqName,
override val notMarkerClassId: ClassId,
firDiagnostic: KtPsiDiagnostic,
token: KtLifetimeToken,
) : KtAbstractFirDiagnostic<KtAnnotationEntry>(firDiagnostic, token), KtFirDiagnostic.OptInArgumentIsNotMarker
@@ -2161,7 +2161,7 @@ internal class RedundantNullableImpl(
) : KtAbstractFirDiagnostic<KtTypeReference>(firDiagnostic, token), KtFirDiagnostic.RedundantNullable
internal class PlatformClassMappedToKotlinImpl(
override val kotlinClass: FqName,
override val kotlinClass: ClassId,
firDiagnostic: KtPsiDiagnostic,
token: KtLifetimeToken,
) : KtAbstractFirDiagnostic<PsiElement>(firDiagnostic, token), KtFirDiagnostic.PlatformClassMappedToKotlin
@@ -1,5 +1,5 @@
/*
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
@@ -30,7 +30,6 @@ import org.jetbrains.kotlin.lexer.KtModifierKeywordToken
import org.jetbrains.kotlin.metadata.deserialization.VersionRequirement
import org.jetbrains.kotlin.name.CallableId
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.resolve.ForbiddenNamedArgumentsTarget
@@ -402,19 +401,19 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") {
val OPT_IN by object : DiagnosticGroup("OptIn") {
val OPT_IN_USAGE by warning<PsiElement>(PositioningStrategy.REFERENCE_BY_QUALIFIED) {
parameter<FqName>("optInMarkerFqName")
parameter<ClassId>("optInMarkerClassId")
parameter<String>("message")
}
val OPT_IN_USAGE_ERROR by error<PsiElement>(PositioningStrategy.REFERENCE_BY_QUALIFIED) {
parameter<FqName>("optInMarkerFqName")
parameter<ClassId>("optInMarkerClassId")
parameter<String>("message")
}
val OPT_IN_OVERRIDE by warning<PsiElement>(PositioningStrategy.DECLARATION_NAME) {
parameter<FqName>("optInMarkerFqName")
parameter<ClassId>("optInMarkerClassId")
parameter<String>("message")
}
val OPT_IN_OVERRIDE_ERROR by error<PsiElement>(PositioningStrategy.DECLARATION_NAME) {
parameter<FqName>("optInMarkerFqName")
parameter<ClassId>("optInMarkerClassId")
parameter<String>("message")
}
@@ -424,7 +423,7 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") {
val OPT_IN_WITHOUT_ARGUMENTS by warning<KtAnnotationEntry>()
val OPT_IN_ARGUMENT_IS_NOT_MARKER by warning<KtAnnotationEntry> {
parameter<FqName>("notMarkerFqName")
parameter<ClassId>("notMarkerClassId")
}
val OPT_IN_MARKER_WITH_WRONG_TARGET by error<KtAnnotationEntry> {
parameter<String>("target")
@@ -849,7 +848,7 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") {
val REDUNDANT_NULLABLE by warning<KtTypeReference>(PositioningStrategy.REDUNDANT_NULLABLE)
val PLATFORM_CLASS_MAPPED_TO_KOTLIN by warning<PsiElement>(PositioningStrategy.REFERENCED_NAME_BY_QUALIFIED) {
parameter<FqName>("kotlinClass")
parameter<ClassId>("kotlinClass")
}
val INFERRED_TYPE_VARIABLE_INTO_EMPTY_INTERSECTION by deprecationError<PsiElement>(
@@ -69,7 +69,6 @@ import org.jetbrains.kotlin.lexer.KtModifierKeywordToken
import org.jetbrains.kotlin.metadata.deserialization.VersionRequirement.Version
import org.jetbrains.kotlin.name.CallableId
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.KtAnnotationEntry
import org.jetbrains.kotlin.psi.KtAnonymousInitializer
@@ -311,15 +310,15 @@ object FirErrors {
val POTENTIALLY_NON_REPORTED_ANNOTATION: KtDiagnosticFactory0 by warning0<KtAnnotationEntry>()
// OptIn
val OPT_IN_USAGE: KtDiagnosticFactory2<FqName, String> by warning2<PsiElement, FqName, String>(SourceElementPositioningStrategies.REFERENCE_BY_QUALIFIED)
val OPT_IN_USAGE_ERROR: KtDiagnosticFactory2<FqName, String> by error2<PsiElement, FqName, String>(SourceElementPositioningStrategies.REFERENCE_BY_QUALIFIED)
val OPT_IN_OVERRIDE: KtDiagnosticFactory2<FqName, String> by warning2<PsiElement, FqName, String>(SourceElementPositioningStrategies.DECLARATION_NAME)
val OPT_IN_OVERRIDE_ERROR: KtDiagnosticFactory2<FqName, String> by error2<PsiElement, FqName, String>(SourceElementPositioningStrategies.DECLARATION_NAME)
val OPT_IN_USAGE: KtDiagnosticFactory2<ClassId, String> by warning2<PsiElement, ClassId, String>(SourceElementPositioningStrategies.REFERENCE_BY_QUALIFIED)
val OPT_IN_USAGE_ERROR: KtDiagnosticFactory2<ClassId, String> by error2<PsiElement, ClassId, String>(SourceElementPositioningStrategies.REFERENCE_BY_QUALIFIED)
val OPT_IN_OVERRIDE: KtDiagnosticFactory2<ClassId, String> by warning2<PsiElement, ClassId, String>(SourceElementPositioningStrategies.DECLARATION_NAME)
val OPT_IN_OVERRIDE_ERROR: KtDiagnosticFactory2<ClassId, String> by error2<PsiElement, ClassId, String>(SourceElementPositioningStrategies.DECLARATION_NAME)
val OPT_IN_IS_NOT_ENABLED: KtDiagnosticFactory0 by warning0<KtAnnotationEntry>(SourceElementPositioningStrategies.REFERENCED_NAME_BY_QUALIFIED)
val OPT_IN_CAN_ONLY_BE_USED_AS_ANNOTATION: KtDiagnosticFactory0 by error0<PsiElement>()
val OPT_IN_MARKER_CAN_ONLY_BE_USED_AS_ANNOTATION_OR_ARGUMENT_IN_OPT_IN: KtDiagnosticFactory0 by error0<PsiElement>()
val OPT_IN_WITHOUT_ARGUMENTS: KtDiagnosticFactory0 by warning0<KtAnnotationEntry>()
val OPT_IN_ARGUMENT_IS_NOT_MARKER: KtDiagnosticFactory1<FqName> by warning1<KtAnnotationEntry, FqName>()
val OPT_IN_ARGUMENT_IS_NOT_MARKER: KtDiagnosticFactory1<ClassId> by warning1<KtAnnotationEntry, ClassId>()
val OPT_IN_MARKER_WITH_WRONG_TARGET: KtDiagnosticFactory1<String> by error1<KtAnnotationEntry, String>()
val OPT_IN_MARKER_WITH_WRONG_RETENTION: KtDiagnosticFactory0 by error0<KtAnnotationEntry>()
val OPT_IN_MARKER_ON_WRONG_TARGET: KtDiagnosticFactory1<String> by error1<KtAnnotationEntry, String>()
@@ -489,7 +488,7 @@ object FirErrors {
val TYPE_VARIANCE_CONFLICT_IN_EXPANDED_TYPE: KtDiagnosticFactory4<FirTypeParameterSymbol, Variance, Variance, ConeKotlinType> by error4<PsiElement, FirTypeParameterSymbol, Variance, Variance, ConeKotlinType>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE_OR_DEFAULT)
val SMARTCAST_IMPOSSIBLE: KtDiagnosticFactory4<ConeKotlinType, FirExpression, String, Boolean> by error4<KtExpression, ConeKotlinType, FirExpression, String, Boolean>()
val REDUNDANT_NULLABLE: KtDiagnosticFactory0 by warning0<KtTypeReference>(SourceElementPositioningStrategies.REDUNDANT_NULLABLE)
val PLATFORM_CLASS_MAPPED_TO_KOTLIN: KtDiagnosticFactory1<FqName> by warning1<PsiElement, FqName>(SourceElementPositioningStrategies.REFERENCED_NAME_BY_QUALIFIED)
val PLATFORM_CLASS_MAPPED_TO_KOTLIN: KtDiagnosticFactory1<ClassId> by warning1<PsiElement, ClassId>(SourceElementPositioningStrategies.REFERENCED_NAME_BY_QUALIFIED)
val INFERRED_TYPE_VARIABLE_INTO_EMPTY_INTERSECTION: KtDiagnosticFactoryForDeprecation4<String, Collection<ConeKotlinType>, String, String> by deprecationError4<PsiElement, String, Collection<ConeKotlinType>, String, String>(ForbidInferringTypeVariablesIntoEmptyIntersection)
val INFERRED_TYPE_VARIABLE_INTO_POSSIBLE_EMPTY_INTERSECTION: KtDiagnosticFactory4<String, Collection<ConeKotlinType>, String, String> by warning4<PsiElement, String, Collection<ConeKotlinType>, String, String>()
val INCORRECT_LEFT_COMPONENT_OF_INTERSECTION: KtDiagnosticFactory0 by error0<KtTypeReference>()
@@ -1,5 +1,5 @@
/*
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
@@ -10,13 +10,13 @@ import org.jetbrains.kotlin.config.AnalysisFlags
import org.jetbrains.kotlin.config.LanguageFeature
import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
import org.jetbrains.kotlin.fir.analysis.checkers.extractClassesFromArgument
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
import org.jetbrains.kotlin.diagnostics.reportOn
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
import org.jetbrains.kotlin.fir.analysis.checkers.extractClassFromArgument
import org.jetbrains.kotlin.fir.analysis.checkers.extractClassesFromArgument
import org.jetbrains.kotlin.fir.analysis.checkers.modality
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
import org.jetbrains.kotlin.fir.declarations.FirClass
import org.jetbrains.kotlin.fir.declarations.findArgumentByName
import org.jetbrains.kotlin.fir.declarations.utils.isFun
@@ -102,7 +102,7 @@ object FirOptInAnnotationCallChecker : FirAnnotationCallChecker() {
reporter.reportOn(
source,
FirErrors.OPT_IN_ARGUMENT_IS_NOT_MARKER,
classSymbol.classId.asSingleFqName(),
classSymbol.classId,
context
)
}
@@ -1,5 +1,5 @@
/*
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
@@ -303,10 +303,9 @@ object FirOptInUsageBaseChecker {
Experimentality.Severity.WARNING -> FirErrors.OPT_IN_USAGE to "should"
Experimentality.Severity.ERROR -> FirErrors.OPT_IN_USAGE_ERROR to "must"
}
val fqName = annotationClassId.asSingleFqName()
val reportedMessage = message?.takeIf { it.isNotBlank() }
?: OptInNames.buildDefaultDiagnosticMessage(OptInNames.buildMessagePrefix(verb), fqName.asString())
reporter.reportOn(source, diagnostic, fqName, reportedMessage, context)
?: OptInNames.buildDefaultDiagnosticMessage(OptInNames.buildMessagePrefix(verb), annotationClassId.asFqNameString())
reporter.reportOn(source, diagnostic, annotationClassId, reportedMessage, context)
}
}
}
@@ -332,7 +331,7 @@ object FirOptInUsageBaseChecker {
verb,
markerName = annotationClassId.asFqNameString()
)
reporter.reportOn(symbol.source, diagnostic, annotationClassId.asSingleFqName(), message, context)
reporter.reportOn(symbol.source, diagnostic, annotationClassId, message, context)
}
}
}
@@ -1,5 +1,5 @@
/*
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
@@ -27,7 +27,7 @@ object PlatformClassMappedToKotlinImportsChecker : FirFileChecker() {
val kotlinClass = context.session.platformClassMapper.getCorrespondingKotlinClass(classId)
if (kotlinClass != null) {
reporter.reportOn(import.source, FirErrors.PLATFORM_CLASS_MAPPED_TO_KOTLIN, importedFqName, context)
reporter.reportOn(import.source, FirErrors.PLATFORM_CLASS_MAPPED_TO_KOTLIN, classId, context)
}
}
}
@@ -1,5 +1,5 @@
/*
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
@@ -20,7 +20,7 @@ object PlatformClassMappedToKotlinTypeRefChecker : FirTypeRefChecker() {
if (typeRef is FirResolvedTypeRef && typeRef.source != null) {
val kotlinClass = context.session.platformClassMapper.getCorrespondingKotlinClass(typeRef.type.classId)
if (kotlinClass != null) {
reporter.reportOn(typeRef.source, FirErrors.PLATFORM_CLASS_MAPPED_TO_KOTLIN, kotlinClass.asSingleFqName(), context)
reporter.reportOn(typeRef.source, FirErrors.PLATFORM_CLASS_MAPPED_TO_KOTLIN, kotlinClass, context)
}
}
}