Fix for EA-64905 - assert: TypeUtils.intersect

This commit is contained in:
Andrey Breslav
2015-05-19 15:25:45 +03:00
parent 1389b62fa4
commit f7a9cc6b28
5 changed files with 22 additions and 1 deletions
@@ -28,6 +28,13 @@ public class JetTypeChecker {
public static final JetTypeChecker DEFAULT = new JetTypeChecker(new TypeCheckingProcedure(new TypeCheckerProcedureCallbacksImpl()));
public static final JetTypeChecker ERROR_TYPES_ARE_EQUAL_TO_ANYTHING = new JetTypeChecker(new TypeCheckingProcedure(new TypeCheckerProcedureCallbacksImpl() {
@Override
public boolean assertEqualTypes(@NotNull JetType a, @NotNull JetType b, @NotNull TypeCheckingProcedure typeCheckingProcedure) {
return a.isError() || b.isError() || super.assertEqualTypes(a, b, typeCheckingProcedure);
}
}));
public static final JetTypeChecker FLEXIBLE_UNEQUAL_TO_INFLEXIBLE = new JetTypeChecker(new TypeCheckingProcedure(new TypeCheckerProcedureCallbacksImpl()) {
@Override
protected boolean heterogeneousEquivalence(JetType inflexibleType, JetType flexibleType) {
@@ -79,7 +79,9 @@ fun Collection<JetType>.singleBestRepresentative(): JetType? {
candidate ->
this.all {
other ->
candidate == other || JetTypeChecker.DEFAULT.equalTypes(candidate, other)
// We consider error types equal to anything here, so that intersections like
// {Array<String>, Array<[ERROR]>} work correctly
candidate == other || JetTypeChecker.ERROR_TYPES_ARE_EQUAL_TO_ANYTHING.equalTypes(candidate, other)
}
}
}