From 45c1fa37412cf39dddf81f05dfdb6b8e7b5c6d69 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Wed, 25 Jun 2014 15:10:36 +0400 Subject: [PATCH] Support flexible types in DataFlowValues --- .../smartcasts/DataFlowValueFactory.java | 2 +- .../tests/platformTypes/dereference.kt | 28 +++++++++++++++++++ .../checkers/JetDiagnosticsTestGenerated.java | 5 ++++ .../jetbrains/jet/lang/types/flexibleTypes.kt | 2 ++ 4 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/diagnostics/tests/platformTypes/dereference.kt diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/smartcasts/DataFlowValueFactory.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/smartcasts/DataFlowValueFactory.java index ba2e37a5bc4..405a45379da 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/smartcasts/DataFlowValueFactory.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/smartcasts/DataFlowValueFactory.java @@ -80,7 +80,7 @@ public class DataFlowValueFactory { @NotNull private static Nullability getImmanentNullability(@NotNull JetType type) { - return type.isNullable() || TypeUtils.hasNullableSuperType(type) ? Nullability.UNKNOWN : Nullability.NOT_NULL; + return TypeUtils.isNullableType(type) ? Nullability.UNKNOWN : Nullability.NOT_NULL; } private static class IdentifierInfo { diff --git a/compiler/testData/diagnostics/tests/platformTypes/dereference.kt b/compiler/testData/diagnostics/tests/platformTypes/dereference.kt new file mode 100644 index 00000000000..b2d0826da40 --- /dev/null +++ b/compiler/testData/diagnostics/tests/platformTypes/dereference.kt @@ -0,0 +1,28 @@ +// FILE: p/J.java + +package p; + +public class J { + public J j() {return null;} + + public T foo() {return null;} + public T foo1() {return null;} +} + +// FILE: k.kt + +import p.* + +fun test(j: J) { + j.j() : J + j.j().j() + j.j()!!.j() + + val ann = j.foo() + ann!!.length + ann.length + + val a = j.foo() + a!!.j() + a.j() +} \ 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 e5ed4a63a01..c2cb657d95f 100644 --- a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java @@ -7695,6 +7695,11 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest { JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/diagnostics/tests/platformTypes"), Pattern.compile("^(.+)\\.kt$"), true); } + @TestMetadata("dereference.kt") + public void testDereference() throws Exception { + doTest("compiler/testData/diagnostics/tests/platformTypes/dereference.kt"); + } + @TestMetadata("compiler/testData/diagnostics/tests/platformTypes/methodCall") @TestDataPath("$PROJECT_ROOT") @RunWith(org.jetbrains.jet.JUnit3RunnerWithInners.class) diff --git a/core/descriptors/src/org/jetbrains/jet/lang/types/flexibleTypes.kt b/core/descriptors/src/org/jetbrains/jet/lang/types/flexibleTypes.kt index 8775ae629d0..3ef5c9a1d6e 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/types/flexibleTypes.kt +++ b/core/descriptors/src/org/jetbrains/jet/lang/types/flexibleTypes.kt @@ -21,6 +21,8 @@ public trait FlexibleType : JetType { val upperBound: JetType } +public fun JetType.isFlexible(): Boolean = this is FlexibleType + public open class DelegatingFlexibleType( override val lowerBound: JetType, override val upperBound: JetType