if (ro.autostart) flags |= Message.Flags.AUTO_START;
if (!ro.autostart) flags |= Message.Flags.NO_AUTO_START;
   public static Object executeRemoteMethod(RemoteObject ro, Method m, DBusConnection conn, boolean async, Object... args) throws DBusExecutionException   {      Type[] ts = m.getGenericParameterTypes();      String sig = Marshalling.getDBusType(ts);      MethodCall call;      int flags;      if (ro.autostart) flags |= Message.Flags.AUTO_START;      if (async) flags |= Message.Flags.ASYNC;      if (m.isAnnotationPresent(DBus.Method.NoReply.class)) flags |= Message.Flags.NO_REPLY_EXPECTED;      if (null == ro.iface)         call = new MethodCall(ro.busname, ro.objectpath, null, m.getName(),flags, sig, args);      else         call = new MethodCall(ro.busname, ro.objectpath, DBusConnection.dollar_pattern.matcher(ro.iface.getName()).replaceAll("."), m.getName(), flags, sig, args);      synchronized (conn.outgoing) {         conn.outgoing.add(call);      }      if (async) return new DBusAsyncReply(call, m);      // get reply      if (m.isAnnotationPresent(DBus.Method.NoReply.class)) return null;      Message reply = call.getReply();      if (null == reply) throw new DBus.Error.NoReply("No reply within specified time");                     if (reply instanceof Error)         ((Error) reply).throwException();      try {         return convertRV(reply.getSig(), reply.getParameters(), m);      } catch (DBusException e) {         if (DBusConnection.EXCEPTION_DEBUG) e.printStackTrace();         throw new DBusExecutionException(e.getMessage());      }   }