Utils: Use free functions in OsSpecificAspects

Generates a bit less code in debug mode and is easier to read IMNSHO.

Change-Id: Ib9c0b9a0c058327facff16600a7014207167b050
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
hjk
2018-04-23 13:34:11 +02:00
parent 58f0a7a3dd
commit 22428af750
6 changed files with 43 additions and 46 deletions

View File

@@ -325,13 +325,13 @@ void Environment::prependOrSet(const QString&key, const QString &value, const QS
void Environment::appendOrSetPath(const QString &value) void Environment::appendOrSetPath(const QString &value)
{ {
appendOrSet("PATH", QDir::toNativeSeparators(value), appendOrSet("PATH", QDir::toNativeSeparators(value),
QString(OsSpecificAspects(m_osType).pathListSeparator())); QString(OsSpecificAspects::pathListSeparator(m_osType)));
} }
void Environment::prependOrSetPath(const QString &value) void Environment::prependOrSetPath(const QString &value)
{ {
prependOrSet("PATH", QDir::toNativeSeparators(value), prependOrSet("PATH", QDir::toNativeSeparators(value),
QString(OsSpecificAspects(m_osType).pathListSeparator())); QString(OsSpecificAspects::pathListSeparator(m_osType)));
} }
void Environment::prependOrSetLibrarySearchPath(const QString &value) void Environment::prependOrSetLibrarySearchPath(const QString &value)
@@ -496,7 +496,7 @@ FileName Environment::searchInPath(const QString &executable,
FileNameList Environment::path() const FileNameList Environment::path() const
{ {
const QStringList pathComponents = value("PATH") const QStringList pathComponents = value("PATH")
.split(OsSpecificAspects(m_osType).pathListSeparator(), QString::SkipEmptyParts); .split(OsSpecificAspects::pathListSeparator(m_osType), QString::SkipEmptyParts);
return Utils::transform(pathComponents, &FileName::fromUserInput); return Utils::transform(pathComponents, &FileName::fromUserInput);
} }

View File

@@ -75,7 +75,7 @@ public:
static QString withExecutableSuffix(const QString &executable) static QString withExecutableSuffix(const QString &executable)
{ {
return hostOsAspects().withExecutableSuffix(executable); return OsSpecificAspects::withExecutableSuffix(hostOs(), executable);
} }
static void setOverrideFileNameCaseSensitivity(Qt::CaseSensitivity sensitivity); static void setOverrideFileNameCaseSensitivity(Qt::CaseSensitivity sensitivity);
@@ -85,24 +85,22 @@ public:
{ {
return m_useOverrideFileNameCaseSensitivity return m_useOverrideFileNameCaseSensitivity
? m_overrideFileNameCaseSensitivity ? m_overrideFileNameCaseSensitivity
: hostOsAspects().fileNameCaseSensitivity(); : OsSpecificAspects::fileNameCaseSensitivity(hostOs());
} }
static QChar pathListSeparator() static QChar pathListSeparator()
{ {
return hostOsAspects().pathListSeparator(); return OsSpecificAspects::pathListSeparator(hostOs());
} }
static Qt::KeyboardModifier controlModifier() static Qt::KeyboardModifier controlModifier()
{ {
return hostOsAspects().controlModifier(); return OsSpecificAspects::controlModifier(hostOs());
} }
static bool canCreateOpenGLContext(QString *errorMessage); static bool canCreateOpenGLContext(QString *errorMessage);
private: private:
static OsSpecificAspects hostOsAspects() { return OsSpecificAspects(hostOs()); }
static Qt::CaseSensitivity m_overrideFileNameCaseSensitivity; static Qt::CaseSensitivity m_overrideFileNameCaseSensitivity;
static bool m_useOverrideFileNameCaseSensitivity; static bool m_useOverrideFileNameCaseSensitivity;
}; };

View File

@@ -38,44 +38,43 @@ namespace Utils {
// Add more as needed. // Add more as needed.
enum OsType { OsTypeWindows, OsTypeLinux, OsTypeMac, OsTypeOtherUnix, OsTypeOther }; enum OsType { OsTypeWindows, OsTypeLinux, OsTypeMac, OsTypeOtherUnix, OsTypeOther };
class QTCREATOR_UTILS_EXPORT OsSpecificAspects namespace OsSpecificAspects {
QTCREATOR_UTILS_EXPORT inline QString withExecutableSuffix(OsType osType, const QString &executable)
{ {
public: QString finalName = executable;
OsSpecificAspects(OsType osType) : m_osType(osType) { } if (osType == OsTypeWindows)
finalName += QLatin1String(QTC_WIN_EXE_SUFFIX);
return finalName;
}
QString withExecutableSuffix(const QString &executable) const { QTCREATOR_UTILS_EXPORT inline Qt::CaseSensitivity fileNameCaseSensitivity(OsType osType)
QString finalName = executable; {
if (m_osType == OsTypeWindows) return osType == OsTypeWindows || osType == OsTypeMac ? Qt::CaseInsensitive : Qt::CaseSensitive;
finalName += QLatin1String(QTC_WIN_EXE_SUFFIX); }
return finalName;
}
Qt::CaseSensitivity fileNameCaseSensitivity() const { QTCREATOR_UTILS_EXPORT inline QChar pathListSeparator(OsType osType)
return m_osType == OsTypeWindows || m_osType == OsTypeMac ? Qt::CaseInsensitive : Qt::CaseSensitive; {
} return QLatin1Char(osType == OsTypeWindows ? ';' : ':');
}
QChar pathListSeparator() const { QTCREATOR_UTILS_EXPORT inline Qt::KeyboardModifier controlModifier(OsType osType)
return QLatin1Char(m_osType == OsTypeWindows ? ';' : ':'); {
} return osType == OsTypeMac ? Qt::MetaModifier : Qt::ControlModifier;
}
Qt::KeyboardModifier controlModifier() const { QTCREATOR_UTILS_EXPORT inline QString pathWithNativeSeparators(OsType osType, const QString &pathName)
return m_osType == OsTypeMac ? Qt::MetaModifier : Qt::ControlModifier; {
} if (osType == OsTypeWindows) {
const int pos = pathName.indexOf('/');
QString pathWithNativeSeparators(const QString &pathName) const { if (pos >= 0) {
if (m_osType == OsTypeWindows) { QString n = pathName;
const int pos = pathName.indexOf('/'); std::replace(std::begin(n) + pos, std::end(n), '/', '\\');
if (pos >= 0) { return n;
QString n = pathName;
std::replace(std::begin(n) + pos, std::end(n), '/', '\\');
return n;
}
} }
return pathName;
} }
return pathName;
}
private: } // namespace OsSpecificAspects
const OsType m_osType;
};
} // namespace Utils } // namespace Utils

View File

@@ -978,7 +978,7 @@ void EditorManagerPrivate::saveSettings()
qsettings->setValue(bigTextFileSizeLimitKey, d->m_bigFileSizeLimitInMB); qsettings->setValue(bigTextFileSizeLimitKey, d->m_bigFileSizeLimitInMB);
Qt::CaseSensitivity defaultSensitivity Qt::CaseSensitivity defaultSensitivity
= OsSpecificAspects(HostOsInfo::hostOs()).fileNameCaseSensitivity(); = OsSpecificAspects::fileNameCaseSensitivity(HostOsInfo::hostOs());
Qt::CaseSensitivity sensitivity = HostOsInfo::fileNameCaseSensitivity(); Qt::CaseSensitivity sensitivity = HostOsInfo::fileNameCaseSensitivity();
if (defaultSensitivity == sensitivity) if (defaultSensitivity == sensitivity)
qsettings->remove(fileSystemCaseSensitivityKey); qsettings->remove(fileSystemCaseSensitivityKey);
@@ -997,7 +997,7 @@ void EditorManagerPrivate::readSettings()
if (qs->contains(fileSystemCaseSensitivityKey)) { if (qs->contains(fileSystemCaseSensitivityKey)) {
Qt::CaseSensitivity defaultSensitivity Qt::CaseSensitivity defaultSensitivity
= OsSpecificAspects(HostOsInfo::hostOs()).fileNameCaseSensitivity(); = OsSpecificAspects::fileNameCaseSensitivity(HostOsInfo::hostOs());
bool ok = false; bool ok = false;
Qt::CaseSensitivity sensitivity = defaultSensitivity; Qt::CaseSensitivity sensitivity = defaultSensitivity;
int sensitivitySetting = qs->value(fileSystemCaseSensitivityKey).toInt(&ok); int sensitivitySetting = qs->value(fileSystemCaseSensitivityKey).toInt(&ok);

View File

@@ -121,7 +121,7 @@ QWidget *SystemSettings::widget()
if (HostOsInfo::isMacHost()) { if (HostOsInfo::isMacHost()) {
Qt::CaseSensitivity defaultSensitivity Qt::CaseSensitivity defaultSensitivity
= OsSpecificAspects(HostOsInfo::hostOs()).fileNameCaseSensitivity(); = OsSpecificAspects::fileNameCaseSensitivity(HostOsInfo::hostOs());
if (defaultSensitivity == Qt::CaseSensitive) { if (defaultSensitivity == Qt::CaseSensitive) {
m_page->fileSystemCaseSensitivityChooser->addItem(tr("Case Sensitive (Default)"), m_page->fileSystemCaseSensitivityChooser->addItem(tr("Case Sensitive (Default)"),
Qt::CaseSensitive); Qt::CaseSensitive);
@@ -173,7 +173,7 @@ void SystemSettings::apply()
if (HostOsInfo::isMacHost()) { if (HostOsInfo::isMacHost()) {
Qt::CaseSensitivity defaultSensitivity Qt::CaseSensitivity defaultSensitivity
= OsSpecificAspects(HostOsInfo::hostOs()).fileNameCaseSensitivity(); = OsSpecificAspects::fileNameCaseSensitivity(HostOsInfo::hostOs());
Qt::CaseSensitivity selectedSensitivity = Qt::CaseSensitivity( Qt::CaseSensitivity selectedSensitivity = Qt::CaseSensitivity(
m_page->fileSystemCaseSensitivityChooser->currentData().toInt()); m_page->fileSystemCaseSensitivityChooser->currentData().toInt());
if (defaultSensitivity == selectedSensitivity) if (defaultSensitivity == selectedSensitivity)

View File

@@ -462,7 +462,7 @@ ExecutableAspect::ExecutableAspect(RunConfiguration *rc)
void ExecutableAspect::setExecutablePathStyle(OsType osType) void ExecutableAspect::setExecutablePathStyle(OsType osType)
{ {
m_executable.setDisplayFilter([osType](const QString &pathName) { m_executable.setDisplayFilter([osType](const QString &pathName) {
return OsSpecificAspects(osType).pathWithNativeSeparators(pathName); return OsSpecificAspects::pathWithNativeSeparators(osType, pathName);
}); });
} }