From f29bc8c7878101bb21d049e2fed496100c2c9aa9 Mon Sep 17 00:00:00 2001 From: hjk Date: Thu, 12 Aug 2021 09:19:55 +0200 Subject: [PATCH] ClangTools: Proliferate use of FilePath Change-Id: I3eb16546a729ab01c10e37572adac9aef83f5cd4 Reviewed-by: Christian Stenger --- .../clangmodelmanagersupport.cpp | 3 +- src/plugins/clangcodemodel/clangutils.cpp | 2 +- src/plugins/clangtools/clangtool.cpp | 4 +- .../clangtools/clangtoolruncontrol.cpp | 2 +- src/plugins/clangtools/clangtoolrunner.cpp | 6 +- src/plugins/clangtools/clangtoolrunner.h | 6 +- src/plugins/clangtools/clangtoolssettings.cpp | 21 ++++--- src/plugins/clangtools/clangtoolssettings.h | 12 ++-- src/plugins/clangtools/clangtoolsutils.cpp | 58 ++++++++----------- src/plugins/clangtools/clangtoolsutils.h | 21 +++---- .../clangtools/documentclangtoolrunner.cpp | 2 +- src/plugins/clangtools/executableinfo.cpp | 15 +++-- src/plugins/clangtools/executableinfo.h | 6 +- src/plugins/clangtools/runsettingswidget.cpp | 6 +- src/plugins/clangtools/settingswidget.cpp | 26 +++++---- src/plugins/clangtools/settingswidget.h | 6 +- src/plugins/coreplugin/icore.cpp | 26 ++++----- src/plugins/coreplugin/icore.h | 12 ++-- .../cpptools/compileroptionsbuilder.cpp | 4 +- src/plugins/cpptools/compileroptionsbuilder.h | 6 +- src/plugins/cpptools/headerpathfilter.cpp | 13 ++--- src/plugins/cpptools/headerpathfilter.h | 7 ++- src/plugins/cpptools/projectpart.h | 2 +- src/plugins/projectexplorer/gcctoolchain.cpp | 5 +- src/plugins/projectexplorer/msvctoolchain.cpp | 10 ++-- 25 files changed, 136 insertions(+), 145 deletions(-) diff --git a/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp b/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp index 730db89d73d..b19f72e55f4 100644 --- a/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp +++ b/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp @@ -141,8 +141,7 @@ ClangModelManagerSupport::ClangModelManagerSupport() claimNonProjectSources(fallbackClient); }); - CppTools::ClangdSettings::setDefaultClangdPath(Utils::FilePath::fromString( - Core::ICore::clangdExecutable(CLANG_BINDIR))); + CppTools::ClangdSettings::setDefaultClangdPath(Core::ICore::clangdExecutable(CLANG_BINDIR)); connect(&CppTools::ClangdSettings::instance(), &CppTools::ClangdSettings::changed, this, &ClangModelManagerSupport::onClangdSettingsChanged); CppTools::CppCodeModelSettings *settings = CppTools::codeModelSettings(); diff --git a/src/plugins/clangcodemodel/clangutils.cpp b/src/plugins/clangcodemodel/clangutils.cpp index 52a23a1b31c..57f3a522b8b 100644 --- a/src/plugins/clangcodemodel/clangutils.cpp +++ b/src/plugins/clangcodemodel/clangutils.cpp @@ -76,7 +76,7 @@ public: UseLanguageDefines::No, useBuildSystemWarnings, QString(CLANG_VERSION), - QString(CLANG_INCLUDE_DIR)) + FilePath(CLANG_INCLUDE_DIR)) { } diff --git a/src/plugins/clangtools/clangtool.cpp b/src/plugins/clangtools/clangtool.cpp index 5690c2767dc..19bdf811de5 100644 --- a/src/plugins/clangtools/clangtool.cpp +++ b/src/plugins/clangtools/clangtool.cpp @@ -896,12 +896,12 @@ static CheckResult canAnalyze() { const ClangDiagnosticConfig config = diagnosticConfig(runSettings().diagnosticConfigId()); - if (config.isClangTidyEnabled() && !isFileExecutable(clangTidyExecutable())) { + if (config.isClangTidyEnabled() && !clangTidyExecutable().isExecutableFile()) { return {CheckResult::InvalidTidyExecutable, ClangTool::tr("Set a valid Clang-Tidy executable.")}; } - if (config.isClazyEnabled() && !isFileExecutable(clazyStandaloneExecutable())) { + if (config.isClazyEnabled() && !clazyStandaloneExecutable().isExecutableFile()) { return {CheckResult::InvalidClazyExecutable, ClangTool::tr("Set a valid Clazy-Standalone executable.")}; } diff --git a/src/plugins/clangtools/clangtoolruncontrol.cpp b/src/plugins/clangtools/clangtoolruncontrol.cpp index 28ce949c821..0323a0d2249 100644 --- a/src/plugins/clangtools/clangtoolruncontrol.cpp +++ b/src/plugins/clangtools/clangtoolruncontrol.cpp @@ -125,7 +125,7 @@ AnalyzeUnit::AnalyzeUnit(const FileInfo &fileInfo, UseLanguageDefines::No, UseBuildSystemWarnings::No, clangVersion, - clangIncludeDir.toString()); + clangIncludeDir); file = fileInfo.file.toString(); arguments = extraClangToolsPrependOptions(); arguments.append(optionsBuilder.build(fileInfo.kind, CppTools::getPchUsage())); diff --git a/src/plugins/clangtools/clangtoolrunner.cpp b/src/plugins/clangtools/clangtoolrunner.cpp index 2809cac40d7..9a207a82d48 100644 --- a/src/plugins/clangtools/clangtoolrunner.cpp +++ b/src/plugins/clangtools/clangtoolrunner.cpp @@ -101,11 +101,11 @@ QStringList ClangToolRunner::mainToolArguments() const bool ClangToolRunner::supportsVFSOverlay() const { - static QMap vfsCapabilities; + static QMap vfsCapabilities; auto it = vfsCapabilities.find(m_executable); if (it == vfsCapabilities.end()) { QtcProcess p; - p.setCommand({FilePath::fromString(m_executable), {"--help"}}); + p.setCommand({m_executable, {"--help"}}); p.runBlocking(); it = vfsCapabilities.insert(m_executable, p.allOutput().contains("vfsoverlay")); } @@ -137,7 +137,7 @@ bool ClangToolRunner::run(const QString &fileToAnalyze, const QStringList &compi m_outputFilePath = createOutputFilePath(m_outputDirPath, fileToAnalyze); QTC_ASSERT(!m_outputFilePath.isEmpty(), return false); - m_commandLine = {FilePath::fromString(m_executable), m_argsCreator(compilerOptions)}; + m_commandLine = {m_executable, m_argsCreator(compilerOptions)}; qCDebug(LOG).noquote() << "Starting" << m_commandLine.toUserOutput(); m_process->setCommand(m_commandLine); diff --git a/src/plugins/clangtools/clangtoolrunner.h b/src/plugins/clangtools/clangtoolrunner.h index 3f05d9392e6..45ed11387f4 100644 --- a/src/plugins/clangtools/clangtoolrunner.h +++ b/src/plugins/clangtools/clangtoolrunner.h @@ -46,13 +46,13 @@ public: void init(const Utils::FilePath &outputDirPath, const Utils::Environment &environment); void setName(const QString &name) { m_name = name; } - void setExecutable(const QString &executable) { m_executable = executable; } + void setExecutable(const Utils::FilePath &executable) { m_executable = executable; } void setArgsCreator(const ArgsCreator &argsCreator) { m_argsCreator = argsCreator; } void setOutputFileFormat(const OutputFileFormat &format) { m_outputFileFormat = format; } void setVFSOverlay(const QString overlayFilePath) { m_overlayFilePath = overlayFilePath; } QString name() const { return m_name; } - QString executable() const { return m_executable; } + Utils::FilePath executable() const { return m_executable; } OutputFileFormat outputFileFormat() const { return m_outputFileFormat; } QString fileToAnalyze() const { return m_fileToAnalyze; } QString outputFilePath() const { return m_outputFilePath; } @@ -83,7 +83,7 @@ private: Utils::QtcProcess *m_process = nullptr; QString m_name; - QString m_executable; + Utils::FilePath m_executable; ArgsCreator m_argsCreator; OutputFileFormat m_outputFileFormat = OutputFileFormat::Yaml; diff --git a/src/plugins/clangtools/clangtoolssettings.cpp b/src/plugins/clangtools/clangtoolssettings.cpp index bab2cc5b507..3a5610bb9f5 100644 --- a/src/plugins/clangtools/clangtoolssettings.cpp +++ b/src/plugins/clangtools/clangtoolssettings.cpp @@ -46,6 +46,7 @@ static const char analyzeOpenFilesKey[] = "AnalyzeOpenFiles"; static const char oldDiagnosticConfigIdKey[] = "diagnosticConfigId"; using namespace CppTools; +using namespace Utils; namespace ClangTools { namespace Internal { @@ -151,8 +152,8 @@ void ClangToolsSettings::readSettings() QSettings *s = Core::ICore::settings(); s->beginGroup(Constants::SETTINGS_ID); - m_clangTidyExecutable = s->value(clangTidyExecutableKey).toString(); - m_clazyStandaloneExecutable = s->value(clazyStandaloneExecutableKey).toString(); + m_clangTidyExecutable = FilePath::fromVariant(s->value(clangTidyExecutableKey)); + m_clazyStandaloneExecutable = FilePath::fromVariant(s->value(clazyStandaloneExecutableKey)); m_diagnosticConfigs.append(diagnosticConfigsFromSettings(s)); QVariantMap map; @@ -184,8 +185,8 @@ void ClangToolsSettings::writeSettings() QSettings *s = Core::ICore::settings(); s->beginGroup(Constants::SETTINGS_ID); - s->setValue(clangTidyExecutableKey, m_clangTidyExecutable); - s->setValue(clazyStandaloneExecutableKey, m_clazyStandaloneExecutable); + s->setValue(clangTidyExecutableKey, m_clangTidyExecutable.toVariant()); + s->setValue(clazyStandaloneExecutableKey, m_clazyStandaloneExecutable.toVariant()); diagnosticConfigsToSettings(s, m_diagnosticConfigs); QVariantMap map; @@ -198,24 +199,22 @@ void ClangToolsSettings::writeSettings() emit changed(); } -void ClangToolsSettings::setClangTidyExecutable(const QString &path) +void ClangToolsSettings::setClangTidyExecutable(const FilePath &path) { m_clangTidyExecutable = path; m_clangTidyVersion = {}; } -void ClangTools::Internal::ClangToolsSettings::setClazyStandaloneExecutable(const QString &path) +void ClangToolsSettings::setClazyStandaloneExecutable(const FilePath &path) { m_clazyStandaloneExecutable = path; m_clazyVersion = {}; } -static QVersionNumber getVersionNumber(QVersionNumber &version, const QString &toolFilePath) +static QVersionNumber getVersionNumber(QVersionNumber &version, const FilePath &toolFilePath) { - if (version.isNull() && !toolFilePath.isEmpty()) { - version = QVersionNumber::fromString(queryVersion(Utils::FilePath::fromString(toolFilePath), - QueryFailMode::Silent)); - }; + if (version.isNull() && !toolFilePath.isEmpty()) + version = QVersionNumber::fromString(queryVersion(toolFilePath, QueryFailMode::Silent)); return version; } diff --git a/src/plugins/clangtools/clangtoolssettings.h b/src/plugins/clangtools/clangtoolssettings.h index 73dbc83bb26..25d379fa07b 100644 --- a/src/plugins/clangtools/clangtoolssettings.h +++ b/src/plugins/clangtools/clangtoolssettings.h @@ -77,11 +77,11 @@ public: static ClangToolsSettings *instance(); void writeSettings(); - QString clangTidyExecutable() const { return m_clangTidyExecutable; } - void setClangTidyExecutable(const QString &path); + Utils::FilePath clangTidyExecutable() const { return m_clangTidyExecutable; } + void setClangTidyExecutable(const Utils::FilePath &path); - QString clazyStandaloneExecutable() const { return m_clazyStandaloneExecutable; } - void setClazyStandaloneExecutable(const QString &path); + Utils::FilePath clazyStandaloneExecutable() const { return m_clazyStandaloneExecutable; } + void setClazyStandaloneExecutable(const Utils::FilePath &path); CppTools::ClangDiagnosticConfigs diagnosticConfigs() const { return m_diagnosticConfigs; } void setDiagnosticConfigs(const CppTools::ClangDiagnosticConfigs &configs) @@ -101,8 +101,8 @@ private: void readSettings(); // Executables - QString m_clangTidyExecutable; - QString m_clazyStandaloneExecutable; + Utils::FilePath m_clangTidyExecutable; + Utils::FilePath m_clazyStandaloneExecutable; // Diagnostic Configs CppTools::ClangDiagnosticConfigs m_diagnosticConfigs; diff --git a/src/plugins/clangtools/clangtoolsutils.cpp b/src/plugins/clangtools/clangtoolsutils.cpp index 3369ccd0cf8..0137698f91e 100644 --- a/src/plugins/clangtools/clangtoolsutils.cpp +++ b/src/plugins/clangtools/clangtoolsutils.cpp @@ -37,6 +37,7 @@ #include #include +#include #include #include @@ -45,6 +46,7 @@ #include using namespace CppTools; +using namespace Utils; namespace ClangTools { namespace Internal { @@ -170,46 +172,36 @@ void showHintAboutBuildBeforeAnalysis() "ClangToolsDisablingBuildBeforeAnalysisHint"); } -bool isFileExecutable(const QString &filePath) +FilePath shippedClangTidyExecutable() { - if (filePath.isEmpty()) - return false; - - const QFileInfo fileInfo(filePath); - return fileInfo.exists() && fileInfo.isFile() && fileInfo.isExecutable(); -} - -QString shippedClangTidyExecutable() -{ - const QString shippedExecutable = Core::ICore::clangTidyExecutable(CLANG_BINDIR); - if (isFileExecutable(shippedExecutable)) + const FilePath shippedExecutable = Core::ICore::clangTidyExecutable(CLANG_BINDIR); + if (shippedExecutable.isExecutableFile()) return shippedExecutable; return {}; } -QString shippedClazyStandaloneExecutable() +FilePath shippedClazyStandaloneExecutable() { - const QString shippedExecutable = Core::ICore::clazyStandaloneExecutable(CLANG_BINDIR); - if (isFileExecutable(shippedExecutable)) + const FilePath shippedExecutable = Core::ICore::clazyStandaloneExecutable(CLANG_BINDIR); + if (shippedExecutable.isExecutableFile()) return shippedExecutable; return {}; } -QString fullPath(const QString &executable) +FilePath fullPath(const FilePath &executable) { const QString hostExeSuffix = QLatin1String(QTC_HOST_EXE_SUFFIX); const Qt::CaseSensitivity caseSensitivity = Utils::HostOsInfo::fileNameCaseSensitivity(); - QString candidate = executable; - const bool hasSuffix = candidate.endsWith(hostExeSuffix, caseSensitivity); + FilePath candidate = executable; + const bool hasSuffix = candidate.toString().endsWith(hostExeSuffix, caseSensitivity); - const QFileInfo fileInfo = QFileInfo(candidate); - if (fileInfo.isAbsolute()) { + if (candidate.isAbsolutePath()) { if (!hasSuffix) - candidate.append(hostExeSuffix); + candidate = candidate.withExecutableSuffix(); } else { - const Utils::Environment environment = Utils::Environment::systemEnvironment(); - const QString expandedPath = environment.searchInPath(candidate).toString(); + const Environment environment = Environment::systemEnvironment(); + const FilePath expandedPath = environment.searchInPath(candidate.toString()); if (!expandedPath.isEmpty()) candidate = expandedPath; } @@ -217,18 +209,18 @@ QString fullPath(const QString &executable) return candidate; } -static QString findValidExecutable(const QStringList &candidates) +static FilePath findValidExecutable(const FilePaths &candidates) { - for (const QString &candidate : candidates) { - const QString expandedPath = fullPath(candidate); - if (isFileExecutable(expandedPath)) + for (const FilePath &candidate : candidates) { + const FilePath expandedPath = fullPath(candidate); + if (expandedPath.isExecutableFile()) return expandedPath; } return {}; } -QString clangTidyFallbackExecutable() +FilePath clangTidyFallbackExecutable() { return findValidExecutable({ shippedClangTidyExecutable(), @@ -236,15 +228,15 @@ QString clangTidyFallbackExecutable() }); } -QString clangTidyExecutable() +FilePath clangTidyExecutable() { - const QString fromSettings = ClangToolsSettings::instance()->clangTidyExecutable(); + const FilePath fromSettings = ClangToolsSettings::instance()->clangTidyExecutable(); if (!fromSettings.isEmpty()) return fullPath(fromSettings); return clangTidyFallbackExecutable(); } -QString clazyStandaloneFallbackExecutable() +FilePath clazyStandaloneFallbackExecutable() { return findValidExecutable({ shippedClazyStandaloneExecutable(), @@ -252,9 +244,9 @@ QString clazyStandaloneFallbackExecutable() }); } -QString clazyStandaloneExecutable() +FilePath clazyStandaloneExecutable() { - const QString fromSettings = ClangToolsSettings::instance()->clazyStandaloneExecutable(); + const FilePath fromSettings = ClangToolsSettings::instance()->clazyStandaloneExecutable(); if (!fromSettings.isEmpty()) return fullPath(fromSettings); return clazyStandaloneFallbackExecutable(); diff --git a/src/plugins/clangtools/clangtoolsutils.h b/src/plugins/clangtools/clangtoolsutils.h index 2ea27561393..8c994be8873 100644 --- a/src/plugins/clangtools/clangtoolsutils.h +++ b/src/plugins/clangtools/clangtoolsutils.h @@ -32,12 +32,9 @@ #include -QT_BEGIN_NAMESPACE -class QString; -QT_END_NAMESPACE - namespace CppTools { class ClangDiagnosticConfigsModel; } namespace Debugger { class DiagnosticLocation; } +namespace Utils { class FilePath; } namespace ClangTools { namespace Internal { @@ -68,17 +65,15 @@ QString createFullLocationString(const Debugger::DiagnosticLocation &location); QString hintAboutBuildBeforeAnalysis(); void showHintAboutBuildBeforeAnalysis(); -bool isFileExecutable(const QString &filePath); +Utils::FilePath shippedClazyStandaloneExecutable(); +Utils::FilePath clazyStandaloneExecutable(); +Utils::FilePath clazyStandaloneFallbackExecutable(); -QString shippedClazyStandaloneExecutable(); -QString clazyStandaloneExecutable(); -QString clazyStandaloneFallbackExecutable(); +Utils::FilePath shippedClangTidyExecutable(); +Utils::FilePath clangTidyExecutable(); +Utils::FilePath clangTidyFallbackExecutable(); -QString shippedClangTidyExecutable(); -QString clangTidyExecutable(); -QString clangTidyFallbackExecutable(); - -QString fullPath(const QString &executable); +Utils::FilePath fullPath(const Utils::FilePath &executable); QString documentationUrl(const QString &checkName); diff --git a/src/plugins/clangtools/documentclangtoolrunner.cpp b/src/plugins/clangtools/documentclangtoolrunner.cpp index 2fc0ae258c6..96373fedd83 100644 --- a/src/plugins/clangtools/documentclangtoolrunner.cpp +++ b/src/plugins/clangtools/documentclangtoolrunner.cpp @@ -234,7 +234,7 @@ void DocumentClangToolRunner::run() QPair getClangIncludeDirAndVersion(ClangToolRunner *runner) { static QMap> cache; - const Utils::FilePath tool = Utils::FilePath::fromString(runner->executable()); + const Utils::FilePath tool = runner->executable(); auto it = cache.find(tool); if (it == cache.end()) it = cache.insert(tool, getClangIncludeDirAndVersion(tool)); diff --git a/src/plugins/clangtools/executableinfo.cpp b/src/plugins/clangtools/executableinfo.cpp index 10e7f1e6bbc..fb8f39b2c31 100644 --- a/src/plugins/clangtools/executableinfo.cpp +++ b/src/plugins/clangtools/executableinfo.cpp @@ -158,17 +158,16 @@ static ClazyChecks querySupportedClazyChecks(const FilePath &executablePath) return infos; } -ClangTidyInfo::ClangTidyInfo(const QString &executablePath) - : defaultChecks(queryClangTidyChecks(FilePath::fromString(executablePath), {})) - , supportedChecks(queryClangTidyChecks(FilePath::fromString(executablePath), "-checks=*")) +ClangTidyInfo::ClangTidyInfo(const FilePath &executablePath) + : defaultChecks(queryClangTidyChecks(executablePath, {})) + , supportedChecks(queryClangTidyChecks(executablePath, "-checks=*")) {} -ClazyStandaloneInfo::ClazyStandaloneInfo(const QString &executablePath) - : defaultChecks(queryClangTidyChecks(FilePath::fromString(executablePath), {})) // Yup, behaves as clang-tidy. - , supportedChecks(querySupportedClazyChecks(FilePath::fromString(executablePath))) +ClazyStandaloneInfo::ClazyStandaloneInfo(const FilePath &executablePath) + : defaultChecks(queryClangTidyChecks(executablePath, {})) // Yup, behaves as clang-tidy. + , supportedChecks(querySupportedClazyChecks(executablePath)) { - QString output = runExecutable(CommandLine(FilePath::fromString(executablePath), {"--version"}), - QueryFailMode::Silent); + QString output = runExecutable({executablePath, {"--version"}}, QueryFailMode::Silent); QTextStream stream(&output); while (!stream.atEnd()) { // It's just "clazy version " right now, but let's be prepared for someone adding a colon diff --git a/src/plugins/clangtools/executableinfo.h b/src/plugins/clangtools/executableinfo.h index 55fd6d1f0e6..70d04eb910b 100644 --- a/src/plugins/clangtools/executableinfo.h +++ b/src/plugins/clangtools/executableinfo.h @@ -25,7 +25,7 @@ #pragma once -#include +#include #include #include @@ -43,7 +43,7 @@ QString queryVersion(const Utils::FilePath &clangToolPath, QueryFailMode failMod class ClangTidyInfo { public: - ClangTidyInfo(const QString &executablePath); + ClangTidyInfo(const Utils::FilePath &executablePath); QStringList defaultChecks; QStringList supportedChecks; }; @@ -60,7 +60,7 @@ using ClazyChecks = QVector; class ClazyStandaloneInfo { public: - ClazyStandaloneInfo(const QString &executablePath); + ClazyStandaloneInfo(const Utils::FilePath &executablePath); QVersionNumber version; QStringList defaultChecks; diff --git a/src/plugins/clangtools/runsettingswidget.cpp b/src/plugins/clangtools/runsettingswidget.cpp index 64fd25836e1..69cfcdc9679 100644 --- a/src/plugins/clangtools/runsettingswidget.cpp +++ b/src/plugins/clangtools/runsettingswidget.cpp @@ -36,6 +36,8 @@ #include +using namespace Utils; + namespace ClangTools { namespace Internal { @@ -60,8 +62,8 @@ static CppTools::ClangDiagnosticConfigsWidget *createEditWidget( const CppTools::ClangDiagnosticConfigs &configs, const Utils::Id &configToSelect) { // Determine executable paths - QString clangTidyPath; - QString clazyStandalonePath; + FilePath clangTidyPath; + FilePath clazyStandalonePath; if (auto settingsWidget = SettingsWidget::instance()) { // Global settings case; executables might not yet applied to settings clangTidyPath = settingsWidget->clangTidyPath(); diff --git a/src/plugins/clangtools/settingswidget.cpp b/src/plugins/clangtools/settingswidget.cpp index f4511c72e70..e4a97b789e4 100644 --- a/src/plugins/clangtools/settingswidget.cpp +++ b/src/plugins/clangtools/settingswidget.cpp @@ -37,20 +37,22 @@ #include +using namespace Utils; + namespace ClangTools { namespace Internal { static SettingsWidget *m_instance = nullptr; -static void setupPathChooser(Utils::PathChooser *const chooser, +static void setupPathChooser(PathChooser *const chooser, const QString &promptDiaglogTitle, const QString &placeHolderText, - const QString &pathFromSettings, + const FilePath &pathFromSettings, const QString &historyCompleterId) { chooser->setPromptDialogTitle(promptDiaglogTitle); chooser->setDefaultValue(placeHolderText); - chooser->setPath(pathFromSettings); + chooser->setFilePath(pathFromSettings); chooser->setExpectedKind(Utils::PathChooser::ExistingCommand); chooser->setHistoryCompleter(historyCompleterId); } @@ -71,8 +73,8 @@ SettingsWidget::SettingsWidget() // Group box "Executables" // - QString placeHolderText = shippedClangTidyExecutable(); - QString path = m_settings->clangTidyExecutable(); + QString placeHolderText = shippedClangTidyExecutable().toUserOutput(); + FilePath path = m_settings->clangTidyExecutable(); if (path.isEmpty() && placeHolderText.isEmpty()) path = Constants::CLANG_TIDY_EXECUTABLE_NAME; setupPathChooser(m_ui->clangTidyPathChooser, @@ -81,7 +83,7 @@ SettingsWidget::SettingsWidget() path, "ClangTools.ClangTidyExecutable.History"); - placeHolderText = shippedClazyStandaloneExecutable(); + placeHolderText = shippedClazyStandaloneExecutable().toUserOutput(); path = m_settings->clazyStandaloneExecutable(); if (path.isEmpty() && placeHolderText.isEmpty()) path = Constants::CLAZY_STANDALONE_EXECUTABLE_NAME; @@ -101,8 +103,8 @@ SettingsWidget::SettingsWidget() void SettingsWidget::apply() { // Executables - m_settings->setClangTidyExecutable(m_ui->clangTidyPathChooser->rawPath()); - m_settings->setClazyStandaloneExecutable(m_ui->clazyStandalonePathChooser->rawPath()); + m_settings->setClangTidyExecutable(clangTidyPath()); + m_settings->setClazyStandaloneExecutable(clazyStandalonePath()); // Run options m_settings->setRunSettings(m_ui->runSettingsWidget->toSettings()); @@ -120,14 +122,14 @@ SettingsWidget::~SettingsWidget() m_instance = nullptr; } -QString SettingsWidget::clangTidyPath() const +FilePath SettingsWidget::clangTidyPath() const { - return m_ui->clangTidyPathChooser->rawPath(); + return m_ui->clangTidyPathChooser->rawFilePath(); } -QString SettingsWidget::clazyStandalonePath() const +FilePath SettingsWidget::clazyStandalonePath() const { - return m_ui->clazyStandalonePathChooser->rawPath(); + return m_ui->clazyStandalonePathChooser->rawFilePath(); } // ClangToolsOptionsPage diff --git a/src/plugins/clangtools/settingswidget.h b/src/plugins/clangtools/settingswidget.h index 00ef916e7af..263a362894b 100644 --- a/src/plugins/clangtools/settingswidget.h +++ b/src/plugins/clangtools/settingswidget.h @@ -31,6 +31,8 @@ #include +namespace Utils { class FilePath; } + namespace ClangTools { namespace Internal { @@ -46,8 +48,8 @@ public: SettingsWidget(); ~SettingsWidget() override; - QString clangTidyPath() const; - QString clazyStandalonePath() const; + Utils::FilePath clangTidyPath() const; + Utils::FilePath clazyStandalonePath() const; private: void apply() final; diff --git a/src/plugins/coreplugin/icore.cpp b/src/plugins/coreplugin/icore.cpp index 103249e5d13..b8c19111267 100644 --- a/src/plugins/coreplugin/icore.cpp +++ b/src/plugins/coreplugin/icore.cpp @@ -522,31 +522,31 @@ static QString clangIncludePath(const QString &clangVersion) /*! \internal */ -QString ICore::clangIncludeDirectory(const QString &clangVersion, - const QString &clangFallbackIncludeDir) +FilePath ICore::clangIncludeDirectory(const QString &clangVersion, + const FilePath &clangFallbackIncludeDir) { FilePath dir = libexecPath("clang" + clangIncludePath(clangVersion)); if (!dir.exists() || !dir.pathAppended("stdint.h").exists()) - dir = FilePath::fromString(clangFallbackIncludeDir); - return dir.canonicalPath().toUserOutput(); + dir = clangFallbackIncludeDir; + return dir.canonicalPath(); } /*! \internal */ -static QString clangBinary(const QString &binaryBaseName, const QString &clangBinDirectory) +static FilePath clangBinary(const QString &binaryBaseName, const FilePath &clangBinDirectory) { - const QString hostExeSuffix(QTC_HOST_EXE_SUFFIX); - FilePath executable = ICore::libexecPath("clang/bin") / binaryBaseName + hostExeSuffix; + FilePath executable = + ICore::libexecPath("clang/bin").pathAppended(binaryBaseName).withExecutableSuffix(); if (!executable.exists()) - executable = FilePath::fromString(clangBinDirectory) / binaryBaseName + hostExeSuffix; - return executable.canonicalPath().toUserOutput(); + executable = clangBinDirectory.pathAppended(binaryBaseName).withExecutableSuffix(); + return executable.canonicalPath(); } /*! \internal */ -QString ICore::clangExecutable(const QString &clangBinDirectory) +FilePath ICore::clangExecutable(const FilePath &clangBinDirectory) { return clangBinary("clang", clangBinDirectory); } @@ -554,7 +554,7 @@ QString ICore::clangExecutable(const QString &clangBinDirectory) /*! \internal */ -QString ICore::clangdExecutable(const QString &clangBinDirectory) +FilePath ICore::clangdExecutable(const FilePath &clangBinDirectory) { return clangBinary("clangd", clangBinDirectory); } @@ -562,7 +562,7 @@ QString ICore::clangdExecutable(const QString &clangBinDirectory) /*! \internal */ -QString ICore::clangTidyExecutable(const QString &clangBinDirectory) +FilePath ICore::clangTidyExecutable(const FilePath &clangBinDirectory) { return clangBinary("clang-tidy", clangBinDirectory); } @@ -570,7 +570,7 @@ QString ICore::clangTidyExecutable(const QString &clangBinDirectory) /*! \internal */ -QString ICore::clazyStandaloneExecutable(const QString &clangBinDirectory) +FilePath ICore::clazyStandaloneExecutable(const FilePath &clangBinDirectory) { return clangBinary("clazy-standalone", clangBinDirectory); } diff --git a/src/plugins/coreplugin/icore.h b/src/plugins/coreplugin/icore.h index 02e833a934a..321b030caff 100644 --- a/src/plugins/coreplugin/icore.h +++ b/src/plugins/coreplugin/icore.h @@ -164,12 +164,12 @@ public: static void setupScreenShooter(const QString &name, QWidget *w, const QRect &rc = QRect()); static QString pluginPath(); static QString userPluginPath(); - static QString clangExecutable(const QString &clangBinDirectory); - static QString clangdExecutable(const QString &clangBinDirectory); - static QString clangTidyExecutable(const QString &clangBinDirectory); - static QString clazyStandaloneExecutable(const QString &clangBinDirectory); - static QString clangIncludeDirectory(const QString &clangVersion, - const QString &clangFallbackIncludeDir); + static Utils::FilePath clangExecutable(const Utils::FilePath &clangBinDirectory); + static Utils::FilePath clangdExecutable(const Utils::FilePath &clangBinDirectory); + static Utils::FilePath clangTidyExecutable(const Utils::FilePath &clangBinDirectory); + static Utils::FilePath clazyStandaloneExecutable(const Utils::FilePath &clangBinDirectory); + static Utils::FilePath clangIncludeDirectory(const QString &clangVersion, + const Utils::FilePath &clangFallbackIncludeDir); static QString buildCompatibilityString(); static QStatusBar *statusBar(); diff --git a/src/plugins/cpptools/compileroptionsbuilder.cpp b/src/plugins/cpptools/compileroptionsbuilder.cpp index 0536ba2ff30..0343f90e805 100644 --- a/src/plugins/cpptools/compileroptionsbuilder.cpp +++ b/src/plugins/cpptools/compileroptionsbuilder.cpp @@ -45,6 +45,8 @@ #include #include +using namespace Utils; + namespace CppTools { static const char defineOption[] = "-D"; @@ -104,7 +106,7 @@ CompilerOptionsBuilder::CompilerOptionsBuilder(const ProjectPart &projectPart, UseLanguageDefines useLanguageDefines, UseBuildSystemWarnings useBuildSystemWarnings, const QString &clangVersion, - const QString &clangIncludeDirectory) + const FilePath &clangIncludeDirectory) : m_projectPart(projectPart) , m_useSystemHeader(useSystemHeader) , m_useTweakedHeaderPaths(useTweakedHeaderPaths) diff --git a/src/plugins/cpptools/compileroptionsbuilder.h b/src/plugins/cpptools/compileroptionsbuilder.h index c4d8589f178..69e24700969 100644 --- a/src/plugins/cpptools/compileroptionsbuilder.h +++ b/src/plugins/cpptools/compileroptionsbuilder.h @@ -50,8 +50,8 @@ public: UseTweakedHeaderPaths useTweakedHeaderPaths = UseTweakedHeaderPaths::No, UseLanguageDefines useLanguageDefines = UseLanguageDefines::No, UseBuildSystemWarnings useBuildSystemWarnings = UseBuildSystemWarnings::No, - const QString &clangVersion = QString(), - const QString &clangIncludeDirectory = QString()); + const QString &clangVersion = {}, + const Utils::FilePath &clangIncludeDirectory = {}); QStringList build(ProjectFile::Kind fileKind, UsePrecompiledHeaders usePrecompiledHeaders); QStringList options() const { return m_options; } @@ -113,7 +113,7 @@ private: const UseBuildSystemWarnings m_useBuildSystemWarnings; const QString m_clangVersion; - const QString m_clangIncludeDirectory; + const Utils::FilePath m_clangIncludeDirectory; struct { QStringList flags; diff --git a/src/plugins/cpptools/headerpathfilter.cpp b/src/plugins/cpptools/headerpathfilter.cpp index 2e010ead5a2..73913ed7b25 100644 --- a/src/plugins/cpptools/headerpathfilter.cpp +++ b/src/plugins/cpptools/headerpathfilter.cpp @@ -36,11 +36,10 @@ #include -namespace CppTools { +using namespace ProjectExplorer; +using namespace Utils; -using ProjectExplorer::HeaderPath; -using ProjectExplorer::HeaderPaths; -using ProjectExplorer::HeaderPathType; +namespace CppTools { void HeaderPathFilter::process() { @@ -104,7 +103,7 @@ void HeaderPathFilter::filterHeaderPath(const ProjectExplorer::HeaderPath &heade namespace { -QString clangIncludeDirectory(const QString &clangVersion, const QString &clangFallbackIncludeDir) +FilePath clangIncludeDirectory(const QString &clangVersion, const FilePath &clangFallbackIncludeDir) { #ifndef UNIT_TESTS return Core::ICore::clangIncludeDirectory(clangVersion, clangFallbackIncludeDir); @@ -158,9 +157,9 @@ void HeaderPathFilter::tweakHeaderPaths() auto split = resourceIterator(builtInHeaderPaths); if (!clangVersion.isEmpty()) { - const QString clangIncludePath + const FilePath clangIncludePath = clangIncludeDirectory(clangVersion, clangFallbackIncludeDirectory); - builtInHeaderPaths.insert(split, HeaderPath{clangIncludePath, HeaderPathType::BuiltIn}); + builtInHeaderPaths.insert(split, HeaderPath{clangIncludePath.toString(), HeaderPathType::BuiltIn}); } } diff --git a/src/plugins/cpptools/headerpathfilter.h b/src/plugins/cpptools/headerpathfilter.h index 4482c230ae4..49fefd721c5 100644 --- a/src/plugins/cpptools/headerpathfilter.h +++ b/src/plugins/cpptools/headerpathfilter.h @@ -28,14 +28,17 @@ #include "compileroptionsbuilder.h" #include "projectpart.h" +#include + namespace CppTools { + class CPPTOOLS_EXPORT HeaderPathFilter { public: HeaderPathFilter(const ProjectPart &projectPart, UseTweakedHeaderPaths useTweakedHeaderPaths = UseTweakedHeaderPaths::Yes, const QString &clangVersion = {}, - const QString &clangIncludeDirectory = {}, + const Utils::FilePath &clangIncludeDirectory = {}, const QString &projectDirectory = {}, const QString &buildDirectory = {}) : projectPart{projectPart} @@ -67,7 +70,7 @@ public: ProjectExplorer::HeaderPaths userHeaderPaths; const ProjectPart &projectPart; const QString clangVersion; - const QString clangFallbackIncludeDirectory; + const Utils::FilePath clangFallbackIncludeDirectory; const QString projectDirectory; const QString buildDirectory; const UseTweakedHeaderPaths useTweakedHeaderPaths; diff --git a/src/plugins/cpptools/projectpart.h b/src/plugins/cpptools/projectpart.h index b7a86f15cbb..4f1cee28aac 100644 --- a/src/plugins/cpptools/projectpart.h +++ b/src/plugins/cpptools/projectpart.h @@ -37,7 +37,7 @@ #include #include -#include +#include #include #include diff --git a/src/plugins/projectexplorer/gcctoolchain.cpp b/src/plugins/projectexplorer/gcctoolchain.cpp index e2955d40509..b539afaa2eb 100644 --- a/src/plugins/projectexplorer/gcctoolchain.cpp +++ b/src/plugins/projectexplorer/gcctoolchain.cpp @@ -1640,10 +1640,9 @@ QList ClangToolChainFactory::autoDetect(const QList &a Constants::CLANG_TOOLCHAIN_TYPEID, alreadyKnown, device)); known.append(tcs); - const FilePath compilerPath = FilePath::fromString(Core::ICore::clangExecutable(CLANG_BINDIR)); + const FilePath compilerPath = Core::ICore::clangExecutable(CLANG_BINDIR); if (!compilerPath.isEmpty()) { - const FilePath clang = compilerPath.parentDir().pathAppended( - HostOsInfo::withExecutableSuffix("clang")); + const FilePath clang = compilerPath.parentDir().pathAppended("clang").withExecutableSuffix(); tcs.append(autoDetectToolchains(clang.toString(), DetectVariants::No, Constants::C_LANGUAGE_ID, Constants::CLANG_TOOLCHAIN_TYPEID, tcs, device)); diff --git a/src/plugins/projectexplorer/msvctoolchain.cpp b/src/plugins/projectexplorer/msvctoolchain.cpp index 37619e6a3d4..5401f51f13f 100644 --- a/src/plugins/projectexplorer/msvctoolchain.cpp +++ b/src/plugins/projectexplorer/msvctoolchain.cpp @@ -1985,13 +1985,11 @@ QList ClangClToolChainFactory::autoDetect(const QList QList results; QList known = alreadyKnown; - QString qtCreatorsClang = Core::ICore::clangExecutable(CLANG_BINDIR); + FilePath qtCreatorsClang = Core::ICore::clangExecutable(CLANG_BINDIR); if (!qtCreatorsClang.isEmpty()) { - qtCreatorsClang = Utils::FilePath::fromString(qtCreatorsClang) - .parentDir() - .pathAppended("clang-cl.exe") - .toString(); - results.append(detectClangClToolChainInPath(qtCreatorsClang, alreadyKnown, "", true)); + qtCreatorsClang = qtCreatorsClang.parentDir().pathAppended("clang-cl.exe"); + results.append(detectClangClToolChainInPath(qtCreatorsClang.toString(), + alreadyKnown, "", true)); known.append(results); }