From 9947bff2e11acdcecdc86873c472607607966e72 Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Thu, 13 Dec 2012 20:40:41 +0400 Subject: [PATCH] Simplified HtmlTabledDescriptorRenderer. Got rid of suspicious subclassing with overriding protected methods: passing ValueParametersHandler instead. --- .../jet/renderer/DescriptorRendererImpl.java | 66 ++++++++++----- .../HtmlTabledDescriptorRenderer.java | 84 ++++++++++--------- 2 files changed, 88 insertions(+), 62 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRendererImpl.java b/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRendererImpl.java index 73e3a15536e..e5d358788f8 100644 --- a/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRendererImpl.java +++ b/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRendererImpl.java @@ -110,13 +110,20 @@ public class DescriptorRendererImpl implements Renderer { private final RenderDeclarationDescriptorVisitor rootVisitor = new RenderDeclarationDescriptorVisitor(); private final boolean shortNames; + @Nullable + private final ValueParametersHandler handler; public DescriptorRendererImpl() { - this(false); + this(false, null); } public DescriptorRendererImpl(boolean shortNames) { + this(shortNames, null); + } + + public DescriptorRendererImpl(boolean shortNames, @Nullable ValueParametersHandler handler) { this.shortNames = shortNames; + this.handler = handler; } protected boolean hasDefaultValue(ValueParameterDescriptor descriptor) { @@ -301,33 +308,36 @@ public class DescriptorRendererImpl implements Renderer { return s; } - protected void renderValueParameters(FunctionDescriptor descriptor, StringBuilder builder) { - if (descriptor.getValueParameters().isEmpty()) { - renderEmptyValueParameters(builder); - } - for (Iterator iterator = descriptor.getValueParameters().iterator(); iterator.hasNext(); ) { - renderValueParameter(iterator.next(), !iterator.hasNext(), builder); - } - } - - protected void renderEmptyValueParameters(StringBuilder builder) { - builder.append("()"); - } - - protected void renderValueParameter(ValueParameterDescriptor parameterDescriptor, boolean isLast, StringBuilder builder) { - if (parameterDescriptor.getIndex() == 0) { - builder.append("("); - } - parameterDescriptor.accept(subVisitor, builder); - if (!isLast) { - builder.append(", "); + private void renderValueParameters(FunctionDescriptor function, StringBuilder builder) { + if (handler != null) { + handler.appendBeforeValueParameters(function, builder); + for (ValueParameterDescriptor parameter : function.getValueParameters()) { + handler.appendBeforeValueParameter(parameter, builder); + parameter.accept(subVisitor, builder); + handler.appendAfterValueParameter(parameter, builder); + } + handler.appendAfterValueParameters(function, builder); } else { + builder.append("("); + for (ValueParameterDescriptor parameter : function.getValueParameters()) { + parameter.accept(subVisitor, builder); + if (parameter.getIndex() != function.getValueParameters().size() - 1) { + builder.append(", "); + } + } builder.append(")"); } } public static class HtmlDescriptorRendererImpl extends DescriptorRendererImpl { + public HtmlDescriptorRendererImpl() { + super(); + } + + public HtmlDescriptorRendererImpl(boolean shortNames, @Nullable ValueParametersHandler handler) { + super(shortNames, handler); + } @Override protected String escape(String s) { @@ -671,4 +681,18 @@ public class DescriptorRendererImpl implements Renderer { } } } + + public interface ValueParametersHandler { + // by default, renders "(" + void appendBeforeValueParameters(@NotNull FunctionDescriptor function, @NotNull StringBuilder stringBuilder); + + // by default, renders ")" + void appendAfterValueParameters(@NotNull FunctionDescriptor function, @NotNull StringBuilder stringBuilder); + + // by default, renders nothing + void appendBeforeValueParameter(@NotNull ValueParameterDescriptor parameter, @NotNull StringBuilder stringBuilder); + + // by default, renders ", " if its not last parameter + void appendAfterValueParameter(@NotNull ValueParameterDescriptor parameter, @NotNull StringBuilder stringBuilder); + } } \ No newline at end of file diff --git a/idea/src/org/jetbrains/jet/plugin/highlighter/HtmlTabledDescriptorRenderer.java b/idea/src/org/jetbrains/jet/plugin/highlighter/HtmlTabledDescriptorRenderer.java index aa18bf6409d..c26d3f42584 100644 --- a/idea/src/org/jetbrains/jet/plugin/highlighter/HtmlTabledDescriptorRenderer.java +++ b/idea/src/org/jetbrains/jet/plugin/highlighter/HtmlTabledDescriptorRenderer.java @@ -19,11 +19,12 @@ package org.jetbrains.jet.plugin.highlighter; import com.google.common.base.Predicate; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; import org.jetbrains.jet.lang.descriptors.FunctionDescriptor; import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor; import org.jetbrains.jet.lang.diagnostics.rendering.TabledDescriptorRenderer; -import org.jetbrains.jet.lang.diagnostics.rendering.TabledDescriptorRenderer.TableRenderer.*; +import org.jetbrains.jet.lang.diagnostics.rendering.TabledDescriptorRenderer.TableRenderer.DescriptorRow; +import org.jetbrains.jet.lang.diagnostics.rendering.TabledDescriptorRenderer.TableRenderer.FunctionArgumentsRow; +import org.jetbrains.jet.lang.diagnostics.rendering.TabledDescriptorRenderer.TableRenderer.TableRow; import org.jetbrains.jet.lang.resolve.calls.inference.ConstraintPosition; import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.renderer.DescriptorRendererImpl; @@ -94,7 +95,8 @@ public class HtmlTabledDescriptorRenderer extends TabledDescriptorRenderer { tdColspan(result, rowText.toString(), rowsNumber); } if (row instanceof DescriptorRow) { - result.append(DESCRIPTOR_IN_TABLE.render(((DescriptorRow) row).descriptor)); + tdSpace(result); + tdRightBoldColspan(result, 2, DESCRIPTOR_IN_TABLE.render(((DescriptorRow) row).descriptor)); } if (row instanceof FunctionArgumentsRow) { FunctionArgumentsRow functionArgumentsRow = (FunctionArgumentsRow) row; @@ -149,54 +151,54 @@ public class HtmlTabledDescriptorRenderer extends TabledDescriptorRenderer { super(); } - public static final DescriptorRendererImpl DESCRIPTOR_IN_TABLE = new DescriptorRendererImpl.HtmlDescriptorRendererImpl() { + public static final DescriptorRendererImpl.ValueParametersHandler RENDERER_HANDLER = new DescriptorRendererImpl.ValueParametersHandler() { @Override - protected boolean shouldRenderDefinedIn() { - return false; + public void appendBeforeValueParameter(@NotNull ValueParameterDescriptor parameter, @NotNull StringBuilder stringBuilder) { + stringBuilder.append("
"); } @Override - protected boolean shouldRenderModifiers() { - return false; - } - - @NotNull - @Override - public String render(@NotNull DeclarationDescriptor declarationDescriptor) { - StringBuilder builder = new StringBuilder(); - tdSpace(builder); - tdRightBoldColspan(builder, 2, super.render(declarationDescriptor)); - return builder.toString(); - } - - @Override - protected void renderValueParameters(FunctionDescriptor descriptor, StringBuilder builder) { - //todo comment - builder.append("
"); - super.renderValueParameters(descriptor, builder); - builder.append("
"); - } - - @Override - protected void renderEmptyValueParameters(StringBuilder builder) { - tdBold(builder, "( )"); - } - - @Override - protected void renderValueParameter(ValueParameterDescriptor parameterDescriptor, boolean isLast, StringBuilder builder) { - if (parameterDescriptor.getIndex() == 0) { - tdBold(builder, "("); + public void appendAfterValueParameter(@NotNull ValueParameterDescriptor parameter, @NotNull StringBuilder stringBuilder) { + boolean last = ((FunctionDescriptor) parameter.getContainingDeclaration()).getValueParameters().size() - 1 == parameter.getIndex(); + if (!last) { + stringBuilder.append(","); } - StringBuilder parameterBuilder = new StringBuilder(); - parameterDescriptor.accept(super.subVisitor, parameterBuilder); + stringBuilder.append("
"); + } - tdRightBold(builder, parameterBuilder.toString() + (isLast ? "" : ",")); - if (isLast) { - tdBold(builder, ")"); + @Override + public void appendBeforeValueParameters(@NotNull FunctionDescriptor function, @NotNull StringBuilder stringBuilder) { + stringBuilder.append(""); + if (function.getValueParameters().isEmpty()) { + tdBold(stringBuilder, "( )"); } + else { + tdBold(stringBuilder, "("); + } + } + + @Override + public void appendAfterValueParameters(@NotNull FunctionDescriptor function, @NotNull StringBuilder stringBuilder) { + if (!function.getValueParameters().isEmpty()) { + tdBold(stringBuilder, ")"); + } + stringBuilder.append("
"); } }; + public static final DescriptorRendererImpl DESCRIPTOR_IN_TABLE = + new DescriptorRendererImpl.HtmlDescriptorRendererImpl(false, RENDERER_HANDLER) { + @Override + protected boolean shouldRenderDefinedIn() { + return false; + } + + @Override + protected boolean shouldRenderModifiers() { + return false; + } + }; + private static void td(StringBuilder builder, String text) { builder.append("
").append(text).append("
"); }