package com.intellij.stats.personalization
-import com.intellij.codeInsight.lookup.LookupElement
-
/**
* @author Vitaliy.Bibaev
*/
interface UserFactor {
val id: String
- fun store(element: LookupElement)
- fun extract(element: LookupElement): Comparable<Nothing>
+ fun compute(): String
+
+ interface FeatureFactor : UserFactor {
+ fun update(value: Any?)
+ }
}
package com.intellij.stats.personalization
import com.intellij.openapi.project.Project
+import com.intellij.openapi.util.Key
/**
* @author Vitaliy.Bibaev
*/
interface UserFactorsManager {
companion object {
+ val USER_FACTORS_KEY = Key.create<Map<String, String>>("com.intellij.stats.personalization.userFactors")
fun getInstance(project: Project): UserFactorsManager = project.getComponent(UserFactorsManager::class.java)
}
fun getAllFactorIds(): List<String>
+ fun getAllFactors(): List<UserFactor>
+
+ fun getFeatureFactor(featureName: String): UserFactor.FeatureFactor?
+
fun getFactor(id: String): UserFactor
}
package com.intellij.stats.personalization.impl
+import com.intellij.completion.FeatureManager
import com.intellij.openapi.components.ProjectComponent
import com.intellij.openapi.diagnostic.Logger
import com.intellij.openapi.project.Project
*/
class UserFactorsManagerImpl(project: Project) : UserFactorsManager, ProjectComponent {
private companion object {
+
val LOG = Logger.getInstance(UserFactorsManagerImpl::class.java)
}
-
private val userFactors = mutableMapOf<String, UserFactor>()
-
init {
// TODO: register all factors here
+ FeatureManager.getInstance() // TODO: register feature-derived factors
}
+ override fun getAllFactors(): List<UserFactor> = userFactors.values.toList()
+
override fun getAllFactorIds(): List<String> = userFactors.keys.toList()
override fun getFactor(id: String): UserFactor = userFactors[id]!!
+ override fun getFeatureFactor(featureName: String): UserFactor.FeatureFactor? {
+ return null
+ }
+
private fun register(factor: UserFactor) {
val old = userFactors.put(factor.id, factor)
if (old != null) {