From 28895a26138585727b4b3216c54ff7ae91280f7d Mon Sep 17 00:00:00 2001 From: Dmitrii Gridin Date: Fri, 10 Nov 2023 17:41:44 +0100 Subject: [PATCH] [FIR] FirAnnotationArgumentsTransformer: fix scope problem with type parameters We should wrap outer declaration to avoid FirTowerDataMode.CLASS_HEADER_ANNOTATIONS ^KT-63396 Fixed --- .../lazyResolve/functions/typeParameterAnnotations.txt | 6 +++--- .../lazyResolve/properties/typeParameterAnnotations.txt | 6 +++--- .../plugin/FirAnnotationArgumentsTransformer.kt | 8 +++----- .../tests/annotations/typeParameterAnnotations.fir.kt | 4 ++-- 4 files changed, 11 insertions(+), 13 deletions(-) diff --git a/analysis/low-level-api-fir/testData/lazyResolve/functions/typeParameterAnnotations.txt b/analysis/low-level-api-fir/testData/lazyResolve/functions/typeParameterAnnotations.txt index 68dc68c2a75..50c40854a52 100644 --- a/analysis/low-level-api-fir/testData/lazyResolve/functions/typeParameterAnnotations.txt +++ b/analysis/low-level-api-fir/testData/lazyResolve/functions/typeParameterAnnotations.txt @@ -274,7 +274,7 @@ FILE: [ResolvedTo(IMPORTS)] typeParameterAnnotations.kt } public abstract [ResolvedTo(STATUS)] interface OriginalInterface : R|kotlin/Any| { - @R|Anno|[Types](position = (String(explicitType ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) public open [ResolvedTo(ANNOTATION_ARGUMENTS)] fun <@R|Anno|[Types](position = (String(type param ), #)) [ResolvedTo(ANNOTATION_ARGUMENTS)] F : R|@R|Anno|(position = (String(bound ), #)) kotlin/collections/List<@R|Anno|(position = (String(nested bound ), #)) kotlin/collections/List<@R|Anno|(position = (String(nested nested bound ), #)) kotlin/String>>|> @RECEIVER:R|Anno|[Types](position = (String(receiver annotation: ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) R|@R|Anno|(position = (String(receiver type ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/collections/Collection<@R|Anno|(position = (String(nested receiver type ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/collections/List<@R|Anno|(position = (String(nested nested receiver type ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/String>>|.explicitType([ResolvedTo(ANNOTATION_ARGUMENTS)] @R|Anno|[Types](position = (String(parameter annotation ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) param: R|@R|Anno|(position = (String(parameter type ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/collections/ListIterator<@R|Anno|(position = (String(nested parameter type ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/collections/List<@R|Anno|(position = (String(nested nested parameter type ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/String>>|): R|@R|Anno|(position = (String(explicitType return type ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/collections/List<@R|Anno|(position = (String(explicitType nested return type ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/collections/List<@R|Anno|(position = (String(explicitType nested nested return type ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/Int>>| { + @R|Anno|[Types](position = (String(explicitType ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) public open [ResolvedTo(ANNOTATION_ARGUMENTS)] fun <@R|Anno|[Types](position = (String(type param ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) [ResolvedTo(ANNOTATION_ARGUMENTS)] F : R|@R|Anno|(position = (String(bound ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/collections/List<@R|Anno|(position = (String(nested bound ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/collections/List<@R|Anno|(position = (String(nested nested bound ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/String>>|> @RECEIVER:R|Anno|[Types](position = (String(receiver annotation: ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) R|@R|Anno|(position = (String(receiver type ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/collections/Collection<@R|Anno|(position = (String(nested receiver type ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/collections/List<@R|Anno|(position = (String(nested nested receiver type ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/String>>|.explicitType([ResolvedTo(ANNOTATION_ARGUMENTS)] @R|Anno|[Types](position = (String(parameter annotation ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) param: R|@R|Anno|(position = (String(parameter type ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/collections/ListIterator<@R|Anno|(position = (String(nested parameter type ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/collections/List<@R|Anno|(position = (String(nested nested parameter type ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/String>>|): R|@R|Anno|(position = (String(explicitType return type ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/collections/List<@R|Anno|(position = (String(explicitType nested return type ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/collections/List<@R|Anno|(position = (String(explicitType nested nested return type ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/Int>>| { ^explicitType IntegerLiteral(0) } @@ -302,7 +302,7 @@ FILE: [ResolvedTo(IMPORTS)] typeParameterAnnotations.kt } public abstract [ResolvedTo(STATUS)] interface OriginalInterface : R|kotlin/Any| { - @R|Anno|[Types](position = (String(explicitType ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) public open [ResolvedTo(BODY_RESOLVE)] fun <@R|Anno|[Types](position = (String(type param ), #)) [ResolvedTo(BODY_RESOLVE)] F : R|@R|Anno|(position = (String(bound ), #)) kotlin/collections/List<@R|Anno|(position = (String(nested bound ), #)) kotlin/collections/List<@R|Anno|(position = (String(nested nested bound ), #)) kotlin/String>>|> @RECEIVER:R|Anno|[Types](position = (String(receiver annotation: ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) R|@R|Anno|(position = (String(receiver type ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/collections/Collection<@R|Anno|(position = (String(nested receiver type ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/collections/List<@R|Anno|(position = (String(nested nested receiver type ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/String>>|.explicitType([ResolvedTo(BODY_RESOLVE)] @R|Anno|[Types](position = (String(parameter annotation ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) param: R|@R|Anno|(position = (String(parameter type ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/collections/ListIterator<@R|Anno|(position = (String(nested parameter type ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/collections/List<@R|Anno|(position = (String(nested nested parameter type ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/String>>|): R|@R|Anno|(position = (String(explicitType return type ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/collections/List<@R|Anno|(position = (String(explicitType nested return type ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/collections/List<@R|Anno|(position = (String(explicitType nested nested return type ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/Int>>| { + @R|Anno|[Types](position = (String(explicitType ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) public open [ResolvedTo(BODY_RESOLVE)] fun <@R|Anno|[Types](position = (String(type param ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) [ResolvedTo(BODY_RESOLVE)] F : R|@R|Anno|(position = (String(bound ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/collections/List<@R|Anno|(position = (String(nested bound ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/collections/List<@R|Anno|(position = (String(nested nested bound ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/String>>|> @RECEIVER:R|Anno|[Types](position = (String(receiver annotation: ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) R|@R|Anno|(position = (String(receiver type ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/collections/Collection<@R|Anno|(position = (String(nested receiver type ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/collections/List<@R|Anno|(position = (String(nested nested receiver type ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/String>>|.explicitType([ResolvedTo(BODY_RESOLVE)] @R|Anno|[Types](position = (String(parameter annotation ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) param: R|@R|Anno|(position = (String(parameter type ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/collections/ListIterator<@R|Anno|(position = (String(nested parameter type ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/collections/List<@R|Anno|(position = (String(nested nested parameter type ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/String>>|): R|@R|Anno|(position = (String(explicitType return type ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/collections/List<@R|Anno|(position = (String(explicitType nested return type ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/collections/List<@R|Anno|(position = (String(explicitType nested nested return type ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/Int>>| { ^explicitType Int(0) } @@ -330,7 +330,7 @@ FILE: [ResolvedTo(BODY_RESOLVE)] typeParameterAnnotations.kt } public abstract [ResolvedTo(BODY_RESOLVE)] interface OriginalInterface : R|kotlin/Any| { - @R|Anno|[Types](position = (String(explicitType ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) public open [ResolvedTo(BODY_RESOLVE)] fun <@R|Anno|[Types](position = (String(type param ), #)) [ResolvedTo(BODY_RESOLVE)] F : R|@R|Anno|(position = (String(bound ), #)) kotlin/collections/List<@R|Anno|(position = (String(nested bound ), #)) kotlin/collections/List<@R|Anno|(position = (String(nested nested bound ), #)) kotlin/String>>|> @RECEIVER:R|Anno|[Types](position = (String(receiver annotation: ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) R|@R|Anno|(position = (String(receiver type ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/collections/Collection<@R|Anno|(position = (String(nested receiver type ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/collections/List<@R|Anno|(position = (String(nested nested receiver type ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/String>>|.explicitType([ResolvedTo(BODY_RESOLVE)] @R|Anno|[Types](position = (String(parameter annotation ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) param: R|@R|Anno|(position = (String(parameter type ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/collections/ListIterator<@R|Anno|(position = (String(nested parameter type ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/collections/List<@R|Anno|(position = (String(nested nested parameter type ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/String>>|): R|@R|Anno|(position = (String(explicitType return type ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/collections/List<@R|Anno|(position = (String(explicitType nested return type ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/collections/List<@R|Anno|(position = (String(explicitType nested nested return type ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/Int>>| { + @R|Anno|[Types](position = (String(explicitType ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) public open [ResolvedTo(BODY_RESOLVE)] fun <@R|Anno|[Types](position = (String(type param ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) [ResolvedTo(BODY_RESOLVE)] F : R|@R|Anno|(position = (String(bound ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/collections/List<@R|Anno|(position = (String(nested bound ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/collections/List<@R|Anno|(position = (String(nested nested bound ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/String>>|> @RECEIVER:R|Anno|[Types](position = (String(receiver annotation: ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) R|@R|Anno|(position = (String(receiver type ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/collections/Collection<@R|Anno|(position = (String(nested receiver type ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/collections/List<@R|Anno|(position = (String(nested nested receiver type ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/String>>|.explicitType([ResolvedTo(BODY_RESOLVE)] @R|Anno|[Types](position = (String(parameter annotation ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) param: R|@R|Anno|(position = (String(parameter type ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/collections/ListIterator<@R|Anno|(position = (String(nested parameter type ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/collections/List<@R|Anno|(position = (String(nested nested parameter type ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/String>>|): R|@R|Anno|(position = (String(explicitType return type ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/collections/List<@R|Anno|(position = (String(explicitType nested return type ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/collections/List<@R|Anno|(position = (String(explicitType nested nested return type ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/Int>>| { ^explicitType Int(0) } diff --git a/analysis/low-level-api-fir/testData/lazyResolve/properties/typeParameterAnnotations.txt b/analysis/low-level-api-fir/testData/lazyResolve/properties/typeParameterAnnotations.txt index 002576c43ef..7bbbd08a9e4 100644 --- a/analysis/low-level-api-fir/testData/lazyResolve/properties/typeParameterAnnotations.txt +++ b/analysis/low-level-api-fir/testData/lazyResolve/properties/typeParameterAnnotations.txt @@ -284,7 +284,7 @@ FILE: [ResolvedTo(IMPORTS)] typeParameterAnnotations.kt } public abstract [ResolvedTo(STATUS)] interface OriginalInterface : R|kotlin/Any| { - public open [ResolvedTo(ANNOTATION_ARGUMENTS)] val <@R|Anno|[Types](position = (String(type param ), #)) [ResolvedTo(ANNOTATION_ARGUMENTS)] F : R|@R|Anno|(position = (String(bound ), #)) kotlin/Number|> explicitType: R|@R|Anno|(position = (String(bound ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/Int| + public open [ResolvedTo(ANNOTATION_ARGUMENTS)] val <@R|Anno|[Types](position = (String(type param ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) [ResolvedTo(ANNOTATION_ARGUMENTS)] F : R|@R|Anno|(position = (String(bound ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/Number|> explicitType: R|@R|Anno|(position = (String(bound ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/Int| public [ResolvedTo(ANNOTATION_ARGUMENTS)] [ContainingClassKey=OriginalInterface] get(): R|@R|Anno|(position = (String(bound ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/Int| { ^ IntegerLiteral(1) } @@ -313,7 +313,7 @@ FILE: [ResolvedTo(IMPORTS)] typeParameterAnnotations.kt } public abstract [ResolvedTo(STATUS)] interface OriginalInterface : R|kotlin/Any| { - public open [ResolvedTo(BODY_RESOLVE)] val <@R|Anno|[Types](position = (String(type param ), #)) [ResolvedTo(BODY_RESOLVE)] F : R|@R|Anno|(position = (String(bound ), #)) kotlin/Number|> explicitType: R|@R|Anno|(position = (String(bound ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/Int| + public open [ResolvedTo(BODY_RESOLVE)] val <@R|Anno|[Types](position = (String(type param ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) [ResolvedTo(BODY_RESOLVE)] F : R|@R|Anno|(position = (String(bound ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/Number|> explicitType: R|@R|Anno|(position = (String(bound ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/Int| public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=OriginalInterface] get(): R|@R|Anno|(position = (String(bound ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/Int| { ^ Int(1) } @@ -342,7 +342,7 @@ FILE: [ResolvedTo(BODY_RESOLVE)] typeParameterAnnotations.kt } public abstract [ResolvedTo(BODY_RESOLVE)] interface OriginalInterface : R|kotlin/Any| { - public open [ResolvedTo(BODY_RESOLVE)] val <@R|Anno|[Types](position = (String(type param ), #)) [ResolvedTo(BODY_RESOLVE)] F : R|@R|Anno|(position = (String(bound ), #)) kotlin/Number|> explicitType: R|@R|Anno|(position = (String(bound ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/Int| + public open [ResolvedTo(BODY_RESOLVE)] val <@R|Anno|[Types](position = (String(type param ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) [ResolvedTo(BODY_RESOLVE)] F : R|@R|Anno|(position = (String(bound ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/Number|> explicitType: R|@R|Anno|(position = (String(bound ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/Int| public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=OriginalInterface] get(): R|@R|Anno|(position = (String(bound ), this@R|/OriginalInterface.Companion|.R|/OriginalInterface.Companion.prop|)) kotlin/Int| { ^ Int(1) } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/FirAnnotationArgumentsTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/FirAnnotationArgumentsTransformer.kt index 07e10086f5d..cfecd100d54 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/FirAnnotationArgumentsTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/FirAnnotationArgumentsTransformer.kt @@ -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) diff --git a/compiler/testData/diagnostics/tests/annotations/typeParameterAnnotations.fir.kt b/compiler/testData/diagnostics/tests/annotations/typeParameterAnnotations.fir.kt index 23c066a9741..3d15e2e8bbf 100644 --- a/compiler/testData/diagnostics/tests/annotations/typeParameterAnnotations.fir.kt +++ b/compiler/testData/diagnostics/tests/annotations/typeParameterAnnotations.fir.kt @@ -6,8 +6,8 @@ annotation class Anno(val position: String) interface OriginalInterface { @Anno("explicitType $prop") - 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 + 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