Make all projects generate a fresh project tree

Do not update the existing project tree anymore: Start a fresh one
and throw the old one away.

Change-Id: Ifabe293b6ca668b0672516a6d81acd5346d98fe5
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
Tobias Hunger
2017-03-03 15:13:06 +01:00
parent 71a5aee36f
commit 2fde3fffa9
14 changed files with 44 additions and 38 deletions

View File

@@ -180,13 +180,11 @@ QStringList unreferencedBuildSystemFiles(const qbs::Project &p)
namespace QbsProjectManager {
namespace Internal {
void QbsNodeTreeBuilder::buildTree(QbsProject *project)
QbsRootProjectNode *QbsNodeTreeBuilder::buildTree(QbsProject *project)
{
QbsRootProjectNode *root = project->rootProjectNode();
QTC_ASSERT(root, return);
root->makeEmpty();
root->addNode(new ProjectExplorer::FileNode(project->projectFilePath(), ProjectExplorer::FileType::Project, false));
auto root = new QbsRootProjectNode(project);
root->addNode(new ProjectExplorer::FileNode(project->projectFilePath(),
ProjectExplorer::FileType::Project, false));
auto buildSystemFiles
= new ProjectExplorer::FolderNode(project->projectDirectory(),
@@ -205,8 +203,7 @@ void QbsNodeTreeBuilder::buildTree(QbsProject *project)
root->addNode(buildSystemFiles);
setupProjectNode(root, project->qbsProjectData(), project->qbsProject());
root->emitNodeUpdated();
root->emitTreeChanged();
return root;
}
} // namespace Internal

View File

@@ -39,7 +39,7 @@ namespace Internal {
class QbsNodeTreeBuilder
{
public:
static void buildTree(QbsProject *project);
static QbsRootProjectNode *buildTree(QbsProject *project);
};
} // namespace Internal

View File

@@ -131,8 +131,9 @@ QbsProject::QbsProject(const FileName &fileName) :
setId(Constants::PROJECT_ID);
setDocument(new QbsProjectFile(this, fileName));
DocumentManager::addDocument(document());
setRootProjectNode(new QbsRootProjectNode(this));
auto newRoot = new QbsRootProjectNode(this);
Internal::QbsNodeTreeBuilder::buildTree(this); // Populate with initial data
setRootProjectNode(newRoot);
setProjectContext(Context(Constants::PROJECT_ID));
setProjectLanguages(Context(ProjectExplorer::Constants::CXX_LANGUAGE_ID));
@@ -314,7 +315,7 @@ bool QbsProject::addFilesToProduct(const QStringList &filePaths,
}
if (notAdded->count() != filePaths.count()) {
m_projectData = m_qbsProject.projectData();
Internal::QbsNodeTreeBuilder::buildTree(this);
setRootProjectNode(Internal::QbsNodeTreeBuilder::buildTree(this));
emit fileListChanged();
}
return notAdded->isEmpty();
@@ -342,7 +343,7 @@ bool QbsProject::removeFilesFromProduct(const QStringList &filePaths,
}
if (notRemoved->count() != filePaths.count()) {
m_projectData = m_qbsProject.projectData();
Internal::QbsNodeTreeBuilder::buildTree(this);
setRootProjectNode(Internal::QbsNodeTreeBuilder::buildTree(this));
emit fileListChanged();
}
return notRemoved->isEmpty();
@@ -484,7 +485,7 @@ void QbsProject::updateAfterParse()
void QbsProject::updateProjectNodes()
{
OpTimer opTimer("updateProjectNodes");
Internal::QbsNodeTreeBuilder::buildTree(this);
setRootProjectNode(Internal::QbsNodeTreeBuilder::buildTree(this));
}
void QbsProject::handleQbsParsingDone(bool success)