[NI] Fix input/output types for callable reference atom
Input and output types are crucial for type variable fixation order and analysis of postponed arguments (callable references, lambdas). Specifically, if there is non-fixed type variable inside input types of a callable reference, then we'll postpone resolution for such callable reference. Initial example with the expected type `KMutableProperty1<*, F>` caused problems because input types were computed incorrectly (while there aren't input types here) #KT-25431 Fixed
This commit is contained in:
@@ -322,7 +322,9 @@ public abstract class KotlinBuiltIns {
|
||||
public final FqNameUnsafe kMutableProperty0 = reflect("KMutableProperty0");
|
||||
public final FqNameUnsafe kMutableProperty1 = reflect("KMutableProperty1");
|
||||
public final FqNameUnsafe kMutableProperty2 = reflect("KMutableProperty2");
|
||||
public final ClassId kProperty = ClassId.topLevel(reflect("KProperty").toSafe());
|
||||
public final FqNameUnsafe kPropertyFqName = reflect("KProperty");
|
||||
public final FqNameUnsafe kMutablePropertyFqName = reflect("KMutableProperty");
|
||||
public final ClassId kProperty = ClassId.topLevel(kPropertyFqName.toSafe());
|
||||
|
||||
public final FqName uByteFqName = fqName("UByte");
|
||||
public final FqName uShortFqName = fqName("UShort");
|
||||
|
||||
@@ -102,8 +102,13 @@ class ReflectionTypes(module: ModuleDescriptor, private val notFoundClasses: Not
|
||||
isNumberedKPropertyType(type) || isNumberedKMutablePropertyType(type)
|
||||
|
||||
private fun isKCallableType(type: KotlinType): Boolean =
|
||||
hasFqName(type.constructor, KotlinBuiltIns.FQ_NAMES.kCallable) ||
|
||||
type.constructor.supertypes.any { isKCallableType(it) }
|
||||
hasKCallableTypeFqName(type) || type.constructor.supertypes.any { isKCallableType(it) }
|
||||
|
||||
fun hasKCallableTypeFqName(type: KotlinType): Boolean =
|
||||
hasFqName(type.constructor, KotlinBuiltIns.FQ_NAMES.kCallable)
|
||||
|
||||
fun hasKMutablePropertyTypeFqName(type: KotlinType): Boolean =
|
||||
hasFqName(type.constructor, KotlinBuiltIns.FQ_NAMES.kMutablePropertyFqName)
|
||||
|
||||
fun isNumberedKMutablePropertyType(type: KotlinType): Boolean {
|
||||
val descriptor = type.constructor.declarationDescriptor as? ClassDescriptor ?: return false
|
||||
@@ -112,6 +117,9 @@ class ReflectionTypes(module: ModuleDescriptor, private val notFoundClasses: Not
|
||||
hasFqName(descriptor, KotlinBuiltIns.FQ_NAMES.kMutableProperty2)
|
||||
}
|
||||
|
||||
fun hasKPropertyTypeFqName(type: KotlinType): Boolean =
|
||||
hasFqName(type.constructor, KotlinBuiltIns.FQ_NAMES.kPropertyFqName)
|
||||
|
||||
fun isNumberedKPropertyType(type: KotlinType): Boolean {
|
||||
val descriptor = type.constructor.declarationDescriptor as? ClassDescriptor ?: return false
|
||||
return hasFqName(descriptor, KotlinBuiltIns.FQ_NAMES.kProperty0) ||
|
||||
|
||||
Reference in New Issue
Block a user