From 5ec611b68e3e910b609ed8e72fd87cd45b86fb3a Mon Sep 17 00:00:00 2001 From: David Schulz Date: Fri, 4 Jun 2021 07:59:00 +0200 Subject: [PATCH] Utils: add FilePath::completeBaseName Removing some FilePath::toFileInfo() calls again. Change-Id: I6610beebf2c30754fde525b71f4c4a34ceb5e30b Reviewed-by: hjk --- src/libs/utils/fileutils.cpp | 16 ++++++++++++++++ src/libs/utils/fileutils.h | 2 ++ .../genericprojectmanager/genericproject.cpp | 4 ++-- src/plugins/nim/project/nimbleproject.cpp | 2 +- src/plugins/nim/project/nimproject.cpp | 2 +- .../projectexplorer/desktoprunconfiguration.cpp | 2 +- src/plugins/projectexplorer/gcctoolchain.cpp | 4 ++-- src/plugins/projectexplorer/msvctoolchain.cpp | 3 +-- src/plugins/projectexplorer/projectmodels.cpp | 2 +- src/plugins/projectexplorer/projecttree.cpp | 2 +- src/plugins/python/pythonproject.cpp | 4 ++-- src/plugins/python/pythonutils.cpp | 5 ++--- .../qbsprojectmanager/qbsbuildconfiguration.cpp | 2 +- .../qbsprojectmanager/qbsnodetreebuilder.cpp | 2 +- src/plugins/qbsprojectmanager/qbsproject.cpp | 2 +- .../qbsprojectmanager/qbsprojectimporter.cpp | 4 ++-- .../qmakebuildconfiguration.cpp | 2 +- .../qmakeprojectmanager/qmakenodetreebuilder.cpp | 2 +- .../qmakeprojectmanager/qmakeparsernodes.cpp | 6 +++--- src/plugins/qmakeprojectmanager/qmakeproject.cpp | 4 ++-- src/plugins/qmlprojectmanager/qmlproject.cpp | 2 +- .../qmlprojectmanager/qmlprojectnodes.cpp | 2 +- src/plugins/texteditor/codestylepool.cpp | 2 +- src/plugins/texteditor/highlighter.cpp | 2 +- 24 files changed, 48 insertions(+), 32 deletions(-) diff --git a/src/libs/utils/fileutils.cpp b/src/libs/utils/fileutils.cpp index cea4d1ec862..34ecb6d58a8 100644 --- a/src/libs/utils/fileutils.cpp +++ b/src/libs/utils/fileutils.cpp @@ -761,12 +761,28 @@ QString FilePath::fileNameWithPathComponents(int pathComponents) const return m_data; } +/// \returns the base name of the file without the path. +/// +/// The base name consists of all characters in the file up to +/// (but not including) the first '.' character. + QString FilePath::baseName() const { const QString &name = fileName(); return name.left(name.indexOf('.')); } +/// \returns the complete base name of the file without the path. +/// +/// The complete base name consists of all characters in the file up to +/// (but not including) the last '.' character + +QString FilePath::completeBaseName() const +{ + const QString &name = fileName(); + return name.left(name.lastIndexOf('.')); +} + 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 d6cbae74758..a6987633d38 100644 --- a/src/libs/utils/fileutils.h +++ b/src/libs/utils/fileutils.h @@ -103,7 +103,9 @@ public: QString fileName() const; QString fileNameWithPathComponents(int pathComponents) const; + QString baseName() const; + QString completeBaseName() const; QString scheme() const { return m_scheme; } void setScheme(const QString &scheme); diff --git a/src/plugins/genericprojectmanager/genericproject.cpp b/src/plugins/genericprojectmanager/genericproject.cpp index 28201a4d6be..abf42a8b870 100644 --- a/src/plugins/genericprojectmanager/genericproject.cpp +++ b/src/plugins/genericprojectmanager/genericproject.cpp @@ -195,7 +195,7 @@ GenericProject::GenericProject(const Utils::FilePath &fileName) { setId(Constants::GENERICPROJECT_ID); setProjectLanguages(Context(ProjectExplorer::Constants::CXX_LANGUAGE_ID)); - setDisplayName(fileName.toFileInfo().completeBaseName()); + setDisplayName(fileName.completeBaseName()); setBuildSystemCreator([](Target *t) { return new GenericBuildSystem(t); }); } @@ -475,7 +475,7 @@ void GenericBuildSystem::refresh(RefreshOptions options) if (options & Files) { auto newRoot = std::make_unique(projectDirectory()); - newRoot->setDisplayName(projectFilePath().toFileInfo().completeBaseName()); + newRoot->setDisplayName(projectFilePath().completeBaseName()); // find the common base directory of all source files FilePath baseDir = findCommonSourceRoot(); diff --git a/src/plugins/nim/project/nimbleproject.cpp b/src/plugins/nim/project/nimbleproject.cpp index d2486cbaebb..f3a91e3196f 100644 --- a/src/plugins/nim/project/nimbleproject.cpp +++ b/src/plugins/nim/project/nimbleproject.cpp @@ -38,7 +38,7 @@ NimbleProject::NimbleProject(const Utils::FilePath &fileName) : ProjectExplorer::Project(Constants::C_NIMBLE_MIMETYPE, fileName) { setId(Constants::C_NIMBLEPROJECT_ID); - setDisplayName(fileName.toFileInfo().completeBaseName()); + setDisplayName(fileName.completeBaseName()); // ensure debugging is enabled (Nim plugin translates nim code to C code) setProjectLanguages(Core::Context(ProjectExplorer::Constants::CXX_LANGUAGE_ID)); setBuildSystemCreator([] (Target *t) { return new NimbleBuildSystem(t); }); diff --git a/src/plugins/nim/project/nimproject.cpp b/src/plugins/nim/project/nimproject.cpp index 1c17b250c16..a10137d7e10 100644 --- a/src/plugins/nim/project/nimproject.cpp +++ b/src/plugins/nim/project/nimproject.cpp @@ -41,7 +41,7 @@ namespace Nim { NimProject::NimProject(const FilePath &fileName) : Project(Constants::C_NIM_MIMETYPE, fileName) { setId(Constants::C_NIMPROJECT_ID); - setDisplayName(fileName.toFileInfo().completeBaseName()); + setDisplayName(fileName.completeBaseName()); // ensure debugging is enabled (Nim plugin translates nim code to C code) setProjectLanguages(Core::Context(ProjectExplorer::Constants::CXX_LANGUAGE_ID)); diff --git a/src/plugins/projectexplorer/desktoprunconfiguration.cpp b/src/plugins/projectexplorer/desktoprunconfiguration.cpp index e1144c71abb..32752b6498b 100644 --- a/src/plugins/projectexplorer/desktoprunconfiguration.cpp +++ b/src/plugins/projectexplorer/desktoprunconfiguration.cpp @@ -118,7 +118,7 @@ void DesktopRunConfiguration::updateTargetInformation() if (profile.isEmpty()) setDefaultDisplayName(tr("Qt Run Configuration")); else - setDefaultDisplayName(profile.toFileInfo().completeBaseName()); + setDefaultDisplayName(profile.completeBaseName()); aspect()->environmentChanged(); diff --git a/src/plugins/projectexplorer/gcctoolchain.cpp b/src/plugins/projectexplorer/gcctoolchain.cpp index 9df083541f9..285f7078cb0 100644 --- a/src/plugins/projectexplorer/gcctoolchain.cpp +++ b/src/plugins/projectexplorer/gcctoolchain.cpp @@ -1022,7 +1022,7 @@ QList GccToolChainFactory::autoDetect(const QList &alr QList GccToolChainFactory::detectForImport(const ToolChainDescription &tcd) { - const QString fileName = tcd.compilerPath.toFileInfo().completeBaseName(); + const QString fileName = tcd.compilerPath.completeBaseName(); if ((tcd.language == Constants::C_LANGUAGE_ID && (fileName.startsWith("gcc") || fileName.endsWith("gcc") || fileName == "cc")) @@ -1806,7 +1806,7 @@ QList MingwToolChainFactory::autoDetect(const QList &a QList MingwToolChainFactory::detectForImport(const ToolChainDescription &tcd) { - const QString fileName = tcd.compilerPath.toFileInfo().completeBaseName(); + const QString fileName = tcd.compilerPath.completeBaseName(); if ((tcd.language == Constants::C_LANGUAGE_ID && (fileName.startsWith("gcc") || fileName.endsWith("gcc"))) || (tcd.language == Constants::CXX_LANGUAGE_ID && (fileName.startsWith("g++") diff --git a/src/plugins/projectexplorer/msvctoolchain.cpp b/src/plugins/projectexplorer/msvctoolchain.cpp index 59952aca8de..d85ddab2cda 100644 --- a/src/plugins/projectexplorer/msvctoolchain.cpp +++ b/src/plugins/projectexplorer/msvctoolchain.cpp @@ -1788,8 +1788,7 @@ QString MsvcToolChainFactory::vcVarsBatFor(const QString &basePath, return result; } -static QList findOrCreateToolChain(const QList &alreadyKnown, - const QString &name, +static QList findOrCreateToolChain(const QList &alreadyKnown, const QString &name, const Abi &abi, const QString &varsBat, const QString &varsBatArg) diff --git a/src/plugins/projectexplorer/projectmodels.cpp b/src/plugins/projectexplorer/projectmodels.cpp index 6a92973c0b0..b765c2571e3 100644 --- a/src/plugins/projectexplorer/projectmodels.cpp +++ b/src/plugins/projectexplorer/projectmodels.cpp @@ -224,7 +224,7 @@ bool FlatModel::setData(const QModelIndex &index, const QVariant &value, int rol if (reply == QMessageBox::Yes) { for (Node * const n : candidateNodes) { QString targetFilePath = orgFileInfo.absolutePath() + '/' - + newFilePath.toFileInfo().completeBaseName(); + + newFilePath.completeBaseName(); const QString suffix = n->filePath().toFileInfo().suffix(); if (!suffix.isEmpty()) targetFilePath.append('.').append(suffix); diff --git a/src/plugins/projectexplorer/projecttree.cpp b/src/plugins/projectexplorer/projecttree.cpp index 5af744b8aa7..4fc9b99f5d3 100644 --- a/src/plugins/projectexplorer/projecttree.cpp +++ b/src/plugins/projectexplorer/projecttree.cpp @@ -477,7 +477,7 @@ const QList ProjectTree::siblingsWithSameBaseName(const Node *fileNode) const auto filter = [&fi](const Node *n) { return n->asFileNode() && n->filePath().toFileInfo().dir() == fi.dir() - && n->filePath().toFileInfo().completeBaseName() == fi.completeBaseName() + && n->filePath().completeBaseName() == fi.completeBaseName() && n->filePath().toString() != fi.filePath(); }; return productNode->findNodes(filter); diff --git a/src/plugins/python/pythonproject.cpp b/src/plugins/python/pythonproject.cpp index 223812589cb..3d68050cd84 100644 --- a/src/plugins/python/pythonproject.cpp +++ b/src/plugins/python/pythonproject.cpp @@ -205,7 +205,7 @@ public: PythonProjectNode(const Utils::FilePath &path) : ProjectNode(path) { - setDisplayName(path.toFileInfo().completeBaseName()); + setDisplayName(path.completeBaseName()); setAddFileFilter("*.py"); } }; @@ -215,7 +215,7 @@ PythonProject::PythonProject(const FilePath &fileName) { setId(PythonProjectId); setProjectLanguages(Context(ProjectExplorer::Constants::PYTHON_LANGUAGE_ID)); - setDisplayName(fileName.toFileInfo().completeBaseName()); + setDisplayName(fileName.completeBaseName()); setNeedsBuildConfigurations(false); setBuildSystemCreator([](Target *t) { return new PythonBuildSystem(t); }); diff --git a/src/plugins/python/pythonutils.cpp b/src/plugins/python/pythonutils.cpp index 0e6a3d8b4b6..8744502c827 100644 --- a/src/plugins/python/pythonutils.cpp +++ b/src/plugins/python/pythonutils.cpp @@ -504,9 +504,8 @@ static QStringList replImportArgs(const FilePath &pythonFile, ReplType type) if (type == ReplType::Unmodified || !isPython) return {}; const auto import = type == ReplType::Import - ? QString("import %1").arg(pythonFile.toFileInfo().completeBaseName()) - : QString("from %1 import *") - .arg(pythonFile.toFileInfo().completeBaseName()); + ? QString("import %1").arg(pythonFile.completeBaseName()) + : QString("from %1 import *").arg(pythonFile.completeBaseName()); return {"-c", QString("%1; print('Running \"%1\"')").arg(import)}; } diff --git a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp index 4475cda94ff..7760b9dbb0d 100644 --- a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp +++ b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp @@ -64,7 +64,7 @@ static FilePath defaultBuildDirectory(const FilePath &projectFilePath, const Kit const QString &bcName, BuildConfiguration::BuildType buildType) { - const QString projectName = projectFilePath.toFileInfo().completeBaseName(); + const QString projectName = projectFilePath.completeBaseName(); ProjectMacroExpander expander(projectFilePath, projectName, k, bcName, buildType); FilePath projectDir = Project::projectDirectory(projectFilePath); QString buildPath = expander.expand(ProjectExplorerPlugin::buildDirectoryTemplate()); diff --git a/src/plugins/qbsprojectmanager/qbsnodetreebuilder.cpp b/src/plugins/qbsprojectmanager/qbsnodetreebuilder.cpp index 18a994d3844..3f2bc66d40e 100644 --- a/src/plugins/qbsprojectmanager/qbsnodetreebuilder.cpp +++ b/src/plugins/qbsprojectmanager/qbsnodetreebuilder.cpp @@ -213,7 +213,7 @@ QbsProjectNode *QbsNodeTreeBuilder::buildTree(const QString &projectName, if (root->displayName().isEmpty()) root->setDisplayName(projectName); if (root->displayName().isEmpty()) - root->setDisplayName(projectFile.toFileInfo().completeBaseName()); + root->setDisplayName(projectFile.completeBaseName()); auto buildSystemFiles = std::make_unique(projectDir); buildSystemFiles->setDisplayName(QCoreApplication::translate("QbsProjectNode", "Qbs files")); diff --git a/src/plugins/qbsprojectmanager/qbsproject.cpp b/src/plugins/qbsprojectmanager/qbsproject.cpp index 02fe1099770..df30c39331c 100644 --- a/src/plugins/qbsprojectmanager/qbsproject.cpp +++ b/src/plugins/qbsprojectmanager/qbsproject.cpp @@ -123,7 +123,7 @@ QbsProject::QbsProject(const FilePath &fileName) setId(Constants::PROJECT_ID); setProjectLanguages(Context(ProjectExplorer::Constants::CXX_LANGUAGE_ID)); setCanBuildProducts(); - setDisplayName(fileName.toFileInfo().completeBaseName()); + setDisplayName(fileName.completeBaseName()); } QbsProject::~QbsProject() diff --git a/src/plugins/qbsprojectmanager/qbsprojectimporter.cpp b/src/plugins/qbsprojectmanager/qbsprojectimporter.cpp index 16c44e8782a..5ac7ef47f38 100644 --- a/src/plugins/qbsprojectmanager/qbsprojectimporter.cpp +++ b/src/plugins/qbsprojectmanager/qbsprojectimporter.cpp @@ -88,7 +88,7 @@ QbsProjectImporter::QbsProjectImporter(const FilePath &path) : QtProjectImporter static FilePath buildDir(const FilePath &projectFilePath, const Kit *k) { - const QString projectName = projectFilePath.toFileInfo().completeBaseName(); + const QString projectName = projectFilePath.completeBaseName(); ProjectMacroExpander expander(projectFilePath, projectName, k, QString(), BuildConfiguration::Unknown); const FilePath projectDir = Project::projectDirectory(projectFilePath); @@ -222,7 +222,7 @@ const QList QbsProjectImporter::buildInfoList(void *directoryData) co { const auto * const bgData = static_cast(directoryData); BuildInfo info; - info.displayName = bgData->bgFilePath.toFileInfo().completeBaseName(); + info.displayName = bgData->bgFilePath.completeBaseName(); info.buildType = bgData->buildVariant == "debug" ? BuildConfiguration::Debug : BuildConfiguration::Release; info.buildDirectory = bgData->bgFilePath.parentDir().parentDir(); diff --git a/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp b/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp index 9129a7b8521..a4f9963a30e 100644 --- a/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp +++ b/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp @@ -105,7 +105,7 @@ FilePath QmakeBuildConfiguration::shadowBuildDirectory(const FilePath &proFilePa if (proFilePath.isEmpty()) return {}; - const QString projectName = proFilePath.toFileInfo().completeBaseName(); + const QString projectName = proFilePath.completeBaseName(); ProjectMacroExpander expander(proFilePath, projectName, k, suffix, buildType); FilePath projectDir = Project::projectDirectory(proFilePath); QString buildPath = expander.expand(ProjectExplorerPlugin::buildDirectoryTemplate()); diff --git a/src/plugins/qmakeprojectmanager/qmakenodetreebuilder.cpp b/src/plugins/qmakeprojectmanager/qmakenodetreebuilder.cpp index d454aad6257..f5fca961389 100644 --- a/src/plugins/qmakeprojectmanager/qmakenodetreebuilder.cpp +++ b/src/plugins/qmakeprojectmanager/qmakenodetreebuilder.cpp @@ -197,7 +197,7 @@ static void createTree(QmakeBuildSystem *buildSystem, auto topLevel = std::make_unique (file.first, vfolder->filePath(), contents); topLevel->setEnabled(file.second == FileOrigin::ExactParse); - const QString baseName = file.first.toFileInfo().completeBaseName(); + const QString baseName = file.first.completeBaseName(); topLevel->setIsGenerated(baseName.startsWith("qmake_") || baseName.endsWith("_qmlcache")); vfolder->addNode(std::move(topLevel)); diff --git a/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp b/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp index 8339ae6b75e..7921203956a 100644 --- a/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp +++ b/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp @@ -165,7 +165,7 @@ FilePath QmakePriFile::directoryPath() const QString QmakePriFile::displayName() const { - return filePath().toFileInfo().completeBaseName(); + return filePath().completeBaseName(); } QmakePriFile *QmakePriFile::parent() const @@ -2068,13 +2068,13 @@ FilePaths QmakeProFile::generatedFiles(const FilePath &buildDir, if (location.isEmpty()) return { }; location = location.pathAppended("ui_" - + sourceFile.toFileInfo().completeBaseName() + + sourceFile.completeBaseName() + singleVariableValue(Variable::HeaderExtension)); return { Utils::FilePath::fromString(QDir::cleanPath(location.toString())) }; } else if (sourceFileType == FileType::StateChart) { if (buildDir.isEmpty()) return { }; - const FilePath location = buildDir.pathAppended(sourceFile.toFileInfo().completeBaseName()); + const FilePath location = buildDir.pathAppended(sourceFile.completeBaseName()); return { location.stringAppended(singleVariableValue(Variable::HeaderExtension)), location.stringAppended(singleVariableValue(Variable::CppExtension)) diff --git a/src/plugins/qmakeprojectmanager/qmakeproject.cpp b/src/plugins/qmakeprojectmanager/qmakeproject.cpp index 387c0688a4b..9e1e7489398 100644 --- a/src/plugins/qmakeprojectmanager/qmakeproject.cpp +++ b/src/plugins/qmakeprojectmanager/qmakeproject.cpp @@ -174,7 +174,7 @@ QmakeProject::QmakeProject(const FilePath &fileName) : { setId(Constants::QMAKEPROJECT_ID); setProjectLanguages(Core::Context(ProjectExplorer::Constants::CXX_LANGUAGE_ID)); - setDisplayName(fileName.toFileInfo().completeBaseName()); + setDisplayName(fileName.completeBaseName()); setCanBuildProducts(); setHasMakeInstallEquivalent(true); } @@ -1162,7 +1162,7 @@ void QmakeBuildSystem::updateBuildSystemData() bti.targetFilePath = FilePath::fromString(executableFor(node->proFile())); bti.projectFilePath = node->filePath(); bti.workingDirectory = FilePath::fromString(workingDir); - bti.displayName = bti.projectFilePath.toFileInfo().completeBaseName(); + bti.displayName = bti.projectFilePath.completeBaseName(); const FilePath relativePathInProject = bti.projectFilePath.relativeChildPath(projectDirectory()); if (!relativePathInProject.isEmpty()) { diff --git a/src/plugins/qmlprojectmanager/qmlproject.cpp b/src/plugins/qmlprojectmanager/qmlproject.cpp index c89b88a450b..405880600e4 100644 --- a/src/plugins/qmlprojectmanager/qmlproject.cpp +++ b/src/plugins/qmlprojectmanager/qmlproject.cpp @@ -96,7 +96,7 @@ QmlProject::QmlProject(const Utils::FilePath &fileName) { setId(QmlProjectManager::Constants::QML_PROJECT_ID); setProjectLanguages(Context(ProjectExplorer::Constants::QMLJS_LANGUAGE_ID)); - setDisplayName(fileName.toFileInfo().completeBaseName()); + setDisplayName(fileName.completeBaseName()); setNeedsBuildConfigurations(false); setBuildSystemCreator([](Target *t) { return new QmlBuildSystem(t); }); diff --git a/src/plugins/qmlprojectmanager/qmlprojectnodes.cpp b/src/plugins/qmlprojectmanager/qmlprojectnodes.cpp index fe35539314a..b2265540836 100644 --- a/src/plugins/qmlprojectmanager/qmlprojectnodes.cpp +++ b/src/plugins/qmlprojectmanager/qmlprojectnodes.cpp @@ -38,7 +38,7 @@ namespace Internal { QmlProjectNode::QmlProjectNode(Project *project) : ProjectNode(project->projectDirectory()) { - setDisplayName(project->projectFilePath().toFileInfo().completeBaseName()); + setDisplayName(project->projectFilePath().completeBaseName()); setIcon(DirectoryIcon(":/projectexplorer/images/fileoverlay_qml.png")); } diff --git a/src/plugins/texteditor/codestylepool.cpp b/src/plugins/texteditor/codestylepool.cpp index e92592b348f..2a2fe260142 100644 --- a/src/plugins/texteditor/codestylepool.cpp +++ b/src/plugins/texteditor/codestylepool.cpp @@ -235,7 +235,7 @@ ICodeStylePreferences *CodeStylePool::loadCodeStyle(const Utils::FilePath &fileN reader.load(fileName); QVariantMap m = reader.restoreValues(); if (m.contains(QLatin1String(codeStyleDataKey))) { - const QByteArray id = fileName.toFileInfo().completeBaseName().toUtf8(); + const QByteArray id = fileName.completeBaseName().toUtf8(); const QString displayName = reader.restoreValue(QLatin1String(displayNameKey)).toString(); const QVariantMap map = reader.restoreValue(QLatin1String(codeStyleDataKey)).toMap(); if (d->m_factory) { diff --git a/src/plugins/texteditor/highlighter.cpp b/src/plugins/texteditor/highlighter.cpp index 2a940b3f73d..1c36b115bab 100644 --- a/src/plugins/texteditor/highlighter.cpp +++ b/src/plugins/texteditor/highlighter.cpp @@ -132,7 +132,7 @@ Highlighter::Definitions Highlighter::definitionsForDocument(const TextDocument // cmake configure_file input filenames without the .in extension if (filePath.endsWith(".in")) { definitions = definitionsForFileName( - Utils::FilePath::fromString(filePath.toFileInfo().completeBaseName())); + Utils::FilePath::fromString(filePath.completeBaseName())); } } if (definitions.isEmpty()) {