ProjectExplorer: Consistently use HeaderPaths

Use HeaderPaths over QList<HeaderPath>.

Change-Id: I8f78b0a44e0160f1a2e7a78d9db4d04fcaa22f82
Reviewed-by: Marco Bubke <marco.bubke@qt.io>
This commit is contained in:
Tobias Hunger
2018-09-13 12:19:07 +02:00
parent 570fe88970
commit 11245564da
12 changed files with 47 additions and 46 deletions

View File

@@ -106,7 +106,7 @@ static QString getArch(const QString &triple)
// Paths added here are those that were used by qmake. They were taken from // Paths added here are those that were used by qmake. They were taken from
// *qtsource*/qtbase/mkspecs/common/android-base-head.conf // *qtsource*/qtbase/mkspecs/common/android-base-head.conf
// Adding them here allows us to use them for all build systems. // Adding them here allows us to use them for all build systems.
static void addSystemHeaderPaths(QList<ProjectExplorer::HeaderPath> &paths, static void addSystemHeaderPaths(ProjectExplorer::HeaderPaths &paths,
const QString &triple, const QString &version) const QString &triple, const QString &version)
{ {
const Utils::FileName ndkPath = AndroidConfigurations::currentConfig().ndkLocation(); const Utils::FileName ndkPath = AndroidConfigurations::currentConfig().ndkLocation();
@@ -134,7 +134,7 @@ AndroidToolChain::SystemHeaderPathsRunner AndroidToolChain::createSystemHeaderPa
{ {
const QString triple = originalTargetTriple(); const QString triple = originalTargetTriple();
const QString version = this->version(); const QString version = this->version();
initExtraHeaderPathsFunction([triple, version] (QList<HeaderPath> &paths) { initExtraHeaderPathsFunction([triple, version] (HeaderPaths &paths) {
addSystemHeaderPaths(paths, triple, version); addSystemHeaderPaths(paths, triple, version);
}); });
return GccToolChain::createSystemHeaderPathsRunner(); return GccToolChain::createSystemHeaderPathsRunner();

View File

@@ -116,7 +116,7 @@ private:
if (!m_tcInfo.headerPathsRunner) if (!m_tcInfo.headerPathsRunner)
return; // No compiler set in kit. return; // No compiler set in kit.
const QList<ProjectExplorer::HeaderPath> systemHeaderPaths const ProjectExplorer::HeaderPaths systemHeaderPaths
= m_tcInfo.headerPathsRunner(m_flags.commandLineFlags, = m_tcInfo.headerPathsRunner(m_flags.commandLineFlags,
m_tcInfo.sysRootPath); m_tcInfo.sysRootPath);

View File

@@ -102,9 +102,9 @@ ToolChain::SystemHeaderPathsRunner NimToolChain::createSystemHeaderPathsRunner()
return ToolChain::SystemHeaderPathsRunner(); return ToolChain::SystemHeaderPathsRunner();
} }
QList<HeaderPath> NimToolChain::systemHeaderPaths(const QStringList &, const FileName &) const HeaderPaths NimToolChain::systemHeaderPaths(const QStringList &, const FileName &) const
{ {
return QList<HeaderPath>(); return {};
} }
void NimToolChain::addToEnvironment(Environment &env) const void NimToolChain::addToEnvironment(Environment &env) const

View File

@@ -46,7 +46,7 @@ public:
ProjectExplorer::WarningFlags warningFlags(const QStringList &flags) const final; ProjectExplorer::WarningFlags warningFlags(const QStringList &flags) const final;
SystemHeaderPathsRunner createSystemHeaderPathsRunner() const override; SystemHeaderPathsRunner createSystemHeaderPathsRunner() const override;
QList<ProjectExplorer::HeaderPath> systemHeaderPaths(const QStringList &flags, ProjectExplorer::HeaderPaths systemHeaderPaths(const QStringList &flags,
const Utils::FileName &sysRoot) const final; const Utils::FileName &sysRoot) const final;
void addToEnvironment(Utils::Environment &env) const final; void addToEnvironment(Utils::Environment &env) const final;
QString makeCommand(const Utils::Environment &env) const final; QString makeCommand(const Utils::Environment &env) const final;

View File

@@ -225,7 +225,7 @@ ToolChain::SystemHeaderPathsRunner AbstractMsvcToolChain::createSystemHeaderPath
}; };
} }
QList<HeaderPath> AbstractMsvcToolChain::systemHeaderPaths(const QStringList &cxxflags, HeaderPaths AbstractMsvcToolChain::systemHeaderPaths(const QStringList &cxxflags,
const Utils::FileName &sysRoot) const const Utils::FileName &sysRoot) const
{ {
return createSystemHeaderPathsRunner()(cxxflags, sysRoot.toString()); return createSystemHeaderPathsRunner()(cxxflags, sysRoot.toString());

View File

@@ -58,7 +58,7 @@ public:
CompilerFlags compilerFlags(const QStringList &cxxflags) const override; CompilerFlags compilerFlags(const QStringList &cxxflags) const override;
WarningFlags warningFlags(const QStringList &cflags) const override; WarningFlags warningFlags(const QStringList &cflags) const override;
SystemHeaderPathsRunner createSystemHeaderPathsRunner() const override; SystemHeaderPathsRunner createSystemHeaderPathsRunner() const override;
QList<HeaderPath> systemHeaderPaths(const QStringList &cxxflags, HeaderPaths systemHeaderPaths(const QStringList &cxxflags,
const Utils::FileName &sysRoot) const override; const Utils::FileName &sysRoot) const override;
void addToEnvironment(Utils::Environment &env) const override; void addToEnvironment(Utils::Environment &env) const override;
@@ -104,7 +104,7 @@ protected:
mutable Utils::Environment m_lastEnvironment; // Last checked 'incoming' environment. mutable Utils::Environment m_lastEnvironment; // Last checked 'incoming' environment.
mutable Utils::Environment m_resultEnvironment; // Resulting environment for VC mutable Utils::Environment m_resultEnvironment; // Resulting environment for VC
mutable QMutex *m_headerPathsMutex = nullptr; mutable QMutex *m_headerPathsMutex = nullptr;
mutable QList<HeaderPath> m_headerPaths; mutable HeaderPaths m_headerPaths;
Abi m_abi; Abi m_abi;
QString m_vcvarsBat; QString m_vcvarsBat;

View File

@@ -168,11 +168,11 @@ void CustomToolChain::setPredefinedMacros(const Macros &macros)
ToolChain::SystemHeaderPathsRunner CustomToolChain::createSystemHeaderPathsRunner() const ToolChain::SystemHeaderPathsRunner CustomToolChain::createSystemHeaderPathsRunner() const
{ {
const QList<HeaderPath> systemHeaderPaths = m_systemHeaderPaths; const HeaderPaths systemHeaderPaths = m_systemHeaderPaths;
// This runner must be thread-safe! // This runner must be thread-safe!
return [systemHeaderPaths](const QStringList &cxxFlags, const QString &) { return [systemHeaderPaths](const QStringList &cxxFlags, const QString &) {
QList<HeaderPath> flagHeaderPaths; HeaderPaths flagHeaderPaths;
for (const QString &cxxFlag : cxxFlags) { for (const QString &cxxFlag : cxxFlags) {
if (cxxFlag.startsWith(QLatin1String("-I"))) { if (cxxFlag.startsWith(QLatin1String("-I"))) {
flagHeaderPaths.push_back({cxxFlag.mid(2).trimmed(), HeaderPathType::System}); flagHeaderPaths.push_back({cxxFlag.mid(2).trimmed(), HeaderPathType::System});
@@ -183,7 +183,7 @@ ToolChain::SystemHeaderPathsRunner CustomToolChain::createSystemHeaderPathsRunne
}; };
} }
QList<HeaderPath> CustomToolChain::systemHeaderPaths(const QStringList &cxxFlags, HeaderPaths CustomToolChain::systemHeaderPaths(const QStringList &cxxFlags,
const FileName &fileName) const const FileName &fileName) const
{ {
return createSystemHeaderPathsRunner()(cxxFlags, fileName.toString()); return createSystemHeaderPathsRunner()(cxxFlags, fileName.toString());
@@ -222,12 +222,12 @@ IOutputParser *CustomToolChain::outputParser() const
QStringList CustomToolChain::headerPathsList() const QStringList CustomToolChain::headerPathsList() const
{ {
return Utils::transform(m_systemHeaderPaths, &HeaderPath::path); return Utils::transform<QList>(m_systemHeaderPaths, &HeaderPath::path);
} }
void CustomToolChain::setHeaderPaths(const QStringList &list) void CustomToolChain::setHeaderPaths(const QStringList &list)
{ {
QList<HeaderPath> tmp = Utils::transform(list, [](const QString &headerPath) { HeaderPaths tmp = Utils::transform<QVector>(list, [](const QString &headerPath) {
return HeaderPath(headerPath.trimmed(), HeaderPathType::System); return HeaderPath(headerPath.trimmed(), HeaderPathType::System);
}); });

View File

@@ -79,7 +79,7 @@ public:
void setPredefinedMacros(const Macros &macros); void setPredefinedMacros(const Macros &macros);
SystemHeaderPathsRunner createSystemHeaderPathsRunner() const override; SystemHeaderPathsRunner createSystemHeaderPathsRunner() const override;
QList<HeaderPath> systemHeaderPaths(const QStringList &cxxFlags, HeaderPaths systemHeaderPaths(const QStringList &cxxFlags,
const Utils::FileName &) const override; const Utils::FileName &) const override;
void addToEnvironment(Utils::Environment &env) const override; void addToEnvironment(Utils::Environment &env) const override;
Utils::FileNameList suggestedMkspecList() const override; Utils::FileNameList suggestedMkspecList() const override;
@@ -125,7 +125,7 @@ private:
Abi m_targetAbi; Abi m_targetAbi;
Macros m_predefinedMacros; Macros m_predefinedMacros;
QList<HeaderPath> m_systemHeaderPaths; HeaderPaths m_systemHeaderPaths;
QStringList m_cxx11Flags; QStringList m_cxx11Flags;
Utils::FileNameList m_mkspecs; Utils::FileNameList m_mkspecs;

View File

@@ -136,10 +136,10 @@ static ProjectExplorer::Macros gccPredefinedMacros(const FileName &gcc,
return predefinedMacros; return predefinedMacros;
} }
QList<HeaderPath> GccToolChain::gccHeaderPaths(const FileName &gcc, const QStringList &arguments, HeaderPaths GccToolChain::gccHeaderPaths(const FileName &gcc, const QStringList &arguments,
const QStringList &env) const QStringList &env)
{ {
QList<HeaderPath> systemHeaderPaths; HeaderPaths systemHeaderPaths;
QByteArray line; QByteArray line;
QByteArray data = runGcc(gcc, arguments, env); QByteArray data = runGcc(gcc, arguments, env);
QBuffer cpp(&data); QBuffer cpp(&data);
@@ -255,7 +255,7 @@ GccToolChain::GccToolChain(Detection d) :
GccToolChain::GccToolChain(Core::Id typeId, Detection d) : GccToolChain::GccToolChain(Core::Id typeId, Detection d) :
ToolChain(typeId, d), ToolChain(typeId, d),
m_predefinedMacrosCache(std::make_shared<Cache<QVector<Macro>, 64>>()), m_predefinedMacrosCache(std::make_shared<Cache<QVector<Macro>, 64>>()),
m_headerPathsCache(std::make_shared<Cache<QList<HeaderPath>>>()) m_headerPathsCache(std::make_shared<Cache<HeaderPaths>>())
{ } { }
void GccToolChain::setCompilerCommand(const FileName &path) void GccToolChain::setCompilerCommand(const FileName &path)
@@ -631,7 +631,7 @@ ToolChain::SystemHeaderPathsRunner GccToolChain::createSystemHeaderPathsRunner()
const QStringList platformCodeGenFlags = m_platformCodeGenFlags; const QStringList platformCodeGenFlags = m_platformCodeGenFlags;
OptionsReinterpreter reinterpretOptions = m_optionsReinterpreter; OptionsReinterpreter reinterpretOptions = m_optionsReinterpreter;
QTC_CHECK(reinterpretOptions); QTC_CHECK(reinterpretOptions);
std::shared_ptr<Cache<QList<HeaderPath>>> headerCache = m_headerPathsCache; std::shared_ptr<Cache<HeaderPaths>> headerCache = m_headerPathsCache;
Core::Id languageId = language(); Core::Id languageId = language();
// This runner must be thread-safe! // This runner must be thread-safe!
@@ -642,13 +642,12 @@ ToolChain::SystemHeaderPathsRunner GccToolChain::createSystemHeaderPathsRunner()
QStringList arguments = gccPrepareArguments(flags, sysRoot, platformCodeGenFlags, QStringList arguments = gccPrepareArguments(flags, sysRoot, platformCodeGenFlags,
languageId, reinterpretOptions); languageId, reinterpretOptions);
const Utils::optional<QList<HeaderPath>> cachedPaths = headerCache->check(arguments); const Utils::optional<HeaderPaths> cachedPaths = headerCache->check(arguments);
if (cachedPaths) if (cachedPaths)
return cachedPaths.value(); return cachedPaths.value();
QList<HeaderPath> paths = gccHeaderPaths(findLocalCompiler(compilerCommand, env), HeaderPaths paths = gccHeaderPaths(findLocalCompiler(compilerCommand, env),
arguments, arguments, env.toStringList());
env.toStringList());
extraHeaderPathsFunction(paths); extraHeaderPathsFunction(paths);
headerCache->insert(arguments, paths); headerCache->insert(arguments, paths);
@@ -664,7 +663,7 @@ ToolChain::SystemHeaderPathsRunner GccToolChain::createSystemHeaderPathsRunner()
}; };
} }
QList<HeaderPath> GccToolChain::systemHeaderPaths(const QStringList &flags, HeaderPaths GccToolChain::systemHeaderPaths(const QStringList &flags,
const FileName &sysRoot) const const FileName &sysRoot) const
{ {
return createSystemHeaderPathsRunner()(flags, sysRoot.toString()); return createSystemHeaderPathsRunner()(flags, sysRoot.toString());

View File

@@ -147,7 +147,7 @@ public:
Macros predefinedMacros(const QStringList &cxxflags) const override; Macros predefinedMacros(const QStringList &cxxflags) const override;
SystemHeaderPathsRunner createSystemHeaderPathsRunner() const override; SystemHeaderPathsRunner createSystemHeaderPathsRunner() const override;
QList<HeaderPath> systemHeaderPaths(const QStringList &flags, HeaderPaths systemHeaderPaths(const QStringList &flags,
const Utils::FileName &sysRoot) const override; const Utils::FileName &sysRoot) const override;
void addToEnvironment(Utils::Environment &env) const override; void addToEnvironment(Utils::Environment &env) const override;
@@ -210,10 +210,11 @@ protected:
using OptionsReinterpreter = std::function<QStringList(const QStringList &options)>; using OptionsReinterpreter = std::function<QStringList(const QStringList &options)>;
void setOptionsReinterpreter(const OptionsReinterpreter &optionsReinterpreter); void setOptionsReinterpreter(const OptionsReinterpreter &optionsReinterpreter);
using ExtraHeaderPathsFunction = std::function<void(QList<HeaderPath> &)>; using ExtraHeaderPathsFunction = std::function<void(HeaderPaths &)>;
void initExtraHeaderPathsFunction(ExtraHeaderPathsFunction &&extraHeaderPathsFunction) const; void initExtraHeaderPathsFunction(ExtraHeaderPathsFunction &&extraHeaderPathsFunction) const;
static QList<HeaderPath> gccHeaderPaths(const Utils::FileName &gcc, const QStringList &args, const QStringList &env); static HeaderPaths gccHeaderPaths(const Utils::FileName &gcc, const QStringList &args,
const QStringList &env);
class WarningFlagAdder class WarningFlagAdder
{ {
@@ -249,12 +250,12 @@ private:
Abi m_targetAbi; Abi m_targetAbi;
mutable QList<Abi> m_supportedAbis; mutable QList<Abi> m_supportedAbis;
mutable QString m_originalTargetTriple; mutable QString m_originalTargetTriple;
mutable QList<HeaderPath> m_headerPaths; mutable HeaderPaths m_headerPaths;
mutable QString m_version; mutable QString m_version;
mutable std::shared_ptr<Cache<QVector<Macro>, 64>> m_predefinedMacrosCache; mutable std::shared_ptr<Cache<QVector<Macro>, 64>> m_predefinedMacrosCache;
mutable std::shared_ptr<Cache<QList<HeaderPath>>> m_headerPathsCache; mutable std::shared_ptr<Cache<HeaderPaths>> m_headerPathsCache;
mutable ExtraHeaderPathsFunction m_extraHeaderPathsFunction = [](QList<HeaderPath> &) {}; mutable ExtraHeaderPathsFunction m_extraHeaderPathsFunction = [](HeaderPaths &) {};
friend class Internal::GccToolChainConfigWidget; friend class Internal::GccToolChainConfigWidget;
friend class Internal::GccToolChainFactory; friend class Internal::GccToolChainFactory;

View File

@@ -27,6 +27,8 @@
#include "projectexplorer_export.h" #include "projectexplorer_export.h"
#include "projectexplorer_global.h" #include "projectexplorer_global.h"
#include "headerpath.h"
#include "projectmacro.h" #include "projectmacro.h"
#include <coreplugin/id.h> #include <coreplugin/id.h>
@@ -60,7 +62,6 @@ QString languageId(Language l);
} // namespace Deprecated } // namespace Deprecated
class Abi; class Abi;
class HeaderPath;
class IOutputParser; class IOutputParser;
class ToolChainConfigWidget; class ToolChainConfigWidget;
class ToolChainFactory; class ToolChainFactory;
@@ -131,10 +132,10 @@ public:
virtual Macros predefinedMacros(const QStringList &cxxflags) const = 0; virtual Macros predefinedMacros(const QStringList &cxxflags) const = 0;
// A SystemHeaderPathsRunner is created in the ui thread and runs in another thread. // A SystemHeaderPathsRunner is created in the ui thread and runs in another thread.
using SystemHeaderPathsRunner = std::function<QList<HeaderPath>(const QStringList &cxxflags, using SystemHeaderPathsRunner = std::function<HeaderPaths(const QStringList &cxxflags,
const QString &sysRoot)>; const QString &sysRoot)>;
virtual SystemHeaderPathsRunner createSystemHeaderPathsRunner() const = 0; virtual SystemHeaderPathsRunner createSystemHeaderPathsRunner() const = 0;
virtual QList<HeaderPath> systemHeaderPaths(const QStringList &cxxflags, virtual HeaderPaths systemHeaderPaths(const QStringList &cxxflags,
const Utils::FileName &sysRoot) const = 0; const Utils::FileName &sysRoot) const = 0;
virtual void addToEnvironment(Utils::Environment &env) const = 0; virtual void addToEnvironment(Utils::Environment &env) const = 0;
virtual QString makeCommand(const Utils::Environment &env) const = 0; virtual QString makeCommand(const Utils::Environment &env) const = 0;

View File

@@ -313,8 +313,8 @@ public:
CompilerFlags compilerFlags(const QStringList &cxxflags) const override { Q_UNUSED(cxxflags); return NoFlags; } CompilerFlags compilerFlags(const QStringList &cxxflags) const override { Q_UNUSED(cxxflags); return NoFlags; }
WarningFlags warningFlags(const QStringList &cflags) const override { Q_UNUSED(cflags); return WarningFlags::NoWarnings; } WarningFlags warningFlags(const QStringList &cflags) const override { Q_UNUSED(cflags); return WarningFlags::NoWarnings; }
SystemHeaderPathsRunner createSystemHeaderPathsRunner() const override { return SystemHeaderPathsRunner(); } SystemHeaderPathsRunner createSystemHeaderPathsRunner() const override { return SystemHeaderPathsRunner(); }
QList<HeaderPath> systemHeaderPaths(const QStringList &cxxflags, const FileName &sysRoot) const override HeaderPaths systemHeaderPaths(const QStringList &cxxflags, const FileName &sysRoot) const override
{ Q_UNUSED(cxxflags); Q_UNUSED(sysRoot); return QList<HeaderPath>(); } { Q_UNUSED(cxxflags); Q_UNUSED(sysRoot); return {}; }
void addToEnvironment(Environment &env) const override { Q_UNUSED(env); } void addToEnvironment(Environment &env) const override { Q_UNUSED(env); }
QString makeCommand(const Environment &env) const override { Q_UNUSED(env); return QString("make"); } QString makeCommand(const Environment &env) const override { Q_UNUSED(env); return QString("make"); }
FileName compilerCommand() const override { return Utils::FileName::fromString("/tmp/test/gcc"); } FileName compilerCommand() const override { return Utils::FileName::fromString("/tmp/test/gcc"); }