From ef1ffa4bf7316bf482d2569c52b7dd8ec4341bff Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Wed, 26 Dec 2012 17:52:16 +0400 Subject: [PATCH] Sorting upper bounds when rendering "where" to workaround failing test. --- .../jet/renderer/DescriptorRendererImpl.java | 23 ++++++++----------- compiler/testData/renderer/Classes.kt | 2 +- compiler/testData/renderer/GlobalFunctions.kt | 2 +- .../conflictingSubstitutions1.html | 2 +- 4 files changed, 13 insertions(+), 16 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRendererImpl.java b/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRendererImpl.java index 7828484f92f..ab35157083b 100644 --- a/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRendererImpl.java +++ b/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRendererImpl.java @@ -18,6 +18,7 @@ package org.jetbrains.jet.renderer; import com.google.common.collect.Lists; import com.google.common.collect.Sets; +import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.tree.IElementType; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -449,25 +450,21 @@ public class DescriptorRendererImpl implements DescriptorRenderer { } private void renderWhereSuffix(@NotNull List typeParameters, @NotNull StringBuilder builder) { - boolean first = true; + List upperBoundStrings = Lists.newArrayList(); + for (TypeParameterDescriptor typeParameter : typeParameters) { if (typeParameter.getUpperBounds().size() > 1) { for (JetType upperBound : typeParameter.getUpperBounds()) { - if (first) { - builder.append(" "); - builder.append(renderKeyword("where")); - builder.append(" "); - } - else { - builder.append(", "); - } - builder.append(typeParameter.getName()); - builder.append(" : "); - builder.append(escape(renderType(upperBound))); - first = false; + upperBoundStrings.add(typeParameter.getName() + " : " + escape(renderType(upperBound))); } } } + Collections.sort(upperBoundStrings); // TODO workaround for failing load kotlin test + + if (!upperBoundStrings.isEmpty()) { + builder.append(" ").append(renderKeyword("where")).append(" "); + builder.append(StringUtil.join(upperBoundStrings, ", ")); + } } @NotNull diff --git a/compiler/testData/renderer/Classes.kt b/compiler/testData/renderer/Classes.kt index a49fe87ad17..881bfa442c8 100644 --- a/compiler/testData/renderer/Classes.kt +++ b/compiler/testData/renderer/Classes.kt @@ -51,5 +51,5 @@ public trait TwoUpperBounds where T: Number, T: Any //public constructor WithReified() defined in rendererTest.WithReified // defined in rendererTest.WithReified // defined in rendererTest.WithReified -//public trait TwoUpperBounds where T : jet.Number, T : jet.Any defined in rendererTest +//public trait TwoUpperBounds where T : jet.Any, T : jet.Number defined in rendererTest // defined in rendererTest.TwoUpperBounds diff --git a/compiler/testData/renderer/GlobalFunctions.kt b/compiler/testData/renderer/GlobalFunctions.kt index f5acaf2503d..19a4b4740ec 100644 --- a/compiler/testData/renderer/GlobalFunctions.kt +++ b/compiler/testData/renderer/GlobalFunctions.kt @@ -33,6 +33,6 @@ deprecated("") fun deprecatedFun() //value-parameter val a : jet.Array defined in rendererTest.withTypeParam //internal trait Foo defined in rendererTest //internal trait Bar defined in rendererTest -//internal final fun

funTypeParameterWithTwoUpperBounds() : jet.Int where P : rendererTest.Foo, P : rendererTest.Bar defined in rendererTest +//internal final fun

funTypeParameterWithTwoUpperBounds() : jet.Int where P : rendererTest.Bar, P : rendererTest.Foo defined in rendererTest //

defined in rendererTest.funTypeParameterWithTwoUpperBounds //jet.deprecated internal final fun deprecatedFun() : Unit defined in rendererTest diff --git a/idea/testData/diagnosticMessage/conflictingSubstitutions1.html b/idea/testData/diagnosticMessage/conflictingSubstitutions1.html index d4856e6bdf5..7bed579e118 100644 --- a/idea/testData/diagnosticMessage/conflictingSubstitutions1.html +++ b/idea/testData/diagnosticMessage/conflictingSubstitutions1.html @@ -22,7 +22,7 @@ t : T : Unit where - E : java.lang.Cloneable, E : java.io.Closeable + E : java.io.Closeable, E : java.lang.Cloneable