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 renderAccessors: Boolean
public var renderDefaultAnnotationArguments: Boolean
public var alwaysRenderModifiers: Boolean
}
object ExcludedTypeAnnotations {
@@ -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) {
@@ -97,4 +97,6 @@ internal class DescriptorRendererOptionsImpl : DescriptorRendererOptions {
override var excludedTypeAnnotationClasses by property(
ExcludedTypeAnnotations.annotationsForNullabilityAndMutability
+ ExcludedTypeAnnotations.internalAnnotationsForResolve)
override var alwaysRenderModifiers by property(false)
}
@@ -50,6 +50,7 @@ fun DescriptorRendererOptions.defaultDecompilerRendererOptions() {
secondaryConstructorsAsPrimary = false
modifiers = DescriptorRendererModifier.ALL
excludedTypeAnnotationClasses = ExcludedTypeAnnotations.annotationsForNullabilityAndMutability
alwaysRenderModifiers = true
}
public fun buildDecompiledText(
@@ -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
}
@@ -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: