Skip to content

Commit 2104842

Browse files
committed
Implement GotoDeclarationHandler for TCA table fields
1 parent f370aa2 commit 2104842

File tree

3 files changed

+50
-1
lines changed

3 files changed

+50
-1
lines changed
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package com.cedricziel.idea.typo3.tca.codeInsight.navigation;
2+
3+
import com.cedricziel.idea.typo3.util.TCAUtil;
4+
import com.intellij.codeInsight.navigation.actions.GotoDeclarationHandler;
5+
import com.intellij.openapi.actionSystem.DataContext;
6+
import com.intellij.openapi.editor.Editor;
7+
import com.intellij.psi.PsiElement;
8+
import org.jetbrains.annotations.Nullable;
9+
10+
import static com.cedricziel.idea.typo3.util.TableUtil.getExtTablesSqlFilesForTable;
11+
12+
public class TablenameGotoDeclarationHandler implements GotoDeclarationHandler {
13+
@Nullable
14+
@Override
15+
public PsiElement[] getGotoDeclarationTargets(@Nullable PsiElement sourceElement, int offset, Editor editor) {
16+
17+
if (!isTablenameTcaField(sourceElement)) {
18+
return new PsiElement[0];
19+
}
20+
21+
return getExtTablesSqlFilesForTable(sourceElement.getText(), sourceElement.getProject());
22+
}
23+
24+
@Nullable
25+
@Override
26+
public String getActionText(DataContext context) {
27+
return null;
28+
}
29+
30+
private boolean isTablenameTcaField(PsiElement psiElement) {
31+
32+
return TCAUtil.arrayIndexIsTCATableNameField(psiElement);
33+
}
34+
}

src/main/java/com/cedricziel/idea/typo3/util/TableUtil.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,15 @@
44
import com.intellij.codeInsight.lookup.LookupElement;
55
import com.intellij.openapi.fileEditor.impl.LoadTextUtil;
66
import com.intellij.openapi.project.Project;
7+
import com.intellij.psi.PsiElement;
78
import com.intellij.psi.PsiFile;
89
import com.intellij.psi.search.FilenameIndex;
910
import com.intellij.psi.search.GlobalSearchScope;
1011
import org.jetbrains.annotations.NotNull;
1112

13+
import java.util.Arrays;
1214
import java.util.HashSet;
15+
import java.util.Objects;
1316
import java.util.Set;
1417
import java.util.regex.Matcher;
1518
import java.util.regex.Pattern;
@@ -50,6 +53,17 @@ public static Set<String> getAvailableTableNames(@NotNull Project project) {
5053
return tableNames;
5154
}
5255

56+
public static PsiElement[] getExtTablesSqlFilesForTable(@NotNull String tableName, @NotNull Project project) {
57+
PsiFile[] extSqlFiles = FilenameIndex.getFilesByName(project, EXT_TABLES_SQL_FILENAME, GlobalSearchScope.allScope(project));
58+
59+
return Arrays
60+
.stream(extSqlFiles)
61+
.filter(Objects::nonNull)
62+
.filter(file -> LoadTextUtil.loadText(file.getVirtualFile()).toString().contains(tableName))
63+
.map(file -> file.findElementAt(LoadTextUtil.loadText(file.getVirtualFile()).toString().indexOf(tableName)))
64+
.toArray(PsiElement[]::new);
65+
}
66+
5367
public static void completeAvailableTableNames(@NotNull Project project, @NotNull CompletionResultSet completionResultSet) {
5468
for (String name : TableUtil.getAvailableTableNames(project)) {
5569
completionResultSet.addElement(new LookupElement() {

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -298,8 +298,9 @@ It is a great inspiration for possible solutions and parts of the code.</p>
298298
<!-- inspections -->
299299
<inspectionToolProvider implementation="com.cedricziel.idea.typo3.codeInspection.TYPO3InspectionToolProvider"/>
300300

301-
<!-- got handlers -->
301+
<!-- goto handlers -->
302302
<gotoDeclarationHandler implementation="com.cedricziel.idea.typo3.codeInsight.navigation.PathResourceGotoDeclarationHandler"/>
303+
<gotoDeclarationHandler implementation="com.cedricziel.idea.typo3.tca.codeInsight.navigation.TablenameGotoDeclarationHandler"/>
303304
</extensions>
304305

305306
<extensions defaultExtensionNs="com.jetbrains.php">

0 commit comments

Comments
 (0)