DescriptorUtils.isSubclass: check type constructors for equality instead of checking descriptors
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user