diff --git a/src/libs/utils/fileutils.cpp b/src/libs/utils/fileutils.cpp index 647318a2e52..71bfd96aff5 100644 --- a/src/libs/utils/fileutils.cpp +++ b/src/libs/utils/fileutils.cpp @@ -787,6 +787,34 @@ QString FilePath::completeBaseName() const return name.left(name.lastIndexOf('.')); } +/// \returns the suffix (extension) of the file. +/// +/// The suffix consists of all characters in the file after +/// (but not including) the last '.'. + +QString FilePath::suffix() const +{ + const QString &name = fileName(); + const int index = name.lastIndexOf('.'); + if (index >= 0) + return name.mid(index + 1); + return {}; +} + +/// \returns the complete suffix (extension) of the file. +/// +/// The complete suffix consists of all characters in the file after +/// (but not including) the first '.'. + +QString FilePath::completeSuffix() const +{ + const QString &name = fileName(); + const int index = name.indexOf('.'); + if (index >= 0) + return name.mid(index + 1); + return {}; +} + void FilePath::setScheme(const QString &scheme) { QTC_CHECK(!scheme.contains('/')); diff --git a/src/libs/utils/fileutils.h b/src/libs/utils/fileutils.h index a6987633d38..431e9ec0c66 100644 --- a/src/libs/utils/fileutils.h +++ b/src/libs/utils/fileutils.h @@ -106,6 +106,8 @@ public: QString baseName() const; QString completeBaseName() const; + QString suffix() const; + QString completeSuffix() const; QString scheme() const { return m_scheme; } void setScheme(const QString &scheme); diff --git a/src/plugins/coreplugin/plugininstallwizard.cpp b/src/plugins/coreplugin/plugininstallwizard.cpp index 16200daf3f9..fa7b120be4c 100644 --- a/src/plugins/coreplugin/plugininstallwizard.cpp +++ b/src/plugins/coreplugin/plugininstallwizard.cpp @@ -79,7 +79,7 @@ static QStringList libraryNameFilter() static bool hasLibSuffix(const FilePath &path) { return (HostOsInfo::isWindowsHost() && path.endsWith(".dll")) - || (HostOsInfo::isLinuxHost() && path.toFileInfo().completeSuffix().startsWith(".so")) + || (HostOsInfo::isLinuxHost() && path.completeSuffix().startsWith(".so")) || (HostOsInfo::isMacHost() && path.endsWith(".dylib")); } diff --git a/src/plugins/modeleditor/modelindexer.cpp b/src/plugins/modeleditor/modelindexer.cpp index cc4fceeb5c5..86ff0230d95 100644 --- a/src/plugins/modeleditor/modelindexer.cpp +++ b/src/plugins/modeleditor/modelindexer.cpp @@ -470,7 +470,7 @@ QString ModelIndexer::findFirstModel(ProjectExplorer::FolderNode *folderNode, if (!mimeType.isValid()) return QString(); foreach (ProjectExplorer::FileNode *fileNode, folderNode->fileNodes()) { - if (mimeType.suffixes().contains(fileNode->filePath().toFileInfo().completeSuffix())) + if (mimeType.suffixes().contains(fileNode->filePath().completeSuffix())) return fileNode->filePath().toString(); } foreach (ProjectExplorer::FolderNode *subFolderNode, folderNode->folderNodes()) { diff --git a/src/plugins/projectexplorer/projectmodels.cpp b/src/plugins/projectexplorer/projectmodels.cpp index 425f53548d4..d701a60ca26 100644 --- a/src/plugins/projectexplorer/projectmodels.cpp +++ b/src/plugins/projectexplorer/projectmodels.cpp @@ -212,7 +212,7 @@ bool FlatModel::setData(const QModelIndex &index, const QVariant &value, int rol // The base name of the file was changed. Go look for other files with the same base name // and offer to rename them as well. - if (orgFilePath != newFilePath && orgFileInfo.suffix() == newFilePath.toFileInfo().suffix()) { + if (orgFilePath != newFilePath && orgFileInfo.suffix() == newFilePath.suffix()) { const QList candidateNodes = ProjectTree::siblingsWithSameBaseName(node); if (!candidateNodes.isEmpty()) { const QMessageBox::StandardButton reply = QMessageBox::question( @@ -225,7 +225,7 @@ bool FlatModel::setData(const QModelIndex &index, const QVariant &value, int rol for (Node * const n : candidateNodes) { QString targetFilePath = orgFileInfo.absolutePath() + '/' + newFilePath.completeBaseName(); - const QString suffix = n->filePath().toFileInfo().suffix(); + const QString suffix = n->filePath().suffix(); if (!suffix.isEmpty()) targetFilePath.append('.').append(suffix); toRename.emplace_back(std::make_tuple(n, n->filePath(), diff --git a/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp b/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp index 1c865719ad3..369df95a322 100644 --- a/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp +++ b/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp @@ -861,8 +861,7 @@ bool singleSelectedAndUiFile(const SelectionContext &context) if (!designDocument) return false; - return designDocument->fileName().toFileInfo().completeSuffix() - == QLatin1String("ui.qml"); + return designDocument->fileName().completeSuffix() == QLatin1String("ui.qml"); } bool lowerAvailable(const SelectionContext &selectionState) diff --git a/src/plugins/texteditor/highlighter.cpp b/src/plugins/texteditor/highlighter.cpp index 1c36b115bab..ef6e4312f4f 100644 --- a/src/plugins/texteditor/highlighter.cpp +++ b/src/plugins/texteditor/highlighter.cpp @@ -172,7 +172,7 @@ Highlighter::Definitions Highlighter::definitionsForFileName(const Utils::FilePa = highlightRepository()->definitionsForFileName(fileName.fileName()).toList(); if (definitions.size() > 1) { - const QString &fileExtension = fileName.toFileInfo().completeSuffix(); + const QString &fileExtension = fileName.completeSuffix(); const Definition &rememberedDefinition = fileExtension.isEmpty() ? definitionForSetting(kDefinitionForFilePath, @@ -192,7 +192,7 @@ void Highlighter::rememberDefinitionForDocument(const Highlighter::Definition &d if (!definition.isValid()) return; const QString &mimeType = document->mimeType(); - const QString &fileExtension = document->filePath().toFileInfo().completeSuffix(); + const QString &fileExtension = document->filePath().completeSuffix(); const QString &path = document->filePath().toFileInfo().canonicalFilePath(); QSettings *settings = Core::ICore::settings(); settings->beginGroup(Constants::HIGHLIGHTER_SETTINGS_CATEGORY);