From cc995d13eeb0aea32e402fba9fae00d5554768ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thorbj=C3=B8rn=20Lindeijer?= <thorbjorn.lindeijer@nokia.com> Date: Thu, 19 Mar 2009 17:58:56 +0100 Subject: [PATCH] Allow updating of configuration or file list separately Now it will only update the list of files when you edit [project].files, and only reparse all files when you edit [project].config or [project].includes. When updating the file list it will only parse the added files. --- src/plugins/cmakeprojectmanager/makestep.cpp | 1 - .../genericprojectmanager/genericproject.cpp | 62 ++++++++++++------- .../genericprojectmanager/genericproject.h | 13 ++-- .../genericprojectmanager.cpp | 12 ++-- 4 files changed, 54 insertions(+), 34 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/makestep.cpp b/src/plugins/cmakeprojectmanager/makestep.cpp index d7544b62e57..8417e842af8 100644 --- a/src/plugins/cmakeprojectmanager/makestep.cpp +++ b/src/plugins/cmakeprojectmanager/makestep.cpp @@ -202,7 +202,6 @@ void MakeStep::removeDirectory(const QString &dir) m_openDirectories.remove(dir); } - CMakeProject *MakeStep::project() const { return m_pro; diff --git a/src/plugins/genericprojectmanager/genericproject.cpp b/src/plugins/genericprojectmanager/genericproject.cpp index 679e16f8959..c0f497c062d 100644 --- a/src/plugins/genericprojectmanager/genericproject.cpp +++ b/src/plugins/genericprojectmanager/genericproject.cpp @@ -143,7 +143,7 @@ QString GenericProject::includesFileName() const QString GenericProject::configFileName() const { return m_configFileName; } -QStringList GenericProject::readLines(const QString &absoluteFileName) const +static QStringList readLines(const QString &absoluteFileName) { QStringList lines; @@ -168,34 +168,41 @@ QStringList GenericProject::readLines(const QString &absoluteFileName) const } -void GenericProject::parseProject() +void GenericProject::parseProject(RefreshOptions options) { - const QFileInfo projectFileInfo(m_fileName); - - QSettings projectInfo(m_fileName, QSettings::IniFormat); - - m_files = convertToAbsoluteFiles(readLines(filesFileName())); - m_files.removeDuplicates(); + if (options & Files) { + m_files = convertToAbsoluteFiles(readLines(filesFileName())); + m_files.removeDuplicates(); + } - m_projectIncludePaths = readLines(includesFileName()); - m_projectIncludePaths.removeDuplicates(); + if (options & Configuration) { + m_projectIncludePaths = readLines(includesFileName()); + m_projectIncludePaths.removeDuplicates(); - m_generated = convertToAbsoluteFiles(projectInfo.value(QLatin1String("generated")).toStringList()); + QSettings projectInfo(m_fileName, QSettings::IniFormat); + m_generated = convertToAbsoluteFiles(projectInfo.value(QLatin1String("generated")).toStringList()); - m_defines.clear(); + m_defines.clear(); - QFile configFile(configFileName()); - if (configFile.open(QFile::ReadOnly)) - m_defines = configFile.readAll(); + QFile configFile(configFileName()); + if (configFile.open(QFile::ReadOnly)) + m_defines = configFile.readAll(); + } - emit fileListChanged(); + if (options & Files) + emit fileListChanged(); } -void GenericProject::refresh() +void GenericProject::refresh(RefreshOptions options) { - parseProject(); + QSet<QString> oldFileList; + if (!(options & Configuration)) + oldFileList = m_files.toSet(); - m_rootNode->refresh(); + parseProject(options); + + if (options & Files) + m_rootNode->refresh(); CppTools::CppModelManagerInterface *modelManager = ExtensionSystem::PluginManager::instance()->getObject<CppTools::CppModelManagerInterface>(); @@ -214,7 +221,6 @@ void GenericProject::refresh() foreach (const ProjectExplorer::HeaderPath &headerPath, m_toolChain->systemHeaderPaths()) { if (headerPath.kind() == ProjectExplorer::HeaderPath::FrameworkHeaderPath) allFrameworkPaths.append(headerPath.path()); - else allIncludePaths.append(headerPath.path()); } @@ -228,8 +234,17 @@ void GenericProject::refresh() pinfo.sourceFiles = files(); pinfo.sourceFiles += generated(); - QStringList filesToUpdate = pinfo.sourceFiles; - filesToUpdate.append(QLatin1String("<configuration>")); // XXX don't hardcode configuration file name + QStringList filesToUpdate; + + if (options & Configuration) { + filesToUpdate = pinfo.sourceFiles; + filesToUpdate.append(QLatin1String("<configuration>")); // XXX don't hardcode configuration file name + } else if (options & Files) { + // Only update files that got added to the list + QSet<QString> newFileList = m_files.toSet(); + newFileList.subtract(oldFileList); + filesToUpdate.append(newFileList.toList()); + } modelManager->updateProjectInfo(pinfo); modelManager->updateSourceFiles(filesToUpdate); @@ -450,8 +465,7 @@ void GenericProject::restoreSettingsImpl(ProjectExplorer::PersistentSettingsRead setIncludePaths(allIncludePaths()); - parseProject(); - refresh(); + refresh(Everything); } void GenericProject::saveSettingsImpl(ProjectExplorer::PersistentSettingsWriter &writer) diff --git a/src/plugins/genericprojectmanager/genericproject.h b/src/plugins/genericprojectmanager/genericproject.h index a332b43c99d..25877c40acf 100644 --- a/src/plugins/genericprojectmanager/genericproject.h +++ b/src/plugins/genericprojectmanager/genericproject.h @@ -94,6 +94,14 @@ public: QString buildParser(const QString &buildConfiguration) const; ProjectExplorer::ToolChain *toolChain() const; + enum RefreshOptions { + Files = 0x01, + Configuration = 0x02, + Everything = Files | Configuration + }; + + void refresh(RefreshOptions options); + QStringList includePaths() const; void setIncludePaths(const QStringList &includePaths); @@ -106,18 +114,15 @@ public: public Q_SLOTS: void setToolChainId(const QString &toolChainId); - void refresh(); protected: virtual void saveSettingsImpl(ProjectExplorer::PersistentSettingsWriter &writer); virtual void restoreSettingsImpl(ProjectExplorer::PersistentSettingsReader &reader); private: - void parseProject(); + void parseProject(RefreshOptions options); QStringList convertToAbsoluteFiles(const QStringList &paths) const; - QStringList readLines(const QString &absoluteFileName) const; - Manager *m_manager; QString m_fileName; QString m_filesFileName; diff --git a/src/plugins/genericprojectmanager/genericprojectmanager.cpp b/src/plugins/genericprojectmanager/genericprojectmanager.cpp index 5495173f8de..58f19648a36 100644 --- a/src/plugins/genericprojectmanager/genericprojectmanager.cpp +++ b/src/plugins/genericprojectmanager/genericprojectmanager.cpp @@ -79,10 +79,12 @@ void Manager::unregisterProject(GenericProject *project) void Manager::notifyChanged(const QString &fileName) { foreach (GenericProject *project, m_projects) { - if (fileName == project->filesFileName() || - fileName == project->includesFileName() || - fileName == project->configFileName()) - project->refresh(); + if (fileName == project->filesFileName()) { + project->refresh(GenericProject::Files); + } + else if (fileName == project->includesFileName() || + fileName == project->configFileName()) { + project->refresh(GenericProject::Configuration); + } } } - -- GitLab