Minor, somewhat simplify ClassCodegen construction
This commit is contained in:
+5
-15
@@ -9,7 +9,6 @@ import org.jetbrains.kotlin.backend.jvm.JvmBackendContext
|
|||||||
import org.jetbrains.kotlin.backend.jvm.JvmLoweredDeclarationOrigin
|
import org.jetbrains.kotlin.backend.jvm.JvmLoweredDeclarationOrigin
|
||||||
import org.jetbrains.kotlin.backend.jvm.lower.constantValue
|
import org.jetbrains.kotlin.backend.jvm.lower.constantValue
|
||||||
import org.jetbrains.kotlin.codegen.*
|
import org.jetbrains.kotlin.codegen.*
|
||||||
import org.jetbrains.kotlin.codegen.binding.CodegenBinding.ASM_TYPE
|
|
||||||
import org.jetbrains.kotlin.codegen.inline.DefaultSourceMapper
|
import org.jetbrains.kotlin.codegen.inline.DefaultSourceMapper
|
||||||
import org.jetbrains.kotlin.codegen.inline.SourceMapper
|
import org.jetbrains.kotlin.codegen.inline.SourceMapper
|
||||||
import org.jetbrains.kotlin.codegen.serialization.JvmSerializationBindings
|
import org.jetbrains.kotlin.codegen.serialization.JvmSerializationBindings
|
||||||
@@ -42,7 +41,6 @@ open class ClassCodegen protected constructor(
|
|||||||
val context: JvmBackendContext,
|
val context: JvmBackendContext,
|
||||||
private val parentClassCodegen: ClassCodegen? = null
|
private val parentClassCodegen: ClassCodegen? = null
|
||||||
) : InnerClassConsumer {
|
) : InnerClassConsumer {
|
||||||
|
|
||||||
private val innerClasses = mutableListOf<IrClass>()
|
private val innerClasses = mutableListOf<IrClass>()
|
||||||
|
|
||||||
val state = context.state
|
val state = context.state
|
||||||
@@ -51,22 +49,14 @@ open class ClassCodegen protected constructor(
|
|||||||
|
|
||||||
val descriptor = irClass.descriptor
|
val descriptor = irClass.descriptor
|
||||||
|
|
||||||
private val isAnonymous = irClass.isAnonymousObject
|
val type: Type = typeMapper.mapClass(irClass)
|
||||||
|
|
||||||
val type: Type = if (isAnonymous)
|
private val fileEntry = context.psiSourceManager.getFileEntry(irClass.fileParent)
|
||||||
state.bindingContext.get(ASM_TYPE, descriptor)!!
|
|
||||||
else typeMapper.mapClass(irClass)
|
|
||||||
|
|
||||||
private val sourceManager = context.psiSourceManager
|
|
||||||
|
|
||||||
private val fileEntry = sourceManager.getFileEntry(irClass.fileParent)
|
|
||||||
|
|
||||||
val psiElement = irClass.descriptor.psiElement
|
|
||||||
|
|
||||||
val visitor: ClassBuilder = createClassBuilder()
|
val visitor: ClassBuilder = createClassBuilder()
|
||||||
|
|
||||||
open fun createClassBuilder() = state.factory.newVisitor(
|
open fun createClassBuilder() = state.factory.newVisitor(
|
||||||
OtherOrigin(psiElement, descriptor),
|
OtherOrigin(descriptor.psiElement, descriptor),
|
||||||
type,
|
type,
|
||||||
listOf(File(fileEntry.name))
|
listOf(File(fileEntry.name))
|
||||||
)
|
)
|
||||||
@@ -86,7 +76,7 @@ open class ClassCodegen protected constructor(
|
|||||||
val signature = getSignature(irClass, type, superClassInfo, typeMapper)
|
val signature = getSignature(irClass, type, superClassInfo, typeMapper)
|
||||||
|
|
||||||
visitor.defineClass(
|
visitor.defineClass(
|
||||||
psiElement,
|
descriptor.psiElement,
|
||||||
state.classFileVersion,
|
state.classFileVersion,
|
||||||
irClass.flags,
|
irClass.flags,
|
||||||
signature.name,
|
signature.name,
|
||||||
@@ -320,7 +310,7 @@ open class ClassCodegen protected constructor(
|
|||||||
if (containingDeclaration is IrFunction) {
|
if (containingDeclaration is IrFunction) {
|
||||||
val method = typeMapper.mapAsmMethod(containingDeclaration)
|
val method = typeMapper.mapAsmMethod(containingDeclaration)
|
||||||
visitor.visitOuterClass(outerClassName, method.name, method.descriptor)
|
visitor.visitOuterClass(outerClassName, method.name, method.descriptor)
|
||||||
} else if (isAnonymous) {
|
} else if (irClass.isAnonymousObject) {
|
||||||
visitor.visitOuterClass(outerClassName, null, null)
|
visitor.visitOuterClass(outerClassName, null, null)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user