'isSubClass' method moved to DescriptorUtils
This commit is contained in:
@@ -79,31 +79,6 @@ public class CodegenUtil {
|
|||||||
return invokeDescriptor;
|
return invokeDescriptor;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isSubclass(ClassDescriptor subClass, ClassDescriptor superClass) {
|
|
||||||
Set<JetType> allSuperTypes = new THashSet<JetType>();
|
|
||||||
|
|
||||||
addSuperTypes(subClass.getDefaultType(), allSuperTypes);
|
|
||||||
|
|
||||||
final DeclarationDescriptor superOriginal = superClass.getOriginal();
|
|
||||||
|
|
||||||
for (JetType superType : allSuperTypes) {
|
|
||||||
final DeclarationDescriptor descriptor = superType.getConstructor().getDeclarationDescriptor();
|
|
||||||
if (descriptor != null && superOriginal.equals(descriptor.getOriginal())) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void addSuperTypes(JetType type, Set<JetType> set) {
|
|
||||||
set.add(type);
|
|
||||||
|
|
||||||
for (JetType jetType : type.getConstructor().getSupertypes()) {
|
|
||||||
addSuperTypes(jetType, set);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isNonLiteralObject(JetClassOrObject myClass) {
|
public static boolean isNonLiteralObject(JetClassOrObject myClass) {
|
||||||
return myClass instanceof JetObjectDeclaration && !((JetObjectDeclaration) myClass).isObjectLiteral() &&
|
return myClass instanceof JetObjectDeclaration && !((JetObjectDeclaration) myClass).isObjectLiteral() &&
|
||||||
!(myClass.getParent() instanceof JetClassObject);
|
!(myClass.getParent() instanceof JetClassObject);
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ import org.jetbrains.jet.lang.descriptors.*;
|
|||||||
import org.jetbrains.jet.lang.diagnostics.DiagnosticUtils;
|
import org.jetbrains.jet.lang.diagnostics.DiagnosticUtils;
|
||||||
import org.jetbrains.jet.lang.psi.*;
|
import org.jetbrains.jet.lang.psi.*;
|
||||||
import org.jetbrains.jet.lang.resolve.BindingContext;
|
import org.jetbrains.jet.lang.resolve.BindingContext;
|
||||||
|
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.*;
|
import org.jetbrains.jet.lang.resolve.calls.*;
|
||||||
import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant;
|
import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant;
|
||||||
import org.jetbrains.jet.lang.resolve.scopes.receivers.ClassReceiver;
|
import org.jetbrains.jet.lang.resolve.scopes.receivers.ClassReceiver;
|
||||||
@@ -1441,7 +1442,7 @@ public class ExpressionCodegen extends JetVisitor<StackValue, StackValue> {
|
|||||||
if(cur instanceof CodegenContext.MethodContext && !(cur instanceof CodegenContext.ConstructorContext))
|
if(cur instanceof CodegenContext.MethodContext && !(cur instanceof CodegenContext.ConstructorContext))
|
||||||
cur = cur.getParentContext();
|
cur = cur.getParentContext();
|
||||||
|
|
||||||
if (CodegenUtil.isSubclass(cur.getThisDescriptor(), calleeContainingClass)) {
|
if (DescriptorUtils.isSubclass(cur.getThisDescriptor(), calleeContainingClass)) {
|
||||||
Type type = asmType(calleeContainingClass.getDefaultType());
|
Type type = asmType(calleeContainingClass.getDefaultType());
|
||||||
if(!isObject || (cur.getThisDescriptor() == calleeContainingClass)) {
|
if(!isObject || (cur.getThisDescriptor() == calleeContainingClass)) {
|
||||||
result.put(TYPE_OBJECT, v);
|
result.put(TYPE_OBJECT, v);
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ package org.jetbrains.jet.lang.resolve;
|
|||||||
|
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.google.common.collect.Maps;
|
import com.google.common.collect.Maps;
|
||||||
|
import gnu.trove.THashSet;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.jet.lang.descriptors.*;
|
import org.jetbrains.jet.lang.descriptors.*;
|
||||||
@@ -277,4 +278,29 @@ public class DescriptorUtils {
|
|||||||
throw new IllegalStateException("unknown classifier: " + classifier);
|
throw new IllegalStateException("unknown classifier: " + classifier);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean isSubclass(ClassDescriptor subClass, ClassDescriptor superClass) {
|
||||||
|
Set<JetType> allSuperTypes = new THashSet<JetType>();
|
||||||
|
|
||||||
|
addSuperTypes(subClass.getDefaultType(), allSuperTypes);
|
||||||
|
|
||||||
|
final DeclarationDescriptor superOriginal = superClass.getOriginal();
|
||||||
|
|
||||||
|
for (JetType superType : allSuperTypes) {
|
||||||
|
final DeclarationDescriptor descriptor = superType.getConstructor().getDeclarationDescriptor();
|
||||||
|
if (descriptor != null && superOriginal.equals(descriptor.getOriginal())) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void addSuperTypes(JetType type, Set<JetType> set) {
|
||||||
|
set.add(type);
|
||||||
|
|
||||||
|
for (JetType jetType : type.getConstructor().getSupertypes()) {
|
||||||
|
addSuperTypes(jetType, set);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user