private boolean orderVincentToCleanTheCar(@NotNull VirtualFile virtualFile, @NotNull ProgressIndicator progressIndicator) throws ProcessCanceledException {
    if (!isToBeHighlighted(virtualFile)) {
      clearProblems(virtualFile);
      return true; // the file is going to be red waved no more
    }
    if (hasSyntaxErrors(virtualFile)) {
      // optimization: it's no use anyway to try to clean the file with syntax errors, only changing the file itself can help
      return false;
    }
    if (myProject.isDisposed()) return false;
    if (willBeHighlightedAnyway(virtualFile)) return false;
    PsiFile psiFile = PsiManager.getInstance(myProject).findFile(virtualFile);
    if (psiFile == null) return false;
    Document document = FileDocumentManager.getInstance().getDocument(virtualFile);
    if (document == null) return false;

    AtomicReference<HighlightInfo> error = new AtomicReference<>();
    boolean hasErrorElement = false;
    try {
      ProperTextRange visibleRange = new ProperTextRange(0, document.getTextLength());
      HighlightingSessionImpl.getOrCreateHighlightingSession(psiFile, (DaemonProgressIndicator)progressIndicator, visibleRange);
      GeneralHighlightingPass pass = new NasueousGeneralHighlightingPass(psiFile, document, visibleRange, error);
      pass.collectInformation(progressIndicator);
      hasErrorElement = pass.myHasErrorElement;
    }
    catch (ProcessCanceledException e) {
      if (error.get() != null) {
        ProblemImpl problem = new ProblemImpl(virtualFile, error.get(), hasErrorElement);
        reportProblems(virtualFile, Collections.singleton(problem));
      }
      return false;
    }
    clearProblems(virtualFile);
    return true;
  }
private boolean orderVincentToCleanTheCar(@NotNull VirtualFile virtualFile, @NotNull ProgressIndicator progressIndicator)