diff --git a/compiler/testData/diagnostics/tests/j+k/SupertypeArgumentsNullability-NotNull-SpecialTypes.kt b/compiler/testData/diagnostics/tests/j+k/SupertypeArgumentsNullability-NotNull-SpecialTypes.kt index f1b283d7ad0..15969902cd8 100644 --- a/compiler/testData/diagnostics/tests/j+k/SupertypeArgumentsNullability-NotNull-SpecialTypes.kt +++ b/compiler/testData/diagnostics/tests/j+k/SupertypeArgumentsNullability-NotNull-SpecialTypes.kt @@ -18,6 +18,6 @@ public class Y extends X { fun main() { Y().fooN() : Any - Y().barN(null); + Y().barN(null); } diff --git a/compiler/testData/diagnostics/tests/j+k/SupertypeArgumentsNullability-NotNull-UserTypes.kt b/compiler/testData/diagnostics/tests/j+k/SupertypeArgumentsNullability-NotNull-UserTypes.kt index 28e2f9da261..6b0992f9dfb 100644 --- a/compiler/testData/diagnostics/tests/j+k/SupertypeArgumentsNullability-NotNull-UserTypes.kt +++ b/compiler/testData/diagnostics/tests/j+k/SupertypeArgumentsNullability-NotNull-UserTypes.kt @@ -18,6 +18,6 @@ public class Y extends X { fun main() { Y().fooN() : Any - Y().barN(null); + Y().barN(null); } diff --git a/compiler/testData/diagnostics/tests/j+k/SupertypeArgumentsNullability-SpecialTypes.kt b/compiler/testData/diagnostics/tests/j+k/SupertypeArgumentsNullability-SpecialTypes.kt index 32114bfd2cf..db61d0ee80a 100644 --- a/compiler/testData/diagnostics/tests/j+k/SupertypeArgumentsNullability-SpecialTypes.kt +++ b/compiler/testData/diagnostics/tests/j+k/SupertypeArgumentsNullability-SpecialTypes.kt @@ -15,7 +15,7 @@ public class Y extends X { // FILE: test.kt fun main() { - Y().foo().length + Y().foo().length Y().bar(null) } diff --git a/compiler/testData/diagnostics/tests/j+k/UnboxingNulls.kt b/compiler/testData/diagnostics/tests/j+k/UnboxingNulls.kt index d5fbdaf7186..f988db2b0e2 100644 --- a/compiler/testData/diagnostics/tests/j+k/UnboxingNulls.kt +++ b/compiler/testData/diagnostics/tests/j+k/UnboxingNulls.kt @@ -9,5 +9,5 @@ package a fun foo() { // If this fails, it means that we have broken the rule that Java returns are always nullable - a.Test().t() + 1 + a.Test().t() + 1 } diff --git a/compiler/testData/diagnostics/tests/j+k/kt1431.kt b/compiler/testData/diagnostics/tests/j+k/kt1431.kt index 98384d3efeb..971257ededc 100644 --- a/compiler/testData/diagnostics/tests/j+k/kt1431.kt +++ b/compiler/testData/diagnostics/tests/j+k/kt1431.kt @@ -13,5 +13,5 @@ package d import a.C fun test() { - C.create().foo() + C.create().foo() } diff --git a/core/descriptors/src/org/jetbrains/jet/lang/types/checker/TypeCheckingProcedure.java b/core/descriptors/src/org/jetbrains/jet/lang/types/checker/TypeCheckingProcedure.java index 02d9206e3dc..366dc75816c 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/types/checker/TypeCheckingProcedure.java +++ b/core/descriptors/src/org/jetbrains/jet/lang/types/checker/TypeCheckingProcedure.java @@ -69,6 +69,20 @@ public class TypeCheckingProcedure { } public boolean equalTypes(@NotNull JetType type1, @NotNull JetType type2) { + if (type1 instanceof FlexibleType) { + FlexibleType flexibleType1 = (FlexibleType) type1; + if (type2 instanceof FlexibleType) { + FlexibleType flexibleType2 = (FlexibleType) type2; + return equalTypes(flexibleType1.getLowerBound(), flexibleType2.getLowerBound()) + && equalTypes(flexibleType1.getUpperBound(), flexibleType2.getUpperBound()); + } + return equalTypes(flexibleType1.getLowerBound(), type2) || equalTypes(flexibleType1.getUpperBound(), type2); + } + else if (type2 instanceof FlexibleType) { + FlexibleType flexibleType2 = (FlexibleType) type2; + return equalTypes(type1, flexibleType2.getLowerBound()) || equalTypes(type1, flexibleType2.getUpperBound()); + } + if (type1.isNullable() != type2.isNullable()) { return false; }