From 41524cc610cb3033368484c462370f9ddbb0bb2f Mon Sep 17 00:00:00 2001 From: Jakub Valtar Date: Sat, 7 May 2016 00:38:58 +0200 Subject: [PATCH] Multiple problems per line --- java/src/processing/mode/java/JavaEditor.java | 46 ++++++++++++------- .../mode/java/pdex/JavaTextAreaPainter.java | 8 ++-- 2 files changed, 34 insertions(+), 20 deletions(-) diff --git a/java/src/processing/mode/java/JavaEditor.java b/java/src/processing/mode/java/JavaEditor.java index a585d3802..5ee01aaa6 100644 --- a/java/src/processing/mode/java/JavaEditor.java +++ b/java/src/processing/mode/java/JavaEditor.java @@ -11,6 +11,7 @@ import java.util.List; import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; +import java.util.stream.Collectors; import javax.swing.*; import javax.swing.border.*; @@ -195,9 +196,7 @@ public class JavaEditor extends Editor { for (SketchCode code : getSketch().getCode()) { Document document = code.getDocument(); - if (document != null) { - addDocumentListener(document); - } + addDocumentListener(document); } } @@ -2513,7 +2512,7 @@ public class JavaEditor extends Editor { * line or not */ public void updateEditorStatus() { - Problem problem = findError(textarea.getCaretLine()); + Problem problem = findProblem(textarea.getCaretLine()); if (problem != null) { int type = problem.isError() ? EditorStatus.CURSOR_LINE_ERROR : EditorStatus.CURSOR_LINE_WARNING; @@ -2530,21 +2529,36 @@ public class JavaEditor extends Editor { /** - * @return the LineMarker for the first error or warning on 'line' + * @return the Problem for the first error or warning on 'line' */ - public Problem findError(int line) { + public Problem findProblem(int line) { JavaTextArea textArea = getJavaTextArea(); int currentTab = getSketch().getCurrentCodeIndex(); - for (Problem p : problems) { - if (p.getTabIndex() != currentTab) continue; - int pStartLine = p.getLineNumber(); - int pEndOffset = p.getStopOffset(); - int pEndLine = textArea.getLineOfOffset(pEndOffset); - if (line >= pStartLine && line <= pEndLine) { - return p; - } - } - return null; + return problems.stream() + .filter(p -> p.getTabIndex() == currentTab) + .filter(p -> { + int pStartLine = p.getLineNumber(); + int pEndOffset = p.getStopOffset(); + int pEndLine = textArea.getLineOfOffset(pEndOffset); + return line >= pStartLine && line <= pEndLine; + }) + .findFirst() + .orElse(null); + } + + + public List findProblems(int line) { + JavaTextArea textArea = getJavaTextArea(); + int currentTab = getSketch().getCurrentCodeIndex(); + return problems.stream() + .filter(p -> p.getTabIndex() == currentTab) + .filter(p -> { + int pStartLine = p.getLineNumber(); + int pEndOffset = p.getStopOffset(); + int pEndLine = textArea.getLineOfOffset(pEndOffset); + return line >= pStartLine && line <= pEndLine; + }) + .collect(Collectors.toList()); } diff --git a/java/src/processing/mode/java/pdex/JavaTextAreaPainter.java b/java/src/processing/mode/java/pdex/JavaTextAreaPainter.java index e3f3b2495..115355ed6 100644 --- a/java/src/processing/mode/java/pdex/JavaTextAreaPainter.java +++ b/java/src/processing/mode/java/pdex/JavaTextAreaPainter.java @@ -272,8 +272,8 @@ public class JavaTextAreaPainter extends TextAreaPainter * @param x */ protected void paintErrorLine(Graphics gfx, int line, int x) { - Problem problem = getJavaEditor().findError(line); - if (problem != null) { + List problems = getJavaEditor().findProblems(line); + for (Problem problem : problems) { int startOffset = problem.getStartOffset(); int stopOffset = problem.getStopOffset(); @@ -362,8 +362,8 @@ public class JavaTextAreaPainter extends TextAreaPainter public String getToolTipText(MouseEvent evt) { int line = evt.getY() / getFontMetrics().getHeight() + textArea.getFirstLine(); if (line >= 0 || line < textArea.getLineCount()) { - Problem problem = getJavaEditor().findError(line); - if (problem != null) { + List problems = getJavaEditor().findProblems(line); + for (Problem problem : problems) { int lineStart = textArea.getLineStartOffset(line); int lineEnd = textArea.getLineStopOffset(line);