From b7e4907f74221f2493ddcbde1b9ac60913050b2c Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Tue, 25 Dec 2012 01:45:48 +0400 Subject: [PATCH] Rendering where suffix for classes. --- .../jet/renderer/DescriptorRendererImpl.java | 14 +++++++++----- compiler/testData/renderer/Classes.kt | 6 +++++- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRendererImpl.java b/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRendererImpl.java index 60439e7a9ec..d9c04f42931 100644 --- a/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRendererImpl.java +++ b/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRendererImpl.java @@ -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 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 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 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) { diff --git a/compiler/testData/renderer/Classes.kt b/compiler/testData/renderer/Classes.kt index 0960dc6f2e9..0412b8f39b6 100644 --- a/compiler/testData/renderer/Classes.kt +++ b/compiler/testData/renderer/Classes.kt @@ -26,6 +26,8 @@ trait TheTrait { public class WithReified +public trait TwoUpperBounds 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 //public final class WithReified defined in rendererTest //public ctor WithReified() defined in rendererTest.WithReified // defined in rendererTest.WithReified -// defined in rendererTest.WithReified \ No newline at end of file +// defined in rendererTest.WithReified +//public trait TwoUpperBounds where T : jet.Number, T : jet.Any defined in rendererTest +// defined in rendererTest.TwoUpperBounds