private PsiClass @NotNull [] getCachedClassesInDumbMode(String name, GlobalSearchScope scope) {
    Map<GlobalSearchScope, Map<String, PsiClass[]>> scopeMap = dereference(myDumbModeFullCache);
    if (scopeMap == null) {
      myDumbModeFullCache = new SoftReference<>(scopeMap = new ConcurrentHashMap<>());
    }
    Map<String, PsiClass[]> map = scopeMap.get(scope);
    if (map == null) {
      // before parsing all files in this package, try cheap heuristics: check if 'name' is a subpackage, check files named like 'name'
      PsiClass[] array = findClassesHeuristically(name, scope);
      if (array != null) return array;

      RecursionGuard.StackStamp stamp = RecursionManager.markStack();
      map = new HashMap<>();
      for (PsiClass psiClass : getClasses(scope)) {
        String psiClassName = psiClass.getName();
        if (psiClassName != null) {
          PsiClass[] existing = map.get(psiClassName);
          map.put(psiClassName, existing == null ? new PsiClass[]{psiClass} : ArrayUtil.append(existing, psiClass));
        }
      }
      if (stamp.mayCacheNow()) {
        scopeMap.put(scope, map);
      }
    }
    PsiClass[] classes = map.get(name);
    return classes == null ? PsiClass.EMPTY_ARRAY : classes;
  }
private PsiClass @NotNull [] getCachedClassesInDumbMode(String name, GlobalSearchScope scope)