[FIR] FirAnnotationArgumentsTransformer: fix scope problem with type parameters

We should wrap outer declaration to avoid FirTowerDataMode.CLASS_HEADER_ANNOTATIONS

^KT-63396 Fixed
This commit is contained in:
Dmitrii Gridin
2023-11-10 17:41:44 +01:00
committed by Space Team
parent 2ee9fcab9b
commit 28895a2613
4 changed files with 11 additions and 13 deletions
@@ -214,10 +214,9 @@ private class FirDeclarationsResolveTransformerForAnnotationArguments(
simpleFunction: FirSimpleFunction,
data: ResolutionMode
): FirSimpleFunction {
doTransformTypeParameters(simpleFunction)
context.withSimpleFunction(simpleFunction, session) {
simpleFunction
.transformTypeParameters(transformer, data)
.transformReturnTypeRef(transformer, data)
.transformReceiverParameter(transformer, data)
.transformValueParameters(transformer, data)
@@ -229,10 +228,9 @@ private class FirDeclarationsResolveTransformerForAnnotationArguments(
override fun transformConstructor(constructor: FirConstructor, data: ResolutionMode): FirConstructor {
val containingClass = context.containerIfAny as? FirRegularClass
doTransformTypeParameters(constructor)
context.withConstructor(constructor) {
constructor
.transformTypeParameters(transformer, data)
.transformAnnotations(transformer, data)
.transformReceiverParameter(transformer, data)
.transformReturnTypeRef(transformer, data)
@@ -262,10 +260,10 @@ private class FirDeclarationsResolveTransformerForAnnotationArguments(
override fun transformProperty(property: FirProperty, data: ResolutionMode): FirProperty {
property.transformReceiverParameter(transformer, ResolutionMode.ContextIndependent)
doTransformTypeParameters(property)
context.withProperty(property) {
property
.transformTypeParameters(transformer, data)
.transformAnnotations(transformer, data)
.transformReceiverParameter(transformer, data)
.transformReturnTypeRef(transformer, data)
@@ -6,8 +6,8 @@ annotation class Anno(val position: String)
interface OriginalInterface {
@Anno("explicitType $prop")
fun <@Anno("type param $<!UNRESOLVED_REFERENCE!>prop<!>") F : @Anno("bound $<!UNRESOLVED_REFERENCE!>prop<!>") List<@Anno("nested bound $<!UNRESOLVED_REFERENCE!>prop<!>") List<@Anno("nested nested bound $<!UNRESOLVED_REFERENCE!>prop<!>") String>>> @receiver:Anno("receiver annotation: $prop") @Anno("receiver type $prop") Collection<@Anno("nested receiver type $prop") List<@Anno("nested nested receiver type $prop")String>>.explicitType(@Anno("parameter annotation $prop") param: @Anno("parameter type $prop") ListIterator<@Anno("nested parameter type $prop") List<@Anno("nested nested parameter type $prop")String>>): @Anno("explicitType return type $prop") List<@Anno("explicitType nested return type $prop") List<@Anno("explicitType nested nested return type $prop") Int>> = emptyList()
val <@Anno("type param $<!UNRESOLVED_REFERENCE!>prop<!>") F : @Anno("bound $<!UNRESOLVED_REFERENCE!>prop<!>") Number> F.explicitType: @Anno("bound $prop") Int get() = 1
fun <@Anno("type param $prop") F : @Anno("bound $prop") List<@Anno("nested bound $prop") List<@Anno("nested nested bound $prop") String>>> @receiver:Anno("receiver annotation: $prop") @Anno("receiver type $prop") Collection<@Anno("nested receiver type $prop") List<@Anno("nested nested receiver type $prop")String>>.explicitType(@Anno("parameter annotation $prop") param: @Anno("parameter type $prop") ListIterator<@Anno("nested parameter type $prop") List<@Anno("nested nested parameter type $prop")String>>): @Anno("explicitType return type $prop") List<@Anno("explicitType nested return type $prop") List<@Anno("explicitType nested nested return type $prop") Int>> = emptyList()
val <@Anno("type param $prop") F : @Anno("bound $prop") Number> F.explicitType: @Anno("bound $prop") Int get() = 1
companion object {
private const val prop = 0