Add diagnostics on convention operator calls without an "operator" modifier on declaration site

This commit is contained in:
Yan Zhulanow
2015-09-16 21:47:16 +03:00
parent fe744abc3c
commit 43bf87e82d
8 changed files with 286 additions and 1 deletions
+111
View File
@@ -0,0 +1,111 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER
class Example {
public fun plus(o: Example) = o
public operator fun minus(o: Example) = o
public fun get(i: Int) = ""
public operator fun get(s: String) = ""
public fun set(i: Int, v: String) {}
public operator fun set(s: String, v: String) {}
public fun not() = false
public fun rangeTo(o: Example) = o
public fun contains(o: Example) = false
public fun compareTo(o: Example) = 0
public fun inc() = this
public fun dec() = this
public fun invoke() {}
}
class Example2 {
public operator fun not() = true
public fun plusAssign(o: Example2) {}
public operator fun minusAssign(o: Example2) {}
public operator fun rangeTo(o: Example2) = o
public operator fun contains(o: Example2) = false
public operator fun compareTo(o: Example2) = 0
public operator fun inc() = this
public operator fun dec() = this
public operator fun invoke() {}
}
fun a() {
var a = Example()
var b = Example()
var c = Example2()
var d = Example2()
Example() == Example()
a == b
c != d
Example() <!OPERATOR_MODIFIER_REQUIRED!>+<!> Example()
a <!OPERATOR_MODIFIER_REQUIRED!>+<!> b
a - b
<!OPERATOR_MODIFIER_REQUIRED!>a[1]<!>
a["str"]
<!OPERATOR_MODIFIER_REQUIRED!>a[1]<!> = "A"
a["str"] = "str"
a.plus(b)
a.minus(b)
a.get(1)
a.get("str")
c <!OPERATOR_MODIFIER_REQUIRED!>+=<!> d
c -= d
a<!OPERATOR_MODIFIER_REQUIRED!>..<!>b
c..d
Example()<!OPERATOR_MODIFIER_REQUIRED!>..<!>Example()
Example2()..Example2()
a <!OPERATOR_MODIFIER_REQUIRED!><<!> b
a <!OPERATOR_MODIFIER_REQUIRED!>>=<!> b
c > d
a <!OPERATOR_MODIFIER_REQUIRED!>in<!> b
c in d
a<!OPERATOR_MODIFIER_REQUIRED!>++<!>
a<!OPERATOR_MODIFIER_REQUIRED!>--<!>
c++
c--
<!OPERATOR_MODIFIER_REQUIRED!>!<!>a
!c
<!OPERATOR_MODIFIER_REQUIRED!>a<!>()
c()
}
abstract class Base {
abstract operator fun plus(o: Base): Base
abstract fun minus(o: Base): Base
}
open class Anc : Base() {
override fun plus(o: Base) = o
override fun minus(o: Base) = o
}
class Anc2 : Anc()
fun b() {
Anc() + Anc()
Anc() <!OPERATOR_MODIFIER_REQUIRED!>-<!> Anc()
Anc2() + Anc2()
}
+67
View File
@@ -0,0 +1,67 @@
package
public fun a(): kotlin.Unit
public fun b(): kotlin.Unit
public open class Anc : Base {
public constructor Anc()
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*/ fun minus(/*0*/ o: Base): Base
public open override /*1*/ fun plus(/*0*/ o: Base): Base
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final class Anc2 : Anc {
public constructor Anc2()
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 minus(/*0*/ o: Base): Base
public open override /*1*/ /*fake_override*/ fun plus(/*0*/ o: Base): Base
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public abstract class Base {
public constructor Base()
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 abstract fun minus(/*0*/ o: Base): Base
public abstract operator fun plus(/*0*/ o: Base): Base
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final class Example {
public constructor Example()
public final fun compareTo(/*0*/ o: Example): kotlin.Int
public final fun contains(/*0*/ o: Example): kotlin.Boolean
public final fun dec(): Example
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public final fun get(/*0*/ i: kotlin.Int): kotlin.String
public final operator fun get(/*0*/ s: kotlin.String): kotlin.String
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public final fun inc(): Example
public final fun invoke(): kotlin.Unit
public final operator fun minus(/*0*/ o: Example): Example
public final fun not(): kotlin.Boolean
public final fun plus(/*0*/ o: Example): Example
public final fun rangeTo(/*0*/ o: Example): Example
public final fun set(/*0*/ i: kotlin.Int, /*1*/ v: kotlin.String): kotlin.Unit
public final operator fun set(/*0*/ s: kotlin.String, /*1*/ v: kotlin.String): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final class Example2 {
public constructor Example2()
public final operator fun compareTo(/*0*/ o: Example2): kotlin.Int
public final operator fun contains(/*0*/ o: Example2): kotlin.Boolean
public final operator fun dec(): Example2
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 final operator fun inc(): Example2
public final operator fun invoke(): kotlin.Unit
public final operator fun minusAssign(/*0*/ o: Example2): kotlin.Unit
public final operator fun not(): kotlin.Boolean
public final fun plusAssign(/*0*/ o: Example2): kotlin.Unit
public final operator fun rangeTo(/*0*/ o: Example2): Example2
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}