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);
}
};
}