Files
qt-creator/src/plugins/projectexplorer/projectconfiguration.cpp
Jarek Kobus 7fadaff5d4 IDevice: Make it possible to forward declare Ptr and ConstPtr
Most inclusions of idevice.h inside other headers are
required just because of IDevice::Ptr or IDevice::ConstPtr
was used there. Unfortunately, since these "using"
are defined inside a IDevice class, we just can't
forward declare IDevice::Ptr nor IDevice::ConstPtr.

Instead, create a separate header that defines
IDevicePtr and IDeviceConstPtr while having IDevice
forward declared. Redefine IDevice::Ptr/ConstPtr
inside IDevice to use IDevicePtr/IDeviceConstPtr.

Now, instead of forward declaring a IDevice::Ptr
it's sufficient to include the idevicefwd.h.

This drops the number of files being recompiled
after touching idevice.h from ~770 to ~210.

Change-Id: Ib6f2982aa0761fb4cd6593badb9c3c0c527ea535
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: hjk <hjk@qt.io>
2022-04-14 12:27:04 +00:00

171 lines
4.6 KiB
C++

/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#include "projectconfiguration.h"
#include "kitinformation.h"
#include "target.h"
#include <projectexplorer/devicesupport/idevice.h>
#include <utils/algorithm.h>
#include <utils/qtcassert.h>
#include <QFormLayout>
#include <QWidget>
using namespace ProjectExplorer;
using namespace Utils;
const char CONFIGURATION_ID_KEY[] = "ProjectExplorer.ProjectConfiguration.Id";
const char DISPLAY_NAME_KEY[] = "ProjectExplorer.ProjectConfiguration.DisplayName";
// ProjectConfiguration
ProjectConfiguration::ProjectConfiguration(QObject *parent, Utils::Id id)
: QObject(parent)
, m_id(id)
{
m_aspects.setOwnsSubAspects(true);
QTC_CHECK(parent);
QTC_CHECK(id.isValid());
setObjectName(id.toString());
for (QObject *obj = this; obj; obj = obj->parent()) {
m_target = qobject_cast<Target *>(obj);
if (m_target)
break;
}
QTC_CHECK(m_target);
}
ProjectConfiguration::~ProjectConfiguration() = default;
Project *ProjectConfiguration::project() const
{
return m_target->project();
}
Kit *ProjectConfiguration::kit() const
{
return m_target->kit();
}
Utils::Id ProjectConfiguration::id() const
{
return m_id;
}
QString ProjectConfiguration::settingsIdKey()
{
return QString(CONFIGURATION_ID_KEY);
}
void ProjectConfiguration::setDisplayName(const QString &name)
{
if (m_displayName.setValue(name))
emit displayNameChanged();
}
void ProjectConfiguration::setDefaultDisplayName(const QString &name)
{
if (m_displayName.setDefaultValue(name))
emit displayNameChanged();
}
void ProjectConfiguration::setToolTip(const QString &text)
{
if (text == m_toolTip)
return;
m_toolTip = text;
emit toolTipChanged();
}
QString ProjectConfiguration::toolTip() const
{
return m_toolTip;
}
QVariantMap ProjectConfiguration::toMap() const
{
QTC_CHECK(m_id.isValid());
QVariantMap map;
map.insert(QLatin1String(CONFIGURATION_ID_KEY), m_id.toSetting());
m_displayName.toMap(map, DISPLAY_NAME_KEY);
m_aspects.toMap(map);
return map;
}
Target *ProjectConfiguration::target() const
{
return m_target;
}
bool ProjectConfiguration::fromMap(const QVariantMap &map)
{
Utils::Id id = Utils::Id::fromSetting(map.value(QLatin1String(CONFIGURATION_ID_KEY)));
// Note: This is only "startsWith", not ==, as RunConfigurations currently still
// mangle in their build keys.
QTC_ASSERT(id.toString().startsWith(m_id.toString()), return false);
m_displayName.fromMap(map, DISPLAY_NAME_KEY);
m_aspects.fromMap(map);
return true;
}
Utils::BaseAspect *ProjectConfiguration::aspect(Utils::Id id) const
{
return m_aspects.aspect(id);
}
void ProjectConfiguration::acquaintAspects()
{
for (Utils::BaseAspect *aspect : m_aspects)
aspect->acquaintSiblings(m_aspects);
}
void ProjectConfiguration::doPostInit()
{
for (const std::function<void()> &postInit : qAsConst(m_postInit))
postInit();
}
FilePath ProjectConfiguration::mapFromBuildDeviceToGlobalPath(const FilePath &path) const
{
IDevice::ConstPtr dev = BuildDeviceKitAspect::device(kit());
QTC_ASSERT(dev, return path);
return dev->mapToGlobalPath(path);
}
Utils::Id ProjectExplorer::idFromMap(const QVariantMap &map)
{
return Utils::Id::fromSetting(map.value(QLatin1String(CONFIGURATION_ID_KEY)));
}
QString ProjectConfiguration::expandedDisplayName() const
{
return m_target->macroExpander()->expand(m_displayName.value());
}