[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.*
|
||||||
import org.jetbrains.kotlin.fir.expressions.builder.buildAnnotationCall
|
import org.jetbrains.kotlin.fir.expressions.builder.buildAnnotationCall
|
||||||
import org.jetbrains.kotlin.fir.expressions.impl.FirNoReceiverExpression
|
import org.jetbrains.kotlin.fir.expressions.impl.FirNoReceiverExpression
|
||||||
import org.jetbrains.kotlin.fir.references.FirDelegateFieldReference
|
import org.jetbrains.kotlin.fir.references.*
|
||||||
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.builder.buildResolvedNamedReference
|
import org.jetbrains.kotlin.fir.references.builder.buildResolvedNamedReference
|
||||||
import org.jetbrains.kotlin.fir.resolve.calls.FirSyntheticFunctionSymbol
|
import org.jetbrains.kotlin.fir.resolve.calls.FirSyntheticFunctionSymbol
|
||||||
import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
|
import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
|
||||||
@@ -1069,8 +1066,12 @@ class CallAndReferenceGenerator(
|
|||||||
}
|
}
|
||||||
if (ownerFunction?.extensionReceiverParameter != null) {
|
if (ownerFunction?.extensionReceiverParameter != null) {
|
||||||
extensionReceiver = qualifiedAccess.findIrExtensionReceiver(explicitReceiverExpression)?.let {
|
extensionReceiver = qualifiedAccess.findIrExtensionReceiver(explicitReceiverExpression)?.let {
|
||||||
((qualifiedAccess.calleeReference as FirResolvedNamedReference)
|
val symbol = when (val reference = qualifiedAccess.calleeReference) {
|
||||||
.resolvedSymbol.fir as? FirCallableDeclaration)?.receiverParameter?.typeRef?.let { receiverType ->
|
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) {
|
with(visitor.implicitCastInserter) {
|
||||||
it.cast(
|
it.cast(
|
||||||
qualifiedAccess.extensionReceiver,
|
qualifiedAccess.extensionReceiver,
|
||||||
|
|||||||
+6
@@ -167,6 +167,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT
|
|||||||
runTest("compiler/testData/codegen/box/annotations/genericAnnotations.kt");
|
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
|
@Test
|
||||||
@TestMetadata("javaAnnotationArrayValueDefault.kt")
|
@TestMetadata("javaAnnotationArrayValueDefault.kt")
|
||||||
public void testJavaAnnotationArrayValueDefault() throws Exception {
|
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
|
// TARGET_BACKEND: JVM
|
||||||
// WITH_STDLIB
|
// WITH_STDLIB
|
||||||
// WITH_COROUTINES
|
// WITH_COROUTINES
|
||||||
@@ -110,4 +108,4 @@ fun box(): String {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return "OK"
|
return "OK"
|
||||||
}
|
}
|
||||||
|
|||||||
+6
@@ -167,6 +167,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
|
|||||||
runTest("compiler/testData/codegen/box/annotations/genericAnnotations.kt");
|
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
|
@Test
|
||||||
@TestMetadata("javaAnnotationArrayValueDefault.kt")
|
@TestMetadata("javaAnnotationArrayValueDefault.kt")
|
||||||
public void testJavaAnnotationArrayValueDefault() throws Exception {
|
public void testJavaAnnotationArrayValueDefault() throws Exception {
|
||||||
|
|||||||
Reference in New Issue
Block a user