From 4b511c67ae1f44762c21fdbe4b37a182927ddb4b Mon Sep 17 00:00:00 2001 From: Doug Schaefer Date: Mon, 25 Apr 2005 18:35:52 +0000 Subject: [PATCH] Hooked up the C Help system to the new content assist. --- core/org.eclipse.cdt.ui/plugin.xml | 4 + .../HelpCompletionContributor.java | 104 ++++++++++++++++++ 2 files changed, 108 insertions(+) create mode 100644 core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/HelpCompletionContributor.java diff --git a/core/org.eclipse.cdt.ui/plugin.xml b/core/org.eclipse.cdt.ui/plugin.xml index 54060e4d2f3..c8570c06466 100644 --- a/core/org.eclipse.cdt.ui/plugin.xml +++ b/core/org.eclipse.cdt.ui/plugin.xml @@ -1365,6 +1365,10 @@ class="org.eclipse.cdt.internal.ui.text.contentassist.SearchCompletionContributor" id="Search" priority="3"/> + diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/HelpCompletionContributor.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/HelpCompletionContributor.java new file mode 100644 index 00000000000..dffb43101fa --- /dev/null +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/HelpCompletionContributor.java @@ -0,0 +1,104 @@ +/********************************************************************** + * 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.dom.ast.IASTFieldReference; +import org.eclipse.cdt.core.dom.ast.IASTName; +import org.eclipse.cdt.core.model.ITranslationUnit; +import org.eclipse.cdt.core.model.IWorkingCopy; +import org.eclipse.cdt.internal.ui.CHelpProviderManager; +import org.eclipse.cdt.internal.ui.CPluginImages; +import org.eclipse.cdt.internal.ui.viewsupport.CElementImageProvider; +import org.eclipse.cdt.ui.CUIPlugin; +import org.eclipse.cdt.ui.IFunctionSummary; +import org.eclipse.cdt.ui.text.ICHelpInvocationContext; +import org.eclipse.cdt.ui.text.contentassist.ICompletionContributor; +import org.eclipse.core.resources.IProject; +import org.eclipse.jface.text.ITextViewer; +import org.eclipse.jface.text.contentassist.ContextInformation; +import org.eclipse.swt.graphics.Image; + +public class HelpCompletionContributor implements ICompletionContributor { + + public void contributeCompletionProposals(ITextViewer viewer, int offset, + IWorkingCopy workingCopy, ASTCompletionNode completionNode, + List proposals) + { + final IWorkingCopy fWorkingCopy = workingCopy; + if (completionNode != null) { + // Find matching functions + ICHelpInvocationContext context = new ICHelpInvocationContext() { + + public IProject getProject() { + return fWorkingCopy.getCProject().getProject(); + } + + public ITranslationUnit getTranslationUnit() { + return fWorkingCopy.getTranslationUnit(); + } + }; + + IASTName[] names = completionNode.getNames(); + for (int i = 0; i < names.length; ++i) { + IASTName name = names[i]; + + if (name.getTranslationUnit() == null) + // Not connected + continue; + + // ignore if this is a member access + if (name.getParent() instanceof IASTFieldReference) + continue; + + String prefix = new String(name.toCharArray()); + + IFunctionSummary[] summaries = CHelpProviderManager.getDefault().getMatchingFunctions(context, prefix); + if (summaries == null ) + continue; + + int repOffset = offset - prefix.length(); + int repLength = prefix.length(); + Image image = CUIPlugin.getImageDescriptorRegistry().get(CElementImageProvider.getFunctionImageDescriptor()); + + for (int j = 0; j < summaries.length; j++) { + IFunctionSummary summary = summaries[j]; + String fname = summary.getName() + "()"; //$NON-NLS-1$ + String fdesc = summary.getDescription(); + IFunctionSummary.IFunctionPrototypeSummary fproto = summary.getPrototype(); + String fargs = fproto.getArguments(); + + CCompletionProposal proposal; + proposal = new CCompletionProposal(fname, + repOffset, + repLength, + image, + fproto.getPrototypeString(true), + 2, + viewer); + + if (fdesc != null) { + proposal.setAdditionalProposalInfo(fdesc); + } + + if (fargs != null && fargs.length() > 0) { + proposal.setContextInformation(new ContextInformation(fname, fargs)); + // set the cursor before the closing bracket + proposal.setCursorPosition(fname.length() - 1); + } + + proposals.add(proposal); + } + + } + } + } + +}