1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-06-07 17:56:01 +02:00

Bug 329286: IndexOutOfBoundsException pasting into search field.

This commit is contained in:
Markus Schorn 2010-11-04 16:43:53 +00:00
parent 7cedfa5e48
commit 5b51ec0206

View file

@ -342,13 +342,12 @@ public class PDOMSearchPage extends DialogPage implements ISearchPage {
// Pattern combo // Pattern combo
patternCombo = new Combo(result, SWT.SINGLE | SWT.BORDER); patternCombo = new Combo(result, SWT.SINGLE | SWT.BORDER);
patternCombo.addVerifyListener(new VerifyListener() { patternCombo.addVerifyListener(new VerifyListener() {
public void verifyText(VerifyEvent e) { public void verifyText(VerifyEvent event) {
final String text = patternCombo.getText(); final String text = patternCombo.getText();
boolean relax= text.contains(Keywords.OPERATOR + " "); //$NON-NLS-1$ final char[] newChars= event.text.toCharArray();
char[] chars= e.text.toCharArray(); final StringBuilder result= new StringBuilder(newChars.length);
StringBuilder result= new StringBuilder(chars.length); boolean relax= prefix(text, event.start, result).contains(Keywords.OPERATOR + " "); //$NON-NLS-1$
for (int i = 0; i < chars.length; i++) { for (final char c : newChars) {
final char c = chars[i];
switch (c) { switch (c) {
case '_': case '_':
case ':': // scope operator case ':': // scope operator
@ -357,7 +356,7 @@ public class PDOMSearchPage extends DialogPage implements ISearchPage {
result.append(c); result.append(c);
break; break;
case ' ': case ' ':
if (prefix(text, e, e.start+i).endsWith(Keywords.OPERATOR)) { if (prefix(text, event.start, result).endsWith(Keywords.OPERATOR)) {
relax= true; relax= true;
result.append(c); result.append(c);
} }
@ -366,7 +365,7 @@ public class PDOMSearchPage extends DialogPage implements ISearchPage {
case '!': case '=': case '>': case '<': case '!': case '=': case '>': case '<':
case '%': case '^': case '(': case ')': case '%': case '^': case '(': case ')':
case '[': case ']': case '[': case ']':
if (prefix(text, e, e.start+i).endsWith(Keywords.OPERATOR)) { if (prefix(text, event.start, result).endsWith(Keywords.OPERATOR)) {
result.append(' '); result.append(' ');
relax= true; relax= true;
} }
@ -380,14 +379,14 @@ public class PDOMSearchPage extends DialogPage implements ISearchPage {
} }
break; break;
} }
e.text= result.toString(); event.text= result.toString();
} }
} }
private String prefix(String text, VerifyEvent e, int length) { private String prefix(String text, int len, StringBuilder rest) {
StringBuilder result= new StringBuilder(length); StringBuilder result= new StringBuilder(len + rest.length());
result.append(text, 0, e.start); result.append(text, 0, len);
result.append(e.text, 0, length-e.start); result.append(rest);
return result.toString(); return result.toString();
} }
}); });