From 1f8d42ab498c2f5a4c653d29119b6b37763d4ac4 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Wed, 13 Feb 2013 18:15:23 +0400 Subject: [PATCH] Fix nullability check (in case of explicitly nullable types constructed from ype variables) --- .../src/org/jetbrains/jet/codegen/CodegenUtil.java | 5 ++++- .../noAssertionForNullableGenericMethodCall.kt | 7 +++++++ .../jet/codegen/GenerateNotNullAssertionsTest.java | 8 ++++++++ 3 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/codegen/notNullAssertions/noAssertionForNullableGenericMethodCall.kt diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/CodegenUtil.java b/compiler/backend/src/org/jetbrains/jet/codegen/CodegenUtil.java index 7249c9dba70..d9f72737c97 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/CodegenUtil.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/CodegenUtil.java @@ -286,9 +286,12 @@ public class CodegenUtil { * @return true if a value of this type can be null */ public static boolean isNullableType(@NotNull JetType type) { + if (type.isNullable()) { + return true; + } if (type.getConstructor().getDeclarationDescriptor() instanceof TypeParameterDescriptor) { return TypeUtils.hasNullableSuperType(type); } - return type.isNullable(); + return false; } } diff --git a/compiler/testData/codegen/notNullAssertions/noAssertionForNullableGenericMethodCall.kt b/compiler/testData/codegen/notNullAssertions/noAssertionForNullableGenericMethodCall.kt new file mode 100644 index 00000000000..112dbdbaf34 --- /dev/null +++ b/compiler/testData/codegen/notNullAssertions/noAssertionForNullableGenericMethodCall.kt @@ -0,0 +1,7 @@ +import java.util.HashMap + +class A { + fun main() { + HashMap()[""] + } +} \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/jet/codegen/GenerateNotNullAssertionsTest.java b/compiler/tests/org/jetbrains/jet/codegen/GenerateNotNullAssertionsTest.java index e79a39d775a..9baea7c27b1 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/GenerateNotNullAssertionsTest.java +++ b/compiler/tests/org/jetbrains/jet/codegen/GenerateNotNullAssertionsTest.java @@ -154,6 +154,14 @@ public class GenerateNotNullAssertionsTest extends CodegenTestCase { assertNoIntrinsicsMethodIsCalled(PackageClassUtils.getPackageClassName(FqName.ROOT)); } + public void testNoAssertionForNullableGenericMethodCall() { + setUpEnvironment(true, false); + + loadFile("notNullAssertions/noAssertionForNullableGenericMethodCall.kt"); + + assertNoIntrinsicsMethodIsCalled("A"); + } + private void assertNoIntrinsicsMethodIsCalled(String className) { ClassFileFactory classes = generateClassesInFile(); ClassReader reader = new ClassReader(classes.asBytes(className + ".class"));