Skip to main content

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


This patch combines the field and variable search patterns into one in order to allow qualified searches on variables.

- Bogdan

Index: index/ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/index/ChangeLog,v
retrieving revision 1.11
diff -u -r1.11 ChangeLog
--- index/ChangeLog	12 Aug 2003 14:29:07 -0000	1.11
+++ index/ChangeLog	12 Aug 2003 15:02:49 -0000
@@ -1,3 +1,7 @@
+2003-08-12 Bogdan Gheorghe
+	- Changed var prefix in AbstractIndexer to pass in fully
+	  qualified names
+	  
 2003-08-11 Bogdan Gheorghe
 	- Added macro declarations to the index
 	- Added macro prefix to AbstractIndexer
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.11
diff -u -r1.11 AbstractIndexer.java
--- index/org/eclipse/cdt/internal/core/search/indexing/AbstractIndexer.java	12 Aug 2003 14:29:07 -0000	1.11
+++ index/org/eclipse/cdt/internal/core/search/indexing/AbstractIndexer.java	12 Aug 2003 15:02:50 -0000
@@ -336,7 +336,7 @@
 		return bestPrefix( prefix, (char) 0, namespaceName, containingTypes, matchMode, isCaseSensitive );
 	}	
 		
-	public static final char[] bestVariablePrefix( LimitTo limitTo, char[] varName, int matchMode, boolean isCaseSenstive ){
+	public static final char[] bestVariablePrefix( LimitTo limitTo, char[] varName, char[][] containingTypes, int matchMode, boolean isCaseSenstive ){
 		char [] prefix = null;
 		if( limitTo == REFERENCES ){
 			prefix = TYPE_REF;
@@ -346,7 +346,7 @@
 			return TYPE_ALL;
 		}
 		
-		return bestPrefix( prefix, VAR_SUFFIX, varName, null, matchMode, isCaseSenstive );	
+		return bestPrefix( prefix, VAR_SUFFIX, varName, containingTypes, matchMode, isCaseSenstive );	
 	}
 
 	public static final char[] bestFieldPrefix( LimitTo limitTo, char[] fieldName,char[][] containingTypes, int matchMode, boolean isCaseSensitive) {
Index: search/ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/search/ChangeLog,v
retrieving revision 1.16
diff -u -r1.16 ChangeLog
--- search/ChangeLog	12 Aug 2003 14:29:07 -0000	1.16
+++ search/ChangeLog	12 Aug 2003 15:02:51 -0000
@@ -1,3 +1,7 @@
+2003-08-12 Bogdan Gheorghe
+	- Rolled field and variable search patterns into one pattern, in
+	  order to allow for qualified var searches
+	
 2003-08-11 Andrew Niefer
 	- Added Macro ICSearchConstant
 	- Added acceptMacro to IIndexSearchRequestor and PathCollector
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.14
diff -u -r1.14 CSearchPattern.java
--- search/org/eclipse/cdt/internal/core/search/matching/CSearchPattern.java	12 Aug 2003 14:29:07 -0000	1.14
+++ search/org/eclipse/cdt/internal/core/search/matching/CSearchPattern.java	12 Aug 2003 15:02:51 -0000
@@ -80,10 +80,8 @@
 			pattern = createClassPattern( patternString, searchFor, 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 == FIELD || searchFor == VAR ){
+			pattern = createFieldPattern( patternString, searchFor, limitTo, matchMode, caseSensitive );
 		} else if ( searchFor == NAMESPACE ){
 			pattern = createNamespacePattern( patternString, limitTo, matchMode, caseSensitive );
 		} else if ( searchFor == MACRO ){
@@ -170,28 +168,11 @@
 	 * @param caseSensitive
 	 * @return
 	 */
-	private static CSearchPattern createVariablePattern(String patternString, LimitTo limitTo, int matchMode, boolean caseSensitive) {
+	private static CSearchPattern createFieldPattern(String patternString, SearchFor searchFor, LimitTo limitTo, int matchMode, boolean caseSensitive) {
 		if( limitTo == ALL_OCCURRENCES ){
 			OrPattern orPattern = new OrPattern();
-			orPattern.addPattern( createVariablePattern( patternString, DECLARATIONS, matchMode, caseSensitive ) );
-			orPattern.addPattern( createVariablePattern( patternString, REFERENCES, matchMode, caseSensitive ) );
-			return orPattern;
-		}
-		return new VariableDeclarationPattern( patternString.toCharArray(), matchMode, limitTo, caseSensitive );
-	}
-
-	/**
-	 * @param patternString
-	 * @param limitTo
-	 * @param matchMode
-	 * @param caseSensitive
-	 * @return
-	 */
-	private static CSearchPattern createFieldPattern(String patternString, LimitTo limitTo, int matchMode, boolean caseSensitive) {
-		if( limitTo == ALL_OCCURRENCES ){
-			OrPattern orPattern = new OrPattern();
-			orPattern.addPattern( createFieldPattern( patternString, DECLARATIONS, matchMode, caseSensitive ) );
-			orPattern.addPattern( createFieldPattern( patternString, REFERENCES, matchMode, caseSensitive ) );
+			orPattern.addPattern( createFieldPattern( patternString, searchFor, DECLARATIONS, matchMode, caseSensitive ) );
+			orPattern.addPattern( createFieldPattern( patternString, searchFor, REFERENCES, matchMode, caseSensitive ) );
 			return orPattern;
 		}
 		
@@ -201,7 +182,7 @@
 		char [] name = (char []) list.removeLast();
 		char [][] qualifications = new char[0][];
 		
-		return new FieldDeclarationPattern( name, (char[][]) list.toArray( qualifications ), matchMode, limitTo, caseSensitive );
+		return new FieldDeclarationPattern( name, (char[][]) list.toArray( qualifications ), matchMode, searchFor, limitTo, caseSensitive );
 	}
 
 	/**
Index: search/org/eclipse/cdt/internal/core/search/matching/FieldDeclarationPattern.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/search/org/eclipse/cdt/internal/core/search/matching/FieldDeclarationPattern.java,v
retrieving revision 1.6
diff -u -r1.6 FieldDeclarationPattern.java
--- search/org/eclipse/cdt/internal/core/search/matching/FieldDeclarationPattern.java	7 Aug 2003 14:52:18 -0000	1.6
+++ search/org/eclipse/cdt/internal/core/search/matching/FieldDeclarationPattern.java	12 Aug 2003 15:02:52 -0000
@@ -17,7 +17,9 @@
 
 import org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate;
 import org.eclipse.cdt.core.parser.ast.IASTField;
+import org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement;
 import org.eclipse.cdt.core.parser.ast.IASTQualifiedNameElement;
+import org.eclipse.cdt.core.parser.ast.IASTVariable;
 import org.eclipse.cdt.core.search.ICSearchScope;
 import org.eclipse.cdt.internal.core.index.IEntryResult;
 import org.eclipse.cdt.internal.core.index.impl.IndexInput;
@@ -33,7 +35,7 @@
  * To change the template for this generated type comment go to
  * Window>Preferences>Java>Code Generation>Code and Comments
  */
-public class FieldDeclarationPattern extends VariableDeclarationPattern {
+public class FieldDeclarationPattern extends CSearchPattern {
 
 	/**
 	 * @param name
@@ -42,18 +44,27 @@
 	 * @param limitTo
 	 * @param caseSensitive
 	 */
-	public FieldDeclarationPattern(char[] name, char[][] qual, int matchMode, LimitTo limitTo, boolean caseSensitive) {
-		super( name, matchMode, limitTo, caseSensitive );
+	public FieldDeclarationPattern(char[] name, char[][] qual, int matchMode, SearchFor sfor, LimitTo limitTo, boolean caseSensitive) {
+		super( matchMode, caseSensitive, limitTo );
 		qualifications = qual;
+		searchFor = sfor;
+		simpleName = name;
 	}
 
 
 	public int matchLevel(ISourceElementCallbackDelegate node, LimitTo limit ) {
-		if( !(node instanceof IASTField) ){
-			return IMPOSSIBLE_MATCH;
-		}
+		if( node instanceof IASTField ){
+			if( searchFor != FIELD || !canAccept( limit ) )
+				return IMPOSSIBLE_MATCH;
+		} else if ( node instanceof IASTVariable ){
+			if( searchFor != VAR || !canAccept( limit ) )
+				return IMPOSSIBLE_MATCH;			
+		} else return IMPOSSIBLE_MATCH;
 		
-		if( super.matchLevel( node, limit ) == 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;
 		}
 		
@@ -73,7 +84,16 @@
 	}
 	
 	public char[] indexEntryPrefix() {
-		return AbstractIndexer.bestFieldPrefix( _limitTo, simpleName, qualifications, _matchMode, _caseSensitive );
+		if( searchFor == FIELD ){
+			return AbstractIndexer.bestFieldPrefix( _limitTo, simpleName, qualifications, _matchMode, _caseSensitive );
+		} else if( searchFor == VAR ) {
+			return AbstractIndexer.bestVariablePrefix(
+							_limitTo,
+							simpleName, qualifications,
+							_matchMode, _caseSensitive
+			);
+		}
+		return null;		
 	}
 	
 	protected void resetIndexInfo(){
@@ -84,11 +104,18 @@
 	protected void decodeIndexEntry(IEntryResult entryResult) {
 		char[] word = entryResult.getWord();
 		int size = word.length;
+		int firstSlash = 0;
+		int slash = 0;
 		
-		int firstSlash = CharOperation.indexOf( SEPARATOR, word, 0 );
-		
-		int slash = CharOperation.indexOf(SEPARATOR, word, firstSlash + 1);
-		
+		if( searchFor == FIELD ){
+			firstSlash = CharOperation.indexOf( SEPARATOR, word, 0 );
+			slash = CharOperation.indexOf(SEPARATOR, word, firstSlash + 1);
+		} else if( searchFor == VAR ) {
+			int realStart = CharOperation.indexOf( SEPARATOR, word, 0 );
+			firstSlash = CharOperation.indexOf( SEPARATOR, word, realStart + 1);
+			slash = CharOperation.indexOf(SEPARATOR, word, firstSlash + 1);
+		}
+				
 		this.decodedSimpleName = CharOperation.subarray(word, firstSlash + 1, slash);
 		
 		if( slash != -1 && slash+1 < size ){
@@ -130,4 +157,9 @@
 	
 	private char [][] qualifications;
 	private char [][] decodedQualifications;
+	private char []   simpleName;
+	private char []   decodedSimpleName;
+	private char      decodedType;
+
+	private SearchFor searchFor;
 }
Index: search/org/eclipse/cdt/internal/core/search/matching/VariableDeclarationPattern.java
===================================================================
RCS file: search/org/eclipse/cdt/internal/core/search/matching/VariableDeclarationPattern.java
diff -N search/org/eclipse/cdt/internal/core/search/matching/VariableDeclarationPattern.java
--- search/org/eclipse/cdt/internal/core/search/matching/VariableDeclarationPattern.java	7 Aug 2003 14:52:18 -0000	1.6
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,135 +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 org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate;
-import org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement;
-import org.eclipse.cdt.core.parser.ast.IASTVariable;
-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 VariableDeclarationPattern extends CSearchPattern {
-
-	/**
-	 * @param name
-	 * @param matchMode
-	 * @param limitTo
-	 * @param caseSensitive
-	 */
-	public VariableDeclarationPattern(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 IASTVariable) || !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.acceptVariableDeclaration(path, decodedSimpleName);
-			}
-		}	
-	}
-
-	protected void resetIndexInfo(){
-		decodedType = 0;
-		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.decodedType = word[ firstSlash + 1 ];
-		firstSlash += 2;
-		
-		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.bestVariablePrefix(
-						_limitTo,
-						simpleName,
-						_matchMode, _caseSensitive
-		);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.cdt.internal.core.search.matching.CSearchPattern#matchIndexEntry()
-	 */
-	protected boolean matchIndexEntry() {
-		if( decodedType != VAR_SUFFIX ){
-			return false;
-		}
-			
-		/* check simple name matches */
-		if (simpleName != null){
-			if( ! matchesName( simpleName, decodedSimpleName ) ){
-				return false; 
-			}
-		}
-		
-		return true;
-	}
-	
-	protected char [] simpleName;
-	protected char [] decodedSimpleName;
-	protected char    decodedType;
-
-}
\ No newline at end of file
Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/ChangeLog,v
retrieving revision 1.53
diff -u -r1.53 ChangeLog
--- ChangeLog	12 Aug 2003 14:28:07 -0000	1.53
+++ ChangeLog	12 Aug 2003 15:03:20 -0000
@@ -1,3 +1,7 @@
+2003-08-12 Bogdan Gheorghe
+	- Changed testVariableIndexPrefix, testVariableDeclaration to
+	  reflect changes to the var search pattern
+	
 2003-08-11 Andrew Niefer
 	- Added testMacroPattern to OtherPatternTests
 	- Changed the function tests to use new function/method pattern
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.6
diff -u -r1.6 OtherPatternTests.java
--- search/org/eclipse/cdt/core/search/tests/OtherPatternTests.java	12 Aug 2003 14:28:07 -0000	1.6
+++ search/org/eclipse/cdt/core/search/tests/OtherPatternTests.java	12 Aug 2003 15:03:20 -0000
@@ -22,7 +22,6 @@
 import org.eclipse.cdt.internal.core.search.matching.FieldDeclarationPattern;
 import org.eclipse.cdt.internal.core.search.matching.NamespaceDeclarationPattern;
 import org.eclipse.cdt.internal.core.search.matching.OrPattern;
-import org.eclipse.cdt.internal.core.search.matching.VariableDeclarationPattern;
 
 /**
  * @author aniefer
@@ -59,18 +58,18 @@
 	
 	public void testVariableIndexPrefix(){
 		ICSearchPattern pattern = SearchEngine.createSearchPattern( "c", VAR, DECLARATIONS, true );
-		assertTrue( pattern instanceof VariableDeclarationPattern );
+		assertTrue( pattern instanceof FieldDeclarationPattern );
 		
-		VariableDeclarationPattern variablePattern = (VariableDeclarationPattern)pattern;
+		FieldDeclarationPattern variablePattern = (FieldDeclarationPattern)pattern;
 		assertEquals( CharOperation.compareWith( "typeDecl/V/c".toCharArray(), variablePattern.indexEntryPrefix() ), 0);
 		
-		variablePattern = (VariableDeclarationPattern) SearchEngine.createSearchPattern( "rt*", VAR, DECLARATIONS, true );
+		variablePattern = (FieldDeclarationPattern) SearchEngine.createSearchPattern( "rt*", VAR, DECLARATIONS, true );
 		assertEquals( CharOperation.compareWith( "typeDecl/V/rt".toCharArray(), variablePattern.indexEntryPrefix() ), 0);
 				
-		variablePattern = (VariableDeclarationPattern) SearchEngine.createSearchPattern( "Ac", VAR, REFERENCES, false );
+		variablePattern = (FieldDeclarationPattern) SearchEngine.createSearchPattern( "Ac", VAR, REFERENCES, false );
 		assertEquals( CharOperation.compareWith( "typeRef/V/".toCharArray(), variablePattern.indexEntryPrefix() ), 0);
 		
-		variablePattern = (VariableDeclarationPattern) SearchEngine.createSearchPattern( "A?c", VAR, REFERENCES, true );
+		variablePattern = (FieldDeclarationPattern) SearchEngine.createSearchPattern( "A?c", VAR, REFERENCES, true );
 		assertEquals( CharOperation.compareWith( "typeRef/V/A".toCharArray(), variablePattern.indexEntryPrefix() ), 0);
 	}
 	

Back to the top