From 964b81ce6a0e20aa68295a762070b3aa4dc985e3 Mon Sep 17 00:00:00 2001 From: Natalia Ukhorskaya Date: Mon, 7 Apr 2014 20:03:11 +0400 Subject: [PATCH] CHECKCAST always succeeds on null --- eval4j/src/org/jetbrains/eval4j/interpreter.kt | 4 +++- .../org/jetbrains/eval4j/test/TestData.java | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/eval4j/src/org/jetbrains/eval4j/interpreter.kt b/eval4j/src/org/jetbrains/eval4j/interpreter.kt index 01d65b765f4..e3f3d495a32 100644 --- a/eval4j/src/org/jetbrains/eval4j/interpreter.kt +++ b/eval4j/src/org/jetbrains/eval4j/interpreter.kt @@ -172,7 +172,9 @@ class SingleInstructionInterpreter(private val eval: Eval) : Interpreter( CHECKCAST -> { val targetType = Type.getObjectType((insn as TypeInsnNode).desc) - if (eval.isInstanceOf(value, targetType)) { + if (value == NULL_VALUE) { + NULL_VALUE + } else if (eval.isInstanceOf(value, targetType)) { ObjectValue(value.obj(), targetType) } else { diff --git a/eval4j/test/org/jetbrains/eval4j/test/TestData.java b/eval4j/test/org/jetbrains/eval4j/test/TestData.java index 5a22a6d7523..62cfa338d02 100644 --- a/eval4j/test/org/jetbrains/eval4j/test/TestData.java +++ b/eval4j/test/org/jetbrains/eval4j/test/TestData.java @@ -48,6 +48,22 @@ class TestData { return "str"; } + static void checkCastNull() { + CheckCastToNull klass = new CheckCastToNull(); + klass.f1(null); + klass.f2(null); + klass.f3(null); + + Integer integer = (Integer) null; + Object object = (Object) null; + } + + static class CheckCastToNull { + void f1(Integer p) {} + void f2(Integer[] p) {} + void f3(Integer[][] p) {} + } + static Integer integerValueOf() { return 1; } static Byte byteValueOf() { return 1; } @@ -549,3 +565,5 @@ class TestData { int[] i = (int[]) null; } } + +