Look into proper context when generating backing field access

Problem manifests when a class property name matches a companion object
property name, and class property is referenced in closure context.

 #KT-19367 Fixed Target versions 1.1.5
This commit is contained in:
Dmitry Petrov
2017-08-01 10:35:57 +03:00
parent 05eee9c173
commit c5613888eb
6 changed files with 47 additions and 1 deletions
@@ -1868,7 +1868,14 @@ public class ExpressionCodegen extends KtVisitor<StackValue, StackValue> impleme
@NotNull DeclarationDescriptor containingDeclaration
) {
switch (accessorKind) {
case NORMAL: return context.getParentContext();
case NORMAL:
if (containingDeclaration instanceof ClassDescriptor) {
CodegenContext parentWithDescriptor = context.findParentContextWithDescriptor(containingDeclaration);
if (parentWithDescriptor != null) {
return parentWithDescriptor;
}
}
return context.getParentContext();
// For companion object property, backing field lives in object containing class
// Otherwise, it lives in its containing declaration
case IN_CLASS_COMPANION: return context.findParentContextWithDescriptor(containingDeclaration.getContainingDeclaration());