Skip to content

Commit e2d858c

Browse files
author
Pawel Badenski
committed
Merge branch 'master' into navigation-from-events-and-commands
Conflicts: src/main/java/org/axonframework/intellij/ide/plugin/publisher/DefaultEventPublisherProvider.java
2 parents 601e0cc + 5104ded commit e2d858c

File tree

2 files changed

+32
-18
lines changed

2 files changed

+32
-18
lines changed

src/main/java/org/axonframework/intellij/ide/plugin/publisher/DefaultEventPublisherProvider.java

Lines changed: 25 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package org.axonframework.intellij.ide.plugin.publisher;
22

3-
import com.intellij.ide.highlighter.JavaFileType;
3+
import com.intellij.openapi.fileTypes.StdFileTypes;
44
import com.intellij.openapi.project.Project;
55
import com.intellij.openapi.util.Condition;
66
import com.intellij.psi.JavaPsiFacade;
@@ -19,36 +19,42 @@
1919
import com.intellij.psi.util.PsiTreeUtil;
2020
import com.intellij.util.Processor;
2121
import com.intellij.util.Query;
22-
import com.intellij.util.containers.ConcurrentMultiMap;
23-
import com.intellij.util.containers.MultiMap;
2422

2523
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;
2728

2829
import static java.util.Arrays.asList;
2930

3031
class DefaultEventPublisherProvider implements EventPublisherProvider {
3132

32-
private final MultiMap<Project, PsiMethod> publisherMethodsPerProject = new ConcurrentMultiMap<Project, PsiMethod>();
33+
private final Map<Project, Set<PsiMethod>> publisherMethodsPerProject = new ConcurrentHashMap<Project, Set<PsiMethod>>();
3334

3435
@Override
3536
public void scanPublishers(final Project project, GlobalSearchScope scope, final Registrar registrar) {
3637
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),
3841
"org.axonframework.eventsourcing.AbstractEventSourcedAggregateRoot", "apply"));
39-
publisherMethodsPerProject.putValues(project, findMethods(project, GlobalSearchScope.allScope(project),
42+
psiMethods.addAll(findMethods(project, GlobalSearchScope.allScope(project),
4043
"org.axonframework.domain.AbstractAggregateRoot", "registerEvent"));
41-
publisherMethodsPerProject.putValues(project, findMethods(project, GlobalSearchScope.allScope(project),
44+
psiMethods.addAll(findMethods(project, GlobalSearchScope.allScope(project),
4245
"org.axonframework.eventsourcing.AbstractEventSourcedEntity", "apply"));
4346

44-
scanEventPublishers(scope, registrar);
45-
scanCommandPublishers(project, scope, registrar);
47+
GlobalSearchScope scopeNarrowedToJavaSourceFiles =
48+
GlobalSearchScope.getScopeRestrictedByFileTypes(scope, StdFileTypes.JAVA);
49+
scanEventPublishers(project, scopeNarrowedToJavaSourceFiles, registrar);
50+
scanCommandPublishers(project, scopeNarrowedToJavaSourceFiles, registrar);
4651
}
4752

4853
private void scanCommandPublishers(final Project project, GlobalSearchScope scope, final Registrar registrar) {
4954
PsiClass commandHandlerAnnotation = findCommandHandlersAnnotation(project);
5055
if (commandHandlerAnnotation != null) {
51-
Query<PsiReference> annotationUsages = ReferencesSearch.search(commandHandlerAnnotation, scope);
56+
Query<PsiReference> annotationUsages =
57+
ReferencesSearch.search(commandHandlerAnnotation, scope);
5258
annotationUsages.forEachAsync(new Processor<PsiReference>() {
5359
@Override
5460
public boolean process(PsiReference psiReference) {
@@ -117,9 +123,10 @@ private PsiClass findCommandHandlersAnnotation(Project project) {
117123
GlobalSearchScope.allScope(project));
118124
}
119125

120-
private void scanEventPublishers(GlobalSearchScope scope, final Registrar registrar) {
121-
for (PsiMethod method : publisherMethodsPerProject.values()) {
122-
Query<PsiReference> invocations = ReferencesSearch.search(method, GlobalSearchScope.getScopeRestrictedByFileTypes(scope, JavaFileType.INSTANCE));
126+
private void scanEventPublishers(Project project, GlobalSearchScope scope, final Registrar registrar) {
127+
for (final PsiMethod method : publisherMethodsPerProject.get(project)) {
128+
Query<PsiReference> invocations =
129+
MethodReferencesSearch.search(method, scope, false);
123130
invocations.forEachAsync(new Processor<PsiReference>() {
124131
@Override
125132
public boolean process(PsiReference psiReference) {
@@ -156,13 +163,13 @@ private void cleanClosedProjects() {
156163
}
157164
}
158165

159-
private List<PsiMethod> findMethods(Project project, GlobalSearchScope allScope, String className,
160-
String methodName) {
166+
private Set<PsiMethod> findMethods(Project project, GlobalSearchScope allScope, String className,
167+
String methodName) {
161168
PsiClass aggregateClass = JavaPsiFacade.getInstance(project).findClass(className, allScope);
162169
if (aggregateClass != null) {
163-
return asList(aggregateClass.findMethodsByName(methodName, true));
170+
return new HashSet<PsiMethod>(asList(aggregateClass.findMethodsByName(methodName, true)));
164171
}
165-
return Collections.emptyList();
172+
return Collections.emptySet();
166173
}
167174

168175
@Override

src/main/resources/META-INF/plugin.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,13 @@
1212
</description>
1313

1414
<change-notes><![CDATA[
15+
Version 0.3.6<br />
16+
-------------<br />
17+
<ul>
18+
<li>Performance improvements thanks to Pawel Badenski</li>
19+
</ul>
20+
<br />
21+
<br />
1522
Version 0.3.5<br />
1623
-------------<br />
1724
<ul>

0 commit comments

Comments
 (0)