import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
+import com.intellij.problems.WolfTheProblemSolver;
import com.intellij.ui.EditorNotifications;
-import com.intellij.util.containers.ContainerUtil;
import com.jetbrains.edu.learning.checker.StudyCheckUtils;
import com.jetbrains.edu.learning.core.EduNames;
-import com.jetbrains.edu.learning.core.EduUtils;
import com.jetbrains.edu.learning.courseFormat.AnswerPlaceholder;
-import com.jetbrains.edu.learning.courseFormat.AnswerPlaceholderSubtaskInfo;
import com.jetbrains.edu.learning.courseFormat.Task;
import com.jetbrains.edu.learning.courseFormat.TaskFile;
import com.jetbrains.edu.learning.ui.StudyToolWindow;
continue;
}
TaskFile taskFile = entry.getValue();
- updatePlaceholderTexts(project, virtualFile, taskFile, fromSubtaskIndex, toSubtaskIndex);
+ Document document = FileDocumentManager.getInstance().getDocument(virtualFile);
+ if (document == null) {
+ continue;
+ }
+ updatePlaceholderTexts(project, document, taskFile, fromSubtaskIndex, toSubtaskIndex);
EditorNotifications.getInstance(project).updateNotifications(virtualFile);
+ if (StudyUtils.isStudyProject(project)) {
+ WolfTheProblemSolver.getInstance(project).clearProblems(virtualFile);
+ taskFile.setHighlightErrors(false);
+ }
}
task.setActiveSubtaskIndex(toSubtaskIndex);
update(project, task, taskDir);
}
private static void updatePlaceholderTexts(@NotNull Project project,
- @NotNull VirtualFile virtualFile,
+ @NotNull Document document,
@NotNull TaskFile taskFile,
int fromSubtaskIndex,
int toSubtaskIndex) {
- Document document = FileDocumentManager.getInstance().getDocument(virtualFile);
- if (document == null) {
- return;
- }
taskFile.setTrackLengths(false);
for (AnswerPlaceholder placeholder : taskFile.getAnswerPlaceholders()) {
- Set<Integer> indexes = placeholder.getSubtaskInfos().keySet();
- Integer minIndex = Collections.min(indexes);
- int visibleLength = placeholder.getVisibleLength(fromSubtaskIndex);
- if (indexes.contains(toSubtaskIndex) && indexes.contains(fromSubtaskIndex)) {
- if (!placeholder.getUseLength()) {
- String replacementText = placeholder.getSubtaskInfos().get(toSubtaskIndex).getPossibleAnswer();
- EduUtils.replaceAnswerPlaceholder(project, document, placeholder, visibleLength, replacementText);
- }
- continue;
- }
- if (fromSubtaskIndex < toSubtaskIndex) {
- if (minIndex > fromSubtaskIndex && minIndex <= toSubtaskIndex) {
- Integer maxIndex = Collections.max(ContainerUtil.filter(indexes, integer -> integer <= toSubtaskIndex));
- AnswerPlaceholderSubtaskInfo maxInfo = placeholder.getSubtaskInfos().get(maxIndex);
- String replacementText = placeholder.getUseLength() ? maxInfo.getPlaceholderText() : maxInfo.getPossibleAnswer();
- EduUtils.replaceAnswerPlaceholder(project, document, placeholder, visibleLength, replacementText);
- }
- }
- else {
- if (minIndex > toSubtaskIndex && minIndex <= fromSubtaskIndex) {
- AnswerPlaceholderSubtaskInfo minInfo = placeholder.getSubtaskInfos().get(minIndex);
- if (minInfo.isNeedInsertText()) {
- EduUtils.replaceAnswerPlaceholder(project, document, placeholder, visibleLength, "");
- }
- else {
- String replacementText = minInfo.getPlaceholderText();
- EduUtils.replaceAnswerPlaceholder(project, document, placeholder, visibleLength, replacementText);
- }
- }
- }
+ placeholder.switchSubtask(project, document, fromSubtaskIndex, toSubtaskIndex);
}
taskFile.setTrackLengths(true);
}