1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

Bug 273525. Use index binding for search.

This commit is contained in:
Sergey Prigogin 2011-01-12 01:54:41 +00:00
parent f3f4f693eb
commit ffc86f14b2

View file

@ -24,7 +24,8 @@ import org.eclipse.cdt.core.dom.ast.IASTDeclarator;
import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.IASTName;
import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration; import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration;
import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit; import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
import org.eclipse.cdt.core.dom.ast.IBinding; import org.eclipse.cdt.core.index.IIndex;
import org.eclipse.cdt.core.index.IIndexBinding;
import org.eclipse.cdt.core.index.IIndexName; import org.eclipse.cdt.core.index.IIndexName;
import org.eclipse.cdt.core.model.CoreModelUtil; import org.eclipse.cdt.core.model.CoreModelUtil;
import org.eclipse.cdt.core.model.ITranslationUnit; import org.eclipse.cdt.core.model.ITranslationUnit;
@ -40,12 +41,16 @@ public class DefinitionFinder2 {
public static ASTNameInContext getDefinition(IASTSimpleDeclaration simpleDeclaration, public static ASTNameInContext getDefinition(IASTSimpleDeclaration simpleDeclaration,
RefactoringASTCache astCache) throws CoreException { RefactoringASTCache astCache) throws CoreException {
IASTDeclarator declarator = simpleDeclaration.getDeclarators()[0]; IASTDeclarator declarator = simpleDeclaration.getDeclarators()[0];
IBinding binding = declarator.getName().resolveBinding(); IIndex index = astCache.getIndex();
return getDefinition(binding, astCache); if (index == null) {
return null;
}
IIndexBinding binding = index.adaptBinding(declarator.getName().resolveBinding());
return getDefinition(binding, astCache, index);
} }
private static ASTNameInContext getDefinition(IBinding binding, RefactoringASTCache astCache) private static ASTNameInContext getDefinition(IIndexBinding binding,
throws CoreException { RefactoringASTCache astCache, IIndex index) throws CoreException {
Set<String> searchedFiles = new HashSet<String>(); Set<String> searchedFiles = new HashSet<String>();
ITranslationUnit[] workingCopies = CUIPlugin.getSharedWorkingCopies(); ITranslationUnit[] workingCopies = CUIPlugin.getSharedWorkingCopies();
List<ASTNameInContext> definitions = new ArrayList<ASTNameInContext>(); List<ASTNameInContext> definitions = new ArrayList<ASTNameInContext>();
@ -54,7 +59,7 @@ public class DefinitionFinder2 {
searchedFiles.add(tu.getLocation().toOSString()); searchedFiles.add(tu.getLocation().toOSString());
} }
IIndexName[] definitionsFromIndex = astCache.getIndex().findDefinitions(binding); IIndexName[] definitionsFromIndex = index.findDefinitions(binding);
if (definitionsFromIndex.length > 0) { if (definitionsFromIndex.length > 0) {
for (IIndexName name : definitionsFromIndex) { for (IIndexName name : definitionsFromIndex) {
@ -71,14 +76,14 @@ public class DefinitionFinder2 {
return definitions.get(0); return definitions.get(0);
} }
private static void findDefinitionsInTranslationUnit(IBinding binding, ITranslationUnit tu, private static void findDefinitionsInTranslationUnit(IIndexBinding binding, ITranslationUnit tu,
RefactoringASTCache astCache, List<ASTNameInContext> definitions, IProgressMonitor pm) RefactoringASTCache astCache, List<ASTNameInContext> definitions, IProgressMonitor pm)
throws OperationCanceledException, CoreException { throws OperationCanceledException, CoreException {
IASTTranslationUnit ast = astCache.getAST(tu, pm); IASTTranslationUnit ast = astCache.getAST(tu, pm);
findDefinitionsInAST(binding, ast, tu, definitions); findDefinitionsInAST(binding, ast, tu, definitions);
} }
private static void findDefinitionsInAST(IBinding binding, IASTTranslationUnit ast, private static void findDefinitionsInAST(IIndexBinding binding, IASTTranslationUnit ast,
ITranslationUnit tu, List<ASTNameInContext> definitions) { ITranslationUnit tu, List<ASTNameInContext> definitions) {
for (IName definition : ast.getDefinitions(binding)) { for (IName definition : ast.getDefinitions(binding)) {
if (definition instanceof IASTName) { if (definition instanceof IASTName) {