Fix KT-10764 IDEA doesn't show overload conflict between constructor and function...

When checking for overloads in package, consider functions and top-level class constructors as possibly conflicting between each other. NB OverloadUtil uses containing package scope from module descriptor.

Change diagnostic message for CONFLICTING_OVERLOAD: it's misleading in case of fun vs constructor conflict.

Add custom multifile test for diagnostics in IDE (probably not the best; should preprocess file content if it's required to check highlighting in multiple files, not only in the first file).

Add test for KT-10765 Incremental compilation misses overload conflict between constructor and function ...
This commit is contained in:
Dmitry Petrov
2016-02-01 16:27:58 +03:00
parent 7dd725f0a4
commit 65f754ffca
36 changed files with 193 additions and 84 deletions
+2 -2
View File
@@ -1,7 +1,7 @@
compiler/testData/cli/jvm/conflictingOverloads.kt:1:1: error: 'public fun a(): kotlin.collections.List<kotlin.Int>' is already defined in root package
compiler/testData/cli/jvm/conflictingOverloads.kt:1:1: error: 'public fun a(): kotlin.collections.List<kotlin.Int>' conflicts with another declaration: public fun a(): kotlin.collections.List<kotlin.String>
fun a(): List<Int> = null!!
^
compiler/testData/cli/jvm/conflictingOverloads.kt:2:1: error: 'public fun a(): kotlin.collections.List<kotlin.String>' is already defined in root package
compiler/testData/cli/jvm/conflictingOverloads.kt:2:1: error: 'public fun a(): kotlin.collections.List<kotlin.String>' conflicts with another declaration: public fun a(): kotlin.collections.List<kotlin.Int>
fun a(): List<String> = null!!
^
COMPILATION_ERROR
@@ -1,5 +1,5 @@
// !DIAGNOSTICS: -DUPLICATE_CLASS_NAMES
<!FUNCTION_DECLARATION_WITH_NO_NAME!>fun ()<!> {
<!FUNCTION_DECLARATION_WITH_NO_NAME, CONFLICTING_OVERLOADS!>fun ()<!> {
}
@@ -2,7 +2,7 @@
package<!SYNTAX!><!>
<!FUNCTION_DECLARATION_WITH_NO_NAME!>fun ()<!> {
<!FUNCTION_DECLARATION_WITH_NO_NAME, CONFLICTING_OVERLOADS!>fun ()<!> {
}
@@ -0,0 +1,10 @@
// FILE: test1.kt
class <!CONFLICTING_OVERLOADS!>A<!>
class B<!CONFLICTING_OVERLOADS!>(val x: Int)<!> {
<!CONFLICTING_OVERLOADS!>constructor(x: Int, y: Int)<!>: this(x + y)
}
// FILE: test2.kt
<!CONFLICTING_OVERLOADS!>fun A()<!> {}
<!CONFLICTING_OVERLOADS!>fun B(x: Int)<!> = x
<!CONFLICTING_OVERLOADS!>fun B(x: Int, y: Int)<!> = x + y
@@ -0,0 +1,21 @@
package
public fun A(): kotlin.Unit
public fun B(/*0*/ x: kotlin.Int): kotlin.Int
public fun B(/*0*/ x: kotlin.Int, /*1*/ y: kotlin.Int): kotlin.Int
public final class A {
public constructor A()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final class B {
public constructor B(/*0*/ x: kotlin.Int)
public constructor B(/*0*/ x: kotlin.Int, /*1*/ y: kotlin.Int)
public final val x: kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}