JVM_IR. Remove descriptors from FileClassLowering
This commit is contained in:
@@ -36,7 +36,7 @@ class JvmBackendContext(
|
||||
irModuleFragment: IrModuleFragment, symbolTable: SymbolTable
|
||||
) : CommonBackendContext {
|
||||
override val builtIns = state.module.builtIns
|
||||
override val declarationFactory: JvmDeclarationFactory = JvmDeclarationFactory(psiSourceManager, builtIns, state, symbolTable)
|
||||
override val declarationFactory: JvmDeclarationFactory = JvmDeclarationFactory(state, symbolTable)
|
||||
override val sharedVariablesManager = JvmSharedVariablesManager(builtIns, irBuiltIns)
|
||||
|
||||
// TODO: inject a correct StorageManager instance, or store NotFoundClasses inside ModuleDescriptor
|
||||
|
||||
-21
@@ -10,8 +10,6 @@ import org.jetbrains.kotlin.backend.jvm.JvmLoweredDeclarationOrigin
|
||||
import org.jetbrains.kotlin.backend.jvm.lower.createFunctionAndMapVariables
|
||||
import org.jetbrains.kotlin.backend.jvm.lower.createStaticFunctionWithReceivers
|
||||
import org.jetbrains.kotlin.builtins.CompanionObjectMapping.isMappedIntrinsicCompanionObject
|
||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||
import org.jetbrains.kotlin.codegen.descriptors.FileClassDescriptor
|
||||
import org.jetbrains.kotlin.codegen.state.GenerationState
|
||||
import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
@@ -19,8 +17,6 @@ import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
||||
import org.jetbrains.kotlin.descriptors.impl.ClassConstructorDescriptorImpl
|
||||
import org.jetbrains.kotlin.descriptors.impl.PropertyDescriptorImpl
|
||||
import org.jetbrains.kotlin.descriptors.impl.SimpleFunctionDescriptorImpl
|
||||
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil
|
||||
import org.jetbrains.kotlin.ir.SourceManager
|
||||
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.declarations.impl.IrClassImpl
|
||||
@@ -37,14 +33,10 @@ import org.jetbrains.kotlin.ir.util.*
|
||||
import org.jetbrains.kotlin.load.java.JavaVisibilities
|
||||
import org.jetbrains.kotlin.load.java.JvmAbi
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.psi2ir.PsiSourceManager
|
||||
import org.jetbrains.kotlin.resolve.source.KotlinSourceElement
|
||||
import org.jetbrains.org.objectweb.asm.Opcodes
|
||||
import java.util.*
|
||||
|
||||
class JvmDeclarationFactory(
|
||||
private val psiSourceManager: PsiSourceManager,
|
||||
private val builtIns: KotlinBuiltIns,
|
||||
private val state: GenerationState,
|
||||
private val symbolTable: SymbolTable
|
||||
) : DeclarationFactory {
|
||||
@@ -67,19 +59,6 @@ class JvmDeclarationFactory(
|
||||
)
|
||||
}
|
||||
|
||||
fun createFileClassDescriptor(fileEntry: SourceManager.FileEntry, packageFragment: PackageFragmentDescriptor): FileClassDescriptor {
|
||||
val ktFile = psiSourceManager.getKtFile(fileEntry as PsiSourceManager.PsiFileEntry)
|
||||
?: throw AssertionError("Unexpected file entry: $fileEntry")
|
||||
val fileClassInfo = JvmFileClassUtil.getFileClassInfoNoResolve(ktFile)
|
||||
val sourceElement = KotlinSourceElement(ktFile)
|
||||
return FileClassDescriptorImpl(
|
||||
fileClassInfo.fileClassFqName.shortName(), packageFragment,
|
||||
listOf(builtIns.anyType),
|
||||
sourceElement,
|
||||
Annotations.EMPTY // TODO file annotations
|
||||
)
|
||||
}
|
||||
|
||||
override fun getOuterThisField(innerClass: IrClass): IrField =
|
||||
if (!innerClass.isInner) throw AssertionError("Class is not inner: ${innerClass.dump()}")
|
||||
else outerThisDeclarations.getOrPut(innerClass) {
|
||||
|
||||
+2
-2
@@ -70,9 +70,9 @@ class BridgeLowering(val context: JvmBackendContext) : ClassLoweringPass {
|
||||
!isInterface(descriptor.containingDeclaration) || state.target !== JvmTarget.JVM_1_6 && descriptor.hasJvmDefaultAnnotation()
|
||||
|
||||
override fun lower(irClass: IrClass) {
|
||||
val classDescriptor = irClass.descriptor
|
||||
if (classDescriptor is FileClassDescriptor) return
|
||||
if (irClass.isFileClass) return
|
||||
|
||||
val classDescriptor = irClass.descriptor
|
||||
if (classDescriptor is DefaultImplsClassDescriptor) {
|
||||
return /*TODO?*/
|
||||
}
|
||||
|
||||
+2
-2
@@ -33,9 +33,9 @@ abstract class ClassLowerWithContext : FileLoweringPass, IrElementTransformer<Ir
|
||||
private val irClass2Context = hashMapOf<IrClass, IrClassContext>()
|
||||
|
||||
override fun lower(irFile: IrFile) {
|
||||
val packageIr = irFile.declarations.singleOrNull { it.descriptor is FileClassDescriptor }
|
||||
val packageIr = irFile.declarations.singleOrNull { it is IrClass && it.isFileClass } as? IrClass
|
||||
if (packageIr != null) {
|
||||
visitClass(packageIr as IrClass, null)
|
||||
visitClass(packageIr, null)
|
||||
irFile.declarations.filterNot { it == packageIr }.forEach { it.accept(this, irClass2Context[packageIr]!!) }
|
||||
} else {
|
||||
irFile.accept(this, null)
|
||||
|
||||
+9
-2
@@ -17,12 +17,20 @@
|
||||
package org.jetbrains.kotlin.backend.jvm.lower
|
||||
|
||||
import org.jetbrains.kotlin.backend.common.FileLoweringPass
|
||||
import org.jetbrains.kotlin.backend.common.descriptors.WrappedClassDescriptor
|
||||
import org.jetbrains.kotlin.backend.jvm.JvmBackendContext
|
||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil
|
||||
import org.jetbrains.kotlin.ir.declarations.IrClass
|
||||
import org.jetbrains.kotlin.ir.declarations.IrDeclaration
|
||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
||||
import org.jetbrains.kotlin.ir.declarations.IrFile
|
||||
import org.jetbrains.kotlin.ir.declarations.impl.IrClassImpl
|
||||
import org.jetbrains.kotlin.ir.symbols.impl.IrClassSymbolImpl
|
||||
import org.jetbrains.kotlin.psi2ir.PsiSourceManager
|
||||
import org.jetbrains.kotlin.resolve.source.KotlinSourceElement
|
||||
import java.util.*
|
||||
|
||||
class FileClassLowering(val context: JvmBackendContext) : FileLoweringPass {
|
||||
@@ -39,8 +47,7 @@ class FileClassLowering(val context: JvmBackendContext) : FileLoweringPass {
|
||||
|
||||
if (fileClassMembers.isEmpty()) return
|
||||
|
||||
val fileClassDescriptor = context.declarationFactory.createFileClassDescriptor(irFile.fileEntry, irFile.packageFragmentDescriptor)
|
||||
val irFileClass = IrClassImpl(0, irFile.fileEntry.maxOffset, IrDeclarationOrigin.DEFINED, fileClassDescriptor, fileClassMembers)
|
||||
val irFileClass = createFileClass(irFile, fileClassMembers)
|
||||
classes.add(irFileClass)
|
||||
|
||||
irFile.declarations.clear()
|
||||
|
||||
@@ -35,6 +35,7 @@ interface IrClass : IrSymbolDeclaration<IrClassSymbol>, IrDeclarationWithVisibil
|
||||
val isData: Boolean
|
||||
val isExternal: Boolean
|
||||
val isInline: Boolean
|
||||
val isFileClass: Boolean
|
||||
|
||||
val superTypes: MutableList<IrType>
|
||||
|
||||
|
||||
@@ -44,7 +44,8 @@ class IrClassImpl(
|
||||
override val isInner: Boolean,
|
||||
override val isData: Boolean,
|
||||
override val isExternal: Boolean,
|
||||
override val isInline: Boolean
|
||||
override val isInline: Boolean,
|
||||
override val isFileClass: Boolean = false
|
||||
) :
|
||||
IrDeclarationBase(startOffset, endOffset, origin),
|
||||
IrClass {
|
||||
|
||||
@@ -66,6 +66,8 @@ class IrLazyClass(
|
||||
symbol.bind(this)
|
||||
}
|
||||
|
||||
override val isFileClass = false // file classes are never crated lazily
|
||||
|
||||
override val annotations: MutableList<IrCall> = arrayListOf()
|
||||
|
||||
override val descriptor: ClassDescriptor get() = symbol.descriptor
|
||||
|
||||
Reference in New Issue
Block a user