KT-16077 Redundant private getter for private var in a class within a JvmMultifileClass annotated file
This commit is contained in:
@@ -57,7 +57,6 @@ import java.util.List;
|
|||||||
|
|
||||||
import static org.jetbrains.kotlin.codegen.AsmUtil.getDeprecatedAccessFlag;
|
import static org.jetbrains.kotlin.codegen.AsmUtil.getDeprecatedAccessFlag;
|
||||||
import static org.jetbrains.kotlin.codegen.AsmUtil.getVisibilityForBackingField;
|
import static org.jetbrains.kotlin.codegen.AsmUtil.getVisibilityForBackingField;
|
||||||
import static org.jetbrains.kotlin.codegen.AsmUtil.isPropertyWithBackingFieldCopyInOuterClass;
|
|
||||||
import static org.jetbrains.kotlin.codegen.JvmCodegenUtil.isConstOrHasJvmFieldAnnotation;
|
import static org.jetbrains.kotlin.codegen.JvmCodegenUtil.isConstOrHasJvmFieldAnnotation;
|
||||||
import static org.jetbrains.kotlin.codegen.JvmCodegenUtil.isJvmInterface;
|
import static org.jetbrains.kotlin.codegen.JvmCodegenUtil.isJvmInterface;
|
||||||
import static org.jetbrains.kotlin.codegen.serialization.JvmSerializationBindings.FIELD_FOR_PROPERTY;
|
import static org.jetbrains.kotlin.codegen.serialization.JvmSerializationBindings.FIELD_FOR_PROPERTY;
|
||||||
@@ -189,7 +188,7 @@ public class PropertyCodegen {
|
|||||||
if (isCompanionObject(descriptor.getContainingDeclaration())) return true;
|
if (isCompanionObject(descriptor.getContainingDeclaration())) return true;
|
||||||
|
|
||||||
// Non-const properties from multifile classes have accessors regardless of visibility
|
// Non-const properties from multifile classes have accessors regardless of visibility
|
||||||
if (!descriptor.isConst() && JvmFileClassUtilKt.isInsideJvmMultifileClassFile(declaration)) return true;
|
if (isNonConstTopLevelPropertyInMultifileClass(declaration, descriptor)) return true;
|
||||||
|
|
||||||
// Private class properties have accessors only in cases when those accessors are non-trivial
|
// Private class properties have accessors only in cases when those accessors are non-trivial
|
||||||
if (Visibilities.isPrivate(descriptor.getVisibility())) {
|
if (Visibilities.isPrivate(descriptor.getVisibility())) {
|
||||||
@@ -199,6 +198,15 @@ public class PropertyCodegen {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static boolean isNonConstTopLevelPropertyInMultifileClass(
|
||||||
|
@NotNull KtProperty declaration,
|
||||||
|
@NotNull PropertyDescriptor descriptor
|
||||||
|
) {
|
||||||
|
return !descriptor.isConst() &&
|
||||||
|
descriptor.getContainingDeclaration() instanceof PackageFragmentDescriptor &&
|
||||||
|
JvmFileClassUtilKt.isInsideJvmMultifileClassFile(declaration);
|
||||||
|
}
|
||||||
|
|
||||||
private static boolean areAccessorsNeededForPrimaryConstructorProperty(
|
private static boolean areAccessorsNeededForPrimaryConstructorProperty(
|
||||||
@NotNull PropertyDescriptor descriptor
|
@NotNull PropertyDescriptor descriptor
|
||||||
) {
|
) {
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
// IGNORE_BACKEND: JS
|
||||||
|
// WITH_RUNTIME
|
||||||
|
|
||||||
|
@file:JvmMultifileClass
|
||||||
|
|
||||||
|
class A {
|
||||||
|
private var r: String = "fail"
|
||||||
|
public fun getR(): String = "OK"
|
||||||
|
}
|
||||||
|
|
||||||
|
fun box() = A().getR()
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
@kotlin.Metadata
|
||||||
|
public final class A {
|
||||||
|
private field r: java.lang.String
|
||||||
|
public method <init>(): void
|
||||||
|
public final @org.jetbrains.annotations.NotNull method getR(): java.lang.String
|
||||||
|
}
|
||||||
|
|
||||||
|
@kotlin.Metadata
|
||||||
|
@kotlin.jvm.JvmMultifileClass
|
||||||
|
public final class Kt16077Kt {
|
||||||
|
public final static @org.jetbrains.annotations.NotNull method box(): java.lang.String
|
||||||
|
}
|
||||||
+6
@@ -10787,6 +10787,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
|
|||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("kt16077.kt")
|
||||||
|
public void testKt16077() throws Exception {
|
||||||
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/multifileClasses/kt16077.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("multifileClassPartsInitialization.kt")
|
@TestMetadata("multifileClassPartsInitialization.kt")
|
||||||
public void testMultifileClassPartsInitialization() throws Exception {
|
public void testMultifileClassPartsInitialization() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/multifileClasses/multifileClassPartsInitialization.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/multifileClasses/multifileClassPartsInitialization.kt");
|
||||||
|
|||||||
@@ -10787,6 +10787,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
|
|||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("kt16077.kt")
|
||||||
|
public void testKt16077() throws Exception {
|
||||||
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/multifileClasses/kt16077.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("multifileClassPartsInitialization.kt")
|
@TestMetadata("multifileClassPartsInitialization.kt")
|
||||||
public void testMultifileClassPartsInitialization() throws Exception {
|
public void testMultifileClassPartsInitialization() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/multifileClasses/multifileClassPartsInitialization.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/multifileClasses/multifileClassPartsInitialization.kt");
|
||||||
|
|||||||
+12
@@ -12366,6 +12366,18 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest {
|
|||||||
throw new AssertionError("Looks like this test can be unmuted. Remove IGNORE_BACKEND directive for that.");
|
throw new AssertionError("Looks like this test can be unmuted. Remove IGNORE_BACKEND directive for that.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("kt16077.kt")
|
||||||
|
public void testKt16077() throws Exception {
|
||||||
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/multifileClasses/kt16077.kt");
|
||||||
|
try {
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
catch (Throwable ignore) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
throw new AssertionError("Looks like this test can be unmuted. Remove IGNORE_BACKEND directive for that.");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("multifileClassPartsInitialization.kt")
|
@TestMetadata("multifileClassPartsInitialization.kt")
|
||||||
public void testMultifileClassPartsInitialization() throws Exception {
|
public void testMultifileClassPartsInitialization() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/multifileClasses/multifileClassPartsInitialization.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/multifileClasses/multifileClassPartsInitialization.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user