forked from qt-creator/qt-creator
Merge remote-tracking branch 'origin/4.15'
Conflicts: doc/qtcreator/src/qtquick/qtquick-from-qmlproject-to-pro.qdoc Change-Id: I906330addb7de31e6ed88f88af3fd2adbbe53e1f
This commit is contained in:
@@ -259,11 +259,11 @@ void CMakeBuildSystem::triggerParsing()
|
||||
if (m_waitingForScan) {
|
||||
qCDebug(cmakeBuildSystemLog) << "Starting TreeScanner";
|
||||
QTC_CHECK(m_treeScanner.isFinished());
|
||||
m_treeScanner.asyncScanForFiles(projectDirectory());
|
||||
Core::ProgressManager::addTask(m_treeScanner.future(),
|
||||
tr("Scan \"%1\" project tree")
|
||||
.arg(project()->displayName()),
|
||||
"CMake.Scan.Tree");
|
||||
if (m_treeScanner.asyncScanForFiles(projectDirectory()))
|
||||
Core::ProgressManager::addTask(m_treeScanner.future(),
|
||||
tr("Scan \"%1\" project tree")
|
||||
.arg(project()->displayName()),
|
||||
"CMake.Scan.Tree");
|
||||
}
|
||||
|
||||
QTC_ASSERT(m_parameters.isValid(), return );
|
||||
@@ -920,7 +920,8 @@ FilePath CMakeBuildSystem::workDirectory(const BuildDirParameters ¶meters)
|
||||
|
||||
void CMakeBuildSystem::stopParsingAndClearState()
|
||||
{
|
||||
qCDebug(cmakeBuildSystemLog) << "stopping parsing run!";
|
||||
qCDebug(cmakeBuildSystemLog) << cmakeBuildConfiguration()->displayName()
|
||||
<< "stopping parsing run!";
|
||||
m_reader.stop();
|
||||
m_reader.resetData();
|
||||
}
|
||||
|
||||
@@ -165,6 +165,13 @@ void FileApiReader::stop()
|
||||
if (m_cmakeProcess)
|
||||
disconnect(m_cmakeProcess.get(), nullptr, this, nullptr);
|
||||
m_cmakeProcess.reset();
|
||||
|
||||
if (m_future) {
|
||||
m_future->cancel();
|
||||
m_future->waitForFinished();
|
||||
}
|
||||
m_future = {};
|
||||
m_isParsing = false;
|
||||
}
|
||||
|
||||
bool FileApiReader::isParsing() const
|
||||
@@ -259,7 +266,7 @@ void FileApiReader::endState(const QFileInfo &replyFi)
|
||||
|
||||
m_future = runAsync(ProjectExplorerPlugin::sharedThreadPool(),
|
||||
[replyFi, sourceDirectory, buildDirectory, topCmakeFile, cmakeBuildType]() {
|
||||
auto result = std::make_unique<FileApiQtcData>();
|
||||
auto result = std::make_shared<FileApiQtcData>();
|
||||
FileApiData data = FileApiParser::parseData(replyFi, cmakeBuildType, result->errorMessage);
|
||||
if (!result->errorMessage.isEmpty()) {
|
||||
qWarning() << result->errorMessage;
|
||||
@@ -274,29 +281,30 @@ void FileApiReader::endState(const QFileInfo &replyFi)
|
||||
qWarning() << result->errorMessage;
|
||||
}
|
||||
|
||||
return result.release();
|
||||
return result;
|
||||
});
|
||||
onFinished(m_future.value(), this, [this](const QFuture<FileApiQtcData *> &f) {
|
||||
std::unique_ptr<FileApiQtcData> value(f.result()); // Adopt the pointer again:-)
|
||||
onResultReady(m_future.value(),
|
||||
this,
|
||||
[this, topCmakeFile, sourceDirectory, buildDirectory](
|
||||
const std::shared_ptr<FileApiQtcData> &value) {
|
||||
m_isParsing = false;
|
||||
m_cache = std::move(value->cache);
|
||||
m_cmakeFiles = std::move(value->cmakeFiles);
|
||||
m_buildTargets = std::move(value->buildTargets);
|
||||
m_projectParts = std::move(value->projectParts);
|
||||
m_rootProjectNode = std::move(value->rootProjectNode);
|
||||
m_knownHeaders = std::move(value->knownHeaders);
|
||||
m_ctestPath = std::move(value->ctestPath);
|
||||
m_isMultiConfig = std::move(value->isMultiConfig);
|
||||
m_usesAllCapsTargets = std::move(value->usesAllCapsTargets);
|
||||
|
||||
m_future = {};
|
||||
m_isParsing = false;
|
||||
m_cache = std::move(value->cache);
|
||||
m_cmakeFiles = std::move(value->cmakeFiles);
|
||||
m_buildTargets = std::move(value->buildTargets);
|
||||
m_projectParts = std::move(value->projectParts);
|
||||
m_rootProjectNode = std::move(value->rootProjectNode);
|
||||
m_knownHeaders = std::move(value->knownHeaders);
|
||||
m_ctestPath = std::move(value->ctestPath);
|
||||
m_isMultiConfig = std::move(value->isMultiConfig);
|
||||
m_usesAllCapsTargets = std::move(value->usesAllCapsTargets);
|
||||
|
||||
if (value->errorMessage.isEmpty()) {
|
||||
emit this->dataAvailable();
|
||||
} else {
|
||||
emit this->errorOccurred(value->errorMessage);
|
||||
}
|
||||
});
|
||||
if (value->errorMessage.isEmpty()) {
|
||||
emit this->dataAvailable();
|
||||
} else {
|
||||
emit this->errorOccurred(value->errorMessage);
|
||||
}
|
||||
m_future = {};
|
||||
});
|
||||
}
|
||||
|
||||
void FileApiReader::makeBackupConfiguration(bool store)
|
||||
|
||||
@@ -38,6 +38,8 @@
|
||||
#include <QObject>
|
||||
#include <QDateTime>
|
||||
|
||||
#include <memory>
|
||||
|
||||
namespace ProjectExplorer {
|
||||
class ProjectNode;
|
||||
}
|
||||
@@ -105,7 +107,7 @@ private:
|
||||
bool m_usesAllCapsTargets = false;
|
||||
int m_lastCMakeExitCode = 0;
|
||||
|
||||
Utils::optional<QFuture<FileApiQtcData *>> m_future;
|
||||
Utils::optional<QFuture<std::shared_ptr<FileApiQtcData>>> m_future;
|
||||
|
||||
// Update related:
|
||||
bool m_isParsing = false;
|
||||
|
||||
Reference in New Issue
Block a user