From dcda47b502f0d019ce8173026e046b178b8c73ae Mon Sep 17 00:00:00 2001 From: "sebastian.sellmair" Date: Mon, 25 Jan 2021 09:07:23 +0100 Subject: [PATCH] Ensure that Decompiler and IDE agree on rendered function types with parameterized annotations findDecompiledDeclaration.kt: Use same DescriptorRenderer options as Decompiler DescriptorRendererImpl.kt: not enforce different AnnotationArgumentsRenderingPolicy for function type annotations This will fix KTIJ-563 where rendered Descriptors are used as Keys for GOTO navigation into decompiled sources. ^KTIJ-563 fixed --- .../annotationsOnParenthesizedTypes.txt | 2 +- .../parenthesizedTypes/splitModifierList.txt | 2 +- .../modifierApplicability.txt | 10 +++++----- compiler/testData/renderer/TypeAnnotations.kt | 16 +++++++++++++++- .../kotlin/renderer/DescriptorRendererImpl.kt | 1 - .../navigation/findDecompiledDeclaration.kt | 5 +++-- tests/mute-common.csv | 1 - 7 files changed, 25 insertions(+), 12 deletions(-) diff --git a/compiler/testData/diagnostics/tests/parenthesizedTypes/annotationsOnParenthesizedTypes.txt b/compiler/testData/diagnostics/tests/parenthesizedTypes/annotationsOnParenthesizedTypes.txt index 43330b052c0..b9d3f2c260e 100644 --- a/compiler/testData/diagnostics/tests/parenthesizedTypes/annotationsOnParenthesizedTypes.txt +++ b/compiler/testData/diagnostics/tests/parenthesizedTypes/annotationsOnParenthesizedTypes.txt @@ -12,7 +12,7 @@ public interface AnnotationsOnParenthesizedTypes { public abstract val lambdaParameterNP: (@A C) -> C public abstract val lambdaReceiver: (@A C).() -> C public abstract val lambdaReturnValue: () -> @A C - public abstract val lambdaType: @A() () -> C + public abstract val lambdaType: @A () -> C public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open fun parameter(/*0*/ a: @A C): kotlin.Unit diff --git a/compiler/testData/diagnostics/tests/parenthesizedTypes/splitModifierList.txt b/compiler/testData/diagnostics/tests/parenthesizedTypes/splitModifierList.txt index c1834dedfae..3ef5296b4dd 100644 --- a/compiler/testData/diagnostics/tests/parenthesizedTypes/splitModifierList.txt +++ b/compiler/testData/diagnostics/tests/parenthesizedTypes/splitModifierList.txt @@ -16,7 +16,7 @@ package public typealias Test0 = @A @B kotlin.Int public typealias Test1 = @A @A kotlin.Int public typealias Test2 = @A @B kotlin.Int -public typealias Test3 = @A() (@A kotlin.Int) -> kotlin.Int +public typealias Test3 = @A (@A kotlin.Int) -> kotlin.Int public typealias Test4 = @A @B kotlin.Int? public typealias Test5 = @A @B kotlin.Int? public typealias Test6 = @A @B kotlin.Int diff --git a/compiler/testData/diagnostics/testsWithStdLib/coroutines/suspendFunctionType/modifierApplicability.txt b/compiler/testData/diagnostics/testsWithStdLib/coroutines/suspendFunctionType/modifierApplicability.txt index 123eb6b1c72..9b64d81285d 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/coroutines/suspendFunctionType/modifierApplicability.txt +++ b/compiler/testData/diagnostics/testsWithStdLib/coroutines/suspendFunctionType/modifierApplicability.txt @@ -38,11 +38,11 @@ public typealias Test1 = suspend () -> kotlin.Unit public typealias Test10 = suspend (suspend () -> kotlin.Unit) -> kotlin.Unit public typealias Test11 = suspend () -> suspend () -> kotlin.Unit public typealias Test12 = suspend (suspend () -> kotlin.Unit) -> kotlin.Unit -public typealias Test13 = @A() suspend () -> kotlin.Unit -public typealias Test14 = @A() suspend () -> kotlin.Unit -public typealias Test15 = (@A() suspend () -> kotlin.Unit)? -public typealias Test16 = (@A() suspend () -> kotlin.Unit)? -public typealias Test17 = (@A() suspend RS.() -> kotlin.Unit) +public typealias Test13 = @A suspend () -> kotlin.Unit +public typealias Test14 = @A suspend () -> kotlin.Unit +public typealias Test15 = (@A suspend () -> kotlin.Unit)? +public typealias Test16 = (@A suspend () -> kotlin.Unit)? +public typealias Test17 = (@A suspend RS.() -> kotlin.Unit) public typealias Test18 = (suspend () -> kotlin.Unit)? public typealias Test2 = suspend kotlin.Int.() -> kotlin.Unit public typealias Test3 = () -> kotlin.Unit diff --git a/compiler/testData/renderer/TypeAnnotations.kt b/compiler/testData/renderer/TypeAnnotations.kt index 9c054ced0e9..1ee8d8afc87 100644 --- a/compiler/testData/renderer/TypeAnnotations.kt +++ b/compiler/testData/renderer/TypeAnnotations.kt @@ -4,6 +4,8 @@ annotation class Ann3(val p: Int) annotation class Ann4 annotation class Ann5 annotation class Ann6 +annotation class Ann7(val p: Boolean = false) + var v1: @Ann1(1, 2) String var v2: @Ann2 Int? @@ -11,6 +13,9 @@ var v3: @Ann3(0) (String, Int) -> Char var v4: @Ann4 X // currently annotations are lost for error types var v5: @Ann5() (String.() -> Unit) var v6: @Ann6() (() -> Unit)? +fun f1(calculation: @Ann7 () -> Any) +fun f2(calculation: @Ann7() () -> Any) +fun f3(calculation: @Ann7(true) () -> Any) //public final annotation class Ann1 : kotlin.Annotation defined in root package //public constructor Ann1(p1: kotlin.Int, p2: kotlin.Int) defined in Ann1 @@ -27,9 +32,18 @@ var v6: @Ann6() (() -> Unit)? //public constructor Ann5() defined in Ann5 //public final annotation class Ann6 : kotlin.Annotation defined in root package //public constructor Ann6() defined in Ann6 +//public final annotation class Ann7 : kotlin.Annotation defined in root package +//public constructor Ann7(p: kotlin.Boolean = ...) defined in Ann7 +//value-parameter p: kotlin.Boolean = ... defined in Ann7. //public var v1: @Ann1(p1 = 1, p2 = 2) kotlin.String defined in root package //public var v2: @Ann2 kotlin.Int? defined in root package //public var v3: @Ann3(p = 0) (kotlin.String, kotlin.Int) -> kotlin.Char defined in root package //public var v4: [ERROR : X] defined in root package //public var v5: @Ann5() (kotlin.String.() -> kotlin.Unit) defined in root package -//public var v6: @Ann6() (() -> kotlin.Unit)? defined in root package \ No newline at end of file +//public var v6: @Ann6() (() -> kotlin.Unit)? defined in root package +//public fun f1(calculation: @Ann7 () -> kotlin.Any): kotlin.Unit defined in root package +//value-parameter calculation: @Ann7 () -> kotlin.Any defined in f1 +//public fun f2(calculation: @Ann7 () -> kotlin.Any): kotlin.Unit defined in root package +//value-parameter calculation: @Ann7 () -> kotlin.Any defined in f2 +//public fun f3(calculation: @Ann7(p = true) () -> kotlin.Any): kotlin.Unit defined in root package +//value-parameter calculation: @Ann7(p = true) () -> kotlin.Any defined in f3 diff --git a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.kt b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.kt index 52ba6d26cde..6f9fc69b30b 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.kt @@ -38,7 +38,6 @@ internal class DescriptorRendererImpl( private val functionTypeAnnotationsRenderer: DescriptorRendererImpl by lazy { withOptions { excludedTypeAnnotationClasses += listOf(StandardNames.FqNames.extensionFunctionType) - annotationArgumentsRenderingPolicy = AnnotationArgumentsRenderingPolicy.ALWAYS_PARENTHESIZED } as DescriptorRendererImpl } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/navigation/findDecompiledDeclaration.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/navigation/findDecompiledDeclaration.kt index cea25fdd958..0164dc0d516 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/navigation/findDecompiledDeclaration.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/navigation/findDecompiledDeclaration.kt @@ -18,6 +18,7 @@ import org.jetbrains.kotlin.idea.caches.project.BinaryModuleInfo import org.jetbrains.kotlin.idea.caches.resolve.LOG import org.jetbrains.kotlin.idea.decompiler.KtDecompiledFile import org.jetbrains.kotlin.idea.decompiler.textBuilder.DecompiledTextIndexer +import org.jetbrains.kotlin.idea.decompiler.textBuilder.defaultDecompilerRendererOptions import org.jetbrains.kotlin.idea.stubindex.* import org.jetbrains.kotlin.incremental.components.NoLookupLocation import org.jetbrains.kotlin.psi.KtCallableDeclaration @@ -189,8 +190,8 @@ object ByDescriptorIndexer : DecompiledTextIndexer { return descriptorRendererForKeys.render(this) } - private val descriptorRendererForKeys = DescriptorRenderer.COMPACT_WITH_MODIFIERS.withOptions { - modifiers = DescriptorRendererModifier.ALL + private val descriptorRendererForKeys = DescriptorRenderer.withOptions { + defaultDecompilerRendererOptions() withDefinedIn = true } } diff --git a/tests/mute-common.csv b/tests/mute-common.csv index 66d3525abdf..7e6f8f3ad87 100644 --- a/tests/mute-common.csv +++ b/tests/mute-common.csv @@ -55,7 +55,6 @@ org.jetbrains.kotlin.idea.decompiler.navigation.NavigateJavaToLibrarySourceTestG org.jetbrains.kotlin.idea.navigation.GotoWithMultipleLibrariesTest.testOneHasSourceAndOneDoesNot,,, FLAKY org.jetbrains.kotlin.idea.navigation.GotoWithMultipleLibrariesTest.testOneHasSourceAndManyDoNot,,, FLAKY org.jetbrains.kotlin.idea.navigation.GotoWithMultipleLibrariesTest.testSeveralWithSource,,, FLAKY -org.jetbrains.kotlin.idea.resolve.ReferenceResolveTestGenerated.DelegatedPropertyAccessors.InStandardLibrary.testNotNull,,, org.jetbrains.kotlin.tools.projectWizard.wizard.ProjectTemplateNewWizardProjectImportTestGenerated.GradleGroovy.testMultiplatformApplication,,, org.jetbrains.kotlin.tools.projectWizard.wizard.ProjectTemplateNewWizardProjectImportTestGenerated.GradleKts.testMultiplatformApplication,,, org.jetbrains.kotlin.gradle.NewMultiplatformIT.testJavaSupportInJvmTargets,,,