[JS IR BE] Preserve package fqName when moving external declarations out

Create separate package fragment for each fqName of external declaration package
This commit is contained in:
Svyatoslav Kuzmich
2019-05-05 18:42:38 +03:00
parent 2741ecaaad
commit d6c9375196
3 changed files with 11 additions and 9 deletions
@@ -55,7 +55,7 @@ class JsIrBackendContext(
override var inVerbosePhase: Boolean = false override var inVerbosePhase: Boolean = false
lateinit var externalPackageFragment: IrPackageFragment var externalPackageFragment = mutableMapOf<FqName, IrPackageFragment>()
lateinit var bodilessBuiltInsPackageFragment: IrPackageFragment lateinit var bodilessBuiltInsPackageFragment: IrPackageFragment
val externalNestedClasses = mutableListOf<IrClass>() val externalNestedClasses = mutableListOf<IrClass>()
@@ -55,12 +55,6 @@ private class DescriptorlessExternalPackageFragmentSymbol : IrExternalPackageFra
} }
fun moveBodilessDeclarationsToSeparatePlace(context: JsIrBackendContext, module: IrModuleFragment) { fun moveBodilessDeclarationsToSeparatePlace(context: JsIrBackendContext, module: IrModuleFragment) {
val externalPackageFragment = IrExternalPackageFragmentImpl(
DescriptorlessExternalPackageFragmentSymbol(),
FqName.ROOT
)
context.externalPackageFragment = externalPackageFragment
val bodilessBuiltInsPackageFragment = IrExternalPackageFragmentImpl( val bodilessBuiltInsPackageFragment = IrExternalPackageFragmentImpl(
DescriptorlessExternalPackageFragmentSymbol(), DescriptorlessExternalPackageFragmentSymbol(),
@@ -86,6 +80,15 @@ fun moveBodilessDeclarationsToSeparatePlace(context: JsIrBackendContext, module:
} }
fun lowerFile(irFile: IrFile): IrFile? { fun lowerFile(irFile: IrFile): IrFile? {
val externalPackageFragment by lazy {
context.externalPackageFragment.getOrPut(irFile.fqName) {
IrExternalPackageFragmentImpl(
DescriptorlessExternalPackageFragmentSymbol(),
irFile.fqName
)
}
}
context.externalNestedClasses += collectExternalClasses(irFile, includeCurrentLevel = false) context.externalNestedClasses += collectExternalClasses(irFile, includeCurrentLevel = false)
if (irFile.getJsModule() != null || irFile.getJsQualifier() != null) { if (irFile.getJsModule() != null || irFile.getJsQualifier() != null) {
@@ -121,8 +121,7 @@ class IrModuleToJsTransformer(
private fun generateModule(module: IrModuleFragment): JsProgram { private fun generateModule(module: IrModuleFragment): JsProgram {
val additionalPackages = with(backendContext) { val additionalPackages = with(backendContext) {
listOf( externalPackageFragment.values + listOf(
externalPackageFragment,
bodilessBuiltInsPackageFragment, bodilessBuiltInsPackageFragment,
intrinsics.externalPackageFragment intrinsics.externalPackageFragment
) + packageLevelJsModules ) + packageLevelJsModules