private void beforeDocumentsSaving() {
Document[] unsavedDocuments = FileDocumentManager.getInstance().getUnsavedDocuments();
LOGGER.info("[+] Start SaveActionManager#beforeAllDocumentsSaving");
LOGGER.info("Unsaved documents (" + unsavedDocuments.length + "): " + Arrays.asList(unsavedDocuments));
Map<Project, Set<PsiFile>> projectPsiFiles = new HashMap<>();
stream(unsavedDocuments)
.forEach(document -> stream(ProjectManager.getInstance().getOpenProjects())
.forEach(project -> Optional
.ofNullable(PsiDocumentManager.getInstance(project).getPsiFile(document))
.map(psiFile -> {
Set<PsiFile> psiFiles = projectPsiFiles.getOrDefault(project, new HashSet<>());
projectPsiFiles.put(project, psiFiles);
return psiFiles.add(psiFile);
})));
projectPsiFiles.forEach(((project, psiFiles) -> {
processPsiFilesIfNecessary(project, psiFiles, activate, normal);
}));
LOGGER.info("End SaveActionManager#beforeAllDocumentsSaving processed " + unsavedDocuments.length + " documents");
}