public bool FindReferencesTo(Cursor c, File f, FindReferencesDelegate callback) { Library.CXCursorAndRangeVisitor visitor = new Library.CXCursorAndRangeVisitor(); visitor.context = IntPtr.Zero; visitor.visit = delegate(IntPtr ctx, Library.Cursor cur, Library.SourceRange range) { if(callback(_itemStore.CreateCursor(cur), _itemStore.CreateSourceRange(range)) == true) return Library.CXVisitorResult.CXVisit_Continue; return Library.CXVisitorResult.CXVisit_Break; }; return Library.clang_findReferencesInFile(c.Handle, f.Handle, visitor) != Library.CXResult.CXResult_Invalid; }
public bool FindAllReferences(Cursor c, Func<Cursor, SourceRange, bool> callback) { Library.CXCursorAndRangeVisitor visitor = new Library.CXCursorAndRangeVisitor(); visitor.context = IntPtr.Zero; visitor.visit = delegate(IntPtr ctx, Library.CXCursor cur, Library.CXSourceRange range) { if (callback(_itemStore.CreateCursor(cur), _itemStore.CreateSourceRange(range)) == true) return Library.CXVisitorResult.CXVisit_Continue; return Library.CXVisitorResult.CXVisit_Break; }; //Search source file if (Library.clang_findReferencesInFile(c.Handle, File.Handle, visitor) == Library.CXResult.CXResult_Invalid) return false; foreach (HeaderInfo header in _headerFiles) { if (Library.clang_findReferencesInFile(c.Handle, header.File.Handle, visitor) == Library.CXResult.CXResult_Invalid) return false; } return true; }