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.checker.JetTypeChecker;
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
import javax.rmi.CORBA.ClassDesc;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
@@ -232,9 +233,15 @@ public class DescriptorUtils {
private static boolean isSubtypeOfClass(@NotNull JetType type, @NotNull DeclarationDescriptor superClass) { private static boolean isSubtypeOfClass(@NotNull JetType type, @NotNull DeclarationDescriptor superClass) {
DeclarationDescriptor descriptor = type.getConstructor().getDeclarationDescriptor(); DeclarationDescriptor descriptor = type.getConstructor().getDeclarationDescriptor();
if (descriptor != null && superClass == descriptor.getOriginal()) { if (descriptor != null) {
return true; 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()) { for (JetType superType : type.getConstructor().getSupertypes()) {
if (isSubtypeOfClass(superType, superClass)) { if (isSubtypeOfClass(superType, superClass)) {
return true; return true;