FIR: report ANNOTATION_CLASS_CONSTRUCTOR_CALL diagnostic

This commit is contained in:
Mikhail Glukhikh
2021-05-11 16:14:40 +03:00
parent 3663884db2
commit 0d6bc7e7b2
15 changed files with 54 additions and 38 deletions
@@ -1,3 +1,4 @@
// FIR_COMPARISON
package Test.SubTest.AnotherTest
open class TestClass {
@@ -1,3 +1,4 @@
// FIR_COMPARISON
package some
annotation class AnnComplete
@@ -1,3 +1,4 @@
// FIR_COMPARISON
package some
annotation class AnnComplete
@@ -23,6 +23,7 @@ import org.jetbrains.kotlin.psi.KtAnnotation
import org.jetbrains.kotlin.psi.KtArrayAccessExpression
import org.jetbrains.kotlin.psi.KtBinaryExpression
import org.jetbrains.kotlin.psi.KtBinaryExpressionWithTypeRHS
import org.jetbrains.kotlin.psi.KtCallExpression
import org.jetbrains.kotlin.psi.KtClass
import org.jetbrains.kotlin.psi.KtClassOrObject
import org.jetbrains.kotlin.psi.KtDeclaration
@@ -519,6 +520,12 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
token,
)
}
add(FirErrors.ANNOTATION_CLASS_CONSTRUCTOR_CALL) { firDiagnostic ->
AnnotationClassConstructorCallImpl(
firDiagnostic as FirPsiDiagnostic<*>,
token,
)
}
add(FirErrors.NOT_AN_ANNOTATION_CLASS) { firDiagnostic ->
NotAnAnnotationClassImpl(
firDiagnostic.a,
@@ -29,6 +29,7 @@ import org.jetbrains.kotlin.psi.KtAnnotation
import org.jetbrains.kotlin.psi.KtArrayAccessExpression
import org.jetbrains.kotlin.psi.KtBinaryExpression
import org.jetbrains.kotlin.psi.KtBinaryExpressionWithTypeRHS
import org.jetbrains.kotlin.psi.KtCallExpression
import org.jetbrains.kotlin.psi.KtClass
import org.jetbrains.kotlin.psi.KtClassOrObject
import org.jetbrains.kotlin.psi.KtDeclaration
@@ -374,6 +375,10 @@ sealed class KtFirDiagnostic<PSI: PsiElement> : KtDiagnosticWithPsi<PSI> {
override val diagnosticClass get() = NonConstValUsedInConstantExpression::class
}
abstract class AnnotationClassConstructorCall : KtFirDiagnostic<KtCallExpression>() {
override val diagnosticClass get() = AnnotationClassConstructorCall::class
}
abstract class NotAnAnnotationClass : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = NotAnAnnotationClass::class
abstract val annotationName: String
@@ -31,6 +31,7 @@ import org.jetbrains.kotlin.psi.KtAnnotation
import org.jetbrains.kotlin.psi.KtArrayAccessExpression
import org.jetbrains.kotlin.psi.KtBinaryExpression
import org.jetbrains.kotlin.psi.KtBinaryExpressionWithTypeRHS
import org.jetbrains.kotlin.psi.KtCallExpression
import org.jetbrains.kotlin.psi.KtClass
import org.jetbrains.kotlin.psi.KtClassOrObject
import org.jetbrains.kotlin.psi.KtDeclaration
@@ -603,6 +604,13 @@ internal class NonConstValUsedInConstantExpressionImpl(
override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic)
}
internal class AnnotationClassConstructorCallImpl(
firDiagnostic: FirPsiDiagnostic<*>,
override val token: ValidityToken,
) : KtFirDiagnostic.AnnotationClassConstructorCall(), KtAbstractFirDiagnostic<KtCallExpression> {
override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic)
}
internal class NotAnAnnotationClassImpl(
override val annotationName: String,
firDiagnostic: FirPsiDiagnostic<*>,