diff --git a/bin/app/user/projects/javaparser/javaparser.srctrlprj b/bin/app/user/projects/javaparser/javaparser.srctrlprj
index 4544ffa5..c86ffc4d 100644
--- a/bin/app/user/projects/javaparser/javaparser.srctrlprj
+++ b/bin/app/user/projects/javaparser/javaparser.srctrlprj
@@ -17,6 +17,7 @@
+ 8
Javaparser Source Group
.java
@@ -25,11 +26,10 @@
./src/main/java
./target/generated-sources/javacc
- 8
enabled
Java Source Group
1
- 6
+ 7
diff --git a/bin/app/user/projects/tictactoe/tictactoe.srctrlprj b/bin/app/user/projects/tictactoe/tictactoe.srctrlprj
index b0b097a7..b1049400 100644
--- a/bin/app/user/projects/tictactoe/tictactoe.srctrlprj
+++ b/bin/app/user/projects/tictactoe/tictactoe.srctrlprj
@@ -2,6 +2,7 @@
+ c++2a
unknown
@@ -21,10 +22,9 @@
./src
- c++2a
enabled
C++ Source Group
- 6
+ 7
diff --git a/bin/app/user/projects/tutorial/tutorial.srctrlprj b/bin/app/user/projects/tutorial/tutorial.srctrlprj
index 1dd95ab2..9085f23a 100644
--- a/bin/app/user/projects/tutorial/tutorial.srctrlprj
+++ b/bin/app/user/projects/tutorial/tutorial.srctrlprj
@@ -17,6 +17,7 @@
+ c++2a
unknown
@@ -33,10 +34,9 @@
./src
- c++2a
enabled
C++ Source Group
- 6
+ 7
diff --git a/src/lib/CMakeLists.txt b/src/lib/CMakeLists.txt
index a614a32d..633cf90e 100644
--- a/src/lib/CMakeLists.txt
+++ b/src/lib/CMakeLists.txt
@@ -316,8 +316,14 @@ add_files(
settings/SourceGroupSettings.h
settings/SourceGroupSettingsCxx.cpp
settings/SourceGroupSettingsCxx.h
+ settings/SourceGroupSettingsCEmpty.cpp
+ settings/SourceGroupSettingsCEmpty.h
+ settings/SourceGroupSettingsCppEmpty.cpp
+ settings/SourceGroupSettingsCppEmpty.h
settings/SourceGroupSettingsCxxCdb.cpp
settings/SourceGroupSettingsCxxCdb.h
+ settings/SourceGroupSettingsCxxCodeblocks.cpp
+ settings/SourceGroupSettingsCxxCodeblocks.h
settings/SourceGroupSettingsCxxEmpty.cpp
settings/SourceGroupSettingsCxxEmpty.h
settings/SourceGroupSettingsCxxSonargraph.cpp
@@ -334,12 +340,20 @@ add_files(
settings/SourceGroupSettingsJavaSonargraph.h
settings/SourceGroupSettingsWithClasspath.cpp
settings/SourceGroupSettingsWithClasspath.h
+ settings/SourceGroupSettingsWithCppStandard.cpp
+ settings/SourceGroupSettingsWithCppStandard.h
+ settings/SourceGroupSettingsWithCStandard.cpp
+ settings/SourceGroupSettingsWithCStandard.h
settings/SourceGroupSettingsWithExcludeFilters.cpp
settings/SourceGroupSettingsWithExcludeFilters.h
settings/SourceGroupSettingsWithIndexedHeaderPaths.cpp
settings/SourceGroupSettingsWithIndexedHeaderPaths.h
+ settings/SourceGroupSettingsWithJavaStandard.cpp
+ settings/SourceGroupSettingsWithJavaStandard.h
settings/SourceGroupSettingsWithSonargraphProjectPath.cpp
settings/SourceGroupSettingsWithSonargraphProjectPath.h
+ settings/SourceGroupSettingsWithSourceExtensions.cpp
+ settings/SourceGroupSettingsWithSourceExtensions.h
settings/SourceGroupSettingsWithSourcePaths.cpp
settings/SourceGroupSettingsWithSourcePaths.h
settings/SourceGroupStatusType.cpp
diff --git a/src/lib/settings/LanguageType.cpp b/src/lib/settings/LanguageType.cpp
index d1172485..57aaa85a 100644
--- a/src/lib/settings/LanguageType.cpp
+++ b/src/lib/settings/LanguageType.cpp
@@ -43,6 +43,8 @@ LanguageType getLanguageTypeForSourceGroupType(SourceGroupType t)
return LANGUAGE_CPP;
case SOURCE_GROUP_CXX_CDB:
return LANGUAGE_CPP;
+ case SOURCE_GROUP_CXX_CODEBLOCKS:
+ return LANGUAGE_CPP;
case SOURCE_GROUP_CXX_SONARGRAPH:
return LANGUAGE_CPP;
case SOURCE_GROUP_CXX_VS:
diff --git a/src/lib/settings/ProjectSettings.cpp b/src/lib/settings/ProjectSettings.cpp
index b1949b40..568abbf7 100644
--- a/src/lib/settings/ProjectSettings.cpp
+++ b/src/lib/settings/ProjectSettings.cpp
@@ -3,8 +3,10 @@
#include "settings/migration/SettingsMigrationDeleteKey.h"
#include "settings/migration/SettingsMigrationLambda.h"
#include "settings/migration/SettingsMigrationMoveKey.h"
+#include "settings/SourceGroupSettingsCEmpty.h"
+#include "settings/SourceGroupSettingsCppEmpty.h"
#include "settings/SourceGroupSettingsCxxCdb.h"
-#include "settings/SourceGroupSettingsCxxEmpty.h"
+#include "settings/SourceGroupSettingsCxxCodeblocks.h"
#include "settings/SourceGroupSettingsCxxSonargraph.h"
#include "settings/SourceGroupSettingsJavaEmpty.h"
#include "settings/SourceGroupSettingsJavaMaven.h"
@@ -14,7 +16,7 @@
#include "utility/utilityString.h"
#include "utility/utilityUuid.h"
-const size_t ProjectSettings::VERSION = 6;
+const size_t ProjectSettings::VERSION = 7;
const wchar_t PROJECT_FILE_EXTENSION[] = L".srctrlprj";
LanguageType ProjectSettings::getLanguageOfProject(const FilePath& filePath)
@@ -144,14 +146,17 @@ std::vector> ProjectSettings::getAllSourceG
switch (type)
{
case SOURCE_GROUP_C_EMPTY:
- settings = std::make_shared(id, SOURCE_GROUP_C_EMPTY, this);
+ settings = std::make_shared(id, this);
break;
case SOURCE_GROUP_CPP_EMPTY:
- settings = std::make_shared(id, SOURCE_GROUP_CPP_EMPTY, this);
+ settings = std::make_shared(id, this);
break;
case SOURCE_GROUP_CXX_CDB:
settings = std::make_shared(id, this);
break;
+ case SOURCE_GROUP_CXX_CODEBLOCKS:
+ settings = std::make_shared(id, this);
+ break;
case SOURCE_GROUP_CXX_SONARGRAPH:
settings = std::make_shared(id, this);
break;
@@ -337,6 +342,26 @@ SettingsMigrator ProjectSettings::getMigrations() const
}
}
+ for (std::shared_ptr sourceGroupSettings : getAllSourceGroupSettings())
+ {
+ std::string languageName;
+ switch (getLanguageTypeForSourceGroupType(sourceGroupSettings->getType()))
+ {
+ case LANGUAGE_C:
+ languageName = "c";
+ break;
+ case LANGUAGE_CPP:
+ languageName = "cpp";
+ break;
+ case LANGUAGE_JAVA:
+ languageName = "java";
+ break;
+ }
+
+ std::string key = SourceGroupSettings::s_keyPrefix + sourceGroupSettings->getId();
+ migrator.addMigration(7, std::make_shared(key + "/standard", key + "/" + languageName + "_standard"));
+ }
+
return migrator;
}
diff --git a/src/lib/settings/SourceGroupSettings.cpp b/src/lib/settings/SourceGroupSettings.cpp
index 79b0f22a..3ad5591f 100644
--- a/src/lib/settings/SourceGroupSettings.cpp
+++ b/src/lib/settings/SourceGroupSettings.cpp
@@ -14,7 +14,6 @@ SourceGroupSettings::SourceGroupSettings(
, m_name(sourceGroupTypeToString(type))
, m_type(type)
, m_status(SOURCE_GROUP_STATUS_ENABLED)
- , m_standard("")
{
}
@@ -29,7 +28,6 @@ void SourceGroupSettings::load(std::shared_ptr config)
}
setStatus(stringToSourceGroupStatusType(config->getValueOrDefault(key + "/status", sourceGroupStatusTypeToString(SOURCE_GROUP_STATUS_ENABLED))));
- setStandard(config->getValueOrDefault(key + "/standard", ""));
}
void SourceGroupSettings::save(std::shared_ptr config)
@@ -38,7 +36,6 @@ void SourceGroupSettings::save(std::shared_ptr config)
config->setValue(key + "/status", sourceGroupStatusTypeToString(getStatus()));
config->setValue(key + "/name", getName());
- config->setValue(key + "/standard", getStandard());
}
bool SourceGroupSettings::equals(std::shared_ptr other) const
@@ -47,8 +44,7 @@ bool SourceGroupSettings::equals(std::shared_ptr other) con
m_id == other->m_id &&
m_name == other->m_name &&
m_type == other->m_type &&
- m_status == other->m_status &&
- m_standard == other->m_standard
+ m_status == other->m_status
);
}
@@ -106,17 +102,3 @@ std::vector SourceGroupSettings::makePathsExpandedAndAbsolute(const st
{
return m_projectSettings->makePathsExpandedAndAbsolute(paths);
}
-
-std::string SourceGroupSettings::getStandard() const
-{
- if (m_standard.empty())
- {
- return getDefaultStandard();
- }
- return m_standard;
-}
-
-void SourceGroupSettings::setStandard(const std::string& standard)
-{
- m_standard = standard;
-}
diff --git a/src/lib/settings/SourceGroupSettings.h b/src/lib/settings/SourceGroupSettings.h
index a6fe9cef..6f0782db 100644
--- a/src/lib/settings/SourceGroupSettings.h
+++ b/src/lib/settings/SourceGroupSettings.h
@@ -42,23 +42,14 @@ public:
FilePath makePathExpandedAndAbsolute(const FilePath& path) const;
std::vector makePathsExpandedAndAbsolute(const std::vector& paths) const;
- virtual std::vector getAvailableLanguageStandards() const = 0;
-
- std::string getStandard() const;
- void setStandard(const std::string& standard);
-
protected:
const ProjectSettings* m_projectSettings;
private:
- virtual std::string getDefaultStandard() const = 0;
-
std::string m_id;
std::string m_name;
const SourceGroupType m_type;
SourceGroupStatusType m_status;
-
- std::string m_standard;
};
#endif // SOURCE_GROUP_SETTINGS_H
diff --git a/src/lib/settings/SourceGroupSettingsCEmpty.cpp b/src/lib/settings/SourceGroupSettingsCEmpty.cpp
new file mode 100644
index 00000000..ecf53b0f
--- /dev/null
+++ b/src/lib/settings/SourceGroupSettingsCEmpty.cpp
@@ -0,0 +1,45 @@
+#include "settings/SourceGroupSettingsCEmpty.h"
+
+SourceGroupSettingsCEmpty::SourceGroupSettingsCEmpty(const std::string& id, const ProjectSettings* projectSettings)
+ : SourceGroupSettingsCxxEmpty(id, SOURCE_GROUP_C_EMPTY, projectSettings)
+{
+}
+
+void SourceGroupSettingsCEmpty::load(std::shared_ptr config)
+{
+ SourceGroupSettingsCxxEmpty::load(config);
+
+ const std::string key = s_keyPrefix + getId();
+
+ SourceGroupSettingsWithCStandard::load(config, key);
+}
+
+void SourceGroupSettingsCEmpty::save(std::shared_ptr config)
+{
+ SourceGroupSettingsCxxEmpty::save(config);
+
+ const std::string key = s_keyPrefix + getId();
+
+ SourceGroupSettingsWithCStandard::save(config, key);
+}
+
+bool SourceGroupSettingsCEmpty::equals(std::shared_ptr other) const
+{
+ std::shared_ptr otherCxxEmpty = std::dynamic_pointer_cast(other);
+
+ return (
+ otherCxxEmpty &&
+ SourceGroupSettingsCxxEmpty::equals(other) &&
+ SourceGroupSettingsWithCStandard::equals(otherCxxEmpty)
+ );
+}
+
+const ProjectSettings* SourceGroupSettingsCEmpty::getProjectSettings() const
+{
+ return m_projectSettings;
+}
+
+std::vector SourceGroupSettingsCEmpty::getDefaultSourceExtensions() const
+{
+ return { L".c" };
+}
diff --git a/src/lib/settings/SourceGroupSettingsCEmpty.h b/src/lib/settings/SourceGroupSettingsCEmpty.h
new file mode 100644
index 00000000..f0e38a05
--- /dev/null
+++ b/src/lib/settings/SourceGroupSettingsCEmpty.h
@@ -0,0 +1,24 @@
+#ifndef SOURCE_GROUP_SETTINGS_C_EMPTY_H
+#define SOURCE_GROUP_SETTINGS_C_EMPTY_H
+
+#include "settings/SourceGroupSettingsCxxEmpty.h"
+#include "settings/SourceGroupSettingsWithCStandard.h"
+
+class SourceGroupSettingsCEmpty
+ : public SourceGroupSettingsCxxEmpty
+ , public SourceGroupSettingsWithCStandard
+{
+public:
+ SourceGroupSettingsCEmpty(const std::string& id, const ProjectSettings* projectSettings);
+
+ void load(std::shared_ptr config) override;
+ void save(std::shared_ptr config) override;
+
+ bool equals(std::shared_ptr other) const override;
+
+private:
+ const ProjectSettings* getProjectSettings() const override;
+ std::vector getDefaultSourceExtensions() const override;
+};
+
+#endif // SOURCE_GROUP_SETTINGS_C_EMPTY_H
diff --git a/src/lib/settings/SourceGroupSettingsCppEmpty.cpp b/src/lib/settings/SourceGroupSettingsCppEmpty.cpp
new file mode 100644
index 00000000..c6e86fc5
--- /dev/null
+++ b/src/lib/settings/SourceGroupSettingsCppEmpty.cpp
@@ -0,0 +1,49 @@
+#include "settings/SourceGroupSettingsCppEmpty.h"
+
+SourceGroupSettingsCppEmpty::SourceGroupSettingsCppEmpty(const std::string& id, const ProjectSettings* projectSettings)
+ : SourceGroupSettingsCxxEmpty(id, SOURCE_GROUP_CPP_EMPTY, projectSettings)
+{
+}
+
+void SourceGroupSettingsCppEmpty::load(std::shared_ptr config)
+{
+ SourceGroupSettingsCxxEmpty::load(config);
+
+ const std::string key = s_keyPrefix + getId();
+
+ SourceGroupSettingsWithCppStandard::load(config, key);
+}
+
+void SourceGroupSettingsCppEmpty::save(std::shared_ptr config)
+{
+ SourceGroupSettingsCxxEmpty::save(config);
+
+ const std::string key = s_keyPrefix + getId();
+
+ SourceGroupSettingsWithCppStandard::save(config, key);
+}
+
+bool SourceGroupSettingsCppEmpty::equals(std::shared_ptr other) const
+{
+ std::shared_ptr otherCxxEmpty = std::dynamic_pointer_cast(other);
+
+ return (
+ otherCxxEmpty &&
+ SourceGroupSettingsCxxEmpty::equals(other) &&
+ SourceGroupSettingsWithCppStandard::equals(otherCxxEmpty)
+ );
+}
+
+const ProjectSettings* SourceGroupSettingsCppEmpty::getProjectSettings() const
+{
+ return m_projectSettings;
+}
+
+std::vector SourceGroupSettingsCppEmpty::getDefaultSourceExtensions() const
+{
+ return {
+ L".cpp",
+ L".cxx",
+ L".cc"
+ };
+}
diff --git a/src/lib/settings/SourceGroupSettingsCppEmpty.h b/src/lib/settings/SourceGroupSettingsCppEmpty.h
new file mode 100644
index 00000000..34a339f1
--- /dev/null
+++ b/src/lib/settings/SourceGroupSettingsCppEmpty.h
@@ -0,0 +1,24 @@
+#ifndef SOURCE_GROUP_SETTINGS_CPP_EMPTY_H
+#define SOURCE_GROUP_SETTINGS_CPP_EMPTY_H
+
+#include "settings/SourceGroupSettingsCxxEmpty.h"
+#include "settings/SourceGroupSettingsWithCppStandard.h"
+
+class SourceGroupSettingsCppEmpty
+ : public SourceGroupSettingsCxxEmpty
+ , public SourceGroupSettingsWithCppStandard
+{
+public:
+ SourceGroupSettingsCppEmpty(const std::string& id, const ProjectSettings* projectSettings);
+
+ void load(std::shared_ptr config) override;
+ void save(std::shared_ptr config) override;
+
+ bool equals(std::shared_ptr other) const override;
+
+private:
+ const ProjectSettings* getProjectSettings() const override;
+ std::vector getDefaultSourceExtensions() const override;
+};
+
+#endif // SOURCE_GROUP_SETTINGS_CPP_EMPTY_H
diff --git a/src/lib/settings/SourceGroupSettingsCxx.cpp b/src/lib/settings/SourceGroupSettingsCxx.cpp
index 12605ba6..f1eccd87 100644
--- a/src/lib/settings/SourceGroupSettingsCxx.cpp
+++ b/src/lib/settings/SourceGroupSettingsCxx.cpp
@@ -47,60 +47,6 @@ bool SourceGroupSettingsCxx::equals(std::shared_ptr other)
);
}
-std::vector SourceGroupSettingsCxx::getAvailableLanguageStandards() const
-{
- std::vector standards;
-
- switch (getType())
- {
- case SOURCE_GROUP_CPP_EMPTY:
- case SOURCE_GROUP_CXX_CDB:
- case SOURCE_GROUP_CXX_SONARGRAPH:
- standards.push_back("c++2a");
- standards.push_back("gnu++2a");
-
- standards.push_back("c++17");
- standards.push_back("gnu++17");
-
- standards.push_back("c++14");
- standards.push_back("gnu++14");
-
- standards.push_back("c++11");
- standards.push_back("gnu++11");
-
- standards.push_back("c++03");
- standards.push_back("gnu++03");
-
- standards.push_back("c++98");
- standards.push_back("gnu++98");
- break;
-
- case SOURCE_GROUP_C_EMPTY:
- standards.push_back("c11");
- standards.push_back("gnu11");
- standards.push_back("iso9899:2011");
-
- standards.push_back("c99");
- standards.push_back("gnu99");
- standards.push_back("iso9899:1999");
-
- standards.push_back("iso9899:199409");
-
- standards.push_back("c90");
- standards.push_back("gnu90");
- standards.push_back("iso9899:1990");
-
- standards.push_back("c89");
- standards.push_back("gnu89");
- break;
-
- default:
- break;
- }
-
- return standards;
-}
-
std::vector SourceGroupSettingsCxx::getHeaderSearchPaths() const
{
return m_headerSearchPaths;
@@ -140,20 +86,3 @@ void SourceGroupSettingsCxx::setCompilerFlags(const std::vector& c
{
m_compilerFlags = compilerFlags;
}
-
-std::string SourceGroupSettingsCxx::getDefaultStandard() const
-{
- switch (getType())
- {
- case SOURCE_GROUP_CPP_EMPTY:
- case SOURCE_GROUP_CXX_SONARGRAPH:
- return "c++17";
- case SOURCE_GROUP_C_EMPTY:
- return "c11";
- case SOURCE_GROUP_CXX_CDB:
- default:
- break;
- }
-
- return "";
-}
diff --git a/src/lib/settings/SourceGroupSettingsCxx.h b/src/lib/settings/SourceGroupSettingsCxx.h
index 088fec68..dc021d39 100644
--- a/src/lib/settings/SourceGroupSettingsCxx.h
+++ b/src/lib/settings/SourceGroupSettingsCxx.h
@@ -3,6 +3,8 @@
#include "settings/SourceGroupSettings.h"
+#include "utility/file/FilePath.h"
+
class SourceGroupSettingsCxx
: public SourceGroupSettings
{
@@ -14,8 +16,6 @@ public:
bool equals(std::shared_ptr other) const override;
- std::vector getAvailableLanguageStandards() const override;
-
std::vector getHeaderSearchPaths() const;
std::vector getHeaderSearchPathsExpandedAndAbsolute() const;
void setHeaderSearchPaths(const std::vector& headerSearchPaths);
@@ -28,8 +28,6 @@ public:
void setCompilerFlags(const std::vector& compilerFlags);
private:
- std::string getDefaultStandard() const override;
-
std::vector m_headerSearchPaths;
std::vector m_frameworkSearchPaths;
std::vector m_compilerFlags;
diff --git a/src/lib/settings/SourceGroupSettingsCxxCodeblocks.cpp b/src/lib/settings/SourceGroupSettingsCxxCodeblocks.cpp
new file mode 100644
index 00000000..e32e65cf
--- /dev/null
+++ b/src/lib/settings/SourceGroupSettingsCxxCodeblocks.cpp
@@ -0,0 +1,82 @@
+#include "settings/SourceGroupSettingsCxxCodeblocks.h"
+
+#include "settings/ProjectSettings.h"
+#include "utility/ConfigManager.h"
+
+SourceGroupSettingsCxxCodeblocks::SourceGroupSettingsCxxCodeblocks(const std::string& id, const ProjectSettings* projectSettings)
+ : SourceGroupSettingsCxx(id, SOURCE_GROUP_CXX_CODEBLOCKS, projectSettings)
+{
+}
+
+void SourceGroupSettingsCxxCodeblocks::load(std::shared_ptr config)
+{
+ SourceGroupSettingsCxx::load(config);
+
+ const std::string key = s_keyPrefix + getId();
+
+ SourceGroupSettingsWithCppStandard::load(config, key);
+ SourceGroupSettingsWithCStandard::load(config, key);
+ SourceGroupSettingsWithIndexedHeaderPaths::load(config, key);
+ SourceGroupSettingsWithSourceExtensions::load(config, key);
+
+ setCodeblocksProjectPath(config->getValueOrDefault(key + "/codeblocks_project_path", FilePath(L"")));
+}
+
+void SourceGroupSettingsCxxCodeblocks::save(std::shared_ptr config)
+{
+ SourceGroupSettingsCxx::save(config);
+
+ const std::string key = s_keyPrefix + getId();
+
+ SourceGroupSettingsWithCppStandard::save(config, key);
+ SourceGroupSettingsWithCStandard::save(config, key);
+ SourceGroupSettingsWithIndexedHeaderPaths::save(config, key);
+ SourceGroupSettingsWithSourceExtensions::save(config, key);
+
+ config->setValue(key + "/codeblocks_project_path", getCodeblocksProjectPath().wstr());
+}
+
+bool SourceGroupSettingsCxxCodeblocks::equals(std::shared_ptr other) const
+{
+ std::shared_ptr otherCxxCodeblocks = std::dynamic_pointer_cast(other);
+
+ return (
+ otherCxxCodeblocks &&
+ SourceGroupSettingsCxx::equals(other) &&
+ SourceGroupSettingsWithCppStandard::equals(otherCxxCodeblocks) &&
+ SourceGroupSettingsWithCStandard::equals(otherCxxCodeblocks) &&
+ SourceGroupSettingsWithIndexedHeaderPaths::equals(otherCxxCodeblocks) &&
+ SourceGroupSettingsWithSourceExtensions::equals(otherCxxCodeblocks) &&
+ m_codeblocksProjectPath == otherCxxCodeblocks->m_codeblocksProjectPath
+ );
+}
+
+FilePath SourceGroupSettingsCxxCodeblocks::getCodeblocksProjectPath() const
+{
+ return m_codeblocksProjectPath;
+}
+
+FilePath SourceGroupSettingsCxxCodeblocks::getCodeblocksProjectPathExpandedAndAbsolute() const
+{
+ return m_projectSettings->makePathExpandedAndAbsolute(getCodeblocksProjectPath());
+}
+
+void SourceGroupSettingsCxxCodeblocks::setCodeblocksProjectPath(const FilePath& compilationDatabasePath)
+{
+ m_codeblocksProjectPath = compilationDatabasePath;
+}
+
+const ProjectSettings* SourceGroupSettingsCxxCodeblocks::getProjectSettings() const
+{
+ return m_projectSettings;
+}
+
+std::vector SourceGroupSettingsCxxCodeblocks::getDefaultSourceExtensions() const
+{
+ return {
+ L".c",
+ L".cpp",
+ L".cxx",
+ L".cc"
+ };
+}
diff --git a/src/lib/settings/SourceGroupSettingsCxxCodeblocks.h b/src/lib/settings/SourceGroupSettingsCxxCodeblocks.h
new file mode 100644
index 00000000..e89df64b
--- /dev/null
+++ b/src/lib/settings/SourceGroupSettingsCxxCodeblocks.h
@@ -0,0 +1,36 @@
+#ifndef SOURCE_GROUP_SETTINGS_CXX_CODEBLOCKS_H
+#define SOURCE_GROUP_SETTINGS_CXX_CODEBLOCKS_H
+
+#include "settings/SourceGroupSettingsCxx.h"
+#include "settings/SourceGroupSettingsWithCppStandard.h"
+#include "settings/SourceGroupSettingsWithCStandard.h"
+#include "settings/SourceGroupSettingsWithIndexedHeaderPaths.h"
+#include "settings/SourceGroupSettingsWithSourceExtensions.h"
+
+class SourceGroupSettingsCxxCodeblocks
+ : public SourceGroupSettingsCxx
+ , public SourceGroupSettingsWithCppStandard
+ , public SourceGroupSettingsWithCStandard
+ , public SourceGroupSettingsWithIndexedHeaderPaths
+ , public SourceGroupSettingsWithSourceExtensions
+{
+public:
+ SourceGroupSettingsCxxCodeblocks(const std::string& id, const ProjectSettings* projectSettings);
+
+ void load(std::shared_ptr config) override;
+ void save(std::shared_ptr config) override;
+
+ bool equals(std::shared_ptr other) const override;
+
+ FilePath getCodeblocksProjectPath() const;
+ FilePath getCodeblocksProjectPathExpandedAndAbsolute() const;
+ void setCodeblocksProjectPath(const FilePath& compilationDatabasePath);
+
+private:
+ const ProjectSettings* getProjectSettings() const override;
+ std::vector getDefaultSourceExtensions() const override;
+
+ FilePath m_codeblocksProjectPath;
+};
+
+#endif // SOURCE_GROUP_SETTINGS_CXX_CODEBLOCKS_H
diff --git a/src/lib/settings/SourceGroupSettingsCxxEmpty.cpp b/src/lib/settings/SourceGroupSettingsCxxEmpty.cpp
index 56663c9b..0ed091a5 100644
--- a/src/lib/settings/SourceGroupSettingsCxxEmpty.cpp
+++ b/src/lib/settings/SourceGroupSettingsCxxEmpty.cpp
@@ -157,6 +157,7 @@ void SourceGroupSettingsCxxEmpty::load(std::shared_ptr conf
const std::string key = s_keyPrefix + getId();
+ SourceGroupSettingsWithSourceExtensions::load(config, key);
SourceGroupSettingsWithSourcePaths::load(config, key);
SourceGroupSettingsWithExcludeFilters::load(config, key);
@@ -173,6 +174,7 @@ void SourceGroupSettingsCxxEmpty::save(std::shared_ptr config)
const std::string key = s_keyPrefix + getId();
+ SourceGroupSettingsWithSourceExtensions::save(config, key);
SourceGroupSettingsWithSourcePaths::save(config, key);
SourceGroupSettingsWithExcludeFilters::save(config, key);
@@ -190,6 +192,7 @@ bool SourceGroupSettingsCxxEmpty::equals(std::shared_ptr ot
return (
otherCxxEmpty &&
SourceGroupSettingsCxx::equals(other) &&
+ SourceGroupSettingsWithSourceExtensions::equals(otherCxxEmpty) &&
SourceGroupSettingsWithSourcePaths::equals(otherCxxEmpty) &&
SourceGroupSettingsWithExcludeFilters::equals(otherCxxEmpty) &&
getTargetFlag() == otherCxxEmpty->getTargetFlag()
@@ -258,30 +261,4 @@ std::wstring SourceGroupSettingsCxxEmpty::getTargetFlag() const
targetFlag += L"-" + (m_targetAbi.empty() ? L"unknown" : m_targetAbi);
}
return targetFlag;
-}
-
-const ProjectSettings* SourceGroupSettingsCxxEmpty::getProjectSettings() const
-{
- return m_projectSettings;
-}
-
-std::vector SourceGroupSettingsCxxEmpty::getDefaultSourceExtensions() const
-{
- std::vector defaultValues;
-
- switch (getType())
- {
- case SOURCE_GROUP_CPP_EMPTY:
- defaultValues.push_back(L".cpp");
- defaultValues.push_back(L".cxx");
- defaultValues.push_back(L".cc");
- break;
- case SOURCE_GROUP_C_EMPTY:
- defaultValues.push_back(L".c");
- break;
- default:
- break;
- }
-
- return defaultValues;
-}
+}
\ No newline at end of file
diff --git a/src/lib/settings/SourceGroupSettingsCxxEmpty.h b/src/lib/settings/SourceGroupSettingsCxxEmpty.h
index 236bebe2..07580380 100644
--- a/src/lib/settings/SourceGroupSettingsCxxEmpty.h
+++ b/src/lib/settings/SourceGroupSettingsCxxEmpty.h
@@ -3,11 +3,13 @@
#include "settings/SourceGroupSettingsCxx.h"
#include "settings/SourceGroupSettingsWithExcludeFilters.h"
+#include "settings/SourceGroupSettingsWithSourceExtensions.h"
#include "settings/SourceGroupSettingsWithSourcePaths.h"
class SourceGroupSettingsCxxEmpty
: public SourceGroupSettingsCxx
, public SourceGroupSettingsWithExcludeFilters
+ , public SourceGroupSettingsWithSourceExtensions
, public SourceGroupSettingsWithSourcePaths
{
public:
@@ -41,9 +43,6 @@ public:
std::wstring getTargetFlag() const;
private:
- const ProjectSettings* getProjectSettings() const override;
- std::vector getDefaultSourceExtensions() const override;
-
bool m_targetOptionsEnabled;
std::wstring m_targetArch;
std::wstring m_targetVendor;
diff --git a/src/lib/settings/SourceGroupSettingsCxxSonargraph.cpp b/src/lib/settings/SourceGroupSettingsCxxSonargraph.cpp
index 5021cf98..95433fcc 100644
--- a/src/lib/settings/SourceGroupSettingsCxxSonargraph.cpp
+++ b/src/lib/settings/SourceGroupSettingsCxxSonargraph.cpp
@@ -11,6 +11,7 @@ void SourceGroupSettingsCxxSonargraph::load(std::shared_ptr
const std::string key = s_keyPrefix + getId();
+ SourceGroupSettingsWithCppStandard::load(config, key);
SourceGroupSettingsWithIndexedHeaderPaths::load(config, key);
SourceGroupSettingsWithSonargraphProjectPath::load(config, key);
}
@@ -21,6 +22,7 @@ void SourceGroupSettingsCxxSonargraph::save(std::shared_ptr confi
const std::string key = s_keyPrefix + getId();
+ SourceGroupSettingsWithCppStandard::save(config, key);
SourceGroupSettingsWithIndexedHeaderPaths::save(config, key);
SourceGroupSettingsWithSonargraphProjectPath::save(config, key);
}
@@ -32,7 +34,8 @@ bool SourceGroupSettingsCxxSonargraph::equals(std::shared_ptr config)
SourceGroupSettings::load(config);
const std::string key = s_keyPrefix + getId();
-
+
+ SourceGroupSettingsWithSourceExtensions::load(config, key);
SourceGroupSettingsWithSourcePaths::load(config, key);
SourceGroupSettingsWithExcludeFilters::load(config, key);
+ SourceGroupSettingsWithJavaStandard::load(config, key);
SourceGroupSettingsWithClasspath::load(config, key);
}
@@ -22,8 +24,10 @@ void SourceGroupSettingsJava::save(std::shared_ptr config)
const std::string key = s_keyPrefix + getId();
+ SourceGroupSettingsWithSourceExtensions::save(config, key);
SourceGroupSettingsWithSourcePaths::save(config, key);
SourceGroupSettingsWithExcludeFilters::save(config, key);
+ SourceGroupSettingsWithJavaStandard::save(config, key);
SourceGroupSettingsWithClasspath::save(config, key);
}
@@ -34,17 +38,14 @@ bool SourceGroupSettingsJava::equals(std::shared_ptr other)
return (
otherJava &&
SourceGroupSettings::equals(other) &&
+ SourceGroupSettingsWithSourceExtensions::equals(otherJava) &&
SourceGroupSettingsWithSourcePaths::equals(otherJava) &&
SourceGroupSettingsWithExcludeFilters::equals(otherJava) &&
+ SourceGroupSettingsWithJavaStandard::equals(otherJava) &&
SourceGroupSettingsWithClasspath::equals(otherJava)
);
}
-std::vector SourceGroupSettingsJava::getAvailableLanguageStandards() const
-{
- return std::vector{"1", "2", "3", "4", "5", "6", "7", "8"};
-}
-
const ProjectSettings* SourceGroupSettingsJava::getProjectSettings() const
{
return m_projectSettings;
@@ -54,8 +55,3 @@ std::vector SourceGroupSettingsJava::getDefaultSourceExtensions()
{
return { L".java" };
}
-
-std::string SourceGroupSettingsJava::getDefaultStandard() const
-{
- return "8";
-}
diff --git a/src/lib/settings/SourceGroupSettingsJava.h b/src/lib/settings/SourceGroupSettingsJava.h
index d289d8df..94d6c672 100644
--- a/src/lib/settings/SourceGroupSettingsJava.h
+++ b/src/lib/settings/SourceGroupSettingsJava.h
@@ -7,12 +7,16 @@
#include "settings/SourceGroupSettings.h"
#include "settings/SourceGroupSettingsWithClasspath.h"
#include "settings/SourceGroupSettingsWithExcludeFilters.h"
+#include "settings/SourceGroupSettingsWithJavaStandard.h"
+#include "settings/SourceGroupSettingsWithSourceExtensions.h"
#include "settings/SourceGroupSettingsWithSourcePaths.h"
class SourceGroupSettingsJava
: public SourceGroupSettings
+ , public SourceGroupSettingsWithSourceExtensions
, public SourceGroupSettingsWithSourcePaths
, public SourceGroupSettingsWithExcludeFilters
+ , public SourceGroupSettingsWithJavaStandard
, public SourceGroupSettingsWithClasspath
{
public:
@@ -23,12 +27,9 @@ public:
bool equals(std::shared_ptr other) const override;
- std::vector getAvailableLanguageStandards() const override;
-
private:
const ProjectSettings* getProjectSettings() const override;
std::vector getDefaultSourceExtensions() const override;
- std::string getDefaultStandard() const override;
};
#endif // SOURCE_GROUP_SETTINGS_JAVA_H
diff --git a/src/lib/settings/SourceGroupSettingsJavaSonargraph.cpp b/src/lib/settings/SourceGroupSettingsJavaSonargraph.cpp
index 3bed3281..24377a5c 100644
--- a/src/lib/settings/SourceGroupSettingsJavaSonargraph.cpp
+++ b/src/lib/settings/SourceGroupSettingsJavaSonargraph.cpp
@@ -12,6 +12,7 @@ void SourceGroupSettingsJavaSonargraph::load(std::shared_ptr conf
const std::string key = s_keyPrefix + getId();
SourceGroupSettingsWithClasspath::save(config, key);
+ SourceGroupSettingsWithJavaStandard::save(config, key);
SourceGroupSettingsWithSonargraphProjectPath::save(config, key);
}
@@ -33,20 +35,11 @@ bool SourceGroupSettingsJavaSonargraph::equals(std::shared_ptr SourceGroupSettingsJavaSonargraph::getAvailableLanguageStandards() const
-{
- return std::vector{"1", "2", "3", "4", "5", "6", "7", "8"};
-}
-
-std::string SourceGroupSettingsJavaSonargraph::getDefaultStandard() const
-{
- return "8";
-}
-
const ProjectSettings* SourceGroupSettingsJavaSonargraph::getProjectSettings() const
{
return m_projectSettings;
diff --git a/src/lib/settings/SourceGroupSettingsJavaSonargraph.h b/src/lib/settings/SourceGroupSettingsJavaSonargraph.h
index 5c7c2ac6..068dd051 100644
--- a/src/lib/settings/SourceGroupSettingsJavaSonargraph.h
+++ b/src/lib/settings/SourceGroupSettingsJavaSonargraph.h
@@ -3,11 +3,13 @@
#include "settings/SourceGroupSettings.h"
#include "settings/SourceGroupSettingsWithClasspath.h"
+#include "settings/SourceGroupSettingsWithJavaStandard.h"
#include "settings/SourceGroupSettingsWithSonargraphProjectPath.h"
class SourceGroupSettingsJavaSonargraph
: public SourceGroupSettings
, public SourceGroupSettingsWithClasspath
+ , public SourceGroupSettingsWithJavaStandard
, public SourceGroupSettingsWithSonargraphProjectPath
{
public:
@@ -18,10 +20,7 @@ public:
bool equals(std::shared_ptr other) const override;
- std::vector getAvailableLanguageStandards() const override;
-
private:
- std::string getDefaultStandard() const override;
const ProjectSettings* getProjectSettings() const override;
};
diff --git a/src/lib/settings/SourceGroupSettingsWithCStandard.cpp b/src/lib/settings/SourceGroupSettingsWithCStandard.cpp
new file mode 100644
index 00000000..5df646cf
--- /dev/null
+++ b/src/lib/settings/SourceGroupSettingsWithCStandard.cpp
@@ -0,0 +1,63 @@
+#include "settings/SourceGroupSettingsWithCStandard.h"
+
+#include "settings/ProjectSettings.h"
+
+std::string SourceGroupSettingsWithCStandard::getDefaultCStandardStatic()
+{
+ return "c11";
+}
+
+bool SourceGroupSettingsWithCStandard::equals(std::shared_ptr other) const
+{
+ return (
+ other &&
+ m_cStandard == other->m_cStandard
+ );
+}
+
+void SourceGroupSettingsWithCStandard::load(std::shared_ptr config, const std::string& key)
+{
+ setCStandard(config->getValueOrDefault(key + "/c_standard", ""));
+}
+
+void SourceGroupSettingsWithCStandard::save(std::shared_ptr config, const std::string& key)
+{
+ config->setValue(key + "/c_standard", getCStandard());
+}
+
+std::string SourceGroupSettingsWithCStandard::getCStandard() const
+{
+ if (m_cStandard.empty())
+ {
+ return getDefaultCStandard();
+ }
+ return m_cStandard;
+}
+
+void SourceGroupSettingsWithCStandard::setCStandard(const std::string& standard)
+{
+ m_cStandard = standard;
+}
+
+std::vector SourceGroupSettingsWithCStandard::getAvailableCStandards() const
+{
+ return {
+ "c11",
+ "gnu11",
+ "iso9899:2011",
+ "c99",
+ "gnu99",
+ "iso9899:1999",
+ "iso9899:199409",
+ "c90",
+ "gnu90",
+ "iso9899:1990",
+ "c89",
+ "gnu89"
+ };
+}
+
+std::string SourceGroupSettingsWithCStandard::getDefaultCStandard() const
+{
+ return getDefaultCStandardStatic();
+}
diff --git a/src/lib/settings/SourceGroupSettingsWithCStandard.h b/src/lib/settings/SourceGroupSettingsWithCStandard.h
new file mode 100644
index 00000000..4973c847
--- /dev/null
+++ b/src/lib/settings/SourceGroupSettingsWithCStandard.h
@@ -0,0 +1,37 @@
+#ifndef SOURCE_GROUP_SETTINGS_WITH_C_STANDARD_H
+#define SOURCE_GROUP_SETTINGS_WITH_C_STANDARD_H
+
+#include
+#include
+#include
+
+class ConfigManager;
+class ProjectSettings;
+
+class SourceGroupSettingsWithCStandard
+{
+public:
+ static std::string getDefaultCStandardStatic();
+
+ SourceGroupSettingsWithCStandard() = default;
+ virtual ~SourceGroupSettingsWithCStandard() = default;
+
+ bool equals(std::shared_ptr other) const;
+
+ std::string getCStandard() const;
+ void setCStandard(const std::string& standard);
+
+ std::vector getAvailableCStandards() const;
+
+protected:
+ void load(std::shared_ptr config, const std::string& key);
+ void save(std::shared_ptr config, const std::string& key);
+
+private:
+ virtual const ProjectSettings* getProjectSettings() const = 0;
+ std::string getDefaultCStandard() const;
+
+ std::string m_cStandard;
+};
+
+#endif // SOURCE_GROUP_SETTINGS_WITH_C_STANDARD_H
diff --git a/src/lib/settings/SourceGroupSettingsWithCppStandard.cpp b/src/lib/settings/SourceGroupSettingsWithCppStandard.cpp
new file mode 100644
index 00000000..d6d0d934
--- /dev/null
+++ b/src/lib/settings/SourceGroupSettingsWithCppStandard.cpp
@@ -0,0 +1,63 @@
+#include "settings/SourceGroupSettingsWithCppStandard.h"
+
+#include "settings/ProjectSettings.h"
+
+std::string SourceGroupSettingsWithCppStandard::getDefaultCppStandardStatic()
+{
+ return "c++17";
+}
+
+bool SourceGroupSettingsWithCppStandard::equals(std::shared_ptr other) const
+{
+ return (
+ other &&
+ m_cppStandard == other->m_cppStandard
+ );
+}
+
+void SourceGroupSettingsWithCppStandard::load(std::shared_ptr config, const std::string& key)
+{
+ setCppStandard(config->getValueOrDefault(key + "/cpp_standard", ""));
+}
+
+void SourceGroupSettingsWithCppStandard::save(std::shared_ptr config, const std::string& key)
+{
+ config->setValue(key + "/cpp_standard", getCppStandard());
+}
+
+std::string SourceGroupSettingsWithCppStandard::getCppStandard() const
+{
+ if (m_cppStandard.empty())
+ {
+ return getDefaultCppStandard();
+ }
+ return m_cppStandard;
+}
+
+void SourceGroupSettingsWithCppStandard::setCppStandard(const std::string& standard)
+{
+ m_cppStandard = standard;
+}
+
+std::vector SourceGroupSettingsWithCppStandard::getAvailableCppStandards() const
+{
+ return {
+ "c++2a",
+ "gnu++2a",
+ "c++17",
+ "gnu++17",
+ "c++14",
+ "gnu++14",
+ "c++11",
+ "gnu++11",
+ "c++03",
+ "gnu++03",
+ "c++98",
+ "gnu++98"
+ };
+}
+
+std::string SourceGroupSettingsWithCppStandard::getDefaultCppStandard() const
+{
+ return getDefaultCppStandardStatic();
+}
diff --git a/src/lib/settings/SourceGroupSettingsWithCppStandard.h b/src/lib/settings/SourceGroupSettingsWithCppStandard.h
new file mode 100644
index 00000000..9dd20643
--- /dev/null
+++ b/src/lib/settings/SourceGroupSettingsWithCppStandard.h
@@ -0,0 +1,37 @@
+#ifndef SOURCE_GROUP_SETTINGS_WITH_CPP_STANDARD_H
+#define SOURCE_GROUP_SETTINGS_WITH_CPP_STANDARD_H
+
+#include
+#include
+#include
+
+class ConfigManager;
+class ProjectSettings;
+
+class SourceGroupSettingsWithCppStandard
+{
+public:
+ static std::string getDefaultCppStandardStatic();
+
+ SourceGroupSettingsWithCppStandard() = default;
+ virtual ~SourceGroupSettingsWithCppStandard() = default;
+
+ bool equals(std::shared_ptr other) const;
+
+ std::string getCppStandard() const;
+ void setCppStandard(const std::string& standard);
+
+ std::vector getAvailableCppStandards() const;
+
+protected:
+ void load(std::shared_ptr config, const std::string& key);
+ void save(std::shared_ptr config, const std::string& key);
+
+private:
+ virtual const ProjectSettings* getProjectSettings() const = 0;
+ std::string getDefaultCppStandard() const;
+
+ std::string m_cppStandard;
+};
+
+#endif // SOURCE_GROUP_SETTINGS_WITH_CPP_STANDARD_H
diff --git a/src/lib/settings/SourceGroupSettingsWithJavaStandard.cpp b/src/lib/settings/SourceGroupSettingsWithJavaStandard.cpp
new file mode 100644
index 00000000..841cb866
--- /dev/null
+++ b/src/lib/settings/SourceGroupSettingsWithJavaStandard.cpp
@@ -0,0 +1,50 @@
+#include "settings/SourceGroupSettingsWithJavaStandard.h"
+
+#include "settings/ProjectSettings.h"
+
+std::string SourceGroupSettingsWithJavaStandard::getDefaultJavaStandardStatic()
+{
+ return "8";
+}
+
+bool SourceGroupSettingsWithJavaStandard::equals(std::shared_ptr other) const
+{
+ return (
+ other &&
+ m_javaStandard == other->m_javaStandard
+ );
+}
+
+void SourceGroupSettingsWithJavaStandard::load(std::shared_ptr config, const std::string& key)
+{
+ setJavaStandard(config->getValueOrDefault(key + "/java_standard", ""));
+}
+
+void SourceGroupSettingsWithJavaStandard::save(std::shared_ptr config, const std::string& key)
+{
+ config->setValue(key + "/java_standard", getJavaStandard());
+}
+
+std::string SourceGroupSettingsWithJavaStandard::getJavaStandard() const
+{
+ if (m_javaStandard.empty())
+ {
+ return getDefaultJavaStandard();
+ }
+ return m_javaStandard;
+}
+
+void SourceGroupSettingsWithJavaStandard::setJavaStandard(const std::string& standard)
+{
+ m_javaStandard = standard;
+}
+
+std::vector SourceGroupSettingsWithJavaStandard::getAvailableJavaStandards() const
+{
+ return {"1", "2", "3", "4", "5", "6", "7", "8"};
+}
+
+std::string SourceGroupSettingsWithJavaStandard::getDefaultJavaStandard() const
+{
+ return getDefaultJavaStandardStatic();
+}
diff --git a/src/lib/settings/SourceGroupSettingsWithJavaStandard.h b/src/lib/settings/SourceGroupSettingsWithJavaStandard.h
new file mode 100644
index 00000000..a6cd915a
--- /dev/null
+++ b/src/lib/settings/SourceGroupSettingsWithJavaStandard.h
@@ -0,0 +1,37 @@
+#ifndef SOURCE_GROUP_SETTINGS_WITH_JAVA_STANDARD_H
+#define SOURCE_GROUP_SETTINGS_WITH_JAVA_STANDARD_H
+
+#include
+#include
+#include
+
+class ConfigManager;
+class ProjectSettings;
+
+class SourceGroupSettingsWithJavaStandard
+{
+public:
+ static std::string getDefaultJavaStandardStatic();
+
+ SourceGroupSettingsWithJavaStandard() = default;
+ virtual ~SourceGroupSettingsWithJavaStandard() = default;
+
+ bool equals(std::shared_ptr other) const;
+
+ std::string getJavaStandard() const;
+ void setJavaStandard(const std::string& standard);
+
+ std::vector getAvailableJavaStandards() const;
+
+protected:
+ void load(std::shared_ptr config, const std::string& key);
+ void save(std::shared_ptr config, const std::string& key);
+
+private:
+ virtual const ProjectSettings* getProjectSettings() const = 0;
+ std::string getDefaultJavaStandard() const;
+
+ std::string m_javaStandard;
+};
+
+#endif // SOURCE_GROUP_SETTINGS_WITH_JAVA_STANDARD_H
diff --git a/src/lib/settings/SourceGroupSettingsWithSourceExtensions.cpp b/src/lib/settings/SourceGroupSettingsWithSourceExtensions.cpp
new file mode 100644
index 00000000..6f292792
--- /dev/null
+++ b/src/lib/settings/SourceGroupSettingsWithSourceExtensions.cpp
@@ -0,0 +1,38 @@
+#include "settings/SourceGroupSettingsWithSourceExtensions.h"
+
+#include "settings/ProjectSettings.h"
+#include "utility/utility.h"
+
+SourceGroupSettingsWithSourceExtensions::SourceGroupSettingsWithSourceExtensions()
+ : m_sourceExtensions(std::vector())
+{
+}
+
+bool SourceGroupSettingsWithSourceExtensions::equals(std::shared_ptr other) const
+{
+ return utility::isPermutation(m_sourceExtensions, other->m_sourceExtensions);
+}
+
+void SourceGroupSettingsWithSourceExtensions::load(std::shared_ptr config, const std::string& key)
+{
+ setSourceExtensions(config->getValuesOrDefaults(key + "/source_extensions/source_extension", std::vector()));
+}
+
+void SourceGroupSettingsWithSourceExtensions::save(std::shared_ptr config, const std::string& key)
+{
+ config->setValues(key + "/source_extensions/source_extension", getSourceExtensions());
+}
+
+std::vector SourceGroupSettingsWithSourceExtensions::getSourceExtensions() const
+{
+ if (m_sourceExtensions.empty())
+ {
+ return getDefaultSourceExtensions();
+ }
+ return m_sourceExtensions;
+}
+
+void SourceGroupSettingsWithSourceExtensions::setSourceExtensions(const std::vector& sourceExtensions)
+{
+ m_sourceExtensions = sourceExtensions;
+}
diff --git a/src/lib/settings/SourceGroupSettingsWithSourceExtensions.h b/src/lib/settings/SourceGroupSettingsWithSourceExtensions.h
new file mode 100644
index 00000000..7f9d9da3
--- /dev/null
+++ b/src/lib/settings/SourceGroupSettingsWithSourceExtensions.h
@@ -0,0 +1,34 @@
+#ifndef SOURCE_GROUP_SETTINGS_WITH_SOURCE_EXTENSIONS_H
+#define SOURCE_GROUP_SETTINGS_WITH_SOURCE_EXTENSIONS_H
+
+#include
+#include
+#include
+
+class ConfigManager;
+class FilePath;
+class ProjectSettings;
+
+class SourceGroupSettingsWithSourceExtensions
+{
+public:
+ SourceGroupSettingsWithSourceExtensions();
+ virtual ~SourceGroupSettingsWithSourceExtensions() = default;
+
+ bool equals(std::shared_ptr other) const;
+
+ std::vector getSourceExtensions() const;
+ void setSourceExtensions(const std::vector& sourceExtensions);
+
+protected:
+ void load(std::shared_ptr config, const std::string& key);
+ void save(std::shared_ptr config, const std::string& key);
+
+private:
+ virtual const ProjectSettings* getProjectSettings() const = 0;
+ virtual std::vector getDefaultSourceExtensions() const = 0;
+
+ std::vector m_sourceExtensions;
+};
+
+#endif // SOURCE_GROUP_SETTINGS_WITH_SOURCE_EXTENSIONS_H
diff --git a/src/lib/settings/SourceGroupSettingsWithSourcePaths.cpp b/src/lib/settings/SourceGroupSettingsWithSourcePaths.cpp
index 95a55632..efbee814 100644
--- a/src/lib/settings/SourceGroupSettingsWithSourcePaths.cpp
+++ b/src/lib/settings/SourceGroupSettingsWithSourcePaths.cpp
@@ -5,28 +5,22 @@
SourceGroupSettingsWithSourcePaths::SourceGroupSettingsWithSourcePaths()
: m_sourcePaths(std::vector())
- , m_sourceExtensions(std::vector())
{
}
bool SourceGroupSettingsWithSourcePaths::equals(std::shared_ptr other) const
{
- return (
- utility::isPermutation(m_sourcePaths, other->m_sourcePaths) &&
- utility::isPermutation(m_sourceExtensions, other->m_sourceExtensions)
- );
+ return utility::isPermutation(m_sourcePaths, other->m_sourcePaths);
}
void SourceGroupSettingsWithSourcePaths::load(std::shared_ptr config, const std::string& key)
{
setSourcePaths(config->getValuesOrDefaults(key + "/source_paths/source_path", std::vector()));
- setSourceExtensions(config->getValuesOrDefaults(key + "/source_extensions/source_extension", std::vector()));
}
void SourceGroupSettingsWithSourcePaths::save(std::shared_ptr config, const std::string& key)
{
config->setValues(key + "/source_paths/source_path", getSourcePaths());
- config->setValues(key + "/source_extensions/source_extension", getSourceExtensions());
}
std::vector SourceGroupSettingsWithSourcePaths::getSourcePaths() const
@@ -43,17 +37,3 @@ void SourceGroupSettingsWithSourcePaths::setSourcePaths(const std::vector SourceGroupSettingsWithSourcePaths::getSourceExtensions() const
-{
- if (m_sourceExtensions.empty())
- {
- return getDefaultSourceExtensions();
- }
- return m_sourceExtensions;
-}
-
-void SourceGroupSettingsWithSourcePaths::setSourceExtensions(const std::vector& sourceExtensions)
-{
- m_sourceExtensions = sourceExtensions;
-}
diff --git a/src/lib/settings/SourceGroupSettingsWithSourcePaths.h b/src/lib/settings/SourceGroupSettingsWithSourcePaths.h
index 420808dd..c8ac7712 100644
--- a/src/lib/settings/SourceGroupSettingsWithSourcePaths.h
+++ b/src/lib/settings/SourceGroupSettingsWithSourcePaths.h
@@ -21,19 +21,14 @@ public:
std::vector getSourcePathsExpandedAndAbsolute() const;
void setSourcePaths(const std::vector& sourcePaths);
- std::vector getSourceExtensions() const;
- void setSourceExtensions(const std::vector& sourceExtensions);
-
protected:
void load(std::shared_ptr config, const std::string& key);
void save(std::shared_ptr config, const std::string& key);
private:
virtual const ProjectSettings* getProjectSettings() const = 0;
- virtual std::vector getDefaultSourceExtensions() const = 0;
std::vector m_sourcePaths;
- std::vector m_sourceExtensions;
};
#endif // SOURCE_GROUP_SETTINGS_WITH_SOURCE_PATHS_H
diff --git a/src/lib/settings/SourceGroupType.cpp b/src/lib/settings/SourceGroupType.cpp
index 14250026..35630b8d 100644
--- a/src/lib/settings/SourceGroupType.cpp
+++ b/src/lib/settings/SourceGroupType.cpp
@@ -10,6 +10,8 @@ std::string sourceGroupTypeToString(SourceGroupType v)
return "C++ Source Group";
case SOURCE_GROUP_CXX_CDB:
return "C/C++ from Compilation Database";
+ case SOURCE_GROUP_CXX_CODEBLOCKS:
+ return "C/C++ from Code::Blocks";
case SOURCE_GROUP_CXX_SONARGRAPH:
return "C/C++ from Sonargraph";
case SOURCE_GROUP_CXX_VS:
@@ -38,6 +40,8 @@ std::string sourceGroupTypeToProjectSetupString(SourceGroupType v)
return "Empty C++ Source Group";
case SOURCE_GROUP_CXX_CDB:
return "C/C++ from Compilation Database";
+ case SOURCE_GROUP_CXX_CODEBLOCKS:
+ return "C/C++ from Code::Blocks";
case SOURCE_GROUP_CXX_SONARGRAPH:
return "C/C++ from Sonargraph";
case SOURCE_GROUP_CXX_VS:
@@ -70,6 +74,10 @@ SourceGroupType stringToSourceGroupType(const std::string& v)
{
return SOURCE_GROUP_CXX_CDB;
}
+ else if (v == sourceGroupTypeToString(SOURCE_GROUP_CXX_CODEBLOCKS))
+ {
+ return SOURCE_GROUP_CXX_CODEBLOCKS;
+ }
else if (v == sourceGroupTypeToString(SOURCE_GROUP_CXX_SONARGRAPH))
{
return SOURCE_GROUP_CXX_SONARGRAPH;
diff --git a/src/lib/settings/SourceGroupType.h b/src/lib/settings/SourceGroupType.h
index d60a9f00..91e42704 100644
--- a/src/lib/settings/SourceGroupType.h
+++ b/src/lib/settings/SourceGroupType.h
@@ -8,6 +8,7 @@ enum SourceGroupType
SOURCE_GROUP_C_EMPTY,
SOURCE_GROUP_CPP_EMPTY,
SOURCE_GROUP_CXX_CDB,
+ SOURCE_GROUP_CXX_CODEBLOCKS,
SOURCE_GROUP_CXX_SONARGRAPH,
SOURCE_GROUP_CXX_VS,
SOURCE_GROUP_JAVA_EMPTY,
diff --git a/src/lib/utility/file/FilePath.cpp b/src/lib/utility/file/FilePath.cpp
index f23fe80d..803383be 100644
--- a/src/lib/utility/file/FilePath.cpp
+++ b/src/lib/utility/file/FilePath.cpp
@@ -344,7 +344,7 @@ FilePath FilePath::getLowerCase() const
bool FilePath::contains(const FilePath& other) const
{
- if (!isDirectory())
+ if (exists() && !isDirectory())
{
return false;
}
diff --git a/src/lib/utility/sonargraph/SonargraphProject.cpp b/src/lib/utility/sonargraph/SonargraphProject.cpp
index 82c261a3..c3f2b8e5 100644
--- a/src/lib/utility/sonargraph/SonargraphProject.cpp
+++ b/src/lib/utility/sonargraph/SonargraphProject.cpp
@@ -60,11 +60,6 @@ namespace Sonargraph
return m_softwareSystem->getModules().size();
}
- std::set Project::getAllSourcePaths() const
- {
- return m_softwareSystem->getAllSourcePaths();
- }
-
std::set Project::getAllSourceFilePathsCanonical() const
{
return m_softwareSystem->getAllSourceFilePathsCanonical();
@@ -75,11 +70,6 @@ namespace Sonargraph
return m_softwareSystem->getAllCxxHeaderSearchPathsCanonical();
}
- std::set Project::filterToContainedFilePaths(const std::set& filePaths) const
- {
- return m_softwareSystem->filterToContainedFilePaths(filePaths);
- }
-
std::vector> Project::getIndexerCommands(
std::shared_ptr sourceGroupSettings,
std::shared_ptr appSettings) const
diff --git a/src/lib/utility/sonargraph/SonargraphProject.h b/src/lib/utility/sonargraph/SonargraphProject.h
index abcd9b2b..8dfa9424 100644
--- a/src/lib/utility/sonargraph/SonargraphProject.h
+++ b/src/lib/utility/sonargraph/SonargraphProject.h
@@ -32,10 +32,8 @@ namespace Sonargraph
int getLoadedModuleCount() const;
- std::set getAllSourcePaths() const;
std::set getAllSourceFilePathsCanonical() const;
std::set getAllCxxHeaderSearchPathsCanonical() const;
- std::set filterToContainedFilePaths(const std::set& filePaths) const;
std::vector> getIndexerCommands(
std::shared_ptr sourceGroupSettings,
diff --git a/src/lib/utility/sonargraph/SonargraphSoftwareSystem.cpp b/src/lib/utility/sonargraph/SonargraphSoftwareSystem.cpp
index 228b6761..efa85acb 100644
--- a/src/lib/utility/sonargraph/SonargraphSoftwareSystem.cpp
+++ b/src/lib/utility/sonargraph/SonargraphSoftwareSystem.cpp
@@ -90,16 +90,6 @@ namespace Sonargraph
return sourceFilePaths;
}
- std::set SoftwareSystem::filterToContainedFilePaths(const std::set& filePaths) const
- {
- std::set containedFilePaths;
- for (std::shared_ptr module : m_modules)
- {
- utility::append(containedFilePaths, module->filterToContainedFilePaths(filePaths));
- }
- return containedFilePaths;
- }
-
std::vector> SoftwareSystem::getIndexerCommands(
std::shared_ptr sourceGroupSettings,
std::shared_ptr appSettings) const
diff --git a/src/lib/utility/sonargraph/SonargraphSoftwareSystem.h b/src/lib/utility/sonargraph/SonargraphSoftwareSystem.h
index 23af27fd..9015ad7c 100644
--- a/src/lib/utility/sonargraph/SonargraphSoftwareSystem.h
+++ b/src/lib/utility/sonargraph/SonargraphSoftwareSystem.h
@@ -32,7 +32,6 @@ namespace Sonargraph
std::set getAllSourcePaths() const;
std::set getAllSourceFilePathsCanonical() const;
std::set getAllCxxHeaderSearchPathsCanonical() const;
- std::set filterToContainedFilePaths(const std::set& filePaths) const;
template
std::vector> getSpecificSystemExtensions() const;
diff --git a/src/lib/utility/sonargraph/SonargraphXsdAbstractModule.h b/src/lib/utility/sonargraph/SonargraphXsdAbstractModule.h
index 52278f47..21929bdb 100644
--- a/src/lib/utility/sonargraph/SonargraphXsdAbstractModule.h
+++ b/src/lib/utility/sonargraph/SonargraphXsdAbstractModule.h
@@ -37,7 +37,6 @@ namespace Sonargraph
virtual std::set getAllSourcePaths() const = 0;
virtual std::set getAllSourceFilePathsCanonical() const = 0;
virtual std::set getAllCxxHeaderSearchPathsCanonical() const = 0;
- virtual std::set filterToContainedFilePaths(const std::set& filePaths) const = 0;
std::shared_ptr getSoftwareSystem() const;
std::vector getDerivedExcludeFilters() const;
diff --git a/src/lib/utility/sonargraph/SonargraphXsdCmakeJsonModule.cpp b/src/lib/utility/sonargraph/SonargraphXsdCmakeJsonModule.cpp
index 05737d72..27db442b 100644
--- a/src/lib/utility/sonargraph/SonargraphXsdCmakeJsonModule.cpp
+++ b/src/lib/utility/sonargraph/SonargraphXsdCmakeJsonModule.cpp
@@ -7,6 +7,8 @@
#include "settings/LanguageType.h"
#include "settings/SourceGroupSettings.h"
#include "settings/SourceGroupSettingsCxxSonargraph.h"
+#include "settings/SourceGroupSettingsWithCppStandard.h"
+#include "settings/SourceGroupSettingsWithCStandard.h"
#include "utility/file/FileSystem.h"
#include "utility/logging/logging.h"
#include "utility/sonargraph/SonargraphSoftwareSystem.h"
@@ -177,75 +179,45 @@ namespace Sonargraph
return headerSearchPaths;
}
- std::set XsdCmakeJsonModule::filterToContainedFilePaths(const std::set& filePaths) const
- {
- const std::set indexedPaths = getAllSourcePaths();
- const std::vector excludeFilters = getDerivedExcludeFilters();
- const std::vector includeFilters = getDerivedIncludeFilters();
-
- std::set containedFilePaths;
- for (const FilePath& filePath : filePaths)
- {
- bool isInIndexedPaths = false;
- for (const FilePath& indexedPath : indexedPaths)
- {
- if (indexedPath == filePath || indexedPath.contains(filePath))
- {
- isInIndexedPaths = true;
- break;
- }
- }
-
- if (isInIndexedPaths)
- {
- for (const FilePathFilter& excludeFilter : excludeFilters)
- {
- if (excludeFilter.isMatching(filePath))
- {
- isInIndexedPaths = false;
- break;
- }
- }
-
- if (!isInIndexedPaths)
- {
- for (const FilePathFilter& includeFilter : includeFilters)
- {
- if (includeFilter.isMatching(filePath))
- {
- isInIndexedPaths = true;
- break;
- }
- }
- }
- }
-
- if (isInIndexedPaths)
- {
- containedFilePaths.insert(filePath);
- }
- }
-
- return containedFilePaths;
- }
-
std::vector> XsdCmakeJsonModule::getIndexerCommands(
std::shared_ptr sourceGroupSettings,
std::shared_ptr appSettings) const
{
std::vector> indexerCommands;
+ std::set indexedHeaderPaths;
+ std::string languageStandard = SourceGroupSettingsWithCppStandard::getDefaultCppStandardStatic();
+
+ if (std::shared_ptr sonargraphSettings =
+ std::dynamic_pointer_cast(sourceGroupSettings))
+ {
+ indexedHeaderPaths = utility::toSet(sonargraphSettings->getIndexedHeaderPathsExpandedAndAbsolute());
+ languageStandard = sonargraphSettings->getCppStandard();
+ }
+ else
+ {
+ LOG_ERROR("Source group doesn't specify language standard. Falling back to \"" + languageStandard + "\".");
+ LOG_ERROR("Source group doesn't specify any indexed header paths");
+ }
+
+ const std::vector systemHeaderSearchPaths = (appSettings ? appSettings->getHeaderSearchPathsExpanded() : std::vector());
+ const std::vector frameworkSearchPaths = (appSettings ? appSettings->getFrameworkSearchPathsExpanded() : std::vector());
+
for (std::shared_ptr rootPath : getRootPaths())
{
if (std::shared_ptr rootPathWithFiles = std::dynamic_pointer_cast(rootPath))
{
- utility::append(indexerCommands, getIndexerCommandsForRootPath(rootPathWithFiles, sourceGroupSettings, appSettings));
+ utility::append(indexerCommands, getIndexerCommandsForRootPath(
+ rootPathWithFiles, indexedHeaderPaths, languageStandard, systemHeaderSearchPaths, frameworkSearchPaths
+ ));
}
}
for (std::shared_ptr rootPath : m_rootPathWithFiles)
{
- utility::append(indexerCommands, getIndexerCommandsForRootPath(rootPath, sourceGroupSettings, appSettings));
+ utility::append(indexerCommands, getIndexerCommandsForRootPath(
+ rootPath, indexedHeaderPaths ,languageStandard, systemHeaderSearchPaths, frameworkSearchPaths
+ ));
}
return indexerCommands;
@@ -321,8 +293,10 @@ namespace Sonargraph
std::vector> XsdCmakeJsonModule::getIndexerCommandsForRootPath(
std::shared_ptr rootPath,
- std::shared_ptr sourceGroupSettings,
- std::shared_ptr appSettings) const
+ const std::set indexedHeaderPaths,
+ const std::string& languageStandard,
+ const std::vector systemHeaderSearchPaths,
+ const std::vector frameworkSearchPaths) const
{
std::vector> indexerCommands;
if (rootPath)
@@ -335,17 +309,8 @@ namespace Sonargraph
const FilePath baseDir = rootPath->getFilePath(softwareSystem->getBaseDirectory());
- std::set indexedHeaderPaths;
- if (std::shared_ptr sonargraphSettings = std::dynamic_pointer_cast(sourceGroupSettings))
- {
- indexedHeaderPaths = utility::toSet(sonargraphSettings->getIndexedHeaderPathsExpandedAndAbsolute());
- }
-
const std::set excludeFilters = utility::toSet(getDerivedExcludeFilters());
const std::set includeFilters = utility::toSet(getDerivedIncludeFilters());
- const std::string languageStandard = sourceGroupSettings->getStandard();
- const std::vector systemHeaderSearchPaths = (appSettings ? appSettings->getHeaderSearchPathsExpanded() : std::vector());
- const std::vector frameworkSearchPaths = (appSettings ? appSettings->getFrameworkSearchPathsExpanded() : std::vector());
OrderedCache> compilerOptionCache([&](const Id& id) {
if (std::shared_ptr softwareSystem = getSoftwareSystem())
diff --git a/src/lib/utility/sonargraph/SonargraphXsdCmakeJsonModule.h b/src/lib/utility/sonargraph/SonargraphXsdCmakeJsonModule.h
index cd64ad0c..d85ced8e 100644
--- a/src/lib/utility/sonargraph/SonargraphXsdCmakeJsonModule.h
+++ b/src/lib/utility/sonargraph/SonargraphXsdCmakeJsonModule.h
@@ -17,7 +17,6 @@ namespace Sonargraph
std::set getAllSourcePaths() const override;
std::set getAllSourceFilePathsCanonical() const override;
std::set getAllCxxHeaderSearchPathsCanonical() const override;
- std::set filterToContainedFilePaths(const std::set& filePaths) const override;
std::vector> getIndexerCommands(
std::shared_ptr sourceGroupSettings,
std::shared_ptr appSettings) const override;
@@ -33,9 +32,11 @@ namespace Sonargraph
const std::set& includeFilters) const;
std::vector> getIndexerCommandsForRootPath(
- std::shared_ptr rootPath,
- std::shared_ptr sourceGroupSettings,
- std::shared_ptr appSettings) const;
+ std::shared_ptr rootPath,
+ const std::set indexedHeaderPaths,
+ const std::string& languageStandard,
+ const std::vector systemHeaderSearchPaths,
+ const std::vector frameworkSearchPaths) const;
std::vector> m_rootPathWithFiles;
};
diff --git a/src/lib/utility/sonargraph/SonargraphXsdJavaModule.cpp b/src/lib/utility/sonargraph/SonargraphXsdJavaModule.cpp
index 68c2b5fb..00c55909 100644
--- a/src/lib/utility/sonargraph/SonargraphXsdJavaModule.cpp
+++ b/src/lib/utility/sonargraph/SonargraphXsdJavaModule.cpp
@@ -102,58 +102,6 @@ namespace Sonargraph
return std::set();
}
- std::set XsdJavaModule::filterToContainedFilePaths(const std::set& filePaths) const
- {
- const std::set