FIR: don't generate extension callable reference without receiver

This commit is contained in:
Mikhail Glukhikh
2021-11-09 09:36:02 +03:00
committed by teamcityserver
parent bcfd970ac5
commit b2d020606e
2 changed files with 6 additions and 3 deletions
@@ -36,7 +36,7 @@ FILE: referenceToExtension.kt
public final fun test_1(): R|kotlin/Unit| {
lval memberValRef: R|kotlin/reflect/KProperty1<GenericTest.B<*>, GenericTest.A<CapturedType(*)>>| = Q|GenericTest.B|::R|SubstitutionOverride</GenericTest.B.memberVal: R|GenericTest.A<CapturedType(*)>|>|
lval memberFunRef: R|@ExtensionFunctionType kotlin/reflect/KFunction1<GenericTest.B<*>, GenericTest.A<CapturedType(*)>>| = Q|GenericTest.B|::R|SubstitutionOverride</GenericTest.B.memberFun: R|GenericTest.A<CapturedType(*)>|>|
lval memberFunRef: R|kotlin/reflect/KFunction1<GenericTest.B<*>, GenericTest.A<CapturedType(*)>>| = Q|GenericTest.B|::R|SubstitutionOverride</GenericTest.B.memberFun: R|GenericTest.A<CapturedType(*)>|>|
}
public final fun test_2(): R|kotlin/Unit| {
@@ -87,7 +87,7 @@ FILE: referenceToExtension.kt
public final fun test_2(): R|kotlin/Unit| {
lval memberValRef: R|kotlin/reflect/KProperty1<NoGenericTest.B, NoGenericTest.A>| = Q|NoGenericTest.B|::R|/NoGenericTest.B.memberVal|
lval memberFunRef: R|@ExtensionFunctionType kotlin/reflect/KFunction1<NoGenericTest.B, NoGenericTest.A>| = Q|NoGenericTest.B|::R|/NoGenericTest.B.memberFun|
lval memberFunRef: R|kotlin/reflect/KFunction1<NoGenericTest.B, NoGenericTest.A>| = Q|NoGenericTest.B|::R|/NoGenericTest.B.memberFun|
}
}
@@ -112,6 +112,9 @@ private fun buildReflectionType(
)
val parameters = mutableListOf<ConeKotlinType>()
if (fir.receiverTypeRef == null && receiverType != null) {
parameters += receiverType
}
val returnType = callableReferenceAdaptation?.let {
parameters += it.argumentTypes
@@ -128,7 +131,7 @@ private fun buildReflectionType(
callableReferenceAdaptation?.suspendConversionStrategy == SuspendConversionStrategy.SUSPEND_CONVERSION
return createFunctionalType(
parameters,
receiverType = receiverType,
receiverType = receiverType.takeIf { fir.receiverTypeRef != null },
rawReturnType = returnType,
isKFunctionType = true,
isSuspend = isSuspend