diff --git a/core/descriptors/src/org/jetbrains/kotlin/renderer/ClassifierNamePolicy.kt b/core/descriptors/src/org/jetbrains/kotlin/renderer/ClassifierNamePolicy.kt index dc55949a54d..7b60b8b979b 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/renderer/ClassifierNamePolicy.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/renderer/ClassifierNamePolicy.kt @@ -24,7 +24,7 @@ import java.util.* interface ClassifierNamePolicy { object SHORT : ClassifierNamePolicy { 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() @@ -42,7 +42,7 @@ interface ClassifierNamePolicy { object FULLY_QUALIFIED : ClassifierNamePolicy { 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)) } diff --git a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRenderer.kt b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRenderer.kt index 15dc63e4119..e18c7d23ebe 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRenderer.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRenderer.kt @@ -48,7 +48,7 @@ abstract class DescriptorRenderer { fun renderFunctionParameters(functionDescriptor: FunctionDescriptor): String = 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 @@ -198,6 +198,8 @@ interface DescriptorRendererOptions { val includeAnnotationArguments: Boolean get() = annotationArgumentsRenderingPolicy.includeAnnotationArguments val includeEmptyAnnotationArguments: Boolean get() = annotationArgumentsRenderingPolicy.includeEmptyAnnotationArguments + var boldForNamesInHtml: Boolean + var includePropertyConstant: Boolean var parameterNameRenderingPolicy: ParameterNameRenderingPolicy var withoutTypeParameters: Boolean diff --git a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.kt b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.kt index 0f757e40cfa..80ca02dd67b 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.kt @@ -48,7 +48,7 @@ internal class DescriptorRendererImpl( private fun renderKeyword(keyword: String): String { when (textFormat) { RenderingFormat.PLAIN -> return keyword - RenderingFormat.HTML -> return "$keyword" + RenderingFormat.HTML -> return if (boldForNamesInHtml) keyword else "$keyword" } } @@ -79,12 +79,16 @@ internal class DescriptorRendererImpl( } /* NAMES RENDERING */ - override fun renderName(name: Name): String { - return escape(name.render()) + override fun renderName(name: Name, rootRenderedElement: Boolean): String { + val escaped = escape(name.render()) + if (boldForNamesInHtml && textFormat == RenderingFormat.HTML && rootRenderedElement) { + return "$escaped" + } + return escaped } - private fun renderName(descriptor: DeclarationDescriptor, builder: StringBuilder) { - builder.append(renderName(descriptor.name)) + private fun renderName(descriptor: DeclarationDescriptor, builder: StringBuilder, rootRenderedElement: Boolean) { + builder.append(renderName(descriptor.name, rootRenderedElement)) } private fun renderCompanionObjectName(descriptor: DeclarationDescriptor, builder: StringBuilder) { @@ -96,12 +100,12 @@ internal class DescriptorRendererImpl( val containingDeclaration = descriptor.containingDeclaration if (containingDeclaration != null) { 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 (!startFromName) renderSpaceIfNeeded(builder) - builder.append(renderName(descriptor.name)) + builder.append(renderName(descriptor.name, true)) } } @@ -267,7 +271,7 @@ internal class DescriptorRendererImpl( possiblyInnerType.outerType?.let { renderPossiblyInnerType(it) append('.') - append(renderName(possiblyInnerType.classifierDescriptor.name)) + append(renderName(possiblyInnerType.classifierDescriptor.name, false)) } ?: append(renderTypeConstructor(possiblyInnerType.classifierDescriptor.typeConstructor)) append(renderTypeArguments(possiblyInnerType.arguments)) @@ -351,7 +355,7 @@ internal class DescriptorRendererImpl( val name = if (parameterNamesInFunctionalTypes) typeProjection.type.extractParameterNameFromFunctionTypeArgument() else null if (name != null) { - append(renderName(name)) + append(renderName(name, false)) append(": ") } @@ -560,7 +564,7 @@ internal class DescriptorRendererImpl( builder.renderAnnotations(typeParameter) - renderName(typeParameter, builder) + renderName(typeParameter, builder, topLevel) val upperBoundsCount = typeParameter.upperBounds.size if ((upperBoundsCount > 1 && !topLevel) || upperBoundsCount == 1) { val upperBound = typeParameter.upperBounds.iterator().next() @@ -655,7 +659,7 @@ internal class DescriptorRendererImpl( renderReceiver(function, builder) } - renderName(function, builder) + renderName(function, builder, true) renderValueParameters(function.valueParameters, function.hasSynthesizedParameterNames(), builder) @@ -703,7 +707,7 @@ internal class DescriptorRendererImpl( if (renderConstructorKeyword) { builder.append(" ") } - renderName(classDescriptor, builder) + renderName(classDescriptor, builder, true) renderTypeParameters(constructor.typeParameters, builder, false) } @@ -722,7 +726,7 @@ internal class DescriptorRendererImpl( for (typeParameter in typeParameters) { typeParameter.upperBounds .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()) { @@ -797,7 +801,7 @@ internal class DescriptorRendererImpl( } if (includeName) { - renderName(variable, builder) + renderName(variable, builder, topLevel) builder.append(": ") } @@ -827,7 +831,7 @@ internal class DescriptorRendererImpl( renderReceiver(property, builder) } - renderName(property, builder) + renderName(property, builder, true) builder.append(": ").append(renderType(property.type)) renderReceiverAfterName(property, builder) @@ -850,7 +854,7 @@ internal class DescriptorRendererImpl( renderVisibility(typeAlias.visibility, builder) renderMemberModifiers(typeAlias, builder) builder.append(renderKeyword("typealias")).append(" ") - renderName(typeAlias, builder) + renderName(typeAlias, builder, true) renderTypeParameters(typeAlias.declaredTypeParameters, builder, false) renderCapturedTypeParametersIfRequired(typeAlias, builder) @@ -891,7 +895,7 @@ internal class DescriptorRendererImpl( if (!isCompanionObject(klass)) { if (!startFromName) renderSpaceIfNeeded(builder) - renderName(klass, builder) + renderName(klass, builder, true) } else { renderCompanionObjectName(klass, builder) @@ -941,7 +945,7 @@ internal class DescriptorRendererImpl( renderPackageHeader(packageView.fqName, "package", builder) if (debugMode) { 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) if (debugMode) { 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) { - renderName(descriptor, builder) + renderName(descriptor, builder, true) } override fun visitScriptDescriptor(scriptDescriptor: ScriptDescriptor, builder: StringBuilder) { diff --git a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererOptionsImpl.kt b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererOptionsImpl.kt index 5730d23ea1c..3a044d347b4 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererOptionsImpl.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererOptionsImpl.kt @@ -119,4 +119,6 @@ internal class DescriptorRendererOptionsImpl : DescriptorRendererOptions { override var renderFunctionContracts: Boolean by property(false) override var presentableUnresolvedTypes: Boolean by property(false) + + override var boldForNamesInHtml: Boolean by property(false) } diff --git a/core/reflection.jvm/src/kotlin/reflect/jvm/internal/ReflectionObjectRenderer.kt b/core/reflection.jvm/src/kotlin/reflect/jvm/internal/ReflectionObjectRenderer.kt index 434343a29e1..7f7f3aae57d 100644 --- a/core/reflection.jvm/src/kotlin/reflect/jvm/internal/ReflectionObjectRenderer.kt +++ b/core/reflection.jvm/src/kotlin/reflect/jvm/internal/ReflectionObjectRenderer.kt @@ -57,7 +57,7 @@ internal object ReflectionObjectRenderer { return buildString { append(if (descriptor.isVar) "var " else "val ") appendReceivers(descriptor) - append(renderer.renderName(descriptor.name)) + append(renderer.renderName(descriptor.name, true)) append(": ") append(renderType(descriptor.type)) @@ -68,7 +68,7 @@ internal object ReflectionObjectRenderer { return buildString { append("fun ") appendReceivers(descriptor) - append(renderer.renderName(descriptor.name)) + append(renderer.renderName(descriptor.name, true)) descriptor.valueParameters.joinTo(this, separator = ", ", prefix = "(", postfix = ")") { renderType(it.type) // TODO: vararg diff --git a/idea/src/org/jetbrains/kotlin/idea/KotlinQuickDocumentationProvider.kt b/idea/src/org/jetbrains/kotlin/idea/KotlinQuickDocumentationProvider.kt index 1087dca71b9..9cc0b85489e 100644 --- a/idea/src/org/jetbrains/kotlin/idea/KotlinQuickDocumentationProvider.kt +++ b/idea/src/org/jetbrains/kotlin/idea/KotlinQuickDocumentationProvider.kt @@ -172,6 +172,7 @@ class KotlinQuickDocumentationProvider : AbstractDocumentationProvider() { renderCompanionObjectName = true withDefinedIn = false eachAnnotationOnNewLine = true + boldForNamesInHtml = true } private fun renderEnumSpecialFunction(element: KtClass, functionDescriptor: FunctionDescriptor, quickNavigation: Boolean): String { diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/SpecifyExplicitLambdaSignatureIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/SpecifyExplicitLambdaSignatureIntention.kt index f5315a3547e..bf54524b8b0 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/SpecifyExplicitLambdaSignatureIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/SpecifyExplicitLambdaSignatureIntention.kt @@ -40,7 +40,7 @@ class SpecifyExplicitLambdaSignatureIntention : SelfTargetingOffsetIndependentIn } 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?) { diff --git a/idea/src/org/jetbrains/kotlin/idea/parameterInfo/TypeHints.kt b/idea/src/org/jetbrains/kotlin/idea/parameterInfo/TypeHints.kt index 0b972f6e121..a39e2849709 100644 --- a/idea/src/org/jetbrains/kotlin/idea/parameterInfo/TypeHints.kt +++ b/idea/src/org/jetbrains/kotlin/idea/parameterInfo/TypeHints.kt @@ -56,7 +56,7 @@ class ImportAwareClassifierNamePolicy( } 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 .takeWhile { it is ClassifierDescriptor }