@Nullable
  List<PsiMember> getGlobalMembers(VirtualFile placeFile, Project project) {
    if (isExpensive(project)) return null;

    GlobalSearchScope scope = ResolveScopeManager.getInstance(project).getDefaultResolveScope(placeFile);
    if (!isCall) {
      PsiPackage pkg = JavaPsiFacade.getInstance(project).findPackage(referenceName);
      if (pkg != null && pkg.getDirectories(scope).length > 0) return null;
    }

    Map<Pair<ReferenceChainLink, GlobalSearchScope>, List<PsiMember>> cache =
      CachedValuesManager.getManager(project).getCachedValue(project, () -> {
        Map<Pair<ReferenceChainLink, GlobalSearchScope>, List<PsiMember>> map = ConcurrentFactoryMap.createMap(
          pair -> pair.first.calcMembersUnlessTooMany(pair.second));
        return CachedValueProvider.Result.create(map, PsiModificationTracker.MODIFICATION_COUNT);
      });
    List<PsiMember> candidates = cache.get(Pair.create(this, scope));
    if (candidates == null) {
      markExpensive(project);
      return null;
    }

    return ContainerUtil.filter(candidates, candidate -> canBeAccessible(placeFile, candidate));
  }
@Nullable
  List<PsiMember> getGlobalMembers(VirtualFile placeFile, Project project)