From 8379b3794a902b44ede7eda1ea3cee438701e033 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Thu, 30 Jul 2020 11:08:01 +0300 Subject: [PATCH] [FIR2IR] Return fallback mode for annotation resolved placeholder --- .../backend/generators/CallAndReferenceGenerator.kt | 13 +++++++++++++ .../typeAnnotations/typeUseAnnotation.kt | 1 - .../box/polymorphicSignature/anonymousSubclass.kt | 1 - .../codegen/box/polymorphicSignature/invoke.kt | 1 - .../codegen/box/polymorphicSignature/invokeExact.kt | 1 - .../invokeExactWithInlineClass.kt | 1 - 6 files changed, 13 insertions(+), 5 deletions(-) diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/CallAndReferenceGenerator.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/CallAndReferenceGenerator.kt index 59089c6a341..56262cf7de8 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/CallAndReferenceGenerator.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/CallAndReferenceGenerator.kt @@ -18,6 +18,7 @@ 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.render +import org.jetbrains.kotlin.fir.resolve.buildUseSiteMemberScope import org.jetbrains.kotlin.fir.resolve.calls.isFunctional import org.jetbrains.kotlin.fir.resolve.inference.isBuiltinFunctionalType import org.jetbrains.kotlin.fir.resolve.inference.isSuspendFunctionType @@ -428,6 +429,18 @@ class CallAndReferenceGenerator( val irClass = symbol.owner val irConstructor = (annotationCall.toResolvedCallableSymbol() as? FirConstructorSymbol)?.let { this.declarationStorage.getIrConstructorSymbol(it) + } ?: run { + // Fallback for FirReferencePlaceholderForResolvedAnnotations from jar + val fir = coneType.lookupTag.toSymbol(session)?.fir as? FirClass<*> + var constructorSymbol: FirConstructorSymbol? = null + fir?.buildUseSiteMemberScope(session, scopeSession)?.processDeclaredConstructors { + if (it.fir.isPrimary && constructorSymbol == null) { + constructorSymbol = it + } + } + constructorSymbol?.let { + this.declarationStorage.getIrConstructorSymbol(it) + } } if (irConstructor == null) { IrErrorCallExpressionImpl(startOffset, endOffset, type, "No annotation constructor found: ${irClass.name}") diff --git a/compiler/testData/codegen/box/annotations/typeAnnotations/typeUseAnnotation.kt b/compiler/testData/codegen/box/annotations/typeAnnotations/typeUseAnnotation.kt index 7e5037333dd..a9f24c24c2d 100644 --- a/compiler/testData/codegen/box/annotations/typeAnnotations/typeUseAnnotation.kt +++ b/compiler/testData/codegen/box/annotations/typeAnnotations/typeUseAnnotation.kt @@ -1,6 +1,5 @@ // KOTLIN_CONFIGURATION_FLAGS: +JVM.EMIT_JVM_TYPE_ANNOTATIONS // TARGET_BACKEND: JVM -// IGNORE_BACKEND_FIR: JVM_IR // JVM_TARGET: 1.8 // WITH_REFLECT // FULL_JDK diff --git a/compiler/testData/codegen/box/polymorphicSignature/anonymousSubclass.kt b/compiler/testData/codegen/box/polymorphicSignature/anonymousSubclass.kt index 2ab5d53fed3..f7021339d05 100644 --- a/compiler/testData/codegen/box/polymorphicSignature/anonymousSubclass.kt +++ b/compiler/testData/codegen/box/polymorphicSignature/anonymousSubclass.kt @@ -1,5 +1,4 @@ // !LANGUAGE: +PolymorphicSignature -// IGNORE_BACKEND_FIR: JVM_IR // TARGET_BACKEND: JVM // FULL_JDK // SKIP_JDK6 diff --git a/compiler/testData/codegen/box/polymorphicSignature/invoke.kt b/compiler/testData/codegen/box/polymorphicSignature/invoke.kt index c0080712fdd..430058ef018 100644 --- a/compiler/testData/codegen/box/polymorphicSignature/invoke.kt +++ b/compiler/testData/codegen/box/polymorphicSignature/invoke.kt @@ -1,5 +1,4 @@ // !LANGUAGE: +PolymorphicSignature -// IGNORE_BACKEND_FIR: JVM_IR // TARGET_BACKEND: JVM // FULL_JDK // SKIP_JDK6 diff --git a/compiler/testData/codegen/box/polymorphicSignature/invokeExact.kt b/compiler/testData/codegen/box/polymorphicSignature/invokeExact.kt index d5bad50b81f..f35887e014c 100644 --- a/compiler/testData/codegen/box/polymorphicSignature/invokeExact.kt +++ b/compiler/testData/codegen/box/polymorphicSignature/invokeExact.kt @@ -1,5 +1,4 @@ // !LANGUAGE: +PolymorphicSignature -// IGNORE_BACKEND_FIR: JVM_IR // TARGET_BACKEND: JVM // FULL_JDK // SKIP_JDK6 diff --git a/compiler/testData/codegen/box/polymorphicSignature/invokeExactWithInlineClass.kt b/compiler/testData/codegen/box/polymorphicSignature/invokeExactWithInlineClass.kt index 60f528a629b..bd41ed50af3 100644 --- a/compiler/testData/codegen/box/polymorphicSignature/invokeExactWithInlineClass.kt +++ b/compiler/testData/codegen/box/polymorphicSignature/invokeExactWithInlineClass.kt @@ -1,5 +1,4 @@ // !LANGUAGE: +PolymorphicSignature -// IGNORE_BACKEND_FIR: JVM_IR // TARGET_BACKEND: JVM // FULL_JDK // SKIP_JDK6