[FIR] KT-55747: Report error for operator fun mod

^KT-55747 Fixed

Merge-request: KT-MR-8522
Merged-by: Nikolay Lunyak <Nikolay.Lunyak@jetbrains.com>
This commit is contained in:
Nikolay Lunyak
2023-01-30 08:48:33 +00:00
committed by Space Team
parent 37a7044e74
commit e2403c801f
40 changed files with 147 additions and 173 deletions
@@ -2,12 +2,12 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER
class OldAndNew {
operator fun modAssign(x: Int) {}
<!DEPRECATED_BINARY_MOD!>operator<!> fun modAssign(x: Int) {}
operator fun remAssign(x: Int) {}
}
class OnlyOld {
operator fun modAssign(x: Int) {}
<!DEPRECATED_BINARY_MOD!>operator<!> fun modAssign(x: Int) {}
}
class OnlyNew {
@@ -16,11 +16,11 @@ class OnlyNew {
class Sample
operator fun Sample.modAssign(x: Int) {}
<!DEPRECATED_BINARY_MOD!>operator<!> fun Sample.modAssign(x: Int) {}
operator fun Sample.remAssign(x: Int) {}
class ModAndRemAssign {
operator fun mod(x: Int): ModAndRemAssign = ModAndRemAssign()
<!DEPRECATED_BINARY_MOD!>operator<!> fun mod(x: Int): ModAndRemAssign = ModAndRemAssign()
operator fun remAssign(x: Int) {}
}
@@ -2,12 +2,12 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER
class OldAndNew {
operator fun mod(x: Int) {}
<!DEPRECATED_BINARY_MOD!>operator<!> fun mod(x: Int) {}
operator fun rem(x: Int) {}
}
class OnlyOld {
operator fun mod(x: Int) {}
<!DEPRECATED_BINARY_MOD!>operator<!> fun mod(x: Int) {}
}
class OnlyNew {
@@ -16,11 +16,11 @@ class OnlyNew {
class Sample
operator fun Sample.mod(x: Int) {}
<!DEPRECATED_BINARY_MOD!>operator<!> fun Sample.mod(x: Int) {}
operator fun Sample.rem(x: Int) {}
class IntAndUnit {
operator fun mod(x: Int) = 0
<!DEPRECATED_BINARY_MOD!>operator<!> fun mod(x: Int) = 0
operator fun rem(x: Int): Int = 0
}
@@ -2,23 +2,23 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER
object ModAndRem {
operator fun mod(x: Int) {}
<!DEPRECATED_BINARY_MOD!>operator<!> fun mod(x: Int) {}
operator fun rem(x: Int) {}
}
object OldMod {
operator fun mod(x: Int) {}
<!DEPRECATED_BINARY_MOD!>operator<!> fun mod(x: Int) {}
}
object ModAndRemExtension
operator fun ModAndRemExtension.mod(x: Int) {}
<!DEPRECATED_BINARY_MOD!>operator<!> fun ModAndRemExtension.mod(x: Int) {}
operator fun ModAndRemExtension.rem(x: Int) {}
object ModExtension
operator fun ModExtension.mod(x: Int) {}
<!DEPRECATED_BINARY_MOD!>operator<!> fun ModExtension.mod(x: Int) {}
object ModMemberAndRemExtension {
operator fun mod(x: Int) {}
<!DEPRECATED_BINARY_MOD!>operator<!> fun mod(x: Int) {}
}
operator fun ModMemberAndRemExtension.rem(x: Int) {}
@@ -2,7 +2,7 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER
object OldMod {
operator fun mod(x: Int) {}
<!DEPRECATED_BINARY_MOD!>operator<!> fun mod(x: Int) {}
}
object RemExtension
@@ -2,16 +2,16 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER
object ModAndRem {
operator fun mod(x: Int) {}
<!FORBIDDEN_BINARY_MOD!>operator<!> fun mod(x: Int) {}
operator fun rem(x: Int) {}
operator fun modAssign(x: Int) {}
<!FORBIDDEN_BINARY_MOD!>operator<!> fun modAssign(x: Int) {}
operator fun remAssign(x: Int) {}
}
object JustMod {
operator fun mod(x: Int) {}
operator fun modAssign(x: Int) {}
<!FORBIDDEN_BINARY_MOD!>operator<!> fun mod(x: Int) {}
<!FORBIDDEN_BINARY_MOD!>operator<!> fun modAssign(x: Int) {}
}
fun foo() {
@@ -1,17 +0,0 @@
// !LANGUAGE: -ProhibitOperatorMod
// !DIAGNOSTICS: -UNUSED_PARAMETER, -EXTENSION_SHADOWED_BY_MEMBER
class ModAndRemAssign {
operator fun mod(x: Int) = ModAndRemAssign()
operator fun mod(x: String) = ModAndRemAssign()
operator fun modAssign(x: String) {}
operator fun remAssign(x: Int) {}
}
operator fun ModAndRemAssign.mod(x: String) = ModAndRemAssign()
operator fun ModAndRemAssign.modAssign(x: String) {}
fun test() {
val modAndRemAssign = ModAndRemAssign()
modAndRemAssign %= 1
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !LANGUAGE: -ProhibitOperatorMod
// !DIAGNOSTICS: -UNUSED_PARAMETER, -EXTENSION_SHADOWED_BY_MEMBER
@@ -1,13 +0,0 @@
// !LANGUAGE: -ProhibitOperatorMod
// !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) {}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !LANGUAGE: -ProhibitOperatorMod
// !DIAGNOSTICS: -UNUSED_PARAMETER
@@ -1,13 +0,0 @@
// !LANGUAGE: -ProhibitOperatorMod
// !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) {}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !LANGUAGE: -ProhibitOperatorMod
// !DIAGNOSTICS: -UNUSED_PARAMETER
@@ -1,16 +0,0 @@
// !LANGUAGE: -ProhibitOperatorMod
// !DIAGNOSTICS: -UNUSED_PARAMETER
class A {
companion object {
operator fun A.rem(x: Int) = 0
}
fun test() {
operator fun A.mod(x: Int) = ""
takeInt(A() % 123)
}
}
fun takeInt(x: Int) {}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !LANGUAGE: -ProhibitOperatorMod
// !DIAGNOSTICS: -UNUSED_PARAMETER
@@ -1,30 +0,0 @@
// !LANGUAGE: -ProhibitOperatorMod
// !DIAGNOSTICS: -UNUSED_PARAMETER
object B
class A {
operator fun B.rem(x: Int) = 0
}
fun test1() {
operator fun B.mod(x: Int) = ""
with(A()) {
takeInt(B % 10)
}
}
class C {
operator fun B.mod(x: Int) = ""
}
fun test2() {
operator fun B.rem(x: Int) = 0
with(C()) {
takeInt(B % 10)
}
}
fun takeInt(x: Int) {}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !LANGUAGE: -ProhibitOperatorMod
// !DIAGNOSTICS: -UNUSED_PARAMETER
@@ -1,20 +0,0 @@
// !LANGUAGE: -ProhibitOperatorMod
// !DIAGNOSTICS: -UNUSED_PARAMETER
class A {
operator fun Int.mod(s: String) = 4
}
class B {
operator fun Int.rem(s: String) = ""
}
fun test() {
with(B()) {
with(A()) {
takeString(1 % "")
}
}
}
fun takeString(s: String) {}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !LANGUAGE: -ProhibitOperatorMod
// !DIAGNOSTICS: -UNUSED_PARAMETER
@@ -1,15 +0,0 @@
// !LANGUAGE: -ProhibitOperatorMod
// !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) {}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !LANGUAGE: -ProhibitOperatorMod
// !DIAGNOSTICS: -UNUSED_PARAMETER
@@ -1,17 +0,0 @@
// !LANGUAGE: -ProhibitOperatorMod
// !DIAGNOSTICS: -UNUSED_PARAMETER, -EXTENSION_SHADOWED_BY_MEMBER
class ModAndRemAssign {
operator fun mod(x: Int) = ModAndRemAssign()
operator fun mod(x: String) = ModAndRemAssign()
operator fun modAssign(x: String) {}
operator fun rem(x: Int) = ModAndRemAssign()
}
operator fun ModAndRemAssign.mod(x: String) = ModAndRemAssign()
operator fun ModAndRemAssign.modAssign(x: String) {}
fun test() {
var modAndRemAssign = ModAndRemAssign()
modAndRemAssign %= 1
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !LANGUAGE: -ProhibitOperatorMod
// !DIAGNOSTICS: -UNUSED_PARAMETER, -EXTENSION_SHADOWED_BY_MEMBER
@@ -1,12 +0,0 @@
// !LANGUAGE: -ProhibitOperatorMod
// !DIAGNOSTICS: -UNUSED_PARAMETER
object RemAndModAssign {
operator fun modAssign(x: String) {}
operator fun rem(x: Int) = RemAndModAssign
}
fun test2() {
var c = RemAndModAssign
c %= 123
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !LANGUAGE: -ProhibitOperatorMod
// !DIAGNOSTICS: -UNUSED_PARAMETER
@@ -6,7 +6,7 @@ object A {
@Deprecated("Use mod instead", ReplaceWith("mod"), DeprecationLevel.HIDDEN)
operator fun rem(x: Int) = 0
operator fun mod(x: Int) = ""
<!DEPRECATED_BINARY_MOD!>operator<!> fun mod(x: Int) = ""
}
fun test() {
@@ -0,0 +1,6 @@
// FIR_IDENTICAL
object Rem {
<!FORBIDDEN_BINARY_MOD!>operator<!> fun mod(x: Int) {}
<!FORBIDDEN_BINARY_MOD!>operator<!> fun modAssign(x: Int) {}
}
@@ -0,0 +1,10 @@
package
public object Rem {
private constructor Rem()
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 modAssign(/*0*/ x: kotlin.Int): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}