org_apache_struts2_session_StrutsJUnit4SessionTestCaseTest_java
freemarker.ext.beans.OverloadedMethodsSubset
protected Class getCommonSupertypeForUnwrappingHint(Class c1, Class c2) {
        if (c1 == c2) {
            return c1;
        }
        if (this.bugfixed) {
            boolean c2WasPrim;
            boolean c1WasPrim;
            if (c1.isPrimitive()) {
                c1 = ClassUtil.primitiveClassToBoxingClass(c1);
                c1WasPrim = true;
            } else {
                c1WasPrim = false;
            }
            if (c2.isPrimitive()) {
                c2 = ClassUtil.primitiveClassToBoxingClass(c2);
                c2WasPrim = true;
            } else {
                c2WasPrim = false;
            }
            if (c1 == c2) {
                return c1;
            }
            if (Number.class.isAssignableFrom(c1) && Number.class.isAssignableFrom(c2)) {
                return Number.class;
            }
            if (c1WasPrim || c2WasPrim) {
                return Object.class;
            }
        } else if (c2.isPrimitive()) {
            if (c2 == Byte.TYPE) {
                c2 = Byte.class;
            } else if (c2 == Short.TYPE) {
                c2 = Short.class;
            } else if (c2 == Character.TYPE) {
                c2 = Character.class;
            } else if (c2 == Integer.TYPE) {
                c2 = Integer.class;
            } else if (c2 == Float.TYPE) {
                c2 = Float.class;
            } else if (c2 == Long.TYPE) {
                c2 = Long.class;
            } else if (c2 == Double.TYPE) {
                c2 = Double.class;
            }
        }
        Set commonTypes = _MethodUtil.getAssignables(c1, c2);
        commonTypes.retainAll(_MethodUtil.getAssignables(c2, c1));
        if (commonTypes.isEmpty()) {
            return Object.class;
        }
        ArrayList<Class> max = new ArrayList<Class>();
        block0: for (Class clazz : commonTypes) {
            Iterator maxIter = max.iterator();
            while (maxIter.hasNext()) {
                Class maxClazz = (Class)maxIter.next();
                if (_MethodUtil.isMoreOrSameSpecificParameterType(maxClazz, clazz, false, 0) != 0) continue block0;
                if (_MethodUtil.isMoreOrSameSpecificParameterType(clazz, maxClazz, false, 0) == 0) continue;
                maxIter.remove();
            }
            max.add(clazz);
        }
        if (max.size() > 1) {
            if (this.bugfixed) {
                Iterator it = max.iterator();
                while (it.hasNext()) {
                    Class maxCl = (Class)it.next();
                    if (maxCl.isInterface()) continue;
                    if (maxCl != Object.class) {
                        return maxCl;
                    }
                    it.remove();
                }
                max.remove(Cloneable.class);
                if (max.size() > 1) {
                    max.remove(Serializable.class);
                    if (max.size() > 1) {
                        max.remove(Comparable.class);
                        if (max.size() > 1) {
                            return Object.class;
                        }
                    }
                }
            } else {
                return Object.class;
            }
        }
        return (Class)max.get(0);
    }
 -> java.lang.Class.isPrimitive(): boolean -> java.lang.Class.isPrimitive(): boolean -> java.lang.Class.isAssignableFrom(java.lang.Class): boolean -> java.lang.Class.isAssignableFrom(java.lang.Class): boolean -> java.lang.Class.getSuperclass(): java.lang.Class -> java.lang.Class.isAssignableFrom(java.lang.Class): boolean -> java.util.Set.add(java.lang.Object): boolean -> java.lang.Class.getSuperclass(): java.lang.Class -> java.lang.Class.getInterfaces(): java.lang.Class[] -> java.lang.Class.getInterfaces(): java.lang.Class[] -> java.lang.Class.isAssignableFrom(java.lang.Class): boolean -> java.util.Set.add(java.lang.Object): boolean -> java.lang.Class.getSuperclass(): java.lang.Class -> java.lang.Class.getInterfaces(): java.lang.Class[] -> java.lang.Class.isAssignableFrom(java.lang.Class): boolean -> java.util.Set.add(java.lang.Object): boolean -> java.lang.Class.getSuperclass(): java.lang.Class -> java.lang.Class.getInterfaces(): java.lang.Class[] -> java.lang.Class.isAssignableFrom(java.lang.Class): boolean -> java.lang.Class.getSuperclass(): java.lang.Class -> java.lang.Class.isAssignableFrom(java.lang.Class): boolean -> java.util.Set.add(java.lang.Object): boolean -> java.lang.Class.getSuperclass(): java.lang.Class -> java.lang.Class.getInterfaces(): java.lang.Class[] -> java.lang.Class.getInterfaces(): java.lang.Class[] -> java.lang.Class.isAssignableFrom(java.lang.Class): boolean -> java.util.Set.add(java.lang.Object): boolean -> java.lang.Class.getSuperclass(): java.lang.Class -> java.lang.Class.getInterfaces(): java.lang.Class[] -> java.lang.Class.isAssignableFrom(java.lang.Class): boolean -> java.util.Set.add(java.lang.Object): boolean -> java.lang.Class.getSuperclass(): java.lang.Class -> java.lang.Class.getInterfaces(): java.lang.Class[] -> java.util.Set.retainAll(java.util.Collection): boolean -> java.util.Set.isEmpty(): boolean -> java.util.Set.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.List.add(java.lang.Object): boolean -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.Class.isAssignableFrom(java.lang.Class): boolean -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.Class.isAssignableFrom(java.lang.Class): boolean -> java.lang.Class.isPrimitive(): boolean -> java.lang.Class.isPrimitive(): boolean -> java.lang.Class.isAssignableFrom(java.lang.Class): boolean -> java.lang.Class.isPrimitive(): boolean -> java.lang.Class.isPrimitive(): boolean -> java.util.Iterator.hasNext(): boolean -> java.util.List.add(java.lang.Object): boolean -> java.util.Iterator.hasNext(): boolean -> java.util.List.size(): int -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.Class.isInterface(): boolean -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.Class.isInterface(): boolean -> java.util.Iterator.hasNext(): boolean -> java.util.List.remove(java.lang.Object): boolean -> java.util.List.size(): int -> java.util.List.get(int): java.lang.Object
 [CALL] -> java.lang.Class.isPrimitive(): boolean -> java.lang.Class.isPrimitive(): boolean -> java.lang.Class.isAssignableFrom(java.lang.Class): boolean [CALL] [CALL] -> java.lang.Class.isAssignableFrom(java.lang.Class): boolean -> java.lang.Class.getSuperclass(): java.lang.Class [CALL] -> java.lang.Class.isAssignableFrom(java.lang.Class): boolean -> java.util.Set.add(java.lang.Object): boolean -> java.lang.Class.getSuperclass(): java.lang.Class -> java.lang.Class.getInterfaces(): java.lang.Class[] [EXIT] -> java.lang.Class.getInterfaces(): java.lang.Class[] [CALL] -> java.lang.Class.isAssignableFrom(java.lang.Class): boolean -> java.util.Set.add(java.lang.Object): boolean -> java.lang.Class.getSuperclass(): java.lang.Class -> java.lang.Class.getInterfaces(): java.lang.Class[] [EXIT] [CALL] -> java.lang.Class.isAssignableFrom(java.lang.Class): boolean -> java.util.Set.add(java.lang.Object): boolean -> java.lang.Class.getSuperclass(): java.lang.Class -> java.lang.Class.getInterfaces(): java.lang.Class[] [EXIT] [EXIT] [EXIT] [CALL] [CALL] -> java.lang.Class.isAssignableFrom(java.lang.Class): boolean -> java.lang.Class.getSuperclass(): java.lang.Class [CALL] -> java.lang.Class.isAssignableFrom(java.lang.Class): boolean -> java.util.Set.add(java.lang.Object): boolean -> java.lang.Class.getSuperclass(): java.lang.Class -> java.lang.Class.getInterfaces(): java.lang.Class[] [EXIT] -> java.lang.Class.getInterfaces(): java.lang.Class[] [CALL] -> java.lang.Class.isAssignableFrom(java.lang.Class): boolean -> java.util.Set.add(java.lang.Object): boolean -> java.lang.Class.getSuperclass(): java.lang.Class -> java.lang.Class.getInterfaces(): java.lang.Class[] [EXIT] [CALL] -> java.lang.Class.isAssignableFrom(java.lang.Class): boolean -> java.util.Set.add(java.lang.Object): boolean -> java.lang.Class.getSuperclass(): java.lang.Class -> java.lang.Class.getInterfaces(): java.lang.Class[] [EXIT] [EXIT] [EXIT] -> java.util.Set.retainAll(java.util.Collection): boolean -> java.util.Set.isEmpty(): boolean -> java.util.Set.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.List.add(java.lang.Object): boolean -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] -> java.lang.Class.isAssignableFrom(java.lang.Class): boolean [EXIT] -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] -> java.lang.Class.isAssignableFrom(java.lang.Class): boolean -> java.lang.Class.isPrimitive(): boolean -> java.lang.Class.isPrimitive(): boolean [EXIT] [CALL] -> java.lang.Class.isAssignableFrom(java.lang.Class): boolean -> java.lang.Class.isPrimitive(): boolean -> java.lang.Class.isPrimitive(): boolean [EXIT] -> java.util.Iterator.hasNext(): boolean -> java.util.List.add(java.lang.Object): boolean -> java.util.Iterator.hasNext(): boolean -> java.util.List.size(): int -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.Class.isInterface(): boolean -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.Class.isInterface(): boolean -> java.util.Iterator.hasNext(): boolean -> java.util.List.remove(java.lang.Object): boolean -> java.util.List.size(): int -> java.util.List.get(int): java.lang.Object [EXIT]