override fun beforeCheckin()

in idea-plugin/src/main/java/org/jetbrains/bunches/idea/vcs/BunchCheckinHandler.kt [72:124]


        override fun beforeCheckin(
            executor: CommitExecutor?,
            additionalDataConsumer: PairConsumer<Any, Any>?
        ): ReturnResult {
            if (!project.bunchFileCheckEnabled) return ReturnResult.COMMIT

            val extensions = BunchFileUtils.bunchExtensions(project)?.toSet() ?: return ReturnResult.COMMIT

            val forgottenFiles = mutableSetOf<VirtualFile>()
            val allFiles = mutableMapOf<PsiFile, List<PsiFile>>()
            val commitFiles = checkInProjectPanel.virtualFiles.toSet()


            for (file in commitFiles) {
                if (file.extension in extensions) continue
                val psiFile = getPsiFile(file) ?: continue

                val bunchFiles = getAllBunchFiles(psiFile.virtualFile, project)

                allFiles[psiFile] = bunchFiles.mapNotNull { getPsiFile(it) }.toList()
                forgottenFiles.addAll(bunchFiles.filter { it !in commitFiles })
            }

            if (forgottenFiles.isEmpty()) {
                return ReturnResult.COMMIT
            }

            when (Messages.showYesNoCancelDialog(
                project,
                "Several bunch files haven't been updated\nDo you want to review them before commit?",
                "Forgotten Bunch Files",
                "Yes",
                "No",
                CommonBundle.getCancelButtonText(),
                Messages.getWarningIcon()
            )) {
                YES -> {
                    val window = ToolWindowManager.getInstance(project).getToolWindow("Bunch Tool")
                        ?: error("Window with ID = `Bunch Tool` should be registered")
                    ServiceManager
                        .getService(project, BunchToolWindowFactory::class.java)
                        .createCommitCheckToolWindowContent(
                            window, forgottenFiles, allFiles,
                            checkInProjectPanel
                        )

                    return ReturnResult.CLOSE_WINDOW
                }
                NO -> return ReturnResult.COMMIT
            }

            return ReturnResult.CANCEL
        }