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 ;
|
final boolean directToField = expression.getReferencedNameElementType() == JetTokens.FIELD_IDENTIFIER && contextKind() != OwnerKind.TRAIT_IMPL ;
|
||||||
JetExpression r = getReceiverForSelector(expression);
|
JetExpression r = getReceiverForSelector(expression);
|
||||||
final boolean isSuper = r instanceof JetSuperExpression;
|
final boolean isSuper = r instanceof JetSuperExpression;
|
||||||
if (propertyDescriptor.getVisibility() == Visibilities.PRIVATE && !DescriptorUtils
|
if (propertyDescriptor.getVisibility() == Visibilities.PRIVATE
|
||||||
.isClassObject(propertyDescriptor.getContainingDeclaration())) {
|
&& !DescriptorUtils.isClassObject(propertyDescriptor.getContainingDeclaration())
|
||||||
|
&& propertyDescriptor.getContainingDeclaration() instanceof ClassDescriptor) {
|
||||||
if (context.getClassOrNamespaceDescriptor() != propertyDescriptor.getContainingDeclaration()) {
|
if (context.getClassOrNamespaceDescriptor() != propertyDescriptor.getContainingDeclaration()) {
|
||||||
DeclarationDescriptor enclosed = propertyDescriptor.getContainingDeclaration();
|
DeclarationDescriptor enclosed = propertyDescriptor.getContainingDeclaration();
|
||||||
if (enclosed != null && enclosed != context.getThisDescriptor()) {
|
if (enclosed != null && enclosed != context.getThisDescriptor()) {
|
||||||
@@ -1366,7 +1367,8 @@ public class ExpressionCodegen extends JetVisitor<StackValue, StackValue> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (fd.getVisibility() == Visibilities.PRIVATE
|
if (fd.getVisibility() == Visibilities.PRIVATE
|
||||||
&& !DescriptorUtils.isClassObject(fd.getContainingDeclaration())) {
|
&& !DescriptorUtils.isClassObject(fd.getContainingDeclaration())
|
||||||
|
&& fd.getContainingDeclaration() instanceof ClassDescriptor) {
|
||||||
if (context.getClassOrNamespaceDescriptor() != fd.getContainingDeclaration()) {
|
if (context.getClassOrNamespaceDescriptor() != fd.getContainingDeclaration()) {
|
||||||
DeclarationDescriptor enclosed = fd.getContainingDeclaration();
|
DeclarationDescriptor enclosed = fd.getContainingDeclaration();
|
||||||
if (enclosed != context.getThisDescriptor()) {
|
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
|
//noinspection ImplicitArrayToString
|
||||||
assertEquals("s" + args.toString(), main.invoke(null, "s", args));
|
assertEquals("s" + args.toString(), main.invoke(null, "s", args));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testPrivateTopLevelPropAndVarInInner() {
|
||||||
|
blackBoxFile("privateTopLevelPropAndVarInInner.kt");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user