Fixed accessing namespace private members from inner classes. Added test.
This commit is contained in:
@@ -1063,8 +1063,9 @@ public class ExpressionCodegen extends JetVisitor<StackValue, StackValue> {
|
||||
final boolean directToField = expression.getReferencedNameElementType() == JetTokens.FIELD_IDENTIFIER && contextKind() != OwnerKind.TRAIT_IMPL ;
|
||||
JetExpression r = getReceiverForSelector(expression);
|
||||
final boolean isSuper = r instanceof JetSuperExpression;
|
||||
if (propertyDescriptor.getVisibility() == Visibilities.PRIVATE && !DescriptorUtils
|
||||
.isClassObject(propertyDescriptor.getContainingDeclaration())) {
|
||||
if (propertyDescriptor.getVisibility() == Visibilities.PRIVATE
|
||||
&& !DescriptorUtils.isClassObject(propertyDescriptor.getContainingDeclaration())
|
||||
&& propertyDescriptor.getContainingDeclaration() instanceof ClassDescriptor) {
|
||||
if (context.getClassOrNamespaceDescriptor() != propertyDescriptor.getContainingDeclaration()) {
|
||||
DeclarationDescriptor enclosed = propertyDescriptor.getContainingDeclaration();
|
||||
if (enclosed != null && enclosed != context.getThisDescriptor()) {
|
||||
@@ -1366,7 +1367,8 @@ public class ExpressionCodegen extends JetVisitor<StackValue, StackValue> {
|
||||
}
|
||||
|
||||
if (fd.getVisibility() == Visibilities.PRIVATE
|
||||
&& !DescriptorUtils.isClassObject(fd.getContainingDeclaration())) {
|
||||
&& !DescriptorUtils.isClassObject(fd.getContainingDeclaration())
|
||||
&& fd.getContainingDeclaration() instanceof ClassDescriptor) {
|
||||
if (context.getClassOrNamespaceDescriptor() != fd.getContainingDeclaration()) {
|
||||
DeclarationDescriptor enclosed = fd.getContainingDeclaration();
|
||||
if (enclosed != context.getThisDescriptor()) {
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
private var x = "O"
|
||||
private fun f() = "K"
|
||||
|
||||
fun box() = { x + f() }()
|
||||
@@ -563,4 +563,8 @@ public class NamespaceGenTest extends CodegenTestCase {
|
||||
//noinspection ImplicitArrayToString
|
||||
assertEquals("s" + args.toString(), main.invoke(null, "s", args));
|
||||
}
|
||||
|
||||
public void testPrivateTopLevelPropAndVarInInner() {
|
||||
blackBoxFile("privateTopLevelPropAndVarInInner.kt");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user