[FIR Native] Don't add Cloneable supertype when it's not present
^KT-58549 Fixed
diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/stubBased/deserialization/StubBasedClassDeserialization.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/stubBased/deserialization/StubBasedClassDeserialization.kt
index 3770899..41bb4f5 100644
--- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/stubBased/deserialization/StubBasedClassDeserialization.kt
+++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/stubBased/deserialization/StubBasedClassDeserialization.kt
@@ -211,7 +211,7 @@
)
}
- addCloneForArrayIfNeeded(classId, context.dispatchReceiver)
+ addCloneForArrayIfNeeded(classId, context.dispatchReceiver, session)
session.deserializedClassConfigurator?.run {
configure(classId)
}
diff --git a/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/ClassDeserialization.kt b/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/ClassDeserialization.kt
index f55f03f..797afd2 100644
--- a/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/ClassDeserialization.kt
+++ b/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/ClassDeserialization.kt
@@ -13,12 +13,13 @@
import org.jetbrains.kotlin.fir.*
import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.declarations.builder.*
-import org.jetbrains.kotlin.fir.declarations.comparators.FirMemberDeclarationComparator
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedDeclarationStatusImpl
import org.jetbrains.kotlin.fir.declarations.utils.addDeclarations
import org.jetbrains.kotlin.fir.declarations.utils.isCompanion
import org.jetbrains.kotlin.fir.declarations.utils.moduleName
import org.jetbrains.kotlin.fir.declarations.utils.sourceElement
+import org.jetbrains.kotlin.fir.resolve.providers.getRegularClassSymbolByClassId
+import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider
import org.jetbrains.kotlin.fir.scopes.FirScopeProvider
import org.jetbrains.kotlin.fir.symbols.ConeTypeParameterLookupTag
import org.jetbrains.kotlin.fir.symbols.impl.FirEnumEntrySymbol
@@ -199,7 +200,7 @@
generateEntriesGetter(moduleData, classId.packageFqName, classId.relativeClassName)
}
- addCloneForArrayIfNeeded(classId, context.dispatchReceiver)
+ addCloneForArrayIfNeeded(classId, context.dispatchReceiver, session)
session.deserializedClassConfigurator?.run {
configure(classId)
}
@@ -270,9 +271,10 @@
}
}
-fun FirRegularClassBuilder.addCloneForArrayIfNeeded(classId: ClassId, dispatchReceiver: ConeClassLikeType?) {
+fun FirRegularClassBuilder.addCloneForArrayIfNeeded(classId: ClassId, dispatchReceiver: ConeClassLikeType?, session: FirSession) {
if (classId.packageFqName != StandardClassIds.BASE_KOTLIN_PACKAGE) return
if (classId.shortClassName !in ARRAY_CLASSES) return
+ if (session.symbolProvider.getRegularClassSymbolByClassId(StandardClassIds.Cloneable) == null) return
superTypeRefs += buildResolvedTypeRef {
type = ConeClassLikeTypeImpl(
StandardClassIds.Cloneable.toLookupTag(),
diff --git a/compiler/testData/codegen/box/arrays/arrayInstanceOf.kt b/compiler/testData/codegen/box/arrays/arrayInstanceOf.kt
index 4c167fd..b46bcc4 100644
--- a/compiler/testData/codegen/box/arrays/arrayInstanceOf.kt
+++ b/compiler/testData/codegen/box/arrays/arrayInstanceOf.kt
@@ -1,6 +1,4 @@
-// IGNORE_BACKEND_K2: JS_IR
// KT-58549
-// IGNORE_BACKEND_K2: NATIVE
//test [], get and iterator calls
fun test(createIntNotLong: Boolean): String {
diff --git a/compiler/testData/codegen/box/arrays/kt7288.kt b/compiler/testData/codegen/box/arrays/kt7288.kt
index 7a97ad4..02010f1 100644
--- a/compiler/testData/codegen/box/arrays/kt7288.kt
+++ b/compiler/testData/codegen/box/arrays/kt7288.kt
@@ -1,6 +1,4 @@
-// IGNORE_BACKEND_K2: JS_IR
// KT-58549
-// IGNORE_BACKEND_K2: NATIVE
fun test(b: Boolean): String {
val a = if (b) IntArray(5) else LongArray(5)