Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[cdt-patch] RESUBMIT: FIXED 43128- Search: cannot find declarations of local variables


Can someone take a look at this 4KB patch?  I thought it was applied already but I was wrong.

FIXED 43128- Search: cannot find declarations of local variables

Devin Steffler
IBM's Eclipse CDT
Ottawa (Palladium), Ontario, Canada


Index: src/org/eclipse/cdt/internal/ui/search/DOMQuery.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt-core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/DOMQuery.java,v
retrieving revision 1.1
diff -u -r1.1 DOMQuery.java
--- src/org/eclipse/cdt/internal/ui/search/DOMQuery.java	27 Apr 2005 17:43:28 -0000	1.1
+++ src/org/eclipse/cdt/internal/ui/search/DOMQuery.java	13 May 2005 13:42:07 -0000
@@ -16,6 +16,7 @@
 import org.eclipse.cdt.core.browser.PathUtil;
 import org.eclipse.cdt.core.dom.ast.ASTTypeUtil;
 import org.eclipse.cdt.core.dom.ast.DOMException;
+import org.eclipse.cdt.core.dom.ast.IASTCompoundStatement;
 import org.eclipse.cdt.core.dom.ast.IASTFileLocation;
 import org.eclipse.cdt.core.dom.ast.IASTName;
 import org.eclipse.cdt.core.dom.ast.IASTNode;
@@ -27,8 +28,11 @@
 import org.eclipse.cdt.core.dom.ast.IField;
 import org.eclipse.cdt.core.dom.ast.IFunction;
 import org.eclipse.cdt.core.dom.ast.IMacroBinding;
+import org.eclipse.cdt.core.dom.ast.IScope;
 import org.eclipse.cdt.core.dom.ast.ITypedef;
 import org.eclipse.cdt.core.dom.ast.IVariable;
+import org.eclipse.cdt.core.dom.ast.c.ICFunctionScope;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPBinding;
 import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType;
 import org.eclipse.cdt.core.dom.ast.cpp.ICPPMember;
 import org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod;
@@ -40,9 +44,7 @@
 import org.eclipse.cdt.core.search.ICSearchResultCollector;
 import org.eclipse.cdt.core.search.ICSearchScope;
 import org.eclipse.cdt.core.search.IMatch;
-import org.eclipse.cdt.internal.ui.search.CSearchQuery;
-import org.eclipse.cdt.internal.ui.search.CSearchResult;
-import org.eclipse.cdt.internal.ui.search.NewSearchResultCollector;
+import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTName;
 import org.eclipse.cdt.ui.CUIPlugin;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.CoreException;
@@ -88,8 +90,12 @@
         NewSearchResultCollector collector = new NewSearchResultCollector(textResult, mainSearchPM);
         collector.aboutToStart();
         
-        Set matches = DOMSearchUtil.getMatchesFromSearchEngine(scope, searchName, limitTo);
-        if (matches != null && matches.size() > 0) {
+		// fix for 43128
+		Set matches=null;
+		if (!isLocal())
+			matches = DOMSearchUtil.getMatchesFromSearchEngine(scope, searchName, limitTo);
+		
+		if (matches != null && matches.size() > 0) {
             Iterator itr = matches.iterator();
             while(itr.hasNext()) {
                 Object next = itr.next();
@@ -139,6 +145,24 @@
         return new Status(IStatus.OK, CUIPlugin.getPluginId(), 0, BLANK_STRING, null); //$NON-NLS-1$	
 	}
 	
+	private boolean isLocal() {
+		IBinding binding = searchName.resolveBinding();
+		if (searchName instanceof CPPASTName) {
+			try {
+				if (binding instanceof ICPPBinding && !((ICPPBinding)binding).isGloballyQualified())
+					return true;
+			} catch (DOMException e) {}
+		} else {
+			try {
+				IScope nameScope = binding.getScope();
+				if (nameScope instanceof ICFunctionScope || nameScope.getPhysicalNode() instanceof IASTCompoundStatement)
+					return true;
+			} catch (DOMException e1) {}
+		}
+				
+		return false; // otherwise it's not local
+	}
+	
 	/**
     * This method creates an IMatch corresponding to an IASTNode found at a specific
     * fileResource (an IResource if external or an IPath if internal), the start/end offsets

Back to the top