Improve header/impl mismatch diagnostic messages

Try to report most mismatch errors on the 'impl' declaration. Only
report a mismatch error on the 'header' declaration if no error would be
otherwise reported on any 'impl' declaration in the compilation unit.
Also render declaration kind in the message

 #KT-18447 In Progress
This commit is contained in:
Alexander Udalov
2017-07-17 20:54:23 +03:00
parent 472959aca1
commit 74ba0080b1
34 changed files with 372 additions and 494 deletions
@@ -1,4 +1,4 @@
header class <error>My</error> {
header class My {
fun foo(): Int
@@ -6,7 +6,7 @@ header class <error>My</error> {
}
header class <error>Your</error> {
header class Your {
fun foo(): Int
@@ -20,4 +20,4 @@ header class His {
fun bar(arg: Int): Boolean
}
}
@@ -1,13 +1,13 @@
<error descr="[IMPLEMENTATION_WITHOUT_HEADER] Modifier 'impl' is only applicable to members that are initially declared in platform-independent code">impl</error> class My {
impl class <error>My</error> {
<error descr="[IMPLEMENTATION_WITHOUT_HEADER] Modifier 'impl' is only applicable to members that are initially declared in platform-independent code">impl</error> fun foo() = 42
<error>impl fun foo()</error> = 42
}
<error descr="[IMPLEMENTATION_WITHOUT_HEADER] Modifier 'impl' is only applicable to members that are initially declared in platform-independent code">impl</error> class Your {
impl class <error>Your</error> {
<error descr="[IMPLEMENTATION_WITHOUT_HEADER] Modifier 'impl' is only applicable to members that are initially declared in platform-independent code">impl</error> fun foo() = 13
<error>impl fun foo()</error> = 13
<error descr="[IMPLEMENTATION_WITHOUT_HEADER] Modifier 'impl' is only applicable to members that are initially declared in platform-independent code">impl</error> fun bar(arg: Int) = arg
<error>impl fun bar(arg: Int)</error> = arg
}
@@ -17,4 +17,4 @@ impl class His {
impl fun bar(arg: Int) = arg == foo()
}
}