mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
ML in SE: Reuse prefix matching features from files in classes (IDEA-278231)
Move features produced by PrefixMatchingUtil up, so that they can be used for both files and classes GitOrigin-RevId: 588906a4a4ad680039a541de75de50548c6ac15a
This commit is contained in:
committed by
intellij-monorepo-bot
parent
95948310a4
commit
3908fd0a72
+5
@@ -8,6 +8,7 @@ import com.intellij.openapi.roots.ModuleRootManager
|
||||
import com.intellij.openapi.roots.ProjectRootManager
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.psi.PsiElement
|
||||
import com.intellij.psi.PsiNamedElement
|
||||
|
||||
class SearchEverywhereClassFeaturesProvider : SearchEverywhereClassOrFileFeaturesProvider(ClassSearchEverywhereContributor::class.java) {
|
||||
companion object {
|
||||
@@ -26,6 +27,10 @@ class SearchEverywhereClassFeaturesProvider : SearchEverywhereClassOrFileFeature
|
||||
PRIORITY to elementPriority,
|
||||
)
|
||||
|
||||
(element as? PsiNamedElement)?.name?.let { elementName ->
|
||||
data.putAll(getNameMatchingFeatures(elementName, searchQuery))
|
||||
}
|
||||
|
||||
data.putIfValueNotNull(IS_DEPRECATED, isDeprecated(presentation))
|
||||
data.putIfValueNotNull(IS_ACCESSIBLE_FROM_MODULE, isAccessibleFromModule(element, cache?.openedFile))
|
||||
return data
|
||||
|
||||
+21
@@ -17,6 +17,7 @@ import com.intellij.openapi.roots.ProjectRootManager
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.psi.PsiElement
|
||||
import com.intellij.psi.PsiFileSystemItem
|
||||
import com.intellij.textMatching.PrefixMatchingUtil
|
||||
import com.intellij.util.Time
|
||||
|
||||
abstract class SearchEverywhereClassOrFileFeaturesProvider(supportedTab: Class<out SearchEverywhereContributor<*>>)
|
||||
@@ -234,5 +235,25 @@ abstract class SearchEverywhereClassOrFileFeaturesProvider(supportedTab: Class<o
|
||||
}
|
||||
}
|
||||
|
||||
protected fun getNameMatchingFeatures(nameOfFoundElement: String, searchQuery: String): Map<String, Any> {
|
||||
fun changeToCamelCase(str: String): String {
|
||||
val words = str.split('_')
|
||||
val firstWord = words.first()
|
||||
if (words.size == 1) {
|
||||
return firstWord
|
||||
} else {
|
||||
return firstWord.plus(
|
||||
words.subList(1, words.size)
|
||||
.joinToString(separator = "") { s -> s.replaceFirstChar { it.uppercaseChar() } }
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
val features = mutableMapOf<String, Any>()
|
||||
PrefixMatchingUtil.calculateFeatures(nameOfFoundElement, searchQuery, features)
|
||||
return features.mapKeys { changeToCamelCase(it.key) } // Change snake case to camel case for consistency with other feature names.
|
||||
.mapValues { if (it.value is Double) roundDouble(it.value as Double) else it.value }
|
||||
}
|
||||
|
||||
protected data class Cache(val fileTypeStats: Map<String, FileTypeUsageSummary>, val openedFile: VirtualFile?)
|
||||
}
|
||||
+5
-25
@@ -13,7 +13,6 @@ import com.intellij.openapi.fileEditor.impl.EditorHistoryManager
|
||||
import com.intellij.openapi.util.io.FileUtil
|
||||
import com.intellij.psi.PsiElement
|
||||
import com.intellij.psi.PsiFileSystemItem
|
||||
import com.intellij.textMatching.PrefixMatchingUtil
|
||||
import com.intellij.util.PathUtil
|
||||
import com.intellij.util.Time.*
|
||||
|
||||
@@ -53,7 +52,11 @@ internal class SearchEverywhereFileFeaturesProvider
|
||||
SearchEverywhereUsageTriggerCollector.TOTAL_SYMBOLS_AMOUNT_DATA_KEY to searchQuery.length,
|
||||
)
|
||||
|
||||
data.putAll(getNameMatchingFeatures(item, searchQuery))
|
||||
|
||||
val nameOfItem = item.virtualFile.nameWithoutExtension
|
||||
// Remove the directory and the extension if they are present
|
||||
val fileNameFromQuery = FileUtil.getNameWithoutExtension(PathUtil.getFileName(searchQuery))
|
||||
data.putAll(getNameMatchingFeatures(nameOfItem, fileNameFromQuery))
|
||||
|
||||
if (item.isDirectory) {
|
||||
// Rest of the features are only applicable to files, not directories
|
||||
@@ -75,29 +78,6 @@ internal class SearchEverywhereFileFeaturesProvider
|
||||
return ReadAction.compute<Boolean, Nothing> { favoritesManager.getFavoriteListName(null, item.virtualFile) != null }
|
||||
}
|
||||
|
||||
private fun getNameMatchingFeatures(item: PsiFileSystemItem, searchQuery: String): Map<String, Any> {
|
||||
fun changeToCamelCase(str: String): String {
|
||||
val words = str.split('_')
|
||||
val firstWord = words.first()
|
||||
if (words.size == 1) {
|
||||
return firstWord
|
||||
} else {
|
||||
return firstWord.plus(
|
||||
words.subList(1, words.size)
|
||||
.joinToString(separator = "") { s -> s.replaceFirstChar { it.uppercaseChar() } }
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
// Remove the directory and the extension if they are present
|
||||
val filename = FileUtil.getNameWithoutExtension(PathUtil.getFileName(searchQuery))
|
||||
|
||||
val features = mutableMapOf<String, Any>()
|
||||
PrefixMatchingUtil.calculateFeatures(item.virtualFile.nameWithoutExtension, filename, features)
|
||||
return features.mapKeys { changeToCamelCase(it.key) } // Change snake case to camel case for consistency with other feature names.
|
||||
.mapValues { if (it.value is Double) roundDouble(it.value as Double) else it.value }
|
||||
}
|
||||
|
||||
private fun isOpened(item: PsiFileSystemItem): Boolean {
|
||||
val openedFiles = FileEditorManager.getInstance(item.project).openFiles
|
||||
return item.virtualFile in openedFiles
|
||||
|
||||
Reference in New Issue
Block a user