ClassType[] ifaces = c.getInterfaces(); for (int i = 0; i < ifaces.length; i++) {     if ((s + "*").indexOf("*" + ifaces[i].getJavaRepr() + "*") < 0) { int mods = ifaces[i].getWrapper().getModifiers(); if (Modifier.isPublic(mods) || Modifier.isProtected(mods)) { s += "*" + ifaces[i].getJavaRepr(); } s = mkIfaceString(ifaces[i].getWrapper(), s); } }   if (c.getSuperclass() != null) { s = mkIfaceString(c.getSuperclass().getWrapper(), s); } return s;
return mkIfaceString(c, s, null, c);
  public static String mkIfaceString(ClassWrapper c, String s) {    // First iterate over the class's direct superinterfaces.    ClassType[] ifaces = c.getInterfaces();    for (int i = 0; i < ifaces.length; i++) {      // If the string does not already contain the interface, and the      // interface is public/protected, then add it to the string and      // also process *its* superinterfaces, recursively.      if ((s + "*").indexOf("*" + ifaces[i].getJavaRepr() + "*") < 0) {        int mods = ifaces[i].getWrapper().getModifiers();        if (Modifier.isPublic(mods) || Modifier.isProtected(mods)) {          s += "*" + ifaces[i].getJavaRepr();        }        s = mkIfaceString(ifaces[i].getWrapper(), s);      }    }    // Finally, recursively process the class's superclass, if it has one.    if (c.getSuperclass() != null) {      s = mkIfaceString(c.getSuperclass().getWrapper(), s);    }    return s;  }