@NotNull
    @Override
    public Result<ConcurrentMap<TypeEvalConstraints, T>> compute() {
      // This method is called if cache is empty. Create new map for it.
      // Concurrent map allows several threads to call get and put, so it is thread safe but not atomic
      final ConcurrentMap<TypeEvalConstraints, T> map = ContainerUtil.createConcurrentSoftValueMap();
      return new Result<>(map, PsiModificationTracker.MODIFICATION_COUNT);
    }
@NotNull
    @Override
    public Result<ConcurrentMap<TypeEvalConstraints, T>> compute()