[IR] Extract IrExternalPackageFragmentImpl.createEmptyExternalPackageFragment

This commit is contained in:
Mikhail Glukhikh
2020-05-19 16:42:43 +03:00
parent 12f596c620
commit b05a1bb1a2
9 changed files with 29 additions and 32 deletions
@@ -32,7 +32,9 @@ import java.util.*
class JsIntrinsics(private val irBuiltIns: IrBuiltIns, val context: JsIrBackendContext) { class JsIntrinsics(private val irBuiltIns: IrBuiltIns, val context: JsIrBackendContext) {
private val externalPackageFragmentSymbol = IrExternalPackageFragmentSymbolImpl(context.internalPackageFragmentDescriptor) private val externalPackageFragmentSymbol = IrExternalPackageFragmentSymbolImpl(context.internalPackageFragmentDescriptor)
val externalPackageFragment = IrExternalPackageFragmentImpl(externalPackageFragmentSymbol) val externalPackageFragment = IrExternalPackageFragmentImpl(
externalPackageFragmentSymbol, context.internalPackageFragmentDescriptor.fqName
)
// TODO: Should we drop operator intrinsics in favor of IrDynamicOperatorExpression? // TODO: Should we drop operator intrinsics in favor of IrDynamicOperatorExpression?
@@ -87,7 +87,7 @@ class JvmSymbols(
private fun createPackage(fqName: FqName): IrPackageFragment = private fun createPackage(fqName: FqName): IrPackageFragment =
IrExternalPackageFragmentImpl(IrExternalPackageFragmentSymbolImpl(EmptyPackageFragmentDescriptor(context.state.module, fqName))) IrExternalPackageFragmentImpl.createEmptyExternalPackageFragment(context.state.module, fqName)
private fun createClass( private fun createClass(
fqName: FqName, fqName: FqName,
@@ -32,10 +32,8 @@ class JvmSharedVariablesManager(
val symbols: JvmSymbols, val symbols: JvmSymbols,
val irBuiltIns: IrBuiltIns val irBuiltIns: IrBuiltIns
) : SharedVariablesManager { ) : SharedVariablesManager {
private val jvmInternalPackage = IrExternalPackageFragmentImpl( private val jvmInternalPackage = IrExternalPackageFragmentImpl.createEmptyExternalPackageFragment(
IrExternalPackageFragmentSymbolImpl( module, FqName("kotlin.jvm.internal")
EmptyPackageFragmentDescriptor(module, FqName("kotlin.jvm.internal"))
)
) )
private val refNamespaceClass = jvmInternalPackage.addClass { private val refNamespaceClass = jvmInternalPackage.addClass {
@@ -14,7 +14,6 @@ import org.jetbrains.kotlin.config.JvmTarget
import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.descriptors.annotations.KotlinRetention import org.jetbrains.kotlin.descriptors.annotations.KotlinRetention
import org.jetbrains.kotlin.descriptors.annotations.KotlinTarget import org.jetbrains.kotlin.descriptors.annotations.KotlinTarget
import org.jetbrains.kotlin.descriptors.impl.EmptyPackageFragmentDescriptor
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.builders.declarations.addValueParameter import org.jetbrains.kotlin.ir.builders.declarations.addValueParameter
import org.jetbrains.kotlin.ir.builders.declarations.buildClass import org.jetbrains.kotlin.ir.builders.declarations.buildClass
@@ -54,13 +53,9 @@ private class AdditionalClassAnnotationLowering(private val context: JvmBackendC
// TODO: import IR structures from the library? // TODO: import IR structures from the library?
private val annotationPackage: IrPackageFragment = IrExternalPackageFragmentImpl( private val annotationPackage: IrPackageFragment = IrExternalPackageFragmentImpl.createEmptyExternalPackageFragment(
IrExternalPackageFragmentSymbolImpl( context.ir.irModule.descriptor,
EmptyPackageFragmentDescriptor( FqName("java.lang.annotation")
context.ir.irModule.descriptor,
FqName("java.lang.annotation")
)
)
) )
private fun buildAnnotationClass( private fun buildAnnotationClass(
@@ -11,7 +11,6 @@ import org.jetbrains.kotlin.backend.js.JsDeclarationFactory
import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
import org.jetbrains.kotlin.descriptors.impl.EmptyPackageFragmentDescriptor
import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.backend.js.JsCommonBackendContext import org.jetbrains.kotlin.ir.backend.js.JsCommonBackendContext
import org.jetbrains.kotlin.ir.backend.js.JsMapping import org.jetbrains.kotlin.ir.backend.js.JsMapping
@@ -23,7 +22,6 @@ import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
import org.jetbrains.kotlin.ir.symbols.IrExternalPackageFragmentSymbol import org.jetbrains.kotlin.ir.symbols.IrExternalPackageFragmentSymbol
import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
import org.jetbrains.kotlin.ir.symbols.impl.IrExternalPackageFragmentSymbolImpl
import org.jetbrains.kotlin.ir.util.IdSignature import org.jetbrains.kotlin.ir.util.IdSignature
import org.jetbrains.kotlin.ir.util.SymbolTable import org.jetbrains.kotlin.ir.util.SymbolTable
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
@@ -58,10 +56,8 @@ class WasmBackendContext(
val objectToGetInstanceFunction = mutableMapOf<IrClassSymbol, IrSimpleFunction>() val objectToGetInstanceFunction = mutableMapOf<IrClassSymbol, IrSimpleFunction>()
override val internalPackageFqn = FqName("kotlin.wasm") override val internalPackageFqn = FqName("kotlin.wasm")
private val internalPackageFragment = IrExternalPackageFragmentImpl( private val internalPackageFragment = IrExternalPackageFragmentImpl.createEmptyExternalPackageFragment(
IrExternalPackageFragmentSymbolImpl( builtIns.builtInsModule, FqName("kotlin.wasm.internal")
EmptyPackageFragmentDescriptor(builtIns.builtInsModule, FqName("kotlin.wasm.internal"))
)
) )
override val sharedVariablesManager = JsSharedVariablesManager(irBuiltIns, internalPackageFragment) override val sharedVariablesManager = JsSharedVariablesManager(irBuiltIns, internalPackageFragment)
@@ -16,12 +16,15 @@
package org.jetbrains.kotlin.ir.declarations.impl package org.jetbrains.kotlin.ir.declarations.impl
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
import org.jetbrains.kotlin.descriptors.impl.EmptyPackageFragmentDescriptor
import org.jetbrains.kotlin.ir.IrElementBase import org.jetbrains.kotlin.ir.IrElementBase
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.declarations.IrDeclaration import org.jetbrains.kotlin.ir.declarations.IrDeclaration
import org.jetbrains.kotlin.ir.declarations.IrExternalPackageFragment import org.jetbrains.kotlin.ir.declarations.IrExternalPackageFragment
import org.jetbrains.kotlin.ir.symbols.IrExternalPackageFragmentSymbol import org.jetbrains.kotlin.ir.symbols.IrExternalPackageFragmentSymbol
import org.jetbrains.kotlin.ir.symbols.impl.IrExternalPackageFragmentSymbolImpl
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
@@ -32,8 +35,6 @@ class IrExternalPackageFragmentImpl(
) : IrElementBase(UNDEFINED_OFFSET, UNDEFINED_OFFSET), ) : IrElementBase(UNDEFINED_OFFSET, UNDEFINED_OFFSET),
IrExternalPackageFragment { IrExternalPackageFragment {
constructor(symbol: IrExternalPackageFragmentSymbol) : this(symbol, symbol.descriptor.fqName)
init { init {
symbol.bind(this) symbol.bind(this)
} }
@@ -54,4 +55,14 @@ class IrExternalPackageFragmentImpl(
declarations[i] = irDeclaration.transform(transformer, data) as IrDeclaration declarations[i] = irDeclaration.transform(transformer, data) as IrDeclaration
} }
} }
companion object {
fun createEmptyExternalPackageFragment(
module: ModuleDescriptor,
fqName: FqName
): IrExternalPackageFragmentImpl =
IrExternalPackageFragmentImpl(
IrExternalPackageFragmentSymbolImpl(EmptyPackageFragmentDescriptor(module, fqName)), fqName
)
}
} }
@@ -355,7 +355,7 @@ open class SymbolTable(
return externalPackageFragmentTable.declare( return externalPackageFragmentTable.declare(
descriptor, descriptor,
{ IrExternalPackageFragmentSymbolImpl(descriptor) }, { IrExternalPackageFragmentSymbolImpl(descriptor) },
{ IrExternalPackageFragmentImpl(it) } { IrExternalPackageFragmentImpl(it, descriptor.fqName) }
) )
} }
@@ -444,13 +444,9 @@ class AndroidSymbols(
}.symbol }.symbol
private fun createPackage(packageName: String): IrPackageFragment = private fun createPackage(packageName: String): IrPackageFragment =
IrExternalPackageFragmentImpl( IrExternalPackageFragmentImpl.createEmptyExternalPackageFragment(
IrExternalPackageFragmentSymbolImpl( moduleFragment.descriptor,
EmptyPackageFragmentDescriptor( FqName(packageName)
moduleFragment.descriptor,
FqName(packageName)
)
)
) )
private fun createClass( private fun createClass(
@@ -60,8 +60,7 @@ private class AndroidIrTransformer(val extension: AndroidIrExtension, val plugin
private fun createPackage(fqName: FqName) = private fun createPackage(fqName: FqName) =
cachedPackages.getOrPut(fqName) { cachedPackages.getOrPut(fqName) {
val descriptor = EmptyPackageFragmentDescriptor(pluginContext.moduleDescriptor, fqName) IrExternalPackageFragmentImpl.createEmptyExternalPackageFragment(pluginContext.moduleDescriptor, fqName)
IrExternalPackageFragmentImpl(IrExternalPackageFragmentSymbolImpl(descriptor))
} }
private fun createClass(fqName: FqName, isInterface: Boolean = false) = private fun createClass(fqName: FqName, isInterface: Boolean = false) =