[FIR][FE 1.0] KT-47933: Warn about redundant @Repeatable

Merge-request: KT-MR-7318
Merged-by: Nikolay Lunyak <Nikolay.Lunyak@jetbrains.com>
This commit is contained in:
Nikolay Lunyak
2022-10-07 13:33:49 +00:00
committed by Space Team
parent 6117cdc0c3
commit b6f950ed75
26 changed files with 220 additions and 12 deletions
@@ -6,7 +6,7 @@
package org.jetbrains.kotlin.analysis.api.fir
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplication
import org.jetbrains.kotlin.analysis.api.fir.annotations.fullyExpandedClassId
import org.jetbrains.kotlin.fir.declarations.fullyExpandedClassId
import org.jetbrains.kotlin.analysis.api.fir.annotations.mapAnnotationParameters
import org.jetbrains.kotlin.analysis.api.fir.evaluate.FirAnnotationValueConverter
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol
@@ -12,6 +12,7 @@ import org.jetbrains.kotlin.analysis.api.impl.base.annotations.KtEmptyAnnotation
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.fullyExpandedClassId
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.name.ClassId
@@ -12,6 +12,7 @@ import org.jetbrains.kotlin.analysis.api.impl.base.annotations.KtEmptyAnnotation
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.fullyExpandedClassId
import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.fir.types.customAnnotations
import org.jetbrains.kotlin.name.ClassId
@@ -90,6 +90,3 @@ internal fun mapAnnotationParameters(annotation: FirAnnotation, session: FirSess
return resultMap
}
internal fun FirAnnotation.fullyExpandedClassId(useSiteSession: FirSession): ClassId? =
coneClassLikeType?.fullyExpandedType(useSiteSession)?.classId
@@ -4178,6 +4178,14 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
token,
)
}
add(FirJvmErrors.REDUNDANT_REPEATABLE_ANNOTATION) { firDiagnostic ->
RedundantRepeatableAnnotationImpl(
firDiagnostic.a,
firDiagnostic.b,
firDiagnostic as KtPsiDiagnostic,
token,
)
}
add(FirJvmErrors.LOCAL_JVM_RECORD) { firDiagnostic ->
LocalJvmRecordImpl(
firDiagnostic as KtPsiDiagnostic,
@@ -2908,6 +2908,12 @@ sealed class KtFirDiagnostic<PSI : PsiElement> : KtDiagnosticWithPsi<PSI> {
override val diagnosticClass get() = PositionedValueArgumentForJavaAnnotation::class
}
abstract class RedundantRepeatableAnnotation : KtFirDiagnostic<KtAnnotationEntry>() {
override val diagnosticClass get() = RedundantRepeatableAnnotation::class
abstract val kotlinRepeatable: FqName
abstract val javaRepeatable: FqName
}
abstract class LocalJvmRecord : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = LocalJvmRecord::class
}
@@ -3514,6 +3514,13 @@ internal class PositionedValueArgumentForJavaAnnotationImpl(
override val token: KtLifetimeToken,
) : KtFirDiagnostic.PositionedValueArgumentForJavaAnnotation(), KtAbstractFirDiagnostic<KtExpression>
internal class RedundantRepeatableAnnotationImpl(
override val kotlinRepeatable: FqName,
override val javaRepeatable: FqName,
override val firDiagnostic: KtPsiDiagnostic,
override val token: KtLifetimeToken,
) : KtFirDiagnostic.RedundantRepeatableAnnotation(), KtAbstractFirDiagnostic<KtAnnotationEntry>
internal class LocalJvmRecordImpl(
override val firDiagnostic: KtPsiDiagnostic,
override val token: KtLifetimeToken,
@@ -34866,6 +34866,12 @@ public class DiagnosisCompilerTestFE10TestdataTestGenerated extends AbstractDiag
runTest("compiler/testData/diagnostics/testsWithStdLib/annotations/JvmSyntheticOnDelegate.kt");
}
@Test
@TestMetadata("multipleRepeatables.kt")
public void testMultipleRepeatables() throws Exception {
runTest("compiler/testData/diagnostics/testsWithStdLib/annotations/multipleRepeatables.kt");
}
@Test
@TestMetadata("qualifiedCallValue.kt")
public void testQualifiedCallValue() throws Exception {