From 0e5bfdf29d3da869add88fe23589299dbc301747 Mon Sep 17 00:00:00 2001 From: Jakub Valtar Date: Mon, 9 Nov 2015 13:29:14 +0100 Subject: [PATCH] Prevent NPEs in ToolTipManager Might get rid of #3286 --- .../mode/java/pdex/JavaTextAreaPainter.java | 43 +++++++++---------- 1 file changed, 21 insertions(+), 22 deletions(-) diff --git a/java/src/processing/mode/java/pdex/JavaTextAreaPainter.java b/java/src/processing/mode/java/pdex/JavaTextAreaPainter.java index 8cec53216..80f88dedb 100644 --- a/java/src/processing/mode/java/pdex/JavaTextAreaPainter.java +++ b/java/src/processing/mode/java/pdex/JavaTextAreaPainter.java @@ -447,36 +447,35 @@ public class JavaTextAreaPainter extends TextAreaPainter @Override public String getToolTipText(MouseEvent evt) { int line = evt.getY() / getFontMetrics().getHeight() + textArea.getFirstLine(); - if (line < 0 || line > textArea.getLineCount() - 1) { - return null; - } + if (line >= 0 || line < textArea.getLineCount()) { + LineMarker marker = getJavaEditor().findError(line); + if (marker != null) { + Problem problem = marker.getProblem(); - LineMarker marker = getJavaEditor().findError(line); - if (marker != null) { - Problem problem = marker.getProblem(); + int lineOffset = textArea.getLineStartOffset(problem.getLineNumber()); - int lineOffset = textArea.getLineStartOffset(problem.getLineNumber()); + int lineStart = textArea.getLineStartOffset(line); + int lineEnd = textArea.getLineStopOffset(line); - int lineStart = textArea.getLineStartOffset(line); - int lineEnd = textArea.getLineStopOffset(line); + int errorStart = lineOffset + problem.getPDELineStartOffset(); + int errorEnd = lineOffset + problem.getPDELineStopOffset() + 1; - int errorStart = lineOffset + problem.getPDELineStartOffset(); - int errorEnd = lineOffset + problem.getPDELineStopOffset() + 1; + int startOffset = Math.max(errorStart, lineStart) - lineStart; + int stopOffset = Math.min(errorEnd, lineEnd) - lineStart; - int startOffset = Math.max(errorStart, lineStart) - lineStart; - int stopOffset = Math.min(errorEnd, lineEnd) - lineStart; + int x = evt.getX(); - int x = evt.getX(); - - if (x >= getJavaTextArea().offsetToX(line, startOffset) && - x <= getJavaTextArea().offsetToX(line, stopOffset)) { - getJavaEditor().statusToolTip(JavaTextAreaPainter.this, - problem.getMessage(), - problem.isError()); - return super.getToolTipText(); + if (x >= getJavaTextArea().offsetToX(line, startOffset) && + x <= getJavaTextArea().offsetToX(line, stopOffset)) { + getJavaEditor().statusToolTip(JavaTextAreaPainter.this, + problem.getMessage(), + problem.isError()); + return super.getToolTipText(evt); + } } } - return null; + setToolTipText(null); + return super.getToolTipText(evt); }