Search in sources :

Example 1 with InterfaceType

use of com.sun.jdi.InterfaceType in project che by eclipse.

the class Evaluator method isAssignable.

private boolean isAssignable(Type from, Type to) {
    if (from.equals(to)) {
        return true;
    }
    if (from instanceof BooleanType) {
        return to instanceof BooleanType;
    }
    if (to instanceof BooleanType) {
        return false;
    }
    if (from instanceof PrimitiveType) {
        return to instanceof PrimitiveType;
    }
    if (to instanceof PrimitiveType) {
        return false;
    }
    if (from instanceof ArrayType) {
        if (to instanceof ArrayType) {
            Type fromArrayComponent;
            Type toArrayComponent;
            try {
                fromArrayComponent = ((ArrayType) from).componentType();
                toArrayComponent = ((ArrayType) to).componentType();
            } catch (ClassNotLoadedException e) {
                return false;
            }
            if (fromArrayComponent instanceof PrimitiveType) {
                return fromArrayComponent.equals(toArrayComponent);
            }
            return !(toArrayComponent instanceof PrimitiveType) && isAssignable(fromArrayComponent, toArrayComponent);
        }
        return to.name().equals("java.lang.Object");
    }
    if (from instanceof ClassType) {
        ClassType superClass = ((ClassType) from).superclass();
        if (superClass != null && isAssignable(superClass, to)) {
            return true;
        }
        for (InterfaceType interfaceType : ((ClassType) from).interfaces()) {
            if (isAssignable(interfaceType, to)) {
                return true;
            }
        }
    }
    for (InterfaceType interfaceType : ((InterfaceType) from).subinterfaces()) {
        if (isAssignable(interfaceType, to)) {
            return true;
        }
    }
    return false;
}
Also used : ArrayType(com.sun.jdi.ArrayType) ClassNotLoadedException(com.sun.jdi.ClassNotLoadedException) InterfaceType(com.sun.jdi.InterfaceType) Type(com.sun.jdi.Type) ClassType(com.sun.jdi.ClassType) ArrayType(com.sun.jdi.ArrayType) PrimitiveType(com.sun.jdi.PrimitiveType) BooleanType(com.sun.jdi.BooleanType) ReferenceType(com.sun.jdi.ReferenceType) InterfaceType(com.sun.jdi.InterfaceType) BooleanType(com.sun.jdi.BooleanType) PrimitiveType(com.sun.jdi.PrimitiveType) ClassType(com.sun.jdi.ClassType)

Example 2 with InterfaceType

use of com.sun.jdi.InterfaceType in project intellij-community by JetBrains.

the class RuntimeTypeEvaluator method getCastableRuntimeType.

@Nullable
public static PsiType getCastableRuntimeType(Project project, Value value) {
    Type type = value.type();
    PsiType psiType = findPsiType(project, type);
    if (psiType != null) {
        return psiType;
    }
    if (type instanceof ClassType) {
        ClassType superclass = ((ClassType) type).superclass();
        if (superclass != null && !CommonClassNames.JAVA_LANG_OBJECT.equals(superclass.name())) {
            psiType = findPsiType(project, superclass);
            if (psiType != null) {
                return psiType;
            }
        }
        for (InterfaceType interfaceType : ((ClassType) type).interfaces()) {
            psiType = findPsiType(project, interfaceType);
            if (psiType != null) {
                return psiType;
            }
        }
    }
    return null;
}
Also used : InterfaceType(com.sun.jdi.InterfaceType) Type(com.sun.jdi.Type) ClassType(com.sun.jdi.ClassType) InterfaceType(com.sun.jdi.InterfaceType) ClassType(com.sun.jdi.ClassType) Nullable(org.jetbrains.annotations.Nullable)

Example 3 with InterfaceType

use of com.sun.jdi.InterfaceType in project jdk8u_jdk by JetBrains.

the class InvokableTypeImpl method allMethods.

/**
     * Shared implementation of {@linkplain ClassType#allMethods()} and
     * {@linkplain InterfaceType#allMethods()}
     * @return A list of all methods (recursively)
     */
public final List<Method> allMethods() {
    ArrayList<Method> list = new ArrayList<>(methods());
    ClassType clazz = superclass();
    while (clazz != null) {
        list.addAll(clazz.methods());
        clazz = clazz.superclass();
    }
    /*
         * Avoid duplicate checking on each method by iterating through
         * duplicate-free allInterfaces() rather than recursing
         */
    for (InterfaceType interfaze : getAllInterfaces()) {
        list.addAll(interfaze.methods());
    }
    return list;
}
Also used : InterfaceType(com.sun.jdi.InterfaceType) ArrayList(java.util.ArrayList) Method(com.sun.jdi.Method) ClassType(com.sun.jdi.ClassType)

Aggregations

ClassType (com.sun.jdi.ClassType)3 InterfaceType (com.sun.jdi.InterfaceType)3 Type (com.sun.jdi.Type)2 ArrayType (com.sun.jdi.ArrayType)1 BooleanType (com.sun.jdi.BooleanType)1 ClassNotLoadedException (com.sun.jdi.ClassNotLoadedException)1 Method (com.sun.jdi.Method)1 PrimitiveType (com.sun.jdi.PrimitiveType)1 ReferenceType (com.sun.jdi.ReferenceType)1 ArrayList (java.util.ArrayList)1 Nullable (org.jetbrains.annotations.Nullable)1