Alphabetical sort wrapped intersection types for rendered diagnostics

This commit is contained in:
victor.petukhov
2018-12-28 15:34:42 +03:00
parent acd6d354dc
commit ec8a6cbe9c
118 changed files with 1387 additions and 937 deletions
@@ -1,5 +1,3 @@
// HELPERS: REFLECT
/* /*
* KOTLIN CODEGEN BOX SPEC TEST (POSITIVE) * KOTLIN CODEGEN BOX SPEC TEST (POSITIVE)
* *
@@ -8,6 +6,8 @@
* NUMBER: 1 * NUMBER: 1
* DESCRIPTION: The use of Boolean literals as the identifier (with backtick) in the class. * DESCRIPTION: The use of Boolean literals as the identifier (with backtick) in the class.
* NOTE: this test data is generated by FeatureInteractionTestDataGenerator. DO NOT MODIFY CODE MANUALLY! * NOTE: this test data is generated by FeatureInteractionTestDataGenerator. DO NOT MODIFY CODE MANUALLY!
* UNEXPECTED BEHAVIOUR
* HELPERS: reflect
*/ */
open class `true` { open class `true` {
@@ -1,5 +1,3 @@
// HELPERS: REFLECT
/* /*
* KOTLIN CODEGEN BOX SPEC TEST (POSITIVE) * KOTLIN CODEGEN BOX SPEC TEST (POSITIVE)
* *
@@ -8,6 +6,7 @@
* NUMBER: 10 * NUMBER: 10
* DESCRIPTION: The use of Boolean literals as the identifier (with backtick) in the companionObject. * DESCRIPTION: The use of Boolean literals as the identifier (with backtick) in the companionObject.
* NOTE: this test data is generated by FeatureInteractionTestDataGenerator. DO NOT MODIFY CODE MANUALLY! * NOTE: this test data is generated by FeatureInteractionTestDataGenerator. DO NOT MODIFY CODE MANUALLY!
* HELPERS: reflect
*/ */
package org.jetbrains.`true` package org.jetbrains.`true`
@@ -1,5 +1,3 @@
// HELPERS: REFLECT
/* /*
* KOTLIN CODEGEN BOX SPEC TEST (POSITIVE) * KOTLIN CODEGEN BOX SPEC TEST (POSITIVE)
* *
@@ -8,6 +6,7 @@
* NUMBER: 11 * NUMBER: 11
* DESCRIPTION: The use of Boolean literals as the identifier (with backtick) in the function. * DESCRIPTION: The use of Boolean literals as the identifier (with backtick) in the function.
* NOTE: this test data is generated by FeatureInteractionTestDataGenerator. DO NOT MODIFY CODE MANUALLY! * NOTE: this test data is generated by FeatureInteractionTestDataGenerator. DO NOT MODIFY CODE MANUALLY!
* HELPERS: reflect
*/ */
fun `true`(): Boolean { fun `true`(): Boolean {
@@ -1,5 +1,3 @@
// HELPERS: REFLECT
/* /*
* KOTLIN CODEGEN BOX SPEC TEST (POSITIVE) * KOTLIN CODEGEN BOX SPEC TEST (POSITIVE)
* *
@@ -8,6 +6,7 @@
* NUMBER: 12 * NUMBER: 12
* DESCRIPTION: The use of Boolean literals as the identifier (with backtick) in the setter. * DESCRIPTION: The use of Boolean literals as the identifier (with backtick) in the setter.
* NOTE: this test data is generated by FeatureInteractionTestDataGenerator. DO NOT MODIFY CODE MANUALLY! * NOTE: this test data is generated by FeatureInteractionTestDataGenerator. DO NOT MODIFY CODE MANUALLY!
* HELPERS: reflect
*/ */
class A { class A {
@@ -1,5 +1,3 @@
// HELPERS: REFLECT
/* /*
* KOTLIN CODEGEN BOX SPEC TEST (POSITIVE) * KOTLIN CODEGEN BOX SPEC TEST (POSITIVE)
* *
@@ -8,6 +6,7 @@
* NUMBER: 13 * NUMBER: 13
* DESCRIPTION: The use of Boolean literals as the identifier (with backtick) in the simpleUserType. * DESCRIPTION: The use of Boolean literals as the identifier (with backtick) in the simpleUserType.
* NOTE: this test data is generated by FeatureInteractionTestDataGenerator. DO NOT MODIFY CODE MANUALLY! * NOTE: this test data is generated by FeatureInteractionTestDataGenerator. DO NOT MODIFY CODE MANUALLY!
* HELPERS: reflect
*/ */
package org.jetbrains.`true` package org.jetbrains.`true`
@@ -1,5 +1,3 @@
// HELPERS: REFLECT
/* /*
* KOTLIN CODEGEN BOX SPEC TEST (POSITIVE) * KOTLIN CODEGEN BOX SPEC TEST (POSITIVE)
* *
@@ -8,6 +6,7 @@
* NUMBER: 14 * NUMBER: 14
* DESCRIPTION: The use of Boolean literals as the identifier (with backtick) in the typeParameter. * DESCRIPTION: The use of Boolean literals as the identifier (with backtick) in the typeParameter.
* NOTE: this test data is generated by FeatureInteractionTestDataGenerator. DO NOT MODIFY CODE MANUALLY! * NOTE: this test data is generated by FeatureInteractionTestDataGenerator. DO NOT MODIFY CODE MANUALLY!
* HELPERS: reflect
*/ */
package org.jetbrains.`true` package org.jetbrains.`true`
@@ -1,5 +1,3 @@
// HELPERS: REFLECT
/* /*
* KOTLIN CODEGEN BOX SPEC TEST (POSITIVE) * KOTLIN CODEGEN BOX SPEC TEST (POSITIVE)
* *
@@ -8,6 +6,7 @@
* NUMBER: 15 * NUMBER: 15
* DESCRIPTION: The use of Boolean literals as the identifier (with backtick) in the parameter. * DESCRIPTION: The use of Boolean literals as the identifier (with backtick) in the parameter.
* NOTE: this test data is generated by FeatureInteractionTestDataGenerator. DO NOT MODIFY CODE MANUALLY! * NOTE: this test data is generated by FeatureInteractionTestDataGenerator. DO NOT MODIFY CODE MANUALLY!
* HELPERS: reflect
*/ */
fun f1(`true`: Boolean) = !!!`true` fun f1(`true`: Boolean) = !!!`true`
@@ -1,5 +1,3 @@
// HELPERS: REFLECT
/* /*
* KOTLIN CODEGEN BOX SPEC TEST (POSITIVE) * KOTLIN CODEGEN BOX SPEC TEST (POSITIVE)
* *
@@ -8,6 +6,7 @@
* NUMBER: 16 * NUMBER: 16
* DESCRIPTION: The use of Boolean literals as the identifier (with backtick) in the fileAnnotationComplex. * DESCRIPTION: The use of Boolean literals as the identifier (with backtick) in the fileAnnotationComplex.
* NOTE: this test data is generated by FeatureInteractionTestDataGenerator. DO NOT MODIFY CODE MANUALLY! * NOTE: this test data is generated by FeatureInteractionTestDataGenerator. DO NOT MODIFY CODE MANUALLY!
* HELPERS: reflect
*/ */
@file:[org.jetbrains.`true`.`false`() `true`] @file:[org.jetbrains.`true`.`false`() `true`]
@@ -1,5 +1,3 @@
// HELPERS: REFLECT
/* /*
* KOTLIN CODEGEN BOX SPEC TEST (POSITIVE) * KOTLIN CODEGEN BOX SPEC TEST (POSITIVE)
* *
@@ -8,6 +6,7 @@
* NUMBER: 17 * NUMBER: 17
* DESCRIPTION: The use of Boolean literals as the identifier (with backtick) in the object. * DESCRIPTION: The use of Boolean literals as the identifier (with backtick) in the object.
* NOTE: this test data is generated by FeatureInteractionTestDataGenerator. DO NOT MODIFY CODE MANUALLY! * NOTE: this test data is generated by FeatureInteractionTestDataGenerator. DO NOT MODIFY CODE MANUALLY!
* HELPERS: reflect
*/ */
open class A { open class A {
@@ -1,5 +1,3 @@
// HELPERS: REFLECT
/* /*
* KOTLIN CODEGEN BOX SPEC TEST (POSITIVE) * KOTLIN CODEGEN BOX SPEC TEST (POSITIVE)
* *
@@ -8,6 +6,7 @@
* NUMBER: 18 * NUMBER: 18
* DESCRIPTION: The use of Boolean literals as the identifier (with backtick) in the typeAlias. * DESCRIPTION: The use of Boolean literals as the identifier (with backtick) in the typeAlias.
* NOTE: this test data is generated by FeatureInteractionTestDataGenerator. DO NOT MODIFY CODE MANUALLY! * NOTE: this test data is generated by FeatureInteractionTestDataGenerator. DO NOT MODIFY CODE MANUALLY!
* HELPERS: reflect
*/ */
typealias `true` = Boolean typealias `true` = Boolean
@@ -1,5 +1,3 @@
// HELPERS: REFLECT
/* /*
* KOTLIN CODEGEN BOX SPEC TEST (POSITIVE) * KOTLIN CODEGEN BOX SPEC TEST (POSITIVE)
* *
@@ -8,6 +6,7 @@
* NUMBER: 26 * NUMBER: 26
* DESCRIPTION: The use of Boolean literals as the identifier (with backtick) in the callableReference. * DESCRIPTION: The use of Boolean literals as the identifier (with backtick) in the callableReference.
* NOTE: this test data is generated by FeatureInteractionTestDataGenerator. DO NOT MODIFY CODE MANUALLY! * NOTE: this test data is generated by FeatureInteractionTestDataGenerator. DO NOT MODIFY CODE MANUALLY!
* HELPERS: reflect
*/ */
val Boolean.`true`: Boolean val Boolean.`true`: Boolean
@@ -1,5 +1,3 @@
// HELPERS: REFLECT
/* /*
* KOTLIN CODEGEN BOX SPEC TEST (POSITIVE) * KOTLIN CODEGEN BOX SPEC TEST (POSITIVE)
* *
@@ -8,6 +6,7 @@
* NUMBER: 3 * NUMBER: 3
* DESCRIPTION: The use of Boolean literals as the identifier (with backtick) in the typeConstraint. * DESCRIPTION: The use of Boolean literals as the identifier (with backtick) in the typeConstraint.
* NOTE: this test data is generated by FeatureInteractionTestDataGenerator. DO NOT MODIFY CODE MANUALLY! * NOTE: this test data is generated by FeatureInteractionTestDataGenerator. DO NOT MODIFY CODE MANUALLY!
* HELPERS: reflect
*/ */
class A <`true`, `false`> class A <`true`, `false`>
@@ -1,5 +1,3 @@
// HELPERS: REFLECT
/* /*
* KOTLIN CODEGEN BOX SPEC TEST (POSITIVE) * KOTLIN CODEGEN BOX SPEC TEST (POSITIVE)
* *
@@ -8,6 +6,7 @@
* NUMBER: 4 * NUMBER: 4
* DESCRIPTION: The use of Boolean literals as the identifier (with backtick) in the fileAnnotationSimple. * DESCRIPTION: The use of Boolean literals as the identifier (with backtick) in the fileAnnotationSimple.
* NOTE: this test data is generated by FeatureInteractionTestDataGenerator. DO NOT MODIFY CODE MANUALLY! * NOTE: this test data is generated by FeatureInteractionTestDataGenerator. DO NOT MODIFY CODE MANUALLY!
* HELPERS: reflect
*/ */
@file:`true` @file:`true`
@@ -1,5 +1,3 @@
// HELPERS: REFLECT
/* /*
* KOTLIN CODEGEN BOX SPEC TEST (POSITIVE) * KOTLIN CODEGEN BOX SPEC TEST (POSITIVE)
* *
@@ -8,6 +6,7 @@
* NUMBER: 5 * NUMBER: 5
* DESCRIPTION: The use of Boolean literals as the identifier (with backtick) in the packageComplex. * DESCRIPTION: The use of Boolean literals as the identifier (with backtick) in the packageComplex.
* NOTE: this test data is generated by FeatureInteractionTestDataGenerator. DO NOT MODIFY CODE MANUALLY! * NOTE: this test data is generated by FeatureInteractionTestDataGenerator. DO NOT MODIFY CODE MANUALLY!
* HELPERS: reflect
*/ */
package org.jetbrains.`true` package org.jetbrains.`true`
@@ -1,5 +1,3 @@
// HELPERS: REFLECT
/* /*
* KOTLIN CODEGEN BOX SPEC TEST (POSITIVE) * KOTLIN CODEGEN BOX SPEC TEST (POSITIVE)
* *
@@ -8,6 +6,7 @@
* NUMBER: 6 * NUMBER: 6
* DESCRIPTION: The use of Boolean literals as the identifier (with backtick) in the packageSimple. * DESCRIPTION: The use of Boolean literals as the identifier (with backtick) in the packageSimple.
* NOTE: this test data is generated by FeatureInteractionTestDataGenerator. DO NOT MODIFY CODE MANUALLY! * NOTE: this test data is generated by FeatureInteractionTestDataGenerator. DO NOT MODIFY CODE MANUALLY!
* HELPERS: reflect
*/ */
package `true` package `true`
@@ -1,5 +1,3 @@
// HELPERS: REFLECT
/* /*
* KOTLIN CODEGEN BOX SPEC TEST (POSITIVE) * KOTLIN CODEGEN BOX SPEC TEST (POSITIVE)
* *
@@ -8,6 +6,7 @@
* NUMBER: 9 * NUMBER: 9
* DESCRIPTION: The use of Boolean literals as the identifier (with backtick) in the unescapedAnnotation. * DESCRIPTION: The use of Boolean literals as the identifier (with backtick) in the unescapedAnnotation.
* NOTE: this test data is generated by FeatureInteractionTestDataGenerator. DO NOT MODIFY CODE MANUALLY! * NOTE: this test data is generated by FeatureInteractionTestDataGenerator. DO NOT MODIFY CODE MANUALLY!
* HELPERS: reflect
*/ */
package org.jetbrains.`true` package org.jetbrains.`true`
@@ -1,29 +0,0 @@
fun getInt(arg: Any = Any()) = arg.hashCode()
fun getShort(arg: Any = Any()) = arg.hashCode().toShort()
fun getLong(arg: Any = Any()) = arg.hashCode().toLong()
fun getFloat(arg: Any = Any()) = arg.hashCode().toFloat()
fun getDouble(arg: Any = Any()) = arg.hashCode().toDouble()
fun getByte(arg: Any = Any()) = arg.hashCode().toByte()
fun getChar(arg: Any = Any()) = arg.hashCode().toChar()
fun getString(arg: Any = Any()) = arg.hashCode().toString()
fun getBoolean(arg: Any = Any()) = arg.hashCode() % 2 == 0
fun getNothing(): Nothing = throw Exception()
fun getUnit() = {}
fun getAny() = Any()
fun getList() = mutableListOf<Int>()
class _BasicTypesProvider {
fun getInt(arg: Any = Any()) = arg.hashCode()
fun getShort(arg: Any = Any()) = arg.hashCode().toShort()
fun getLong(arg: Any = Any()) = arg.hashCode().toLong()
fun getFloat(arg: Any = Any()) = arg.hashCode().toFloat()
fun getDouble(arg: Any = Any()) = arg.hashCode().toDouble()
fun getByte(arg: Any = Any()) = arg.hashCode().toByte()
fun getChar(arg: Any = Any()) = arg.hashCode().toChar()
fun getString(arg: Any = Any()) = arg.hashCode().toString()
fun getBoolean(arg: Any = Any()) = arg.hashCode() % 2 == 0
fun getNothing(): Nothing = throw Exception()
fun getUnit() = {}
fun getAny() = Any()
fun getList() = mutableListOf<Int>()
}
+60 -15
View File
@@ -1,19 +1,23 @@
class _Class { class Class {
val prop_1 = 1 val prop_1 = 1
val prop_2 = 2 val prop_2 = 2
val prop_3 = 3 val prop_3 = 3
val prop_4: Float? = 3f
val prop_5: Float = 3f
val prop_6: String = "..."
val prop_7: Nothing? = "..."
fun fun_1(): (Int) -> (Int) -> Int = {number: Int -> { number * 5 }} fun fun_1(): (Int) -> (Int) -> Int = {number: Int -> { number * 5 }}
fun fun_2(value_1: Int): Int = value_1 * 2 fun fun_2(value_1: Int): Int = value_1 * 2
fun fun_3(value_1: Int): (Int) -> Int = fun(value_2: Int): Int = value_1 * value_2 * 2 fun fun_3(value_1: Int): (Int) -> Int = fun(value_2: Int): Int = value_1 * value_2 * 2
operator fun contains(a: Int): Boolean = a > 30 operator fun contains(a: Int) = a > 30
operator fun contains(a: Long): Boolean = a > 30L operator fun contains(a: Long) = a > 30L
operator fun contains(a: Char): Boolean = a > 30.toChar() operator fun contains(a: Char) = a > 30.toChar()
fun getIntArray(value_1: Int): IntArray = intArrayOf(1, 2, 3, value_1, 91923, 14, 123124) fun getIntArray() = intArrayOf(1, 2, 3, 4, 5)
fun getLongArray(value_1: Long): LongArray = longArrayOf(1L, 2L, 3L, value_1, 9192323244L, 14L, 123124L) fun getLongArray() = longArrayOf(1L, 2L, 3L, 4L, 5L)
fun getCharArray(value_1: Char): CharArray = charArrayOf(1.toChar(), 2.toChar(), 3.toChar(), value_1) fun getCharArray() = charArrayOf(1.toChar(), 2.toChar(), 3.toChar(), 4.toChar(), 5.toChar())
class _NestedClass { class _NestedClass {
val prop_4 = 4 val prop_4 = 4
@@ -21,15 +25,56 @@ class _Class {
} }
} }
class _EmptyClass {} class EmptyClass {}
class _ClassWithCompanionObject { class ClassWithCompanionObject {
companion object {} companion object {}
} }
open class _ClassLevel1 {} open class ClassLevel1 {
open class _ClassLevel2: _ClassLevel1() {} fun test1() {}
open class _ClassLevel3: _ClassLevel2() {} }
open class _ClassLevel4: _ClassLevel3() {} open class ClassLevel2: ClassLevel1() {
open class _ClassLevel5: _ClassLevel4() {} fun test2() {}
class _ClassLevel6: _ClassLevel5() {} }
open class ClassLevel3: ClassLevel2() {
fun test3() {}
}
open class ClassLevel4: ClassLevel3() {
fun test4() {}
}
open class ClassLevel5: ClassLevel4() {
fun test5() {}
}
class ClassLevel6: ClassLevel5() {
fun test6() {}
}
class Inv<T>(val x: T = null as T) {
fun test() {}
fun get() = x
fun put(x: T) {}
fun getNullable(): T? = select(x, null)
}
class In<in T>() {
fun put(x: T) {}
fun <K : T> getWithUpperBoundT(): K = x <!UNCHECKED_CAST!>as K<!>
}
class Out<out T>(val x: T = null as T) {
fun get() = x
}
open class ClassWithTwoTypeParameters<K, L> {
fun test1(): T? { return null }
fun test2(): K? { return null }
}
class ClassWithThreeTypeParameters<K, L, M>(
val x: K,
val y: L,
val z: M
)
class ClassWithSixTypeParameters<K, in L, out M, O, in P, out R>
@@ -1,9 +1,21 @@
enum class _EnumClass { enum class EnumClass {
NORTH, SOUTH, WEST, EAST NORTH, SOUTH, WEST, EAST
} }
enum class _EnumClassSingle { enum class EnumClassSingle {
EVERYTHING EVERYTHING
} }
enum class _EnumClassEmpty enum class EnumClassEmpty
enum class EnumClassWithNullableProperty(val prop_1: Int?) {
A(1),
B(5),
D(null)
}
enum class EnumClassWithProperty(val prop_1: Int) {
A(1),
B(5),
D(6)
}
@@ -1,7 +1,19 @@
fun _funWithoutArgs(): Int { fun funWithoutArgs(): Int {
return Any().hashCode().toInt() return Any().hashCode().toInt()
} }
fun _funWithAnyArg(value_1: Any): Int { fun funWithAnyArg(value_1: Any): Int {
return value_1.hashCode() return value_1.hashCode()
} }
fun <K> select(vararg x: K): K = x[0]
fun <K> expandInv(vararg x: Inv<K>): K = x[0] as K
fun <K> expandIn(vararg x: In<K>): K = x[0] as K
fun <K> expandOut(vararg x: Out<K>): K = x[0] as K
fun <K> expandInvWithRemoveNullable(vararg x: Inv<K?>): K = x[0] as K
fun <K> expandInWithRemoveNullable(vararg x: In<K?>): K = x[0] as K
fun <K> expandOutWithRemoveNullable(vararg x: Out<K?>): K = x[0] as K
fun <K> removeNullable(vararg x: K?): K = x as K
@@ -0,0 +1,49 @@
interface EmptyInterface
interface Interface1 {
fun itest() {}
fun itest1() {}
}
interface Interface2 {
fun itest() {}
fun itest2() {}
}
interface Interface3 {
fun itest() {}
fun itest3() {}
}
interface InterfaceWithOutParameter<out T>
interface InterfaceWithTypeParameter1<T> {
fun ip1test1(): T? = null as T?
}
interface InterfaceWithTypeParameter2<T> {
fun ip1test2(): T? = null as T?
}
interface InterfaceWithTypeParameter3<T> {
fun ip1test3(): T? = null as T?
}
interface InterfaceWithFiveTypeParameters1<T1, T2, T3, T4, T5> {
fun itest() {}
fun itest1() {}
}
interface InterfaceWithFiveTypeParameters2<T1, T2, T3, T4, T5> {
fun itest() {}
fun itest2() {}
}
interface InterfaceWithFiveTypeParameters3<T1, T2, T3, T4, T5> {
fun itest() {}
fun itest3() {}
}
interface InterfaceWithTwoTypeParameters<T, K> {
fun ip2test(): T? = null as T?
}
+28 -1
View File
@@ -1 +1,28 @@
object _EmptyObject {} object EmptyObject {}
object Object {
val prop_1: Number? = 1
val prop_2: Number = 1
}
object DeepObject {
val prop_1 = null
var prop_2 = null
object A {
object B {
object C {
object D {
object E {
object F {
object G {
object J {
val x: Int? = 10
}
}
}
}
}
}
}
}
}
@@ -0,0 +1,16 @@
val nullableNumberProperty: Number? = null
val stringProperty: String = ""
val nullableStringProperty: String? = null
val intProperty: Int = ""
val nullableIntProperty: Int? = null
val implicitNullableNothingProperty = null
val nullableNothingProperty: Nothing? = null
val anonymousTypeProperty = object {}
val nullableAnonymousTypeProperty = if (true) object {} else null
val nullableOut: Out<Int>? = null
@@ -1,36 +1,36 @@
sealed class _SealedClass sealed class SealedClass
data class _SealedChild1(val number: Int) : _SealedClass() data class SealedChild1(val number: Int) : SealedClass()
data class _SealedChild2(val e1: Int, val e2: Int) : _SealedClass() data class SealedChild2(val e1: Int, val e2: Int) : SealedClass()
data class _SealedChild3(val m1: Int, val m2: Int) : _SealedClass() data class SealedChild3(val m1: Int, val m2: Int) : SealedClass()
sealed class _SealedClassWithObjects sealed class SealedClassWithObjects
object _SealedWithObjectsChild1 : _SealedClassWithObjects() object SealedWithObjectsChild1 : SealedClassWithObjects()
object _SealedWithObjectsChild2 : _SealedClassWithObjects() object SealedWithObjectsChild2 : SealedClassWithObjects()
object _SealedWithObjectsChild3 : _SealedClassWithObjects() object SealedWithObjectsChild3 : SealedClassWithObjects()
sealed class _SealedClassSingle sealed class SealedClassSingle
data class _SealedSingleChild1(val number: Int) : _SealedClassSingle() data class SealedSingleChild1(val number: Int) : SealedClassSingle()
sealed class _SealedClassSingleWithObject sealed class SealedClassSingleWithObject
object _SealedSingleWithObjectChild1: Expr3() {} object SealedSingleWithObjectChild1: Expr3() {}
sealed class _SealedClassEmpty sealed class SealedClassEmpty
sealed class _SealedClassWithMethods sealed class SealedClassWithMethods
class _SealedWithMethodsChild1() : _SealedClassWithMethods() { class SealedWithMethodsChild1() : SealedClassWithMethods() {
fun m1() = this.hashCode().toString() fun m1() = this.hashCode().toString()
} }
class _SealedWithMethodsChild2() : _SealedClassWithMethods() { class SealedWithMethodsChild2() : SealedClassWithMethods() {
fun m2() = this.hashCode().toString() fun m2() = this.hashCode().toString()
} }
class _SealedWithMethodsChild3() : _SealedClassWithMethods() { class SealedWithMethodsChild3() : SealedClassWithMethods() {
fun m3() = this.hashCode().toString() fun m3() = this.hashCode().toString()
} }
sealed class _SealedClassMixed sealed class SealedClassMixed
data class _SealedMixedChild1(val number: Int) : _SealedClassMixed() data class SealedMixedChild1(val number: Int) : SealedClassMixed()
data class _SealedMixedChild2(val e1: Int, val e2: Int) : _SealedClassMixed() data class SealedMixedChild2(val e1: Int, val e2: Int) : SealedClassMixed()
data class _SealedMixedChild3(val m1: Int, val m2: Int) : _SealedClassMixed() data class SealedMixedChild3(val m1: Int, val m2: Int) : SealedClassMixed()
object _SealedMixedChildObject1 : _SealedClassMixed() object SealedMixedChildObject1 : SealedClassMixed()
object _SealedMixedChildObject2 : _SealedClassMixed() object SealedMixedChildObject2 : SealedClassMixed()
object _SealedMixedChildObject3 : _SealedClassMixed() object SealedMixedChildObject3 : SealedClassMixed()
@@ -1,4 +1,9 @@
typealias _TypeAliasAny = Any typealias TypealiasAny = Any
typealias _TypeAliasUnit = Unit typealias TypealiasUnit = Unit
typealias _TypeAliasNothing = Nothing typealias TypealiasNothing = Nothing
typealias _TypeAliasInt = Int typealias TypealiasNullableNothing = Nothing?
typealias TypealiasInt = Int
typealias TypealiasFloat = Float
typealias TypealiasString = String
typealias TypealiasNullableString = String?
typealias TypealiasNullableStringIndirect = TypealiasNullableString
@@ -0,0 +1,29 @@
fun getInt() = Any().hashCode()
fun getShort() = Any().hashCode().toShort()
fun getLong() = Any().hashCode().toLong()
fun getFloat() = Any().hashCode().toFloat()
fun getDouble() = Any().hashCode().toDouble()
fun getByte() = Any().hashCode().toByte()
fun getChar() = Any().hashCode().toChar()
fun getString() = Any().hashCode().toString()
fun getBoolean() = Any().hashCode() % 2 == 0
fun getNothing(): Nothing = throw Exception()
fun getUnit() = {}
fun getAny() = Any()
fun getList() = listOf<Int>()
class TypesProvider {
fun getInt() = Any().hashCode()
fun getShort() = Any().hashCode().toShort()
fun getLong() = Any().hashCode().toLong()
fun getFloat() = Any().hashCode().toFloat()
fun getDouble() = Any().hashCode().toDouble()
fun getByte() = Any().hashCode().toByte()
fun getChar() = Any().hashCode().toChar()
fun getString() = Any().hashCode().toString()
fun getBoolean() = Any().hashCode() % 2 == 0
fun getNothing(): Nothing = throw Exception()
fun getUnit() = {}
fun getAny() = Any()
fun getList() = listOf<Int>()
}
@@ -1,5 +1,4 @@
// !DIAGNOSTICS: -UNUSED_EXPRESSION // !DIAGNOSTICS: -UNUSED_EXPRESSION
// !WITH_SEALED_CLASSES
/* /*
* KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE) * KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE)
@@ -8,46 +7,47 @@
* PLACE: when-expression -> paragraph 11 -> sentence 6 * PLACE: when-expression -> paragraph 11 -> sentence 6
* NUMBER: 1 * NUMBER: 1
* DESCRIPTION: Checking for not exhaustive 'when' when not covered by all possible subtypes or 'when' does not have bound value. * DESCRIPTION: Checking for not exhaustive 'when' when not covered by all possible subtypes or 'when' does not have bound value.
* HELPERS: sealedClasses
*/ */
// TESTCASE NUMBER: 1 // TESTCASE NUMBER: 1
fun case_1(value_1: _SealedClass): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) { fun case_1(value_1: SealedClass): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
is _SealedChild1 -> "" is SealedChild1 -> ""
is _SealedChild2 -> "" is SealedChild2 -> ""
} }
// TESTCASE NUMBER: 2 // TESTCASE NUMBER: 2
fun case_2(value_1: _SealedClass): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) { fun case_2(value_1: SealedClass): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
is _SealedChild1, is _SealedChild2 -> "" is SealedChild1, is SealedChild2 -> ""
} }
// TESTCASE NUMBER: 3 // TESTCASE NUMBER: 3
fun case_3(value_1: _SealedClassMixed): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) { fun case_3(value_1: SealedClassMixed): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
is _SealedMixedChild1 -> "" is SealedMixedChild1 -> ""
is _SealedMixedChild2 -> "" is SealedMixedChild2 -> ""
_SealedMixedChildObject1 -> "" SealedMixedChildObject1 -> ""
} }
// TESTCASE NUMBER: 4 // TESTCASE NUMBER: 4
fun case_4(value_1: _SealedClassMixed): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) { fun case_4(value_1: SealedClassMixed): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
_SealedMixedChildObject1, is _SealedMixedChild2, is _SealedMixedChild1 -> "" SealedMixedChildObject1, is SealedMixedChild2, is SealedMixedChild1 -> ""
} }
// TESTCASE NUMBER: 5 // TESTCASE NUMBER: 5
fun case_5(value_1: _SealedClassMixed): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) { fun case_5(value_1: SealedClassMixed): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
is _SealedMixedChild1 -> "" is SealedMixedChild1 -> ""
is _SealedMixedChild2 -> "" is SealedMixedChild2 -> ""
is _SealedMixedChild3 -> "" is SealedMixedChild3 -> ""
} }
// TESTCASE NUMBER: 6 // TESTCASE NUMBER: 6
fun case_6(value_1: _SealedClassMixed): Int = <!NO_ELSE_IN_WHEN!>when<!>(value_1) { } fun case_6(value_1: SealedClassMixed): Int = <!NO_ELSE_IN_WHEN!>when<!>(value_1) { }
// TESTCASE NUMBER: 7 // TESTCASE NUMBER: 7
fun case_7(value_1: _SealedClassSingleWithObject): Int = <!NO_ELSE_IN_WHEN!>when<!>(value_1) { } fun case_7(value_1: SealedClassSingleWithObject): Int = <!NO_ELSE_IN_WHEN!>when<!>(value_1) { }
// TESTCASE NUMBER: 8 // TESTCASE NUMBER: 8
fun case_8(value_1: _SealedClassEmpty): String = <!NO_ELSE_IN_WHEN!>when<!> (value_1) { } fun case_8(value_1: SealedClassEmpty): String = <!NO_ELSE_IN_WHEN!>when<!> (value_1) { }
// TESTCASE NUMBER: 9 // TESTCASE NUMBER: 9
fun case_9(value_1: Number): String = <!NO_ELSE_IN_WHEN!>when<!> (value_1) { fun case_9(value_1: Number): String = <!NO_ELSE_IN_WHEN!>when<!> (value_1) {
@@ -68,15 +68,15 @@ fun case_10(value_1: Any): String = <!NO_ELSE_IN_WHEN!>when<!> (value_1) {
} }
// TESTCASE NUMBER: 11 // TESTCASE NUMBER: 11
fun case_11(value_1: _SealedClass): String = <!NO_ELSE_IN_WHEN!>when<!> { fun case_11(value_1: SealedClass): String = <!NO_ELSE_IN_WHEN!>when<!> {
value_1 is _SealedChild1 -> "" value_1 is SealedChild1 -> ""
value_1 is _SealedChild2 -> "" value_1 is SealedChild2 -> ""
value_1 is _SealedChild3 -> "" value_1 is SealedChild3 -> ""
} }
// TESTCASE NUMBER: 12 // TESTCASE NUMBER: 12
fun case_12(value_1: _SealedClassMixed): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) { fun case_12(value_1: SealedClassMixed): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
is _SealedMixedChild1 -> "" is SealedMixedChild1 -> ""
is _SealedMixedChild2 -> "" is SealedMixedChild2 -> ""
is _SealedMixedChild3 -> "" is SealedMixedChild3 -> ""
} }
@@ -1,5 +1,4 @@
// !DIAGNOSTICS: -UNUSED_EXPRESSION // !DIAGNOSTICS: -UNUSED_EXPRESSION
// !WITH_ENUM_CLASSES
/* /*
* KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE) * KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE)
@@ -8,43 +7,44 @@
* PLACE: when-expression -> paragraph 11 -> sentence 7 * PLACE: when-expression -> paragraph 11 -> sentence 7
* NUMBER: 1 * NUMBER: 1
* DESCRIPTION: Checking for not exhaustive when when not covered by all enumerated values. * DESCRIPTION: Checking for not exhaustive when when not covered by all enumerated values.
* HELPERS: enumClasses
*/ */
// TESTCASE NUMBER: 1 // TESTCASE NUMBER: 1
fun case_1(value_1: _EnumClass): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) { fun case_1(value_1: EnumClass): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
_EnumClass.EAST -> "" EnumClass.EAST -> ""
_EnumClass.SOUTH -> "" EnumClass.SOUTH -> ""
_EnumClass.NORTH -> "" EnumClass.NORTH -> ""
} }
// TESTCASE NUMBER: 2 // TESTCASE NUMBER: 2
fun case_2(value_1: _EnumClass): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) { fun case_2(value_1: EnumClass): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
_EnumClass.EAST, _EnumClass.SOUTH, _EnumClass.NORTH -> "" EnumClass.EAST, EnumClass.SOUTH, EnumClass.NORTH -> ""
} }
// TESTCASE NUMBER: 3 // TESTCASE NUMBER: 3
fun case_3(value_1: _EnumClass): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) { fun case_3(value_1: EnumClass): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
_EnumClass.EAST -> "" EnumClass.EAST -> ""
} }
// TESTCASE NUMBER: 4 // TESTCASE NUMBER: 4
fun case_4(value_1: _EnumClass): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) { } fun case_4(value_1: EnumClass): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) { }
// TESTCASE NUMBER: 5 // TESTCASE NUMBER: 5
fun case_5(value_1: _EnumClassSingle): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) { } fun case_5(value_1: EnumClassSingle): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) { }
/* /*
* TESTCASE NUMBER: 6 * TESTCASE NUMBER: 6
* DISCUSSION: maybe use const propagation here? * DISCUSSION: maybe use const propagation here?
* ISSUES: KT-25265 * ISSUES: KT-25265
*/ */
fun case_6(value_1: _EnumClass): String { fun case_6(value_1: EnumClass): String {
val west = _EnumClass.WEST val west = EnumClass.WEST
return <!NO_ELSE_IN_WHEN!>when<!> (value_1) { return <!NO_ELSE_IN_WHEN!>when<!> (value_1) {
_EnumClass.EAST -> "" EnumClass.EAST -> ""
_EnumClass.SOUTH -> "" EnumClass.SOUTH -> ""
_EnumClass.NORTH -> "" EnumClass.NORTH -> ""
west -> "" west -> ""
} }
} }
@@ -54,4 +54,4 @@ fun case_6(value_1: _EnumClass): String {
* DISCUSSION * DISCUSSION
* ISSUES: KT-26044 * ISSUES: KT-26044
*/ */
fun case_7(value_1: _EnumClassEmpty): String = <!NO_ELSE_IN_WHEN!>when<!> (value_1) { } fun case_7(value_1: EnumClassEmpty): String = <!NO_ELSE_IN_WHEN!>when<!> (value_1) { }
@@ -1,5 +1,4 @@
// !DIAGNOSTICS: -UNUSED_EXPRESSION // !DIAGNOSTICS: -UNUSED_EXPRESSION
// !WITH_SEALED_CLASSES
/* /*
* KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE) * KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE)
@@ -8,59 +7,60 @@
* PLACE: when-expression -> paragraph 11 -> sentence 8 * PLACE: when-expression -> paragraph 11 -> sentence 8
* NUMBER: 2 * NUMBER: 2
* DESCRIPTION: Checking for not exhaustive 'when' on the nullable sealed classes (and several checks for not sealed). * DESCRIPTION: Checking for not exhaustive 'when' on the nullable sealed classes (and several checks for not sealed).
* HELPERS: sealedClasses
*/ */
// TESTCASE NUMBER: 1 // TESTCASE NUMBER: 1
fun case_1(value_1: _SealedClass?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) { fun case_1(value_1: SealedClass?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
is _SealedChild1 -> "" is SealedChild1 -> ""
is _SealedChild2 -> "" is SealedChild2 -> ""
is _SealedChild3 -> "" is SealedChild3 -> ""
} }
// TESTCASE NUMBER: 2 // TESTCASE NUMBER: 2
fun case_2(value_1: _SealedClassMixed?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) { fun case_2(value_1: SealedClassMixed?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
is _SealedMixedChild1 -> "" is SealedMixedChild1 -> ""
is _SealedMixedChild2 -> "" is SealedMixedChild2 -> ""
_SealedMixedChildObject1 -> "" SealedMixedChildObject1 -> ""
null -> "" null -> ""
} }
// TESTCASE NUMBER: 3 // TESTCASE NUMBER: 3
fun case_3(value_1: _SealedClassMixed?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) { fun case_3(value_1: SealedClassMixed?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
null, is _SealedMixedChild1, is _SealedMixedChild2, _SealedMixedChildObject1 -> "" null, is SealedMixedChild1, is SealedMixedChild2, SealedMixedChildObject1 -> ""
} }
// TESTCASE NUMBER: 4 // TESTCASE NUMBER: 4
fun case_4(value_1: _SealedClassMixed?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) { fun case_4(value_1: SealedClassMixed?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
is _SealedMixedChild1 -> "" is SealedMixedChild1 -> ""
is _SealedMixedChild2 -> "" is SealedMixedChild2 -> ""
is _SealedMixedChild3 -> "" is SealedMixedChild3 -> ""
_SealedMixedChildObject1 -> "" SealedMixedChildObject1 -> ""
_SealedMixedChildObject2 -> "" SealedMixedChildObject2 -> ""
_SealedMixedChildObject3 -> "" SealedMixedChildObject3 -> ""
} }
// TESTCASE NUMBER: 5 // TESTCASE NUMBER: 5
fun case_5(value_1: _SealedClassMixed?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) { fun case_5(value_1: SealedClassMixed?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
is _SealedMixedChild1 -> "" is SealedMixedChild1 -> ""
is _SealedMixedChild2 -> "" is SealedMixedChild2 -> ""
is _SealedMixedChild3 -> "" is SealedMixedChild3 -> ""
} }
// TESTCASE NUMBER: 6 // TESTCASE NUMBER: 6
fun case_6(value_1: _SealedClassMixed?): Int = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {} fun case_6(value_1: SealedClassMixed?): Int = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {}
// TESTCASE NUMBER: 7 // TESTCASE NUMBER: 7
fun case_7(value_1: _SealedClassMixed?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) { fun case_7(value_1: SealedClassMixed?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
is _SealedMixedChild1 -> "" is SealedMixedChild1 -> ""
is _SealedMixedChild2-> "" is SealedMixedChild2-> ""
is _SealedMixedChild3 -> "" is SealedMixedChild3 -> ""
null -> "" null -> ""
} }
// TESTCASE NUMBER: 8 // TESTCASE NUMBER: 8
fun case_8(value_1: _SealedClassMixed?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) { fun case_8(value_1: SealedClassMixed?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
_SealedMixedChildObject1 -> "" SealedMixedChildObject1 -> ""
} }
/* /*
@@ -77,4 +77,4 @@ fun case_9(value_1: Any?): String = <!NO_ELSE_IN_WHEN!>when<!> (value_1) {
* DISCUSSION * DISCUSSION
* ISSUES: KT-26044 * ISSUES: KT-26044
*/ */
fun case_10(value: _SealedClassEmpty): String = <!NO_ELSE_IN_WHEN!>when<!> (value) {} fun case_10(value: SealedClassEmpty): String = <!NO_ELSE_IN_WHEN!>when<!> (value) {}
@@ -1,5 +1,4 @@
// !DIAGNOSTICS: -UNUSED_EXPRESSION // !DIAGNOSTICS: -UNUSED_EXPRESSION
// !WITH_ENUM_CLASSES
/* /*
* KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE) * KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE)
@@ -8,38 +7,39 @@
* PLACE: when-expression -> paragraph 11 -> sentence 8 * PLACE: when-expression -> paragraph 11 -> sentence 8
* NUMBER: 3 * NUMBER: 3
* DESCRIPTION: Checking for not exhaustive 'when' on the nullable enums. * DESCRIPTION: Checking for not exhaustive 'when' on the nullable enums.
* HELPERS: enumClasses
*/ */
// TESTCASE NUMBER: 1 // TESTCASE NUMBER: 1
fun case_1(value_1: _EnumClass?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) { fun case_1(value_1: EnumClass?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
_EnumClass.EAST -> "" EnumClass.EAST -> ""
_EnumClass.SOUTH -> "" EnumClass.SOUTH -> ""
_EnumClass.NORTH -> "" EnumClass.NORTH -> ""
_EnumClass.WEST -> "" EnumClass.WEST -> ""
} }
// TESTCASE NUMBER: 2 // TESTCASE NUMBER: 2
fun case_2(value_1: _EnumClass?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) { fun case_2(value_1: EnumClass?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
_EnumClass.EAST -> "" EnumClass.EAST -> ""
_EnumClass.SOUTH -> "" EnumClass.SOUTH -> ""
_EnumClass.NORTH -> "" EnumClass.NORTH -> ""
null -> "" null -> ""
} }
// TESTCASE NUMBER: 3 // TESTCASE NUMBER: 3
fun case_3(value_1: _EnumClass?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) { fun case_3(value_1: EnumClass?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
_EnumClass.EAST, null, _EnumClass.SOUTH, _EnumClass.NORTH -> "" EnumClass.EAST, null, EnumClass.SOUTH, EnumClass.NORTH -> ""
} }
// TESTCASE NUMBER: 4 // TESTCASE NUMBER: 4
fun case_4(value_1: _EnumClassSingle): Int = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {} fun case_4(value_1: EnumClassSingle): Int = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {}
// TESTCASE NUMBER: 5 // TESTCASE NUMBER: 5
fun case_5(value_1: _EnumClassSingle?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) { fun case_5(value_1: EnumClassSingle?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
_EnumClassSingle.EVERYTHING -> "" EnumClassSingle.EVERYTHING -> ""
} }
// TESTCASE NUMBER: 6 // TESTCASE NUMBER: 6
fun case_6(value_1: _EnumClassSingle?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) { fun case_6(value_1: EnumClassSingle?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
null -> "" null -> ""
} }
@@ -1,5 +1,3 @@
// !WITH_ENUM_CLASSES
// !WITH_SEALED_CLASSES
/* /*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE) * KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -8,23 +6,24 @@
* PLACE: when-expression -> paragraph 11 -> sentence 1 * PLACE: when-expression -> paragraph 11 -> sentence 1
* NUMBER: 3 * NUMBER: 3
* DESCRIPTION: Check when exhaustive via else entry (when with bound value, redundant else). * DESCRIPTION: Check when exhaustive via else entry (when with bound value, redundant else).
* HELPERS: enumClasses, sealedClasses
*/ */
// TESTCASE NUMBER: 1 // TESTCASE NUMBER: 1
fun case_1(value_1: _EnumClass): String = when (value_1) { fun case_1(value_1: EnumClass): String = when (value_1) {
_EnumClass.EAST -> "" EnumClass.EAST -> ""
_EnumClass.NORTH -> "" EnumClass.NORTH -> ""
_EnumClass.SOUTH -> "" EnumClass.SOUTH -> ""
_EnumClass.WEST -> "" EnumClass.WEST -> ""
<!REDUNDANT_ELSE_IN_WHEN!>else<!> -> "" <!REDUNDANT_ELSE_IN_WHEN!>else<!> -> ""
} }
// TESTCASE NUMBER: 2 // TESTCASE NUMBER: 2
fun case_2(value_1: _EnumClass?): String = when (value_1) { fun case_2(value_1: EnumClass?): String = when (value_1) {
_EnumClass.EAST -> "" EnumClass.EAST -> ""
_EnumClass.NORTH -> "" EnumClass.NORTH -> ""
_EnumClass.SOUTH -> "" EnumClass.SOUTH -> ""
_EnumClass.WEST -> "" EnumClass.WEST -> ""
null -> "" null -> ""
<!REDUNDANT_ELSE_IN_WHEN!>else<!> -> "" <!REDUNDANT_ELSE_IN_WHEN!>else<!> -> ""
} }
@@ -45,31 +44,31 @@ fun case_4(value_1: Boolean?): String = when (value_1) {
} }
// TESTCASE NUMBER: 5 // TESTCASE NUMBER: 5
fun case_5(value_1: _SealedClass): String = when (value_1) { fun case_5(value_1: SealedClass): String = when (value_1) {
is _SealedChild1 -> "" is SealedChild1 -> ""
is _SealedChild2 -> "" is SealedChild2 -> ""
is _SealedChild3 -> "" is SealedChild3 -> ""
<!REDUNDANT_ELSE_IN_WHEN!>else<!> -> "" <!REDUNDANT_ELSE_IN_WHEN!>else<!> -> ""
} }
// TESTCASE NUMBER: 6 // TESTCASE NUMBER: 6
fun case_6(value_1: _SealedClass?): String = when (value_1) { fun case_6(value_1: SealedClass?): String = when (value_1) {
is _SealedChild1 -> "" is SealedChild1 -> ""
is _SealedChild2 -> "" is SealedChild2 -> ""
is _SealedChild3 -> "" is SealedChild3 -> ""
null -> "" null -> ""
<!REDUNDANT_ELSE_IN_WHEN!>else<!> -> "" <!REDUNDANT_ELSE_IN_WHEN!>else<!> -> ""
} }
// TESTCASE NUMBER: 7 // TESTCASE NUMBER: 7
fun case_7(value_1: _SealedClassSingle): String = when (value_1) { fun case_7(value_1: SealedClassSingle): String = when (value_1) {
<!USELESS_IS_CHECK!>is _SealedClassSingle<!> -> "" <!USELESS_IS_CHECK!>is SealedClassSingle<!> -> ""
<!REDUNDANT_ELSE_IN_WHEN!>else<!> -> "" <!REDUNDANT_ELSE_IN_WHEN!>else<!> -> ""
} }
// TESTCASE NUMBER: 8 // TESTCASE NUMBER: 8
fun case_8(value_1: _SealedClassSingle?): String = when (value_1) { fun case_8(value_1: SealedClassSingle?): String = when (value_1) {
is _SealedClassSingle -> "" is SealedClassSingle -> ""
null -> "" null -> ""
<!REDUNDANT_ELSE_IN_WHEN!>else<!> -> "" <!REDUNDANT_ELSE_IN_WHEN!>else<!> -> ""
} }
@@ -1,5 +1,4 @@
// !DIAGNOSTICS: -UNUSED_EXPRESSION // !DIAGNOSTICS: -UNUSED_EXPRESSION
// !WITH_SEALED_CLASSES
/* /*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE) * KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -8,59 +7,60 @@
* PLACE: when-expression -> paragraph 11 -> sentence 6 * PLACE: when-expression -> paragraph 11 -> sentence 6
* NUMBER: 1 * NUMBER: 1
* DESCRIPTION: Check when exhaustive when possible subtypes of the sealed class are covered. * DESCRIPTION: Check when exhaustive when possible subtypes of the sealed class are covered.
* HELPERS: sealedClasses
*/ */
// TESTCASE NUMBER: 1 // TESTCASE NUMBER: 1
fun case_1(value_1: _SealedClass): Int = when (value_1) { fun case_1(value_1: SealedClass): Int = when (value_1) {
is _SealedChild1 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.number is SealedChild1 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.number
is _SealedChild2 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.e1 + <!DEBUG_INFO_SMARTCAST!>value_1<!>.e2 is SealedChild2 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.e1 + <!DEBUG_INFO_SMARTCAST!>value_1<!>.e2
is _SealedChild3 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.m1 + <!DEBUG_INFO_SMARTCAST!>value_1<!>.m2 is SealedChild3 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.m1 + <!DEBUG_INFO_SMARTCAST!>value_1<!>.m2
} }
// TESTCASE NUMBER: 2 // TESTCASE NUMBER: 2
fun case_2(value_1: _SealedClass): String = when (value_1) { fun case_2(value_1: SealedClass): String = when (value_1) {
<!USELESS_IS_CHECK!>is _SealedClass<!> -> "" <!USELESS_IS_CHECK!>is SealedClass<!> -> ""
} }
// TESTCASE NUMBER: 3 // TESTCASE NUMBER: 3
fun case_3(value_1: _SealedClassWithMethods): String = when (value_1) { fun case_3(value_1: SealedClassWithMethods): String = when (value_1) {
is _SealedWithMethodsChild1 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.m1() is SealedWithMethodsChild1 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.m1()
is _SealedWithMethodsChild2 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.m2() is SealedWithMethodsChild2 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.m2()
is _SealedWithMethodsChild3 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.m3() is SealedWithMethodsChild3 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.m3()
} }
// TESTCASE NUMBER: 4 // TESTCASE NUMBER: 4
fun case_4(value_1: _SealedClassWithObjects): String = when (value_1) { fun case_4(value_1: SealedClassWithObjects): String = when (value_1) {
_SealedWithObjectsChild1 -> "" SealedWithObjectsChild1 -> ""
_SealedWithObjectsChild2 -> "" SealedWithObjectsChild2 -> ""
_SealedWithObjectsChild3 -> "" SealedWithObjectsChild3 -> ""
} }
// TESTCASE NUMBER: 5 // TESTCASE NUMBER: 5
fun case_5(value_1: _SealedClassMixed): String = when (value_1) { fun case_5(value_1: SealedClassMixed): String = when (value_1) {
is _SealedMixedChild1 -> "" is SealedMixedChild1 -> ""
is _SealedMixedChild2 -> "" is SealedMixedChild2 -> ""
is _SealedMixedChild3 -> "" is SealedMixedChild3 -> ""
_SealedMixedChildObject1 -> "" SealedMixedChildObject1 -> ""
_SealedMixedChildObject2 -> "" SealedMixedChildObject2 -> ""
_SealedMixedChildObject3 -> "" SealedMixedChildObject3 -> ""
} }
/* /*
* TESTCASE NUMBER: 6 * TESTCASE NUMBER: 6
* DISCUSSION: is it correct that objects can be checked using the type checking operator? * DISCUSSION: is it correct that objects can be checked using the type checking operator?
*/ */
fun case_6(value_1: _SealedClassMixed): String = when (value_1) { fun case_6(value_1: SealedClassMixed): String = when (value_1) {
is _SealedMixedChild1 -> "" is SealedMixedChild1 -> ""
is _SealedMixedChild2 -> "" is SealedMixedChild2 -> ""
is _SealedMixedChild3 -> "" is SealedMixedChild3 -> ""
is _SealedMixedChildObject1 -> "" is SealedMixedChildObject1 -> ""
is _SealedMixedChildObject2 -> "" is SealedMixedChildObject2 -> ""
is _SealedMixedChildObject3 -> "" is SealedMixedChildObject3 -> ""
} }
// TESTCASE NUMBER: 7 // TESTCASE NUMBER: 7
fun case_7(value_1: _SealedClassEmpty): String = when (value_1) { fun case_7(value_1: SealedClassEmpty): String = when (value_1) {
else -> "" else -> ""
} }
@@ -69,8 +69,8 @@ fun case_7(value_1: _SealedClassEmpty): String = when (value_1) {
* UNEXPECTED BEHAVIOUR: must be exhaustive * UNEXPECTED BEHAVIOUR: must be exhaustive
* ISSUES: KT-22996 * ISSUES: KT-22996
*/ */
fun case_8(value: _SealedClass?): String = <!NO_ELSE_IN_WHEN!>when<!> (value) { fun case_8(value: SealedClass?): String = <!NO_ELSE_IN_WHEN!>when<!> (value) {
is _SealedChild1, !is _SealedChild3?, <!USELESS_IS_CHECK!>is _SealedChild3?<!> -> "" is SealedChild1, !is SealedChild3?, <!USELESS_IS_CHECK!>is SealedChild3?<!> -> ""
} }
/* /*
@@ -78,7 +78,7 @@ fun case_8(value: _SealedClass?): String = <!NO_ELSE_IN_WHEN!>when<!> (value) {
* UNEXPECTED BEHAVIOUR: must be exhaustive * UNEXPECTED BEHAVIOUR: must be exhaustive
* ISSUES: KT-22996 * ISSUES: KT-22996
*/ */
fun case_9(value: _SealedClass?): String = <!NO_ELSE_IN_WHEN!>when<!> (value) { fun case_9(value: SealedClass?): String = <!NO_ELSE_IN_WHEN!>when<!> (value) {
is _SealedChild1, !is _SealedChild3 -> "" is SealedChild1, !is SealedChild3 -> ""
<!USELESS_IS_CHECK!>is _SealedChild3?<!> -> "" <!USELESS_IS_CHECK!>is SealedChild3?<!> -> ""
} }
@@ -1,4 +1,3 @@
// !WITH_ENUM_CLASSES
/* /*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE) * KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -7,17 +6,18 @@
* PLACE: when-expression -> paragraph 11 -> sentence 7 * PLACE: when-expression -> paragraph 11 -> sentence 7
* NUMBER: 1 * NUMBER: 1
* DESCRIPTION: Check when exhaustive when all enumerated values are checked. * DESCRIPTION: Check when exhaustive when all enumerated values are checked.
* HELPERS: enumClasses
*/ */
// TESTCASE NUMBER: 1 // TESTCASE NUMBER: 1
fun case_1(dir: _EnumClass): String = when (dir) { fun case_1(dir: EnumClass): String = when (dir) {
_EnumClass.EAST -> "" EnumClass.EAST -> ""
_EnumClass.NORTH -> "" EnumClass.NORTH -> ""
_EnumClass.SOUTH -> "" EnumClass.SOUTH -> ""
_EnumClass.WEST -> "" EnumClass.WEST -> ""
} }
// TESTCASE NUMBER: 2 // TESTCASE NUMBER: 2
fun case_2(value_1: _EnumClassSingle): String = when (value_1) { fun case_2(value_1: EnumClassSingle): String = when (value_1) {
_EnumClassSingle.EVERYTHING -> "" EnumClassSingle.EVERYTHING -> ""
} }
@@ -1,4 +1,3 @@
// !WITH_ENUM_CLASSES
/* /*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE) * KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -7,20 +6,21 @@
* PLACE: when-expression -> paragraph 11 -> sentence 8 * PLACE: when-expression -> paragraph 11 -> sentence 8
* NUMBER: 2 * NUMBER: 2
* DESCRIPTION: Check when exhaustive when enumerated values are checked and contains a null check. * DESCRIPTION: Check when exhaustive when enumerated values are checked and contains a null check.
* HELPERS: enumClasses
*/ */
// TESTCASE NUMBER: 1 // TESTCASE NUMBER: 1
fun case_1(value_1: _EnumClass?): String = when (value_1) { fun case_1(value_1: EnumClass?): String = when (value_1) {
_EnumClass.EAST -> "" EnumClass.EAST -> ""
_EnumClass.NORTH -> "" EnumClass.NORTH -> ""
_EnumClass.SOUTH -> "" EnumClass.SOUTH -> ""
_EnumClass.WEST -> "" EnumClass.WEST -> ""
null -> "" null -> ""
} }
// TESTCASE NUMBER: 2 // TESTCASE NUMBER: 2
fun case_2(value_1: _EnumClassSingle?): String = when (value_1) { fun case_2(value_1: EnumClassSingle?): String = when (value_1) {
_EnumClassSingle.EVERYTHING -> "" EnumClassSingle.EVERYTHING -> ""
null -> "" null -> ""
} }
@@ -29,6 +29,6 @@ fun case_2(value_1: _EnumClassSingle?): String = when (value_1) {
* UNEXPECTED BEHAVIOUR * UNEXPECTED BEHAVIOUR
* ISSUES: KT-26044 * ISSUES: KT-26044
*/ */
fun case_3(value_1: _EnumClassEmpty?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) { fun case_3(value_1: EnumClassEmpty?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
null -> "" null -> ""
} }
@@ -1,4 +1,3 @@
// !WITH_SEALED_CLASSES
/* /*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE) * KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -7,46 +6,47 @@
* PLACE: when-expression -> paragraph 11 -> sentence 8 * PLACE: when-expression -> paragraph 11 -> sentence 8
* NUMBER: 3 * NUMBER: 3
* DESCRIPTION: Check when exhaustive when possible subtypes of the sealed class are covered and contains a null check. * DESCRIPTION: Check when exhaustive when possible subtypes of the sealed class are covered and contains a null check.
* HELPERS: sealedClasses
*/ */
// TESTCASE NUMBER: 1 // TESTCASE NUMBER: 1
fun case_1(value_1: _SealedClass?): Int = when (value_1) { fun case_1(value_1: SealedClass?): Int = when (value_1) {
is _SealedChild1 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.number is SealedChild1 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.number
is _SealedChild2 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.e1 + <!DEBUG_INFO_SMARTCAST!>value_1<!>.e2 is SealedChild2 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.e1 + <!DEBUG_INFO_SMARTCAST!>value_1<!>.e2
is _SealedChild3 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.m1 + <!DEBUG_INFO_SMARTCAST!>value_1<!>.m2 is SealedChild3 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.m1 + <!DEBUG_INFO_SMARTCAST!>value_1<!>.m2
null -> 0 null -> 0
} }
// TESTCASE NUMBER: 2 // TESTCASE NUMBER: 2
fun case_2(value_1: _SealedClass?): String = when (value_1) { fun case_2(value_1: SealedClass?): String = when (value_1) {
is _SealedClass -> "" is SealedClass -> ""
null -> "" null -> ""
} }
// TESTCASE NUMBER: 3 // TESTCASE NUMBER: 3
fun case_3(value_1: _SealedClassWithMethods?): String = when (value_1) { fun case_3(value_1: SealedClassWithMethods?): String = when (value_1) {
is _SealedWithMethodsChild1 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.m1() is SealedWithMethodsChild1 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.m1()
is _SealedWithMethodsChild2 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.m2() is SealedWithMethodsChild2 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.m2()
is _SealedWithMethodsChild3 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.m3() is SealedWithMethodsChild3 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.m3()
null -> "" null -> ""
} }
// TESTCASE NUMBER: 4 // TESTCASE NUMBER: 4
fun case_4(value_1: _SealedClassWithObjects?): String = when (value_1) { fun case_4(value_1: SealedClassWithObjects?): String = when (value_1) {
_SealedWithObjectsChild1 -> "" SealedWithObjectsChild1 -> ""
_SealedWithObjectsChild2 -> "" SealedWithObjectsChild2 -> ""
_SealedWithObjectsChild3 -> "" SealedWithObjectsChild3 -> ""
null -> "" null -> ""
} }
// TESTCASE NUMBER: 5 // TESTCASE NUMBER: 5
fun case_5(value_1: _SealedClassMixed?): String = when (value_1) { fun case_5(value_1: SealedClassMixed?): String = when (value_1) {
is _SealedMixedChild1 -> "" is SealedMixedChild1 -> ""
is _SealedMixedChild2 -> "" is SealedMixedChild2 -> ""
is _SealedMixedChild3 -> "" is SealedMixedChild3 -> ""
_SealedMixedChildObject1 -> "" SealedMixedChildObject1 -> ""
_SealedMixedChildObject2 -> "" SealedMixedChildObject2 -> ""
_SealedMixedChildObject3 -> "" SealedMixedChildObject3 -> ""
null -> "" null -> ""
} }
@@ -54,13 +54,13 @@ fun case_5(value_1: _SealedClassMixed?): String = when (value_1) {
* TESTCASE NUMBER: 6 * TESTCASE NUMBER: 6
* DISCUSSION: is it correct that objects can be checked using the type checking operator? * DISCUSSION: is it correct that objects can be checked using the type checking operator?
*/ */
fun case_6(value_1: _SealedClassMixed?): String = when (value_1) { fun case_6(value_1: SealedClassMixed?): String = when (value_1) {
is _SealedMixedChild1 -> "" is SealedMixedChild1 -> ""
is _SealedMixedChild2 -> "" is SealedMixedChild2 -> ""
is _SealedMixedChild3 -> "" is SealedMixedChild3 -> ""
is _SealedMixedChildObject1 -> "" is SealedMixedChildObject1 -> ""
is _SealedMixedChildObject2 -> "" is SealedMixedChildObject2 -> ""
is _SealedMixedChildObject3 -> "" is SealedMixedChildObject3 -> ""
null -> "" null -> ""
} }
@@ -69,6 +69,6 @@ fun case_6(value_1: _SealedClassMixed?): String = when (value_1) {
* UNEXPECTED BEHAVIOUR: must be exhaustive * UNEXPECTED BEHAVIOUR: must be exhaustive
* ISSUES: KT-26044 * ISSUES: KT-26044
*/ */
fun case_7(value: _SealedClassEmpty?): String = <!NO_ELSE_IN_WHEN!>when<!> (value) { fun case_7(value: SealedClassEmpty?): String = <!NO_ELSE_IN_WHEN!>when<!> (value) {
null -> "" null -> ""
} }
@@ -1,4 +1,3 @@
// !WITH_BASIC_TYPES
/* /*
* KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE) * KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE)
@@ -7,10 +6,11 @@
* PLACE: when-expression -> paragraph 3 -> sentence 2 * PLACE: when-expression -> paragraph 3 -> sentence 2
* NUMBER: 1 * NUMBER: 1
* DESCRIPTION: 'When' without bound value and with not boolean condition in 'when condition'. * DESCRIPTION: 'When' without bound value and with not boolean condition in 'when condition'.
* HELPERS: typesProvider
*/ */
// TESTCASE NUMBER: 1 // TESTCASE NUMBER: 1
fun case_1(value_1: Int, value_2: String, value_3: _BasicTypesProvider): String { fun case_1(value_1: Int, value_2: String, value_3: TypesProvider): String {
when { when {
<!TYPE_MISMATCH!>.012f / value_1<!> -> return "" <!TYPE_MISMATCH!>.012f / value_1<!> -> return ""
<!TYPE_MISMATCH!>"$value_2..."<!> -> return "" <!TYPE_MISMATCH!>"$value_2..."<!> -> return ""
@@ -1,4 +1,3 @@
// !WITH_BASIC_TYPES
/* /*
* KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE) * KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE)
@@ -7,14 +6,15 @@
* PLACE: when-expression -> paragraph 3 -> sentence 2 * PLACE: when-expression -> paragraph 3 -> sentence 2
* NUMBER: 2 * NUMBER: 2
* DESCRIPTION: 'When' without bound value and not allowed comma in when entry. * DESCRIPTION: 'When' without bound value and not allowed comma in when entry.
* HELPERS: typesProvider, classes
*/ */
// TESTCASE NUMBER: 1 // TESTCASE NUMBER: 1
fun case_1(value_1: _BasicTypesProvider) { fun case_1(value_1: TypesProvider) {
when { when {
getBoolean()<!COMMA_IN_WHEN_CONDITION_WITHOUT_ARGUMENT!>,<!> value_1.getBoolean() -> return getBoolean()<!COMMA_IN_WHEN_CONDITION_WITHOUT_ARGUMENT!>,<!> value_1.getBoolean() -> return
value_1.getBoolean() && getBoolean()<!COMMA_IN_WHEN_CONDITION_WITHOUT_ARGUMENT!>,<!> getLong() == 1000L -> return value_1.getBoolean() && getBoolean()<!COMMA_IN_WHEN_CONDITION_WITHOUT_ARGUMENT!>,<!> getLong() == 1000L -> return
<!TYPE_MISMATCH!>value_1.getList()<!><!COMMA_IN_WHEN_CONDITION_WITHOUT_ARGUMENT!>,<!> <!TYPE_MISMATCH!>getLong()<!><!COMMA_IN_WHEN_CONDITION_WITHOUT_ARGUMENT!>,<!> <!TYPE_MISMATCH!>{}<!><!COMMA_IN_WHEN_CONDITION_WITHOUT_ARGUMENT!>,<!> <!TYPE_MISMATCH!>Any()<!><!COMMA_IN_WHEN_CONDITION_WITHOUT_ARGUMENT!>,<!> throw Exception() -> return <!TYPE_MISMATCH!>Out<Int>()<!><!COMMA_IN_WHEN_CONDITION_WITHOUT_ARGUMENT!>,<!> <!TYPE_MISMATCH!>getLong()<!><!COMMA_IN_WHEN_CONDITION_WITHOUT_ARGUMENT!>,<!> <!TYPE_MISMATCH!>{}<!><!COMMA_IN_WHEN_CONDITION_WITHOUT_ARGUMENT!>,<!> <!TYPE_MISMATCH!>Any()<!><!COMMA_IN_WHEN_CONDITION_WITHOUT_ARGUMENT!>,<!> throw Exception() -> return
} }
<!UNREACHABLE_CODE!>return<!> <!UNREACHABLE_CODE!>return<!>
@@ -1,7 +1,4 @@
// !DIAGNOSTICS: -UNUSED_EXPRESSION -DEBUG_INFO_SMARTCAST // !DIAGNOSTICS: -UNUSED_EXPRESSION -DEBUG_INFO_SMARTCAST
// !WITH_BASIC_TYPES
// !WITH_CLASSES
// !WITH_FUNCTIONS
/* /*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE) * KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -10,6 +7,7 @@
* PLACE: when-expression -> paragraph 3 -> sentence 1 * PLACE: when-expression -> paragraph 3 -> sentence 1
* NUMBER: 1 * NUMBER: 1
* DESCRIPTION: 'When' without bound value and with different variants of expressions in the control structure body. * DESCRIPTION: 'When' without bound value and with different variants of expressions in the control structure body.
* HELPERS: typesProvider, classes, functions
*/ */
// TESTCASE NUMBER: 1 // TESTCASE NUMBER: 1
@@ -25,11 +23,11 @@ fun case_1(value_1: Int) {
} }
// TESTCASE NUMBER: 2 // TESTCASE NUMBER: 2
fun case_2(value_1: Int, value_2: Byte, value_3: _BasicTypesProvider) { fun case_2(value_1: Int, value_2: Byte, value_3: TypesProvider) {
when { when {
value_1 == 1 -> -.09 % 10L value_1 == 1 -> -.09 % 10L
value_1 == 3 -> value_2 / -5 value_1 == 3 -> value_2 / -5
value_1 == 2 -> value_3.getChar(99) - 11 + 90 value_1 == 2 -> value_3.getChar() - 11 + 90
} }
} }
@@ -39,8 +37,8 @@ fun case_3(value_1: Int, value_2: Boolean, value_3: Long) {
value_1 == 1 -> value_2 value_1 == 1 -> value_2
value_1 == 2 -> !value_2 value_1 == 2 -> !value_2
value_1 == 3 -> getBoolean() && value_2 value_1 == 3 -> getBoolean() && value_2
value_1 == 5 -> getChar(10) != 'a' value_1 == 5 -> getChar() != 'a'
value_1 == 6 -> getList() === getAny() value_1 == 6 -> Out<Int>() === getAny()
value_1 == 7 -> value_3 <= 11 value_1 == 7 -> value_3 <= 11
} }
} }
@@ -145,8 +143,8 @@ fun case_11(value_1: Int) {
// TESTCASE NUMBER: 12 // TESTCASE NUMBER: 12
fun case_12(value_1: Int, value_2: Collection<Int>, value_3: Collection<Int>?) { fun case_12(value_1: Int, value_2: Collection<Int>, value_3: Collection<Int>?) {
when { when {
value_1 == 1 -> value_2 as MutableList<Int> value_1 == 1 -> value_2 as List<Int>
value_1 == 2 -> value_2 as? MutableList<Int> value_1 == 2 -> value_2 as? List<Int>
value_1 == 3 -> value_3 <!UNCHECKED_CAST!>as? MutableMap<Int, Int><!> value_1 == 3 -> value_3 <!UNCHECKED_CAST!>as? MutableMap<Int, Int><!>
value_1 == 4 -> (value_2 <!UNCHECKED_CAST!>as? Map<Int, Int><!>) as MutableMap<Int, Int> value_1 == 4 -> (value_2 <!UNCHECKED_CAST!>as? Map<Int, Int><!>) as MutableMap<Int, Int>
} }
@@ -185,11 +183,11 @@ fun case_15(value_1: Int, value_2: List<Int>, value_3: List<List<List<List<Int>>
} }
// TESTCASE NUMBER: 16 // TESTCASE NUMBER: 16
fun case_16(value_1: Int, value_2: _Class, value_3: _Class?, value_4: Int) { fun case_16(value_1: Int, value_2: Class, value_3: Class?, value_4: Int) {
fun __fun_1(): () -> Unit { return fun() { } } fun __fun_1(): () -> Unit { return fun() { } }
when { when {
value_1 == 1 -> _funWithoutArgs() value_1 == 1 -> funWithoutArgs()
value_1 == 2 -> __fun_1()() value_1 == 2 -> __fun_1()()
value_1 == 3 -> value_2.fun_2(value_4) value_1 == 3 -> value_2.fun_2(value_4)
value_1 == 4 -> value_3?.fun_2(value_4) value_1 == 4 -> value_3?.fun_2(value_4)
@@ -198,7 +196,7 @@ fun case_16(value_1: Int, value_2: _Class, value_3: _Class?, value_4: Int) {
} }
// TESTCASE NUMBER: 17 // TESTCASE NUMBER: 17
fun case_17(value_1: Int, value_2: _Class, value_3: _Class?) { fun case_17(value_1: Int, value_2: Class, value_3: Class?) {
when { when {
value_1 == 1 -> value_2.prop_1 value_1 == 1 -> value_2.prop_1
value_1 == 2 -> value_3?.prop_1 value_1 == 2 -> value_3?.prop_1
@@ -1,6 +1,3 @@
// !WITH_BASIC_TYPES
// !WITH_SEALED_CLASSES
// !WITH_ENUM_CLASSES
/* /*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE) * KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -9,6 +6,7 @@
* PLACE: when-expression -> paragraph 3 -> sentence 2 * PLACE: when-expression -> paragraph 3 -> sentence 2
* NUMBER: 1 * NUMBER: 1
* DESCRIPTION: 'When' without bound value and different variants of the boolean conditions (logical, equality, comparison, type checking operator, containment operator). * DESCRIPTION: 'When' without bound value and different variants of the boolean conditions (logical, equality, comparison, type checking operator, containment operator).
* HELPERS: typesProvider, enumClasses, sealedClasses, classes
*/ */
// TESTCASE NUMBER: 1 // TESTCASE NUMBER: 1
@@ -16,8 +14,8 @@ fun case_1(value_1: Boolean, value_2: Long): Int {
return when { return when {
value_1 -> 1 value_1 -> 1
getBoolean() && value_1 -> 2 getBoolean() && value_1 -> 2
getChar(10) != 'a' -> 3 getChar() != 'a' -> 3
getList() === getAny() -> 4 Out<Int>() === getAny() -> 4
value_2 <= 11 -> 5 value_2 <= 11 -> 5
!value_1 -> 6 !value_1 -> 6
else -> 7 else -> 7
@@ -28,12 +26,12 @@ fun case_1(value_1: Boolean, value_2: Long): Int {
* TESTCASE NUMBER: 2 * TESTCASE NUMBER: 2
* NOTE: for a potential analysys of exhaustiveness by enums in whens without a bound value. * NOTE: for a potential analysys of exhaustiveness by enums in whens without a bound value.
*/ */
fun case_2(value_1: _EnumClass) { fun case_2(value_1: EnumClass) {
when { when {
value_1 == _EnumClass.NORTH -> {} value_1 == EnumClass.NORTH -> {}
value_1 == _EnumClass.SOUTH -> {} value_1 == EnumClass.SOUTH -> {}
value_1 == _EnumClass.WEST -> {} value_1 == EnumClass.WEST -> {}
value_1 == _EnumClass.EAST -> {} value_1 == EnumClass.EAST -> {}
} }
} }
@@ -105,11 +103,11 @@ fun case_7(value_1: Any) {
* TESTCASE NUMBER: 8 * TESTCASE NUMBER: 8
* NOTE: for a potential analysys of exhaustiveness by enums in whens without a bound value. * NOTE: for a potential analysys of exhaustiveness by enums in whens without a bound value.
*/ */
fun case_8(value_1: _SealedClass) { fun case_8(value_1: SealedClass) {
when { when {
value_1 is _SealedChild1 -> {} value_1 is SealedChild1 -> {}
value_1 is _SealedChild2 -> {} value_1 is SealedChild2 -> {}
value_1 is _SealedChild3 -> {} value_1 is SealedChild3 -> {}
} }
} }
@@ -1,4 +1,3 @@
// !WITH_BASIC_TYPES
/* /*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE) * KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -9,10 +8,11 @@
* DESCRIPTION: 'When' without bound value and with Nothing in condition (subtype of Boolean). * DESCRIPTION: 'When' without bound value and with Nothing in condition (subtype of Boolean).
* DISCUSSION * DISCUSSION
* ISSUES: KT-25948 * ISSUES: KT-25948
* HELPERS: typesProvider
*/ */
// TESTCASE NUMBER: 1 // TESTCASE NUMBER: 1
fun case_1(<!UNUSED_PARAMETER!>value_1<!>: _BasicTypesProvider) { fun case_1(<!UNUSED_PARAMETER!>value_1<!>: TypesProvider) {
when { when {
return -> <!UNREACHABLE_CODE!>return<!> return -> <!UNREACHABLE_CODE!>return<!>
<!UNREACHABLE_CODE!>return == return -> return<!> <!UNREACHABLE_CODE!>return == return -> return<!>
@@ -23,7 +23,7 @@ fun case_1(<!UNUSED_PARAMETER!>value_1<!>: _BasicTypesProvider) {
} }
// TESTCASE NUMBER: 2 // TESTCASE NUMBER: 2
fun case_2(<!UNUSED_PARAMETER!>value_1<!>: _BasicTypesProvider) { fun case_2(<!UNUSED_PARAMETER!>value_1<!>: TypesProvider) {
when { when {
throw Exception() -> <!UNREACHABLE_CODE!>return<!> throw Exception() -> <!UNREACHABLE_CODE!>return<!>
<!UNREACHABLE_CODE!>(throw Exception()) == (throw Exception()) -> return<!> <!UNREACHABLE_CODE!>(throw Exception()) == (throw Exception()) -> return<!>
@@ -34,7 +34,7 @@ fun case_2(<!UNUSED_PARAMETER!>value_1<!>: _BasicTypesProvider) {
} }
// TESTCASE NUMBER: 3 // TESTCASE NUMBER: 3
fun case_3(<!UNUSED_PARAMETER!>value_1<!>: _BasicTypesProvider) { fun case_3(<!UNUSED_PARAMETER!>value_1<!>: TypesProvider) {
loop1@ while (true) { loop1@ while (true) {
loop2@ while (true) { loop2@ while (true) {
loop3@ while (true) { loop3@ while (true) {
@@ -49,7 +49,7 @@ fun case_3(<!UNUSED_PARAMETER!>value_1<!>: _BasicTypesProvider) {
} }
// TESTCASE NUMBER: 4 // TESTCASE NUMBER: 4
fun case_4(<!UNUSED_PARAMETER!>value_1<!>: _BasicTypesProvider): String { fun case_4(<!UNUSED_PARAMETER!>value_1<!>: TypesProvider): String {
loop1@ while (true) { loop1@ while (true) {
loop2@ while (true) { loop2@ while (true) {
loop3@ while (true) { loop3@ while (true) {
@@ -64,7 +64,7 @@ fun case_4(<!UNUSED_PARAMETER!>value_1<!>: _BasicTypesProvider): String {
} }
// TESTCASE NUMBER: 6 // TESTCASE NUMBER: 6
fun case_6(value_1: Nothing, <!UNUSED_PARAMETER!>value_2<!>: _BasicTypesProvider): String { fun case_6(value_1: Nothing, <!UNUSED_PARAMETER!>value_2<!>: TypesProvider): String {
when { when {
value_1 -> <!UNREACHABLE_CODE!>return ""<!> value_1 -> <!UNREACHABLE_CODE!>return ""<!>
<!UNREACHABLE_CODE!>value_2.getNothing() -> return ""<!> <!UNREACHABLE_CODE!>value_2.getNothing() -> return ""<!>
@@ -76,7 +76,7 @@ fun case_6(value_1: Nothing, <!UNUSED_PARAMETER!>value_2<!>: _BasicTypesProvider
} }
// TESTCASE NUMBER: 5 // TESTCASE NUMBER: 5
fun case_5(<!UNUSED_PARAMETER!>value_1<!>: _BasicTypesProvider, <!UNUSED_PARAMETER!>value_2<!>: Nothing) { fun case_5(<!UNUSED_PARAMETER!>value_1<!>: TypesProvider, <!UNUSED_PARAMETER!>value_2<!>: Nothing) {
loop1@ while (true) { loop1@ while (true) {
loop2@ while (true) { loop2@ while (true) {
loop3@ while (true) { loop3@ while (true) {
@@ -1,7 +1,4 @@
// !DIAGNOSTICS: -UNUSED_EXPRESSION // !DIAGNOSTICS: -UNUSED_EXPRESSION
// !WITH_BASIC_TYPES
// !WITH_FUNCTIONS
// !WITH_CLASSES
/* /*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE) * KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -10,6 +7,7 @@
* PLACE: when-expression -> paragraph 6 -> sentence 1 * PLACE: when-expression -> paragraph 6 -> sentence 1
* NUMBER: 1 * NUMBER: 1
* DESCRIPTION: 'When' with bound value and with different variants of expressions in the control structure body. * DESCRIPTION: 'When' with bound value and with different variants of expressions in the control structure body.
* HELPERS: typesProvider, classes, functions
*/ */
// TESTCASE NUMBER: 1 // TESTCASE NUMBER: 1
@@ -25,11 +23,11 @@ fun case_1(value_1: Int) {
} }
// TESTCASE NUMBER: 2 // TESTCASE NUMBER: 2
fun case_2(value_1: Int, value_2: Byte, value_3: _BasicTypesProvider) { fun case_2(value_1: Int, value_2: Byte, value_3: TypesProvider) {
when (value_1) { when (value_1) {
1 -> -.09 % 10L 1 -> -.09 % 10L
3 -> value_2 / -5 3 -> value_2 / -5
2 -> value_3.getChar(99) - 11 + 90 2 -> value_3.getChar() - 11 + 90
4 -> 100 4 -> 100
} }
} }
@@ -40,7 +38,7 @@ fun case_3(value_1: Int, value_2: Boolean, value_3: Long) {
1 -> value_2 1 -> value_2
2 -> !value_2 2 -> !value_2
3 -> getBoolean() && value_2 3 -> getBoolean() && value_2
5 -> getChar(10) != 'a' 5 -> getChar() != 'a'
6 -> getList() === getAny() 6 -> getList() === getAny()
7 -> value_3 <= 11 7 -> value_3 <= 11
} }
@@ -148,8 +146,8 @@ fun case_11(value_1: Int) {
// TESTCASE NUMBER: 12 // TESTCASE NUMBER: 12
fun case_12(value_1: Int, value_2: Collection<Int>, value_3: Collection<Int>?) { fun case_12(value_1: Int, value_2: Collection<Int>, value_3: Collection<Int>?) {
when (value_1) { when (value_1) {
1 -> value_2 as MutableList<Int> 1 -> value_2 as List<Int>
2 -> value_2 as? MutableList<Int> 2 -> value_2 as? List<Int>
3 -> value_3 <!UNCHECKED_CAST!>as? MutableMap<Int, Int><!> 3 -> value_3 <!UNCHECKED_CAST!>as? MutableMap<Int, Int><!>
4 -> (value_2 <!UNCHECKED_CAST!>as? Map<Int, Int><!>) as MutableMap<Int, Int> 4 -> (value_2 <!UNCHECKED_CAST!>as? Map<Int, Int><!>) as MutableMap<Int, Int>
} }
@@ -188,11 +186,11 @@ fun case_15(value_1: Int, value_2: List<Int>, value_3: List<List<List<List<Int>>
} }
// TESTCASE NUMBER: 16 // TESTCASE NUMBER: 16
fun case_16(value_1: Int, value_2: _Class, value_3: _Class?, value_4: Int) { fun case_16(value_1: Int, value_2: Class, value_3: Class?, value_4: Int) {
fun __fun_1(): () -> Unit { return fun() { } } fun __fun_1(): () -> Unit { return fun() { } }
when (value_1) { when (value_1) {
1 -> _funWithoutArgs() 1 -> funWithoutArgs()
2 -> __fun_1()() 2 -> __fun_1()()
3 -> value_2.fun_2(value_4) 3 -> value_2.fun_2(value_4)
4 -> value_3?.fun_2(value_4) 4 -> value_3?.fun_2(value_4)
@@ -201,7 +199,7 @@ fun case_16(value_1: Int, value_2: _Class, value_3: _Class?, value_4: Int) {
} }
// TESTCASE NUMBER: 17 // TESTCASE NUMBER: 17
fun case_17(value_1: Int, value_2: _Class, value_3: _Class?) { fun case_17(value_1: Int, value_2: Class, value_3: Class?) {
when (value_1) { when (value_1) {
1 -> value_2.prop_1 1 -> value_2.prop_1
2 -> value_3?.prop_1 2 -> value_3?.prop_1
@@ -1,4 +1,3 @@
// !WITH_CLASSES
/* /*
* KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE) * KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE)
@@ -7,12 +6,13 @@
* PLACE: when-expression -> paragraph 7 -> sentence 1 * PLACE: when-expression -> paragraph 7 -> sentence 1
* NUMBER: 1 * NUMBER: 1
* DESCRIPTION: 'When' with bound value and type test condition (without companion object in classes), but without type checking operator. * DESCRIPTION: 'When' with bound value and type test condition (without companion object in classes), but without type checking operator.
* HELPERS: classes
*/ */
// TESTCASE NUMBER: 1 // TESTCASE NUMBER: 1
fun case_1(value_1: Any): String { fun case_1(value_1: Any): String {
when (value_1) { when (value_1) {
<!NO_COMPANION_OBJECT!>_EmptyClass<!> -> return "" <!NO_COMPANION_OBJECT!>EmptyClass<!> -> return ""
} }
return "" return ""
@@ -1,4 +1,3 @@
// !WITH_CLASSES
/* /*
* KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE) * KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE)
@@ -7,6 +6,7 @@
* PLACE: when-expression -> paragraph 7 -> sentence 1 * PLACE: when-expression -> paragraph 7 -> sentence 1
* NUMBER: 2 * NUMBER: 2
* DESCRIPTION: 'When' with bound value and type test condition on the non-type operand of the type checking operator. * DESCRIPTION: 'When' with bound value and type test condition on the non-type operand of the type checking operator.
* HELPERS: classes
*/ */
// TESTCASE NUMBER: 1 // TESTCASE NUMBER: 1
@@ -1,4 +1,3 @@
// !WITH_BASIC_TYPES
/* /*
* KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE) * KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE)
@@ -7,10 +6,11 @@
* PLACE: when-expression -> paragraph 7 -> sentence 3 * PLACE: when-expression -> paragraph 7 -> sentence 3
* NUMBER: 1 * NUMBER: 1
* DESCRIPTION: 'When' with bound value and 'when condition' with range expression, but without containment checking operator. * DESCRIPTION: 'When' with bound value and 'when condition' with range expression, but without containment checking operator.
* HELPERS: typesProvider
*/ */
// TESTCASE NUMBER: 1 // TESTCASE NUMBER: 1
fun case_1(value_1: Int, value_2: _BasicTypesProvider): String { fun case_1(value_1: Int, value_2: TypesProvider): String {
when (value_1) { when (value_1) {
<!INCOMPATIBLE_TYPES!>-1000L..100<!> -> return "" <!INCOMPATIBLE_TYPES!>-1000L..100<!> -> return ""
<!INCOMPATIBLE_TYPES!>value_2.getInt()..getLong()<!> -> return "" <!INCOMPATIBLE_TYPES!>value_2.getInt()..getLong()<!> -> return ""
@@ -1,5 +1,4 @@
// !DIAGNOSTICS: -UNUSED_EXPRESSION // !DIAGNOSTICS: -UNUSED_EXPRESSION
// !WITH_CLASSES
/* /*
* KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE) * KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE)
@@ -8,10 +7,11 @@
* PLACE: when-expression -> paragraph 7 -> sentence 3 * PLACE: when-expression -> paragraph 7 -> sentence 3
* NUMBER: 2 * NUMBER: 2
* DESCRIPTION: 'When' with bound value and 'when condition' with contains operator and type without defined contains operator. * DESCRIPTION: 'When' with bound value and 'when condition' with contains operator and type without defined contains operator.
* HELPERS: classes
*/ */
// TESTCASE NUMBER: 1 // TESTCASE NUMBER: 1
fun case_1(value_1: Int, value_2: _EmptyClass, value_3: Int, value_4: Any): String { fun case_1(value_1: Int, value_2: EmptyClass, value_3: Int, value_4: Any): String {
when (value_1) { when (value_1) {
<!TYPE_MISMATCH_IN_RANGE, UNRESOLVED_REFERENCE_WRONG_RECEIVER!>in<!> value_2 -> return "" <!TYPE_MISMATCH_IN_RANGE, UNRESOLVED_REFERENCE_WRONG_RECEIVER!>in<!> value_2 -> return ""
<!TYPE_MISMATCH_IN_RANGE, UNRESOLVED_REFERENCE_WRONG_RECEIVER!>in<!> value_3 -> return "" <!TYPE_MISMATCH_IN_RANGE, UNRESOLVED_REFERENCE_WRONG_RECEIVER!>in<!> value_3 -> return ""
@@ -1,5 +1,3 @@
// !WITH_CLASSES
// !WITH_OBJECTS
/* /*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE) * KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -8,6 +6,7 @@
* PLACE: when-expression -> paragraph 7 -> sentence 1 * PLACE: when-expression -> paragraph 7 -> sentence 1
* NUMBER: 1 * NUMBER: 1
* DESCRIPTION: 'When' with bound value and type test condition. * DESCRIPTION: 'When' with bound value and type test condition.
* HELPERS: classes, objects
*/ */
// TESTCASE NUMBER: 1 // TESTCASE NUMBER: 1
@@ -61,8 +60,8 @@ fun case_5(value_1: Any?): String = when (value_1) {
// TESTCASE NUMBER: 6 // TESTCASE NUMBER: 6
fun case_6(value_1: Any): String { fun case_6(value_1: Any): String {
when (value_1) { when (value_1) {
is _EmptyObject -> return "" is EmptyObject -> return ""
is _ClassWithCompanionObject.Companion -> return "" is ClassWithCompanionObject.Companion -> return ""
} }
return "" return ""
@@ -1,6 +1,3 @@
// !WITH_SEALED_CLASSES
// !WITH_CLASSES
// !WITH_OBJECTS
/* /*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE) * KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -9,13 +6,14 @@
* PLACE: when-expression -> paragraph 7 -> sentence 1 * PLACE: when-expression -> paragraph 7 -> sentence 1
* NUMBER: 2 * NUMBER: 2
* DESCRIPTION: 'When' with bound value and type test condition (invert type checking operator). * DESCRIPTION: 'When' with bound value and type test condition (invert type checking operator).
* HELPERS: classes, sealedClasses, objects
*/ */
// TESTCASE NUMBER: 1 // TESTCASE NUMBER: 1
fun case_1(value_1: _SealedClass) = when (value_1) { fun case_1(value_1: SealedClass) = when (value_1) {
!is _SealedChild1 -> {} !is SealedChild1 -> {}
!is _SealedChild2 -> {} !is SealedChild2 -> {}
!is _SealedChild3 -> {} !is SealedChild3 -> {}
} }
/* /*
@@ -23,16 +21,16 @@ fun case_1(value_1: _SealedClass) = when (value_1) {
* UNEXPECTED BEHAVIOUR * UNEXPECTED BEHAVIOUR
* ISSUES: KT-22996 * ISSUES: KT-22996
*/ */
fun case_2(value_1: _SealedClass?): String = when (value_1) { fun case_2(value_1: SealedClass?): String = when (value_1) {
!is _SealedChild2 -> "" // including null !is SealedChild2 -> "" // including null
<!USELESS_IS_CHECK!>is _SealedChild2<!> -> "" <!USELESS_IS_CHECK!>is SealedChild2<!> -> ""
null -> "" // redundant null -> "" // redundant
} }
// TESTCASE NUMBER: 3 // TESTCASE NUMBER: 3
fun case_3(value_1: _SealedClass?): String = when (value_1) { fun case_3(value_1: SealedClass?): String = when (value_1) {
!is _SealedChild2? -> "" // null isn't included !is SealedChild2? -> "" // null isn't included
is _SealedChild2 -> "" is SealedChild2 -> ""
null -> "" null -> ""
} }
@@ -41,18 +39,18 @@ fun case_3(value_1: _SealedClass?): String = when (value_1) {
* UNEXPECTED BEHAVIOUR * UNEXPECTED BEHAVIOUR
* ISSUES: KT-22996 * ISSUES: KT-22996
*/ */
fun case_4(value_1: _SealedClass?) { fun case_4(value_1: SealedClass?) {
when (value_1) { when (value_1) {
!is _SealedChild2 -> {} // including null !is SealedChild2 -> {} // including null
<!USELESS_IS_CHECK!>is _SealedChild2?<!> -> {} // redundant nullable type check <!USELESS_IS_CHECK!>is SealedChild2?<!> -> {} // redundant nullable type check
} }
} }
// TESTCASE NUMBER: 5 // TESTCASE NUMBER: 5
fun case_5(value_1: Any): String { fun case_5(value_1: Any): String {
when (value_1) { when (value_1) {
is _EmptyObject -> return "" is EmptyObject -> return ""
!is _ClassWithCompanionObject.Companion -> return "" !is ClassWithCompanionObject.Companion -> return ""
} }
return "" return ""
@@ -1,6 +1,3 @@
// !WITH_CLASSES
// !WITH_SEALED_CLASSES
// !WITH_OBJECTS
/* /*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE) * KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -9,6 +6,7 @@
* PLACE: when-expression -> paragraph 7 -> sentence 1 * PLACE: when-expression -> paragraph 7 -> sentence 1
* NUMBER: 3 * NUMBER: 3
* DESCRIPTION: 'When' with bound value and enumaration of type test conditions. * DESCRIPTION: 'When' with bound value and enumaration of type test conditions.
* HELPERS: classes, sealedClasses, objects
*/ */
// TESTCASE NUMBER: 1 // TESTCASE NUMBER: 1
@@ -21,8 +19,8 @@ fun case_1(value_1: Any) = when (value_1) {
// TESTCASE NUMBER: 2 // TESTCASE NUMBER: 2
fun case_2(value_1: Any?) = when (value_1) { fun case_2(value_1: Any?) = when (value_1) {
is Float, is Char, is _SealedClass? -> "" // if value is null then this branch will be executed is Float, is Char, is SealedClass? -> "" // if value is null then this branch will be executed
is Double, is Boolean, is _ClassWithCompanionObject.Companion -> "" is Double, is Boolean, is ClassWithCompanionObject.Companion -> ""
else -> "" else -> ""
} }
@@ -33,7 +31,7 @@ fun case_2(value_1: Any?) = when (value_1) {
*/ */
fun case_3(value_1: Any?) = when (value_1) { fun case_3(value_1: Any?) = when (value_1) {
is Float, is Char, is Int? -> "" // if value is null then this branch will be executed is Float, is Char, is Int? -> "" // if value is null then this branch will be executed
is _SealedChild2, is Boolean?, is String -> "" // redundant nullable type check is SealedChild2, is Boolean?, is String -> "" // redundant nullable type check
else -> "" else -> ""
} }
@@ -44,7 +42,7 @@ fun case_3(value_1: Any?) = when (value_1) {
*/ */
fun case_4(value_1: Any?) = when (value_1) { fun case_4(value_1: Any?) = when (value_1) {
is Float, is Char?, is Int? -> "" // double nullable type check in the one branch is Float, is Char?, is Int? -> "" // double nullable type check in the one branch
is _SealedChild1, is Boolean, is String -> "" is SealedChild1, is Boolean, is String -> ""
else -> "" else -> ""
} }
@@ -56,7 +54,7 @@ fun case_4(value_1: Any?) = when (value_1) {
fun case_5(value_1: Any?): String { fun case_5(value_1: Any?): String {
when (value_1) { when (value_1) {
is Float, is Char?, is Int -> return "" is Float, is Char?, is Int -> return ""
is Double, is _EmptyObject, is String -> return "" is Double, is EmptyObject, is String -> return ""
null -> return "" // null-check redundant null -> return "" // null-check redundant
else -> return "" else -> return ""
} }
@@ -70,7 +68,7 @@ fun case_5(value_1: Any?): String {
fun case_6(value_1: Any?): String { fun case_6(value_1: Any?): String {
when (value_1) { when (value_1) {
is Float, is Char?, null, is Int -> return "" // double nullable type check in the one branch is Float, is Char?, null, is Int -> return "" // double nullable type check in the one branch
is Double, is _EmptyObject, is String -> return "" is Double, is EmptyObject, is String -> return ""
else -> return "" else -> return ""
} }
} }
@@ -1,4 +1,3 @@
// !WITH_SEALED_CLASSES
/* /*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE) * KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -7,32 +6,33 @@
* PLACE: when-expression -> paragraph 7 -> sentence 1 * PLACE: when-expression -> paragraph 7 -> sentence 1
* NUMBER: 4 * NUMBER: 4
* DESCRIPTION: 'When' with bound value and enumaration of type test conditions (with invert type checking operator). * DESCRIPTION: 'When' with bound value and enumaration of type test conditions (with invert type checking operator).
* HELPERS: sealedClasses
*/ */
// TESTCASE NUMBER: 1 // TESTCASE NUMBER: 1
fun case_1(value_1: _SealedClass): String = when (value_1) { fun case_1(value_1: SealedClass): String = when (value_1) {
is _SealedChild1, !is _SealedChild3 -> "" is SealedChild1, !is SealedChild3 -> ""
<!USELESS_IS_CHECK!>is _SealedChild3<!> -> "" <!USELESS_IS_CHECK!>is SealedChild3<!> -> ""
} }
// TESTCASE NUMBER: 2 // TESTCASE NUMBER: 2
fun case_2(value_1: _SealedClass) = when (value_1) { fun case_2(value_1: SealedClass) = when (value_1) {
!is _SealedChild1, !is _SealedChild2, !is _SealedChild3 -> {} !is SealedChild1, !is SealedChild2, !is SealedChild3 -> {}
} }
// TESTCASE NUMBER: 3 // TESTCASE NUMBER: 3
fun case_3(value_1: _SealedClass): String = when (value_1) { fun case_3(value_1: SealedClass): String = when (value_1) {
is _SealedChild2, !is _SealedChild2 -> "" is SealedChild2, !is SealedChild2 -> ""
} }
// TESTCASE NUMBER: 4 // TESTCASE NUMBER: 4
fun case_4(value_1: _SealedClass): String = when (value_1) { fun case_4(value_1: SealedClass): String = when (value_1) {
!is _SealedChild1, <!USELESS_IS_CHECK!>is _SealedChild1<!> -> "" !is SealedChild1, <!USELESS_IS_CHECK!>is SealedChild1<!> -> ""
} }
// TESTCASE NUMBER: 5 // TESTCASE NUMBER: 5
fun case_5(value_1: Any?): String = when (value_1) { fun case_5(value_1: Any?): String = when (value_1) {
is _SealedChild3, !is _SealedChild3? -> "" is SealedChild3, !is SealedChild3? -> ""
else -> "" else -> ""
} }
@@ -42,8 +42,8 @@ fun case_5(value_1: Any?): String = when (value_1) {
* ISSUES: KT-22996 * ISSUES: KT-22996
*/ */
fun case_6(value_1: Any?): String = when (value_1) { fun case_6(value_1: Any?): String = when (value_1) {
is Boolean?, !is _SealedChild3 -> "" // double nullable type check in the one branch is Boolean?, !is SealedChild3 -> "" // double nullable type check in the one branch
<!USELESS_IS_CHECK!>is _SealedChild3<!> -> "" <!USELESS_IS_CHECK!>is SealedChild3<!> -> ""
else -> "" else -> ""
} }
@@ -53,6 +53,6 @@ fun case_6(value_1: Any?): String = when (value_1) {
* ISSUES: KT-22996 * ISSUES: KT-22996
*/ */
fun case_7(value_1: Any?): String = when (value_1) { fun case_7(value_1: Any?): String = when (value_1) {
is Number?, null, !is _SealedChild3 -> "" // triple nullable type check in the one branch is Number?, null, !is SealedChild3 -> "" // triple nullable type check in the one branch
else -> "" else -> ""
} }
@@ -1,5 +1,3 @@
// !WITH_BASIC_TYPES
// !WITH_CLASSES
/* /*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE) * KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -8,6 +6,7 @@
* PLACE: when-expression -> paragraph 7 -> sentence 3 * PLACE: when-expression -> paragraph 7 -> sentence 3
* NUMBER: 1 * NUMBER: 1
* DESCRIPTION: 'When' with bound value and containment operator. * DESCRIPTION: 'When' with bound value and containment operator.
* HELPERS: typesProvider, classes
*/ */
// TESTCASE NUMBER: 1 // TESTCASE NUMBER: 1
@@ -23,9 +22,9 @@ fun case_1(value_1: Int, value_2: Int, value_3: Short): String {
} }
// TESTCASE NUMBER: 2 // TESTCASE NUMBER: 2
fun case_2(value_1: Int, value_2: List<IntArray>, value_3: _Class) = when (value_1) { fun case_2(value_1: Int, value_2: List<IntArray>, value_3: Class) = when (value_1) {
in value_2[0] -> "" in value_2[0] -> ""
!in listOf(0, 1, 2, 3, 4) -> "" !in listOf(0, 1, 2, 3, 4) -> ""
!in value_3.getIntArray(90) -> "" !in value_3.getIntArray() -> ""
else -> "" else -> ""
} }
@@ -1,5 +1,3 @@
// !WITH_BASIC_TYPES
// !WITH_CLASSES
/* /*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE) * KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -8,6 +6,7 @@
* PLACE: when-expression -> paragraph 7 -> sentence 3 * PLACE: when-expression -> paragraph 7 -> sentence 3
* NUMBER: 2 * NUMBER: 2
* DESCRIPTION: 'When' with bound value and enumeration of the containment operators. * DESCRIPTION: 'When' with bound value and enumeration of the containment operators.
* HELPERS: typesProvider, classes
*/ */
// TESTCASE NUMBER: 1 // TESTCASE NUMBER: 1
@@ -21,7 +20,7 @@ fun case_1(value_1: Int, value_2: Int, value_3: Short): String {
} }
// TESTCASE NUMBER: 2 // TESTCASE NUMBER: 2
fun case_2(value_1: Int, value_2: List<IntArray>, value_3: _Class) = when (value_1) { fun case_2(value_1: Int, value_2: List<IntArray>, value_3: Class) = when (value_1) {
!in value_2[0], !in listOf(0, 1, 2, 3, 4), !in value_3.getIntArray(90) -> "" !in value_2[0], !in listOf(0, 1, 2, 3, 4), !in value_3.getIntArray() -> ""
else -> "" else -> ""
} }
@@ -1,6 +1,3 @@
// !WITH_BASIC_TYPES
// !WITH_FUNCTIONS
// !WITH_CLASSES
/* /*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE) * KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -9,6 +6,7 @@
* PLACE: when-expression -> paragraph 7 -> sentence 5 * PLACE: when-expression -> paragraph 7 -> sentence 5
* NUMBER: 1 * NUMBER: 1
* DESCRIPTION: 'When' with enumeration of the different variants of expressions in 'when condition'. * DESCRIPTION: 'When' with enumeration of the different variants of expressions in 'when condition'.
* HELPERS: typesProvider, classes, functions
*/ */
// TESTCASE NUMBER: 1 // TESTCASE NUMBER: 1
@@ -28,7 +26,7 @@ fun case_2(value_1: Number, value_2: Int) {
when (value_1) { when (value_1) {
-.09 % 10L -> {} -.09 % 10L -> {}
value_2 / -5 -> {} value_2 / -5 -> {}
getByte(99) - 11 + 90 -> {} getByte() - 11 + 90 -> {}
} }
} }
@@ -38,7 +36,7 @@ fun case_3(value_1: Boolean, value_2: Boolean, value_3: Long) {
value_2 -> {} value_2 -> {}
!value_2 -> {} !value_2 -> {}
getBoolean() && value_2 -> {} getBoolean() && value_2 -> {}
getChar(10) != 'a' -> {} getChar() != 'a' -> {}
getList() === getAny() -> {} getList() === getAny() -> {}
value_3 <= 11 -> {} value_3 <= 11 -> {}
} }
@@ -113,8 +111,8 @@ fun case_9(value_1: Any) {
// TESTCASE NUMBER: 10 // TESTCASE NUMBER: 10
fun case_10(value_1: Collection<Int>, value_2: Collection<Int>, value_3: Collection<Int>?) { fun case_10(value_1: Collection<Int>, value_2: Collection<Int>, value_3: Collection<Int>?) {
when (value_1) { when (value_1) {
value_2 as MutableList<Int> -> {} value_2 as List<Int> -> {}
value_2 <!USELESS_CAST!>as? MutableList<Int><!> -> {} value_2 <!USELESS_CAST!>as? List<Int><!> -> {}
value_3 <!UNCHECKED_CAST!>as? MutableMap<Int, Int><!> -> {} value_3 <!UNCHECKED_CAST!>as? MutableMap<Int, Int><!> -> {}
(value_2 <!UNCHECKED_CAST!>as? Map<Int, Int><!>) as MutableMap<Int, Int> -> {} (value_2 <!UNCHECKED_CAST!>as? Map<Int, Int><!>) as MutableMap<Int, Int> -> {}
} }
@@ -153,11 +151,11 @@ fun case_13(value_1: Int, value_2: List<Int>, value_3: List<List<List<List<Int>>
} }
// TESTCASE NUMBER: 14 // TESTCASE NUMBER: 14
fun case_14(value_1: Any, value_2: _Class, value_3: _Class?, value_4: Int) { fun case_14(value_1: Any, value_2: Class, value_3: Class?, value_4: Int) {
fun __fun_1(): () -> Any { return fun() { } } fun __fun_1(): () -> Any { return fun() { } }
when (value_1) { when (value_1) {
_funWithoutArgs() -> {} funWithoutArgs() -> {}
__fun_1()() -> {} __fun_1()() -> {}
value_2.fun_2(value_4) -> {} value_2.fun_2(value_4) -> {}
value_3?.fun_2(value_4) -> {} value_3?.fun_2(value_4) -> {}
@@ -166,7 +164,7 @@ fun case_14(value_1: Any, value_2: _Class, value_3: _Class?, value_4: Int) {
} }
// TESTCASE NUMBER: 15 // TESTCASE NUMBER: 15
fun case_15(value_1: Int, value_2: _Class, value_3: _Class?) { fun case_15(value_1: Int, value_2: Class, value_3: Class?) {
when (value_1) { when (value_1) {
value_2.prop_1 -> {} value_2.prop_1 -> {}
value_3?.prop_2 -> {} value_3?.prop_2 -> {}
@@ -1,6 +1,3 @@
// !WITH_BASIC_TYPES
// !WITH_CLASSES
// !WITH_FUNCTIONS
/* /*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE) * KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -9,6 +6,7 @@
* PLACE: when-expression -> paragraph 7 -> sentence 5 * PLACE: when-expression -> paragraph 7 -> sentence 5
* NUMBER: 2 * NUMBER: 2
* DESCRIPTION: 'When' with different variants of the arithmetic expressions (additive expression and multiplicative expression) in 'when condition'. * DESCRIPTION: 'When' with different variants of the arithmetic expressions (additive expression and multiplicative expression) in 'when condition'.
* HELPERS: typesProvider, classes, functions
*/ */
// TESTCASE NUMBER: 1 // TESTCASE NUMBER: 1
@@ -22,14 +20,14 @@ fun case_1(value_1: Any?) {
// TESTCASE NUMBER: 2 // TESTCASE NUMBER: 2
fun case_2(value_1: Number, value_2: Int) { fun case_2(value_1: Number, value_2: Int) {
when (value_1) { when (value_1) {
-.09 % 10L, value_2 / -5, getByte(99) - 11 + 90 -> {} -.09 % 10L, value_2 / -5, getByte() - 11 + 90 -> {}
} }
} }
// TESTCASE NUMBER: 3 // TESTCASE NUMBER: 3
fun case_3(value_1: Boolean, value_2: Boolean, value_3: Long) { fun case_3(value_1: Boolean, value_2: Boolean, value_3: Long) {
when (value_1) { when (value_1) {
value_2, !value_2, getBoolean() && value_2, getChar(10) != 'a' -> {} value_2, !value_2, getBoolean() && value_2, getChar() != 'a' -> {}
getList() === getAny(), value_3 <= 11 -> {} getList() === getAny(), value_3 <= 11 -> {}
} }
} }
@@ -90,7 +88,7 @@ fun case_9(value_1: Any) {
// TESTCASE NUMBER: 10 // TESTCASE NUMBER: 10
fun case_10(value_1: Collection<Int>, value_2: Collection<Int>, value_3: Collection<Int>?) { fun case_10(value_1: Collection<Int>, value_2: Collection<Int>, value_3: Collection<Int>?) {
when (value_1) { when (value_1) {
value_2 as MutableList<Int>, value_2 <!USELESS_CAST!>as? MutableList<Int><!> -> {} value_2 as List<Int>, value_2 <!USELESS_CAST!>as? List<Int><!> -> {}
value_3 <!UNCHECKED_CAST!>as? MutableMap<Int, Int><!>, (value_2 <!UNCHECKED_CAST!>as? Map<Int, Int><!>) as MutableMap<Int, Int> -> {} value_3 <!UNCHECKED_CAST!>as? MutableMap<Int, Int><!>, (value_2 <!UNCHECKED_CAST!>as? Map<Int, Int><!>) as MutableMap<Int, Int> -> {}
} }
} }
@@ -123,17 +121,17 @@ fun case_13(value_1: Int, value_2: List<Int>, value_3: List<List<List<List<Int>>
} }
// TESTCASE NUMBER: 14 // TESTCASE NUMBER: 14
fun case_14(value_1: Any, value_2: _Class, value_3: _Class?, value_4: Int) { fun case_14(value_1: Any, value_2: Class, value_3: Class?, value_4: Int) {
fun __fun_1(): () -> Unit { return fun() { } } fun __fun_1(): () -> Unit { return fun() { } }
when (value_1) { when (value_1) {
_funWithoutArgs(), __fun_1()(), value_2.fun_2(value_4) -> {} funWithoutArgs(), __fun_1()(), value_2.fun_2(value_4) -> {}
value_3?.fun_2(value_4), value_3!!.fun_2(value_4) -> {} value_3?.fun_2(value_4), value_3!!.fun_2(value_4) -> {}
} }
} }
// TESTCASE NUMBER: 15 // TESTCASE NUMBER: 15
fun case_15(value_1: Int, value_2: _Class, value_3: _Class?) { fun case_15(value_1: Int, value_2: Class, value_3: Class?) {
when (value_1) { when (value_1) {
value_2.prop_1, value_3?.prop_2 -> {} value_2.prop_1, value_3?.prop_2 -> {}
value_2::prop_1.get(), value_3!!::prop_3.get() -> {} value_2::prop_1.get(), value_3!!::prop_3.get() -> {}
@@ -256,7 +254,7 @@ fun case_25(value_1: Boolean) = when (value_1) {
* UNEXPECTED BEHAVIOUR * UNEXPECTED BEHAVIOUR
* ISSUES: KT-26045 * ISSUES: KT-26045
*/ */
fun case_26(value_1: Int?, value_2: _Class, value_3: _Class?) { fun case_26(value_1: Int?, value_2: Class, value_3: Class?) {
when (value_1) { when (value_1) {
value_2.prop_1, <!DUPLICATE_LABEL_IN_WHEN!>value_3?.prop_1<!> -> {} value_2.prop_1, <!DUPLICATE_LABEL_IN_WHEN!>value_3?.prop_1<!> -> {}
10 -> {} 10 -> {}
@@ -1,5 +1,4 @@
// !CHECK_TYPE // !CHECK_TYPE
// !WITH_CLASSES
/* /*
* KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE) * KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE)
@@ -8,24 +7,25 @@
* PLACE: when-expression -> paragraph 9 -> sentence 1 * PLACE: when-expression -> paragraph 9 -> sentence 1
* NUMBER: 1 * NUMBER: 1
* DESCRIPTION: 'When' least upper bound of the types check (when exhaustive via else branch). * DESCRIPTION: 'When' least upper bound of the types check (when exhaustive via else branch).
* HELPERS: classes
*/ */
// TESTCASE NUMBER: 1 // TESTCASE NUMBER: 1
fun case_1(value_1: Int): String { fun case_1(value_1: Int): String {
val whenValue = when { val whenValue = when {
value_1 == 0 -> _ClassLevel2() value_1 == 0 -> ClassLevel2()
value_1 > 0 && value_1 <= 10 -> _ClassLevel3() value_1 > 0 && value_1 <= 10 -> ClassLevel3()
value_1 > 10 && value_1 <= 100 -> _ClassLevel4() value_1 > 10 && value_1 <= 100 -> ClassLevel4()
else -> _ClassLevel5() else -> ClassLevel5()
} }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel1>() } whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel1>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel3>() } whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel3>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel4>() } whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel4>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel5>() } whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel5>() }
checkSubtype<_ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>) checkSubtype<ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<_ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>) checkSubtype<ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<_ClassLevel5>(<!TYPE_MISMATCH!>whenValue<!>) checkSubtype<ClassLevel5>(<!TYPE_MISMATCH!>whenValue<!>)
return "" return ""
} }
@@ -33,19 +33,19 @@ fun case_1(value_1: Int): String {
// TESTCASE NUMBER: 2 // TESTCASE NUMBER: 2
fun case_2(value_1: Int): String { fun case_2(value_1: Int): String {
val whenValue = when (value_1) { val whenValue = when (value_1) {
0 -> _ClassLevel2() 0 -> ClassLevel2()
1 -> _ClassLevel3() 1 -> ClassLevel3()
2 -> _ClassLevel4() 2 -> ClassLevel4()
else -> _ClassLevel5() else -> ClassLevel5()
} }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel1>() } whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel1>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel3>() } whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel3>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel4>() } whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel4>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel5>() } whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel5>() }
checkSubtype<_ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>) checkSubtype<ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<_ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>) checkSubtype<ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<_ClassLevel5>(<!TYPE_MISMATCH!>whenValue<!>) checkSubtype<ClassLevel5>(<!TYPE_MISMATCH!>whenValue<!>)
return "" return ""
} }
@@ -1,6 +1,4 @@
// !CHECK_TYPE // !CHECK_TYPE
// !WITH_ENUM_CLASSES
// !WITH_CLASSES
/* /*
* KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE) * KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE)
@@ -9,58 +7,59 @@
* PLACE: when-expression -> paragraph 9 -> sentence 1 * PLACE: when-expression -> paragraph 9 -> sentence 1
* NUMBER: 2 * NUMBER: 2
* DESCRIPTION: 'When' least upper bound of the types check (when exhaustive via enum). * DESCRIPTION: 'When' least upper bound of the types check (when exhaustive via enum).
* HELPERS: classes, enumClasses
*/ */
// TESTCASE NUMBER: 1 // TESTCASE NUMBER: 1
fun case_1(value_1: _EnumClass): String { fun case_1(value_1: EnumClass): String {
val whenValue = when (value_1) { val whenValue = when (value_1) {
_EnumClass.EAST -> _ClassLevel2() EnumClass.EAST -> ClassLevel2()
_EnumClass.NORTH -> _ClassLevel3() EnumClass.NORTH -> ClassLevel3()
_EnumClass.SOUTH -> _ClassLevel4() EnumClass.SOUTH -> ClassLevel4()
_EnumClass.WEST -> _ClassLevel5() EnumClass.WEST -> ClassLevel5()
} }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel1>() } whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel1>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel3>() } whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel3>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel4>() } whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel4>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel5>() } whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel5>() }
checkSubtype<_ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>) checkSubtype<ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<_ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>) checkSubtype<ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<_ClassLevel5>(<!TYPE_MISMATCH!>whenValue<!>) checkSubtype<ClassLevel5>(<!TYPE_MISMATCH!>whenValue<!>)
return "" return ""
} }
// TESTCASE NUMBER: 2 // TESTCASE NUMBER: 2
fun case_2(value_1: _EnumClass?): String { fun case_2(value_1: EnumClass?): String {
val whenValue = when (value_1) { val whenValue = when (value_1) {
_EnumClass.EAST -> _ClassLevel2() EnumClass.EAST -> ClassLevel2()
_EnumClass.NORTH -> _ClassLevel3() EnumClass.NORTH -> ClassLevel3()
_EnumClass.SOUTH -> _ClassLevel4() EnumClass.SOUTH -> ClassLevel4()
_EnumClass.WEST -> _ClassLevel5() EnumClass.WEST -> ClassLevel5()
null -> _ClassLevel6() null -> ClassLevel6()
} }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel1>() } whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel1>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel3>() } whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel3>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel4>() } whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel4>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel5>() } whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel5>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel6>() } whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel6>() }
checkSubtype<_ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>) checkSubtype<ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<_ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>) checkSubtype<ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<_ClassLevel5>(<!TYPE_MISMATCH!>whenValue<!>) checkSubtype<ClassLevel5>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<_ClassLevel6>(<!TYPE_MISMATCH!>whenValue<!>) checkSubtype<ClassLevel6>(<!TYPE_MISMATCH!>whenValue<!>)
return "" return ""
} }
// TESTCASE NUMBER: 3 // TESTCASE NUMBER: 3
fun case_3(value_1: _EnumClass): String { fun case_3(value_1: EnumClass): String {
val whenValue = when (value_1) { val whenValue = when (value_1) {
_EnumClass.EAST -> <!IMPLICIT_CAST_TO_ANY!>10<!> EnumClass.EAST -> <!IMPLICIT_CAST_TO_ANY!>10<!>
_EnumClass.NORTH -> <!IMPLICIT_CAST_TO_ANY!>""<!> EnumClass.NORTH -> <!IMPLICIT_CAST_TO_ANY!>""<!>
_EnumClass.SOUTH -> {<!IMPLICIT_CAST_TO_ANY!>{}<!>} EnumClass.SOUTH -> {<!IMPLICIT_CAST_TO_ANY!>{}<!>}
_EnumClass.WEST -> <!IMPLICIT_CAST_TO_ANY!>object<!> {} EnumClass.WEST -> <!IMPLICIT_CAST_TO_ANY!>object<!> {}
} }
whenValue checkType { <!TYPE_MISMATCH!>_<!><Int>() } whenValue checkType { <!TYPE_MISMATCH!>_<!><Int>() }
@@ -74,12 +73,12 @@ fun case_3(value_1: _EnumClass): String {
} }
// TESTCASE NUMBER: 4 // TESTCASE NUMBER: 4
fun case_4(value_1: _EnumClass?): String { fun case_4(value_1: EnumClass?): String {
val whenValue = when (value_1) { val whenValue = when (value_1) {
_EnumClass.EAST -> <!IMPLICIT_CAST_TO_ANY!>10<!> EnumClass.EAST -> <!IMPLICIT_CAST_TO_ANY!>10<!>
_EnumClass.NORTH -> <!IMPLICIT_CAST_TO_ANY!>""<!> EnumClass.NORTH -> <!IMPLICIT_CAST_TO_ANY!>""<!>
_EnumClass.SOUTH -> {<!IMPLICIT_CAST_TO_ANY!>{}<!>} EnumClass.SOUTH -> {<!IMPLICIT_CAST_TO_ANY!>{}<!>}
_EnumClass.WEST -> <!IMPLICIT_CAST_TO_ANY!>object<!> {} EnumClass.WEST -> <!IMPLICIT_CAST_TO_ANY!>object<!> {}
null -> <!IMPLICIT_CAST_TO_ANY!>false<!> null -> <!IMPLICIT_CAST_TO_ANY!>false<!>
} }
@@ -1,5 +1,4 @@
// !CHECK_TYPE // !CHECK_TYPE
// !WITH_CLASSES
/* /*
* KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE) * KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE)
@@ -8,20 +7,21 @@
* PLACE: when-expression -> paragraph 9 -> sentence 1 * PLACE: when-expression -> paragraph 9 -> sentence 1
* NUMBER: 3 * NUMBER: 3
* DESCRIPTION: 'When' least upper bound of the types check (when exhaustive via boolean bound value). * DESCRIPTION: 'When' least upper bound of the types check (when exhaustive via boolean bound value).
* HELPERS: classes
*/ */
// TESTCASE NUMBER: 1 // TESTCASE NUMBER: 1
fun case_1(value_1: Boolean): String { fun case_1(value_1: Boolean): String {
val whenValue = when (value_1) { val whenValue = when (value_1) {
true -> _ClassLevel2() true -> ClassLevel2()
false -> _ClassLevel3() false -> ClassLevel3()
} }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel4>() } whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel4>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel3>() } whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel3>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel1>() } whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel1>() }
checkSubtype<_ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>) checkSubtype<ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<_ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>) checkSubtype<ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>)
return "" return ""
} }
@@ -29,16 +29,16 @@ fun case_1(value_1: Boolean): String {
// TESTCASE NUMBER: 2 // TESTCASE NUMBER: 2
fun case_2(value_1: Boolean?): String { fun case_2(value_1: Boolean?): String {
val whenValue = when (value_1) { val whenValue = when (value_1) {
true -> _ClassLevel2() true -> ClassLevel2()
false -> _ClassLevel3() false -> ClassLevel3()
null -> _ClassLevel4() null -> ClassLevel4()
} }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel4>() } whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel4>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel3>() } whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel3>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel1>() } whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel1>() }
checkSubtype<_ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>) checkSubtype<ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<_ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>) checkSubtype<ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>)
return "" return ""
} }
@@ -1,6 +1,4 @@
// !CHECK_TYPE // !CHECK_TYPE
// !WITH_SEALED_CLASSES
// !WITH_CLASSES
/* /*
* KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE) * KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE)
@@ -9,51 +7,52 @@
* PLACE: when-expression -> paragraph 9 -> sentence 1 * PLACE: when-expression -> paragraph 9 -> sentence 1
* NUMBER: 4 * NUMBER: 4
* DESCRIPTION: 'When' least upper bound of the types check (when exhaustive via sealed class). * DESCRIPTION: 'When' least upper bound of the types check (when exhaustive via sealed class).
* HELPERS: classes, sealedClasses
*/ */
// TESTCASE NUMBER: 1 // TESTCASE NUMBER: 1
fun case_1(value_1: _SealedClass): String { fun case_1(value_1: SealedClass): String {
val whenValue = when (value_1) { val whenValue = when (value_1) {
is _SealedChild1 -> _ClassLevel2() is SealedChild1 -> ClassLevel2()
is _SealedChild2 -> _ClassLevel3() is SealedChild2 -> ClassLevel3()
is _SealedChild3 -> _ClassLevel4() is SealedChild3 -> ClassLevel4()
} }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel4>() } whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel4>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel3>() } whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel3>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel1>() } whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel1>() }
checkSubtype<_ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>) checkSubtype<ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<_ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>) checkSubtype<ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>)
return "" return ""
} }
// TESTCASE NUMBER: 2 // TESTCASE NUMBER: 2
fun case_2(value_1: _SealedClass?): String { fun case_2(value_1: SealedClass?): String {
val whenValue = when (value_1) { val whenValue = when (value_1) {
is _SealedChild1 -> _ClassLevel2() is SealedChild1 -> ClassLevel2()
is _SealedChild2 -> _ClassLevel3() is SealedChild2 -> ClassLevel3()
is _SealedChild3 -> _ClassLevel4() is SealedChild3 -> ClassLevel4()
null -> _ClassLevel5() null -> ClassLevel5()
} }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel5>() } whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel5>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel4>() } whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel4>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel3>() } whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel3>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel1>() } whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel1>() }
checkSubtype<_ClassLevel5>(<!TYPE_MISMATCH!>whenValue<!>) checkSubtype<ClassLevel5>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<_ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>) checkSubtype<ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<_ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>) checkSubtype<ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>)
return "" return ""
} }
// TESTCASE NUMBER: 3 // TESTCASE NUMBER: 3
fun case_3(value_1: _SealedClass): String { fun case_3(value_1: SealedClass): String {
val whenValue = when (value_1) { val whenValue = when (value_1) {
is _SealedChild1 -> <!IMPLICIT_CAST_TO_ANY!>10<!> is SealedChild1 -> <!IMPLICIT_CAST_TO_ANY!>10<!>
is _SealedChild2 -> <!IMPLICIT_CAST_TO_ANY!>""<!> is SealedChild2 -> <!IMPLICIT_CAST_TO_ANY!>""<!>
is _SealedChild3 -> <!IMPLICIT_CAST_TO_ANY!>object<!> {} is SealedChild3 -> <!IMPLICIT_CAST_TO_ANY!>object<!> {}
} }
whenValue checkType { <!TYPE_MISMATCH!>_<!><Int>() } whenValue checkType { <!TYPE_MISMATCH!>_<!><Int>() }
@@ -65,11 +64,11 @@ fun case_3(value_1: _SealedClass): String {
} }
// TESTCASE NUMBER: 4 // TESTCASE NUMBER: 4
fun case_4(value_1: _SealedClass?): String { fun case_4(value_1: SealedClass?): String {
val whenValue = when (value_1) { val whenValue = when (value_1) {
is _SealedChild1 -> <!IMPLICIT_CAST_TO_ANY!>10<!> is SealedChild1 -> <!IMPLICIT_CAST_TO_ANY!>10<!>
is _SealedChild2 -> <!IMPLICIT_CAST_TO_ANY!>""<!> is SealedChild2 -> <!IMPLICIT_CAST_TO_ANY!>""<!>
is _SealedChild3 -> <!IMPLICIT_CAST_TO_ANY!>object<!> {} is SealedChild3 -> <!IMPLICIT_CAST_TO_ANY!>object<!> {}
null -> {<!IMPLICIT_CAST_TO_ANY!>{}<!>} null -> {<!IMPLICIT_CAST_TO_ANY!>{}<!>}
} }
@@ -84,48 +83,48 @@ fun case_4(value_1: _SealedClass?): String {
} }
// TESTCASE NUMBER: 5 // TESTCASE NUMBER: 5
fun case_5(value_1: _SealedClassWithObjects): String { fun case_5(value_1: SealedClassWithObjects): String {
val whenValue = when (value_1) { val whenValue = when (value_1) {
_SealedWithObjectsChild1 -> _ClassLevel2() SealedWithObjectsChild1 -> ClassLevel2()
_SealedWithObjectsChild2 -> _ClassLevel3() SealedWithObjectsChild2 -> ClassLevel3()
_SealedWithObjectsChild3 -> _ClassLevel4() SealedWithObjectsChild3 -> ClassLevel4()
} }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel4>() } whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel4>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel3>() } whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel3>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel1>() } whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel1>() }
checkSubtype<_ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>) checkSubtype<ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<_ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>) checkSubtype<ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>)
return "" return ""
} }
// TESTCASE NUMBER: 6 // TESTCASE NUMBER: 6
fun case_6(value_1: _SealedClassWithObjects?): String { fun case_6(value_1: SealedClassWithObjects?): String {
val whenValue = when (value_1) { val whenValue = when (value_1) {
_SealedWithObjectsChild1 -> _ClassLevel2() SealedWithObjectsChild1 -> ClassLevel2()
_SealedWithObjectsChild2 -> _ClassLevel3() SealedWithObjectsChild2 -> ClassLevel3()
_SealedWithObjectsChild3 -> _ClassLevel4() SealedWithObjectsChild3 -> ClassLevel4()
null -> _ClassLevel5() null -> ClassLevel5()
} }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel5>() } whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel5>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel4>() } whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel4>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel3>() } whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel3>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel1>() } whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel1>() }
checkSubtype<_ClassLevel5>(<!TYPE_MISMATCH!>whenValue<!>) checkSubtype<ClassLevel5>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<_ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>) checkSubtype<ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<_ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>) checkSubtype<ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>)
return "" return ""
} }
// TESTCASE NUMBER: 7 // TESTCASE NUMBER: 7
fun case_7(value_1: _SealedClassWithObjects): String { fun case_7(value_1: SealedClassWithObjects): String {
val whenValue = when (value_1) { val whenValue = when (value_1) {
_SealedWithObjectsChild1 -> <!IMPLICIT_CAST_TO_ANY!>10<!> SealedWithObjectsChild1 -> <!IMPLICIT_CAST_TO_ANY!>10<!>
_SealedWithObjectsChild2 -> <!IMPLICIT_CAST_TO_ANY!>""<!> SealedWithObjectsChild2 -> <!IMPLICIT_CAST_TO_ANY!>""<!>
_SealedWithObjectsChild3 -> <!IMPLICIT_CAST_TO_ANY!>object<!> {} SealedWithObjectsChild3 -> <!IMPLICIT_CAST_TO_ANY!>object<!> {}
} }
whenValue checkType { <!TYPE_MISMATCH!>_<!><Int>() } whenValue checkType { <!TYPE_MISMATCH!>_<!><Int>() }
@@ -137,11 +136,11 @@ fun case_7(value_1: _SealedClassWithObjects): String {
} }
// TESTCASE NUMBER: 8 // TESTCASE NUMBER: 8
fun case_8(value_1: _SealedClassWithObjects?): String { fun case_8(value_1: SealedClassWithObjects?): String {
val whenValue = when (value_1) { val whenValue = when (value_1) {
_SealedWithObjectsChild1 -> <!IMPLICIT_CAST_TO_ANY!>10<!> SealedWithObjectsChild1 -> <!IMPLICIT_CAST_TO_ANY!>10<!>
_SealedWithObjectsChild2 -> <!IMPLICIT_CAST_TO_ANY!>""<!> SealedWithObjectsChild2 -> <!IMPLICIT_CAST_TO_ANY!>""<!>
_SealedWithObjectsChild3 -> <!IMPLICIT_CAST_TO_ANY!>object<!> {} SealedWithObjectsChild3 -> <!IMPLICIT_CAST_TO_ANY!>object<!> {}
null -> {<!IMPLICIT_CAST_TO_ANY!>{}<!>} null -> {<!IMPLICIT_CAST_TO_ANY!>{}<!>}
} }
@@ -156,19 +155,19 @@ fun case_8(value_1: _SealedClassWithObjects?): String {
} }
// TESTCASE NUMBER: 9 // TESTCASE NUMBER: 9
fun case_9(value_1: _SealedClassWithObjects?): String { fun case_9(value_1: SealedClassWithObjects?): String {
val whenValue = when (value_1) { val whenValue = when (value_1) {
is _SealedClassWithObjects -> _ClassLevel2() is SealedClassWithObjects -> ClassLevel2()
else -> _ClassLevel3() else -> ClassLevel3()
} }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel5>() } whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel5>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel4>() } whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel4>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel3>() } whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel3>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel1>() } whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel1>() }
checkSubtype<_ClassLevel5>(<!TYPE_MISMATCH!>whenValue<!>) checkSubtype<ClassLevel5>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<_ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>) checkSubtype<ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<_ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>) checkSubtype<ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>)
return "" return ""
} }
@@ -1,5 +1,4 @@
// !CHECK_TYPE // !CHECK_TYPE
// !WITH_CLASSES
/* /*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE) * KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -8,19 +7,20 @@
* PLACE: when-expression -> paragraph 9 -> sentence 1 * PLACE: when-expression -> paragraph 9 -> sentence 1
* NUMBER: 1 * NUMBER: 1
* DESCRIPTION: 'When' least upper bound of the types check (when exhaustive via else branch). * DESCRIPTION: 'When' least upper bound of the types check (when exhaustive via else branch).
* HELPERS: classes
*/ */
// TESTCASE NUMBER: 1 // TESTCASE NUMBER: 1
fun case_1(value_1: Int): String { fun case_1(value_1: Int): String {
val whenValue = when { val whenValue = when {
value_1 == 0 -> _ClassLevel2() value_1 == 0 -> ClassLevel2()
value_1 > 0 && value_1 <= 10 -> _ClassLevel3() value_1 > 0 && value_1 <= 10 -> ClassLevel3()
value_1 > 10 && value_1 <= 100 -> _ClassLevel4() value_1 > 10 && value_1 <= 100 -> ClassLevel4()
else -> _ClassLevel5() else -> ClassLevel5()
} }
whenValue checkType { _<_ClassLevel2>() } whenValue checkType { _<ClassLevel2>() }
checkSubtype<_ClassLevel1>(whenValue) checkSubtype<ClassLevel1>(whenValue)
return "" return ""
} }
@@ -28,14 +28,14 @@ fun case_1(value_1: Int): String {
// TESTCASE NUMBER: 2 // TESTCASE NUMBER: 2
fun case_2(value_1: Int): String { fun case_2(value_1: Int): String {
val whenValue = when (value_1) { val whenValue = when (value_1) {
0 -> _ClassLevel2() 0 -> ClassLevel2()
1 -> _ClassLevel3() 1 -> ClassLevel3()
2 -> _ClassLevel4() 2 -> ClassLevel4()
else -> _ClassLevel5() else -> ClassLevel5()
} }
whenValue checkType { _<_ClassLevel2>() } whenValue checkType { _<ClassLevel2>() }
checkSubtype<_ClassLevel1>(whenValue) checkSubtype<ClassLevel1>(whenValue)
return "" return ""
} }
@@ -1,6 +1,4 @@
// !CHECK_TYPE // !CHECK_TYPE
// !WITH_CLASSES
// !WITH_ENUM_CLASSES
/* /*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE) * KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -9,46 +7,47 @@
* PLACE: when-expression -> paragraph 9 -> sentence 1 * PLACE: when-expression -> paragraph 9 -> sentence 1
* NUMBER: 2 * NUMBER: 2
* DESCRIPTION: 'When' least upper bound of the types check (when exhaustive via enum). * DESCRIPTION: 'When' least upper bound of the types check (when exhaustive via enum).
* HELPERS: classes, enumClasses
*/ */
// TESTCASE NUMBER: 1 // TESTCASE NUMBER: 1
fun case_1(value_1: _EnumClass): String { fun case_1(value_1: EnumClass): String {
val whenValue = when (value_1) { val whenValue = when (value_1) {
_EnumClass.EAST -> _ClassLevel2() EnumClass.EAST -> ClassLevel2()
_EnumClass.NORTH -> _ClassLevel3() EnumClass.NORTH -> ClassLevel3()
_EnumClass.SOUTH -> _ClassLevel4() EnumClass.SOUTH -> ClassLevel4()
_EnumClass.WEST -> _ClassLevel5() EnumClass.WEST -> ClassLevel5()
} }
whenValue checkType { _<_ClassLevel2>() } whenValue checkType { _<ClassLevel2>() }
checkSubtype<_ClassLevel1>(whenValue) checkSubtype<ClassLevel1>(whenValue)
return "" return ""
} }
// TESTCASE NUMBER: 2 // TESTCASE NUMBER: 2
fun case_2(value_1: _EnumClass?): String { fun case_2(value_1: EnumClass?): String {
val whenValue = when (value_1) { val whenValue = when (value_1) {
_EnumClass.EAST -> _ClassLevel2() EnumClass.EAST -> ClassLevel2()
_EnumClass.NORTH -> _ClassLevel3() EnumClass.NORTH -> ClassLevel3()
_EnumClass.SOUTH -> _ClassLevel4() EnumClass.SOUTH -> ClassLevel4()
_EnumClass.WEST -> _ClassLevel5() EnumClass.WEST -> ClassLevel5()
null -> _ClassLevel6() null -> ClassLevel6()
} }
whenValue checkType { _<_ClassLevel2>() } whenValue checkType { _<ClassLevel2>() }
checkSubtype<_ClassLevel1>(whenValue) checkSubtype<ClassLevel1>(whenValue)
return "" return ""
} }
// TESTCASE NUMBER: 3 // TESTCASE NUMBER: 3
fun case_3(value_1: _EnumClass): String { fun case_3(value_1: EnumClass): String {
val whenValue = when (value_1) { val whenValue = when (value_1) {
_EnumClass.EAST -> <!IMPLICIT_CAST_TO_ANY!>10<!> EnumClass.EAST -> <!IMPLICIT_CAST_TO_ANY!>10<!>
_EnumClass.NORTH -> <!IMPLICIT_CAST_TO_ANY!>""<!> EnumClass.NORTH -> <!IMPLICIT_CAST_TO_ANY!>""<!>
_EnumClass.SOUTH -> {<!IMPLICIT_CAST_TO_ANY!>{}<!>} EnumClass.SOUTH -> {<!IMPLICIT_CAST_TO_ANY!>{}<!>}
_EnumClass.WEST -> <!IMPLICIT_CAST_TO_ANY!>object<!> {} EnumClass.WEST -> <!IMPLICIT_CAST_TO_ANY!>object<!> {}
} }
whenValue checkType { _<Any>() } whenValue checkType { _<Any>() }
@@ -58,12 +57,12 @@ fun case_3(value_1: _EnumClass): String {
} }
// TESTCASE NUMBER: 4 // TESTCASE NUMBER: 4
fun case_4(value_1: _EnumClass?): String { fun case_4(value_1: EnumClass?): String {
val whenValue = when (value_1) { val whenValue = when (value_1) {
_EnumClass.EAST -> <!IMPLICIT_CAST_TO_ANY!>10<!> EnumClass.EAST -> <!IMPLICIT_CAST_TO_ANY!>10<!>
_EnumClass.NORTH -> <!IMPLICIT_CAST_TO_ANY!>""<!> EnumClass.NORTH -> <!IMPLICIT_CAST_TO_ANY!>""<!>
_EnumClass.SOUTH -> {<!IMPLICIT_CAST_TO_ANY!>{}<!>} EnumClass.SOUTH -> {<!IMPLICIT_CAST_TO_ANY!>{}<!>}
_EnumClass.WEST -> <!IMPLICIT_CAST_TO_ANY!>object<!> {} EnumClass.WEST -> <!IMPLICIT_CAST_TO_ANY!>object<!> {}
null -> <!IMPLICIT_CAST_TO_ANY!>false<!> null -> <!IMPLICIT_CAST_TO_ANY!>false<!>
} }
@@ -1,5 +1,4 @@
// !CHECK_TYPE // !CHECK_TYPE
// !WITH_CLASSES
/* /*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE) * KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -8,17 +7,18 @@
* PLACE: when-expression -> paragraph 9 -> sentence 1 * PLACE: when-expression -> paragraph 9 -> sentence 1
* NUMBER: 3 * NUMBER: 3
* DESCRIPTION: 'When' least upper bound of the types check (when exhaustive via boolean bound value). * DESCRIPTION: 'When' least upper bound of the types check (when exhaustive via boolean bound value).
* HELPERS: classes
*/ */
// TESTCASE NUMBER: 1 // TESTCASE NUMBER: 1
fun case_1(value_1: Boolean): String { fun case_1(value_1: Boolean): String {
val whenValue = when (value_1) { val whenValue = when (value_1) {
true -> _ClassLevel2() true -> ClassLevel2()
false -> _ClassLevel3() false -> ClassLevel3()
} }
whenValue checkType { _<_ClassLevel2>() } whenValue checkType { _<ClassLevel2>() }
checkSubtype<_ClassLevel1>(whenValue) checkSubtype<ClassLevel1>(whenValue)
return "" return ""
} }
@@ -26,13 +26,13 @@ fun case_1(value_1: Boolean): String {
// TESTCASE NUMBER: 2 // TESTCASE NUMBER: 2
fun case_2(value_1: Boolean?): String { fun case_2(value_1: Boolean?): String {
val whenValue = when (value_1) { val whenValue = when (value_1) {
true -> _ClassLevel2() true -> ClassLevel2()
false -> _ClassLevel3() false -> ClassLevel3()
null -> _ClassLevel4() null -> ClassLevel4()
} }
whenValue checkType { _<_ClassLevel2>() } whenValue checkType { _<ClassLevel2>() }
checkSubtype<_ClassLevel1>(whenValue) checkSubtype<ClassLevel1>(whenValue)
return "" return ""
} }
@@ -1,6 +1,4 @@
// !CHECK_TYPE // !CHECK_TYPE
// !WITH_SEALED_CLASSES
// !WITH_CLASSES
/* /*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE) * KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -9,43 +7,44 @@
* PLACE: when-expression -> paragraph 9 -> sentence 1 * PLACE: when-expression -> paragraph 9 -> sentence 1
* NUMBER: 4 * NUMBER: 4
* DESCRIPTION: 'When' least upper bound of the types check (when exhaustive via sealed class). * DESCRIPTION: 'When' least upper bound of the types check (when exhaustive via sealed class).
* HELPERS: classes, sealedClasses
*/ */
// TESTCASE NUMBER: 1 // TESTCASE NUMBER: 1
fun case_1(value_1: _SealedClass): String { fun case_1(value_1: SealedClass): String {
val whenValue = when (value_1) { val whenValue = when (value_1) {
is _SealedChild1 -> _ClassLevel2() is SealedChild1 -> ClassLevel2()
is _SealedChild2 -> _ClassLevel3() is SealedChild2 -> ClassLevel3()
is _SealedChild3 -> _ClassLevel4() is SealedChild3 -> ClassLevel4()
} }
whenValue checkType { _<_ClassLevel2>() } whenValue checkType { _<ClassLevel2>() }
checkSubtype<_ClassLevel1>(whenValue) checkSubtype<ClassLevel1>(whenValue)
return "" return ""
} }
// TESTCASE NUMBER: 2 // TESTCASE NUMBER: 2
fun case_2(value_1: _SealedClass?): String { fun case_2(value_1: SealedClass?): String {
val whenValue = when (value_1) { val whenValue = when (value_1) {
is _SealedChild1 -> _ClassLevel2() is SealedChild1 -> ClassLevel2()
is _SealedChild2 -> _ClassLevel3() is SealedChild2 -> ClassLevel3()
is _SealedChild3 -> _ClassLevel4() is SealedChild3 -> ClassLevel4()
null -> _ClassLevel5() null -> ClassLevel5()
} }
whenValue checkType { _<_ClassLevel2>() } whenValue checkType { _<ClassLevel2>() }
checkSubtype<_ClassLevel1>(whenValue) checkSubtype<ClassLevel1>(whenValue)
return "" return ""
} }
// TESTCASE NUMBER: 3 // TESTCASE NUMBER: 3
fun case_3(value_1: _SealedClass): String { fun case_3(value_1: SealedClass): String {
val whenValue = when (value_1) { val whenValue = when (value_1) {
is _SealedChild1 -> <!IMPLICIT_CAST_TO_ANY!>10<!> is SealedChild1 -> <!IMPLICIT_CAST_TO_ANY!>10<!>
is _SealedChild2 -> <!IMPLICIT_CAST_TO_ANY!>""<!> is SealedChild2 -> <!IMPLICIT_CAST_TO_ANY!>""<!>
is _SealedChild3 -> <!IMPLICIT_CAST_TO_ANY!>object<!> {} is SealedChild3 -> <!IMPLICIT_CAST_TO_ANY!>object<!> {}
} }
whenValue checkType { _<Any>() } whenValue checkType { _<Any>() }
@@ -55,11 +54,11 @@ fun case_3(value_1: _SealedClass): String {
} }
// TESTCASE NUMBER: 4 // TESTCASE NUMBER: 4
fun case_4(value_1: _SealedClass?): String { fun case_4(value_1: SealedClass?): String {
val whenValue = when (value_1) { val whenValue = when (value_1) {
is _SealedChild1 -> <!IMPLICIT_CAST_TO_ANY!>10<!> is SealedChild1 -> <!IMPLICIT_CAST_TO_ANY!>10<!>
is _SealedChild2 -> <!IMPLICIT_CAST_TO_ANY!>""<!> is SealedChild2 -> <!IMPLICIT_CAST_TO_ANY!>""<!>
is _SealedChild3 -> <!IMPLICIT_CAST_TO_ANY!>object<!> {} is SealedChild3 -> <!IMPLICIT_CAST_TO_ANY!>object<!> {}
null -> {<!IMPLICIT_CAST_TO_ANY!>{}<!>} null -> {<!IMPLICIT_CAST_TO_ANY!>{}<!>}
} }
@@ -70,40 +69,40 @@ fun case_4(value_1: _SealedClass?): String {
} }
// TESTCASE NUMBER: 5 // TESTCASE NUMBER: 5
fun case_5(value_1: _SealedClassWithObjects): String { fun case_5(value_1: SealedClassWithObjects): String {
val whenValue = when (value_1) { val whenValue = when (value_1) {
_SealedWithObjectsChild1 -> _ClassLevel2() SealedWithObjectsChild1 -> ClassLevel2()
_SealedWithObjectsChild2 -> _ClassLevel3() SealedWithObjectsChild2 -> ClassLevel3()
_SealedWithObjectsChild3 -> _ClassLevel4() SealedWithObjectsChild3 -> ClassLevel4()
} }
whenValue checkType { _<_ClassLevel2>() } whenValue checkType { _<ClassLevel2>() }
checkSubtype<_ClassLevel1>(whenValue) checkSubtype<ClassLevel1>(whenValue)
return "" return ""
} }
// TESTCASE NUMBER: 6 // TESTCASE NUMBER: 6
fun case_6(value_1: _SealedClassWithObjects?): String { fun case_6(value_1: SealedClassWithObjects?): String {
val whenValue = when (value_1) { val whenValue = when (value_1) {
_SealedWithObjectsChild1 -> _ClassLevel2() SealedWithObjectsChild1 -> ClassLevel2()
_SealedWithObjectsChild2 -> _ClassLevel3() SealedWithObjectsChild2 -> ClassLevel3()
_SealedWithObjectsChild3 -> _ClassLevel4() SealedWithObjectsChild3 -> ClassLevel4()
null -> _ClassLevel5() null -> ClassLevel5()
} }
whenValue checkType { _<_ClassLevel2>() } whenValue checkType { _<ClassLevel2>() }
checkSubtype<_ClassLevel1>(whenValue) checkSubtype<ClassLevel1>(whenValue)
return "" return ""
} }
// TESTCASE NUMBER: 7 // TESTCASE NUMBER: 7
fun case_7(value_1: _SealedClassWithObjects): String { fun case_7(value_1: SealedClassWithObjects): String {
val whenValue = when (value_1) { val whenValue = when (value_1) {
_SealedWithObjectsChild1 -> <!IMPLICIT_CAST_TO_ANY!>10<!> SealedWithObjectsChild1 -> <!IMPLICIT_CAST_TO_ANY!>10<!>
_SealedWithObjectsChild2 -> <!IMPLICIT_CAST_TO_ANY!>""<!> SealedWithObjectsChild2 -> <!IMPLICIT_CAST_TO_ANY!>""<!>
_SealedWithObjectsChild3 -> <!IMPLICIT_CAST_TO_ANY!>object<!> {} SealedWithObjectsChild3 -> <!IMPLICIT_CAST_TO_ANY!>object<!> {}
} }
whenValue checkType { _<Any>() } whenValue checkType { _<Any>() }
@@ -113,11 +112,11 @@ fun case_7(value_1: _SealedClassWithObjects): String {
} }
// TESTCASE NUMBER: 8 // TESTCASE NUMBER: 8
fun case_8(value_1: _SealedClassWithObjects?): String { fun case_8(value_1: SealedClassWithObjects?): String {
val whenValue = when (value_1) { val whenValue = when (value_1) {
_SealedWithObjectsChild1 -> <!IMPLICIT_CAST_TO_ANY!>10<!> SealedWithObjectsChild1 -> <!IMPLICIT_CAST_TO_ANY!>10<!>
_SealedWithObjectsChild2 -> <!IMPLICIT_CAST_TO_ANY!>""<!> SealedWithObjectsChild2 -> <!IMPLICIT_CAST_TO_ANY!>""<!>
_SealedWithObjectsChild3 -> <!IMPLICIT_CAST_TO_ANY!>object<!> {} SealedWithObjectsChild3 -> <!IMPLICIT_CAST_TO_ANY!>object<!> {}
null -> {<!IMPLICIT_CAST_TO_ANY!>{}<!>} null -> {<!IMPLICIT_CAST_TO_ANY!>{}<!>}
} }
@@ -128,9 +127,9 @@ fun case_8(value_1: _SealedClassWithObjects?): String {
} }
// TESTCASE NUMBER: 9 // TESTCASE NUMBER: 9
fun case_9(value_1: _SealedClassWithObjects): String { fun case_9(value_1: SealedClassWithObjects): String {
val whenValue = when (value_1) { val whenValue = when (value_1) {
<!USELESS_IS_CHECK!>is _SealedClassWithObjects<!> -> 10 <!USELESS_IS_CHECK!>is SealedClassWithObjects<!> -> 10
} }
whenValue checkType { _<Int>() } whenValue checkType { _<Int>() }
@@ -1,5 +1,4 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts // !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
// !WITH_CONTRACT_FUNCTIONS
// SKIP_TXT // SKIP_TXT
/* /*
@@ -8,6 +7,7 @@
* SECTIONS: contracts, analysis, common * SECTIONS: contracts, analysis, common
* NUMBER: 2 * NUMBER: 2
* DESCRIPTION: Recursion in the lambda of contract function. * DESCRIPTION: Recursion in the lambda of contract function.
* HELPERS: contractFunctions
*/ */
// TESTCASE NUMBER: 1 // TESTCASE NUMBER: 1
@@ -1,5 +1,4 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts // !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
// !WITH_CONTRACT_FUNCTIONS
// SKIP_TXT // SKIP_TXT
/* /*
@@ -8,6 +7,7 @@
* SECTIONS: contracts, analysis, controlFlow, initialization * SECTIONS: contracts, analysis, controlFlow, initialization
* NUMBER: 1 * NUMBER: 1
* DESCRIPTION: val/var reassignment and/or uninitialized variable usages based on CallsInPlace effect with wrong invocation kind * DESCRIPTION: val/var reassignment and/or uninitialized variable usages based on CallsInPlace effect with wrong invocation kind
* HELPERS: contractFunctions
*/ */
// TESTCASE NUMBER: 1 // TESTCASE NUMBER: 1
@@ -1,5 +1,4 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts // !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
// !WITH_CONTRACT_FUNCTIONS
// SKIP_TXT // SKIP_TXT
/* /*
@@ -8,6 +7,7 @@
* SECTIONS: contracts, analysis, controlFlow, initialization * SECTIONS: contracts, analysis, controlFlow, initialization
* NUMBER: 2 * NUMBER: 2
* DESCRIPTION: val/var reassignment and/or uninitialized variable usages based on nested CallsInPlace effects with wrong invocation kind * DESCRIPTION: val/var reassignment and/or uninitialized variable usages based on nested CallsInPlace effects with wrong invocation kind
* HELPERS: contractFunctions
*/ */
// TESTCASE NUMBER: 1 // TESTCASE NUMBER: 1
@@ -1,6 +1,4 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts // !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
// !WITH_CONTRACT_FUNCTIONS
// !WITH_ENUM_CLASSES
// SKIP_TXT // SKIP_TXT
/* /*
@@ -9,16 +7,17 @@
* SECTIONS: contracts, analysis, controlFlow, initialization * SECTIONS: contracts, analysis, controlFlow, initialization
* NUMBER: 3 * NUMBER: 3
* DESCRIPTION: val/var reassignment and/or uninitialized variable usages with compelx control flow inside/outside lambda of contract function with CallsInPlace effect * DESCRIPTION: val/var reassignment and/or uninitialized variable usages with compelx control flow inside/outside lambda of contract function with CallsInPlace effect
* HELPERS: enumClasses, contractFunctions
*/ */
// TESTCASE NUMBER: 1 // TESTCASE NUMBER: 1
fun case_1(value_1: _EnumClass?) { fun case_1(value_1: EnumClass?) {
val value_2: Int val value_2: Int
<!NON_EXHAUSTIVE_WHEN!>when<!> (value_1) { <!NON_EXHAUSTIVE_WHEN!>when<!> (value_1) {
_EnumClass.NORTH -> funWithExactlyOnceCallsInPlace { value_2 = 1 } EnumClass.NORTH -> funWithExactlyOnceCallsInPlace { value_2 = 1 }
_EnumClass.SOUTH -> funWithExactlyOnceCallsInPlace { value_2 = 2 } EnumClass.SOUTH -> funWithExactlyOnceCallsInPlace { value_2 = 2 }
_EnumClass.EAST -> funWithExactlyOnceCallsInPlace { value_2 = 4 } EnumClass.EAST -> funWithExactlyOnceCallsInPlace { value_2 = 4 }
null -> funWithExactlyOnceCallsInPlace { value_2 = 5 } null -> funWithExactlyOnceCallsInPlace { value_2 = 5 }
} }
@@ -62,12 +61,12 @@ class case_3(value_1: Any?) {
} }
// TESTCASE NUMBER: 4 // TESTCASE NUMBER: 4
fun case_4(value_1: _EnumClassSingle?) { fun case_4(value_1: EnumClassSingle?) {
var value_2: Int var value_2: Int
funWithAtMostOnceCallsInPlace { funWithAtMostOnceCallsInPlace {
when (value_1) { when (value_1) {
_EnumClassSingle.EVERYTHING -> { EnumClassSingle.EVERYTHING -> {
funWithExactlyOnceCallsInPlace { value_2 = 1 } funWithExactlyOnceCallsInPlace { value_2 = 1 }
++value_2 ++value_2
} }
@@ -1,5 +1,4 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts // !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
// !WITH_CONTRACT_FUNCTIONS
// SKIP_TXT // SKIP_TXT
/* /*
@@ -8,6 +7,7 @@
* SECTIONS: contracts, analysis, controlFlow, initialization * SECTIONS: contracts, analysis, controlFlow, initialization
* NUMBER: 4 * NUMBER: 4
* DESCRIPTION: CallsInPlace contract functions with name shadowing and wrong invocation kind * DESCRIPTION: CallsInPlace contract functions with name shadowing and wrong invocation kind
* HELPERS: contractFunctions
*/ */
// TESTCASE NUMBER: 1 // TESTCASE NUMBER: 1
@@ -1,5 +1,4 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts // !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
// !WITH_CONTRACT_FUNCTIONS
// SKIP_TXT // SKIP_TXT
/* /*
@@ -8,6 +7,7 @@
* SECTIONS: contracts, analysis, controlFlow, initialization * SECTIONS: contracts, analysis, controlFlow, initialization
* NUMBER: 5 * NUMBER: 5
* DESCRIPTION: CallsInPlace contract functions with invalid lambda passing to function parameter. * DESCRIPTION: CallsInPlace contract functions with invalid lambda passing to function parameter.
* HELPERS: contractFunctions
*/ */
// TESTCASE NUMBER: 1 // TESTCASE NUMBER: 1
@@ -1,5 +1,4 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts // !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
// !WITH_CONTRACT_FUNCTIONS
// SKIP_TXT // SKIP_TXT
/* /*
@@ -10,6 +9,7 @@
* DESCRIPTION: Check the lack of CallsInPlace effect on the lambda in the parentheses. * DESCRIPTION: Check the lack of CallsInPlace effect on the lambda in the parentheses.
* UNEXPECTED BEHAVIOUR * UNEXPECTED BEHAVIOUR
* ISSUES: KT-26229 * ISSUES: KT-26229
* HELPERS: contractFunctions
*/ */
// TESTCASE NUMBER: 1 // TESTCASE NUMBER: 1
@@ -1,5 +1,4 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts // !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
// !WITH_CONTRACT_FUNCTIONS
// SKIP_TXT // SKIP_TXT
/* /*
@@ -8,6 +7,7 @@
* SECTIONS: contracts, analysis, controlFlow, initialization * SECTIONS: contracts, analysis, controlFlow, initialization
* NUMBER: 1 * NUMBER: 1
* DESCRIPTION: val/var assignments using contract functions with CallsInPlace effect * DESCRIPTION: val/var assignments using contract functions with CallsInPlace effect
* HELPERS: contractFunctions
*/ */
// TESTCASE NUMBER: 1 // TESTCASE NUMBER: 1
@@ -1,5 +1,4 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts // !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
// !WITH_CONTRACT_FUNCTIONS
// SKIP_TXT // SKIP_TXT
/* /*
@@ -8,6 +7,7 @@
* SECTIONS: contracts, analysis, controlFlow, initialization * SECTIONS: contracts, analysis, controlFlow, initialization
* NUMBER: 2 * NUMBER: 2
* DESCRIPTION: Nested val/var assignments using contract functions with CallsInPlace effect * DESCRIPTION: Nested val/var assignments using contract functions with CallsInPlace effect
* HELPERS: contractFunctions
*/ */
// TESTCASE NUMBER: 1 // TESTCASE NUMBER: 1
@@ -1,6 +1,4 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts // !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
// !WITH_CONTRACT_FUNCTIONS
// !WITH_ENUM_CLASSES
// SKIP_TXT // SKIP_TXT
/* /*
@@ -9,17 +7,18 @@
* SECTIONS: contracts, analysis, controlFlow, initialization * SECTIONS: contracts, analysis, controlFlow, initialization
* NUMBER: 3 * NUMBER: 3
* DESCRIPTION: val/var assignments or subsequent usages with compelx control flow inside/outside lambda of contract function with CallsInPlace effect * DESCRIPTION: val/var assignments or subsequent usages with compelx control flow inside/outside lambda of contract function with CallsInPlace effect
* HELPERS: enumClasses, contractFunctions
*/ */
// TESTCASE NUMBER: 1 // TESTCASE NUMBER: 1
fun case_1(value_1: _EnumClass?) { fun case_1(value_1: EnumClass?) {
val value_2: Int val value_2: Int
<!DEBUG_INFO_IMPLICIT_EXHAUSTIVE!>when (value_1) { <!DEBUG_INFO_IMPLICIT_EXHAUSTIVE!>when (value_1) {
_EnumClass.NORTH -> funWithExactlyOnceCallsInPlace { value_2 = 1 } EnumClass.NORTH -> funWithExactlyOnceCallsInPlace { value_2 = 1 }
_EnumClass.SOUTH -> funWithExactlyOnceCallsInPlace { value_2 = 2 } EnumClass.SOUTH -> funWithExactlyOnceCallsInPlace { value_2 = 2 }
_EnumClass.WEST -> funWithExactlyOnceCallsInPlace { value_2 = 3 } EnumClass.WEST -> funWithExactlyOnceCallsInPlace { value_2 = 3 }
_EnumClass.EAST -> funWithExactlyOnceCallsInPlace { value_2 = 4 } EnumClass.EAST -> funWithExactlyOnceCallsInPlace { value_2 = 4 }
null -> funWithExactlyOnceCallsInPlace { value_2 = 5 } null -> funWithExactlyOnceCallsInPlace { value_2 = 5 }
}<!> }<!>
@@ -63,12 +62,12 @@ class case_3(value_1: Any?) {
} }
// TESTCASE NUMBER: 4 // TESTCASE NUMBER: 4
fun case_4(value_1: _EnumClassSingle?) { fun case_4(value_1: EnumClassSingle?) {
var value_2: Int var value_2: Int
funWithAtMostOnceCallsInPlace { funWithAtMostOnceCallsInPlace {
<!DEBUG_INFO_IMPLICIT_EXHAUSTIVE!>when (value_1) { <!DEBUG_INFO_IMPLICIT_EXHAUSTIVE!>when (value_1) {
_EnumClassSingle.EVERYTHING -> { EnumClassSingle.EVERYTHING -> {
funWithExactlyOnceCallsInPlace { value_2 = 1 } funWithExactlyOnceCallsInPlace { value_2 = 1 }
++value_2 ++value_2
} }
@@ -1,5 +1,4 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts // !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
// !WITH_CONTRACT_FUNCTIONS
// SKIP_TXT // SKIP_TXT
/* /*
@@ -8,6 +7,7 @@
* SECTIONS: contracts, analysis, controlFlow, initialization * SECTIONS: contracts, analysis, controlFlow, initialization
* NUMBER: 4 * NUMBER: 4
* DESCRIPTION: CallsInPlace contract functions with name shadowing * DESCRIPTION: CallsInPlace contract functions with name shadowing
* HELPERS: contractFunctions
*/ */
// TESTCASE NUMBER: 1 // TESTCASE NUMBER: 1
@@ -1,5 +1,4 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts // !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
// !WITH_CONTRACT_FUNCTIONS
/* /*
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE) * KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
@@ -9,6 +8,7 @@
* DESCRIPTION: Check the lack of CallsInPlace effect on the lambda in the parentheses. * DESCRIPTION: Check the lack of CallsInPlace effect on the lambda in the parentheses.
* UNEXPECTED BEHAVIOUR * UNEXPECTED BEHAVIOUR
* ISSUES: KT-26229 * ISSUES: KT-26229
* HELPERS: contractFunctions
*/ */
// FILE: contracts.kt // FILE: contracts.kt
@@ -1,5 +1,4 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts // !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
// !WITH_CONTRACT_FUNCTIONS
// SKIP_TXT // SKIP_TXT
/* /*
@@ -8,6 +7,7 @@
* SECTIONS: contracts, analysis, controlFlow, unreachableCode * SECTIONS: contracts, analysis, controlFlow, unreachableCode
* NUMBER: 1 * NUMBER: 1
* DESCRIPTION: Using not allowed break and continue inside lambda of contract function * DESCRIPTION: Using not allowed break and continue inside lambda of contract function
* HELPERS: contractFunctions
*/ */
// TESTCASE NUMBER: 1 // TESTCASE NUMBER: 1
@@ -1,6 +1,5 @@
// !DIAGNOSTICS: -UNUSED_VARIABLE // !DIAGNOSTICS: -UNUSED_VARIABLE
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts // !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
// !WITH_CONTRACT_FUNCTIONS
// SKIP_TXT // SKIP_TXT
/* /*
@@ -9,6 +8,7 @@
* SECTIONS: contracts, analysis, controlFlow, unreachableCode * SECTIONS: contracts, analysis, controlFlow, unreachableCode
* NUMBER: 1 * NUMBER: 1
* DESCRIPTION: Unreachable code detection using contract function with CallsInPlace effect * DESCRIPTION: Unreachable code detection using contract function with CallsInPlace effect
* HELPERS: contractFunctions
*/ */
// TESTCASE NUMBER: 1 // TESTCASE NUMBER: 1
@@ -1,5 +1,4 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts // !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
// !WITH_CONTRACT_FUNCTIONS
// SKIP_TXT // SKIP_TXT
/* /*
@@ -8,6 +7,7 @@
* SECTIONS: contracts, analysis, controlFlow, unreachableCode * SECTIONS: contracts, analysis, controlFlow, unreachableCode
* NUMBER: 2 * NUMBER: 2
* DESCRIPTION: Check for lack of unreachable code report when 'at most once' and 'unknown' invokations in CallsInPlace effect used. * DESCRIPTION: Check for lack of unreachable code report when 'at most once' and 'unknown' invokations in CallsInPlace effect used.
* HELPERS: contractFunctions
*/ */
// TESTCASE NUMBER: 1 // TESTCASE NUMBER: 1
@@ -1,5 +1,4 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts // !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
// !WITH_CONTRACT_FUNCTIONS
// SKIP_TXT // SKIP_TXT
/* /*
@@ -8,6 +7,7 @@
* SECTIONS: contracts, analysis, controlFlow, unreachableCode * SECTIONS: contracts, analysis, controlFlow, unreachableCode
* NUMBER: 3 * NUMBER: 3
* DESCRIPTION: Unreachable code detection using local functions or labdas combined with contract functions with CallsInPlace effect * DESCRIPTION: Unreachable code detection using local functions or labdas combined with contract functions with CallsInPlace effect
* HELPERS: contractFunctions
*/ */
// TESTCASE NUMBER: 1 // TESTCASE NUMBER: 1
@@ -1,5 +1,4 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts // !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
// !WITH_CONTRACT_FUNCTIONS
// SKIP_TXT // SKIP_TXT
/* /*
@@ -8,6 +7,7 @@
* SECTIONS: contracts, analysis, controlFlow, unreachableCode * SECTIONS: contracts, analysis, controlFlow, unreachableCode
* NUMBER: 4 * NUMBER: 4
* DESCRIPTION: Unreachable code detection using nested contract functions with CallsInPlace effect * DESCRIPTION: Unreachable code detection using nested contract functions with CallsInPlace effect
* HELPERS: contractFunctions
*/ */
// TESTCASE NUMBER: 1 // TESTCASE NUMBER: 1
@@ -1,5 +1,4 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts // !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
// !WITH_CONTRACT_FUNCTIONS
// SKIP_TXT // SKIP_TXT
/* /*
@@ -8,6 +7,7 @@
* SECTIONS: contracts, analysis, controlFlow, unreachableCode * SECTIONS: contracts, analysis, controlFlow, unreachableCode
* NUMBER: 5 * NUMBER: 5
* DESCRIPTION: Unreachable code detection using contract functions with complex control flow inside * DESCRIPTION: Unreachable code detection using contract functions with complex control flow inside
* HELPERS: contractFunctions
*/ */
// TESTCASE NUMBER: 1 // TESTCASE NUMBER: 1
@@ -1,5 +1,4 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts // !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
// !WITH_CONTRACT_FUNCTIONS
// SKIP_TXT // SKIP_TXT
/* /*
@@ -8,6 +7,7 @@
* SECTIONS: contracts, analysis, controlFlow, unreachableCode * SECTIONS: contracts, analysis, controlFlow, unreachableCode
* NUMBER: 6 * NUMBER: 6
* DESCRIPTION: Check for lack of unreachable code report when in complex control flow of contract function lambda not all branches are doing non-local return * DESCRIPTION: Check for lack of unreachable code report when in complex control flow of contract function lambda not all branches are doing non-local return
* HELPERS: contractFunctions
*/ */
// TESTCASE NUMBER: 1 // TESTCASE NUMBER: 1
@@ -1,5 +1,4 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts // !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
// !WITH_CONTRACT_FUNCTIONS
// SKIP_TXT // SKIP_TXT
/* /*
@@ -8,6 +7,7 @@
* SECTIONS: contracts, analysis, smartcasts * SECTIONS: contracts, analysis, smartcasts
* NUMBER: 1 * NUMBER: 1
* DESCRIPTION: Smartcasts using Returns effects with simple type checking, not-null conditions and custom condition (condition for smartcast outside contract). * DESCRIPTION: Smartcasts using Returns effects with simple type checking, not-null conditions and custom condition (condition for smartcast outside contract).
* HELPERS: contractFunctions
*/ */
// TESTCASE NUMBER: 1 // TESTCASE NUMBER: 1
@@ -1,5 +1,4 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts // !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
// !WITH_CONTRACT_FUNCTIONS
/* /*
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE) * KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
@@ -8,6 +7,7 @@
* NUMBER: 10 * NUMBER: 10
* DESCRIPTION: Check smartcasts using double negation (returnsFalse/invert type checking/not operator). * DESCRIPTION: Check smartcasts using double negation (returnsFalse/invert type checking/not operator).
* ISSUES: KT-26176 * ISSUES: KT-26176
* HELPERS: contractFunctions
*/ */
// FILE: contracts.kt // FILE: contracts.kt
@@ -1,4 +1,3 @@
// !WITH_CONTRACT_FUNCTIONS
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts // !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
/* /*
@@ -7,6 +6,7 @@
* SECTIONS: contracts, analysis, smartcasts * SECTIONS: contracts, analysis, smartcasts
* NUMBER: 11 * NUMBER: 11
* DESCRIPTION: Smartcast using many of the various Returns effects on the same values. * DESCRIPTION: Smartcast using many of the various Returns effects on the same values.
* HELPERS: contractFunctions
*/ */
// FILE: contracts.kt // FILE: contracts.kt
@@ -1,5 +1,4 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts // !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
// !WITH_CONTRACT_FUNCTIONS
/* /*
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE) * KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
@@ -7,6 +6,7 @@
* SECTIONS: contracts, analysis, smartcasts * SECTIONS: contracts, analysis, smartcasts
* NUMBER: 13 * NUMBER: 13
* DESCRIPTION: Smartcast using many of the various Returns effects on the same values. * DESCRIPTION: Smartcast using many of the various Returns effects on the same values.
* HELPERS: contractFunctions
*/ */
// FILE: contracts.kt // FILE: contracts.kt
@@ -1,4 +1,3 @@
// !WITH_CONTRACT_FUNCTIONS
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts // !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
/* /*
@@ -7,6 +6,7 @@
* SECTIONS: contracts, analysis, smartcasts * SECTIONS: contracts, analysis, smartcasts
* NUMBER: 14 * NUMBER: 14
* DESCRIPTION: Smartcast using many of the various Returns effects on the same values. * DESCRIPTION: Smartcast using many of the various Returns effects on the same values.
* HELPERS: contractFunctions
*/ */
// FILE: contracts.kt // FILE: contracts.kt
@@ -1,4 +1,3 @@
// !WITH_CONTRACT_FUNCTIONS
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts // !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
/* /*
@@ -8,6 +7,7 @@
* NUMBER: 15 * NUMBER: 15
* DESCRIPTION: Check smartcasts working if type checking for contract function is used * DESCRIPTION: Check smartcasts working if type checking for contract function is used
* ISSUES: KT-27241 * ISSUES: KT-27241
* HELPERS: contractFunctions
*/ */
// FILE: contracts.kt // FILE: contracts.kt
@@ -1,5 +1,4 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts // !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
// !WITH_CONTRACT_FUNCTIONS
// SKIP_TXT // SKIP_TXT
/* /*
@@ -8,6 +7,7 @@
* SECTIONS: contracts, analysis, smartcasts * SECTIONS: contracts, analysis, smartcasts
* NUMBER: 2 * NUMBER: 2
* DESCRIPTION: Smartcasts using Returns effects with complex (conjunction/disjunction) type checking and not-null conditions outside contract (custom condition). * DESCRIPTION: Smartcasts using Returns effects with complex (conjunction/disjunction) type checking and not-null conditions outside contract (custom condition).
* HELPERS: contractFunctions
*/ */
// TESTCASE NUMBER: 1 // TESTCASE NUMBER: 1
@@ -1,4 +1,3 @@
// !WITH_CONTRACT_FUNCTIONS
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts // !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
/* /*
@@ -7,6 +6,7 @@
* SECTIONS: contracts, analysis, smartcasts * SECTIONS: contracts, analysis, smartcasts
* NUMBER: 8 * NUMBER: 8
* DESCRIPTION: Smartcasts using some Returns effects. * DESCRIPTION: Smartcasts using some Returns effects.
* HELPERS: contractFunctions
*/ */
// FILE: contracts.kt // FILE: contracts.kt
@@ -1,5 +1,4 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts // !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
// !WITH_CONTRACT_FUNCTIONS
// SKIP_TXT // SKIP_TXT
/* /*
@@ -8,6 +7,7 @@
* SECTIONS: contracts, analysis, smartcasts * SECTIONS: contracts, analysis, smartcasts
* NUMBER: 9 * NUMBER: 9
* DESCRIPTION: Check the lack of smartcasts after non-null assertions or not-null value assignment in lambdas of contract function with 'unknown' or 'at most once' CallsInPlace effects. * DESCRIPTION: Check the lack of smartcasts after non-null assertions or not-null value assignment in lambdas of contract function with 'unknown' or 'at most once' CallsInPlace effects.
* HELPERS: contractFunctions
*/ */
// TESTCASE NUMBER: 1 // TESTCASE NUMBER: 1
@@ -1,5 +1,4 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts // !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
// !WITH_CONTRACT_FUNCTIONS
// SKIP_TXT // SKIP_TXT
/* /*
@@ -8,6 +7,7 @@
* SECTIONS: contracts, analysis, smartcasts * SECTIONS: contracts, analysis, smartcasts
* NUMBER: 1 * NUMBER: 1
* DESCRIPTION: Smartcasts using Returns effects with simple type checking, not-null conditions and custom condition (condition for smartcast outside contract). * DESCRIPTION: Smartcasts using Returns effects with simple type checking, not-null conditions and custom condition (condition for smartcast outside contract).
* HELPERS: contractFunctions
*/ */
// TESTCASE NUMBER: 1 // TESTCASE NUMBER: 1
@@ -1,4 +1,3 @@
// !WITH_CONTRACT_FUNCTIONS
// !DIAGNOSTICS: -UNUSED_PARAMETER // !DIAGNOSTICS: -UNUSED_PARAMETER
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts // !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
@@ -9,6 +8,7 @@
* NUMBER: 10 * NUMBER: 10
* DESCRIPTION: Smartcasts with correspond contract function with default value in last parameter. * DESCRIPTION: Smartcasts with correspond contract function with default value in last parameter.
* ISSUES: KT-26444 * ISSUES: KT-26444
* HELPERS: contractFunctions
*/ */
// FILE: contracts.kt // FILE: contracts.kt
@@ -1,5 +1,4 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts // !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
// !WITH_CONTRACT_FUNCTIONS
/* /*
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE) * KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
@@ -8,6 +7,7 @@
* NUMBER: 11 * NUMBER: 11
* DESCRIPTION: Check smartcasts with passing same fields of instances of the same class in contract function with conjunction not-null condition. * DESCRIPTION: Check smartcasts with passing same fields of instances of the same class in contract function with conjunction not-null condition.
* ISSUES: KT-26300 * ISSUES: KT-26300
* HELPERS: contractFunctions
*/ */
// FILE: contracts.kt // FILE: contracts.kt
@@ -1,5 +1,4 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts // !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
// !WITH_CONTRACT_FUNCTIONS
// SKIP_TXT // SKIP_TXT
/* /*
@@ -10,6 +9,7 @@
* DESCRIPTION: Smartcasts after non-null assertions or not-null value assignment in lambdas of contract function with 'exactly once' or 'at least once' CallsInPlace effects. * DESCRIPTION: Smartcasts after non-null assertions or not-null value assignment in lambdas of contract function with 'exactly once' or 'at least once' CallsInPlace effects.
* UNEXPECTED BEHAVIOUR * UNEXPECTED BEHAVIOUR
* ISSUES: KT-26148 * ISSUES: KT-26148
* HELPERS: contractFunctions
*/ */
// TESTCASE NUMBER: 1 // TESTCASE NUMBER: 1
@@ -1,5 +1,4 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts // !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
// !WITH_CONTRACT_FUNCTIONS
// SKIP_TXT // SKIP_TXT
/* /*
@@ -8,6 +7,7 @@
* SECTIONS: contracts, analysis, smartcasts * SECTIONS: contracts, analysis, smartcasts
* NUMBER: 2 * NUMBER: 2
* DESCRIPTION: Smartcasts using Returns effects with complex (conjunction/disjunction) type checking and not-null conditions outside contract (custom condition). * DESCRIPTION: Smartcasts using Returns effects with complex (conjunction/disjunction) type checking and not-null conditions outside contract (custom condition).
* HELPERS: contractFunctions
*/ */
// TESTCASE NUMBER: 1 // TESTCASE NUMBER: 1
@@ -1,4 +1,3 @@
// !WITH_CONTRACT_FUNCTIONS
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts // !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
/* /*
@@ -7,6 +6,7 @@
* SECTIONS: contracts, analysis, smartcasts * SECTIONS: contracts, analysis, smartcasts
* NUMBER: 8 * NUMBER: 8
* DESCRIPTION: Smartcasts using some Returns effects. * DESCRIPTION: Smartcasts using some Returns effects.
* HELPERS: contractFunctions
*/ */
// FILE: contracts.kt // FILE: contracts.kt
@@ -1,5 +1,3 @@
// !WITH_CONTRACT_FUNCTIONS
// !WITH_BASIC_TYPES
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts // !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
/* /*
@@ -8,6 +6,7 @@
* SECTIONS: contracts, analysis, smartcasts * SECTIONS: contracts, analysis, smartcasts
* NUMBER: 9 * NUMBER: 9
* DESCRIPTION: Smartcast using complex condition with some contract functions (Returns effect). * DESCRIPTION: Smartcast using complex condition with some contract functions (Returns effect).
* HELPERS: typesProvider, contractFunctions
*/ */
// FILE: contracts.kt // FILE: contracts.kt
@@ -121,34 +121,34 @@ public inline fun funWithUnknownCallsInPlace(/*0*/ block: () -> kotlin.Unit): ko
CallsInPlace(block, UNKNOWN) CallsInPlace(block, UNKNOWN)
public fun getAny(): kotlin.Any public fun getAny(): kotlin.Any
public fun getBoolean(/*0*/ arg: kotlin.Any = ...): kotlin.Boolean public fun getBoolean(): kotlin.Boolean
public fun getByte(/*0*/ arg: kotlin.Any = ...): kotlin.Byte public fun getByte(): kotlin.Byte
public fun getChar(/*0*/ arg: kotlin.Any = ...): kotlin.Char public fun getChar(): kotlin.Char
public fun getDouble(/*0*/ arg: kotlin.Any = ...): kotlin.Double public fun getDouble(): kotlin.Double
public fun getFloat(/*0*/ arg: kotlin.Any = ...): kotlin.Float public fun getFloat(): kotlin.Float
public fun getInt(/*0*/ arg: kotlin.Any = ...): kotlin.Int public fun getInt(): kotlin.Int
public fun getList(): kotlin.collections.MutableList<kotlin.Int> public fun getList(): kotlin.collections.List<kotlin.Int>
public fun getLong(/*0*/ arg: kotlin.Any = ...): kotlin.Long public fun getLong(): kotlin.Long
public fun getNothing(): kotlin.Nothing public fun getNothing(): kotlin.Nothing
public fun getShort(/*0*/ arg: kotlin.Any = ...): kotlin.Short public fun getShort(): kotlin.Short
public fun getString(/*0*/ arg: kotlin.Any = ...): kotlin.String public fun getString(): kotlin.String
public fun getUnit(): () -> kotlin.Unit public fun getUnit(): () -> kotlin.Unit
public final class _BasicTypesProvider { public final class TypesProvider {
public constructor _BasicTypesProvider() public constructor TypesProvider()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public final fun getAny(): kotlin.Any public final fun getAny(): kotlin.Any
public final fun getBoolean(/*0*/ arg: kotlin.Any = ...): kotlin.Boolean public final fun getBoolean(): kotlin.Boolean
public final fun getByte(/*0*/ arg: kotlin.Any = ...): kotlin.Byte public final fun getByte(): kotlin.Byte
public final fun getChar(/*0*/ arg: kotlin.Any = ...): kotlin.Char public final fun getChar(): kotlin.Char
public final fun getDouble(/*0*/ arg: kotlin.Any = ...): kotlin.Double public final fun getDouble(): kotlin.Double
public final fun getFloat(/*0*/ arg: kotlin.Any = ...): kotlin.Float public final fun getFloat(): kotlin.Float
public final fun getInt(/*0*/ arg: kotlin.Any = ...): kotlin.Int public final fun getInt(): kotlin.Int
public final fun getList(): kotlin.collections.MutableList<kotlin.Int> public final fun getList(): kotlin.collections.List<kotlin.Int>
public final fun getLong(/*0*/ arg: kotlin.Any = ...): kotlin.Long public final fun getLong(): kotlin.Long
public final fun getNothing(): kotlin.Nothing public final fun getNothing(): kotlin.Nothing
public final fun getShort(/*0*/ arg: kotlin.Any = ...): kotlin.Short public final fun getShort(): kotlin.Short
public final fun getString(/*0*/ arg: kotlin.Any = ...): kotlin.String public final fun getString(): kotlin.String
public final fun getUnit(): () -> kotlin.Unit public final fun getUnit(): () -> kotlin.Unit
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
@@ -1,6 +1,5 @@
// !DIAGNOSTICS: -UNUSED_VARIABLE // !DIAGNOSTICS: -UNUSED_VARIABLE
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts // !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
// !WITH_FUNCTIONS
/* /*
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE) * KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
@@ -10,6 +9,7 @@
* DESCRIPTION: Contract is first statement in control flow terms, but not in tokens order terms. * DESCRIPTION: Contract is first statement in control flow terms, but not in tokens order terms.
* UNEXPECTED BEHAVIOUR * UNEXPECTED BEHAVIOUR
* ISSUES: KT-26153 * ISSUES: KT-26153
* HELPERS: functions
*/ */
import kotlin.contracts.* import kotlin.contracts.*
@@ -57,7 +57,7 @@ inline fun case_6(block: () -> Unit) {
// TESTCASE NUMBER: 7 // TESTCASE NUMBER: 7
inline fun case_7(block: () -> Unit) { inline fun case_7(block: () -> Unit) {
_funWithAnyArg(contract { funWithAnyArg(contract {
callsInPlace(block, InvocationKind.EXACTLY_ONCE) callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}) })
} }
@@ -1,7 +1,5 @@
package package
public fun _funWithAnyArg(/*0*/ value_1: kotlin.Any): kotlin.Int
public fun _funWithoutArgs(): kotlin.Int
public inline fun case_1(/*0*/ block: () -> kotlin.Unit): kotlin.Unit public inline fun case_1(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
public fun case_2(): kotlin.Unit public fun case_2(): kotlin.Unit
public inline fun case_3(/*0*/ block: () -> kotlin.Unit): kotlin.Unit public inline fun case_3(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
@@ -9,3 +7,13 @@ public inline fun case_4(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
public inline fun case_5(/*0*/ block: () -> kotlin.Unit): kotlin.Unit public inline fun case_5(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
public inline fun case_6(/*0*/ block: () -> kotlin.Unit): kotlin.Unit public inline fun case_6(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
public inline fun case_7(/*0*/ block: () -> kotlin.Unit): kotlin.Unit public inline fun case_7(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
public fun </*0*/ K> expandIn(/*0*/ vararg x: [ERROR : In<K>]<K> /*kotlin.Array<out [ERROR : In<K>]<K>>*/): K
public fun </*0*/ K> expandInWithRemoveNullable(/*0*/ vararg x: [ERROR : In<K?>]<K?> /*kotlin.Array<out [ERROR : In<K?>]<K?>>*/): K
public fun </*0*/ K> expandInv(/*0*/ vararg x: [ERROR : Inv<K>]<K> /*kotlin.Array<out [ERROR : Inv<K>]<K>>*/): K
public fun </*0*/ K> expandInvWithRemoveNullable(/*0*/ vararg x: [ERROR : Inv<K?>]<K?> /*kotlin.Array<out [ERROR : Inv<K?>]<K?>>*/): K
public fun </*0*/ K> expandOut(/*0*/ vararg x: [ERROR : Out<K>]<K> /*kotlin.Array<out [ERROR : Out<K>]<K>>*/): K
public fun </*0*/ K> expandOutWithRemoveNullable(/*0*/ vararg x: [ERROR : Out<K?>]<K?> /*kotlin.Array<out [ERROR : Out<K?>]<K?>>*/): K
public fun funWithAnyArg(/*0*/ value_1: kotlin.Any): kotlin.Int
public fun funWithoutArgs(): kotlin.Int
public fun </*0*/ K> removeNullable(/*0*/ vararg x: K? /*kotlin.Array<out K?>*/): K
public fun </*0*/ K> select(/*0*/ vararg x: K /*kotlin.Array<out K>*/): K
@@ -1,6 +1,5 @@
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER -UNREACHABLE_CODE -UNUSED_EXPRESSION // !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER -UNREACHABLE_CODE -UNUSED_EXPRESSION
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts // !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
// !WITH_BASIC_TYPES
/* /*
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE) * KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
@@ -8,6 +7,7 @@
* SECTIONS: contracts, declarations, contractBuilder, common * SECTIONS: contracts, declarations, contractBuilder, common
* NUMBER: 6 * NUMBER: 6
* DESCRIPTION: contracts with not function parameters in implies. * DESCRIPTION: contracts with not function parameters in implies.
* HELPERS: typesProvider
*/ */
import kotlin.contracts.* import kotlin.contracts.*

Some files were not shown because too many files have changed in this diff Show More