Commit 93cc96f7 authored by Alexey Merkulov's avatar Alexey Merkulov Committed by intellij-monorepo-bot
Browse files

[IFT] Fix course filtering

(cherry picked from commit 68a86a4f676d63248e4a31b558893ef4d28a8d84)

IDEA-CR-70010

(cherry picked from commit 1036c627b13b0a65279a40621d9036234ad88382)

GitOrigin-RevId: 73130a38a07b66b0f6bdd5a26292333cdb516b21
parent 38baa351
Showing with 13 additions and 8 deletions
+13 -8
......@@ -11,19 +11,16 @@ import com.intellij.openapi.components.service
import com.intellij.openapi.extensions.ExtensionPointName
import training.ui.LearnToolWindowFactory
import training.util.WeakReferenceDelegator
import training.util.courseCanBeUsed
import training.util.findLanguageByID
import training.util.trainerPluginConfigName
val excludedLanguages: Map<String, Array<String>>
get() = mapOf("AppCode" to arrayOf("JavaScript")) //IDE name to language id
val productName: String = ApplicationNamesInfo.getInstance().productName
@State(name = "LangManager", storages = [Storage(value = trainerPluginConfigName)])
class LangManager : PersistentStateComponent<LangManager.State> {
val supportedLanguagesExtensions: List<LanguageExtensionPoint<LangSupport>>
get() = ExtensionPointName<LanguageExtensionPoint<LangSupport>>(LangSupport.EP_NAME).extensions
.filter { excludedLanguages[productName] != null && !excludedLanguages[productName]!!.contains(it.language) }
.filter { courseCanBeUsed(it.language) }
.toList()
private var myState = State(null)
......@@ -32,6 +29,7 @@ class LangManager : PersistentStateComponent<LangManager.State> {
init {
val languages = supportedLanguagesExtensions.filter { Language.findLanguageByID(it.language) != null }
val productName = ApplicationNamesInfo.getInstance().productName
val onlyLang = languages.singleOrNull() ?: languages.singleOrNull { it.instance.defaultProductName == productName }
if (onlyLang != null) {
myLangSupport = onlyLang.instance
......
......@@ -10,13 +10,12 @@ import com.intellij.openapi.vfs.VirtualFile
import com.intellij.util.containers.ContainerUtil
import training.lang.LangManager
import training.lang.LangSupport
import training.lang.excludedLanguages
import training.lang.productName
import training.learn.interfaces.Lesson
import training.learn.interfaces.Module
import training.learn.lesson.LessonManager
import training.ui.LearnToolWindowFactory
import training.util.WeakReferenceDelegator
import training.util.courseCanBeUsed
import training.util.switchOnExperimentalLessons
class CourseManager internal constructor() : Disposable {
......@@ -82,7 +81,7 @@ class CourseManager internal constructor() : Disposable {
}
private fun initAllModules(): List<Module> = COURSE_MODULES_EP.extensions
.filter { excludedLanguages[productName] != null && !excludedLanguages[productName]!!.contains(it.language) }
.filter { courseCanBeUsed(it.language) }
.map { it.instance.modules() }.flatten()
private fun getAllModules(): List<Module> {
......
......@@ -9,6 +9,7 @@ import com.intellij.lang.Language
import com.intellij.openapi.actionSystem.AnAction
import com.intellij.openapi.actionSystem.AnActionEvent
import com.intellij.openapi.actionSystem.ex.ActionUtil
import com.intellij.openapi.application.ApplicationNamesInfo
import com.intellij.openapi.application.invokeLater
import com.intellij.openapi.project.Project
import com.intellij.openapi.ui.popup.Balloon
......@@ -38,6 +39,13 @@ import javax.swing.JPanel
fun createNamedSingleThreadExecutor(name: String): ExecutorService =
Executors.newSingleThreadExecutor(ThreadFactoryBuilder().setNameFormat(name).build())
private val excludedLanguages: Map<String, Array<String>> = mapOf("AppCode" to arrayOf("JavaScript")) //IDE name to language id
fun courseCanBeUsed(languageId: String): Boolean {
val excludedCourses = excludedLanguages[ApplicationNamesInfo.getInstance().productName]
return excludedCourses == null || !excludedCourses.contains(languageId)
}
fun findLanguageByID(id: String): Language? {
val effectiveId = if (id.toLowerCase() == "cpp") {
"ObjectiveC"
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment