private Map<VirtualFile, SearchId[]> calculateDirectInheritors(@NotNull PsiElement aClass,
                                                                 @NotNull FileType searchFileType,
                                                                 @NotNull CompilerHierarchySearchType searchType) {
    SearchScope scope = aClass.getUseScope();
    if (!(scope instanceof GlobalSearchScope)) return null;
    final CompilerElementInfo searchElementInfo = asCompilerElements(aClass, false, true);
    if (searchElementInfo == null) return null;
    CompilerRef searchElement = searchElementInfo.searchElements.get(0);

    if (!myReadDataLock.tryLock()) return null;
    try {
      if (myReader == null) return null;
      try {
        return myReader.getDirectInheritors(searchElement, ((GlobalSearchScope)scope), myDirtyScopeHolder.getDirtyScope(), searchFileType, searchType);
      }
      catch (StorageException e) {
        throw new RuntimeException(e);
      }
    } finally {
      myReadDataLock.unlock();
    }
  }
private Map<VirtualFile, SearchId[]> calculateDirectInheritors(@NotNull PsiElement aClass,
                                                                 @NotNull FileType searchFileType,
                                                                 @NotNull CompilerHierarchySearchType searchType)