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:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user