diff options
author | Eike Ziller <eike.ziller@nokia.com> | 2011-12-20 11:15:23 +0100 |
---|---|---|
committer | Eike Ziller <eike.ziller@nokia.com> | 2011-12-20 13:15:03 +0100 |
commit | bf97079be376b5781c2dbddb8756835f5a836f9d (patch) | |
tree | 0dbaa9858b22fab711675e5798d41d9f7bb7ae94 /src/plugins/cpptools/cppfindreferences.cpp | |
parent | e8da8c8c5bfaf952f4897d222754e6c3834b70af (diff) | |
download | qt-creator-bf97079be376b5781c2dbddb8756835f5a836f9d.tar.gz |
Fix cancelling search for usages.
Change-Id: Ic78cf5030e78759018ea84d0c258c81c8081ae98
Reviewed-by: Leandro Melo <leandro.melo@nokia.com>
Diffstat (limited to 'src/plugins/cpptools/cppfindreferences.cpp')
-rw-r--r-- | src/plugins/cpptools/cppfindreferences.cpp | 33 |
1 files changed, 26 insertions, 7 deletions
diff --git a/src/plugins/cpptools/cppfindreferences.cpp b/src/plugins/cpptools/cppfindreferences.cpp index f74d8ff383..c51428f328 100644 --- a/src/plugins/cpptools/cppfindreferences.cpp +++ b/src/plugins/cpptools/cppfindreferences.cpp @@ -95,18 +95,26 @@ class ProcessFile: public std::unary_function<QString, QList<Usage> > const Snapshot snapshot; Document::Ptr symbolDocument; Symbol *symbol; + QFutureInterface<Usage> *future; public: ProcessFile(const CppModelManagerInterface::WorkingCopy &workingCopy, const Snapshot snapshot, Document::Ptr symbolDocument, - Symbol *symbol) - : workingCopy(workingCopy), snapshot(snapshot), symbolDocument(symbolDocument), symbol(symbol) + Symbol *symbol, + QFutureInterface<Usage> *future) + : workingCopy(workingCopy), + snapshot(snapshot), + symbolDocument(symbolDocument), + symbol(symbol), + future(future) { } QList<Usage> operator()(const QString &fileName) { QList<Usage> usages; + if (future->isCanceled()) + return usages; const Identifier *symbolId = symbol->identifier(); if (Document::Ptr previousDoc = snapshot.document(fileName)) { @@ -214,9 +222,13 @@ static void find_helper(QFutureInterface<Usage> &future, future.setProgressRange(0, files.size()); - ProcessFile process(workingCopy, snapshot, context.thisDocument(), symbol); + ProcessFile process(workingCopy, snapshot, context.thisDocument(), symbol, &future); UpdateUI reduce(&future); + // This thread waits for blockingMappedReduced to finish, so reduce the pool's used thread count + // so the blockingMappedReduced can use one more thread, and increase it again afterwards. + QThreadPool::globalInstance()->releaseThread(); QtConcurrent::blockingMappedReduced<QList<Usage> > (files, process, reduce); + QThreadPool::globalInstance()->reserveThread(); future.setProgressValue(files.size()); } @@ -342,17 +354,21 @@ class FindMacroUsesInFile: public std::unary_function<QString, QList<Usage> > const CppModelManagerInterface::WorkingCopy workingCopy; const Snapshot snapshot; const Macro ¯o; + QFutureInterface<Usage> *future; public: FindMacroUsesInFile(const CppModelManagerInterface::WorkingCopy &workingCopy, const Snapshot snapshot, - const Macro ¯o) - : workingCopy(workingCopy), snapshot(snapshot), macro(macro) + const Macro ¯o, + QFutureInterface<Usage> *future) + : workingCopy(workingCopy), snapshot(snapshot), macro(macro), future(future) { } QList<Usage> operator()(const QString &fileName) { QList<Usage> usages; + if (future->isCanceled()) + return usages; const Document::Ptr &doc = snapshot.document(fileName); QByteArray source; @@ -421,10 +437,13 @@ static void findMacroUses_helper(QFutureInterface<Usage> &future, future.setProgressRange(0, files.size()); - FindMacroUsesInFile process(workingCopy, snapshot, macro); + FindMacroUsesInFile process(workingCopy, snapshot, macro, &future); UpdateUI reduce(&future); + // This thread waits for blockingMappedReduced to finish, so reduce the pool's used thread count + // so the blockingMappedReduced can use one more thread, and increase it again afterwards. + QThreadPool::globalInstance()->releaseThread(); QtConcurrent::blockingMappedReduced<QList<Usage> > (files, process, reduce); - + QThreadPool::globalInstance()->reserveThread(); future.setProgressValue(files.size()); } |