public CheckinHandler createHandler()

in src/main/java/org/jetbrains/plugins/spotbugs/core/CheckinHandlerFactoryImpl.java [51:131]


	public CheckinHandler createHandler(@NotNull final CheckinProjectPanel panel, @NotNull final CommitContext commitContext) {
		return new CheckinHandler() {
			@Override
			public RefreshableOnComponent getBeforeCheckinConfigurationPanel() {
				final JCheckBox run = new JCheckBox(ResourcesLoader.getString("checkin.text"));
				return new RefreshableOnComponent() {
					public JComponent getComponent() {
						return JBUI.Panels.simplePanel().addToLeft(run);
					}

					@Override
					public void refresh() {
					}

					@Override
					public void saveState() {
						WorkspaceSettings.getInstance(panel.getProject()).analyzeBeforeCheckIn = run.isSelected();
					}

					@Override
					public void restoreState() {
						run.setSelected(WorkspaceSettings.getInstance(panel.getProject()).analyzeBeforeCheckIn);
					}
				};
			}

			@Override
			public ReturnResult beforeCheckin(@Nullable final CommitExecutor executor, final PairConsumer<Object, Object> additionalDataConsumer) {
				if (!WorkspaceSettings.getInstance(panel.getProject()).analyzeBeforeCheckIn) {
					return super.beforeCheckin(executor, additionalDataConsumer);
				}

				new FindBugsStarter(
						panel.getProject(),
						"Running SpotBugs analysis for affected files...",
						ProgressStartType.Modal
				) {
					@Override
					protected boolean isCompileBeforeAnalyze() {
						return false; // CompilerManager#make start asynchronous task
					}

					@Override
					protected void createCompileScope(@NotNull final CompilerManager compilerManager, @NotNull final Consumer<CompileScope> consumer) {
						throw new UnsupportedOperationException();
					}

					@Override
					protected boolean configure(@NotNull final ProgressIndicator indicator, @NotNull final FindBugsProjects projects, final boolean justCompiled) {
						final Collection<VirtualFile> virtualFiles = panel.getVirtualFiles();
						projects.addFiles(virtualFiles, false, hasTests(virtualFiles));
						return true;
					}
				}.start();
				final ToolWindowPanel toolWindowPanel = ToolWindowPanel.getInstance(panel.getProject());
				if (toolWindowPanel != null && toolWindowPanel.getResult() != null) {
					if (!toolWindowPanel.getResult().isBugCollectionEmpty()) {
						// Based on com.intellij.openapi.vcs.checkin.CodeAnalysisBeforeCheckinHandler#processFoundCodeSmells
						String commitButtonText = executor != null ? executor.getActionText() : panel.getCommitActionName();
						commitButtonText = StringUtil.trimEnd(commitButtonText, "...");
						final int answer = Messages.showYesNoCancelDialog(
								panel.getProject(),
								ResourcesLoader.getString("checkin.problem.text"),
								StringUtil.capitalizeWords(ResourcesLoader.getString("checkin.problem.title"), true),
								ResourcesLoader.getString("checkin.problem.review"),
								commitButtonText,
								CommonBundle.getCancelButtonText(),
								UIUtil.getWarningIcon()
						);
						if (answer == Messages.YES) {
							ToolWindowPanel.showWindow(panel.getProject());
							return ReturnResult.CLOSE_WINDOW;
						} else if (answer == Messages.CANCEL) {
							return ReturnResult.CANCEL;
						}
					}
				}
				return super.beforeCheckin(executor, additionalDataConsumer);
			}
		};
	}