1 package org.jetbrains.javafx.findUsages;
3 import com.intellij.lang.cacheBuilder.DefaultWordsScanner;
4 import com.intellij.lang.cacheBuilder.WordsScanner;
5 import com.intellij.lang.findUsages.FindUsagesProvider;
6 import com.intellij.psi.PsiElement;
7 import com.intellij.psi.PsiNamedElement;
8 import com.intellij.psi.util.PsiTreeUtil;
9 import org.jetbrains.annotations.NotNull;
10 import org.jetbrains.javafx.lang.lexer.JavaFxFlexLexer;
11 import org.jetbrains.javafx.lang.lexer.JavaFxTokenTypes;
12 import org.jetbrains.javafx.lang.psi.*;
15 * Created by IntelliJ IDEA.
17 * @author: Alexey.Ivanov
19 public class JavaFxFindUsagesProvider implements FindUsagesProvider {
21 public WordsScanner getWordsScanner() {
22 return new DefaultWordsScanner(new JavaFxFlexLexer(), JavaFxTokenTypes.NAME, JavaFxTokenTypes.COMMENTS, JavaFxTokenTypes.LITERALS);
26 public boolean canFindUsagesFor(@NotNull final PsiElement psiElement) {
27 return psiElement instanceof JavaFxFunctionDefinition || psiElement instanceof JavaFxVariableDeclaration ||
28 psiElement instanceof JavaFxClassDefinition || psiElement instanceof JavaFxParameter;
32 public String getHelpId(@NotNull final PsiElement psiElement) {
38 public String getType(@NotNull final PsiElement element) {
39 if (element instanceof JavaFxParameter) {
42 if (element instanceof JavaFxFunction) {
45 if (element instanceof JavaFxClassDefinition) {
48 if (element instanceof JavaFxVariableDeclaration) {
56 public String getDescriptiveName(@NotNull final PsiElement element) {
57 if (element instanceof PsiNamedElement) {
58 final String name = ((PsiNamedElement)element).getName();
59 return (name == null) ? "<unnamed>" : name;
66 public String getNodeText(@NotNull final PsiElement element, final boolean useFullName) {
67 if (element instanceof JavaFxParameter) {
68 StringBuilder result = new StringBuilder(((JavaFxParameter)element).getName());
69 final JavaFxFunctionDefinition function = PsiTreeUtil.getParentOfType(element, JavaFxFunctionDefinition.class);
70 if (function != null) {
71 result.append(" of ");
72 appendFunctionDescription(result, function);
74 return result.toString();
76 if (element instanceof JavaFxFunctionDefinition) {
77 StringBuilder result = new StringBuilder();
78 appendFunctionDescription(result, (JavaFxFunctionDefinition)element);
79 return result.toString();
81 return getDescriptiveName(element);
84 private static void appendFunctionDescription(final StringBuilder result, final JavaFxFunctionDefinition function) {
85 result.append(function.getName()).append("()");
86 final JavaFxClassDefinition containingClass = PsiTreeUtil.getParentOfType(function, JavaFxClassDefinition.class);
87 if (containingClass != null) {
88 result.append(" of class ").append(containingClass.getName());