Add codegen box test templates for identifiers

This commit is contained in:
victor.petukhov
2018-09-25 13:06:55 +03:00
parent dd91727a78
commit 1bc0c4092c
28 changed files with 800 additions and 0 deletions
@@ -0,0 +1,10 @@
/*
KOTLIN CODEGEN BOX SPEC TEST (<!TEST_TYPE!>)
SECTIONS: <!SECTIONS!>
PARAGRAPH: <!PARAGRAPH_NUMBER!>
SENTENCE: [<!SENTENCE_NUMBER!>] <!SENTENCE!>
NUMBER: <!TEST_NUMBER!>
DESCRIPTION: <!TEST_DESCRIPTION!>
NOTE: this test data is generated by FeatureInteractionTestDataGenerator. DO NOT MODIFY CODE MANUALLY!
*/
@@ -0,0 +1,9 @@
/*
KOTLIN NOT LINKED CODEGEN BOX SPEC TEST (<!TEST_TYPE!>)
SECTION: <!SECTION!>
CATEGORIES: <!CATEGORIES!>
NUMBER: <!TEST_NUMBER!>
DESCRIPTION: <!TEST_DESCRIPTION!>
NOTE: this test data is generated by FeatureInteractionTestDataGenerator. DO NOT MODIFY CODE MANUALLY!
*/
@@ -0,0 +1,20 @@
fun box(): String? {
val <!ELEMENT(1)!> = 10
val <!ELEMENT(2)!> = "."
val value_1 = <!ELEMENT(1)!> - 100 % <!ELEMENT(1)!>
val value_2 = <!ELEMENT(1)!>.dec()
val value_3 = "$<!ELEMENT(2)!> 10"
val value_4 = "${<!ELEMENT(2)!>}"
val value_5 = <!ELEMENT(2)!> + " 11..." + <!ELEMENT(2)!> + "1"
val value_6 = <!ELEMENT(1)!>
if (value_1 != 10) return null
if (value_2 != 9) return null
if (value_3 != ". 10") return null
if (value_4 != ".") return null
if (value_5 != ". 11....1") return null
if (value_6 != 10) return null
return "OK"
}
@@ -0,0 +1,27 @@
<!DIRECTIVES("HELPERS: REFLECT")!>
val Boolean.<!ELEMENT(1)!>: Boolean
get() {
return true
}
val Boolean?.<!ELEMENT(2)!>: Boolean
get() {
return false
}
fun Int?.<!ELEMENT(3)!>(x: Boolean): Boolean {
return !x
}
fun box(): String? {
if (!false.<!ELEMENT(1)!> || false.<!ELEMENT(2)!> || !0.<!ELEMENT(3)!>(false)) return null
if (!checkCallableName(Boolean::<!ELEMENT(1)!>, "<!ELEMENT_VALIDATION(1)!>") || !Boolean::<!ELEMENT(1)!>.get(true)) return null
if (!checkCallableName(Boolean????::<!ELEMENT(2)!>, "<!ELEMENT_VALIDATION(2)!>") || Boolean????::<!ELEMENT(2)!>.get(false)) return null
if (!checkCallableName(Boolean????::<!ELEMENT(2)!>::equals.call(false)::<!ELEMENT(1)!>, "<!ELEMENT_VALIDATION(1)!>")
|| !Boolean????::<!ELEMENT(2)!>::equals.call(false)::<!ELEMENT(1)!>.get()) return null
if (!checkCallableName(Int?::<!ELEMENT(3)!>, "<!ELEMENT_VALIDATION(3)!>") || Int?::<!ELEMENT(3)!>.call(10, true)) return null
return "OK"
}
@@ -0,0 +1,22 @@
annotation class A
fun box(): String? {
var value_1 = false
var value_2 = true
try {
throw Exception()
} catch (<!ELEMENT!>: Throwable) {
value_1 = true
}
try {
throw Exception()
} catch (@A <!ELEMENT!>: Throwable) {
value_2 = false
}
if (!value_1 || value_2) return null
return "OK"
}
@@ -0,0 +1,33 @@
<!DIRECTIVES("HELPERS: REFLECT")!>
open class <!ELEMENT(1)!> {
val x1 = true
}
internal open class A: <!ELEMENT(1)!>() {
val x2 = false
}
annotation class <!ELEMENT(2)!>(val x2: Boolean)
@<!ELEMENT(2)!>(false) internal class B: @<!ELEMENT(2)!>(false) A() {}
@<!ELEMENT(2)!>(true) interface C
fun box(): String? {
val o1 = <!ELEMENT(1)!>()
val o2 = A()
val o3 = B()
if (o1.x1 != true) return null
if (o2.x1 != true || o2.x2 != false || o3.x2 != false || o3.x1 != true) return null
if (!checkAnnotation("B", "<!ELEMENT_VALIDATION(2)!>")) return null
if (!checkAnnotation("C", "<!ELEMENT_VALIDATION(2)!>")) return null
if (!checkSuperClass(B::class, "A")) return null
if (!checkSuperTypeAnnotation(B::class, "A", "<!ELEMENT_VALIDATION(2)!>")) return null
if (!checkClassName(<!ELEMENT(2)!>::class, "<!ELEMENT_VALIDATION(2)!>")) return null
if (!checkClassName(<!ELEMENT(1)!>::class, "<!ELEMENT_VALIDATION(1)!>")) return null
return "OK"
}
@@ -0,0 +1,22 @@
<!DIRECTIVES("HELPERS: REFLECT")!>
package org.jetbrains.<!ELEMENT(1)!>
open class A {
companion object <!ELEMENT(2)!> {
}
}
class B {
companion object <!ELEMENT(3)!>: A() {
}
}
fun box(): String? {
if (!checkCompanionObjectName(A::class, "org.jetbrains.<!ELEMENT_VALIDATION(1)!>.A.<!ELEMENT_VALIDATION(2)!>")) return null
if (!checkCompanionObjectName(B::class, "org.jetbrains.<!ELEMENT_VALIDATION(1)!>.B.<!ELEMENT_VALIDATION(3)!>")) return null
return "OK"
}
@@ -0,0 +1,14 @@
enum class A(val x: Boolean) {
<!ELEMENT(1)!>(false),
<!ELEMENT(2)!>(true);
}
fun box(): String? {
if (A.<!ELEMENT(1)!>.x) return null
if (!A.<!ELEMENT(2)!>.x) return null
if (A.<!ELEMENT(1)!>.name != "<!ELEMENT_VALIDATION(1)!>") return null
if (A.<!ELEMENT(2)!>.name != "<!ELEMENT_VALIDATION(2)!>") return null
return "OK"
}
@@ -0,0 +1,19 @@
<!DIRECTIVES("HELPERS: REFLECT")!>
@file:[org.jetbrains.<!ELEMENT(1)!>.<!ELEMENT(2)!>() <!ELEMENT(3)!>]
package org.jetbrains.<!ELEMENT(1)!>
@Target(AnnotationTarget.FILE)
annotation class <!ELEMENT(2)!>
@Target(AnnotationTarget.FILE)
annotation class <!ELEMENT(3)!>
fun box(): String? {
if (!checkFileAnnotations("org.jetbrains.<!ELEMENT_VALIDATION(1)!>.<!CLASS_OF_FILE!>", listOf("org.jetbrains.<!ELEMENT_VALIDATION(1)!>.<!ELEMENT_VALIDATION(2)!>", "<!ELEMENT_VALIDATION(3)!>"))) return null
if (!checkPackageName("org.jetbrains.<!ELEMENT_VALIDATION(1)!>.<!CLASS_OF_FILE!>", "org.jetbrains.<!ELEMENT_VALIDATION(1)!>")) return null
if (!checkClassName(<!ELEMENT(2)!>::class, "org.jetbrains.<!ELEMENT_VALIDATION(1)!>.<!ELEMENT_VALIDATION(2)!>")) return null
return "OK"
}
@@ -0,0 +1,18 @@
<!DIRECTIVES("HELPERS: REFLECT")!>
@file:<!ELEMENT(1)!>
@file:<!ELEMENT(2)!>
@Target(AnnotationTarget.FILE)
annotation class <!ELEMENT(1)!>
@Target(AnnotationTarget.FILE)
annotation class <!ELEMENT(2)!>
fun box(): String? {
if (!checkFileAnnotations("<!CLASS_OF_FILE!>", listOf("<!ELEMENT_VALIDATION(1)!>", "<!ELEMENT_VALIDATION(2)!>"))) return null
if (!checkClassName(<!ELEMENT(1)!>::class, "<!ELEMENT_VALIDATION(1)!>")) return null
if (!checkClassName(<!ELEMENT(2)!>::class, "<!ELEMENT_VALIDATION(2)!>")) return null
return "OK"
}
@@ -0,0 +1,31 @@
<!DIRECTIVES("HELPERS: REFLECT")!>
fun <!ELEMENT(1)!>(): Boolean {
return true
}
fun Boolean.<!ELEMENT(2)!>() = true
fun <T> T.<!ELEMENT(4)!>() = listOf(0).<!ELEMENT(3)!>()
inline fun <reified T, K> K?.<!ELEMENT(3)!>(x1: T = 10 as T)
where K : List<T>,
K : Iterable<T>,
T : Comparable<T>,
T : Number = false
fun box(): String? {
if (!<!ELEMENT(1)!>()) return null
if (null.<!ELEMENT(3)!><Int, List<Int>>()) return null
if (false.<!ELEMENT(4)!>()) return null
if (!false.<!ELEMENT(2)!>()) return null
if (Any().<!ELEMENT(4)!>()) return null
if (!checkFunctionName(::<!ELEMENT(1)!>, "<!ELEMENT_VALIDATION(1)!>")) return null
if (!checkFunctionName(Boolean::<!ELEMENT(2)!>, "<!ELEMENT_VALIDATION(2)!>")) return null
if (!checkFunctionName(Boolean::<!ELEMENT(4)!>, "<!ELEMENT_VALIDATION(4)!>")) return null
if (!checkFunctionName(List<Int>::<!ELEMENT(3)!>, "<!ELEMENT_VALIDATION(3)!>")) return null
if (!checkFunctionName(Nothing?::<!ELEMENT(4)!>, "<!ELEMENT_VALIDATION(4)!>")) return null
return "OK"
}
@@ -0,0 +1,46 @@
// FILE: 2_19_1.kt
package org.jetbrains.<!ELEMENT(1)!>.<!ELEMENT(2)!>
val x1 = false
// FILE: 2_19_2.kt
val <!ELEMENT(5)!> = false
// FILE: 2_19_3.kt
package <!ELEMENT(3)!>;
val x3 = true
// FILE: 2_19_4.kt
package <!ELEMENT(4)!>
val x4 = false
// FILE: 2_19_5.kt
package org.jetbrains.kotlin
val x5 = true
// FILE: 2_19_6.kt
val <!ELEMENT(6)!> = false
// FILE: 2_19_7.kt
package part_1
import org.jetbrains.<!ELEMENT(1)!>.<!ELEMENT(2)!>.*
import <!ELEMENT(4)!>
import <!ELEMENT(3)!>.*;
import <!ELEMENT(4)!>.*import <!ELEMENT(3)!>
fun box(): String? {
if (x1 || <!ELEMENT(5)!> || !x3 || x4 || <!ELEMENT(6)!>) return null
return "OK"
}
@@ -0,0 +1,12 @@
infix fun Int.<!ELEMENT(1)!>(value: Int) = value > 100
infix fun Int.<!ELEMENT(2)!>(value: Int): Int {
return value - 90
}
fun box(): String? {
if (1 + 1 <!ELEMENT(1)!> -1001020) return null
if (1 + 1 <!ELEMENT(2)!> 2004 <!ELEMENT(1)!> -0) return null
return "OK"
}
@@ -0,0 +1,40 @@
@Retention(AnnotationRetention.SOURCE)
@Target(AnnotationTarget.EXPRESSION)
annotation class Foo
fun box(): String? {
val lambda_1 = <!ELEMENT(1)!>@ {
return@<!ELEMENT(1)!> false
}
val lambda_2 = @Foo <!ELEMENT(2)!>@ { Boolean
return@<!ELEMENT(2)!> false
}
val x1 = <!ELEMENT(1)!>@ true
var i = 0
<!ELEMENT(2)!>@ while (true) {
i++
if (i < 4) continue@<!ELEMENT(2)!>
i++
if (i > 15) break@<!ELEMENT(2)!>
}
var j = 0
<!ELEMENT(1)!>@ for (k in 0..20) {
j++
if (k < 4) continue@<!ELEMENT(1)!>
j++
if (k > 15) break@<!ELEMENT(1)!>
}
if (lambda_1()) return null
if (lambda_2()) return null
if (!x1) return null
if (i != 17) return null
if (j != 30) return null
return "OK"
}
@@ -0,0 +1,24 @@
fun <!ELEMENT(3)!>() {
val l = <!ELEMENT(2)!>@ {
return@<!ELEMENT(2)!>
}
l()
return@<!ELEMENT(1)!>
}
fun box(): String? {
<!ELEMENT(3)!>()
var i = 0
<!ELEMENT(2)!>@ while (i < 10) {
i++
if (i <= 7) {
continue@<!ELEMENT(2)!>
}
if (i > 5) {
break@<!ELEMENT(2)!>
}
}
return "OK"
}
@@ -0,0 +1,23 @@
<!DIRECTIVES("HELPERS: REFLECT")!>
open class A {
val x1 = true
}
final object <!ELEMENT(2)!> {
val x1 = false
}
object <!ELEMENT(1)!> : A() {
val x2 = false
}
fun box(): String? {
if (<!ELEMENT(2)!>.x1) return null
if (!<!ELEMENT(1)!>.x1 || <!ELEMENT(1)!>.x2) return null
if (!checkClassName(<!ELEMENT(2)!>::class, "<!ELEMENT_VALIDATION(2)!>")) return null
if (!checkClassName(<!ELEMENT(1)!>::class, "<!ELEMENT_VALIDATION(1)!>")) return null
return "OK"
}
@@ -0,0 +1,9 @@
<!DIRECTIVES("HELPERS: REFLECT")!>
package org.jetbrains.<!ELEMENT(1)!>
fun box(): String? {
if (!checkPackageName("org.jetbrains.<!ELEMENT_VALIDATION(1)!>.<!CLASS_OF_FILE!>", "org.jetbrains.<!ELEMENT_VALIDATION(1)!>")) return null
return "OK"
}
@@ -0,0 +1,9 @@
<!DIRECTIVES("HELPERS: REFLECT")!>
package <!ELEMENT(1)!>
fun box(): String? {
if (!checkPackageName("<!ELEMENT_VALIDATION(1)!>.<!CLASS_OF_FILE!>", "<!ELEMENT_VALIDATION(1)!>")) return null
return "OK"
}
@@ -0,0 +1,29 @@
<!DIRECTIVES("HELPERS: REFLECT")!>
fun f1(<!ELEMENT(1)!>: Boolean) = !!!<!ELEMENT(1)!>
fun f2(<!ELEMENT(2)!>: Boolean, <!ELEMENT(3)!>: Boolean) = <!ELEMENT(2)!> && <!ELEMENT(3)!>
fun f3(<!ELEMENT(4)!>: Boolean, <!ELEMENT(5)!>: Boolean = <!ELEMENT(4)!>) = <!ELEMENT(4)!> || !<!ELEMENT(5)!>
class A {
var x1: Boolean = false
set(<!ELEMENT(6)!>) {
field = !<!ELEMENT(6)!>
}
}
fun box(): String? {
val a = A()
a.x1 = false
if (f1(true)) return null
if (!f2(true, true)) return null
if (f3(false, true)) return null
if (!a.x1) return null
if (!checkParameter(::f1, "<!ELEMENT_VALIDATION(1)!>")) return null
if (!checkParameters(::f2, listOf("<!ELEMENT_VALIDATION(2)!>", "<!ELEMENT_VALIDATION(3)!>"))) return null
if (!checkParameters(::f3, listOf("<!ELEMENT_VALIDATION(4)!>", "<!ELEMENT_VALIDATION(5)!>"))) return null
if (!checkSetterParameterName(A::x1, "<!ELEMENT_VALIDATION(6)!>")) return null
return "OK"
}
@@ -0,0 +1,35 @@
<!DIRECTIVES("HELPERS: REFLECT")!>
class A {
var x1: String = "100"
set(<!ELEMENT(1)!>) {
field = "$<!ELEMENT(1)!> 10"
}
}
object B {
var x2: String = "101"
set(<!ELEMENT(2)!>) = kotlin.Unit
}
var x3: String = "102"
set(<!ELEMENT(3)!>) {
field = "${<!ELEMENT(3)!>} 11"
}
fun box(): String? {
val a = A()
a.x1 = "0"
B.x2 = "1"
x3 = "2"
if (a.x1 != "0 10") return null
if (B.x2 != "101") return null
if (x3 != "2 11") return null
if (!checkSetterParameterName(A::x1, "<!ELEMENT_VALIDATION(1)!>")) return null
if (!checkSetterParameterName(B::x2, "<!ELEMENT_VALIDATION(2)!>")) return null
if (!checkSetterParameterName(::x3, "<!ELEMENT_VALIDATION(3)!>")) return null
return "OK"
}
@@ -0,0 +1,110 @@
<!DIRECTIVES("HELPERS: REFLECT")!>
package org.jetbrains.<!ELEMENT(1)!>
open class <!ELEMENT(2)!>
open class <!ELEMENT(3)!><T>
typealias D<<!ELEMENT(6)!>> = <!ELEMENT(3)!><<!ELEMENT(6)!>>
inline fun <reified <!ELEMENT(4)!>, reified <!ELEMENT(5)!>> f1() =
when (<!ELEMENT(2)!>()) {
is <!ELEMENT(4)!> -> true
is <!ELEMENT(5)!> -> false
else -> false
}
inline fun <reified T : D<<!ELEMENT(2)!>>> T.f2(value: T) = value is <!ELEMENT(2)!>
class A<K: List<out <!ELEMENT(3)!><out String>>> {
val x = true
}
class B<K, T: A<List<out <!ELEMENT(3)!><String>>>> {
var x = false
}
fun <T : org.jetbrains.<!ELEMENT(1)!>.<!ELEMENT(2)!>> T.f3() = false
fun f4(x1: List<out <!ELEMENT(3)!><String>>): Boolean {
return true
}
fun f5(x1: List<List<List<<!ELEMENT(2)!>?>>>) = false
fun f6(x1: <!ELEMENT(2)!>) = false
fun f7(x1: <!ELEMENT(3)!><*>) = true
fun f8(x1: <!ELEMENT(3)!><out Any>) = false
fun f9(x1: <!ELEMENT(3)!><out List<<!ELEMENT(3)!><*>>>) = true
val x1: List<<!ELEMENT(2)!>?> = listOf(<!ELEMENT(2)!>(), null, <!ELEMENT(2)!>())
lateinit var x2: List<<!ELEMENT(3)!><out Number>?>
fun box(): String? {
x2 = listOf(<!ELEMENT(3)!><Int>(), null, <!ELEMENT(3)!>())
if (!f1<<!ELEMENT(2)!>, <!ELEMENT(3)!><<!ELEMENT(2)!>>>()) return null
if (<!ELEMENT(3)!><<!ELEMENT(2)!>>().f2(<!ELEMENT(3)!>())) return null
if (!A<List<<!ELEMENT(3)!><String>>>().x) return null
if (B<<!ELEMENT(2)!>, A<List<<!ELEMENT(3)!><String>>>>().x) return null
if (<!ELEMENT(2)!>().f3()) return null
if (!f4(listOf(<!ELEMENT(3)!>()))) return null
if (f5(listOf(listOf(listOf(null, <!ELEMENT(2)!>(), null, <!ELEMENT(2)!>()))))) return null
if (f6(<!ELEMENT(2)!>())) return null
if (!f7(<!ELEMENT(3)!><Nothing>())) return null
if (f8(<!ELEMENT(3)!><<!ELEMENT(2)!>>())) return null
if (!f9(<!ELEMENT(3)!><List<<!ELEMENT(3)!><<!ELEMENT(2)!>>>>())) return null
if (x1.containsAll(listOf(<!ELEMENT(2)!>(), null, <!ELEMENT(2)!>()))) return null
if (x2.containsAll(listOf(<!ELEMENT(3)!><Int>(), null, <!ELEMENT(3)!>()))) return null
if (!checkCallableTypeParametersWithUpperBounds(
<!ELEMENT(3)!><<!ELEMENT(2)!>>::f2,
listOf(
Pair("T", listOf("org.jetbrains.<!ELEMENT(1)!>.D<org.jetbrains.<!ELEMENT(1)!>.<!ELEMENT(2)!>> /* = org.jetbrains.<!ELEMENT(1)!>.<!ELEMENT(3)!><org.jetbrains.<!ELEMENT(1)!>.<!ELEMENT(2)!>> */"))
)
)) return null
if (!checkClassTypeParametersWithUpperBounds(
A::class,
listOf(
Pair("K", listOf("kotlin.collections.List<out org.jetbrains.<!ELEMENT(1)!>.<!ELEMENT(3)!><out kotlin.String>>"))
)
)) return null
if (!checkClassTypeParametersWithUpperBounds(
B::class,
listOf(
Pair("T", listOf("org.jetbrains.<!ELEMENT(1)!>.A<kotlin.collections.List<out org.jetbrains.<!ELEMENT(1)!>.<!ELEMENT(3)!><kotlin.String>>>"))
)
)) return null
if (!checkCallableTypeParametersWithUpperBounds(
<!ELEMENT(2)!>::f3,
listOf(
Pair("T", listOf("org.jetbrains.<!ELEMENT(1)!>.<!ELEMENT(2)!>"))
)
)) return null
if (!checkParameterType(::f4, "x1", "kotlin.collections.List<out org.jetbrains.<!ELEMENT(1)!>.<!ELEMENT(3)!><kotlin.String>>")) return null
if (!checkParameterType(::f5, "x1", "kotlin.collections.List<kotlin.collections.List<kotlin.collections.List<org.jetbrains.<!ELEMENT(1)!>.<!ELEMENT(2)!>?>>>")) return null
if (!checkPropertyType(::x1, "kotlin.collections.List<org.jetbrains.<!ELEMENT(1)!>.<!ELEMENT(2)!>?>")) return null
if (!checkPropertyType(::x2, "kotlin.collections.List<org.jetbrains.<!ELEMENT(1)!>.<!ELEMENT(3)!><out kotlin.Number>?>")) return null
if (!checkParameterType(::f6, "x1", "org.jetbrains.<!ELEMENT(1)!>.<!ELEMENT(2)!>")) return null
if (!checkParameterType(::f7, "x1", "org.jetbrains.<!ELEMENT(1)!>.<!ELEMENT(3)!><*>")) return null
if (!checkParameterType(::f8, "x1", "org.jetbrains.<!ELEMENT(1)!>.<!ELEMENT(3)!><out kotlin.Any>")) return null
if (!checkParameterType(::f9, "x1", "org.jetbrains.<!ELEMENT(1)!>.<!ELEMENT(3)!><out kotlin.collections.List<org.jetbrains.<!ELEMENT(1)!>.<!ELEMENT(3)!><*>>>")) return null
return "OK"
}
@@ -0,0 +1,17 @@
fun box(): String? {
val <!ELEMENT(1)!> = "0"
val <!ELEMENT(2)!> = "1"
val x1 = "${<!ELEMENT(2)!>}"
val x2 = "..." + "...$<!ELEMENT(1)!>..." + "..."
var x3 = "$<!ELEMENT(2)!>${<!ELEMENT(1)!>}$<!ELEMENT(2)!>"
if (<!ELEMENT(2)!> != "1") return null
if (<!ELEMENT(1)!> != "0") return null
if (x1 != "1") return null
if (x2 != "......0......") return null
if (x3 != "101") return null
return "OK"
}
@@ -0,0 +1,17 @@
<!DIRECTIVES("HELPERS: REFLECT")!>
typealias <!ELEMENT(1)!> = Boolean
internal typealias <!ELEMENT(2)!><<!ELEMENT(3)!>> = Map<<!ELEMENT(3)!>, List<<!ELEMENT(3)!>>?>
fun box(): String? {
val x1: <!ELEMENT(2)!><Boolean> = mapOf(true to listOf(false, false), false to null)
val x2: <!ELEMENT(1)!> = false
if (!x1[true]!!.containsAll(listOf(false, false)) || x1[false] != null) return null
if (x2) return null
if (!checkClassName(<!ELEMENT(1)!>::class, "kotlin.Boolean")) return null
return "OK"
}
@@ -0,0 +1,54 @@
<!DIRECTIVES("HELPERS: REFLECT")!>
class A <<!ELEMENT(1)!>, <!ELEMENT(2)!>>
where <!ELEMENT(1)!> : CharSequence,
<!ELEMENT(2)!> : Comparable<<!ELEMENT(1)!>> {
fun getValue() = false
}
annotation class B <<!ELEMENT(3)!>>
where <!ELEMENT(3)!> : CharSequence,
@A<List<Nothing?>> <!ELEMENT(3)!> : Comparable<<!ELEMENT(3)!>> {
}
annotation class C <<!ELEMENT(4)!>, <!ELEMENT(5)!>> where @property:C <!ELEMENT(4)!> : CharSequence, <!ELEMENT(5)!> : Comparable<<!ELEMENT(5)!>> {
}
fun <<!ELEMENT(4)!>, <!ELEMENT(5)!>> d(): Boolean
where <!ELEMENT(4)!> : Any,
<!ELEMENT(4)!> : Iterable<*>,
<!ELEMENT(4)!> : Collection<*>,
<!ELEMENT(4)!> : MutableCollection<*>,
<!ELEMENT(5)!> : Comparable<<!ELEMENT(4)!>> = true
fun box(): String? {
if (!d<MutableSet<Any>, Comparable<MutableSet<Any>>>()) return null
if (A<String, String>().getValue()) return null
if (!checkClassTypeParametersWithUpperBounds(
A::class,
listOf(
Pair("<!ELEMENT_VALIDATION(1)!>", listOf("kotlin.CharSequence")),
Pair("<!ELEMENT_VALIDATION(2)!>", listOf("kotlin.Comparable<<!ELEMENT(1)!>>"))
)
)) return null
if (!checkClassTypeParametersWithUpperBounds(
B::class,
listOf(
Pair("<!ELEMENT_VALIDATION(3)!>", listOf("kotlin.CharSequence", "kotlin.Comparable<<!ELEMENT(3)!>>"))
)
)) return null
if (!checkClassTypeParametersWithUpperBounds(
C::class,
listOf(
Pair("<!ELEMENT_VALIDATION(4)!>", listOf("kotlin.CharSequence")),
Pair("<!ELEMENT_VALIDATION(5)!>", listOf("kotlin.Comparable<<!ELEMENT(5)!>>"))
)
)) return null
return "OK"
}
@@ -0,0 +1,48 @@
<!DIRECTIVES("HELPERS: REFLECT")!>
package org.jetbrains.<!ELEMENT(1)!>
open class <!ELEMENT(2)!> {
val x1 = false
}
open class <!ELEMENT(3)!><T> {
val x1 = true
}
typealias A<<!ELEMENT(4)!>> = <!ELEMENT(3)!><<!ELEMENT(4)!>>
class B<<!ELEMENT(5)!>, <!ELEMENT(6)!>> {
val x1: <!ELEMENT(5)!> = <!ELEMENT(3)!><<!ELEMENT(6)!>>() as <!ELEMENT(5)!>
val x2: A<<!ELEMENT(6)!>> = <!ELEMENT(3)!><<!ELEMENT(5)!>>() as A<<!ELEMENT(6)!>>
val x3: <!ELEMENT(6)!> = <!ELEMENT(2)!>() as <!ELEMENT(6)!>
}
fun <<!ELEMENT(7)!>: Number> f1(): Boolean {
val x1: <!ELEMENT(7)!> = 10 as <!ELEMENT(7)!>
return false
}
inline fun <reified <!ELEMENT(8)!>, reified <!ELEMENT(9)!> : Any> <!ELEMENT(8)!>.f2() = true
val <<!ELEMENT(10)!>> <!ELEMENT(10)!>.x1: <!ELEMENT(3)!><Int>
get() = <!ELEMENT(3)!><Int>()
fun box(): String? {
val b = B<<!ELEMENT(3)!><<!ELEMENT(2)!>>, <!ELEMENT(2)!>>()
if (!null.x1.x1) return null
if (!b.x1.x1 || !b.x2.x1 || b.x3.x1) return null
if (f1<Byte>()) return null
if (!0.f2<Int, <!ELEMENT(2)!>>()) return null
if (!(-1).x1.x1) return null
if (!checkCallableTypeParameter(Any::x1, "<!ELEMENT_VALIDATION(10)!>")) return null
if (!checkClassTypeParameters(B::class, listOf("<!ELEMENT_VALIDATION(2)!>", "<!ELEMENT_VALIDATION(5)!>"))) return null
if (!checkTypeProperties(B::class, listOf(
Pair("x1", "<!ELEMENT(5)!>"),
Pair("x2", "org.jetbrains.<!ELEMENT(1)!>.A<<!ELEMENT(6)!>> /* = org.jetbrains.<!ELEMENT(1)!>.<!ELEMENT(3)!><<!ELEMENT(6)!>> */"),
Pair("x3", "<!ELEMENT(6)!>")
))) return null
return "OK"
}
@@ -0,0 +1,52 @@
<!DIRECTIVES("HELPERS: REFLECT")!>
package org.jetbrains.<!ELEMENT(1)!>
annotation class <!ELEMENT(2)!>
annotation class <!ELEMENT(3)!> <T> (val a: String)
class A {
@field:<!ELEMENT(2)!>
val x1: Int = 0
@setparam:<!ELEMENT(2)!>
var x2: Int = 1
val @receiver:org.jetbrains.<!ELEMENT(1)!>.<!ELEMENT(3)!><List<Int>>("false") String.x3: Int
get() {
return 2
}
@org.jetbrains.<!ELEMENT(1)!>.<!ELEMENT(3)!><Int>("1")
val x4: Int = 3
@<!ELEMENT(2)!>
val x5: Int = 4
val x6: Int = "...".x3
}
@<!ELEMENT(2)!> val x6 = 5
@org.jetbrains.<!ELEMENT(1)!>.<!ELEMENT(3)!><<!ELEMENT(2)!>>(".") fun f1() = false
fun box(): String? {
val a = A()
if (a.x1 != 0 || a.x2 != 1 || a.x6 != 2 || a.x4 != 3 || a.x5 != 4 || x6 != 5) return null
if (f1()) return null
if (!checkProperties(A::class, listOf("x1", "x2", "x3", "x4", "x5"))) return null
if (!checkPropertiesWithAnnotation(
A::class,
listOf(
Pair("x4", listOf("org.jetbrains.<!ELEMENT_VALIDATION(1)!>.<!ELEMENT_VALIDATION(3)!>")),
Pair("x5", listOf("org.jetbrains.<!ELEMENT_VALIDATION(1)!>.<!ELEMENT_VALIDATION(2)!>"))
)
)) return null
if (!checkPropertyAnnotation(::x6, "org.jetbrains.<!ELEMENT_VALIDATION(1)!>.<!ELEMENT_VALIDATION(2)!>")) return null
if (!checkFunctionAnnotation(::f1, "org.jetbrains.<!ELEMENT_VALIDATION(1)!>.<!ELEMENT_VALIDATION(3)!>")) return null
return "OK"
}
@@ -0,0 +1,17 @@
<!DIRECTIVES("WITH_RUNTIME")!>
fun f1(<!ELEMENT(1)!>: Boolean, <!ELEMENT(2)!>: Boolean) = <!ELEMENT(1)!> && !!!<!ELEMENT(2)!>
fun f2(<!ELEMENT(3)!>: Boolean): Boolean {
return !<!ELEMENT(3)!>
}
fun f3(vararg <!ELEMENT(4)!>: Boolean, <!ELEMENT(5)!>: Boolean) = <!ELEMENT(4)!>.any { it } && <!ELEMENT(5)!>
fun box(): String? {
if (f1(<!ELEMENT(1)!> = false, <!ELEMENT(2)!> = true)) return null
if (!f2(<!ELEMENT(3)!> = false && true || true && false)) return null
if (!f3(<!ELEMENT(4)!> = *booleanArrayOf(true, false, false, true), <!ELEMENT(5)!> = true)) return null
return "OK"
}
@@ -0,0 +1,33 @@
<!DIRECTIVES("WITH_RUNTIME")!>
val <!ELEMENT(1)!> = {`false`: Boolean -> !`false` }
fun f1(value: Pair<String, String>): Boolean {
val (<!ELEMENT(2)!>, <!ELEMENT(3)!>) = value
if (<!ELEMENT(2)!> != "1") return false
if (<!ELEMENT(3)!> != "2") return false
return true
}
fun box(): String? {
var i = 0
for (<!ELEMENT(4)!>: Int in 0..10) {
i++
}
if (!<!ELEMENT(1)!>(false)) return null
val <!ELEMENT(5)!> = { <!ELEMENT(6)!>: Boolean, <!ELEMENT(7)!>: Int -> true }
var <!ELEMENT(8)!>: Boolean
<!ELEMENT(8)!> = false
if (!f1(Pair("1", "2"))) return null
if (i != 11) return null
if (!<!ELEMENT(5)!>(false, 10)) return null
if (<!ELEMENT(8)!>) return null
return "OK"
}