getDataFlowAwareTypes

fun KtExpression.getDataFlowAwareTypes(bindingContext: BindingContext, languageVersionSettings: LanguageVersionSettings, dataFlowValueFactory: DataFlowValueFactory, originalType: KotlinType? = bindingContext.getType(this)): Set<KotlinType>

Returns types considering data flow.

For Example, for s in print(s) below, BindingContext.getType returns String?, but this function returns String.

fun foo(s: String?) {
if (s != null) {
println(s) // s is String (smart cast from String?)
}
}