Skip to content

Commit abf4a5c

Browse files
committed
Show kotlin builtIn classes in "go to symbol"
#KT-10474 Fixed
1 parent af1e834 commit abf4a5c

File tree

3 files changed

+36
-5
lines changed

3 files changed

+36
-5
lines changed

idea/src/org/jetbrains/kotlin/idea/goto/gotoContributors.kt

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,18 @@ import com.intellij.navigation.ChooseByNameContributor
2020
import com.intellij.navigation.GotoClassContributor
2121
import com.intellij.navigation.NavigationItem
2222
import com.intellij.openapi.project.Project
23+
import com.intellij.openapi.vfs.VirtualFile
24+
import com.intellij.psi.search.DelegatingGlobalSearchScope
2325
import com.intellij.psi.search.GlobalSearchScope
2426
import com.intellij.psi.stubs.StubIndex
27+
import org.jetbrains.kotlin.idea.decompiler.builtIns.KotlinBuiltInClassFileType
2528
import org.jetbrains.kotlin.idea.stubindex.KotlinClassShortNameIndex
2629
import org.jetbrains.kotlin.idea.stubindex.KotlinFunctionShortNameIndex
2730
import org.jetbrains.kotlin.idea.stubindex.KotlinPropertyShortNameIndex
2831
import org.jetbrains.kotlin.idea.stubindex.KotlinSourceFilterScope
2932
import org.jetbrains.kotlin.psi.KtEnumEntry
3033
import org.jetbrains.kotlin.psi.KtNamedDeclaration
34+
import java.util.*
3135

3236
class KotlinGotoClassContributor : GotoClassContributor {
3337
override fun getQualifiedName(item: NavigationItem): String? {
@@ -51,10 +55,18 @@ class KotlinGotoClassContributor : GotoClassContributor {
5155
}
5256
}
5357

54-
58+
/*
59+
* Logic in IDEA that adds classes to "go to symbol" popup result goes around GotoClassContributor.
60+
* For Kotlin classes it works using light class generation.
61+
* We have to process Kotlin builtIn classes separately since no light classes are built for them.
62+
* */
5563
class KotlinGotoSymbolContributor : ChooseByNameContributor {
5664
override fun getNames(project: Project, includeNonProjectItems: Boolean): Array<String> {
57-
return listOf(KotlinFunctionShortNameIndex.getInstance(), KotlinPropertyShortNameIndex.getInstance()).flatMap {
65+
return listOf(
66+
KotlinFunctionShortNameIndex.getInstance(),
67+
KotlinPropertyShortNameIndex.getInstance(),
68+
KotlinClassShortNameIndex.getInstance()
69+
).flatMap {
5870
StubIndex.getInstance().getAllKeys(it.key, project)
5971
}.toTypedArray()
6072
}
@@ -63,9 +75,17 @@ class KotlinGotoSymbolContributor : ChooseByNameContributor {
6375
val baseScope = if (includeNonProjectItems) GlobalSearchScope.allScope(project) else GlobalSearchScope.projectScope(project)
6476
val noLibrarySourceScope = KotlinSourceFilterScope.sourceAndClassFiles(baseScope, project)
6577

66-
val functions = KotlinFunctionShortNameIndex.getInstance().get(name, project, noLibrarySourceScope)
67-
val properties = KotlinPropertyShortNameIndex.getInstance().get(name, project, noLibrarySourceScope)
78+
val result = ArrayList<NavigationItem>()
79+
result += KotlinFunctionShortNameIndex.getInstance().get(name, project, noLibrarySourceScope)
80+
result += KotlinPropertyShortNameIndex.getInstance().get(name, project, noLibrarySourceScope)
81+
result += KotlinClassShortNameIndex.getInstance().get(name, project, BuiltInClassesScope(noLibrarySourceScope))
82+
83+
return result.toTypedArray()
84+
}
85+
}
6886

69-
return functions.plus<NavigationItem>(properties).filterNotNull().toTypedArray()
87+
private class BuiltInClassesScope(baseScope: GlobalSearchScope) : DelegatingGlobalSearchScope(baseScope) {
88+
override fun contains(file: VirtualFile): Boolean {
89+
return file.fileType == KotlinBuiltInClassFileType && file in myBaseScope
7090
}
7191
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
// RUNTIME_WITH_SOURCES
2+
// CHECK_BOX
3+
// SEARCH_TEXT: Int
4+
// ALLOW_MORE_RESULTS
5+
// REF: (kotlin).Int

idea/tests/org/jetbrains/kotlin/idea/navigation/KotlinGotoTestGenerated.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,12 @@ public void testBuiltInArrayOfNulls() throws Exception {
112112
doSymbolTest(fileName);
113113
}
114114

115+
@TestMetadata("builtInInt.kt")
116+
public void testBuiltInInt() throws Exception {
117+
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/navigation/gotoSymbol/builtInInt.kt");
118+
doSymbolTest(fileName);
119+
}
120+
115121
@TestMetadata("functions.kt")
116122
public void testFunctions() throws Exception {
117123
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/navigation/gotoSymbol/functions.kt");

0 commit comments

Comments
 (0)