1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

New Content Assist framework

This commit is contained in:
Hoda Amer 2003-11-27 19:25:49 +00:00
parent e2724066ac
commit 32fc5c80ab
15 changed files with 1049 additions and 223 deletions

View file

@ -1,3 +1,7 @@
2003-11-27 Hoda Amer
Content Assist work : Added an ICompletionRequestor interface
and a CompletionRequestorAdaptor classe.
2003-11-20 Alain Magloire
The profiler need to get the line number of the offset within

View file

@ -24,11 +24,15 @@ public interface IASTNode {
public static final LookupKind ALL = new LookupKind( 0 );
public static final LookupKind STRUCTURES = new LookupKind( 1 );
public static final LookupKind FUNCTIONS = new LookupKind( 2 );
public static final LookupKind LOCAL_VARIABLES = new LookupKind( 3 );
public static final LookupKind METHODS = new LookupKind( 4 );
public static final LookupKind FIELDS = new LookupKind( 5 );
public static final LookupKind NAMESPACES = new LookupKind( 6 );
public static final LookupKind STRUCS = new LookupKind( 2 );
public static final LookupKind UNIONS = new LookupKind( 3 );
public static final LookupKind CLASSES = new LookupKind( 4 );
public static final LookupKind FUNCTIONS = new LookupKind( 5 );
public static final LookupKind VARIABLES = new LookupKind( 6 );
public static final LookupKind LOCAL_VARIABLES = new LookupKind( 7 );
public static final LookupKind METHODS = new LookupKind( 8 );
public static final LookupKind FIELDS = new LookupKind( 9 );
public static final LookupKind NAMESPACES = new LookupKind( 10 );
/**
* @param enumValue

View file

@ -0,0 +1,34 @@
/**********************************************************************
* 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.core;
import org.eclipse.cdt.core.parser.ast.ASTAccessVisibility;
/**
* @author hamer
*
* To change the template for this generated type comment go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
public interface ICompletionRequestor {
void acceptField(String name, String returnType, ASTAccessVisibility visibility, int completionStart, int completionLength, int relevance);
void acceptVariable(String name, String returnType, int completionStart, int completionLength, int relevance);
void acceptLocalVariable(String name, String returnType, int completionStart, int completionLength, int relevance);
void acceptMethod(String name, String parameterString, String returnType, ASTAccessVisibility visibility, int completionStart, int completionLength, int relevance);
void acceptFunction(String name, String parameterString, String returnType, int completionStart, int completionLength, int relevance);
void acceptClass(String name, int completionStart, int completionLength, int relevance);
void acceptStruct(String name, int completionStart, int completionLength, int relevance);
void acceptUnion(String name, int completionStart, int completionLength, int relevance);
void acceptNamespace(String name, int completionStart, int completionLength, int relevance);
void acceptMacro(String name, int completionStart, int completionLength, int relevance);
void acceptEnumeration(String name, int completionStart, int completionLength, int relevance);
void acceptEnumerator(String name, int completionStart, int completionLength, int relevance);
}

View file

@ -1,18 +1,25 @@
/*
* Created on Nov 19, 2003
/**********************************************************************
* 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
*
* To change the template for this generated file go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.internal.core.contentassist;
import java.io.CharArrayReader;
import java.io.Reader;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.ICompletionRequestor;
import org.eclipse.cdt.core.model.CoreModel;
import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.core.parser.IParser;
import org.eclipse.cdt.core.parser.IScanner;
import org.eclipse.cdt.core.parser.IScannerInfo;
@ -24,7 +31,11 @@ import org.eclipse.cdt.core.parser.ParserMode;
import org.eclipse.cdt.core.parser.ParserUtil;
import org.eclipse.cdt.core.parser.ScannerInfo;
import org.eclipse.cdt.core.parser.ast.IASTCompletionNode;
import org.eclipse.cdt.core.parser.ast.IASTField;
import org.eclipse.cdt.core.parser.ast.IASTNode;
import org.eclipse.cdt.core.parser.ast.IASTNode.LookupResult;
import org.eclipse.cdt.internal.core.model.IWorkingCopy;
import org.eclipse.cdt.internal.core.parser.util.ASTUtil;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IPath;
@ -38,109 +49,197 @@ import org.eclipse.core.runtime.IPath;
*
*/
public class CompletionEngine {
protected IASTCompletionNode parse(IWorkingCopy sourceUnit, int completionOffset){
ContentAssistElementRequestor requestor = new ContentAssistElementRequestor();
// Get resource info
IResource currentResource = sourceUnit.getResource();
IPath realPath = currentResource.getLocation();
IProject project = currentResource.getProject();
Reader reader = new CharArrayReader( sourceUnit.getContents() );
//Get the scanner info
IScannerInfo scanInfo = new ScannerInfo();
IScannerInfoProvider provider = CCorePlugin.getDefault().getScannerInfoProvider(project);
if (provider != null){
IScannerInfo buildScanInfo = provider.getScannerInformation(project);
if( buildScanInfo != null )
scanInfo = new ScannerInfo(buildScanInfo.getDefinedSymbols(), buildScanInfo.getIncludePaths());
}
//C or CPP?
ParserLanguage language = CoreModel.getDefault().hasCCNature(project) ? ParserLanguage.CPP : ParserLanguage.C;
IParser parser = null;
try
{
IScanner scanner = ParserFactory.createScanner( reader, realPath.toOSString(), scanInfo, ParserMode.COMPLETE_PARSE, language, requestor, ParserUtil.getParserLogService() );
parser = ParserFactory.createParser( scanner, requestor, ParserMode.COMPLETE_PARSE, language, ParserUtil.getParserLogService() );
}
catch( ParserFactoryException pfe )
{
}
if(parser != null){
IASTCompletionNode result = parser.parse(completionOffset);
return result;
} else {
return null;
}
}
public List complete(IWorkingCopy sourceUnit, int completionOffset) {
// 1- Parse the translation unit
IASTCompletionNode completionNode = parse(sourceUnit, completionOffset);
if (completionNode == null)
return null;
List completions = new ArrayList();
// 2- Check the return value
if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.DOT_MEMBER){
// CompletionOnDotMember
ICompletionRequestor requestor;
int completionStart = 0;
int completionLength = 0;
public static final int LOCAL_VARIABLE_TYPE_RELEVANCE = 12;
public static final int FIELD_TYPE_RELEVANCE = 11;
public static final int VARIABLE_TYPE_RELEVANCE = 10;
public static final int METHOD_TYPE_RELEVANCE = 9;
public static final int FUNCTION_TYPE_RELEVANCE = 8;
public static final int CLASS_TYPE_RELEVANCE = 7;
public static final int STRUCT_TYPE_RELEVANCE = 6;
public static final int UNION_TYPE_RELEVANCE = 5;
public static final int NAMESPACE_TYPE_RELEVANCE = 4;
public static final int MACRO_TYPE_RELEVANCE = 3;
public static final int ENUMERATION_TYPE_RELEVANCE = 2;
public static final int ENUMERATOR_TYPE_RELEVANCE = 1;
public static final int DEFAULT_TYPE_RELEVANCE = 0;
public CompletionEngine(ICompletionRequestor completionRequestor){
completions.clear();
requestor = completionRequestor;
}
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.ARROW_MEMBER){
// CompletionOnArrowMember
}
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.QUALIFIEDNAME_MEMBER){
// CompletionOnQualifiedNameMember
}
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.FIELD_TYPE){
// CompletionOnFieldType
}
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.VARIABLE_TYPE){
// CompletionOnVariableType
}
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.ARGUMENT_TYPE){
// CompletionOnArgumentType
}
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.METHOD_RETURN_TYPE){
// CompletionOnMethodReturnType
}
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.FUNCTIOND_RETURN_TYPE){
// CompletionOnFunctionReturnType
}
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.SINGLE_NAME_REFERENCE){
// CompletionOnSingleNameReference
}
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.QUALIFIED_NAME_REFERENCE){
// CompletionOnQualifiedNameReference
}
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.STRUCTURE_REFERENCE){
// CompletionOnStructureReference
}
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.CLASS_REFERENCE){
// CompletionOnClassReference
}
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.EXCEPTION_REFERENCE){
// CompletionOnExceptionReference
}
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.MACRO_REFERENCE){
// CompletionOnMacroReference
}
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.MESSAGE_SEND){
// CompletionOnMessageSend
}
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.QUALIFIED_ALLOCATION_EXPRESSION){
// CompletionOnQualifiedAllocationExpression
}
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.KEYWORD){
// CompletionOnKeyword
public int computeTypeRelevance(int type){
switch (type){
case ICElement.C_FIELD:
return FIELD_TYPE_RELEVANCE;
case ICElement.C_VARIABLE:
case ICElement.C_VARIABLE_DECLARATION:
return VARIABLE_TYPE_RELEVANCE;
case ICElement.C_METHOD:
case ICElement.C_METHOD_DECLARATION:
return METHOD_TYPE_RELEVANCE;
case ICElement.C_FUNCTION:
case ICElement.C_FUNCTION_DECLARATION:
return FUNCTION_TYPE_RELEVANCE;
case ICElement.C_CLASS:
return CLASS_TYPE_RELEVANCE;
case ICElement.C_STRUCT:
return STRUCT_TYPE_RELEVANCE;
case ICElement.C_UNION:
return UNION_TYPE_RELEVANCE;
case ICElement.C_NAMESPACE:
return NAMESPACE_TYPE_RELEVANCE;
case ICElement.C_MACRO:
return MACRO_TYPE_RELEVANCE;
case ICElement.C_ENUMERATION:
return ENUMERATION_TYPE_RELEVANCE;
case ICElement.C_ENUMERATOR:
return ENUMERATOR_TYPE_RELEVANCE;
default :
return DEFAULT_TYPE_RELEVANCE;
}
}
return completions;
}
private IASTCompletionNode parse(IWorkingCopy sourceUnit, int completionOffset){
ContentAssistElementRequestor requestor = new ContentAssistElementRequestor();
// Get resource info
IResource currentResource = sourceUnit.getResource();
IPath realPath = currentResource.getLocation();
IProject project = currentResource.getProject();
Reader reader = new CharArrayReader( sourceUnit.getContents() );
//Get the scanner info
IScannerInfo scanInfo = new ScannerInfo();
IScannerInfoProvider provider = CCorePlugin.getDefault().getScannerInfoProvider(project);
if (provider != null){
IScannerInfo buildScanInfo = provider.getScannerInformation(project);
if( buildScanInfo != null )
scanInfo = new ScannerInfo(buildScanInfo.getDefinedSymbols(), buildScanInfo.getIncludePaths());
}
//C or CPP?
ParserLanguage language = CoreModel.getDefault().hasCCNature(project) ? ParserLanguage.CPP : ParserLanguage.C;
IParser parser = null;
try
{
IScanner scanner = ParserFactory.createScanner( reader, realPath.toOSString(), scanInfo, ParserMode.COMPLETE_PARSE, language, requestor, ParserUtil.getParserLogService() );
parser = ParserFactory.createParser( scanner, requestor, ParserMode.COMPLETE_PARSE, language, ParserUtil.getParserLogService() );
}
catch( ParserFactoryException pfe )
{
}
if(parser != null){
IASTCompletionNode result = parser.parse(completionOffset);
return result;
} else {
return null;
}
}
private void addToCompletions (LookupResult result){
Iterator nodes = result.getNodes();
while (nodes.hasNext()){
IASTNode node = (IASTNode) nodes.next();
if(node instanceof IASTField){
int relevance = computeTypeRelevance(ICElement.C_FIELD);
IASTField field = (IASTField)node;
requestor.acceptField(field.getName(),
ASTUtil.getType(field.getAbstractDeclaration()),
field.getVisiblity(), completionStart, completionLength, relevance);
}
}
return ;
}
private void completionOnDotMember(IASTCompletionNode completionNode){
// Completing after a dot
// 1. Get the search scope node
IASTNode searchNode = completionNode.getCompletionContext();
// 2. lookup fields & add to completion proposals
LookupResult result = searchNode.lookup (completionNode.getCompletionPrefix(), IASTNode.LookupKind.FIELDS);
addToCompletions (result);
// 3. looup methods & add to completion proposals
result = searchNode.lookup (completionNode.getCompletionPrefix(), IASTNode.LookupKind.METHODS);
addToCompletions (result);
// 4. lookup nested structures & add to completion proposals
result = searchNode.lookup (completionNode.getCompletionPrefix(), IASTNode.LookupKind.METHODS);
addToCompletions (result);
}
public void complete(IWorkingCopy sourceUnit, int completionOffset, List completionList) {
// 1- Parse the translation unit
IASTCompletionNode completionNode = parse(sourceUnit, completionOffset);
if (completionNode == null)
return;
// set the completionStart and the completionLength
completionStart = completionOffset;
completionLength = completionNode.getCompletionPrefix().length();
// 2- Check the return value
if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.DOT_MEMBER){
completionOnDotMember(completionNode);
}
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.ARROW_MEMBER){
// CompletionOnArrowMember
}
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.QUALIFIEDNAME_MEMBER){
// CompletionOnQualifiedNameMember
}
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.FIELD_TYPE){
// CompletionOnFieldType
}
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.VARIABLE_TYPE){
// CompletionOnVariableType
}
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.ARGUMENT_TYPE){
// CompletionOnArgumentType
}
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.METHOD_RETURN_TYPE){
// CompletionOnMethodReturnType
}
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.FUNCTIOND_RETURN_TYPE){
// CompletionOnFunctionReturnType
}
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.SINGLE_NAME_REFERENCE){
// CompletionOnSingleNameReference
}
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.QUALIFIED_NAME_REFERENCE){
// CompletionOnQualifiedNameReference
}
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.STRUCTURE_REFERENCE){
// CompletionOnStructureReference
}
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.CLASS_REFERENCE){
// CompletionOnClassReference
}
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.EXCEPTION_REFERENCE){
// CompletionOnExceptionReference
}
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.MACRO_REFERENCE){
// CompletionOnMacroReference
}
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.MESSAGE_SEND){
// CompletionOnMessageSend
}
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.QUALIFIED_ALLOCATION_EXPRESSION){
// CompletionOnQualifiedAllocationExpression
}
else if(completionNode.getCompletionKind() == IASTCompletionNode.CompletionKind.KEYWORD){
// CompletionOnKeyword
}
completionList.addAll(completions);
return;
}
}

View file

@ -0,0 +1,128 @@
/**********************************************************************
* 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.core.contentassist;
import org.eclipse.cdt.core.ICompletionRequestor;
import org.eclipse.cdt.core.parser.ast.ASTAccessVisibility;
/**
* @author hamer
*
* To change the template for this generated type comment go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
public class CompletionRequestorAdaptor implements ICompletionRequestor {
/* (non-Javadoc)
* @see org.eclipse.cdt.core.ICompletionRequestor#acceptField(java.lang.String, java.lang.String)
*/
public void acceptField(String name, String returnType, ASTAccessVisibility visibility, int completionStart, int completionLength, int relevance) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.ICompletionRequestor#acceptClass(java.lang.String)
*/
public void acceptClass(String name, int completionStart, int completionLength, int relevance) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.ICompletionRequestor#acceptEnumeration(java.lang.String)
*/
public void acceptEnumeration(String name, int completionStart, int completionLength, int relevance) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.ICompletionRequestor#acceptFunction(java.lang.String, java.lang.String, java.lang.String)
*/
public void acceptFunction(
String name,
String parameterString,
String returnType, int completionStart, int completionLength, int relevance) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.ICompletionRequestor#acceptMacro(java.lang.String)
*/
public void acceptMacro(String name, int completionStart, int completionLength, int relevance) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.ICompletionRequestor#acceptMethod(java.lang.String, java.lang.String, java.lang.String)
*/
public void acceptMethod(
String name,
String parameterString,
String returnType, ASTAccessVisibility visibility, int completionStart, int completionLength, int relevance) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.ICompletionRequestor#acceptStruct(java.lang.String)
*/
public void acceptStruct(String name, int completionStart, int completionLength, int relevance) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.ICompletionRequestor#acceptUnion(java.lang.String)
*/
public void acceptUnion(String name, int completionStart, int completionLength, int relevance) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.ICompletionRequestor#acceptVariable(java.lang.String, java.lang.String)
*/
public void acceptVariable(String name, String returnType, int completionStart, int completionLength, int relevance) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.ICompletionRequestor#acceptLocalVariable(java.lang.String, java.lang.String)
*/
public void acceptLocalVariable(String name, String returnType, int completionStart, int completionLength, int relevance) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.ICompletionRequestor#acceptNamespace(java.lang.String)
*/
public void acceptNamespace(String name, int completionStart, int completionLength, int relevance) {
// TODO Auto-generated method stub
}
/* (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) {
// TODO Auto-generated method stub
}
}

View file

@ -4,6 +4,19 @@
<comment></comment>
<projects>
<project>org.eclipse.cdt.core</project>
<project>org.eclipse.compare</project>
<project>org.eclipse.core.boot</project>
<project>org.eclipse.core.resources</project>
<project>org.eclipse.core.runtime</project>
<project>org.eclipse.debug.core</project>
<project>org.eclipse.debug.ui</project>
<project>org.eclipse.jface.text</project>
<project>org.eclipse.search</project>
<project>org.eclipse.ui</project>
<project>org.eclipse.ui.editors</project>
<project>org.eclipse.ui.ide</project>
<project>org.eclipse.ui.views</project>
<project>org.eclipse.ui.workbench.texteditor</project>
</projects>
<buildSpec>
<buildCommand>

View file

@ -1,3 +1,8 @@
2003-11-27 Hoda Amer
Content Assist work : Added a ResultCollector class
and moved the ICCompletionProposal from an internal package
to an external one.
2003-11-14 David Inglis
Fixed bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=46685

View file

@ -285,74 +285,63 @@ public class CElementImageProvider {
case ICElement.C_STRUCT:
case ICElement.C_TEMPLATE_STRUCT:
return CPluginImages.DESC_OBJS_STRUCT;
return getStructImageDescriptor();
case ICElement.C_CLASS:
case ICElement.C_TEMPLATE_CLASS:
return CPluginImages.DESC_OBJS_CLASS;
return getClassImageDescriptor();
case ICElement.C_UNION:
case ICElement.C_TEMPLATE_UNION:
return CPluginImages.DESC_OBJS_UNION;
return getUnionImageDescriptor();
case ICElement.C_TYPEDEF:
return CPluginImages.DESC_OBJS_TYPEDEF;
return getTypedefImageDescriptor();
case ICElement.C_ENUMERATION:
return CPluginImages.DESC_OBJS_ENUMERATION;
return getEnumerationImageDescriptor();
case ICElement.C_ENUMERATOR:
return CPluginImages.DESC_OBJS_ENUMERATOR;
return getEnumeratorImageDescriptor();
case ICElement.C_FIELD:
{
IField field = (IField)celement;
ASTAccessVisibility visibility = field.getVisibility();
if (visibility == ASTAccessVisibility.PUBLIC)
return CPluginImages.DESC_OBJS_PUBLIC_FIELD;
if( visibility == ASTAccessVisibility.PROTECTED)
return CPluginImages.DESC_OBJS_PROTECTED_FIELD;
if( visibility == ASTAccessVisibility.PRIVATE)
return CPluginImages.DESC_OBJS_PRIVATE_FIELD;
IField field = (IField)celement;
ASTAccessVisibility visibility = field.getVisibility();
return getFieldImageDescriptor(visibility);
}
case ICElement.C_VARIABLE:
case ICElement.C_TEMPLATE_VARIABLE:
return CPluginImages.DESC_OBJS_FIELD;
case ICElement.C_METHOD:
case ICElement.C_METHOD_DECLARATION:
case ICElement.C_TEMPLATE_METHOD:
{
IMethodDeclaration md= (IMethodDeclaration)celement;
ASTAccessVisibility visibility =md.getVisibility();
if( visibility == ASTAccessVisibility.PUBLIC)
return CPluginImages.DESC_OBJS_PUBLIC_METHOD;
if( visibility == ASTAccessVisibility.PROTECTED)
return CPluginImages.DESC_OBJS_PROTECTED_METHOD;
if( visibility == ASTAccessVisibility.PRIVATE)
return CPluginImages.DESC_OBJS_PRIVATE_METHOD;
}
return getMethodImageDescriptor(visibility);
}
case ICElement.C_VARIABLE:
case ICElement.C_TEMPLATE_VARIABLE:
return getVariableImageDescriptor();
case ICElement.C_FUNCTION:
return CPluginImages.DESC_OBJS_FUNCTION;
return getFunctionImageDescriptor();
case ICElement.C_VARIABLE_DECLARATION:
return CPluginImages.DESC_OBJS_VAR_DECLARARION;
return getVariableDeclarationImageDescriptor();
case ICElement.C_FUNCTION_DECLARATION:
case ICElement.C_TEMPLATE_FUNCTION:
return CPluginImages.DESC_OBJS_DECLARARION;
return getFunctionDeclarationImageDescriptor();
case ICElement.C_INCLUDE:
return CPluginImages.DESC_OBJS_INCLUDE;
return getIncludeImageDescriptor();
case ICElement.C_MACRO:
return CPluginImages.DESC_OBJS_MACRO;
return getMacroImageDescriptor();
case ICElement.C_NAMESPACE:
return CPluginImages.DESC_OBJS_CONTAINER;
return getNamespaceImageDescriptor();
}
return null;
@ -403,4 +392,75 @@ public class CElementImageProvider {
public void dispose() {
}
public static ImageDescriptor getStructImageDescriptor(){
return CPluginImages.DESC_OBJS_STRUCT;
}
public static ImageDescriptor getClassImageDescriptor(){
return CPluginImages.DESC_OBJS_CLASS;
}
public static ImageDescriptor getUnionImageDescriptor(){
return CPluginImages.DESC_OBJS_UNION;
}
public static ImageDescriptor getTypedefImageDescriptor(){
return CPluginImages.DESC_OBJS_TYPEDEF;
}
public static ImageDescriptor getEnumerationImageDescriptor(){
return CPluginImages.DESC_OBJS_ENUMERATION;
}
public static ImageDescriptor getEnumeratorImageDescriptor(){
return CPluginImages.DESC_OBJS_ENUMERATOR;
}
public static ImageDescriptor getFieldImageDescriptor(ASTAccessVisibility visibility) {
if (visibility == ASTAccessVisibility.PUBLIC)
return CPluginImages.DESC_OBJS_PUBLIC_FIELD;
if( visibility == ASTAccessVisibility.PROTECTED)
return CPluginImages.DESC_OBJS_PROTECTED_FIELD;
return CPluginImages.DESC_OBJS_PRIVATE_FIELD;
}
public static ImageDescriptor getMethodImageDescriptor(ASTAccessVisibility visibility) {
if( visibility == ASTAccessVisibility.PUBLIC)
return CPluginImages.DESC_OBJS_PUBLIC_METHOD;
if( visibility == ASTAccessVisibility.PROTECTED)
return CPluginImages.DESC_OBJS_PROTECTED_METHOD;
return CPluginImages.DESC_OBJS_PRIVATE_METHOD;
}
public static ImageDescriptor getVariableImageDescriptor(){
return CPluginImages.DESC_OBJS_FIELD;
}
public static ImageDescriptor getFunctionImageDescriptor(){
return CPluginImages.DESC_OBJS_FUNCTION;
}
public static ImageDescriptor getVariableDeclarationImageDescriptor(){
return CPluginImages.DESC_OBJS_VAR_DECLARARION;
}
public static ImageDescriptor getFunctionDeclarationImageDescriptor(){
return CPluginImages.DESC_OBJS_DECLARARION;
}
public static ImageDescriptor getIncludeImageDescriptor(){
return CPluginImages.DESC_OBJS_INCLUDE;
}
public static ImageDescriptor getMacroImageDescriptor(){
return CPluginImages.DESC_OBJS_MACRO;
}
public static ImageDescriptor getNamespaceImageDescriptor(){
return CPluginImages.DESC_OBJS_CONTAINER;
}
}

View file

@ -26,6 +26,7 @@ import org.eclipse.cdt.core.search.BasicSearchResultCollector;
import org.eclipse.cdt.core.search.ICSearchConstants;
import org.eclipse.cdt.core.search.ICSearchScope;
import org.eclipse.cdt.core.search.SearchEngine;
import org.eclipse.cdt.internal.core.contentassist.CompletionEngine;
import org.eclipse.cdt.internal.core.model.CElement;
import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
import org.eclipse.cdt.internal.core.search.matching.OrPattern;
@ -41,6 +42,7 @@ 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.*;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
@ -73,7 +75,10 @@ public class CCompletionProcessor implements IContentAssistProcessor {
private boolean fRestrictToMatchingCase;
private boolean fAllowAddIncludes;
BasicSearchResultCollector resultCollector = null;
BasicSearchResultCollector searchResultCollector = null;
ResultCollector resultCollector = null;
CompletionEngine completionEngine = null;
SearchEngine searchEngine = null;
CSearchResultLabelProvider labelProvider = null;
@ -82,7 +87,9 @@ public class CCompletionProcessor implements IContentAssistProcessor {
// Needed for search
labelProvider = new CSearchResultLabelProvider();
resultCollector = new BasicSearchResultCollector ();
searchResultCollector = new BasicSearchResultCollector ();
resultCollector = new ResultCollector();
completionEngine = new CompletionEngine(resultCollector);
searchEngine = new SearchEngine();
//Determine if this is a C or a C++ file for the context completion + //This is _totally_ ugly and likely belongs in the main editor class.
@ -457,36 +464,7 @@ public class CCompletionProcessor implements IContentAssistProcessor {
}
}
private int calculateRelevance (BasicSearchMatch element){
int type = element.getElementType();
switch (type){
case ICElement.C_FIELD:
return 9;
case ICElement.C_VARIABLE:
case ICElement.C_VARIABLE_DECLARATION:
return 8;
case ICElement.C_METHOD:
case ICElement.C_METHOD_DECLARATION:
return 7;
case ICElement.C_FUNCTION:
case ICElement.C_FUNCTION_DECLARATION:
return 6;
case ICElement.C_CLASS:
return 5;
case ICElement.C_STRUCT:
return 4;
case ICElement.C_UNION:
return 3;
case ICElement.C_MACRO:
return 2;
case ICElement.C_ENUMERATION:
return 1;
default :
return 0;
}
}
private void addProposalsFromModel (IRegion region, String frag, ICElement currentScope, ArrayList completions) {
List elementsFound = new LinkedList();
String prefix = frag + "*";
@ -529,8 +507,8 @@ public class CCompletionProcessor implements IContentAssistProcessor {
orPattern.addPattern(SearchEngine.createSearchPattern( prefix, ICSearchConstants.TYPE, ICSearchConstants.DECLARATIONS, false ));
orPattern.addPattern(SearchEngine.createSearchPattern( prefix, ICSearchConstants.ENUM, ICSearchConstants.DECLARATIONS, false ));
orPattern.addPattern(SearchEngine.createSearchPattern( prefix, ICSearchConstants.MACRO, ICSearchConstants.DECLARATIONS, false ));
searchEngine.search(CUIPlugin.getWorkspace(), orPattern, scope, resultCollector, true);
elementsFound.addAll(resultCollector.getSearchResults());
searchEngine.search(CUIPlugin.getWorkspace(), orPattern, scope, searchResultCollector, true);
elementsFound.addAll(searchResultCollector.getSearchResults());
if((currentScope instanceof IMethod) || (currentScope instanceof IMethodDeclaration) ){
// add the methods and fields of the parent class
@ -571,57 +549,131 @@ public class CCompletionProcessor implements IContentAssistProcessor {
}
int completionStart = region.getOffset();
int completionLength = region.getLength();
Iterator i = elementsFound.iterator();
while (i.hasNext()){
CCompletionProposal proposal;
String replaceString = "";
String displayString = "";
Image image = null;
StringBuffer infoString = new StringBuffer();
ASTAccessVisibility visibility;
BasicSearchMatch match = (BasicSearchMatch)i.next();
int type = match.getElementType();
switch (type){
case ICElement.C_FIELD:
switch (match.getVisibility()){
case ICElement.CPP_PUBLIC:
visibility = ASTAccessVisibility.PUBLIC;
break;
case ICElement.CPP_PROTECTED:
visibility = ASTAccessVisibility.PROTECTED;
break;
default:
visibility = ASTAccessVisibility.PRIVATE;
break;
};
resultCollector.acceptField(
match.getName(),
null,
visibility,
completionStart,
completionLength,
completionEngine.computeTypeRelevance(type));
break;
//Make sure we replace with the appropriate string for functions and methods
FunctionPrototypeSummary fproto = getPrototype(match);
if(fproto != null) {
replaceString = fproto.getName() + "()";
displayString = fproto.getPrototypeString(true);
} else {
replaceString =
displayString = match.getName();;
case ICElement.C_VARIABLE:
case ICElement.C_VARIABLE_DECLARATION:
resultCollector.acceptVariable(
match.getName(),
null,
completionStart,
completionLength,
completionEngine.computeTypeRelevance(type));
break;
case ICElement.C_METHOD:
case ICElement.C_METHOD_DECLARATION:
switch (match.getVisibility()){
case ICElement.CPP_PUBLIC:
visibility = ASTAccessVisibility.PUBLIC;
break;
case ICElement.CPP_PROTECTED:
visibility = ASTAccessVisibility.PROTECTED;
break;
default:
visibility = ASTAccessVisibility.PRIVATE;
break;
};
resultCollector.acceptMethod(
match.getName(),
null,
match.getReturnType(),
visibility,
completionStart,
completionLength,
completionEngine.computeTypeRelevance(type));
break;
case ICElement.C_FUNCTION:
case ICElement.C_FUNCTION_DECLARATION:
resultCollector.acceptFunction(
match.getName(),
null,
match.getReturnType(),
completionStart,
completionLength,
completionEngine.computeTypeRelevance(type));
break;
case ICElement.C_CLASS:
resultCollector.acceptClass(
match.getName(),
completionStart,
completionLength,
completionEngine.computeTypeRelevance(type));
break;
case ICElement.C_STRUCT:
resultCollector.acceptStruct(
match.getName(),
completionStart,
completionLength,
completionEngine.computeTypeRelevance(type));
break;
case ICElement.C_UNION:
resultCollector.acceptUnion(
match.getName(),
completionStart,
completionLength,
completionEngine.computeTypeRelevance(type));
break;
case ICElement.C_NAMESPACE:
resultCollector.acceptNamespace(
match.getName(),
completionStart,
completionLength,
completionEngine.computeTypeRelevance(type));
break;
case ICElement.C_MACRO:
resultCollector.acceptMacro(
match.getName(),
completionStart,
completionLength,
completionEngine.computeTypeRelevance(type));
break;
case ICElement.C_ENUMERATION:
resultCollector.acceptEnumeration(
match.getName(),
completionStart,
completionLength,
completionEngine.computeTypeRelevance(type));
break;
case ICElement.C_ENUMERATOR:
resultCollector.acceptEnumerator(
match.getName(),
completionStart,
completionLength,
completionEngine.computeTypeRelevance(type));
break;
default :
break;
}
image = labelProvider.getImage(match);
infoString.append(displayString);
if(match.getParentName().length() > 0) {
infoString.append(" - Parent: ");
infoString.append(match.getParentName());
}
proposal = new CCompletionProposal(
replaceString, // Replacement string
region.getOffset(),
region.getLength(),
image,
displayString, // Display string
calculateRelevance(match)
);
completions.add(proposal);
// No summary information available yet
// context information is available for methods only
if(fproto != null){
String fargs = fproto.getArguments();
if(fargs != null && fargs.length() > 0) {
proposal.setContextInformation(new ContextInformation(replaceString, fargs));
}
}
// The info string could be populated with documentation info.
// For now, it has the name and the parent's name if available.
if(!displayString.equals(infoString.toString()))
proposal.setAdditionalProposalInfo(infoString.toString());
}
completions.addAll(resultCollector.getCompletions());
}
}

View file

@ -5,6 +5,7 @@ package org.eclipse.cdt.internal.ui.text;
* All Rights Reserved.
*/
import org.eclipse.cdt.ui.text.*;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.contentassist.ICompletionProposalExtension;

View file

@ -7,6 +7,8 @@ package org.eclipse.cdt.internal.ui.text;
import java.util.Comparator;
import org.eclipse.cdt.ui.text.*;
public class CCompletionProposalComparator implements Comparator {
private boolean fOrderAlphabetically;

View file

@ -0,0 +1,423 @@
/**********************************************************************
* 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;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.cdt.core.parser.ast.ASTAccessVisibility;
import org.eclipse.cdt.internal.core.contentassist.CompletionRequestorAdaptor;
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.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 List completions = new ArrayList();
private ImageDescriptorRegistry registry = CUIPlugin.getImageDescriptorRegistry();
public ResultCollector(){
completions.clear();
}
/**
* @return the completion list
*/
public List getCompletions() {
return completions;
}
/*
* 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
);
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)
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) {
super.acceptLocalVariable(
name,
returnType,
completionStart,
completionLength,
relevance);
}
/* (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)
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);
}
}

View file

@ -12,8 +12,9 @@ import org.eclipse.cdt.internal.corext.template.Templates;
import org.eclipse.cdt.internal.corext.template.c.CompilationUnitContext;
import org.eclipse.cdt.internal.corext.template.c.CompilationUnitContextType;
import org.eclipse.cdt.internal.corext.template.c.ICompilationUnit;
import org.eclipse.cdt.internal.ui.text.ICCompletionProposal;
import org.eclipse.cdt.internal.ui.text.link.LinkedPositionManager;
import org.eclipse.cdt.ui.text.ICCompletionProposal;
import java.util.ArrayList;
import org.eclipse.jface.text.IDocument;

View file

@ -10,10 +10,10 @@ import org.eclipse.cdt.internal.corext.template.TemplateBuffer;
import org.eclipse.cdt.internal.corext.template.TemplateContext;
import org.eclipse.cdt.internal.corext.template.TemplateMessages;
import org.eclipse.cdt.internal.corext.template.TemplatePosition;
import org.eclipse.cdt.internal.ui.text.ICCompletionProposal;
import org.eclipse.cdt.internal.ui.text.link.LinkedPositionManager;
import org.eclipse.cdt.internal.ui.text.link.LinkedPositionUI;
import org.eclipse.cdt.ui.CUIPlugin;
import org.eclipse.cdt.ui.text.ICCompletionProposal;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.swt.graphics.Image;

View file

@ -1,4 +1,4 @@
package org.eclipse.cdt.internal.ui.text;
package org.eclipse.cdt.ui.text;
/*******************************************************************************
* Copyright (c) 2000, 2002 International Business Machines Corp. and others.
@ -14,7 +14,7 @@ package org.eclipse.cdt.internal.ui.text;
import org.eclipse.jface.text.contentassist.ICompletionProposal;
/*
/**
* CompletionProposal with a relevance value.
* The relevance value is used to sort the completion proposals. Proposals with higher relevance
* should be listed before proposals with lower relevance.