diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirAnnotationClassDeclarationChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirAnnotationClassDeclarationChecker.kt index ad3702191ff..9c58152c23d 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirAnnotationClassDeclarationChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirAnnotationClassDeclarationChecker.kt @@ -17,8 +17,8 @@ import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.FirLightSourceElement import org.jetbrains.kotlin.fir.FirPsiSourceElement import org.jetbrains.kotlin.fir.FirSourceElement -import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression import org.jetbrains.kotlin.KtNodeTypes.FUN +import org.jetbrains.kotlin.KtNodeTypes.VALUE_PARAMETER import org.jetbrains.kotlin.lexer.KtTokens.VAL_KEYWORD import org.jetbrains.kotlin.lexer.KtTokens.VAR_KEYWORD import org.jetbrains.kotlin.psi.KtParameter @@ -30,7 +30,7 @@ object FirAnnotationClassDeclarationChecker : FirDeclarationChecker + it is FirConstructor && it.isPrimary -> { for (parameter in it.valueParameters) when (val parameterSourceElement = parameter.source) { is FirPsiSourceElement<*> -> { @@ -49,12 +49,20 @@ object FirAnnotationClassDeclarationChecker : FirDeclarationChecker { - // DO NOTHING } - else -> reporter.report(it.source, FirErrors.ANNOTATION_CLASS_MEMBER) + it is FirRegularClass -> { + // DO NOTHING: nested annotation classes are allowed in 1.3+ + } + it is FirProperty && it.source?.elementType == VALUE_PARAMETER -> { + // DO NOTHING to avoid reporting constructor properties + } + it is FirSimpleFunction && it.source?.elementType != FUN -> { + // DO NOTHING to avoid reporting synthetic functions + // TODO: replace with origin check + } + else -> { + reporter.report(it.source, FirErrors.ANNOTATION_CLASS_MEMBER) + } } }