docs: private Method setupSetterOrGetter(Class targetClass,
              HashMap<Class, HashMap<String, Method>> propertyMapMap,
              String prefix, Class valueType) {
          Method setterOrGetter = null;
          try {
              // Have to lock property map prior to reading it, to guard against
              // another thread putting something in there after we've checked it
              // but before we've added an entry to it
              mPropertyMapLock.writeLock().lock();
              HashMap<String, Method> propertyMap = propertyMapMap.get(targetClass);
              if (propertyMap != null) {
                  setterOrGetter = propertyMap.get(mPropertyName);
              }
              if (setterOrGetter == null) {
                  setterOrGetter = getPropertyFunction(targetClass, prefix, valueType);
                  if (propertyMap == null) {
                      propertyMap = new HashMap<String, Method>();
                      propertyMapMap.put(targetClass, propertyMap);
                  }
                  propertyMap.put(mPropertyName, setterOrGetter);
              }
          } finally {
              mPropertyMapLock.writeLock().unlock();
          }
          return setterOrGetter;
      }