Validate arguments of KTypeProjection constructor
#KT-34596 Fixed
This commit is contained in:
@@ -73,6 +73,16 @@ public data class KTypeProjection constructor(
|
|||||||
*/
|
*/
|
||||||
public val type: KType?
|
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) {
|
override fun toString(): String = when (variance) {
|
||||||
null -> "*"
|
null -> "*"
|
||||||
KVariance.INVARIANT -> type.toString()
|
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!!)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user