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);
+ }
+}