in intellij-plugin/educational-core/src/com/jetbrains/edu/learning/marketplace/MarketplaceSolutionLoader.kt [51:90]
override fun loadSolution(task: Task, submissions: List<Submission>): TaskSolutions {
val lastSubmission = submissions.firstOrNull { it.taskId == task.id }
val formatVersion = lastSubmission?.formatVersion ?: return TaskSolutions.EMPTY
if (!isVersionCompatible(formatVersion)) return TaskSolutions.INCOMPATIBLE
if (lastSubmission !is MarketplaceSubmissionBase)
error(
"Marketplace submission to apply ${lastSubmission.id} for task ${task.name} is not an instance " +
"of the ${MarketplaceSubmissionBase::class.simpleName} class"
)
val submissionsSettings = SubmissionSettings.getInstance(project)
// Is added specially for courses launched via Remote Development solution to keep user code in editor on course updates
// To be fixed by EDU-7466
if (!submissionsSettings.applySubmissionsForce && lastSubmission.courseVersion != task.course.marketplaceCourseVersion) {
LOG.info(
"Marketplace submission ${lastSubmission.id} for task ${task.name} is not up to date. " +
"Submission course version: ${lastSubmission.courseVersion}, course version: ${task.course.marketplaceCourseVersion}"
)
return TaskSolutions.EMPTY
}
val files =
when (task) {
is TheoryTask -> if (!submissionsSettings.stateOnClose) emptyMap() else lastSubmission.eduTaskFiles()
is ChoiceTask -> emptyMap()
is OutputTask,
is EduTask -> lastSubmission.eduTaskFiles()
else -> {
LOG.warn("Solutions for task ${task.name} of type ${task::class.simpleName} not loaded")
emptyMap()
}
}
return if (files.isEmpty() && task !is TheoryTask && task !is ChoiceTask) TaskSolutions.EMPTY
else TaskSolutions(lastSubmission.time, lastSubmission.status?.toCheckStatus() ?: CheckStatus.Unchecked, files)
}