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); renderName(descriptor, builder);
renderValueParameters(descriptor, builder); renderValueParameters(descriptor, builder);
builder.append(" : ").append(escape(renderType(descriptor.getReturnType()))); builder.append(" : ").append(escape(renderType(descriptor.getReturnType())));
renderWhereSuffix(descriptor, builder); renderWhereSuffix(descriptor.getTypeParameters(), builder);
} }
private void renderConstructor(ConstructorDescriptor constructorDescriptor, StringBuilder builder) { private void renderConstructor(ConstructorDescriptor constructorDescriptor, StringBuilder builder) {
@@ -404,10 +404,9 @@ public class DescriptorRendererImpl implements DescriptorRenderer {
renderValueParameters(constructorDescriptor, builder); renderValueParameters(constructorDescriptor, builder);
} }
private void renderWhereSuffix(@NotNull List<TypeParameterDescriptor> typeParameters, @NotNull StringBuilder builder) {
private void renderWhereSuffix(@NotNull CallableMemberDescriptor callable, @NotNull StringBuilder builder) {
boolean first = true; boolean first = true;
for (TypeParameterDescriptor typeParameter : callable.getTypeParameters()) { for (TypeParameterDescriptor typeParameter : typeParameters) {
if (typeParameter.getUpperBounds().size() > 1) { if (typeParameter.getUpperBounds().size() > 1) {
for (JetType upperBound : typeParameter.getUpperBounds()) { for (JetType upperBound : typeParameter.getUpperBounds()) {
if (first) { if (first) {
@@ -513,9 +512,11 @@ public class DescriptorRendererImpl implements DescriptorRenderer {
builder.append(" "); builder.append(" ");
} }
} }
List<TypeParameterDescriptor> typeParameters = descriptor.getTypeConstructor().getParameters();
if (isNotClassObject) { if (isNotClassObject) {
renderName(descriptor, builder); renderName(descriptor, builder);
renderTypeParameters(descriptor.getTypeConstructor().getParameters(), builder); renderTypeParameters(typeParameters, builder);
if (classWithPrimaryConstructor) { if (classWithPrimaryConstructor) {
ConstructorDescriptor primaryConstructor = descriptor.getUnsubstitutedPrimaryConstructor(); ConstructorDescriptor primaryConstructor = descriptor.getUnsubstitutedPrimaryConstructor();
if (primaryConstructor != null) { if (primaryConstructor != null) {
@@ -523,6 +524,7 @@ public class DescriptorRendererImpl implements DescriptorRenderer {
} }
} }
} }
if (!descriptor.equals(KotlinBuiltIns.getInstance().getNothing())) { if (!descriptor.equals(KotlinBuiltIns.getInstance().getNothing())) {
Collection<JetType> supertypes = descriptor.getTypeConstructor().getSupertypes(); Collection<JetType> supertypes = descriptor.getTypeConstructor().getSupertypes();
if (supertypes.isEmpty() || supertypes.size() == 1 && KotlinBuiltIns.getInstance().isAny(supertypes.iterator().next())) { 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) { 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 class WithReified<reified A, reified out B>
public trait TwoUpperBounds<T> where T: Number, T: Any
//package rendererTest defined in root package //package rendererTest defined in root package
//internal final annotation class TheAnnotation : jet.Annotation defined in rendererTest //internal final annotation class TheAnnotation : jet.Annotation defined in rendererTest
//public ctor TheAnnotation() defined in rendererTest.TheAnnotation //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 final class WithReified<reified A, reified out B> defined in rendererTest
//public ctor WithReified<reified A, reified out B>() defined in rendererTest.WithReified //public ctor WithReified<reified A, reified out B>() defined in rendererTest.WithReified
//<reified A> 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