Simplified HtmlTabledDescriptorRenderer.
Got rid of suspicious subclassing with overriding protected methods: passing ValueParametersHandler instead.
This commit is contained in:
@@ -110,13 +110,20 @@ public class DescriptorRendererImpl implements Renderer<DeclarationDescriptor> {
|
|||||||
private final RenderDeclarationDescriptorVisitor rootVisitor = new RenderDeclarationDescriptorVisitor();
|
private final RenderDeclarationDescriptorVisitor rootVisitor = new RenderDeclarationDescriptorVisitor();
|
||||||
|
|
||||||
private final boolean shortNames;
|
private final boolean shortNames;
|
||||||
|
@Nullable
|
||||||
|
private final ValueParametersHandler handler;
|
||||||
|
|
||||||
public DescriptorRendererImpl() {
|
public DescriptorRendererImpl() {
|
||||||
this(false);
|
this(false, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public DescriptorRendererImpl(boolean shortNames) {
|
public DescriptorRendererImpl(boolean shortNames) {
|
||||||
|
this(shortNames, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public DescriptorRendererImpl(boolean shortNames, @Nullable ValueParametersHandler handler) {
|
||||||
this.shortNames = shortNames;
|
this.shortNames = shortNames;
|
||||||
|
this.handler = handler;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean hasDefaultValue(ValueParameterDescriptor descriptor) {
|
protected boolean hasDefaultValue(ValueParameterDescriptor descriptor) {
|
||||||
@@ -301,33 +308,36 @@ public class DescriptorRendererImpl implements Renderer<DeclarationDescriptor> {
|
|||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void renderValueParameters(FunctionDescriptor descriptor, StringBuilder builder) {
|
private void renderValueParameters(FunctionDescriptor function, StringBuilder builder) {
|
||||||
if (descriptor.getValueParameters().isEmpty()) {
|
if (handler != null) {
|
||||||
renderEmptyValueParameters(builder);
|
handler.appendBeforeValueParameters(function, builder);
|
||||||
}
|
for (ValueParameterDescriptor parameter : function.getValueParameters()) {
|
||||||
for (Iterator<ValueParameterDescriptor> iterator = descriptor.getValueParameters().iterator(); iterator.hasNext(); ) {
|
handler.appendBeforeValueParameter(parameter, builder);
|
||||||
renderValueParameter(iterator.next(), !iterator.hasNext(), builder);
|
parameter.accept(subVisitor, builder);
|
||||||
}
|
handler.appendAfterValueParameter(parameter, builder);
|
||||||
}
|
}
|
||||||
|
handler.appendAfterValueParameters(function, 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(", ");
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
builder.append("(");
|
||||||
|
for (ValueParameterDescriptor parameter : function.getValueParameters()) {
|
||||||
|
parameter.accept(subVisitor, builder);
|
||||||
|
if (parameter.getIndex() != function.getValueParameters().size() - 1) {
|
||||||
|
builder.append(", ");
|
||||||
|
}
|
||||||
|
}
|
||||||
builder.append(")");
|
builder.append(")");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class HtmlDescriptorRendererImpl extends DescriptorRendererImpl {
|
public static class HtmlDescriptorRendererImpl extends DescriptorRendererImpl {
|
||||||
|
public HtmlDescriptorRendererImpl() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
public HtmlDescriptorRendererImpl(boolean shortNames, @Nullable ValueParametersHandler handler) {
|
||||||
|
super(shortNames, handler);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected String escape(String s) {
|
protected String escape(String s) {
|
||||||
@@ -671,4 +681,18 @@ public class DescriptorRendererImpl implements Renderer<DeclarationDescriptor> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -19,11 +19,12 @@ package org.jetbrains.jet.plugin.highlighter;
|
|||||||
import com.google.common.base.Predicate;
|
import com.google.common.base.Predicate;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
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.FunctionDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor;
|
import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor;
|
||||||
import org.jetbrains.jet.lang.diagnostics.rendering.TabledDescriptorRenderer;
|
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.resolve.calls.inference.ConstraintPosition;
|
||||||
import org.jetbrains.jet.lang.types.JetType;
|
import org.jetbrains.jet.lang.types.JetType;
|
||||||
import org.jetbrains.jet.renderer.DescriptorRendererImpl;
|
import org.jetbrains.jet.renderer.DescriptorRendererImpl;
|
||||||
@@ -94,7 +95,8 @@ public class HtmlTabledDescriptorRenderer extends TabledDescriptorRenderer {
|
|||||||
tdColspan(result, rowText.toString(), rowsNumber);
|
tdColspan(result, rowText.toString(), rowsNumber);
|
||||||
}
|
}
|
||||||
if (row instanceof DescriptorRow) {
|
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) {
|
if (row instanceof FunctionArgumentsRow) {
|
||||||
FunctionArgumentsRow functionArgumentsRow = (FunctionArgumentsRow) row;
|
FunctionArgumentsRow functionArgumentsRow = (FunctionArgumentsRow) row;
|
||||||
@@ -149,54 +151,54 @@ public class HtmlTabledDescriptorRenderer extends TabledDescriptorRenderer {
|
|||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final DescriptorRendererImpl DESCRIPTOR_IN_TABLE = new DescriptorRendererImpl.HtmlDescriptorRendererImpl() {
|
public static final DescriptorRendererImpl.ValueParametersHandler RENDERER_HANDLER = new DescriptorRendererImpl.ValueParametersHandler() {
|
||||||
@Override
|
@Override
|
||||||
protected boolean shouldRenderDefinedIn() {
|
public void appendBeforeValueParameter(@NotNull ValueParameterDescriptor parameter, @NotNull StringBuilder stringBuilder) {
|
||||||
return false;
|
stringBuilder.append("<td align=\"right\"><div style=\"white-space:nowrap;font-weight:bold;\">");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean shouldRenderModifiers() {
|
public void appendAfterValueParameter(@NotNull ValueParameterDescriptor parameter, @NotNull StringBuilder stringBuilder) {
|
||||||
return false;
|
boolean last = ((FunctionDescriptor) parameter.getContainingDeclaration()).getValueParameters().size() - 1 == parameter.getIndex();
|
||||||
}
|
if (!last) {
|
||||||
|
stringBuilder.append(",");
|
||||||
@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("</div></td>");
|
|
||||||
super.renderValueParameters(descriptor, builder);
|
|
||||||
builder.append("<td><div style=\"white-space:nowrap;font-weight:bold;\">");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void renderEmptyValueParameters(StringBuilder builder) {
|
|
||||||
tdBold(builder, "( )");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void renderValueParameter(ValueParameterDescriptor parameterDescriptor, boolean isLast, StringBuilder builder) {
|
|
||||||
if (parameterDescriptor.getIndex() == 0) {
|
|
||||||
tdBold(builder, "(");
|
|
||||||
}
|
}
|
||||||
StringBuilder parameterBuilder = new StringBuilder();
|
stringBuilder.append("</div></td>");
|
||||||
parameterDescriptor.accept(super.subVisitor, parameterBuilder);
|
}
|
||||||
|
|
||||||
tdRightBold(builder, parameterBuilder.toString() + (isLast ? "" : ","));
|
@Override
|
||||||
if (isLast) {
|
public void appendBeforeValueParameters(@NotNull FunctionDescriptor function, @NotNull StringBuilder stringBuilder) {
|
||||||
tdBold(builder, ")");
|
stringBuilder.append("</div></td>");
|
||||||
|
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("<td><div style=\"white-space:nowrap;font-weight:bold;\">");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
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) {
|
private static void td(StringBuilder builder, String text) {
|
||||||
builder.append("<td><div style=\"white-space:nowrap;\">").append(text).append("</div></td>");
|
builder.append("<td><div style=\"white-space:nowrap;\">").append(text).append("</div></td>");
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user