[FIR2IR] Properly handle error references in generation of receivers
^KT-53698 Fixed
This commit is contained in:
committed by
Space Team
parent
f3da26946b
commit
9946bfcdfd
+7
-6
@@ -13,10 +13,7 @@ import org.jetbrains.kotlin.fir.declarations.utils.isCompanion
|
||||
import org.jetbrains.kotlin.fir.expressions.*
|
||||
import org.jetbrains.kotlin.fir.expressions.builder.buildAnnotationCall
|
||||
import org.jetbrains.kotlin.fir.expressions.impl.FirNoReceiverExpression
|
||||
import org.jetbrains.kotlin.fir.references.FirDelegateFieldReference
|
||||
import org.jetbrains.kotlin.fir.references.FirReference
|
||||
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
|
||||
import org.jetbrains.kotlin.fir.references.FirSuperReference
|
||||
import org.jetbrains.kotlin.fir.references.*
|
||||
import org.jetbrains.kotlin.fir.references.builder.buildResolvedNamedReference
|
||||
import org.jetbrains.kotlin.fir.resolve.calls.FirSyntheticFunctionSymbol
|
||||
import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
|
||||
@@ -1069,8 +1066,12 @@ class CallAndReferenceGenerator(
|
||||
}
|
||||
if (ownerFunction?.extensionReceiverParameter != null) {
|
||||
extensionReceiver = qualifiedAccess.findIrExtensionReceiver(explicitReceiverExpression)?.let {
|
||||
((qualifiedAccess.calleeReference as FirResolvedNamedReference)
|
||||
.resolvedSymbol.fir as? FirCallableDeclaration)?.receiverParameter?.typeRef?.let { receiverType ->
|
||||
val symbol = when (val reference = qualifiedAccess.calleeReference) {
|
||||
is FirResolvedNamedReference -> reference.resolvedSymbol
|
||||
is FirErrorNamedReference -> reference.candidateSymbol
|
||||
else -> null
|
||||
} ?: error("Symbol for call ${qualifiedAccess.render()} not found")
|
||||
(symbol.fir as? FirCallableDeclaration)?.receiverParameter?.typeRef?.let { receiverType ->
|
||||
with(visitor.implicitCastInserter) {
|
||||
it.cast(
|
||||
qualifiedAccess.extensionReceiver,
|
||||
|
||||
+6
@@ -167,6 +167,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT
|
||||
runTest("compiler/testData/codegen/box/annotations/genericAnnotations.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("invisibleFunctionWithReceiverWithSuppress.kt")
|
||||
public void testInvisibleFunctionWithReceiverWithSuppress() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/annotations/invisibleFunctionWithReceiverWithSuppress.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("javaAnnotationArrayValueDefault.kt")
|
||||
public void testJavaAnnotationArrayValueDefault() throws Exception {
|
||||
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
// TARGET_BACKEND: JVM_IR
|
||||
// ISSUE: KT-53698
|
||||
// MODULE: lib
|
||||
package foo
|
||||
|
||||
class Some(val s: String)
|
||||
|
||||
internal fun Some.foo(): String = s
|
||||
|
||||
// MODULE: main(lib)
|
||||
@file:Suppress("INVISIBLE_REFERENCE", "INVISIBLE_MEMBER")
|
||||
package bar
|
||||
|
||||
import foo.Some
|
||||
import foo.foo
|
||||
|
||||
fun box(): String {
|
||||
val some = Some("OK")
|
||||
return some.foo()
|
||||
}
|
||||
@@ -1,5 +1,3 @@
|
||||
// IGNORE_BACKEND_K2: JVM_IR, JS_IR
|
||||
// FIR status: some error in resolve (FirErrorNamedReferenceImpl in FIR)
|
||||
// TARGET_BACKEND: JVM
|
||||
// WITH_STDLIB
|
||||
// WITH_COROUTINES
|
||||
@@ -110,4 +108,4 @@ fun box(): String {
|
||||
}
|
||||
|
||||
return "OK"
|
||||
}
|
||||
}
|
||||
|
||||
+6
@@ -167,6 +167,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
|
||||
runTest("compiler/testData/codegen/box/annotations/genericAnnotations.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("invisibleFunctionWithReceiverWithSuppress.kt")
|
||||
public void testInvisibleFunctionWithReceiverWithSuppress() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/annotations/invisibleFunctionWithReceiverWithSuppress.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("javaAnnotationArrayValueDefault.kt")
|
||||
public void testJavaAnnotationArrayValueDefault() throws Exception {
|
||||
|
||||
Reference in New Issue
Block a user