ML in SE: Refactor recent files prioritization in SE

Added a flag in the MixedListFactory constructor, renamed the experiment type name, added shouldAllTabPrioritizeRecentFiles as a property instead of a function and refactored code

(cherry picked from commit 87488864e2841b5f57833c5aaf76e7a672168d29)

IJ-CR-117209

GitOrigin-RevId: 0f5ae4c8b830f2f68ddaebf9b3534e12a040d19f
This commit is contained in:
fatimazahra
2023-10-20 10:10:14 +02:00
committed by intellij-monorepo-bot
parent 61cc7bd78f
commit 39fa92a0ad
5 changed files with 32 additions and 25 deletions

View File

@@ -15,18 +15,20 @@ final class MixedListFactory extends SEResultsListFactory {
private final List<String> prioritizedContributors = new ArrayList<>();
MixedListFactory() {
MixedListFactory(boolean forceDisableRecentFilesPrioritization) {
prioritizedContributors.add(CalculatorSEContributor.class.getName());
prioritizedContributors.add("AutocompletionContributor");
prioritizedContributors.add("CommandsContributor");
prioritizedContributors.add(TopHitSEContributor.class.getSimpleName());
if (Registry.is("search.everywhere.recent.at.top")) {
prioritizedContributors.add(RecentFilesSEContributor.class.getSimpleName());
if (!forceDisableRecentFilesPrioritization) {
if (Registry.is("search.everywhere.recent.at.top")) {
prioritizedContributors.add(RecentFilesSEContributor.class.getSimpleName());
}
}
}
void remove(String contributorId) {
prioritizedContributors.remove(contributorId);
MixedListFactory(){
this(false);
}
@Override

View File

@@ -30,6 +30,8 @@ interface SearchEverywhereMlService {
}
}
val shouldAllTabPrioritizeRecentFiles: Boolean
/**
* Indicates whether machine learning in Search Everywhere is enabled.
* This method can return false if ML-ranking is disabled and no experiments are allowed
@@ -63,6 +65,4 @@ interface SearchEverywhereMlService {
fun wrapRenderer(renderer: ListCellRenderer<Any>, listModel: SearchListModel): ListCellRenderer<Any>
fun buildListener(listModel: SearchListModel, resultsList: JBList<Any>, selectionTracker: SEListSelectionTracker): SearchListener?
fun shouldAllTabPrioritizeRecentFiles(tabId: String) : Boolean
}

View File

@@ -157,9 +157,6 @@ public final class SearchEverywhereUI extends BigPopupUI implements DataProvider
@NotNull Function<? super String, String> shortcutSupplier,
@Nullable SearchEverywhereSpellingCorrector spellingCorrector) {
super(project);
myListFactory = Experiments.getInstance().isFeatureEnabled("search.everywhere.mixed.results")
? new MixedListFactory()
: new GroupedListFactory();
mySpellingCorrector = spellingCorrector;
@@ -171,10 +168,17 @@ public final class SearchEverywhereUI extends BigPopupUI implements DataProvider
shortcutSupplier, project == null ? null : new ShowInFindToolWindowAction(), this);
myMlService = SearchEverywhereMlService.getInstance();
if (Experiments.getInstance().isFeatureEnabled("search.everywhere.mixed.results")) {
myListFactory =
(myMlService != null && !myMlService.getShouldAllTabPrioritizeRecentFiles()) ?
new MixedListFactory(true) : new MixedListFactory();
}
else {
myListFactory = new GroupedListFactory();
}
if (myMlService != null) {
if (myListFactory instanceof MixedListFactory && !myMlService.shouldAllTabPrioritizeRecentFiles(myHeader.getSelectedTab().getID())) {
((MixedListFactory)myListFactory).remove(RecentFilesSEContributor.class.getSimpleName());
}
myMlService.onSessionStarted(myProject, new SearchEverywhereMixedListInfo(myListFactory));
}

View File

@@ -30,14 +30,22 @@ class SearchEverywhereMlRankingService : SearchEverywhereMlService {
internal val experiment: SearchEverywhereMlExperiment = SearchEverywhereMlExperiment()
override val shouldAllTabPrioritizeRecentFiles: Boolean
get() = experiment.getExperimentForTab(
SearchEverywhereTabWithMlRanking.ALL) != SearchEverywhereMlExperiment.ExperimentType.NO_RECENT_FILES_PRIORITIZATION
override fun isEnabled(): Boolean {
val settings = service<SearchEverywhereMlSettings>()
return settings.isSortingByMlEnabledInAnyTab() || experiment.isAllowed
}
internal fun shouldUseExperimentalModel(tab: SearchEverywhereTabWithMlRanking): Boolean {
return experiment.getExperimentForTab(tab) == SearchEverywhereMlExperiment.ExperimentType.USE_EXPERIMENTAL_MODEL
|| experiment.getExperimentForTab(tab) == SearchEverywhereMlExperiment.ExperimentType.USE_MODEL_WITHOUT_RECENT_FILES_PRIOR
return when (experiment.getExperimentForTab(tab)) {
SearchEverywhereMlExperiment.ExperimentType.USE_EXPERIMENTAL_MODEL -> true
SearchEverywhereMlExperiment.ExperimentType.NO_RECENT_FILES_PRIORITIZATION -> true
else -> false
}
}
internal fun getCurrentSession(): SearchEverywhereMLSearchSession? {
@@ -55,13 +63,6 @@ class SearchEverywhereMlRankingService : SearchEverywhereMlService {
}
}
override fun shouldAllTabPrioritizeRecentFiles(tabId: String): Boolean {
val tab = SearchEverywhereTabWithMlRanking.findById(tabId)
return tab?.let {
experiment.getExperimentForTab(tab) != SearchEverywhereMlExperiment.ExperimentType.USE_MODEL_WITHOUT_RECENT_FILES_PRIOR
} ?: true
}
override fun createFoundElementInfo(contributor: SearchEverywhereContributor<*>,
element: Any,
priority: Int): SearchEverywhereFoundElementInfo {
@@ -137,7 +138,7 @@ class SearchEverywhereMlRankingService : SearchEverywhereMlService {
else {
return settings.isSortingByMlEnabled(tab)
|| experiment.getExperimentForTab(tab) == SearchEverywhereMlExperiment.ExperimentType.USE_EXPERIMENTAL_MODEL
|| experiment.getExperimentForTab(tab) == SearchEverywhereMlExperiment.ExperimentType.USE_MODEL_WITHOUT_RECENT_FILES_PRIOR
|| experiment.getExperimentForTab(tab) == SearchEverywhereMlExperiment.ExperimentType.NO_RECENT_FILES_PRIORITIZATION
}
}

View File

@@ -44,7 +44,7 @@ class SearchEverywhereMlExperiment {
SearchEverywhereTabWithMlRanking.ALL to Experiment(
2 to ExperimentType.USE_EXPERIMENTAL_MODEL,
3 to ExperimentType.USE_MODEL_WITHOUT_RECENT_FILES_PRIOR
3 to ExperimentType.NO_RECENT_FILES_PRIORITIZATION
)
)
@@ -90,7 +90,7 @@ class SearchEverywhereMlExperiment {
internal fun getTabExperiments(): Map<SearchEverywhereTabWithMlRanking, Experiment> = tabExperiments
enum class ExperimentType {
NO_EXPERIMENT, NO_ML, USE_EXPERIMENTAL_MODEL, NO_ML_FEATURES, ENABLE_TYPOS, USE_MODEL_WITHOUT_RECENT_FILES_PRIOR
NO_EXPERIMENT, NO_ML, USE_EXPERIMENTAL_MODEL, NO_ML_FEATURES, ENABLE_TYPOS, NO_RECENT_FILES_PRIORITIZATION
}
@VisibleForTesting