private OptionsContext getAndCachePropertyOptions(PropertyKey key) {
      OptionsContext propertyOptions =
          OptionsContextImpl.forProperty(sources, key.getEntity(), key.getProperty());

      OptionsContext cachedOptions = propertyContexts.putIfAbsent(key, propertyOptions);
      if (cachedOptions != null) {
        propertyOptions = cachedOptions;
      }

      return propertyOptions;
    }