if (DBusConnection.EXCEPTION_DEBUG) AIOOBe.printStackTrace();
if (DBusConnection.EXCEPTION_DEBUG && Debug.debug) Debug.print(Debug.ERR, AIOOBe);
   static Object[] deSerializeParameters(Object[] parameters, Type[] types, DBusConnection conn) throws Exception   {      if (null == parameters) return null;      for (int i = 0; i < parameters.length; i++) {         if (Debug.debug) Debug.print(Debug.VERBOSE, "Deserializing "+i+" from "+parameters[i]+" to "+types[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, conn);                     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) {                     if (DBusConnection.EXCEPTION_DEBUG) AIOOBe.printStackTrace();                     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], conn);      }      return parameters;   }