Rendering where suffix for classes.

This commit is contained in:
Evgeny Gerashchenko
2012-12-25 01:45:48 +04:00
parent b300329e21
commit b7e4907f74
2 changed files with 14 additions and 6 deletions
@@ -388,7 +388,7 @@ public class DescriptorRendererImpl implements DescriptorRenderer {
renderName(descriptor, builder);
renderValueParameters(descriptor, builder);
builder.append(" : ").append(escape(renderType(descriptor.getReturnType())));
renderWhereSuffix(descriptor, builder);
renderWhereSuffix(descriptor.getTypeParameters(), builder);
}
private void renderConstructor(ConstructorDescriptor constructorDescriptor, StringBuilder builder) {
@@ -404,10 +404,9 @@ public class DescriptorRendererImpl implements DescriptorRenderer {
renderValueParameters(constructorDescriptor, builder);
}
private void renderWhereSuffix(@NotNull CallableMemberDescriptor callable, @NotNull StringBuilder builder) {
private void renderWhereSuffix(@NotNull List<TypeParameterDescriptor> typeParameters, @NotNull StringBuilder builder) {
boolean first = true;
for (TypeParameterDescriptor typeParameter : callable.getTypeParameters()) {
for (TypeParameterDescriptor typeParameter : typeParameters) {
if (typeParameter.getUpperBounds().size() > 1) {
for (JetType upperBound : typeParameter.getUpperBounds()) {
if (first) {
@@ -513,9 +512,11 @@ public class DescriptorRendererImpl implements DescriptorRenderer {
builder.append(" ");
}
}
List<TypeParameterDescriptor> typeParameters = descriptor.getTypeConstructor().getParameters();
if (isNotClassObject) {
renderName(descriptor, builder);
renderTypeParameters(descriptor.getTypeConstructor().getParameters(), builder);
renderTypeParameters(typeParameters, builder);
if (classWithPrimaryConstructor) {
ConstructorDescriptor primaryConstructor = descriptor.getUnsubstitutedPrimaryConstructor();
if (primaryConstructor != null) {
@@ -523,6 +524,7 @@ public class DescriptorRendererImpl implements DescriptorRenderer {
}
}
}
if (!descriptor.equals(KotlinBuiltIns.getInstance().getNothing())) {
Collection<JetType> supertypes = descriptor.getTypeConstructor().getSupertypes();
if (supertypes.isEmpty() || supertypes.size() == 1 && KotlinBuiltIns.getInstance().isAny(supertypes.iterator().next())) {
@@ -538,6 +540,8 @@ public class DescriptorRendererImpl implements DescriptorRenderer {
}
}
}
renderWhereSuffix(typeParameters, builder);
}
private static String getClassKindPrefix(ClassDescriptor descriptor) {
+5 -1
View File
@@ -26,6 +26,8 @@ trait TheTrait {
public class WithReified<reified A, reified out B>
public trait TwoUpperBounds<T> where T: Number, T: Any
//package rendererTest defined in root package
//internal final annotation class TheAnnotation : jet.Annotation defined in rendererTest
//public ctor TheAnnotation() defined in rendererTest.TheAnnotation
@@ -48,4 +50,6 @@ public class WithReified<reified A, reified out B>
//public final class WithReified<reified A, reified out B> defined in rendererTest
//public ctor WithReified<reified A, reified out B>() defined in rendererTest.WithReified
//<reified A> defined in rendererTest.WithReified
//<reified out B> defined in rendererTest.WithReified
//<reified out B> defined in rendererTest.WithReified
//public trait TwoUpperBounds<T> where T : jet.Number, T : jet.Any defined in rendererTest
//<T : jet.Number & jet.Any> defined in rendererTest.TwoUpperBounds