Decompiled text: should always render all modifiers even if we don't feel like it

This commit is contained in:
Pavel V. Talanov
2015-12-09 14:34:12 +03:00
parent fee19ad9de
commit 7e6bed7ad8
6 changed files with 23 additions and 2 deletions
@@ -190,6 +190,7 @@ public interface DescriptorRendererOptions {
public var secondaryConstructorsAsPrimary: Boolean public var secondaryConstructorsAsPrimary: Boolean
public var renderAccessors: Boolean public var renderAccessors: Boolean
public var renderDefaultAnnotationArguments: Boolean public var renderDefaultAnnotationArguments: Boolean
public var alwaysRenderModifiers: Boolean
} }
object ExcludedTypeAnnotations { object ExcludedTypeAnnotations {
@@ -491,10 +491,10 @@ internal class DescriptorRendererImpl(
} }
private fun renderAdditionalModifiers(functionDescriptor: FunctionDescriptor, builder: StringBuilder) { 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 ") builder.append("operator ")
} }
if (functionDescriptor.isInfix && functionDescriptor.overriddenDescriptors.none { it.isInfix }) { if (functionDescriptor.isInfix && (functionDescriptor.overriddenDescriptors.none { it.isInfix } || alwaysRenderModifiers)) {
builder.append("infix ") builder.append("infix ")
} }
if (functionDescriptor.isExternal) { if (functionDescriptor.isExternal) {
@@ -97,4 +97,6 @@ internal class DescriptorRendererOptionsImpl : DescriptorRendererOptions {
override var excludedTypeAnnotationClasses by property( override var excludedTypeAnnotationClasses by property(
ExcludedTypeAnnotations.annotationsForNullabilityAndMutability ExcludedTypeAnnotations.annotationsForNullabilityAndMutability
+ ExcludedTypeAnnotations.internalAnnotationsForResolve) + ExcludedTypeAnnotations.internalAnnotationsForResolve)
override var alwaysRenderModifiers by property(false)
} }
@@ -50,6 +50,7 @@ fun DescriptorRendererOptions.defaultDecompilerRendererOptions() {
secondaryConstructorsAsPrimary = false secondaryConstructorsAsPrimary = false
modifiers = DescriptorRendererModifier.ALL modifiers = DescriptorRendererModifier.ALL
excludedTypeAnnotationClasses = ExcludedTypeAnnotations.annotationsForNullabilityAndMutability excludedTypeAnnotationClasses = ExcludedTypeAnnotations.annotationsForNullabilityAndMutability
alwaysRenderModifiers = true
} }
public fun buildDecompiledText( public fun buildDecompiledText(
@@ -14,5 +14,7 @@ data class Modifiers(val x: Int) {
inline fun inlined(crossinline arg1: ()->Unit, noinline arg2: ()->Unit): Unit {} inline fun inlined(crossinline arg1: ()->Unit, noinline arg2: ()->Unit): Unit {}
override operator fun equals(other: Any?) = false
annotation class Ann annotation class Ann
} }
@@ -36,6 +36,21 @@ PsiJetFileStubImpl[package=test]
USER_TYPE:[isAbsoluteInRootPackage=false] USER_TYPE:[isAbsoluteInRootPackage=false]
REFERENCE_EXPRESSION:[referencedName=kotlin] REFERENCE_EXPRESSION:[referencedName=kotlin]
REFERENCE_EXPRESSION:[referencedName=Int] 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] FUN:[fqName=test.Modifiers.extFun, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isTopLevel=false, name=extFun]
MODIFIER_LIST:[public final external] MODIFIER_LIST:[public final external]
VALUE_PARAMETER_LIST: VALUE_PARAMETER_LIST: