@JvmField var performExperiment: Boolean,
@JvmField var experimentVersion: Int,
completionList: List<LookupEntryInfo>,
- @JvmField var userFactors: Map<String, String>,
+ @JvmField var userFactors: Map<String, String?>,
selectedPosition: Int)
: LookupStateLogData(
* @param state
* @param relevance map from LookupArranger.getRelevanceObjects
*/
- fun rank(state: LookupElementInfo, relevance: Map<String, Any?>, userFactors: Map<String, Any>): Double?
+ fun rank(state: LookupElementInfo, relevance: Map<String, Any?>, userFactors: Map<String, Any?>): Double?
companion object {
fun getInstance(): Ranker = ServiceManager.getService(Ranker::class.java)
private val featureTransformer = provider.featureTransformer
private val ranker = CompletionRanker()
- override fun rank(state: LookupElementInfo, relevance: Map<String, Any?>, userFactors: Map<String, Any>): Double? {
+ override fun rank(state: LookupElementInfo, relevance: Map<String, Any?>, userFactors: Map<String, Any?>): Double? {
val featureArray = featureTransformer.featureArray(state, relevance, userFactors)
if (featureArray != null) {
return ranker.rank(featureArray)
relevanceObjects: Map<LookupElement, List<Pair<String, Any?>>>): Iterable<LookupElement>?
{
val prefixLength = lookup.prefixLength()
- val userFactors = UserFactorsManager.getInstance(lookup.project).getAllFactors().associate { it.id to it.compute() }
+ val userFactors = UserFactorsManager.getInstance(lookup.project)
+ .getAllFactors()
+ .associate { it.id to it.compute(lookup.project) }
return items
.mapIndexed { index, lookupElement ->
val relevance = relevanceObjects[lookupElement] ?: emptyList()
private fun calculateElementRank(element: LookupElement,
position: Int,
relevance: List<Pair<String, Any?>>,
- userFactors: Map<String, Any>,
+ userFactors: Map<String, Any?>,
prefixLength: Int): Double?
{
val cachedWeight = getCachedRankInfo(element, prefixLength, position)
if (isUnitTestMode() && !isEnabledInTests) return@PropertyChangeListener
val userFactors = UserFactorsManager.getInstance(lookup.project).getAllFactors()
- .associate { it.id to it.compute() }
+ .associate { it.id to it.compute(lookup.project) }
lookup.putUserData(UserFactorsManager.USER_FACTORS_KEY, userFactors)
val shownTimesTracker = PositionTrackingListener(lookup)
lookup.setPrefixChangeListener(shownTimesTracker)
package com.intellij.stats.personalization
+import com.intellij.openapi.project.Project
+
/**
* @author Vitaliy.Bibaev
*/
interface UserFactor {
val id: String
- fun compute(): String
+ fun compute(project: Project): String?
interface FeatureFactor : UserFactor {
fun update(value: Any?)
*/
interface UserFactorsManager {
companion object {
- val USER_FACTORS_KEY = Key.create<Map<String, String>>("com.intellij.stats.personalization.userFactors")
+ val USER_FACTORS_KEY = Key.create<Map<String, String?>>("com.intellij.stats.personalization.userFactors")
fun getInstance(project: Project): UserFactorsManager = project.getComponent(UserFactorsManager::class.java)
}