package com.intellij.completion
import com.intellij.openapi.application.ApplicationManager
-import com.jetbrains.completion.ranker.features.BinaryFeatureInfo
-import com.jetbrains.completion.ranker.features.CategoricalFeatureInfo
-import com.jetbrains.completion.ranker.features.CompletionFactors
-import com.jetbrains.completion.ranker.features.DoubleFeatureInfo
+import com.jetbrains.completion.ranker.features.*
/**
* @author Vitaliy.Bibaev
*/
interface FeatureManager {
- val featuresOrder: Map<String, Int>
- val binaryFactors: BinaryFeatureInfo
- val doubleFactors: DoubleFeatureInfo
- val categorialFactors: CategoricalFeatureInfo
+ val binaryFactors: List<BinaryFeature>
+ val doubleFactors: List<DoubleFeature>
+ val categorialFactors: List<CatergorialFeature>
val ignoredFactors: Set<String>
- val allFeatures: CompletionFactors
+ val completionFactors: CompletionFactors
fun isUserFeature(name: String): Boolean
+ fun allFeatures(): List<Feature>
companion object {
fun getInstance(): FeatureManager = ApplicationManager.getApplication().getComponent(FeatureManager::class.java)
* @author Vitaliy.Bibaev
*/
class FeatureManagerImpl : FeatureManager, ApplicationComponent {
- override lateinit var binaryFactors: BinaryFeatureInfo private set
- override lateinit var doubleFactors: DoubleFeatureInfo private set
- override lateinit var categorialFactors: CategoricalFeatureInfo private set
- override lateinit var allFeatures: CompletionFactors private set
- override lateinit var featuresOrder: Map<String, Int> private set
+ override lateinit var binaryFactors: List<BinaryFeature> private set
+ override lateinit var doubleFactors: List<DoubleFeature> private set
+ override lateinit var categorialFactors: List<CatergorialFeature> private set
+ override lateinit var completionFactors: CompletionFactors private set
override lateinit var ignoredFactors: Set<String> private set
+ private lateinit var allFeatures: List<Feature>
override fun isUserFeature(name: String): Boolean = false
override fun initComponent() {
+ val order = FeatureReader.featuresOrder()
+ val interpreter = FeatureInterpreterImpl()
+
binaryFactors = FeatureReader.binaryFactors()
+ .map { (name, description) -> interpreter.binary(name, description, order) }
doubleFactors = FeatureReader.doubleFactors()
- allFeatures = FeatureReader.completionFactors()
+ .map { (name, defaultValue) -> interpreter.double(name, defaultValue, order) }
categorialFactors = FeatureReader.categoricalFactors()
- featuresOrder = FeatureReader.featuresOrder()
+ .map { (name, categories) -> interpreter.categorial(name, categories, order) }
+
+ completionFactors = FeatureReader.completionFactors()
+
ignoredFactors = FeatureReader.ignoredFactors()
+
+ val features: ArrayList<Feature> = ArrayList(binaryFactors)
+ features.addAll(doubleFactors)
+ features.addAll(categorialFactors)
+ allFeatures = features
}
+
+ override fun allFeatures(): List<Feature> = allFeatures
}
\ No newline at end of file