Simplified code in DescriptorRendererImpl.

This commit is contained in:
Evgeny Gerashchenko
2012-12-13 23:19:33 +04:00
parent 85337c3546
commit 85b50aefda
2 changed files with 63 additions and 88 deletions
@@ -297,6 +297,10 @@ public class DescriptorRendererImpl implements DescriptorRenderer {
/* TYPE PARAMETERS */ /* TYPE PARAMETERS */
private void renderTypeParameter(TypeParameterDescriptor descriptor, StringBuilder builder, boolean topLevel) { private void renderTypeParameter(TypeParameterDescriptor descriptor, StringBuilder builder, boolean topLevel) {
if (topLevel) {
builder.append(lt());
}
if (!descriptor.isReified()) { if (!descriptor.isReified()) {
String variance = descriptor.getVariance().toString(); String variance = descriptor.getVariance().toString();
if (!variance.isEmpty()) { if (!variance.isEmpty()) {
@@ -332,6 +336,10 @@ public class DescriptorRendererImpl implements DescriptorRenderer {
else { else {
// rendered with "where" // rendered with "where"
} }
if (topLevel) {
builder.append(">");
}
} }
private boolean renderTypeParameters(List<TypeParameterDescriptor> typeParameters, StringBuilder builder) { private boolean renderTypeParameters(List<TypeParameterDescriptor> typeParameters, StringBuilder builder) {
@@ -350,13 +358,6 @@ public class DescriptorRendererImpl implements DescriptorRenderer {
return false; return false;
} }
private void renderTypeParameter(TypeParameterDescriptor descriptor, StringBuilder builder) {
builder.append(lt());
renderTypeParameter(descriptor, builder, true);
builder.append(">");
}
/* FUNCTIONS */ /* FUNCTIONS */
private void renderFunction(FunctionDescriptor descriptor, StringBuilder builder) { private void renderFunction(FunctionDescriptor descriptor, StringBuilder builder) {
if (!startFromName) { if (!startFromName) {
@@ -426,7 +427,7 @@ public class DescriptorRendererImpl implements DescriptorRenderer {
handler.appendBeforeValueParameters(function, builder); handler.appendBeforeValueParameters(function, builder);
for (ValueParameterDescriptor parameter : function.getValueParameters()) { for (ValueParameterDescriptor parameter : function.getValueParameters()) {
handler.appendBeforeValueParameter(parameter, builder); handler.appendBeforeValueParameter(parameter, builder);
renderValueParameterOfFunction(parameter, builder); renderValueParameter(parameter, builder, false);
handler.appendAfterValueParameter(parameter, builder); handler.appendAfterValueParameter(parameter, builder);
} }
handler.appendAfterValueParameters(function, builder); handler.appendAfterValueParameters(function, builder);
@@ -434,7 +435,7 @@ public class DescriptorRendererImpl implements DescriptorRenderer {
else { else {
builder.append("("); builder.append("(");
for (ValueParameterDescriptor parameter : function.getValueParameters()) { for (ValueParameterDescriptor parameter : function.getValueParameters()) {
renderValueParameterOfFunction(parameter, builder); renderValueParameter(parameter, builder, false);
if (parameter.getIndex() != function.getValueParameters().size() - 1) { if (parameter.getIndex() != function.getValueParameters().size() - 1) {
builder.append(", "); builder.append(", ");
} }
@@ -443,26 +444,23 @@ public class DescriptorRendererImpl implements DescriptorRenderer {
} }
} }
private void renderValueParameterOfFunction(ValueParameterDescriptor descriptor, StringBuilder builder) { /* VARIABLES */
renderVariable(descriptor, builder, true); 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(); boolean withDefaultValue = debugMode ? descriptor.declaresDefaultValue() : descriptor.hasDefaultValue();
if (withDefaultValue) { if (withDefaultValue) {
builder.append(" = ..."); builder.append(" = ...");
} }
} }
private void renderValVarPrefix(VariableDescriptor descriptor, StringBuilder builder) {
/* VARIABLES */ builder.append(renderKeyword(descriptor.isVar() ? "var" : "val")).append(" ");
private void renderValueParameter(ValueParameterDescriptor descriptor, StringBuilder builder) {
builder.append(renderKeyword("value-parameter")).append(" ");
renderVariable(descriptor, builder);
} }
private void renderVariable(VariableDescriptor descriptor, StringBuilder builder) { private void renderVariable(VariableDescriptor descriptor, StringBuilder builder, boolean topLevel) {
renderVariable(descriptor, builder, false);
}
private void renderVariable(VariableDescriptor descriptor, StringBuilder builder, boolean skipValVar) {
JetType type = descriptor.getType(); JetType type = descriptor.getType();
if (descriptor instanceof ValueParameterDescriptor) { if (descriptor instanceof ValueParameterDescriptor) {
JetType varargElementType = ((ValueParameterDescriptor) descriptor).getVarargElementType(); JetType varargElementType = ((ValueParameterDescriptor) descriptor).getVarargElementType();
@@ -471,82 +469,35 @@ public class DescriptorRendererImpl implements DescriptorRenderer {
type = varargElementType; type = varargElementType;
} }
} }
String typeString = renderPropertyPrefixAndComputeTypeString(
builder, if (topLevel && !startFromName) {
skipValVar ? null : descriptor.isVar(), renderValVarPrefix(descriptor, builder);
Collections.<TypeParameterDescriptor>emptyList(), }
ReceiverParameterDescriptor.NO_RECEIVER_PARAMETER,
type);
renderName(descriptor, builder); renderName(descriptor, builder);
builder.append(" : ").append(escape(typeString)); builder.append(" : ").append(escape(renderType(type)));
}
private String renderPropertyPrefixAndComputeTypeString(
@NotNull StringBuilder builder,
@Nullable Boolean isVar,
@NotNull List<TypeParameterDescriptor> 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;
} }
private void renderProperty(PropertyDescriptor descriptor, StringBuilder builder) { private void renderProperty(PropertyDescriptor descriptor, StringBuilder builder) {
if (!startFromName) { if (!startFromName) {
renderVisibility(descriptor.getVisibility(), builder); renderVisibility(descriptor.getVisibility(), builder);
renderModality(descriptor.getModality(), 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); renderName(descriptor, builder);
builder.append(" : ").append(escape(typeString)); builder.append(" : ").append(escape(renderType(descriptor.getType())));
} }
/* CLASSES */ /* CLASSES */
private void renderClass(ClassDescriptor descriptor, StringBuilder builder) { 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; boolean isNotClassObject = descriptor.getKind() != ClassKind.CLASS_OBJECT;
if (!startFromName) { if (!startFromName) {
if (isNotClassObject) { if (isNotClassObject) {
@@ -555,7 +506,7 @@ public class DescriptorRendererImpl implements DescriptorRenderer {
renderModality(descriptor.getModality(), builder); renderModality(descriptor.getModality(), builder);
} }
} }
builder.append(renderKeyword(keyword)); builder.append(renderKeyword(getClassKindPrefix(descriptor)));
if (isNotClassObject) { if (isNotClassObject) {
builder.append(" "); 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 */ /* OTHER */
private void renderModuleOrScript(DeclarationDescriptor descriptor, StringBuilder builder) { private void renderModuleOrScript(DeclarationDescriptor descriptor, StringBuilder builder) {
@@ -597,13 +572,13 @@ public class DescriptorRendererImpl implements DescriptorRenderer {
private class RenderDeclarationDescriptorVisitor extends DeclarationDescriptorVisitorEmptyBodies<Void, StringBuilder> { private class RenderDeclarationDescriptorVisitor extends DeclarationDescriptorVisitorEmptyBodies<Void, StringBuilder> {
@Override @Override
public Void visitValueParameterDescriptor(ValueParameterDescriptor descriptor, StringBuilder builder) { public Void visitValueParameterDescriptor(ValueParameterDescriptor descriptor, StringBuilder builder) {
renderValueParameter(descriptor, builder); renderValueParameter(descriptor, builder, true);
return null; return null;
} }
@Override @Override
public Void visitVariableDescriptor(VariableDescriptor descriptor, StringBuilder builder) { public Void visitVariableDescriptor(VariableDescriptor descriptor, StringBuilder builder) {
renderVariable(descriptor, builder); renderVariable(descriptor, builder, true);
return null; return null;
} }
@@ -632,7 +607,7 @@ public class DescriptorRendererImpl implements DescriptorRenderer {
@Override @Override
public Void visitTypeParameterDescriptor(TypeParameterDescriptor descriptor, StringBuilder builder) { public Void visitTypeParameterDescriptor(TypeParameterDescriptor descriptor, StringBuilder builder) {
renderTypeParameter(descriptor, builder); renderTypeParameter(descriptor, builder, true);
return null; return null;
} }
@@ -24,7 +24,7 @@ fun <P> funTypeParameterWithTwoUpperBounds() where P : Foo, P : Bar = 17
//value-parameter vararg val ints : jet.Int defined in rendererTest.int2 //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 //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 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 jet.Int.ext() : jet.Int defined in rendererTest
//public final fun <out T> withTypeParam(a : jet.Array<T>) : jet.Int defined in rendererTest //public final fun <out T> withTypeParam(a : jet.Array<T>) : jet.Int defined in rendererTest
//<out T> defined in rendererTest.withTypeParam //<out T> defined in rendererTest.withTypeParam