ProjectExplorer: Remove ClangClToolChain::m_clangPath

Use the ToolChain::compilerCommand() instead, which now does not
need to be virtual anymore.

Change-Id: I7cf7a623f86b7faacadae424dcbde8b9dbe8d3a9
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
hjk
2020-11-13 10:40:15 +01:00
parent c60c642fe5
commit 7a2e49435c
3 changed files with 10 additions and 57 deletions

View File

@@ -1456,9 +1456,9 @@ void ClangClToolChainConfigWidget::setFromClangClToolChain()
const auto *clangClToolChain = static_cast<const ClangClToolChain *>(toolChain()); const auto *clangClToolChain = static_cast<const ClangClToolChain *>(toolChain());
if (clangClToolChain->isAutoDetected()) if (clangClToolChain->isAutoDetected())
m_llvmDirLabel->setText(QDir::toNativeSeparators(clangClToolChain->clangPath())); m_llvmDirLabel->setText(clangClToolChain->compilerCommand().toUserOutput());
else else
m_compilerCommand->setFilePath(Utils::FilePath::fromString(clangClToolChain->clangPath())); m_compilerCommand->setFilePath(clangClToolChain->compilerCommand());
} }
static const MsvcToolChain *findMsvcToolChain(unsigned char wordWidth, Abi::OSFlavor flavor) static const MsvcToolChain *findMsvcToolChain(unsigned char wordWidth, Abi::OSFlavor flavor)
@@ -1556,7 +1556,7 @@ static QList<ToolChain *> detectClangClToolChainInPath(const QString &clangClPat
res << tc; res << tc;
} else { } else {
auto cltc = new ClangClToolChain; auto cltc = new ClangClToolChain;
cltc->setClangPath(clangClPath); cltc->setCompilerCommand(FilePath::fromString(clangClPath));
cltc->setDisplayName(name); cltc->setDisplayName(name);
cltc->setDetection(ToolChain::AutoDetection); cltc->setDetection(ToolChain::AutoDetection);
cltc->setLanguage(language); cltc->setLanguage(language);
@@ -1574,18 +1574,18 @@ static QString compilerFromPath(const QString &path)
void ClangClToolChainConfigWidget::applyImpl() void ClangClToolChainConfigWidget::applyImpl()
{ {
Utils::FilePath clangClPath = m_compilerCommand->filePath(); FilePath compilerCommand = m_compilerCommand->filePath();
auto clangClToolChain = static_cast<ClangClToolChain *>(toolChain()); auto clangClToolChain = static_cast<ClangClToolChain *>(toolChain());
clangClToolChain->setClangPath(clangClPath.toString()); clangClToolChain->setCompilerCommand(compilerCommand);
if (clangClPath.fileName() != "clang-cl.exe") { if (compilerCommand.fileName() != "clang-cl.exe") {
clangClToolChain->resetVarsBat(); clangClToolChain->resetVarsBat();
setFromClangClToolChain(); setFromClangClToolChain();
return; return;
} }
const QString displayedVarsBat = m_varsBatDisplayCombo->currentText(); const QString displayedVarsBat = m_varsBatDisplayCombo->currentText();
QList<ToolChain *> results = detectClangClToolChainInPath(clangClPath.toString(), QList<ToolChain *> results = detectClangClToolChainInPath(compilerCommand.toString(),
{}, {},
displayedVarsBat); displayedVarsBat);
@@ -1625,6 +1625,7 @@ ClangClToolChain::ClangClToolChain()
{ {
setDisplayName("clang-cl"); setDisplayName("clang-cl");
setTypeDisplayName(QCoreApplication::translate("ProjectExplorer::ClangToolChainFactory", "Clang")); setTypeDisplayName(QCoreApplication::translate("ProjectExplorer::ClangToolChainFactory", "Clang"));
setCompilerCommandKey("ProjectExplorer.ClangClToolChain.LlvmDir");
} }
bool ClangClToolChain::isValid() const bool ClangClToolChain::isValid() const
@@ -1636,15 +1637,10 @@ bool ClangClToolChain::isValid() const
void ClangClToolChain::addToEnvironment(Utils::Environment &env) const void ClangClToolChain::addToEnvironment(Utils::Environment &env) const
{ {
MsvcToolChain::addToEnvironment(env); MsvcToolChain::addToEnvironment(env);
QDir path = QFileInfo(m_clangPath).absoluteDir(); // bin folder QDir path = compilerCommand().toFileInfo().absoluteDir(); // bin folder
env.prependOrSetPath(path.canonicalPath()); env.prependOrSetPath(path.canonicalPath());
} }
Utils::FilePath ClangClToolChain::compilerCommand() const
{
return Utils::FilePath::fromString(m_clangPath);
}
QStringList ClangClToolChain::suggestedMkspecList() const QStringList ClangClToolChain::suggestedMkspecList() const
{ {
const QString mkspec = "win32-clang-" + Abi::toString(targetAbi().osFlavor()); const QString mkspec = "win32-clang-" + Abi::toString(targetAbi().osFlavor());
@@ -1656,44 +1652,11 @@ QList<OutputLineParser *> ClangClToolChain::createOutputParsers() const
return {new ClangClParser}; return {new ClangClParser};
} }
static inline QString llvmDirKey()
{
return QStringLiteral("ProjectExplorer.ClangClToolChain.LlvmDir");
}
QVariantMap ClangClToolChain::toMap() const
{
QVariantMap result = MsvcToolChain::toMap();
result.insert(llvmDirKey(), m_clangPath);
return result;
}
bool ClangClToolChain::fromMap(const QVariantMap &data)
{
if (!MsvcToolChain::fromMap(data))
return false;
const QString clangPath = data.value(llvmDirKey()).toString();
if (clangPath.isEmpty())
return false;
m_clangPath = clangPath;
return true;
}
std::unique_ptr<ToolChainConfigWidget> ClangClToolChain::createConfigurationWidget() std::unique_ptr<ToolChainConfigWidget> ClangClToolChain::createConfigurationWidget()
{ {
return std::make_unique<ClangClToolChainConfigWidget>(this); return std::make_unique<ClangClToolChainConfigWidget>(this);
} }
bool ClangClToolChain::operator==(const ToolChain &other) const
{
if (!MsvcToolChain::operator==(other))
return false;
const auto *clangClTc = static_cast<const ClangClToolChain *>(&other);
return m_clangPath == clangClTc->m_clangPath;
}
Macros ClangClToolChain::msvcPredefinedMacros(const QStringList &cxxflags, Macros ClangClToolChain::msvcPredefinedMacros(const QStringList &cxxflags,
const Utils::Environment &env) const const Utils::Environment &env) const
{ {

View File

@@ -169,28 +169,18 @@ public:
bool isValid() const override; bool isValid() const override;
QStringList suggestedMkspecList() const override; QStringList suggestedMkspecList() const override;
void addToEnvironment(Utils::Environment &env) const override; void addToEnvironment(Utils::Environment &env) const override;
Utils::FilePath compilerCommand() const override; // FIXME: Remove.
QList<Utils::OutputLineParser *> createOutputParsers() const override; QList<Utils::OutputLineParser *> createOutputParsers() const override;
QVariantMap toMap() const override;
bool fromMap(const QVariantMap &data) override;
std::unique_ptr<ToolChainConfigWidget> createConfigurationWidget() override; std::unique_ptr<ToolChainConfigWidget> createConfigurationWidget() override;
BuiltInHeaderPathsRunner createBuiltInHeaderPathsRunner( BuiltInHeaderPathsRunner createBuiltInHeaderPathsRunner(
const Utils::Environment &env) const override; const Utils::Environment &env) const override;
const QList<MsvcToolChain *> &msvcToolchains() const; const QList<MsvcToolChain *> &msvcToolchains() const;
QString clangPath() const { return m_clangPath; }
void setClangPath(const QString &path) { m_clangPath = path; }
Macros msvcPredefinedMacros(const QStringList &cxxflags, Macros msvcPredefinedMacros(const QStringList &cxxflags,
const Utils::Environment &env) const override; const Utils::Environment &env) const override;
Utils::LanguageVersion msvcLanguageVersion(const QStringList &cxxflags, Utils::LanguageVersion msvcLanguageVersion(const QStringList &cxxflags,
const Utils::Id &language, const Utils::Id &language,
const Macros &macros) const override; const Macros &macros) const override;
bool operator==(const ToolChain &) const override;
private:
QString m_clangPath;
}; };
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------

View File

@@ -137,7 +137,7 @@ public:
Utils::Id language() const; Utils::Id language() const;
virtual Utils::FilePath compilerCommand() const; // FIXME: De-virtualize. Utils::FilePath compilerCommand() const;
void setCompilerCommand(const Utils::FilePath &command); void setCompilerCommand(const Utils::FilePath &command);
virtual QList<Utils::OutputLineParser *> createOutputParsers() const = 0; virtual QList<Utils::OutputLineParser *> createOutputParsers() const = 0;