surround with statement
[idea/javafx-plugin.git] / src / org / jetbrains / javafx / findUsages / JavaFxFindUsagesProvider.java
1 package org.jetbrains.javafx.findUsages;
2
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.*;
13
14 /**
15  * Created by IntelliJ IDEA.
16  *
17  * @author: Alexey.Ivanov
18  */
19 public class JavaFxFindUsagesProvider implements FindUsagesProvider {
20   @Override
21   public WordsScanner getWordsScanner() {
22     return new DefaultWordsScanner(new JavaFxFlexLexer(), JavaFxTokenTypes.NAME, JavaFxTokenTypes.COMMENTS, JavaFxTokenTypes.LITERALS);
23   }
24
25   @Override
26   public boolean canFindUsagesFor(@NotNull final PsiElement psiElement) {
27     return psiElement instanceof JavaFxFunctionDefinition || psiElement instanceof JavaFxVariableDeclaration ||
28            psiElement instanceof JavaFxClassDefinition || psiElement instanceof JavaFxParameter;
29   }
30
31   @Override
32   public String getHelpId(@NotNull final PsiElement psiElement) {
33     return null;
34   }
35
36   @NotNull
37   @Override
38   public String getType(@NotNull final PsiElement element) {
39     if (element instanceof JavaFxParameter) {
40       return "parameter";
41     }
42     if (element instanceof JavaFxFunction) {
43       return "function";
44     }
45     if (element instanceof JavaFxClassDefinition) {
46       return "class";
47     }
48     if (element instanceof JavaFxVariableDeclaration) {
49       return "variable";
50     }
51     return "";
52   }
53
54   @NotNull
55   @Override
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;
60     }
61     return "";
62   }
63
64   @NotNull
65   @Override
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);
73       }
74       return result.toString();
75     }
76     if (element instanceof JavaFxFunctionDefinition) {
77       StringBuilder result = new StringBuilder();
78       appendFunctionDescription(result, (JavaFxFunctionDefinition)element);
79       return result.toString();
80     }
81     return getDescriptiveName(element);
82   }
83
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());
89     }
90   }
91 }