Commit cc995d13 authored by Thorbjørn Lindeijer's avatar Thorbjørn Lindeijer

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.
parent 9c8f4e30
......@@ -202,7 +202,6 @@ void MakeStep::removeDirectory(const QString &dir)
m_openDirectories.remove(dir);
}
CMakeProject *MakeStep::project() const
{
return m_pro;
......
......@@ -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)
......
......@@ -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;
......
......@@ -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);
}
}
}
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