From 85b50aefda1d39214115bba1612520eb541cca4a Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Thu, 13 Dec 2012 23:19:33 +0400 Subject: [PATCH] Simplified code in DescriptorRendererImpl. --- .../jet/renderer/DescriptorRendererImpl.java | 149 ++++++++---------- compiler/testData/renderer/GlobalFunctions.kt | 2 +- 2 files changed, 63 insertions(+), 88 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRendererImpl.java b/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRendererImpl.java index 55f5d6d6905..8ec151c3126 100644 --- a/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRendererImpl.java +++ b/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRendererImpl.java @@ -297,6 +297,10 @@ public class DescriptorRendererImpl implements DescriptorRenderer { /* TYPE PARAMETERS */ private void renderTypeParameter(TypeParameterDescriptor descriptor, StringBuilder builder, boolean topLevel) { + if (topLevel) { + builder.append(lt()); + } + if (!descriptor.isReified()) { String variance = descriptor.getVariance().toString(); if (!variance.isEmpty()) { @@ -332,6 +336,10 @@ public class DescriptorRendererImpl implements DescriptorRenderer { else { // rendered with "where" } + + if (topLevel) { + builder.append(">"); + } } private boolean renderTypeParameters(List typeParameters, StringBuilder builder) { @@ -350,13 +358,6 @@ public class DescriptorRendererImpl implements DescriptorRenderer { return false; } - private void renderTypeParameter(TypeParameterDescriptor descriptor, StringBuilder builder) { - builder.append(lt()); - renderTypeParameter(descriptor, builder, true); - builder.append(">"); - } - - /* FUNCTIONS */ private void renderFunction(FunctionDescriptor descriptor, StringBuilder builder) { if (!startFromName) { @@ -426,7 +427,7 @@ public class DescriptorRendererImpl implements DescriptorRenderer { handler.appendBeforeValueParameters(function, builder); for (ValueParameterDescriptor parameter : function.getValueParameters()) { handler.appendBeforeValueParameter(parameter, builder); - renderValueParameterOfFunction(parameter, builder); + renderValueParameter(parameter, builder, false); handler.appendAfterValueParameter(parameter, builder); } handler.appendAfterValueParameters(function, builder); @@ -434,7 +435,7 @@ public class DescriptorRendererImpl implements DescriptorRenderer { else { builder.append("("); for (ValueParameterDescriptor parameter : function.getValueParameters()) { - renderValueParameterOfFunction(parameter, builder); + renderValueParameter(parameter, builder, false); if (parameter.getIndex() != function.getValueParameters().size() - 1) { builder.append(", "); } @@ -443,26 +444,23 @@ public class DescriptorRendererImpl implements DescriptorRenderer { } } - private void renderValueParameterOfFunction(ValueParameterDescriptor descriptor, StringBuilder builder) { - renderVariable(descriptor, builder, true); + /* VARIABLES */ + private void renderValueParameter(ValueParameterDescriptor descriptor, StringBuilder builder, boolean topLevel) { + if (topLevel) { + builder.append(renderKeyword("value-parameter")).append(" "); + } + renderVariable(descriptor, builder, topLevel); boolean withDefaultValue = debugMode ? descriptor.declaresDefaultValue() : descriptor.hasDefaultValue(); if (withDefaultValue) { builder.append(" = ..."); } } - - /* VARIABLES */ - private void renderValueParameter(ValueParameterDescriptor descriptor, StringBuilder builder) { - builder.append(renderKeyword("value-parameter")).append(" "); - renderVariable(descriptor, builder); + private void renderValVarPrefix(VariableDescriptor descriptor, StringBuilder builder) { + builder.append(renderKeyword(descriptor.isVar() ? "var" : "val")).append(" "); } - private void renderVariable(VariableDescriptor descriptor, StringBuilder builder) { - renderVariable(descriptor, builder, false); - } - - private void renderVariable(VariableDescriptor descriptor, StringBuilder builder, boolean skipValVar) { + private void renderVariable(VariableDescriptor descriptor, StringBuilder builder, boolean topLevel) { JetType type = descriptor.getType(); if (descriptor instanceof ValueParameterDescriptor) { JetType varargElementType = ((ValueParameterDescriptor) descriptor).getVarargElementType(); @@ -471,82 +469,35 @@ public class DescriptorRendererImpl implements DescriptorRenderer { type = varargElementType; } } - String typeString = renderPropertyPrefixAndComputeTypeString( - builder, - skipValVar ? null : descriptor.isVar(), - Collections.emptyList(), - ReceiverParameterDescriptor.NO_RECEIVER_PARAMETER, - type); + + if (topLevel && !startFromName) { + renderValVarPrefix(descriptor, builder); + } + renderName(descriptor, builder); - builder.append(" : ").append(escape(typeString)); - } - - private String renderPropertyPrefixAndComputeTypeString( - @NotNull StringBuilder builder, - @Nullable Boolean isVar, - @NotNull List typeParameters, - @Nullable ReceiverParameterDescriptor receiver, - @Nullable JetType outType - ) { - String typeString = lt() + "no type>"; - if (outType != null) { - if (isVar != null && !startFromName) { - builder.append(renderKeyword(isVar ? "var" : "val")).append(" "); - } - typeString = renderType(outType); - } - - renderTypeParameters(typeParameters, builder); - - if (receiver != null) { - builder.append(escape(renderType(receiver.getType()))).append("."); - } - - return typeString; + builder.append(" : ").append(escape(renderType(type))); } private void renderProperty(PropertyDescriptor descriptor, StringBuilder builder) { if (!startFromName) { renderVisibility(descriptor.getVisibility(), builder); renderModality(descriptor.getModality(), builder); + renderValVarPrefix(descriptor, builder); + } + + renderTypeParameters(descriptor.getTypeParameters(), builder); + + ReceiverParameterDescriptor receiver = descriptor.getReceiverParameter(); + if (receiver != null) { + builder.append(escape(renderType(receiver.getType()))).append("."); } - String typeString = renderPropertyPrefixAndComputeTypeString( - builder, - descriptor.isVar(), - descriptor.getTypeParameters(), - descriptor.getReceiverParameter(), - descriptor.getType()); renderName(descriptor, builder); - builder.append(" : ").append(escape(typeString)); + builder.append(" : ").append(escape(renderType(descriptor.getType()))); } /* CLASSES */ private void renderClass(ClassDescriptor descriptor, StringBuilder builder) { - String keyword; - switch (descriptor.getKind()) { - case TRAIT: - keyword = "trait"; - break; - case ENUM_CLASS: - keyword = "enum class"; - break; - case OBJECT: - keyword = "object"; - break; - case ANNOTATION_CLASS: - keyword = "annotation class"; - break; - case CLASS_OBJECT: - keyword = "class object"; - break; - default: - keyword = "class"; - } - renderClass(descriptor, builder, keyword); - } - - private void renderClass(ClassDescriptor descriptor, StringBuilder builder, String keyword) { boolean isNotClassObject = descriptor.getKind() != ClassKind.CLASS_OBJECT; if (!startFromName) { if (isNotClassObject) { @@ -555,7 +506,7 @@ public class DescriptorRendererImpl implements DescriptorRenderer { renderModality(descriptor.getModality(), builder); } } - builder.append(renderKeyword(keyword)); + builder.append(renderKeyword(getClassKindPrefix(descriptor))); if (isNotClassObject) { builder.append(" "); } @@ -581,6 +532,30 @@ public class DescriptorRendererImpl implements DescriptorRenderer { } } + private static String getClassKindPrefix(ClassDescriptor descriptor) { + String keyword; + switch (descriptor.getKind()) { + case TRAIT: + keyword = "trait"; + break; + case ENUM_CLASS: + keyword = "enum class"; + break; + case OBJECT: + keyword = "object"; + break; + case ANNOTATION_CLASS: + keyword = "annotation class"; + break; + case CLASS_OBJECT: + keyword = "class object"; + break; + default: + keyword = "class"; + } + return keyword; + } + /* OTHER */ private void renderModuleOrScript(DeclarationDescriptor descriptor, StringBuilder builder) { @@ -597,13 +572,13 @@ public class DescriptorRendererImpl implements DescriptorRenderer { private class RenderDeclarationDescriptorVisitor extends DeclarationDescriptorVisitorEmptyBodies { @Override public Void visitValueParameterDescriptor(ValueParameterDescriptor descriptor, StringBuilder builder) { - renderValueParameter(descriptor, builder); + renderValueParameter(descriptor, builder, true); return null; } @Override public Void visitVariableDescriptor(VariableDescriptor descriptor, StringBuilder builder) { - renderVariable(descriptor, builder); + renderVariable(descriptor, builder, true); return null; } @@ -632,7 +607,7 @@ public class DescriptorRendererImpl implements DescriptorRenderer { @Override public Void visitTypeParameterDescriptor(TypeParameterDescriptor descriptor, StringBuilder builder) { - renderTypeParameter(descriptor, builder); + renderTypeParameter(descriptor, builder, true); return null; } diff --git a/compiler/testData/renderer/GlobalFunctions.kt b/compiler/testData/renderer/GlobalFunctions.kt index 4b92a1bd4f4..a7ee3176280 100644 --- a/compiler/testData/renderer/GlobalFunctions.kt +++ b/compiler/testData/renderer/GlobalFunctions.kt @@ -24,7 +24,7 @@ fun

funTypeParameterWithTwoUpperBounds() where P : Foo, P : Bar = 17 //value-parameter vararg val ints : jet.Int defined in rendererTest.int2 //private final fun prv(a : jet.String, b : jet.Int = ...) : jet.Int defined in rendererTest //value-parameter val a : jet.String defined in rendererTest.prv -//value-parameter val b : jet.Int defined in rendererTest.prv +//value-parameter val b : jet.Int = ... defined in rendererTest.prv //public final fun jet.Int.ext() : jet.Int defined in rendererTest //public final fun withTypeParam(a : jet.Array) : jet.Int defined in rendererTest // defined in rendererTest.withTypeParam