[
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