diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/TypeUtils.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/TypeUtils.java index 32f50275153..ed37f91f74b 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/TypeUtils.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/TypeUtils.java @@ -149,6 +149,12 @@ public class TypeUtils { } } + // Don't add type if it is already present, to avoid trivial type intersections in result + for (JetType other : resultingTypes) { + if (typeChecker.equalTypes(other, type)) { + continue outer; + } + } resultingTypes.add(type); } diff --git a/compiler/tests/org/jetbrains/jet/types/JetTypeCheckerTest.java b/compiler/tests/org/jetbrains/jet/types/JetTypeCheckerTest.java index beaba96fef2..07e8ce5f4bc 100644 --- a/compiler/tests/org/jetbrains/jet/types/JetTypeCheckerTest.java +++ b/compiler/tests/org/jetbrains/jet/types/JetTypeCheckerTest.java @@ -199,6 +199,10 @@ public class JetTypeCheckerTest extends JetLiteFixture { } public void testIntersect() throws Exception { + assertIntersection("Number", "Number?", "Hashable"); + assertIntersection("Number", "Hashable", "Number?"); + assertIntersection("Hashable", "Hashable?", "Hashable"); + assertIntersection("Int?", "Int?", "Int?"); assertIntersection("Int", "Int?", "Int"); assertIntersection("Int", "Int", "Int?");