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:
parent
7cedfa5e48
commit
5b51ec0206
1 changed files with 12 additions and 13 deletions
|
@ -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();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
Loading…
Add table
Reference in a new issue