From ef550e1f21685e06c52d0b514acc2b37b6a5cad1 Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Fri, 5 Jun 2015 18:46:42 +0300 Subject: [PATCH] Reduced number of constant renderers in DescriptorRenderer --- .../rendering/DefaultErrorMessages.java | 19 ++++++++- .../rendering/DiagnosticRendererUtil.kt | 1 + .../kotlin/renderer/DescriptorRenderer.kt | 39 ------------------- .../idea/highlighter/IdeErrorMessages.java | 2 +- .../kotlin/idea/highlighter/IdeRenderers.kt | 8 +++- .../kotlin/idea/highlighter/renderersUtil.kt | 11 +++++- .../idea/KotlinQuickDocumentationProvider.kt | 9 ++--- 7 files changed, 39 insertions(+), 50 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java index 17469a4fd68..6cc5cf64a2e 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.diagnostics.rendering; import com.intellij.openapi.extensions.ExtensionPointName; +import kotlin.Unit; import kotlin.jvm.functions.Function1; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -29,6 +30,8 @@ import org.jetbrains.kotlin.lexer.JetModifierKeywordToken; import org.jetbrains.kotlin.psi.JetExpression; import org.jetbrains.kotlin.psi.JetSimpleNameExpression; import org.jetbrains.kotlin.psi.JetTypeConstraint; +import org.jetbrains.kotlin.renderer.DescriptorRenderer; +import org.jetbrains.kotlin.renderer.DescriptorRendererOptions; import org.jetbrains.kotlin.renderer.MultiRenderer; import org.jetbrains.kotlin.renderer.Renderer; import org.jetbrains.kotlin.resolve.varianceChecker.VarianceChecker.VarianceConflictDiagnosticData; @@ -94,6 +97,18 @@ public class DefaultErrorMessages { return null; } + public static final DescriptorRenderer DEPRECATION_RENDERER = DescriptorRenderer.ONLY_NAMES_WITH_SHORT_TYPES.withOptions( + new Function1() { + @Override + public Unit invoke(DescriptorRendererOptions options) { + options.setWithoutTypeParameters(false); + options.setReceiverAfterName(false); + options.setRenderAccessors(true); + return Unit.INSTANCE$; + } + } + ); + static { MAP.put(UNRESOLVED_REFERENCE, "Unresolved reference: {0}", ELEMENT_TEXT); @@ -268,8 +283,8 @@ public class DefaultErrorMessages { MAP.put(MANY_COMPANION_OBJECTS, "Only one companion object is allowed per class"); MAP.put(COMPANION_OBJECT_NOT_ALLOWED, "A companion object is not allowed here"); - MAP.put(DEPRECATED_SYMBOL, "''{0}'' is deprecated.", DEPRECATION); - MAP.put(DEPRECATED_SYMBOL_WITH_MESSAGE, "''{0}'' is deprecated. {1}", DEPRECATION, STRING); + MAP.put(DEPRECATED_SYMBOL, "''{0}'' is deprecated.", DEPRECATION_RENDERER); + MAP.put(DEPRECATED_SYMBOL_WITH_MESSAGE, "''{0}'' is deprecated. {1}", DEPRECATION_RENDERER, STRING); MAP.put(LOCAL_OBJECT_NOT_ALLOWED, "Named object ''{0}'' is a singleton and cannot be local. Try to use anonymous object instead", NAME); MAP.put(LOCAL_ENUM_NOT_ALLOWED, "Enum class ''{0}'' cannot be local", NAME); diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DiagnosticRendererUtil.kt b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DiagnosticRendererUtil.kt index 9711dead0df..16aa31fcdf9 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DiagnosticRendererUtil.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DiagnosticRendererUtil.kt @@ -25,3 +25,4 @@ public fun

renderParameter(parameter: P, renderer: Renderer

?): Any = rend public fun ClassDescriptor.renderKindWithName(): String = DescriptorRenderer.getClassKindPrefix(this) + " '" + getName() + "'" public fun ClassDescriptor.renderKind(): String = DescriptorRenderer.getClassKindPrefix(this) + diff --git a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRenderer.kt b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRenderer.kt index 044db3173b8..01a38387c11 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRenderer.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRenderer.kt @@ -99,12 +99,6 @@ public interface DescriptorRenderer : Renderer { parameterNameRenderingPolicy = ParameterNameRenderingPolicy.ONLY_NON_SYNTHESIZED } - public val STARTS_FROM_NAME: DescriptorRenderer = withOptions { - withDefinedIn = false - modifiers = emptySet() - startFromName = true - } - public val ONLY_NAMES_WITH_SHORT_TYPES: DescriptorRenderer = withOptions { withDefinedIn = false modifiers = emptySet() @@ -133,43 +127,10 @@ public interface DescriptorRenderer : Renderer { flexibleTypesForCode = true } - public val HTML_COMPACT_WITH_MODIFIERS: DescriptorRenderer = withOptions { - withDefinedIn = false - textFormat = RenderingFormat.HTML - } - - public val HTML_NAMES_WITH_SHORT_TYPES: DescriptorRenderer = withOptions { - withDefinedIn = false - nameShortness = NameShortness.SHORT - renderCompanionObjectName = true - textFormat = RenderingFormat.HTML - } - public val HTML: DescriptorRenderer = withOptions { textFormat = RenderingFormat.HTML } - public val HTML_FOR_UNINFERRED_TYPE_PARAMS: DescriptorRenderer = withOptions { - uninferredTypeParameterAsName = true - modifiers = emptySet() - nameShortness = NameShortness.SHORT - textFormat = RenderingFormat.HTML - } - - public val DEPRECATION: DescriptorRenderer = withOptions { - withDefinedIn = false - modifiers = emptySet() - nameShortness = NameShortness.SHORT - withoutTypeParameters = false - parameterNameRenderingPolicy = ParameterNameRenderingPolicy.NONE - receiverAfterName = false - renderCompanionObjectName = true - renderAccessors = true - withoutSuperTypes = true - renderDefaultValues = false - startFromName = true - } - public fun getClassKindPrefix(klass: ClassDescriptor): String { if (klass.isCompanionObject()) { return "companion object" diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/IdeErrorMessages.java b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/IdeErrorMessages.java index 583e59ad901..f0ac21fd13e 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/IdeErrorMessages.java +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/IdeErrorMessages.java @@ -110,7 +110,7 @@ public class IdeErrorMessages { MAP.put(MANY_IMPL_MEMBER_NOT_IMPLEMENTED, "{0} must override {1}
because it inherits many implementations of it", RENDER_CLASS_OR_OBJECT, DescriptorRenderer.HTML); MAP.put(CONFLICTING_OVERLOADS, "''{0}''
is already defined in {1}", - DescriptorRenderer.HTML_COMPACT_WITH_MODIFIERS, STRING); + IdeRenderers.HTML_COMPACT_WITH_MODIFIERS, STRING); MAP.put(RESULT_TYPE_MISMATCH, "Function return type mismatch." + "" + diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/IdeRenderers.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/IdeRenderers.kt index 7dba99672e8..55647ab662b 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/IdeRenderers.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/IdeRenderers.kt @@ -70,14 +70,18 @@ public object IdeRenderers { DescriptorRenderer.HTML.renderType(returnType) } - public val HTML_CONFLICTING_JVM_DECLARATIONS_DATA: Renderer = Renderer { + public val HTML_COMPACT_WITH_MODIFIERS: DescriptorRenderer = DescriptorRenderer.HTML.withOptions { + withDefinedIn = false + } + + public val HTML_CONFLICTING_JVM_DECLARATIONS_DATA: Renderer = Renderer { data: ConflictingJvmDeclarationsData -> val conflicts = data.signatureOrigins .map { it.descriptor } .filterNotNull() .sortBy(MemberComparator.INSTANCE) - .joinToString("") { "
  • " + DescriptorRenderer.HTML_COMPACT_WITH_MODIFIERS.render(it) + "
  • \n" } + .joinToString("") { "
  • " + HTML_COMPACT_WITH_MODIFIERS.render(it) + "
  • \n" } "The following declarations have the same JVM signature (${data.signature.name}${data.signature.desc}):
    \n
      \n$conflicts
    " } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/renderersUtil.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/renderersUtil.kt index c61419240c6..6367c643095 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/renderersUtil.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/renderersUtil.kt @@ -21,6 +21,8 @@ import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.renderer.DescriptorRenderer +import org.jetbrains.kotlin.renderer.NameShortness +import org.jetbrains.kotlin.renderer.RenderingFormat import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.resolve.calls.callUtil.hasTypeMismatchErrorOnParameter import org.jetbrains.kotlin.resolve.calls.callUtil.hasUnmappedArguments @@ -36,8 +38,15 @@ public fun renderError(o: Any): String = RED_TEMPLATE.format(o) public fun renderStrong(o: Any, error: Boolean): String = (if (error) RED_TEMPLATE else STRONG_TEMPLATE).format(o) +private val HTML_FOR_UNINFERRED_TYPE_PARAMS: DescriptorRenderer = DescriptorRenderer.withOptions { + uninferredTypeParameterAsName = true + modifiers = emptySet() + nameShortness = NameShortness.SHORT + textFormat = RenderingFormat.HTML +} + fun renderResolvedCall(resolvedCall: ResolvedCall): String { - val htmlRenderer = DescriptorRenderer.HTML_FOR_UNINFERRED_TYPE_PARAMS + val htmlRenderer = HTML_FOR_UNINFERRED_TYPE_PARAMS val stringBuilder = StringBuilder("") val indent = "  " diff --git a/idea/src/org/jetbrains/kotlin/idea/KotlinQuickDocumentationProvider.kt b/idea/src/org/jetbrains/kotlin/idea/KotlinQuickDocumentationProvider.kt index fe49bff39b8..65e97937ff6 100644 --- a/idea/src/org/jetbrains/kotlin/idea/KotlinQuickDocumentationProvider.kt +++ b/idea/src/org/jetbrains/kotlin/idea/KotlinQuickDocumentationProvider.kt @@ -83,13 +83,12 @@ public class KotlinQuickDocumentationProvider : AbstractDocumentationProvider() companion object { private val LOG = Logger.getInstance(javaClass()) - val quickDocNameFormat = DescriptorRenderer.withOptions { - withDefinedIn = true + private val DESCRIPTOR_RENDERER = DescriptorRenderer.HTML.withOptions { nameShortness = NameShortness.SHORT renderCompanionObjectName = true - textFormat = RenderingFormat.HTML } + private val MIX_KOTLIN_TO_JAVA_RENDERER = DESCRIPTOR_RENDERER.withOptions { withDefinedIn = false } private fun getText(element: PsiElement, originalElement: PsiElement?, quickNavigation: Boolean): String? { if (element is JetDeclaration) { @@ -126,7 +125,7 @@ public class KotlinQuickDocumentationProvider : AbstractDocumentationProvider() return "No documentation available" } - var renderedDecl = quickDocNameFormat.render(declarationDescriptor) + var renderedDecl = DESCRIPTOR_RENDERER.render(declarationDescriptor) if (!quickNavigation) { renderedDecl = "
    " + renderedDecl + "
    " } @@ -141,7 +140,7 @@ public class KotlinQuickDocumentationProvider : AbstractDocumentationProvider() private fun mixKotlinToJava(declarationDescriptor: DeclarationDescriptor, element: PsiElement, originalElement: PsiElement?): String? { val originalInfo = JavaDocumentationProvider().getQuickNavigateInfo(element, originalElement) if (originalInfo != null) { - val renderedDecl = DescriptorRenderer.HTML_NAMES_WITH_SHORT_TYPES.render(declarationDescriptor) + val renderedDecl = MIX_KOTLIN_TO_JAVA_RENDERER.render(declarationDescriptor) return renderedDecl + "
    Java declaration:
    " + originalInfo }
    Expected:{1}