diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt index 27c47e7ac6b..e2d388061b0 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt @@ -39,6 +39,7 @@ import org.jetbrains.kotlin.ir.symbols.impl.IrClassSymbolImpl import org.jetbrains.kotlin.ir.types.* import org.jetbrains.kotlin.ir.types.impl.IrErrorTypeImpl import org.jetbrains.kotlin.ir.util.SymbolTable +import org.jetbrains.kotlin.ir.util.functions import org.jetbrains.kotlin.ir.util.isFakeOverride import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.psiUtil.endOffset @@ -453,3 +454,8 @@ internal fun IrDeclarationParent.declareThisReceiverParameter( } } +fun FirClass<*>.irOrigin(firProvider: FirProvider): IrDeclarationOrigin = when { + firProvider.getFirClassifierContainerFileIfAny(symbol) != null -> IrDeclarationOrigin.DEFINED + origin == FirDeclarationOrigin.Java -> IrDeclarationOrigin.IR_EXTERNAL_JAVA_DECLARATION_STUB + else -> IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB +} diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrClassifierStorage.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrClassifierStorage.kt index 03778e37b13..d61ff63da33 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrClassifierStorage.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrClassifierStorage.kt @@ -142,9 +142,7 @@ class Fir2IrClassifierStorage( return createIrAnonymousObject(klass, irParent = parent) } val regularClass = klass as FirRegularClass - val origin = - if (firProvider.getFirClassifierContainerFileIfAny(klass.symbol) != null) IrDeclarationOrigin.DEFINED - else IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB + val origin = regularClass.irOrigin(firProvider) val irClass = registerIrClass(regularClass, parent, origin) processClassHeader(regularClass, irClass) return irClass diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt index 9527b30257d..ee8a5d2f876 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt @@ -18,6 +18,7 @@ import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi2ir.PsiSourceManager +import org.jetbrains.kotlin.psi2ir.generators.GeneratorExtensions class Fir2IrConverter( private val moduleDescriptor: FirModuleDescriptor, @@ -161,7 +162,8 @@ class Fir2IrConverter( firFiles: List, languageVersionSettings: LanguageVersionSettings, fakeOverrideMode: FakeOverrideMode = FakeOverrideMode.NORMAL, - signaturer: IdSignatureComposer + signaturer: IdSignatureComposer, + generatorExtensions: GeneratorExtensions = GeneratorExtensions() ): Fir2IrResult { val moduleDescriptor = FirModuleDescriptor(session) val symbolTable = SymbolTable(signaturer) @@ -186,7 +188,9 @@ class Fir2IrConverter( } val irModuleFragment = IrModuleFragmentImpl(moduleDescriptor, builtIns, irFiles) val externalDependenciesGenerator = ExternalDependenciesGenerator( - symbolTable, generateTypicalIrProviderList(irModuleFragment.descriptor, builtIns, symbolTable), languageVersionSettings + symbolTable, + generateTypicalIrProviderList(irModuleFragment.descriptor, builtIns, symbolTable, extensions = generatorExtensions), + languageVersionSettings ) // Necessary call to generate built-in IR classes externalDependenciesGenerator.generateUnboundSymbolsAsDependencies() diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt index c20b6961830..cae21278d2b 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt @@ -922,7 +922,8 @@ class Fir2IrDeclarationStorage( val irEnumEntry = classifierStorage.createIrEnumEntry( firDeclaration, irParent = irParentClass, - origin = if (containingFile == null) IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB else IrDeclarationOrigin.DEFINED + origin = if (containingFile != null) IrDeclarationOrigin.DEFINED else + (parentClassSymbol?.fir as? FirClass<*>)?.irOrigin(firProvider) ?: IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB ) symbolTable.referenceEnumEntry(irEnumEntry.descriptor) } diff --git a/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/fir/AbstractFir2IrTextTest.kt b/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/fir/AbstractFir2IrTextTest.kt index cef02d7e37a..6a01f4e08e1 100644 --- a/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/fir/AbstractFir2IrTextTest.kt +++ b/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/fir/AbstractFir2IrTextTest.kt @@ -11,6 +11,7 @@ import com.intellij.psi.PsiElementFinder import com.intellij.psi.search.GlobalSearchScope import org.jetbrains.kotlin.asJava.finder.JavaElementFinder import org.jetbrains.kotlin.backend.common.serialization.signature.IdSignatureDescriptor +import org.jetbrains.kotlin.backend.jvm.JvmGeneratorExtensions import org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM import org.jetbrains.kotlin.config.languageVersionSettings import org.jetbrains.kotlin.fir.backend.Fir2IrConverter @@ -85,7 +86,9 @@ abstract class AbstractFir2IrTextTest : AbstractIrTextTestCase() { return Fir2IrConverter.createModuleFragment( session, resolveTransformer.scopeSession, firFiles, myEnvironment.configuration.languageVersionSettings, - signaturer = signaturer + signaturer = signaturer, + // TODO: differentiate JVM resolve from other targets, such as JS resolve. + generatorExtensions = JvmGeneratorExtensions(generateFacades = false) ).irModuleFragment } } \ No newline at end of file diff --git a/compiler/testData/codegen/box/builtinStubMethods/mapRemove/typeSafeBridge.kt b/compiler/testData/codegen/box/builtinStubMethods/mapRemove/typeSafeBridge.kt index 38d8dbe8891..8cade1ffb56 100644 --- a/compiler/testData/codegen/box/builtinStubMethods/mapRemove/typeSafeBridge.kt +++ b/compiler/testData/codegen/box/builtinStubMethods/mapRemove/typeSafeBridge.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR // SKIP_JDK6 // TARGET_BACKEND: JVM // FULL_JDK diff --git a/compiler/testData/codegen/box/builtinStubMethods/mapRemove/typeSafeBridgeNotNullAny.kt b/compiler/testData/codegen/box/builtinStubMethods/mapRemove/typeSafeBridgeNotNullAny.kt index 2a2c9179d5a..ba11e50d134 100644 --- a/compiler/testData/codegen/box/builtinStubMethods/mapRemove/typeSafeBridgeNotNullAny.kt +++ b/compiler/testData/codegen/box/builtinStubMethods/mapRemove/typeSafeBridgeNotNullAny.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR // SKIP_JDK6 // TARGET_BACKEND: JVM // FULL_JDK diff --git a/compiler/testData/codegen/box/delegation/byMiddleInterface.kt b/compiler/testData/codegen/box/delegation/byMiddleInterface.kt index 1c600f4ad02..5f6256df741 100644 --- a/compiler/testData/codegen/box/delegation/byMiddleInterface.kt +++ b/compiler/testData/codegen/box/delegation/byMiddleInterface.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR // SKIP_JDK6 // TARGET_BACKEND: JVM diff --git a/compiler/testData/codegen/box/delegation/diamond.kt b/compiler/testData/codegen/box/delegation/diamond.kt index 7d41b8609d3..8a60bda7ef8 100644 --- a/compiler/testData/codegen/box/delegation/diamond.kt +++ b/compiler/testData/codegen/box/delegation/diamond.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR // SKIP_JDK6 // TARGET_BACKEND: JVM // FILE: Base.java diff --git a/compiler/testData/codegen/box/delegation/inClassDeclaration.kt b/compiler/testData/codegen/box/delegation/inClassDeclaration.kt index 212b8222eaa..57d180b8c38 100644 --- a/compiler/testData/codegen/box/delegation/inClassDeclaration.kt +++ b/compiler/testData/codegen/box/delegation/inClassDeclaration.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR // SKIP_JDK6 // TARGET_BACKEND: JVM // FILE: Base.java diff --git a/compiler/testData/codegen/box/delegation/simple.kt b/compiler/testData/codegen/box/delegation/simple.kt index 149d52b5424..418cea053e1 100644 --- a/compiler/testData/codegen/box/delegation/simple.kt +++ b/compiler/testData/codegen/box/delegation/simple.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR // SKIP_JDK6 // TARGET_BACKEND: JVM // FILE: Base.java diff --git a/compiler/testData/codegen/box/jvm8/interfaceFlag/superCall.kt b/compiler/testData/codegen/box/jvm8/interfaceFlag/superCall.kt index 416ea337f44..ee22e95abfe 100644 --- a/compiler/testData/codegen/box/jvm8/interfaceFlag/superCall.kt +++ b/compiler/testData/codegen/box/jvm8/interfaceFlag/superCall.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR // TARGET_BACKEND: JVM // FILE: Simple.java diff --git a/compiler/testData/codegen/box/jvm8/interfaceFlag/superCallIndirect.kt b/compiler/testData/codegen/box/jvm8/interfaceFlag/superCallIndirect.kt index aecadf4be9a..49d613352bd 100644 --- a/compiler/testData/codegen/box/jvm8/interfaceFlag/superCallIndirect.kt +++ b/compiler/testData/codegen/box/jvm8/interfaceFlag/superCallIndirect.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR // TARGET_BACKEND: JVM // FILE: Simple.java diff --git a/compiler/testData/codegen/box/jvm8/javaDefaults/defaultMethodCallFromInterface.kt b/compiler/testData/codegen/box/jvm8/javaDefaults/defaultMethodCallFromInterface.kt index 8f5e0d565ac..df269e8e02a 100644 --- a/compiler/testData/codegen/box/jvm8/javaDefaults/defaultMethodCallFromInterface.kt +++ b/compiler/testData/codegen/box/jvm8/javaDefaults/defaultMethodCallFromInterface.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR // TARGET_BACKEND: JVM // FILE: Simple.java diff --git a/compiler/testData/codegen/box/jvm8/javaDefaults/defaultMethodCallViaClass.kt b/compiler/testData/codegen/box/jvm8/javaDefaults/defaultMethodCallViaClass.kt index 3d529773b2c..306986ae137 100644 --- a/compiler/testData/codegen/box/jvm8/javaDefaults/defaultMethodCallViaClass.kt +++ b/compiler/testData/codegen/box/jvm8/javaDefaults/defaultMethodCallViaClass.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR // TARGET_BACKEND: JVM // FILE: Simple.java diff --git a/compiler/testData/codegen/box/jvm8/javaDefaults/defaultMethodCallViaInterface.kt b/compiler/testData/codegen/box/jvm8/javaDefaults/defaultMethodCallViaInterface.kt index 307eeead98b..c26fb7dff0e 100644 --- a/compiler/testData/codegen/box/jvm8/javaDefaults/defaultMethodCallViaInterface.kt +++ b/compiler/testData/codegen/box/jvm8/javaDefaults/defaultMethodCallViaInterface.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR // TARGET_BACKEND: JVM // FILE: Simple.java diff --git a/compiler/testData/codegen/box/jvm8/javaDefaults/dontDelegateToDefaultMethods.kt b/compiler/testData/codegen/box/jvm8/javaDefaults/dontDelegateToDefaultMethods.kt index f08caef9e89..148aaf82fed 100644 --- a/compiler/testData/codegen/box/jvm8/javaDefaults/dontDelegateToDefaultMethods.kt +++ b/compiler/testData/codegen/box/jvm8/javaDefaults/dontDelegateToDefaultMethods.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR // SKIP_JDK6 // TARGET_BACKEND: JVM // FILE: Test.java diff --git a/compiler/testData/codegen/box/jvm8/javaDefaults/inheritKotlin.kt b/compiler/testData/codegen/box/jvm8/javaDefaults/inheritKotlin.kt index 2b6f8f42001..e1edf9d0269 100644 --- a/compiler/testData/codegen/box/jvm8/javaDefaults/inheritKotlin.kt +++ b/compiler/testData/codegen/box/jvm8/javaDefaults/inheritKotlin.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR // TARGET_BACKEND: JVM // FILE: Simple.java diff --git a/compiler/testData/codegen/box/jvm8/javaDefaults/invokeDefaultViaSuper.kt b/compiler/testData/codegen/box/jvm8/javaDefaults/invokeDefaultViaSuper.kt index d41160d7660..2c01176ff17 100644 --- a/compiler/testData/codegen/box/jvm8/javaDefaults/invokeDefaultViaSuper.kt +++ b/compiler/testData/codegen/box/jvm8/javaDefaults/invokeDefaultViaSuper.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR // SKIP_JDK6 // TARGET_BACKEND: JVM // FILE: Test.java diff --git a/compiler/testData/codegen/box/jvm8/javaDefaults/longChainOfKotlinExtendsFromJavaWithDefault.kt b/compiler/testData/codegen/box/jvm8/javaDefaults/longChainOfKotlinExtendsFromJavaWithDefault.kt index b5aca67f5a7..05e0eb936ed 100644 --- a/compiler/testData/codegen/box/jvm8/javaDefaults/longChainOfKotlinExtendsFromJavaWithDefault.kt +++ b/compiler/testData/codegen/box/jvm8/javaDefaults/longChainOfKotlinExtendsFromJavaWithDefault.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR // TARGET_BACKEND: JVM // FILE: Base.java diff --git a/compiler/testData/codegen/box/smartCasts/kt19058.kt b/compiler/testData/codegen/box/smartCasts/kt19058.kt index a461e20fd6d..1f558682449 100644 --- a/compiler/testData/codegen/box/smartCasts/kt19058.kt +++ b/compiler/testData/codegen/box/smartCasts/kt19058.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR // SKIP_JDK6 // TARGET_BACKEND: JVM // FILE: Test.kt diff --git a/compiler/testData/ir/irText/classes/implicitNotNullOnDelegatedImplementation.fir.txt b/compiler/testData/ir/irText/classes/implicitNotNullOnDelegatedImplementation.fir.txt index dae623df731..ad44220595b 100644 --- a/compiler/testData/ir/irText/classes/implicitNotNullOnDelegatedImplementation.fir.txt +++ b/compiler/testData/ir/irText/classes/implicitNotNullOnDelegatedImplementation.fir.txt @@ -51,7 +51,7 @@ FILE fqName: fileName:/implicitNotNullOnDelegatedImplementation.kt $this: VALUE_PARAMETER name: type:.K2 BLOCK_BODY RETURN type=kotlin.Nothing from='public final fun foo (): kotlin.String declared in .K2' - CALL 'public open fun foo (): kotlin.String declared in .JFoo' superQualifier='CLASS IR_EXTERNAL_DECLARATION_STUB CLASS name:JFoo modality:OPEN visibility:public superTypes:[kotlin.Any; .IFoo]' type=kotlin.String origin=null + CALL 'public open fun foo (): kotlin.String declared in .JFoo' superQualifier='CLASS IR_EXTERNAL_JAVA_DECLARATION_STUB CLASS name:JFoo modality:OPEN visibility:public superTypes:[kotlin.Any; .IFoo]' type=kotlin.String origin=null $this: GET_VAR ': .K2 declared in .K2.foo' type=.K2 origin=null FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator] overridden: diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/codegen/GenerationUtils.kt b/compiler/tests-common/tests/org/jetbrains/kotlin/codegen/GenerationUtils.kt index 5f6c2ca0a60..99ccafb78c9 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/codegen/GenerationUtils.kt +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/codegen/GenerationUtils.kt @@ -25,6 +25,7 @@ import org.jetbrains.kotlin.TestsCompiletimeError import org.jetbrains.kotlin.asJava.finder.JavaElementFinder import org.jetbrains.kotlin.backend.common.phaser.PhaseConfig import org.jetbrains.kotlin.backend.common.serialization.signature.IdSignatureDescriptor +import org.jetbrains.kotlin.backend.jvm.JvmGeneratorExtensions import org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory import org.jetbrains.kotlin.backend.jvm.jvmPhases import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys @@ -143,7 +144,9 @@ object GenerationUtils { Fir2IrConverter.createModuleFragment( session, resolveTransformer.scopeSession, firFiles, configuration.languageVersionSettings, - signaturer = IdSignatureDescriptor(JvmManglerDesc()) + signaturer = IdSignatureDescriptor(JvmManglerDesc()), + // TODO: differentiate JVM resolve from other targets, such as JS resolve. + generatorExtensions = JvmGeneratorExtensions(generateFacades = false) ) val dummyBindingContext = NoScopeRecordCliBindingTrace().bindingContext