diff --git a/core/org.eclipse.cdt.ui/plugin.xml b/core/org.eclipse.cdt.ui/plugin.xml
index 587a5f48e91..4b90885168d 100644
--- a/core/org.eclipse.cdt.ui/plugin.xml
+++ b/core/org.eclipse.cdt.ui/plugin.xml
@@ -1378,6 +1378,10 @@
class="org.eclipse.cdt.internal.ui.text.contentassist.SearchCompletionContributor"
id="Search"
priority="3"/>
+
0)
- for (int i = 0; i < keywords.length; ++i)
- if (keywords[i].startsWith(prefix))
- handleKeyword(keywords[i], completionNode, offset, viewer, proposals);
- }
+ }
}
private void handleBinding(IBinding binding, ASTCompletionNode completionNode, int offset, ITextViewer viewer, List proposals) {
@@ -232,13 +226,6 @@ public class DOMCompletionContributor implements ICompletionContributor {
proposals.add(createProposal(macroName, macroName, image, completionNode, offset, viewer));
}
- private void handleKeyword(String keyword, ASTCompletionNode completionNode, int offset, ITextViewer viewer, List proposals) {
- // TODO we should really check the context to make sure
- // it is valid for the keyword to appear here
- Image image = getImage(CElementImageProvider.getKeywordImageDescriptor());
- proposals.add(createProposal(keyword, keyword, image, completionNode, offset, viewer));
- }
-
private CCompletionProposal createProposal(String repString, String dispString, Image image, ASTCompletionNode completionNode, int offset, ITextViewer viewer) {
int repLength = completionNode.getLength();
int repOffset = offset - repLength;
@@ -297,42 +284,4 @@ public class DOMCompletionContributor implements ICompletionContributor {
: null;
}
- // These are the keywords we complete
- // We only do the ones that are > 5 characters long
- private static String [] keywords = {
- "const_cast", //$NON-NLS-1$
- "continue", //$NON-NLS-1$
- "default", //$NON-NLS-1$
- "delete", //$NON-NLS-1$
- "double", //$NON-NLS-1$
- "dynamic_cast", //$NON-NLS-1$
- "explicit", //$NON-NLS-1$
- "export", //$NON-NLS-1$
- "extern", //$NON-NLS-1$
- "friend", //$NON-NLS-1$
- "inline", //$NON-NLS-1$
- "mutable", //$NON-NLS-1$
- "namespace", //$NON-NLS-1$
- "operator", //$NON-NLS-1$
- "private", //$NON-NLS-1$
- "protected", //$NON-NLS-1$
- "register", //$NON-NLS-1$
- "reinterpret_cast", //$NON-NLS-1$
- "return", //$NON-NLS-1$
- "signed", //$NON-NLS-1$
- "sizeof", //$NON-NLS-1$
- "static", //$NON-NLS-1$
- "static_cast", //$NON-NLS-1$
- "struct", //$NON-NLS-1$
- "switch", //$NON-NLS-1$
- "template", //$NON-NLS-1$
- "typedef", //$NON-NLS-1$
- "typeid", //$NON-NLS-1$
- "typename", //$NON-NLS-1$
- "unsigned", //$NON-NLS-1$
- "virtual", //$NON-NLS-1$
- "volatile", //$NON-NLS-1$
- "wchar_t" //$NON-NLS-1$
- };
-
}
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/KeywordCompletionContributor.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/KeywordCompletionContributor.java
new file mode 100644
index 00000000000..d8523cb03b9
--- /dev/null
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/KeywordCompletionContributor.java
@@ -0,0 +1,131 @@
+/**********************************************************************
+ * Copyright (c) 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ **********************************************************************/
+package org.eclipse.cdt.internal.ui.text.contentassist;
+
+import java.util.List;
+
+import org.eclipse.cdt.core.dom.ast.ASTCompletionNode;
+import org.eclipse.cdt.core.model.IWorkingCopy;
+import org.eclipse.cdt.core.parser.Keywords;
+import org.eclipse.cdt.internal.ui.viewsupport.CElementImageProvider;
+import org.eclipse.cdt.ui.CUIPlugin;
+import org.eclipse.cdt.ui.text.contentassist.ICompletionContributor;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.text.ITextViewer;
+import org.eclipse.swt.graphics.Image;
+
+public class KeywordCompletionContributor implements ICompletionContributor {
+
+ public void contributeCompletionProposals(ITextViewer viewer, int offset,
+ IWorkingCopy workingCopy, ASTCompletionNode completionNode,
+ String prefix, List proposals) {
+
+ String[] keywords = cppkeywords; // default to C++
+ if (workingCopy != null && workingCopy.isCLanguage())
+ keywords = ckeywords;
+
+ if (prefix.length() > 0)
+ for (int i = 0; i < keywords.length; ++i)
+ if (keywords[i].startsWith(prefix))
+ handleKeyword(keywords[i], completionNode, offset, viewer, proposals);
+ }
+
+ private void handleKeyword(String keyword, ASTCompletionNode completionNode, int offset, ITextViewer viewer, List proposals) {
+ Image image = getImage(CElementImageProvider.getKeywordImageDescriptor());
+ proposals.add(createProposal(keyword, keyword, image, completionNode, offset, viewer));
+ }
+
+ private CCompletionProposal createProposal(String repString, String dispString, Image image, ASTCompletionNode completionNode, int offset, ITextViewer viewer) {
+ int repLength = completionNode.getLength();
+ int repOffset = offset - repLength;
+ return new CCompletionProposal(repString, repOffset, repLength, image, dispString, 1, viewer);
+ }
+
+ private Image getImage(ImageDescriptor desc) {
+ return desc != null ? CUIPlugin.getImageDescriptorRegistry().get(desc) : null;
+ }
+
+ // These are the keywords we complete
+ // We only do the ones that are >= 5 characters long
+ private static String [] ckeywords = {
+ Keywords.BREAK,
+ Keywords.CONST,
+ Keywords.CONTINUE,
+ Keywords.DEFAULT,
+ Keywords.DOUBLE,
+ Keywords.EXTERN,
+ Keywords.FLOAT,
+ Keywords.INLINE,
+ Keywords.REGISTER,
+ Keywords.RESTRICT,
+ Keywords.RETURN,
+ Keywords.SHORT,
+ Keywords.SIGNED,
+ Keywords.SIZEOF,
+ Keywords.STATIC,
+ Keywords.STRUCT,
+ Keywords.SWITCH,
+ Keywords.TYPEDEF,
+ Keywords.UNION,
+ Keywords.UNSIGNED,
+ Keywords.VOLATILE,
+ Keywords.WHILE,
+ Keywords._BOOL,
+ Keywords._COMPLEX,
+ Keywords._IMAGINARY
+ };
+
+ private static String [] cppkeywords = {
+ Keywords.BREAK,
+ Keywords.CATCH,
+ Keywords.CLASS,
+ Keywords.CONST,
+ Keywords.CONST_CAST,
+ Keywords.CONTINUE,
+ Keywords.DEFAULT,
+ Keywords.DELETE,
+ Keywords.DOUBLE,
+ Keywords.DYNAMIC_CAST,
+ Keywords.EXPLICIT,
+ Keywords.EXPORT,
+ Keywords.EXTERN,
+ Keywords.FALSE,
+ Keywords.FLOAT,
+ Keywords.FRIEND,
+ Keywords.INLINE,
+ Keywords.MUTABLE,
+ Keywords.NAMESPACE,
+ Keywords.OPERATOR,
+ Keywords.PRIVATE,
+ Keywords.PROTECTED,
+ Keywords.PUBLIC,
+ Keywords.REGISTER,
+ Keywords.REINTERPRET_CAST,
+ Keywords.RETURN,
+ Keywords.SHORT,
+ Keywords.SIGNED,
+ Keywords.SIZEOF,
+ Keywords.STATIC,
+ Keywords.STATIC_CAST,
+ Keywords.STRUCT,
+ Keywords.SWITCH,
+ Keywords.TEMPLATE,
+ Keywords.THROW,
+ Keywords.TYPEDEF,
+ Keywords.TYPEID,
+ Keywords.TYPENAME,
+ Keywords.UNION,
+ Keywords.UNSIGNED,
+ Keywords.USING,
+ Keywords.VIRTUAL,
+ Keywords.VOLATILE,
+ Keywords.WCHAR_T,
+ Keywords.WHILE
+ };
+
+}