diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java index 287eabd251d..a2b9086a0e4 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java @@ -1730,8 +1730,11 @@ public class ExpressionCodegen extends JetVisitor implem if (enclosed != context.getThisDescriptor()) { CodegenContext c = context; //noinspection ConstantConditions - while (!(c instanceof ClassContext) || - !DescriptorUtils.isSubclass(c.getThisDescriptor(), enclosed)) { + while (true) { + if ((c instanceof ClassContext || c instanceof AnonymousClassContext) && + DescriptorUtils.isSubclass(c.getThisDescriptor(), enclosed)) { + break; + } c = c.getParentContext(); assert c != null; } diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/context/AnonymousClassContext.java b/compiler/backend/src/org/jetbrains/jet/codegen/context/AnonymousClassContext.java index a1ce45c14c2..919722ee754 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/context/AnonymousClassContext.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/context/AnonymousClassContext.java @@ -25,7 +25,7 @@ import static org.jetbrains.jet.codegen.binding.CodegenBinding.CLOSURE; /** * @author alex.tkachman */ -class AnonymousClassContext extends CodegenContext { +public class AnonymousClassContext extends CodegenContext { public AnonymousClassContext( JetTypeMapper typeMapper, ClassDescriptor contextDescriptor, diff --git a/compiler/testData/codegen/regressions/kt2822.kt b/compiler/testData/codegen/regressions/kt2822.kt new file mode 100644 index 00000000000..740aaf1698c --- /dev/null +++ b/compiler/testData/codegen/regressions/kt2822.kt @@ -0,0 +1,7 @@ +open class A { + fun foo() = "OK" +} + +fun box() = object : A() { + fun bar() = super.foo() +}.bar() diff --git a/compiler/tests/org/jetbrains/jet/codegen/ObjectGenTest.java b/compiler/tests/org/jetbrains/jet/codegen/ObjectGenTest.java index 26dac637fdf..08c6abff57e 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/ObjectGenTest.java +++ b/compiler/tests/org/jetbrains/jet/codegen/ObjectGenTest.java @@ -115,4 +115,8 @@ public class ObjectGenTest extends CodegenTestCase { public void testKt2663_2() { blackBoxFile("regressions/kt2663_2.kt"); } + + public void testKt2822() { + blackBoxFile("regressions/kt2822.kt"); + } }