From 7e6bed7ad89dc2cfbf60be9baece061b6830f40e Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Wed, 9 Dec 2015 14:34:12 +0300 Subject: [PATCH] Decompiled text: should always render all modifiers even if we don't feel like it --- .../kotlin/renderer/DescriptorRenderer.kt | 1 + .../kotlin/renderer/DescriptorRendererImpl.kt | 4 ++-- .../renderer/DescriptorRendererOptionsImpl.kt | 2 ++ .../textBuilder/DecompiledTextFactory.kt | 1 + .../decompiler/stubBuilder/Modifiers/Modifiers.kt | 2 ++ .../stubBuilder/Modifiers/Modifiers.txt | 15 +++++++++++++++ 6 files changed, 23 insertions(+), 2 deletions(-) diff --git a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRenderer.kt b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRenderer.kt index 3783b8ea36b..1f879ae3bd4 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRenderer.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRenderer.kt @@ -190,6 +190,7 @@ public interface DescriptorRendererOptions { public var secondaryConstructorsAsPrimary: Boolean public var renderAccessors: Boolean public var renderDefaultAnnotationArguments: Boolean + public var alwaysRenderModifiers: Boolean } object ExcludedTypeAnnotations { diff --git a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.kt b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.kt index 85c5bbe0a5d..a6ff29c0f0e 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.kt @@ -491,10 +491,10 @@ internal class DescriptorRendererImpl( } private fun renderAdditionalModifiers(functionDescriptor: FunctionDescriptor, builder: StringBuilder) { - if (functionDescriptor.isOperator && functionDescriptor.overriddenDescriptors.none { it.isOperator }) { + if (functionDescriptor.isOperator && (functionDescriptor.overriddenDescriptors.none { it.isOperator } || alwaysRenderModifiers)) { builder.append("operator ") } - if (functionDescriptor.isInfix && functionDescriptor.overriddenDescriptors.none { it.isInfix }) { + if (functionDescriptor.isInfix && (functionDescriptor.overriddenDescriptors.none { it.isInfix } || alwaysRenderModifiers)) { builder.append("infix ") } if (functionDescriptor.isExternal) { diff --git a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererOptionsImpl.kt b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererOptionsImpl.kt index 36a38e6ee68..c787d940717 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererOptionsImpl.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererOptionsImpl.kt @@ -97,4 +97,6 @@ internal class DescriptorRendererOptionsImpl : DescriptorRendererOptions { override var excludedTypeAnnotationClasses by property( ExcludedTypeAnnotations.annotationsForNullabilityAndMutability + ExcludedTypeAnnotations.internalAnnotationsForResolve) + + override var alwaysRenderModifiers by property(false) } \ No newline at end of file diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/DecompiledTextFactory.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/DecompiledTextFactory.kt index 9928c0389fa..8944a30ba40 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/DecompiledTextFactory.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/DecompiledTextFactory.kt @@ -50,6 +50,7 @@ fun DescriptorRendererOptions.defaultDecompilerRendererOptions() { secondaryConstructorsAsPrimary = false modifiers = DescriptorRendererModifier.ALL excludedTypeAnnotationClasses = ExcludedTypeAnnotations.annotationsForNullabilityAndMutability + alwaysRenderModifiers = true } public fun buildDecompiledText( diff --git a/idea/testData/decompiler/stubBuilder/Modifiers/Modifiers.kt b/idea/testData/decompiler/stubBuilder/Modifiers/Modifiers.kt index 08a9b9fae99..a04edc441a3 100644 --- a/idea/testData/decompiler/stubBuilder/Modifiers/Modifiers.kt +++ b/idea/testData/decompiler/stubBuilder/Modifiers/Modifiers.kt @@ -14,5 +14,7 @@ data class Modifiers(val x: Int) { inline fun inlined(crossinline arg1: ()->Unit, noinline arg2: ()->Unit): Unit {} + override operator fun equals(other: Any?) = false + annotation class Ann } \ No newline at end of file diff --git a/idea/testData/decompiler/stubBuilder/Modifiers/Modifiers.txt b/idea/testData/decompiler/stubBuilder/Modifiers/Modifiers.txt index e3c6379ecb8..9df272a14db 100644 --- a/idea/testData/decompiler/stubBuilder/Modifiers/Modifiers.txt +++ b/idea/testData/decompiler/stubBuilder/Modifiers/Modifiers.txt @@ -36,6 +36,21 @@ PsiJetFileStubImpl[package=test] USER_TYPE:[isAbsoluteInRootPackage=false] REFERENCE_EXPRESSION:[referencedName=kotlin] REFERENCE_EXPRESSION:[referencedName=Int] + FUN:[fqName=test.Modifiers.equals, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isTopLevel=false, name=equals] + MODIFIER_LIST:[open public operator] + VALUE_PARAMETER_LIST: + VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVar=false, isMutable=false, name=other] + TYPE_REFERENCE: + NULLABLE_TYPE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Any] + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=kotlin] + REFERENCE_EXPRESSION:[referencedName=Boolean] FUN:[fqName=test.Modifiers.extFun, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isTopLevel=false, name=extFun] MODIFIER_LIST:[public final external] VALUE_PARAMETER_LIST: