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