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 + }; + +}