Do not touch unmoved fields + revise test
diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmCachedDeclarations.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmCachedDeclarations.kt
index c2d7cb1..fbe997d 100644
--- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmCachedDeclarations.kt
+++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmCachedDeclarations.kt
@@ -80,18 +80,23 @@
// @JvmField, so checking the current field only should be enough.
val hasJvmField = oldField.hasAnnotation(JvmAbi.JVM_FIELD_ANNOTATION_FQ_NAME)
val shouldMoveFields = oldParent.isCompanion && (!oldParent.parentAsClass.isJvmInterface || hasJvmField)
- parent = if (shouldMoveFields) oldParent.parentAsClass else oldParent
- val isPrivate = DescriptorVisibilities.isPrivate(oldField.visibility)
- val parentIsPrivate = DescriptorVisibilities.isPrivate(oldParent.visibility)
- annotations = if (parentIsPrivate && !isPrivate) {
- context.createJvmIrBuilder(this.symbol).run {
- filterOutAnnotations(
- DeprecationResolver.JAVA_DEPRECATED,
- oldField.annotations
- ) + irCall(irSymbols.javaLangDeprecatedConstructorWithDeprecatedFlag)
- }
+ if (shouldMoveFields) {
+ parent = oldParent.parentAsClass
+ val isPrivate = DescriptorVisibilities.isPrivate(oldField.visibility)
+ val parentIsPrivate = DescriptorVisibilities.isPrivate(oldParent.visibility)
+ annotations = if (parentIsPrivate && !isPrivate) {
+ context.createJvmIrBuilder(this.symbol).run {
+ filterOutAnnotations(
+ DeprecationResolver.JAVA_DEPRECATED,
+ oldField.annotations
+ ) + irCall(irSymbols.javaLangDeprecatedConstructorWithDeprecatedFlag)
+ }
+ } else {
+ oldField.annotations
+ }
} else {
- oldField.annotations
+ parent = oldParent
+ annotations = oldField.annotations
}
initializer = oldField.initializer?.patchDeclarationParents(this)
oldField.replaceThisByStaticReference(fieldsForObjectInstances, oldParent, oldParent.thisReceiver!!)
diff --git a/compiler/testData/codegen/bytecodeListing/privateCompanionFields.kt b/compiler/testData/codegen/bytecodeListing/privateCompanionFields.kt
index 74e85d2..7269d9d 100644
--- a/compiler/testData/codegen/bytecodeListing/privateCompanionFields.kt
+++ b/compiler/testData/codegen/bytecodeListing/privateCompanionFields.kt
@@ -16,6 +16,15 @@
}
}
+class TestClass2 {
+
+ private companion object {
+ val testPublic: String = "1"
+ private val testPrivate: String = "2"
+ const val testPublicConst: String = "3"
+ }
+}
+
interface TestConst {
private companion object {
@@ -29,4 +38,4 @@
@JvmField
val test3: String = "3"
}
-}
\ No newline at end of file
+}
diff --git a/compiler/testData/codegen/bytecodeListing/privateCompanionFields.txt b/compiler/testData/codegen/bytecodeListing/privateCompanionFields.txt
index 1dcbba7..e07f939 100644
--- a/compiler/testData/codegen/bytecodeListing/privateCompanionFields.txt
+++ b/compiler/testData/codegen/bytecodeListing/privateCompanionFields.txt
@@ -20,6 +20,28 @@
}
@kotlin.Metadata
+final class TestClass2$Companion {
+ // source: 'privateCompanionFields.kt'
+ private method <init>(): void
+ public synthetic method <init>(p0: kotlin.jvm.internal.DefaultConstructorMarker): void
+ public final @org.jetbrains.annotations.NotNull method getTestPublic(): java.lang.String
+ private final inner class TestClass2$Companion
+}
+
+@kotlin.Metadata
+public final class TestClass2 {
+ // source: 'privateCompanionFields.kt'
+ private final static @org.jetbrains.annotations.NotNull field Companion: TestClass2$Companion
+ private deprecated final static @java.lang.Deprecated field testPrivate: java.lang.String
+ private deprecated final static @java.lang.Deprecated @org.jetbrains.annotations.NotNull field testPublic: java.lang.String
+ public deprecated final static @java.lang.Deprecated @org.jetbrains.annotations.NotNull field testPublicConst: java.lang.String
+ static method <clinit>(): void
+ public method <init>(): void
+ public synthetic final static method access$getTestPublic$cp(): java.lang.String
+ private final inner class TestClass2$Companion
+}
+
+@kotlin.Metadata
final class TestConst$Companion {
// source: 'privateCompanionFields.kt'
synthetic final static field $$INSTANCE: TestConst$Companion
diff --git a/compiler/testData/codegen/bytecodeListing/privateCompanionFields_ir.txt b/compiler/testData/codegen/bytecodeListing/privateCompanionFields_ir.txt
index 3655a85..96921dc 100644
--- a/compiler/testData/codegen/bytecodeListing/privateCompanionFields_ir.txt
+++ b/compiler/testData/codegen/bytecodeListing/privateCompanionFields_ir.txt
@@ -20,6 +20,28 @@
}
@kotlin.Metadata
+final class TestClass2$Companion {
+ // source: 'privateCompanionFields.kt'
+ private method <init>(): void
+ public synthetic method <init>(p0: kotlin.jvm.internal.DefaultConstructorMarker): void
+ public final @org.jetbrains.annotations.NotNull method getTestPublic(): java.lang.String
+ private final inner class TestClass2$Companion
+}
+
+@kotlin.Metadata
+public final class TestClass2 {
+ // source: 'privateCompanionFields.kt'
+ private final static @org.jetbrains.annotations.NotNull field Companion: TestClass2$Companion
+ private final static @org.jetbrains.annotations.NotNull field testPrivate: java.lang.String
+ private final static @org.jetbrains.annotations.NotNull field testPublic: java.lang.String
+ public deprecated final static @java.lang.Deprecated @org.jetbrains.annotations.NotNull field testPublicConst: java.lang.String
+ static method <clinit>(): void
+ public method <init>(): void
+ public synthetic final static method access$getTestPublic$cp(): java.lang.String
+ private final inner class TestClass2$Companion
+}
+
+@kotlin.Metadata
final class TestConst$Companion {
// source: 'privateCompanionFields.kt'
synthetic final static field $$INSTANCE: TestConst$Companion