diff --git a/app/src/processing/app/syntax/Brackets.java b/app/src/processing/app/syntax/Brackets.java index 1fd46ec27..d351ef6b1 100644 --- a/app/src/processing/app/syntax/Brackets.java +++ b/app/src/processing/app/syntax/Brackets.java @@ -16,7 +16,7 @@ public class Brackets { } public int findMatchingBracket(final String text, final int pos) { - if (pos < 0 || pos > text.length()) + if (pos < 0 || pos >= text.length()) return -1; final char alpha = text.charAt(pos); @@ -51,7 +51,7 @@ public class Brackets { return -1; } - if (offsets == null) + if (offsets == null || offsets.get(offsets.size()-1) >= text.length()) parse(text); // find this bracket diff --git a/app/src/processing/app/syntax/JEditTextArea.java b/app/src/processing/app/syntax/JEditTextArea.java index 79726a878..5fb7392db 100644 --- a/app/src/processing/app/syntax/JEditTextArea.java +++ b/app/src/processing/app/syntax/JEditTextArea.java @@ -755,6 +755,9 @@ public class JEditTextArea extends JComponent // ", i = " + i + // ", length = " + length + // ", array len = " + segmentArray.length); + if (segmentOffset + offset + i >= segmentArray.length) { + return segmentArray.length - segmentOffset - 1; + } char c = segmentArray[segmentOffset + offset + i]; int charWidth; if (c == '\t') { diff --git a/java/src/processing/mode/java/MarkerColumn.java b/java/src/processing/mode/java/MarkerColumn.java index cbc6fcc11..ae883004c 100644 --- a/java/src/processing/mode/java/MarkerColumn.java +++ b/java/src/processing/mode/java/MarkerColumn.java @@ -155,15 +155,10 @@ public class MarkerColumn extends JPanel { /** Find out which error/warning the user has clicked and scroll to it */ private void scrollToMarkerAt(final int y) { try { - new SwingWorker() { - protected Object doInBackground() throws Exception { - LineMarker m = findClosestMarker(y); - if (m != null) { - editor.getErrorChecker().scrollToErrorLine(m.getProblem()); - } - return null; - } - }.execute(); + LineMarker m = findClosestMarker(y); + if (m != null) { + editor.getErrorChecker().scrollToErrorLine(m.getProblem()); + } } catch (Exception ex) { ex.printStackTrace(); } @@ -181,21 +176,16 @@ public class MarkerColumn extends JPanel { /** Show tooltip on hover. */ private void showMarkerHover(final int y) { try { - new SwingWorker() { - protected Object doInBackground() throws Exception { - LineMarker m = findClosestMarker(y); - if (m != null) { - Problem p = m.getProblem(); + LineMarker m = findClosestMarker(y); + if (m != null) { + Problem p = m.getProblem(); // String kind = p.isError() ? // Language.text("editor.status.error") : // Language.text("editor.status.warning"); // setToolTipText(kind + ": " + p.getMessage()); - editor.statusToolTip(MarkerColumn.this, p.getMessage(), p.isError()); - setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); - } - return null; - } - }.execute(); + editor.statusToolTip(MarkerColumn.this, p.getMessage(), p.isError()); + setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); + } } catch (Exception ex) { ex.printStackTrace(); } diff --git a/java/src/processing/mode/java/pdex/JavaTextAreaPainter.java b/java/src/processing/mode/java/pdex/JavaTextAreaPainter.java index 74ae6f714..80f88dedb 100644 --- a/java/src/processing/mode/java/pdex/JavaTextAreaPainter.java +++ b/java/src/processing/mode/java/pdex/JavaTextAreaPainter.java @@ -26,6 +26,7 @@ import processing.mode.java.tweak.*; import java.awt.Color; import java.awt.Cursor; import java.awt.Font; +import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Point; @@ -114,39 +115,6 @@ public class JavaTextAreaPainter extends TextAreaPainter } }); - addMouseMotionListener(new MouseMotionAdapter() { - @Override - public void mouseMoved(final MouseEvent evt) { - int line = textArea.yToLine(evt.getY()); - int x = evt.getX(); - - LineMarker marker = getJavaEditor().findError(line); - if (marker != null) { - Problem problem = marker.getProblem(); - - int lineOffset = textArea.getLineStartOffset(problem.getLineNumber()); - - int lineStart = textArea.getLineStartOffset(line); - int lineEnd = textArea.getLineStopOffset(line); - - 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; - - if (x >= getJavaTextArea().offsetToX(line, startOffset) && - x <= getJavaTextArea().offsetToX(line, stopOffset)) { - //setToolTipText(problem.getMessage()); - getJavaEditor().statusToolTip(JavaTextAreaPainter.this, - problem.getMessage(), - problem.isError()); - evt.consume(); - } - } - } - }); - // TweakMode code tweakMode = false; cursorType = Cursor.DEFAULT_CURSOR; @@ -476,6 +444,42 @@ 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()) { + LineMarker marker = getJavaEditor().findError(line); + if (marker != null) { + Problem problem = marker.getProblem(); + + int lineOffset = textArea.getLineStartOffset(problem.getLineNumber()); + + int lineStart = textArea.getLineStartOffset(line); + int lineEnd = textArea.getLineStopOffset(line); + + 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 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(evt); + } + } + } + setToolTipText(null); + return super.getToolTipText(evt); + } + + + /* @Override public String getToolTipText(MouseEvent event) { if (!getJavaEditor().hasJavaTabs()) { @@ -564,6 +568,7 @@ public class JavaTextAreaPainter extends TextAreaPainter // setToolTipText(null); return super.getToolTipText(event); } + */ // TweakMode code