code: @SuppressWarnings("unchecked")
      private void decorateCanInvoke(Map<String, Object> mBeanInfo, String method, boolean canInvoke) {
          LOG.trace("decorateCanInvoke: {} - {}", method, canInvoke);
  
          // op
          String[] methodNameAndArgs = method.split("[()]");
          Object op = ((Map<String, Object>) mBeanInfo.get("op")).get(methodNameAndArgs[0]);
          if (op instanceof List) { // for method overloading
              List<Map<String, Object>> overloaded = (List<Map<String, Object>>) op;
              for (Map<String, Object> m : overloaded) {
                  String args = argsToString((List<Map<String, String>>) m.get("args"));
                  if ((methodNameAndArgs.length == 1 && args.equals(""))
                      || (methodNameAndArgs.length > 1 && args.equals(methodNameAndArgs[1]))) {
                      m.put("canInvoke", canInvoke);
                      LOG.trace("  op: {}({}) - {}", methodNameAndArgs[0], args, m.get("canInvoke"));
                      break;
                  }
              }
          } else {
              ((Map<String, Object>) op).put("canInvoke", canInvoke);
              LOG.trace("  op: {} - {}", method, ((Map<String, Object>) op).get("canInvoke"));
          }
  
          // opByString
          Map<String, Object> opByString = (Map<String, Object>) mBeanInfo.get("opByString");
          Map<String, Object> opByStringMethod = (Map<String, Object>) opByString.get(method);
          opByStringMethod.put("canInvoke", canInvoke);
          LOG.trace("  opByString: {} - {}", method, opByStringMethod.get("canInvoke"));
      }
docs: Decorates {@link MBeanInfo} operations with "canInvoke" entries.
  Note both "op" and "opByString" may be used in HawtIO.
  @param mBeanInfo
  @param method
  @param canInvoke