From 53a1abf2e6a195b792cfd37c96ed454a7951dcd8 Mon Sep 17 00:00:00 2001 From: Natalia Ukhorskaya Date: Mon, 16 Jun 2014 13:10:16 +0400 Subject: [PATCH] DescriptorUtils.isSubclass: check type constructors for equality instead of checking descriptors --- .../jetbrains/jet/lang/resolve/DescriptorUtils.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/core/descriptors/src/org/jetbrains/jet/lang/resolve/DescriptorUtils.java b/core/descriptors/src/org/jetbrains/jet/lang/resolve/DescriptorUtils.java index 304d417863b..6a51a1e1a1b 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/resolve/DescriptorUtils.java +++ b/core/descriptors/src/org/jetbrains/jet/lang/resolve/DescriptorUtils.java @@ -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;