From fc8cc217dc84b9965204e3d206fe5ce96f26cd99 Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Tue, 6 Dec 2016 22:11:23 +0300 Subject: [PATCH] Do not create local variables in an abstract class inside OptimizationMethodVisitor, MethodNode forbids this. --- .../kotlin/codegen/TransformationMethodVisitor.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/TransformationMethodVisitor.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/TransformationMethodVisitor.java index 14e784fb83d..9c457ce9978 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/TransformationMethodVisitor.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/TransformationMethodVisitor.java @@ -68,7 +68,10 @@ public abstract class TransformationMethodVisitor extends MethodVisitor { // In case of empty instructions list MethodNode.accept doesn't call visitLocalVariables of delegate // So we just do it here - if (methodNode.instructions.size() == 0) { + if (methodNode.instructions.size() == 0 + // MethodNode does not create a list of variables for abstract methods, so we would get NPE in accept() instead + && (!(delegate instanceof MethodNode) || (methodNode.access & Opcodes.ACC_ABSTRACT) == 0) + ) { List localVariables = methodNode.localVariables; // visits local variables int n = localVariables == null ? 0 : localVariables.size();