Find Usages: Support text-file search of Kotlin declarations

This commit is contained in:
Alexey Sedunov
2014-12-15 17:17:38 +03:00
parent 7924568355
commit b5fb09b8bc
10 changed files with 64 additions and 5 deletions
@@ -72,4 +72,6 @@ class DelegatingFindMemberUsagesHandler(
}
return handler.processElementUsages(element, processor, handlerOptions)
}
override fun isSearchForTextOccurencesAvailable(psiElement: PsiElement, isSingleFile: Boolean): Boolean = !isSingleFile
}
@@ -37,6 +37,10 @@ import org.jetbrains.jet.plugin.findUsages.toClassHelper
import org.jetbrains.jet.plugin.findUsages.toClassDeclarationsHelper
import org.jetbrains.jet.plugin.search.usagesSearch.search
import org.jetbrains.jet.plugin.util.application.runReadAction
import org.jetbrains.jet.asJava.namedUnwrappedElement
import java.util.Collections
import com.intellij.find.findUsages.JavaFindUsagesHandler
import com.intellij.find.findUsages.JavaFindUsagesHandlerFactory
public class KotlinFindClassUsagesHandler(
jetClass: JetClassOrObject,
@@ -84,11 +88,26 @@ public class KotlinFindClassUsagesHandler(
}
}
protected override fun isSearchForTextOccurencesAvailable(psiElement: PsiElement, isSingleFile: Boolean): Boolean {
if (isSingleFile)
return false
protected override fun getStringsToSearch(element: PsiElement): Collection<String> {
val psiClass = when (element) {
is PsiClass -> element
is JetClassOrObject -> LightClassUtil.getPsiClass(getElement())
else -> null
} ?: return Collections.emptyList()
return psiElement is JetClassOrObject
// Work around the protected method in JavaFindUsagesHandler
// todo: Use JavaFindUsagesHelper.getElementNames() when it becomes public in IDEA
var stringsToSearch: Collection<String>
object: JavaFindUsagesHandler(psiClass, JavaFindUsagesHandlerFactory.getInstance(element.getProject())) {
{
stringsToSearch = getStringsToSearch(psiClass)
}
}
return stringsToSearch
}
protected override fun isSearchForTextOccurencesAvailable(psiElement: PsiElement, isSingleFile: Boolean): Boolean {
return !isSingleFile
}
public override fun getFindUsagesOptions(dataContext: DataContext?): FindUsagesOptions {
@@ -0,0 +1,7 @@
// PSI_ELEMENT: org.jetbrains.jet.lang.psi.JetClass
// OPTIONS: textOccurrences
package test
class <caret>Foo {
}
@@ -0,0 +1,2 @@
test.Foo
Foo
@@ -0,0 +1 @@
Unclassified usage (1: 1) test.Foo
@@ -0,0 +1,9 @@
// PSI_ELEMENT: org.jetbrains.jet.lang.psi.JetNamedFunction
// OPTIONS: textOccurrences
package test
class Foo {
fun <caret>foo() {
}
}
@@ -0,0 +1 @@
Function foo is defined in class Foo
@@ -0,0 +1 @@
Unclassified usage (1: 10) Function foo is defined in class Foo
@@ -231,6 +231,11 @@ public abstract class AbstractJetFindUsagesTest extends JetLightCodeInsightFixtu
return true;
}
else if (s.equals("textOccurrences")) {
options.isSearchForTextOccurrences = true;
return true;
}
return false;
}
@@ -304,7 +309,7 @@ public abstract class AbstractJetFindUsagesTest extends JetLightCodeInsightFixtu
if (!name.startsWith(prefix) || name.equals(mainFileName)) return false;
String ext = name.substring(name.lastIndexOf('.') + 1);
return ext.equals("kt") || ext.equals("java") || ext.equals("xml");
return ext.equals("kt") || ext.equals("java") || ext.equals("xml") || ext.equals("text");
}
}
);
@@ -141,6 +141,12 @@ public class JetFindUsagesTestGenerated extends AbstractJetFindUsagesTest {
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/findUsages/kotlin/findClassUsages"), Pattern.compile("^(.+)\\.0\\.kt$"), true);
}
@TestMetadata("classUsedInPlainText.0.kt")
public void testClassUsedInPlainText() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/testData/findUsages/kotlin/findClassUsages/classUsedInPlainText.0.kt");
doTest(fileName);
}
@TestMetadata("classUsedInTextAsRef.0.kt")
public void testClassUsedInTextAsRef() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/testData/findUsages/kotlin/findClassUsages/classUsedInTextAsRef.0.kt");
@@ -456,6 +462,12 @@ public class JetFindUsagesTestGenerated extends AbstractJetFindUsagesTest {
doTest(fileName);
}
@TestMetadata("functionUsedInPlainText.0.kt")
public void testFunctionUsedInPlainText() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/testData/findUsages/kotlin/findFunctionUsages/functionUsedInPlainText.0.kt");
doTest(fileName);
}
@TestMetadata("javaAndKotlinOverrides.0.kt")
public void testJavaAndKotlinOverrides() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/testData/findUsages/kotlin/findFunctionUsages/javaAndKotlinOverrides.0.kt");