From 65ad93ebe4ad845ea53d2a65c3f8c96187087cc0 Mon Sep 17 00:00:00 2001 From: Dmitry Petrov Date: Thu, 6 Sep 2018 17:32:04 +0300 Subject: [PATCH] Don't generate getter for private or internal inline class primary vals --- .../jetbrains/kotlin/codegen/PropertyCodegen.java | 9 ++++++++- .../primaryValsWithDifferentVisibilities.kt | 13 +++++++++++++ .../codegen/BytecodeListingTestGenerated.java | 5 +++++ 3 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/codegen/bytecodeListing/inlineClasses/primaryValsWithDifferentVisibilities.kt diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/PropertyCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/PropertyCodegen.java index 1c0afdfa0d6..2405a09343e 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/PropertyCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/PropertyCodegen.java @@ -25,6 +25,7 @@ import org.jetbrains.kotlin.psi.*; import org.jetbrains.kotlin.resolve.BindingContext; import org.jetbrains.kotlin.resolve.DescriptorFactory; import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils; +import org.jetbrains.kotlin.resolve.InlineClassesUtilsKt; import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall; import org.jetbrains.kotlin.resolve.calls.util.UnderscoreUtilKt; import org.jetbrains.kotlin.resolve.constants.ConstantValue; @@ -228,7 +229,13 @@ public class PropertyCodegen { if (hasJvmFieldAnnotation(descriptor)) return false; if (kind == OwnerKind.ERASED_INLINE_CLASS) return false; - return !Visibilities.isPrivate(descriptor.getVisibility()); + Visibility visibility = descriptor.getVisibility(); + if (InlineClassesUtilsKt.isInlineClass(descriptor.getContainingDeclaration())) { + return visibility.isPublicAPI(); + } + else { + return !Visibilities.isPrivate(visibility); + } } public void generatePrimaryConstructorProperty(@NotNull KtParameter parameter, @NotNull PropertyDescriptor descriptor) { diff --git a/compiler/testData/codegen/bytecodeListing/inlineClasses/primaryValsWithDifferentVisibilities.kt b/compiler/testData/codegen/bytecodeListing/inlineClasses/primaryValsWithDifferentVisibilities.kt new file mode 100644 index 00000000000..0f39b5e41fa --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/inlineClasses/primaryValsWithDifferentVisibilities.kt @@ -0,0 +1,13 @@ +// !LANGUAGE: +InlineClasses + +interface IValue { + val value: Int +} + +inline class TestOverriding(override val value: Int) : IValue + +inline class TestPublic(val value: Int) + +inline class TestInternal(internal val value: Int) + +inline class TestPrivate(private val value: Int) \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java index 64e895c7c5c..cfe5c78fc69 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java @@ -304,6 +304,11 @@ public class BytecodeListingTestGenerated extends AbstractBytecodeListingTest { runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/noBridgesForErasedInlineClass.kt"); } + @TestMetadata("primaryValsWithDifferentVisibilities.kt") + public void testPrimaryValsWithDifferentVisibilities() throws Exception { + runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/primaryValsWithDifferentVisibilities.kt"); + } + @TestMetadata("shapeOfInlineClassWithPrimitive.kt") public void testShapeOfInlineClassWithPrimitive() throws Exception { runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/shapeOfInlineClassWithPrimitive.kt");