1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-25 01:45:33 +02:00

Bug 495098 - Avoid & character in function signature being treated as SWT mnemonic

In an SWT label, '&' characters are treated as mnemonics.
Some labels can contain this character as their content
(e.g. if they represent the signature of a function with
arguments of C++ reference type), so they need to be
escaped.

Change-Id: I8ca57308f5dc3fa06648ce7f76df003e76fac3b6
This commit is contained in:
Nathan Ridge 2016-12-12 05:18:07 -05:00
parent 4e7f132020
commit e252be5dd5
2 changed files with 26 additions and 0 deletions

View file

@ -110,4 +110,21 @@ public class TextUtil {
}
return -1;
}
/**
* Returns an escaped version of the string 'input' where instances of the
* character 'specialChar' are escaped by replacing them with a two instances
* of 'specialChar'.
*/
public static String escape(String input, char specialChar) {
StringBuilder builder = new StringBuilder();
for (int i = 0; i < input.length(); i++) {
char ch = input.charAt(i);
if (ch == specialChar) {
builder.append(specialChar);
}
builder.append(ch);
}
return builder.toString();
}
}

View file

@ -76,6 +76,8 @@ import org.eclipse.cdt.ui.actions.CdtActionConstants;
import org.eclipse.cdt.ui.actions.OpenViewActionGroup;
import org.eclipse.cdt.ui.refactoring.actions.CRefactoringActionGroup;
import org.eclipse.cdt.internal.core.util.TextUtil;
import org.eclipse.cdt.internal.ui.CPluginImages;
import org.eclipse.cdt.internal.ui.ICHelpContextIds;
import org.eclipse.cdt.internal.ui.IContextMenuConstants;
@ -727,6 +729,13 @@ public class CHViewPart extends ViewPart {
message= Messages.format(format, label, scope);
}
}
// Escape '&' characters in the message, otherwise SWT interprets them
// as mnemonics. '&' characters can appear in the label of a CElement
// if the CElement represents a function with arguments of C++
// reference type.
message = TextUtil.escape(message, '&');
setContentDescription(message);
}