Skip to content

Commit

Permalink
Fixed #162 IgnoreSettings settings must produce stable state (sorted …
Browse files Browse the repository at this point in the history
…settings keys)
  • Loading branch information
hsz committed Aug 27, 2015
1 parent de3239c commit 6101484
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 18 deletions.
2 changes: 1 addition & 1 deletion resources/gitignore
6 changes: 3 additions & 3 deletions src/mobi/hsz/idea/gitignore/lang/IgnoreLanguage.java
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
import org.jetbrains.annotations.Nullable;

import javax.swing.*;
import java.util.HashMap;
import java.util.TreeMap;

/**
* Gitignore {@link Language} definition.
Expand Down Expand Up @@ -187,7 +187,7 @@ public VirtualFile getOuterFile(@Nullable final Project project) {
* @return language is enabled
*/
public boolean isEnabled() {
HashMap<IgnoreSettings.IgnoreLanguagesSettings.KEY, Object> data = IgnoreSettings.getInstance().getLanguagesSettings().get(this);
TreeMap<IgnoreSettings.IgnoreLanguagesSettings.KEY, Object> data = IgnoreSettings.getInstance().getLanguagesSettings().get(this);
boolean value = false;
if (data != null) {
value = Boolean.valueOf(data.get(IgnoreSettings.IgnoreLanguagesSettings.KEY.ENABLE).toString());
Expand All @@ -201,7 +201,7 @@ public boolean isEnabled() {
* @return new file action is allowed
*/
public boolean isNewAllowed() {
HashMap<IgnoreSettings.IgnoreLanguagesSettings.KEY, Object> data = IgnoreSettings.getInstance().getLanguagesSettings().get(this);
TreeMap<IgnoreSettings.IgnoreLanguagesSettings.KEY, Object> data = IgnoreSettings.getInstance().getLanguagesSettings().get(this);
boolean value = false;
if (data != null) {
value = Boolean.valueOf(data.get(IgnoreSettings.IgnoreLanguagesSettings.KEY.NEW_FILE).toString());
Expand Down
19 changes: 8 additions & 11 deletions src/mobi/hsz/idea/gitignore/settings/IgnoreSettings.java
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,7 @@
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.*;

/**
* Persistent global settings object for the Ignore plugin.
Expand Down Expand Up @@ -99,7 +96,7 @@ public String toString() {
*/
private IgnoreLanguagesSettings languagesSettings = new IgnoreLanguagesSettings() {{
for (final IgnoreLanguage language : IgnoreBundle.LANGUAGES) {
put(language, new HashMap<KEY, Object>() {{
put(language, new TreeMap<KEY, Object>() {{
put(KEY.NEW_FILE, true);
put(KEY.ENABLE, language.isVCS());
}});
Expand Down Expand Up @@ -140,7 +137,7 @@ public Element getState() {
element.setAttribute(KEY.OUTER_IGNORE_RULES.toString(), Boolean.toString(outerIgnoreRules));

Element languagesElement = new Element(KEY.LANGUAGES.toString());
for (Map.Entry<IgnoreLanguage, HashMap<IgnoreLanguagesSettings.KEY, Object>> entry : languagesSettings.entrySet()) {
for (Map.Entry<IgnoreLanguage, TreeMap<IgnoreLanguagesSettings.KEY, Object>> entry : languagesSettings.entrySet()) {
Element languageElement = new Element(KEY.LANGUAGES_LANGUAGE.toString());
languageElement.setAttribute(KEY.LANGUAGES_ID.toString(), entry.getKey().getID());
for (Map.Entry<IgnoreLanguagesSettings.KEY, Object> data : entry.getValue().entrySet()) {
Expand Down Expand Up @@ -185,7 +182,7 @@ public void loadState(Element element) {
Element languagesElement = element.getChild(KEY.LANGUAGES.toString());
if (languagesElement != null) {
for (Element languageElement : languagesElement.getChildren()) {
HashMap<IgnoreLanguagesSettings.KEY, Object> data = ContainerUtil.newHashMap();
TreeMap<IgnoreLanguagesSettings.KEY, Object> data = ContainerUtil.newTreeMap();
for (IgnoreLanguagesSettings.KEY key : IgnoreLanguagesSettings.KEY.values()) {
data.put(key, languageElement.getAttributeValue(key.name()));
}
Expand Down Expand Up @@ -450,7 +447,7 @@ public boolean equals(Object obj) {
}
}

public static class IgnoreLanguagesSettings extends LinkedHashMap<IgnoreLanguage, HashMap<IgnoreLanguagesSettings.KEY, Object>> {
public static class IgnoreLanguagesSettings extends LinkedHashMap<IgnoreLanguage, TreeMap<IgnoreLanguagesSettings.KEY, Object>> {
public enum KEY {
NEW_FILE, ENABLE
}
Expand All @@ -460,7 +457,7 @@ public enum KEY {
*
* @param language Ignore language
*/
public HashMap<KEY, Object> get(IgnoreLanguage language) {
public TreeMap<KEY, Object> get(IgnoreLanguage language) {
return super.get(language);
}

Expand All @@ -473,9 +470,9 @@ public HashMap<KEY, Object> get(IgnoreLanguage language) {
@Override
public IgnoreLanguagesSettings clone() {
IgnoreLanguagesSettings copy = (IgnoreLanguagesSettings) super.clone();
for (Map.Entry<IgnoreLanguage, HashMap<IgnoreLanguagesSettings.KEY, Object>> entry : copy.entrySet()) {
for (Map.Entry<IgnoreLanguage, TreeMap<IgnoreLanguagesSettings.KEY, Object>> entry : copy.entrySet()) {
@SuppressWarnings("unchecked")
HashMap<IgnoreLanguagesSettings.KEY, Object> data = (HashMap<KEY, Object>) entry.getValue().clone();
TreeMap<IgnoreLanguagesSettings.KEY, Object> data = (TreeMap<KEY, Object>) entry.getValue().clone();

copy.put(entry.getKey(), data);
}
Expand Down
8 changes: 5 additions & 3 deletions src/mobi/hsz/idea/gitignore/ui/IgnoreSettingsPanel.java
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,8 @@
import javax.swing.table.AbstractTableModel;
import java.awt.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.TreeMap;

import static mobi.hsz.idea.gitignore.settings.IgnoreSettings.IgnoreLanguagesSettings.KEY.ENABLE;
import static mobi.hsz.idea.gitignore.settings.IgnoreSettings.IgnoreLanguagesSettings.KEY.NEW_FILE;
Expand Down Expand Up @@ -455,7 +455,7 @@ public boolean isCellEditable(int row, int column) {
@Override
public Object getValueAt(int row, int column) {
IgnoreLanguage language = ContainerUtil.newArrayList(settings.keySet()).get(row);
HashMap<IgnoreSettings.IgnoreLanguagesSettings.KEY, Object> data = settings.get(language);
TreeMap<IgnoreSettings.IgnoreLanguagesSettings.KEY, Object> data = settings.get(language);

switch (column) {
case 0:
Expand All @@ -465,6 +465,7 @@ public Object getValueAt(int row, int column) {
case 2:
return Boolean.valueOf(data.get(ENABLE).toString());
}

throw new IllegalArgumentException();
}

Expand All @@ -479,7 +480,7 @@ public Object getValueAt(int row, int column) {
@Override
public void setValueAt(Object value, int row, int column) {
IgnoreLanguage language = ContainerUtil.newArrayList(settings.keySet()).get(row);
HashMap<IgnoreSettings.IgnoreLanguagesSettings.KEY, Object> data = settings.get(language);
TreeMap<IgnoreSettings.IgnoreLanguagesSettings.KEY, Object> data = settings.get(language);

switch (column) {
case 1:
Expand All @@ -489,6 +490,7 @@ public void setValueAt(Object value, int row, int column) {
data.put(ENABLE, value);
return;
}

throw new IllegalArgumentException();
}

Expand Down

0 comments on commit 6101484

Please sign in to comment.