KT-1846 proper visibility for constructor parameters properties

This commit is contained in:
Alex Tkachman
2012-08-04 20:13:48 +03:00
parent 0ecb02cc25
commit c4ff8ae452
3 changed files with 33 additions and 4 deletions
@@ -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;
}
@@ -0,0 +1,4 @@
class A(private var v1: String) {
private var v2 = v1
fun toString(): String { return "A[v1=$v1,v2=$v2]" }
}
@@ -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");