Fixed accessing namespace private members from inner classes. Added test.

This commit is contained in:
Evgeny Gerashchenko
2012-06-19 22:47:26 +04:00
parent e8f15027e9
commit 9e727623c2
3 changed files with 13 additions and 3 deletions
@@ -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()) {