JVM_IR KT-45431 don't optimize out $$delegatedProperties in companion

Corresponding delegates are initialized in the host class, using
'$$delegatedProperties'.
TODO figure out proper code generation scheme for delegated properties
in companions (KT-45580)
This commit is contained in:
Dmitry Petrov
2021-03-19 15:13:47 +03:00
committed by TeamCityServer
parent f6baabd98e
commit 73d4fa65ea
14 changed files with 239 additions and 2 deletions
@@ -133,7 +133,10 @@ class ClassCodegen private constructor(
irClass.functions.find { it.name.asString() == "<clinit>" }?.let { generateMethod(it, smap, delegatedPropertyOptimizer) }
// 3. Now we have all the fields (`$$delegatedProperties` might be redundant if all reads were optimized out):
for (field in irClass.fields) {
if (field !== delegatedProperties || delegatedPropertyOptimizer?.needsDelegatedProperties == true) {
if (field !== delegatedProperties ||
delegatedPropertyOptimizer?.needsDelegatedProperties == true ||
irClass.isCompanion
) {
generateField(field)
}
}
@@ -326,7 +329,7 @@ class ClassCodegen private constructor(
val (node, smap) = generateMethodNode(method)
if (delegatedPropertyOptimizer != null) {
delegatedPropertyOptimizer.transform(node)
if (method.name.asString() == "<clinit>") {
if (method.name.asString() == "<clinit>" && !irClass.isCompanion) {
delegatedPropertyOptimizer.transformClassInitializer(node)
}
}