override fun loadSolution()

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)
  }