in intellij-plugin/educational-core/src/com/jetbrains/edu/learning/stepik/hyperskill/courseGeneration/HyperskillOpenInIdeRequestHandler.kt [40:84]
override fun openInExistingProject(
request: HyperskillOpenRequest,
findProject: ((Course) -> Boolean) -> Pair<Project, Course>?
): Project? {
when (request) {
is HyperskillOpenStepRequestBase -> {
val stepId = request.stepId
val stepSource = getStepSource(stepId, request.isLanguageSelectedByUser)
val isAndroidEnvRequired = stepSource.framework == EduNames.ANDROID
val courseFilter: (Course) -> Boolean = if (isAndroidEnvRequired) ::hasAndroidEnvironment else { _ -> true }
val (project, course) = findExistingProject(findProject, request, courseFilter) ?: return null
val hyperskillCourse = course as HyperskillCourse
hyperskillCourse.addProblemsWithTopicWithFiles(project, stepSource)
hyperskillCourse.selectedProblem = stepId
runInEdt {
requestFocus()
navigateToStep(project, hyperskillCourse, stepId)
}
synchronizeProjectOnStepOpening(project, hyperskillCourse, stepId)
return project
}
is HyperskillOpenProjectStageRequest -> {
val (project, course) = findExistingProject(findProject, request) ?: return null
val hyperskillCourse = course as HyperskillCourse
if (hyperskillCourse.getProjectLesson() == null) {
computeUnderProgress(project, EduCoreBundle.message("hyperskill.loading.stages")) {
HyperskillConnector.getInstance().loadStages(hyperskillCourse)
}
hyperskillCourse.init(false)
val projectLesson = hyperskillCourse.getProjectLesson() ?: return null
val courseDir = project.courseDir
GeneratorUtils.createLesson(project, projectLesson, courseDir)
GeneratorUtils.unpackAdditionalFiles(CourseInfoHolder.fromCourse(course, courseDir), ALL_FILES)
YamlFormatSynchronizer.saveAll(project)
course.configurator?.courseBuilder?.refreshProject(project, RefreshCause.DEPENDENCIES_UPDATED)
synchronizeProjectOnStageOpening(project, hyperskillCourse, projectLesson.taskList)
}
course.selectedStage = request.stageId
runInEdt { openSelectedStage(hyperskillCourse, project) }
return project
}
}
}