Gradual migration of operator 'mod' to 'rem'
- Introduce new 'rem' operator convention - Prefer 'rem()' to 'mod()' when both are available, even if mod() is a member, and rem() -- an extension - Place operator 'rem' under the language feature
This commit is contained in:
@@ -0,0 +1,17 @@
|
||||
class A() {
|
||||
var x = 5
|
||||
}
|
||||
|
||||
operator fun A.modAssign(y: Int) { throw RuntimeException("mod has been called instead of rem") }
|
||||
operator fun A.remAssign(y: Int) { x %= y + 1 }
|
||||
|
||||
fun box(): String {
|
||||
val original = A()
|
||||
val a = original
|
||||
|
||||
a %= 2
|
||||
if (a !== original) return "Fail 1: $a !== $original"
|
||||
if (a.x != 2) return "Fail 2: ${a.x} != 2"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
class A() {
|
||||
var x = 5
|
||||
|
||||
operator fun mod(y: Int) { throw RuntimeException("mod has been called instead of rem") }
|
||||
operator fun rem(y: Int) { x -= y }
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
val a = A()
|
||||
|
||||
a % 5
|
||||
|
||||
if (a.x != 0) {
|
||||
return "Fail: a.x(${a.x}) != 0"
|
||||
}
|
||||
|
||||
return "OK"
|
||||
}
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
public final class A {
|
||||
private field x: int
|
||||
public method <init>(): void
|
||||
public final method getX(): int
|
||||
public final method setX(p0: int): void
|
||||
}
|
||||
|
||||
|
||||
public final class RemAssignmentOperationKt {
|
||||
public final static @org.jetbrains.annotations.NotNull method box(): java.lang.String
|
||||
public final static method modAssign(@org.jetbrains.annotations.NotNull p0: A, p1: int): void
|
||||
public final static method remAssign(@org.jetbrains.annotations.NotNull p0: A, p1: int): void
|
||||
}
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
public final class A {
|
||||
private field x: int
|
||||
public method <init>(): void
|
||||
public final method getX(): int
|
||||
public final method mod(p0: int): void
|
||||
public final method rem(p0: int): void
|
||||
public final method setX(p0: int): void
|
||||
}
|
||||
|
||||
|
||||
public final class RemOverModOperationKt {
|
||||
public final static @org.jetbrains.annotations.NotNull method box(): java.lang.String
|
||||
}
|
||||
+41
@@ -0,0 +1,41 @@
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
|
||||
class OldAndNew {
|
||||
operator fun modAssign(x: Int) {}
|
||||
operator fun remAssign(x: Int) {}
|
||||
}
|
||||
|
||||
class OnlyOld {
|
||||
operator fun modAssign(x: Int) {}
|
||||
}
|
||||
|
||||
class OnlyNew {
|
||||
operator fun remAssign(x: Int) {}
|
||||
}
|
||||
|
||||
class Sample
|
||||
|
||||
operator fun Sample.modAssign(x: Int) {}
|
||||
operator fun Sample.remAssign(x: Int) {}
|
||||
|
||||
class ModAndRemAssign {
|
||||
operator fun mod(x: Int): ModAndRemAssign = ModAndRemAssign()
|
||||
operator fun remAssign(x: Int) {}
|
||||
}
|
||||
|
||||
fun test() {
|
||||
val oldAndNew = OldAndNew()
|
||||
oldAndNew %= 1
|
||||
|
||||
val onlyOld = OnlyOld()
|
||||
onlyOld %= 1
|
||||
|
||||
val onlyNew = OnlyNew()
|
||||
onlyNew %= 1
|
||||
|
||||
val sample = Sample()
|
||||
sample %= 1
|
||||
|
||||
var modAndRemAssign = ModAndRemAssign()
|
||||
modAndRemAssign <!ASSIGN_OPERATOR_AMBIGUITY!>%=<!> 1
|
||||
}
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
package
|
||||
|
||||
public fun test(): kotlin.Unit
|
||||
public operator fun Sample.modAssign(/*0*/ x: kotlin.Int): kotlin.Unit
|
||||
public operator fun Sample.remAssign(/*0*/ x: kotlin.Int): kotlin.Unit
|
||||
|
||||
public final class ModAndRemAssign {
|
||||
public constructor ModAndRemAssign()
|
||||
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 mod(/*0*/ x: kotlin.Int): ModAndRemAssign
|
||||
public final operator fun remAssign(/*0*/ x: kotlin.Int): kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public final class OldAndNew {
|
||||
public constructor OldAndNew()
|
||||
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 modAssign(/*0*/ x: kotlin.Int): kotlin.Unit
|
||||
public final operator fun remAssign(/*0*/ x: kotlin.Int): kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public final class OnlyNew {
|
||||
public constructor OnlyNew()
|
||||
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 remAssign(/*0*/ x: kotlin.Int): kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public final class OnlyOld {
|
||||
public constructor OnlyOld()
|
||||
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 modAssign(/*0*/ x: kotlin.Int): kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public final class Sample {
|
||||
public constructor Sample()
|
||||
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,35 @@
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
|
||||
class OldAndNew {
|
||||
operator fun mod(x: Int) {}
|
||||
operator fun rem(x: Int) {}
|
||||
}
|
||||
|
||||
class OnlyOld {
|
||||
operator fun mod(x: Int) {}
|
||||
}
|
||||
|
||||
class OnlyNew {
|
||||
operator fun rem(x: Int) {}
|
||||
}
|
||||
|
||||
class Sample
|
||||
|
||||
operator fun Sample.mod(x: Int) {}
|
||||
operator fun Sample.rem(x: Int) {}
|
||||
|
||||
class IntAndUnit {
|
||||
operator fun mod(x: Int): Int = 0
|
||||
operator fun rem(x: Int) {}
|
||||
}
|
||||
|
||||
fun test() {
|
||||
OldAndNew() % 1
|
||||
OnlyOld() % 1
|
||||
OnlyNew() % 1
|
||||
Sample() % 1
|
||||
|
||||
takeInt(<!TYPE_MISMATCH!>IntAndUnit() % 1<!>)
|
||||
}
|
||||
|
||||
fun takeInt(x: Int) {}
|
||||
@@ -0,0 +1,47 @@
|
||||
package
|
||||
|
||||
public fun takeInt(/*0*/ x: kotlin.Int): kotlin.Unit
|
||||
public fun test(): kotlin.Unit
|
||||
public operator fun Sample.mod(/*0*/ x: kotlin.Int): kotlin.Unit
|
||||
public operator fun Sample.rem(/*0*/ x: kotlin.Int): kotlin.Unit
|
||||
|
||||
public final class IntAndUnit {
|
||||
public constructor IntAndUnit()
|
||||
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 mod(/*0*/ x: kotlin.Int): kotlin.Int
|
||||
public final operator fun rem(/*0*/ x: kotlin.Int): kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public final class OldAndNew {
|
||||
public constructor OldAndNew()
|
||||
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 mod(/*0*/ x: kotlin.Int): kotlin.Unit
|
||||
public final operator fun rem(/*0*/ x: kotlin.Int): kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public final class OnlyNew {
|
||||
public constructor OnlyNew()
|
||||
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 rem(/*0*/ x: kotlin.Int): kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public final class OnlyOld {
|
||||
public constructor OnlyOld()
|
||||
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 mod(/*0*/ x: kotlin.Int): kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public final class Sample {
|
||||
public constructor Sample()
|
||||
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,16 @@
|
||||
// !LANGUAGE: -OperatorRem
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER, -UNUSED_VARIABLE
|
||||
|
||||
class Foo {
|
||||
<!UNSUPPORTED_FEATURE!>operator<!> fun rem(x: Int): Foo = Foo()
|
||||
}
|
||||
|
||||
class Bar {
|
||||
<!UNSUPPORTED_FEATURE!>operator<!> fun remAssign(x: Int) {}
|
||||
}
|
||||
|
||||
fun baz() {
|
||||
val f = Foo() % 1
|
||||
val b = Bar()
|
||||
b %= 1
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package
|
||||
|
||||
public fun baz(): kotlin.Unit
|
||||
|
||||
public final class Bar {
|
||||
public constructor Bar()
|
||||
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 remAssign(/*0*/ x: kotlin.Int): kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public final class Foo {
|
||||
public constructor Foo()
|
||||
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 rem(/*0*/ x: kotlin.Int): Foo
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER, -UNUSED_VARIABLE
|
||||
|
||||
class Foo {
|
||||
operator fun rem(x: Int): Foo = Foo()
|
||||
}
|
||||
|
||||
class Bar {
|
||||
operator fun remAssign(x: Int) {}
|
||||
}
|
||||
|
||||
fun baz() {
|
||||
val f = Foo() % 1
|
||||
val b = Bar()
|
||||
b %= 1
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package
|
||||
|
||||
public fun baz(): kotlin.Unit
|
||||
|
||||
public final class Bar {
|
||||
public constructor Bar()
|
||||
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 remAssign(/*0*/ x: kotlin.Int): kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public final class Foo {
|
||||
public constructor Foo()
|
||||
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 rem(/*0*/ x: kotlin.Int): Foo
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
|
||||
class Foo {
|
||||
}
|
||||
operator fun Foo.mod(x: Int): Foo = Foo()
|
||||
operator fun Foo.rem(x: Int): Int = 0
|
||||
|
||||
fun foo() {
|
||||
takeInt(Foo() % 1)
|
||||
}
|
||||
|
||||
fun takeInt(x: Int) {}
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
package
|
||||
|
||||
public fun foo(): kotlin.Unit
|
||||
public fun takeInt(/*0*/ x: kotlin.Int): kotlin.Unit
|
||||
public operator fun Foo.mod(/*0*/ x: kotlin.Int): Foo
|
||||
public operator fun Foo.rem(/*0*/ x: kotlin.Int): kotlin.Int
|
||||
|
||||
public final class Foo {
|
||||
public constructor Foo()
|
||||
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,12 @@
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
|
||||
class Foo {
|
||||
operator fun mod(x: Int): Foo = Foo()
|
||||
operator fun rem(x: Int): Int = 0
|
||||
}
|
||||
|
||||
fun foo() {
|
||||
takeInt(Foo() % 1)
|
||||
}
|
||||
|
||||
fun takeInt(x: Int) {}
|
||||
@@ -0,0 +1,13 @@
|
||||
package
|
||||
|
||||
public fun foo(): kotlin.Unit
|
||||
public fun takeInt(/*0*/ x: kotlin.Int): kotlin.Unit
|
||||
|
||||
public final class Foo {
|
||||
public constructor Foo()
|
||||
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 mod(/*0*/ x: kotlin.Int): Foo
|
||||
public final operator fun rem(/*0*/ x: kotlin.Int): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
|
||||
class Foo {
|
||||
operator fun mod(x: Int): Foo = Foo()
|
||||
}
|
||||
|
||||
operator fun Foo.rem(x: Int): Int = 0
|
||||
|
||||
|
||||
fun foo() {
|
||||
takeInt(Foo() % 1)
|
||||
}
|
||||
|
||||
fun takeInt(x: Int) {}
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
package
|
||||
|
||||
public fun foo(): kotlin.Unit
|
||||
public fun takeInt(/*0*/ x: kotlin.Int): kotlin.Unit
|
||||
public operator fun Foo.rem(/*0*/ x: kotlin.Int): kotlin.Int
|
||||
|
||||
public final class Foo {
|
||||
public constructor Foo()
|
||||
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 mod(/*0*/ x: kotlin.Int): Foo
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
Reference in New Issue
Block a user