Don't generate getter for private or internal inline class primary vals

This commit is contained in:
Dmitry Petrov
2018-09-06 17:32:04 +03:00
parent 8158dd0c83
commit 65ad93ebe4
3 changed files with 26 additions and 1 deletions
@@ -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) {
@@ -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)
@@ -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");