<applicationService serviceInterface="com.intellij.openapi.fileEditor.impl.EditorEmptyTextPainter"
serviceImplementation="com.jetbrains.edu.learning.StudyInstructionPainter" overrides="true"/>
<errorHandler implementation="com.intellij.diagnostic.ITNReporter"/>
+ <highlightErrorFilter implementation="com.jetbrains.edu.learning.StudyHighlightErrorFilter"/>
</extensions>
</idea-plugin>
\ No newline at end of file
if (!myTaskFile.isTrackChanges()) {
return;
}
+ myTaskFile.setHighlightErrors(true);
Document document = e.getDocument();
myTaskWindows.clear();
for (TaskWindow taskWindow : myTaskFile.getTaskWindows()) {
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.jetbrains.edu.learning.course.TaskFile;
import com.jetbrains.edu.learning.course.TaskWindow;
import com.jetbrains.edu.learning.editor.StudyEditor;
StudyDocumentListener listener = new StudyDocumentListener(taskFile);
StudyEditor.addDocumentListener(document, listener);
document.addDocumentListener(listener);
+ WolfTheProblemSolver.getInstance(project).clearProblems(openedFile);
taskFile.drawAllWindows(editor);
}
}
--- /dev/null
+package com.jetbrains.edu.learning;
+
+import com.intellij.codeInsight.highlighting.HighlightErrorFilter;
+import com.intellij.openapi.vfs.VirtualFile;
+import com.intellij.psi.PsiErrorElement;
+import com.intellij.psi.PsiFile;
+import com.jetbrains.edu.learning.course.TaskFile;
+import org.jetbrains.annotations.NotNull;
+
+public class StudyHighlightErrorFilter extends HighlightErrorFilter{
+ @Override
+ public boolean shouldHighlightErrorElement(@NotNull PsiErrorElement element) {
+ PsiFile file = element.getContainingFile();
+ if (file == null) {
+ return true;
+ }
+ VirtualFile virtualFile = file.getVirtualFile();
+ if (virtualFile == null) {
+ return true;
+ }
+ TaskFile taskFile = StudyTaskManager.getInstance(element.getProject()).getTaskFile(virtualFile);
+ return taskFile == null || taskFile.isHighlightErrors();
+ }
+}
import com.intellij.openapi.vfs.VfsUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.wm.IdeFocusManager;
+import com.intellij.problems.WolfTheProblemSolver;
import com.jetbrains.edu.learning.StudyState;
import com.jetbrains.edu.learning.StudyUtils;
import com.jetbrains.edu.learning.course.*;
if (!resetTaskFile(editor.getDocument(), project, taskFile, studyState.getVirtualFile().getName())) {
return;
}
+ WolfTheProblemSolver.getInstance(project).clearProblems(studyState.getVirtualFile());
+ taskFile.setHighlightErrors(false);
taskFile.drawAllWindows(editor);
taskFile.createGuardedBlocks(editor);
ApplicationManager.getApplication().invokeLater(new Runnable() {
public int myIndex = -1;
private boolean myUserCreated = false;
private boolean myTrackChanges = true;
+ private boolean myHighlightErrors = false;
/**
* @return if all the windows in task file are marked as resolved
public void setTrackChanges(boolean trackChanges) {
myTrackChanges = trackChanges;
}
+
+ public boolean isHighlightErrors() {
+ return myHighlightErrors;
+ }
+
+ public void setHighlightErrors(boolean highlightErrors) {
+ myHighlightErrors = highlightErrors;
+ }
}
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.editor.Editor;
-import com.intellij.openapi.editor.colors.EditorColors;
import com.intellij.openapi.editor.colors.EditorColorsManager;
-import com.intellij.openapi.editor.markup.HighlighterLayer;
-import com.intellij.openapi.editor.markup.HighlighterTargetArea;
-import com.intellij.openapi.editor.markup.RangeHighlighter;
-import com.intellij.openapi.editor.markup.TextAttributes;
+import com.intellij.openapi.editor.colors.EditorColorsScheme;
+import com.intellij.openapi.editor.markup.*;
import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.TextRange;
import com.jetbrains.edu.learning.StudyUtils;
import org.jetbrains.annotations.NotNull;
+import java.awt.*;
import java.io.File;
import java.io.IOException;
if (!isValid(document)) {
return;
}
- TextAttributes defaultTestAttributes =
- EditorColorsManager.getInstance().getGlobalScheme().getAttributes(EditorColors.LIVE_TEMPLATE_ATTRIBUTES);
- JBColor color = getColor();
+ EditorColorsScheme scheme = EditorColorsManager.getInstance().getGlobalScheme();
+ final TextAttributes defaultTestAttributes = new TextAttributes(scheme.getDefaultForeground(), scheme.getDefaultBackground(), null,
+ EffectType.BOXED, Font.PLAIN);
+ final JBColor color = getColor();
int startOffset = document.getLineStartOffset(line) + start;
RangeHighlighter
rh = editor.getMarkupModel().addRangeHighlighter(startOffset, startOffset + length, HighlighterLayer.LAST + 1,
- new TextAttributes(defaultTestAttributes.getForegroundColor(),
- defaultTestAttributes.getBackgroundColor(), color,
- defaultTestAttributes.getEffectType(),
- defaultTestAttributes.getFontType()),
+ defaultTestAttributes,
HighlighterTargetArea.EXACT_RANGE);
+ rh.setCustomRenderer(new CustomHighlighterRenderer() {
+ @Override
+ public void paint(@NotNull Editor editor, @NotNull RangeHighlighter highlighter, @NotNull Graphics g) {
+ g.setColor(color);
+ Point point = editor.logicalPositionToXY(editor.offsetToLogicalPosition(highlighter.getStartOffset()));
+ Point pointEnd = editor.logicalPositionToXY(editor.offsetToLogicalPosition(highlighter.getEndOffset()));
+ g.drawRect(point.x, point.y - 2, (pointEnd.x - point.x), editor.getLineHeight() + 1);
+ }
+ });
if (drawSelection) {
editor.getSelectionModel().setSelection(startOffset, startOffset + length);
}