CMakeProjectManager: Use "cooked types" in DirectoryData

Less conversions cycles at the price of a few more temporary bytes.

Change-Id: Ibda82e02d7b83944f5db38ac7cf75c4bae4f55ec
Reviewed-by: Cristian Adam <cristian.adam@qt.io>
This commit is contained in:
hjk
2021-07-06 09:50:01 +02:00
parent 8a28f43a81
commit 3b779fb8dd
5 changed files with 48 additions and 43 deletions

View File

@@ -1359,9 +1359,8 @@ QString CMakeBuildConfiguration::cmakeBuildType() const
} }
if (!config.isEmpty() && !isMultiConfig()) { if (!config.isEmpty() && !isMultiConfig()) {
cmakeBuildType = QString::fromUtf8(CMakeConfigItem::valueOf("CMAKE_BUILD_TYPE", config)); cmakeBuildType = CMakeConfigItem::stringValueOf("CMAKE_BUILD_TYPE", config);
const_cast<CMakeBuildConfiguration*>(this) const_cast<CMakeBuildConfiguration*>(this)->setCMakeBuildType(cmakeBuildType);
->setCMakeBuildType(cmakeBuildType);
} }
return cmakeBuildType; return cmakeBuildType;

View File

@@ -838,8 +838,8 @@ void CMakeBuildSystem::wireUpConnections()
QString errorMessage; QString errorMessage;
const CMakeConfig config = CMakeBuildSystem::parseCMakeCacheDotTxt(cmakeCacheTxt, &errorMessage); const CMakeConfig config = CMakeBuildSystem::parseCMakeCacheDotTxt(cmakeCacheTxt, &errorMessage);
if (!config.isEmpty() && errorMessage.isEmpty()) { if (!config.isEmpty() && errorMessage.isEmpty()) {
QByteArray cmakeBuildTypeName = CMakeConfigItem::valueOf("CMAKE_BUILD_TYPE", config); QString cmakeBuildTypeName = CMakeConfigItem::stringValueOf("CMAKE_BUILD_TYPE", config);
cmakeBuildConfiguration()->setCMakeBuildType(QString::fromUtf8(cmakeBuildTypeName), true); cmakeBuildConfiguration()->setCMakeBuildType(cmakeBuildTypeName, true);
} }
} }
setParametersAndRequestParse(BuildDirParameters(cmakeBuildConfiguration()), options); setParametersAndRequestParse(BuildDirParameters(cmakeBuildConfiguration()), options);
@@ -1210,8 +1210,7 @@ void CMakeBuildSystem::updateQmlJSCodeModel(const QStringList &extraHeaderPaths,
}; };
const CMakeConfig &cm = cmakeBuildConfiguration()->configurationFromCMake(); const CMakeConfig &cm = cmakeBuildConfiguration()->configurationFromCMake();
const QString cmakeImports = QString::fromUtf8(CMakeConfigItem::valueOf("QML_IMPORT_PATH", cm)); addImports(CMakeConfigItem::stringValueOf("QML_IMPORT_PATH", cm));
addImports(cmakeImports);
addImports(kit()->value(QtSupport::KitQmlImportPath::id()).toString()); addImports(kit()->value(QtSupport::KitQmlImportPath::id()).toString());
for (const QString &extraHeaderPath : extraHeaderPaths) for (const QString &extraHeaderPath : extraHeaderPaths)

View File

@@ -35,6 +35,8 @@
#include <QFile> #include <QFile>
#include <QIODevice> #include <QIODevice>
using namespace Utils;
namespace CMakeProjectManager { namespace CMakeProjectManager {
// -------------------------------------------------------------------- // --------------------------------------------------------------------
@@ -62,6 +64,16 @@ QByteArray CMakeConfigItem::valueOf(const QByteArray &key, const QList<CMakeConf
return QByteArray(); return QByteArray();
} }
QString CMakeConfigItem::stringValueOf(const QByteArray &key, const QList<CMakeConfigItem> &input)
{
return QString::fromUtf8(valueOf(key, input));
}
FilePath CMakeConfigItem::filePathValueOf(const QByteArray &key, const QList<CMakeConfigItem> &input)
{
return FilePath::fromUtf8(valueOf(key, input));
}
QString CMakeConfigItem::expandedValueOf(const ProjectExplorer::Kit *k, const QByteArray &key, QString CMakeConfigItem::expandedValueOf(const ProjectExplorer::Kit *k, const QByteArray &key,
const QList<CMakeConfigItem> &input) const QList<CMakeConfigItem> &input)
{ {

View File

@@ -51,6 +51,8 @@ public:
CMakeConfigItem(const QByteArray &k, const QByteArray &v); CMakeConfigItem(const QByteArray &k, const QByteArray &v);
static QByteArray valueOf(const QByteArray &key, const QList<CMakeConfigItem> &input); static QByteArray valueOf(const QByteArray &key, const QList<CMakeConfigItem> &input);
static QString stringValueOf(const QByteArray &key, const QList<CMakeConfigItem> &input);
static Utils::FilePath filePathValueOf(const QByteArray &key, const QList<CMakeConfigItem> &input);
static QString expandedValueOf(const ProjectExplorer::Kit *k, const QByteArray &key, static QString expandedValueOf(const ProjectExplorer::Kit *k, const QByteArray &key,
const QList<CMakeConfigItem> &input); const QList<CMakeConfigItem> &input);
static QStringList cmakeSplitValue(const QString &in, bool keepEmpty = false); static QStringList cmakeSplitValue(const QString &in, bool keepEmpty = false);

View File

@@ -65,11 +65,11 @@ struct DirectoryData
// Kit Stuff // Kit Stuff
FilePath cmakeBinary; FilePath cmakeBinary;
QByteArray generator; QString generator;
QByteArray extraGenerator; QString extraGenerator;
QByteArray platform; QString platform;
QByteArray toolset; QString toolset;
QByteArray sysroot; FilePath sysroot;
QtProjectImporter::QtVersionData qt; QtProjectImporter::QtVersionData qt;
QVector<ToolChainDescription> toolChains; QVector<ToolChainDescription> toolChains;
}; };
@@ -206,16 +206,11 @@ static FilePath qmakeFromCMakeCache(const CMakeConfig &config)
cmake.setEnvironment(env); cmake.setEnvironment(env);
cmake.setTimeOutMessageBoxEnabled(false); cmake.setTimeOutMessageBoxEnabled(false);
QString cmakeGenerator QString cmakeGenerator = CMakeConfigItem::stringValueOf(QByteArray("CMAKE_GENERATOR"), config);
= QString::fromUtf8(CMakeConfigItem::valueOf(QByteArray("CMAKE_GENERATOR"), config)); FilePath cmakeExecutable = CMakeConfigItem::filePathValueOf(QByteArray("CMAKE_COMMAND"), config);
FilePath cmakeExecutable FilePath cmakeMakeProgram =CMakeConfigItem::filePathValueOf(QByteArray("CMAKE_MAKE_PROGRAM"), config);
= FilePath::fromUtf8(CMakeConfigItem::valueOf(QByteArray("CMAKE_COMMAND"), config)); FilePath toolchainFile = CMakeConfigItem::filePathValueOf(QByteArray("CMAKE_TOOLCHAIN_FILE"), config);
FilePath cmakeMakeProgram FilePath hostPath = CMakeConfigItem::filePathValueOf(QByteArray("QT_HOST_PATH"), config);
= FilePath::fromUtf8(CMakeConfigItem::valueOf(QByteArray("CMAKE_MAKE_PROGRAM"), config));
FilePath toolchainFile
= FilePath::fromUtf8(CMakeConfigItem::valueOf(QByteArray("CMAKE_TOOLCHAIN_FILE"), config));
FilePath hostPath
= FilePath::fromUtf8(CMakeConfigItem::valueOf(QByteArray("QT_HOST_PATH"), config));
QStringList args; QStringList args;
args.push_back("-S"); args.push_back("-S");
@@ -333,10 +328,9 @@ QList<void *> CMakeProjectImporter::examineDirectory(const FilePath &importPath,
for (auto const &buildType: qAsConst(buildConfigurationTypes)) { for (auto const &buildType: qAsConst(buildConfigurationTypes)) {
auto data = std::make_unique<DirectoryData>(); auto data = std::make_unique<DirectoryData>();
data->cmakeHomeDirectory = FilePath::fromUserInput( data->cmakeHomeDirectory =
QString::fromUtf8( FilePath::fromUserInput(CMakeConfigItem::stringValueOf("CMAKE_HOME_DIRECTORY", config))
CMakeConfigItem::valueOf("CMAKE_HOME_DIRECTORY", config))) .canonicalPath();
.canonicalPath();
const FilePath canonicalProjectDirectory = projectDirectory().canonicalPath(); const FilePath canonicalProjectDirectory = projectDirectory().canonicalPath();
if (data->cmakeHomeDirectory != canonicalProjectDirectory) { if (data->cmakeHomeDirectory != canonicalProjectDirectory) {
*warningMessage = tr("Unexpected source directory \"%1\", expected \"%2\". " *warningMessage = tr("Unexpected source directory \"%1\", expected \"%2\". "
@@ -350,13 +344,12 @@ QList<void *> CMakeProjectImporter::examineDirectory(const FilePath &importPath,
data->buildDirectory = importPath; data->buildDirectory = importPath;
data->cmakeBuildType = buildType; data->cmakeBuildType = buildType;
data->cmakeBinary = FilePath::fromUtf8(CMakeConfigItem::valueOf("CMAKE_COMMAND", config)); data->cmakeBinary = CMakeConfigItem::filePathValueOf("CMAKE_COMMAND", config);
data->generator = CMakeConfigItem::valueOf("CMAKE_GENERATOR", config); data->generator = CMakeConfigItem::stringValueOf("CMAKE_GENERATOR", config);
data->extraGenerator = CMakeConfigItem::valueOf("CMAKE_EXTRA_GENERATOR", config); data->extraGenerator = CMakeConfigItem::stringValueOf("CMAKE_EXTRA_GENERATOR", config);
data->platform = CMakeConfigItem::valueOf("CMAKE_GENERATOR_PLATFORM", config); data->platform = CMakeConfigItem::stringValueOf("CMAKE_GENERATOR_PLATFORM", config);
data->toolset = CMakeConfigItem::valueOf("CMAKE_GENERATOR_TOOLSET", config); data->toolset = CMakeConfigItem::stringValueOf("CMAKE_GENERATOR_TOOLSET", config);
data->sysroot = CMakeConfigItem::filePathValueOf("CMAKE_SYSROOT", config);
data->sysroot = CMakeConfigItem::valueOf("CMAKE_SYSROOT", config);
// Qt: // Qt:
const FilePath qmake = qmakeFromCMakeCache(config); const FilePath qmake = qmakeFromCMakeCache(config);
@@ -380,13 +373,13 @@ bool CMakeProjectImporter::matchKit(void *directoryData, const Kit *k) const
if (!cm || cm->cmakeExecutable() != data->cmakeBinary) if (!cm || cm->cmakeExecutable() != data->cmakeBinary)
return false; return false;
if (CMakeGeneratorKitAspect::generator(k) != QString::fromUtf8(data->generator) if (CMakeGeneratorKitAspect::generator(k) != data->generator
|| CMakeGeneratorKitAspect::extraGenerator(k) != QString::fromUtf8(data->extraGenerator) || CMakeGeneratorKitAspect::extraGenerator(k) != data->extraGenerator
|| CMakeGeneratorKitAspect::platform(k) != QString::fromUtf8(data->platform) || CMakeGeneratorKitAspect::platform(k) != data->platform
|| CMakeGeneratorKitAspect::toolset(k) != QString::fromUtf8(data->toolset)) || CMakeGeneratorKitAspect::toolset(k) != data->toolset)
return false; return false;
if (SysRootKitAspect::sysRoot(k) != FilePath::fromUtf8(data->sysroot)) if (SysRootKitAspect::sysRoot(k) != data->sysroot)
return false; return false;
if (data->qt.qt && QtSupport::QtKitAspect::qtVersionId(k) != data->qt.qt->uniqueId()) if (data->qt.qt && QtSupport::QtKitAspect::qtVersionId(k) != data->qt.qt->uniqueId())
@@ -421,12 +414,12 @@ Kit *CMakeProjectImporter::createKit(void *directoryData) const
addTemporaryData(CMakeKitAspect::id(), cmtd.cmakeTool->id().toSetting(), k); addTemporaryData(CMakeKitAspect::id(), cmtd.cmakeTool->id().toSetting(), k);
CMakeKitAspect::setCMakeTool(k, cmtd.cmakeTool->id()); CMakeKitAspect::setCMakeTool(k, cmtd.cmakeTool->id());
CMakeGeneratorKitAspect::setGenerator(k, QString::fromUtf8(data->generator)); CMakeGeneratorKitAspect::setGenerator(k, data->generator);
CMakeGeneratorKitAspect::setExtraGenerator(k, QString::fromUtf8(data->extraGenerator)); CMakeGeneratorKitAspect::setExtraGenerator(k, data->extraGenerator);
CMakeGeneratorKitAspect::setPlatform(k, QString::fromUtf8(data->platform)); CMakeGeneratorKitAspect::setPlatform(k, data->platform);
CMakeGeneratorKitAspect::setToolset(k, QString::fromUtf8(data->toolset)); CMakeGeneratorKitAspect::setToolset(k, data->toolset);
SysRootKitAspect::setSysRoot(k, FilePath::fromUtf8(data->sysroot)); SysRootKitAspect::setSysRoot(k, data->sysroot);
for (const ToolChainDescription &cmtcd : data->toolChains) { for (const ToolChainDescription &cmtcd : data->toolChains) {
const ToolChainData tcd = findOrCreateToolChains(cmtcd); const ToolChainData tcd = findOrCreateToolChains(cmtcd);