improve diagnostic for KT-9484 Don't allow named arguments for inherited functions with parameter name conflicts

#KT-9484 Fixed
This commit is contained in:
Michael Nedzelsky
2015-10-13 16:14:51 +03:00
parent d05a7224c7
commit 27b13dda65
7 changed files with 60 additions and 3 deletions
@@ -10,6 +10,18 @@ interface B {
<!DIFFERENT_NAMES_FOR_THE_SAME_PARAMETER_IN_SUPERTYPES!>interface D<!> : B, A
fun foo(x : C, y : D){
x.foo(<!NAME_FOR_AMBIGUOUS_PARAMETER!>x<!> = 0)
x.foo(<!NAME_FOR_AMBIGUOUS_PARAMETER!>y<!> = 0)
y.foo(<!NAME_FOR_AMBIGUOUS_PARAMETER!>x<!> = 0)
y.foo(<!NAME_FOR_AMBIGUOUS_PARAMETER!>y<!> = 0)
}
abstract <!DIFFERENT_NAMES_FOR_THE_SAME_PARAMETER_IN_SUPERTYPES!>class C1<!> : A, B
abstract <!DIFFERENT_NAMES_FOR_THE_SAME_PARAMETER_IN_SUPERTYPES!>class D1<!> : A, B
fun bar(x : C1, y : D1){
x.foo(<!NAME_FOR_AMBIGUOUS_PARAMETER!>x<!> = 0)
x.foo(<!NAME_FOR_AMBIGUOUS_PARAMETER!>y<!> = 0)
y.foo(<!NAME_FOR_AMBIGUOUS_PARAMETER!>x<!> = 0)
y.foo(<!NAME_FOR_AMBIGUOUS_PARAMETER!>y<!> = 0)
}
@@ -1,5 +1,6 @@
package
public fun bar(/*0*/ x: C1, /*1*/ y: D1): kotlin.Unit
public fun foo(/*0*/ x: C, /*1*/ y: D): kotlin.Unit
public interface A {
@@ -23,9 +24,25 @@ public interface C : A, B {
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
}
public abstract class C1 : A, B {
public constructor C1()
public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public abstract override /*2*/ /*fake_override*/ fun foo(/*0*/ y: kotlin.Int): kotlin.Unit
public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
}
public interface D : B, A {
public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public abstract override /*2*/ /*fake_override*/ fun foo(/*0*/ x: kotlin.Int): kotlin.Unit
public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
}
public abstract class D1 : A, B {
public constructor D1()
public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public abstract override /*2*/ /*fake_override*/ fun foo(/*0*/ y: kotlin.Int): kotlin.Unit
public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -15,6 +15,10 @@ interface B {
fun test(c: C) {
c.foo(<!NAME_FOR_AMBIGUOUS_PARAMETER!>b1<!> = 1, <!NAME_FOR_AMBIGUOUS_PARAMETER!>b2<!> = 1.0)
c.foo(<!NAME_FOR_AMBIGUOUS_PARAMETER!>a1<!> = 1, <!NAME_FOR_AMBIGUOUS_PARAMETER!>b2<!> = 1.0)
c.foo(<!NAME_FOR_AMBIGUOUS_PARAMETER!>a1<!> = 1, <!NAME_FOR_AMBIGUOUS_PARAMETER!>a2<!> = 1.0)
c.foo(<!NAME_FOR_AMBIGUOUS_PARAMETER!>a1<!> = 1, <!NAME_FOR_AMBIGUOUS_PARAMETER!>a2<!> = 1.0)
c.bar(a1 = 1, a2 = 1.0, <!NAME_FOR_AMBIGUOUS_PARAMETER!>b3<!>= "")
c.baz(a1 = 1, <!NAME_FOR_AMBIGUOUS_PARAMETER!>b2<!> = 1.0, a3 = "", <!NAME_FOR_AMBIGUOUS_PARAMETER!>b4<!> = 2, a5 = "")
c.baz(a1 = 1, <!NAME_FOR_AMBIGUOUS_PARAMETER!>a2<!> = 1.0, a3 = "", <!NAME_FOR_AMBIGUOUS_PARAMETER!>b4<!> = 2, a5 = "")
}
@@ -10,5 +10,6 @@ interface B {
}
fun test(c: C) {
c.foo(<!NAME_FOR_AMBIGUOUS_PARAMETER!>a<!> = 1)
c.foo(<!NAME_FOR_AMBIGUOUS_PARAMETER!>b<!> = 1)
}
@@ -10,5 +10,6 @@ interface B {
}
fun test(c: C) {
c.foo(<!NAME_FOR_AMBIGUOUS_PARAMETER!>a<!> = 1)
c.foo(<!NAME_FOR_AMBIGUOUS_PARAMETER!>b<!> = 1)
}
@@ -10,5 +10,6 @@ interface B<E> {
}
fun test(c: C<Int>) {
c.foo(<!NAME_FOR_AMBIGUOUS_PARAMETER!>a<!> = 1)
c.foo(<!NAME_FOR_AMBIGUOUS_PARAMETER!>b<!> = 1)
}