From a5024387714186a1182cbe1166155c114cd4fd0b Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Thu, 16 Jun 2011 12:59:03 +0200 Subject: [PATCH] all the little dances required to have Find Usages working --- idea/src/META-INF/plugin.xml | 2 + .../JetElementDescriptionProvider.java | 24 +++++++ .../findUsages/JetFindUsagesProvider.java | 63 +++++++++++++++++++ .../plugin/findUsages/JetWordsScanner.java | 18 ++++++ 4 files changed, 107 insertions(+) create mode 100644 idea/src/org/jetbrains/jet/plugin/findUsages/JetElementDescriptionProvider.java create mode 100644 idea/src/org/jetbrains/jet/plugin/findUsages/JetFindUsagesProvider.java create mode 100644 idea/src/org/jetbrains/jet/plugin/findUsages/JetWordsScanner.java diff --git a/idea/src/META-INF/plugin.xml b/idea/src/META-INF/plugin.xml index de3115f10cd..dfeb5885b21 100644 --- a/idea/src/META-INF/plugin.xml +++ b/idea/src/META-INF/plugin.xml @@ -29,6 +29,7 @@ + @@ -38,5 +39,6 @@ + diff --git a/idea/src/org/jetbrains/jet/plugin/findUsages/JetElementDescriptionProvider.java b/idea/src/org/jetbrains/jet/plugin/findUsages/JetElementDescriptionProvider.java new file mode 100644 index 00000000000..195cba25917 --- /dev/null +++ b/idea/src/org/jetbrains/jet/plugin/findUsages/JetElementDescriptionProvider.java @@ -0,0 +1,24 @@ +package org.jetbrains.jet.plugin.findUsages; + +import com.intellij.psi.ElementDescriptionLocation; +import com.intellij.psi.ElementDescriptionProvider; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiNamedElement; +import com.intellij.usageView.UsageViewLongNameLocation; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.lang.psi.JetElement; + +/** + * @author yole + */ +public class JetElementDescriptionProvider implements ElementDescriptionProvider { + @Override + public String getElementDescription(@NotNull PsiElement element, @NotNull ElementDescriptionLocation location) { + if (location instanceof UsageViewLongNameLocation) { + if (element instanceof PsiNamedElement && element instanceof JetElement) { + return ((PsiNamedElement)element).getName(); + } + } + return null; + } +} diff --git a/idea/src/org/jetbrains/jet/plugin/findUsages/JetFindUsagesProvider.java b/idea/src/org/jetbrains/jet/plugin/findUsages/JetFindUsagesProvider.java new file mode 100644 index 00000000000..825b0865387 --- /dev/null +++ b/idea/src/org/jetbrains/jet/plugin/findUsages/JetFindUsagesProvider.java @@ -0,0 +1,63 @@ +package org.jetbrains.jet.plugin.findUsages; + +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.jet.lang.psi.*; + +/** + * @author yole + */ +public class JetFindUsagesProvider implements FindUsagesProvider { + @Override + public boolean canFindUsagesFor(@NotNull PsiElement psiElement) { + return psiElement instanceof JetNamedDeclaration; + } + + @Override + public WordsScanner getWordsScanner() { + return new JetWordsScanner(); + } + + + @Override + public String getHelpId(@NotNull PsiElement psiElement) { + return null; + } + + @NotNull + @Override + public String getType(@NotNull PsiElement psiElement) { + if (psiElement instanceof JetFunction) { + return "function"; + } + if (psiElement instanceof JetClass) { + return "class"; + } + if (psiElement instanceof JetParameter) { + return "parameter"; + } + if (psiElement instanceof JetProperty) { + return "property"; + } + return ""; + } + + @NotNull + @Override + public String getDescriptiveName(@NotNull PsiElement psiElement) { + if (psiElement instanceof PsiNamedElement) { + final String name = ((PsiNamedElement)psiElement).getName(); + return name == null ? "" : name; + } + return ""; + } + + @NotNull + @Override + public String getNodeText(@NotNull PsiElement psiElement, boolean useFullName) { + return getDescriptiveName(psiElement); + } +} diff --git a/idea/src/org/jetbrains/jet/plugin/findUsages/JetWordsScanner.java b/idea/src/org/jetbrains/jet/plugin/findUsages/JetWordsScanner.java new file mode 100644 index 00000000000..8f72718d927 --- /dev/null +++ b/idea/src/org/jetbrains/jet/plugin/findUsages/JetWordsScanner.java @@ -0,0 +1,18 @@ +package org.jetbrains.jet.plugin.findUsages; + +import com.intellij.lang.cacheBuilder.DefaultWordsScanner; +import com.intellij.psi.tree.TokenSet; +import org.jetbrains.jet.lexer.JetLexer; +import org.jetbrains.jet.lexer.JetTokens; + +/** + * @author yole + */ +public class JetWordsScanner extends DefaultWordsScanner { + public JetWordsScanner() { + super(new JetLexer(), + TokenSet.create(JetTokens.IDENTIFIER), + JetTokens.COMMENTS, + JetTokens.STRINGS); + } +}