logic: Added migration for C/C++ standard to ProjectSettings

* extended SettingsMigrator to support lambdas
* added PROJECT_STATE_NEEDS_MIGRATION and dialog for loading old project files
This commit is contained in:
Eberhard Graether
2016-09-15 12:23:18 +02:00
parent 73ef7c1bcb
commit 5680bf7b25
12 changed files with 261 additions and 82 deletions
+47
View File
@@ -3,6 +3,9 @@
#include "settings/CxxProjectSettings.h"
#include "settings/JavaProjectSettings.h"
#include "utility/utility.h"
#include "utility/utilityString.h"
const size_t ProjectSettings::VERSION = 1;
LanguageType ProjectSettings::getLanguageOfProject(FilePath projectFilePath)
{
@@ -45,6 +48,22 @@ std::vector<std::string> ProjectSettings::getLanguageStandards() const
return std::vector<std::string>();
}
bool ProjectSettings::needMigration() const
{
return getMigrations().willMigrate(this, ProjectSettings::VERSION);
}
void ProjectSettings::migrate()
{
SettingsMigrator migrator = getMigrations();
bool migrated = migrator.migrate(this, ProjectSettings::VERSION);
if (migrated)
{
save();
}
}
bool ProjectSettings::reload()
{
return Settings::load(getFilePath());
@@ -163,3 +182,31 @@ std::string ProjectSettings::getDefaultStandard() const
return "";
}
SettingsMigrator ProjectSettings::getMigrations() const
{
SettingsMigrator migrator;
if (getLanguage() == LANGUAGE_C || getLanguage() == LANGUAGE_CPP)
{
migrator.addLambdaMigration(1,
[](Settings* settings)
{
ProjectSettings* s = dynamic_cast<ProjectSettings*>(settings);
if (s->getLanguage() == LANGUAGE_C && !utility::isPrefix("c", s->getStandard()))
{
s->setStandard("c" + s->getStandard());
}
if (s->getLanguage() == LANGUAGE_CPP && !utility::isPrefix("c++", s->getStandard()))
{
s->setStandard("c++" + s->getStandard());
}
}
);
}
return migrator;
}