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
This commit is contained in:
sebastian.sellmair
2021-01-25 09:07:23 +01:00
committed by Space
parent 122d04b9fa
commit dcda47b502
7 changed files with 25 additions and 12 deletions
@@ -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
@@ -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
@@ -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
+15 -1
View File
@@ -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.<init>
//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
//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
@@ -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
}
@@ -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<String> {
return descriptorRendererForKeys.render(this)
}
private val descriptorRendererForKeys = DescriptorRenderer.COMPACT_WITH_MODIFIERS.withOptions {
modifiers = DescriptorRendererModifier.ALL
private val descriptorRendererForKeys = DescriptorRenderer.withOptions {
defaultDecompilerRendererOptions()
withDefinedIn = true
}
}
-1
View File
@@ -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,,,
1 Test key Issue State (optional: MUTE or FAIL) Status (optional: FLAKY)
55 org.jetbrains.kotlin.idea.navigation.GotoWithMultipleLibrariesTest.testOneHasSourceAndOneDoesNot FLAKY
56 org.jetbrains.kotlin.idea.navigation.GotoWithMultipleLibrariesTest.testOneHasSourceAndManyDoNot FLAKY
57 org.jetbrains.kotlin.idea.navigation.GotoWithMultipleLibrariesTest.testSeveralWithSource FLAKY
org.jetbrains.kotlin.idea.resolve.ReferenceResolveTestGenerated.DelegatedPropertyAccessors.InStandardLibrary.testNotNull
58 org.jetbrains.kotlin.tools.projectWizard.wizard.ProjectTemplateNewWizardProjectImportTestGenerated.GradleGroovy.testMultiplatformApplication
59 org.jetbrains.kotlin.tools.projectWizard.wizard.ProjectTemplateNewWizardProjectImportTestGenerated.GradleKts.testMultiplatformApplication
60 org.jetbrains.kotlin.gradle.NewMultiplatformIT.testJavaSupportInJvmTargets