public static @NotNull <T> ClearableLazyValue<T> createAtomicClearableLazyValue(@NotNull Supplier<? extends T> computable) {
    return new ClearableLazyValue<>() {
      private long myExternalChangesCount = getCurrentExternalChangesCount();

      @Override
      protected @NotNull T compute() {
        return computable.get();
      }

      @Override
      public synchronized @NotNull T getValue() {
        final long curExternalChangesCount = getCurrentExternalChangesCount();
        if (curExternalChangesCount != myExternalChangesCount) {
          myExternalChangesCount = curExternalChangesCount;
          drop(); // drop cache
        }
        return super.getValue();
      }

      private static long getCurrentExternalChangesCount() {
        return SaveAndSyncHandler.getInstance().getExternalChangesTracker().getModificationCount();
      }
    };
  }
public static @NotNull <T> ClearableLazyValue<T> createAtomicClearableLazyValue(@NotNull Supplier<? extends T> computable)