Avoid non-null assertions for inline classes based on nullable types
Note that there are more places where assertions for inline classes should refined: - lateinit vars - values that come from Java - type casts (interfaces to inline class type)
This commit is contained in:
Vendored
+38
@@ -0,0 +1,38 @@
|
||||
// !LANGUAGE: +InlineClasses
|
||||
|
||||
inline class Result<T>(val a: Any?)
|
||||
|
||||
fun resultOfIntToResultOfInt(r: Result<Int>): Result<Int> {
|
||||
return r
|
||||
}
|
||||
|
||||
fun <T> idResult(r: Result<T>): Result<T> = r
|
||||
|
||||
fun Result<Int>.extension(): Result<Int> = this
|
||||
|
||||
fun box(): String {
|
||||
val r = Result<Int>(null)
|
||||
|
||||
resultOfIntToResultOfInt(r)
|
||||
resultOfIntToResultOfInt(Result<Int>(null))
|
||||
|
||||
val nonNull1 = resultOfIntToResultOfInt(r)
|
||||
val nonNull2 = resultOfIntToResultOfInt(Result<Int>(null))
|
||||
|
||||
resultOfIntToResultOfInt(nonNull1)
|
||||
|
||||
if (nonNull1.a != null) return "fail"
|
||||
if (nonNull2.a != null) return "fail"
|
||||
|
||||
if (resultOfIntToResultOfInt(r).a != null) return "fail"
|
||||
|
||||
idResult(Result<String>(null))
|
||||
|
||||
val id = idResult(r)
|
||||
if (id.a != null) return "fail"
|
||||
|
||||
r.extension()
|
||||
Result<Int>(null).extension()
|
||||
|
||||
return "OK"
|
||||
}
|
||||
Vendored
+14
@@ -0,0 +1,14 @@
|
||||
// !LANGUAGE: +InlineClasses
|
||||
|
||||
inline class AsNonNullPrimitive(val i: Int)
|
||||
inline class AsNonNullReference(val s: String) // 2 assertions (constructor, box method)
|
||||
|
||||
fun nonNullPrimitive(a: AsNonNullPrimitive) {}
|
||||
|
||||
fun nonNullReference(b: AsNonNullReference) {} // assertion
|
||||
fun AsNonNullReference.nonNullReferenceExtension(b1: AsNonNullReference) {} // 2 assertions
|
||||
|
||||
fun asNullablePrimitive(c: AsNonNullPrimitive?) {}
|
||||
fun asNullableReference(c: AsNonNullReference?) {}
|
||||
|
||||
// 5 checkParameterIsNotNull
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
// !LANGUAGE: +InlineClasses
|
||||
|
||||
inline class AsAny(val a: Any?)
|
||||
|
||||
fun asNotNullAny(a: AsAny) {}
|
||||
fun AsAny.asNotNullAnyExtension(b: AsAny): AsAny = this
|
||||
|
||||
// 0 checkParameterIsNotNull
|
||||
Reference in New Issue
Block a user