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