Fixes after rebase, not related to IrLibraryFile

This commit is contained in:
Georgy Bronnikov
2021-07-05 18:05:28 +03:00
committed by TeamCityServer
parent 08b950fc2a
commit f4d358069c
3 changed files with 25 additions and 13 deletions
@@ -118,7 +118,9 @@ open class JvmGeneratorExtensionsImpl(
allowErrorNodes: Boolean allowErrorNodes: Boolean
): Boolean { ): Boolean {
val serializedIr = (irClass.source as? KotlinJvmBinarySourceElement)?.binaryClass?.classHeader?.serializedIr ?: return false val serializedIr = (irClass.source as? KotlinJvmBinarySourceElement)?.binaryClass?.classHeader?.serializedIr ?: return false
deserializeClassFromByteArray(serializedIr, stubGenerator, irClass, allowErrorNodes) deserializeClassFromByteArray(
serializedIr, stubGenerator, irClass, JvmIrTypeSystemContext(stubGenerator.irBuiltIns), allowErrorNodes
)
irClass.transform(SingletonObjectJvmStaticTransformer(stubGenerator.irBuiltIns, cachedFields), null) irClass.transform(SingletonObjectJvmStaticTransformer(stubGenerator.irBuiltIns, cachedFields), null)
return true return true
} }
@@ -130,7 +132,9 @@ open class JvmGeneratorExtensionsImpl(
allowErrorNodes: Boolean allowErrorNodes: Boolean
): Boolean { ): Boolean {
val serializedIr = (irClass.source as? JvmPackagePartSource)?.knownJvmBinaryClass?.classHeader?.serializedIr ?: return false val serializedIr = (irClass.source as? JvmPackagePartSource)?.knownJvmBinaryClass?.classHeader?.serializedIr ?: return false
deserializeIrFileFromByteArray(serializedIr, stubGenerator, irClass, allowErrorNodes) deserializeIrFileFromByteArray(
serializedIr, stubGenerator, irClass, JvmIrTypeSystemContext(stubGenerator.irBuiltIns), allowErrorNodes
)
irClass.transform(SingletonObjectJvmStaticTransformer(stubGenerator.irBuiltIns, cachedFields), null) irClass.transform(SingletonObjectJvmStaticTransformer(stubGenerator.irBuiltIns, cachedFields), null)
return true return true
} }
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.backend.jvm.serialization package org.jetbrains.kotlin.backend.jvm.serialization
import org.jetbrains.kotlin.backend.common.serialization.CompatibilityMode
import org.jetbrains.kotlin.backend.common.serialization.DeclarationTable import org.jetbrains.kotlin.backend.common.serialization.DeclarationTable
import org.jetbrains.kotlin.backend.common.serialization.IrFileSerializer import org.jetbrains.kotlin.backend.common.serialization.IrFileSerializer
import org.jetbrains.kotlin.backend.jvm.serialization.proto.JvmIr import org.jetbrains.kotlin.backend.jvm.serialization.proto.JvmIr
@@ -21,7 +22,9 @@ class JvmIrSerializerSession(
expectDescriptorToSymbol: MutableMap<DeclarationDescriptor, IrSymbol>, expectDescriptorToSymbol: MutableMap<DeclarationDescriptor, IrSymbol>,
externallyVisibleOnly: Boolean = true, externallyVisibleOnly: Boolean = true,
skipExpects: Boolean = false, skipExpects: Boolean = false,
) : IrFileSerializer(messageLogger, declarationTable, expectDescriptorToSymbol, externallyVisibleOnly, skipExpects) { ) : IrFileSerializer(
messageLogger, declarationTable, expectDescriptorToSymbol, CompatibilityMode.CURRENT, externallyVisibleOnly, skipExpects
) {
// Usage protocol: construct an instance, call only one of `serializeIrFile()` and `serializeTopLevelClass()` only once. // Usage protocol: construct an instance, call only one of `serializeIrFile()` and `serializeTopLevelClass()` only once.
@@ -22,6 +22,7 @@ import org.jetbrains.kotlin.ir.declarations.lazy.LazyIrFactory
import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
import org.jetbrains.kotlin.ir.symbols.* import org.jetbrains.kotlin.ir.symbols.*
import org.jetbrains.kotlin.ir.symbols.impl.IrFileSymbolImpl import org.jetbrains.kotlin.ir.symbols.impl.IrFileSymbolImpl
import org.jetbrains.kotlin.ir.types.IrTypeSystemContext
import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.ir.util.*
import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
@@ -31,6 +32,7 @@ fun deserializeClassFromByteArray(
byteArray: ByteArray, byteArray: ByteArray,
stubGenerator: DeclarationStubGenerator, stubGenerator: DeclarationStubGenerator,
irClass: IrClass, irClass: IrClass,
typeSystemContext: IrTypeSystemContext,
allowErrorNodes: Boolean, allowErrorNodes: Boolean,
) { ) {
val irBuiltIns = stubGenerator.irBuiltIns val irBuiltIns = stubGenerator.irBuiltIns
@@ -73,19 +75,21 @@ fun deserializeClassFromByteArray(
deserializeBodies = true, deserializeBodies = true,
symbolDeserializer, symbolDeserializer,
DefaultFakeOverrideClassFilter, DefaultFakeOverrideClassFilter,
makeSimpleFakeOverrideBuilder(symbolTable, irBuiltIns, symbolDeserializer) makeSimpleFakeOverrideBuilder(symbolTable, typeSystemContext, symbolDeserializer),
compatibilityMode = CompatibilityMode.CURRENT,
) )
deserializer.deserializeIrClass(irProto.irClass) deserializer.deserializeIrClass(irProto.irClass)
ExternalDependenciesGenerator(stubGenerator.symbolTable, listOf(stubGenerator)).generateUnboundSymbolsAsDependencies() ExternalDependenciesGenerator(stubGenerator.symbolTable, listOf(stubGenerator)).generateUnboundSymbolsAsDependencies()
buildFakeOverridesForLocalClasses(stubGenerator.symbolTable, stubGenerator.irBuiltIns, symbolDeserializer, irClass) buildFakeOverridesForLocalClasses(stubGenerator.symbolTable, typeSystemContext, symbolDeserializer, irClass)
} }
fun deserializeIrFileFromByteArray( fun deserializeIrFileFromByteArray(
byteArray: ByteArray, byteArray: ByteArray,
stubGenerator: DeclarationStubGenerator, stubGenerator: DeclarationStubGenerator,
facadeClass: IrClass, facadeClass: IrClass,
typeSystemContext: IrTypeSystemContext,
allowErrorNodes: Boolean, allowErrorNodes: Boolean,
) { ) {
val irBuiltIns = stubGenerator.irBuiltIns val irBuiltIns = stubGenerator.irBuiltIns
@@ -121,7 +125,7 @@ fun deserializeIrFileFromByteArray(
val lazyIrFactory = LazyIrFactory(irBuiltIns.irFactory) val lazyIrFactory = LazyIrFactory(irBuiltIns.irFactory)
val fakeOverrideBuilder = makeSimpleFakeOverrideBuilder(symbolTable, irBuiltIns, symbolDeserializer) val fakeOverrideBuilder = makeSimpleFakeOverrideBuilder(symbolTable, typeSystemContext, symbolDeserializer)
val deserializer = IrDeclarationDeserializer( val deserializer = IrDeclarationDeserializer(
irBuiltIns, symbolTable, lazyIrFactory, irLibraryFile, facadeClass, irBuiltIns, symbolTable, lazyIrFactory, irLibraryFile, facadeClass,
@@ -130,14 +134,15 @@ fun deserializeIrFileFromByteArray(
deserializeBodies = true, deserializeBodies = true,
symbolDeserializer, symbolDeserializer,
DefaultFakeOverrideClassFilter, DefaultFakeOverrideClassFilter,
fakeOverrideBuilder fakeOverrideBuilder,
compatibilityMode = CompatibilityMode.CURRENT,
) )
for (declarationProto in irProto.declarationList) { for (declarationProto in irProto.declarationList) {
deserializer.deserializeDeclaration(declarationProto) deserializer.deserializeDeclaration(declarationProto)
} }
ExternalDependenciesGenerator(stubGenerator.symbolTable, listOf(stubGenerator)).generateUnboundSymbolsAsDependencies() ExternalDependenciesGenerator(stubGenerator.symbolTable, listOf(stubGenerator)).generateUnboundSymbolsAsDependencies()
buildFakeOverridesForLocalClasses(stubGenerator.symbolTable, stubGenerator.irBuiltIns, symbolDeserializer, facadeClass) buildFakeOverridesForLocalClasses(stubGenerator.symbolTable, typeSystemContext, symbolDeserializer, facadeClass)
} }
private class IrLibraryFileFromAnnotation( private class IrLibraryFileFromAnnotation(
@@ -195,7 +200,7 @@ private fun referencePublicSymbol(
// TODO: implement properly // TODO: implement properly
fun makeSimpleFakeOverrideBuilder( fun makeSimpleFakeOverrideBuilder(
symbolTable: SymbolTable, symbolTable: SymbolTable,
irBuiltIns: IrBuiltIns, typeSystemContext: IrTypeSystemContext,
symbolDeserializer: IrSymbolDeserializer symbolDeserializer: IrSymbolDeserializer
): FakeOverrideBuilder { ): FakeOverrideBuilder {
return FakeOverrideBuilder( return FakeOverrideBuilder(
@@ -210,18 +215,18 @@ fun makeSimpleFakeOverrideBuilder(
}, },
symbolTable, symbolTable,
JvmIrMangler, JvmIrMangler,
irBuiltIns, typeSystemContext,
fakeOverrideDeclarationTable = PrePopulatedDeclarationTable(symbolDeserializer.deserializedSymbols) fakeOverrideDeclarationTable = PrePopulatedDeclarationTable(symbolDeserializer.deserializedSymbols)
) )
} }
private fun buildFakeOverridesForLocalClasses( private fun buildFakeOverridesForLocalClasses(
symbolTable: SymbolTable, symbolTable: SymbolTable,
irBuiltIns: IrBuiltIns, typeSystemContext: IrTypeSystemContext,
symbolDeserializer: IrSymbolDeserializer, symbolDeserializer: IrSymbolDeserializer,
toplevel: IrClass toplevel: IrClass
) { ) {
val builder = makeSimpleFakeOverrideBuilder(symbolTable, irBuiltIns, symbolDeserializer) val builder = makeSimpleFakeOverrideBuilder(symbolTable, typeSystemContext, symbolDeserializer)
toplevel.acceptChildrenVoid(object : IrElementVisitorVoid { toplevel.acceptChildrenVoid(object : IrElementVisitorVoid {
override fun visitElement(element: IrElement) { override fun visitElement(element: IrElement) {
element.acceptChildrenVoid(this) element.acceptChildrenVoid(this)
@@ -229,7 +234,7 @@ private fun buildFakeOverridesForLocalClasses(
override fun visitClass(declaration: IrClass) { override fun visitClass(declaration: IrClass) {
if (declaration.visibility == DescriptorVisibilities.LOCAL) { if (declaration.visibility == DescriptorVisibilities.LOCAL) {
builder.provideFakeOverrides(declaration) builder.provideFakeOverrides(declaration, CompatibilityMode.CURRENT)
} }
super.visitClass(declaration) super.visitClass(declaration)
} }