code: @SafeVarargs
      public static Method getDeclaredMethod(final Class<?> cls, final String methodName, final Class<?>... parameterTypes) {
          Map<String, Map<Class<?>[], Method>> methodNamePool = classDeclaredMethodPool.get(cls);
          Map<Class<?>[], Method> methodPool = methodNamePool == null ? null : methodNamePool.get(methodName);
  
          Method method = null;
  
          if (methodPool != null) {
              method = methodPool.get(parameterTypes);
          }
  
          if (method == null) {
              method = internalGetDeclaredMethod(cls, methodName, parameterTypes);
  
              // SHOULD NOT set it true here.
              // if (method != null) {
              // method.setAccessible(true);
              // }
  
              if (method != null) {
                  if (methodNamePool == null) {
                      methodNamePool = new ConcurrentHashMap<>();
                      classDeclaredMethodPool.put(cls, methodNamePool);
                  }
  
                  if (methodPool == null) {
                      methodPool = new ArrayHashMap<>(ConcurrentHashMap.class);
                      methodNamePool.put(methodName, methodPool);
                  }
  
                  methodPool.put(parameterTypes.clone(), method);
              }
          }
  
          return method;
      }
docs: Returns the method declared in the specified {@code cls} with the specified {@code methodName} and {@code parameterTypes}.
  
  @param cls
  @param methodName
  @param parameterTypes
  @return {@code null} if no method is found