IDEA-300739 Do not create LangSupport instance during project opening

GitOrigin-RevId: 41a8fadefb8cb2d9a7b3be862b26da4b566fd9fa
This commit is contained in:
Konstantin Hudyakov
2022-09-02 16:43:40 +03:00
committed by intellij-monorepo-bot
parent d0ac7ac768
commit 5ae4a01bbd
8 changed files with 24 additions and 24 deletions

View File

@@ -50,13 +50,13 @@ class LangManager : SimplePersistentStateComponent<LangManager.State>(State()) {
fun getInstance() = service<LangManager>()
}
fun getLearningProjectPath(langSupport: LangSupport): String? =
if (langSupport.useUserProjects) null
else state.languageToProjectMap[langSupport.primaryLanguage]
fun getLearningProjectPath(languageId: String): String? = state.languageToProjectMap[languageId]
fun setLearningProjectPath(langSupport: LangSupport, path: String) {
state.languageToProjectMap[langSupport.primaryLanguage] = path
state.intIncrementModificationCount()
if (!langSupport.useUserProjects) {
state.languageToProjectMap[langSupport.primaryLanguage] = path
state.intIncrementModificationCount()
}
}
fun getLangSupportById(languageId: String): LangSupport? {

View File

@@ -91,7 +91,7 @@ internal object OpenLessonActivities {
val langSupport = LangManager.getInstance().getLangSupport() ?: throw Exception("Language for learning plugin is not defined")
var learnProject = LearningUiManager.learnProject
if (learnProject != null && !isLearningProject(learnProject, langSupport)) {
if (learnProject != null && !isLearningProject(learnProject, langSupport.primaryLanguage)) {
learnProject = null // We are in the project from another course
}
LOG.debug("${projectWhereToStartLesson.name}: trying to get cached LearnProject ${learnProject != null}")
@@ -110,7 +110,7 @@ internal object OpenLessonActivities {
LOG.debug("The lesson opened in user project ${projectWhereToStartLesson.name}")
}
learnProject == null || learnProject.isDisposed -> {
if (!isLearningProject(projectWhereToStartLesson, langSupport)) {
if (!isLearningProject(projectWhereToStartLesson, langSupport.primaryLanguage)) {
//1. learnProject == null and current project has different name then initLearnProject and register post startup open lesson
LOG.debug("${projectWhereToStartLesson.name}: 1. learnProject is null or disposed")
initLearnProject(projectWhereToStartLesson, null) {
@@ -492,7 +492,7 @@ internal object OpenLessonActivities {
private fun findLearnProjectInOpenedProjects(langSupport: LangSupport): Project? {
val openProjects = ProjectManager.getInstance().openProjects
return openProjects.firstOrNull { isLearningProject(it, langSupport) }
return openProjects.firstOrNull { isLearningProject(it, langSupport.primaryLanguage) }
}
}

View File

@@ -74,7 +74,7 @@ object ProjectUtils {
}
private fun getLearningInstallationContentRoot(langSupport: LangSupport): Path? {
val storedProjectPath = LangManager.getInstance().getLearningProjectPath(langSupport)
val storedProjectPath = LangManager.getInstance().getLearningProjectPath(langSupport.primaryLanguage)
val path = if (storedProjectPath != null) langSupport.getContentRootPath(Paths.get(storedProjectPath)) else null
val canonicalPlace = learningProjectsPath.resolve(langSupport.contentRootDirectoryName)

View File

@@ -25,8 +25,8 @@ import training.util.*
private class LearnProjectStateListener : ProjectManagerListener {
override fun projectOpened(project: Project) {
val langSupport = LangManager.getInstance().getLangSupport() ?: return
if (isLearningProject(project, langSupport)) {
val languageId = LangManager.getInstance().getLanguageId() ?: return
if (isLearningProject(project, languageId)) {
CloseProjectWindowHelper.SHOW_WELCOME_FRAME_FOR_PROJECT.set(project, true)
removeFromRecentProjects(project)
}
@@ -42,15 +42,15 @@ private class LearnProjectStateListener : ProjectManagerListener {
}
override fun projectClosingBeforeSave(project: Project) {
val langSupport = LangManager.getInstance().getLangSupport() ?: return
if (isLearningProject(project, langSupport) && !StatisticBase.isLearnProjectCloseLogged) {
val languageId = LangManager.getInstance().getLanguageId() ?: return
if (isLearningProject(project, languageId) && !StatisticBase.isLearnProjectCloseLogged) {
StatisticBase.logLessonStopped(StatisticBase.LessonStopReason.CLOSE_PROJECT)
}
}
override fun projectClosed(project: Project) {
val langSupport = LangManager.getInstance().getLangSupport() ?: return
if (isLearningProject(project, langSupport)) {
val languageId = LangManager.getInstance().getLanguageId() ?: return
if (isLearningProject(project, languageId)) {
StatisticBase.isLearnProjectCloseLogged = false
removeFromRecentProjects(project)
}

View File

@@ -248,8 +248,8 @@ internal class StatisticBase : CounterUsagesCollector() {
fun logLearnProjectOpenedForTheFirstTime(way: LearnProjectOpeningWay) {
val langManager = LangManager.getInstance()
val langSupport = langManager.getLangSupport() ?: return
if (langManager.getLearningProjectPath(langSupport) == null) {
val languageId = langManager.getLanguageId() ?: return
if (langManager.getLearningProjectPath(languageId) == null) {
LearnProjectState.instance.firstTimeOpenedWay = way
learnProjectOpenedFirstTimeEvent.log(way, courseLanguage())
}

View File

@@ -205,7 +205,7 @@ internal class LearnPanel(val learnToolWindow: LearnToolWindow) : JPanel() {
langSupport.onboardingFeedbackData = null
}
if (langSupport != null && isLearningProject(project, langSupport)) {
if (langSupport != null && isLearningProject(project, langSupport.primaryLanguage)) {
CloseProjectWindowHelper().windowClosing(project)
} else {
LearningUiManager.resetModulesView()

View File

@@ -116,15 +116,15 @@ internal fun resetPrimaryLanguage(newLanguageId: String): Boolean {
}
fun findLanguageSupport(project: Project): LangSupport? {
val langSupport = LangManager.getInstance().getLangSupport() ?: return null
if (isLearningProject(project, langSupport)) {
return langSupport
val languageId = LangManager.getInstance().getLanguageId() ?: return null
if (isLearningProject(project, languageId)) {
return LangManager.getInstance().getLangSupport()
}
return null
}
fun isLearningProject(project: Project, langSupport: LangSupport): Boolean {
return FileUtil.pathsEqual(project.basePath, LangManager.getInstance().getLearningProjectPath(langSupport))
fun isLearningProject(project: Project, languageId: String): Boolean {
return FileUtil.pathsEqual(project.basePath, LangManager.getInstance().getLearningProjectPath(languageId))
}
fun getFeedbackLink(langSupport: LangSupport, ownRegistry: Boolean): String? {

View File

@@ -154,7 +154,7 @@ abstract class PythonBasedLangSupport : AbstractLangSupport() {
val module = project.modules.singleOrNull() ?: return@addCallback
PyInterpreterInspection.InterpreterSettingsQuickFix.showPythonInterpreterSettings(project, module)
}
if (useUserProjects || isLearningProject(project, this@PythonBasedLangSupport)) {
if (useUserProjects || isLearningProject(project, primaryLanguage)) {
showWarning(PythonLessonsBundle.message("no.interpreter.in.learning.project", configureCallbackId),
problem = LearningInternalProblems.NO_SDK_CONFIGURED) {
!isSdkConfigured(project)