forked from qt-creator/qt-creator
Fix cancelling search for usages.
Change-Id: Ic78cf5030e78759018ea84d0c258c81c8081ae98 Reviewed-by: Leandro Melo <leandro.melo@nokia.com>
This commit is contained in:
@@ -95,18 +95,26 @@ class ProcessFile: public std::unary_function<QString, QList<Usage> >
|
|||||||
const Snapshot snapshot;
|
const Snapshot snapshot;
|
||||||
Document::Ptr symbolDocument;
|
Document::Ptr symbolDocument;
|
||||||
Symbol *symbol;
|
Symbol *symbol;
|
||||||
|
QFutureInterface<Usage> *future;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ProcessFile(const CppModelManagerInterface::WorkingCopy &workingCopy,
|
ProcessFile(const CppModelManagerInterface::WorkingCopy &workingCopy,
|
||||||
const Snapshot snapshot,
|
const Snapshot snapshot,
|
||||||
Document::Ptr symbolDocument,
|
Document::Ptr symbolDocument,
|
||||||
Symbol *symbol)
|
Symbol *symbol,
|
||||||
: workingCopy(workingCopy), snapshot(snapshot), symbolDocument(symbolDocument), symbol(symbol)
|
QFutureInterface<Usage> *future)
|
||||||
|
: workingCopy(workingCopy),
|
||||||
|
snapshot(snapshot),
|
||||||
|
symbolDocument(symbolDocument),
|
||||||
|
symbol(symbol),
|
||||||
|
future(future)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
QList<Usage> operator()(const QString &fileName)
|
QList<Usage> operator()(const QString &fileName)
|
||||||
{
|
{
|
||||||
QList<Usage> usages;
|
QList<Usage> usages;
|
||||||
|
if (future->isCanceled())
|
||||||
|
return usages;
|
||||||
const Identifier *symbolId = symbol->identifier();
|
const Identifier *symbolId = symbol->identifier();
|
||||||
|
|
||||||
if (Document::Ptr previousDoc = snapshot.document(fileName)) {
|
if (Document::Ptr previousDoc = snapshot.document(fileName)) {
|
||||||
@@ -214,9 +222,13 @@ static void find_helper(QFutureInterface<Usage> &future,
|
|||||||
|
|
||||||
future.setProgressRange(0, files.size());
|
future.setProgressRange(0, files.size());
|
||||||
|
|
||||||
ProcessFile process(workingCopy, snapshot, context.thisDocument(), symbol);
|
ProcessFile process(workingCopy, snapshot, context.thisDocument(), symbol, &future);
|
||||||
UpdateUI reduce(&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);
|
QtConcurrent::blockingMappedReduced<QList<Usage> > (files, process, reduce);
|
||||||
|
QThreadPool::globalInstance()->reserveThread();
|
||||||
future.setProgressValue(files.size());
|
future.setProgressValue(files.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -342,17 +354,21 @@ class FindMacroUsesInFile: public std::unary_function<QString, QList<Usage> >
|
|||||||
const CppModelManagerInterface::WorkingCopy workingCopy;
|
const CppModelManagerInterface::WorkingCopy workingCopy;
|
||||||
const Snapshot snapshot;
|
const Snapshot snapshot;
|
||||||
const Macro ¯o;
|
const Macro ¯o;
|
||||||
|
QFutureInterface<Usage> *future;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
FindMacroUsesInFile(const CppModelManagerInterface::WorkingCopy &workingCopy,
|
FindMacroUsesInFile(const CppModelManagerInterface::WorkingCopy &workingCopy,
|
||||||
const Snapshot snapshot,
|
const Snapshot snapshot,
|
||||||
const Macro ¯o)
|
const Macro ¯o,
|
||||||
: workingCopy(workingCopy), snapshot(snapshot), macro(macro)
|
QFutureInterface<Usage> *future)
|
||||||
|
: workingCopy(workingCopy), snapshot(snapshot), macro(macro), future(future)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
QList<Usage> operator()(const QString &fileName)
|
QList<Usage> operator()(const QString &fileName)
|
||||||
{
|
{
|
||||||
QList<Usage> usages;
|
QList<Usage> usages;
|
||||||
|
if (future->isCanceled())
|
||||||
|
return usages;
|
||||||
|
|
||||||
const Document::Ptr &doc = snapshot.document(fileName);
|
const Document::Ptr &doc = snapshot.document(fileName);
|
||||||
QByteArray source;
|
QByteArray source;
|
||||||
@@ -421,10 +437,13 @@ static void findMacroUses_helper(QFutureInterface<Usage> &future,
|
|||||||
|
|
||||||
future.setProgressRange(0, files.size());
|
future.setProgressRange(0, files.size());
|
||||||
|
|
||||||
FindMacroUsesInFile process(workingCopy, snapshot, macro);
|
FindMacroUsesInFile process(workingCopy, snapshot, macro, &future);
|
||||||
UpdateUI reduce(&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);
|
QtConcurrent::blockingMappedReduced<QList<Usage> > (files, process, reduce);
|
||||||
|
QThreadPool::globalInstance()->reserveThread();
|
||||||
future.setProgressValue(files.size());
|
future.setProgressValue(files.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user