in src/com/jetbrains/php/tools/quality/psalm/PsalmGlobalInspection.java [86:133]
public static void notifyAboutMissingConfig(@NotNull Project project, @NotNull String path) {
final Notification notification =
new Notification(GROUP_ID, PsalmQualityToolType.INSTANCE.getDisplayName(),
PsalmBundle.message("psalm.config.not.found", path), WARNING);
notification.addAction(new AnAction(PsalmBundle.message("action.show.inspection.settings.text")) {
@Override
public void actionPerformed(@NotNull AnActionEvent e) {
editToolSettings(project, ProjectInspectionProfileManager.getInstance(project).getCurrentProfile(),
PsalmQualityToolType.INSTANCE.getInspectionShortName(project));
notification.expire();
}
});
//noinspection DialogTitleCapitalization
notification.addAction(new AnAction(PsalmBundle.message("action.generate.psalm.xml.in.project.root.text")) {
@Override
public void actionPerformed(@NotNull AnActionEvent e) {
try {
final PsalmConfiguration configuration = PsalmProjectConfiguration.getInstance(project).findSelectedConfiguration(project, false);
if (configuration == null) {
return;
}
getToolOutput(project, configuration.getInterpreterId(), configuration.getToolPath(), configuration.getTimeout(),
PsalmBundle.message("action.generate.psalm.xml.in.project.root"), null, "--init", ".", "3");
final Path configPath = Paths.get(project.getBasePath(), "psalm.xml");
markDirtyAndRefresh(true, false, false, new File(configPath.toString()));
updateInspectionSettings(configPath);
notification.expire();
}
catch (QualityToolValidationException | ExecutionException exception) {
Notifications.Bus.notify(new Notification(GROUP_ID, PsalmQualityToolType.INSTANCE.getDisplayName(),
PsalmBundle.message("psalm.config.not.generated"), WARNING));
}
}
private void updateInspectionSettings(Path configPath) {
VirtualFile projectDir = project.getBaseDir();
if (projectDir == null) return;
final PsiDirectory file = PsiManager.getInstance(project).findDirectory(projectDir);
if (file == null) return;
InspectionProfileManager.getInstance(project).getCurrentProfile().modifyToolSettings(
Key.<PsalmGlobalInspection>create(PsalmQualityToolType.INSTANCE.getInspectionId()), file,
inspection -> PsalmOptionsConfiguration.getInstance(project).setConfig(configPath.toString()));
}
});
Notifications.Bus.notify(notification);
}