diff --git a/core/org.eclipse.cdt.ui/ChangeLog b/core/org.eclipse.cdt.ui/ChangeLog index 9a2ae2ffd29..8f844ddff87 100644 --- a/core/org.eclipse.cdt.ui/ChangeLog +++ b/core/org.eclipse.cdt.ui/ChangeLog @@ -1,3 +1,18 @@ +2004-08-12 Alain Magloire + + Fix for PR 71667. + Changes to the CCompletionContributor to pass + a context. + + * src/org/eclipse/cdt/internal/ui/CCompletionContributorManager.java + * src/org/eclipse/cdt/internal/ui/editor/AddIncludeOnSlectionAction.java + * src/org/eclipse/cdt/internal/ui/text/CCompletionContributorDescriptor.java + * src/org/eclipse/cdt/internal/ui/text/hover/CDocHover.java + * src/org/eclipse/cdt/internal/ui/t4xt/CCompletionProcessor.java + * src/org/eclipse/cdt/ui/ICCompletionContributor.java + * src/org/eclipse/cdt/ui/text/ICCompletionInvocationContext.java + * plugin.xml + 2004-08-11 Alain Magloire Duplication in the CView. diff --git a/core/org.eclipse.cdt.ui/plugin.xml b/core/org.eclipse.cdt.ui/plugin.xml index 6c42a0a9c99..9da8ec490ef 100644 --- a/core/org.eclipse.cdt.ui/plugin.xml +++ b/core/org.eclipse.cdt.ui/plugin.xml @@ -26,6 +26,7 @@ + diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/CCompletionContributorManager.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/CCompletionContributorManager.java index 3695b4af6c4..4cee099754c 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/CCompletionContributorManager.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/CCompletionContributorManager.java @@ -12,15 +12,17 @@ package org.eclipse.cdt.internal.ui; import java.util.ArrayList; -import java.util.List; +import org.eclipse.cdt.core.model.ITranslationUnit; +import org.eclipse.cdt.internal.ui.text.CCompletionContributorDescriptor; import org.eclipse.cdt.ui.CUIPlugin; import org.eclipse.cdt.ui.ICCompletionContributor; import org.eclipse.cdt.ui.IFunctionSummary; +import org.eclipse.cdt.ui.text.ICCompletionInvocationContext; +import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IConfigurationElement; -import org.eclipse.core.runtime.IExtensionPoint; -import org.eclipse.core.runtime.ISafeRunnable; +import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Platform; /** @@ -30,9 +32,10 @@ import org.eclipse.core.runtime.Platform; public class CCompletionContributorManager { - static private List fCompletionContributors; - static boolean fContributorsLoaded = false; public static final String CONTRIBUTION_EXTENSION = "CCompletionContributor"; //$NON-NLS-1$ + private static CCompletionContributorDescriptor[] fCCompletionContributorDescriptors = null; + + static private CCompletionContributorManager fInstance; private CCompletionContributorManager() { @@ -46,79 +49,88 @@ public class CCompletionContributorManager { return fInstance; } - public IFunctionSummary getFunctionInfo(String name) { - if (!fContributorsLoaded) - loadExtensions(); - - for (int i = 0; i < fCompletionContributors.size(); i++) { - ICCompletionContributor c = (ICCompletionContributor) fCompletionContributors.get(i); - IFunctionSummary f = c.getFunctionInfo(name); - - if (f != null) - return f; + public IFunctionSummary getFunctionInfo(ICCompletionInvocationContext context, String name) { + CCompletionContributorDescriptor[] desc = getCCompletionContributorDescriptors(); + for (int i = 0; i < desc.length; i++) { + try { + ICCompletionContributor c = null; + ITranslationUnit unit = context.getTranslationUnit(); + if (unit != null) { + c = desc[i].getCCompletionContributor(unit); + } else { + IProject project = context.getProject(); + c = desc[i].getCCompletionContributor(project); + } + IFunctionSummary f = c.getFunctionInfo(context, name); + if (f != null) { + return f; + } + } catch (CoreException e) { + // + } } + return null; } - public IFunctionSummary[] getMatchingFunctions(String frag) { - if (!fContributorsLoaded) - loadExtensions(); + public IFunctionSummary[] getMatchingFunctions(ICCompletionInvocationContext context, String frag) { + IFunctionSummary[] fs = null; - for (int i = 0; i < fCompletionContributors.size(); i++) { - ICCompletionContributor c = (ICCompletionContributor) fCompletionContributors.get(i); - IFunctionSummary[] f = c.getMatchingFunctions(frag); - if (f != null) { - if (fs != null) { - int length = f.length + fs.length; - IFunctionSummary[] ft = new IFunctionSummary[length]; - int j; - for (j = 0; j < fs.length; j++) - ft[j] = fs[j]; - for (j = 0; j < f.length; j++) - ft[j + fs.length] = f[j]; - fs = ft; + CCompletionContributorDescriptor[] desc = getCCompletionContributorDescriptors(); + for (int i = 0; i < desc.length; i++) { + try { + ICCompletionContributor c = null; + ITranslationUnit unit = context.getTranslationUnit(); + if (unit != null) { + c = desc[i].getCCompletionContributor(unit); } else { - fs = f; + IProject project = context.getProject(); + c = desc[i].getCCompletionContributor(project); } + if (c == null) { + continue; + } + IFunctionSummary[] f = c.getMatchingFunctions(context, frag); + if (f != null) { + if (fs == null) { + fs = f; + } else { + IFunctionSummary[] dest = new IFunctionSummary[fs.length + f.length]; + System.arraycopy(fs, 0, dest, 0, fs.length); + System.arraycopy(f, 0, dest, fs.length, f.length); + fs = dest; + } + } + } catch (CoreException e) { + // } - - //if(f != null) - //return f; } return fs; } - private void loadExtensions() { - fContributorsLoaded = true; - fCompletionContributors = new ArrayList(2); + private static CCompletionContributorDescriptor[] getCCompletionContributorDescriptors() { + if (fCCompletionContributorDescriptors == null) { + fCCompletionContributorDescriptors= getCCompletionContributorDescriptors(CONTRIBUTION_EXTENSION); + } + return fCCompletionContributorDescriptors; + } - // populate list - IExtensionPoint extensionPoint = Platform.getExtensionRegistry().getExtensionPoint(CUIPlugin.PLUGIN_ID, "CCompletionContributor"); //$NON-NLS-1$ - if (extensionPoint != null) { - IConfigurationElement[] elements = extensionPoint.getConfigurationElements(); - for (int i = 0; i < elements.length; i++) { - if (elements[i].getName().equals("provider")) { //$NON-NLS-1$ - try { - final ICCompletionContributor c; - // Instantiate the class - c = (ICCompletionContributor) elements[i].createExecutableExtension("class"); //$NON-NLS-1$ - ISafeRunnable runnable = new ISafeRunnable() { - public void run() throws Exception { - // Initialize - c.initialize(); - // Add to contributor list - fCompletionContributors.add(c); - } - public void handleException(Throwable exception) { - } - }; - Platform.run(runnable); - } catch (CoreException e) { - } - } + + private static CCompletionContributorDescriptor[] getCCompletionContributorDescriptors(String contributionId) { + IConfigurationElement[] elements= Platform.getExtensionRegistry().getConfigurationElementsFor(CUIPlugin.PLUGIN_ID, contributionId); + ArrayList res= new ArrayList(elements.length); + for (int i= 0; i < elements.length; i++) { + CCompletionContributorDescriptor desc= new CCompletionContributorDescriptor(elements[i]); + IStatus status= desc.checkSyntax(); + if (status.isOK()) { + res.add(desc); + } else { + CUIPlugin.getDefault().log(status); } } - } + return (CCompletionContributorDescriptor[]) res.toArray(new CCompletionContributorDescriptor[res.size()]); + } + } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/AddIncludeOnSelectionAction.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/AddIncludeOnSelectionAction.java index c8df4177b68..ebdc8dcaf71 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/AddIncludeOnSelectionAction.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/AddIncludeOnSelectionAction.java @@ -37,6 +37,7 @@ import org.eclipse.cdt.ui.CUIPlugin; import org.eclipse.cdt.ui.IFunctionSummary; import org.eclipse.cdt.ui.IRequiredInclude; import org.eclipse.cdt.ui.browser.typeinfo.TypeInfoLabelProvider; +import org.eclipse.cdt.ui.text.ICCompletionInvocationContext; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.IProgressMonitor; @@ -219,7 +220,22 @@ public class AddIncludeOnSelectionAction extends Action implements IUpdate { final IFunctionSummary[] fs = new IFunctionSummary[1]; IRunnableWithProgress op = new IRunnableWithProgress() { public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { - fs[0] = CCompletionContributorManager.getDefault().getFunctionInfo(name); + ICCompletionInvocationContext context = new ICCompletionInvocationContext() { + + public IProject getProject() { + ITranslationUnit u = getTranslationUnit(); + if (u != null) { + return u.getCProject().getProject(); + } + return null; + } + + public ITranslationUnit getTranslationUnit() { + return AddIncludeOnSelectionAction.this.getTranslationUnit(); + } + }; + + fs[0] = CCompletionContributorManager.getDefault().getFunctionInfo(context, name); } }; try { diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CCompletionContributorDescriptor.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CCompletionContributorDescriptor.java new file mode 100644 index 00000000000..b6c6032cfb4 --- /dev/null +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CCompletionContributorDescriptor.java @@ -0,0 +1,172 @@ +/******************************************************************************* + * Copyright (c) 2000, 2004 QNX Software Systems 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 + * + * Contributors: + * QNX Software Systems - Initial API and implementation + *******************************************************************************/ +package org.eclipse.cdt.internal.ui.text; + +import java.util.Arrays; + +import org.eclipse.core.expressions.EvaluationContext; +import org.eclipse.core.expressions.EvaluationResult; +import org.eclipse.core.expressions.Expression; +import org.eclipse.core.expressions.ExpressionConverter; +import org.eclipse.core.expressions.ExpressionTagNames; +import org.eclipse.core.resources.IProject; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IConfigurationElement; +import org.eclipse.core.runtime.ISafeRunnable; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Platform; +import org.eclipse.core.runtime.Status; + +import org.eclipse.cdt.core.model.ITranslationUnit; +import org.eclipse.cdt.internal.ui.dialogs.StatusInfo; +import org.eclipse.cdt.ui.CUIPlugin; +import org.eclipse.cdt.ui.ICCompletionContributor; + +/** + * @author alain + * + * To change the template for this generated type comment go to + * Window - Preferences - Java - Code Generation - Code and Comments + */ +public class CCompletionContributorDescriptor { + private IConfigurationElement fConfigurationElement; + private ICCompletionContributor fContributorInstance; + private ITranslationUnit fLastUnit; + private Boolean fStatus; + private boolean fLastResult; + + private static final String ID= "id"; //$NON-NLS-1$ + private static final String CLASS= "class"; //$NON-NLS-1$ + + public CCompletionContributorDescriptor(IConfigurationElement element) { + fConfigurationElement= element; + fContributorInstance= null; + fLastUnit= null; + fStatus= null; // undefined + if (fConfigurationElement.getChildren(ExpressionTagNames.ENABLEMENT).length == 0) { + fStatus= Boolean.TRUE; + } + } + + public IStatus checkSyntax() { + IConfigurationElement[] children= fConfigurationElement.getChildren(ExpressionTagNames.ENABLEMENT); + if (children.length > 1) { + String id= fConfigurationElement.getAttribute(ID); + return new StatusInfo(IStatus.ERROR, "Only one element allowed. Disabling " + id); //$NON-NLS-1$ + } + return new StatusInfo(IStatus.OK, "Syntactically correct quick assist/fix processor"); //$NON-NLS-1$ + } + + private boolean matches(ITranslationUnit unit) { + if (fStatus != null) { + return fStatus.booleanValue(); + } + + IConfigurationElement[] children= fConfigurationElement.getChildren(ExpressionTagNames.ENABLEMENT); + if (children.length == 1) { + if (unit.equals(fLastUnit)) { + return fLastResult; + } + try { + ExpressionConverter parser= ExpressionConverter.getDefault(); + Expression expression= parser.perform(children[0]); + EvaluationContext evalContext= new EvaluationContext(null, unit); + evalContext.addVariable("translationUnit", unit); //$NON-NLS-1$ + String[] natures= unit.getCProject().getProject().getDescription().getNatureIds(); + evalContext.addVariable("projectNatures", Arrays.asList(natures)); //$NON-NLS-1$ + + fLastResult= !(expression.evaluate(evalContext) != EvaluationResult.TRUE); + fLastUnit= unit; + return fLastResult; + } catch (CoreException e) { + CUIPlugin.getDefault().log(e); + } + } + fStatus= Boolean.FALSE; + return false; + } + + public ICCompletionContributor getCCompletionContributor(ITranslationUnit cunit) throws CoreException { + if (matches(cunit)) { + if (fContributorInstance == null) { + try { + fContributorInstance= (ICCompletionContributor)fConfigurationElement.createExecutableExtension(CLASS); + final ICCompletionContributor c = fContributorInstance; + // Run the initialiser the class + ISafeRunnable runnable = new ISafeRunnable() { + public void run() throws Exception { + // Initialize + c.initialize(); + } + public void handleException(Throwable exception) { + } + }; + Platform.run(runnable); + } catch (ClassCastException e) { + throw new CoreException(new Status(IStatus.ERROR, CUIPlugin.PLUGIN_ID, 0, "", e)); //$NON-NLS-1$ + } + } + return fContributorInstance; + } + return null; + } + + + private boolean matches(IProject project) { + if (fStatus != null) { + return fStatus.booleanValue(); + } + + IConfigurationElement[] children= fConfigurationElement.getChildren(ExpressionTagNames.ENABLEMENT); + if (children.length == 1 && project != null) { + try { + ExpressionConverter parser= ExpressionConverter.getDefault(); + Expression expression= parser.perform(children[0]); + EvaluationContext evalContext= new EvaluationContext(null, project); + String[] natures= project.getDescription().getNatureIds(); + evalContext.addVariable("projectNatures", Arrays.asList(natures)); //$NON-NLS-1$ + + fLastResult= !(expression.evaluate(evalContext) != EvaluationResult.TRUE); + return fLastResult; + } catch (CoreException e) { + CUIPlugin.getDefault().log(e); + } + } + fStatus= Boolean.FALSE; + return false; + } + + public ICCompletionContributor getCCompletionContributor(IProject project) throws CoreException { + if (matches(project)) { + if (fContributorInstance == null) { + try { + fContributorInstance= (ICCompletionContributor)fConfigurationElement.createExecutableExtension(CLASS); + final ICCompletionContributor c = fContributorInstance; + // Run the initialiser the class + ISafeRunnable runnable = new ISafeRunnable() { + public void run() throws Exception { + // Initialize + c.initialize(); + } + public void handleException(Throwable exception) { + } + }; + Platform.run(runnable); + } catch (ClassCastException e) { + throw new CoreException(new Status(IStatus.ERROR, CUIPlugin.PLUGIN_ID, 0, "", e)); //$NON-NLS-1$ + } + } + return fContributorInstance; + } + return null; + } + +} diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/c/hover/CDocHover.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/c/hover/CDocHover.java index 6b802ba109f..8b82ca7ff61 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/c/hover/CDocHover.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/c/hover/CDocHover.java @@ -11,15 +11,20 @@ package org.eclipse.cdt.internal.ui.text.c.hover; +import org.eclipse.cdt.core.model.ITranslationUnit; import org.eclipse.cdt.internal.ui.CCompletionContributorManager; import org.eclipse.cdt.internal.ui.editor.CEditorMessages; import org.eclipse.cdt.internal.ui.text.CWordFinder; import org.eclipse.cdt.internal.ui.text.HTMLPrinter; +import org.eclipse.cdt.ui.CUIPlugin; import org.eclipse.cdt.ui.IFunctionSummary; +import org.eclipse.cdt.ui.text.ICCompletionInvocationContext; +import org.eclipse.core.resources.IProject; import org.eclipse.jface.text.IRegion; import org.eclipse.jface.text.ITextViewer; import org.eclipse.jface.text.Region; import org.eclipse.swt.graphics.Point; +import org.eclipse.ui.IEditorInput; public class CDocHover extends AbstractCEditorTextHover { @@ -35,7 +40,7 @@ public class CDocHover extends AbstractCEditorTextHover { public String getHoverInfo(ITextViewer viewer, IRegion region) { String expression = null; - if(getEditor() == null) + if (getEditor() == null) return null; try { expression = viewer.getDocument().get(region.getOffset(), region.getLength()); @@ -45,9 +50,25 @@ public class CDocHover extends AbstractCEditorTextHover { StringBuffer buffer = new StringBuffer(); - // We are just doing some C, call the Help to get info + // call the Help to get info - IFunctionSummary fs = CCompletionContributorManager.getDefault().getFunctionInfo(expression); + ICCompletionInvocationContext context = new ICCompletionInvocationContext() { + + public IProject getProject() { + ITranslationUnit unit = getTranslationUnit(); + if (unit != null) { + return unit.getCProject().getProject(); + } + return null; + } + + public ITranslationUnit getTranslationUnit() { + IEditorInput editorInput= getEditor().getEditorInput(); + return CUIPlugin.getDefault().getWorkingCopyManager().getWorkingCopy(editorInput); + } + }; + + IFunctionSummary fs = CCompletionContributorManager.getDefault().getFunctionInfo(context, expression); if (fs != null) { buffer.append(CEditorMessages.getString("DefaultCEditorTextHover.html.name")); //$NON-NLS-1$ buffer.append(HTMLPrinter.convertToHTMLContent(fs.getName())); diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/CCompletionProcessor.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/CCompletionProcessor.java index f2b789fcfa6..086363dcb4b 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/CCompletionProcessor.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/CCompletionProcessor.java @@ -13,6 +13,7 @@ import java.util.List; import org.eclipse.cdt.core.model.CoreModel; import org.eclipse.cdt.core.model.ICElement; +import org.eclipse.cdt.core.model.ITranslationUnit; import org.eclipse.cdt.core.model.IWorkingCopy; import org.eclipse.cdt.core.parser.ast.ASTAccessVisibility; import org.eclipse.cdt.core.parser.ast.IASTCompletionNode; @@ -31,13 +32,13 @@ import org.eclipse.cdt.internal.ui.CUIMessages; import org.eclipse.cdt.internal.ui.editor.CEditor; import org.eclipse.cdt.internal.ui.text.CParameterListValidator; import org.eclipse.cdt.internal.ui.text.template.TemplateEngine; -import org.eclipse.cdt.ui.CSearchResultLabelProvider; import org.eclipse.cdt.ui.CUIPlugin; -import org.eclipse.cdt.ui.FunctionPrototypeSummary; import org.eclipse.cdt.ui.IFunctionSummary; import org.eclipse.cdt.ui.IWorkingCopyManager; +import org.eclipse.cdt.ui.text.ICCompletionInvocationContext; import org.eclipse.cdt.ui.text.ICCompletionProposal; import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IProject; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.IDocument; @@ -108,7 +109,7 @@ public class CCompletionProcessor implements IContentAssistProcessor { private TemplateEngine[] fFunctionContextTemplateEngine; private TemplateEngine[] fStructureContextTemplateEngine; - private boolean fRestrictToMatchingCase; + //private boolean fRestrictToMatchingCase; private boolean fAllowAddIncludes; private BasicSearchResultCollector searchResultCollector = null; @@ -116,10 +117,11 @@ public class CCompletionProcessor implements IContentAssistProcessor { private CompletionEngine completionEngine = null; private SearchEngine searchEngine = null; - private CSearchResultLabelProvider labelProvider = null; + //private CSearchResultLabelProvider labelProvider = null; + IWorkingCopy fCurrentSourceUnit = null; + private int fCurrentOffset = 0; - private IWorkingCopy fCurrentSourceUnit = null; private IASTCompletionNode fCurrentCompletionNode = null; private int fNumberOfComputedResults= 0; private ITextViewer fTextViewer; @@ -128,7 +130,7 @@ public class CCompletionProcessor implements IContentAssistProcessor { fEditor = (CEditor) editor; // Needed for search - labelProvider = new CSearchResultLabelProvider(); + //labelProvider = new CSearchResultLabelProvider(); searchResultCollector = new BasicSearchResultCollector (); resultCollector = new ResultCollector(); completionEngine = new CompletionEngine(resultCollector); @@ -136,7 +138,7 @@ public class CCompletionProcessor implements IContentAssistProcessor { searchEngine.setWaitingPolicy( ICSearchConstants.FORCE_IMMEDIATE_SEARCH ); setupTemplateEngine(); - fRestrictToMatchingCase = false; + //fRestrictToMatchingCase = false; fAllowAddIncludes = true; fComparator = new CCompletionProposalComparator(); @@ -163,10 +165,9 @@ public class CCompletionProcessor implements IContentAssistProcessor { //Defer to the nature of the project IFile file = fEditor.getInputFile(); if (file != null && CoreModel.hasCCNature(file.getProject())) { - return true; - } else { - return false; + return true; } + return false; } } @@ -398,10 +399,7 @@ public class CCompletionProcessor implements IContentAssistProcessor { return order ( (ICCompletionProposal[]) completions.toArray(new ICCompletionProposal[0]) ); } - else{ - return null; - } - + return null; } private void addProposalsFromTemplates(ITextViewer viewer, IASTCompletionNode completionNode, List completions){ @@ -453,7 +451,17 @@ public class CCompletionProcessor implements IContentAssistProcessor { IFunctionSummary[] summary; - summary = CCompletionContributorManager.getDefault().getMatchingFunctions(prefix); + ICCompletionInvocationContext context = new ICCompletionInvocationContext() { + + public IProject getProject() { + return fCurrentSourceUnit.getCProject().getProject(); + } + + public ITranslationUnit getTranslationUnit() { + return fCurrentSourceUnit; + } + }; + summary = CCompletionContributorManager.getDefault().getMatchingFunctions(context, prefix); if(summary == null) { return; } @@ -485,19 +493,19 @@ public class CCompletionProcessor implements IContentAssistProcessor { } } - private FunctionPrototypeSummary getPrototype (BasicSearchMatch match) { - switch(match.getElementType()){ - case ICElement.C_FUNCTION: - case ICElement.C_FUNCTION_DECLARATION: - case ICElement.C_METHOD: - case ICElement.C_METHOD_DECLARATION: - { - return (new FunctionPrototypeSummary ( match.getReturnType() + " " + match.getName() )); //$NON-NLS-1$ - } - default: - return null; - } - } +// private FunctionPrototypeSummary getPrototype (BasicSearchMatch match) { +// switch(match.getElementType()){ +// case ICElement.C_FUNCTION: +// case ICElement.C_FUNCTION_DECLARATION: +// case ICElement.C_METHOD: +// case ICElement.C_METHOD_DECLARATION: +// { +// return (new FunctionPrototypeSummary ( match.getReturnType() + " " + match.getName() )); //$NON-NLS-1$ +// } +// default: +// return null; +// } +// } private IASTCompletionNode addProposalsFromModel(List completions){ @@ -517,7 +525,7 @@ public class CCompletionProcessor implements IContentAssistProcessor { // figure out the search scope IPreferenceStore store = CUIPlugin.getDefault().getPreferenceStore(); - boolean fileScope = store.getBoolean(ContentAssistPreference.CURRENT_FILE_SEARCH_SCOPE); + //boolean fileScope = store.getBoolean(ContentAssistPreference.CURRENT_FILE_SEARCH_SCOPE); boolean projectScope = store.getBoolean(ContentAssistPreference.PROJECT_SEARCH_SCOPE); ICSearchScope scope = null; @@ -530,7 +538,7 @@ public class CCompletionProcessor implements IContentAssistProcessor { List elementsFound = new LinkedList(); ICElement[] projectScopeElement = new ICElement[1]; - projectScopeElement[0] = (ICElement)fCurrentSourceUnit.getCProject(); + projectScopeElement[0] = fCurrentSourceUnit.getCProject(); scope = SearchEngine.createCSearchScope(projectScopeElement, true); // search for global variables, functions, classes, structs, unions, enums, macros, and namespaces diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/ICCompletionContributor.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/ICCompletionContributor.java index f66efd56da2..bbe34032b49 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/ICCompletionContributor.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/ICCompletionContributor.java @@ -10,6 +10,8 @@ *******************************************************************************/ package org.eclipse.cdt.ui; +import org.eclipse.cdt.ui.text.ICCompletionInvocationContext; + public interface ICCompletionContributor { @@ -21,11 +23,11 @@ public interface ICCompletionContributor { /** * get the matching function of a given name */ - IFunctionSummary getFunctionInfo(String name); + IFunctionSummary getFunctionInfo(ICCompletionInvocationContext context, String name); /** * Get array of matching functions starting with this prefix */ - IFunctionSummary[] getMatchingFunctions(String prefix); + IFunctionSummary[] getMatchingFunctions(ICCompletionInvocationContext context, String prefix); } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/text/ICCompletionInvocationContext.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/text/ICCompletionInvocationContext.java new file mode 100644 index 00000000000..5a208ff2bd6 --- /dev/null +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/text/ICCompletionInvocationContext.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2000, 2004 QNX Software Systems 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 + * + * Contributors: + * QNX Software Systems - Initial API and implementation + *******************************************************************************/ + +package org.eclipse.cdt.ui.text; + +import org.eclipse.cdt.core.model.ITranslationUnit; +import org.eclipse.core.resources.IProject; + +/** + * Invocation context for the ICCompletionContributor + */ +public interface ICCompletionInvocationContext { + + /** + * @return the project + */ + IProject getProject(); + + /** + * @return ITranslationUnit or null + */ + ITranslationUnit getTranslationUnit(); + +}