Fix resolve (members/extensions with 'infix' has higher priority)

This commit is contained in:
Yan Zhulanow
2015-09-30 21:39:26 +03:00
parent d28ecc2316
commit 7e8674c6ee
9 changed files with 65 additions and 25 deletions
@@ -3,26 +3,34 @@
class Example
fun Example.plus(other: Example) = 0
operator fun Example.minus(other: Example) = 0
operator infix fun Example.minus(other: Example) = 0
operator fun Example.times(other: Example) = 0
operator infix fun Example.times(other: Example) = 0
fun Example.div(other: Example) = 0
fun a() {
with (Example()) {
operator fun Example.plus(other: Example) = ""
operator infix fun Example.plus(other: Example) = ""
fun Example.minus(other: Example) = ""
operator fun Example.times(other: Example) = ""
operator infix fun Example.times(other: Example) = ""
fun Example.div(other: Example) = ""
with (Example()) {
val a = Example()
val b = Example()
consumeString(a + b)
consumeInt(a - b)
consumeString(a plus b)
consumeInt(a minus b)
a <!OVERLOAD_RESOLUTION_AMBIGUITY!>*<!> b
a <!OVERLOAD_RESOLUTION_AMBIGUITY!>/<!> b
a <!OVERLOAD_RESOLUTION_AMBIGUITY!>times<!> b
a <!OVERLOAD_RESOLUTION_AMBIGUITY!>div<!> b
}
}
}
@@ -5,9 +5,9 @@ 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 operator infix 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 operator infix fun Example.times(/*0*/ other: Example): kotlin.Int
public final class Example {
public constructor Example()
@@ -1,32 +1,43 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER
class Example {
operator fun plus(other: Example) = 0
operator infix fun plus(other: Example) = 0
fun minus(other: Example) = 0
operator fun times(other: Example) = 0
operator infix fun times(other: Example) = 0
fun div(other: Example) = 0
}
fun Example.plus(other: Example) = ""
operator fun Example.minus(other: Example) = ""
operator infix fun Example.minus(other: Example) = ""
operator fun Example.times(other: Example) = ""
operator infix 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
a plus b
a minus b
a times b
a <!INFIX_MODIFIER_REQUIRED!>div<!> b
with (Example()) {
consumeInt(this + a)
consumeString(this - b)
consumeInt(this * a)
consumeInt(this <!OPERATOR_MODIFIER_REQUIRED!>/<!> b)
consumeInt(this plus a)
consumeString(this minus b)
consumeInt(this times a)
consumeInt(this <!INFIX_MODIFIER_REQUIRED!>div<!> b)
}
}
@@ -5,9 +5,9 @@ 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 operator infix 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 operator infix fun Example.times(/*0*/ other: Example): kotlin.String
public final class Example {
public constructor Example()
@@ -15,7 +15,7 @@ public final class 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 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 final operator infix fun plus(/*0*/ other: Example): kotlin.Int
public final operator infix fun times(/*0*/ other: Example): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -8,6 +8,8 @@ open class Example {
fun component2() = 0
fun inc() = Example()
fun plus(o: Example) = 0
}
class Example2 : Example()
@@ -20,8 +22,11 @@ operator fun Example.component2() = ""
operator fun Example.inc() = Example2()
infix fun Example.plus(o: Example) = ""
fun a() {
var a = Example()
val b = Example()
consumeString(a())
consumeString(a[1])
@@ -31,6 +36,8 @@ fun a() {
consumeString(y)
consumeExample2(++a)
consumeString(a plus b)
}
fun consumeInt(i: Int) {}
@@ -9,6 +9,7 @@ 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 infix fun Example.plus(/*0*/ o: Example): kotlin.String
public open class Example {
public constructor Example()
@@ -19,6 +20,7 @@ public open class Example {
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public final fun inc(): Example
public final fun invoke(): kotlin.Int
public final fun plus(/*0*/ o: Example): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -31,5 +33,6 @@ public final class Example2 : Example {
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 final override /*1*/ /*fake_override*/ fun plus(/*0*/ o: Example): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}