Fix substitution of generic types in contracts
#KT-41078 Fixed
This commit is contained in:
committed by
TeamCityServer
parent
91fedd6a12
commit
b530427bb2
Vendored
+31
@@ -0,0 +1,31 @@
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
// ISSUE: KT-43260
|
||||
|
||||
import kotlin.contracts.ExperimentalContracts
|
||||
import kotlin.contracts.contract
|
||||
|
||||
sealed class Either<L : Any, R : Any> {
|
||||
data class Left<L : Any, R : Any>(val leftValue: L) : Either<L, R>()
|
||||
data class Right<L : Any, R : Any>(val rightValue: R) : Either<L, R>()
|
||||
}
|
||||
|
||||
inline fun <reified L : Any, reified R : Any> Either<L, R>.isLeft(): Boolean {
|
||||
contract {
|
||||
returns(true) implies (this@isLeft is Either.Left<L, R>)
|
||||
}
|
||||
return this is Either.Left<L, R>
|
||||
}
|
||||
|
||||
inline fun <reified L : Any, reified R : Any> Either<L, R>.isRight(): Boolean {
|
||||
contract {
|
||||
returns(true) implies (this@isRight is Either.Right<L, R>)
|
||||
}
|
||||
return this is Either.Right<L, R>
|
||||
}
|
||||
|
||||
fun test() {
|
||||
val result: Either<Exception, Unit> = Either.Left(RuntimeException("simulating missing code"))
|
||||
if (result.isLeft()) {
|
||||
val cause = result.leftValue.cause
|
||||
}
|
||||
}
|
||||
Vendored
+31
@@ -0,0 +1,31 @@
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
// ISSUE: KT-43260
|
||||
|
||||
import kotlin.contracts.ExperimentalContracts
|
||||
import kotlin.contracts.contract
|
||||
|
||||
sealed class Either<L : Any, R : Any> {
|
||||
data class Left<L : Any, R : Any>(val leftValue: L) : Either<L, R>()
|
||||
data class Right<L : Any, R : Any>(val rightValue: R) : Either<L, R>()
|
||||
}
|
||||
|
||||
inline fun <reified L : Any, reified R : Any> Either<L, R>.isLeft(): Boolean {
|
||||
contract {
|
||||
returns(true) implies (this@isLeft is Either.Left<L, R>)
|
||||
}
|
||||
return this is Either.Left<L, R>
|
||||
}
|
||||
|
||||
inline fun <reified L : Any, reified R : Any> Either<L, R>.isRight(): Boolean {
|
||||
contract {
|
||||
returns(true) implies (this@isRight is Either.Right<L, R>)
|
||||
}
|
||||
return this is Either.Right<L, R>
|
||||
}
|
||||
|
||||
fun test() {
|
||||
val result: Either<Exception, Unit> = Either.Left(RuntimeException("simulating missing code"))
|
||||
if (result.isLeft()) {
|
||||
val cause = <!DEBUG_INFO_SMARTCAST!>result<!>.leftValue.cause
|
||||
}
|
||||
}
|
||||
Vendored
+35
@@ -0,0 +1,35 @@
|
||||
package
|
||||
|
||||
public fun test(): kotlin.Unit
|
||||
public inline fun </*0*/ reified L : kotlin.Any, /*1*/ reified R : kotlin.Any> Either<L, R>.isLeft(): kotlin.Boolean
|
||||
Returns(TRUE) -> <this> is Left<L, R>
|
||||
|
||||
public inline fun </*0*/ reified L : kotlin.Any, /*1*/ reified R : kotlin.Any> Either<L, R>.isRight(): kotlin.Boolean
|
||||
Returns(TRUE) -> <this> is Right<L, R>
|
||||
|
||||
public sealed class Either</*0*/ L : kotlin.Any, /*1*/ R : kotlin.Any> {
|
||||
protected constructor Either</*0*/ L : kotlin.Any, /*1*/ R : kotlin.Any>()
|
||||
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 data class Left</*0*/ L : kotlin.Any, /*1*/ R : kotlin.Any> : Either<L, R> {
|
||||
public constructor Left</*0*/ L : kotlin.Any, /*1*/ R : kotlin.Any>(/*0*/ leftValue: L)
|
||||
public final val leftValue: L
|
||||
public final operator /*synthesized*/ fun component1(): L
|
||||
public final /*synthesized*/ fun copy(/*0*/ leftValue: L = ...): Either.Left<L, R>
|
||||
public open override /*1*/ /*synthesized*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*synthesized*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*synthesized*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public final data class Right</*0*/ L : kotlin.Any, /*1*/ R : kotlin.Any> : Either<L, R> {
|
||||
public constructor Right</*0*/ L : kotlin.Any, /*1*/ R : kotlin.Any>(/*0*/ rightValue: R)
|
||||
public final val rightValue: R
|
||||
public final operator /*synthesized*/ fun component1(): R
|
||||
public final /*synthesized*/ fun copy(/*0*/ rightValue: R = ...): Either.Right<L, R>
|
||||
public open override /*1*/ /*synthesized*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*synthesized*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*synthesized*/ fun toString(): kotlin.String
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user