[FIR] Fix enhancement of FlexibleNullability and EnhancedNullability

- Add utilities to add new attribute to ConeAttributes
- Get rid of FlexibleNullability attribute (it can be easily inferred
    for any flexible type at any moment)
- Fix determining of EnhancedNullability attribute
This commit is contained in:
Dmitriy Novozhilov
2021-03-09 14:51:19 +03:00
parent 0108f8a1b4
commit 65ea4e184a
290 changed files with 1395 additions and 2037 deletions
@@ -1,51 +1,52 @@
fun test1(): J<String?> {
return local fun <anonymous>(x: String?): String? {
fun test1(): J<@FlexibleNullability String?> {
return local fun <anonymous>(x: @FlexibleNullability String?): @FlexibleNullability String? {
return x
}
/*-> J<String?> */
/*-> J<@FlexibleNullability String?> */
}
fun test2(): J<String?> {
return local fun <anonymous>(x: String): String? {
fun test2(): J<@FlexibleNullability String?> {
return local fun <anonymous>(x: String): @FlexibleNullability String? {
return x
}
/*-> J<String?> */
/*-> J<@FlexibleNullability String?> */
}
fun test3() {
return bar<String?>(j = local fun <anonymous>(x: String): String? {
return bar<@FlexibleNullability String?>(j = local fun <anonymous>(x: String): @FlexibleNullability String? {
return x
}
/*-> J<String?>? */)
/*-> @FlexibleNullability J<@FlexibleNullability String?>? */)
}
fun test4(a: Any) {
a as J<String> /*~> Unit */
bar<String?>(j = a /*as J<String> */)
bar<@FlexibleNullability String?>(j = a /*as J<String> */)
}
fun test5(a: Any) {
a as Function1<String, String> /*~> Unit */
bar<String?>(j = a /*as Function1<String, String> */ /*-> J<String?>? */)
bar<@FlexibleNullability String?>(j = a /*as Function1<String, String> */ /*-> @FlexibleNullability J<@FlexibleNullability String?>? */)
}
fun <T : Any?> test6(a: Function1<T, T>) {
bar<T?>(j = a /*-> J<T?>? */)
bar<@FlexibleNullability T?>(j = a /*-> @FlexibleNullability J<@FlexibleNullability T?>? */)
}
fun <T : Any?> test7(a: Any) {
a as Function1<T, T> /*~> Unit */
bar<T?>(j = a /*as Function1<T, T> */ /*-> J<T?>? */)
bar<@FlexibleNullability T?>(j = a /*as Function1<T, T> */ /*-> @FlexibleNullability J<@FlexibleNullability T?>? */)
}
fun test8(efn: @ExtensionFunctionType Function1<String, String>): J<String?> {
return efn /*-> J<String?> */
fun test8(efn: @ExtensionFunctionType Function1<String, String>): J<@FlexibleNullability String?> {
return efn /*-> J<@FlexibleNullability String?> */
}
fun test9(efn: @ExtensionFunctionType Function1<String, String>) {
bar<String?>(j = efn /*-> J<String?>? */)
bar<@FlexibleNullability String?>(j = efn /*-> @FlexibleNullability J<@FlexibleNullability String?>? */)
}
fun test10(fn: Function1<Int, String>) {
bar2x<Int?>(j2x = fn /*-> J2X<Int?>? */)
bar2x<@FlexibleNullability Int?>(j2x = fn /*-> @FlexibleNullability J2X<@FlexibleNullability Int?>? */)
}