Validate arguments of KTypeProjection constructor

#KT-34596 Fixed
This commit is contained in:
Ilya Gorbunov
2020-06-18 20:26:05 +03:00
parent d41e8ed4ad
commit 53cbcfac5a
2 changed files with 33 additions and 0 deletions
@@ -73,6 +73,16 @@ public data class KTypeProjection constructor(
*/
public val type: KType?
) {
init {
require((variance == null) == (type == null)) {
if (variance == null)
"Star projection must have no type specified."
else
"The projection variance $variance requires type to be specified."
}
}
override fun toString(): String = when (variance) {
null -> "*"
KVariance.INVARIANT -> type.toString()
@@ -0,0 +1,23 @@
/*
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package test.reflection
import kotlin.reflect.KTypeProjection
import kotlin.reflect.KVariance
import kotlin.reflect.typeOf
import kotlin.test.*
class KTypeProjectionTest {
@Test
fun constructorArgumentsValidation() {
assertFailsWith<IllegalArgumentException> { KTypeProjection(null, typeOf<Int>()) }
for (variance in KVariance.values()) {
assertFailsWith<IllegalArgumentException> { KTypeProjection(variance, null) }.let { e ->
assertTrue(variance.toString() in e.message!!)
}
}
}
}