From 4956b24810e076ea6814949e4e8bb2ba27b1ba12 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Mon, 6 Apr 2015 22:01:45 +0300 Subject: [PATCH] Merge two DescriptorRenderer parameters about parameter name rendering Also disable parameter name rendering completely in AbstractJvmRuntimeDescriptorLoaderTest because they can't be obtained anyway in reflection --- .../AbstractJvmRuntimeDescriptorLoaderTest.kt | 2 +- .../kotlin/renderer/DescriptorRenderer.java | 14 +++++-- .../renderer/DescriptorRendererBuilder.java | 24 +++--------- .../renderer/DescriptorRendererImpl.java | 39 ++++++++++++------- 4 files changed, 41 insertions(+), 38 deletions(-) diff --git a/compiler/tests/org/jetbrains/kotlin/jvm/runtime/AbstractJvmRuntimeDescriptorLoaderTest.kt b/compiler/tests/org/jetbrains/kotlin/jvm/runtime/AbstractJvmRuntimeDescriptorLoaderTest.kt index 964607b4e86..32959dbb166 100644 --- a/compiler/tests/org/jetbrains/kotlin/jvm/runtime/AbstractJvmRuntimeDescriptorLoaderTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/jvm/runtime/AbstractJvmRuntimeDescriptorLoaderTest.kt @@ -65,7 +65,7 @@ public abstract class AbstractJvmRuntimeDescriptorLoaderTest : TestCaseWithTmpdi "org.jetbrains.annotations.ReadOnly" ).map { FqName(it) }) .setOverrideRenderingPolicy(DescriptorRenderer.OverrideRenderingPolicy.RENDER_OPEN_OVERRIDE) - .setIncludeSynthesizedParameterNames(false) + .setParameterNameRenderingPolicy(DescriptorRenderer.ParameterNameRenderingPolicy.NONE) .setIncludePropertyConstant(false) .setVerbose(true) .build() diff --git a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRenderer.java b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRenderer.java index a8f65fec1b1..088c2202b90 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRenderer.java +++ b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRenderer.java @@ -39,7 +39,7 @@ public interface DescriptorRenderer extends Renderer { DescriptorRenderer COMPACT_WITH_SHORT_TYPES = new DescriptorRendererBuilder() .setModifiers() .setNameShortness(NameShortness.SHORT) - .setIncludeSynthesizedParameterNames(false).build(); + .setParameterNameRenderingPolicy(ParameterNameRenderingPolicy.ONLY_NON_SYNTHESIZED).build(); DescriptorRenderer STARTS_FROM_NAME = new DescriptorRendererBuilder() .setWithDefinedIn(false) @@ -51,7 +51,7 @@ public interface DescriptorRenderer extends Renderer { .setModifiers() .setNameShortness(NameShortness.SHORT) .setWithoutTypeParameters(true) - .setWithoutFunctionParameterNames(true) + .setParameterNameRenderingPolicy(ParameterNameRenderingPolicy.NONE) .setReceiverAfterName(true) .setRenderCompanionObjectName(true) .setWithoutSuperTypes(true) @@ -59,8 +59,10 @@ public interface DescriptorRenderer extends Renderer { DescriptorRenderer FQ_NAMES_IN_TYPES = new DescriptorRendererBuilder().build(); - DescriptorRenderer SHORT_NAMES_IN_TYPES = new DescriptorRendererBuilder().setNameShortness( - NameShortness.SHORT).setIncludeSynthesizedParameterNames(false).build(); + DescriptorRenderer SHORT_NAMES_IN_TYPES = new DescriptorRendererBuilder() + .setNameShortness(NameShortness.SHORT) + .setParameterNameRenderingPolicy(ParameterNameRenderingPolicy.ONLY_NON_SYNTHESIZED) + .build(); DescriptorRenderer DEBUG_TEXT = new DescriptorRendererBuilder() .setDebugMode(true) @@ -122,6 +124,10 @@ public interface DescriptorRenderer extends Renderer { RENDER_OVERRIDE, RENDER_OPEN, RENDER_OPEN_OVERRIDE } + enum ParameterNameRenderingPolicy { + ALL, ONLY_NON_SYNTHESIZED, NONE + } + enum Modifier { VISIBILITY, MODALITY, OVERRIDE, ANNOTATIONS, INNER, MEMBER_KIND } diff --git a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererBuilder.java b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererBuilder.java index 5e9121e1f62..0dc40653632 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererBuilder.java +++ b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererBuilder.java @@ -41,8 +41,6 @@ public class DescriptorRendererBuilder { private boolean prettyFunctionTypes = true; private boolean uninferredTypeParameterAsName = false; private boolean includePropertyConstant = false; - private boolean includeSynthesizedParameterNames = true; - private boolean withoutFunctionParameterNames = false; private boolean withoutTypeParameters = false; private boolean withoutSuperTypes = false; private Function1 typeNormalizer = new Function1() { @@ -54,14 +52,10 @@ public class DescriptorRendererBuilder { private boolean renderDefaultValues = true; private boolean flexibleTypesForCode = false; private boolean secondaryConstructorsAsPrimary = true; - - @NotNull private DescriptorRenderer.OverrideRenderingPolicy overrideRenderingPolicy = DescriptorRenderer.OverrideRenderingPolicy.RENDER_OPEN; - @NotNull private DescriptorRenderer.ValueParametersHandler valueParametersHandler = new DescriptorRenderer.DefaultValueParameterHandler(); - @NotNull private DescriptorRenderer.TextFormat textFormat = DescriptorRenderer.TextFormat.PLAIN; - @NotNull + private DescriptorRenderer.ParameterNameRenderingPolicy parameterNameRenderingPolicy = DescriptorRenderer.ParameterNameRenderingPolicy.ALL; private Collection excludedAnnotationClasses = Collections.emptyList(); private boolean receiverAfterName = false; private boolean renderCompanionObjectName = false; @@ -177,8 +171,8 @@ public class DescriptorRendererBuilder { } @NotNull - public DescriptorRendererBuilder setIncludeSynthesizedParameterNames(boolean includeSynthesizedParameterNames) { - this.includeSynthesizedParameterNames = includeSynthesizedParameterNames; + public DescriptorRendererBuilder setParameterNameRenderingPolicy(@NotNull DescriptorRenderer.ParameterNameRenderingPolicy parameterNameRenderingPolicy) { + this.parameterNameRenderingPolicy = parameterNameRenderingPolicy; return this; } @@ -188,12 +182,6 @@ public class DescriptorRendererBuilder { return this; } - @NotNull - public DescriptorRendererBuilder setWithoutFunctionParameterNames(boolean withoutFunctionParameterNames) { - this.withoutFunctionParameterNames = withoutFunctionParameterNames; - return this; - } - @NotNull public DescriptorRendererBuilder setReceiverAfterName(boolean receiverAfterName) { this.receiverAfterName = receiverAfterName; @@ -242,9 +230,9 @@ public class DescriptorRendererBuilder { nameShortness, withDefinedIn, modifiers, startFromName, debugMode, classWithPrimaryConstructor, verbose, unitReturnType, normalizedVisibilities, showInternalKeyword, prettyFunctionTypes, uninferredTypeParameterAsName, overrideRenderingPolicy, valueParametersHandler, textFormat, excludedAnnotationClasses, includePropertyConstant, - includeSynthesizedParameterNames, withoutFunctionParameterNames, withoutTypeParameters, receiverAfterName, - renderCompanionObjectName, withoutSuperTypes, typeNormalizer, renderDefaultValues, flexibleTypesForCode, - secondaryConstructorsAsPrimary); + parameterNameRenderingPolicy, withoutTypeParameters, receiverAfterName, renderCompanionObjectName, withoutSuperTypes, + typeNormalizer, renderDefaultValues, flexibleTypesForCode, secondaryConstructorsAsPrimary + ); } } diff --git a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.java b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.java index 1a77e3998f2..a03ad6a509a 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.java +++ b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.java @@ -60,24 +60,18 @@ public class DescriptorRendererImpl implements DescriptorRenderer { private final boolean showInternalKeyword; private final boolean prettyFunctionTypes; private final boolean uninferredTypeParameterAsName; - private final boolean includeSynthesizedParameterNames; - private final boolean withoutFunctionParameterNames; + private final ParameterNameRenderingPolicy parameterNameRenderingPolicy; private final boolean withoutTypeParameters; private final boolean renderCompanionObjectName; private final boolean withoutSuperTypes; private final boolean receiverAfterName; private final boolean renderDefaultValues; private final boolean flexibleTypesForCode; - - @NotNull private final OverrideRenderingPolicy overrideRenderingPolicy; - @NotNull private final ValueParametersHandler handler; - @NotNull private final TextFormat textFormat; private final boolean includePropertyConstant; private final boolean secondaryConstructorsAsPrimary; - @NotNull private final Set excludedAnnotationClasses; /* package */ DescriptorRendererImpl( @@ -98,8 +92,7 @@ public class DescriptorRendererImpl implements DescriptorRenderer { @NotNull TextFormat textFormat, @NotNull Collection excludedAnnotationClasses, boolean includePropertyConstant, - boolean includeSynthesizedParameterNames, - boolean withoutFunctionParameterNames, + @NotNull ParameterNameRenderingPolicy parameterNameRenderingPolicy, boolean withoutTypeParameters, boolean receiverAfterName, boolean renderCompanionObjectName, @@ -127,8 +120,7 @@ public class DescriptorRendererImpl implements DescriptorRenderer { this.excludedAnnotationClasses = new HashSet(excludedAnnotationClasses); this.prettyFunctionTypes = prettyFunctionTypes; this.uninferredTypeParameterAsName = uninferredTypeParameterAsName; - this.includeSynthesizedParameterNames = includeSynthesizedParameterNames; - this.withoutFunctionParameterNames = withoutFunctionParameterNames; + this.parameterNameRenderingPolicy = parameterNameRenderingPolicy; this.withoutTypeParameters = withoutTypeParameters; this.receiverAfterName = receiverAfterName; this.renderCompanionObjectName = renderCompanionObjectName; @@ -471,7 +463,7 @@ public class DescriptorRendererImpl implements DescriptorRenderer { return renderName(cd.getName()); } else if (cd instanceof ClassDescriptor) { - return renderClassifierName((ClassDescriptor) cd); + return renderClassifierName(cd); } else { assert cd == null: "Unexpected classifier: " + cd.getClass(); @@ -870,8 +862,7 @@ public class DescriptorRendererImpl implements DescriptorRenderer { } private void renderValueParameters(@NotNull FunctionDescriptor function, @NotNull StringBuilder builder) { - boolean includeNames = !withoutFunctionParameterNames && - (includeSynthesizedParameterNames || !function.hasSynthesizedParameterNames()); + boolean includeNames = shouldRenderParameterNames(function); handler.appendBeforeValueParameters(function, builder); for (ValueParameterDescriptor parameter : function.getValueParameters()) { handler.appendBeforeValueParameter(parameter, builder); @@ -881,8 +872,26 @@ public class DescriptorRendererImpl implements DescriptorRenderer { handler.appendAfterValueParameters(function, builder); } + private boolean shouldRenderParameterNames(@NotNull FunctionDescriptor function) { + switch (parameterNameRenderingPolicy) { + case ALL: + return true; + case ONLY_NON_SYNTHESIZED: + return !function.hasSynthesizedParameterNames(); + case NONE: + return false; + default: + throw new UnsupportedOperationException(parameterNameRenderingPolicy.toString()); + } + } + /* VARIABLES */ - private void renderValueParameter(@NotNull ValueParameterDescriptor valueParameter, boolean includeName, @NotNull StringBuilder builder, boolean topLevel) { + private void renderValueParameter( + @NotNull ValueParameterDescriptor valueParameter, + boolean includeName, + @NotNull StringBuilder builder, + boolean topLevel + ) { if (topLevel) { builder.append(renderKeyword("value-parameter")).append(" "); }