Fallback to Any type in case supertypes are empty

This can happen e.g. if all supertypes were on the cycle (A : B, B : A)
-- then SupertypesLoopChecker will cut all supertypes that are on cycle,
leaving set of supertypes empty.

Some clients in the compiler are not ready to work with empty list of
supertypes -- notably, CommonSupertypes.

^KT-23029 Fixed
This commit is contained in:
Dmitry Savvinov
2018-03-12 13:02:11 +03:00
parent eb3b9032d6
commit 2d8e4e752c
22 changed files with 219 additions and 0 deletions
@@ -17,6 +17,7 @@
package org.jetbrains.kotlin.types;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.builtins.KotlinBuiltIns;
import org.jetbrains.kotlin.descriptors.*;
import org.jetbrains.kotlin.resolve.DescriptorUtils;
@@ -160,4 +161,14 @@ public abstract class AbstractClassTypeConstructor extends AbstractTypeConstruct
return additionalNeighbours;
}
@Nullable
@Override
protected KotlinType defaultSupertypeIfEmpty() {
if (KotlinBuiltIns.isSpecialClassWithNoSupertypes(this.getDeclarationDescriptor())) {
return null;
} else {
return getBuiltIns().getAnyType();
}
}
}