Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[cdt-patch] Code Assist bug fixes


Core :
        Solution to bug#43162 : Code Assist not showing the right return value:
        Saved a function return value string in the BasicSearchMatch object.
        Created a new package org.eclipse.cdt.internal.core.parser.util and
        added ASTUtil class with static methods to help convert an ASTFunction
        return type from IASTAbstractDeclaration to String. Note that this was
        previously implemented in the CModelBuilder. I just moved it to a common
        library for others (BasicSearchMatch) to use.
UI:
        Solutions to
        bug#43162 : Code Assist not showing the right return value
        Bug#43145 : foo function still showing in Code Assist even if "f" is deleted
        Bug#42810 : Code Assist adding characters after pressing <enter>
        Bug#42861 : Code Assist should be case insensitive.

Tests:
        Solution to bug#43162 : Code Assist not showing the right return value.
        Solution to Bug#42861 : Code Assist should be case insensitive.
        Modified the CompletionProposalsTest to include upper and lower cases
        and to include functions with different return values.

        Sorry John, but the rest are visual bugs and could not add test cases for them.

Thanks,
Hoda Amer
Staff Software Engineer
Rational Software - IBM Software Group



Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/ChangeLog,v
retrieving revision 1.149
diff -u -r1.149 ChangeLog
--- ChangeLog	17 Sep 2003 02:11:24 -0000	1.149
+++ ChangeLog	19 Sep 2003 20:10:04 -0000
@@ -1,3 +1,12 @@
+2003-09-19 Hoda Amer
+	Solution to bug#43162 : Code Assist not showing the right return value:
+	Saved a function return value string in the BasicSearchMatch object.
+	Created a new package org.eclipse.cdt.internal.core.parser.util and 
+	added ASTUtil class with static methods to help convert an ASTFunction 
+	return type from IASTAbstractDeclaration to String. Note that this was
+	previously implemented in the CModelBuilder. I just moved it to a common 
+	library for others (BasicSearchMatch) to use.
+	
 2003-09-16 Alain Magloire
 
 	Putting the draft work to do a special binary parser
Index: model/org/eclipse/cdt/internal/core/model/CModelBuilder.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelBuilder.java,v
retrieving revision 1.17
diff -u -r1.17 CModelBuilder.java
--- model/org/eclipse/cdt/internal/core/model/CModelBuilder.java	15 Sep 2003 22:50:25 -0000	1.17
+++ model/org/eclipse/cdt/internal/core/model/CModelBuilder.java	19 Sep 2003 20:10:04 -0000
@@ -11,10 +11,8 @@
 package org.eclipse.cdt.internal.core.model;
 
 import java.io.StringReader;
-import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
-import java.util.List;
 import java.util.Map;
 
 import org.eclipse.cdt.core.model.CoreModel;
@@ -23,19 +21,17 @@
 import org.eclipse.cdt.core.model.ITemplate;
 import org.eclipse.cdt.core.parser.IParser;
 import org.eclipse.cdt.core.parser.IQuickParseCallback;
-import org.eclipse.cdt.core.parser.ParserLanguage;
 import org.eclipse.cdt.core.parser.ParserFactory;
+import org.eclipse.cdt.core.parser.ParserLanguage;
 import org.eclipse.cdt.core.parser.ParserMode;
 import org.eclipse.cdt.core.parser.ast.ASTClassKind;
 import org.eclipse.cdt.core.parser.ast.ASTNotImplementedException;
-import org.eclipse.cdt.core.parser.ast.ASTPointerOperator;
 import org.eclipse.cdt.core.parser.ast.IASTAbstractDeclaration;
 import org.eclipse.cdt.core.parser.ast.IASTAbstractTypeSpecifierDeclaration;
 import org.eclipse.cdt.core.parser.ast.IASTBaseSpecifier;
 import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier;
 import org.eclipse.cdt.core.parser.ast.IASTCompilationUnit;
 import org.eclipse.cdt.core.parser.ast.IASTDeclaration;
-import org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier;
 import org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier;
 import org.eclipse.cdt.core.parser.ast.IASTEnumerator;
 import org.eclipse.cdt.core.parser.ast.IASTField;
@@ -45,33 +41,30 @@
 import org.eclipse.cdt.core.parser.ast.IASTMethod;
 import org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition;
 import org.eclipse.cdt.core.parser.ast.IASTOffsetableElement;
-import org.eclipse.cdt.core.parser.ast.IASTParameterDeclaration;
-import org.eclipse.cdt.core.parser.ast.IASTSimpleTypeSpecifier;
 import org.eclipse.cdt.core.parser.ast.IASTTemplateDeclaration;
-import org.eclipse.cdt.core.parser.ast.IASTTemplateParameter;
 import org.eclipse.cdt.core.parser.ast.IASTTypeSpecifier;
 import org.eclipse.cdt.core.parser.ast.IASTTypeSpecifierOwner;
 import org.eclipse.cdt.core.parser.ast.IASTTypedefDeclaration;
 import org.eclipse.cdt.core.parser.ast.IASTVariable;
 import org.eclipse.cdt.internal.core.parser.ParserException;
 import org.eclipse.cdt.internal.core.parser.ScannerInfo;
-import org.eclipse.cdt.internal.core.parser.ast.ASTArrayModifier;
+import org.eclipse.cdt.internal.core.parser.util.ASTUtil;
 import org.eclipse.core.resources.IProject;
 
 
 public class CModelBuilder {
 	
-	protected org.eclipse.cdt.internal.core.model.TranslationUnit translationUnit;
-	protected Map newElements;
-	protected IQuickParseCallback quickParseCallback; 
-	protected IASTCompilationUnit compilationUnit; 
+	private org.eclipse.cdt.internal.core.model.TranslationUnit translationUnit;
+	private Map newElements;
+	private IQuickParseCallback quickParseCallback; 
+	private IASTCompilationUnit compilationUnit; 
 		
 	public CModelBuilder(org.eclipse.cdt.internal.core.model.TranslationUnit tu) {
 		this.translationUnit = tu ;
 		this.newElements = new HashMap();
 	}
 
-	protected IASTCompilationUnit parse( String code, boolean hasCppNature, boolean quick, boolean throwExceptionOnError ) throws ParserException
+	private IASTCompilationUnit parse( String code, boolean hasCppNature, boolean quick, boolean throwExceptionOnError ) throws ParserException
 	{
 		ParserMode mode = quick ? ParserMode.QUICK_PARSE : ParserMode.COMPLETE_PARSE; 
 		quickParseCallback = ParserFactory.createQuickParseCallback(); 
@@ -86,7 +79,7 @@
 		return quickParseCallback.getCompilationUnit(); 
 	}
 	
-	protected IASTCompilationUnit parse( String code, boolean hasCppNature )throws ParserException
+	private IASTCompilationUnit parse( String code, boolean hasCppNature )throws ParserException
 	{
 		return parse( code, hasCppNature, true, true );
 	}
@@ -135,7 +128,7 @@
 		
 	}	
 	
-	protected void generateModelElements(){
+	private void generateModelElements(){
 		Iterator i = quickParseCallback.iterateOffsetableElements();
 		while (i.hasNext()){
 			IASTOffsetableElement offsetable = (IASTOffsetableElement)i.next();
@@ -153,7 +146,7 @@
 		} 
 	}	
 
-	protected void generateModelElements (Parent parent, IASTDeclaration declaration) throws ASTNotImplementedException
+	private void generateModelElements (Parent parent, IASTDeclaration declaration) throws ASTNotImplementedException
 	{
 		if(declaration instanceof IASTNamespaceDefinition ) {
 			generateModelElements(parent, (IASTNamespaceDefinition) declaration);
@@ -174,7 +167,7 @@
 		createSimpleElement(parent, declaration, false);
 	}
 	
-	protected void generateModelElements (Parent parent, IASTNamespaceDefinition declaration) throws ASTNotImplementedException{
+	private void generateModelElements (Parent parent, IASTNamespaceDefinition declaration) throws ASTNotImplementedException{
 		// IASTNamespaceDefinition 
 		IParent namespace = createNamespace(parent, declaration);
 		Iterator nsDecls = declaration.getDeclarations();
@@ -184,13 +177,13 @@
 		}
 	}
 	
-	protected void generateModelElements (Parent parent, IASTAbstractTypeSpecifierDeclaration abstractDeclaration) throws ASTNotImplementedException
+	private void generateModelElements (Parent parent, IASTAbstractTypeSpecifierDeclaration abstractDeclaration) throws ASTNotImplementedException
 	{
 		// IASTAbstractTypeSpecifierDeclaration 
 		CElement element = createAbstractElement(parent, abstractDeclaration, false);
 	}
 
-	protected void generateModelElements (Parent parent, IASTTemplateDeclaration templateDeclaration) throws ASTNotImplementedException
+	private void generateModelElements (Parent parent, IASTTemplateDeclaration templateDeclaration) throws ASTNotImplementedException
 	{				
 		// Template Declaration 
 		IASTDeclaration declaration = (IASTDeclaration)templateDeclaration.getOwnedDeclaration();
@@ -200,7 +193,7 @@
 			// set the element position		
 			element.setPos(templateDeclaration.getStartingOffset(), templateDeclaration.getEndingOffset() - templateDeclaration.getStartingOffset());	
 			// set the template parameters				
-			String[] parameterTypes = getTemplateParameters(templateDeclaration);
+			String[] parameterTypes = ASTUtil.getTemplateParameters(templateDeclaration);
 			ITemplate classTemplate = (ITemplate) element;
 			classTemplate.setTemplateParameterTypes(parameterTypes);				
 		}
@@ -212,12 +205,12 @@
 			// set the element position		
 			element.setPos(templateDeclaration.getStartingOffset(), templateDeclaration.getEndingOffset() - templateDeclaration.getStartingOffset());	
 			// set the template parameters
-			String[] parameterTypes = getTemplateParameters(templateDeclaration);	
+			String[] parameterTypes = ASTUtil.getTemplateParameters(templateDeclaration);	
 			template.setTemplateParameterTypes(parameterTypes);				
 		}
 	}
 
-	protected void generateModelElements (Parent parent, IASTTypedefDeclaration declaration) throws ASTNotImplementedException
+	private void generateModelElements (Parent parent, IASTTypedefDeclaration declaration) throws ASTNotImplementedException
 	{
 		TypeDef typeDef = createTypeDef(parent, declaration);
 		IASTAbstractDeclaration abstractDeclaration = declaration.getAbstractDeclarator();
@@ -266,7 +259,7 @@
 		return element;
 	}
 	
-	protected Include createInclusion(Parent parent, IASTInclusion inclusion){
+	private Include createInclusion(Parent parent, IASTInclusion inclusion){
 		// create element
 		Include element = new Include((CElement)parent, inclusion.getName(), !inclusion.isLocal());
 		element.setFullPathName(inclusion.getFullFileName());
@@ -280,7 +273,7 @@
 		return element;
 	}
 	
-	protected Macro createMacro(Parent parent, IASTMacro macro){
+	private Macro createMacro(Parent parent, IASTMacro macro){
 		// create element
 		org.eclipse.cdt.internal.core.model.Macro element = new  Macro(parent, macro.getName());
 		// add to parent
@@ -293,7 +286,7 @@
 		return element;
 	}
 	
-	protected Namespace createNamespace(Parent parent, IASTNamespaceDefinition nsDef){
+	private Namespace createNamespace(Parent parent, IASTNamespaceDefinition nsDef){
 		// create element
 		String type = "namespace";
 		String nsName = (nsDef.getName() == null )  
@@ -310,7 +303,7 @@
 		return element;
 	}
 
-	protected Enumeration createEnumeration(Parent parent, IASTEnumerationSpecifier enumSpecifier){
+	private Enumeration createEnumeration(Parent parent, IASTEnumerationSpecifier enumSpecifier){
 		// create element
 		String type = "enum";
 		String enumName = (enumSpecifier.getName() == null )
@@ -334,7 +327,7 @@
 		return element;
 	}
 	
-	protected Enumerator createEnumerator(Parent enum, IASTEnumerator enumDef){
+	private Enumerator createEnumerator(Parent enum, IASTEnumerator enumDef){
 		Enumerator element = new Enumerator (enum, enumDef.getName().toString());
 		// add to parent
 		enum.addChild(element);
@@ -346,7 +339,7 @@
 		return element;		
 	}
 	
-	protected Structure createClass(Parent parent, IASTClassSpecifier classSpecifier, boolean isTemplate){
+	private Structure createClass(Parent parent, IASTClassSpecifier classSpecifier, boolean isTemplate){
 		// create element
 		String className = "";
 		String type = "";
@@ -413,13 +406,13 @@
 		return element;
 	}
 	
-	protected TypeDef createTypeDef(Parent parent, IASTTypedefDeclaration typeDefDeclaration){
+	private TypeDef createTypeDef(Parent parent, IASTTypedefDeclaration typeDefDeclaration){
 		// create the element
 		String name = typeDefDeclaration.getName();
         
         TypeDef element = new TypeDef( parent, name );
         
-        StringBuffer typeName = new StringBuffer(getType(typeDefDeclaration.getAbstractDeclarator()));
+        StringBuffer typeName = new StringBuffer(ASTUtil.getType(typeDefDeclaration.getAbstractDeclarator()));
 		element.setTypeName(typeName.toString());
 		
 		// add to parent
@@ -433,7 +426,7 @@
 		return element;	
 	}
 
-	protected VariableDeclaration createVariableSpecification(Parent parent, IASTVariable varDeclaration, boolean isTemplate)throws ASTNotImplementedException
+	private VariableDeclaration createVariableSpecification(Parent parent, IASTVariable varDeclaration, boolean isTemplate)throws ASTNotImplementedException
     {
     	IASTAbstractDeclaration abstractDeclaration = varDeclaration.getAbstractDeclaration();
     	CElement abstractElement = createAbstractElement (parent, abstractDeclaration , isTemplate);
@@ -470,7 +463,7 @@
 				}
 			}
 		}
-		element.setTypeName ( getType(varDeclaration.getAbstractDeclaration()) );
+		element.setTypeName ( ASTUtil.getType(varDeclaration.getAbstractDeclaration()) );
 		element.setConst(varDeclaration.getAbstractDeclaration().isConst());
 		element.setVolatile(varDeclaration.getAbstractDeclaration().isVolatile());
 		element.setStatic(varDeclaration.isStatic());
@@ -488,7 +481,7 @@
 		return element;
 	}
 
-	protected FunctionDeclaration createFunctionSpecification(Parent parent, IASTFunction functionDeclaration, boolean isTemplate)
+	private FunctionDeclaration createFunctionSpecification(Parent parent, IASTFunction functionDeclaration, boolean isTemplate)
     {    	
 		String name = functionDeclaration.getName();
         if (name == null) {
@@ -497,7 +490,7 @@
         } 
 
 		// get parameters types
-		String[] parameterTypes = getFunctionParameterTypes(functionDeclaration);
+		String[] parameterTypes = ASTUtil.getFunctionParameterTypes(functionDeclaration);
 		
 		FunctionDeclaration element = null;
 		
@@ -566,7 +559,7 @@
 			}
 		}						
 		element.setParameterTypes(parameterTypes);
-		element.setReturnType( getType(functionDeclaration.getReturnType()) );
+		element.setReturnType( ASTUtil.getType(functionDeclaration.getReturnType()) );
 		element.setStatic(functionDeclaration.isStatic());
 
 		// add to parent
@@ -583,188 +576,4 @@
 		return element;
 	}
 
-	private String[] getTemplateParameters(Iterator templateParams){
-		List paramList = new ArrayList();
-		while (templateParams.hasNext()){
-			StringBuffer paramType = new StringBuffer();
-			IASTTemplateParameter parameter = (IASTTemplateParameter)templateParams.next();
-			if((parameter.getIdentifier() != null) && (parameter.getIdentifier().length() != 0))
-			{
-				paramList.add(parameter.getIdentifier().toString());
-			}
-			else
-			{				
-				IASTTemplateParameter.ParamKind kind = parameter.getTemplateParameterKind();
-				if(kind == IASTTemplateParameter.ParamKind.CLASS){
-					paramType.append("class");
-				}
-				if(kind == IASTTemplateParameter.ParamKind.TYPENAME){
-					paramType.append("typename");
-				}
-				if(kind == IASTTemplateParameter.ParamKind.TEMPLATE_LIST){
-					paramType.append("template<");
-					String[] subParams = getTemplateParameters(parameter.getTemplateParameters());
-					int p = 0; 
-					if ( subParams.length > 0)
-						paramType.append(subParams[p++]);
-					while( p < subParams.length){
-						paramType.append(", ");
-						paramType.append(subParams[p++]);							
-					}
-					paramType.append(">");
-				}
-				if(kind == IASTTemplateParameter.ParamKind.PARAMETER){
-					paramType.append(getType(parameter.getParameterDeclaration()));				
-				}
-				paramList.add(paramType.toString());
-			} // end else
-		}// end while
-		String[] parameterTypes = new String[paramList.size()];
-		for(int j=0; j<paramList.size(); ++j){
-			parameterTypes[j] = (String) paramList.get(j);			
-		}
-		return parameterTypes;		
-		
-	}	
-	private String[] getTemplateParameters(IASTTemplateDeclaration templateDeclaration){
-		// add the parameters
-		Iterator i = templateDeclaration.getTemplateParameters();
-		return getTemplateParameters(i);
-	}
-		
-	private String getType(IASTAbstractDeclaration declaration)
-	{
-		StringBuffer type = new StringBuffer();
-			
-		// get type from declaration
-		type.append(getDeclarationType(declaration));
-		type.append(getPointerOperation(declaration));
-		type.append(getArrayQualifiers(declaration));
-		
-		type.append(getPointerToFunctionType(declaration));
-		return type.toString();
-	}
-	    
-	private String getPointerToFunctionType(IASTAbstractDeclaration declaration){
-		StringBuffer type = new StringBuffer();
-		ASTPointerOperator po = declaration.getPointerToFunctionOperator();
-		if(po != null){
-			type.append("(");
-			type.append(getPointerOperator(po));
-			type.append(")");
-			String[] parameters =getParameterTypes(declaration.getParameters()); 
-			type.append(getParametersString(parameters));
-		}
-		return type.toString();
-	}
-	private String getDeclarationType(IASTAbstractDeclaration declaration){
-		StringBuffer type = new StringBuffer();
-		
-		if(declaration.isConst())
-			type.append("const ");
-		IASTTypeSpecifier typeSpecifier = declaration.getTypeSpecifier();
-		if(typeSpecifier instanceof IASTElaboratedTypeSpecifier){
-			IASTElaboratedTypeSpecifier elab = (IASTElaboratedTypeSpecifier) typeSpecifier;
-			type.append(getElaboratedTypeSignature(elab));
-		}else if(typeSpecifier instanceof IASTSimpleTypeSpecifier){		
-			IASTSimpleTypeSpecifier simpleSpecifier = (IASTSimpleTypeSpecifier) typeSpecifier;		
-			type.append(simpleSpecifier.getTypename());
-		}
-		return type.toString();	
-	}
-	
-	private String getElaboratedTypeSignature(IASTElaboratedTypeSpecifier elab){
-		StringBuffer type = new StringBuffer();
-		ASTClassKind t = elab.getClassKind();
-		if( t == ASTClassKind.CLASS){
-			type.append("class");
-		} 
-		else if( t == ASTClassKind.STRUCT){
-			type.append("struct");
-		}
-		else if( t == ASTClassKind.UNION){
-			type.append("union");
-		}
-		else if( t == ASTClassKind.STRUCT){
-			type.append("enum");
-		}
-		type.append(" ");
-		type.append(elab.getName().toString());
-		return type.toString();
-	}
-	
-	private String getPointerOperation(IASTAbstractDeclaration declaration){		
-		StringBuffer pointerString = new StringBuffer();
-		Iterator i = declaration.getPointerOperators();
-		while(i.hasNext()){
-			ASTPointerOperator po = (ASTPointerOperator) i.next();
-			pointerString.append(getPointerOperator(po));
-		}
-		return pointerString.toString();
-	}
-	
-	private String getPointerOperator(ASTPointerOperator po){
-		String pointerString ="";
-		if(po == ASTPointerOperator.POINTER)
-			pointerString = ("*");
-
-		if(po == ASTPointerOperator.REFERENCE)
-			pointerString =("&");
-
-		if(po == ASTPointerOperator.CONST_POINTER)
-			pointerString =("* const");
-
-		if(po == ASTPointerOperator.VOLATILE_POINTER)
-			pointerString =("* volatile");
-			
-		return pointerString;						
-	}
-	
-	private String getArrayQualifiers(IASTAbstractDeclaration declaration){		
-		StringBuffer arrayString = new StringBuffer();
-		Iterator i  = declaration.getArrayModifiers(); 
-		while (i.hasNext()){
-			ASTArrayModifier q = (ASTArrayModifier) i.next();
-			arrayString.append("[]");				
-		}
-		return arrayString.toString();
-	}
-	
-    private String[] getFunctionParameterTypes(IASTFunction functionDeclaration)
-    {
-    	Iterator parameters = functionDeclaration.getParameters();
-    	return getParameterTypes(parameters);
-    }
-
-	private String[] getParameterTypes(Iterator parameters){
-		List paramList = new ArrayList();
-		while (parameters.hasNext()){
-			IASTParameterDeclaration param = (IASTParameterDeclaration)parameters.next();
-			paramList.add(getType(param));
-		}
-		String[] parameterTypes = new String[paramList.size()];
-		for(int i=0; i<paramList.size(); ++i){
-			parameterTypes[i] = (String)paramList.get(i); 
-		}
-		return parameterTypes;			
-	}
-	private String getParametersString(String[] parameterTypes) 
-	{
-		StringBuffer parameters = new StringBuffer("");
-		
-		if ((parameterTypes != null) && (parameterTypes.length > 0)) {
-			parameters.append("(");
-			int i = 0;
-			parameters.append(parameterTypes[i++]);
-			while (i < parameterTypes.length) {
-				parameters.append(", ");
-				parameters.append(parameterTypes[i++]);
-			}
-			parameters.append(")");
-		} else {
-			if (parameterTypes != null) parameters.append("()");
-		}
-		
-		return parameters.toString();
-	}	    
 }
Index: parser/org/eclipse/cdt/internal/core/parser/util/ASTUtil.java
===================================================================
RCS file: parser/org/eclipse/cdt/internal/core/parser/util/ASTUtil.java
diff -N parser/org/eclipse/cdt/internal/core/parser/util/ASTUtil.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ parser/org/eclipse/cdt/internal/core/parser/util/ASTUtil.java	19 Sep 2003 20:10:06 -0000
@@ -0,0 +1,219 @@
+/*******************************************************************************
+ * Copyright (c) 2001 Rational Software Corp. 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:
+ *     Rational Software - initial implementation
+ ******************************************************************************/
+package org.eclipse.cdt.internal.core.parser.util;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.cdt.core.parser.ast.ASTClassKind;
+import org.eclipse.cdt.core.parser.ast.ASTPointerOperator;
+import org.eclipse.cdt.core.parser.ast.IASTAbstractDeclaration;
+import org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier;
+import org.eclipse.cdt.core.parser.ast.IASTFunction;
+import org.eclipse.cdt.core.parser.ast.IASTParameterDeclaration;
+import org.eclipse.cdt.core.parser.ast.IASTSimpleTypeSpecifier;
+import org.eclipse.cdt.core.parser.ast.IASTTemplateDeclaration;
+import org.eclipse.cdt.core.parser.ast.IASTTemplateParameter;
+import org.eclipse.cdt.core.parser.ast.IASTTypeSpecifier;
+import org.eclipse.cdt.internal.core.parser.ast.ASTArrayModifier;
+
+/**
+ * This is a utility class to help convert AST elements to Strings.
+ */
+
+public class ASTUtil {
+	public static String[] getTemplateParameters(IASTTemplateDeclaration templateDeclaration){
+		// add the parameters
+		Iterator i = templateDeclaration.getTemplateParameters();
+		return getTemplateParameters(i);
+	}
+	public static String[] getTemplateParameters(Iterator templateParams){
+		List paramList = new ArrayList();
+		while (templateParams.hasNext()){
+			StringBuffer paramType = new StringBuffer();
+			IASTTemplateParameter parameter = (IASTTemplateParameter)templateParams.next();
+			if((parameter.getIdentifier() != null) && (parameter.getIdentifier().length() != 0))
+			{
+				paramList.add(parameter.getIdentifier().toString());
+			}
+			else
+			{				
+				IASTTemplateParameter.ParamKind kind = parameter.getTemplateParameterKind();
+				if(kind == IASTTemplateParameter.ParamKind.CLASS){
+					paramType.append("class");
+				}
+				if(kind == IASTTemplateParameter.ParamKind.TYPENAME){
+					paramType.append("typename");
+				}
+				if(kind == IASTTemplateParameter.ParamKind.TEMPLATE_LIST){
+					paramType.append("template<");
+					String[] subParams = getTemplateParameters(parameter.getTemplateParameters());
+					int p = 0; 
+					if ( subParams.length > 0)
+						paramType.append(subParams[p++]);
+					while( p < subParams.length){
+						paramType.append(", ");
+						paramType.append(subParams[p++]);							
+					}
+					paramType.append(">");
+				}
+				if(kind == IASTTemplateParameter.ParamKind.PARAMETER){
+					paramType.append(getType(parameter.getParameterDeclaration()));				
+				}
+				paramList.add(paramType.toString());
+			} // end else
+		}// end while
+		String[] parameterTypes = new String[paramList.size()];
+		for(int j=0; j<paramList.size(); ++j){
+			parameterTypes[j] = (String) paramList.get(j);			
+		}
+		return parameterTypes;		
+		
+	}	
+		
+	public static String getType(IASTAbstractDeclaration declaration)
+	{
+		StringBuffer type = new StringBuffer();
+			
+		// get type from declaration
+		type.append(getDeclarationType(declaration));
+		type.append(getPointerOperation(declaration));
+		type.append(getArrayQualifiers(declaration));
+		
+		type.append(getPointerToFunctionType(declaration));
+		return type.toString();
+	}
+	    
+	public static String getPointerToFunctionType(IASTAbstractDeclaration declaration){
+		StringBuffer type = new StringBuffer();
+		ASTPointerOperator po = declaration.getPointerToFunctionOperator();
+		if(po != null){
+			type.append("(");
+			type.append(getPointerOperator(po));
+			type.append(")");
+			String[] parameters =getParameterTypes(declaration.getParameters()); 
+			type.append(getParametersString(parameters));
+		}
+		return type.toString();
+	}
+	public static String getDeclarationType(IASTAbstractDeclaration declaration){
+		StringBuffer type = new StringBuffer();
+		
+		if(declaration.isConst())
+			type.append("const ");
+		IASTTypeSpecifier typeSpecifier = declaration.getTypeSpecifier();
+		if(typeSpecifier instanceof IASTElaboratedTypeSpecifier){
+			IASTElaboratedTypeSpecifier elab = (IASTElaboratedTypeSpecifier) typeSpecifier;
+			type.append(getElaboratedTypeSignature(elab));
+		}else if(typeSpecifier instanceof IASTSimpleTypeSpecifier){		
+			IASTSimpleTypeSpecifier simpleSpecifier = (IASTSimpleTypeSpecifier) typeSpecifier;		
+			type.append(simpleSpecifier.getTypename());
+		}
+		return type.toString();	
+	}
+	
+	public static String getElaboratedTypeSignature(IASTElaboratedTypeSpecifier elab){
+		StringBuffer type = new StringBuffer();
+		ASTClassKind t = elab.getClassKind();
+		if( t == ASTClassKind.CLASS){
+			type.append("class");
+		} 
+		else if( t == ASTClassKind.STRUCT){
+			type.append("struct");
+		}
+		else if( t == ASTClassKind.UNION){
+			type.append("union");
+		}
+		else if( t == ASTClassKind.STRUCT){
+			type.append("enum");
+		}
+		type.append(" ");
+		type.append(elab.getName().toString());
+		return type.toString();
+	}
+	
+	public static String getPointerOperation(IASTAbstractDeclaration declaration){		
+		StringBuffer pointerString = new StringBuffer();
+		Iterator i = declaration.getPointerOperators();
+		while(i.hasNext()){
+			ASTPointerOperator po = (ASTPointerOperator) i.next();
+			pointerString.append(getPointerOperator(po));
+		}
+		return pointerString.toString();
+	}
+	
+	public static String getPointerOperator(ASTPointerOperator po){
+		String pointerString ="";
+		if(po == ASTPointerOperator.POINTER)
+			pointerString = ("*");
+
+		if(po == ASTPointerOperator.REFERENCE)
+			pointerString =("&");
+
+		if(po == ASTPointerOperator.CONST_POINTER)
+			pointerString =("* const");
+
+		if(po == ASTPointerOperator.VOLATILE_POINTER)
+			pointerString =("* volatile");
+			
+		return pointerString;						
+	}
+	
+	public static String getArrayQualifiers(IASTAbstractDeclaration declaration){		
+		StringBuffer arrayString = new StringBuffer();
+		Iterator i  = declaration.getArrayModifiers(); 
+		while (i.hasNext()){
+			ASTArrayModifier q = (ASTArrayModifier) i.next();
+			arrayString.append("[]");				
+		}
+		return arrayString.toString();
+	}
+	
+	public static String[] getFunctionParameterTypes(IASTFunction functionDeclaration)
+	{
+		Iterator parameters = functionDeclaration.getParameters();
+		return getParameterTypes(parameters);
+	}
+
+	public static String[] getParameterTypes(Iterator parameters){
+		List paramList = new ArrayList();
+		while (parameters.hasNext()){
+			IASTParameterDeclaration param = (IASTParameterDeclaration)parameters.next();
+			paramList.add(getType(param));
+		}
+		String[] parameterTypes = new String[paramList.size()];
+		for(int i=0; i<paramList.size(); ++i){
+			parameterTypes[i] = (String)paramList.get(i); 
+		}
+		return parameterTypes;			
+	}
+	public static String getParametersString(String[] parameterTypes) 
+	{
+		StringBuffer parameters = new StringBuffer("");
+		
+		if ((parameterTypes != null) && (parameterTypes.length > 0)) {
+			parameters.append("(");
+			int i = 0;
+			parameters.append(parameterTypes[i++]);
+			while (i < parameterTypes.length) {
+				parameters.append(", ");
+				parameters.append(parameterTypes[i++]);
+			}
+			parameters.append(")");
+		} else {
+			if (parameterTypes != null) parameters.append("()");
+		}
+		
+		return parameters.toString();
+	}	    
+
+}
Index: search/org/eclipse/cdt/core/search/BasicSearchMatch.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/search/org/eclipse/cdt/core/search/BasicSearchMatch.java,v
retrieving revision 1.5
diff -u -r1.5 BasicSearchMatch.java
--- search/org/eclipse/cdt/core/search/BasicSearchMatch.java	15 Sep 2003 17:31:22 -0000	1.5
+++ search/org/eclipse/cdt/core/search/BasicSearchMatch.java	19 Sep 2003 20:10:06 -0000
@@ -30,6 +30,7 @@
 	public BasicSearchMatch(BasicSearchMatch basicMatch) {
 		name 		= basicMatch.name;
 		parentName 	= basicMatch.parentName;
+		returnType  = basicMatch.returnType;
 		resource 	= basicMatch.resource;
 		path 		= basicMatch.path;
 		startOffset = basicMatch.startOffset;
@@ -41,6 +42,7 @@
 		
 		hashString += name;
 		hashString += ":" + parentName;
+		hashString += ":" + returnType;
 		hashString += ":" + getLocation().toString();
 		hashString += ":" + startOffset + ":" + endOffset;
 		hashString += ":" + type + ":" + visibility;
@@ -62,7 +64,9 @@
 		if( type != match.getElementType() || visibility != match.getVisibility() )
 			return false;
 			
-		if( !name.equals( match.getName() ) || !parentName.equals( match.getParentName() ) )
+		if( !name.equals( match.getName() ) 
+		 || !parentName.equals( match.getParentName() )
+		 || !returnType.equals( match.getReturnType() ) )
 			return false; 
 		
 		IPath thisPath = getLocation();
@@ -90,14 +94,15 @@
 		str1 += " " + getStartOffset()+ " ";
 		str2 += " " + match.getStartOffset()+ " ";
 		
-		str1 += getName() + " " + getParentName();
-		str2 += match.getName() + " " + match.getParentName();
+		str1 += getName() + " " + getParentName()+ " " + getReturnType();
+		str2 += match.getName() + " " + match.getParentName()+ " " + getReturnType();
 		
 		return str1.compareTo( str2 );
 	}
 	
 	public String name 		  = null;
 	public String parentName  = null;
+	public String returnType;
 	
 	public IResource resource = null;
 	public IPath     path 	  = null;
@@ -128,6 +133,10 @@
 		return parentName;
 	}
 
+	public String getReturnType() {
+		return returnType;
+	}
+
 	public IResource getResource() {
 		return resource;
 	}
@@ -205,6 +214,13 @@
 	 */
 	public void setParentName(String string) {
 		parentName = string;
+	}
+
+	/**
+	 * @param string
+	 */
+	public void setReturnType(String string) {
+		returnType = string;
 	}
 
 	/**
Index: search/org/eclipse/cdt/core/search/BasicSearchResultCollector.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/search/org/eclipse/cdt/core/search/BasicSearchResultCollector.java,v
retrieving revision 1.7
diff -u -r1.7 BasicSearchResultCollector.java
--- search/org/eclipse/cdt/core/search/BasicSearchResultCollector.java	15 Sep 2003 17:31:22 -0000	1.7
+++ search/org/eclipse/cdt/core/search/BasicSearchResultCollector.java	19 Sep 2003 20:10:06 -0000
@@ -40,6 +40,7 @@
 import org.eclipse.cdt.core.parser.ast.IASTTypeSpecifier;
 import org.eclipse.cdt.core.parser.ast.IASTTypedefDeclaration;
 import org.eclipse.cdt.core.parser.ast.IASTVariable;
+import org.eclipse.cdt.internal.core.parser.util.ASTUtil;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
@@ -110,6 +111,7 @@
 		
 		if( offsetable instanceof IASTFunction ){
 			result.name += getParameterString( (IASTFunction) offsetable );
+			result.returnType = ASTUtil.getType(((IASTFunction)offsetable).getReturnType());
 		}
 		
 		setElementInfo( result, offsetable );
Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/ChangeLog,v
retrieving revision 1.103
diff -u -r1.103 ChangeLog
--- ChangeLog	19 Sep 2003 16:00:44 -0000	1.103
+++ ChangeLog	19 Sep 2003 20:10:32 -0000
@@ -1,3 +1,9 @@
+2003-09-19 Hoda Amer
+	Solution to bug#43162 : Code Assist not showing the right return value.
+	Solution to Bug#42861 : Code Assist should be case insensitive. 
+	Modified the CompletionProposalsTest to include upper and lower cases
+	and to include functions with different return values.
+	
 2003-09-18 Andrew Niefer
 	- removed testConditionalExpression_Bug43159 from FailedCompleteParseASTExpressionTest
 	  and uncommented it (testConditionalExpression) in CompleteParseASTExpressionTest
Index: model/org/eclipse/cdt/core/codeassist/tests/CompletionProposalsTest.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/codeassist/tests/CompletionProposalsTest.java,v
retrieving revision 1.5
diff -u -r1.5 CompletionProposalsTest.java
--- model/org/eclipse/cdt/core/codeassist/tests/CompletionProposalsTest.java	10 Sep 2003 14:26:04 -0000	1.5
+++ model/org/eclipse/cdt/core/codeassist/tests/CompletionProposalsTest.java	19 Sep 2003 20:10:33 -0000
@@ -125,7 +125,7 @@
 						assertEquals(displayString, "aVariable");
 					break;	
 					case 1:
-						assertEquals(displayString, "aFunction() void");
+						assertEquals(displayString, "aFunction() bool");
 					break;	
 					case 2:
 						assertEquals(displayString, "aClass");
@@ -134,10 +134,10 @@
 						assertEquals(displayString, "anotherClass");
 					break;	
 					case 4:
-						assertEquals(displayString, "aStruct");
+						assertEquals(displayString, "AStruct");
 					break;	
 					case 5:
-						assertEquals(displayString, "aMacro");
+						assertEquals(displayString, "AMacro");
 					break;	
 					case 6:
 						assertEquals(displayString, "anEnumeration");
Index: resources/cfiles/CompletionProposalsTestStart.cpp
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/resources/cfiles/CompletionProposalsTestStart.cpp,v
retrieving revision 1.1
diff -u -r1.1 CompletionProposalsTestStart.cpp
--- resources/cfiles/CompletionProposalsTestStart.cpp	2 Sep 2003 17:17:01 -0000	1.1
+++ resources/cfiles/CompletionProposalsTestStart.cpp	19 Sep 2003 20:10:33 -0000
@@ -1,9 +1,9 @@
 #include "CompletionProposalsTestStart.h"
 
-#define aMacro(x) x+1
+#define AMacro(x) x+1
 
 int aVariable = 0;
-void aFunction();
+bool aFunction();
 
 enum anEnumeration {
 	first,
@@ -11,7 +11,7 @@
 	third 
 };
 
-struct aStruct{
+struct AStruct{
 	int aStructField = 0;
 };
 
Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui/ChangeLog,v
retrieving revision 1.177
diff -u -r1.177 ChangeLog
--- ChangeLog	18 Sep 2003 19:46:12 -0000	1.177
+++ ChangeLog	19 Sep 2003 20:11:00 -0000
@@ -1,3 +1,10 @@
+2003-09-19 Hoda Amer
+	Solutions to 
+	bug#43162 : Code Assist not showing the right return value
+	Bug#43145 : foo function still showing in Code Assist even if "f" is deleted
+	Bug#42810 : Code Assist adding characters after pressing <enter>
+	Bug#42861 : Code Assist should be case insensitive. 
+	
 2003-09-18 Hoda Amer
 	Solution to bug#42611 : New Class Wizard should be hidden for C projects
 		
Index: src/org/eclipse/cdt/internal/ui/text/CCompletionProcessor.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CCompletionProcessor.java,v
retrieving revision 1.10
diff -u -r1.10 CCompletionProcessor.java
--- src/org/eclipse/cdt/internal/ui/text/CCompletionProcessor.java	27 Aug 2003 13:17:47 -0000	1.10
+++ src/org/eclipse/cdt/internal/ui/text/CCompletionProcessor.java	19 Sep 2003 20:11:02 -0000
@@ -12,7 +12,6 @@
 import java.util.List;
 import java.util.Map;
 
-import org.eclipse.cdt.core.index.TagFlags;
 import org.eclipse.cdt.core.model.CoreModel;
 import org.eclipse.cdt.core.model.ICElement;
 import org.eclipse.cdt.core.model.IFunction;
@@ -161,7 +160,7 @@
 	/**
 	 * @see IContentAssistProcessor#computeContextInformation(ITextViewer, int)
 	 */
-	public IContextInformation[] computeContextInformation(ITextViewer viewer, int offset) {
+	public IContextInformation[] computeContextInformation(ITextViewer viewer, int offset) {		
 		return null;
 	}
 
@@ -206,6 +205,7 @@
 	 * @see IContentAssistProcessor#computeCompletionProposals(ITextViewer, int)
 	 */
 	public ICompletionProposal[] computeCompletionProposals(ITextViewer viewer, int documentOffset) {
+				
 		IWorkingCopyManager fManager = CUIPlugin.getDefault().getWorkingCopyManager();
 		ITranslationUnit unit = fManager.getWorkingCopy(fEditor.getEditorInput());
 							
@@ -242,7 +242,6 @@
 				fTemplateEngine[i].reset();
 				fTemplateEngine[i].complete(viewer, documentOffset, null);
 			} catch (Exception x) {
-				System.out.println("Template Exception");
 				CUIPlugin.getDefault().log(x);
 			}
 
@@ -313,11 +312,11 @@
 		return order (evalProposals(document, pos, length, getCurrentScope (unit, pos)));
 	}
 
-	private ICCompletionProposal[] evalProposals(IDocument document, int pos, int length, ICElement currentScope) {
+	private ICCompletionProposal[] evalProposals(IDocument document, int startPos, int length, ICElement currentScope) {
 		boolean isDereference = false;
 		IRegion region; 
 		String frag = "";
-
+		int pos = startPos;
 		// TODO: Do all possible scopes
 		// possible scopes include IStructure, INamespace, and ITranslationUnit
 		if(	( !(currentScope instanceof IMethod))
@@ -372,7 +371,8 @@
 		}
 				
 		try {
-			frag = document.get(region.getOffset(), region.getLength());
+			//frag = document.get(region.getOffset(), region.getLength());
+			frag = document.get(region.getOffset(), startPos - region.getOffset());
 			frag = frag.trim();
 		} catch (BadLocationException ex) {
 			return null;		//Bail out on error
@@ -403,7 +403,7 @@
 		
 		// Based on the frag name, build a list of completion proposals
 		ArrayList completions = new ArrayList();
-
+		
 		// Look in index manager
 		addProposalsFromModel(region, frag,currentScope,  completions);
 		
@@ -431,7 +431,7 @@
 			proposal = new CCompletionProposal(fname, 
 											   region.getOffset(), 
 											   region.getLength(),
-											   getTagImage(TagFlags.T_FUNCTION), 
+											   CPluginImages.get(CPluginImages.IMG_OBJS_FUNCTION), 
 											   fproto.getPrototypeString(true),
 											   2);
 
@@ -447,34 +447,6 @@
 		}
 	}
 	
-// It is not needed to follow referenced projects since search does this for us now
-/*	private void addProposalsFromModel(IRegion region, String frag, ICElement currentScope, ArrayList completions) {
-		IProject project = null;
-		IEditorInput input = fEditor.getEditorInput();
-		if (input instanceof IFileEditorInput) {
-			project = ((IFileEditorInput) input).getFile().getProject();
-	
-			// Bail out quickly, if the project was deleted.
-			if (!project.exists()) {
-				project = null;
-			}
-		}
-		if (project != null) {
-			addProjectCompletions(project, region, frag, currentScope, completions);
-			// Now query referenced projects
-			IProject referenced[];
-			try {
-				referenced = project.getReferencedProjects();
-				if (referenced.length > 0) {
-					for (int i = 0; i < referenced.length; i++) {
-						addProjectCompletions(referenced[i], region, frag, currentScope, completions);
-					}
-				}
-			} catch (CoreException e) {
-			}
-		}
-	}
-*/
 	private FunctionPrototypeSummary getPrototype (BasicSearchMatch match) {
 		switch(match.getElementType()){
 			case ICElement.C_FUNCTION:
@@ -482,7 +454,7 @@
 			case ICElement.C_METHOD:
 			case ICElement.C_METHOD_DECLARATION:
 			{
-				return (new FunctionPrototypeSummary ( match.getName() ));
+				return (new FunctionPrototypeSummary ( match.getReturnType() + " " + match.getName() ));
 			}
 		default:
 			return null;						
@@ -529,28 +501,17 @@
 		ICSearchScope scope = SearchEngine.createCSearchScope(projectScopeElement, true);
 		OrPattern orPattern = new OrPattern();
 		// search for global variables, functions, classes, structs, unions, enums and macros
-		orPattern.addPattern(SearchEngine.createSearchPattern( prefix, ICSearchConstants.VAR, ICSearchConstants.DECLARATIONS, true ));
-		orPattern.addPattern(SearchEngine.createSearchPattern( prefix, ICSearchConstants.FUNCTION, ICSearchConstants.DECLARATIONS, true ));
-		orPattern.addPattern(SearchEngine.createSearchPattern( prefix, ICSearchConstants.FUNCTION, ICSearchConstants.DEFINITIONS, true ));
-		orPattern.addPattern(SearchEngine.createSearchPattern( prefix, ICSearchConstants.TYPE, ICSearchConstants.DECLARATIONS, true ));
-		orPattern.addPattern(SearchEngine.createSearchPattern( prefix, ICSearchConstants.ENUM, ICSearchConstants.DECLARATIONS, true ));
-		orPattern.addPattern(SearchEngine.createSearchPattern( prefix, ICSearchConstants.MACRO, ICSearchConstants.DECLARATIONS, true ));
+		orPattern.addPattern(SearchEngine.createSearchPattern( prefix, ICSearchConstants.VAR, ICSearchConstants.DECLARATIONS, false ));
+		orPattern.addPattern(SearchEngine.createSearchPattern( prefix, ICSearchConstants.FUNCTION, ICSearchConstants.DECLARATIONS, false ));
+		orPattern.addPattern(SearchEngine.createSearchPattern( prefix, ICSearchConstants.FUNCTION, ICSearchConstants.DEFINITIONS, false ));
+		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);
 		elementsFound.addAll(resultCollector.getSearchResults());
 
 		if((currentScope instanceof IMethod) || (currentScope instanceof IMethodDeclaration) ){
 			// add the methods and fields of the parent class
-/*			// use search with CElement Scope 
-			ICElement[] classScopeElements = new ICElement[1];
-			classScopeElements[0] = currentScope.getParent();		
-			ICSearchScope classScope = SearchEngine.createCSearchScope(classScopeElements);
-			OrPattern classOrPattern = new OrPattern();
-			classOrPattern.addPattern(SearchEngine.createSearchPattern(prefix, ICSearchConstants.FIELD, ICSearchConstants.DECLARATIONS, true));
-			classOrPattern.addPattern(SearchEngine.createSearchPattern(prefix, ICSearchConstants.METHOD, ICSearchConstants.DECLARATIONS, true));
-			classOrPattern.addPattern(SearchEngine.createSearchPattern(prefix, ICSearchConstants.METHOD, ICSearchConstants.DEFINITIONS, true));
-			searchEngine.search(CUIPlugin.getWorkspace(), classOrPattern, classScope, resultCollector);
-			elementsFound.addAll(resultCollector.getSearchResults());
-*/
 			// Work around until CElement scope is implemented
 			IStructure parentClass = (IStructure) currentScope.getParent();
 			ArrayList children = new ArrayList();
@@ -576,6 +537,7 @@
 					childMatch.setStatic(child.isStatic());
 					if(child instanceof IMethodDeclaration){
 						childMatch.setName(((IMethodDeclaration)child).getSignature());
+						childMatch.setReturnType( ((IMethodDeclaration)child).getReturnType() );
 					}
 					else {
 						childMatch.setName(child.getElementName());
@@ -613,7 +575,7 @@
 				infoString.append(" - Parent: ");
 				infoString.append(match.getParentName());
 			}							 
-			 
+			
 			proposal = new CCompletionProposal(
 												replaceString, // Replacement string
 											   	region.getOffset(), 
@@ -638,94 +600,4 @@
 			proposal.setAdditionalProposalInfo(infoString.toString());
 		}
 	}
-
-// Search (and the new indexer) is used now instead of the old indexer and CTags
-/*	private void addProjectCompletions(IProject project, IRegion region, String frag, ArrayList completions) {
-		IndexModel model = IndexModel.getDefault();
-
-		ITagEntry[] tags = model.query(project, frag + "*", false, false);
-		if (tags != null && tags.length > 0) {
-			for (int i = 0; i < tags.length; i++) {
-				FunctionPrototypeSummary fproto = null;
-				String fargs = null;
-				String fdisplay = null;
-				String fdesc = null;
-				String fname = tags[i].getTagName();
-				int kind = tags[i].getKind();
-
-				//No member completion yet
-				if (kind == TagFlags.T_MEMBER) {
-					continue;
-				}
-
-				//This doesn't give you a nice "function" look to macros, but is safe
-				if (kind == TagFlags.T_FUNCTION || kind == TagFlags.T_PROTOTYPE) {
-					fname = fname + "()";
-
-					String pattern = tags[i].getPattern();
-					if(pattern != null) {
-						fproto = new FunctionPrototypeSummary(pattern);
-					} 				
-		
-					if(fproto == null) {
-						fproto = new FunctionPrototypeSummary(fname);
-					}
-				} 
-				
-				if(fproto != null) {
-					fargs = fproto.getArguments();
-					fdisplay = fproto.getPrototypeString(true);
-				} else {
-					fdisplay = fname;
-				}
-
-				//@@@ In the future something more usefull could go in here (ie Doxygen/JavaDoc)
-				fdesc = "<b>" + fname + "</b><br>" + "Defined in:<br> " + tags[i].getFileName();
-				if(tags[i].getClassName() != null) {
-					fdesc = fdesc + "<br>Class:<br> " + tags[i].getClassName(); 
-				}
-				    
-				//System.out.println("tagmatch " + fname + " proto " + proto + " type" + tags[i].getKind());
-				CCompletionProposal proposal;
-				proposal = new CCompletionProposal(fname, 
-												   region.getOffset(), 
-												   region.getLength(),
-												   getTagImage(kind), 
-												   fdisplay,
-												   3);
-				completions.add(proposal);
-
-				if(fdesc != null) {
-					proposal.setAdditionalProposalInfo(fdesc);
-				}
-				
-				if(fargs != null && fargs.length() > 0) {
-					proposal.setContextInformation(new ContextInformation(fname, fargs));
-				}
-			}
-		}
-	}
-*/
-	private Image getTagImage(int kind) {
-		switch (kind) {
-			case TagFlags.T_PROTOTYPE :
-				return CPluginImages.get(CPluginImages.IMG_OBJS_DECLARATION);
-			case TagFlags.T_CLASS :
-				return CPluginImages.get(CPluginImages.IMG_OBJS_CLASS);
-			case TagFlags.T_ENUM :
-			case TagFlags.T_VARIABLE :
-			case TagFlags.T_MEMBER :
-				return CPluginImages.get(CPluginImages.IMG_OBJS_FIELD);
-			case TagFlags.T_FUNCTION :
-				return CPluginImages.get(CPluginImages.IMG_OBJS_FUNCTION);
-			case TagFlags.T_STRUCT :
-				return CPluginImages.get(CPluginImages.IMG_OBJS_STRUCT);
-			case TagFlags.T_UNION :
-				return CPluginImages.get(CPluginImages.IMG_OBJS_UNION);
-			case TagFlags.T_MACRO :
-				return CPluginImages.get(CPluginImages.IMG_OBJS_MACRO);
-		}
-		return CPluginImages.get(CPluginImages.IMG_OBJS_FUNCTION);
-	}
-
 }
Index: src/org/eclipse/cdt/internal/ui/text/CCompletionProposal.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CCompletionProposal.java,v
retrieving revision 1.2
diff -u -r1.2 CCompletionProposal.java
--- src/org/eclipse/cdt/internal/ui/text/CCompletionProposal.java	24 Jun 2003 14:22:14 -0000	1.2
+++ src/org/eclipse/cdt/internal/ui/text/CCompletionProposal.java	19 Sep 2003 20:11:03 -0000
@@ -165,11 +165,11 @@
 		int     functionBracketIndex;
 		boolean isBeforeBracket;
 		String  replacementStringCopy = fReplacementString;
-
+		fReplacementLength = offset - fReplacementOffset;
 		//If just providing context information, then don't move the cursor
-		if(offset != (fReplacementOffset + fReplacementLength)) {
-			fCursorPosition = offset - fReplacementOffset; 
-		}
+//		if(offset != (fReplacementOffset + fReplacementLength)) {
+//			fCursorPosition = offset - fReplacementOffset; 
+//		}
 		
 		try {
 			functionBracketIndex = fReplacementString.indexOf("()");

Back to the top