Bug 575365: [Ltk-Issues] Make loading of task tag config more robust
Change-Id: I24551e6876e35f10ddcf29317f1c261855f34154
diff --git a/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/issues/core/Issues.java b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/issues/core/Issues.java
index 45551e0..db3b7ce 100644
--- a/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/issues/core/Issues.java
+++ b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/issues/core/Issues.java
@@ -21,6 +21,7 @@
import org.eclipse.statet.jcommons.lang.NonNull;
import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.ecommons.preferences.core.Preference;
import org.eclipse.statet.ecommons.preferences.core.Preference.EnumListPref;
import org.eclipse.statet.ecommons.preferences.core.Preference.StringArrayPref;
import org.eclipse.statet.ecommons.preferences.core.PreferenceAccess;
@@ -32,22 +33,20 @@
public final class Issues {
+ private static final String TASK_TAG_QUALIFIER= "org.eclipse.statet.ide.core/managment"; //$NON-NLS-1$
+
public static final String TASK_TAG_KEYWORD_PREF_KEY= "TaskTags.keyword"; //$NON-NLS-1$
public static final String TASK_TAG_PRIORITY_PREF_KEY= "TaskTags.priority"; //$NON-NLS-1$
-
- private static StringArrayPref createKeywordPref(final String qualifier) {
- return new StringArrayPref(qualifier, TASK_TAG_KEYWORD_PREF_KEY);
- }
-
- private static EnumListPref<TaskPriority> createPriorityPref(final String qualifier) {
- return new EnumListPref<>(qualifier, TASK_TAG_PRIORITY_PREF_KEY, TaskPriority.class);
- }
+ public static final Preference<@NonNull String[]> TASK_TAG_KEYWORD_PREF=
+ new StringArrayPref(TASK_TAG_QUALIFIER, TASK_TAG_KEYWORD_PREF_KEY);
+ public static final Preference<List<TaskPriority>> TASK_TAG_PRIORITY_PREF=
+ new EnumListPref<>(TASK_TAG_QUALIFIER, TASK_TAG_PRIORITY_PREF_KEY, TaskPriority.class);
- public static ImList<TaskTag> loadTaskTags(final String qualifier, final PreferenceAccess prefs) {
- final @NonNull String[] keywords= prefs.getPreferenceValue(createKeywordPref(qualifier));
- final List<TaskPriority> priorities= prefs.getPreferenceValue(createPriorityPref(qualifier));
+ public static ImList<TaskTag> loadTaskTags(final PreferenceAccess prefs) {
+ final @NonNull String[] keywords= prefs.getPreferenceValue(TASK_TAG_KEYWORD_PREF);
+ final List<TaskPriority> priorities= prefs.getPreferenceValue(TASK_TAG_PRIORITY_PREF);
if (keywords.length == priorities.size()) {
final var array= new @NonNull TaskTag[keywords.length];
diff --git a/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/issues/core/impl/TaskTagReporter.java b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/issues/core/impl/TaskTagReporter.java
index 70765ef..7ef102a 100644
--- a/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/issues/core/impl/TaskTagReporter.java
+++ b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/issues/core/impl/TaskTagReporter.java
@@ -18,11 +18,12 @@
import static org.eclipse.statet.jcommons.lang.ObjectUtils.nonNullLateInit;
import java.util.HashMap;
-import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import org.eclipse.statet.jcommons.collections.ImCollections;
+import org.eclipse.statet.jcommons.collections.ImList;
import org.eclipse.statet.jcommons.lang.NonNullByDefault;
import org.eclipse.statet.jcommons.lang.Nullable;
@@ -36,6 +37,7 @@
public abstract class TaskTagReporter {
+ private ImList<TaskTag> taskTags= ImCollections.emptyList();
private @Nullable Pattern taskTagPattern;
private final Map<String, TaskPriority> taskTagMap= new HashMap<>();
@@ -50,7 +52,11 @@
}
- protected void initTaskPattern(final List<TaskTag> taskTags) {
+ protected void initTaskPattern(final ImList<TaskTag> taskTags) {
+ if (taskTags.equals(this.taskTags)) {
+ return;
+ }
+ this.taskTags= taskTags;
this.taskTagPattern= null;
this.taskTagMap.clear();
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/presentation/CommentScanner.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/presentation/CommentScanner.java
index d6686aa..e208da4 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/presentation/CommentScanner.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/presentation/CommentScanner.java
@@ -75,7 +75,6 @@
}
- private final String prefQualifier;
private final PreferenceAccess prefs;
private TaskTagRule taskTagRule= nonNullLateInit();
@@ -86,24 +85,17 @@
public CommentScanner(final TextStyleManager<?> textStyles,
final String commentTokenKey, final String taskTokenKey,
- final String prefQualifier, final PreferenceAccess prefs) {
+ final PreferenceAccess prefs) {
super(textStyles);
this.commentTokenKey= commentTokenKey;
this.taskTokenKey= taskTokenKey;
initRules();
- this.prefQualifier= prefQualifier;
this.prefs= prefs;
loadTaskTags();
}
- public CommentScanner(final TextStyleManager<?> textStyles,
- final String commentTokenKey, final String taskTokenKey,
- final PreferenceAccess prefs) {
- this(textStyles, commentTokenKey, taskTokenKey, PREF_QUALIFIER, prefs);
- }
-
@Override
protected void createRules(final List<IRule> rules) {
@@ -120,7 +112,6 @@
// TODO
private static final String GROUP_ID= "statet.task_tags"; //$NON-NLS-1$
- private static final String PREF_QUALIFIER= "org.eclipse.statet.ide.core/managment"; //$NON-NLS-1$
@Override
public void handleSettingsChanged(final Set<String> groupIds, final Map<String, Object> options) {
@@ -131,7 +122,7 @@
}
private void loadTaskTags() {
- final var taskTags= Issues.loadTaskTags(this.prefQualifier, this.prefs);
+ final var taskTags= Issues.loadTaskTags(this.prefs);
this.taskTagRule.setKeywords(Issues.getKeywords(taskTags));
}