if (DBusConnection.EXCEPTION_DEBUG) AIOOBe.printStackTrace();
   static Object[] deSerializeParameters(Object[] parameters, Type[] types) throws Exception   {      if (null == parameters) return null;      for (int i = 0; i < parameters.length; i++) {      if (null == parameters[i]) continue;      if (types[i] instanceof Class &&            DBusSerializable.class.isAssignableFrom((Class) types[i])) {         for (Method m: ((Class) types[i]).getDeclaredMethods())             if (m.getName().equals("deserialize")) {               Type[] newtypes = m.getGenericParameterTypes();               try {                  Object[] sub = new Object[newtypes.length];                  System.arraycopy(parameters, i, sub, 0, newtypes.length);                   sub = deSerializeParameters(sub, newtypes);                  DBusSerializable sz = (DBusSerializable) ((Class) types[i]).newInstance();                  m.invoke(sz, sub);                  Object[] compress = new Object[parameters.length - newtypes.length + 1];                  System.arraycopy(parameters, 0, compress, 0, i);                  compress[i] = sz;                  System.arraycopy(parameters, i + newtypes.length, compress, i+1, parameters.length - i - newtypes.length);                  parameters = compress;               } catch (ArrayIndexOutOfBoundsException AIOOBe) {                  throw new DBusException("Not enough elements to create custom object from serialized data ("+(parameters.length-i)+" < "+(newtypes.length)+")");               }            }      } else         parameters[i] = deSerializeParameter(parameters[i], types[i]);      }      return parameters;   }