code: private synchronized void tryProcessMethod(Class<?> clazz, String methodName, boolean expectedToExist, Class<?> ... parameterTypes) {
          
          final Method method;
          try {
              method = clazz.getMethod(methodName, parameterTypes);
          } catch (NoSuchMethodException ex) {
              Level logLevel = expectedToExist ? Level.INFO : Level.CONFIG;
              if (LOGGER.isLoggable(logLevel)) {
                  String methodSpec = String.format("%s(%s)", methodName, StringUtils.join(parameterTypes, ","));
                  LOGGER.log(logLevel, "No method {0} for class {1}", new Object[] {methodSpec, clazz});
              }
              return;
          } catch (RuntimeException ex) {
              Level logLevel = expectedToExist ? Level.INFO : Level.CONFIG;
              if (LOGGER.isLoggable(logLevel)) {
                  String methodSpec = String.format("%s(%s)", methodName, StringUtils.join(parameterTypes, ","));
                  LOGGER.log(logLevel, "Failed to retrieve the method {0} for class {1}", new Object[] {methodSpec, clazz});
              }
              return;
          }
          
          Class<?> returnType = method.getReturnType();
              // We do not veto the the root class
              if (ParameterValue.class.isAssignableFrom(returnType)) {
                  if (!ParameterValue.class.equals(returnType)) {
                      // Add this class to the cache
                      paramValueCache_maskedClasses.add(returnType.getName());
                  }
              }
      }
docs: Processes the methods in the {@link ParameterValue} class and caches all ParameterValue implementations as ones requiring masking.
  @param clazz Class
  @param methodName Method name
  @param parameterTypes Parameters