diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ClassBodyCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ClassBodyCodegen.java index 3e118703084..840c48b01fa 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ClassBodyCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ClassBodyCodegen.java @@ -31,6 +31,7 @@ import java.util.Collections; import java.util.List; import static org.jetbrains.asm4.Opcodes.ACC_ABSTRACT; +import static org.jetbrains.asm4.Opcodes.ACC_PRIVATE; import static org.jetbrains.asm4.Opcodes.ACC_PUBLIC; /** @@ -98,14 +99,17 @@ public abstract class ClassBodyCodegen { PropertyDescriptor propertyDescriptor = state.getBindingContext().get(BindingContext.PRIMARY_CONSTRUCTOR_PARAMETER, p); if (propertyDescriptor != null) { if (!isAnnotation) { - propertyCodegen.generateDefaultGetter(propertyDescriptor, ACC_PUBLIC, p); - if (propertyDescriptor.isVar()) { - propertyCodegen.generateDefaultSetter(propertyDescriptor, ACC_PUBLIC, origin); + int accessModifiers = JetTypeMapper.getAccessModifiers(propertyDescriptor, 0); + if((accessModifiers & ACC_PRIVATE) == 0) { + propertyCodegen.generateDefaultGetter(propertyDescriptor, accessModifiers, p); + if (propertyDescriptor.isVar()) { + propertyCodegen.generateDefaultSetter(propertyDescriptor, accessModifiers, origin); + } } //noinspection ConstantConditions if (!(kind instanceof OwnerKind.DelegateKind) && state.getBindingContext().get(BindingContext.BACKING_FIELD_REQUIRED, propertyDescriptor)) { - int modifiers = JetTypeMapper.getAccessModifiers(propertyDescriptor, 0); + int modifiers = accessModifiers; if (!propertyDescriptor.isVar()) { modifiers |= Opcodes.ACC_FINAL; } diff --git a/compiler/testData/codegen/regressions/kt1846.kt b/compiler/testData/codegen/regressions/kt1846.kt new file mode 100644 index 00000000000..0e56b1b605d --- /dev/null +++ b/compiler/testData/codegen/regressions/kt1846.kt @@ -0,0 +1,4 @@ +class A(private var v1: String) { + private var v2 = v1 + fun toString(): String { return "A[v1=$v1,v2=$v2]" } +} \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/jet/codegen/PropertyGenTest.java b/compiler/tests/org/jetbrains/jet/codegen/PropertyGenTest.java index f20bc0b7bc6..54ac061a8e0 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/PropertyGenTest.java +++ b/compiler/tests/org/jetbrains/jet/codegen/PropertyGenTest.java @@ -232,6 +232,27 @@ public class PropertyGenTest extends CodegenTestCase { blackBoxFile("regressions/kt2331.kt"); } + public void testKt1846() throws Exception { + createEnvironmentWithMockJdkAndIdeaAnnotations(ConfigurationKind.JDK_ONLY); + loadFile("regressions/kt1846.kt"); + final Class aClass = loadImplementationClass(generateClassesInFile(), "A"); + try { + Method v1 = aClass.getMethod("getV1"); + System.out.println(generateToText()); + fail(); + } + catch (NoSuchMethodException e) { + try { + Method v1 = aClass.getMethod("setV1"); + System.out.println(generateToText()); + fail(); + } + catch (NoSuchMethodException ee) { + // + } + } + } + public void testKt1482_2279() throws Exception { createEnvironmentWithFullJdk(); blackBoxFile("regressions/kt1482_2279.kt");