[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) {
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?
@@ -87,7 +87,7 @@ class JvmSymbols(
private fun createPackage(fqName: FqName): IrPackageFragment =
IrExternalPackageFragmentImpl(IrExternalPackageFragmentSymbolImpl(EmptyPackageFragmentDescriptor(context.state.module, fqName)))
IrExternalPackageFragmentImpl.createEmptyExternalPackageFragment(context.state.module, fqName)
private fun createClass(
fqName: FqName,
@@ -32,10 +32,8 @@ class JvmSharedVariablesManager(
val symbols: JvmSymbols,
val irBuiltIns: IrBuiltIns
) : SharedVariablesManager {
private val jvmInternalPackage = IrExternalPackageFragmentImpl(
IrExternalPackageFragmentSymbolImpl(
EmptyPackageFragmentDescriptor(module, FqName("kotlin.jvm.internal"))
)
private val jvmInternalPackage = IrExternalPackageFragmentImpl.createEmptyExternalPackageFragment(
module, FqName("kotlin.jvm.internal")
)
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.annotations.KotlinRetention
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.builders.declarations.addValueParameter
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?
private val annotationPackage: IrPackageFragment = IrExternalPackageFragmentImpl(
IrExternalPackageFragmentSymbolImpl(
EmptyPackageFragmentDescriptor(
context.ir.irModule.descriptor,
FqName("java.lang.annotation")
)
)
private val annotationPackage: IrPackageFragment = IrExternalPackageFragmentImpl.createEmptyExternalPackageFragment(
context.ir.irModule.descriptor,
FqName("java.lang.annotation")
)
private fun buildAnnotationClass(
@@ -11,7 +11,6 @@ import org.jetbrains.kotlin.backend.js.JsDeclarationFactory
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
import org.jetbrains.kotlin.descriptors.impl.EmptyPackageFragmentDescriptor
import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.backend.js.JsCommonBackendContext
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.IrFunctionSymbol
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.SymbolTable
import org.jetbrains.kotlin.name.FqName
@@ -58,10 +56,8 @@ class WasmBackendContext(
val objectToGetInstanceFunction = mutableMapOf<IrClassSymbol, IrSimpleFunction>()
override val internalPackageFqn = FqName("kotlin.wasm")
private val internalPackageFragment = IrExternalPackageFragmentImpl(
IrExternalPackageFragmentSymbolImpl(
EmptyPackageFragmentDescriptor(builtIns.builtInsModule, FqName("kotlin.wasm.internal"))
)
private val internalPackageFragment = IrExternalPackageFragmentImpl.createEmptyExternalPackageFragment(
builtIns.builtInsModule, FqName("kotlin.wasm.internal")
)
override val sharedVariablesManager = JsSharedVariablesManager(irBuiltIns, internalPackageFragment)
@@ -16,12 +16,15 @@
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.IrElementBase
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.impl.IrExternalPackageFragmentSymbolImpl
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
import org.jetbrains.kotlin.name.FqName
@@ -32,8 +35,6 @@ class IrExternalPackageFragmentImpl(
) : IrElementBase(UNDEFINED_OFFSET, UNDEFINED_OFFSET),
IrExternalPackageFragment {
constructor(symbol: IrExternalPackageFragmentSymbol) : this(symbol, symbol.descriptor.fqName)
init {
symbol.bind(this)
}
@@ -54,4 +55,14 @@ class IrExternalPackageFragmentImpl(
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(
descriptor,
{ IrExternalPackageFragmentSymbolImpl(descriptor) },
{ IrExternalPackageFragmentImpl(it) }
{ IrExternalPackageFragmentImpl(it, descriptor.fqName) }
)
}
@@ -444,13 +444,9 @@ class AndroidSymbols(
}.symbol
private fun createPackage(packageName: String): IrPackageFragment =
IrExternalPackageFragmentImpl(
IrExternalPackageFragmentSymbolImpl(
EmptyPackageFragmentDescriptor(
moduleFragment.descriptor,
FqName(packageName)
)
)
IrExternalPackageFragmentImpl.createEmptyExternalPackageFragment(
moduleFragment.descriptor,
FqName(packageName)
)
private fun createClass(
@@ -60,8 +60,7 @@ private class AndroidIrTransformer(val extension: AndroidIrExtension, val plugin
private fun createPackage(fqName: FqName) =
cachedPackages.getOrPut(fqName) {
val descriptor = EmptyPackageFragmentDescriptor(pluginContext.moduleDescriptor, fqName)
IrExternalPackageFragmentImpl(IrExternalPackageFragmentSymbolImpl(descriptor))
IrExternalPackageFragmentImpl.createEmptyExternalPackageFragment(pluginContext.moduleDescriptor, fqName)
}
private fun createClass(fqName: FqName, isInterface: Boolean = false) =