Package org.jetbrains.plugins.clojure.findUsages

Source Code of org.jetbrains.plugins.clojure.findUsages.ClojureFindUsagesProvider

package org.jetbrains.plugins.clojure.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 org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.plugins.clojure.lexer.ClojureFlexLexer;
import org.jetbrains.plugins.clojure.lexer.ClojureTokenTypes;
import org.jetbrains.plugins.clojure.psi.api.defs.ClDef;
import org.jetbrains.plugins.clojure.psi.api.symbols.ClSymbol;

/**
* @author ilyas
*/
public class ClojureFindUsagesProvider implements FindUsagesProvider{

  @Nullable
  public WordsScanner getWordsScanner() {
    return new DefaultWordsScanner(new ClojureFlexLexer(),
            ClojureTokenTypes.IDENTIFIERS, ClojureTokenTypes.COMMENTS, ClojureTokenTypes.STRINGS);
  }

  public boolean canFindUsagesFor(@NotNull PsiElement psiElement) {
    return psiElement instanceof ClDef || psiElement instanceof ClSymbol;
  }

  public String getHelpId(@NotNull PsiElement psiElement) {
    return null;
  }

  @NotNull
  public String getType(@NotNull PsiElement element) {
    if (element instanceof ClSymbol) return "symbol";
    if (element instanceof ClDef) return "definition";
    return "entity";
  }

  @NotNull
  public String getDescriptiveName(@NotNull PsiElement element) {
    if (element instanceof ClSymbol) {
      ClSymbol symbol = (ClSymbol) element;
      final String name = symbol.getText();
      return name == null ? symbol.getText() : name;
    }
    if (element instanceof ClDef) {
      ClDef def = (ClDef) element;
      return def.getPresentationText();
    }
    if (element instanceof PsiNamedElement) {
      final String s = ((PsiNamedElement) element).getName();
      return s != null ? s : element.getText();
    }
    return element.getText();
  }

  @NotNull
  public String getNodeText(@NotNull PsiElement element, boolean useFullName) {
    if (element instanceof ClSymbol) {
      ClSymbol symbol = (ClSymbol) element;
      final String name = symbol.getReferenceName();
      return name == null ? symbol.getText() : name;
    }
    if (element instanceof ClDef) {
      ClDef def = (ClDef) element;
      return def.getDefinedName();
    }
    return element.getText();
  }
}
TOP

Related Classes of org.jetbrains.plugins.clojure.findUsages.ClojureFindUsagesProvider

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.