void report(IvyXmlWriter xw) {
   xw.begin("COVERAGE");
   for (MethodCountData mcd : method_data.values()) {
     mcd.report(xw);
   }
   xw.end("COVERAGE");
 }
    UseMode getMethodUsage(String mthd) {
      MethodCountData mcd = method_data.get(mthd);
      if (mcd == null) {
        int idx0 = mthd.indexOf("(");
        if (idx0 < 0) return UseMode.NONE;
        String mthd0 = mthd.substring(0, idx0);
        String mthd1 = mthd.substring(idx0);
        for (Map.Entry<String, MethodCountData> ent : method_data.entrySet()) {
          String nm = ent.getKey();
          nm = nm.replace('/', '.');
          int idx = nm.indexOf("(");
          if (idx < 0) continue;
          if (mthd0.equals(nm.substring(0, idx))) {
            if (BumpLocation.compareParameters(mthd1, nm.substring(idx))) {
              mcd = ent.getValue();
              method_data.put(mthd, mcd);
              break;
            }
          }
        }
      }

      if (mcd != null) {
        if (mcd.getTopCount() > 0) return UseMode.DIRECT;
        if (mcd.getCalledCount() > 0) return UseMode.INDIRECT;
      }
      return UseMode.NONE;
    }
    CountData(Element e) {
      method_data = new HashMap<String, MethodCountData>();

      for (Element me : IvyXml.children(e, "METHOD")) {
        MethodCountData mcd = new MethodCountData(me);
        method_data.put(mcd.getName(), mcd);
      }
    }
 FileState usesClasses(Map<String, FileState> clsset, FileState st) {
   for (MethodCountData mcd : method_data.values()) {
     st = mcd.usesClasses(clsset, st);
   }
   return st;
 }