diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/Renderers.kt b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/Renderers.kt index bf3bfc0fefc..40c26d70b52 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/Renderers.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/Renderers.kt @@ -31,6 +31,7 @@ import org.jetbrains.kotlin.psi.JetNamedDeclaration import org.jetbrains.kotlin.renderer.DescriptorRenderer import org.jetbrains.kotlin.renderer.Renderer import org.jetbrains.kotlin.resolve.DescriptorUtils +import org.jetbrains.kotlin.resolve.MemberComparator import org.jetbrains.kotlin.resolve.calls.inference.* import org.jetbrains.kotlin.resolve.calls.inference.TypeBounds.Bound import org.jetbrains.kotlin.resolve.calls.inference.TypeBounds.BoundKind.LOWER_BOUND @@ -95,12 +96,11 @@ public object Renderers { } public val AMBIGUOUS_CALLS: Renderer>> = Renderer { - argument: Collection> -> - val stringBuilder = StringBuilder("\n") - for (call in argument) { - stringBuilder.append(DescriptorRenderer.FQ_NAMES_IN_TYPES.render(call.getResultingDescriptor())).append("\n") - } - stringBuilder.toString() + calls: Collection> -> + calls + .map { it.getResultingDescriptor() } + .sortBy(MemberComparator.INSTANCE) + .joinToString(separator = "\n", prefix = "\n") { DescriptorRenderer.FQ_NAMES_IN_TYPES.render(it) } } platformStatic diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/IdeRenderers.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/IdeRenderers.kt index 1f3ec8d7bf9..7dba99672e8 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/IdeRenderers.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/IdeRenderers.kt @@ -21,6 +21,7 @@ import org.jetbrains.kotlin.diagnostics.rendering.Renderers import org.jetbrains.kotlin.idea.highlighter.renderersUtil.renderResolvedCall import org.jetbrains.kotlin.renderer.DescriptorRenderer import org.jetbrains.kotlin.renderer.Renderer +import org.jetbrains.kotlin.resolve.MemberComparator import org.jetbrains.kotlin.resolve.calls.inference.InferenceErrorData import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall import org.jetbrains.kotlin.resolve.jvm.diagnostics.ConflictingJvmDeclarationsData @@ -29,13 +30,10 @@ import org.jetbrains.kotlin.types.JetType public object IdeRenderers { public val HTML_AMBIGUOUS_CALLS: Renderer>> = Renderer { calls: Collection> -> - StringBuilder { - for (call in calls) { - append("
  • ") - append(DescriptorRenderer.HTML.render(call.getResultingDescriptor())) - append("
  • ") - } - }.toString() + calls + .map { it.getResultingDescriptor() } + .sortBy(MemberComparator.INSTANCE) + .joinToString("") { "
  • " + DescriptorRenderer.HTML.render(it) + "
  • " } } public val HTML_RENDER_TYPE: Renderer = Renderer { @@ -44,13 +42,11 @@ public object IdeRenderers { public val HTML_NONE_APPLICABLE_CALLS: Renderer>> = Renderer { calls: Collection> -> - StringBuilder { - for (resolvedCall in calls) { - append("
  • ") - append(renderResolvedCall(resolvedCall)) - append("
  • ") - } - }.toString() + // TODO: compareBy(comparator, selector) in stdlib + val comparator = comparator> { c1, c2 -> MemberComparator.INSTANCE.compare(c1.getResultingDescriptor(), c2.getResultingDescriptor()) } + calls + .sortBy(comparator) + .joinToString("") { "
  • " + renderResolvedCall(it) + "
  • " } } public val HTML_TYPE_INFERENCE_CONFLICTING_SUBSTITUTIONS_RENDERER: Renderer = Renderer { @@ -76,19 +72,14 @@ public object IdeRenderers { public val HTML_CONFLICTING_JVM_DECLARATIONS_DATA: Renderer = Renderer { data: ConflictingJvmDeclarationsData -> - val sb = StringBuilder { - append("
      ") - for (origin in data.signatureOrigins) { - val descriptor = origin.descriptor - if (descriptor != null) { - append("
    • ") - append(DescriptorRenderer.HTML_COMPACT_WITH_MODIFIERS.render(descriptor)) - append("
    • \n") - } - } - append("
    ") - } - ("The following declarations have the same JVM signature (" + data.signature.name + data.signature.desc + "):
    \n" + sb).trim() + + val conflicts = data.signatureOrigins + .map { it.descriptor } + .filterNotNull() + .sortBy(MemberComparator.INSTANCE) + .joinToString("") { "
  • " + DescriptorRenderer.HTML_COMPACT_WITH_MODIFIERS.render(it) + "
  • \n" } + + "The following declarations have the same JVM signature (${data.signature.name}${data.signature.desc}):
    \n
      \n$conflicts
    " } public val HTML_THROWABLE: Renderer = Renderer { diff --git a/idea/testData/diagnosticMessage/noneApplicable1.html b/idea/testData/diagnosticMessage/noneApplicable1.html index 7d57dac4a43..a5ce102451c 100644 --- a/idea/testData/diagnosticMessage/noneApplicable1.html +++ b/idea/testData/diagnosticMessage/noneApplicable1.html @@ -2,8 +2,8 @@ None of the following functions can be called with the arguments supplied.
      -
    • foo(Int, String, Boolean) defined in root package
    • foo(Boolean, String) defined in root package
    • foo(Int) defined in root package
    • +
    • foo(Int, String, Boolean) defined in root package
    \ No newline at end of file diff --git a/idea/testData/diagnosticMessage/noneApplicableGeneric1.html b/idea/testData/diagnosticMessage/noneApplicableGeneric1.html index b81b5fb2c2e..f025734706a 100644 --- a/idea/testData/diagnosticMessage/noneApplicableGeneric1.html +++ b/idea/testData/diagnosticMessage/noneApplicableGeneric1.html @@ -2,14 +2,14 @@ None of the following functions can be called with the arguments supplied.
      -
    • foo(Int, Any, List<`Int>)
      - where T = Int for
      - fun <`T> foo(t: T, a: Any, l: List<`T>): Int defined in p
    • -
    • foo(Int, R, MutableList<`Int>, MutableList<`R>)
      - where R cannot be inferred; T = Int for
      - fun <`T, R> foo(t: T, r: R, lt: MutableList<`T>, lr: MutableList<`R>): Int defined in p
    • foo(T, Any, MutableList<`T>, MutableList<`T>)
      where T cannot be inferred for
      fun <`T> foo(t: T, a: Any, lt: MutableList<`T>, lr: MutableList<`T>): Int defined in p
    • +
    • foo(Int, R, MutableList<`Int>, MutableList<`R>)
      + where R cannot be inferred; T = Int for
      + fun <`T, R> foo(t: T, r: R, lt: MutableList<`T>, lr: MutableList<`R>): Int defined in p
    • +
    • foo(Int, Any, List<`Int>)
      + where T = Int for
      + fun <`T> foo(t: T, a: Any, l: List<`T>): Int defined in p
    \ No newline at end of file diff --git a/idea/testData/quickfix/autoImports/minusOperator.after.kt b/idea/testData/quickfix/autoImports/minusOperator.after.kt index 1a6ff060fb6..8d4e807121c 100644 --- a/idea/testData/quickfix/autoImports/minusOperator.after.kt +++ b/idea/testData/quickfix/autoImports/minusOperator.after.kt @@ -1,5 +1,5 @@ // "Import" "true" -// ERROR: Unresolved reference.
    None of the following candidates is applicable because of receiver type mismatch:
    • internal fun kotlin.String.minus(str: kotlin.String): kotlin.String defined in h
    • internal fun kotlin.String.minus(i: java.lang.Integer): kotlin.String defined in h
    +// ERROR: Unresolved reference.
    None of the following candidates is applicable because of receiver type mismatch:
    • internal fun kotlin.String.minus(i: java.lang.Integer): kotlin.String defined in h
    • internal fun kotlin.String.minus(str: kotlin.String): kotlin.String defined in h
    package h diff --git a/idea/testData/quickfix/autoImports/minusOperator.before.Main.kt b/idea/testData/quickfix/autoImports/minusOperator.before.Main.kt index da664475041..7baf001c148 100644 --- a/idea/testData/quickfix/autoImports/minusOperator.before.Main.kt +++ b/idea/testData/quickfix/autoImports/minusOperator.before.Main.kt @@ -1,5 +1,5 @@ // "Import" "true" -// ERROR: Unresolved reference.
    None of the following candidates is applicable because of receiver type mismatch:
    • internal fun kotlin.String.minus(str: kotlin.String): kotlin.String defined in h
    • internal fun kotlin.String.minus(i: java.lang.Integer): kotlin.String defined in h
    +// ERROR: Unresolved reference.
    None of the following candidates is applicable because of receiver type mismatch:
    • internal fun kotlin.String.minus(i: java.lang.Integer): kotlin.String defined in h
    • internal fun kotlin.String.minus(str: kotlin.String): kotlin.String defined in h
    package h diff --git a/idea/testData/quickfix/insertDelegationCall/primaryRequiredWithParameter.kt b/idea/testData/quickfix/insertDelegationCall/primaryRequiredWithParameter.kt index 1a8f833400f..dc60b8d9399 100644 --- a/idea/testData/quickfix/insertDelegationCall/primaryRequiredWithParameter.kt +++ b/idea/testData/quickfix/insertDelegationCall/primaryRequiredWithParameter.kt @@ -1,5 +1,5 @@ // "Insert 'this()' call" "true" -// ERROR: None of the following functions can be called with the arguments supplied.
    • (String) defined in A
    • (Int) defined in A
    +// ERROR: None of the following functions can be called with the arguments supplied.
    • (Int) defined in A
    • (String) defined in A
    class A(val x: Int) { constructor(x: String) diff --git a/idea/testData/quickfix/insertDelegationCall/primaryRequiredWithParameter.kt.after b/idea/testData/quickfix/insertDelegationCall/primaryRequiredWithParameter.kt.after index 99a50ab5997..6c8c77c300b 100644 --- a/idea/testData/quickfix/insertDelegationCall/primaryRequiredWithParameter.kt.after +++ b/idea/testData/quickfix/insertDelegationCall/primaryRequiredWithParameter.kt.after @@ -1,5 +1,5 @@ // "Insert 'this()' call" "true" -// ERROR: None of the following functions can be called with the arguments supplied.
    • (String) defined in A
    • (Int) defined in A
    +// ERROR: None of the following functions can be called with the arguments supplied.
    • (Int) defined in A
    • (String) defined in A
    class A(val x: Int) { constructor(x: String) : this() diff --git a/j2k/testData/fileOrElement/boxedType/kt-671.kt b/j2k/testData/fileOrElement/boxedType/kt-671.kt index a49a57a255c..d51c57abb0e 100644 --- a/j2k/testData/fileOrElement/boxedType/kt-671.kt +++ b/j2k/testData/fileOrElement/boxedType/kt-671.kt @@ -1,4 +1,4 @@ -// ERROR: None of the following functions can be called with the arguments supplied: public open fun valueOf(p0: kotlin.String!, p1: kotlin.Int): kotlin.Short! defined in java.lang.Short public open fun valueOf(p0: kotlin.String!): kotlin.Short! defined in java.lang.Short public open fun valueOf(p0: kotlin.Short): kotlin.Short! defined in java.lang.Short +// ERROR: None of the following functions can be called with the arguments supplied: public open fun valueOf(p0: kotlin.Short): kotlin.Short! defined in java.lang.Short public open fun valueOf(p0: kotlin.String!): kotlin.Short! defined in java.lang.Short public open fun valueOf(p0: kotlin.String!, p1: kotlin.Int): kotlin.Short! defined in java.lang.Short package demo class Test { diff --git a/j2k/testData/fileOrElement/issues/kt-807.kt b/j2k/testData/fileOrElement/issues/kt-807.kt index b4c74246a85..61d09860a71 100644 --- a/j2k/testData/fileOrElement/issues/kt-807.kt +++ b/j2k/testData/fileOrElement/issues/kt-807.kt @@ -1,5 +1,5 @@ -// ERROR: None of the following functions can be called with the arguments supplied: public constructor FileInputStream(p0: kotlin.String!) defined in java.io.FileInputStream public constructor FileInputStream(p0: java.io.File!) defined in java.io.FileInputStream public constructor FileInputStream(p0: [ERROR : Unresolved java classifier: FileDescriptor]!) defined in java.io.FileInputStream -// ERROR: None of the following functions can be called with the arguments supplied: public constructor InputStreamReader(p0: java.io.InputStream!) defined in java.io.InputStreamReader public constructor InputStreamReader(p0: java.io.InputStream!, p1: kotlin.String!) defined in java.io.InputStreamReader public constructor InputStreamReader(p0: java.io.InputStream!, p1: java.nio.charset.Charset!) defined in java.io.InputStreamReader public constructor InputStreamReader(p0: java.io.InputStream!, p1: [ERROR : Unresolved java classifier: CharsetDecoder]!) defined in java.io.InputStreamReader +// ERROR: None of the following functions can be called with the arguments supplied: public constructor FileInputStream(p0: [ERROR : Unresolved java classifier: FileDescriptor]!) defined in java.io.FileInputStream public constructor FileInputStream(p0: java.io.File!) defined in java.io.FileInputStream public constructor FileInputStream(p0: kotlin.String!) defined in java.io.FileInputStream +// ERROR: None of the following functions can be called with the arguments supplied: public constructor InputStreamReader(p0: java.io.InputStream!) defined in java.io.InputStreamReader public constructor InputStreamReader(p0: java.io.InputStream!, p1: [ERROR : Unresolved java classifier: CharsetDecoder]!) defined in java.io.InputStreamReader public constructor InputStreamReader(p0: java.io.InputStream!, p1: java.nio.charset.Charset!) defined in java.io.InputStreamReader public constructor InputStreamReader(p0: java.io.InputStream!, p1: kotlin.String!) defined in java.io.InputStreamReader // ERROR: Assignments are not expressions, and only expressions are allowed in this context // ERROR: Unresolved reference: close import java.io.*