forked from qt-creator/qt-creator
QmakeProject: Fix renaming waits 3s for reparse
Task-number: QTCREATORBUG-13176 Change-Id: Id19a08f254dfa844d4adff0baafa29986a515823 Reviewed-by: Robert Loehning <robert.loehning@digia.com> Reviewed-by: Daniel Teske <daniel.teske@digia.com>
This commit is contained in:
@@ -324,7 +324,7 @@ QmakePriFileNode::~QmakePriFileNode()
|
|||||||
void QmakePriFileNode::scheduleUpdate()
|
void QmakePriFileNode::scheduleUpdate()
|
||||||
{
|
{
|
||||||
QtSupport::ProFileCacheManager::instance()->discardFile(m_projectFilePath);
|
QtSupport::ProFileCacheManager::instance()->discardFile(m_projectFilePath);
|
||||||
m_qmakeProFileNode->scheduleUpdate();
|
m_qmakeProFileNode->scheduleUpdate(QmakeProFileNode::ParseLater);
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
@@ -1732,10 +1732,10 @@ bool QmakeProFileNode::parseInProgress() const
|
|||||||
return m_parseInProgress;
|
return m_parseInProgress;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QmakeProFileNode::scheduleUpdate()
|
void QmakeProFileNode::scheduleUpdate(QmakeProFileNode::AsyncUpdateDelay delay)
|
||||||
{
|
{
|
||||||
setParseInProgressRecursive(true);
|
setParseInProgressRecursive(true);
|
||||||
m_project->scheduleAsyncUpdate(this);
|
m_project->scheduleAsyncUpdate(this, delay);
|
||||||
}
|
}
|
||||||
|
|
||||||
void QmakeProFileNode::asyncUpdate()
|
void QmakeProFileNode::asyncUpdate()
|
||||||
|
|||||||
@@ -418,7 +418,8 @@ public:
|
|||||||
bool isDeployable() const;
|
bool isDeployable() const;
|
||||||
QString resolvedMkspecPath() const;
|
QString resolvedMkspecPath() const;
|
||||||
|
|
||||||
void scheduleUpdate();
|
enum AsyncUpdateDelay { ParseNow, ParseLater };
|
||||||
|
void scheduleUpdate(AsyncUpdateDelay delay);
|
||||||
|
|
||||||
bool validParse() const;
|
bool validParse() const;
|
||||||
bool parseInProgress() const;
|
bool parseInProgress() const;
|
||||||
|
|||||||
@@ -358,7 +358,7 @@ QmakeProject::QmakeProject(QmakeManager *manager, const QString &fileName) :
|
|||||||
setRequiredKitMatcher(QtSupport::QtKitInformation::qtVersionMatcher());
|
setRequiredKitMatcher(QtSupport::QtKitInformation::qtVersionMatcher());
|
||||||
|
|
||||||
m_asyncUpdateTimer.setSingleShot(true);
|
m_asyncUpdateTimer.setSingleShot(true);
|
||||||
m_asyncUpdateTimer.setInterval(0); // will be increased after first parse
|
m_asyncUpdateTimer.setInterval(3000);
|
||||||
connect(&m_asyncUpdateTimer, SIGNAL(timeout()), this, SLOT(asyncUpdate()));
|
connect(&m_asyncUpdateTimer, SIGNAL(timeout()), this, SLOT(asyncUpdate()));
|
||||||
|
|
||||||
connect(BuildManager::instance(), SIGNAL(buildQueueFinished(bool)),
|
connect(BuildManager::instance(), SIGNAL(buildQueueFinished(bool)),
|
||||||
@@ -430,7 +430,7 @@ bool QmakeProject::fromMap(const QVariantMap &map)
|
|||||||
connect(this, SIGNAL(activeTargetChanged(ProjectExplorer::Target*)),
|
connect(this, SIGNAL(activeTargetChanged(ProjectExplorer::Target*)),
|
||||||
this, SLOT(activeTargetWasChanged()));
|
this, SLOT(activeTargetWasChanged()));
|
||||||
|
|
||||||
scheduleAsyncUpdate();
|
scheduleAsyncUpdate(QmakeProFileNode::ParseNow);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -665,7 +665,7 @@ void QmakeProject::updateRunConfigurations()
|
|||||||
activeTarget()->updateDefaultRunConfigurations();
|
activeTarget()->updateDefaultRunConfigurations();
|
||||||
}
|
}
|
||||||
|
|
||||||
void QmakeProject::scheduleAsyncUpdate(QmakeProFileNode *node)
|
void QmakeProject::scheduleAsyncUpdate(QmakeProFileNode *node, QmakeProFileNode::AsyncUpdateDelay delay)
|
||||||
{
|
{
|
||||||
if (m_asyncUpdateState == ShuttingDown)
|
if (m_asyncUpdateState == ShuttingDown)
|
||||||
return;
|
return;
|
||||||
@@ -688,7 +688,7 @@ void QmakeProject::scheduleAsyncUpdate(QmakeProFileNode *node)
|
|||||||
// Just postpone
|
// Just postpone
|
||||||
if (debug)
|
if (debug)
|
||||||
qDebug()<<" full update pending, restarting timer";
|
qDebug()<<" full update pending, restarting timer";
|
||||||
m_asyncUpdateTimer.start();
|
startAsyncTimer(delay);
|
||||||
} else if (m_asyncUpdateState == AsyncPartialUpdatePending
|
} else if (m_asyncUpdateState == AsyncPartialUpdatePending
|
||||||
|| m_asyncUpdateState == Base) {
|
|| m_asyncUpdateState == Base) {
|
||||||
if (debug)
|
if (debug)
|
||||||
@@ -717,11 +717,12 @@ void QmakeProject::scheduleAsyncUpdate(QmakeProFileNode *node)
|
|||||||
|
|
||||||
if (add)
|
if (add)
|
||||||
m_partialEvaluate.append(node);
|
m_partialEvaluate.append(node);
|
||||||
// and start the timer anew
|
|
||||||
m_asyncUpdateTimer.start();
|
|
||||||
|
|
||||||
// Cancel running code model update
|
// Cancel running code model update
|
||||||
m_codeModelFuture.cancel();
|
m_codeModelFuture.cancel();
|
||||||
|
|
||||||
|
startAsyncTimer(delay);
|
||||||
|
|
||||||
} else if (m_asyncUpdateState == AsyncUpdateInProgress) {
|
} else if (m_asyncUpdateState == AsyncUpdateInProgress) {
|
||||||
// A update is in progress
|
// A update is in progress
|
||||||
// And this slot only gets called if a file changed on disc
|
// And this slot only gets called if a file changed on disc
|
||||||
@@ -732,11 +733,11 @@ void QmakeProject::scheduleAsyncUpdate(QmakeProFileNode *node)
|
|||||||
// even if that's not really needed
|
// even if that's not really needed
|
||||||
if (debug)
|
if (debug)
|
||||||
qDebug()<<" Async update in progress, scheduling new one afterwards";
|
qDebug()<<" Async update in progress, scheduling new one afterwards";
|
||||||
scheduleAsyncUpdate();
|
scheduleAsyncUpdate(delay);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void QmakeProject::scheduleAsyncUpdate()
|
void QmakeProject::scheduleAsyncUpdate(QmakeProFileNode::AsyncUpdateDelay delay)
|
||||||
{
|
{
|
||||||
if (debug)
|
if (debug)
|
||||||
qDebug()<<"scheduleAsyncUpdate";
|
qDebug()<<"scheduleAsyncUpdate";
|
||||||
@@ -765,12 +766,18 @@ void QmakeProject::scheduleAsyncUpdate()
|
|||||||
enableActiveQmakeBuildConfiguration(activeTarget(), false);
|
enableActiveQmakeBuildConfiguration(activeTarget(), false);
|
||||||
m_rootProjectNode->setParseInProgressRecursive(true);
|
m_rootProjectNode->setParseInProgressRecursive(true);
|
||||||
m_asyncUpdateState = AsyncFullUpdatePending;
|
m_asyncUpdateState = AsyncFullUpdatePending;
|
||||||
m_asyncUpdateTimer.start();
|
|
||||||
|
|
||||||
// Cancel running code model update
|
// Cancel running code model update
|
||||||
m_codeModelFuture.cancel();
|
m_codeModelFuture.cancel();
|
||||||
|
startAsyncTimer(delay);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void QmakeProject::startAsyncTimer(QmakeProFileNode::AsyncUpdateDelay delay)
|
||||||
|
{
|
||||||
|
m_asyncUpdateTimer.stop();
|
||||||
|
m_asyncUpdateTimer.setInterval(qMin(m_asyncUpdateTimer.interval(), delay == QmakeProFileNode::ParseLater ? 3000 : 0));
|
||||||
|
m_asyncUpdateTimer.start();
|
||||||
|
}
|
||||||
|
|
||||||
void QmakeProject::incrementPendingEvaluateFutures()
|
void QmakeProject::incrementPendingEvaluateFutures()
|
||||||
{
|
{
|
||||||
@@ -806,7 +813,7 @@ void QmakeProject::decrementPendingEvaluateFutures()
|
|||||||
if (m_asyncUpdateState == AsyncFullUpdatePending || m_asyncUpdateState == AsyncPartialUpdatePending) {
|
if (m_asyncUpdateState == AsyncFullUpdatePending || m_asyncUpdateState == AsyncPartialUpdatePending) {
|
||||||
if (debug)
|
if (debug)
|
||||||
qDebug()<<" Oh update is pending start the timer";
|
qDebug()<<" Oh update is pending start the timer";
|
||||||
m_asyncUpdateTimer.start();
|
startAsyncTimer(QmakeProFileNode::ParseLater);
|
||||||
} else if (m_asyncUpdateState != ShuttingDown){
|
} else if (m_asyncUpdateState != ShuttingDown){
|
||||||
// After being done, we need to call:
|
// After being done, we need to call:
|
||||||
m_asyncUpdateState = Base;
|
m_asyncUpdateState = Base;
|
||||||
@@ -1190,7 +1197,7 @@ void QmakeProject::notifyChanged(const QString &name)
|
|||||||
findProFile(name, rootQmakeProjectNode(), list);
|
findProFile(name, rootQmakeProjectNode(), list);
|
||||||
foreach (QmakeProFileNode *node, list) {
|
foreach (QmakeProFileNode *node, list) {
|
||||||
QtSupport::ProFileCacheManager::instance()->discardFile(name);
|
QtSupport::ProFileCacheManager::instance()->discardFile(name);
|
||||||
node->scheduleUpdate();
|
node->scheduleUpdate(QmakeProFileNode::ParseNow);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -108,7 +108,8 @@ public:
|
|||||||
void destroyProFileReader(QtSupport::ProFileReader *reader);
|
void destroyProFileReader(QtSupport::ProFileReader *reader);
|
||||||
|
|
||||||
/// \internal
|
/// \internal
|
||||||
void scheduleAsyncUpdate(QmakeProjectManager::QmakeProFileNode *node);
|
void scheduleAsyncUpdate(QmakeProjectManager::QmakeProFileNode *node,
|
||||||
|
QmakeProFileNode::AsyncUpdateDelay delay = QmakeProFileNode::ParseLater);
|
||||||
/// \internal
|
/// \internal
|
||||||
void incrementPendingEvaluateFutures();
|
void incrementPendingEvaluateFutures();
|
||||||
/// \internal
|
/// \internal
|
||||||
@@ -146,7 +147,7 @@ signals:
|
|||||||
void proFilesEvaluated();
|
void proFilesEvaluated();
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void scheduleAsyncUpdate();
|
void scheduleAsyncUpdate(QmakeProFileNode::AsyncUpdateDelay delay = QmakeProFileNode::ParseLater);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool fromMap(const QVariantMap &map);
|
bool fromMap(const QVariantMap &map);
|
||||||
@@ -177,6 +178,7 @@ private:
|
|||||||
ProjectExplorer::DeploymentData &deploymentData);
|
ProjectExplorer::DeploymentData &deploymentData);
|
||||||
void collectLibraryData(const QmakeProFileNode *node,
|
void collectLibraryData(const QmakeProFileNode *node,
|
||||||
ProjectExplorer::DeploymentData &deploymentData);
|
ProjectExplorer::DeploymentData &deploymentData);
|
||||||
|
void startAsyncTimer(QmakeProFileNode::AsyncUpdateDelay delay);
|
||||||
bool matchesKit(const ProjectExplorer::Kit *kit);
|
bool matchesKit(const ProjectExplorer::Kit *kit);
|
||||||
|
|
||||||
QmakeManager *m_manager;
|
QmakeManager *m_manager;
|
||||||
|
|||||||
Reference in New Issue
Block a user