private @NotNull List<AnnotationData> collectExternalAnnotations(@NotNull Object cacheKey,
                                                                   @NotNull Supplier<? extends List<AnnotationData>> dataSupplier) {
    if (!hasAnyAnnotationsRoots()) return Collections.emptyList();
    List<AnnotationData> cached;
    while (true) {
      cached = (List<AnnotationData>)cache.get(cacheKey);
      if (cached == NO_DATA || !cached.isEmpty()) return cached;
      List<AnnotationData> computed = dataSupplier.get();
      if (cache.replace(cacheKey, cached, computed)) {
        cached = computed;
        break;
      }
    }
    return cached;
  }
private @NotNull List<AnnotationData> collectExternalAnnotations(@NotNull Object cacheKey,
                                                                   @NotNull Supplier<? extends List<AnnotationData>> dataSupplier)