KT-1846 proper visibility for constructor parameters properties
This commit is contained in:
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user