-
-
Notifications
You must be signed in to change notification settings - Fork 20
Expand file tree
/
Copy pathPhpGotoDeclarationHandler.java
More file actions
67 lines (57 loc) · 2.66 KB
/
Copy pathPhpGotoDeclarationHandler.java
File metadata and controls
67 lines (57 loc) · 2.66 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package de.espend.idea.php.toolbox.gotoCompletion;
import com.intellij.codeInsight.completion.*;
import com.intellij.codeInsight.navigation.actions.GotoDeclarationHandler;
import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.openapi.editor.Editor;
import com.intellij.psi.PsiElement;
import com.intellij.util.ProcessingContext;
import com.intellij.util.containers.ContainerUtil;
import de.espend.idea.php.toolbox.gotoCompletion.contributor.GlobalStringClassGoto;
import de.espend.idea.php.toolbox.gotoCompletion.contributor.PhpArrayCallbackGotoCompletion;
import de.espend.idea.php.toolbox.matcher.php.docTag.PhpDocTagGotoCompletionContributor;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.HashSet;
import java.util.Set;
/**
* @author Daniel Espendiller <daniel@espendiller.net>
*/
public class PhpGotoDeclarationHandler extends CompletionContributor implements GotoDeclarationHandler {
private static final GotoCompletionContributor<?>[] CONTRIBUTORS = new GotoCompletionContributor<?>[] {
new PhpArrayCallbackGotoCompletion(),
new GlobalStringClassGoto(),
new PhpDocTagGotoCompletionContributor(),
};
public PhpGotoDeclarationHandler() {
for (final GotoCompletionContributor<?> contributor : CONTRIBUTORS) {
extend(CompletionType.BASIC, contributor.getPattern(), new CompletionProvider<CompletionParameters>() {
@Override
protected void addCompletions(@NotNull CompletionParameters completionParameters, @NotNull ProcessingContext processingContext, @NotNull CompletionResultSet completionResultSet) {
contributor.addCompletions(completionParameters, processingContext, completionResultSet);
}
});
}
}
@Nullable
@Override
public PsiElement[] getGotoDeclarationTargets(@Nullable PsiElement psiElement, int i, Editor editor) {
if(psiElement == null) {
return null;
}
Set<PsiElement> psiElements = new HashSet<>();
for (final GotoCompletionContributor<?> contributor : CONTRIBUTORS) {
if(!contributor.getPattern().accepts(psiElement)) {
continue;
}
PsiElement[] targets = contributor.getGotoDeclarationTargets(psiElement, i, editor);
if(targets != null && targets.length > 0) {
ContainerUtil.addAllNotNull(psiElements, targets);
}
}
return psiElements.toArray(new PsiElement[psiElements.size()]); }
@Nullable
@Override
public String getActionText(@NotNull DataContext dataContext) {
return null;
}
}