Skip to content

Commit e0cca21

Browse files
authored
Merge pull request #2088 from Haehnchen/feature/router-index-recursive
replace recursive visting of elements inside Routing indexer with direct level visiting
2 parents 46892db + e69aef8 commit e0cca21

File tree

3 files changed

+24
-21
lines changed

3 files changed

+24
-21
lines changed

src/main/java/fr/adrienbrault/idea/symfony2plugin/routing/RouteHelper.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
import fr.adrienbrault.idea.symfony2plugin.stubs.cache.FileIndexCaches;
4040
import fr.adrienbrault.idea.symfony2plugin.stubs.dict.StubIndexedRoute;
4141
import fr.adrienbrault.idea.symfony2plugin.stubs.indexes.RoutesStubIndex;
42-
import fr.adrienbrault.idea.symfony2plugin.stubs.indexes.visitor.AnnotationRouteElementWalkingVisitor;
42+
import fr.adrienbrault.idea.symfony2plugin.stubs.indexes.visitor.AnnotationRouteElementVisitor;
4343
import fr.adrienbrault.idea.symfony2plugin.ui.dict.AbstractUiFilePath;
4444
import fr.adrienbrault.idea.symfony2plugin.util.*;
4545
import fr.adrienbrault.idea.symfony2plugin.util.controller.ControllerAction;
@@ -1121,11 +1121,11 @@ public static Collection<PsiElement> getRouteNameTarget(@NotNull Project project
11211121
Collection<PsiElement> targets = new ArrayList<>();
11221122

11231123
for (PhpClass phpClass : PhpPsiUtil.findAllClasses((PhpFile) psiFile)) {
1124-
phpClass.accept(new AnnotationRouteElementWalkingVisitor(pair -> {
1124+
new AnnotationRouteElementVisitor(pair -> {
11251125
if (routeName.equalsIgnoreCase(pair.getFirst())) {
11261126
targets.add(pair.getSecond());
11271127
}
1128-
}));
1128+
}).visitFile(phpClass);
11291129
}
11301130

11311131
return targets;

src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/RoutesStubIndex.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
import fr.adrienbrault.idea.symfony2plugin.stubs.dict.StubIndexedRoute;
1818
import fr.adrienbrault.idea.symfony2plugin.stubs.indexes.externalizer.ObjectStreamDataExternalizer;
1919
import fr.adrienbrault.idea.symfony2plugin.stubs.indexes.inputFilter.FileInputFilter;
20-
import fr.adrienbrault.idea.symfony2plugin.stubs.indexes.visitor.AnnotationRouteElementWalkingVisitor;
20+
import fr.adrienbrault.idea.symfony2plugin.stubs.indexes.visitor.AnnotationRouteElementVisitor;
2121
import fr.adrienbrault.idea.symfony2plugin.util.ProjectUtil;
2222
import org.jetbrains.annotations.NotNull;
2323
import org.jetbrains.yaml.psi.YAMLDocument;
@@ -84,7 +84,7 @@ public DataIndexer<String, StubIndexedRoute, FileContent> getIndexer() {
8484
}
8585

8686
for (PhpClass phpClass : PhpPsiUtil.findAllClasses((PhpFile) psiFile)) {
87-
phpClass.accept(new AnnotationRouteElementWalkingVisitor(map));
87+
new AnnotationRouteElementVisitor(map).visitFile(phpClass);
8888
}
8989
}
9090

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22

33
import com.intellij.patterns.PlatformPatterns;
44
import com.intellij.psi.PsiElement;
5-
import com.intellij.psi.PsiRecursiveElementWalkingVisitor;
65
import com.intellij.psi.util.PsiTreeUtil;
76
import com.intellij.util.containers.ContainerUtil;
7+
import com.jetbrains.php.lang.documentation.phpdoc.PhpDocUtil;
88
import com.jetbrains.php.lang.documentation.phpdoc.parser.PhpDocElementTypes;
99
import com.jetbrains.php.lang.documentation.phpdoc.psi.PhpDocComment;
1010
import com.jetbrains.php.lang.documentation.phpdoc.psi.tags.PhpDocTag;
@@ -30,7 +30,7 @@
3030
*
3131
* @author Daniel Espendiller <daniel@espendiller.net>
3232
*/
33-
public class AnnotationRouteElementWalkingVisitor extends PsiRecursiveElementWalkingVisitor {
33+
public class AnnotationRouteElementVisitor {
3434
@NotNull
3535
private final Map<String, StubIndexedRoute> map;
3636

@@ -40,32 +40,35 @@ public class AnnotationRouteElementWalkingVisitor extends PsiRecursiveElementWal
4040
@NotNull
4141
private final Consumer<Pair<String, PsiElement>> consumer;
4242

43-
public AnnotationRouteElementWalkingVisitor(@NotNull Consumer<Pair<String, PsiElement>> consumer) {
43+
public AnnotationRouteElementVisitor(@NotNull Consumer<Pair<String, PsiElement>> consumer) {
4444
this.consumer = consumer;
4545
this.map = new HashMap<>();
4646
}
4747

48-
public AnnotationRouteElementWalkingVisitor(@NotNull Map<String, StubIndexedRoute> map) {
48+
public AnnotationRouteElementVisitor(@NotNull Map<String, StubIndexedRoute> map) {
4949
this.map = map;
5050
this.consumer = c -> {};
5151
}
5252

53-
@Override
54-
public void visitElement(PsiElement element) {
55-
if ((element instanceof PhpDocTag)) {
56-
visitPhpDocTag((PhpDocTag) element);
57-
}
53+
public void visitFile(@NotNull PhpClass phpClass) {
54+
for (Method method : phpClass.getOwnMethods()) {
55+
PhpDocComment docComment = method.getDocComment();
56+
if (docComment != null) {
57+
PhpDocUtil.processTagElementsByName(docComment, null, docTag -> {
58+
visitPhpDocTag(docTag);
59+
return true;
60+
});
61+
}
5862

59-
if ((element instanceof PhpAttributesList)) {
60-
visitPhpAttributesList((PhpAttributesList) element);
63+
PhpAttributesList childOfType = PsiTreeUtil.getChildOfType(method, PhpAttributesList.class);
64+
if (childOfType != null) {
65+
visitPhpAttributesList(childOfType);
66+
}
6167
}
62-
63-
super.visitElement(element);
6468
}
65-
6669
private void visitPhpDocTag(@NotNull PhpDocTag phpDocTag) {
6770

68-
// "@var" and user non related tags dont need an action
71+
// "@var" and user non-related tags don't need an action
6972
if(AnnotationBackportUtil.NON_ANNOTATION_TAGS.contains(phpDocTag.getName())) {
7073
return;
7174
}
@@ -89,7 +92,7 @@ private void visitPhpDocTag(@NotNull PhpDocTag phpDocTag) {
8992
routeName = AnnotationBackportUtil.getRouteByMethod(phpDocTag);
9093
}
9194

92-
if(routeName != null && StringUtils.isNotBlank(routeName)) {
95+
if(StringUtils.isNotBlank(routeName)) {
9396
// prepend route name on PhpClass scope
9497
String routeNamePrefix = getRouteNamePrefix(phpDocTag);
9598
if(routeNamePrefix != null) {

0 commit comments

Comments
 (0)