void doRemove(@NotNull VirtualFile problemFile) {
    ProblemFileInfo old = myProblems.remove(problemFile);
    synchronized (myCheckingQueue) {
      myCheckingQueue.remove(problemFile);
    }
    if (old != null) {
      // firing outside lock
      if (hasProblemsFromExternalSources(problemFile)) {
        fireProblemsChanged(problemFile);
      }
      else {
        fireProblemsDisappeared(problemFile);
      }
    }
  }
void doRemove(@NotNull VirtualFile problemFile)