| /********************************************************************** |
| * Copyright (c) 2002,2003 Rational Software Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Common Public License v0.5 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/cpl-v05.html |
| * |
| * Contributors: |
| * IBM Rational Software - Initial API and implementation |
| ***********************************************************************/ |
| package org.eclipse.cdt.internal.ui.text.contentassist; |
| |
| import java.util.HashSet; |
| import java.util.Set; |
| |
| import org.eclipse.cdt.core.parser.IProblem; |
| import org.eclipse.cdt.core.parser.ast.ASTAccessVisibility; |
| import org.eclipse.cdt.internal.ui.CElementImageProvider; |
| import org.eclipse.cdt.internal.ui.util.ImageDescriptorRegistry; |
| import org.eclipse.cdt.ui.CUIPlugin; |
| import org.eclipse.cdt.ui.FunctionPrototypeSummary; |
| import org.eclipse.jface.resource.ImageDescriptor; |
| import org.eclipse.jface.text.ITextViewer; |
| import org.eclipse.jface.text.contentassist.ContextInformation; |
| import org.eclipse.jface.text.contentassist.ICompletionProposal; |
| import org.eclipse.swt.graphics.Image; |
| |
| /** |
| * @author hamer |
| * |
| * The Result Collector class receives information from the completion engine |
| * as a completion requestor. It might also receive information from others |
| * such as the results of a search operation to generate completion proposals. |
| * |
| */ |
| public class ResultCollector extends CompletionRequestorAdaptor { |
| private Set completions = new HashSet(); |
| private ImageDescriptorRegistry registry = CUIPlugin.getImageDescriptorRegistry(); |
| private IProblem fLastProblem; |
| private ITextViewer fTextViewer; |
| |
| public ResultCollector(){ |
| completions.clear(); |
| fTextViewer = null; |
| } |
| |
| /** |
| * @return the completion list |
| */ |
| public Set getCompletions() { |
| return completions; |
| } |
| public void reset(ITextViewer viewer) { |
| completions.clear(); |
| fTextViewer = viewer; |
| fLastProblem = null; |
| } |
| /* |
| * Create a proposal |
| */ |
| public ICompletionProposal createProposal(String replaceString, String displayString, String infoString, String arguments, Image image, int offset, int length, int relevance){ |
| CCompletionProposal proposal; |
| |
| proposal = new CCompletionProposal( |
| replaceString, // Replacement string |
| offset, |
| length, |
| image, |
| displayString, // Display string |
| relevance, |
| fTextViewer); |
| |
| if(arguments != null && arguments.length() > 0) { |
| proposal.setContextInformation(new ContextInformation(replaceString, arguments)); |
| } |
| |
| // The info string could be populated with documentation info. |
| // For now, it has the name and the parent's name if available. |
| if((infoString != null)&& (!displayString.equals(infoString))) |
| proposal.setAdditionalProposalInfo(infoString); |
| |
| return proposal; |
| } |
| |
| /* |
| * (non-Javadoc) |
| * @see org.eclipse.cdt.core.ICompletionRequestor#acceptField(java.lang.String, java.lang.String, org.eclipse.cdt.core.parser.ast.ASTAccessVisibility, int, int, int) |
| */ |
| public void acceptField(String name, String returnType, ASTAccessVisibility visibility, |
| int completionStart, int completionLength, int relevance) { |
| String replaceString = ""; |
| String displayString = ""; |
| Image image = null; |
| StringBuffer infoString = new StringBuffer(); |
| |
| // fill the replace, display and info strings |
| replaceString = name; |
| displayString = name; |
| if(returnType != null) |
| displayString+= " : " + returnType; |
| |
| // get the image |
| ImageDescriptor imageDescriptor = CElementImageProvider.getFieldImageDescriptor(visibility); |
| image = registry.get( imageDescriptor ); |
| |
| // create proposal and add it to completions list |
| ICompletionProposal proposal = createProposal(replaceString, displayString, infoString.toString(), |
| null, image, completionStart, completionLength, relevance); |
| completions.add(proposal); |
| } |
| /* (non-Javadoc) |
| * @see org.eclipse.cdt.core.ICompletionRequestor#acceptClass(java.lang.String, int, int, int) |
| */ |
| public void acceptClass( |
| String name, |
| int completionStart, |
| int completionLength, |
| int relevance) { |
| String replaceString = ""; |
| String displayString = ""; |
| Image image = null; |
| StringBuffer infoString = new StringBuffer(); |
| |
| // fill the replace, display and info strings |
| replaceString = name; |
| displayString = name; |
| |
| // get the image |
| ImageDescriptor imageDescriptor = CElementImageProvider.getClassImageDescriptor(); |
| image = registry.get( imageDescriptor ); |
| |
| // create proposal and add it to completions list |
| ICompletionProposal proposal = createProposal(replaceString, displayString, infoString.toString(), |
| null, image, completionStart, completionLength, relevance); |
| completions.add(proposal); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.cdt.core.ICompletionRequestor#acceptFunction(java.lang.String, java.lang.String, java.lang.String, int, int, int) |
| */ |
| public void acceptFunction( |
| String name, |
| String parameterString, |
| String returnType, |
| int completionStart, |
| int completionLength, |
| int relevance) { |
| String replaceString = ""; |
| String displayString = ""; |
| String arguments = ""; |
| |
| Image image = null; |
| StringBuffer infoString = new StringBuffer(); |
| |
| // fill the replace, display and info strings |
| replaceString = name; |
| displayString = name; |
| String functionPrototype = returnType + " " + name; |
| if(parameterString != null){ |
| if ((parameterString.indexOf("(") == -1) && (parameterString.indexOf(")") == -1)) |
| { |
| functionPrototype += "(" + parameterString + ")"; |
| } |
| else { |
| functionPrototype += parameterString; |
| } |
| } |
| |
| FunctionPrototypeSummary fproto = new FunctionPrototypeSummary(functionPrototype); |
| if(fproto != null) { |
| replaceString = fproto.getName() + "()"; |
| displayString = fproto.getPrototypeString(true); |
| infoString.append(displayString); |
| arguments = fproto.getArguments(); |
| } |
| |
| // get the image |
| ImageDescriptor imageDescriptor = CElementImageProvider.getFunctionImageDescriptor(); |
| image = registry.get( imageDescriptor ); |
| |
| // create proposal and add it to completions list |
| ICompletionProposal proposal = createProposal(replaceString, displayString, infoString.toString(), |
| arguments, image, completionStart, completionLength, relevance); |
| completions.add(proposal); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.cdt.core.ICompletionRequestor#acceptLocalVariable(java.lang.String, java.lang.String, int, int, int) |
| */ |
| public void acceptLocalVariable( |
| String name, |
| String returnType, |
| int completionStart, |
| int completionLength, |
| int relevance) { |
| |
| String replaceString = ""; |
| String displayString = ""; |
| Image image = null; |
| StringBuffer infoString = new StringBuffer(); |
| |
| // fill the replace, display and info strings |
| replaceString = name; |
| displayString = name; |
| if(returnType != null) |
| displayString+= " : " + returnType; |
| |
| // get the image |
| ImageDescriptor imageDescriptor = CElementImageProvider.getLocalVariableImageDescriptor(); |
| image = registry.get( imageDescriptor ); |
| |
| // create proposal and add it to completions list |
| ICompletionProposal proposal = createProposal(replaceString, displayString, infoString.toString(), null, image, completionStart, completionLength, relevance); |
| completions.add(proposal); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.cdt.core.ICompletionRequestor#acceptMacro(java.lang.String, int, int, int) |
| */ |
| public void acceptMacro( |
| String name, |
| int completionStart, |
| int completionLength, |
| int relevance) { |
| |
| String replaceString = ""; |
| String displayString = ""; |
| Image image = null; |
| StringBuffer infoString = new StringBuffer(); |
| |
| // fill the replace, display and info strings |
| replaceString = name; |
| displayString = name; |
| |
| // get the image |
| ImageDescriptor imageDescriptor = CElementImageProvider.getMacroImageDescriptor(); |
| image = registry.get( imageDescriptor ); |
| |
| // create proposal and add it to completions list |
| ICompletionProposal proposal = createProposal(replaceString, displayString, infoString.toString(), |
| null, image, completionStart, completionLength, relevance); |
| completions.add(proposal); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.cdt.core.ICompletionRequestor#acceptMethod(java.lang.String, java.lang.String, java.lang.String, org.eclipse.cdt.core.parser.ast.ASTAccessVisibility, int, int, int) |
| */ |
| public void acceptMethod( |
| String name, |
| String parameterString, |
| String returnType, |
| ASTAccessVisibility visibility, |
| int completionStart, |
| int completionLength, |
| int relevance) { |
| |
| String replaceString = ""; |
| String displayString = ""; |
| String arguments = ""; |
| Image image = null; |
| StringBuffer infoString = new StringBuffer(); |
| |
| // fill the replace, display and info strings |
| replaceString = name; |
| displayString = name; |
| String functionPrototype = returnType + " " + name; |
| if(parameterString != null){ |
| if ((parameterString.indexOf("(") == -1) && (parameterString.indexOf(")") == -1)) |
| { |
| functionPrototype += "(" + parameterString + ")"; |
| } |
| else { |
| functionPrototype += parameterString; |
| } |
| } |
| |
| FunctionPrototypeSummary fproto = new FunctionPrototypeSummary(functionPrototype); |
| if(fproto != null) { |
| replaceString = fproto.getName() + "()"; |
| displayString = fproto.getPrototypeString(true); |
| infoString.append(displayString); |
| arguments = fproto.getArguments(); |
| } |
| |
| // get the image |
| ImageDescriptor imageDescriptor = CElementImageProvider.getMethodImageDescriptor(visibility); |
| image = registry.get( imageDescriptor ); |
| |
| // create proposal and add it to completions list |
| ICompletionProposal proposal = createProposal(replaceString, displayString, infoString.toString(), |
| arguments, image, completionStart, completionLength, relevance); |
| completions.add(proposal); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.cdt.core.ICompletionRequestor#acceptNamespace(java.lang.String, int, int, int) |
| */ |
| public void acceptNamespace( |
| String name, |
| int completionStart, |
| int completionLength, |
| int relevance) { |
| String replaceString = ""; |
| String displayString = ""; |
| Image image = null; |
| StringBuffer infoString = new StringBuffer(); |
| |
| // fill the replace, display and info strings |
| replaceString = name; |
| displayString = name; |
| |
| // get the image |
| ImageDescriptor imageDescriptor = CElementImageProvider.getNamespaceImageDescriptor(); |
| image = registry.get( imageDescriptor ); |
| |
| // create proposal and add it to completions list |
| ICompletionProposal proposal = createProposal(replaceString, displayString, infoString.toString(), |
| null, image, completionStart, completionLength, relevance); |
| completions.add(proposal); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.cdt.core.ICompletionRequestor#acceptStruct(java.lang.String, int, int, int) |
| */ |
| public void acceptStruct( |
| String name, |
| int completionStart, |
| int completionLength, |
| int relevance) { |
| String replaceString = ""; |
| String displayString = ""; |
| Image image = null; |
| StringBuffer infoString = new StringBuffer(); |
| |
| // fill the replace, display and info strings |
| replaceString = name; |
| displayString = name; |
| |
| // get the image |
| ImageDescriptor imageDescriptor = CElementImageProvider.getStructImageDescriptor(); |
| image = registry.get( imageDescriptor ); |
| |
| // create proposal and add it to completions list |
| ICompletionProposal proposal = createProposal(replaceString, displayString, infoString.toString(), null, image, completionStart, completionLength, relevance); |
| completions.add(proposal); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.cdt.core.ICompletionRequestor#acceptUnion(java.lang.String, int, int, int) |
| */ |
| public void acceptUnion( |
| String name, |
| int completionStart, |
| int completionLength, |
| int relevance) { |
| String replaceString = ""; |
| String displayString = ""; |
| Image image = null; |
| StringBuffer infoString = new StringBuffer(); |
| |
| // fill the replace, display and info strings |
| replaceString = name; |
| displayString = name; |
| |
| // get the image |
| ImageDescriptor imageDescriptor = CElementImageProvider.getUnionImageDescriptor(); |
| image = registry.get( imageDescriptor ); |
| |
| // create proposal and add it to completions list |
| ICompletionProposal proposal = createProposal(replaceString, displayString, infoString.toString(), null, image, completionStart, completionLength, relevance); |
| completions.add(proposal); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.cdt.core.ICompletionRequestor#acceptVariable(java.lang.String, java.lang.String, int, int, int) |
| */ |
| public void acceptVariable( |
| String name, |
| String returnType, |
| int completionStart, |
| int completionLength, |
| int relevance) { |
| String replaceString = ""; |
| String displayString = ""; |
| Image image = null; |
| StringBuffer infoString = new StringBuffer(); |
| |
| // fill the replace, display and info strings |
| replaceString = name; |
| displayString = name; |
| if(returnType != null) |
| displayString+= " : " + returnType; |
| |
| // get the image |
| ImageDescriptor imageDescriptor = CElementImageProvider.getVariableImageDescriptor(); |
| image = registry.get( imageDescriptor ); |
| |
| // create proposal and add it to completions list |
| ICompletionProposal proposal = createProposal(replaceString, displayString, infoString.toString(), null, image, completionStart, completionLength, relevance); |
| completions.add(proposal); |
| } |
| /* (non-Javadoc) |
| * @see org.eclipse.cdt.core.ICompletionRequestor#acceptEnumeration(java.lang.String, int, int, int) |
| */ |
| public void acceptEnumeration( |
| String name, |
| int completionStart, |
| int completionLength, |
| int relevance) { |
| String replaceString = ""; |
| String displayString = ""; |
| Image image = null; |
| StringBuffer infoString = new StringBuffer(); |
| |
| // fill the replace, display and info strings |
| replaceString = name; |
| displayString = name; |
| |
| // get the image |
| ImageDescriptor imageDescriptor = CElementImageProvider.getEnumerationImageDescriptor(); |
| image = registry.get( imageDescriptor ); |
| |
| // create proposal and add it to completions list |
| ICompletionProposal proposal = createProposal(replaceString, displayString, infoString.toString(), |
| null, image, completionStart, completionLength, relevance); |
| completions.add(proposal); |
| } |
| |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.cdt.core.ICompletionRequestor#acceptEnumerator(java.lang.String, int, int, int) |
| */ |
| public void acceptEnumerator( |
| String name, |
| int completionStart, |
| int completionLength, |
| int relevance) { |
| String replaceString = ""; |
| String displayString = ""; |
| Image image = null; |
| StringBuffer infoString = new StringBuffer(); |
| |
| // fill the replace, display and info strings |
| replaceString = name; |
| displayString = name; |
| |
| // get the image |
| ImageDescriptor imageDescriptor = CElementImageProvider.getEnumeratorImageDescriptor(); |
| image = registry.get( imageDescriptor ); |
| |
| // create proposal and add it to completions list |
| ICompletionProposal proposal = createProposal(replaceString, displayString, infoString.toString(), |
| null, image, completionStart, completionLength, relevance); |
| completions.add(proposal); |
| } |
| |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.cdt.core.ICompletionRequestor#acceptKeyword(java.lang.String, int, int, int) |
| */ |
| public void acceptKeyword( |
| String name, |
| int completionStart, |
| int completionLength, |
| int relevance) { |
| String replaceString = ""; |
| String displayString = ""; |
| Image image = null; |
| StringBuffer infoString = new StringBuffer(); |
| |
| // fill the replace, display and info strings |
| replaceString = name; |
| displayString = name; |
| |
| // no image for keywords |
| // create proposal and add it to completions list |
| ICompletionProposal proposal = createProposal(replaceString, displayString, infoString.toString(), |
| null, image, completionStart, completionLength, relevance); |
| completions.add(proposal); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.cdt.core.ICompletionRequestor#acceptError(org.eclipse.cdt.core.parser.IProblem) |
| */ |
| public void acceptError(IProblem error) { |
| fLastProblem = error; |
| } |
| |
| public String getErrorMessage() { |
| if (fLastProblem != null) |
| return fLastProblem.getMessage(); |
| return ""; //$NON-NLS-1$ |
| } |
| |
| } |