From 32755a269c179f6036963cead771e4f0319111bf Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Wed, 20 Jan 2016 18:46:22 +0300 Subject: [PATCH] Support annotations on type parameters in stub builder --- .../stubBuilder/TypeClsStubBuilder.kt | 10 +++++++- .../stubBuilder/Annotations/Annotations.kt | 4 +++- .../stubBuilder/Annotations/Annotations.txt | 23 +++++++++++++++++++ 3 files changed, 35 insertions(+), 2 deletions(-) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/TypeClsStubBuilder.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/TypeClsStubBuilder.kt index 39f07e88072..4164161b69f 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/TypeClsStubBuilder.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/TypeClsStubBuilder.kt @@ -240,7 +240,15 @@ class TypeClsStubBuilder(private val c: ClsStubBuilderContext) { if (typeParameterProto.reified) { modifiers.add(KtTokens.REIFIED_KEYWORD) } - createModifierListStub(typeParameterStub, modifiers) + + val modifierList = createModifierListStub(typeParameterStub, modifiers) + + val annotations = c.components.annotationLoader.loadTypeParameterAnnotations(typeParameterProto, c.nameResolver) + if (annotations.isNotEmpty()) { + createAnnotationStubs( + annotations, + modifierList ?: createEmptyModifierListStub(typeParameterStub)) + } } private fun Type.isDefaultUpperBound(): Boolean { diff --git a/idea/testData/decompiler/stubBuilder/Annotations/Annotations.kt b/idea/testData/decompiler/stubBuilder/Annotations/Annotations.kt index 51fce783b2f..a764c5b9f76 100644 --- a/idea/testData/decompiler/stubBuilder/Annotations/Annotations.kt +++ b/idea/testData/decompiler/stubBuilder/Annotations/Annotations.kt @@ -3,6 +3,8 @@ protected @a fun f() { } + inline fun inlineFun() { } + private fun annotationWithVararg(@a vararg i: Int) {} @b(E.E1) private val c: Int = 1 @@ -29,7 +31,7 @@ @Target(AnnotationTarget.PROPERTY, AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.FUNCTION, AnnotationTarget.CONSTRUCTOR, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY_SETTER, - AnnotationTarget.TYPE, AnnotationTarget.CLASS) + AnnotationTarget.TYPE, AnnotationTarget.CLASS, AnnotationTarget.TYPE_PARAMETER) annotation class a @Target(AnnotationTarget.PROPERTY, AnnotationTarget.FUNCTION, AnnotationTarget.CLASS, diff --git a/idea/testData/decompiler/stubBuilder/Annotations/Annotations.txt b/idea/testData/decompiler/stubBuilder/Annotations/Annotations.txt index ac82a704e80..e5310166d98 100644 --- a/idea/testData/decompiler/stubBuilder/Annotations/Annotations.txt +++ b/idea/testData/decompiler/stubBuilder/Annotations/Annotations.txt @@ -151,6 +151,29 @@ PsiJetFileStubImpl[package=] USER_TYPE:[isAbsoluteInRootPackage=false] REFERENCE_EXPRESSION:[referencedName=kotlin] REFERENCE_EXPRESSION:[referencedName=Unit] + FUN:[fqName=Annotations.inlineFun, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=true, isExtension=false, isTopLevel=false, name=inlineFun] + MODIFIER_LIST:[public final inline] + TYPE_PARAMETER_LIST: + TYPE_PARAMETER:[fqName=null, isInVariance=false, isOutVariance=false, name=T] + MODIFIER_LIST:[reified] + ANNOTATION_ENTRY:[hasValueArguments=false, shortName=a] + CONSTRUCTOR_CALLEE: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=a] + TYPE_PARAMETER:[fqName=null, isInVariance=false, isOutVariance=false, name=F] + MODIFIER_LIST:[] + ANNOTATION_ENTRY:[hasValueArguments=false, shortName=a] + CONSTRUCTOR_CALLEE: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=a] + VALUE_PARAMETER_LIST: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Unit] FUN:[fqName=Annotations.types, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isTopLevel=false, name=types] MODIFIER_LIST:[public final] VALUE_PARAMETER_LIST: