diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/inline/AnonymousObjectTransformer.java b/compiler/backend/src/org/jetbrains/jet/codegen/inline/AnonymousObjectTransformer.java index bda6c373035..a8acc84786d 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/inline/AnonymousObjectTransformer.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/inline/AnonymousObjectTransformer.java @@ -199,7 +199,7 @@ public class AnonymousObjectTransformer { List descTypes = new ArrayList(); Parameters constructorParams = constructorInlineBuilder.buildParameters(); - final int [] capturedIndexes = new int [constructorParams.totalSize()]; + int [] capturedIndexes = new int [constructorParams.totalSize()]; int index = 0; int size = 0; @@ -218,7 +218,7 @@ public class AnonymousObjectTransformer { } } - final List> capturedFieldsToGenerate = new ArrayList>(); + List> capturedFieldsToGenerate = new ArrayList>(); for (CapturedParamInfo capturedParamInfo : allCapturedBuilder.listCaptured()) { if (capturedParamInfo.getLambda() == null) { //not inlined capturedFieldsToGenerate.add(new Pair(capturedParamInfo.getNewFieldName(), capturedParamInfo.getType())); @@ -232,23 +232,16 @@ public class AnonymousObjectTransformer { "", constructorDescriptor, null, ArrayUtil.EMPTY_STRING_ARRAY); - MethodVisitor capturedFieldInitializer = new InstructionAdapter(InlineCodegenUtil.API, constructorVisitor) { - private boolean superCallProcessed; - @Override - public void visitMethodInsn(int opcode, String owner, String name, String desc, boolean itf) { - super.visitMethodInsn(opcode, owner, name, desc, itf); - if (!superCallProcessed && "".equals(name)) { - superCallProcessed = true; - List fields = AsmUtil.transformCapturedParams(capturedFieldsToGenerate, newLambdaType); - int paramIndex = 0; - for (FieldInfo fieldInfo : fields) { - AsmUtil.genAssignInstanceFieldFromParam(fieldInfo, capturedIndexes[paramIndex], this); - paramIndex++; - } - } - } - }; + //initialize captured fields + List fields = AsmUtil.transformCapturedParams(capturedFieldsToGenerate, newLambdaType); + int paramIndex = 0; + InstructionAdapter capturedFieldInitializer = new InstructionAdapter(constructorVisitor); + for (FieldInfo fieldInfo : fields) { + AsmUtil.genAssignInstanceFieldFromParam(fieldInfo, capturedIndexes[paramIndex], capturedFieldInitializer); + paramIndex++; + } + //then transform constructor Parameters constructorParameters = constructorInlineBuilder.buildParameters(); RegeneratedLambdaFieldRemapper remapper =