Skip to main content

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


This patch adds working copy search, macro search and combines the function and method search patterns into one.

- Bogdan

Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/ChangeLog,v
retrieving revision 1.52
diff -u -r1.52 ChangeLog
--- ChangeLog	11 Aug 2003 19:10:40 -0000	1.52
+++ ChangeLog	11 Aug 2003 21:22:25 -0000
@@ -1,3 +1,7 @@
+2003-08-11 Andrew Niefer
+	- Added testMacroPattern to OtherPatternTests
+	- Changed the function tests to use new function/method pattern
+	
 2003-08-11 Bogdan Gheorghe
 	- Added testMacros to IndexManagerTests
 	
Index: resources/search/classDecl.cpp
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/resources/search/classDecl.cpp,v
retrieving revision 1.4
diff -u -r1.4 classDecl.cpp
--- resources/search/classDecl.cpp	1 Aug 2003 19:26:55 -0000	1.4
+++ resources/search/classDecl.cpp	11 Aug 2003 21:22:25 -0000
@@ -1,5 +1,7 @@
 #include "include.h"
 
+#define FOO bar
+
 class Heal{};
 
 class A {
Index: search/org/eclipse/cdt/core/search/tests/FunctionMethodPatternTests.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/search/org/eclipse/cdt/core/search/tests/FunctionMethodPatternTests.java,v
retrieving revision 1.4
diff -u -r1.4 FunctionMethodPatternTests.java
--- search/org/eclipse/cdt/core/search/tests/FunctionMethodPatternTests.java	1 Aug 2003 19:26:55 -0000	1.4
+++ search/org/eclipse/cdt/core/search/tests/FunctionMethodPatternTests.java	11 Aug 2003 21:22:25 -0000
@@ -18,7 +18,6 @@
 import org.eclipse.cdt.core.search.ICSearchPattern;
 import org.eclipse.cdt.core.search.SearchEngine;
 import org.eclipse.cdt.internal.core.search.CharOperation;
-import org.eclipse.cdt.internal.core.search.matching.FunctionDeclarationPattern;
 import org.eclipse.cdt.internal.core.search.matching.MethodDeclarationPattern;
 
 /**
@@ -36,18 +35,17 @@
 		super(name);
 		// TODO Auto-generated constructor stub
 	}
-
+	
 	public void testFunctionIndexPrefix(){
 		ICSearchPattern pattern = SearchEngine.createSearchPattern( "c()", FUNCTION, DECLARATIONS, true );
-		assertTrue( pattern instanceof FunctionDeclarationPattern );
 		
-		FunctionDeclarationPattern functionPattern = (FunctionDeclarationPattern)pattern;
+		MethodDeclarationPattern functionPattern = (MethodDeclarationPattern)pattern;
 		assertEquals( CharOperation.compareWith( "functionDecl/c".toCharArray(), functionPattern.indexEntryPrefix() ), 0);
 		
-		functionPattern = (FunctionDeclarationPattern) SearchEngine.createSearchPattern( "rt*()", FUNCTION, DECLARATIONS, true );
+		functionPattern = (MethodDeclarationPattern) SearchEngine.createSearchPattern( "rt*()", FUNCTION, DECLARATIONS, true );
 		assertEquals( CharOperation.compareWith( "functionDecl/rt".toCharArray(), functionPattern.indexEntryPrefix() ), 0);
 				
-		functionPattern = (FunctionDeclarationPattern) SearchEngine.createSearchPattern( "Ac", FUNCTION, REFERENCES, false );
+		functionPattern = (MethodDeclarationPattern) SearchEngine.createSearchPattern( "Ac", FUNCTION, REFERENCES, false );
 		assertEquals( CharOperation.compareWith( "functionRef/".toCharArray(), functionPattern.indexEntryPrefix() ), 0);
 	}
 	
Index: search/org/eclipse/cdt/core/search/tests/OtherPatternTests.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/search/org/eclipse/cdt/core/search/tests/OtherPatternTests.java,v
retrieving revision 1.5
diff -u -r1.5 OtherPatternTests.java
--- search/org/eclipse/cdt/core/search/tests/OtherPatternTests.java	7 Aug 2003 14:52:10 -0000	1.5
+++ search/org/eclipse/cdt/core/search/tests/OtherPatternTests.java	11 Aug 2003 21:22:25 -0000
@@ -39,7 +39,7 @@
 		super(name);
 		// TODO Auto-generated constructor stub
 	}
-	
+		
 	public void testNamespaceIndexPrefix(){
 		ICSearchPattern pattern = SearchEngine.createSearchPattern( "A::B::c", NAMESPACE, DECLARATIONS, true );
 		assertTrue( pattern instanceof NamespaceDeclarationPattern );
@@ -169,4 +169,12 @@
 		assertEquals( matches.size(), 6 );
 	}
 
+	public void testMacroPattern(){
+		ICSearchPattern pattern = SearchEngine.createSearchPattern( "FOO", MACRO, DECLARATIONS, true );
+		
+		search( workspace, pattern, scope, resultCollector );
+		
+		Set matches = resultCollector.getSearchResults();
+		assertEquals( matches.size(), 1 );
+	}
 }
Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/ChangeLog,v
retrieving revision 1.121
diff -u -r1.121 ChangeLog
--- ChangeLog	11 Aug 2003 17:33:05 -0000	1.121
+++ ChangeLog	11 Aug 2003 21:21:29 -0000
@@ -1,3 +1,6 @@
+2003-08-11 Andrew Niefer
+	Added getSharedWorkingCopies to CCorePlugin.
+	
 2003-08-10 Sean Evoy
 	Fix for Bug 41274. Was not saving the library option properly because the value type 
 	of the option was not recognized.
Index: index/ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/index/ChangeLog,v
retrieving revision 1.10
diff -u -r1.10 ChangeLog
--- index/ChangeLog	11 Aug 2003 19:10:45 -0000	1.10
+++ index/ChangeLog	11 Aug 2003 21:21:29 -0000
@@ -1,5 +1,6 @@
 2003-08-11 Bogdan Gheorghe
 	- Added macro declarations to the index
+	- Added macro prefix to AbstractIndexer
 	
 2003-08-07 Bogdan Gheorghe
 	- Added shutdown cleanup routine in IndexManager
Index: index/org/eclipse/cdt/internal/core/search/indexing/AbstractIndexer.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/AbstractIndexer.java,v
retrieving revision 1.10
diff -u -r1.10 AbstractIndexer.java
--- index/org/eclipse/cdt/internal/core/search/indexing/AbstractIndexer.java	11 Aug 2003 19:10:45 -0000	1.10
+++ index/org/eclipse/cdt/internal/core/search/indexing/AbstractIndexer.java	11 Aug 2003 21:21:30 -0000
@@ -508,7 +508,26 @@
 		}
 		
 		return result;
-	}   
+	}
+
+	/**
+	 * @param _limitTo
+	 * @param simpleName
+	 * @param _matchMode
+	 * @param _caseSensitive
+	 * @return
+	 */
+	public static final char[] bestMacroPrefix( LimitTo limitTo, char[] macroName, int matchMode, boolean isCaseSenstive ){
+		//since we only index macro declarations we already know the prefix
+		char [] prefix = null;
+		if( limitTo == DECLARATIONS ){
+			prefix = MACRO_DECL;
+		} else {
+			return null;
+		}
+		
+		return bestPrefix( prefix,  (char)0, macroName, null, matchMode, isCaseSenstive );	
+	}
 
 }
 
Index: model/org/eclipse/cdt/internal/core/model/CModelManager.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelManager.java,v
retrieving revision 1.31
diff -u -r1.31 CModelManager.java
--- model/org/eclipse/cdt/internal/core/model/CModelManager.java	11 Aug 2003 13:42:47 -0000	1.31
+++ model/org/eclipse/cdt/internal/core/model/CModelManager.java	11 Aug 2003 21:21:30 -0000
@@ -107,6 +107,8 @@
 	public static final String [] sourceExtensions = {"c", "cxx", "cc", "C", "cpp"};
 
 	public static final String [] headerExtensions = {"h", "hh", "hpp", "H"};
+	
+	public static final IWorkingCopy[] NoWorkingCopy = new IWorkingCopy[0];
 
 	static CModelManager factory = null;
 	
Index: search/ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/search/ChangeLog,v
retrieving revision 1.15
diff -u -r1.15 ChangeLog
--- search/ChangeLog	11 Aug 2003 13:48:35 -0000	1.15
+++ search/ChangeLog	11 Aug 2003 21:21:30 -0000
@@ -1,3 +1,10 @@
+2003-08-11 Andrew Niefer
+	- Added Macro ICSearchConstant
+	- Added acceptMacro to IIndexSearchRequestor and PathCollector
+	- Added MacroDeclaration Pattern
+	- Rolled method and function patterns into one method pattern
+	- Added WorkingCopy support to search
+	
 2003-08-08 Bogdan Gheorghe
 	- Added CreateSearchScope to create a search scope out of
 	  CElements
Index: search/org/eclipse/cdt/core/search/ICSearchConstants.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/search/org/eclipse/cdt/core/search/ICSearchConstants.java,v
retrieving revision 1.4
diff -u -r1.4 ICSearchConstants.java
--- search/org/eclipse/cdt/core/search/ICSearchConstants.java	15 Jul 2003 14:43:50 -0000	1.4
+++ search/org/eclipse/cdt/core/search/ICSearchConstants.java	11 Aug 2003 21:21:30 -0000
@@ -93,6 +93,7 @@
 	 */
 	public static final SearchFor UNION = new SearchFor( 9 );
 	
+	public static final SearchFor MACRO = new SearchFor( 10 );
 	
 	/* Nature of match */
 	
Index: search/org/eclipse/cdt/internal/core/search/IIndexSearchRequestor.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/search/org/eclipse/cdt/internal/core/search/IIndexSearchRequestor.java,v
retrieving revision 1.2
diff -u -r1.2 IIndexSearchRequestor.java
--- search/org/eclipse/cdt/internal/core/search/IIndexSearchRequestor.java	25 Jul 2003 15:21:57 -0000	1.2
+++ search/org/eclipse/cdt/internal/core/search/IIndexSearchRequestor.java	11 Aug 2003 21:21:31 -0000
@@ -80,4 +80,6 @@
 
 void acceptFieldDeclaration(String resourcePath, char[] simpleTypeName, char[][] enclosingTypeNames);
 
+void acceptMacroDeclaration(String resourcePath, char[] decodedSimpleName);
+
 }
Index: search/org/eclipse/cdt/internal/core/search/PathCollector.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/search/org/eclipse/cdt/internal/core/search/PathCollector.java,v
retrieving revision 1.2
diff -u -r1.2 PathCollector.java
--- search/org/eclipse/cdt/internal/core/search/PathCollector.java	25 Jul 2003 15:21:57 -0000	1.2
+++ search/org/eclipse/cdt/internal/core/search/PathCollector.java	11 Aug 2003 21:21:31 -0000
@@ -152,6 +152,10 @@
 		}
 		return result;
 	}
+	
+	public void acceptMacroDeclaration(String resourcePath, char[] decodedSimpleName) {
+		this.paths.add(resourcePath);
+	}
 
 	
 
Index: search/org/eclipse/cdt/internal/core/search/matching/CSearchPattern.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/search/org/eclipse/cdt/internal/core/search/matching/CSearchPattern.java,v
retrieving revision 1.13
diff -u -r1.13 CSearchPattern.java
--- search/org/eclipse/cdt/internal/core/search/matching/CSearchPattern.java	7 Aug 2003 14:52:18 -0000	1.13
+++ search/org/eclipse/cdt/internal/core/search/matching/CSearchPattern.java	11 Aug 2003 21:21:31 -0000
@@ -78,16 +78,16 @@
 		CSearchPattern pattern = null;
 		if( searchFor == TYPE || searchFor == CLASS || searchFor == STRUCT || searchFor == ENUM || searchFor == UNION ){
 			pattern = createClassPattern( patternString, searchFor, limitTo, matchMode, caseSensitive );
-		} else if ( searchFor == METHOD ){
-			pattern = createMethodPattern( patternString, limitTo, matchMode, caseSensitive );
+		} else if ( searchFor == METHOD || searchFor == FUNCTION ){
+			pattern = createMethodPattern( patternString, searchFor, limitTo, matchMode, caseSensitive );
 		} else if ( searchFor == FIELD){
 			pattern = createFieldPattern( patternString, limitTo, matchMode, caseSensitive );
 		} else if ( searchFor == VAR ){
 			pattern = createVariablePattern( patternString, limitTo, matchMode, caseSensitive );
-		} else if ( searchFor == FUNCTION ){
-			pattern = createFunctionPattern( patternString, limitTo, matchMode, caseSensitive );
 		} else if ( searchFor == NAMESPACE ){
 			pattern = createNamespacePattern( patternString, limitTo, matchMode, caseSensitive );
+		} else if ( searchFor == MACRO ){
+			pattern = createMacroPattern( patternString, limitTo, matchMode, caseSensitive );
 		}
 	
 		return pattern;
@@ -100,6 +100,19 @@
 	 * @param caseSensitive
 	 * @return
 	 */
+	private static CSearchPattern createMacroPattern(String patternString, LimitTo limitTo, int matchMode, boolean caseSensitive) {
+		if( limitTo != DECLARATIONS )
+			return null;
+			
+		return new MacroDeclarationPattern( patternString.toCharArray(), matchMode, limitTo, caseSensitive );	}
+
+	/**
+	 * @param patternString
+	 * @param limitTo
+	 * @param matchMode
+	 * @param caseSensitive
+	 * @return
+	 */
 	private static CSearchPattern createNamespacePattern(String patternString, LimitTo limitTo, int matchMode, boolean caseSensitive) {
 		if( limitTo == ALL_OCCURRENCES ){
 			OrPattern orPattern = new OrPattern();
@@ -117,38 +130,38 @@
 		return new NamespaceDeclarationPattern( name, (char[][]) list.toArray( qualifications ), matchMode, limitTo, caseSensitive );
 	}
 
-	/**
-	 * @param patternString
-	 * @param limitTo
-	 * @param matchMode
-	 * @param caseSensitive
-	 * @return
-	 */
-	private static CSearchPattern createFunctionPattern(String patternString, LimitTo limitTo, int matchMode, boolean caseSensitive) {
-		if( limitTo == ALL_OCCURRENCES ){
-			OrPattern orPattern = new OrPattern();
-			orPattern.addPattern( createFunctionPattern( patternString, DECLARATIONS, matchMode, caseSensitive ) );
-			orPattern.addPattern( createFunctionPattern( patternString, REFERENCES, matchMode, caseSensitive ) );
-			orPattern.addPattern( createFunctionPattern( patternString, DEFINITIONS, matchMode, caseSensitive ) );
-			return orPattern;
-		}
-		
-		int index = patternString.indexOf( '(' );
-		
-		String paramString = ( index == -1 ) ? "" : patternString.substring( index );
-		
-		String nameString = ( index == -1 ) ? patternString : patternString.substring( 0, index );
-				
-		IScanner scanner = ParserFactory.createScanner( new StringReader( paramString ), "TEXT", new ScannerInfo(), ParserMode.QUICK_PARSE, null );
-				
-		LinkedList params = scanForParameters( scanner );
-				
-		char [] name = nameString.toCharArray();
-		char [][] parameters = new char [0][];
-		parameters = (char[][])params.toArray( parameters );
-				
-		return new FunctionDeclarationPattern( name, parameters, matchMode, limitTo, caseSensitive );
-	}
+//	/**
+//	 * @param patternString
+//	 * @param limitTo
+//	 * @param matchMode
+//	 * @param caseSensitive
+//	 * @return
+//	 */
+//	private static CSearchPattern createFunctionPattern(String patternString, LimitTo limitTo, int matchMode, boolean caseSensitive) {
+//		if( limitTo == ALL_OCCURRENCES ){
+//			OrPattern orPattern = new OrPattern();
+//			orPattern.addPattern( createFunctionPattern( patternString, DECLARATIONS, matchMode, caseSensitive ) );
+//			orPattern.addPattern( createFunctionPattern( patternString, REFERENCES, matchMode, caseSensitive ) );
+//			orPattern.addPattern( createFunctionPattern( patternString, DEFINITIONS, matchMode, caseSensitive ) );
+//			return orPattern;
+//		}
+//		
+//		int index = patternString.indexOf( '(' );
+//		
+//		String paramString = ( index == -1 ) ? "" : patternString.substring( index );
+//		
+//		String nameString = ( index == -1 ) ? patternString : patternString.substring( 0, index );
+//				
+//		IScanner scanner = ParserFactory.createScanner( new StringReader( paramString ), "TEXT", new ScannerInfo(), ParserMode.QUICK_PARSE, null );
+//				
+//		LinkedList params = scanForParameters( scanner );
+//				
+//		char [] name = nameString.toCharArray();
+//		char [][] parameters = new char [0][];
+//		parameters = (char[][])params.toArray( parameters );
+//				
+//		return new MethodDeclarationPattern( name, parameters, matchMode, FUNCTION, limitTo, caseSensitive );
+//	}
 
 	/**
 	 * @param patternString
@@ -198,13 +211,13 @@
 	 * @param caseSensitive
 	 * @return
 	 */
-	private static CSearchPattern createMethodPattern(String patternString, LimitTo limitTo, int matchMode, boolean caseSensitive) {
+	private static CSearchPattern createMethodPattern(String patternString, SearchFor searchFor, LimitTo limitTo, int matchMode, boolean caseSensitive) {
 
 		if( limitTo == ALL_OCCURRENCES ){
 			OrPattern orPattern = new OrPattern();
-			orPattern.addPattern( createMethodPattern( patternString, DECLARATIONS, matchMode, caseSensitive ) );
-			orPattern.addPattern( createMethodPattern( patternString, REFERENCES, matchMode, caseSensitive ) );
-			orPattern.addPattern( createMethodPattern( patternString, DEFINITIONS, matchMode, caseSensitive ) );
+			orPattern.addPattern( createMethodPattern( patternString, searchFor, DECLARATIONS, matchMode, caseSensitive ) );
+			orPattern.addPattern( createMethodPattern( patternString, searchFor, REFERENCES, matchMode, caseSensitive ) );
+			orPattern.addPattern( createMethodPattern( patternString, searchFor, DEFINITIONS, matchMode, caseSensitive ) );
 			return orPattern;
 		}
 				
@@ -226,7 +239,7 @@
 		char [][] parameters = new char [0][];
 		parameters = (char[][])params.toArray( parameters );
 		
-		return new MethodDeclarationPattern( name, qualifications, parameters, matchMode, limitTo, caseSensitive );
+		return new MethodDeclarationPattern( name, qualifications, parameters, matchMode, searchFor, limitTo, caseSensitive );
 	}
 
 	/**
Index: search/org/eclipse/cdt/internal/core/search/matching/FunctionDeclarationPattern.java
===================================================================
RCS file: search/org/eclipse/cdt/internal/core/search/matching/FunctionDeclarationPattern.java
diff -N search/org/eclipse/cdt/internal/core/search/matching/FunctionDeclarationPattern.java
--- search/org/eclipse/cdt/internal/core/search/matching/FunctionDeclarationPattern.java	7 Aug 2003 14:52:18 -0000	1.8
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,159 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003 IBM 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 Corp. - Rational Software - initial implementation
- ******************************************************************************/
-/*
- * Created on Jul 11, 2003
- */
-package org.eclipse.cdt.internal.core.search.matching;
-
-import java.io.IOException;
-import java.util.Iterator;
-
-import org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate;
-import org.eclipse.cdt.core.parser.ast.IASTFunction;
-import org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement;
-import org.eclipse.cdt.core.parser.ast.IASTParameterDeclaration;
-import org.eclipse.cdt.core.parser.ast.IASTSimpleTypeSpecifier;
-import org.eclipse.cdt.core.parser.ast.IASTTypeSpecifier;
-import org.eclipse.cdt.core.search.ICSearchScope;
-import org.eclipse.cdt.internal.core.index.IEntryResult;
-import org.eclipse.cdt.internal.core.index.impl.IndexInput;
-import org.eclipse.cdt.internal.core.index.impl.IndexedFile;
-import org.eclipse.cdt.internal.core.search.CharOperation;
-import org.eclipse.cdt.internal.core.search.IIndexSearchRequestor;
-import org.eclipse.cdt.internal.core.search.indexing.AbstractIndexer;
-
-/**
- * @author aniefer
- *
- * To change the template for this generated type comment go to
- * Window>Preferences>Java>Code Generation>Code and Comments
- */
-public class FunctionDeclarationPattern extends CSearchPattern {
-
-	protected char[] decodedSimpleName;
-	protected char[] simpleName;
-	
-	protected char[][] parameterNames;
-
-	
-
-	public FunctionDeclarationPattern(char[] name, char [][] params, int matchMode, LimitTo limitTo, boolean caseSensitive) {
-		super( matchMode, caseSensitive, limitTo );
-		
-		simpleName = name;
-		parameterNames = params;
-	}
-	
-	/* (non-Javadoc)
-	 * @see org.eclipse.cdt.core.search.ICSearchPattern#matchLevel(org.eclipse.cdt.core.parser.ast.IASTOffsetableElement)
-	 */
-	public int matchLevel(ISourceElementCallbackDelegate node, LimitTo limit ) {
-		if( !( node instanceof IASTFunction ) || !canAccept( limit ) )
-			return IMPOSSIBLE_MATCH;
-			
-		IASTFunction function = (IASTFunction) node;
-		String nodeName = function.getName();
-		
-		//check name, if simpleName == null, its treated the same as "*"	
-		if( simpleName != null && !matchesName( simpleName, nodeName.toCharArray() ) ){
-			return IMPOSSIBLE_MATCH;
-		}
-		
-		if( parameterNames != null && 
-		    parameterNames.length > 0  && 
-		    parameterNames[0].length > 0
-		    ){
-			Iterator params = function.getParameters();
-			
-			for( int i = 0; i < parameterNames.length; i++ ){
-			
-				//if this function doesn't have this many parameters, it is not a match.
-				//or if this function has a parameter, but parameterNames only has null.
-				if( !params.hasNext() || parameterNames[ i ] == null )
-					return IMPOSSIBLE_MATCH;
-					
-				IASTParameterDeclaration param = (IASTParameterDeclaration) params.next();
-				IASTTypeSpecifier typeSpec = param.getTypeSpecifier();
-				String paramName = null;
-				if( typeSpec instanceof IASTSimpleTypeSpecifier ){
-					paramName = ((IASTSimpleTypeSpecifier)typeSpec).getTypename();
-				} else if( typeSpec instanceof IASTOffsetableNamedElement ){
-					paramName = ((IASTOffsetableNamedElement)typeSpec).getName();
-				} else {
-					//???
-					return IMPOSSIBLE_MATCH;
-				}
-				
-				if( !matchesName( parameterNames[i], paramName.toCharArray() ) )
-					return IMPOSSIBLE_MATCH;
-			}
-			//if this function still has more parameters, it is not a match
-			if( params.hasNext() )
-				return IMPOSSIBLE_MATCH;
-		}
-		
-		return ACCURATE_MATCH;
-	}
-
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.cdt.internal.core.search.matching.CSearchPattern#feedIndexRequestor(org.eclipse.cdt.internal.core.search.IIndexSearchRequestor, int, int[], org.eclipse.cdt.internal.core.index.impl.IndexInput, org.eclipse.cdt.core.search.ICSearchScope)
-	 */
-	public void feedIndexRequestor(IIndexSearchRequestor requestor, int detailLevel, int[] references, IndexInput input, ICSearchScope scope) throws IOException {
-		for (int i = 0, max = references.length; i < max; i++) {
-			IndexedFile file = input.getIndexedFile(references[i]);
-			String path;
-			if (file != null && scope.encloses(path =file.getPath())) {
-				requestor.acceptFunctionDeclaration(path, decodedSimpleName, parameterNames.length);
-			}
-		}
-	}
-
-
-	protected void resetIndexInfo(){
-		decodedSimpleName = null;
-	}
-	
-	/* (non-Javadoc)
-	 * @see org.eclipse.cdt.internal.core.search.matching.CSearchPattern#decodeIndexEntry(org.eclipse.cdt.internal.core.index.IEntryResult)
-	 */
-	protected void decodeIndexEntry(IEntryResult entryResult) {
-		char[] word = entryResult.getWord();
-		int size = word.length;
-		
-		int firstSlash = CharOperation.indexOf( SEPARATOR, word, 0 );
-		
-		int slash = CharOperation.indexOf( SEPARATOR, word, firstSlash + 1 );
-		
-		this.decodedSimpleName = CharOperation.subarray(word, firstSlash + 1, slash);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.cdt.internal.core.search.matching.CSearchPattern#indexEntryPrefix()
-	 */
-	public char[] indexEntryPrefix() {
-		return AbstractIndexer.bestFunctionPrefix( _limitTo, simpleName, _matchMode, _caseSensitive );
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.cdt.internal.core.search.matching.CSearchPattern#matchIndexEntry()
-	 */
-	protected boolean matchIndexEntry() {
-		/* check simple name matches */
-		if (simpleName != null){
-			if( ! matchesName( simpleName, decodedSimpleName ) ){
-				return false; 
-			}
-		}
-		
-		return true;
-	}
-}
Index: search/org/eclipse/cdt/internal/core/search/matching/MacroDeclarationPattern.java
===================================================================
RCS file: search/org/eclipse/cdt/internal/core/search/matching/MacroDeclarationPattern.java
diff -N search/org/eclipse/cdt/internal/core/search/matching/MacroDeclarationPattern.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ search/org/eclipse/cdt/internal/core/search/matching/MacroDeclarationPattern.java	11 Aug 2003 21:21:31 -0000
@@ -0,0 +1,123 @@
+/*******************************************************************************
+ * Copyright (c) 2003 IBM 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 Corp. - Rational Software - initial implementation
+ ******************************************************************************/
+/*
+ * Created on Aug 8, 2003
+ */
+package org.eclipse.cdt.internal.core.search.matching;
+
+import java.io.IOException;
+
+import org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate;
+import org.eclipse.cdt.core.parser.ast.IASTMacro;
+import org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement;
+import org.eclipse.cdt.core.search.ICSearchScope;
+import org.eclipse.cdt.internal.core.index.IEntryResult;
+import org.eclipse.cdt.internal.core.index.impl.IndexInput;
+import org.eclipse.cdt.internal.core.index.impl.IndexedFile;
+import org.eclipse.cdt.internal.core.search.CharOperation;
+import org.eclipse.cdt.internal.core.search.IIndexSearchRequestor;
+import org.eclipse.cdt.internal.core.search.indexing.AbstractIndexer;
+
+/**
+ * @author aniefer
+ *
+ * To change the template for this generated type comment go to
+ * Window>Preferences>Java>Code Generation>Code and Comments
+ */
+public class MacroDeclarationPattern extends CSearchPattern {
+
+	/**
+	 * @param name
+	 * @param matchMode
+	 * @param limitTo
+	 * @param caseSensitive
+	 */
+	public MacroDeclarationPattern(char[] name, int matchMode, LimitTo limitTo, boolean caseSensitive) {
+		super( matchMode, caseSensitive, limitTo );
+		
+		simpleName = name;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.core.search.ICSearchPattern#matchLevel(org.eclipse.cdt.core.parser.ast.IASTOffsetableElement)
+	 */
+	public int matchLevel(ISourceElementCallbackDelegate node, LimitTo limit ) {
+		if( !(node instanceof IASTMacro) || !canAccept( limit ) ){
+			return IMPOSSIBLE_MATCH;
+		}
+		
+		String nodeName = ((IASTOffsetableNamedElement)node).getName();
+		
+		//check name, if simpleName == null, its treated the same as "*"	
+		if( simpleName != null && !matchesName( simpleName, nodeName.toCharArray() ) ){
+			return IMPOSSIBLE_MATCH;
+		}
+		
+		return ACCURATE_MATCH;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.internal.core.search.matching.CSearchPattern#feedIndexRequestor(org.eclipse.cdt.internal.core.search.IIndexSearchRequestor, int, int[], org.eclipse.cdt.internal.core.index.impl.IndexInput, org.eclipse.cdt.core.search.ICSearchScope)
+	 */
+	public void feedIndexRequestor(IIndexSearchRequestor requestor, int detailLevel, int[] references, IndexInput input, ICSearchScope scope) throws IOException {
+		for (int i = 0, max = references.length; i < max; i++) {
+			IndexedFile file = input.getIndexedFile(references[i]);
+			String path;
+			if (file != null && scope.encloses(path =file.getPath())) {
+				requestor.acceptMacroDeclaration(path, decodedSimpleName);
+			}
+		}	
+	}
+
+	protected void resetIndexInfo(){
+		decodedSimpleName = null;
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.internal.core.search.matching.CSearchPattern#decodeIndexEntry(org.eclipse.cdt.internal.core.index.IEntryResult)
+	 */
+	protected void decodeIndexEntry(IEntryResult entryResult) {
+		char[] word = entryResult.getWord();
+		int size = word.length;
+		
+		int firstSlash = CharOperation.indexOf( SEPARATOR, word, 0 );
+	
+		this.decodedSimpleName = CharOperation.subarray(word, firstSlash + 1, -1);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.internal.core.search.matching.CSearchPattern#indexEntryPrefix()
+	 */
+	public char[] indexEntryPrefix() {
+		return AbstractIndexer.bestMacroPrefix(
+						_limitTo,
+						simpleName,
+						_matchMode, _caseSensitive
+		);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.internal.core.search.matching.CSearchPattern#matchIndexEntry()
+	 */
+	protected boolean matchIndexEntry() {
+		/* check simple name matches */
+		if (simpleName != null){
+			if( ! matchesName( simpleName, decodedSimpleName ) ){
+				return false; 
+			}
+		}
+		
+		return true;
+	}
+	
+	protected char [] simpleName;
+	protected char [] decodedSimpleName;
+}
Index: search/org/eclipse/cdt/internal/core/search/matching/MatchLocator.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/search/org/eclipse/cdt/internal/core/search/matching/MatchLocator.java,v
retrieving revision 1.17
diff -u -r1.17 MatchLocator.java
--- search/org/eclipse/cdt/internal/core/search/matching/MatchLocator.java	7 Aug 2003 14:52:18 -0000	1.17
+++ search/org/eclipse/cdt/internal/core/search/matching/MatchLocator.java	11 Aug 2003 21:21:31 -0000
@@ -13,6 +13,7 @@
  */
 package org.eclipse.cdt.internal.core.search.matching;
 
+import java.io.CharArrayReader;
 import java.io.FileNotFoundException;
 import java.io.FileReader;
 import java.io.InputStreamReader;
@@ -302,24 +303,26 @@
 				IWorkingCopy workingCopy = (IWorkingCopy)wcPaths.get( pathString );
 				
 				if( workingCopy != null ){
-					currentResource = workingCopy.getOriginalElement().getResource();
+					reader = new CharArrayReader( workingCopy.getContents() );
+					currentResource = workingCopy.getResource();
+					realPath = currentResource.getLocation();
 				} else {
 					currentResource = workspaceRoot.findMember( pathString, true );
-				}
-			
-				try{
-					if( currentResource == null ){
-						IPath path = new Path( pathString );
-						IFile file = workspaceRoot.getFile( path );
-						file.createLink( path, 0, null );
+					
+					try{
+						if( currentResource == null ){
+							IPath path = new Path( pathString );
+							IFile file = workspaceRoot.getFile( path );
+							file.createLink( path, 0, null );
+						}
+						if( currentResource != null && currentResource instanceof IFile ){
+							IFile file = (IFile) currentResource;
+							reader = new InputStreamReader( file.getContents() );
+							realPath = currentResource.getLocation();
+						} else continue;
+					} catch ( CoreException e ){
+						continue;
 					}
-					if( currentResource != null && currentResource instanceof IFile ){
-						IFile file = (IFile) currentResource;
-						reader = new InputStreamReader( file.getContents() );
-						realPath = currentResource.getLocation();
-					} else continue;
-				} catch ( CoreException e ){
-					continue;
 				}
 			} else {
 				IPath path = new Path( pathString );
Index: search/org/eclipse/cdt/internal/core/search/matching/MethodDeclarationPattern.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/search/org/eclipse/cdt/internal/core/search/matching/MethodDeclarationPattern.java,v
retrieving revision 1.6
diff -u -r1.6 MethodDeclarationPattern.java
--- search/org/eclipse/cdt/internal/core/search/matching/MethodDeclarationPattern.java	7 Aug 2003 14:52:18 -0000	1.6
+++ search/org/eclipse/cdt/internal/core/search/matching/MethodDeclarationPattern.java	11 Aug 2003 21:21:31 -0000
@@ -14,9 +14,16 @@
 package org.eclipse.cdt.internal.core.search.matching;
 
 import java.io.IOException;
+import java.util.Iterator;
 
 import org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate;
-import org.eclipse.cdt.core.parser.ast.*;
+import org.eclipse.cdt.core.parser.ast.IASTFunction;
+import org.eclipse.cdt.core.parser.ast.IASTMethod;
+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.IASTSimpleTypeSpecifier;
+import org.eclipse.cdt.core.parser.ast.IASTTypeSpecifier;
 import org.eclipse.cdt.core.search.ICSearchScope;
 import org.eclipse.cdt.internal.core.index.IEntryResult;
 import org.eclipse.cdt.internal.core.index.impl.IndexInput;
@@ -31,45 +38,102 @@
  * To change the template for this generated type comment go to
  * Window>Preferences>Java>Code Generation>Code and Comments
  */
-public class MethodDeclarationPattern extends FunctionDeclarationPattern {
-
-	private char[][] decodedQualifications;
-
+public class MethodDeclarationPattern extends CSearchPattern {
 
+	private SearchFor searchFor;
+	
+	private char[][] parameterNames;
+	private char[]   simpleName;
 	private char[][] qualifications;
 
+	private char[]   decodedSimpleName;
+	private char[][] decodedQualifications;
+
+	public MethodDeclarationPattern(char[] name, char[][] qual, char [][] params, int matchMode, SearchFor search, LimitTo limitTo, boolean caseSensitive) {
+		//super( name, params, matchMode, limitTo, caseSensitive );
+		super( matchMode, caseSensitive, limitTo );
 
-	public MethodDeclarationPattern(char[] name, char[][] qual, char [][] params, int matchMode, LimitTo limitTo, boolean caseSensitive) {
-		super( name, params, matchMode, limitTo, caseSensitive );
 		qualifications = qual;
+		simpleName = name;
+		parameterNames = params;
+		
+		searchFor = search;
 	}
 
 
 	public int matchLevel(ISourceElementCallbackDelegate node, LimitTo limit ) {
-		if( !(node instanceof IASTMethod) || !canAccept( limit ) ){
+		if( node instanceof IASTMethod ){
+			if( searchFor != METHOD || !canAccept( limit ) ){
+				return IMPOSSIBLE_MATCH;
+			}
+		} else if ( node instanceof IASTFunction ){
+			if( searchFor != FUNCTION || !canAccept( limit ) ){
+				return IMPOSSIBLE_MATCH;
+			}
+		} else {
 			return IMPOSSIBLE_MATCH;
 		}
-		
-		if( super.matchLevel( node, limit ) == IMPOSSIBLE_MATCH ){
+
+		IASTFunction function = (IASTFunction) node;
+		String nodeName = function.getName();
+
+		//check name, if simpleName == null, its treated the same as "*"	
+		if( simpleName != null && !matchesName( simpleName, nodeName.toCharArray() ) ){
 			return IMPOSSIBLE_MATCH;
 		}
-		
+
 		//create char[][] out of full name, 
 		String [] fullName = ((IASTQualifiedNameElement) node).getFullyQualifiedName();
 		char [][] qualName = new char [ fullName.length - 1 ][];
 		for( int i = 0; i < fullName.length - 1; i++ ){
 			qualName[i] = fullName[i].toCharArray();
 		}
+		
 		//check containing scopes
 		if( !matchQualifications( qualifications, qualName ) ){
 			return IMPOSSIBLE_MATCH;
 		}
 		
+		//parameters
+		if( parameterNames != null && parameterNames.length > 0  &&	parameterNames[0].length > 0 ){
+			Iterator params = function.getParameters();
+			
+			for( int i = 0; i < parameterNames.length; i++ ){
+			
+				//if this function doesn't have this many parameters, it is not a match.
+				//or if this function has a parameter, but parameterNames only has null.
+				if( !params.hasNext() || parameterNames[ i ] == null )
+					return IMPOSSIBLE_MATCH;
+					
+				IASTParameterDeclaration param = (IASTParameterDeclaration) params.next();
+				IASTTypeSpecifier typeSpec = param.getTypeSpecifier();
+				String paramName = null;
+				if( typeSpec instanceof IASTSimpleTypeSpecifier ){
+					paramName = ((IASTSimpleTypeSpecifier)typeSpec).getTypename();
+				} else if( typeSpec instanceof IASTOffsetableNamedElement ){
+					paramName = ((IASTOffsetableNamedElement)typeSpec).getName();
+				} else {
+					//???
+					return IMPOSSIBLE_MATCH;
+				}
+				
+				if( !matchesName( parameterNames[i], paramName.toCharArray() ) )
+					return IMPOSSIBLE_MATCH;
+			}
+			//if this function still has more parameters, it is not a match
+			if( params.hasNext() )
+				return IMPOSSIBLE_MATCH;
+		}
+		
 		return ACCURATE_MATCH;
 	}
 	
 	public char[] indexEntryPrefix() {
-		return AbstractIndexer.bestMethodPrefix( _limitTo, simpleName, qualifications, _matchMode, _caseSensitive );
+		if( searchFor == FUNCTION )
+			return AbstractIndexer.bestFunctionPrefix( _limitTo, simpleName, _matchMode, _caseSensitive );
+		else if( searchFor == METHOD )
+			return AbstractIndexer.bestMethodPrefix( _limitTo, simpleName, qualifications, _matchMode, _caseSensitive );
+		else return null;
 	}
 	
 	protected void resetIndexInfo(){
@@ -116,7 +180,10 @@
 			IndexedFile file = input.getIndexedFile(references[i]);
 			String path;
 			if (file != null && scope.encloses(path =file.getPath())) {
-				requestor.acceptMethodDeclaration(path, decodedSimpleName, parameterNames.length, decodedQualifications);
+				if( searchFor == METHOD )
+					requestor.acceptMethodDeclaration(path, decodedSimpleName, parameterNames.length, decodedQualifications);
+				else if ( searchFor == FUNCTION )
+					requestor.acceptFunctionDeclaration(path, decodedSimpleName, parameterNames.length);
 			}
 		}
 	}
Index: src/org/eclipse/cdt/core/CCorePlugin.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CCorePlugin.java,v
retrieving revision 1.21
diff -u -r1.21 CCorePlugin.java
--- src/org/eclipse/cdt/core/CCorePlugin.java	24 Jul 2003 14:15:07 -0000	1.21
+++ src/org/eclipse/cdt/core/CCorePlugin.java	11 Aug 2003 21:21:32 -0000
@@ -6,18 +6,23 @@
  */
 
 import java.text.MessageFormat;
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-import java.util.HashSet;
+import java.util.Collection;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.Iterator;
+import java.util.Map;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
 
 import org.eclipse.cdt.core.index.IndexModel;
 import org.eclipse.cdt.core.model.CoreModel;
 import org.eclipse.cdt.core.resources.IConsole;
 import org.eclipse.cdt.internal.core.CDescriptorManager;
 import org.eclipse.cdt.internal.core.CPathEntry;
+import org.eclipse.cdt.internal.core.model.BufferManager;
 import org.eclipse.cdt.internal.core.model.CModelManager;
+import org.eclipse.cdt.internal.core.model.IBufferFactory;
+import org.eclipse.cdt.internal.core.model.IWorkingCopy;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IProjectDescription;
 import org.eclipse.core.resources.IWorkspace;
@@ -111,6 +116,29 @@
 		}
 	}
 
+	/**
+	 * Answers the shared working copies currently registered for this buffer factory. 
+	 * Working copies can be shared by several clients using the same buffer factory,see 
+	 * <code>IWorkingCopy.getSharedWorkingCopy</code>.
+	 * 
+	 * @param factory the given buffer factory
+	 * @return the list of shared working copies for a given buffer factory
+	 * @see IWorkingCopy
+	 */
+	public static IWorkingCopy[] getSharedWorkingCopies(IBufferFactory factory){
+		
+		// if factory is null, default factory must be used
+		if (factory == null) factory = BufferManager.getDefaultBufferManager().getDefaultBufferFactory();
+		Map sharedWorkingCopies = CModelManager.getDefault().sharedWorkingCopies;
+		
+		Map perFactoryWorkingCopies = (Map) sharedWorkingCopies.get(factory);
+		if (perFactoryWorkingCopies == null) return CModelManager.NoWorkingCopy;
+		Collection copies = perFactoryWorkingCopies.values();
+		IWorkingCopy[] result = new IWorkingCopy[copies.size()];
+		copies.toArray(result);
+		return result;
+	}
+	
 	public static String getResourceString(String key) {
 		try {
 			return fgResourceBundle.getString(key);
Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui/ChangeLog,v
retrieving revision 1.136
diff -u -r1.136 ChangeLog
--- ChangeLog	11 Aug 2003 17:33:10 -0000	1.136
+++ ChangeLog	11 Aug 2003 21:22:47 -0000
@@ -1,3 +1,6 @@
+2003-08-11 Andrew Niefer
+	- Added some code to CUIPlugin to access working copies 
+	
 2003-08-10 Sean Evoy
 	Added a new target for building DLLs on Cygwin.
 	* plugin.xml
Index: src/org/eclipse/cdt/internal/ui/search/CSearchOperation.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/CSearchOperation.java,v
retrieving revision 1.4
diff -u -r1.4 CSearchOperation.java
--- src/org/eclipse/cdt/internal/ui/search/CSearchOperation.java	15 Jul 2003 14:43:48 -0000	1.4
+++ src/org/eclipse/cdt/internal/ui/search/CSearchOperation.java	11 Aug 2003 21:22:48 -0000
@@ -20,9 +20,8 @@
 import org.eclipse.cdt.core.search.ICSearchPattern;
 import org.eclipse.cdt.core.search.ICSearchScope;
 import org.eclipse.cdt.core.search.SearchEngine;
-import org.eclipse.cdt.internal.core.model.IWorkingCopy;
 import org.eclipse.cdt.internal.ui.CPluginImages;
-
+import org.eclipse.cdt.ui.CUIPlugin;
 import org.eclipse.core.resources.IWorkspace;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
@@ -65,8 +64,8 @@
 		throws CoreException, InvocationTargetException, InterruptedException 
 	{
 		_collector.setProgressMonitor( monitor );	
-		IWorkingCopy copy = null;
-		SearchEngine engine = new SearchEngine( );
+		
+		SearchEngine engine = new SearchEngine( CUIPlugin.getSharedWorkingCopies() );
 		if( _elementPattern != null ){
 			engine.search( _workspace, _elementPattern, _limitTo, _scope, _collector );
 		} else {
Index: src/org/eclipse/cdt/ui/CUIPlugin.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/CUIPlugin.java,v
retrieving revision 1.16
diff -u -r1.16 CUIPlugin.java
--- src/org/eclipse/cdt/ui/CUIPlugin.java	28 Jun 2003 19:48:06 -0000	1.16
+++ src/org/eclipse/cdt/ui/CUIPlugin.java	11 Aug 2003 21:22:48 -0000
@@ -12,6 +12,8 @@
 import org.eclipse.cdt.core.CCorePlugin;
 import org.eclipse.cdt.core.model.CoreModel;
 import org.eclipse.cdt.core.model.ICElement;
+import org.eclipse.cdt.internal.core.model.IBufferFactory;
+import org.eclipse.cdt.internal.core.model.IWorkingCopy;
 import org.eclipse.cdt.internal.ui.BuildConsoleManager;
 import org.eclipse.cdt.internal.ui.CElementAdapterFactory;
 import org.eclipse.cdt.internal.ui.CPluginImages;
@@ -78,6 +80,17 @@
 		}
 	}
 
+	public static IBufferFactory getBufferFactory() {
+		CDocumentProvider provider= CUIPlugin.getDefault().getDocumentProvider();
+		if (provider != null)
+			return provider.getBufferFactory();
+		return null;
+	}
+
+	public static IWorkingCopy[] getSharedWorkingCopies() {
+		return CCorePlugin.getSharedWorkingCopies(getBufferFactory());
+	}
+	
 	public static String getResourceString(String key) {
 		try {
 			return fgResourceBundle.getString(key);
@@ -93,7 +106,7 @@
 	public static IWorkspace getWorkspace() {
 		return ResourcesPlugin.getWorkspace();
 	}
-
+	
 	public static String getFormattedString(String key, String arg) {
 		return MessageFormat.format(getResourceString(key), new String[] { arg });
 	}
@@ -317,5 +330,4 @@
 		manager.unregisterAdapters(fResourceAdapterFactory);
 		manager.unregisterAdapters(fCElementAdapterFactory);
 	}
-
 }

Back to the top