From 7851abd5351c700113ceb91b630bdffdbb6291ef Mon Sep 17 00:00:00 2001 From: Michael Bogdanov Date: Thu, 15 Oct 2015 15:31:56 +0300 Subject: [PATCH] Generate access to private members through synthetic accessors in inline functions --- .../codegen/context/CodegenContext.java | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/context/CodegenContext.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/context/CodegenContext.java index e466c663063..09cae8af8d4 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/context/CodegenContext.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/context/CodegenContext.java @@ -386,8 +386,10 @@ public abstract class CodegenContext { @Nullable JetSuperExpression superCallExpression ) { DeclarationDescriptor enclosing = descriptor.getContainingDeclaration(); - if (!hasThisDescriptor() || enclosing == getThisDescriptor() || - enclosing == getClassOrPackageParentContext().getContextDescriptor()) { + if (!isInlineMethodContext() && ( + !hasThisDescriptor() || + enclosing == getThisDescriptor() || + enclosing == getClassOrPackageParentContext().getContextDescriptor())) { return descriptor; } @@ -478,4 +480,19 @@ public abstract class CodegenContext { private static boolean isStaticField(@NotNull StackValue value) { return value instanceof StackValue.Field && ((StackValue.Field) value).isStaticPut; } + + private boolean isInsideInliningContext() { + CodegenContext current = this; + while (current != null) { + if (current instanceof MethodContext && ((MethodContext) current).isInlineFunction()) { + return true; + } + current = current.getParentContext(); + } + return false; + } + + private boolean isInlineMethodContext() { + return this instanceof MethodContext && ((MethodContext) this).isInlineFunction(); + } }