diff --git a/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRenderer.java b/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRenderer.java index 69db8d5598a..1d892326b72 100644 --- a/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRenderer.java +++ b/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRenderer.java @@ -55,17 +55,36 @@ public interface DescriptorRenderer extends Renderer { PLAIN, HTML } + /** @see DefaultValueParameterHandler */ 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); } + + class DefaultValueParameterHandler implements ValueParametersHandler { + @Override + public void appendBeforeValueParameters(@NotNull FunctionDescriptor function, @NotNull StringBuilder stringBuilder) { + stringBuilder.append("("); + } + + @Override + public void appendAfterValueParameters(@NotNull FunctionDescriptor function, @NotNull StringBuilder stringBuilder) { + stringBuilder.append(")"); + } + + @Override + public void appendBeforeValueParameter(@NotNull ValueParameterDescriptor parameter, @NotNull StringBuilder stringBuilder) { + } + + @Override + public void appendAfterValueParameter(@NotNull ValueParameterDescriptor parameter, @NotNull StringBuilder stringBuilder) { + FunctionDescriptor function = (FunctionDescriptor) parameter.getContainingDeclaration(); + if (parameter.getIndex() != function.getValueParameters().size() - 1) { + stringBuilder.append(", "); + } + } + } } diff --git a/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRendererBuilder.java b/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRendererBuilder.java index 295b899d0e9..90b45984a46 100644 --- a/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRendererBuilder.java +++ b/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRendererBuilder.java @@ -17,7 +17,6 @@ package org.jetbrains.jet.renderer; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; public class DescriptorRendererBuilder { private boolean shortNames = false; @@ -25,8 +24,8 @@ public class DescriptorRendererBuilder { private boolean modifiers = true; private boolean startFromName = false; private boolean debugMode = false; - @Nullable - private DescriptorRenderer.ValueParametersHandler valueParametersHandler = null; + @NotNull + private DescriptorRenderer.ValueParametersHandler valueParametersHandler = new DescriptorRenderer.DefaultValueParameterHandler(); @NotNull private DescriptorRenderer.TextFormat textFormat = DescriptorRenderer.TextFormat.PLAIN; @@ -58,7 +57,7 @@ public class DescriptorRendererBuilder { return this; } - public DescriptorRendererBuilder setValueParametersHandler(@Nullable DescriptorRenderer.ValueParametersHandler valueParametersHandler) { + public DescriptorRendererBuilder setValueParametersHandler(@NotNull DescriptorRenderer.ValueParametersHandler valueParametersHandler) { this.valueParametersHandler = valueParametersHandler; return this; } diff --git a/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRendererImpl.java b/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRendererImpl.java index 8ec151c3126..dc7a6d0edb8 100644 --- a/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRendererImpl.java +++ b/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRendererImpl.java @@ -20,7 +20,6 @@ import com.google.common.collect.Lists; import com.google.common.collect.Sets; import com.intellij.psi.tree.IElementType; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.lang.resolve.name.FqName; @@ -51,7 +50,7 @@ public class DescriptorRendererImpl implements DescriptorRenderer { private final boolean modifiers; private final boolean startFromName; private final boolean debugMode; - @Nullable + @NotNull private final ValueParametersHandler handler; @NotNull private final TextFormat textFormat; @@ -62,7 +61,7 @@ public class DescriptorRendererImpl implements DescriptorRenderer { boolean modifiers, boolean startFromName, boolean debugMode, - @Nullable ValueParametersHandler handler, + @NotNull ValueParametersHandler handler, @NotNull TextFormat textFormat ) { this.shortNames = shortNames; @@ -423,25 +422,13 @@ public class DescriptorRendererImpl implements DescriptorRenderer { } private void renderValueParameters(FunctionDescriptor function, StringBuilder builder) { - if (handler != null) { - handler.appendBeforeValueParameters(function, builder); - for (ValueParameterDescriptor parameter : function.getValueParameters()) { - handler.appendBeforeValueParameter(parameter, builder); - renderValueParameter(parameter, builder, false); - handler.appendAfterValueParameter(parameter, builder); - } - handler.appendAfterValueParameters(function, builder); - } - else { - builder.append("("); - for (ValueParameterDescriptor parameter : function.getValueParameters()) { - renderValueParameter(parameter, builder, false); - if (parameter.getIndex() != function.getValueParameters().size() - 1) { - builder.append(", "); - } - } - builder.append(")"); + handler.appendBeforeValueParameters(function, builder); + for (ValueParameterDescriptor parameter : function.getValueParameters()) { + handler.appendBeforeValueParameter(parameter, builder); + renderValueParameter(parameter, builder, false); + handler.appendAfterValueParameter(parameter, builder); } + handler.appendAfterValueParameters(function, builder); } /* VARIABLES */ @@ -634,6 +621,5 @@ public class DescriptorRendererImpl implements DescriptorRenderer { renderClass(descriptor, builder); return null; } - } } \ No newline at end of file