find usages initial
authoralexey.ivanov <alexey.ivanov@jetbrains.com>
Sun, 24 Oct 2010 13:45:07 +0000 (17:45 +0400)
committeralexey.ivanov <alexey.ivanov@jetbrains.com>
Sun, 24 Oct 2010 13:45:07 +0000 (17:45 +0400)
src/META-INF/plugin.xml
src/org/jetbrains/javafx/findUsages/JavaFxFindUsagesProvider.java [new file with mode: 0644]

index 754a095bedf69b1f63bcf452243327622e7d04cd..7ecf3d299415b44f642532c1effb98624b01c398 100644 (file)
@@ -88,7 +88,7 @@
                              implementationClass="org.jetbrains.javafx.lang.psi.impl.resolve.JavaFxReferenceElementManipulator"/>
     <lang.surroundDescriptor language="JavaFx"
                              implementationClass="org.jetbrains.javafx.refactoring.surround.JavaFxExpressionSurroundDescriptor"/>
-
+      <lang.findUsagesProvider language="JavaFx" implementationClass="org.jetbrains.javafx.findUsages.JavaFxFindUsagesProvider"/>
 
     <frameworkSupport implementation="org.jetbrains.javafx.JavaFxSupportProvider"/>
     <sdkType implementation="org.jetbrains.javafx.sdk.JavaFxSdkType"/>
diff --git a/src/org/jetbrains/javafx/findUsages/JavaFxFindUsagesProvider.java b/src/org/jetbrains/javafx/findUsages/JavaFxFindUsagesProvider.java
new file mode 100644 (file)
index 0000000..a4b16d7
--- /dev/null
@@ -0,0 +1,91 @@
+package org.jetbrains.javafx.findUsages;
+
+import com.intellij.lang.cacheBuilder.DefaultWordsScanner;
+import com.intellij.lang.cacheBuilder.WordsScanner;
+import com.intellij.lang.findUsages.FindUsagesProvider;
+import com.intellij.psi.PsiElement;
+import com.intellij.psi.PsiNamedElement;
+import com.intellij.psi.util.PsiTreeUtil;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.javafx.lang.lexer.JavaFxFlexLexer;
+import org.jetbrains.javafx.lang.lexer.JavaFxTokenTypes;
+import org.jetbrains.javafx.lang.psi.*;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @author: Alexey.Ivanov
+ */
+public class JavaFxFindUsagesProvider implements FindUsagesProvider {
+  @Override
+  public WordsScanner getWordsScanner() {
+    return new DefaultWordsScanner(new JavaFxFlexLexer(), JavaFxTokenTypes.NAME, JavaFxTokenTypes.COMMENTS, JavaFxTokenTypes.LITERALS);
+  }
+
+  @Override
+  public boolean canFindUsagesFor(@NotNull final PsiElement psiElement) {
+    return psiElement instanceof JavaFxFunctionDefinition || psiElement instanceof JavaFxVariableDeclaration ||
+           psiElement instanceof JavaFxClassDefinition || psiElement instanceof JavaFxParameter;
+  }
+
+  @Override
+  public String getHelpId(@NotNull final PsiElement psiElement) {
+    return null;
+  }
+
+  @NotNull
+  @Override
+  public String getType(@NotNull final PsiElement element) {
+    if (element instanceof JavaFxParameter) {
+      return "parameter";
+    }
+    if (element instanceof JavaFxFunction) {
+      return "function";
+    }
+    if (element instanceof JavaFxClassDefinition) {
+      return "class";
+    }
+    if (element instanceof JavaFxVariableDeclaration) {
+      return "variable";
+    }
+    return "";
+  }
+
+  @NotNull
+  @Override
+  public String getDescriptiveName(@NotNull final PsiElement element) {
+    if (element instanceof PsiNamedElement) {
+      final String name = ((PsiNamedElement)element).getName();
+      return (name == null) ? "<unnamed>" : name;
+    }
+    return "";
+  }
+
+  @NotNull
+  @Override
+  public String getNodeText(@NotNull final PsiElement element, final boolean useFullName) {
+    if (element instanceof JavaFxParameter) {
+      StringBuilder result = new StringBuilder(((JavaFxParameter)element).getName());
+      final JavaFxFunctionDefinition function = PsiTreeUtil.getParentOfType(element, JavaFxFunctionDefinition.class);
+      if (function != null) {
+        result.append(" of ");
+        appendFunctionDescription(result, function);
+      }
+      return result.toString();
+    }
+    if (element instanceof JavaFxFunctionDefinition) {
+      StringBuilder result = new StringBuilder();
+      appendFunctionDescription(result, (JavaFxFunctionDefinition)element);
+      return result.toString();
+    }
+    return getDescriptiveName(element);
+  }
+
+  private static void appendFunctionDescription(final StringBuilder result, final JavaFxFunctionDefinition function) {
+    result.append(function.getName()).append("()");
+    final JavaFxClassDefinition containingClass = PsiTreeUtil.getParentOfType(function, JavaFxClassDefinition.class);
+    if (containingClass != null) {
+      result.append(" of class ").append(containingClass.getName());
+    }
+  }
+}