FIR2IR: support reading of isNewPlaceForBodyGeneration in lazy class

This commit is contained in:
Mikhail Glukhikh
2021-11-25 16:28:19 +03:00
parent c652cd2245
commit 4a8f00bc7c
15 changed files with 28 additions and 20 deletions
@@ -33,6 +33,7 @@ import org.jetbrains.kotlin.ir.builders.irExprBody
import org.jetbrains.kotlin.ir.builders.irGet
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.declarations.lazy.IrLazyClass
import org.jetbrains.kotlin.ir.declarations.lazy.IrMaybeDeserializedClass
import org.jetbrains.kotlin.ir.expressions.*
import org.jetbrains.kotlin.ir.expressions.impl.IrCallImpl
import org.jetbrains.kotlin.ir.expressions.impl.IrClassReferenceImpl
@@ -82,8 +83,11 @@ fun IrSimpleFunction.isCompiledToJvmDefault(jvmDefaultMode: JvmDefaultMode): Boo
}
if (origin == IrDeclarationOrigin.IR_EXTERNAL_JAVA_DECLARATION_STUB) return false
if (hasJvmDefault()) return true
(parentAsClass as? IrLazyClass)?.classProto?.let {
return JvmProtoBufUtil.isNewPlaceForBodyGeneration(it)
when (val klass = parentAsClass) {
is IrLazyClass -> klass.classProto?.let {
return JvmProtoBufUtil.isNewPlaceForBodyGeneration(it)
}
is IrMaybeDeserializedClass -> return klass.isNewPlaceForBodyGeneration
}
return jvmDefaultMode.forAllMethodsWithBody
}
@@ -9,4 +9,6 @@ import org.jetbrains.kotlin.ir.declarations.IrDeclaration
interface IrMaybeDeserializedClass : IrDeclaration {
val moduleName: String?
val isNewPlaceForBodyGeneration: Boolean
}