if (DBusConnection.EXCEPTION_DEBUG) IOOBe.printStackTrace();
if (DBusConnection.EXCEPTION_DEBUG && Debug.debug) Debug.print(Debug.ERR, IOOBe);
   public static int getJavaType(String dbus, List<Type> rv, int limit) throws DBusException   {      if (null == dbus || "".equals(dbus) || 0 == limit) return 0;      try {         int i = 0;         for (; i < dbus.length() && (-1 == limit || limit > rv.size()); i++)             switch(dbus.charAt(i)) {               case '(':                  int j = i+1;                  for (int c = 1; c > 0; j++) {                     if (')' == dbus.charAt(j)) c--;                     else if ('(' == dbus.charAt(j)) c++;                  }                  Vector<Type> contained = new Vector<Type>();                  int c = getJavaType(dbus.substring(i+1, j-1), contained, -1);                  rv.add(new DBusStructType(contained.toArray(new Type[0])));                  i = j;                  break;                                    case 'a':                  if ('{' == dbus.charAt(i+1)) {                     contained = new Vector<Type>();                     c = getJavaType(dbus.substring(i+2), contained, 2);                     rv.add(new DBusMapType(contained.get(0), contained.get(1)));                     i += (c+2);                  } else {                     contained = new Vector<Type>();                     c = getJavaType(dbus.substring(i+1), contained, 1);                     rv.add(new DBusListType(contained.get(0)));                     i += c;                  }                  break;               case 'v':                  rv.add(Variant.class);                  break;               case 'b':                  rv.add(Boolean.class);                  break;               case 'n':                  rv.add(Short.class);                  break;               case 'y':                  rv.add(Byte.class);                  break;               case 'o':                  rv.add(DBusInterface.class);                  break;               case 'q':                  rv.add(UInt16.class);                  break;               case 'i':                  rv.add(Integer.class);                  break;               case 'u':                  rv.add(UInt32.class);                  break;               case 'x':                  rv.add(Long.class);                  break;               case 't':                  rv.add(UInt64.class);                  break;               case 'd':                  rv.add(Double.class);                  break;               case 's':                  rv.add(String.class);                  break;               case 'g':                  rv.add(Type[].class);                  break;               default:                  throw new DBusException("Failed to parse DBus type signature: "+dbus+" ("+dbus.charAt(i)+")");            }         return i;      } catch (IndexOutOfBoundsException IOOBe) {         if (DBusConnection.EXCEPTION_DEBUG) IOOBe.printStackTrace();         throw new DBusException("Failed to parse DBus type signature: "+dbus);      }   }