@RequiresEdt
    @Nullable
    Color get(@Nullable VirtualFile virtualFile) {
      if (virtualFile != null) {
        Color res = myFileColors.get(virtualFile);
        if (res != null) {
          return res == NULL_COLOR || res == COMPUTING_COLOR ? null : res;
        }
        else if (virtualFile.isValid()) {
          Map<VirtualFile, Color> fileColors = myFileColors;
          fileColors.put(virtualFile, COMPUTING_COLOR);
          ApplicationManager.getApplication().executeOnPooledThread(() -> {
            if (fileColors == myFileColors) { // check if it is obsolete already
              Color color = ReadAction.compute(() -> myColorsManager.getFileColor(virtualFile));
              EdtExecutorService.getInstance().execute(() -> {
                if (fileColors == myFileColors) { // check if it is obsolete already
                  fileColors.put(virtualFile, color == null ? NULL_COLOR : color);
                  if (!fileColors.containsValue(COMPUTING_COLOR)) {
                    repaint();
                  }
                }
              });
            }
          });
        }
      }
      else {
        return myColorsManager.getScopeColor(NonProjectFilesScope.NAME);
      }
      return null;
    }
@RequiresEdt
    @Nullable
    Color get(@Nullable VirtualFile virtualFile)