Skip to content

Commit 71078e6

Browse files
committed
Migrate PathResourceGotoDeclarationHandler to use the index
1 parent 4ae594c commit 71078e6

File tree

2 files changed

+37
-41
lines changed

2 files changed

+37
-41
lines changed

src/main/java/com/cedricziel/idea/typo3/codeInsight/navigation/PathResourceGotoDeclarationHandler.java

Lines changed: 3 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,13 @@
11
package com.cedricziel.idea.typo3.codeInsight.navigation;
22

3+
import com.cedricziel.idea.typo3.index.ResourcePathIndex;
34
import com.intellij.codeInsight.navigation.actions.GotoDeclarationHandler;
45
import com.intellij.openapi.actionSystem.DataContext;
56
import com.intellij.openapi.editor.Editor;
67
import com.intellij.psi.PsiElement;
7-
import com.intellij.psi.PsiFile;
8-
import com.intellij.psi.search.FilenameIndex;
9-
import com.intellij.psi.search.GlobalSearchScope;
108
import org.jetbrains.annotations.NotNull;
119
import org.jetbrains.annotations.Nullable;
1210

13-
import java.util.Arrays;
14-
import java.util.List;
15-
1611
import static com.cedricziel.idea.typo3.util.ResourceUtil.isExtResourcePath;
1712

1813
public class PathResourceGotoDeclarationHandler implements GotoDeclarationHandler {
@@ -24,26 +19,8 @@ public PsiElement[] getGotoDeclarationTargets(@Nullable PsiElement sourceElement
2419
}
2520

2621
if (sourceElement != null) {
27-
String text = sourceElement.getText();
28-
String[] strings = text.split("/");
29-
if (strings.length == 0) {
30-
return emptyPsiElementArray();
31-
}
32-
33-
String fileName = strings[strings.length - 1];
34-
String relativePath = text.replaceFirst("EXT:", "");
35-
36-
List<PsiFile> psiFiles = Arrays.asList(
37-
FilenameIndex.getFilesByName(
38-
sourceElement.getProject(),
39-
fileName,
40-
GlobalSearchScope.allScope(sourceElement.getProject())
41-
));
42-
43-
return psiFiles
44-
.stream()
45-
.filter(x -> x.getVirtualFile().getPath().contains(relativePath))
46-
.toArray(PsiElement[]::new);
22+
String identifier = sourceElement.getText();
23+
return ResourcePathIndex.findElementsForKey(sourceElement.getProject(), identifier);
4724
}
4825

4926
return emptyPsiElementArray();

src/main/java/com/cedricziel/idea/typo3/index/ResourcePathIndex.java

Lines changed: 34 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,50 @@
11
package com.cedricziel.idea.typo3.index;
22

33
import com.intellij.openapi.project.Project;
4+
import com.intellij.psi.PsiElement;
5+
import com.intellij.psi.PsiManager;
6+
import com.intellij.psi.search.GlobalSearchScope;
47
import com.intellij.util.indexing.*;
58
import com.intellij.util.io.EnumeratorStringDescriptor;
69
import com.intellij.util.io.KeyDescriptor;
710
import gnu.trove.THashMap;
811
import org.jetbrains.annotations.NotNull;
912

10-
import java.util.Collection;
11-
import java.util.Map;
13+
import java.util.*;
1214

1315
public class ResourcePathIndex extends ScalarIndexExtension<String> {
1416

1517
public static final ID<String, Void> KEY = ID.create("com.cedricziel.idea.typo3.index.resource_path");
1618

19+
public static Collection<String> getAvailableExtensionResourceFiles(@NotNull Project project) {
20+
return FileBasedIndex.getInstance().getAllKeys(ResourcePathIndex.KEY, project);
21+
}
22+
23+
public static boolean projectContainsResourceFile(@NotNull Project project, @NotNull String resourceId) {
24+
return FileBasedIndex.getInstance().getAllKeys(ResourcePathIndex.KEY, project).contains(resourceId);
25+
}
26+
27+
public static boolean projectContainsResourceDirectory(@NotNull Project project, @NotNull String resourceId) {
28+
return false;
29+
}
30+
31+
public static PsiElement[] findElementsForKey(@NotNull Project project, @NotNull String identifier) {
32+
Set<String> keys = new HashSet<>();
33+
keys.add(identifier);
34+
Set<PsiElement> elements = new HashSet<>();
35+
36+
FileBasedIndex.getInstance().getFilesWithKey(ResourcePathIndex.KEY, keys, virtualFile -> {
37+
elements.add(PsiManager.getInstance(project).findFile(virtualFile));
38+
39+
return true;
40+
}, GlobalSearchScope.allScope(project));
41+
42+
return elements
43+
.stream()
44+
.filter(Objects::nonNull)
45+
.toArray(PsiElement[]::new);
46+
}
47+
1748
@NotNull
1849
@Override
1950
public ID<String, Void> getName() {
@@ -59,23 +90,11 @@ public int getVersion() {
5990
@NotNull
6091
@Override
6192
public FileBasedIndex.InputFilter getInputFilter() {
62-
return file -> file.isInLocalFileSystem() && (file.getPath().contains("sysext") ||file.getPath().contains("typo3conf/ext"));
93+
return file -> file.isInLocalFileSystem() && (file.getPath().contains("sysext") || file.getPath().contains("typo3conf/ext"));
6394
}
6495

6596
@Override
6697
public boolean dependsOnFileContent() {
6798
return false;
6899
}
69-
70-
public static Collection<String> getAvailableExtensionResourceFiles(@NotNull Project project) {
71-
return FileBasedIndex.getInstance().getAllKeys(ResourcePathIndex.KEY, project);
72-
}
73-
74-
public static boolean projectContainsResourceFile(@NotNull Project project, @NotNull String resourceId) {
75-
return FileBasedIndex.getInstance().getAllKeys(ResourcePathIndex.KEY, project).contains(resourceId);
76-
}
77-
78-
public static boolean projectContainsResourceDirectory(@NotNull Project project, @NotNull String resourceId) {
79-
return false;
80-
}
81100
}

0 commit comments

Comments
 (0)