IR interpreter: fix calculation of constant Java fields

#KT-42117 Fixed
This commit is contained in:
Mikhail Glukhikh
2020-09-22 13:22:47 +03:00
parent 44ebec05bb
commit 2fd752f8f6
12 changed files with 16 additions and 25 deletions
@@ -266,7 +266,9 @@ class Fir2IrConverter(
val components = Fir2IrComponentsStorage(session, scopeSession, symbolTable, irBuiltIns, irFactory, mangler)
val conversionScope = Fir2IrConversionScope()
val classifierStorage = Fir2IrClassifierStorage(components)
val declarationStorage = Fir2IrDeclarationStorage(components, moduleDescriptor)
val converter = Fir2IrConverter(moduleDescriptor, sourceManager, components)
val fir2irVisitor = Fir2IrVisitor(converter, components, conversionScope)
val declarationStorage = Fir2IrDeclarationStorage(components, fir2irVisitor, moduleDescriptor)
val typeConverter = Fir2IrTypeConverter(components)
val builtIns = Fir2IrBuiltIns(components, session)
components.declarationStorage = declarationStorage
@@ -276,7 +278,6 @@ class Fir2IrConverter(
components.builtIns = builtIns
val irFiles = mutableListOf<IrFile>()
val converter = Fir2IrConverter(moduleDescriptor, sourceManager, components)
for (firFile in firFiles) {
irFiles += converter.registerFileAndClasses(firFile)
}
@@ -295,7 +296,6 @@ class Fir2IrConverter(
session, scopeSession, classifierStorage, declarationStorage, conversionScope
)
components.fakeOverrideGenerator = fakeOverrideGenerator
val fir2irVisitor = Fir2IrVisitor(converter, components, conversionScope)
val callGenerator = CallAndReferenceGenerator(components, fir2irVisitor, conversionScope)
components.callGenerator = callGenerator
declarationStorage.annotationGenerator = AnnotationGenerator(components)
@@ -54,6 +54,7 @@ import org.jetbrains.kotlin.serialization.deserialization.descriptors.Deserializ
@OptIn(ObsoleteDescriptorBasedAPI::class)
class Fir2IrDeclarationStorage(
private val components: Fir2IrComponents,
private val visitor: Fir2IrVisitor,
private val moduleDescriptor: FirModuleDescriptor
) : Fir2IrComponents by components {
@@ -812,6 +813,11 @@ class Fir2IrDeclarationStorage(
isExternal = false,
isStatic = field.isStatic
).apply {
field.initializer?.let {
val expression = visitor.convertToIrExpression(it)
expression.type = type
initializer = irFactory.createExpressionBody(expression)
}
descriptor.bind(this)
fieldCache[field] = this
}