Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Pazderski2019-08-26 15:13:52 +0000
committerPaul Pazderski2019-09-10 18:54:10 +0000
commitc89b823822e2d73ba4996ad419475db34c916ed5 (patch)
tree2be8cfe0c35081d8b13e254dc4148dfffe988017
parent1bc0d896ac35ac1c02c6b2326fac003a93b22469 (diff)
downloadeclipse.platform.text-c89b823822e2d73ba4996ad419475db34c916ed5.tar.gz
eclipse.platform.text-c89b823822e2d73ba4996ad419475db34c916ed5.tar.xz
eclipse.platform.text-c89b823822e2d73ba4996ad419475db34c916ed5.zip
Bug 550471 - Replace usage of TextUtilities.indexOf withI20190910-1800
MultiStringMatcher TextUtilities.indexOf is deprecated and MultiStringMatcher is (especially when reused) faster. Change-Id: I44eef426cf5c2faedd47a57ec09641aae8700166 Signed-off-by: Paul Pazderski <paul-eclipse@ppazderski.de>
-rw-r--r--org.eclipse.jface.text/src/org/eclipse/jface/internal/text/SelectionProcessor.java28
-rw-r--r--org.eclipse.jface.text/src/org/eclipse/jface/text/TextViewer.java16
2 files changed, 22 insertions, 22 deletions
diff --git a/org.eclipse.jface.text/src/org/eclipse/jface/internal/text/SelectionProcessor.java b/org.eclipse.jface.text/src/org/eclipse/jface/internal/text/SelectionProcessor.java
index d5d1c605f02..f0dac1f9aba 100644
--- a/org.eclipse.jface.text/src/org/eclipse/jface/internal/text/SelectionProcessor.java
+++ b/org.eclipse.jface.text/src/org/eclipse/jface/internal/text/SelectionProcessor.java
@@ -39,6 +39,8 @@ import org.eclipse.jface.text.IRewriteTarget;
import org.eclipse.jface.text.ITextSelection;
import org.eclipse.jface.text.ITextViewer;
import org.eclipse.jface.text.ITextViewerExtension;
+import org.eclipse.jface.text.MultiStringMatcher;
+import org.eclipse.jface.text.MultiStringMatcher.Match;
import org.eclipse.jface.text.Region;
import org.eclipse.jface.text.TextSelection;
import org.eclipse.jface.text.TextUtilities;
@@ -244,6 +246,7 @@ public final class SelectionProcessor {
int visualEndColumn= computeVisualColumn(endLine, endColumn);
root= new MultiTextEdit();
String[] delimiters= fDocument.getLegalLineDelimiters();
+ MultiStringMatcher delimiterMatcher= MultiStringMatcher.create(delimiters);
int lastDelim= 0;
for (int line= startLine; line <= endLine; line++) {
@@ -251,13 +254,13 @@ public final class SelectionProcessor {
if (lastDelim == -1) {
string= ""; //$NON-NLS-1$
} else {
- int[] index= TextUtilities.indexOf(delimiters, replacement, lastDelim);
- if (index[0] == -1) {
+ Match m= delimiterMatcher.indexOf(replacement, lastDelim);
+ if (m == null) {
string= replacement.substring(lastDelim);
lastDelim= -1;
} else {
- string= replacement.substring(lastDelim, index[0]);
- lastDelim= index[0] + delimiters[index[1]].length();
+ string= replacement.substring(lastDelim, m.getOffset());
+ lastDelim= m.getOffset() + m.getText().length();
}
}
TextEdit replace= createReplaceEdit(line, visualStartColumn, visualEndColumn, string, delete);
@@ -266,13 +269,13 @@ public final class SelectionProcessor {
while (lastDelim != -1) {
// more stuff to insert
String string;
- int[] index= TextUtilities.indexOf(delimiters, replacement, lastDelim);
- if (index[0] == -1) {
+ Match m= delimiterMatcher.indexOf(replacement, lastDelim);
+ if (m == null) {
string= replacement.substring(lastDelim);
lastDelim= -1;
} else {
- string= replacement.substring(lastDelim, index[0]);
- lastDelim= index[0] + delimiters[index[1]].length();
+ string= replacement.substring(lastDelim, m.getOffset());
+ lastDelim= m.getOffset() + m.getText().length();
}
endLine++;
TextEdit edit;
@@ -379,13 +382,8 @@ public final class SelectionProcessor {
@Override
ISelection makeReplaceSelection(ISelection selection, String replacement) throws BadLocationException {
IBlockTextSelection bts= (IBlockTextSelection)selection;
- String[] delimiters= fDocument.getLegalLineDelimiters();
- int[] index= TextUtilities.indexOf(delimiters, replacement, 0);
- int length;
- if (index[0] == -1)
- length= replacement.length();
- else
- length= index[0];
+ Match m= MultiStringMatcher.indexOf(replacement, 0, fDocument.getLegalLineDelimiters());
+ int length= m != null ? m.getOffset() : replacement.length();
int startLine= bts.getStartLine();
int column= bts.getStartColumn() + length;
diff --git a/org.eclipse.jface.text/src/org/eclipse/jface/text/TextViewer.java b/org.eclipse.jface.text/src/org/eclipse/jface/text/TextViewer.java
index 9b412ebf101..27ae2c3b094 100644
--- a/org.eclipse.jface.text/src/org/eclipse/jface/text/TextViewer.java
+++ b/org.eclipse.jface.text/src/org/eclipse/jface/text/TextViewer.java
@@ -81,6 +81,7 @@ import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.text.MultiStringMatcher.Match;
import org.eclipse.jface.text.hyperlink.HyperlinkManager;
import org.eclipse.jface.text.hyperlink.HyperlinkManager.DETECTION_STRATEGY;
import org.eclipse.jface.text.hyperlink.IHyperlinkDetector;
@@ -3927,7 +3928,7 @@ public class TextViewer extends Viewer implements
TextTransfer plainTextTransfer= TextTransfer.getInstance();
String contents= (String) clipboard.getContents(plainTextTransfer, DND.CLIPBOARD);
String toInsert;
- if (TextUtilities.indexOf(fDocument.getLegalLineDelimiters(), contents, 0)[0] != -1) {
+ if (MultiStringMatcher.indexOf(contents, 0, fDocument.getLegalLineDelimiters()) != null) {
// multi-line insertion
toInsert= contents;
} else {
@@ -4302,6 +4303,7 @@ public class TextViewer extends Viewer implements
try {
IRegion[] occurrences= new IRegion[endLine - startLine + 1];
+ MultiStringMatcher prefixMatcher= MultiStringMatcher.create(prefixes);
// find all the first occurrences of prefix in the given lines
for (int i= 0; i < occurrences.length; i++) {
@@ -4310,20 +4312,20 @@ public class TextViewer extends Viewer implements
String text= d.get(line.getOffset(), line.getLength());
int index= -1;
- int[] found= TextUtilities.indexOf(prefixes, text, 0);
- if (found[0] != -1) {
+ Match m= prefixMatcher.indexOf(text, 0);
+ if (m != null) {
if (ignoreWhitespace) {
- String s= d.get(line.getOffset(), found[0]);
+ String s= d.get(line.getOffset(), m.getOffset());
s= s.trim();
if (s.isEmpty())
- index= line.getOffset() + found[0];
- } else if (found[0] == 0)
+ index= line.getOffset() + m.getOffset();
+ } else if (m.getOffset() == 0)
index= line.getOffset();
}
if (index > -1) {
// remember where prefix is in line, so that it can be removed
- int length= prefixes[found[1]].length();
+ int length= m.getText().length();
if (length == 0 && !ignoreWhitespace && line.getLength() > 0) {
// found a non-empty line which cannot be shifted
return;

Back to the top