From 16ab8b07213e94c931b2c6551092d6caab0d0e62 Mon Sep 17 00:00:00 2001 From: manu Date: Tue, 27 Feb 2024 23:37:33 +0100 Subject: [PATCH] Receiver fixes --- .../compiler/ir/InjectCallTransformer.kt | 42 +++++++++---------- 1 file changed, 19 insertions(+), 23 deletions(-) diff --git a/compiler/src/main/kotlin/com/ivianuu/injekt/compiler/ir/InjectCallTransformer.kt b/compiler/src/main/kotlin/com/ivianuu/injekt/compiler/ir/InjectCallTransformer.kt index 1f00c75c1..cf10acc2d 100644 --- a/compiler/src/main/kotlin/com/ivianuu/injekt/compiler/ir/InjectCallTransformer.kt +++ b/compiler/src/main/kotlin/com/ivianuu/injekt/compiler/ir/InjectCallTransformer.kt @@ -332,31 +332,27 @@ class InjectCallTransformer( (if (symbol.name == DISPATCH_RECEIVER_NAME || symbol.name == EXTENSION_RECEIVER_NAME) allScopes.reversed().firstNotNullOfOrNull { scope -> val element = scope.irElement + val originalInjectableClassifier = injectable.callable.originalType.classifier.symbol when { element is IrClass && - element.symbol.toFirSymbol>() == injectable.type.classifier.symbol -> - element.thisReceiver!!.symbol - element is IrFunction && - ((element.parentClassOrNull?.symbol?.toFirSymbol>() == - injectable.type.classifier.symbol!! && - element.dispatchReceiverParameter != null) || - element.extensionReceiverParameter?.startOffset == symbol.source!!.startOffset) -> - when (symbol.name) { - DISPATCH_RECEIVER_NAME -> element.dispatchReceiverParameter?.symbol ?: error("wtf $symbol") - EXTENSION_RECEIVER_NAME -> element.extensionReceiverParameter?.symbol ?: error("wtf $symbol") - else -> null - } - element is IrProperty && - allScopes.getOrNull(allScopes.indexOf(scope) + 1)?.irElement !is IrField && - ((element.parentClassOrNull?.symbol?.toFirSymbol>() == - injectable.type.classifier.symbol!! && - element.getter?.dispatchReceiverParameter != null) || - element.getter?.extensionReceiverParameter?.startOffset == symbol.source!!.startOffset)-> - when (symbol.name) { - DISPATCH_RECEIVER_NAME -> element.getter!!.dispatchReceiverParameter!!.symbol - EXTENSION_RECEIVER_NAME -> element.getter!!.extensionReceiverParameter!!.symbol - else -> null - } + element.symbol.toFirSymbol>() == + originalInjectableClassifier -> element.thisReceiver!!.symbol + symbol.name == DISPATCH_RECEIVER_NAME && + element is IrFunction && + element.dispatchReceiverParameter?.type?.classOrFail?.toFirSymbol>() == originalInjectableClassifier -> + element.dispatchReceiverParameter!!.symbol + symbol.name == EXTENSION_RECEIVER_NAME && + element is IrFunction && + element.extensionReceiverParameter?.startOffset == symbol.source!!.startOffset -> + element.extensionReceiverParameter!!.symbol + symbol.name == DISPATCH_RECEIVER_NAME && + element is IrProperty && + element.getter!!.dispatchReceiverParameter?.type?.classOrFail?.toFirSymbol>() == originalInjectableClassifier -> + element.getter!!.dispatchReceiverParameter!!.symbol + symbol.name == EXTENSION_RECEIVER_NAME && + element is IrProperty && + element.getter!!.extensionReceiverParameter?.startOffset == symbol.source!!.startOffset -> + element.getter!!.extensionReceiverParameter!!.symbol else -> null } } else null)