[FE 1.0] Don't fail on calls of functions with contracts from object

^KT-51704 Fixed
This commit is contained in:
Dmitriy Novozhilov
2022-05-12 14:03:58 +03:00
committed by teamcity
parent 993021a71d
commit 4d5a4ccd6b
7 changed files with 129 additions and 7 deletions
@@ -0,0 +1,38 @@
// FIR_IDENTICAL
// ISSUE: KT-51704
import Foo.Companion.checkSomethingCompanion
import Bar.checkSomethingObject
import kotlin.contracts.ExperimentalContracts
import kotlin.contracts.contract
class Foo {
companion object {
@OptIn(ExperimentalContracts::class)
fun checkSomethingCompanion(condition: Boolean, message: String) {
contract {
returns() implies (condition)
}
if (!condition)
throw Exception(message)
}
}
}
object Bar {
@OptIn(ExperimentalContracts::class)
fun checkSomethingObject(condition: Boolean, message: String) {
contract {
returns() implies (condition)
}
if (!condition)
throw Exception(message)
}
}
fun usage() {
Foo.checkSomethingCompanion(1 == 2, "wat") // ok
checkSomethingCompanion(1 == 2, "wat") // compiler crash
Bar.checkSomethingObject(1 == 2, "wat") // ok
checkSomethingObject(1 == 2, "wat") // compiler crash
}
@@ -0,0 +1,31 @@
package
public fun usage(): kotlin.Unit
public object Bar {
private constructor Bar()
@kotlin.OptIn(markerClass = {kotlin.contracts.ExperimentalContracts::class}) public final fun checkSomethingObject(/*0*/ condition: kotlin.Boolean, /*1*/ message: kotlin.String): kotlin.Unit
Returns(WILDCARD) -> condition
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
}
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
public companion object Companion {
private constructor Companion()
@kotlin.OptIn(markerClass = {kotlin.contracts.ExperimentalContracts::class}) public final fun checkSomethingCompanion(/*0*/ condition: kotlin.Boolean, /*1*/ message: kotlin.String): kotlin.Unit
Returns(WILDCARD) -> condition
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
}
}