diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/ParameterHintsPassFactory.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/ParameterHintsPassFactory.java index 7c89d3a7249e..421eea5d3f74 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/ParameterHintsPassFactory.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/ParameterHintsPassFactory.java @@ -69,7 +69,7 @@ public class ParameterHintsPassFactory extends AbstractProjectComponent implemen List matchers = ParameterNameHintsSettings .getInstance() - .getIgnorePatternList() + .getIgnorePatternSet() .stream() .map((item) -> MatcherConstructor.INSTANCE.createMatcher(item)) .collect(Collectors.toList()); diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/ParameterNameHintsSettings.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/ParameterNameHintsSettings.java index 8c9f05554696..c27df9f24fa7 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/ParameterNameHintsSettings.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/ParameterNameHintsSettings.java @@ -24,11 +24,12 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.List; +import java.util.Set; @State(name = "ParameterNameHintsSettings", storages = @Storage("parameter.name.hints.xml")) public class ParameterNameHintsSettings implements PersistentStateComponent { - - public static final String[] defaultPatterns = { + private static final int VERSION = 1; + private static final Set DEFAULT = ContainerUtil.newHashSet( "(begin*, end*)", "(start*, end*)", "(first*, last*)", @@ -50,18 +51,9 @@ public class ParameterNameHintsSettings implements PersistentStateComponent ignorePatterns = ContainerUtil.newArrayList(defaultPatterns); - } - - private ParameterNameHintsSettings.State myState = new State(); + private ParameterNameHintsSettings.State state = new State(); public static ParameterNameHintsSettings getInstance() { return ServiceManager.getService(ParameterNameHintsSettings.class); @@ -70,29 +62,56 @@ public class ParameterNameHintsSettings implements PersistentStateComponent getIgnorePatternList() { - return myState.ignorePatterns; + public void addIgnorePattern(@NotNull String pattern) { + state.diff.add('+' + pattern); + } + + public int getVersion() { + return state.version; + } + + public Set getIgnorePatternSet() { + Set ignoreSet = ContainerUtil.newHashSet(DEFAULT); + state.diff.forEach((item) -> { + if (item.startsWith("+")) { + ignoreSet.add(item.substring(1)); + } + else if (item.startsWith("-")) { + ignoreSet.remove(item.substring(1)); + } + }); + return ignoreSet; } public void setVersion(int newVersion) { - myState.version = newVersion; + state.version = newVersion; } - public void setIgnorePatternList(@NotNull List newBlacklist) { - myState.ignorePatterns = newBlacklist; + public void setIgnorePatternSet(@NotNull Set updatedBlackList) { + Set addedItems = ContainerUtil.newHashSet(updatedBlackList); + DEFAULT.forEach((pattern) -> addedItems.remove(pattern)); + + Set removedItems = ContainerUtil.newHashSet(DEFAULT); + updatedBlackList.forEach((pattern) -> removedItems.remove(pattern)); + + List diff = ContainerUtil.newArrayList(); + addedItems.forEach((item) -> diff.add('+' + item)); + removedItems.forEach((item) -> diff.remove('-' + item)); + + state.diff = diff; + } + + public static class State { + public int version = VERSION; + public List diff = ContainerUtil.newArrayList(); } } \ No newline at end of file diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/hints/ParameterNameHintsConfigurable.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/hints/ParameterNameHintsConfigurable.java index 935122cc758b..b406e63a4316 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/hints/ParameterNameHintsConfigurable.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/hints/ParameterNameHintsConfigurable.java @@ -32,6 +32,7 @@ import org.jetbrains.annotations.Nullable; import javax.swing.*; import java.util.List; +import java.util.Set; import java.util.stream.Collectors; public class ParameterNameHintsConfigurable extends DialogWrapper { @@ -61,13 +62,13 @@ public class ParameterNameHintsConfigurable extends DialogWrapper { protected void doOKAction() { super.doOKAction(); - List updatedBlackList = StringUtil + Set updatedBlackList = StringUtil .split(myEditorTextField.getText(), "\n") .stream() .filter((e) -> !e.trim().isEmpty()) - .collect(Collectors.toList()); + .collect(Collectors.toSet()); - ParameterNameHintsSettings.getInstance().setIgnorePatternList(updatedBlackList); + ParameterNameHintsSettings.getInstance().setIgnorePatternSet(updatedBlackList); } @Nullable @@ -83,7 +84,7 @@ public class ParameterNameHintsConfigurable extends DialogWrapper { EditorTextFieldProvider service = ServiceManager.getService(myProject, EditorTextFieldProvider.class); myEditorTextField = service.getEditorField(PlainTextLanguage.INSTANCE, myProject, ContainerUtil.emptyIterable()); - List blacklist = ParameterNameHintsSettings.getInstance().getIgnorePatternList(); + Set blacklist = ParameterNameHintsSettings.getInstance().getIgnorePatternSet(); String text = StringUtil.join(blacklist, "\n"); myEditorTextField.setText(text);