FIR: Make FirAnnotationArgumentChecker a FirAnnotationCallChecker, to
run on all annotation calls, including those inside type annotations.
This commit is contained in:
committed by
TeamCityServer
parent
87d05bcf83
commit
18f617a582
+9
-12
@@ -1,11 +1,10 @@
|
||||
/*
|
||||
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Copyright 2010-2021 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.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.fir.analysis.checkers.declaration
|
||||
package org.jetbrains.kotlin.fir.analysis.checkers.expression
|
||||
|
||||
import org.jetbrains.kotlin.fir.FirAnnotationContainer
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.ConstantArgumentKind
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.checkConstantArguments
|
||||
@@ -14,19 +13,17 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticFactory0
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.reportOn
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||
import org.jetbrains.kotlin.fir.expressions.*
|
||||
import org.jetbrains.kotlin.psi.KtExpression
|
||||
|
||||
object FirAnnotationArgumentChecker : FirBasicDeclarationChecker() {
|
||||
override fun check(declaration: FirDeclaration, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||
if (declaration !is FirAnnotationContainer) return
|
||||
for (declarationOfAnnotation in declaration.annotations) {
|
||||
for ((arg, _) in declarationOfAnnotation.argumentMapping ?: continue) {
|
||||
val expression = (arg as? FirNamedArgumentExpression)?.expression ?: arg
|
||||
object FirAnnotationArgumentChecker : FirAnnotationCallChecker() {
|
||||
override fun check(expression: FirAnnotationCall, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||
expression.argumentMapping?.let {
|
||||
for ((arg, _) in it) {
|
||||
val argExpression = (arg as? FirNamedArgumentExpression)?.expression ?: arg
|
||||
|
||||
checkAnnotationArgumentWithSubElements(expression, context.session, reporter, context)
|
||||
?.let { reporter.reportOn(expression.source, it, context) }
|
||||
checkAnnotationArgumentWithSubElements(argExpression, context.session, reporter, context)
|
||||
?.let { reporter.reportOn(argExpression.source, it, context) }
|
||||
}
|
||||
}
|
||||
}
|
||||
-1
@@ -19,7 +19,6 @@ import org.jetbrains.kotlin.fir.analysis.checkers.expression.FirReservedUndersco
|
||||
object CommonDeclarationCheckers : DeclarationCheckers() {
|
||||
override val basicDeclarationCheckers: Set<FirBasicDeclarationChecker>
|
||||
get() = setOf(
|
||||
FirAnnotationArgumentChecker,
|
||||
FirModifierChecker,
|
||||
FirConflictsChecker,
|
||||
FirConflictingProjectionChecker,
|
||||
|
||||
+1
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.fir.analysis.checkers.syntax.FirAnonymousFunctionSyn
|
||||
object CommonExpressionCheckers : ExpressionCheckers() {
|
||||
override val annotationCallCheckers: Set<FirAnnotationCallChecker>
|
||||
get() = setOf(
|
||||
FirAnnotationArgumentChecker,
|
||||
FirAnnotationUsedAsAnnotationArgumentChecker,
|
||||
)
|
||||
|
||||
|
||||
+2
-2
@@ -22,8 +22,8 @@ typealias Test15 = (@A() suspend () -> Unit)?
|
||||
typealias Test16 = (@A suspend () -> Unit)?
|
||||
typealias Test17 = @A suspend RS.() -> Unit
|
||||
typealias Test18 = (suspend () -> Unit)?
|
||||
typealias Test19 = (@A({ val x: <!WRONG_MODIFIER_TARGET!>suspend<!> String? = null; "" }()) suspend () -> Unit)?
|
||||
typealias Test20 = (@A("".let { val x: <!WRONG_MODIFIER_TARGET!>suspend<!> String? = null; it }) suspend () -> Unit)?
|
||||
typealias Test19 = (@A(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>{ val x: <!WRONG_MODIFIER_TARGET!>suspend<!> String? = null; "" }()<!>) suspend () -> Unit)?
|
||||
typealias Test20 = (@A(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>"".let { val x: <!WRONG_MODIFIER_TARGET!>suspend<!> String? = null; it }<!>) suspend () -> Unit)?
|
||||
|
||||
interface Supertype1 : suspend () -> Unit {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user