Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[cdt-patch] Search modifications

core : 
- add function parameter information to search results

ui:
- modified Search result sorting to sort by offset if the label is the 
same for two items

-Andrew

Index: search/ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/search/ChangeLog,v
retrieving revision 1.13
diff -u -r1.13 ChangeLog
--- search/ChangeLog	7 Aug 2003 14:52:18 -0000	1.13
+++ search/ChangeLog	8 Aug 2003 14:34:35 -0000
@@ -1,3 +1,6 @@
+2003-08-08 Andrew Niefer
+	- add function parameter information to search results
+
 2003-08-06 Andrew Niefer
 	- Create OrPattern which matches for search if any of its constituent patterns matches
 	- modified MatchLocator to support the OrPattern
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.2
diff -u -r1.2 BasicSearchResultCollector.java
--- search/org/eclipse/cdt/core/search/BasicSearchResultCollector.java	1 Aug 2003 19:26:50 -0000	1.2
+++ search/org/eclipse/cdt/core/search/BasicSearchResultCollector.java	8 Aug 2003 14:34:35 -0000
@@ -14,13 +14,16 @@
 package org.eclipse.cdt.core.search;
 
 import java.util.HashSet;
+import java.util.Iterator;
 import java.util.Set;
 
 import org.eclipse.cdt.core.model.ICElement;
 import org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate;
 import org.eclipse.cdt.core.parser.ast.ASTAccessVisibility;
 import org.eclipse.cdt.core.parser.ast.ASTClassKind;
+import org.eclipse.cdt.core.parser.ast.ASTPointerOperator;
 import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier;
+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;
@@ -29,9 +32,12 @@
 import org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition;
 import org.eclipse.cdt.core.parser.ast.IASTOffsetableElement;
 import org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement;
+import org.eclipse.cdt.core.parser.ast.IASTParameterDeclaration;
 import org.eclipse.cdt.core.parser.ast.IASTQualifiedNameElement;
 import org.eclipse.cdt.core.parser.ast.IASTReference;
 import org.eclipse.cdt.core.parser.ast.IASTScope;
+import org.eclipse.cdt.core.parser.ast.IASTSimpleTypeSpecifier;
+import org.eclipse.cdt.core.parser.ast.IASTTypeSpecifier;
 import org.eclipse.cdt.core.parser.ast.IASTVariable;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.CoreException;
@@ -93,11 +99,79 @@
 			result.name = offsetable.getName();
 		}
 		
+		if( offsetable instanceof IASTFunction ){
+			result.name += getParameterString( (IASTFunction) offsetable );
+		}
+		
 		setElementInfo( result, offsetable );
 		
 		return result;
 	}
 
+
+	/**
+	 * @param function
+	 * @return
+	 */
+	private String getParameterString(IASTFunction function) {
+		if( function == null )
+			return "";
+		
+		String paramString = "(";
+			
+		Iterator iter = function.getParameters();
+		
+		boolean first = true;
+		while( iter.hasNext() ){
+			IASTParameterDeclaration param = (IASTParameterDeclaration) iter.next();
+			
+			if( !first ) paramString += ", ";
+			
+			IASTTypeSpecifier typeSpec = param.getTypeSpecifier();
+			if( param.isConst() )
+				paramString += "const ";
+
+			if( typeSpec instanceof IASTSimpleTypeSpecifier ){
+				paramString += ((IASTSimpleTypeSpecifier)typeSpec).getTypename();
+			} else if( typeSpec instanceof IASTOffsetableNamedElement ){
+				paramString += ((IASTOffsetableNamedElement)typeSpec).getName();
+			} else if( typeSpec instanceof IASTElaboratedTypeSpecifier ){
+				ASTClassKind kind = ((IASTElaboratedTypeSpecifier)typeSpec).getClassKind();
+				if( kind == ASTClassKind.CLASS ){
+					paramString += "class ";
+				} else if( kind == ASTClassKind.STRUCT ){
+					paramString += "struct ";
+				} else if( kind == ASTClassKind.ENUM ){
+					paramString += "enum ";
+				} else if( kind == ASTClassKind.UNION ){
+					paramString += "union ";
+				}
+				paramString += ((IASTElaboratedTypeSpecifier)typeSpec).getName();
+			}
+				
+			Iterator ptrs = param.getPointerOperators();
+			if( ptrs.hasNext() ) paramString += " ";
+			
+			while( ptrs.hasNext() ){
+				ASTPointerOperator ptr = (ASTPointerOperator)ptrs.next();
+				if( ptr == ASTPointerOperator.POINTER )
+					paramString += "*";
+				else if( ptr == ASTPointerOperator.REFERENCE )
+					paramString += "&";
+				else if( ptr == ASTPointerOperator.CONST_POINTER )
+					paramString += " const * ";
+				else if( ptr == ASTPointerOperator.VOLATILE_POINTER )
+					paramString += " volatile * ";
+					
+				ptr = ASTPointerOperator.POINTER;
+			}
+			
+			first = false;
+		}
+		
+		paramString += ")";
+		return paramString;
+	}
 
 	public boolean acceptMatch(IMatch match) throws CoreException {
 		if( !results.contains( match ) ){
Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui/ChangeLog,v
retrieving revision 1.133
diff -u -r1.133 ChangeLog
--- ChangeLog	1 Aug 2003 19:26:58 -0000	1.133
+++ ChangeLog	8 Aug 2003 14:37:10 -0000
@@ -1,3 +1,6 @@
+2003-08-08 Andrew Niefer
+	- modified Search result sorting to sort by offset if the label is the same for two items
+
 2003-08-01 Andrew Niefer
 	- Modified CSearchResultCollector to reflect changes in BasicSearchResultCollector, 
 	  acceptMatch will return false if the match was not accepted because it has already
Index: src/org/eclipse/cdt/internal/ui/search/CSearchMessages.properties
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/CSearchMessages.properties,v
retrieving revision 1.4
diff -u -r1.4 CSearchMessages.properties
--- src/org/eclipse/cdt/internal/ui/search/CSearchMessages.properties	15 Jul 2003 14:43:48 -0000	1.4
+++ src/org/eclipse/cdt/internal/ui/search/CSearchMessages.properties	8 Aug 2003 14:37:10 -0000
@@ -137,7 +137,8 @@
 CSearchOperation.pluralReadReferencesPostfix={0} - {1} Read References in {2}
 CSearchOperation.pluralWriteReferencesPostfix={0} - {1} Write References in {2}
 CSearchOperation.pluralImplementorsPostfix={0} - {1} Implementors in {2}
-CSearchOperation.pluralOccurrencesPostfix={0} - {1} Occurrences in {2}
+CSearchOperation.pluralOccurencesPostfix={0} - {1} Occurrences in {2}
+
 
 # The first argument will be replaced by the element name and the second one by the file name
 JavaSearchInFile.singularPostfix={0} - 1 Occurrence in {1}
Index: src/org/eclipse/cdt/internal/ui/search/ElementNameSorter.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/ElementNameSorter.java,v
retrieving revision 1.2
diff -u -r1.2 ElementNameSorter.java
--- src/org/eclipse/cdt/internal/ui/search/ElementNameSorter.java	29 Jul 2003 22:47:59 -0000	1.2
+++ src/org/eclipse/cdt/internal/ui/search/ElementNameSorter.java	8 Aug 2003 14:37:10 -0000
@@ -13,7 +13,8 @@
  */
 package org.eclipse.cdt.internal.ui.search;
 
-import org.eclipse.cdt.ui.*;
+import org.eclipse.cdt.ui.CSearchResultLabelProvider;
+import org.eclipse.core.resources.IMarker;
 import org.eclipse.jface.viewers.ILabelProvider;
 import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.jface.viewers.ViewerSorter;
@@ -32,11 +33,18 @@
 	public int compare( Viewer viewer, Object e1, Object e2 ){
 		String name1 = null, name2 = null;
 		
-		if (e1 instanceof ISearchResultViewEntry)
-			name1= _labelProvider.getText( e1 );
+		ISearchResultViewEntry entry1 = null;
+		ISearchResultViewEntry entry2 = null;
+		
+		if (e1 instanceof ISearchResultViewEntry){
+			name1 = _labelProvider.getText(e1);
+			entry1 = (ISearchResultViewEntry)e1;
+		}
 			
-		if (e2 instanceof ISearchResultViewEntry)
-			name2= _labelProvider.getText( e2 );
+		if (e2 instanceof ISearchResultViewEntry){
+			name2 = _labelProvider.getText(e2);
+			entry2 = (ISearchResultViewEntry)e2;
+		}
 			
 		if (name1 == null)
 			name1= ""; //$NON-NLS-1$
@@ -44,7 +52,23 @@
 		if (name2 == null)
 			name2= ""; //$NON-NLS-1$
 			
-		return getCollator().compare(name1, name2);
+		int compare = getCollator().compare( name1, name2 );
+		
+		if( compare == 0 ){
+			int startPos1 = -1;
+			int startPos2 = -1;
+			IMarker marker1 = entry1.getSelectedMarker();
+			IMarker marker2 = entry2.getSelectedMarker();
+
+			if (marker1 != null)
+				startPos1 = marker1.getAttribute( IMarker.CHAR_START, -1 );
+			if (marker2 != null)
+				startPos2 = marker2.getAttribute( IMarker.CHAR_START, -1 );
+			
+			compare = startPos1 - startPos2;
+		}
+		
+		return compare;
 	}
 
 	public boolean isSorterProperty( Object element, String property ){
Index: src/org/eclipse/cdt/internal/ui/search/ParentNameSorter.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/ParentNameSorter.java,v
retrieving revision 1.2
diff -u -r1.2 ParentNameSorter.java
--- src/org/eclipse/cdt/internal/ui/search/ParentNameSorter.java	29 Jul 2003 22:47:59 -0000	1.2
+++ src/org/eclipse/cdt/internal/ui/search/ParentNameSorter.java	8 Aug 2003 14:37:10 -0000
@@ -13,7 +13,8 @@
  */
 package org.eclipse.cdt.internal.ui.search;
 
-import org.eclipse.cdt.ui.*;
+import org.eclipse.cdt.ui.CSearchResultLabelProvider;
+import org.eclipse.core.resources.IMarker;
 import org.eclipse.jface.viewers.ILabelProvider;
 import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.jface.viewers.ViewerSorter;
@@ -33,11 +34,18 @@
 		String name1= null;
 		String name2= null;
 		
-		if (e1 instanceof ISearchResultViewEntry)
-			name1= _labelProvider.getText(e1);
+		ISearchResultViewEntry entry1 = null;
+		ISearchResultViewEntry entry2 = null;
+		
+		if (e1 instanceof ISearchResultViewEntry){
+			name1 = _labelProvider.getText(e1);
+			entry1 = (ISearchResultViewEntry)e1;
+		}
 			
-		if (e2 instanceof ISearchResultViewEntry)
-			name2= _labelProvider.getText(e2);
+		if (e2 instanceof ISearchResultViewEntry){
+			name2 = _labelProvider.getText(e2);
+			entry2 = (ISearchResultViewEntry)e2;
+		}
 			
 		if (name1 == null)
 			name1= ""; //$NON-NLS-1$
@@ -45,7 +53,23 @@
 		if (name2 == null)
 			name2= ""; //$NON-NLS-1$
 			
-		return getCollator().compare(name1, name2);
+		int compare = getCollator().compare( name1, name2 );
+		
+		if( compare == 0 ){
+			int startPos1 = -1;
+			int startPos2 = -1;
+			IMarker marker1 = entry1.getSelectedMarker();
+			IMarker marker2 = entry2.getSelectedMarker();
+
+			if (marker1 != null)
+				startPos1 = marker1.getAttribute( IMarker.CHAR_START, -1 );
+			if (marker2 != null)
+				startPos2 = marker2.getAttribute( IMarker.CHAR_START, -1 );
+			
+			compare = startPos1 - startPos2;
+		}
+		
+		return compare;
 	}
 
 	/*
Index: src/org/eclipse/cdt/internal/ui/search/PathNameSorter.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/PathNameSorter.java,v
retrieving revision 1.2
diff -u -r1.2 PathNameSorter.java
--- src/org/eclipse/cdt/internal/ui/search/PathNameSorter.java	29 Jul 2003 22:47:59 -0000	1.2
+++ src/org/eclipse/cdt/internal/ui/search/PathNameSorter.java	8 Aug 2003 14:37:10 -0000
@@ -13,10 +13,8 @@
  */
 package org.eclipse.cdt.internal.ui.search;
 
-import org.eclipse.cdt.ui.*;
+import org.eclipse.cdt.ui.CSearchResultLabelProvider;
 import org.eclipse.core.resources.IMarker;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
 import org.eclipse.jface.viewers.ILabelProvider;
 import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.jface.viewers.ViewerSorter;
@@ -55,18 +53,10 @@
 			
 		if( name2 == null )
 			name2 = ""; //$NON-NLS-1$
-			
-		IResource resource = null;
-		if( entry1 != null)
-			resource = entry1.getResource();
-			
-		if( resource != null && entry2 != null && resource == entry2.getResource() ) {
-
-			if( resource instanceof IProject || resource.getFileExtension().equalsIgnoreCase("jar") || resource.getFileExtension().equalsIgnoreCase("zip") ) //$NON-NLS-2$ //$NON-NLS-1$
-				// binary archives
-				return getCollator().compare(name1, name2);
-
-			// Sort by marker start position if resource is equal.			
+		
+		int compare = getCollator().compare( name1, name2 );
+		
+		if( compare == 0 ){
 			int startPos1 = -1;
 			int startPos2 = -1;
 			IMarker marker1 = entry1.getSelectedMarker();
@@ -76,11 +66,11 @@
 				startPos1 = marker1.getAttribute( IMarker.CHAR_START, -1 );
 			if (marker2 != null)
 				startPos2 = marker2.getAttribute( IMarker.CHAR_START, -1 );
-				
-			return startPos1 - startPos2;
+			
+			compare = startPos1 - startPos2;
 		}
 		
-		return getCollator().compare(name1, name2);
+		return compare;
 	}
 
 	/*

Back to the top