DescriptorUtils.isSubclass: check type constructors for equality instead of checking descriptors

This commit is contained in:
Natalia Ukhorskaya
2014-06-16 13:10:16 +04:00
parent 0c17bbe1c4
commit 53a1abf2e6
@@ -33,6 +33,7 @@ import org.jetbrains.jet.lang.types.*;
import org.jetbrains.jet.lang.types.checker.JetTypeChecker;
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
import javax.rmi.CORBA.ClassDesc;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
@@ -232,9 +233,15 @@ public class DescriptorUtils {
private static boolean isSubtypeOfClass(@NotNull JetType type, @NotNull DeclarationDescriptor superClass) {
DeclarationDescriptor descriptor = type.getConstructor().getDeclarationDescriptor();
if (descriptor != null && superClass == descriptor.getOriginal()) {
return true;
if (descriptor != null) {
DeclarationDescriptor originalDescriptor = descriptor.getOriginal();
if (originalDescriptor instanceof ClassifierDescriptor
&& superClass instanceof ClassifierDescriptor
&& ((ClassifierDescriptor) superClass).getTypeConstructor().equals(((ClassifierDescriptor) originalDescriptor).getTypeConstructor())) {
return true;
}
}
for (JetType superType : type.getConstructor().getSupertypes()) {
if (isSubtypeOfClass(superType, superClass)) {
return true;