Refactor DescriptorRenderer's renderAccessors option

In some tests with txt (probably all except loadJava), property
accessors are not rendered at all, so a third option value (NONE) will
be useful to determine whether we need to render annotations on property
accessors as get/set/sparam-targeted annotations on the property
This commit is contained in:
Alexander Udalov
2018-08-13 13:31:05 +02:00
parent 896cf61443
commit 4219aff548
6 changed files with 57 additions and 25 deletions
@@ -210,7 +210,7 @@ interface DescriptorRendererOptions {
var typeNormalizer: (KotlinType) -> KotlinType
var defaultParameterValueRenderer: ((ValueParameterDescriptor) -> String)?
var secondaryConstructorsAsPrimary: Boolean
var renderAccessors: Boolean
var propertyAccessorRenderingPolicy: PropertyAccessorRenderingPolicy
var renderDefaultAnnotationArguments: Boolean
var alwaysRenderModifiers: Boolean
var renderConstructorKeyword: Boolean
@@ -251,6 +251,12 @@ enum class ParameterNameRenderingPolicy {
NONE
}
enum class PropertyAccessorRenderingPolicy {
PRETTY,
DEBUG,
NONE
}
enum class DescriptorRendererModifier(val includeByDefault: Boolean) {
VISIBILITY(true),
MODALITY(true),
@@ -985,25 +985,25 @@ internal class DescriptorRendererImpl(
}
override fun visitPropertyGetterDescriptor(descriptor: PropertyGetterDescriptor, builder: StringBuilder) {
if (renderAccessors) {
renderAccessorModifiers(descriptor, builder)
builder.append("getter for ")
renderProperty(descriptor.correspondingProperty, builder)
}
else {
visitFunctionDescriptor(descriptor, builder)
}
visitPropertyAccessorDescriptor(descriptor, builder, "getter")
}
override fun visitPropertySetterDescriptor(descriptor: PropertySetterDescriptor, builder: StringBuilder) {
if (renderAccessors) {
renderAccessorModifiers(descriptor, builder)
builder.append("setter for ")
renderProperty(descriptor.correspondingProperty, builder)
}
else {
visitFunctionDescriptor(descriptor, builder)
visitPropertyAccessorDescriptor(descriptor, builder, "setter")
}
private fun visitPropertyAccessorDescriptor(descriptor: PropertyAccessorDescriptor, builder: StringBuilder, kind: String) {
when (propertyAccessorRenderingPolicy) {
PropertyAccessorRenderingPolicy.PRETTY -> {
renderAccessorModifiers(descriptor, builder)
builder.append("$kind for ")
renderProperty(descriptor.correspondingProperty, builder)
}
PropertyAccessorRenderingPolicy.DEBUG -> {
visitFunctionDescriptor(descriptor, builder)
}
PropertyAccessorRenderingPolicy.NONE -> {
}
}
}
@@ -94,7 +94,7 @@ internal class DescriptorRendererOptionsImpl : DescriptorRendererOptions {
override var parameterNameRenderingPolicy by property(ParameterNameRenderingPolicy.ALL)
override var receiverAfterName by property(false)
override var renderCompanionObjectName by property(false)
override var renderAccessors by property(false)
override var propertyAccessorRenderingPolicy by property(PropertyAccessorRenderingPolicy.DEBUG)
override var renderDefaultAnnotationArguments by property(false)
override var eachAnnotationOnNewLine: Boolean by property(false)