From 8365cee0b52d4b70385a128b9cc247773217a306 Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Thu, 1 Nov 2012 20:21:45 +0400 Subject: [PATCH] Fixed bug in TypeUtils.intersect(). For "Foo", "Foo?" it returned "{Foo}" instead of "Foo" --- .../src/org/jetbrains/jet/lang/types/TypeUtils.java | 6 ++++++ .../tests/org/jetbrains/jet/types/JetTypeCheckerTest.java | 4 ++++ 2 files changed, 10 insertions(+) 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?");