diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java index f621019cb4e..70db32ebf32 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java @@ -856,10 +856,13 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen { "constructor: " + constructor.getValueParameters().size(); MutableClosure closure = ImplementationBodyCodegen.this.context.closure; - if (closure != null && closure.getCaptureThis() != null) { - Type type = typeMapper.mapType(enclosingClassDescriptor(bindingContext, descriptor)); - iv.load(0, classAsmType); - iv.getfield(classAsmType.getInternalName(), CAPTURED_THIS_FIELD, type.getDescriptor()); + if (closure != null) { + ClassDescriptor captureThis = closure.getCaptureThis(); + if (captureThis != null) { + iv.load(0, classAsmType); + Type type = typeMapper.mapType(captureThis); + iv.getfield(classAsmType.getInternalName(), CAPTURED_THIS_FIELD, type.getDescriptor()); + } } int parameterIndex = 1; // localVariable 0 = this diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/binding/CalculatedClosure.java b/compiler/backend/src/org/jetbrains/jet/codegen/binding/CalculatedClosure.java index b28aa587d62..bc73695474d 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/binding/CalculatedClosure.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/binding/CalculatedClosure.java @@ -31,9 +31,6 @@ import java.util.List; import java.util.Map; public interface CalculatedClosure { - @Nullable - ClassDescriptor getEnclosingClass(); - @Nullable ResolvedCall getSuperCall(); diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/binding/CodegenBinding.java b/compiler/backend/src/org/jetbrains/jet/codegen/binding/CodegenBinding.java index ae5299b0b4f..d8d2f46ce66 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/binding/CodegenBinding.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/binding/CodegenBinding.java @@ -100,11 +100,6 @@ public class CodegenBinding { return asmTypeForScriptDescriptor(bindingContext, scriptDescriptor); } - public static ClassDescriptor enclosingClassDescriptor(BindingContext bindingContext, ClassDescriptor descriptor) { - CalculatedClosure closure = bindingContext.get(CLOSURE, descriptor); - return closure == null ? null : closure.getEnclosingClass(); - } - @NotNull public static ClassDescriptor anonymousClassForFunction( @NotNull BindingContext bindingContext, @@ -157,8 +152,8 @@ public class CodegenBinding { return false; } - ClassDescriptor enclosing = enclosingClassDescriptor(bindingContext, classDescriptor); - if (enclosing == null) { + MutableClosure closure = bindingContext.get(CLOSURE, classDescriptor); + if (closure == null || closure.getEnclosingClass() == null) { return false; } diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/binding/MutableClosure.java b/compiler/backend/src/org/jetbrains/jet/codegen/binding/MutableClosure.java index 5409313f79d..35694b8b726 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/binding/MutableClosure.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/binding/MutableClosure.java @@ -50,7 +50,6 @@ public final class MutableClosure implements CalculatedClosure { } @Nullable - @Override public ClassDescriptor getEnclosingClass() { return enclosingClass; }