Fix incorrect diagnostic message for CONFLICTING_OVERLOADS

- the member and the container were mixed up
- don't output "defined in" part of the message, because we tell later where
  it's already defined in
- fix an instability of the diagnostic order in OverloadResolver by using
  LinkedHashSet
This commit is contained in:
Alexander Udalov
2014-04-08 22:57:04 +04:00
parent 0d90dcf010
commit 4f9f5d231b
8 changed files with 47 additions and 10 deletions
@@ -17,7 +17,10 @@
package org.jetbrains.jet.plugin.highlighter;
import org.jetbrains.jet.lang.diagnostics.Diagnostic;
import org.jetbrains.jet.lang.diagnostics.rendering.*;
import org.jetbrains.jet.lang.diagnostics.rendering.DefaultErrorMessages;
import org.jetbrains.jet.lang.diagnostics.rendering.DiagnosticFactoryToRendererMap;
import org.jetbrains.jet.lang.diagnostics.rendering.DiagnosticRenderer;
import org.jetbrains.jet.lang.diagnostics.rendering.DispatchingDiagnosticRenderer;
import org.jetbrains.jet.renderer.DescriptorRenderer;
import static org.jetbrains.jet.lang.diagnostics.Errors.*;
@@ -82,7 +85,8 @@ public class IdeErrorMessages {
MAP.put(MANY_IMPL_MEMBER_NOT_IMPLEMENTED, "<html>{0} must override {1}<br />because it inherits many implementations of it</html>",
RENDER_CLASS_OR_OBJECT, DescriptorRenderer.HTML);
MAP.put(CONFLICTING_OVERLOADS, "<html>{1}<br />is already defined in ''{0}''</html>", DescriptorRenderer.HTML, TO_STRING);
MAP.put(CONFLICTING_OVERLOADS, "<html>''{0}''<br />is already defined in {1}</html>",
DescriptorRenderer.HTML_COMPACT_WITH_MODIFIERS, TO_STRING);
MAP.put(RESULT_TYPE_MISMATCH, "<html>Function return type mismatch." +
"<table><tr><td>Expected:</td><td>{1}</td></tr>" +
@@ -0,0 +1,7 @@
// !DIAGNOSTICS_NUMBER: 2
// !DIAGNOSTICS: CONFLICTING_OVERLOADS
class conflictingOverloads {
fun lol(x: Int) = x
fun lol(y: Int) = y
}
@@ -0,0 +1,10 @@
<!-- conflictingOverloadsClass1 -->
<html>
'<b>
internal</b>
<b>
final</b>
<b>
fun</b>
lol(x: kotlin.Int): kotlin.Int'<br />
is already defined in conflictingOverloads</html>
@@ -0,0 +1,10 @@
<!-- conflictingOverloadsClass2 -->
<html>
'<b>
internal</b>
<b>
final</b>
<b>
fun</b>
lol(y: kotlin.Int): kotlin.Int'<br />
is already defined in conflictingOverloads</html>
@@ -36,6 +36,11 @@ public class DiagnosticMessageTestGenerated extends AbstractDiagnosticMessageTes
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/diagnosticMessage"), Pattern.compile("^(.+)\\.kt$"), true);
}
@TestMetadata("conflictingOverloadsClass.kt")
public void testConflictingOverloadsClass() throws Exception {
doTest("idea/testData/diagnosticMessage/conflictingOverloadsClass.kt");
}
@TestMetadata("conflictingSubstitutions.kt")
public void testConflictingSubstitutions() throws Exception {
doTest("idea/testData/diagnosticMessage/conflictingSubstitutions.kt");