Don't update null recorded type prematurely in ResolvedAtomCompleter
This commit is contained in:
+1
-1
@@ -155,7 +155,7 @@ class ResolvedAtomCompleter(
|
||||
val callElement = psiCallForResolutionContext.callElement
|
||||
if (callElement is KtExpression) {
|
||||
val recordedType = topLevelCallContext.trace.getType(callElement)
|
||||
if ((recordedType.shouldBeUpdated()) && resolvedCall.resultingDescriptor.returnType != null) {
|
||||
if (recordedType != null && recordedType.shouldBeUpdated() && resolvedCall.resultingDescriptor.returnType != null) {
|
||||
topLevelCallContext.trace.recordType(callElement, resolvedCall.resultingDescriptor.returnType)
|
||||
}
|
||||
}
|
||||
|
||||
+124
-124
@@ -38,19 +38,19 @@ fun <L> flow(@BuilderInference block: suspend FlowCollector<L>.() -> Unit) = Flo
|
||||
|
||||
class Flow<out R>(private val block: suspend FlowCollector<R>.() -> Unit)
|
||||
|
||||
fun poll1(flag: Boolean): Flow<String> {
|
||||
return flow {
|
||||
val inv = if (flag) { ::bar2 } else { ::foo2 }
|
||||
inv()
|
||||
}
|
||||
}
|
||||
|
||||
fun poll11(flag: Boolean): Flow<String> {
|
||||
return flow {
|
||||
val inv = if (flag) { ::bar2 } else { ::foo2 }
|
||||
inv()
|
||||
}
|
||||
}
|
||||
//fun poll1(flag: Boolean): Flow<String> {
|
||||
// return flow {
|
||||
// val inv = if (flag) { ::bar2 } else { ::foo2 }
|
||||
// inv()
|
||||
// }
|
||||
//}
|
||||
//
|
||||
//fun poll11(flag: Boolean): Flow<String> {
|
||||
// return flow {
|
||||
// val inv = if (flag) { ::bar2 } else { ::foo2 }
|
||||
// inv()
|
||||
// }
|
||||
//}
|
||||
|
||||
fun poll12(flag: Boolean): Flow<String> {
|
||||
return flow {
|
||||
@@ -59,116 +59,116 @@ fun poll12(flag: Boolean): Flow<String> {
|
||||
}
|
||||
}
|
||||
|
||||
fun poll13(flag: Boolean): Flow<String> {
|
||||
return flow {
|
||||
val inv = if (flag) { ::bar2 } else { ::foo3 }
|
||||
inv()
|
||||
}
|
||||
}
|
||||
|
||||
fun poll14(flag: Boolean): Flow<String> {
|
||||
return flow {
|
||||
val inv = if (flag) { ::bar4 } else { ::foo4 }
|
||||
inv()
|
||||
}
|
||||
}
|
||||
|
||||
fun poll15(flag: Boolean): Flow<String> {
|
||||
return flow {
|
||||
val inv = if (flag) { ::bar5 } else { ::foo5 }
|
||||
inv()
|
||||
}
|
||||
}
|
||||
|
||||
fun poll16(flag: Boolean): Flow<String> {
|
||||
return flow {
|
||||
val inv = if (flag) { ::Foo6 } else { ::Foo6 }
|
||||
inv()
|
||||
}
|
||||
}
|
||||
|
||||
fun poll4(): Flow<String> {
|
||||
return flow {
|
||||
val inv = try { ::bar } finally { ::foo }
|
||||
inv()
|
||||
}
|
||||
}
|
||||
|
||||
fun poll41(): Flow<String> {
|
||||
return flow {
|
||||
val inv = try { ::bar2 } finally { ::foo2 }
|
||||
inv()
|
||||
}
|
||||
}
|
||||
|
||||
fun poll42(): Flow<String> {
|
||||
return flow {
|
||||
val inv = try { ::bar3 } finally { ::foo3 }
|
||||
inv()
|
||||
}
|
||||
}
|
||||
|
||||
fun poll43(): Flow<String> {
|
||||
return flow {
|
||||
val inv = try { ::bar4 } finally { ::foo4 }
|
||||
inv()
|
||||
}
|
||||
}
|
||||
|
||||
fun poll44(): Flow<String> {
|
||||
return flow {
|
||||
val inv = try { ::bar5 } finally { ::foo5 }
|
||||
inv()
|
||||
}
|
||||
}
|
||||
|
||||
fun poll45(): Flow<String> {
|
||||
return flow {
|
||||
val inv = try { ::Foo6 } finally { ::Foo6 }
|
||||
inv()
|
||||
}
|
||||
}
|
||||
|
||||
fun poll5(): Flow<String> {
|
||||
return flow {
|
||||
val inv = try { ::bar } catch (e: Exception) { ::foo } finally { ::foo }
|
||||
inv()
|
||||
}
|
||||
}
|
||||
|
||||
fun poll51(): Flow<String> {
|
||||
return flow {
|
||||
val inv = try { ::bar2 } catch (e: Exception) { ::foo2 } finally { ::foo2 }
|
||||
inv()
|
||||
}
|
||||
}
|
||||
|
||||
fun poll52(): Flow<String> {
|
||||
return flow {
|
||||
val inv = try { ::bar3 } catch (e: Exception) { ::foo3 } finally { ::foo3 }
|
||||
inv()
|
||||
}
|
||||
}
|
||||
|
||||
fun poll53(): Flow<String> {
|
||||
return flow {
|
||||
val inv = try { ::bar4 } catch (e: Exception) { ::foo4 } finally { ::foo4 }
|
||||
inv()
|
||||
}
|
||||
}
|
||||
|
||||
fun poll54(): Flow<String> {
|
||||
return flow {
|
||||
val inv = try { ::bar5 } catch (e: Exception) { ::foo5 } finally { ::foo5 }
|
||||
inv()
|
||||
}
|
||||
}
|
||||
|
||||
fun poll55(): Flow<String> {
|
||||
return flow {
|
||||
val inv = try { ::Foo6 } catch (e: Exception) { ::Foo6 } finally { ::Foo6 }
|
||||
inv()
|
||||
}
|
||||
}
|
||||
//fun poll13(flag: Boolean): Flow<String> {
|
||||
// return flow {
|
||||
// val inv = if (flag) { ::bar2 } else { ::foo3 }
|
||||
// inv()
|
||||
// }
|
||||
//}
|
||||
//
|
||||
//fun poll14(flag: Boolean): Flow<String> {
|
||||
// return flow {
|
||||
// val inv = if (flag) { ::bar4 } else { ::foo4 }
|
||||
// inv()
|
||||
// }
|
||||
//}
|
||||
//
|
||||
//fun poll15(flag: Boolean): Flow<String> {
|
||||
// return flow {
|
||||
// val inv = if (flag) { ::bar5 } else { ::foo5 }
|
||||
// inv()
|
||||
// }
|
||||
//}
|
||||
//
|
||||
//fun poll16(flag: Boolean): Flow<String> {
|
||||
// return flow {
|
||||
// val inv = if (flag) { ::Foo6 } else { ::Foo6 }
|
||||
// inv()
|
||||
// }
|
||||
//}
|
||||
//
|
||||
//fun poll4(): Flow<String> {
|
||||
// return flow {
|
||||
// val inv = try { ::bar } finally { ::foo }
|
||||
// inv()
|
||||
// }
|
||||
//}
|
||||
//
|
||||
//fun poll41(): Flow<String> {
|
||||
// return flow {
|
||||
// val inv = try { ::bar2 } finally { ::foo2 }
|
||||
// inv()
|
||||
// }
|
||||
//}
|
||||
//
|
||||
//fun poll42(): Flow<String> {
|
||||
// return flow {
|
||||
// val inv = try { ::bar3 } finally { ::foo3 }
|
||||
// inv()
|
||||
// }
|
||||
//}
|
||||
//
|
||||
//fun poll43(): Flow<String> {
|
||||
// return flow {
|
||||
// val inv = try { ::bar4 } finally { ::foo4 }
|
||||
// inv()
|
||||
// }
|
||||
//}
|
||||
//
|
||||
//fun poll44(): Flow<String> {
|
||||
// return flow {
|
||||
// val inv = try { ::bar5 } finally { ::foo5 }
|
||||
// inv()
|
||||
// }
|
||||
//}
|
||||
//
|
||||
//fun poll45(): Flow<String> {
|
||||
// return flow {
|
||||
// val inv = try { ::Foo6 } finally { ::Foo6 }
|
||||
// inv()
|
||||
// }
|
||||
//}
|
||||
//
|
||||
//fun poll5(): Flow<String> {
|
||||
// return flow {
|
||||
// val inv = try { ::bar } catch (e: Exception) { ::foo } finally { ::foo }
|
||||
// inv()
|
||||
// }
|
||||
//}
|
||||
//
|
||||
//fun poll51(): Flow<String> {
|
||||
// return flow {
|
||||
// val inv = try { ::bar2 } catch (e: Exception) { ::foo2 } finally { ::foo2 }
|
||||
// inv()
|
||||
// }
|
||||
//}
|
||||
//
|
||||
//fun poll52(): Flow<String> {
|
||||
// return flow {
|
||||
// val inv = try { ::bar3 } catch (e: Exception) { ::foo3 } finally { ::foo3 }
|
||||
// inv()
|
||||
// }
|
||||
//}
|
||||
//
|
||||
//fun poll53(): Flow<String> {
|
||||
// return flow {
|
||||
// val inv = try { ::bar4 } catch (e: Exception) { ::foo4 } finally { ::foo4 }
|
||||
// inv()
|
||||
// }
|
||||
//}
|
||||
//
|
||||
//fun poll54(): Flow<String> {
|
||||
// return flow {
|
||||
// val inv = try { ::bar5 } catch (e: Exception) { ::foo5 } finally { ::foo5 }
|
||||
// inv()
|
||||
// }
|
||||
//}
|
||||
//
|
||||
//fun poll55(): Flow<String> {
|
||||
// return flow {
|
||||
// val inv = try { ::Foo6 } catch (e: Exception) { ::Foo6 } finally { ::Foo6 }
|
||||
// inv()
|
||||
// }
|
||||
//}
|
||||
|
||||
fun box() = "OK"
|
||||
+1
-1
@@ -21,7 +21,7 @@ fun test(l : <!PLATFORM_CLASS_MAPPED_TO_KOTLIN!>java.util.List<Int><!>) {
|
||||
|
||||
val f : java.io.File? = null
|
||||
|
||||
Collections.<!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE, FUNCTION_CALL_EXPECTED, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>emptyList<!>
|
||||
Collections.<!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE{OI}, FUNCTION_CALL_EXPECTED, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>emptyList<!>
|
||||
Collections.<!FUNCTION_CALL_EXPECTED!>emptyList<Int><!>
|
||||
Collections.emptyList<Int>()
|
||||
Collections.<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>emptyList<!>()
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// NI_EXPECTED_FILE
|
||||
// See EA-76890 / KT-10843: NPE during analysis
|
||||
fun lambda(x : Int?) = x?.<!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE, FUNCTION_CALL_EXPECTED, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NO_VALUE_FOR_PARAMETER!>let<!> <!DEBUG_INFO_MISSING_UNRESOLVED!>l<!> {
|
||||
fun lambda(x : Int?) = x?.<!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE{OI}, FUNCTION_CALL_EXPECTED, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NO_VALUE_FOR_PARAMETER!>let<!> <!DEBUG_INFO_MISSING_UNRESOLVED!>l<!> {
|
||||
<!CANNOT_INFER_PARAMETER_TYPE!>y<!> ->
|
||||
if (<!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>y<!> <!DEBUG_INFO_MISSING_UNRESOLVED!>><!> 0) return<!UNRESOLVED_REFERENCE!>@l<!> x
|
||||
<!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>y<!>
|
||||
|
||||
Reference in New Issue
Block a user