public static <T> Supplier<T> softLazy(Supplier<? extends T> supplier) {
    return new Supplier<T>() {
      private SoftReference<T> ref;

      @Override
      public T get() {
        T value = com.intellij.reference.SoftReference.dereference(ref);
        if (value == null) {
          value = supplier.get();
          ref = new SoftReference<T>(value);
        }
        return value;
      }
    };
  }
public static <T> Supplier<T> softLazy(Supplier<? extends T> supplier)