Alphabetical sort wrapped intersection types for rendered diagnostics
This commit is contained in:
Vendored
+2
-2
@@ -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` {
|
||||
|
||||
Vendored
+1
-2
@@ -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`
|
||||
|
||||
Vendored
+1
-2
@@ -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 {
|
||||
|
||||
Vendored
+1
-2
@@ -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 {
|
||||
|
||||
Vendored
+1
-2
@@ -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`
|
||||
|
||||
Vendored
+1
-2
@@ -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`
|
||||
|
||||
Vendored
+1
-2
@@ -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`
|
||||
|
||||
Vendored
+1
-2
@@ -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`]
|
||||
|
||||
Vendored
+1
-2
@@ -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 {
|
||||
|
||||
Vendored
+1
-2
@@ -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
|
||||
|
||||
Vendored
+1
-2
@@ -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
|
||||
|
||||
Vendored
+1
-2
@@ -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`>
|
||||
|
||||
Vendored
+1
-2
@@ -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`
|
||||
|
||||
Vendored
+1
-2
@@ -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`
|
||||
|
||||
Vendored
+1
-2
@@ -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`
|
||||
|
||||
Vendored
+1
-2
@@ -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
@@ -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
@@ -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>()
|
||||
}
|
||||
+27
-27
@@ -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 -> ""
|
||||
}
|
||||
|
||||
+17
-17
@@ -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) { }
|
||||
|
||||
+30
-30
@@ -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) {}
|
||||
|
||||
+16
-16
@@ -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 -> ""
|
||||
}
|
||||
|
||||
+23
-24
@@ -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<!> -> ""
|
||||
}
|
||||
+35
-35
@@ -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?<!> -> ""
|
||||
}
|
||||
|
||||
+8
-8
@@ -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 -> ""
|
||||
}
|
||||
|
||||
+9
-9
@@ -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 -> ""
|
||||
}
|
||||
|
||||
+30
-30
@@ -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 -> ""
|
||||
}
|
||||
|
||||
+2
-2
@@ -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 ""
|
||||
|
||||
+3
-3
@@ -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<!>
|
||||
|
||||
+10
-12
@@ -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
|
||||
|
||||
+12
-14
@@ -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 -> {}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+7
-7
@@ -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) {
|
||||
|
||||
+9
-11
@@ -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
|
||||
|
||||
+2
-2
@@ -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
-1
@@ -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
|
||||
|
||||
+2
-2
@@ -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 ""
|
||||
|
||||
+2
-2
@@ -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 ""
|
||||
|
||||
+3
-4
@@ -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 ""
|
||||
|
||||
+16
-18
@@ -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 ""
|
||||
|
||||
+7
-9
@@ -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 ""
|
||||
}
|
||||
}
|
||||
|
||||
+14
-14
@@ -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 -> ""
|
||||
}
|
||||
|
||||
+3
-4
@@ -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 -> ""
|
||||
}
|
||||
+3
-4
@@ -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 -> ""
|
||||
}
|
||||
+8
-10
@@ -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 -> {}
|
||||
|
||||
+8
-10
@@ -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 -> {}
|
||||
|
||||
+23
-23
@@ -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 ""
|
||||
}
|
||||
|
||||
+38
-39
@@ -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<!>
|
||||
}
|
||||
|
||||
|
||||
+16
-16
@@ -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 ""
|
||||
}
|
||||
|
||||
+69
-70
@@ -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 ""
|
||||
}
|
||||
|
||||
+13
-13
@@ -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 ""
|
||||
}
|
||||
|
||||
+26
-27
@@ -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<!>
|
||||
}
|
||||
|
||||
|
||||
+10
-10
@@ -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 ""
|
||||
}
|
||||
|
||||
+45
-46
@@ -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
-1
@@ -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
-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
-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
|
||||
|
||||
+7
-8
@@ -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
-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: 4
|
||||
* DESCRIPTION: CallsInPlace contract functions with name shadowing and wrong invocation kind
|
||||
* HELPERS: contractFunctions
|
||||
*/
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
|
||||
+1
-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
-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
-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
-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
|
||||
|
||||
+8
-9
@@ -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
-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: 4
|
||||
* DESCRIPTION: CallsInPlace contract functions with name shadowing
|
||||
* HELPERS: contractFunctions
|
||||
*/
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
|
||||
+1
-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
-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: 1
|
||||
* DESCRIPTION: Using not allowed break and continue inside lambda of contract function
|
||||
* HELPERS: contractFunctions
|
||||
*/
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
|
||||
+1
-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
-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
-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
-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
-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
-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
-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
-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
-1
@@ -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
-1
@@ -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
-1
@@ -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
-1
@@ -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
-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
-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
-1
@@ -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
-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
-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
-1
@@ -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
-1
@@ -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
-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
-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
-2
@@ -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
|
||||
|
||||
+22
-22
@@ -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
|
||||
|
||||
+2
-2
@@ -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)
|
||||
})
|
||||
}
|
||||
|
||||
+10
-2
@@ -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
-1
@@ -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
Reference in New Issue
Block a user