ProjectExplorer: Code cosmetics in toolchain.cpp

Mostly namespaces, but also centralize access to the factory list
for better debugging.

Change-Id: Ic8b19b8c110dc925e0f7ae27af1da2b9e1ec6086
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
hjk
2023-07-07 14:34:35 +02:00
parent 3e155919eb
commit 6f17409b53

View File

@@ -14,7 +14,6 @@
#include <utils/qtcassert.h> #include <utils/qtcassert.h>
#include <QCoreApplication> #include <QCoreApplication>
#include <QDir>
#include <QFileInfo> #include <QFileInfo>
#include <QUuid> #include <QUuid>
@@ -22,18 +21,22 @@
using namespace Utils; using namespace Utils;
static const char ID_KEY[] = "ProjectExplorer.ToolChain.Id";
static const char DISPLAY_NAME_KEY[] = "ProjectExplorer.ToolChain.DisplayName";
static const char AUTODETECT_KEY[] = "ProjectExplorer.ToolChain.Autodetect";
static const char DETECTION_SOURCE_KEY[] = "ProjectExplorer.ToolChain.DetectionSource";
static const char LANGUAGE_KEY_V1[] = "ProjectExplorer.ToolChain.Language"; // For QtCreator <= 4.2
static const char LANGUAGE_KEY_V2[] = "ProjectExplorer.ToolChain.LanguageV2"; // For QtCreator > 4.2
const char CODE_MODEL_TRIPLE_KEY[] = "ExplicitCodeModelTargetTriple";
namespace ProjectExplorer { namespace ProjectExplorer {
namespace Internal { namespace Internal {
static QList<ToolChainFactory *> g_toolChainFactories; const char ID_KEY[] = "ProjectExplorer.ToolChain.Id";
const char DISPLAY_NAME_KEY[] = "ProjectExplorer.ToolChain.DisplayName";
const char AUTODETECT_KEY[] = "ProjectExplorer.ToolChain.Autodetect";
const char DETECTION_SOURCE_KEY[] = "ProjectExplorer.ToolChain.DetectionSource";
const char LANGUAGE_KEY_V1[] = "ProjectExplorer.ToolChain.Language"; // For QtCreator <= 4.2
const char LANGUAGE_KEY_V2[] = "ProjectExplorer.ToolChain.LanguageV2"; // For QtCreator > 4.2
const char CODE_MODEL_TRIPLE_KEY[] = "ExplicitCodeModelTargetTriple";
QList<ToolChainFactory *> &toolChainFactories()
{
static QList<ToolChainFactory *> theToolChainFactories;
return theToolChainFactories;
}
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
// ToolChainPrivate // ToolChainPrivate
@@ -44,7 +47,7 @@ class ToolChainPrivate
public: public:
using Detection = ToolChain::Detection; using Detection = ToolChain::Detection;
explicit ToolChainPrivate(Utils::Id typeId) : explicit ToolChainPrivate(Id typeId) :
m_id(QUuid::createUuid().toByteArray()), m_id(QUuid::createUuid().toByteArray()),
m_typeId(typeId), m_typeId(typeId),
m_predefinedMacrosCache(new ToolChain::MacrosCache::element_type()), m_predefinedMacrosCache(new ToolChain::MacrosCache::element_type()),
@@ -59,11 +62,11 @@ public:
QString m_compilerCommandKey; QString m_compilerCommandKey;
Abi m_targetAbi; Abi m_targetAbi;
QString m_targetAbiKey; QString m_targetAbiKey;
QSet<Utils::Id> m_supportedLanguages; QSet<Id> m_supportedLanguages;
mutable QString m_displayName; mutable QString m_displayName;
QString m_typeDisplayName; QString m_typeDisplayName;
Utils::Id m_typeId; Id m_typeId;
Utils::Id m_language; Id m_language;
Detection m_detection = ToolChain::UninitializedDetection; Detection m_detection = ToolChain::UninitializedDetection;
QString m_detectionSource; QString m_detectionSource;
QString m_explicitCodeModelTargetTriple; QString m_explicitCodeModelTargetTriple;
@@ -76,24 +79,24 @@ public:
// Deprecated used from QtCreator <= 4.2 // Deprecated used from QtCreator <= 4.2
Utils::Id fromLanguageV1(int language) Id fromLanguageV1(int language)
{ {
switch (language) switch (language)
{ {
case Deprecated::Toolchain::C : case Deprecated::Toolchain::C :
return Utils::Id(Constants::C_LANGUAGE_ID); return Id(Constants::C_LANGUAGE_ID);
case Deprecated::Toolchain::Cxx: case Deprecated::Toolchain::Cxx:
return Utils::Id(Constants::CXX_LANGUAGE_ID); return Id(Constants::CXX_LANGUAGE_ID);
case Deprecated::Toolchain::None: case Deprecated::Toolchain::None:
default: default:
return Utils::Id(); return Id();
} }
} }
} // namespace Internal } // namespace Internal
namespace Deprecated { namespace Deprecated::Toolchain {
namespace Toolchain {
QString languageId(Language l) QString languageId(Language l)
{ {
switch (l) { switch (l) {
@@ -106,8 +109,10 @@ QString languageId(Language l)
}; };
return QString(); return QString();
} }
} // namespace Toolchain
} // namespace Deprecated } // namespace Deprecated::ToolChain
using namespace Internal;
/*! /*!
\class ProjectExplorer::ToolChain \class ProjectExplorer::ToolChain
@@ -117,12 +122,12 @@ QString languageId(Language l)
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
ToolChain::ToolChain(Utils::Id typeId) : ToolChain::ToolChain(Id typeId) :
d(std::make_unique<Internal::ToolChainPrivate>(typeId)) d(std::make_unique<ToolChainPrivate>(typeId))
{ {
} }
void ToolChain::setLanguage(Utils::Id language) void ToolChain::setLanguage(Id language)
{ {
QTC_ASSERT(!d->m_language.isValid() || isAutoDetected(), return); QTC_ASSERT(!d->m_language.isValid() || isAutoDetected(), return);
QTC_ASSERT(language.isValid(), return); QTC_ASSERT(language.isValid(), return);
@@ -174,7 +179,7 @@ QStringList ToolChain::suggestedMkspecList() const
return {}; return {};
} }
Utils::Id ToolChain::typeId() const Id ToolChain::typeId() const
{ {
return d->m_typeId; return d->m_typeId;
} }
@@ -199,7 +204,7 @@ FilePaths ToolChain::includedFiles(const QStringList &flags, const FilePath &dir
return {}; return {};
} }
Utils::Id ToolChain::language() const Id ToolChain::language() const
{ {
return d->m_language; return d->m_language;
} }
@@ -217,7 +222,7 @@ bool ToolChain::operator == (const ToolChain &tc) const
ToolChain *ToolChain::clone() const ToolChain *ToolChain::clone() const
{ {
for (ToolChainFactory *f : std::as_const(Internal::g_toolChainFactories)) { for (ToolChainFactory *f : std::as_const(toolChainFactories())) {
if (f->supportedToolChainType() == d->m_typeId) { if (f->supportedToolChainType() == d->m_typeId) {
ToolChain *tc = f->create(); ToolChain *tc = f->create();
QTC_ASSERT(tc, return nullptr); QTC_ASSERT(tc, return nullptr);
@@ -354,7 +359,7 @@ bool ToolChain::fromMap(const QVariantMap &data)
const QString id = data.value(QLatin1String(ID_KEY)).toString(); const QString id = data.value(QLatin1String(ID_KEY)).toString();
int pos = id.indexOf(QLatin1Char(':')); int pos = id.indexOf(QLatin1Char(':'));
QTC_ASSERT(pos > 0, return false); QTC_ASSERT(pos > 0, return false);
d->m_typeId = Utils::Id::fromString(id.left(pos)); d->m_typeId = Id::fromString(id.left(pos));
d->m_id = id.mid(pos + 1).toUtf8(); d->m_id = id.mid(pos + 1).toUtf8();
const bool autoDetect = data.value(QLatin1String(AUTODETECT_KEY), false).toBool(); const bool autoDetect = data.value(QLatin1String(AUTODETECT_KEY), false).toBool();
@@ -369,15 +374,15 @@ bool ToolChain::fromMap(const QVariantMap &data)
const QString langId = data.value(QLatin1String(LANGUAGE_KEY_V2)).toString(); const QString langId = data.value(QLatin1String(LANGUAGE_KEY_V2)).toString();
const int pos = langId.lastIndexOf('.'); const int pos = langId.lastIndexOf('.');
if (pos >= 0) if (pos >= 0)
d->m_language = Utils::Id::fromString(langId.mid(pos + 1)); d->m_language = Id::fromString(langId.mid(pos + 1));
else else
d->m_language = Utils::Id::fromString(langId); d->m_language = Id::fromString(langId);
} else if (data.contains(LANGUAGE_KEY_V1)) { // Import from old settings } else if (data.contains(LANGUAGE_KEY_V1)) { // Import from old settings
d->m_language = Internal::fromLanguageV1(data.value(QLatin1String(LANGUAGE_KEY_V1)).toInt()); d->m_language = Internal::fromLanguageV1(data.value(QLatin1String(LANGUAGE_KEY_V1)).toInt());
} }
if (!d->m_language.isValid()) if (!d->m_language.isValid())
d->m_language = Utils::Id(Constants::CXX_LANGUAGE_ID); d->m_language = Id(Constants::CXX_LANGUAGE_ID);
if (!d->m_targetAbiKey.isEmpty()) if (!d->m_targetAbiKey.isEmpty())
d->m_targetAbi = Abi::fromString(data.value(d->m_targetAbiKey).toString()); d->m_targetAbi = Abi::fromString(data.value(d->m_targetAbiKey).toString());
@@ -410,9 +415,8 @@ static long toLanguageVersionAsLong(QByteArray dateAsByteArray)
return result; return result;
} }
Utils::LanguageVersion ToolChain::cxxLanguageVersion(const QByteArray &cplusplusMacroValue) LanguageVersion ToolChain::cxxLanguageVersion(const QByteArray &cplusplusMacroValue)
{ {
using Utils::LanguageVersion;
const long version = toLanguageVersionAsLong(cplusplusMacroValue); const long version = toLanguageVersionAsLong(cplusplusMacroValue);
if (version > 201703L) if (version > 201703L)
@@ -427,10 +431,8 @@ Utils::LanguageVersion ToolChain::cxxLanguageVersion(const QByteArray &cplusplus
return LanguageVersion::CXX03; return LanguageVersion::CXX03;
} }
Utils::LanguageVersion ToolChain::languageVersion(const Utils::Id &language, const Macros &macros) LanguageVersion ToolChain::languageVersion(const Id &language, const Macros &macros)
{ {
using Utils::LanguageVersion;
if (language == Constants::CXX_LANGUAGE_ID) { if (language == Constants::CXX_LANGUAGE_ID) {
for (const ProjectExplorer::Macro &macro : macros) { for (const ProjectExplorer::Macro &macro : macros) {
if (macro.key == "__cplusplus") // Check for the C++ identifying macro if (macro.key == "__cplusplus") // Check for the C++ identifying macro
@@ -548,17 +550,17 @@ void ToolChain::setExplicitCodeModelTargetTriple(const QString &triple)
ToolChainFactory::ToolChainFactory() ToolChainFactory::ToolChainFactory()
{ {
Internal::g_toolChainFactories.append(this); toolChainFactories().append(this);
} }
ToolChainFactory::~ToolChainFactory() ToolChainFactory::~ToolChainFactory()
{ {
Internal::g_toolChainFactories.removeOne(this); toolChainFactories().removeOne(this);
} }
const QList<ToolChainFactory *> ToolChainFactory::allToolChainFactories() const QList<ToolChainFactory *> ToolChainFactory::allToolChainFactories()
{ {
return Internal::g_toolChainFactories; return toolChainFactories();
} }
Toolchains ToolChainFactory::autoDetect(const ToolchainDetector &detector) const Toolchains ToolChainFactory::autoDetect(const ToolchainDetector &detector) const
@@ -611,9 +613,9 @@ QByteArray ToolChainFactory::idFromMap(const QVariantMap &data)
return rawIdData(data).second.toUtf8(); return rawIdData(data).second.toUtf8();
} }
Utils::Id ToolChainFactory::typeIdFromMap(const QVariantMap &data) Id ToolChainFactory::typeIdFromMap(const QVariantMap &data)
{ {
return Utils::Id::fromString(rawIdData(data).first); return Id::fromString(rawIdData(data).first);
} }
void ToolChainFactory::autoDetectionToMap(QVariantMap &data, bool detected) void ToolChainFactory::autoDetectionToMap(QVariantMap &data, bool detected)
@@ -621,9 +623,9 @@ void ToolChainFactory::autoDetectionToMap(QVariantMap &data, bool detected)
data.insert(QLatin1String(AUTODETECT_KEY), detected); data.insert(QLatin1String(AUTODETECT_KEY), detected);
} }
ToolChain *ToolChainFactory::createToolChain(Utils::Id toolChainType) ToolChain *ToolChainFactory::createToolChain(Id toolChainType)
{ {
for (ToolChainFactory *factory : std::as_const(Internal::g_toolChainFactories)) { for (ToolChainFactory *factory : std::as_const(toolChainFactories())) {
if (factory->m_supportedToolChainType == toolChainType) { if (factory->m_supportedToolChainType == toolChainType) {
if (ToolChain *tc = factory->create()) { if (ToolChain *tc = factory->create()) {
tc->d->m_typeId = toolChainType; tc->d->m_typeId = toolChainType;
@@ -634,22 +636,22 @@ ToolChain *ToolChainFactory::createToolChain(Utils::Id toolChainType)
return nullptr; return nullptr;
} }
QList<Utils::Id> ToolChainFactory::supportedLanguages() const QList<Id> ToolChainFactory::supportedLanguages() const
{ {
return m_supportsAllLanguages ? ToolChainManager::allLanguages() : m_supportedLanguages; return m_supportsAllLanguages ? ToolChainManager::allLanguages() : m_supportedLanguages;
} }
Utils::Id ToolChainFactory::supportedToolChainType() const Id ToolChainFactory::supportedToolChainType() const
{ {
return m_supportedToolChainType; return m_supportedToolChainType;
} }
void ToolChainFactory::setSupportedToolChainType(const Utils::Id &supportedToolChain) void ToolChainFactory::setSupportedToolChainType(const Id &supportedToolChain)
{ {
m_supportedToolChainType = supportedToolChain; m_supportedToolChainType = supportedToolChain;
} }
void ToolChainFactory::setSupportedLanguages(const QList<Utils::Id> &supportedLanguages) void ToolChainFactory::setSupportedLanguages(const QList<Id> &supportedLanguages)
{ {
m_supportedLanguages = supportedLanguages; m_supportedLanguages = supportedLanguages;
} }
@@ -678,11 +680,11 @@ ToolchainDetector::ToolchainDetector(const Toolchains &alreadyKnown,
QTC_CHECK(device); QTC_CHECK(device);
} }
BadToolchain::BadToolchain(const Utils::FilePath &filePath) BadToolchain::BadToolchain(const FilePath &filePath)
: BadToolchain(filePath, filePath.symLinkTarget(), filePath.lastModified()) : BadToolchain(filePath, filePath.symLinkTarget(), filePath.lastModified())
{} {}
BadToolchain::BadToolchain(const Utils::FilePath &filePath, const Utils::FilePath &symlinkTarget, BadToolchain::BadToolchain(const FilePath &filePath, const FilePath &symlinkTarget,
const QDateTime &timestamp) const QDateTime &timestamp)
: filePath(filePath), symlinkTarget(symlinkTarget), timestamp(timestamp) : filePath(filePath), symlinkTarget(symlinkTarget), timestamp(timestamp)
{} {}