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)
*
@@ -8,6 +6,8 @@
* NUMBER: 1
* 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!
* UNEXPECTED BEHAVIOUR
* HELPERS: reflect
*/
open class `true` {
@@ -1,5 +1,3 @@
// HELPERS: REFLECT
/*
* KOTLIN CODEGEN BOX SPEC TEST (POSITIVE)
*
@@ -8,6 +6,7 @@
* NUMBER: 10
* 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!
* HELPERS: reflect
*/
package org.jetbrains.`true`
@@ -1,5 +1,3 @@
// HELPERS: REFLECT
/*
* KOTLIN CODEGEN BOX SPEC TEST (POSITIVE)
*
@@ -8,6 +6,7 @@
* NUMBER: 11
* 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!
* HELPERS: reflect
*/
fun `true`(): Boolean {
@@ -1,5 +1,3 @@
// HELPERS: REFLECT
/*
* KOTLIN CODEGEN BOX SPEC TEST (POSITIVE)
*
@@ -8,6 +6,7 @@
* NUMBER: 12
* 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!
* HELPERS: reflect
*/
class A {
@@ -1,5 +1,3 @@
// HELPERS: REFLECT
/*
* KOTLIN CODEGEN BOX SPEC TEST (POSITIVE)
*
@@ -8,6 +6,7 @@
* NUMBER: 13
* 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!
* HELPERS: reflect
*/
package org.jetbrains.`true`
@@ -1,5 +1,3 @@
// HELPERS: REFLECT
/*
* KOTLIN CODEGEN BOX SPEC TEST (POSITIVE)
*
@@ -8,6 +6,7 @@
* NUMBER: 14
* 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!
* HELPERS: reflect
*/
package org.jetbrains.`true`
@@ -1,5 +1,3 @@
// HELPERS: REFLECT
/*
* KOTLIN CODEGEN BOX SPEC TEST (POSITIVE)
*
@@ -8,6 +6,7 @@
* NUMBER: 15
* 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!
* HELPERS: reflect
*/
fun f1(`true`: Boolean) = !!!`true`
@@ -1,5 +1,3 @@
// HELPERS: REFLECT
/*
* KOTLIN CODEGEN BOX SPEC TEST (POSITIVE)
*
@@ -8,6 +6,7 @@
* NUMBER: 16
* 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!
* HELPERS: reflect
*/
@file:[org.jetbrains.`true`.`false`() `true`]
@@ -1,5 +1,3 @@
// HELPERS: REFLECT
/*
* KOTLIN CODEGEN BOX SPEC TEST (POSITIVE)
*
@@ -8,6 +6,7 @@
* NUMBER: 17
* 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!
* HELPERS: reflect
*/
open class A {
@@ -1,5 +1,3 @@
// HELPERS: REFLECT
/*
* KOTLIN CODEGEN BOX SPEC TEST (POSITIVE)
*
@@ -8,6 +6,7 @@
* NUMBER: 18
* 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!
* HELPERS: reflect
*/
typealias `true` = Boolean
@@ -1,5 +1,3 @@
// HELPERS: REFLECT
/*
* KOTLIN CODEGEN BOX SPEC TEST (POSITIVE)
*
@@ -8,6 +6,7 @@
* NUMBER: 26
* 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!
* HELPERS: reflect
*/
val Boolean.`true`: Boolean
@@ -1,5 +1,3 @@
// HELPERS: REFLECT
/*
* KOTLIN CODEGEN BOX SPEC TEST (POSITIVE)
*
@@ -8,6 +6,7 @@
* NUMBER: 3
* 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!
* HELPERS: reflect
*/
class A <`true`, `false`>
@@ -1,5 +1,3 @@
// HELPERS: REFLECT
/*
* KOTLIN CODEGEN BOX SPEC TEST (POSITIVE)
*
@@ -8,6 +6,7 @@
* NUMBER: 4
* 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!
* HELPERS: reflect
*/
@file:`true`
@@ -1,5 +1,3 @@
// HELPERS: REFLECT
/*
* KOTLIN CODEGEN BOX SPEC TEST (POSITIVE)
*
@@ -8,6 +6,7 @@
* NUMBER: 5
* 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!
* HELPERS: reflect
*/
package org.jetbrains.`true`
@@ -1,5 +1,3 @@
// HELPERS: REFLECT
/*
* KOTLIN CODEGEN BOX SPEC TEST (POSITIVE)
*
@@ -8,6 +6,7 @@
* NUMBER: 6
* 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!
* HELPERS: reflect
*/
package `true`
@@ -1,5 +1,3 @@
// HELPERS: REFLECT
/*
* KOTLIN CODEGEN BOX SPEC TEST (POSITIVE)
*
@@ -8,6 +6,7 @@
* NUMBER: 9
* 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!
* HELPERS: reflect
*/
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_2 = 2
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_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
operator fun contains(a: Int): Boolean = a > 30
operator fun contains(a: Long): Boolean = a > 30L
operator fun contains(a: Char): Boolean = a > 30.toChar()
operator fun contains(a: Int) = a > 30
operator fun contains(a: Long) = a > 30L
operator fun contains(a: Char) = a > 30.toChar()
fun getIntArray(value_1: Int): IntArray = intArrayOf(1, 2, 3, value_1, 91923, 14, 123124)
fun getLongArray(value_1: Long): LongArray = longArrayOf(1L, 2L, 3L, value_1, 9192323244L, 14L, 123124L)
fun getCharArray(value_1: Char): CharArray = charArrayOf(1.toChar(), 2.toChar(), 3.toChar(), value_1)
fun getIntArray() = intArrayOf(1, 2, 3, 4, 5)
fun getLongArray() = longArrayOf(1L, 2L, 3L, 4L, 5L)
fun getCharArray() = charArrayOf(1.toChar(), 2.toChar(), 3.toChar(), 4.toChar(), 5.toChar())
class _NestedClass {
val prop_4 = 4
@@ -21,15 +25,56 @@ class _Class {
}
}
class _EmptyClass {}
class EmptyClass {}
class _ClassWithCompanionObject {
class ClassWithCompanionObject {
companion object {}
}
open class _ClassLevel1 {}
open class _ClassLevel2: _ClassLevel1() {}
open class _ClassLevel3: _ClassLevel2() {}
open class _ClassLevel4: _ClassLevel3() {}
open class _ClassLevel5: _ClassLevel4() {}
class _ClassLevel6: _ClassLevel5() {}
open class ClassLevel1 {
fun test1() {}
}
open class ClassLevel2: ClassLevel1() {
fun test2() {}
}
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
}
enum class _EnumClassSingle {
enum class EnumClassSingle {
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()
}
fun _funWithAnyArg(value_1: Any): Int {
fun funWithAnyArg(value_1: Any): Int {
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
data class _SealedChild1(val number: Int) : _SealedClass()
data class _SealedChild2(val e1: Int, val e2: Int) : _SealedClass()
data class _SealedChild3(val m1: Int, val m2: Int) : _SealedClass()
sealed class SealedClass
data class SealedChild1(val number: Int) : SealedClass()
data class SealedChild2(val e1: Int, val e2: Int) : SealedClass()
data class SealedChild3(val m1: Int, val m2: Int) : SealedClass()
sealed class _SealedClassWithObjects
object _SealedWithObjectsChild1 : _SealedClassWithObjects()
object _SealedWithObjectsChild2 : _SealedClassWithObjects()
object _SealedWithObjectsChild3 : _SealedClassWithObjects()
sealed class SealedClassWithObjects
object SealedWithObjectsChild1 : SealedClassWithObjects()
object SealedWithObjectsChild2 : SealedClassWithObjects()
object SealedWithObjectsChild3 : SealedClassWithObjects()
sealed class _SealedClassSingle
data class _SealedSingleChild1(val number: Int) : _SealedClassSingle()
sealed class SealedClassSingle
data class SealedSingleChild1(val number: Int) : SealedClassSingle()
sealed class _SealedClassSingleWithObject
object _SealedSingleWithObjectChild1: Expr3() {}
sealed class SealedClassSingleWithObject
object SealedSingleWithObjectChild1: Expr3() {}
sealed class _SealedClassEmpty
sealed class SealedClassEmpty
sealed class _SealedClassWithMethods
class _SealedWithMethodsChild1() : _SealedClassWithMethods() {
sealed class SealedClassWithMethods
class SealedWithMethodsChild1() : SealedClassWithMethods() {
fun m1() = this.hashCode().toString()
}
class _SealedWithMethodsChild2() : _SealedClassWithMethods() {
class SealedWithMethodsChild2() : SealedClassWithMethods() {
fun m2() = this.hashCode().toString()
}
class _SealedWithMethodsChild3() : _SealedClassWithMethods() {
class SealedWithMethodsChild3() : SealedClassWithMethods() {
fun m3() = this.hashCode().toString()
}
sealed class _SealedClassMixed
data class _SealedMixedChild1(val number: Int) : _SealedClassMixed()
data class _SealedMixedChild2(val e1: Int, val e2: Int) : _SealedClassMixed()
data class _SealedMixedChild3(val m1: Int, val m2: Int) : _SealedClassMixed()
object _SealedMixedChildObject1 : _SealedClassMixed()
object _SealedMixedChildObject2 : _SealedClassMixed()
object _SealedMixedChildObject3 : _SealedClassMixed()
sealed class SealedClassMixed
data class SealedMixedChild1(val number: Int) : SealedClassMixed()
data class SealedMixedChild2(val e1: Int, val e2: Int) : SealedClassMixed()
data class SealedMixedChild3(val m1: Int, val m2: Int) : SealedClassMixed()
object SealedMixedChildObject1 : SealedClassMixed()
object SealedMixedChildObject2 : SealedClassMixed()
object SealedMixedChildObject3 : SealedClassMixed()
@@ -1,4 +1,9 @@
typealias _TypeAliasAny = Any
typealias _TypeAliasUnit = Unit
typealias _TypeAliasNothing = Nothing
typealias _TypeAliasInt = Int
typealias TypealiasAny = Any
typealias TypealiasUnit = Unit
typealias TypealiasNothing = Nothing
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
// !WITH_SEALED_CLASSES
/*
* KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE)
@@ -8,46 +7,47 @@
* PLACE: when-expression -> paragraph 11 -> sentence 6
* NUMBER: 1
* 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
fun case_1(value_1: _SealedClass): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
is _SealedChild1 -> ""
is _SealedChild2 -> ""
fun case_1(value_1: SealedClass): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
is SealedChild1 -> ""
is SealedChild2 -> ""
}
// TESTCASE NUMBER: 2
fun case_2(value_1: _SealedClass): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
is _SealedChild1, is _SealedChild2 -> ""
fun case_2(value_1: SealedClass): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
is SealedChild1, is SealedChild2 -> ""
}
// TESTCASE NUMBER: 3
fun case_3(value_1: _SealedClassMixed): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
is _SealedMixedChild1 -> ""
is _SealedMixedChild2 -> ""
_SealedMixedChildObject1 -> ""
fun case_3(value_1: SealedClassMixed): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
is SealedMixedChild1 -> ""
is SealedMixedChild2 -> ""
SealedMixedChildObject1 -> ""
}
// TESTCASE NUMBER: 4
fun case_4(value_1: _SealedClassMixed): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
_SealedMixedChildObject1, is _SealedMixedChild2, is _SealedMixedChild1 -> ""
fun case_4(value_1: SealedClassMixed): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
SealedMixedChildObject1, is SealedMixedChild2, is SealedMixedChild1 -> ""
}
// TESTCASE NUMBER: 5
fun case_5(value_1: _SealedClassMixed): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
is _SealedMixedChild1 -> ""
is _SealedMixedChild2 -> ""
is _SealedMixedChild3 -> ""
fun case_5(value_1: SealedClassMixed): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
is SealedMixedChild1 -> ""
is SealedMixedChild2 -> ""
is SealedMixedChild3 -> ""
}
// 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
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
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
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
fun case_11(value_1: _SealedClass): String = <!NO_ELSE_IN_WHEN!>when<!> {
value_1 is _SealedChild1 -> ""
value_1 is _SealedChild2 -> ""
value_1 is _SealedChild3 -> ""
fun case_11(value_1: SealedClass): String = <!NO_ELSE_IN_WHEN!>when<!> {
value_1 is SealedChild1 -> ""
value_1 is SealedChild2 -> ""
value_1 is SealedChild3 -> ""
}
// TESTCASE NUMBER: 12
fun case_12(value_1: _SealedClassMixed): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
is _SealedMixedChild1 -> ""
is _SealedMixedChild2 -> ""
is _SealedMixedChild3 -> ""
fun case_12(value_1: SealedClassMixed): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
is SealedMixedChild1 -> ""
is SealedMixedChild2 -> ""
is SealedMixedChild3 -> ""
}
@@ -1,5 +1,4 @@
// !DIAGNOSTICS: -UNUSED_EXPRESSION
// !WITH_ENUM_CLASSES
/*
* KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE)
@@ -8,43 +7,44 @@
* PLACE: when-expression -> paragraph 11 -> sentence 7
* NUMBER: 1
* DESCRIPTION: Checking for not exhaustive when when not covered by all enumerated values.
* HELPERS: enumClasses
*/
// TESTCASE NUMBER: 1
fun case_1(value_1: _EnumClass): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
_EnumClass.EAST -> ""
_EnumClass.SOUTH -> ""
_EnumClass.NORTH -> ""
fun case_1(value_1: EnumClass): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
EnumClass.EAST -> ""
EnumClass.SOUTH -> ""
EnumClass.NORTH -> ""
}
// TESTCASE NUMBER: 2
fun case_2(value_1: _EnumClass): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
_EnumClass.EAST, _EnumClass.SOUTH, _EnumClass.NORTH -> ""
fun case_2(value_1: EnumClass): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
EnumClass.EAST, EnumClass.SOUTH, EnumClass.NORTH -> ""
}
// TESTCASE NUMBER: 3
fun case_3(value_1: _EnumClass): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
_EnumClass.EAST -> ""
fun case_3(value_1: EnumClass): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
EnumClass.EAST -> ""
}
// 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
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
* DISCUSSION: maybe use const propagation here?
* ISSUES: KT-25265
*/
fun case_6(value_1: _EnumClass): String {
val west = _EnumClass.WEST
fun case_6(value_1: EnumClass): String {
val west = EnumClass.WEST
return <!NO_ELSE_IN_WHEN!>when<!> (value_1) {
_EnumClass.EAST -> ""
_EnumClass.SOUTH -> ""
_EnumClass.NORTH -> ""
EnumClass.EAST -> ""
EnumClass.SOUTH -> ""
EnumClass.NORTH -> ""
west -> ""
}
}
@@ -54,4 +54,4 @@ fun case_6(value_1: _EnumClass): String {
* DISCUSSION
* 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
// !WITH_SEALED_CLASSES
/*
* KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE)
@@ -8,59 +7,60 @@
* PLACE: when-expression -> paragraph 11 -> sentence 8
* NUMBER: 2
* DESCRIPTION: Checking for not exhaustive 'when' on the nullable sealed classes (and several checks for not sealed).
* HELPERS: sealedClasses
*/
// TESTCASE NUMBER: 1
fun case_1(value_1: _SealedClass?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
is _SealedChild1 -> ""
is _SealedChild2 -> ""
is _SealedChild3 -> ""
fun case_1(value_1: SealedClass?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
is SealedChild1 -> ""
is SealedChild2 -> ""
is SealedChild3 -> ""
}
// TESTCASE NUMBER: 2
fun case_2(value_1: _SealedClassMixed?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
is _SealedMixedChild1 -> ""
is _SealedMixedChild2 -> ""
_SealedMixedChildObject1 -> ""
fun case_2(value_1: SealedClassMixed?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
is SealedMixedChild1 -> ""
is SealedMixedChild2 -> ""
SealedMixedChildObject1 -> ""
null -> ""
}
// TESTCASE NUMBER: 3
fun case_3(value_1: _SealedClassMixed?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
null, is _SealedMixedChild1, is _SealedMixedChild2, _SealedMixedChildObject1 -> ""
fun case_3(value_1: SealedClassMixed?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
null, is SealedMixedChild1, is SealedMixedChild2, SealedMixedChildObject1 -> ""
}
// TESTCASE NUMBER: 4
fun case_4(value_1: _SealedClassMixed?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
is _SealedMixedChild1 -> ""
is _SealedMixedChild2 -> ""
is _SealedMixedChild3 -> ""
_SealedMixedChildObject1 -> ""
_SealedMixedChildObject2 -> ""
_SealedMixedChildObject3 -> ""
fun case_4(value_1: SealedClassMixed?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
is SealedMixedChild1 -> ""
is SealedMixedChild2 -> ""
is SealedMixedChild3 -> ""
SealedMixedChildObject1 -> ""
SealedMixedChildObject2 -> ""
SealedMixedChildObject3 -> ""
}
// TESTCASE NUMBER: 5
fun case_5(value_1: _SealedClassMixed?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
is _SealedMixedChild1 -> ""
is _SealedMixedChild2 -> ""
is _SealedMixedChild3 -> ""
fun case_5(value_1: SealedClassMixed?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
is SealedMixedChild1 -> ""
is SealedMixedChild2 -> ""
is SealedMixedChild3 -> ""
}
// 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
fun case_7(value_1: _SealedClassMixed?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
is _SealedMixedChild1 -> ""
is _SealedMixedChild2-> ""
is _SealedMixedChild3 -> ""
fun case_7(value_1: SealedClassMixed?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
is SealedMixedChild1 -> ""
is SealedMixedChild2-> ""
is SealedMixedChild3 -> ""
null -> ""
}
// TESTCASE NUMBER: 8
fun case_8(value_1: _SealedClassMixed?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
_SealedMixedChildObject1 -> ""
fun case_8(value_1: SealedClassMixed?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
SealedMixedChildObject1 -> ""
}
/*
@@ -77,4 +77,4 @@ fun case_9(value_1: Any?): String = <!NO_ELSE_IN_WHEN!>when<!> (value_1) {
* DISCUSSION
* 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
// !WITH_ENUM_CLASSES
/*
* KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE)
@@ -8,38 +7,39 @@
* PLACE: when-expression -> paragraph 11 -> sentence 8
* NUMBER: 3
* DESCRIPTION: Checking for not exhaustive 'when' on the nullable enums.
* HELPERS: enumClasses
*/
// TESTCASE NUMBER: 1
fun case_1(value_1: _EnumClass?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
_EnumClass.EAST -> ""
_EnumClass.SOUTH -> ""
_EnumClass.NORTH -> ""
_EnumClass.WEST -> ""
fun case_1(value_1: EnumClass?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
EnumClass.EAST -> ""
EnumClass.SOUTH -> ""
EnumClass.NORTH -> ""
EnumClass.WEST -> ""
}
// TESTCASE NUMBER: 2
fun case_2(value_1: _EnumClass?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
_EnumClass.EAST -> ""
_EnumClass.SOUTH -> ""
_EnumClass.NORTH -> ""
fun case_2(value_1: EnumClass?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
EnumClass.EAST -> ""
EnumClass.SOUTH -> ""
EnumClass.NORTH -> ""
null -> ""
}
// TESTCASE NUMBER: 3
fun case_3(value_1: _EnumClass?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
_EnumClass.EAST, null, _EnumClass.SOUTH, _EnumClass.NORTH -> ""
fun case_3(value_1: EnumClass?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
EnumClass.EAST, null, EnumClass.SOUTH, EnumClass.NORTH -> ""
}
// 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
fun case_5(value_1: _EnumClassSingle?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
_EnumClassSingle.EVERYTHING -> ""
fun case_5(value_1: EnumClassSingle?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
EnumClassSingle.EVERYTHING -> ""
}
// 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 -> ""
}
@@ -1,5 +1,3 @@
// !WITH_ENUM_CLASSES
// !WITH_SEALED_CLASSES
/*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -8,23 +6,24 @@
* PLACE: when-expression -> paragraph 11 -> sentence 1
* NUMBER: 3
* DESCRIPTION: Check when exhaustive via else entry (when with bound value, redundant else).
* HELPERS: enumClasses, sealedClasses
*/
// TESTCASE NUMBER: 1
fun case_1(value_1: _EnumClass): String = when (value_1) {
_EnumClass.EAST -> ""
_EnumClass.NORTH -> ""
_EnumClass.SOUTH -> ""
_EnumClass.WEST -> ""
fun case_1(value_1: EnumClass): String = when (value_1) {
EnumClass.EAST -> ""
EnumClass.NORTH -> ""
EnumClass.SOUTH -> ""
EnumClass.WEST -> ""
<!REDUNDANT_ELSE_IN_WHEN!>else<!> -> ""
}
// TESTCASE NUMBER: 2
fun case_2(value_1: _EnumClass?): String = when (value_1) {
_EnumClass.EAST -> ""
_EnumClass.NORTH -> ""
_EnumClass.SOUTH -> ""
_EnumClass.WEST -> ""
fun case_2(value_1: EnumClass?): String = when (value_1) {
EnumClass.EAST -> ""
EnumClass.NORTH -> ""
EnumClass.SOUTH -> ""
EnumClass.WEST -> ""
null -> ""
<!REDUNDANT_ELSE_IN_WHEN!>else<!> -> ""
}
@@ -45,31 +44,31 @@ fun case_4(value_1: Boolean?): String = when (value_1) {
}
// TESTCASE NUMBER: 5
fun case_5(value_1: _SealedClass): String = when (value_1) {
is _SealedChild1 -> ""
is _SealedChild2 -> ""
is _SealedChild3 -> ""
fun case_5(value_1: SealedClass): String = when (value_1) {
is SealedChild1 -> ""
is SealedChild2 -> ""
is SealedChild3 -> ""
<!REDUNDANT_ELSE_IN_WHEN!>else<!> -> ""
}
// TESTCASE NUMBER: 6
fun case_6(value_1: _SealedClass?): String = when (value_1) {
is _SealedChild1 -> ""
is _SealedChild2 -> ""
is _SealedChild3 -> ""
fun case_6(value_1: SealedClass?): String = when (value_1) {
is SealedChild1 -> ""
is SealedChild2 -> ""
is SealedChild3 -> ""
null -> ""
<!REDUNDANT_ELSE_IN_WHEN!>else<!> -> ""
}
// TESTCASE NUMBER: 7
fun case_7(value_1: _SealedClassSingle): String = when (value_1) {
<!USELESS_IS_CHECK!>is _SealedClassSingle<!> -> ""
fun case_7(value_1: SealedClassSingle): String = when (value_1) {
<!USELESS_IS_CHECK!>is SealedClassSingle<!> -> ""
<!REDUNDANT_ELSE_IN_WHEN!>else<!> -> ""
}
// TESTCASE NUMBER: 8
fun case_8(value_1: _SealedClassSingle?): String = when (value_1) {
is _SealedClassSingle -> ""
fun case_8(value_1: SealedClassSingle?): String = when (value_1) {
is SealedClassSingle -> ""
null -> ""
<!REDUNDANT_ELSE_IN_WHEN!>else<!> -> ""
}
@@ -1,5 +1,4 @@
// !DIAGNOSTICS: -UNUSED_EXPRESSION
// !WITH_SEALED_CLASSES
/*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -8,59 +7,60 @@
* PLACE: when-expression -> paragraph 11 -> sentence 6
* NUMBER: 1
* DESCRIPTION: Check when exhaustive when possible subtypes of the sealed class are covered.
* HELPERS: sealedClasses
*/
// TESTCASE NUMBER: 1
fun case_1(value_1: _SealedClass): Int = when (value_1) {
is _SealedChild1 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.number
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
fun case_1(value_1: SealedClass): Int = when (value_1) {
is SealedChild1 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.number
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
}
// TESTCASE NUMBER: 2
fun case_2(value_1: _SealedClass): String = when (value_1) {
<!USELESS_IS_CHECK!>is _SealedClass<!> -> ""
fun case_2(value_1: SealedClass): String = when (value_1) {
<!USELESS_IS_CHECK!>is SealedClass<!> -> ""
}
// TESTCASE NUMBER: 3
fun case_3(value_1: _SealedClassWithMethods): String = when (value_1) {
is _SealedWithMethodsChild1 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.m1()
is _SealedWithMethodsChild2 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.m2()
is _SealedWithMethodsChild3 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.m3()
fun case_3(value_1: SealedClassWithMethods): String = when (value_1) {
is SealedWithMethodsChild1 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.m1()
is SealedWithMethodsChild2 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.m2()
is SealedWithMethodsChild3 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.m3()
}
// TESTCASE NUMBER: 4
fun case_4(value_1: _SealedClassWithObjects): String = when (value_1) {
_SealedWithObjectsChild1 -> ""
_SealedWithObjectsChild2 -> ""
_SealedWithObjectsChild3 -> ""
fun case_4(value_1: SealedClassWithObjects): String = when (value_1) {
SealedWithObjectsChild1 -> ""
SealedWithObjectsChild2 -> ""
SealedWithObjectsChild3 -> ""
}
// TESTCASE NUMBER: 5
fun case_5(value_1: _SealedClassMixed): String = when (value_1) {
is _SealedMixedChild1 -> ""
is _SealedMixedChild2 -> ""
is _SealedMixedChild3 -> ""
_SealedMixedChildObject1 -> ""
_SealedMixedChildObject2 -> ""
_SealedMixedChildObject3 -> ""
fun case_5(value_1: SealedClassMixed): String = when (value_1) {
is SealedMixedChild1 -> ""
is SealedMixedChild2 -> ""
is SealedMixedChild3 -> ""
SealedMixedChildObject1 -> ""
SealedMixedChildObject2 -> ""
SealedMixedChildObject3 -> ""
}
/*
* TESTCASE NUMBER: 6
* DISCUSSION: is it correct that objects can be checked using the type checking operator?
*/
fun case_6(value_1: _SealedClassMixed): String = when (value_1) {
is _SealedMixedChild1 -> ""
is _SealedMixedChild2 -> ""
is _SealedMixedChild3 -> ""
is _SealedMixedChildObject1 -> ""
is _SealedMixedChildObject2 -> ""
is _SealedMixedChildObject3 -> ""
fun case_6(value_1: SealedClassMixed): String = when (value_1) {
is SealedMixedChild1 -> ""
is SealedMixedChild2 -> ""
is SealedMixedChild3 -> ""
is SealedMixedChildObject1 -> ""
is SealedMixedChildObject2 -> ""
is SealedMixedChildObject3 -> ""
}
// TESTCASE NUMBER: 7
fun case_7(value_1: _SealedClassEmpty): String = when (value_1) {
fun case_7(value_1: SealedClassEmpty): String = when (value_1) {
else -> ""
}
@@ -69,8 +69,8 @@ fun case_7(value_1: _SealedClassEmpty): String = when (value_1) {
* UNEXPECTED BEHAVIOUR: must be exhaustive
* ISSUES: KT-22996
*/
fun case_8(value: _SealedClass?): String = <!NO_ELSE_IN_WHEN!>when<!> (value) {
is _SealedChild1, !is _SealedChild3?, <!USELESS_IS_CHECK!>is _SealedChild3?<!> -> ""
fun case_8(value: SealedClass?): String = <!NO_ELSE_IN_WHEN!>when<!> (value) {
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
* ISSUES: KT-22996
*/
fun case_9(value: _SealedClass?): String = <!NO_ELSE_IN_WHEN!>when<!> (value) {
is _SealedChild1, !is _SealedChild3 -> ""
<!USELESS_IS_CHECK!>is _SealedChild3?<!> -> ""
fun case_9(value: SealedClass?): String = <!NO_ELSE_IN_WHEN!>when<!> (value) {
is SealedChild1, !is SealedChild3 -> ""
<!USELESS_IS_CHECK!>is SealedChild3?<!> -> ""
}
@@ -1,4 +1,3 @@
// !WITH_ENUM_CLASSES
/*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -7,17 +6,18 @@
* PLACE: when-expression -> paragraph 11 -> sentence 7
* NUMBER: 1
* DESCRIPTION: Check when exhaustive when all enumerated values are checked.
* HELPERS: enumClasses
*/
// TESTCASE NUMBER: 1
fun case_1(dir: _EnumClass): String = when (dir) {
_EnumClass.EAST -> ""
_EnumClass.NORTH -> ""
_EnumClass.SOUTH -> ""
_EnumClass.WEST -> ""
fun case_1(dir: EnumClass): String = when (dir) {
EnumClass.EAST -> ""
EnumClass.NORTH -> ""
EnumClass.SOUTH -> ""
EnumClass.WEST -> ""
}
// TESTCASE NUMBER: 2
fun case_2(value_1: _EnumClassSingle): String = when (value_1) {
_EnumClassSingle.EVERYTHING -> ""
fun case_2(value_1: EnumClassSingle): String = when (value_1) {
EnumClassSingle.EVERYTHING -> ""
}
@@ -1,4 +1,3 @@
// !WITH_ENUM_CLASSES
/*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -7,20 +6,21 @@
* PLACE: when-expression -> paragraph 11 -> sentence 8
* NUMBER: 2
* DESCRIPTION: Check when exhaustive when enumerated values are checked and contains a null check.
* HELPERS: enumClasses
*/
// TESTCASE NUMBER: 1
fun case_1(value_1: _EnumClass?): String = when (value_1) {
_EnumClass.EAST -> ""
_EnumClass.NORTH -> ""
_EnumClass.SOUTH -> ""
_EnumClass.WEST -> ""
fun case_1(value_1: EnumClass?): String = when (value_1) {
EnumClass.EAST -> ""
EnumClass.NORTH -> ""
EnumClass.SOUTH -> ""
EnumClass.WEST -> ""
null -> ""
}
// TESTCASE NUMBER: 2
fun case_2(value_1: _EnumClassSingle?): String = when (value_1) {
_EnumClassSingle.EVERYTHING -> ""
fun case_2(value_1: EnumClassSingle?): String = when (value_1) {
EnumClassSingle.EVERYTHING -> ""
null -> ""
}
@@ -29,6 +29,6 @@ fun case_2(value_1: _EnumClassSingle?): String = when (value_1) {
* UNEXPECTED BEHAVIOUR
* 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 -> ""
}
@@ -1,4 +1,3 @@
// !WITH_SEALED_CLASSES
/*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -7,46 +6,47 @@
* PLACE: when-expression -> paragraph 11 -> sentence 8
* NUMBER: 3
* DESCRIPTION: Check when exhaustive when possible subtypes of the sealed class are covered and contains a null check.
* HELPERS: sealedClasses
*/
// TESTCASE NUMBER: 1
fun case_1(value_1: _SealedClass?): Int = when (value_1) {
is _SealedChild1 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.number
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
fun case_1(value_1: SealedClass?): Int = when (value_1) {
is SealedChild1 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.number
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
null -> 0
}
// TESTCASE NUMBER: 2
fun case_2(value_1: _SealedClass?): String = when (value_1) {
is _SealedClass -> ""
fun case_2(value_1: SealedClass?): String = when (value_1) {
is SealedClass -> ""
null -> ""
}
// TESTCASE NUMBER: 3
fun case_3(value_1: _SealedClassWithMethods?): String = when (value_1) {
is _SealedWithMethodsChild1 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.m1()
is _SealedWithMethodsChild2 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.m2()
is _SealedWithMethodsChild3 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.m3()
fun case_3(value_1: SealedClassWithMethods?): String = when (value_1) {
is SealedWithMethodsChild1 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.m1()
is SealedWithMethodsChild2 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.m2()
is SealedWithMethodsChild3 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.m3()
null -> ""
}
// TESTCASE NUMBER: 4
fun case_4(value_1: _SealedClassWithObjects?): String = when (value_1) {
_SealedWithObjectsChild1 -> ""
_SealedWithObjectsChild2 -> ""
_SealedWithObjectsChild3 -> ""
fun case_4(value_1: SealedClassWithObjects?): String = when (value_1) {
SealedWithObjectsChild1 -> ""
SealedWithObjectsChild2 -> ""
SealedWithObjectsChild3 -> ""
null -> ""
}
// TESTCASE NUMBER: 5
fun case_5(value_1: _SealedClassMixed?): String = when (value_1) {
is _SealedMixedChild1 -> ""
is _SealedMixedChild2 -> ""
is _SealedMixedChild3 -> ""
_SealedMixedChildObject1 -> ""
_SealedMixedChildObject2 -> ""
_SealedMixedChildObject3 -> ""
fun case_5(value_1: SealedClassMixed?): String = when (value_1) {
is SealedMixedChild1 -> ""
is SealedMixedChild2 -> ""
is SealedMixedChild3 -> ""
SealedMixedChildObject1 -> ""
SealedMixedChildObject2 -> ""
SealedMixedChildObject3 -> ""
null -> ""
}
@@ -54,13 +54,13 @@ fun case_5(value_1: _SealedClassMixed?): String = when (value_1) {
* TESTCASE NUMBER: 6
* DISCUSSION: is it correct that objects can be checked using the type checking operator?
*/
fun case_6(value_1: _SealedClassMixed?): String = when (value_1) {
is _SealedMixedChild1 -> ""
is _SealedMixedChild2 -> ""
is _SealedMixedChild3 -> ""
is _SealedMixedChildObject1 -> ""
is _SealedMixedChildObject2 -> ""
is _SealedMixedChildObject3 -> ""
fun case_6(value_1: SealedClassMixed?): String = when (value_1) {
is SealedMixedChild1 -> ""
is SealedMixedChild2 -> ""
is SealedMixedChild3 -> ""
is SealedMixedChildObject1 -> ""
is SealedMixedChildObject2 -> ""
is SealedMixedChildObject3 -> ""
null -> ""
}
@@ -69,6 +69,6 @@ fun case_6(value_1: _SealedClassMixed?): String = when (value_1) {
* UNEXPECTED BEHAVIOUR: must be exhaustive
* 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 -> ""
}
@@ -1,4 +1,3 @@
// !WITH_BASIC_TYPES
/*
* KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE)
@@ -7,10 +6,11 @@
* PLACE: when-expression -> paragraph 3 -> sentence 2
* NUMBER: 1
* DESCRIPTION: 'When' without bound value and with not boolean condition in 'when condition'.
* HELPERS: typesProvider
*/
// 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 {
<!TYPE_MISMATCH!>.012f / value_1<!> -> return ""
<!TYPE_MISMATCH!>"$value_2..."<!> -> return ""
@@ -1,4 +1,3 @@
// !WITH_BASIC_TYPES
/*
* KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE)
@@ -7,14 +6,15 @@
* PLACE: when-expression -> paragraph 3 -> sentence 2
* NUMBER: 2
* DESCRIPTION: 'When' without bound value and not allowed comma in when entry.
* HELPERS: typesProvider, classes
*/
// TESTCASE NUMBER: 1
fun case_1(value_1: _BasicTypesProvider) {
fun case_1(value_1: TypesProvider) {
when {
getBoolean()<!COMMA_IN_WHEN_CONDITION_WITHOUT_ARGUMENT!>,<!> value_1.getBoolean() -> 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<!>
@@ -1,7 +1,4 @@
// !DIAGNOSTICS: -UNUSED_EXPRESSION -DEBUG_INFO_SMARTCAST
// !WITH_BASIC_TYPES
// !WITH_CLASSES
// !WITH_FUNCTIONS
/*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -10,6 +7,7 @@
* PLACE: when-expression -> paragraph 3 -> sentence 1
* NUMBER: 1
* DESCRIPTION: 'When' without bound value and with different variants of expressions in the control structure body.
* HELPERS: typesProvider, classes, functions
*/
// TESTCASE NUMBER: 1
@@ -25,11 +23,11 @@ fun case_1(value_1: Int) {
}
// 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 == 1 -> -.09 % 10L
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 == 2 -> !value_2
value_1 == 3 -> getBoolean() && value_2
value_1 == 5 -> getChar(10) != 'a'
value_1 == 6 -> getList() === getAny()
value_1 == 5 -> getChar() != 'a'
value_1 == 6 -> Out<Int>() === getAny()
value_1 == 7 -> value_3 <= 11
}
}
@@ -145,8 +143,8 @@ fun case_11(value_1: Int) {
// TESTCASE NUMBER: 12
fun case_12(value_1: Int, value_2: Collection<Int>, value_3: Collection<Int>?) {
when {
value_1 == 1 -> value_2 as MutableList<Int>
value_1 == 2 -> value_2 as? MutableList<Int>
value_1 == 1 -> value_2 as List<Int>
value_1 == 2 -> value_2 as? List<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>
}
@@ -185,11 +183,11 @@ fun case_15(value_1: Int, value_2: List<Int>, value_3: List<List<List<List<Int>>
}
// 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() { } }
when {
value_1 == 1 -> _funWithoutArgs()
value_1 == 1 -> funWithoutArgs()
value_1 == 2 -> __fun_1()()
value_1 == 3 -> value_2.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
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 == 1 -> value_2.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)
@@ -9,6 +6,7 @@
* PLACE: when-expression -> paragraph 3 -> sentence 2
* NUMBER: 1
* 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
@@ -16,8 +14,8 @@ fun case_1(value_1: Boolean, value_2: Long): Int {
return when {
value_1 -> 1
getBoolean() && value_1 -> 2
getChar(10) != 'a' -> 3
getList() === getAny() -> 4
getChar() != 'a' -> 3
Out<Int>() === getAny() -> 4
value_2 <= 11 -> 5
!value_1 -> 6
else -> 7
@@ -28,12 +26,12 @@ fun case_1(value_1: Boolean, value_2: Long): Int {
* TESTCASE NUMBER: 2
* 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 {
value_1 == _EnumClass.NORTH -> {}
value_1 == _EnumClass.SOUTH -> {}
value_1 == _EnumClass.WEST -> {}
value_1 == _EnumClass.EAST -> {}
value_1 == EnumClass.NORTH -> {}
value_1 == EnumClass.SOUTH -> {}
value_1 == EnumClass.WEST -> {}
value_1 == EnumClass.EAST -> {}
}
}
@@ -105,11 +103,11 @@ fun case_7(value_1: Any) {
* TESTCASE NUMBER: 8
* 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 {
value_1 is _SealedChild1 -> {}
value_1 is _SealedChild2 -> {}
value_1 is _SealedChild3 -> {}
value_1 is SealedChild1 -> {}
value_1 is SealedChild2 -> {}
value_1 is SealedChild3 -> {}
}
}
@@ -1,4 +1,3 @@
// !WITH_BASIC_TYPES
/*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -9,10 +8,11 @@
* DESCRIPTION: 'When' without bound value and with Nothing in condition (subtype of Boolean).
* DISCUSSION
* ISSUES: KT-25948
* HELPERS: typesProvider
*/
// TESTCASE NUMBER: 1
fun case_1(<!UNUSED_PARAMETER!>value_1<!>: _BasicTypesProvider) {
fun case_1(<!UNUSED_PARAMETER!>value_1<!>: TypesProvider) {
when {
return -> <!UNREACHABLE_CODE!>return<!>
<!UNREACHABLE_CODE!>return == return -> return<!>
@@ -23,7 +23,7 @@ fun case_1(<!UNUSED_PARAMETER!>value_1<!>: _BasicTypesProvider) {
}
// TESTCASE NUMBER: 2
fun case_2(<!UNUSED_PARAMETER!>value_1<!>: _BasicTypesProvider) {
fun case_2(<!UNUSED_PARAMETER!>value_1<!>: TypesProvider) {
when {
throw Exception() -> <!UNREACHABLE_CODE!>return<!>
<!UNREACHABLE_CODE!>(throw Exception()) == (throw Exception()) -> return<!>
@@ -34,7 +34,7 @@ fun case_2(<!UNUSED_PARAMETER!>value_1<!>: _BasicTypesProvider) {
}
// TESTCASE NUMBER: 3
fun case_3(<!UNUSED_PARAMETER!>value_1<!>: _BasicTypesProvider) {
fun case_3(<!UNUSED_PARAMETER!>value_1<!>: TypesProvider) {
loop1@ while (true) {
loop2@ while (true) {
loop3@ while (true) {
@@ -49,7 +49,7 @@ fun case_3(<!UNUSED_PARAMETER!>value_1<!>: _BasicTypesProvider) {
}
// TESTCASE NUMBER: 4
fun case_4(<!UNUSED_PARAMETER!>value_1<!>: _BasicTypesProvider): String {
fun case_4(<!UNUSED_PARAMETER!>value_1<!>: TypesProvider): String {
loop1@ while (true) {
loop2@ while (true) {
loop3@ while (true) {
@@ -64,7 +64,7 @@ fun case_4(<!UNUSED_PARAMETER!>value_1<!>: _BasicTypesProvider): String {
}
// 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 {
value_1 -> <!UNREACHABLE_CODE!>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
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) {
loop2@ while (true) {
loop3@ while (true) {
@@ -1,7 +1,4 @@
// !DIAGNOSTICS: -UNUSED_EXPRESSION
// !WITH_BASIC_TYPES
// !WITH_FUNCTIONS
// !WITH_CLASSES
/*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -10,6 +7,7 @@
* PLACE: when-expression -> paragraph 6 -> sentence 1
* NUMBER: 1
* DESCRIPTION: 'When' with bound value and with different variants of expressions in the control structure body.
* HELPERS: typesProvider, classes, functions
*/
// TESTCASE NUMBER: 1
@@ -25,11 +23,11 @@ fun case_1(value_1: Int) {
}
// 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) {
1 -> -.09 % 10L
3 -> value_2 / -5
2 -> value_3.getChar(99) - 11 + 90
2 -> value_3.getChar() - 11 + 90
4 -> 100
}
}
@@ -40,7 +38,7 @@ fun case_3(value_1: Int, value_2: Boolean, value_3: Long) {
1 -> value_2
2 -> !value_2
3 -> getBoolean() && value_2
5 -> getChar(10) != 'a'
5 -> getChar() != 'a'
6 -> getList() === getAny()
7 -> value_3 <= 11
}
@@ -148,8 +146,8 @@ fun case_11(value_1: Int) {
// TESTCASE NUMBER: 12
fun case_12(value_1: Int, value_2: Collection<Int>, value_3: Collection<Int>?) {
when (value_1) {
1 -> value_2 as MutableList<Int>
2 -> value_2 as? MutableList<Int>
1 -> value_2 as List<Int>
2 -> value_2 as? List<Int>
3 -> value_3 <!UNCHECKED_CAST!>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
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() { } }
when (value_1) {
1 -> _funWithoutArgs()
1 -> funWithoutArgs()
2 -> __fun_1()()
3 -> value_2.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
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) {
1 -> value_2.prop_1
2 -> value_3?.prop_1
@@ -1,4 +1,3 @@
// !WITH_CLASSES
/*
* KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE)
@@ -7,12 +6,13 @@
* PLACE: when-expression -> paragraph 7 -> sentence 1
* NUMBER: 1
* DESCRIPTION: 'When' with bound value and type test condition (without companion object in classes), but without type checking operator.
* HELPERS: classes
*/
// TESTCASE NUMBER: 1
fun case_1(value_1: Any): String {
when (value_1) {
<!NO_COMPANION_OBJECT!>_EmptyClass<!> -> return ""
<!NO_COMPANION_OBJECT!>EmptyClass<!> -> return ""
}
return ""
@@ -1,4 +1,3 @@
// !WITH_CLASSES
/*
* KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE)
@@ -7,6 +6,7 @@
* PLACE: when-expression -> paragraph 7 -> sentence 1
* NUMBER: 2
* DESCRIPTION: 'When' with bound value and type test condition on the non-type operand of the type checking operator.
* HELPERS: classes
*/
// TESTCASE NUMBER: 1
@@ -1,4 +1,3 @@
// !WITH_BASIC_TYPES
/*
* KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE)
@@ -7,10 +6,11 @@
* PLACE: when-expression -> paragraph 7 -> sentence 3
* NUMBER: 1
* DESCRIPTION: 'When' with bound value and 'when condition' with range expression, but without containment checking operator.
* HELPERS: typesProvider
*/
// 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) {
<!INCOMPATIBLE_TYPES!>-1000L..100<!> -> return ""
<!INCOMPATIBLE_TYPES!>value_2.getInt()..getLong()<!> -> return ""
@@ -1,5 +1,4 @@
// !DIAGNOSTICS: -UNUSED_EXPRESSION
// !WITH_CLASSES
/*
* KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE)
@@ -8,10 +7,11 @@
* PLACE: when-expression -> paragraph 7 -> sentence 3
* NUMBER: 2
* DESCRIPTION: 'When' with bound value and 'when condition' with contains operator and type without defined contains operator.
* HELPERS: classes
*/
// 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) {
<!TYPE_MISMATCH_IN_RANGE, UNRESOLVED_REFERENCE_WRONG_RECEIVER!>in<!> value_2 -> 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)
@@ -8,6 +6,7 @@
* PLACE: when-expression -> paragraph 7 -> sentence 1
* NUMBER: 1
* DESCRIPTION: 'When' with bound value and type test condition.
* HELPERS: classes, objects
*/
// TESTCASE NUMBER: 1
@@ -61,8 +60,8 @@ fun case_5(value_1: Any?): String = when (value_1) {
// TESTCASE NUMBER: 6
fun case_6(value_1: Any): String {
when (value_1) {
is _EmptyObject -> return ""
is _ClassWithCompanionObject.Companion -> return ""
is EmptyObject -> return ""
is ClassWithCompanionObject.Companion -> return ""
}
return ""
@@ -1,6 +1,3 @@
// !WITH_SEALED_CLASSES
// !WITH_CLASSES
// !WITH_OBJECTS
/*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -9,13 +6,14 @@
* PLACE: when-expression -> paragraph 7 -> sentence 1
* NUMBER: 2
* DESCRIPTION: 'When' with bound value and type test condition (invert type checking operator).
* HELPERS: classes, sealedClasses, objects
*/
// TESTCASE NUMBER: 1
fun case_1(value_1: _SealedClass) = when (value_1) {
!is _SealedChild1 -> {}
!is _SealedChild2 -> {}
!is _SealedChild3 -> {}
fun case_1(value_1: SealedClass) = when (value_1) {
!is SealedChild1 -> {}
!is SealedChild2 -> {}
!is SealedChild3 -> {}
}
/*
@@ -23,16 +21,16 @@ fun case_1(value_1: _SealedClass) = when (value_1) {
* UNEXPECTED BEHAVIOUR
* ISSUES: KT-22996
*/
fun case_2(value_1: _SealedClass?): String = when (value_1) {
!is _SealedChild2 -> "" // including null
<!USELESS_IS_CHECK!>is _SealedChild2<!> -> ""
fun case_2(value_1: SealedClass?): String = when (value_1) {
!is SealedChild2 -> "" // including null
<!USELESS_IS_CHECK!>is SealedChild2<!> -> ""
null -> "" // redundant
}
// TESTCASE NUMBER: 3
fun case_3(value_1: _SealedClass?): String = when (value_1) {
!is _SealedChild2? -> "" // null isn't included
is _SealedChild2 -> ""
fun case_3(value_1: SealedClass?): String = when (value_1) {
!is SealedChild2? -> "" // null isn't included
is SealedChild2 -> ""
null -> ""
}
@@ -41,18 +39,18 @@ fun case_3(value_1: _SealedClass?): String = when (value_1) {
* UNEXPECTED BEHAVIOUR
* ISSUES: KT-22996
*/
fun case_4(value_1: _SealedClass?) {
fun case_4(value_1: SealedClass?) {
when (value_1) {
!is _SealedChild2 -> {} // including null
<!USELESS_IS_CHECK!>is _SealedChild2?<!> -> {} // redundant nullable type check
!is SealedChild2 -> {} // including null
<!USELESS_IS_CHECK!>is SealedChild2?<!> -> {} // redundant nullable type check
}
}
// TESTCASE NUMBER: 5
fun case_5(value_1: Any): String {
when (value_1) {
is _EmptyObject -> return ""
!is _ClassWithCompanionObject.Companion -> return ""
is EmptyObject -> return ""
!is ClassWithCompanionObject.Companion -> return ""
}
return ""
@@ -1,6 +1,3 @@
// !WITH_CLASSES
// !WITH_SEALED_CLASSES
// !WITH_OBJECTS
/*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -9,6 +6,7 @@
* PLACE: when-expression -> paragraph 7 -> sentence 1
* NUMBER: 3
* DESCRIPTION: 'When' with bound value and enumaration of type test conditions.
* HELPERS: classes, sealedClasses, objects
*/
// TESTCASE NUMBER: 1
@@ -21,8 +19,8 @@ fun case_1(value_1: Any) = when (value_1) {
// TESTCASE NUMBER: 2
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 Double, is Boolean, is _ClassWithCompanionObject.Companion -> ""
is Float, is Char, is SealedClass? -> "" // if value is null then this branch will be executed
is Double, is Boolean, is ClassWithCompanionObject.Companion -> ""
else -> ""
}
@@ -33,7 +31,7 @@ fun case_2(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 _SealedChild2, is Boolean?, is String -> "" // redundant nullable type check
is SealedChild2, is Boolean?, is String -> "" // redundant nullable type check
else -> ""
}
@@ -44,7 +42,7 @@ fun case_3(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 _SealedChild1, is Boolean, is String -> ""
is SealedChild1, is Boolean, is String -> ""
else -> ""
}
@@ -56,7 +54,7 @@ fun case_4(value_1: Any?) = when (value_1) {
fun case_5(value_1: Any?): String {
when (value_1) {
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
else -> return ""
}
@@ -70,7 +68,7 @@ fun case_5(value_1: Any?): String {
fun case_6(value_1: Any?): String {
when (value_1) {
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 ""
}
}
@@ -1,4 +1,3 @@
// !WITH_SEALED_CLASSES
/*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -7,32 +6,33 @@
* PLACE: when-expression -> paragraph 7 -> sentence 1
* NUMBER: 4
* DESCRIPTION: 'When' with bound value and enumaration of type test conditions (with invert type checking operator).
* HELPERS: sealedClasses
*/
// TESTCASE NUMBER: 1
fun case_1(value_1: _SealedClass): String = when (value_1) {
is _SealedChild1, !is _SealedChild3 -> ""
<!USELESS_IS_CHECK!>is _SealedChild3<!> -> ""
fun case_1(value_1: SealedClass): String = when (value_1) {
is SealedChild1, !is SealedChild3 -> ""
<!USELESS_IS_CHECK!>is SealedChild3<!> -> ""
}
// TESTCASE NUMBER: 2
fun case_2(value_1: _SealedClass) = when (value_1) {
!is _SealedChild1, !is _SealedChild2, !is _SealedChild3 -> {}
fun case_2(value_1: SealedClass) = when (value_1) {
!is SealedChild1, !is SealedChild2, !is SealedChild3 -> {}
}
// TESTCASE NUMBER: 3
fun case_3(value_1: _SealedClass): String = when (value_1) {
is _SealedChild2, !is _SealedChild2 -> ""
fun case_3(value_1: SealedClass): String = when (value_1) {
is SealedChild2, !is SealedChild2 -> ""
}
// TESTCASE NUMBER: 4
fun case_4(value_1: _SealedClass): String = when (value_1) {
!is _SealedChild1, <!USELESS_IS_CHECK!>is _SealedChild1<!> -> ""
fun case_4(value_1: SealedClass): String = when (value_1) {
!is SealedChild1, <!USELESS_IS_CHECK!>is SealedChild1<!> -> ""
}
// TESTCASE NUMBER: 5
fun case_5(value_1: Any?): String = when (value_1) {
is _SealedChild3, !is _SealedChild3? -> ""
is SealedChild3, !is SealedChild3? -> ""
else -> ""
}
@@ -42,8 +42,8 @@ fun case_5(value_1: Any?): String = when (value_1) {
* ISSUES: KT-22996
*/
fun case_6(value_1: Any?): String = when (value_1) {
is Boolean?, !is _SealedChild3 -> "" // double nullable type check in the one branch
<!USELESS_IS_CHECK!>is _SealedChild3<!> -> ""
is Boolean?, !is SealedChild3 -> "" // double nullable type check in the one branch
<!USELESS_IS_CHECK!>is SealedChild3<!> -> ""
else -> ""
}
@@ -53,6 +53,6 @@ fun case_6(value_1: Any?): String = when (value_1) {
* ISSUES: KT-22996
*/
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 -> ""
}
@@ -1,5 +1,3 @@
// !WITH_BASIC_TYPES
// !WITH_CLASSES
/*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -8,6 +6,7 @@
* PLACE: when-expression -> paragraph 7 -> sentence 3
* NUMBER: 1
* DESCRIPTION: 'When' with bound value and containment operator.
* HELPERS: typesProvider, classes
*/
// TESTCASE NUMBER: 1
@@ -23,9 +22,9 @@ fun case_1(value_1: Int, value_2: Int, value_3: Short): String {
}
// 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_3.getIntArray() -> ""
else -> ""
}
@@ -1,5 +1,3 @@
// !WITH_BASIC_TYPES
// !WITH_CLASSES
/*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -8,6 +6,7 @@
* PLACE: when-expression -> paragraph 7 -> sentence 3
* NUMBER: 2
* DESCRIPTION: 'When' with bound value and enumeration of the containment operators.
* HELPERS: typesProvider, classes
*/
// TESTCASE NUMBER: 1
@@ -21,7 +20,7 @@ fun case_1(value_1: Int, value_2: Int, value_3: Short): String {
}
// TESTCASE NUMBER: 2
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) -> ""
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() -> ""
else -> ""
}
@@ -1,6 +1,3 @@
// !WITH_BASIC_TYPES
// !WITH_FUNCTIONS
// !WITH_CLASSES
/*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -9,6 +6,7 @@
* PLACE: when-expression -> paragraph 7 -> sentence 5
* NUMBER: 1
* DESCRIPTION: 'When' with enumeration of the different variants of expressions in 'when condition'.
* HELPERS: typesProvider, classes, functions
*/
// TESTCASE NUMBER: 1
@@ -28,7 +26,7 @@ fun case_2(value_1: Number, value_2: Int) {
when (value_1) {
-.09 % 10L -> {}
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 -> {}
getBoolean() && value_2 -> {}
getChar(10) != 'a' -> {}
getChar() != 'a' -> {}
getList() === getAny() -> {}
value_3 <= 11 -> {}
}
@@ -113,8 +111,8 @@ fun case_9(value_1: Any) {
// TESTCASE NUMBER: 10
fun case_10(value_1: Collection<Int>, value_2: Collection<Int>, value_3: Collection<Int>?) {
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> -> {}
}
@@ -153,11 +151,11 @@ fun case_13(value_1: Int, value_2: List<Int>, value_3: List<List<List<List<Int>>
}
// 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() { } }
when (value_1) {
_funWithoutArgs() -> {}
funWithoutArgs() -> {}
__fun_1()() -> {}
value_2.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
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) {
value_2.prop_1 -> {}
value_3?.prop_2 -> {}
@@ -1,6 +1,3 @@
// !WITH_BASIC_TYPES
// !WITH_CLASSES
// !WITH_FUNCTIONS
/*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -9,6 +6,7 @@
* PLACE: when-expression -> paragraph 7 -> sentence 5
* NUMBER: 2
* DESCRIPTION: 'When' with different variants of the arithmetic expressions (additive expression and multiplicative expression) in 'when condition'.
* HELPERS: typesProvider, classes, functions
*/
// TESTCASE NUMBER: 1
@@ -22,14 +20,14 @@ fun case_1(value_1: Any?) {
// TESTCASE NUMBER: 2
fun case_2(value_1: Number, value_2: Int) {
when (value_1) {
-.09 % 10L, value_2 / -5, getByte(99) - 11 + 90 -> {}
-.09 % 10L, value_2 / -5, getByte() - 11 + 90 -> {}
}
}
// TESTCASE NUMBER: 3
fun case_3(value_1: Boolean, value_2: Boolean, value_3: Long) {
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 -> {}
}
}
@@ -90,7 +88,7 @@ fun case_9(value_1: Any) {
// TESTCASE NUMBER: 10
fun case_10(value_1: Collection<Int>, value_2: Collection<Int>, value_3: Collection<Int>?) {
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> -> {}
}
}
@@ -123,17 +121,17 @@ fun case_13(value_1: Int, value_2: List<Int>, value_3: List<List<List<List<Int>>
}
// 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() { } }
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) -> {}
}
}
// 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) {
value_2.prop_1, value_3?.prop_2 -> {}
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
* 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) {
value_2.prop_1, <!DUPLICATE_LABEL_IN_WHEN!>value_3?.prop_1<!> -> {}
10 -> {}
@@ -1,5 +1,4 @@
// !CHECK_TYPE
// !WITH_CLASSES
/*
* KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE)
@@ -8,24 +7,25 @@
* PLACE: when-expression -> paragraph 9 -> sentence 1
* NUMBER: 1
* DESCRIPTION: 'When' least upper bound of the types check (when exhaustive via else branch).
* HELPERS: classes
*/
// TESTCASE NUMBER: 1
fun case_1(value_1: Int): String {
val whenValue = when {
value_1 == 0 -> _ClassLevel2()
value_1 > 0 && value_1 <= 10 -> _ClassLevel3()
value_1 > 10 && value_1 <= 100 -> _ClassLevel4()
else -> _ClassLevel5()
value_1 == 0 -> ClassLevel2()
value_1 > 0 && value_1 <= 10 -> ClassLevel3()
value_1 > 10 && value_1 <= 100 -> ClassLevel4()
else -> ClassLevel5()
}
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel1>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel3>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel4>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel5>() }
checkSubtype<_ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<_ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<_ClassLevel5>(<!TYPE_MISMATCH!>whenValue<!>)
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel1>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel3>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel4>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel5>() }
checkSubtype<ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<ClassLevel5>(<!TYPE_MISMATCH!>whenValue<!>)
return ""
}
@@ -33,19 +33,19 @@ fun case_1(value_1: Int): String {
// TESTCASE NUMBER: 2
fun case_2(value_1: Int): String {
val whenValue = when (value_1) {
0 -> _ClassLevel2()
1 -> _ClassLevel3()
2 -> _ClassLevel4()
else -> _ClassLevel5()
0 -> ClassLevel2()
1 -> ClassLevel3()
2 -> ClassLevel4()
else -> ClassLevel5()
}
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel1>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel3>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel4>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel5>() }
checkSubtype<_ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<_ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<_ClassLevel5>(<!TYPE_MISMATCH!>whenValue<!>)
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel1>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel3>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel4>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel5>() }
checkSubtype<ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<ClassLevel5>(<!TYPE_MISMATCH!>whenValue<!>)
return ""
}
@@ -1,6 +1,4 @@
// !CHECK_TYPE
// !WITH_ENUM_CLASSES
// !WITH_CLASSES
/*
* KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE)
@@ -9,58 +7,59 @@
* PLACE: when-expression -> paragraph 9 -> sentence 1
* NUMBER: 2
* DESCRIPTION: 'When' least upper bound of the types check (when exhaustive via enum).
* HELPERS: classes, enumClasses
*/
// TESTCASE NUMBER: 1
fun case_1(value_1: _EnumClass): String {
fun case_1(value_1: EnumClass): String {
val whenValue = when (value_1) {
_EnumClass.EAST -> _ClassLevel2()
_EnumClass.NORTH -> _ClassLevel3()
_EnumClass.SOUTH -> _ClassLevel4()
_EnumClass.WEST -> _ClassLevel5()
EnumClass.EAST -> ClassLevel2()
EnumClass.NORTH -> ClassLevel3()
EnumClass.SOUTH -> ClassLevel4()
EnumClass.WEST -> ClassLevel5()
}
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel1>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel3>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel4>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel5>() }
checkSubtype<_ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<_ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<_ClassLevel5>(<!TYPE_MISMATCH!>whenValue<!>)
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel1>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel3>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel4>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel5>() }
checkSubtype<ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<ClassLevel5>(<!TYPE_MISMATCH!>whenValue<!>)
return ""
}
// TESTCASE NUMBER: 2
fun case_2(value_1: _EnumClass?): String {
fun case_2(value_1: EnumClass?): String {
val whenValue = when (value_1) {
_EnumClass.EAST -> _ClassLevel2()
_EnumClass.NORTH -> _ClassLevel3()
_EnumClass.SOUTH -> _ClassLevel4()
_EnumClass.WEST -> _ClassLevel5()
null -> _ClassLevel6()
EnumClass.EAST -> ClassLevel2()
EnumClass.NORTH -> ClassLevel3()
EnumClass.SOUTH -> ClassLevel4()
EnumClass.WEST -> ClassLevel5()
null -> ClassLevel6()
}
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel1>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel3>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel4>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel5>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel6>() }
checkSubtype<_ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<_ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<_ClassLevel5>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<_ClassLevel6>(<!TYPE_MISMATCH!>whenValue<!>)
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel1>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel3>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel4>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel5>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel6>() }
checkSubtype<ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<ClassLevel5>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<ClassLevel6>(<!TYPE_MISMATCH!>whenValue<!>)
return ""
}
// TESTCASE NUMBER: 3
fun case_3(value_1: _EnumClass): String {
fun case_3(value_1: EnumClass): String {
val whenValue = when (value_1) {
_EnumClass.EAST -> <!IMPLICIT_CAST_TO_ANY!>10<!>
_EnumClass.NORTH -> <!IMPLICIT_CAST_TO_ANY!>""<!>
_EnumClass.SOUTH -> {<!IMPLICIT_CAST_TO_ANY!>{}<!>}
_EnumClass.WEST -> <!IMPLICIT_CAST_TO_ANY!>object<!> {}
EnumClass.EAST -> <!IMPLICIT_CAST_TO_ANY!>10<!>
EnumClass.NORTH -> <!IMPLICIT_CAST_TO_ANY!>""<!>
EnumClass.SOUTH -> {<!IMPLICIT_CAST_TO_ANY!>{}<!>}
EnumClass.WEST -> <!IMPLICIT_CAST_TO_ANY!>object<!> {}
}
whenValue checkType { <!TYPE_MISMATCH!>_<!><Int>() }
@@ -74,12 +73,12 @@ fun case_3(value_1: _EnumClass): String {
}
// TESTCASE NUMBER: 4
fun case_4(value_1: _EnumClass?): String {
fun case_4(value_1: EnumClass?): String {
val whenValue = when (value_1) {
_EnumClass.EAST -> <!IMPLICIT_CAST_TO_ANY!>10<!>
_EnumClass.NORTH -> <!IMPLICIT_CAST_TO_ANY!>""<!>
_EnumClass.SOUTH -> {<!IMPLICIT_CAST_TO_ANY!>{}<!>}
_EnumClass.WEST -> <!IMPLICIT_CAST_TO_ANY!>object<!> {}
EnumClass.EAST -> <!IMPLICIT_CAST_TO_ANY!>10<!>
EnumClass.NORTH -> <!IMPLICIT_CAST_TO_ANY!>""<!>
EnumClass.SOUTH -> {<!IMPLICIT_CAST_TO_ANY!>{}<!>}
EnumClass.WEST -> <!IMPLICIT_CAST_TO_ANY!>object<!> {}
null -> <!IMPLICIT_CAST_TO_ANY!>false<!>
}
@@ -1,5 +1,4 @@
// !CHECK_TYPE
// !WITH_CLASSES
/*
* KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE)
@@ -8,20 +7,21 @@
* PLACE: when-expression -> paragraph 9 -> sentence 1
* NUMBER: 3
* DESCRIPTION: 'When' least upper bound of the types check (when exhaustive via boolean bound value).
* HELPERS: classes
*/
// TESTCASE NUMBER: 1
fun case_1(value_1: Boolean): String {
val whenValue = when (value_1) {
true -> _ClassLevel2()
false -> _ClassLevel3()
true -> ClassLevel2()
false -> ClassLevel3()
}
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel4>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel3>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel1>() }
checkSubtype<_ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<_ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>)
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel4>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel3>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel1>() }
checkSubtype<ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>)
return ""
}
@@ -29,16 +29,16 @@ fun case_1(value_1: Boolean): String {
// TESTCASE NUMBER: 2
fun case_2(value_1: Boolean?): String {
val whenValue = when (value_1) {
true -> _ClassLevel2()
false -> _ClassLevel3()
null -> _ClassLevel4()
true -> ClassLevel2()
false -> ClassLevel3()
null -> ClassLevel4()
}
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel4>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel3>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel1>() }
checkSubtype<_ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<_ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>)
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel4>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel3>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel1>() }
checkSubtype<ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>)
return ""
}
@@ -1,6 +1,4 @@
// !CHECK_TYPE
// !WITH_SEALED_CLASSES
// !WITH_CLASSES
/*
* KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE)
@@ -9,51 +7,52 @@
* PLACE: when-expression -> paragraph 9 -> sentence 1
* NUMBER: 4
* DESCRIPTION: 'When' least upper bound of the types check (when exhaustive via sealed class).
* HELPERS: classes, sealedClasses
*/
// TESTCASE NUMBER: 1
fun case_1(value_1: _SealedClass): String {
fun case_1(value_1: SealedClass): String {
val whenValue = when (value_1) {
is _SealedChild1 -> _ClassLevel2()
is _SealedChild2 -> _ClassLevel3()
is _SealedChild3 -> _ClassLevel4()
is SealedChild1 -> ClassLevel2()
is SealedChild2 -> ClassLevel3()
is SealedChild3 -> ClassLevel4()
}
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel4>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel3>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel1>() }
checkSubtype<_ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<_ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>)
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel4>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel3>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel1>() }
checkSubtype<ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>)
return ""
}
// TESTCASE NUMBER: 2
fun case_2(value_1: _SealedClass?): String {
fun case_2(value_1: SealedClass?): String {
val whenValue = when (value_1) {
is _SealedChild1 -> _ClassLevel2()
is _SealedChild2 -> _ClassLevel3()
is _SealedChild3 -> _ClassLevel4()
null -> _ClassLevel5()
is SealedChild1 -> ClassLevel2()
is SealedChild2 -> ClassLevel3()
is SealedChild3 -> ClassLevel4()
null -> ClassLevel5()
}
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel5>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel4>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel3>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel1>() }
checkSubtype<_ClassLevel5>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<_ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<_ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>)
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel5>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel4>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel3>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel1>() }
checkSubtype<ClassLevel5>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>)
return ""
}
// TESTCASE NUMBER: 3
fun case_3(value_1: _SealedClass): String {
fun case_3(value_1: SealedClass): String {
val whenValue = when (value_1) {
is _SealedChild1 -> <!IMPLICIT_CAST_TO_ANY!>10<!>
is _SealedChild2 -> <!IMPLICIT_CAST_TO_ANY!>""<!>
is _SealedChild3 -> <!IMPLICIT_CAST_TO_ANY!>object<!> {}
is SealedChild1 -> <!IMPLICIT_CAST_TO_ANY!>10<!>
is SealedChild2 -> <!IMPLICIT_CAST_TO_ANY!>""<!>
is SealedChild3 -> <!IMPLICIT_CAST_TO_ANY!>object<!> {}
}
whenValue checkType { <!TYPE_MISMATCH!>_<!><Int>() }
@@ -65,11 +64,11 @@ fun case_3(value_1: _SealedClass): String {
}
// TESTCASE NUMBER: 4
fun case_4(value_1: _SealedClass?): String {
fun case_4(value_1: SealedClass?): String {
val whenValue = when (value_1) {
is _SealedChild1 -> <!IMPLICIT_CAST_TO_ANY!>10<!>
is _SealedChild2 -> <!IMPLICIT_CAST_TO_ANY!>""<!>
is _SealedChild3 -> <!IMPLICIT_CAST_TO_ANY!>object<!> {}
is SealedChild1 -> <!IMPLICIT_CAST_TO_ANY!>10<!>
is SealedChild2 -> <!IMPLICIT_CAST_TO_ANY!>""<!>
is SealedChild3 -> <!IMPLICIT_CAST_TO_ANY!>object<!> {}
null -> {<!IMPLICIT_CAST_TO_ANY!>{}<!>}
}
@@ -84,48 +83,48 @@ fun case_4(value_1: _SealedClass?): String {
}
// TESTCASE NUMBER: 5
fun case_5(value_1: _SealedClassWithObjects): String {
fun case_5(value_1: SealedClassWithObjects): String {
val whenValue = when (value_1) {
_SealedWithObjectsChild1 -> _ClassLevel2()
_SealedWithObjectsChild2 -> _ClassLevel3()
_SealedWithObjectsChild3 -> _ClassLevel4()
SealedWithObjectsChild1 -> ClassLevel2()
SealedWithObjectsChild2 -> ClassLevel3()
SealedWithObjectsChild3 -> ClassLevel4()
}
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel4>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel3>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel1>() }
checkSubtype<_ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<_ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>)
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel4>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel3>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel1>() }
checkSubtype<ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>)
return ""
}
// TESTCASE NUMBER: 6
fun case_6(value_1: _SealedClassWithObjects?): String {
fun case_6(value_1: SealedClassWithObjects?): String {
val whenValue = when (value_1) {
_SealedWithObjectsChild1 -> _ClassLevel2()
_SealedWithObjectsChild2 -> _ClassLevel3()
_SealedWithObjectsChild3 -> _ClassLevel4()
null -> _ClassLevel5()
SealedWithObjectsChild1 -> ClassLevel2()
SealedWithObjectsChild2 -> ClassLevel3()
SealedWithObjectsChild3 -> ClassLevel4()
null -> ClassLevel5()
}
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel5>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel4>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel3>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel1>() }
checkSubtype<_ClassLevel5>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<_ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<_ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>)
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel5>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel4>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel3>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel1>() }
checkSubtype<ClassLevel5>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>)
return ""
}
// TESTCASE NUMBER: 7
fun case_7(value_1: _SealedClassWithObjects): String {
fun case_7(value_1: SealedClassWithObjects): String {
val whenValue = when (value_1) {
_SealedWithObjectsChild1 -> <!IMPLICIT_CAST_TO_ANY!>10<!>
_SealedWithObjectsChild2 -> <!IMPLICIT_CAST_TO_ANY!>""<!>
_SealedWithObjectsChild3 -> <!IMPLICIT_CAST_TO_ANY!>object<!> {}
SealedWithObjectsChild1 -> <!IMPLICIT_CAST_TO_ANY!>10<!>
SealedWithObjectsChild2 -> <!IMPLICIT_CAST_TO_ANY!>""<!>
SealedWithObjectsChild3 -> <!IMPLICIT_CAST_TO_ANY!>object<!> {}
}
whenValue checkType { <!TYPE_MISMATCH!>_<!><Int>() }
@@ -137,11 +136,11 @@ fun case_7(value_1: _SealedClassWithObjects): String {
}
// TESTCASE NUMBER: 8
fun case_8(value_1: _SealedClassWithObjects?): String {
fun case_8(value_1: SealedClassWithObjects?): String {
val whenValue = when (value_1) {
_SealedWithObjectsChild1 -> <!IMPLICIT_CAST_TO_ANY!>10<!>
_SealedWithObjectsChild2 -> <!IMPLICIT_CAST_TO_ANY!>""<!>
_SealedWithObjectsChild3 -> <!IMPLICIT_CAST_TO_ANY!>object<!> {}
SealedWithObjectsChild1 -> <!IMPLICIT_CAST_TO_ANY!>10<!>
SealedWithObjectsChild2 -> <!IMPLICIT_CAST_TO_ANY!>""<!>
SealedWithObjectsChild3 -> <!IMPLICIT_CAST_TO_ANY!>object<!> {}
null -> {<!IMPLICIT_CAST_TO_ANY!>{}<!>}
}
@@ -156,19 +155,19 @@ fun case_8(value_1: _SealedClassWithObjects?): String {
}
// TESTCASE NUMBER: 9
fun case_9(value_1: _SealedClassWithObjects?): String {
fun case_9(value_1: SealedClassWithObjects?): String {
val whenValue = when (value_1) {
is _SealedClassWithObjects -> _ClassLevel2()
else -> _ClassLevel3()
is SealedClassWithObjects -> ClassLevel2()
else -> ClassLevel3()
}
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel5>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel4>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel3>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel1>() }
checkSubtype<_ClassLevel5>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<_ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<_ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>)
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel5>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel4>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel3>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel1>() }
checkSubtype<ClassLevel5>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>)
return ""
}
@@ -1,5 +1,4 @@
// !CHECK_TYPE
// !WITH_CLASSES
/*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -8,19 +7,20 @@
* PLACE: when-expression -> paragraph 9 -> sentence 1
* NUMBER: 1
* DESCRIPTION: 'When' least upper bound of the types check (when exhaustive via else branch).
* HELPERS: classes
*/
// TESTCASE NUMBER: 1
fun case_1(value_1: Int): String {
val whenValue = when {
value_1 == 0 -> _ClassLevel2()
value_1 > 0 && value_1 <= 10 -> _ClassLevel3()
value_1 > 10 && value_1 <= 100 -> _ClassLevel4()
else -> _ClassLevel5()
value_1 == 0 -> ClassLevel2()
value_1 > 0 && value_1 <= 10 -> ClassLevel3()
value_1 > 10 && value_1 <= 100 -> ClassLevel4()
else -> ClassLevel5()
}
whenValue checkType { _<_ClassLevel2>() }
checkSubtype<_ClassLevel1>(whenValue)
whenValue checkType { _<ClassLevel2>() }
checkSubtype<ClassLevel1>(whenValue)
return ""
}
@@ -28,14 +28,14 @@ fun case_1(value_1: Int): String {
// TESTCASE NUMBER: 2
fun case_2(value_1: Int): String {
val whenValue = when (value_1) {
0 -> _ClassLevel2()
1 -> _ClassLevel3()
2 -> _ClassLevel4()
else -> _ClassLevel5()
0 -> ClassLevel2()
1 -> ClassLevel3()
2 -> ClassLevel4()
else -> ClassLevel5()
}
whenValue checkType { _<_ClassLevel2>() }
checkSubtype<_ClassLevel1>(whenValue)
whenValue checkType { _<ClassLevel2>() }
checkSubtype<ClassLevel1>(whenValue)
return ""
}
@@ -1,6 +1,4 @@
// !CHECK_TYPE
// !WITH_CLASSES
// !WITH_ENUM_CLASSES
/*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -9,46 +7,47 @@
* PLACE: when-expression -> paragraph 9 -> sentence 1
* NUMBER: 2
* DESCRIPTION: 'When' least upper bound of the types check (when exhaustive via enum).
* HELPERS: classes, enumClasses
*/
// TESTCASE NUMBER: 1
fun case_1(value_1: _EnumClass): String {
fun case_1(value_1: EnumClass): String {
val whenValue = when (value_1) {
_EnumClass.EAST -> _ClassLevel2()
_EnumClass.NORTH -> _ClassLevel3()
_EnumClass.SOUTH -> _ClassLevel4()
_EnumClass.WEST -> _ClassLevel5()
EnumClass.EAST -> ClassLevel2()
EnumClass.NORTH -> ClassLevel3()
EnumClass.SOUTH -> ClassLevel4()
EnumClass.WEST -> ClassLevel5()
}
whenValue checkType { _<_ClassLevel2>() }
checkSubtype<_ClassLevel1>(whenValue)
whenValue checkType { _<ClassLevel2>() }
checkSubtype<ClassLevel1>(whenValue)
return ""
}
// TESTCASE NUMBER: 2
fun case_2(value_1: _EnumClass?): String {
fun case_2(value_1: EnumClass?): String {
val whenValue = when (value_1) {
_EnumClass.EAST -> _ClassLevel2()
_EnumClass.NORTH -> _ClassLevel3()
_EnumClass.SOUTH -> _ClassLevel4()
_EnumClass.WEST -> _ClassLevel5()
null -> _ClassLevel6()
EnumClass.EAST -> ClassLevel2()
EnumClass.NORTH -> ClassLevel3()
EnumClass.SOUTH -> ClassLevel4()
EnumClass.WEST -> ClassLevel5()
null -> ClassLevel6()
}
whenValue checkType { _<_ClassLevel2>() }
checkSubtype<_ClassLevel1>(whenValue)
whenValue checkType { _<ClassLevel2>() }
checkSubtype<ClassLevel1>(whenValue)
return ""
}
// TESTCASE NUMBER: 3
fun case_3(value_1: _EnumClass): String {
fun case_3(value_1: EnumClass): String {
val whenValue = when (value_1) {
_EnumClass.EAST -> <!IMPLICIT_CAST_TO_ANY!>10<!>
_EnumClass.NORTH -> <!IMPLICIT_CAST_TO_ANY!>""<!>
_EnumClass.SOUTH -> {<!IMPLICIT_CAST_TO_ANY!>{}<!>}
_EnumClass.WEST -> <!IMPLICIT_CAST_TO_ANY!>object<!> {}
EnumClass.EAST -> <!IMPLICIT_CAST_TO_ANY!>10<!>
EnumClass.NORTH -> <!IMPLICIT_CAST_TO_ANY!>""<!>
EnumClass.SOUTH -> {<!IMPLICIT_CAST_TO_ANY!>{}<!>}
EnumClass.WEST -> <!IMPLICIT_CAST_TO_ANY!>object<!> {}
}
whenValue checkType { _<Any>() }
@@ -58,12 +57,12 @@ fun case_3(value_1: _EnumClass): String {
}
// TESTCASE NUMBER: 4
fun case_4(value_1: _EnumClass?): String {
fun case_4(value_1: EnumClass?): String {
val whenValue = when (value_1) {
_EnumClass.EAST -> <!IMPLICIT_CAST_TO_ANY!>10<!>
_EnumClass.NORTH -> <!IMPLICIT_CAST_TO_ANY!>""<!>
_EnumClass.SOUTH -> {<!IMPLICIT_CAST_TO_ANY!>{}<!>}
_EnumClass.WEST -> <!IMPLICIT_CAST_TO_ANY!>object<!> {}
EnumClass.EAST -> <!IMPLICIT_CAST_TO_ANY!>10<!>
EnumClass.NORTH -> <!IMPLICIT_CAST_TO_ANY!>""<!>
EnumClass.SOUTH -> {<!IMPLICIT_CAST_TO_ANY!>{}<!>}
EnumClass.WEST -> <!IMPLICIT_CAST_TO_ANY!>object<!> {}
null -> <!IMPLICIT_CAST_TO_ANY!>false<!>
}
@@ -1,5 +1,4 @@
// !CHECK_TYPE
// !WITH_CLASSES
/*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -8,17 +7,18 @@
* PLACE: when-expression -> paragraph 9 -> sentence 1
* NUMBER: 3
* DESCRIPTION: 'When' least upper bound of the types check (when exhaustive via boolean bound value).
* HELPERS: classes
*/
// TESTCASE NUMBER: 1
fun case_1(value_1: Boolean): String {
val whenValue = when (value_1) {
true -> _ClassLevel2()
false -> _ClassLevel3()
true -> ClassLevel2()
false -> ClassLevel3()
}
whenValue checkType { _<_ClassLevel2>() }
checkSubtype<_ClassLevel1>(whenValue)
whenValue checkType { _<ClassLevel2>() }
checkSubtype<ClassLevel1>(whenValue)
return ""
}
@@ -26,13 +26,13 @@ fun case_1(value_1: Boolean): String {
// TESTCASE NUMBER: 2
fun case_2(value_1: Boolean?): String {
val whenValue = when (value_1) {
true -> _ClassLevel2()
false -> _ClassLevel3()
null -> _ClassLevel4()
true -> ClassLevel2()
false -> ClassLevel3()
null -> ClassLevel4()
}
whenValue checkType { _<_ClassLevel2>() }
checkSubtype<_ClassLevel1>(whenValue)
whenValue checkType { _<ClassLevel2>() }
checkSubtype<ClassLevel1>(whenValue)
return ""
}
@@ -1,6 +1,4 @@
// !CHECK_TYPE
// !WITH_SEALED_CLASSES
// !WITH_CLASSES
/*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -9,43 +7,44 @@
* PLACE: when-expression -> paragraph 9 -> sentence 1
* NUMBER: 4
* DESCRIPTION: 'When' least upper bound of the types check (when exhaustive via sealed class).
* HELPERS: classes, sealedClasses
*/
// TESTCASE NUMBER: 1
fun case_1(value_1: _SealedClass): String {
fun case_1(value_1: SealedClass): String {
val whenValue = when (value_1) {
is _SealedChild1 -> _ClassLevel2()
is _SealedChild2 -> _ClassLevel3()
is _SealedChild3 -> _ClassLevel4()
is SealedChild1 -> ClassLevel2()
is SealedChild2 -> ClassLevel3()
is SealedChild3 -> ClassLevel4()
}
whenValue checkType { _<_ClassLevel2>() }
checkSubtype<_ClassLevel1>(whenValue)
whenValue checkType { _<ClassLevel2>() }
checkSubtype<ClassLevel1>(whenValue)
return ""
}
// TESTCASE NUMBER: 2
fun case_2(value_1: _SealedClass?): String {
fun case_2(value_1: SealedClass?): String {
val whenValue = when (value_1) {
is _SealedChild1 -> _ClassLevel2()
is _SealedChild2 -> _ClassLevel3()
is _SealedChild3 -> _ClassLevel4()
null -> _ClassLevel5()
is SealedChild1 -> ClassLevel2()
is SealedChild2 -> ClassLevel3()
is SealedChild3 -> ClassLevel4()
null -> ClassLevel5()
}
whenValue checkType { _<_ClassLevel2>() }
checkSubtype<_ClassLevel1>(whenValue)
whenValue checkType { _<ClassLevel2>() }
checkSubtype<ClassLevel1>(whenValue)
return ""
}
// TESTCASE NUMBER: 3
fun case_3(value_1: _SealedClass): String {
fun case_3(value_1: SealedClass): String {
val whenValue = when (value_1) {
is _SealedChild1 -> <!IMPLICIT_CAST_TO_ANY!>10<!>
is _SealedChild2 -> <!IMPLICIT_CAST_TO_ANY!>""<!>
is _SealedChild3 -> <!IMPLICIT_CAST_TO_ANY!>object<!> {}
is SealedChild1 -> <!IMPLICIT_CAST_TO_ANY!>10<!>
is SealedChild2 -> <!IMPLICIT_CAST_TO_ANY!>""<!>
is SealedChild3 -> <!IMPLICIT_CAST_TO_ANY!>object<!> {}
}
whenValue checkType { _<Any>() }
@@ -55,11 +54,11 @@ fun case_3(value_1: _SealedClass): String {
}
// TESTCASE NUMBER: 4
fun case_4(value_1: _SealedClass?): String {
fun case_4(value_1: SealedClass?): String {
val whenValue = when (value_1) {
is _SealedChild1 -> <!IMPLICIT_CAST_TO_ANY!>10<!>
is _SealedChild2 -> <!IMPLICIT_CAST_TO_ANY!>""<!>
is _SealedChild3 -> <!IMPLICIT_CAST_TO_ANY!>object<!> {}
is SealedChild1 -> <!IMPLICIT_CAST_TO_ANY!>10<!>
is SealedChild2 -> <!IMPLICIT_CAST_TO_ANY!>""<!>
is SealedChild3 -> <!IMPLICIT_CAST_TO_ANY!>object<!> {}
null -> {<!IMPLICIT_CAST_TO_ANY!>{}<!>}
}
@@ -70,40 +69,40 @@ fun case_4(value_1: _SealedClass?): String {
}
// TESTCASE NUMBER: 5
fun case_5(value_1: _SealedClassWithObjects): String {
fun case_5(value_1: SealedClassWithObjects): String {
val whenValue = when (value_1) {
_SealedWithObjectsChild1 -> _ClassLevel2()
_SealedWithObjectsChild2 -> _ClassLevel3()
_SealedWithObjectsChild3 -> _ClassLevel4()
SealedWithObjectsChild1 -> ClassLevel2()
SealedWithObjectsChild2 -> ClassLevel3()
SealedWithObjectsChild3 -> ClassLevel4()
}
whenValue checkType { _<_ClassLevel2>() }
checkSubtype<_ClassLevel1>(whenValue)
whenValue checkType { _<ClassLevel2>() }
checkSubtype<ClassLevel1>(whenValue)
return ""
}
// TESTCASE NUMBER: 6
fun case_6(value_1: _SealedClassWithObjects?): String {
fun case_6(value_1: SealedClassWithObjects?): String {
val whenValue = when (value_1) {
_SealedWithObjectsChild1 -> _ClassLevel2()
_SealedWithObjectsChild2 -> _ClassLevel3()
_SealedWithObjectsChild3 -> _ClassLevel4()
null -> _ClassLevel5()
SealedWithObjectsChild1 -> ClassLevel2()
SealedWithObjectsChild2 -> ClassLevel3()
SealedWithObjectsChild3 -> ClassLevel4()
null -> ClassLevel5()
}
whenValue checkType { _<_ClassLevel2>() }
checkSubtype<_ClassLevel1>(whenValue)
whenValue checkType { _<ClassLevel2>() }
checkSubtype<ClassLevel1>(whenValue)
return ""
}
// TESTCASE NUMBER: 7
fun case_7(value_1: _SealedClassWithObjects): String {
fun case_7(value_1: SealedClassWithObjects): String {
val whenValue = when (value_1) {
_SealedWithObjectsChild1 -> <!IMPLICIT_CAST_TO_ANY!>10<!>
_SealedWithObjectsChild2 -> <!IMPLICIT_CAST_TO_ANY!>""<!>
_SealedWithObjectsChild3 -> <!IMPLICIT_CAST_TO_ANY!>object<!> {}
SealedWithObjectsChild1 -> <!IMPLICIT_CAST_TO_ANY!>10<!>
SealedWithObjectsChild2 -> <!IMPLICIT_CAST_TO_ANY!>""<!>
SealedWithObjectsChild3 -> <!IMPLICIT_CAST_TO_ANY!>object<!> {}
}
whenValue checkType { _<Any>() }
@@ -113,11 +112,11 @@ fun case_7(value_1: _SealedClassWithObjects): String {
}
// TESTCASE NUMBER: 8
fun case_8(value_1: _SealedClassWithObjects?): String {
fun case_8(value_1: SealedClassWithObjects?): String {
val whenValue = when (value_1) {
_SealedWithObjectsChild1 -> <!IMPLICIT_CAST_TO_ANY!>10<!>
_SealedWithObjectsChild2 -> <!IMPLICIT_CAST_TO_ANY!>""<!>
_SealedWithObjectsChild3 -> <!IMPLICIT_CAST_TO_ANY!>object<!> {}
SealedWithObjectsChild1 -> <!IMPLICIT_CAST_TO_ANY!>10<!>
SealedWithObjectsChild2 -> <!IMPLICIT_CAST_TO_ANY!>""<!>
SealedWithObjectsChild3 -> <!IMPLICIT_CAST_TO_ANY!>object<!> {}
null -> {<!IMPLICIT_CAST_TO_ANY!>{}<!>}
}
@@ -128,9 +127,9 @@ fun case_8(value_1: _SealedClassWithObjects?): String {
}
// TESTCASE NUMBER: 9
fun case_9(value_1: _SealedClassWithObjects): String {
fun case_9(value_1: SealedClassWithObjects): String {
val whenValue = when (value_1) {
<!USELESS_IS_CHECK!>is _SealedClassWithObjects<!> -> 10
<!USELESS_IS_CHECK!>is SealedClassWithObjects<!> -> 10
}
whenValue checkType { _<Int>() }
@@ -1,5 +1,4 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
// !WITH_CONTRACT_FUNCTIONS
// SKIP_TXT
/*
@@ -8,6 +7,7 @@
* SECTIONS: contracts, analysis, common
* NUMBER: 2
* DESCRIPTION: Recursion in the lambda of contract function.
* HELPERS: contractFunctions
*/
// TESTCASE NUMBER: 1
@@ -1,5 +1,4 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
// !WITH_CONTRACT_FUNCTIONS
// SKIP_TXT
/*
@@ -8,6 +7,7 @@
* SECTIONS: contracts, analysis, controlFlow, initialization
* NUMBER: 1
* DESCRIPTION: val/var reassignment and/or uninitialized variable usages based on CallsInPlace effect with wrong invocation kind
* HELPERS: contractFunctions
*/
// TESTCASE NUMBER: 1
@@ -1,5 +1,4 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
// !WITH_CONTRACT_FUNCTIONS
// SKIP_TXT
/*
@@ -8,6 +7,7 @@
* SECTIONS: contracts, analysis, controlFlow, initialization
* NUMBER: 2
* DESCRIPTION: val/var reassignment and/or uninitialized variable usages based on nested CallsInPlace effects with wrong invocation kind
* HELPERS: contractFunctions
*/
// TESTCASE NUMBER: 1
@@ -1,6 +1,4 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
// !WITH_CONTRACT_FUNCTIONS
// !WITH_ENUM_CLASSES
// SKIP_TXT
/*
@@ -9,16 +7,17 @@
* SECTIONS: contracts, analysis, controlFlow, initialization
* NUMBER: 3
* 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
fun case_1(value_1: _EnumClass?) {
fun case_1(value_1: EnumClass?) {
val value_2: Int
<!NON_EXHAUSTIVE_WHEN!>when<!> (value_1) {
_EnumClass.NORTH -> funWithExactlyOnceCallsInPlace { value_2 = 1 }
_EnumClass.SOUTH -> funWithExactlyOnceCallsInPlace { value_2 = 2 }
_EnumClass.EAST -> funWithExactlyOnceCallsInPlace { value_2 = 4 }
EnumClass.NORTH -> funWithExactlyOnceCallsInPlace { value_2 = 1 }
EnumClass.SOUTH -> funWithExactlyOnceCallsInPlace { value_2 = 2 }
EnumClass.EAST -> funWithExactlyOnceCallsInPlace { value_2 = 4 }
null -> funWithExactlyOnceCallsInPlace { value_2 = 5 }
}
@@ -62,12 +61,12 @@ class case_3(value_1: Any?) {
}
// TESTCASE NUMBER: 4
fun case_4(value_1: _EnumClassSingle?) {
fun case_4(value_1: EnumClassSingle?) {
var value_2: Int
funWithAtMostOnceCallsInPlace {
when (value_1) {
_EnumClassSingle.EVERYTHING -> {
EnumClassSingle.EVERYTHING -> {
funWithExactlyOnceCallsInPlace { value_2 = 1 }
++value_2
}
@@ -1,5 +1,4 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
// !WITH_CONTRACT_FUNCTIONS
// SKIP_TXT
/*
@@ -8,6 +7,7 @@
* SECTIONS: contracts, analysis, controlFlow, initialization
* NUMBER: 4
* DESCRIPTION: CallsInPlace contract functions with name shadowing and wrong invocation kind
* HELPERS: contractFunctions
*/
// TESTCASE NUMBER: 1
@@ -1,5 +1,4 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
// !WITH_CONTRACT_FUNCTIONS
// SKIP_TXT
/*
@@ -8,6 +7,7 @@
* SECTIONS: contracts, analysis, controlFlow, initialization
* NUMBER: 5
* DESCRIPTION: CallsInPlace contract functions with invalid lambda passing to function parameter.
* HELPERS: contractFunctions
*/
// TESTCASE NUMBER: 1
@@ -1,5 +1,4 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
// !WITH_CONTRACT_FUNCTIONS
// SKIP_TXT
/*
@@ -10,6 +9,7 @@
* DESCRIPTION: Check the lack of CallsInPlace effect on the lambda in the parentheses.
* UNEXPECTED BEHAVIOUR
* ISSUES: KT-26229
* HELPERS: contractFunctions
*/
// TESTCASE NUMBER: 1
@@ -1,5 +1,4 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
// !WITH_CONTRACT_FUNCTIONS
// SKIP_TXT
/*
@@ -8,6 +7,7 @@
* SECTIONS: contracts, analysis, controlFlow, initialization
* NUMBER: 1
* DESCRIPTION: val/var assignments using contract functions with CallsInPlace effect
* HELPERS: contractFunctions
*/
// TESTCASE NUMBER: 1
@@ -1,5 +1,4 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
// !WITH_CONTRACT_FUNCTIONS
// SKIP_TXT
/*
@@ -8,6 +7,7 @@
* SECTIONS: contracts, analysis, controlFlow, initialization
* NUMBER: 2
* DESCRIPTION: Nested val/var assignments using contract functions with CallsInPlace effect
* HELPERS: contractFunctions
*/
// TESTCASE NUMBER: 1
@@ -1,6 +1,4 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
// !WITH_CONTRACT_FUNCTIONS
// !WITH_ENUM_CLASSES
// SKIP_TXT
/*
@@ -9,17 +7,18 @@
* SECTIONS: contracts, analysis, controlFlow, initialization
* NUMBER: 3
* 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
fun case_1(value_1: _EnumClass?) {
fun case_1(value_1: EnumClass?) {
val value_2: Int
<!DEBUG_INFO_IMPLICIT_EXHAUSTIVE!>when (value_1) {
_EnumClass.NORTH -> funWithExactlyOnceCallsInPlace { value_2 = 1 }
_EnumClass.SOUTH -> funWithExactlyOnceCallsInPlace { value_2 = 2 }
_EnumClass.WEST -> funWithExactlyOnceCallsInPlace { value_2 = 3 }
_EnumClass.EAST -> funWithExactlyOnceCallsInPlace { value_2 = 4 }
EnumClass.NORTH -> funWithExactlyOnceCallsInPlace { value_2 = 1 }
EnumClass.SOUTH -> funWithExactlyOnceCallsInPlace { value_2 = 2 }
EnumClass.WEST -> funWithExactlyOnceCallsInPlace { value_2 = 3 }
EnumClass.EAST -> funWithExactlyOnceCallsInPlace { value_2 = 4 }
null -> funWithExactlyOnceCallsInPlace { value_2 = 5 }
}<!>
@@ -63,12 +62,12 @@ class case_3(value_1: Any?) {
}
// TESTCASE NUMBER: 4
fun case_4(value_1: _EnumClassSingle?) {
fun case_4(value_1: EnumClassSingle?) {
var value_2: Int
funWithAtMostOnceCallsInPlace {
<!DEBUG_INFO_IMPLICIT_EXHAUSTIVE!>when (value_1) {
_EnumClassSingle.EVERYTHING -> {
EnumClassSingle.EVERYTHING -> {
funWithExactlyOnceCallsInPlace { value_2 = 1 }
++value_2
}
@@ -1,5 +1,4 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
// !WITH_CONTRACT_FUNCTIONS
// SKIP_TXT
/*
@@ -8,6 +7,7 @@
* SECTIONS: contracts, analysis, controlFlow, initialization
* NUMBER: 4
* DESCRIPTION: CallsInPlace contract functions with name shadowing
* HELPERS: contractFunctions
*/
// TESTCASE NUMBER: 1
@@ -1,5 +1,4 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
// !WITH_CONTRACT_FUNCTIONS
/*
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
@@ -9,6 +8,7 @@
* DESCRIPTION: Check the lack of CallsInPlace effect on the lambda in the parentheses.
* UNEXPECTED BEHAVIOUR
* ISSUES: KT-26229
* HELPERS: contractFunctions
*/
// FILE: contracts.kt
@@ -1,5 +1,4 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
// !WITH_CONTRACT_FUNCTIONS
// SKIP_TXT
/*
@@ -8,6 +7,7 @@
* SECTIONS: contracts, analysis, controlFlow, unreachableCode
* NUMBER: 1
* DESCRIPTION: Using not allowed break and continue inside lambda of contract function
* HELPERS: contractFunctions
*/
// TESTCASE NUMBER: 1
@@ -1,6 +1,5 @@
// !DIAGNOSTICS: -UNUSED_VARIABLE
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
// !WITH_CONTRACT_FUNCTIONS
// SKIP_TXT
/*
@@ -9,6 +8,7 @@
* SECTIONS: contracts, analysis, controlFlow, unreachableCode
* NUMBER: 1
* DESCRIPTION: Unreachable code detection using contract function with CallsInPlace effect
* HELPERS: contractFunctions
*/
// TESTCASE NUMBER: 1
@@ -1,5 +1,4 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
// !WITH_CONTRACT_FUNCTIONS
// SKIP_TXT
/*
@@ -8,6 +7,7 @@
* SECTIONS: contracts, analysis, controlFlow, unreachableCode
* NUMBER: 2
* DESCRIPTION: Check for lack of unreachable code report when 'at most once' and 'unknown' invokations in CallsInPlace effect used.
* HELPERS: contractFunctions
*/
// TESTCASE NUMBER: 1
@@ -1,5 +1,4 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
// !WITH_CONTRACT_FUNCTIONS
// SKIP_TXT
/*
@@ -8,6 +7,7 @@
* SECTIONS: contracts, analysis, controlFlow, unreachableCode
* NUMBER: 3
* DESCRIPTION: Unreachable code detection using local functions or labdas combined with contract functions with CallsInPlace effect
* HELPERS: contractFunctions
*/
// TESTCASE NUMBER: 1
@@ -1,5 +1,4 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
// !WITH_CONTRACT_FUNCTIONS
// SKIP_TXT
/*
@@ -8,6 +7,7 @@
* SECTIONS: contracts, analysis, controlFlow, unreachableCode
* NUMBER: 4
* DESCRIPTION: Unreachable code detection using nested contract functions with CallsInPlace effect
* HELPERS: contractFunctions
*/
// TESTCASE NUMBER: 1
@@ -1,5 +1,4 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
// !WITH_CONTRACT_FUNCTIONS
// SKIP_TXT
/*
@@ -8,6 +7,7 @@
* SECTIONS: contracts, analysis, controlFlow, unreachableCode
* NUMBER: 5
* DESCRIPTION: Unreachable code detection using contract functions with complex control flow inside
* HELPERS: contractFunctions
*/
// TESTCASE NUMBER: 1
@@ -1,5 +1,4 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
// !WITH_CONTRACT_FUNCTIONS
// SKIP_TXT
/*
@@ -8,6 +7,7 @@
* SECTIONS: contracts, analysis, controlFlow, unreachableCode
* 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
* HELPERS: contractFunctions
*/
// TESTCASE NUMBER: 1
@@ -1,5 +1,4 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
// !WITH_CONTRACT_FUNCTIONS
// SKIP_TXT
/*
@@ -8,6 +7,7 @@
* SECTIONS: contracts, analysis, smartcasts
* NUMBER: 1
* 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
@@ -1,5 +1,4 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
// !WITH_CONTRACT_FUNCTIONS
/*
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
@@ -8,6 +7,7 @@
* NUMBER: 10
* DESCRIPTION: Check smartcasts using double negation (returnsFalse/invert type checking/not operator).
* ISSUES: KT-26176
* HELPERS: contractFunctions
*/
// FILE: contracts.kt
@@ -1,4 +1,3 @@
// !WITH_CONTRACT_FUNCTIONS
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
/*
@@ -7,6 +6,7 @@
* SECTIONS: contracts, analysis, smartcasts
* NUMBER: 11
* DESCRIPTION: Smartcast using many of the various Returns effects on the same values.
* HELPERS: contractFunctions
*/
// FILE: contracts.kt
@@ -1,5 +1,4 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
// !WITH_CONTRACT_FUNCTIONS
/*
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
@@ -7,6 +6,7 @@
* SECTIONS: contracts, analysis, smartcasts
* NUMBER: 13
* DESCRIPTION: Smartcast using many of the various Returns effects on the same values.
* HELPERS: contractFunctions
*/
// FILE: contracts.kt
@@ -1,4 +1,3 @@
// !WITH_CONTRACT_FUNCTIONS
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
/*
@@ -7,6 +6,7 @@
* SECTIONS: contracts, analysis, smartcasts
* NUMBER: 14
* DESCRIPTION: Smartcast using many of the various Returns effects on the same values.
* HELPERS: contractFunctions
*/
// FILE: contracts.kt
@@ -1,4 +1,3 @@
// !WITH_CONTRACT_FUNCTIONS
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
/*
@@ -8,6 +7,7 @@
* NUMBER: 15
* DESCRIPTION: Check smartcasts working if type checking for contract function is used
* ISSUES: KT-27241
* HELPERS: contractFunctions
*/
// FILE: contracts.kt
@@ -1,5 +1,4 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
// !WITH_CONTRACT_FUNCTIONS
// SKIP_TXT
/*
@@ -8,6 +7,7 @@
* SECTIONS: contracts, analysis, smartcasts
* NUMBER: 2
* DESCRIPTION: Smartcasts using Returns effects with complex (conjunction/disjunction) type checking and not-null conditions outside contract (custom condition).
* HELPERS: contractFunctions
*/
// TESTCASE NUMBER: 1
@@ -1,4 +1,3 @@
// !WITH_CONTRACT_FUNCTIONS
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
/*
@@ -7,6 +6,7 @@
* SECTIONS: contracts, analysis, smartcasts
* NUMBER: 8
* DESCRIPTION: Smartcasts using some Returns effects.
* HELPERS: contractFunctions
*/
// FILE: contracts.kt
@@ -1,5 +1,4 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
// !WITH_CONTRACT_FUNCTIONS
// SKIP_TXT
/*
@@ -8,6 +7,7 @@
* SECTIONS: contracts, analysis, smartcasts
* 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.
* HELPERS: contractFunctions
*/
// TESTCASE NUMBER: 1
@@ -1,5 +1,4 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
// !WITH_CONTRACT_FUNCTIONS
// SKIP_TXT
/*
@@ -8,6 +7,7 @@
* SECTIONS: contracts, analysis, smartcasts
* NUMBER: 1
* 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
@@ -1,4 +1,3 @@
// !WITH_CONTRACT_FUNCTIONS
// !DIAGNOSTICS: -UNUSED_PARAMETER
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
@@ -9,6 +8,7 @@
* NUMBER: 10
* DESCRIPTION: Smartcasts with correspond contract function with default value in last parameter.
* ISSUES: KT-26444
* HELPERS: contractFunctions
*/
// FILE: contracts.kt
@@ -1,5 +1,4 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
// !WITH_CONTRACT_FUNCTIONS
/*
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
@@ -8,6 +7,7 @@
* NUMBER: 11
* DESCRIPTION: Check smartcasts with passing same fields of instances of the same class in contract function with conjunction not-null condition.
* ISSUES: KT-26300
* HELPERS: contractFunctions
*/
// FILE: contracts.kt
@@ -1,5 +1,4 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
// !WITH_CONTRACT_FUNCTIONS
// 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.
* UNEXPECTED BEHAVIOUR
* ISSUES: KT-26148
* HELPERS: contractFunctions
*/
// TESTCASE NUMBER: 1
@@ -1,5 +1,4 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
// !WITH_CONTRACT_FUNCTIONS
// SKIP_TXT
/*
@@ -8,6 +7,7 @@
* SECTIONS: contracts, analysis, smartcasts
* NUMBER: 2
* DESCRIPTION: Smartcasts using Returns effects with complex (conjunction/disjunction) type checking and not-null conditions outside contract (custom condition).
* HELPERS: contractFunctions
*/
// TESTCASE NUMBER: 1
@@ -1,4 +1,3 @@
// !WITH_CONTRACT_FUNCTIONS
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
/*
@@ -7,6 +6,7 @@
* SECTIONS: contracts, analysis, smartcasts
* NUMBER: 8
* DESCRIPTION: Smartcasts using some Returns effects.
* HELPERS: contractFunctions
*/
// FILE: contracts.kt
@@ -1,5 +1,3 @@
// !WITH_CONTRACT_FUNCTIONS
// !WITH_BASIC_TYPES
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
/*
@@ -8,6 +6,7 @@
* SECTIONS: contracts, analysis, smartcasts
* NUMBER: 9
* DESCRIPTION: Smartcast using complex condition with some contract functions (Returns effect).
* HELPERS: typesProvider, contractFunctions
*/
// FILE: contracts.kt
@@ -121,34 +121,34 @@ public inline fun funWithUnknownCallsInPlace(/*0*/ block: () -> kotlin.Unit): ko
CallsInPlace(block, UNKNOWN)
public fun getAny(): kotlin.Any
public fun getBoolean(/*0*/ arg: kotlin.Any = ...): kotlin.Boolean
public fun getByte(/*0*/ arg: kotlin.Any = ...): kotlin.Byte
public fun getChar(/*0*/ arg: kotlin.Any = ...): kotlin.Char
public fun getDouble(/*0*/ arg: kotlin.Any = ...): kotlin.Double
public fun getFloat(/*0*/ arg: kotlin.Any = ...): kotlin.Float
public fun getInt(/*0*/ arg: kotlin.Any = ...): kotlin.Int
public fun getList(): kotlin.collections.MutableList<kotlin.Int>
public fun getLong(/*0*/ arg: kotlin.Any = ...): kotlin.Long
public fun getBoolean(): kotlin.Boolean
public fun getByte(): kotlin.Byte
public fun getChar(): kotlin.Char
public fun getDouble(): kotlin.Double
public fun getFloat(): kotlin.Float
public fun getInt(): kotlin.Int
public fun getList(): kotlin.collections.List<kotlin.Int>
public fun getLong(): kotlin.Long
public fun getNothing(): kotlin.Nothing
public fun getShort(/*0*/ arg: kotlin.Any = ...): kotlin.Short
public fun getString(/*0*/ arg: kotlin.Any = ...): kotlin.String
public fun getShort(): kotlin.Short
public fun getString(): kotlin.String
public fun getUnit(): () -> kotlin.Unit
public final class _BasicTypesProvider {
public constructor _BasicTypesProvider()
public final class TypesProvider {
public constructor TypesProvider()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public final fun getAny(): kotlin.Any
public final fun getBoolean(/*0*/ arg: kotlin.Any = ...): kotlin.Boolean
public final fun getByte(/*0*/ arg: kotlin.Any = ...): kotlin.Byte
public final fun getChar(/*0*/ arg: kotlin.Any = ...): kotlin.Char
public final fun getDouble(/*0*/ arg: kotlin.Any = ...): kotlin.Double
public final fun getFloat(/*0*/ arg: kotlin.Any = ...): kotlin.Float
public final fun getInt(/*0*/ arg: kotlin.Any = ...): kotlin.Int
public final fun getList(): kotlin.collections.MutableList<kotlin.Int>
public final fun getLong(/*0*/ arg: kotlin.Any = ...): kotlin.Long
public final fun getBoolean(): kotlin.Boolean
public final fun getByte(): kotlin.Byte
public final fun getChar(): kotlin.Char
public final fun getDouble(): kotlin.Double
public final fun getFloat(): kotlin.Float
public final fun getInt(): kotlin.Int
public final fun getList(): kotlin.collections.List<kotlin.Int>
public final fun getLong(): kotlin.Long
public final fun getNothing(): kotlin.Nothing
public final fun getShort(/*0*/ arg: kotlin.Any = ...): kotlin.Short
public final fun getString(/*0*/ arg: kotlin.Any = ...): kotlin.String
public final fun getShort(): kotlin.Short
public final fun getString(): kotlin.String
public final fun getUnit(): () -> kotlin.Unit
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
@@ -1,6 +1,5 @@
// !DIAGNOSTICS: -UNUSED_VARIABLE
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
// !WITH_FUNCTIONS
/*
* 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.
* UNEXPECTED BEHAVIOUR
* ISSUES: KT-26153
* HELPERS: functions
*/
import kotlin.contracts.*
@@ -57,7 +57,7 @@ inline fun case_6(block: () -> Unit) {
// TESTCASE NUMBER: 7
inline fun case_7(block: () -> Unit) {
_funWithAnyArg(contract {
funWithAnyArg(contract {
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
})
}
@@ -1,7 +1,5 @@
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 fun case_2(): 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_6(/*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
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
// !WITH_BASIC_TYPES
/*
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
@@ -8,6 +7,7 @@
* SECTIONS: contracts, declarations, contractBuilder, common
* NUMBER: 6
* DESCRIPTION: contracts with not function parameters in implies.
* HELPERS: typesProvider
*/
import kotlin.contracts.*

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