Commit 6b1bc495 authored by Daniel Teske's avatar Daniel Teske
Browse files

Add Qt4PriFileNode::subProjectNodesExact which uses the exact parse

Change-Id: Ic6b8dedbc31830295e3dccea82c5f6514840dc57
Reviewed-on: http://codereview.qt.nokia.com/4282

Reviewed-by: default avatarChristian Kandeler <christian.kandeler@nokia.com>
Reviewed-by: default avatarQt Sanity Bot <qt_sanity_bot@ovi.com>
parent ba2ffd45
......@@ -248,7 +248,8 @@ Qt4PriFileNode::Qt4PriFileNode(Qt4Project *project, Qt4ProFileNode* qt4ProFileNo
m_project(project),
m_qt4ProFileNode(qt4ProFileNode),
m_projectFilePath(QDir::fromNativeSeparators(filePath)),
m_projectDir(QFileInfo(filePath).absolutePath())
m_projectDir(QFileInfo(filePath).absolutePath()),
m_includedInExactParse(true)
{
Q_ASSERT(project);
m_qt4PriFile = new Qt4PriFile(this);
......@@ -768,6 +769,27 @@ QList<ProjectExplorer::RunConfiguration *> Qt4PriFileNode::runConfigurationsFor(
return m_project->activeTarget()->runConfigurationsForNode(node);
}
QList<Qt4PriFileNode *> Qt4PriFileNode::subProjectNodesExact() const
{
QList<Qt4PriFileNode *> nodes;
foreach (ProjectNode *node, subProjectNodes()) {
Qt4PriFileNode *n = qobject_cast<Qt4PriFileNode *>(node);
if (n && n->includedInExactParse())
nodes << n;
}
return nodes;
}
bool Qt4PriFileNode::includedInExactParse() const
{
return m_includedInExactParse;
}
void Qt4PriFileNode::setIncludedInExactParse(bool b)
{
m_includedInExactParse = b;
}
QList<ProjectNode::ProjectAction> Qt4PriFileNode::supportedActions(Node *node) const
{
QList<ProjectAction> actions;
......@@ -1618,10 +1640,13 @@ void Qt4ProFileNode::applyEvaluate(EvalResult evalResult, bool async)
QStringList newProjectFilesExact;
QHash<QString, ProFile*> includeFilesExact;
QSet<QString> exactSubdirs;
ProFile *fileForCurrentProjectExact = 0;
if (evalResult == EvalOk) {
if (m_projectType == SubDirsTemplate)
if (m_projectType == SubDirsTemplate) {
newProjectFilesExact = subDirsPaths(m_readerExact);
exactSubdirs = newProjectFilesExact.toSet();
}
foreach (ProFile *includeFile, m_readerExact->includeFiles()) {
if (includeFile->fileName() == m_projectFilePath) { // this file
fileForCurrentProjectExact = includeFile;
......@@ -1718,15 +1743,20 @@ void Qt4ProFileNode::applyEvaluate(EvalResult evalResult, bool async)
ProFile *fileExact = includeFilesExact.value((*existingIt)->path());
ProFile *fileCumlative = includeFilesCumlative.value((*existingIt)->path());
if (fileExact || fileCumlative) {
static_cast<Qt4PriFileNode *>(*existingIt)->update(fileExact, m_readerExact, fileCumlative, m_readerCumulative);
Qt4PriFileNode *priFileNode = static_cast<Qt4PriFileNode *>(*existingIt);
priFileNode->update(fileExact, m_readerExact, fileCumlative, m_readerCumulative);
priFileNode->setIncludedInExactParse(fileExact != 0 && includedInExactParse());
} else {
// We always parse exactly, because we later when async parsing don't know whether
// the .pro file is included in this .pro file
// So to compare that later parse with the sync one
Qt4ProFileNode *proFileNode = static_cast<Qt4ProFileNode *>(*existingIt);
// TODO that could be made faster...
proFileNode->setIncludedInExactParse(exactSubdirs.contains(proFileNode->path()) && includedInExactParse());
if (async)
static_cast<Qt4ProFileNode *>(*existingIt)->asyncUpdate();
proFileNode->asyncUpdate();
else
static_cast<Qt4ProFileNode *>(*existingIt)->update();
proFileNode->update();
}
++existingIt;
// newCumalativeIt and newExactIt are already incremented
......@@ -1752,11 +1782,13 @@ void Qt4ProFileNode::applyEvaluate(EvalResult evalResult, bool async)
} else if (fileExact || fileCumlative) {
Qt4PriFileNode *qt4PriFileNode = new Qt4PriFileNode(m_project, this, nodeToAdd);
qt4PriFileNode->setParentFolderNode(this); // Needed for loop detection
qt4PriFileNode->setIncludedInExactParse(fileExact != 0 && includedInExactParse());
qt4PriFileNode->update(fileExact, m_readerExact, fileCumlative, m_readerCumulative);
toAdd << qt4PriFileNode;
} else {
Qt4ProFileNode *qt4ProFileNode = new Qt4ProFileNode(m_project, nodeToAdd);
qt4ProFileNode->setParentFolderNode(this); // Needed for loop detection
qt4ProFileNode->setIncludedInExactParse(exactSubdirs.contains(qt4ProFileNode->path()) && includedInExactParse());
if (async)
qt4ProFileNode->asyncUpdate();
else
......
......@@ -151,7 +151,13 @@ public:
bool deploysFolder(const QString &folder) const;
QList<ProjectExplorer::RunConfiguration *> runConfigurationsFor(Node *node);
QList<Qt4PriFileNode*> subProjectNodesExact() const;
// Set by parent
bool includedInExactParse() const;
protected:
void setIncludedInExactParse(bool b);
void clear();
static QStringList varNames(FileType type);
static QStringList dynamicVarNames(QtSupport::ProFileReader *readerExact, QtSupport::ProFileReader *readerCumulative);
......@@ -197,6 +203,7 @@ private:
QMap<ProjectExplorer::FileType, QSet<QString> > m_files;
QSet<QString> m_recursiveEnumerateFiles;
QSet<QString> m_watchedFolders;
bool m_includedInExactParse;
// managed by Qt4ProFileNode
friend class Qt4ProjectManager::Qt4ProFileNode;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment