K2: add proper catch parameter annotation targeting

In this commit we begin counting a catch parameter as
both a local variable and a value parameter for the purpose
of annotation targeting.

#KT-61691 Fixed
This commit is contained in:
Mikhail Glukhikh
2023-09-12 18:48:12 +02:00
committed by Space Team
parent 91aa679214
commit ffd77850ef
3 changed files with 8 additions and 6 deletions
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.analysis.checkers
import com.intellij.lang.LighterASTNode
import org.jetbrains.kotlin.*
import org.jetbrains.kotlin.KtFakeSourceElementKind.DesugaredComponentFunctionCall
import org.jetbrains.kotlin.builtins.StandardNames.HASHCODE_NAME
import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.descriptors.Modality
@@ -30,7 +31,6 @@ import org.jetbrains.kotlin.fir.resolve.*
import org.jetbrains.kotlin.fir.resolve.providers.firProvider
import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider
import org.jetbrains.kotlin.fir.scopes.*
import org.jetbrains.kotlin.fir.scopes.impl.declaredMemberScope
import org.jetbrains.kotlin.fir.scopes.impl.multipleDelegatesWithTheSameSignature
import org.jetbrains.kotlin.fir.symbols.ConeTypeParameterLookupTag
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
@@ -617,10 +617,10 @@ fun getActualTargetList(container: FirAnnotationContainer): AnnotationTargetList
is FirProperty -> {
when {
annotated.isLocal ->
if (annotated.source?.kind == KtFakeSourceElementKind.DesugaredComponentFunctionCall) {
TargetLists.T_DESTRUCTURING_DECLARATION
} else {
TargetLists.T_LOCAL_VARIABLE
when {
annotated.source?.kind == DesugaredComponentFunctionCall -> TargetLists.T_DESTRUCTURING_DECLARATION
annotated.isCatchParameter == true -> TargetLists.T_CATCH_PARAMETER
else -> TargetLists.T_LOCAL_VARIABLE
}
annotated.isMember ->
if (annotated.source?.kind == KtFakeSourceElementKind.PropertyFromParameter) {
@@ -16,7 +16,7 @@ annotation class FixCatchClass
fun main() {
try {
} catch (@FixCatchLocalVariable <!WRONG_ANNOTATION_TARGET!>@FixCatchValueParameter<!> <!WRONG_ANNOTATION_TARGET!>@FixCatchClass<!> e: Throwable) {
} catch (@FixCatchLocalVariable @FixCatchValueParameter <!WRONG_ANNOTATION_TARGET!>@FixCatchClass<!> e: Throwable) {
}
}
@@ -19,6 +19,8 @@ object AnnotationTargetLists {
onlyWithUseSiteTarget(PROPERTY_SETTER, VALUE_PARAMETER)
}
val T_CATCH_PARAMETER = targetList(LOCAL_VARIABLE, VALUE_PARAMETER)
val T_DESTRUCTURING_DECLARATION = targetList(DESTRUCTURING_DECLARATION)
private fun TargetListBuilder.propertyTargets(backingField: Boolean, delegate: Boolean) {