From 1dbfe5483aaf77b769cd71f39006e5cbd11d147a Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Tue, 2 Sep 2014 18:19:28 +0400 Subject: [PATCH] Fix isNullableType() to always consider flexible types, even if they contain type parameters --- .../javaInterop/notNullAssertions/mapPut.kt | 11 +++++++++++ .../checkers/JetDiagnosticsTestGenerated.java | 12 ++++++++---- .../BlackBoxCodegenTestGenerated.java | 18 +++++++++++++++++- .../jetbrains/jet/lang/types/TypeUtils.java | 6 +++--- 4 files changed, 39 insertions(+), 8 deletions(-) create mode 100644 compiler/testData/codegen/box/javaInterop/notNullAssertions/mapPut.kt diff --git a/compiler/testData/codegen/box/javaInterop/notNullAssertions/mapPut.kt b/compiler/testData/codegen/box/javaInterop/notNullAssertions/mapPut.kt new file mode 100644 index 00000000000..abc4371f18d --- /dev/null +++ b/compiler/testData/codegen/box/javaInterop/notNullAssertions/mapPut.kt @@ -0,0 +1,11 @@ +import java.util.HashMap + +fun foo(k: K, v: V) { + val map = HashMap() + val old = map.put(k, v) +} + +fun box(): String { + foo("", "") + return "OK" +} \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java index fd0cb006e80..8a93254647f 100644 --- a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java @@ -4445,7 +4445,8 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest { @TestMetadata("recursive.kt") public void testRecursive() throws Exception { - doTest("compiler/testData/diagnostics/tests/generics/recursive.kt"); + String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/generics/recursive.kt"); + doTest(fileName); } @TestMetadata("RecursiveUpperBoundCheck.kt") @@ -7776,7 +7777,8 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest { @TestMetadata("recursiveGeneric.kt") public void testRecursiveGeneric() throws Exception { - doTest("compiler/testData/diagnostics/tests/platformTypes/commonSupertype/recursiveGeneric.kt"); + String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/platformTypes/commonSupertype/recursiveGeneric.kt"); + doTest(fileName); } @TestMetadata("stringOrNull.kt") @@ -7797,7 +7799,8 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest { @TestMetadata("entrySet.kt") public void testEntrySet() throws Exception { - doTest("compiler/testData/diagnostics/tests/platformTypes/methodCall/entrySet.kt"); + String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/platformTypes/methodCall/entrySet.kt"); + doTest(fileName); } @TestMetadata("int.kt") @@ -7850,7 +7853,8 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest { @TestMetadata("sam.kt") public void testSam() throws Exception { - doTest("compiler/testData/diagnostics/tests/platformTypes/methodCall/sam.kt"); + String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/platformTypes/methodCall/sam.kt"); + doTest(fileName); } @TestMetadata("singleton.kt") diff --git a/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java index 99f1486e3de..9872d563c42 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java @@ -4018,13 +4018,29 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { @TestMetadata("compiler/testData/codegen/box/javaInterop") @TestDataPath("$PROJECT_ROOT") - @InnerTestClasses({JavaInterop.ObjectMethods.class}) + @InnerTestClasses({JavaInterop.NotNullAssertions.class, JavaInterop.ObjectMethods.class}) @RunWith(org.jetbrains.jet.JUnit3RunnerWithInners.class) public static class JavaInterop extends AbstractBlackBoxCodegenTest { public void testAllFilesPresentInJavaInterop() throws Exception { JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/box/javaInterop"), Pattern.compile("^(.+)\\.kt$"), true); } + @TestMetadata("compiler/testData/codegen/box/javaInterop/notNullAssertions") + @TestDataPath("$PROJECT_ROOT") + @RunWith(org.jetbrains.jet.JUnit3RunnerWithInners.class) + public static class NotNullAssertions extends AbstractBlackBoxCodegenTest { + public void testAllFilesPresentInNotNullAssertions() throws Exception { + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/box/javaInterop/notNullAssertions"), Pattern.compile("^(.+)\\.kt$"), true); + } + + @TestMetadata("mapPut.kt") + public void testMapPut() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/javaInterop/notNullAssertions/mapPut.kt"); + doTest(fileName); + } + + } + @TestMetadata("compiler/testData/codegen/box/javaInterop/objectMethods") @TestDataPath("$PROJECT_ROOT") @RunWith(org.jetbrains.jet.JUnit3RunnerWithInners.class) diff --git a/core/descriptors/src/org/jetbrains/jet/lang/types/TypeUtils.java b/core/descriptors/src/org/jetbrains/jet/lang/types/TypeUtils.java index 51303cf8751..fe789dae139 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/types/TypeUtils.java +++ b/core/descriptors/src/org/jetbrains/jet/lang/types/TypeUtils.java @@ -424,12 +424,12 @@ public class TypeUtils { if (type.isNullable()) { return true; } - if (type.getConstructor().getDeclarationDescriptor() instanceof TypeParameterDescriptor) { - return hasNullableSuperType(type); - } if (TypesPackage.isFlexible(type) && isNullableType(((FlexibleType) type).getUpperBound())) { return true; } + if (type.getConstructor().getDeclarationDescriptor() instanceof TypeParameterDescriptor) { + return hasNullableSuperType(type); + } return false; }