File tree Expand file tree Collapse file tree 3 files changed +63
-0
lines changed
src/cz/juzna/intellij/nette Expand file tree Collapse file tree 3 files changed +63
-0
lines changed Original file line number Diff line number Diff line change 5252 implementationClass =" cz.juzna.intellij.nette.inspections.CreateComponentReturnFormTypeInspection"
5353 level =" WARNING" enabledByDefault =" true" />
5454 <predefinedCodeStyle implementation =" cz.juzna.intellij.nette.codeStyle.NetteCodeStyle" />
55+ <gotoDeclarationHandler implementation =" cz.juzna.intellij.nette.reference.EventInvocationGoToDeclarationHandler" />
5556 </extensions >
5657
5758 <actions >
Original file line number Diff line number Diff line change 1+ package cz .juzna .intellij .nette .reference ;
2+
3+ import com .intellij .codeInsight .navigation .actions .GotoDeclarationHandlerBase ;
4+ import com .intellij .openapi .editor .Editor ;
5+ import com .intellij .psi .PsiElement ;
6+ import com .intellij .psi .impl .source .tree .LeafPsiElement ;
7+ import com .jetbrains .php .PhpIndex ;
8+ import com .jetbrains .php .lang .documentation .phpdoc .psi .PhpDocMethod ;
9+ import com .jetbrains .php .lang .psi .elements .Field ;
10+ import com .jetbrains .php .lang .psi .elements .Method ;
11+ import com .jetbrains .php .lang .psi .elements .MethodReference ;
12+ import com .jetbrains .php .lang .psi .elements .PhpClass ;
13+ import cz .juzna .intellij .nette .utils .EventUtil ;
14+ import org .jetbrains .annotations .Nullable ;
15+
16+
17+ public class EventInvocationGoToDeclarationHandler extends GotoDeclarationHandlerBase {
18+ @ Nullable
19+ @ Override
20+ public PsiElement getGotoDeclarationTarget (PsiElement psiElement , Editor editor ) {
21+ if (!(psiElement instanceof LeafPsiElement ) || !(psiElement .getParent () instanceof MethodReference )) {
22+ return null ;
23+ }
24+ for (Field field : EventUtil .getEventDeclarations ((MethodReference ) psiElement .getParent ())) {
25+ return field ;
26+ }
27+ return null ;
28+ }
29+ }
Original file line number Diff line number Diff line change 1+ package cz .juzna .intellij .nette .utils ;
2+
3+ import com .jetbrains .php .lang .documentation .phpdoc .psi .PhpDocMethod ;
4+ import com .jetbrains .php .lang .psi .elements .Field ;
5+ import com .jetbrains .php .lang .psi .elements .Method ;
6+ import com .jetbrains .php .lang .psi .elements .MethodReference ;
7+ import com .jetbrains .php .lang .psi .elements .PhpClass ;
8+ import org .jetbrains .annotations .NotNull ;
9+
10+ import java .util .ArrayList ;
11+ import java .util .Collection ;
12+ import java .util .Collections ;
13+
14+ public class EventUtil {
15+
16+ @ NotNull
17+ public static Collection <Field > getEventDeclarations (MethodReference methodReference ) {
18+ String eventName = methodReference .getName ();
19+ if (eventName == null || !eventName .startsWith ("on" )) {
20+ return Collections .emptyList ();
21+ }
22+ Collection <Field > fields = new ArrayList <Field >();
23+ for (PhpClass cls : ClassFinder .getFromMemberReference (methodReference )) {
24+ Method method = cls .findMethodByName (eventName );
25+ if (method == null || method instanceof PhpDocMethod ) {
26+ fields .add (cls .findFieldByName (eventName , false ));
27+ }
28+ }
29+
30+ return fields ;
31+ }
32+
33+ }
You can’t perform that action at this time.
0 commit comments