From d875bf80cb5f6671735f2717640d3a3979617740 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Sapalski?= Date: Tue, 9 Apr 2013 15:19:09 +0200 Subject: [PATCH] Fixed regression in rendering generic types upper bounds. --- .../jet/renderer/DescriptorRendererBuilder.java | 1 - .../jet/renderer/DescriptorRendererImpl.java | 11 ++++++++--- .../functionWithTypeParameters.kt.after | 2 +- .../diagnosticMessage/conflictingSubstitutions1.html | 4 ++-- .../libraries/decompiled/ClassWithConstructor.kt | 2 +- 5 files changed, 12 insertions(+), 8 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRendererBuilder.java b/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRendererBuilder.java index 51d534d3582..29bb3926067 100644 --- a/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRendererBuilder.java +++ b/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRendererBuilder.java @@ -113,5 +113,4 @@ public class DescriptorRendererBuilder { verbose, unitReturnType, normalizedVisibilities, showInternalKeyword, valueParametersHandler, textFormat, excludedAnnotationClasses); } - } diff --git a/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRendererImpl.java b/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRendererImpl.java index d5ad38309f0..3b1ae8985b2 100644 --- a/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRendererImpl.java +++ b/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRendererImpl.java @@ -390,7 +390,7 @@ public class DescriptorRendererImpl implements DescriptorRenderer { builder.append(renderKeyword(variance)).append(" "); } renderName(typeParameter, builder); - if (typeParameter.getUpperBounds().size() == 1) { + if (typeParameter.getUpperBounds().size() >= 1) { JetType upperBound = typeParameter.getUpperBounds().iterator().next(); if (!KotlinBuiltIns.getInstance().getDefaultBound().equals(upperBound)) { builder.append(" : ").append(renderType(upperBound)); @@ -486,8 +486,13 @@ public class DescriptorRendererImpl implements DescriptorRenderer { for (TypeParameterDescriptor typeParameter : typeParameters) { if (typeParameter.getUpperBounds().size() > 1) { + boolean first = true; for (JetType upperBound : typeParameter.getUpperBounds()) { - upperBoundStrings.add(renderName(typeParameter.getName()) + " : " + escape(renderType(upperBound))); + // first parameter is rendered by renderTypeParameter: + if (!first) { + upperBoundStrings.add(renderName(typeParameter.getName()) + " : " + escape(renderType(upperBound))); + } + first = false; } } } @@ -730,4 +735,4 @@ public class DescriptorRendererImpl implements DescriptorRenderer { return null; } } -} +} \ No newline at end of file diff --git a/idea/testData/codeInsight/overrideImplement/functionWithTypeParameters.kt.after b/idea/testData/codeInsight/overrideImplement/functionWithTypeParameters.kt.after index ffc91cdd177..17cb21ce990 100644 --- a/idea/testData/codeInsight/overrideImplement/functionWithTypeParameters.kt.after +++ b/idea/testData/codeInsight/overrideImplement/functionWithTypeParameters.kt.after @@ -4,7 +4,7 @@ trait Trait { class TraitImpl : Trait { - override fun > foo() where B: Runnable, B: Cloneable, B: Comparable { + override fun > foo() where B: Cloneable, B: Comparable { throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/idea/testData/diagnosticMessage/conflictingSubstitutions1.html b/idea/testData/diagnosticMessage/conflictingSubstitutions1.html index 52cfa63ea2e..7943371baa4 100644 --- a/idea/testData/diagnosticMessage/conflictingSubstitutions1.html +++ b/idea/testData/diagnosticMessage/conflictingSubstitutions1.html @@ -9,7 +9,7 @@ T fun - <T, E> + <T, E : java.lang.Cloneable> writeToMyList ( @@ -22,7 +22,7 @@ t: T : jet.Unit where - E : java.lang.Cloneable, E : java.io.Closeable + E : java.io.Closeable diff --git a/idea/testData/libraries/decompiled/ClassWithConstructor.kt b/idea/testData/libraries/decompiled/ClassWithConstructor.kt index bc875c2ce4b..4513630cdce 100644 --- a/idea/testData/libraries/decompiled/ClassWithConstructor.kt +++ b/idea/testData/libraries/decompiled/ClassWithConstructor.kt @@ -5,4 +5,4 @@ package testData.libraries [[public final class ClassWithConstructor(a: jet.String, b: jet.Any) { [internal final val a: jet.String] /* compiled code */ -}]] +}]] \ No newline at end of file