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 java.util.List;
|
||||||
|
|
||||||
import static org.jetbrains.asm4.Opcodes.ACC_ABSTRACT;
|
import static org.jetbrains.asm4.Opcodes.ACC_ABSTRACT;
|
||||||
|
import static org.jetbrains.asm4.Opcodes.ACC_PRIVATE;
|
||||||
import static org.jetbrains.asm4.Opcodes.ACC_PUBLIC;
|
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);
|
PropertyDescriptor propertyDescriptor = state.getBindingContext().get(BindingContext.PRIMARY_CONSTRUCTOR_PARAMETER, p);
|
||||||
if (propertyDescriptor != null) {
|
if (propertyDescriptor != null) {
|
||||||
if (!isAnnotation) {
|
if (!isAnnotation) {
|
||||||
propertyCodegen.generateDefaultGetter(propertyDescriptor, ACC_PUBLIC, p);
|
int accessModifiers = JetTypeMapper.getAccessModifiers(propertyDescriptor, 0);
|
||||||
if (propertyDescriptor.isVar()) {
|
if((accessModifiers & ACC_PRIVATE) == 0) {
|
||||||
propertyCodegen.generateDefaultSetter(propertyDescriptor, ACC_PUBLIC, origin);
|
propertyCodegen.generateDefaultGetter(propertyDescriptor, accessModifiers, p);
|
||||||
|
if (propertyDescriptor.isVar()) {
|
||||||
|
propertyCodegen.generateDefaultSetter(propertyDescriptor, accessModifiers, origin);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//noinspection ConstantConditions
|
//noinspection ConstantConditions
|
||||||
if (!(kind instanceof OwnerKind.DelegateKind) && state.getBindingContext().get(BindingContext.BACKING_FIELD_REQUIRED, propertyDescriptor)) {
|
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()) {
|
if (!propertyDescriptor.isVar()) {
|
||||||
modifiers |= Opcodes.ACC_FINAL;
|
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");
|
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 {
|
public void testKt1482_2279() throws Exception {
|
||||||
createEnvironmentWithFullJdk();
|
createEnvironmentWithFullJdk();
|
||||||
blackBoxFile("regressions/kt1482_2279.kt");
|
blackBoxFile("regressions/kt1482_2279.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user