[FIR] Check FirReceiverParameter annotations' targets

This commit is contained in:
Nikolay Lunyak
2023-03-06 10:37:52 +02:00
committed by Space Team
parent 0c77de3049
commit 343deeec1c
3 changed files with 20 additions and 5 deletions
@@ -574,7 +574,7 @@ fun FirFunctionSymbol<*>.isFunctionForExpectTypeFromCastFeature(): Boolean {
return true
}
fun getActualTargetList(annotated: FirDeclaration): AnnotationTargetList {
fun getActualTargetList(annotated: FirAnnotationContainer): AnnotationTargetList {
fun CallableId.isMember(): Boolean {
return classId != null || isLocal // TODO: Replace with .containingClass (after fixing)
}
@@ -628,6 +628,7 @@ fun getActualTargetList(annotated: FirDeclaration): AnnotationTargetList {
is FirBackingField -> TargetLists.T_BACKING_FIELD
is FirFile -> TargetLists.T_FILE
is FirTypeParameter -> TargetLists.T_TYPE_PARAMETER
is FirReceiverParameter -> TargetLists.T_TYPE_REFERENCE
is FirAnonymousInitializer -> TargetLists.T_INITIALIZER
is FirAnonymousObject ->
if (annotated.source?.kind == KtFakeSourceElementKind.EnumInitializer) {
@@ -38,6 +38,20 @@ object FirAnnotationChecker : FirBasicDeclarationChecker() {
declaration: FirDeclaration,
context: CheckerContext,
reporter: DiagnosticReporter
) {
checkAnnotationContainer(declaration, context, reporter)
if (declaration is FirCallableDeclaration) {
declaration.receiverParameter?.let {
checkAnnotationContainer(it, context, reporter)
}
}
}
private fun checkAnnotationContainer(
declaration: FirAnnotationContainer,
context: CheckerContext,
reporter: DiagnosticReporter
) {
var deprecated: FirAnnotation? = null
var deprecatedSinceKotlin: FirAnnotation? = null
@@ -88,7 +102,7 @@ object FirAnnotationChecker : FirBasicDeclarationChecker() {
}
private fun checkMultiFieldValueClassAnnotationRestrictions(
declaration: FirDeclaration,
declaration: FirAnnotationContainer,
annotation: FirAnnotation,
context: CheckerContext,
reporter: DiagnosticReporter
@@ -123,7 +137,7 @@ object FirAnnotationChecker : FirBasicDeclarationChecker() {
}
private fun checkAnnotationTarget(
declaration: FirDeclaration,
declaration: FirAnnotationContainer,
annotation: FirAnnotation,
context: CheckerContext,
reporter: DiagnosticReporter
@@ -172,7 +186,7 @@ object FirAnnotationChecker : FirBasicDeclarationChecker() {
}
private fun checkAnnotationUseSiteTarget(
annotated: FirDeclaration,
annotated: FirAnnotationContainer,
annotation: FirAnnotation,
target: AnnotationUseSiteTarget,
context: CheckerContext,
+1 -1
View File
@@ -21,4 +21,4 @@ fun (<!WRONG_ANNOTATION_TARGET!>@Anno<!> Int).crane() {}
@Target(AnnotationTarget.FILE)
annotation class Anno2
fun @receiver:Anno2 Int.pain() {}
fun <!WRONG_ANNOTATION_TARGET_WITH_USE_SITE_TARGET!>@receiver:Anno2<!> Int.pain() {}