[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
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);
}
-
}