FIR serializer: accept FirClass instead of IrClass to get rid of IR deps
This commit is contained in:
@@ -8,8 +8,6 @@ dependencies {
|
|||||||
compile(project(":compiler:fir:cones"))
|
compile(project(":compiler:fir:cones"))
|
||||||
compile(project(":compiler:fir:tree"))
|
compile(project(":compiler:fir:tree"))
|
||||||
compile(project(":compiler:fir:resolve"))
|
compile(project(":compiler:fir:resolve"))
|
||||||
compileOnly(project(":compiler:ir.tree"))
|
|
||||||
compileOnly(project(":compiler:fir:fir2ir"))
|
|
||||||
|
|
||||||
compileOnly(intellijCoreDep()) { includeJars("intellij-core", rootProject = rootProject) }
|
compileOnly(intellijCoreDep()) { includeJars("intellij-core", rootProject = rootProject) }
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-5
@@ -10,7 +10,6 @@ import org.jetbrains.kotlin.config.LanguageFeature
|
|||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.fir.FirAnnotationContainer
|
import org.jetbrains.kotlin.fir.FirAnnotationContainer
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.backend.FirMetadataSource
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyAccessor
|
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyAccessor
|
||||||
import org.jetbrains.kotlin.fir.deserialization.CONTINUATION_INTERFACE_CLASS_ID
|
import org.jetbrains.kotlin.fir.deserialization.CONTINUATION_INTERFACE_CLASS_ID
|
||||||
@@ -28,7 +27,6 @@ import org.jetbrains.kotlin.fir.symbols.StandardClassIds
|
|||||||
import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl
|
import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
import org.jetbrains.kotlin.fir.types.impl.FirImplicitNullableAnyTypeRef
|
import org.jetbrains.kotlin.fir.types.impl.FirImplicitNullableAnyTypeRef
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrClass
|
|
||||||
import org.jetbrains.kotlin.metadata.ProtoBuf
|
import org.jetbrains.kotlin.metadata.ProtoBuf
|
||||||
import org.jetbrains.kotlin.metadata.deserialization.Flags
|
import org.jetbrains.kotlin.metadata.deserialization.Flags
|
||||||
import org.jetbrains.kotlin.metadata.deserialization.VersionRequirement
|
import org.jetbrains.kotlin.metadata.deserialization.VersionRequirement
|
||||||
@@ -84,8 +82,7 @@ class FirElementSerializer private constructor(
|
|||||||
return builder
|
return builder
|
||||||
}
|
}
|
||||||
|
|
||||||
fun classProto(irClass: IrClass): ProtoBuf.Class.Builder {
|
fun classProto(klass: FirClass<*>): ProtoBuf.Class.Builder {
|
||||||
val klass = (irClass.metadata as FirMetadataSource.Class).klass
|
|
||||||
val builder = ProtoBuf.Class.newBuilder()
|
val builder = ProtoBuf.Class.newBuilder()
|
||||||
|
|
||||||
val regularClass = klass as? FirRegularClass
|
val regularClass = klass as? FirRegularClass
|
||||||
@@ -178,7 +175,7 @@ class FirElementSerializer private constructor(
|
|||||||
|
|
||||||
builder.addAllVersionRequirement(versionRequirementTable.serializeVersionRequirements(klass))
|
builder.addAllVersionRequirement(versionRequirementTable.serializeVersionRequirements(klass))
|
||||||
|
|
||||||
extension.serializeClass(irClass, builder, versionRequirementTable, this)
|
extension.serializeClass(klass, builder, versionRequirementTable, this)
|
||||||
|
|
||||||
writeVersionRequirementForInlineClasses(klass, builder, versionRequirementTable)
|
writeVersionRequirementForInlineClasses(klass, builder, versionRequirementTable)
|
||||||
|
|
||||||
|
|||||||
+1
-2
@@ -10,7 +10,6 @@ import org.jetbrains.kotlin.fir.declarations.*
|
|||||||
import org.jetbrains.kotlin.fir.types.ConeFlexibleType
|
import org.jetbrains.kotlin.fir.types.ConeFlexibleType
|
||||||
import org.jetbrains.kotlin.fir.types.ConeKotlinErrorType
|
import org.jetbrains.kotlin.fir.types.ConeKotlinErrorType
|
||||||
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrClass
|
|
||||||
import org.jetbrains.kotlin.metadata.ProtoBuf
|
import org.jetbrains.kotlin.metadata.ProtoBuf
|
||||||
import org.jetbrains.kotlin.metadata.deserialization.BinaryVersion
|
import org.jetbrains.kotlin.metadata.deserialization.BinaryVersion
|
||||||
import org.jetbrains.kotlin.metadata.serialization.MutableVersionRequirementTable
|
import org.jetbrains.kotlin.metadata.serialization.MutableVersionRequirementTable
|
||||||
@@ -36,7 +35,7 @@ abstract class FirSerializerExtension {
|
|||||||
}
|
}
|
||||||
|
|
||||||
open fun serializeClass(
|
open fun serializeClass(
|
||||||
klass: IrClass,
|
klass: FirClass<*>,
|
||||||
proto: ProtoBuf.Class.Builder,
|
proto: ProtoBuf.Class.Builder,
|
||||||
versionRequirementTable: MutableVersionRequirementTable,
|
versionRequirementTable: MutableVersionRequirementTable,
|
||||||
childSerializer: FirElementSerializer
|
childSerializer: FirElementSerializer
|
||||||
|
|||||||
+6
-5
@@ -44,6 +44,7 @@ class FirJvmSerializerExtension @JvmOverloads constructor(
|
|||||||
override val session: FirSession,
|
override val session: FirSession,
|
||||||
private val bindings: JvmSerializationBindings,
|
private val bindings: JvmSerializationBindings,
|
||||||
state: GenerationState,
|
state: GenerationState,
|
||||||
|
private val irClass: IrClass,
|
||||||
private val typeMapper: KotlinTypeMapperBase = state.typeMapper
|
private val typeMapper: KotlinTypeMapperBase = state.typeMapper
|
||||||
) : FirSerializerExtension() {
|
) : FirSerializerExtension() {
|
||||||
private val globalBindings = state.globalSerializationBindings
|
private val globalBindings = state.globalSerializationBindings
|
||||||
@@ -75,21 +76,21 @@ class FirJvmSerializerExtension @JvmOverloads constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun serializeClass(
|
override fun serializeClass(
|
||||||
klass: IrClass,
|
klass: FirClass<*>,
|
||||||
proto: ProtoBuf.Class.Builder,
|
proto: ProtoBuf.Class.Builder,
|
||||||
versionRequirementTable: MutableVersionRequirementTable,
|
versionRequirementTable: MutableVersionRequirementTable,
|
||||||
childSerializer: FirElementSerializer
|
childSerializer: FirElementSerializer
|
||||||
) {
|
) {
|
||||||
|
assert((irClass.metadata as FirMetadataSource.Class).klass == klass)
|
||||||
if (moduleName != JvmProtoBufUtil.DEFAULT_MODULE_NAME) {
|
if (moduleName != JvmProtoBufUtil.DEFAULT_MODULE_NAME) {
|
||||||
proto.setExtension(JvmProtoBuf.classModuleName, stringTable.getStringIndex(moduleName))
|
proto.setExtension(JvmProtoBuf.classModuleName, stringTable.getStringIndex(moduleName))
|
||||||
}
|
}
|
||||||
//TODO: support local delegated properties in new defaults scheme
|
//TODO: support local delegated properties in new defaults scheme
|
||||||
val containerAsmType =
|
val containerAsmType =
|
||||||
if (klass is FirRegularClass && klass.classKind == ClassKind.INTERFACE) typeMapper.mapDefaultImpls(klass.descriptor)
|
if (klass is FirRegularClass && klass.classKind == ClassKind.INTERFACE) typeMapper.mapDefaultImpls(irClass.descriptor)
|
||||||
else typeMapper.mapClass(klass.descriptor)
|
else typeMapper.mapClass(irClass.descriptor)
|
||||||
writeLocalProperties(proto, containerAsmType, JvmProtoBuf.classLocalVariable)
|
writeLocalProperties(proto, containerAsmType, JvmProtoBuf.classLocalVariable)
|
||||||
val firClass = (klass.metadata as FirMetadataSource.Class).klass
|
writeVersionRequirementForJvmDefaultIfNeeded(klass, proto, versionRequirementTable)
|
||||||
writeVersionRequirementForJvmDefaultIfNeeded(firClass, proto, versionRequirementTable)
|
|
||||||
|
|
||||||
if (jvmDefaultMode.forAllMethodsWithBody && klass is FirRegularClass && klass.classKind == ClassKind.INTERFACE) {
|
if (jvmDefaultMode.forAllMethodsWithBody && klass is FirRegularClass && klass.classKind == ClassKind.INTERFACE) {
|
||||||
proto.setExtension(JvmProtoBuf.jvmClassFlags, JvmFlags.getClassFlags(true))
|
proto.setExtension(JvmProtoBuf.jvmClassFlags, JvmFlags.getClassFlags(true))
|
||||||
|
|||||||
+2
-2
@@ -36,7 +36,7 @@ class FirBasedClassCodegen internal constructor(
|
|||||||
|
|
||||||
private val session = (irClass.metadata as FirMetadataSource).session
|
private val session = (irClass.metadata as FirMetadataSource).session
|
||||||
|
|
||||||
private val serializerExtension = FirJvmSerializerExtension(session, visitor.serializationBindings, state, typeMapper)
|
private val serializerExtension = FirJvmSerializerExtension(session, visitor.serializationBindings, state, irClass, typeMapper)
|
||||||
private val serializer: FirElementSerializer? =
|
private val serializer: FirElementSerializer? =
|
||||||
when (val metadata = irClass.metadata) {
|
when (val metadata = irClass.metadata) {
|
||||||
is FirMetadataSource.Class -> FirElementSerializer.create(
|
is FirMetadataSource.Class -> FirElementSerializer.create(
|
||||||
@@ -77,7 +77,7 @@ class FirBasedClassCodegen internal constructor(
|
|||||||
|
|
||||||
when (val metadata = irClass.metadata) {
|
when (val metadata = irClass.metadata) {
|
||||||
is FirMetadataSource.Class -> {
|
is FirMetadataSource.Class -> {
|
||||||
val classProto = serializer!!.classProto(irClass).build()
|
val classProto = serializer!!.classProto(metadata.klass).build()
|
||||||
writeKotlinMetadata(visitor, state, KotlinClassHeader.Kind.CLASS, extraFlags) {
|
writeKotlinMetadata(visitor, state, KotlinClassHeader.Kind.CLASS, extraFlags) {
|
||||||
AsmUtil.writeAnnotationData(it, classProto, serializer.stringTable as JvmStringTable)
|
AsmUtil.writeAnnotationData(it, classProto, serializer.stringTable as JvmStringTable)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user