From 8cbc9eee3ed00dc582becaf1fecad734baa06991 Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Fri, 19 Feb 2016 17:41:28 +0300 Subject: [PATCH] Improve AMBIGUOUS_CALLS renderer --- .../kotlin/idea/highlighter/IdeRenderers.kt | 5 +++-- .../overloadResolutionAmbiguityHtml.kt | 21 +++++++++++++++++++ .../overloadResolutionAmbiguityHtml1.html | 9 ++++++++ .../overloadResolutionAmbiguityTxt.kt | 21 +++++++++++++++++++ .../overloadResolutionAmbiguityTxt1.txt | 5 +++++ .../DiagnosticMessageTestGenerated.java | 12 +++++++++++ 6 files changed, 71 insertions(+), 2 deletions(-) create mode 100644 idea/testData/diagnosticMessage/overloadResolutionAmbiguityHtml.kt create mode 100644 idea/testData/diagnosticMessage/overloadResolutionAmbiguityHtml1.html create mode 100644 idea/testData/diagnosticMessage/overloadResolutionAmbiguityTxt.kt create mode 100644 idea/testData/diagnosticMessage/overloadResolutionAmbiguityTxt1.txt 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 1ade99e7fb4..8762e3bd219 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 @@ -30,10 +30,11 @@ object IdeRenderers { @JvmField val HTML_AMBIGUOUS_CALLS = Renderer { calls: Collection> -> - calls + val descriptors = calls .map { it.resultingDescriptor } .sortedWith(MemberComparator.INSTANCE) - .joinToString("") { "
  • ${DescriptorRenderer.HTML.render(it)}
  • " } + val context = RenderingContext.Impl(descriptors) + descriptors.joinToString("") { "
  • ${HTML.render(it, context)}
  • " } } @JvmField val HTML_RENDER_TYPE = SmartTypeRenderer(DescriptorRenderer.HTML) diff --git a/idea/testData/diagnosticMessage/overloadResolutionAmbiguityHtml.kt b/idea/testData/diagnosticMessage/overloadResolutionAmbiguityHtml.kt new file mode 100644 index 00000000000..1523113d284 --- /dev/null +++ b/idea/testData/diagnosticMessage/overloadResolutionAmbiguityHtml.kt @@ -0,0 +1,21 @@ +// !DIAGNOSTICS_NUMBER: 1 +// !DIAGNOSTICS: OVERLOAD_RESOLUTION_AMBIGUITY +// !MESSAGE_TYPE: HTML + +package a.b + +val ref1 = ::foo + +fun foo(a: kotlin.String, t: T) { + +} + +fun foo(b: String, t : T) { + +} + +fun foo(i: Int) { + +} + +class String \ No newline at end of file diff --git a/idea/testData/diagnosticMessage/overloadResolutionAmbiguityHtml1.html b/idea/testData/diagnosticMessage/overloadResolutionAmbiguityHtml1.html new file mode 100644 index 00000000000..30ee43babd2 --- /dev/null +++ b/idea/testData/diagnosticMessage/overloadResolutionAmbiguityHtml1.html @@ -0,0 +1,9 @@ + + +Overload resolution ambiguity. All these functions match. +
      +
    • public fun <`T> foo(b: a.b.String, t: ???): Unit defined in a.b
    • +
    • public fun foo(i: Int): Unit defined in a.b
    • +
    • public fun <`T> foo(a: kotlin.String, t: ???): Unit defined in a.b
    • +
    + \ No newline at end of file diff --git a/idea/testData/diagnosticMessage/overloadResolutionAmbiguityTxt.kt b/idea/testData/diagnosticMessage/overloadResolutionAmbiguityTxt.kt new file mode 100644 index 00000000000..3ff2ab5e3a7 --- /dev/null +++ b/idea/testData/diagnosticMessage/overloadResolutionAmbiguityTxt.kt @@ -0,0 +1,21 @@ +// !DIAGNOSTICS_NUMBER: 1 +// !DIAGNOSTICS: OVERLOAD_RESOLUTION_AMBIGUITY +// !MESSAGE_TYPE: TEXT + +package a.b + +val ref1 = ::foo + +fun foo(a: kotlin.String, t: T) { + +} + +fun foo(b: String, t : T) { + +} + +fun foo(i: Int) { + +} + +class String \ No newline at end of file diff --git a/idea/testData/diagnosticMessage/overloadResolutionAmbiguityTxt1.txt b/idea/testData/diagnosticMessage/overloadResolutionAmbiguityTxt1.txt new file mode 100644 index 00000000000..976c8db7227 --- /dev/null +++ b/idea/testData/diagnosticMessage/overloadResolutionAmbiguityTxt1.txt @@ -0,0 +1,5 @@ + +Overload resolution ambiguity: +public fun foo(b: a.b.String, t: ???): Unit defined in a.b +public fun foo(i: Int): Unit defined in a.b +public fun foo(a: kotlin.String, t: ???): Unit defined in a.b \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/highlighter/DiagnosticMessageTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/highlighter/DiagnosticMessageTestGenerated.java index 0df76c59e6e..815f211dfa6 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/highlighter/DiagnosticMessageTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/highlighter/DiagnosticMessageTestGenerated.java @@ -179,6 +179,18 @@ public class DiagnosticMessageTestGenerated extends AbstractDiagnosticMessageTes doTest(fileName); } + @TestMetadata("overloadResolutionAmbiguityHtml.kt") + public void testOverloadResolutionAmbiguityHtml() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/diagnosticMessage/overloadResolutionAmbiguityHtml.kt"); + doTest(fileName); + } + + @TestMetadata("overloadResolutionAmbiguityTxt.kt") + public void testOverloadResolutionAmbiguityTxt() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/diagnosticMessage/overloadResolutionAmbiguityTxt.kt"); + doTest(fileName); + } + @TestMetadata("renderCollectionOfTypes.kt") public void testRenderCollectionOfTypes() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/diagnosticMessage/renderCollectionOfTypes.kt");