From 943be239eeb8c910aed3ec3185b8eeec180edd6e Mon Sep 17 00:00:00 2001 From: Wojciech Litewka Date: Thu, 29 Feb 2024 14:30:25 +0100 Subject: [PATCH] [IR] Simplify IrFileImpl and IrExternalPackageFragment #KT-65773 In Progress --- .../kotlin/fir/backend/IrBuiltInsOverFir.kt | 5 +- .../backend/jvm/lower/ScriptLowering.kt | 6 +-- .../kotlin/backend/jvm/JvmReflectSymbols.kt | 6 +-- .../backend/jvm/JvmSharedVariablesManager.kt | 5 +- .../kotlin/backend/jvm/JvmSymbols.kt | 7 ++- .../descriptors/IrBuiltInsOverDescriptors.kt | 4 +- .../declarations/IrExternalPackageFragment.kt | 3 -- .../ir/declarations/IrPackageFragment.kt | 14 ------ .../ir/declarations/IrPackageFragments.kt | 45 ++++++++++++++++++ .../impl/IrExternalPackageFragmentImpl.kt | 46 +++++-------------- .../kotlin/ir/declarations/impl/IrFileImpl.kt | 33 ++----------- .../kotlin/ir/types/impl/IrErrorClassImpl.kt | 15 ++---- .../jetbrains/kotlin/ir/generator/IrTree.kt | 12 ----- .../MissingDeclarationStubGenerator.kt | 5 +- .../serialization/IrModuleSerializer.kt | 3 +- .../common/serialization/KotlinIrLinker.kt | 7 +-- .../kotlin/backend/konan/llvm/Imports.kt | 8 ++-- .../android/parcel/ir/AndroidSymbols.kt | 6 +-- .../synthetic/codegen/AndroidIrExtension.kt | 5 +- .../backend/common/AbstractAtomicSymbols.kt | 7 +-- .../ir/SerialInfoImplJvmIrGenerator.kt | 5 +- .../kotlin/parcelize/AndroidSymbols.kt | 5 +- 22 files changed, 103 insertions(+), 149 deletions(-) create mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrPackageFragments.kt diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/IrBuiltInsOverFir.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/IrBuiltInsOverFir.kt index 2d6ce4d90f5..e825c1e8bdc 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/IrBuiltInsOverFir.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/IrBuiltInsOverFir.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ @@ -27,7 +27,6 @@ import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.builders.declarations.IrFunctionBuilder import org.jetbrains.kotlin.ir.builders.declarations.addValueParameter import org.jetbrains.kotlin.ir.declarations.* -import org.jetbrains.kotlin.ir.declarations.impl.IrExternalPackageFragmentImpl import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import org.jetbrains.kotlin.ir.expressions.impl.IrConstructorCallImpl import org.jetbrains.kotlin.ir.symbols.* @@ -607,7 +606,7 @@ class IrBuiltInsOverFir( } private fun createPackage(fqName: FqName): IrExternalPackageFragment = - IrExternalPackageFragmentImpl.createEmptyExternalPackageFragment(moduleDescriptor, fqName) + createEmptyExternalPackageFragment(moduleDescriptor, fqName) private fun IrDeclarationParent.createFunction( name: String, diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/ScriptLowering.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/ScriptLowering.kt index e77fbeea8ab..48731246969 100644 --- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/ScriptLowering.kt +++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/ScriptLowering.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ @@ -25,7 +25,6 @@ import org.jetbrains.kotlin.ir.declarations.impl.* import org.jetbrains.kotlin.ir.descriptors.toIrBasedKotlinType import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.impl.* -import org.jetbrains.kotlin.ir.util.toIrConst import org.jetbrains.kotlin.ir.symbols.* import org.jetbrains.kotlin.ir.symbols.impl.IrAnonymousInitializerSymbolImpl import org.jetbrains.kotlin.ir.symbols.impl.IrConstructorSymbolImpl @@ -34,6 +33,7 @@ import org.jetbrains.kotlin.ir.symbols.impl.IrValueParameterSymbolImpl import org.jetbrains.kotlin.ir.types.* import org.jetbrains.kotlin.ir.types.impl.IrSimpleTypeImpl import org.jetbrains.kotlin.ir.util.* +import org.jetbrains.kotlin.ir.util.toIrConst import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid @@ -356,7 +356,7 @@ private class ScriptsToClassesLowering(val context: JvmBackendContext, val inner } private val scriptingJvmPackage by lazy(LazyThreadSafetyMode.PUBLICATION) { - IrExternalPackageFragmentImpl.createEmptyExternalPackageFragment(context.state.module, FqName("kotlin.script.experimental.jvm")) + createEmptyExternalPackageFragment(context.state.module, FqName("kotlin.script.experimental.jvm")) } private fun IrClass.addScriptMainFun() { diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmReflectSymbols.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmReflectSymbols.kt index 93bb60368b6..41f59541f93 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmReflectSymbols.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmReflectSymbols.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ package org.jetbrains.kotlin.backend.jvm @@ -12,7 +12,7 @@ import org.jetbrains.kotlin.ir.builders.declarations.addValueParameter import org.jetbrains.kotlin.ir.builders.declarations.buildClass import org.jetbrains.kotlin.ir.declarations.IrClass import org.jetbrains.kotlin.ir.declarations.IrPackageFragment -import org.jetbrains.kotlin.ir.declarations.impl.IrExternalPackageFragmentImpl +import org.jetbrains.kotlin.ir.declarations.createEmptyExternalPackageFragment import org.jetbrains.kotlin.ir.symbols.IrClassSymbol import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol import org.jetbrains.kotlin.ir.types.defaultType @@ -29,7 +29,7 @@ class JvmReflectSymbols(val context: JvmBackendContext) { private val javaLangReflect: FqName = FqName("java.lang.reflect") private val javaLangReflectPackage: IrPackageFragment = - IrExternalPackageFragmentImpl.createEmptyExternalPackageFragment(context.state.module, javaLangReflect) + createEmptyExternalPackageFragment(context.state.module, javaLangReflect) val javaLangReflectField: IrClassSymbol = createJavaLangReflectClass(FqName("java.lang.reflect.Field")) { klass -> diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmSharedVariablesManager.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmSharedVariablesManager.kt index 4fa50c9beaf..b9c802d1107 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmSharedVariablesManager.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmSharedVariablesManager.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ @@ -11,7 +11,6 @@ import org.jetbrains.kotlin.ir.IrBuiltIns import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.builders.declarations.* import org.jetbrains.kotlin.ir.declarations.* -import org.jetbrains.kotlin.ir.declarations.impl.IrExternalPackageFragmentImpl import org.jetbrains.kotlin.ir.declarations.impl.IrVariableImpl import org.jetbrains.kotlin.ir.expressions.IrConst import org.jetbrains.kotlin.ir.expressions.IrExpression @@ -31,7 +30,7 @@ class JvmSharedVariablesManager( val irBuiltIns: IrBuiltIns, irFactory: IrFactory, ) : SharedVariablesManager { - private val jvmInternalPackage = IrExternalPackageFragmentImpl.createEmptyExternalPackageFragment( + private val jvmInternalPackage = createEmptyExternalPackageFragment( module, FqName("kotlin.jvm.internal") ) diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmSymbols.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmSymbols.kt index 53c09569ada..04ca4bc3f3a 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmSymbols.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmSymbols.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ @@ -23,7 +23,6 @@ import org.jetbrains.kotlin.descriptors.annotations.KotlinTarget import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.builders.declarations.* import org.jetbrains.kotlin.ir.declarations.* -import org.jetbrains.kotlin.ir.declarations.impl.IrExternalPackageFragmentImpl import org.jetbrains.kotlin.ir.expressions.IrRawFunctionReference import org.jetbrains.kotlin.ir.expressions.impl.IrConstImpl import org.jetbrains.kotlin.ir.expressions.impl.IrConstructorCallImpl @@ -82,7 +81,7 @@ class JvmSymbols( private val generateOptimizedCallableReferenceSuperClasses = context.config.generateOptimizedCallableReferenceSuperClasses private fun createPackage(fqName: FqName): IrPackageFragment = - IrExternalPackageFragmentImpl.createEmptyExternalPackageFragment(context.state.module, fqName) + createEmptyExternalPackageFragment(context.state.module, fqName) private fun createClass( fqName: FqName, @@ -1091,7 +1090,7 @@ class JvmSymbols( private val javaLangAnnotation: FqName = FqName("java.lang.annotation") private val javaLangAnnotationPackage: IrPackageFragment = - IrExternalPackageFragmentImpl.createEmptyExternalPackageFragment(context.state.module, javaLangAnnotation) + createEmptyExternalPackageFragment(context.state.module, javaLangAnnotation) private fun buildClass( fqName: FqName, diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/descriptors/IrBuiltInsOverDescriptors.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/descriptors/IrBuiltInsOverDescriptors.kt index 81937c3b7b4..478a83e7461 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/descriptors/IrBuiltInsOverDescriptors.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/descriptors/IrBuiltInsOverDescriptors.kt @@ -23,7 +23,7 @@ import org.jetbrains.kotlin.ir.declarations.IrClass import org.jetbrains.kotlin.ir.declarations.IrConstructor import org.jetbrains.kotlin.ir.declarations.IrExternalPackageFragment import org.jetbrains.kotlin.ir.declarations.IrFactory -import org.jetbrains.kotlin.ir.declarations.impl.IrExternalPackageFragmentImpl +import org.jetbrains.kotlin.ir.declarations.createEmptyExternalPackageFragment import org.jetbrains.kotlin.ir.descriptors.* import org.jetbrains.kotlin.ir.expressions.impl.IrConstructorCallImpl import org.jetbrains.kotlin.ir.symbols.IrClassSymbol @@ -77,7 +77,7 @@ class IrBuiltInsOverDescriptors( private val builtInsModule = builtIns.builtInsModule private val kotlinInternalPackage = StandardClassIds.BASE_INTERNAL_PACKAGE - override val kotlinInternalPackageFragment = IrExternalPackageFragmentImpl.createEmptyExternalPackageFragment(builtInsModule, kotlinInternalPackage) + override val kotlinInternalPackageFragment = createEmptyExternalPackageFragment(builtInsModule, kotlinInternalPackage) private val packageFragmentDescriptor = IrBuiltinsPackageFragmentDescriptorImpl(builtInsModule, KOTLIN_INTERNAL_IR_FQN) diff --git a/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrExternalPackageFragment.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrExternalPackageFragment.kt index 4d1397a2a57..a3dc9c0e79f 100644 --- a/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrExternalPackageFragment.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrExternalPackageFragment.kt @@ -12,7 +12,6 @@ import org.jetbrains.kotlin.ir.symbols.IrExternalPackageFragmentSymbol import org.jetbrains.kotlin.ir.util.transformInPlace import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor -import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource /** * This is a root parent element for external declarations (meaning those that come from @@ -36,8 +35,6 @@ import org.jetbrains.kotlin.serialization.deserialization.descriptors.Deserializ abstract class IrExternalPackageFragment : IrPackageFragment() { abstract override val symbol: IrExternalPackageFragmentSymbol - abstract val containerSource: DeserializedContainerSource? - override fun accept(visitor: IrElementVisitor, data: D): R = visitor.visitExternalPackageFragment(this, data) diff --git a/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrPackageFragment.kt b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrPackageFragment.kt index 7aa342007ce..fcded016432 100644 --- a/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrPackageFragment.kt +++ b/compiler/ir/ir.tree/gen/org/jetbrains/kotlin/ir/declarations/IrPackageFragment.kt @@ -8,10 +8,7 @@ package org.jetbrains.kotlin.ir.declarations -import org.jetbrains.kotlin.descriptors.ModuleDescriptor -import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor import org.jetbrains.kotlin.ir.IrElementBase -import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.symbols.IrPackageFragmentSymbol import org.jetbrains.kotlin.name.FqName @@ -21,17 +18,6 @@ import org.jetbrains.kotlin.name.FqName abstract class IrPackageFragment : IrElementBase(), IrDeclarationContainer, IrSymbolOwner { abstract override val symbol: IrPackageFragmentSymbol - @ObsoleteDescriptorBasedAPI - abstract val packageFragmentDescriptor: PackageFragmentDescriptor - - /** - * This should be a link to [IrModuleFragment] instead. - * - * Unfortunately, some package fragments (e.g. some synthetic ones and [IrExternalPackageFragment]) - * are not located in any IR module, but still have a module descriptor. - */ - abstract val moduleDescriptor: ModuleDescriptor - abstract var packageFqName: FqName @Deprecated( diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrPackageFragments.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrPackageFragments.kt new file mode 100644 index 00000000000..74d36bb0ceb --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrPackageFragments.kt @@ -0,0 +1,45 @@ +/* + * Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.ir.declarations + +import org.jetbrains.kotlin.descriptors.ModuleDescriptor +import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor +import org.jetbrains.kotlin.descriptors.impl.EmptyPackageFragmentDescriptor +import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI +import org.jetbrains.kotlin.ir.declarations.impl.IrExternalPackageFragmentImpl +import org.jetbrains.kotlin.ir.declarations.impl.IrFileImpl +import org.jetbrains.kotlin.ir.symbols.impl.IrExternalPackageFragmentSymbolImpl +import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource +import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedMemberDescriptor + + +@ObsoleteDescriptorBasedAPI +val IrPackageFragment.packageFragmentDescriptor: PackageFragmentDescriptor + get() = symbol.descriptor + +@OptIn(ObsoleteDescriptorBasedAPI::class) +val IrExternalPackageFragment.containerSource: DeserializedContainerSource? + get() = (symbol.descriptor as? DeserializedMemberDescriptor)?.containerSource + +/** + * This should be a link to [IrModuleFragment] instead. + * + * Unfortunately, some package fragments (e.g. some synthetic ones and [IrExternalPackageFragment]) + * are not located in any IR module, but still have a module descriptor. + */ +@OptIn(ObsoleteDescriptorBasedAPI::class) +val IrPackageFragment.moduleDescriptor + get() = if (this is IrFileImpl && isInsideModule) { + module.descriptor + } else { + packageFragmentDescriptor.containingDeclaration + } + +fun createEmptyExternalPackageFragment(module: ModuleDescriptor, fqName: FqName): IrExternalPackageFragment = + IrExternalPackageFragmentImpl( + IrExternalPackageFragmentSymbolImpl(EmptyPackageFragmentDescriptor(module, fqName)), fqName + ) \ No newline at end of file diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrExternalPackageFragmentImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrExternalPackageFragmentImpl.kt index 9796fb1b420..38de5cc74b8 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrExternalPackageFragmentImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrExternalPackageFragmentImpl.kt @@ -1,38 +1,21 @@ /* - * Copyright 2010-2017 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ package org.jetbrains.kotlin.ir.declarations.impl import org.jetbrains.kotlin.descriptors.ModuleDescriptor -import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor -import org.jetbrains.kotlin.descriptors.impl.EmptyPackageFragmentDescriptor -import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.declarations.IrDeclaration import org.jetbrains.kotlin.ir.declarations.IrExternalPackageFragment import org.jetbrains.kotlin.ir.symbols.IrExternalPackageFragmentSymbol import org.jetbrains.kotlin.ir.symbols.UnsafeDuringIrConstructionAPI -import org.jetbrains.kotlin.ir.symbols.impl.IrExternalPackageFragmentSymbolImpl import org.jetbrains.kotlin.name.FqName -import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource -import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedMemberDescriptor class IrExternalPackageFragmentImpl( override val symbol: IrExternalPackageFragmentSymbol, - override var packageFqName: FqName + override var packageFqName: FqName, ) : IrExternalPackageFragment() { override val startOffset: Int get() = UNDEFINED_OFFSET @@ -44,25 +27,18 @@ class IrExternalPackageFragmentImpl( symbol.bind(this) } - @ObsoleteDescriptorBasedAPI - override val packageFragmentDescriptor: PackageFragmentDescriptor - get() = symbol.descriptor - - @OptIn(ObsoleteDescriptorBasedAPI::class) - override val moduleDescriptor: ModuleDescriptor - get() = packageFragmentDescriptor.containingDeclaration - @UnsafeDuringIrConstructionAPI override val declarations: MutableList = ArrayList() - @OptIn(ObsoleteDescriptorBasedAPI::class) - override val containerSource: DeserializedContainerSource? - get() = (symbol.descriptor as? DeserializedMemberDescriptor)?.containerSource - companion object { - fun createEmptyExternalPackageFragment(module: ModuleDescriptor, fqName: FqName): IrExternalPackageFragment = - IrExternalPackageFragmentImpl( - IrExternalPackageFragmentSymbolImpl(EmptyPackageFragmentDescriptor(module, fqName)), fqName + @Deprecated( + message = "Use org.jetbrains.kotlin.ir.declarations.createEmptyExternalPackageFragment instead", + replaceWith = ReplaceWith( + "createEmptyExternalPackageFragment", + "org.jetbrains.kotlin.ir.declarations.createEmptyExternalPackageFragment" ) + ) + fun createEmptyExternalPackageFragment(module: ModuleDescriptor, fqName: FqName): IrExternalPackageFragment = + org.jetbrains.kotlin.ir.declarations.createEmptyExternalPackageFragment(module, fqName) } } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFileImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFileImpl.kt index 918ac1e03a1..016321412f4 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFileImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFileImpl.kt @@ -1,25 +1,12 @@ /* - * Copyright 2010-2016 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ package org.jetbrains.kotlin.ir.declarations.impl -import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor import org.jetbrains.kotlin.ir.IrFileEntry -import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.declarations.IrDeclaration import org.jetbrains.kotlin.ir.declarations.IrFile import org.jetbrains.kotlin.ir.declarations.IrModuleFragment @@ -61,25 +48,15 @@ class IrFileImpl( override lateinit var module: IrModuleFragment + internal val isInsideModule: Boolean + get() = ::module.isInitialized + override val startOffset: Int get() = 0 override val endOffset: Int get() = fileEntry.maxOffset - @ObsoleteDescriptorBasedAPI - override val packageFragmentDescriptor: PackageFragmentDescriptor - get() = symbol.descriptor - - @OptIn(ObsoleteDescriptorBasedAPI::class) - override val moduleDescriptor: ModuleDescriptor - get() { - return if (this::module.isInitialized) - module.descriptor - else - packageFragmentDescriptor.containingDeclaration - } - @UnsafeDuringIrConstructionAPI override val declarations: MutableList = ArrayList() diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/types/impl/IrErrorClassImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/types/impl/IrErrorClassImpl.kt index 182fe741041..3b6044b3cd3 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/types/impl/IrErrorClassImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/types/impl/IrErrorClassImpl.kt @@ -1,17 +1,17 @@ /* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ package org.jetbrains.kotlin.ir.types.impl -import org.jetbrains.kotlin.descriptors.* +import org.jetbrains.kotlin.descriptors.ClassKind +import org.jetbrains.kotlin.descriptors.DescriptorVisibilities +import org.jetbrains.kotlin.descriptors.Modality +import org.jetbrains.kotlin.descriptors.SourceElement import org.jetbrains.kotlin.ir.IrFileEntry -import org.jetbrains.kotlin.ir.IrImplementationDetail -import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.declarations.* -import org.jetbrains.kotlin.ir.declarations.impl.IrClassImpl import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import org.jetbrains.kotlin.ir.symbols.IrFileSymbol @@ -59,11 +59,6 @@ private object ErrorFile : IrFile() { get() = shouldNotBeCalled() set(_) {} - @ObsoleteDescriptorBasedAPI - override val packageFragmentDescriptor: PackageFragmentDescriptor - get() = shouldNotBeCalled() - override val moduleDescriptor: ModuleDescriptor - get() = shouldNotBeCalled() override var packageFqName: FqName get() = FqName.ROOT set(_) = shouldNotBeCalled() diff --git a/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/IrTree.kt b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/IrTree.kt index e1e83db21c4..960bc98b324 100644 --- a/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/IrTree.kt +++ b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/IrTree.kt @@ -612,17 +612,6 @@ object IrTree : AbstractTreeBuilder() { parent(symbolOwner) +symbol(packageFragmentSymbolType) - +field("packageFragmentDescriptor", type(Packages.descriptors, "PackageFragmentDescriptor"), mutable = false) { - optInAnnotation = obsoleteDescriptorBasedApiAnnotation - } - +field("moduleDescriptor", type(Packages.descriptors, "ModuleDescriptor"), mutable = false) { - kDoc = """ - This should be a link to [IrModuleFragment] instead. - - Unfortunately, some package fragments (e.g. some synthetic ones and [IrExternalPackageFragment]) - are not located in any IR module, but still have a module descriptor. - """.trimIndent() - } +field("packageFqName", type()) +field("fqName", type()) { defaultValueInBase = "packageFqName" @@ -660,7 +649,6 @@ object IrTree : AbstractTreeBuilder() { parent(packageFragment) +symbol(externalPackageFragmentSymbolType) - +field("containerSource", type(), nullable = true, mutable = false) } val file: Element by element(Declaration) { needTransformMethod() diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/linkage/partial/MissingDeclarationStubGenerator.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/linkage/partial/MissingDeclarationStubGenerator.kt index ea8a65c8ddf..c5dd0e1c66e 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/linkage/partial/MissingDeclarationStubGenerator.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/linkage/partial/MissingDeclarationStubGenerator.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ @@ -13,7 +13,6 @@ import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.ir.IrBuiltIns import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.declarations.* -import org.jetbrains.kotlin.ir.declarations.impl.IrExternalPackageFragmentImpl import org.jetbrains.kotlin.ir.linkage.IrProvider import org.jetbrains.kotlin.ir.linkage.partial.PartiallyLinkedDeclarationOrigin import org.jetbrains.kotlin.ir.symbols.* @@ -33,7 +32,7 @@ import org.jetbrains.kotlin.types.error.ErrorUtils */ internal class MissingDeclarationStubGenerator(private val builtIns: IrBuiltIns) : IrProvider { private val commonParent by lazy { - IrExternalPackageFragmentImpl.createEmptyExternalPackageFragment(ErrorUtils.errorModule, FqName.ROOT) + createEmptyExternalPackageFragment(ErrorUtils.errorModule, FqName.ROOT) } private var declarationsToPatch = arrayListOf() diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrModuleSerializer.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrModuleSerializer.kt index d524ee052c0..4ff1deb2d48 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrModuleSerializer.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrModuleSerializer.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ @@ -9,6 +9,7 @@ import org.jetbrains.kotlin.builtins.FunctionInterfacePackageFragment import org.jetbrains.kotlin.ir.IrDiagnosticReporter import org.jetbrains.kotlin.ir.declarations.IrFile import org.jetbrains.kotlin.ir.declarations.IrModuleFragment +import org.jetbrains.kotlin.ir.declarations.packageFragmentDescriptor import org.jetbrains.kotlin.library.SerializedIrFile import org.jetbrains.kotlin.library.SerializedIrModule diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/KotlinIrLinker.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/KotlinIrLinker.kt index 34fa329c88d..68e46046d0a 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/KotlinIrLinker.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/KotlinIrLinker.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ @@ -15,10 +15,7 @@ import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.ir.IrBuiltIns import org.jetbrains.kotlin.ir.builders.TranslationPluginContext -import org.jetbrains.kotlin.ir.declarations.IrDeclaration -import org.jetbrains.kotlin.ir.declarations.IrFile -import org.jetbrains.kotlin.ir.declarations.IrFunction -import org.jetbrains.kotlin.ir.declarations.IrModuleFragment +import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.linkage.IrDeserializer import org.jetbrains.kotlin.ir.symbols.* import org.jetbrains.kotlin.ir.util.* diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/Imports.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/Imports.kt index b59df988c20..e7868f9c5f5 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/Imports.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/Imports.kt @@ -1,6 +1,6 @@ /* - * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license - * that can be found in the LICENSE file. + * Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ package org.jetbrains.kotlin.backend.konan.llvm @@ -9,6 +9,7 @@ import org.jetbrains.kotlin.backend.konan.Context import org.jetbrains.kotlin.backend.konan.descriptors.isExpectMember import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.ir.declarations.IrPackageFragment +import org.jetbrains.kotlin.ir.declarations.moduleDescriptor import org.jetbrains.kotlin.library.metadata.CompiledKlibModuleOrigin import org.jetbrains.kotlin.library.metadata.SyntheticModulesOrigin import org.jetbrains.kotlin.library.metadata.klibModuleOrigin @@ -17,8 +18,7 @@ private val ModuleDescriptor.llvmSymbolOrigin: CompiledKlibModuleOrigin get() { assert(!this.isExpectMember) { this } - val moduleOrigin = klibModuleOrigin - when (moduleOrigin) { + when (val moduleOrigin = klibModuleOrigin) { is CompiledKlibModuleOrigin -> return moduleOrigin SyntheticModulesOrigin -> error("Declaration is synthetic and can't be an origin of LLVM symbol:\n${this}") } diff --git a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ir/AndroidSymbols.kt b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ir/AndroidSymbols.kt index 0674e2d99a1..9b4ce3c813d 100644 --- a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ir/AndroidSymbols.kt +++ b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ir/AndroidSymbols.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ // This file was autogenerated based on android.jar, do not edit it directly. @@ -14,7 +14,7 @@ import org.jetbrains.kotlin.ir.builders.declarations.* import org.jetbrains.kotlin.ir.declarations.IrFactory import org.jetbrains.kotlin.ir.declarations.IrModuleFragment import org.jetbrains.kotlin.ir.declarations.IrPackageFragment -import org.jetbrains.kotlin.ir.declarations.impl.IrExternalPackageFragmentImpl +import org.jetbrains.kotlin.ir.declarations.createEmptyExternalPackageFragment import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl import org.jetbrains.kotlin.ir.symbols.* import org.jetbrains.kotlin.ir.types.defaultType @@ -445,7 +445,7 @@ class AndroidSymbols( }.symbol private fun createPackage(packageName: String): IrPackageFragment = - IrExternalPackageFragmentImpl.createEmptyExternalPackageFragment( + createEmptyExternalPackageFragment( moduleFragment.descriptor, FqName(packageName) ) diff --git a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/codegen/AndroidIrExtension.kt b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/codegen/AndroidIrExtension.kt index f75c161ab2c..45354a49704 100644 --- a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/codegen/AndroidIrExtension.kt +++ b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/codegen/AndroidIrExtension.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ @@ -26,7 +26,6 @@ import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.builders.* import org.jetbrains.kotlin.ir.builders.declarations.* import org.jetbrains.kotlin.ir.declarations.* -import org.jetbrains.kotlin.ir.declarations.impl.IrExternalPackageFragmentImpl import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.impl.IrBlockImpl @@ -87,7 +86,7 @@ private class AndroidIrTransformer(val extension: AndroidIrExtension, val plugin private fun createPackage(fqName: FqName) = cachedPackages.getOrPut(fqName) { - IrExternalPackageFragmentImpl.createEmptyExternalPackageFragment(pluginContext.moduleDescriptor, fqName) + createEmptyExternalPackageFragment(pluginContext.moduleDescriptor, fqName) } private fun createClass(fqName: FqName, isInterface: Boolean = false) = diff --git a/plugins/atomicfu/atomicfu-compiler/src/org/jetbrains/kotlinx/atomicfu/compiler/backend/common/AbstractAtomicSymbols.kt b/plugins/atomicfu/atomicfu-compiler/src/org/jetbrains/kotlinx/atomicfu/compiler/backend/common/AbstractAtomicSymbols.kt index 82fc896fdc5..f8fa89b8e59 100644 --- a/plugins/atomicfu/atomicfu-compiler/src/org/jetbrains/kotlinx/atomicfu/compiler/backend/common/AbstractAtomicSymbols.kt +++ b/plugins/atomicfu/atomicfu-compiler/src/org/jetbrains/kotlinx/atomicfu/compiler/backend/common/AbstractAtomicSymbols.kt @@ -1,20 +1,17 @@ /* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ package org.jetbrains.kotlinx.atomicfu.compiler.backend.common import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext -import org.jetbrains.kotlin.builtins.KotlinBuiltIns.isPrimitiveType import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.ir.IrBuiltIns import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET -import org.jetbrains.kotlin.ir.builders.declarations.addConstructor import org.jetbrains.kotlin.ir.builders.declarations.buildClass import org.jetbrains.kotlin.ir.declarations.* -import org.jetbrains.kotlin.ir.declarations.impl.IrExternalPackageFragmentImpl import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import org.jetbrains.kotlin.ir.expressions.impl.IrConstructorCallImpl @@ -124,7 +121,7 @@ abstract class AbstractAtomicSymbols( } protected fun createPackage(packageName: String): IrPackageFragment = - IrExternalPackageFragmentImpl.createEmptyExternalPackageFragment( + createEmptyExternalPackageFragment( moduleFragment.descriptor, FqName(packageName) ) diff --git a/plugins/kotlinx-serialization/kotlinx-serialization.backend/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerialInfoImplJvmIrGenerator.kt b/plugins/kotlinx-serialization/kotlinx-serialization.backend/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerialInfoImplJvmIrGenerator.kt index f2b756caffb..0faec935ee6 100644 --- a/plugins/kotlinx-serialization/kotlinx-serialization.backend/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerialInfoImplJvmIrGenerator.kt +++ b/plugins/kotlinx-serialization/kotlinx-serialization.backend/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerialInfoImplJvmIrGenerator.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ @@ -11,7 +11,6 @@ import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.builders.declarations.* import org.jetbrains.kotlin.ir.declarations.* -import org.jetbrains.kotlin.ir.declarations.impl.IrExternalPackageFragmentImpl import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl import org.jetbrains.kotlin.ir.expressions.impl.* import org.jetbrains.kotlin.ir.symbols.IrClassSymbol @@ -95,7 +94,7 @@ class SerialInfoImplJvmIrGenerator( } private fun createPackage(packageName: String): IrPackageFragment = - IrExternalPackageFragmentImpl.createEmptyExternalPackageFragment( + createEmptyExternalPackageFragment( moduleFragment.descriptor, FqName(packageName) ) diff --git a/plugins/parcelize/parcelize-compiler/parcelize.backend/src/org/jetbrains/kotlin/parcelize/AndroidSymbols.kt b/plugins/parcelize/parcelize-compiler/parcelize.backend/src/org/jetbrains/kotlin/parcelize/AndroidSymbols.kt index 9de260ba49d..f147301ed26 100644 --- a/plugins/parcelize/parcelize-compiler/parcelize.backend/src/org/jetbrains/kotlin/parcelize/AndroidSymbols.kt +++ b/plugins/parcelize/parcelize-compiler/parcelize.backend/src/org/jetbrains/kotlin/parcelize/AndroidSymbols.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ @@ -17,6 +17,7 @@ import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin import org.jetbrains.kotlin.ir.declarations.IrFactory import org.jetbrains.kotlin.ir.declarations.IrModuleFragment import org.jetbrains.kotlin.ir.declarations.IrPackageFragment +import org.jetbrains.kotlin.ir.declarations.createEmptyExternalPackageFragment import org.jetbrains.kotlin.ir.declarations.impl.IrExternalPackageFragmentImpl import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl import org.jetbrains.kotlin.ir.symbols.* @@ -552,7 +553,7 @@ class AndroidSymbols( }.symbol private fun createPackage(packageName: String): IrPackageFragment = - IrExternalPackageFragmentImpl.createEmptyExternalPackageFragment( + createEmptyExternalPackageFragment( moduleFragment.descriptor, FqName(packageName) )