Use OverrideMemberChooserObject to generate also abstract actual decls
Relates to KT-27093 and similar problems
This commit is contained in:
@@ -186,6 +186,7 @@ interface DescriptorRendererOptions {
|
||||
var withoutReturnType: Boolean
|
||||
var normalizedVisibilities: Boolean
|
||||
var renderDefaultVisibility: Boolean
|
||||
var renderDefaultModality: Boolean
|
||||
var uninferredTypeParameterAsName: Boolean
|
||||
var overrideRenderingPolicy: OverrideRenderingPolicy
|
||||
var valueParametersHandler: DescriptorRenderer.ValueParametersHandler
|
||||
|
||||
@@ -478,17 +478,33 @@ internal class DescriptorRendererImpl(
|
||||
builder.append(renderKeyword(visibility.displayName)).append(" ")
|
||||
}
|
||||
|
||||
private fun renderModality(modality: Modality, builder: StringBuilder) {
|
||||
private fun renderModality(modality: Modality, builder: StringBuilder, defaultModality: Modality) {
|
||||
if (!renderDefaultModality && modality == defaultModality) return
|
||||
renderModifier(builder, DescriptorRendererModifier.MODALITY in modifiers, modality.name.toLowerCase())
|
||||
}
|
||||
|
||||
private fun MemberDescriptor.implicitModalityWithoutExtensions(): Modality {
|
||||
if (this is ClassDescriptor) {
|
||||
return if (kind == ClassKind.INTERFACE) Modality.ABSTRACT else Modality.FINAL
|
||||
}
|
||||
val containingClassDescriptor = containingDeclaration as? ClassDescriptor ?: return Modality.FINAL
|
||||
if (this !is CallableMemberDescriptor) return Modality.FINAL
|
||||
if (this.overriddenDescriptors.isNotEmpty()) {
|
||||
if (containingClassDescriptor.modality != Modality.FINAL) return Modality.OPEN
|
||||
}
|
||||
if (containingClassDescriptor.kind == ClassKind.INTERFACE && this.visibility != Visibilities.PRIVATE) {
|
||||
return if (this.modality == Modality.ABSTRACT) Modality.ABSTRACT else Modality.OPEN
|
||||
}
|
||||
return Modality.FINAL
|
||||
}
|
||||
|
||||
private fun renderModalityForCallable(callable: CallableMemberDescriptor, builder: StringBuilder) {
|
||||
if (!DescriptorUtils.isTopLevelDeclaration(callable) || callable.modality != Modality.FINAL) {
|
||||
if (overrideRenderingPolicy == OverrideRenderingPolicy.RENDER_OVERRIDE && callable.modality == Modality.OPEN &&
|
||||
overridesSomething(callable)) {
|
||||
return
|
||||
}
|
||||
renderModality(callable.modality, builder)
|
||||
renderModality(callable.modality, builder, callable.implicitModalityWithoutExtensions())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -913,7 +929,7 @@ internal class DescriptorRendererImpl(
|
||||
}
|
||||
if (!(klass.kind == ClassKind.INTERFACE && klass.modality == Modality.ABSTRACT ||
|
||||
klass.kind.isSingleton && klass.modality == Modality.FINAL)) {
|
||||
renderModality(klass.modality, builder)
|
||||
renderModality(klass.modality, builder, klass.implicitModalityWithoutExtensions())
|
||||
}
|
||||
renderMemberModifiers(klass, builder)
|
||||
renderModifier(builder, DescriptorRendererModifier.INNER in modifiers && klass.isInner, "inner")
|
||||
|
||||
@@ -81,6 +81,7 @@ internal class DescriptorRendererOptionsImpl : DescriptorRendererOptions {
|
||||
override var enhancedTypes by property(false)
|
||||
override var normalizedVisibilities by property(false)
|
||||
override var renderDefaultVisibility by property(true)
|
||||
override var renderDefaultModality by property(true)
|
||||
override var uninferredTypeParameterAsName by property(false)
|
||||
override var includePropertyConstant by property(false)
|
||||
override var withoutTypeParameters by property(false)
|
||||
|
||||
Reference in New Issue
Block a user