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| { 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 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| { public final fun test_2(): R|kotlin/Unit| {
@@ -87,7 +87,7 @@ FILE: referenceToExtension.kt
public final fun test_2(): R|kotlin/Unit| { 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 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>() val parameters = mutableListOf<ConeKotlinType>()
if (fir.receiverTypeRef == null && receiverType != null) {
parameters += receiverType
}
val returnType = callableReferenceAdaptation?.let { val returnType = callableReferenceAdaptation?.let {
parameters += it.argumentTypes parameters += it.argumentTypes
@@ -128,7 +131,7 @@ private fun buildReflectionType(
callableReferenceAdaptation?.suspendConversionStrategy == SuspendConversionStrategy.SUSPEND_CONVERSION callableReferenceAdaptation?.suspendConversionStrategy == SuspendConversionStrategy.SUSPEND_CONVERSION
return createFunctionalType( return createFunctionalType(
parameters, parameters,
receiverType = receiverType, receiverType = receiverType.takeIf { fir.receiverTypeRef != null },
rawReturnType = returnType, rawReturnType = returnType,
isKFunctionType = true, isKFunctionType = true,
isSuspend = isSuspend isSuspend = isSuspend