fixup! [IR] Move K1 lazy IR implementation from `ir.tree` to `psi2ir`
diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/ir/JvmDefaultUtils.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/ir/JvmDefaultUtils.kt
index be465d2..08847d9 100644
--- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/ir/JvmDefaultUtils.kt
+++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/ir/JvmDefaultUtils.kt
@@ -10,13 +10,20 @@
import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.deserialization.PLATFORM_DEPENDENT_ANNOTATION_FQ_NAME
+import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.builders.declarations.buildFun
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.declarations.lazy.IrLazyClassBase
import org.jetbrains.kotlin.ir.util.*
+import org.jetbrains.kotlin.metadata.ProtoBuf
+import org.jetbrains.kotlin.metadata.deserialization.NameResolver
+import org.jetbrains.kotlin.metadata.deserialization.getExtensionOrNull
+import org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf
+import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmProtoBufUtil
import org.jetbrains.kotlin.name.JvmStandardClassIds.JVM_DEFAULT_FQ_NAME
import org.jetbrains.kotlin.name.JvmStandardClassIds.JVM_DEFAULT_NO_COMPATIBILITY_FQ_NAME
import org.jetbrains.kotlin.name.JvmStandardClassIds.JVM_DEFAULT_WITH_COMPATIBILITY_FQ_NAME
+import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedClassDescriptor
fun IrFunction.isSimpleFunctionCompiledToJvmDefault(jvmDefaultMode: JvmDefaultMode): Boolean {
return (this as? IrSimpleFunction)?.isCompiledToJvmDefault(jvmDefaultMode) == true
@@ -29,7 +36,11 @@
if (origin == IrDeclarationOrigin.IR_EXTERNAL_JAVA_DECLARATION_STUB) return false
if (hasJvmDefault()) return true
val parentAsMaybeDeserializedClass = parent as? IrLazyClassBase
- return parentAsMaybeDeserializedClass?.isNewPlaceForBodyGeneration ?: jvmDefaultMode.isEnabled
+ val isNewPlaceForBodyGeneration = parentAsMaybeDeserializedClass?.let {
+ if (it.isK2) it.isNewPlaceForBodyGeneration
+ else it.lazyClassIsNewPlaceForBodyGeneration
+ }
+ return isNewPlaceForBodyGeneration ?: jvmDefaultMode.isEnabled
}
fun IrFunction.hasJvmDefault(): Boolean = propertyIfAccessor.hasAnnotation(JVM_DEFAULT_FQ_NAME)
@@ -119,3 +130,15 @@
copyCorrespondingPropertyFrom(fakeOverride)
}
}
+
+@OptIn(ObsoleteDescriptorBasedAPI::class)
+private val IrLazyClassBase.classProto: ProtoBuf.Class? get() = (descriptor as? DeserializedClassDescriptor)?.classProto
+
+@OptIn(ObsoleteDescriptorBasedAPI::class)
+private val IrLazyClassBase.nameResolver: NameResolver? get() = (descriptor as? DeserializedClassDescriptor)?.c?.nameResolver
+
+internal val IrLazyClassBase.lazyClassModuleName: String?
+ get() = classProto?.getExtensionOrNull(JvmProtoBuf.classModuleName)?.let { nameResolver?.getString(it) }
+
+internal val IrLazyClassBase.lazyClassIsNewPlaceForBodyGeneration: Boolean?
+ get() = classProto?.let { JvmProtoBufUtil.isNewPlaceForBodyGeneration(it) }
\ No newline at end of file
diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/mapping/MethodSignatureMapper.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/mapping/MethodSignatureMapper.kt
index e9b329d..4770f6c 100644
--- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/mapping/MethodSignatureMapper.kt
+++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/mapping/MethodSignatureMapper.kt
@@ -462,8 +462,10 @@
var current: IrDeclarationParent? = function.parent
while (current != null) {
when (current) {
- is IrLazyClassBase ->
- return current.moduleName ?: JvmProtoBufUtil.DEFAULT_MODULE_NAME
+ is IrLazyClassBase -> {
+ val moduleName = if (current.isK2) current.moduleName else current.lazyClassModuleName
+ return moduleName ?: JvmProtoBufUtil.DEFAULT_MODULE_NAME
+ }
is IrExternalPackageFragment -> {
val source = current.containerSource ?: return null
return (source as? JvmPackagePartSource)?.moduleName
diff --git a/compiler/ir/ir.psi2ir/build.gradle.kts b/compiler/ir/ir.psi2ir/build.gradle.kts
index ee7c952..0bd478f 100644
--- a/compiler/ir/ir.psi2ir/build.gradle.kts
+++ b/compiler/ir/ir.psi2ir/build.gradle.kts
@@ -8,7 +8,6 @@
api(project(":compiler:frontend"))
api(project(":compiler:backend-common"))
api(project(":compiler:ir.tree"))
- implementation(project(":core:metadata.jvm"))
compileOnly(intellijCore())
}
diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/lazy/IrLazyClass.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/lazy/IrLazyClass.kt
index 49d9533..9e7aa8e 100644
--- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/lazy/IrLazyClass.kt
+++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/lazy/IrLazyClass.kt
@@ -5,25 +5,10 @@
package org.jetbrains.kotlin.psi2ir.lazy
-import org.jetbrains.kotlin.descriptors.ClassConstructorDescriptor
-import org.jetbrains.kotlin.descriptors.ClassDescriptor
-import org.jetbrains.kotlin.descriptors.ClassKind
-import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
-import org.jetbrains.kotlin.descriptors.DeclarationDescriptorWithVisibility
-import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
-import org.jetbrains.kotlin.descriptors.DescriptorVisibility
-import org.jetbrains.kotlin.descriptors.Modality
-import org.jetbrains.kotlin.descriptors.SourceElement
-import org.jetbrains.kotlin.descriptors.ValueClassRepresentation
+import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
-import org.jetbrains.kotlin.ir.declarations.IrClass
-import org.jetbrains.kotlin.ir.declarations.IrDeclaration
-import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
-import org.jetbrains.kotlin.ir.declarations.IrPackageFragment
-import org.jetbrains.kotlin.ir.declarations.IrTypeParameter
-import org.jetbrains.kotlin.ir.declarations.IrValueParameter
-import org.jetbrains.kotlin.ir.declarations.MetadataSource
+import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.declarations.lazy.IrLazyClassBase
import org.jetbrains.kotlin.ir.declarations.lazy.lazyVar
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
@@ -31,18 +16,8 @@
import org.jetbrains.kotlin.ir.symbols.UnsafeDuringIrConstructionAPI
import org.jetbrains.kotlin.ir.types.IrSimpleType
import org.jetbrains.kotlin.ir.types.IrType
-import org.jetbrains.kotlin.ir.util.DeclarationStubGenerator
-import org.jetbrains.kotlin.ir.util.TypeTranslator
-import org.jetbrains.kotlin.ir.util.deserializedIr
-import org.jetbrains.kotlin.ir.util.isObject
-import org.jetbrains.kotlin.ir.util.render
-import org.jetbrains.kotlin.metadata.ProtoBuf
-import org.jetbrains.kotlin.metadata.deserialization.NameResolver
-import org.jetbrains.kotlin.metadata.deserialization.getExtensionOrNull
-import org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf
-import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmProtoBufUtil
+import org.jetbrains.kotlin.ir.util.*
import org.jetbrains.kotlin.name.Name
-import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedClassDescriptor
class IrLazyClass(
override var startOffset: Int,
@@ -137,19 +112,11 @@
override var attributeOwnerId: IrElement = this
- val classProto: ProtoBuf.Class? get() = (descriptor as? DeserializedClassDescriptor)?.classProto
- val nameResolver: NameResolver? get() = (descriptor as? DeserializedClassDescriptor)?.c?.nameResolver
override val source: SourceElement get() = descriptor.source
override var metadata: MetadataSource?
get() = null
set(_) = error("We should never need to store metadata of external declarations.")
- override val moduleName: String?
- get() = classProto?.getExtensionOrNull(JvmProtoBuf.classModuleName)?.let { nameResolver?.getString(it) }
-
- override val isNewPlaceForBodyGeneration: Boolean?
- get() = classProto?.let { JvmProtoBufUtil.isNewPlaceForBodyGeneration(it) }
-
override val isK2: Boolean get() = false
}
\ No newline at end of file
diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyClassBase.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyClassBase.kt
index 70d315e..24cdfa1 100644
--- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyClassBase.kt
+++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyClassBase.kt
@@ -7,8 +7,10 @@
interface IrLazyClassBase : IrLazyDeclarationBase {
val moduleName: String?
+ get() = null
val isNewPlaceForBodyGeneration: Boolean?
+ get() = null
val isK2: Boolean
}
\ No newline at end of file