KT-22815: Use bold for root identifier, and not for keywords

This commit is contained in:
Simon Ogorodnik
2018-07-09 20:21:01 +03:00
parent 33a6721270
commit 84b299d7dc
8 changed files with 36 additions and 27 deletions
@@ -24,7 +24,7 @@ import java.util.*
interface ClassifierNamePolicy { interface ClassifierNamePolicy {
object SHORT : ClassifierNamePolicy { object SHORT : ClassifierNamePolicy {
override fun renderClassifier(classifier: ClassifierDescriptor, renderer: DescriptorRenderer): String { override fun renderClassifier(classifier: ClassifierDescriptor, renderer: DescriptorRenderer): String {
if (classifier is TypeParameterDescriptor) return renderer.renderName(classifier.name) if (classifier is TypeParameterDescriptor) return renderer.renderName(classifier.name, false)
val qualifiedNameElements = ArrayList<Name>() val qualifiedNameElements = ArrayList<Name>()
@@ -42,7 +42,7 @@ interface ClassifierNamePolicy {
object FULLY_QUALIFIED : ClassifierNamePolicy { object FULLY_QUALIFIED : ClassifierNamePolicy {
override fun renderClassifier(classifier: ClassifierDescriptor, renderer: DescriptorRenderer): String { override fun renderClassifier(classifier: ClassifierDescriptor, renderer: DescriptorRenderer): String {
if (classifier is TypeParameterDescriptor) return renderer.renderName(classifier.name) if (classifier is TypeParameterDescriptor) return renderer.renderName(classifier.name, false)
return renderer.renderFqName(DescriptorUtils.getFqName(classifier)) return renderer.renderFqName(DescriptorUtils.getFqName(classifier))
} }
@@ -48,7 +48,7 @@ abstract class DescriptorRenderer {
fun renderFunctionParameters(functionDescriptor: FunctionDescriptor): String fun renderFunctionParameters(functionDescriptor: FunctionDescriptor): String
= renderValueParameters(functionDescriptor.valueParameters, functionDescriptor.hasSynthesizedParameterNames()) = renderValueParameters(functionDescriptor.valueParameters, functionDescriptor.hasSynthesizedParameterNames())
abstract fun renderName(name: Name): String abstract fun renderName(name: Name, rootRenderedElement: Boolean): String
abstract fun renderFqName(fqName: FqNameUnsafe): String abstract fun renderFqName(fqName: FqNameUnsafe): String
@@ -198,6 +198,8 @@ interface DescriptorRendererOptions {
val includeAnnotationArguments: Boolean get() = annotationArgumentsRenderingPolicy.includeAnnotationArguments val includeAnnotationArguments: Boolean get() = annotationArgumentsRenderingPolicy.includeAnnotationArguments
val includeEmptyAnnotationArguments: Boolean get() = annotationArgumentsRenderingPolicy.includeEmptyAnnotationArguments val includeEmptyAnnotationArguments: Boolean get() = annotationArgumentsRenderingPolicy.includeEmptyAnnotationArguments
var boldForNamesInHtml: Boolean
var includePropertyConstant: Boolean var includePropertyConstant: Boolean
var parameterNameRenderingPolicy: ParameterNameRenderingPolicy var parameterNameRenderingPolicy: ParameterNameRenderingPolicy
var withoutTypeParameters: Boolean var withoutTypeParameters: Boolean
@@ -48,7 +48,7 @@ internal class DescriptorRendererImpl(
private fun renderKeyword(keyword: String): String { private fun renderKeyword(keyword: String): String {
when (textFormat) { when (textFormat) {
RenderingFormat.PLAIN -> return keyword RenderingFormat.PLAIN -> return keyword
RenderingFormat.HTML -> return "<b>$keyword</b>" RenderingFormat.HTML -> return if (boldForNamesInHtml) keyword else "<b>$keyword</b>"
} }
} }
@@ -79,12 +79,16 @@ internal class DescriptorRendererImpl(
} }
/* NAMES RENDERING */ /* NAMES RENDERING */
override fun renderName(name: Name): String { override fun renderName(name: Name, rootRenderedElement: Boolean): String {
return escape(name.render()) val escaped = escape(name.render())
if (boldForNamesInHtml && textFormat == RenderingFormat.HTML && rootRenderedElement) {
return "<b>$escaped</b>"
}
return escaped
} }
private fun renderName(descriptor: DeclarationDescriptor, builder: StringBuilder) { private fun renderName(descriptor: DeclarationDescriptor, builder: StringBuilder, rootRenderedElement: Boolean) {
builder.append(renderName(descriptor.name)) builder.append(renderName(descriptor.name, rootRenderedElement))
} }
private fun renderCompanionObjectName(descriptor: DeclarationDescriptor, builder: StringBuilder) { private fun renderCompanionObjectName(descriptor: DeclarationDescriptor, builder: StringBuilder) {
@@ -96,12 +100,12 @@ internal class DescriptorRendererImpl(
val containingDeclaration = descriptor.containingDeclaration val containingDeclaration = descriptor.containingDeclaration
if (containingDeclaration != null) { if (containingDeclaration != null) {
builder.append("of ") builder.append("of ")
builder.append(renderName(containingDeclaration.name)) builder.append(renderName(containingDeclaration.name, false))
} }
} }
if (verbose || descriptor.name != SpecialNames.DEFAULT_NAME_FOR_COMPANION_OBJECT) { if (verbose || descriptor.name != SpecialNames.DEFAULT_NAME_FOR_COMPANION_OBJECT) {
if (!startFromName) renderSpaceIfNeeded(builder) if (!startFromName) renderSpaceIfNeeded(builder)
builder.append(renderName(descriptor.name)) builder.append(renderName(descriptor.name, true))
} }
} }
@@ -267,7 +271,7 @@ internal class DescriptorRendererImpl(
possiblyInnerType.outerType?.let { possiblyInnerType.outerType?.let {
renderPossiblyInnerType(it) renderPossiblyInnerType(it)
append('.') append('.')
append(renderName(possiblyInnerType.classifierDescriptor.name)) append(renderName(possiblyInnerType.classifierDescriptor.name, false))
} ?: append(renderTypeConstructor(possiblyInnerType.classifierDescriptor.typeConstructor)) } ?: append(renderTypeConstructor(possiblyInnerType.classifierDescriptor.typeConstructor))
append(renderTypeArguments(possiblyInnerType.arguments)) append(renderTypeArguments(possiblyInnerType.arguments))
@@ -351,7 +355,7 @@ internal class DescriptorRendererImpl(
val name = if (parameterNamesInFunctionalTypes) typeProjection.type.extractParameterNameFromFunctionTypeArgument() else null val name = if (parameterNamesInFunctionalTypes) typeProjection.type.extractParameterNameFromFunctionTypeArgument() else null
if (name != null) { if (name != null) {
append(renderName(name)) append(renderName(name, false))
append(": ") append(": ")
} }
@@ -560,7 +564,7 @@ internal class DescriptorRendererImpl(
builder.renderAnnotations(typeParameter) builder.renderAnnotations(typeParameter)
renderName(typeParameter, builder) renderName(typeParameter, builder, topLevel)
val upperBoundsCount = typeParameter.upperBounds.size val upperBoundsCount = typeParameter.upperBounds.size
if ((upperBoundsCount > 1 && !topLevel) || upperBoundsCount == 1) { if ((upperBoundsCount > 1 && !topLevel) || upperBoundsCount == 1) {
val upperBound = typeParameter.upperBounds.iterator().next() val upperBound = typeParameter.upperBounds.iterator().next()
@@ -655,7 +659,7 @@ internal class DescriptorRendererImpl(
renderReceiver(function, builder) renderReceiver(function, builder)
} }
renderName(function, builder) renderName(function, builder, true)
renderValueParameters(function.valueParameters, function.hasSynthesizedParameterNames(), builder) renderValueParameters(function.valueParameters, function.hasSynthesizedParameterNames(), builder)
@@ -703,7 +707,7 @@ internal class DescriptorRendererImpl(
if (renderConstructorKeyword) { if (renderConstructorKeyword) {
builder.append(" ") builder.append(" ")
} }
renderName(classDescriptor, builder) renderName(classDescriptor, builder, true)
renderTypeParameters(constructor.typeParameters, builder, false) renderTypeParameters(constructor.typeParameters, builder, false)
} }
@@ -722,7 +726,7 @@ internal class DescriptorRendererImpl(
for (typeParameter in typeParameters) { for (typeParameter in typeParameters) {
typeParameter.upperBounds typeParameter.upperBounds
.drop(1) // first parameter is rendered by renderTypeParameter .drop(1) // first parameter is rendered by renderTypeParameter
.mapTo(upperBoundStrings) { renderName(typeParameter.name) + " : " + renderType(it) } .mapTo(upperBoundStrings) { renderName(typeParameter.name, false) + " : " + renderType(it) }
} }
if (!upperBoundStrings.isEmpty()) { if (!upperBoundStrings.isEmpty()) {
@@ -797,7 +801,7 @@ internal class DescriptorRendererImpl(
} }
if (includeName) { if (includeName) {
renderName(variable, builder) renderName(variable, builder, topLevel)
builder.append(": ") builder.append(": ")
} }
@@ -827,7 +831,7 @@ internal class DescriptorRendererImpl(
renderReceiver(property, builder) renderReceiver(property, builder)
} }
renderName(property, builder) renderName(property, builder, true)
builder.append(": ").append(renderType(property.type)) builder.append(": ").append(renderType(property.type))
renderReceiverAfterName(property, builder) renderReceiverAfterName(property, builder)
@@ -850,7 +854,7 @@ internal class DescriptorRendererImpl(
renderVisibility(typeAlias.visibility, builder) renderVisibility(typeAlias.visibility, builder)
renderMemberModifiers(typeAlias, builder) renderMemberModifiers(typeAlias, builder)
builder.append(renderKeyword("typealias")).append(" ") builder.append(renderKeyword("typealias")).append(" ")
renderName(typeAlias, builder) renderName(typeAlias, builder, true)
renderTypeParameters(typeAlias.declaredTypeParameters, builder, false) renderTypeParameters(typeAlias.declaredTypeParameters, builder, false)
renderCapturedTypeParametersIfRequired(typeAlias, builder) renderCapturedTypeParametersIfRequired(typeAlias, builder)
@@ -891,7 +895,7 @@ internal class DescriptorRendererImpl(
if (!isCompanionObject(klass)) { if (!isCompanionObject(klass)) {
if (!startFromName) renderSpaceIfNeeded(builder) if (!startFromName) renderSpaceIfNeeded(builder)
renderName(klass, builder) renderName(klass, builder, true)
} }
else { else {
renderCompanionObjectName(klass, builder) renderCompanionObjectName(klass, builder)
@@ -941,7 +945,7 @@ internal class DescriptorRendererImpl(
renderPackageHeader(packageView.fqName, "package", builder) renderPackageHeader(packageView.fqName, "package", builder)
if (debugMode) { if (debugMode) {
builder.append(" in context of ") builder.append(" in context of ")
renderName(packageView.module, builder) renderName(packageView.module, builder, false)
} }
} }
@@ -949,7 +953,7 @@ internal class DescriptorRendererImpl(
renderPackageHeader(fragment.fqName, "package-fragment", builder) renderPackageHeader(fragment.fqName, "package-fragment", builder)
if (debugMode) { if (debugMode) {
builder.append(" in ") builder.append(" in ")
renderName(fragment.containingDeclaration, builder) renderName(fragment.containingDeclaration, builder, false)
} }
} }
@@ -1028,7 +1032,7 @@ internal class DescriptorRendererImpl(
} }
override fun visitModuleDeclaration(descriptor: ModuleDescriptor, builder: StringBuilder) { override fun visitModuleDeclaration(descriptor: ModuleDescriptor, builder: StringBuilder) {
renderName(descriptor, builder) renderName(descriptor, builder, true)
} }
override fun visitScriptDescriptor(scriptDescriptor: ScriptDescriptor, builder: StringBuilder) { override fun visitScriptDescriptor(scriptDescriptor: ScriptDescriptor, builder: StringBuilder) {
@@ -119,4 +119,6 @@ internal class DescriptorRendererOptionsImpl : DescriptorRendererOptions {
override var renderFunctionContracts: Boolean by property(false) override var renderFunctionContracts: Boolean by property(false)
override var presentableUnresolvedTypes: Boolean by property(false) override var presentableUnresolvedTypes: Boolean by property(false)
override var boldForNamesInHtml: Boolean by property(false)
} }
@@ -57,7 +57,7 @@ internal object ReflectionObjectRenderer {
return buildString { return buildString {
append(if (descriptor.isVar) "var " else "val ") append(if (descriptor.isVar) "var " else "val ")
appendReceivers(descriptor) appendReceivers(descriptor)
append(renderer.renderName(descriptor.name)) append(renderer.renderName(descriptor.name, true))
append(": ") append(": ")
append(renderType(descriptor.type)) append(renderType(descriptor.type))
@@ -68,7 +68,7 @@ internal object ReflectionObjectRenderer {
return buildString { return buildString {
append("fun ") append("fun ")
appendReceivers(descriptor) appendReceivers(descriptor)
append(renderer.renderName(descriptor.name)) append(renderer.renderName(descriptor.name, true))
descriptor.valueParameters.joinTo(this, separator = ", ", prefix = "(", postfix = ")") { descriptor.valueParameters.joinTo(this, separator = ", ", prefix = "(", postfix = ")") {
renderType(it.type) // TODO: vararg renderType(it.type) // TODO: vararg
@@ -172,6 +172,7 @@ class KotlinQuickDocumentationProvider : AbstractDocumentationProvider() {
renderCompanionObjectName = true renderCompanionObjectName = true
withDefinedIn = false withDefinedIn = false
eachAnnotationOnNewLine = true eachAnnotationOnNewLine = true
boldForNamesInHtml = true
} }
private fun renderEnumSpecialFunction(element: KtClass, functionDescriptor: FunctionDescriptor, quickNavigation: Boolean): String { private fun renderEnumSpecialFunction(element: KtClass, functionDescriptor: FunctionDescriptor, quickNavigation: Boolean): String {
@@ -40,7 +40,7 @@ class SpecifyExplicitLambdaSignatureIntention : SelfTargetingOffsetIndependentIn
} }
private fun ValueParameterDescriptor.render(psiName: String?): String = IdeDescriptorRenderers.SOURCE_CODE.let { private fun ValueParameterDescriptor.render(psiName: String?): String = IdeDescriptorRenderers.SOURCE_CODE.let {
"${psiName ?: it.renderName(name)}: ${it.renderType(type)}" "${psiName ?: it.renderName(name, true)}: ${it.renderType(type)}"
} }
override fun applyTo(element: KtLambdaExpression, editor: Editor?) { override fun applyTo(element: KtLambdaExpression, editor: Editor?) {
@@ -56,7 +56,7 @@ class ImportAwareClassifierNamePolicy(
} }
private fun shortNameWithCompanionNameSkip(classifier: ClassifierDescriptor, renderer: DescriptorRenderer): String { private fun shortNameWithCompanionNameSkip(classifier: ClassifierDescriptor, renderer: DescriptorRenderer): String {
if (classifier is TypeParameterDescriptor) return renderer.renderName(classifier.name) if (classifier is TypeParameterDescriptor) return renderer.renderName(classifier.name, false)
val qualifiedNameParts = classifier.parentsWithSelf val qualifiedNameParts = classifier.parentsWithSelf
.takeWhile { it is ClassifierDescriptor } .takeWhile { it is ClassifierDescriptor }