示例#1
0
  /** Returns a list of subinterfaces of c, excluding itself. */
  public List<SootClass> getSubinterfacesOf(SootClass c) {
    c.checkLevel(SootClass.HIERARCHY);
    if (!c.isInterface()) throw new RuntimeException("interface needed!");

    checkState();

    // If already cached, return the value.
    if (interfaceToSubinterfaces.get(c) != null) return interfaceToSubinterfaces.get(c);

    // Otherwise, build up the hashmap.
    List<SootClass> l = new ArrayList<SootClass>();

    ListIterator it = interfaceToDirSubinterfaces.get(c).listIterator();
    while (it.hasNext()) {
      l.addAll(getSubinterfacesOfIncluding((SootClass) it.next()));
    }

    interfaceToSubinterfaces.put(c, Collections.unmodifiableList(l));

    return Collections.unmodifiableList(l);
  }
示例#2
0
  /** Returns a list of subclasses of c, excluding itself. */
  public List<SootClass> getSubclassesOf(SootClass c) {
    c.checkLevel(SootClass.HIERARCHY);
    if (c.isInterface()) throw new RuntimeException("class needed!");

    checkState();

    // If already cached, return the value.
    if (classToSubclasses.get(c) != null) return classToSubclasses.get(c);

    // Otherwise, build up the hashmap.
    List<SootClass> l = new ArrayList<SootClass>();

    ListIterator it = classToDirSubclasses.get(c).listIterator();
    while (it.hasNext()) {
      SootClass cls = (SootClass) it.next();
      if (cls.resolvingLevel() < SootClass.HIERARCHY) continue;
      l.addAll(getSubclassesOfIncluding(cls));
    }

    l = Collections.unmodifiableList(l);
    classToSubclasses.put(c, l);

    return l;
  }