/** * Create a set which contains the given elements. */ public ArraySet(E[] elements) { this(); for (E element : elements) { add(element); } }
@SuppressWarnings("unchecked") final public boolean addAll(Collection<? extends E> s) { boolean ret = false; if (!(s instanceof ArraySet)) { return super.addAll(s); } ArraySet<?> as = (ArraySet<?>) s; int asSize = as.size(); Object[] asElements = as.elements; for (int i = 0; i < asSize; i++) { ret = add((E) asElements[i]) | ret; } return ret; }
/** * Create a set which contains the given elements. */ public ArraySet(E[] elements) { this(); for (E element : elements) add(element); }
/** * Create a set which contains the given elements. */ public ArraySet(E[] elements) { this(); for (E element : elements) add(element); }
@SuppressWarnings("unchecked") final public boolean addAll(Collection<? extends E> s) { boolean ret = false; if( !(s instanceof ArraySet) ) return super.addAll(s); ArraySet as = (ArraySet) s; int asSize = as.size(); Object[] asElements = as.elements; for (int i=0; i<asSize; i++) ret = add( (E)asElements[i] ) | ret; return ret; }
@SuppressWarnings("unchecked") final public boolean addAll(Collection<? extends E> s) { boolean ret = false; if( !(s instanceof ArraySet) ) return super.addAll(s); ArraySet as = (ArraySet) s; int asSize = as.size(); Object[] asElements = as.elements; for (int i=0; i<asSize; i++) ret = add( (E)asElements[i] ) | ret; return ret; }
/** Given a set of definite receiver types, returns a list of possible targets. */ public List resolveConcreteDispatch(List classes, SootMethod m) { m.getDeclaringClass().checkLevel(SootClass.HIERARCHY); checkState(); ArraySet s = new ArraySet(); Iterator classesIt = classes.iterator(); while (classesIt.hasNext()) { Object cls = classesIt.next(); if (cls instanceof RefType) s.add(resolveConcreteDispatch(((RefType)cls).getSootClass(), m)); else if (cls instanceof ArrayType) { s.add(resolveConcreteDispatch((RefType.v("java.lang.Object")).getSootClass(), m)); } else throw new RuntimeException("Unable to resolve concrete dispatch of type "+ cls); } List l = new ArrayList(); l.addAll(s); return Collections.unmodifiableList(l); }
/** Given a set of definite receiver types, returns a list of possible targets. */ public List resolveConcreteDispatch(List classes, SootMethod m) { m.getDeclaringClass().checkLevel(SootClass.HIERARCHY); checkState(); ArraySet s = new ArraySet(); Iterator classesIt = classes.iterator(); while (classesIt.hasNext()) { Object cls = classesIt.next(); if (cls instanceof RefType) s.add(resolveConcreteDispatch(((RefType)cls).getSootClass(), m)); else if (cls instanceof ArrayType) { s.add(resolveConcreteDispatch((RefType.v("java.lang.Object")).getSootClass(), m)); } else throw new RuntimeException("Unable to resolve concrete dispatch of type "+ cls); } List l = new ArrayList(); l.addAll(s); return Collections.unmodifiableList(l); }
/** Given an abstract dispatch to an object of type c and a method m, gives * a list of possible receiver methods. */ public List resolveAbstractDispatch(SootClass c, SootMethod m) { c.checkLevel(SootClass.HIERARCHY); m.getDeclaringClass().checkLevel(SootClass.HIERARCHY); checkState(); Iterator<SootClass> classesIt = null; if (c.isInterface()) { classesIt = getImplementersOf(c).iterator(); HashSet<SootClass> classes = new HashSet<SootClass>(); while (classesIt.hasNext()) classes.addAll(getSubclassesOfIncluding(classesIt.next())); classesIt = classes.iterator(); } else classesIt = getSubclassesOfIncluding(c).iterator(); ArraySet s = new ArraySet(); while (classesIt.hasNext()) { SootClass cl = classesIt.next(); if( Modifier.isAbstract( cl.getModifiers() ) ) continue; s.add(resolveConcreteDispatch(cl, m)); } List l = new ArrayList(); l.addAll(s); return Collections.unmodifiableList(l); }
/** Given an abstract dispatch to an object of type c and a method m, gives * a list of possible receiver methods. */ public List resolveAbstractDispatch(SootClass c, SootMethod m) { c.checkLevel(SootClass.HIERARCHY); m.getDeclaringClass().checkLevel(SootClass.HIERARCHY); checkState(); Iterator<SootClass> classesIt = null; if (c.isInterface()) { classesIt = getImplementersOf(c).iterator(); HashSet<SootClass> classes = new HashSet<SootClass>(); while (classesIt.hasNext()) classes.addAll(getSubclassesOfIncluding(classesIt.next())); classesIt = classes.iterator(); } else classesIt = getSubclassesOfIncluding(c).iterator(); ArraySet s = new ArraySet(); while (classesIt.hasNext()) { SootClass cl = classesIt.next(); if( Modifier.isAbstract( cl.getModifiers() ) ) continue; s.add(resolveConcreteDispatch(cl, m)); } List l = new ArrayList(); l.addAll(s); return Collections.unmodifiableList(l); }