From 7c54024a224d17887a899cb1ffbe49f5c6501cfc Mon Sep 17 00:00:00 2001 From: Alexey Tsvetkov Date: Mon, 26 Oct 2015 17:26:32 +0300 Subject: [PATCH] Fix private setter visibility for generic class #KT-8888 fixed --- .../diagnostics/tests/scopes/invisibleSetter.kt | 9 +++++++++ .../diagnostics/tests/scopes/invisibleSetter.txt | 11 +++++++++++ .../kotlin/checkers/JetDiagnosticsTestGenerated.java | 6 ++++++ .../descriptors/impl/PropertyDescriptorImpl.java | 4 ++-- 4 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 compiler/testData/diagnostics/tests/scopes/invisibleSetter.kt create mode 100644 compiler/testData/diagnostics/tests/scopes/invisibleSetter.txt diff --git a/compiler/testData/diagnostics/tests/scopes/invisibleSetter.kt b/compiler/testData/diagnostics/tests/scopes/invisibleSetter.kt new file mode 100644 index 00000000000..80422f22720 --- /dev/null +++ b/compiler/testData/diagnostics/tests/scopes/invisibleSetter.kt @@ -0,0 +1,9 @@ +class A { + public var x: Int = 0 + private set +} + +fun main(args: Array) { + val a = A() + a.x = 1 +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/scopes/invisibleSetter.txt b/compiler/testData/diagnostics/tests/scopes/invisibleSetter.txt new file mode 100644 index 00000000000..aa9dc78a0ee --- /dev/null +++ b/compiler/testData/diagnostics/tests/scopes/invisibleSetter.txt @@ -0,0 +1,11 @@ +package + +public fun main(/*0*/ args: kotlin.Array): kotlin.Unit + +public final class A { + public constructor A() + public final var x: kotlin.Int + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java index ff097a41d8f..f72c27da352 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java @@ -13146,6 +13146,12 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest { doTest(fileName); } + @TestMetadata("invisibleSetter.kt") + public void testInvisibleSetter() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/scopes/invisibleSetter.kt"); + doTest(fileName); + } + @TestMetadata("kt1078.kt") public void testKt1078() throws Exception { String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/scopes/kt1078.kt"); diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/PropertyDescriptorImpl.java b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/PropertyDescriptorImpl.java index ab49ecbcbe5..08c4a1dc8d3 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/PropertyDescriptorImpl.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/PropertyDescriptorImpl.java @@ -256,7 +256,7 @@ public class PropertyDescriptorImpl extends VariableDescriptorWithInitializerImp substitutedDescriptor.setType(outType, substitutedTypeParameters, substitutedDispatchReceiver, substitutedReceiverType); PropertyGetterDescriptorImpl newGetter = getter == null ? null : new PropertyGetterDescriptorImpl( - substitutedDescriptor, getter.getAnnotations(), newModality, convertVisibility(getter.getVisibility(), newVisibility), + substitutedDescriptor, getter.getAnnotations(), newModality, getter.getVisibility(), getter.hasBody(), getter.isDefault(), getter.isExternal(), kind, original == null ? null : original.getGetter(), SourceElement.NO_SOURCE ); if (newGetter != null) { @@ -264,7 +264,7 @@ public class PropertyDescriptorImpl extends VariableDescriptorWithInitializerImp newGetter.initialize(returnType != null ? substitutor.substitute(returnType, Variance.OUT_VARIANCE) : null); } PropertySetterDescriptorImpl newSetter = setter == null ? null : new PropertySetterDescriptorImpl( - substitutedDescriptor, setter.getAnnotations(), newModality, convertVisibility(setter.getVisibility(), newVisibility), + substitutedDescriptor, setter.getAnnotations(), newModality, setter.getVisibility(), setter.hasBody(), setter.isDefault(), setter.isExternal(), kind, original == null ? null : original.getSetter(), SourceElement.NO_SOURCE ); if (newSetter != null) {