Skip to content

Commit 7376dfa

Browse files
committed
added EventInvoicationGoToDeclarationHandler [closes #15]
1 parent c5c6174 commit 7376dfa

File tree

3 files changed

+63
-0
lines changed

3 files changed

+63
-0
lines changed

META-INF/plugin.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
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>
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
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+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
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+
}

0 commit comments

Comments
 (0)