diff options
author | Karsten Thoms | 2017-10-13 19:16:55 +0000 |
---|---|---|
committer | Alexander Kurtakov | 2018-01-03 12:41:01 +0000 |
commit | 3df8f29f3617867ae37ef815827c463878f4f218 (patch) | |
tree | dfd085dcbf5be22aed9ee52bb583b3d317c71386 | |
parent | e76fdc71f32c1c24eb4a7541357fc4ec9309ec75 (diff) | |
download | eclipse.platform.text-3df8f29f3617867ae37ef815827c463878f4f218.tar.gz eclipse.platform.text-3df8f29f3617867ae37ef815827c463878f4f218.tar.xz eclipse.platform.text-3df8f29f3617867ae37ef815827c463878f4f218.zip |
Bug 522103 - Refactor usage of StyledText#getOffsetAtLocation(Point)I20180104-2000I20180104-0030I20180103-2000
Refactored usages of StyledText#getOffsetAtLocation(), which throws an
IAE when no character is at the given point. The new method returns -1
as return code, which is evaluated and try-catch blocks are avoided.
Adjusted lower bound for org.eclipse.swt
Change-Id: I1980f14b95926ca0e13044670101caa73ff1dcbd
Signed-off-by: Karsten Thoms <karsten.thoms@itemis.de>
9 files changed, 69 insertions, 79 deletions
diff --git a/org.eclipse.jface.text/META-INF/MANIFEST.MF b/org.eclipse.jface.text/META-INF/MANIFEST.MF index a93103f3ce4..be9cac0084c 100644 --- a/org.eclipse.jface.text/META-INF/MANIFEST.MF +++ b/org.eclipse.jface.text/META-INF/MANIFEST.MF @@ -35,7 +35,7 @@ Export-Package: Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)", org.eclipse.text;bundle-version="[3.5.0,4.0.0)";visibility:=reexport, - org.eclipse.swt;bundle-version="[3.103.0,4.0.0)", + org.eclipse.swt;bundle-version="[3.107.0,4.0.0)", org.eclipse.jface;bundle-version="[3.5.0,4.0.0)" Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Import-Package: com.ibm.icu.text diff --git a/org.eclipse.jface.text/src/org/eclipse/jface/text/JFaceTextUtil.java b/org.eclipse.jface.text/src/org/eclipse/jface/text/JFaceTextUtil.java index f0518cf6769..d03195acc2f 100644 --- a/org.eclipse.jface.text/src/org/eclipse/jface/text/JFaceTextUtil.java +++ b/org.eclipse.jface.text/src/org/eclipse/jface/text/JFaceTextUtil.java @@ -420,30 +420,27 @@ public final class JFaceTextUtil { * @since 3.5 */ public static int getOffsetForCursorLocation(ITextViewer viewer) { + StyledText text= viewer.getTextWidget(); + if (text == null || text.isDisposed()) + return -1; - try { - StyledText text= viewer.getTextWidget(); - if (text == null || text.isDisposed()) - return -1; - - Display display= text.getDisplay(); - Point absolutePosition= display.getCursorLocation(); - Point relativePosition= text.toControl(absolutePosition); - - int widgetOffset= text.getOffsetAtLocation(relativePosition); - Point p= text.getLocationAtOffset(widgetOffset); - if (p.x > relativePosition.x) - widgetOffset--; - - if (viewer instanceof ITextViewerExtension5) { - ITextViewerExtension5 extension= (ITextViewerExtension5)viewer; - return extension.widgetOffset2ModelOffset(widgetOffset); - } - - return widgetOffset + viewer.getVisibleRegion().getOffset(); + Display display= text.getDisplay(); + Point absolutePosition= display.getCursorLocation(); + Point relativePosition= text.toControl(absolutePosition); - } catch (IllegalArgumentException e) { + int widgetOffset= text.getOffsetAtPoint(relativePosition); + if (widgetOffset == -1) { return -1; } + Point p= text.getLocationAtOffset(widgetOffset); + if (p.x > relativePosition.x) + widgetOffset--; + + if (viewer instanceof ITextViewerExtension5) { + ITextViewerExtension5 extension= (ITextViewerExtension5)viewer; + return extension.widgetOffset2ModelOffset(widgetOffset); + } + + return widgetOffset + viewer.getVisibleRegion().getOffset(); } } diff --git a/org.eclipse.jface.text/src/org/eclipse/jface/text/TextViewerHoverManager.java b/org.eclipse.jface.text/src/org/eclipse/jface/text/TextViewerHoverManager.java index 45ddb92c4bf..9a3aa225743 100644 --- a/org.eclipse.jface.text/src/org/eclipse/jface/text/TextViewerHoverManager.java +++ b/org.eclipse.jface.text/src/org/eclipse/jface/text/TextViewerHoverManager.java @@ -259,25 +259,21 @@ class TextViewerHoverManager extends AbstractHoverInformationControlManager impl * @return the document offset corresponding to the given point */ private int computeOffsetAtLocation(int x, int y) { - - try { - - StyledText styledText= fTextViewer.getTextWidget(); - int widgetOffset= styledText.getOffsetAtLocation(new Point(x, y)); - Point p= styledText.getLocationAtOffset(widgetOffset); - if (p.x > x) - widgetOffset--; - - if (fTextViewer instanceof ITextViewerExtension5) { - ITextViewerExtension5 extension= (ITextViewerExtension5) fTextViewer; - return extension.widgetOffset2ModelOffset(widgetOffset); - } - - return widgetOffset + fTextViewer._getVisibleRegionOffset(); - - } catch (IllegalArgumentException e) { + StyledText styledText= fTextViewer.getTextWidget(); + int widgetOffset= styledText.getOffsetAtPoint(new Point(x, y)); + if (widgetOffset == -1) { return -1; } + Point p= styledText.getLocationAtOffset(widgetOffset); + if (p.x > x) + widgetOffset--; + + if (fTextViewer instanceof ITextViewerExtension5) { + ITextViewerExtension5 extension= (ITextViewerExtension5) fTextViewer; + return extension.widgetOffset2ModelOffset(widgetOffset); + } + + return widgetOffset + fTextViewer._getVisibleRegionOffset(); } @Override diff --git a/org.eclipse.jface.text/src/org/eclipse/jface/text/WhitespaceCharacterPainter.java b/org.eclipse.jface.text/src/org/eclipse/jface/text/WhitespaceCharacterPainter.java index 475b82a2abe..06a2ceeca06 100644 --- a/org.eclipse.jface.text/src/org/eclipse/jface/text/WhitespaceCharacterPainter.java +++ b/org.eclipse.jface.text/src/org/eclipse/jface/text/WhitespaceCharacterPainter.java @@ -250,13 +250,10 @@ public class WhitespaceCharacterPainter implements IPainter, PaintListener { // Y-coordinate of line int y= fTextWidget.getLinePixel(line); // compute first visible char offset - int startOffset; - try { - startOffset= fTextWidget.getOffsetAtLocation(new Point(x, y)) - 1; - if (startOffset - 2 <= lineOffset) { - startOffset= lineOffset; - } - } catch (IllegalArgumentException iae) { + int startOffset = fTextWidget.getOffsetAtPoint(new Point(x, y)) - 1; + if (startOffset == -1) { + startOffset= lineOffset; + } else if (startOffset - 2 <= lineOffset) { startOffset= lineOffset; } // compute last visible char offset @@ -265,12 +262,11 @@ public class WhitespaceCharacterPainter implements IPainter, PaintListener { // line end is visible endOffset= lineEndOffset; } else { - try { - endOffset= fTextWidget.getOffsetAtLocation(new Point(x + w - 1, y)) + 1; - if (endOffset + 2 >= lineEndOffset) { - endOffset= lineEndOffset; - } - } catch (IllegalArgumentException iae) { + endOffset= fTextWidget.getOffsetAtPoint(new Point(x + w - 1, y)) + 1; + if (endOffset == -1) { + endOffset= lineEndOffset; + } + if (endOffset + 2 >= lineEndOffset) { endOffset= lineEndOffset; } } diff --git a/org.eclipse.jface.text/src/org/eclipse/jface/text/source/AnnotationPainter.java b/org.eclipse.jface.text/src/org/eclipse/jface/text/source/AnnotationPainter.java index 0e2beab7300..5aa667f9253 100644 --- a/org.eclipse.jface.text/src/org/eclipse/jface/text/source/AnnotationPainter.java +++ b/org.eclipse.jface.text/src/org/eclipse/jface/text/source/AnnotationPainter.java @@ -1456,11 +1456,11 @@ public class AnnotationPainter implements IPainter, PaintListener, IAnnotationMo } int widgetOffset; - try { - int widgetClippingStartOffset= fTextWidget.getOffsetAtLocation(new Point(0, event.y)); + int widgetClippingStartOffset= fTextWidget.getOffsetAtPoint(new Point(0, event.y)); + if (widgetClippingStartOffset != -1) { int firstWidgetLine= fTextWidget.getLineAtOffset(widgetClippingStartOffset); widgetOffset= fTextWidget.getOffsetAtLine(firstWidgetLine); - } catch (IllegalArgumentException ex1) { + } else { try { int firstVisibleLine= JFaceTextUtil.getPartialTopIndex(fTextWidget); widgetOffset= fTextWidget.getOffsetAtLine(firstVisibleLine); @@ -1470,11 +1470,11 @@ public class AnnotationPainter implements IPainter, PaintListener, IAnnotationMo } int widgetEndOffset; - try { - int widgetClippingEndOffset= fTextWidget.getOffsetAtLocation(new Point(0, event.y + event.height)); + int widgetClippingEndOffset= fTextWidget.getOffsetAtPoint(new Point(0, event.y + event.height)); + if (widgetClippingEndOffset != -1) { int lastWidgetLine= fTextWidget.getLineAtOffset(widgetClippingEndOffset); widgetEndOffset= fTextWidget.getOffsetAtLine(lastWidgetLine + 1); - } catch (IllegalArgumentException ex1) { + } else { // happens if the editor is not "full", e.g. the last line of the document is visible in the editor try { int lastVisibleLine= JFaceTextUtil.getPartialBottomIndex(fTextWidget); diff --git a/org.eclipse.jface.text/src/org/eclipse/jface/text/source/LineNumberRulerColumn.java b/org.eclipse.jface.text/src/org/eclipse/jface/text/source/LineNumberRulerColumn.java index ee71644cd52..96c48b2dc1a 100644 --- a/org.eclipse.jface.text/src/org/eclipse/jface/text/source/LineNumberRulerColumn.java +++ b/org.eclipse.jface.text/src/org/eclipse/jface/text/source/LineNumberRulerColumn.java @@ -243,20 +243,21 @@ public class LineNumberRulerColumn implements IVerticalRulerColumn { if (relativePosition.x < 0) offset= lineInfo.getOffset(); else { - try { - int widgetOffset= fCachedTextWidget.getOffsetAtLocation(relativePosition); + int widgetOffset= fCachedTextWidget.getOffsetAtPoint(relativePosition); + if (widgetOffset != -1) { Point p= fCachedTextWidget.getLocationAtOffset(widgetOffset); - if (p.x > relativePosition.x) + if (p.x > relativePosition.x) { widgetOffset--; + } // Convert to model offset if (fCachedTextViewer instanceof ITextViewerExtension5) { ITextViewerExtension5 extension= (ITextViewerExtension5)fCachedTextViewer; offset= extension.widgetOffset2ModelOffset(widgetOffset); - } else + } else { offset= widgetOffset + fCachedTextViewer.getVisibleRegion().getOffset(); - - } catch (IllegalArgumentException ex) { + } + } else { int lineEndOffset= lineInfo.getOffset() + lineInfo.getLength(); // Convert to widget offset diff --git a/org.eclipse.ui.workbench.texteditor/META-INF/MANIFEST.MF b/org.eclipse.ui.workbench.texteditor/META-INF/MANIFEST.MF index 4ab2c9ddb1d..a10ac23747e 100644 --- a/org.eclipse.ui.workbench.texteditor/META-INF/MANIFEST.MF +++ b/org.eclipse.ui.workbench.texteditor/META-INF/MANIFEST.MF @@ -26,6 +26,7 @@ Require-Bundle: org.eclipse.compare.core;bundle-version="[3.5.0,4.0.0)", org.eclipse.core.expressions;bundle-version="[3.4.100,4.0.0)", org.eclipse.jface.text;bundle-version="[3.8.0,4.0.0)", + org.eclipse.swt;bundle-version="[3.107.0,4.0.0)", org.eclipse.ui;bundle-version="[3.5.0,4.0.0)" Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Import-Package: com.ibm.icu.text diff --git a/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/AbstractTextEditor.java b/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/AbstractTextEditor.java index 0ad4a48a3d0..965f311ccd8 100644 --- a/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/AbstractTextEditor.java +++ b/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/AbstractTextEditor.java @@ -1902,21 +1902,20 @@ public abstract class AbstractTextEditor extends EditorPart implements ITextEdit if (document == null) return -1; - try { - int widgetOffset= styledText.getOffsetAtLocation(new Point(x, y)); - Point p= styledText.getLocationAtOffset(widgetOffset); - if (p.x > x) - widgetOffset--; - - if (textViewer instanceof ITextViewerExtension5) { - ITextViewerExtension5 extension= (ITextViewerExtension5) textViewer; - return extension.widgetOffset2ModelOffset(widgetOffset); - } - IRegion visibleRegion= textViewer.getVisibleRegion(); - return widgetOffset + visibleRegion.getOffset(); - } catch (IllegalArgumentException e) { + int widgetOffset = styledText.getOffsetAtPoint(new Point(x, y)); + if (widgetOffset == -1) { return -1; } + Point p = styledText.getLocationAtOffset(widgetOffset); + if (p.x > x) + widgetOffset--; + + if (textViewer instanceof ITextViewerExtension5) { + ITextViewerExtension5 extension = (ITextViewerExtension5) textViewer; + return extension.widgetOffset2ModelOffset(widgetOffset); + } + IRegion visibleRegion = textViewer.getVisibleRegion(); + return widgetOffset + visibleRegion.getOffset(); } } @@ -3534,7 +3533,7 @@ public abstract class AbstractTextEditor extends EditorPart implements ITextEdit if (isBlockSelectionModeEnabled()) return false; - int offset= st.getOffsetAtLocation(point); + int offset = st.getOffsetAtPoint(point); Point p= st.getLocationAtOffset(offset); if (p.x > point.x) offset--; diff --git a/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/templates/AbstractTemplatesPage.java b/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/templates/AbstractTemplatesPage.java index 04987fc3b24..d0e0a2a0b44 100644 --- a/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/templates/AbstractTemplatesPage.java +++ b/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/templates/AbstractTemplatesPage.java @@ -1572,7 +1572,7 @@ public abstract class AbstractTemplatesPage extends Page implements ITemplatesPa if (fViewer instanceof ITextViewerExtension5) { ITextViewerExtension5 ext= (ITextViewerExtension5) fViewer; try { - return ext.widgetOffset2ModelOffset(textWidget.getOffsetAtLocation(point)); + return ext.widgetOffset2ModelOffset(textWidget.getOffsetAtPoint(point)); } catch (IllegalArgumentException e) { int docLineIndex= ext.widgetLine2ModelLine(textWidget.getLineIndex(point.y)); String lineDelimiter= document.getLineDelimiter(docLineIndex); |