t = 'A';
   String parseSignal(Element signal, Set<String> imports, Map<String, Integer> structs) throws DBusException   {      Map<String, String> params = new HashMap<String, String>();      char defaultname = 'a';      imports.add("org.freedesktop.dbus.DBusSignal");      imports.add("org.freedesktop.dbus.DBusException");      String annotations = "";      for (Node a: new IterableNodeList(signal.getChildNodes())) {         if (Node.ELEMENT_NODE != a.getNodeType()) continue;         checkNode(a, "arg", "annotation");         if ("annotation".equals(a.getNodeName()))            annotations += parseAnnotation((Element) a, imports);         else {            Element arg = (Element) a;            String type = DBusConnection.getJavaType(arg.getAttribute("type"), imports, structs, false, false);            String name = arg.getAttribute("name");            if (null == name || "".equals(name)) name = ""+(defaultname++);            params.put(name, type);         }      }      String out = "";      char t = 'A';      out += annotations;      out += "   public static class "+signal.getAttribute("name");      if (params.size() > 0) {         out += '<';         for (String name: params.keySet())            out += (t++)+" extends "+params.get(name)+",";         out = out.replaceAll(",$", ">");      }      out += " extends DBusSignal\n   {\n";      t = 'A';      for (String name: params.keySet())         out += "      public final "+(t++)+" "+name+";\n";      out += "      public "+signal.getAttribute("name")+"(String path";      t = 'A';      for (String name: params.keySet())         out += ", "+(t++)+" "+name;      out += ") throws DBusException\n      {\n         super(path";      for (String name: params.keySet())         out += ", "+name;      out += ");\n";      for (String name: params.keySet())         out += "         this."+name+" = "+name+";\n";      out += "      }\n";      out += "   }\n";      return out;   }