private void doRegisterFixes()

in dmServer/src/main/java/com/intellij/dmserver/intention/DmServerUnresolvedReferenceQuickFixProvider.java [36:92]


  private void doRegisterFixes(PsiJavaCodeReferenceElement reference, QuickFixActionRegistrar registrar) {
    final PsiElement psiElement = reference.getElement();
    @NonNls final String referenceName = reference.getRangeInElement().substring(psiElement.getText());

    Project project = psiElement.getProject();
    PsiFile containingFile = psiElement.getContainingFile();
    if (containingFile == null) return;

    VirtualFile classVFile = containingFile.getVirtualFile();
    if (classVFile == null) return;

    final ProjectFileIndex fileIndex = ProjectRootManager.getInstance(project).getFileIndex();
    final Module currentModule = fileIndex.getModuleForFile(classVFile);
    if (currentModule == null) return;


    if ("TestCase".equals(referenceName) || isAnnotation(psiElement) && isJunitAnnotationName(referenceName)) {
      return;
    }

    if (isAnnotation(psiElement) && AnnotationUtil.isJetbrainsAnnotation(referenceName)) {
      return;
    }

    Set<Object> librariesToAdd = new HashSet<>();
    final JavaPsiFacade facade = JavaPsiFacade.getInstance(psiElement.getProject());
    PsiClass[] classes = PsiShortNamesCache.getInstance(project).getClassesByName(referenceName, GlobalSearchScope.allScope(project));
    for (final PsiClass aClass : classes) {
      if (!facade.getResolveHelper().isAccessible(aClass, psiElement, aClass)) continue;
      PsiFile psiFile = aClass.getContainingFile();
      if (psiFile == null) continue;
      VirtualFile virtualFile = psiFile.getVirtualFile();
      if (virtualFile == null) continue;

      ModuleFileIndex moduleFileIndex = ModuleRootManager.getInstance(currentModule).getFileIndex();
      for (OrderEntry orderEntry : fileIndex.getOrderEntriesForFile(virtualFile)) {
        if (orderEntry instanceof LibraryOrderEntry) {
          LibraryOrderEntry libraryEntry = (LibraryOrderEntry)orderEntry;
          Library library = libraryEntry.getLibrary();
          if (library == null) continue;
          VirtualFile[] files = library.getFiles(OrderRootType.CLASSES);
          if (files.length == 0) continue;


          VirtualFile jar = files[0];

          if (jar == null ||
              libraryEntry.isModuleLevel() && !librariesToAdd.add(jar) ||
              !librariesToAdd.add(library) ||
              moduleFileIndex.getOrderEntryForFile(virtualFile) != null) {
            continue;
          }
          registrar.register(new AddPackageIntentionAction(reference, aClass, libraryEntry));
        }
      }
    }
  }