From a344ad06445219d6dee8bdc77147f8297aec775e Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Mon, 24 Oct 2016 14:53:05 +0300 Subject: [PATCH] Fix absence of annotation for function type in cls stubs and ignore @ExtensionFunctionType --- .../decompiler/stubBuilder/TypeClsStubBuilder.kt | 15 +++++++++++---- .../AnnotationsOnNullableTypes.kt | 4 ++-- 2 files changed, 13 insertions(+), 6 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 8d3be4c8c14..8dc2fe640f6 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 @@ -92,10 +92,15 @@ class TypeClsStubBuilder(private val c: ClsStubBuilderContext) { val shouldBuildAsFunctionType = isNumberedFunctionClassFqName(classId.asSingleFqName().toUnsafe()) && type.argumentList.none { it.projection == Projection.STAR } if (shouldBuildAsFunctionType) { - val extension = annotations.any { annotation -> - annotation.asSingleFqName() == KotlinBuiltIns.FQ_NAMES.extensionFunctionType - } - createFunctionTypeStub(nullableTypeParent(parent, type), type, extension) + val (extensionAnnotations, notExtensionAnnotations) = + annotations.partition { it.asSingleFqName() == KotlinBuiltIns.FQ_NAMES.extensionFunctionType } + + + createTypeAnnotationStubs(parent, notExtensionAnnotations) + + val isExtension = extensionAnnotations.isNotEmpty() + createFunctionTypeStub(nullableTypeParent(parent, type), type, isExtension) + return } @@ -252,6 +257,8 @@ class TypeClsStubBuilder(private val c: ClsStubBuilderContext) { when (typeParameterProto.variance) { Variance.IN -> modifiers.add(KtTokens.IN_KEYWORD) Variance.OUT -> modifiers.add(KtTokens.OUT_KEYWORD) + Variance.INV -> { /* do nothing */ } + null -> { /* do nothing */ } } if (typeParameterProto.reified) { modifiers.add(KtTokens.REIFIED_KEYWORD) diff --git a/idea/testData/decompiler/stubBuilder/AnnotationsOnNullableTypes/AnnotationsOnNullableTypes.kt b/idea/testData/decompiler/stubBuilder/AnnotationsOnNullableTypes/AnnotationsOnNullableTypes.kt index 1c9a47ae28e..97bd8429b12 100644 --- a/idea/testData/decompiler/stubBuilder/AnnotationsOnNullableTypes/AnnotationsOnNullableTypes.kt +++ b/idea/testData/decompiler/stubBuilder/AnnotationsOnNullableTypes/AnnotationsOnNullableTypes.kt @@ -11,13 +11,13 @@ public class AnnotationsOnNullableTypes { fun returnArgument(): B<@A C?> = null!! - val lambdaType: @A() (() -> C)? = null // TODO: Annotation is lost in stubs + val lambdaType: @A() (() -> C)? = null val lambdaParameter: (@A C?) -> C = null!! val lambdaReturnValue: () -> @A C? = null!! - val lambdaReceiver: @A C.() -> C = null!! // TODO: Annotation is lost in stubs + val lambdaReceiver: @A C.() -> C = null!! } @Target(AnnotationTarget.TYPE, AnnotationTarget.TYPE_PARAMETER)