|
1 | 1 | package org.axonframework.intellij.ide.plugin.publisher;
|
2 | 2 |
|
| 3 | +import com.intellij.openapi.fileTypes.StdFileTypes; |
3 | 4 | import com.intellij.openapi.project.Project;
|
4 | 5 | import com.intellij.openapi.util.Condition;
|
5 | 6 | import com.intellij.psi.JavaPsiFacade;
|
|
18 | 19 | import com.intellij.psi.util.PsiTreeUtil;
|
19 | 20 | import com.intellij.util.Processor;
|
20 | 21 | import com.intellij.util.Query;
|
21 |
| -import com.intellij.util.containers.ConcurrentMultiMap; |
22 |
| -import com.intellij.util.containers.MultiMap; |
23 | 22 |
|
24 | 23 | import java.util.Collections;
|
25 |
| -import java.util.List; |
| 24 | +import java.util.HashSet; |
| 25 | +import java.util.Map; |
| 26 | +import java.util.Set; |
| 27 | +import java.util.concurrent.ConcurrentHashMap; |
26 | 28 |
|
27 | 29 | import static java.util.Arrays.asList;
|
28 | 30 |
|
29 | 31 | class DefaultEventPublisherProvider implements EventPublisherProvider {
|
30 | 32 |
|
31 |
| - private final MultiMap<Project, PsiMethod> publisherMethodsPerProject = new ConcurrentMultiMap<Project, PsiMethod>(); |
| 33 | + private final Map<Project, Set<PsiMethod>> publisherMethodsPerProject = new ConcurrentHashMap<Project, Set<PsiMethod>>(); |
32 | 34 |
|
33 | 35 | @Override
|
34 | 36 | public void scanPublishers(final Project project, GlobalSearchScope scope, final Registrar registrar) {
|
35 | 37 | cleanClosedProjects();
|
36 |
| - publisherMethodsPerProject.putValues(project, findMethods(project, GlobalSearchScope.allScope(project), |
| 38 | + Set<PsiMethod> psiMethods = publisherMethodsPerProject.get(project); |
| 39 | + if (psiMethods == null) { |
| 40 | + psiMethods = new HashSet<PsiMethod>(); |
| 41 | + publisherMethodsPerProject.put(project, psiMethods); |
| 42 | + } |
| 43 | + psiMethods.addAll(findMethods(project, GlobalSearchScope.allScope(project), |
37 | 44 | "org.axonframework.eventsourcing.AbstractEventSourcedAggregateRoot", "apply"));
|
38 |
| - publisherMethodsPerProject.putValues(project, findMethods(project, GlobalSearchScope.allScope(project), |
| 45 | + psiMethods.addAll(findMethods(project, GlobalSearchScope.allScope(project), |
39 | 46 | "org.axonframework.domain.AbstractAggregateRoot", "registerEvent"));
|
40 |
| - publisherMethodsPerProject.putValues(project, findMethods(project, GlobalSearchScope.allScope(project), |
| 47 | + psiMethods.addAll(findMethods(project, GlobalSearchScope.allScope(project), |
41 | 48 | "org.axonframework.eventsourcing.AbstractEventSourcedEntity", "apply"));
|
42 | 49 |
|
43 |
| - scanEventPublishers(scope, registrar); |
| 50 | + scanEventPublishers(project, scope, registrar); |
44 | 51 | scanCommandPublishers(project, scope, registrar);
|
45 | 52 | }
|
46 | 53 |
|
@@ -116,8 +123,8 @@ private PsiClass findCommandHandlersAnnotation(Project project) {
|
116 | 123 | GlobalSearchScope.allScope(project));
|
117 | 124 | }
|
118 | 125 |
|
119 |
| - private void scanEventPublishers(GlobalSearchScope scope, final Registrar registrar) { |
120 |
| - for (PsiMethod method : publisherMethodsPerProject.values()) { |
| 126 | + private void scanEventPublishers(Project project, GlobalSearchScope scope, final Registrar registrar) { |
| 127 | + for (final PsiMethod method : publisherMethodsPerProject.get(project)) { |
121 | 128 | Query<PsiReference> invocations = ReferencesSearch.search(method, scope);
|
122 | 129 | invocations.forEachAsync(new Processor<PsiReference>() {
|
123 | 130 | @Override
|
@@ -155,13 +162,13 @@ private void cleanClosedProjects() {
|
155 | 162 | }
|
156 | 163 | }
|
157 | 164 |
|
158 |
| - private List<PsiMethod> findMethods(Project project, GlobalSearchScope allScope, String className, |
159 |
| - String methodName) { |
| 165 | + private Set<PsiMethod> findMethods(Project project, GlobalSearchScope allScope, String className, |
| 166 | + String methodName) { |
160 | 167 | PsiClass aggregateClass = JavaPsiFacade.getInstance(project).findClass(className, allScope);
|
161 | 168 | if (aggregateClass != null) {
|
162 |
| - return asList(aggregateClass.findMethodsByName(methodName, true)); |
| 169 | + return new HashSet<PsiMethod>(asList(aggregateClass.findMethodsByName(methodName, true))); |
163 | 170 | }
|
164 |
| - return Collections.emptyList(); |
| 171 | + return Collections.emptySet(); |
165 | 172 | }
|
166 | 173 |
|
167 | 174 | @Override
|
|
0 commit comments