diff --git a/compiler/testData/loadJava/compiledJava/kotlinSignature/error/WrongReturnTypeStructure.txt b/compiler/testData/loadJava/compiledJava/kotlinSignature/error/WrongReturnTypeStructure.txt index 6cb06c8fd10..4424bc5f450 100644 --- a/compiler/testData/loadJava/compiledJava/kotlinSignature/error/WrongReturnTypeStructure.txt +++ b/compiler/testData/loadJava/compiledJava/kotlinSignature/error/WrongReturnTypeStructure.txt @@ -2,5 +2,5 @@ package test public open class WrongReturnTypeStructure { public constructor WrongReturnTypeStructure() - public open fun foo(/*0*/ p0: kotlin.String?, /*1*/ p1: kotlin.List>?): kotlin.String? + public open fun foo(/*0*/ p0: kotlin.String!, /*1*/ p1: kotlin.(Mutable)List!>!): kotlin.String! } diff --git a/compiler/testData/loadJava/compiledJava/kotlinSignature/error/WrongValueParameterStructure1.txt b/compiler/testData/loadJava/compiledJava/kotlinSignature/error/WrongValueParameterStructure1.txt index 661517cca01..86c09012e96 100644 --- a/compiler/testData/loadJava/compiledJava/kotlinSignature/error/WrongValueParameterStructure1.txt +++ b/compiler/testData/loadJava/compiledJava/kotlinSignature/error/WrongValueParameterStructure1.txt @@ -2,5 +2,5 @@ package test public open class WrongValueParameterStructure1 { public constructor WrongValueParameterStructure1() - public open fun foo(/*0*/ p0: kotlin.String?, /*1*/ p1: kotlin.List>?): kotlin.String? + public open fun foo(/*0*/ p0: kotlin.String!, /*1*/ p1: kotlin.(Mutable)List!>!): kotlin.String! } diff --git a/compiler/testData/loadJava/compiledJava/kotlinSignature/error/WrongValueParameterStructure2.txt b/compiler/testData/loadJava/compiledJava/kotlinSignature/error/WrongValueParameterStructure2.txt index 16c1f9a9dcb..5fc7f7df07a 100644 --- a/compiler/testData/loadJava/compiledJava/kotlinSignature/error/WrongValueParameterStructure2.txt +++ b/compiler/testData/loadJava/compiledJava/kotlinSignature/error/WrongValueParameterStructure2.txt @@ -2,5 +2,5 @@ package test public open class WrongValueParameterStructure2 { public constructor WrongValueParameterStructure2() - public open fun foo(/*0*/ p0: kotlin.String?, /*1*/ p1: kotlin.List>?): kotlin.String? + public open fun foo(/*0*/ p0: kotlin.String!, /*1*/ p1: kotlin.(Mutable)List!>!): kotlin.String! } diff --git a/core/descriptors/src/org/jetbrains/jet/renderer/DescriptorRendererImpl.java b/core/descriptors/src/org/jetbrains/jet/renderer/DescriptorRendererImpl.java index 182e6474793..2e957be354d 100644 --- a/core/descriptors/src/org/jetbrains/jet/renderer/DescriptorRendererImpl.java +++ b/core/descriptors/src/org/jetbrains/jet/renderer/DescriptorRendererImpl.java @@ -19,6 +19,7 @@ package org.jetbrains.jet.renderer; import kotlin.Function1; import kotlin.KotlinPackage; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.descriptors.annotations.Annotated; import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; @@ -346,27 +347,44 @@ public class DescriptorRendererImpl implements DescriptorRenderer { String kotlinPrefix = "kotlin."; String mutablePrefix = "Mutable"; - // e.g. lower = kotlin.MutableList, upper = kotlin.List? - if (lowerRendered.startsWith(kotlinPrefix + mutablePrefix)) { - // List - String lowerWithoutPrefix = lowerRendered.substring(mutablePrefix.length() + kotlinPrefix.length()); - if (differsOnlyInNullability(lowerWithoutPrefix, upperRendered.substring(kotlinPrefix.length()))) { - return kotlinPrefix + "(" + mutablePrefix + ")" + lowerWithoutPrefix + "!"; - } - } - else { - String arrayPrefix = "kotlin.Array<"; - String covariantArrayPrefix = "kotlin.Array -> (Mutable)List! + String simpleCollection = replacePrefixes( + lowerRendered, kotlinPrefix + mutablePrefix, upperRendered, kotlinPrefix, kotlinPrefix + "(" + mutablePrefix + ")" + ); + if (simpleCollection != null) return simpleCollection; + // java.util.Map.Entry -> (Mutable)Map.(Mutable)Entry! + String mutableEntry = replacePrefixes( + lowerRendered, kotlinPrefix + "MutableMap.MutableEntry", upperRendered, kotlinPrefix + "Map.Entry", + kotlinPrefix + "(Mutable)Map.(Mutable)Entry" + ); + if (mutableEntry != null) return mutableEntry; + + // Foo[] -> Array<(out) Foo!>! + String array = replacePrefixes( + lowerRendered, kotlinPrefix + "Array<", upperRendered, kotlinPrefix + "Array