Minor: let 'Renderer'-helper return more specific type

This allows to easily re-use other renderers from 'Renderer'-block
(previously, one had to declare 'ContextDependentRenderer' just to get
hold of 'RenderingContext' just to call 'render(O, RenderingContext)'
from DiagnosticParameterRenderer, which would be unused anyways)

This commit introduces more specific subtype,
'ContextIndependentParameterRenderer', which exposes 'render(O)' method
for easy re-use.

Several (ab)uses of 'ContextDependentRenderer' have been removed
This commit is contained in:
Dmitry Savvinov
2019-08-21 18:28:33 +03:00
parent 8bfd30fc69
commit 45737e51fb
3 changed files with 12 additions and 6 deletions
@@ -20,8 +20,14 @@ interface DiagnosticParameterRenderer<in O> {
fun render(obj: O, renderingContext: RenderingContext): String
}
fun <O> Renderer(block: (O) -> String) = object : DiagnosticParameterRenderer<O> {
override fun render(obj: O, renderingContext: RenderingContext): String = block(obj)
interface ContextIndependentParameterRenderer<in O> : DiagnosticParameterRenderer<O> {
override fun render(obj: O, renderingContext: RenderingContext): String = render(obj)
fun render(obj: O): String
}
fun <O> Renderer(block: (O) -> String) = object : ContextIndependentParameterRenderer<O> {
override fun render(obj: O): String = block(obj)
}
fun <O> ContextDependentRenderer(block: (O, RenderingContext) -> String) = object : DiagnosticParameterRenderer<O> {
@@ -111,8 +111,8 @@ object Renderers {
}
@JvmField
val CAPITALIZED_DECLARATION_NAME_WITH_KIND_AND_PLATFORM = ContextDependentRenderer<DeclarationDescriptor> { descriptor, context ->
val declarationWithNameAndKind = DECLARATION_NAME_WITH_KIND.render(descriptor, context)
val CAPITALIZED_DECLARATION_NAME_WITH_KIND_AND_PLATFORM = Renderer<DeclarationDescriptor> { descriptor ->
val declarationWithNameAndKind = DECLARATION_NAME_WITH_KIND.render(descriptor)
val withPlatform = if (descriptor is MemberDescriptor && descriptor.isActual)
"actual $declarationWithNameAndKind"
else
@@ -86,8 +86,8 @@ object IdeRenderers {
}
@JvmField
val HTML_THROWABLE = ContextDependentRenderer<Throwable> { throwable, context ->
Renderers.THROWABLE.render(throwable, context).replace("\n", "<br/>")
val HTML_THROWABLE = Renderer<Throwable> { throwable ->
Renderers.THROWABLE.render(throwable).replace("\n", "<br/>")
}
@JvmField