From 5298c3e8226fa2df9fae53b6fc97516ffa4407e9 Mon Sep 17 00:00:00 2001 From: Dmitry Batkovich Date: Fri, 6 Feb 2015 10:31:19 +0300 Subject: [PATCH] IDEA-133779 Inspection settings: changing Share + Rename is processed not consistently --- .../SingleInspectionProfilePanelTest.java | 4 +- .../ui/SingleInspectionProfilePanel.java | 60 +++++-------------- .../header/InspectionToolsConfigurable.java | 14 ++--- 3 files changed, 25 insertions(+), 53 deletions(-) diff --git a/java/java-tests/testSrc/com/intellij/codeInspection/SingleInspectionProfilePanelTest.java b/java/java-tests/testSrc/com/intellij/codeInspection/SingleInspectionProfilePanelTest.java index 3d750352f383..9c595c7dc5d4 100644 --- a/java/java-tests/testSrc/com/intellij/codeInspection/SingleInspectionProfilePanelTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInspection/SingleInspectionProfilePanelTest.java @@ -42,7 +42,7 @@ public class SingleInspectionProfilePanelTest extends LightIdeaTestCase { InspectionProfileImpl model = (InspectionProfileImpl)profile.getModifiableModel(); assertEquals(0, InspectionProfileTest.countInitializedTools(model)); - SingleInspectionProfilePanel panel = new SingleInspectionProfilePanel(profileManager, PROFILE, model); + SingleInspectionProfilePanel panel = new SingleInspectionProfilePanel(profileManager, PROFILE, model, profile); panel.setVisible(true); panel.reset(); assertEquals(InspectionProfileTest.getInitializedTools(model).toString(), 0, InspectionProfileTest.countInitializedTools(model)); @@ -70,7 +70,7 @@ public class SingleInspectionProfilePanelTest extends LightIdeaTestCase { InspectionProfileImpl model = (InspectionProfileImpl)profile.getModifiableModel(); - SingleInspectionProfilePanel panel = new SingleInspectionProfilePanel(profileManager, PROFILE, model); + SingleInspectionProfilePanel panel = new SingleInspectionProfilePanel(profileManager, PROFILE, model, profile); panel.setVisible(true); panel.reset(); assertEquals(InspectionProfileTest.getInitializedTools(model).toString(), 1, InspectionProfileTest.countInitializedTools(model)); diff --git a/platform/lang-impl/src/com/intellij/profile/codeInspection/ui/SingleInspectionProfilePanel.java b/platform/lang-impl/src/com/intellij/profile/codeInspection/ui/SingleInspectionProfilePanel.java index 551be9bb9707..f6f78927024d 100644 --- a/platform/lang-impl/src/com/intellij/profile/codeInspection/ui/SingleInspectionProfilePanel.java +++ b/platform/lang-impl/src/com/intellij/profile/codeInspection/ui/SingleInspectionProfilePanel.java @@ -49,6 +49,7 @@ import com.intellij.openapi.util.JDOMUtil; import com.intellij.openapi.util.text.StringUtil; import com.intellij.profile.ApplicationProfileManager; import com.intellij.profile.DefaultProjectProfileManager; +import com.intellij.profile.Profile; import com.intellij.profile.ProfileManager; import com.intellij.profile.codeInspection.InspectionProfileManager; import com.intellij.profile.codeInspection.InspectionProjectProfileManager; @@ -111,6 +112,7 @@ public class SingleInspectionProfilePanel extends JPanel { private final Alarm myAlarm = new Alarm(); private final StorageAccessors myProperties = StorageAccessors.createGlobal("SingleInspectionProfilePanel"); private final InspectionProjectProfileManager myProjectProfileManager; + @NotNull private Profile myOriginal; private InspectionProfileImpl mySelectedProfile; private JEditorPane myBrowser; private JPanel myOptionsPanel; @@ -140,9 +142,11 @@ public class SingleInspectionProfilePanel extends JPanel { public SingleInspectionProfilePanel(@NotNull InspectionProjectProfileManager projectProfileManager, @NotNull String inspectionProfileName, - @NotNull ModifiableModel profile) { + @NotNull ModifiableModel profile, + @NotNull Profile original) { super(new BorderLayout()); myProjectProfileManager = projectProfileManager; + myOriginal = original; mySelectedProfile = (InspectionProfileImpl)profile; myCurrentProfileName = inspectionProfileName; myShareProfile = profile.getProfileManager() == projectProfileManager; @@ -158,43 +162,6 @@ public class SingleInspectionProfilePanel extends JPanel { } } - @Nullable - public static ModifiableModel createNewProfile(final int initValue, - ModifiableModel selectedProfile, - JPanel parent, - String profileName, - Set existingProfileNames, - @NotNull Project project) { - profileName = Messages.showInputDialog(parent, profileName, "Create New Inspection Profile", Messages.getQuestionIcon()); - if (profileName == null) return null; - final ProfileManager profileManager = selectedProfile.getProfileManager(); - if (existingProfileNames.contains(profileName)) { - Messages.showErrorDialog(InspectionsBundle.message("inspection.unable.to.create.profile.message", profileName), - InspectionsBundle.message("inspection.unable.to.create.profile.dialog.title")); - return null; - } - InspectionProfileImpl inspectionProfile = new InspectionProfileImpl(profileName, InspectionToolRegistrar.getInstance(), profileManager); - if (initValue == -1) { - inspectionProfile.initInspectionTools(project); - ModifiableModel profileModifiableModel = inspectionProfile.getModifiableModel(); - final InspectionToolWrapper[] profileEntries = profileModifiableModel.getInspectionTools(null); - for (InspectionToolWrapper toolWrapper : profileEntries) { - profileModifiableModel.disableTool(toolWrapper.getShortName(), null, project); - } - profileModifiableModel.setProjectLevel(false); - profileModifiableModel.setModified(true); - return profileModifiableModel; - } - else if (initValue == 0) { - inspectionProfile.copyFrom(selectedProfile); - inspectionProfile.setName(profileName); - inspectionProfile.initInspectionTools(project); - inspectionProfile.setModified(true); - return inspectionProfile; - } - return null; - } - @Nullable private static InspectionConfigTreeNode findNodeByKey(String name, InspectionConfigTreeNode root) { for (int i = 0; i < root.getChildCount(); i++) { @@ -1174,19 +1141,23 @@ public class SingleInspectionProfilePanel extends JPanel { } final ModifiableModel selectedProfile = getSelectedProfile(); - if (!Comparing.equal(myCurrentProfileName, selectedProfile.getName())) { - selectedProfile.getProfileManager().deleteProfile(selectedProfile.getName()); - selectedProfile.setName(myCurrentProfileName); - selectedProfile.getProfileManager().updateProfile(selectedProfile); - } ProfileManager profileManager = myShareProfile ? myProjectProfileManager : InspectionProfileManager.getInstance(); selectedProfile.setProjectLevel(myShareProfile); if (selectedProfile.getProfileManager() != profileManager) { - if (selectedProfile.getProfileManager().getProfile(selectedProfile.getName(), false) != null) { + if (selectedProfile.getProfileManager().getProfile(selectedProfile.getName(), false) == myOriginal) { selectedProfile.getProfileManager().deleteProfile(selectedProfile.getName()); } + selectedProfile.setName(myCurrentProfileName); copyUsedSeveritiesIfUndefined(selectedProfile, profileManager); selectedProfile.setProfileManager(profileManager); + } else { + if (!Comparing.equal(myCurrentProfileName, selectedProfile.getName())) { + if (selectedProfile.getProfileManager().getProfile(selectedProfile.getName(), false) == myOriginal) { + selectedProfile.getProfileManager().deleteProfile(selectedProfile.getName()); + } + selectedProfile.setName(myCurrentProfileName); + selectedProfile.getProfileManager().updateProfile(selectedProfile); + } } final InspectionProfile parentProfile = selectedProfile.getParentProfile(); @@ -1199,6 +1170,7 @@ public class SingleInspectionProfilePanel extends JPanel { setSelectedProfile(parentProfile.getModifiableModel()); setSelectedProfileModified(false); myModified = false; + myOriginal = selectedProfile.getProfileManager().getProfile(selectedProfile.getName()); } private boolean descriptorsAreChanged() { diff --git a/platform/lang-impl/src/com/intellij/profile/codeInspection/ui/header/InspectionToolsConfigurable.java b/platform/lang-impl/src/com/intellij/profile/codeInspection/ui/header/InspectionToolsConfigurable.java index b81f8fc5dfdc..b67f7b954538 100644 --- a/platform/lang-impl/src/com/intellij/profile/codeInspection/ui/header/InspectionToolsConfigurable.java +++ b/platform/lang-impl/src/com/intellij/profile/codeInspection/ui/header/InspectionToolsConfigurable.java @@ -160,7 +160,7 @@ public abstract class InspectionToolsConfigurable extends BaseConfigurable final InspectionProfileImpl modifiableModel = (InspectionProfileImpl)newProfile.getModifiableModel(); modifiableModel.setModified(true); modifiableModel.setProjectLevel(false); - addProfile(modifiableModel); + addProfile(modifiableModel, newProfile); rename(modifiableModel); } } @@ -337,7 +337,7 @@ public abstract class InspectionToolsConfigurable extends BaseConfigurable } final ModifiableModel model = profile.getModifiableModel(); model.setModified(true); - addProfile((InspectionProfileImpl)model); + addProfile((InspectionProfileImpl)model, profile); //TODO myDeletedProfiles ? really need this myDeletedProfiles.remove(profile); @@ -418,9 +418,9 @@ public abstract class InspectionToolsConfigurable extends BaseConfigurable return inspectionProfile; } - private void addProfile(InspectionProfileImpl model) { + private void addProfile(InspectionProfileImpl model, InspectionProfileImpl profile) { final String modelName = model.getName(); - final SingleInspectionProfilePanel panel = createPanel(model, modelName); + final SingleInspectionProfilePanel panel = createPanel(model, profile, modelName); myPanel.add(getCardName(model), panel); myProfiles.getModel().addElement(model); @@ -541,7 +541,7 @@ public abstract class InspectionToolsConfigurable extends BaseConfigurable final ModifiableModel modifiableProfile = ((InspectionProfileImpl)profile).getModifiableModel(); modifiableProfiles.add(modifiableProfile); final InspectionProfileImpl inspectionProfile = (InspectionProfileImpl)modifiableProfile; - final SingleInspectionProfilePanel panel = createPanel(inspectionProfile, profileName); + final SingleInspectionProfilePanel panel = createPanel(inspectionProfile, profile, profileName); putProfile(modifiableProfile, panel); myPanel.add(getCardName(inspectionProfile), panel); } @@ -575,8 +575,8 @@ public abstract class InspectionToolsConfigurable extends BaseConfigurable return (inspectionProfile.isProjectLevel() ? "s" : "a") + inspectionProfile.getName(); } - private SingleInspectionProfilePanel createPanel(InspectionProfileImpl profile, String profileName) { - return new SingleInspectionProfilePanel(myProjectProfileManager, profileName, profile) { + private SingleInspectionProfilePanel createPanel(InspectionProfileImpl profile, Profile original, String profileName) { + return new SingleInspectionProfilePanel(myProjectProfileManager, profileName, profile, original) { @Override protected boolean accept(InspectionToolWrapper entry) { return super.accept(entry) && acceptTool(entry);