Skip to content

Commit 155db0d

Browse files
committed
Fix GitHubDefaultQueries
1 parent dd88278 commit 155db0d

2 files changed

Lines changed: 54 additions & 12 deletions

File tree

src/main/java/com/junichi11/netbeans/modules/github/issues/query/GitHubDefaultQueries.java

Lines changed: 52 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,12 @@
4242
package com.junichi11.netbeans.modules.github.issues.query;
4343

4444
import com.junichi11.netbeans.modules.github.issues.repository.GitHubRepository;
45+
import java.util.Collections;
46+
import java.util.HashMap;
47+
import java.util.Map;
4548
import java.util.logging.Level;
4649
import java.util.logging.Logger;
47-
import org.netbeans.api.annotations.common.CheckForNull;
50+
import org.netbeans.api.annotations.common.NonNull;
4851

4952
/**
5053
*
@@ -68,26 +71,63 @@ public String getOptionKey() {
6871
}
6972

7073
}
74+
75+
private static final Map<GitHubRepository, GitHubDefaultQueries> DEFAULT_QUERIES = Collections.synchronizedMap(new HashMap<GitHubRepository, GitHubDefaultQueries>());
7176
private static final Logger LOGGER = Logger.getLogger(GitHubDefaultQueries.class.getName());
77+
private final Map<Type, GitHubQuery> defaultQueries = new HashMap<>();
7278

7379
private GitHubDefaultQueries() {
7480
}
7581

76-
@CheckForNull
77-
public static GitHubQuery create(GitHubRepository repository, Type type) {
78-
switch (type) {
79-
case ASSIGNED_TO_ME:
80-
return new GitHubAssignedToMeQuery(repository);
81-
case CREATED_BY_ME:
82-
return new GitHubCreatedByMeQuery(repository);
83-
default:
84-
LOGGER.log(Level.WARNING, "The query type is not supported!"); // NOI18N
85-
return new GitHubDefaultQuery(repository) {
86-
};
82+
private static GitHubDefaultQueries create(GitHubRepository repository) {
83+
GitHubDefaultQueries gitHubDefaultQueries = DEFAULT_QUERIES.get(repository);
84+
if (gitHubDefaultQueries == null) {
85+
gitHubDefaultQueries = new GitHubDefaultQueries();
86+
DEFAULT_QUERIES.put(repository, gitHubDefaultQueries);
8787
}
88+
return gitHubDefaultQueries;
89+
}
90+
91+
public static GitHubQuery create(GitHubRepository repository, Type type) {
92+
GitHubDefaultQueries gitHubDefaultQueries = create(repository);
93+
return gitHubDefaultQueries.getQuery(repository, type);
8894
}
8995

9096
public static boolean isDefaultQuery(GitHubQuery query) {
9197
return query instanceof GitHubDefaultQuery;
9298
}
99+
100+
public static void remove(GitHubRepository repository) {
101+
GitHubDefaultQueries gitHubDefaultQueries = create(repository);
102+
if (gitHubDefaultQueries == null) {
103+
return;
104+
}
105+
gitHubDefaultQueries.clear();
106+
DEFAULT_QUERIES.remove(repository);
107+
}
108+
109+
private GitHubQuery getQuery(@NonNull GitHubRepository repository, @NonNull Type type) {
110+
GitHubQuery query = defaultQueries.get(type);
111+
if (query == null) {
112+
switch (type) {
113+
case ASSIGNED_TO_ME:
114+
query = new GitHubAssignedToMeQuery(repository);
115+
break;
116+
case CREATED_BY_ME:
117+
query = new GitHubCreatedByMeQuery(repository);
118+
break;
119+
default:
120+
LOGGER.log(Level.WARNING, "The query type({0}) is not supported!", type.name()); // NOI18N
121+
return new GitHubDefaultQuery(repository) {
122+
};
123+
}
124+
defaultQueries.put(type, query);
125+
}
126+
return query;
127+
}
128+
129+
private void clear() {
130+
defaultQueries.clear();
131+
}
132+
93133
}

src/main/java/com/junichi11/netbeans/modules/github/issues/repository/GitHubRepositoryProvider.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
package com.junichi11.netbeans.modules.github.issues.repository;
4343

4444
import com.junichi11.netbeans.modules.github.issues.issue.GitHubIssue;
45+
import com.junichi11.netbeans.modules.github.issues.query.GitHubDefaultQueries;
4546
import com.junichi11.netbeans.modules.github.issues.query.GitHubQuery;
4647
import java.awt.Image;
4748
import java.beans.PropertyChangeListener;
@@ -82,6 +83,7 @@ public Collection<GitHubIssue> getIssues(GitHubRepository repository, String...
8283
public void removed(GitHubRepository repository) {
8384
repository.removed();
8485
GitHubRepositoryManager.getInstance().remove(repository);
86+
GitHubDefaultQueries.remove(repository);
8587
}
8688

8789
@Override

0 commit comments

Comments
 (0)