void report(IvyXmlWriter xw) {
   xw.begin("METHOD");
   xw.field("NAME", method_name);
   xw.field("START", start_line);
   xw.field("END", end_line);
   xw.field("COUNT", called_count);
   xw.field("TOP", top_count);
   for (Map.Entry<String, Integer> ent : calls_counts.entrySet()) {
     xw.begin("CALLS");
     xw.field("NAME", ent.getKey());
     xw.field("COUNT", ent.getValue());
     xw.end("CALLS");
   }
   for (BlockCountData bcd : block_data.values()) {
     bcd.report(xw);
   }
   xw.end("METHOD");
 }
 MethodCountData(Element e) {
   class_name = null;
   method_name = computeMethodName(e);
   start_line = IvyXml.getAttrInt(e, "START");
   end_line = IvyXml.getAttrInt(e, "END");
   called_count = IvyXml.getAttrInt(e, "COUNT");
   top_count = IvyXml.getAttrInt(e, "TOP");
   calls_counts = new HashMap<String, Integer>();
   block_data = new HashMap<Integer, BlockCountData>();
   for (Element be : IvyXml.children(e, "CALLS")) {
     int ct = IvyXml.getAttrInt(be, "CALLCOUNT");
     String nm = computeMethodName(be);
     calls_counts.put(nm, ct);
   }
   for (Element be : IvyXml.children(e, "BLOCK")) {
     BlockCountData bcd = new BlockCountData(be);
     block_data.put(bcd.getBlockIndex(), bcd);
   }
 }