Member and extension functions with 'operator' have now higher priority

This commit is contained in:
Yan Zhulanow
2015-09-22 16:50:22 +03:00
parent 1139a8dd0e
commit 2c7f68ff71
10 changed files with 246 additions and 16 deletions
@@ -0,0 +1,33 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER
class Example
fun Example.plus(other: Example) = 0
operator fun Example.minus(other: Example) = 0
operator fun Example.times(other: Example) = 0
fun Example.div(other: Example) = 0
fun a() {
with (Example()) {
operator fun Example.plus(other: Example) = ""
fun Example.minus(other: Example) = ""
operator fun Example.times(other: Example) = ""
fun Example.div(other: Example) = ""
with (Example()) {
val a = Example()
val b = Example()
consumeString(a + b)
consumeInt(a - b)
a <!OVERLOAD_RESOLUTION_AMBIGUITY!>*<!> b
a <!OVERLOAD_RESOLUTION_AMBIGUITY!>/<!> b
}
}
}
public fun <T, R> with(receiver: T, f: T.() -> R): R = receiver.f()
fun consumeInt(i: Int) {}
fun consumeString(s: String) {}
@@ -0,0 +1,17 @@
package
public fun a(): kotlin.Unit
public fun consumeInt(/*0*/ i: kotlin.Int): kotlin.Unit
public fun consumeString(/*0*/ s: kotlin.String): kotlin.Unit
public fun </*0*/ T, /*1*/ R> with(/*0*/ receiver: T, /*1*/ f: T.() -> R): R
public fun Example.div(/*0*/ other: Example): kotlin.Int
public operator fun Example.minus(/*0*/ other: Example): kotlin.Int
public fun Example.plus(/*0*/ other: Example): kotlin.Int
public operator fun Example.times(/*0*/ other: Example): kotlin.Int
public final class Example {
public constructor Example()
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
}
@@ -0,0 +1,36 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER
class Example {
operator fun plus(other: Example) = 0
fun minus(other: Example) = 0
operator fun times(other: Example) = 0
fun div(other: Example) = 0
}
fun Example.plus(other: Example) = ""
operator fun Example.minus(other: Example) = ""
operator fun Example.times(other: Example) = ""
fun Example.div(other: Example) = ""
fun a() {
val a = Example()
val b = Example()
a + b
a - b
a * b
a <!OPERATOR_MODIFIER_REQUIRED!>/<!> b
with (Example()) {
consumeInt(this + a)
consumeString(this - b)
consumeInt(this * a)
consumeInt(this <!OPERATOR_MODIFIER_REQUIRED!>/<!> b)
}
}
public fun <T, R> with(receiver: T, f: T.() -> R): R = receiver.f()
fun consumeInt(i: Int) {}
fun consumeString(s: String) {}
@@ -0,0 +1,21 @@
package
public fun a(): kotlin.Unit
public fun consumeInt(/*0*/ i: kotlin.Int): kotlin.Unit
public fun consumeString(/*0*/ s: kotlin.String): kotlin.Unit
public fun </*0*/ T, /*1*/ R> with(/*0*/ receiver: T, /*1*/ f: T.() -> R): R
public fun Example.div(/*0*/ other: Example): kotlin.String
public operator fun Example.minus(/*0*/ other: Example): kotlin.String
public fun Example.plus(/*0*/ other: Example): kotlin.String
public operator fun Example.times(/*0*/ other: Example): kotlin.String
public final class Example {
public constructor Example()
public final fun div(/*0*/ other: Example): 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 final fun minus(/*0*/ other: Example): kotlin.Int
public final operator fun plus(/*0*/ other: Example): kotlin.Int
public final operator fun times(/*0*/ other: Example): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,38 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER
open class Example {
fun invoke() = 0
fun get(i: Int) = 0
fun component1() = 0
fun component2() = 0
fun inc() = Example()
}
class Example2 : Example()
operator fun Example.invoke() = ""
operator fun Example.get(i: Int) = ""
operator fun Example.component1() = ""
operator fun Example.component2() = ""
operator fun Example.inc() = Example2()
fun a() {
var a = Example()
consumeString(a())
consumeString(a[1])
val (x, y) = Example()
consumeString(x)
consumeString(y)
consumeExample2(++a)
}
fun consumeInt(i: Int) {}
fun consumeString(s: String) {}
fun consumeExample2(e: Example2) {}
@@ -0,0 +1,35 @@
package
public fun a(): kotlin.Unit
public fun consumeExample2(/*0*/ e: Example2): kotlin.Unit
public fun consumeInt(/*0*/ i: kotlin.Int): kotlin.Unit
public fun consumeString(/*0*/ s: kotlin.String): kotlin.Unit
public operator fun Example.component1(): kotlin.String
public operator fun Example.component2(): kotlin.String
public operator fun Example.get(/*0*/ i: kotlin.Int): kotlin.String
public operator fun Example.inc(): Example2
public operator fun Example.invoke(): kotlin.String
public open class Example {
public constructor Example()
public final fun component1(): kotlin.Int
public final fun component2(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public final fun get(/*0*/ i: kotlin.Int): kotlin.Int
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public final fun inc(): Example
public final fun invoke(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final class Example2 : Example {
public constructor Example2()
public final override /*1*/ /*fake_override*/ fun component1(): kotlin.Int
public final override /*1*/ /*fake_override*/ fun component2(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public final override /*1*/ /*fake_override*/ fun get(/*0*/ i: kotlin.Int): kotlin.Int
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public final override /*1*/ /*fake_override*/ fun inc(): Example
public final override /*1*/ /*fake_override*/ fun invoke(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}