diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/rendering/DefaultErrorMessages.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/rendering/DefaultErrorMessages.java index d1433a00b20..66da57a7064 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/rendering/DefaultErrorMessages.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/rendering/DefaultErrorMessages.java @@ -398,7 +398,7 @@ public class DefaultErrorMessages { MAP.put(MANY_IMPL_MEMBER_NOT_IMPLEMENTED, "{0} must override {1} because it inherits many implementations of it", RENDER_CLASS_OR_OBJECT, DescriptorRenderer.TEXT); - MAP.put(CONFLICTING_OVERLOADS, "{1} is already defined in ''{0}''", DescriptorRenderer.TEXT, TO_STRING); + MAP.put(CONFLICTING_OVERLOADS, "''{0}'' is already defined in {1}", DescriptorRenderer.COMPACT_WITH_MODIFIERS, TO_STRING); MAP.put(FUNCTION_EXPECTED, "Expression ''{0}''{1} cannot be invoked as a function. The function 'invoke()' is not found", ELEMENT_TEXT, new Renderer() { @NotNull diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverloadResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverloadResolver.java index 2ebe1b86226..81193e62d0b 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverloadResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverloadResolver.java @@ -43,8 +43,6 @@ public class OverloadResolver { this.trace = trace; } - - public void process(@NotNull BodiesResolveContext c) { checkOverloads(c); } @@ -60,7 +58,7 @@ public class OverloadResolver { checkOverloadsInPackages(c, inPackages); } - private void fillGroupedConstructors( + private static void fillGroupedConstructors( @NotNull BodiesResolveContext c, @NotNull MultiMap inClasses, @NotNull MultiMap inPackages @@ -133,7 +131,7 @@ public class OverloadResolver { MultiMap functionsByName = MultiMap.create(); if (classDescriptor.getKind() == ClassKind.ENUM_CLASS) { - ClassDescriptorWithResolutionScopes classObjectDescriptor = (ClassDescriptorWithResolutionScopes) classDescriptor.getClassObjectDescriptor(); + ClassDescriptorWithResolutionScopes classObjectDescriptor = classDescriptor.getClassObjectDescriptor(); assert classObjectDescriptor != null; for (CallableMemberDescriptor memberDescriptor : classObjectDescriptor.getDeclaredCallableMembers()) { functionsByName.putValue(memberDescriptor.getName(), memberDescriptor); @@ -164,13 +162,12 @@ public class OverloadResolver { // micro-optimization return; } - Set> redeclarations = findRedeclarations(functions); - reportRedeclarations(functionContainer, redeclarations); + reportRedeclarations(functionContainer, findRedeclarations(functions)); } @NotNull private Set> findRedeclarations(@NotNull Collection functions) { - Set> redeclarations = Sets.newHashSet(); + Set> redeclarations = Sets.newLinkedHashSet(); for (CallableMemberDescriptor member : functions) { for (CallableMemberDescriptor member2 : functions) { if (member == member2) { diff --git a/core/descriptors/src/org/jetbrains/jet/renderer/DescriptorRenderer.java b/core/descriptors/src/org/jetbrains/jet/renderer/DescriptorRenderer.java index 9b508c6fdda..35fa2460942 100644 --- a/core/descriptors/src/org/jetbrains/jet/renderer/DescriptorRenderer.java +++ b/core/descriptors/src/org/jetbrains/jet/renderer/DescriptorRenderer.java @@ -60,6 +60,10 @@ public interface DescriptorRenderer extends Renderer { DescriptorRenderer DEBUG_TEXT = new DescriptorRendererBuilder().setDebugMode(true).build(); + DescriptorRenderer HTML_COMPACT_WITH_MODIFIERS = new DescriptorRendererBuilder() + .setWithDefinedIn(false) + .setTextFormat(TextFormat.HTML).build(); + DescriptorRenderer HTML = new DescriptorRendererBuilder().setTextFormat(TextFormat.HTML).build(); @NotNull diff --git a/idea/src/org/jetbrains/jet/plugin/highlighter/IdeErrorMessages.java b/idea/src/org/jetbrains/jet/plugin/highlighter/IdeErrorMessages.java index 26f5d4645cb..84cbc7b1099 100644 --- a/idea/src/org/jetbrains/jet/plugin/highlighter/IdeErrorMessages.java +++ b/idea/src/org/jetbrains/jet/plugin/highlighter/IdeErrorMessages.java @@ -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, "{0} must override {1}
because it inherits many implementations of it", RENDER_CLASS_OR_OBJECT, DescriptorRenderer.HTML); - MAP.put(CONFLICTING_OVERLOADS, "{1}
is already defined in ''{0}''", DescriptorRenderer.HTML, TO_STRING); + MAP.put(CONFLICTING_OVERLOADS, "''{0}''
is already defined in {1}", + DescriptorRenderer.HTML_COMPACT_WITH_MODIFIERS, TO_STRING); MAP.put(RESULT_TYPE_MISMATCH, "Function return type mismatch." + "" + diff --git a/idea/testData/diagnosticMessage/conflictingOverloadsClass.kt b/idea/testData/diagnosticMessage/conflictingOverloadsClass.kt new file mode 100644 index 00000000000..4b0a2be2c51 --- /dev/null +++ b/idea/testData/diagnosticMessage/conflictingOverloadsClass.kt @@ -0,0 +1,7 @@ +// !DIAGNOSTICS_NUMBER: 2 +// !DIAGNOSTICS: CONFLICTING_OVERLOADS + +class conflictingOverloads { + fun lol(x: Int) = x + fun lol(y: Int) = y +} diff --git a/idea/testData/diagnosticMessage/conflictingOverloadsClass1.html b/idea/testData/diagnosticMessage/conflictingOverloadsClass1.html new file mode 100644 index 00000000000..007b2b855dd --- /dev/null +++ b/idea/testData/diagnosticMessage/conflictingOverloadsClass1.html @@ -0,0 +1,10 @@ + + +' +internal + +final + +fun + lol(x: kotlin.Int): kotlin.Int'
+is already defined in conflictingOverloads diff --git a/idea/testData/diagnosticMessage/conflictingOverloadsClass2.html b/idea/testData/diagnosticMessage/conflictingOverloadsClass2.html new file mode 100644 index 00000000000..f2533361b3b --- /dev/null +++ b/idea/testData/diagnosticMessage/conflictingOverloadsClass2.html @@ -0,0 +1,10 @@ + + +' +internal + +final + +fun + lol(y: kotlin.Int): kotlin.Int'
+is already defined in conflictingOverloads diff --git a/idea/tests/org/jetbrains/jet/plugin/highlighter/DiagnosticMessageTestGenerated.java b/idea/tests/org/jetbrains/jet/plugin/highlighter/DiagnosticMessageTestGenerated.java index 0ec4378342c..60f1aadac35 100644 --- a/idea/tests/org/jetbrains/jet/plugin/highlighter/DiagnosticMessageTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/plugin/highlighter/DiagnosticMessageTestGenerated.java @@ -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");
Expected:{1}