diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/PDOMSearchPage.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/PDOMSearchPage.java index 7142bcf8f83..1610f90bc98 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/PDOMSearchPage.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/PDOMSearchPage.java @@ -57,6 +57,7 @@ import org.eclipse.ui.PlatformUI; import org.eclipse.cdt.core.model.CoreModel; import org.eclipse.cdt.core.model.ICElement; import org.eclipse.cdt.core.model.ICProject; +import org.eclipse.cdt.core.parser.Keywords; import org.eclipse.cdt.ui.CUIPlugin; import org.eclipse.cdt.internal.ui.ICHelpContextIds; @@ -344,15 +345,37 @@ public class PDOMSearchPage extends DialogPage implements ISearchPage { patternCombo = new Combo( result, SWT.SINGLE | SWT.BORDER ); patternCombo.addVerifyListener(new VerifyListener() { public void verifyText(VerifyEvent e) { + final String text = patternCombo.getText(); + boolean relax= text.contains(Keywords.OPERATOR + " "); //$NON-NLS-1$ char[] chars= e.text.toCharArray(); StringBuilder result= new StringBuilder(chars.length); - for (char c : chars) { + for (int i = 0; i < chars.length; i++) { + final char c = chars[i]; switch (c) { case '_': case ':': // scope operator case '?': case '*': // wild cards + case '\\': // escaping wild-cards result.append(c); break; + case ' ': + if (prefix(text, e, e.start+i).endsWith(Keywords.OPERATOR)) { + relax= true; + result.append(c); + } + break; + case '&': case '|': case '+': case '-': + case '!': case '=': case '>': case '<': + case '%': case '^': case '(': case ')': + case '[': case ']': + if (prefix(text, e, e.start+i).endsWith(Keywords.OPERATOR)) { + result.append(' '); + relax= true; + } + if (relax) + result.append(c); + break; + case '~': default: if (Character.isLetterOrDigit(c)) { result.append(c); @@ -362,6 +385,13 @@ public class PDOMSearchPage extends DialogPage implements ISearchPage { e.text= result.toString(); } } + + private String prefix(String text, VerifyEvent e, int length) { + StringBuilder result= new StringBuilder(length); + result.append(text, 0, e.start); + result.append(e.text, 0, length-e.start); + return result.toString(); + } }); patternCombo.addModifyListener( new ModifyListener() { diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/PDOMSearchPatternQuery.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/PDOMSearchPatternQuery.java index 00402c34894..4cbe2ae5e09 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/PDOMSearchPatternQuery.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/PDOMSearchPatternQuery.java @@ -23,6 +23,7 @@ import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.OperationCanceledException; import org.eclipse.core.runtime.Status; +import org.eclipse.osgi.util.NLS; import org.eclipse.cdt.core.dom.ast.DOMException; import org.eclipse.cdt.core.dom.ast.ICompositeType; @@ -89,6 +90,22 @@ public class PDOMSearchPatternQuery extends PDOMSearchQuery { for (int i = 0; i < n; ++i) { char c = patternStr.charAt(i); switch (c) { + case '\\': + if (i+1 < n) { + switch(patternStr.charAt(i+1)) { + case '?': + buff.append("\\?"); //$NON-NLS-1$ + break; + case '*': + buff.append("\\*"); //$NON-NLS-1$ + break; + default: + buff.append('\\'); + } + } else { + buff.append('\\'); + } + break; case '*': buff.append(".*"); //$NON-NLS-1$ break; @@ -104,6 +121,9 @@ public class PDOMSearchPatternQuery extends PDOMSearchQuery { buff = new StringBuffer(); } break; + case '|': case '+': case '^': case '(': case ')': case '[': case ']': + buff.append('\\').append(c); + break; default: buff.append(c); } @@ -186,7 +206,7 @@ public class PDOMSearchPatternQuery extends PDOMSearchQuery { @Override public String getResultLabel(int numMatches) { - String patternInScope = CSearchMessages.bind( + String patternInScope = NLS.bind( CSearchMessages.PDOMSearchPatternQuery_PatternQuery_labelPatternInScope, patternStr, scopeDesc); return getResultLabel(patternInScope, numMatches); } diff --git a/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_search.htm b/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_search.htm index 1d279efece2..ccbfafd1ca7 100644 --- a/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_search.htm +++ b/doc/org.eclipse.cdt.doc.user/concepts/cdt_c_search.htm @@ -125,7 +125,7 @@ is to be searched:
Tip:
- Use the character * to search for
+ Use the character sequence \* to search for
operators that begin with *. See syntax examples in the table below.
The table below provides syntax examples and an explanation for each example to help you conduct an effective search.
@@ -163,6 +165,7 @@ to help you conduct an effective search.