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:
Mikhail Zarechenskiy
2018-02-20 12:46:14 +03:00
parent e3c58eced1
commit f23b5103ec
11 changed files with 115 additions and 15 deletions
@@ -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"
}