aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
authorChristian Kandeler <[email protected]>2019-11-22 14:50:15 +0100
committerChristian Kandeler <[email protected]>2019-11-25 09:46:41 +0000
commit72ca1796337fa0f7f0214632efba20682918a6e7 (patch)
treeffbf933d327bad6b0a623ec153116f8673b54458 /src/plugins
parent5795dc24c70ea10a622a2a98d4778aad405984af (diff)
QtSupport: Add a QmlDebuggingAspect
... and make use of it in the qbs build configuration. We cannot use it for qmake yet, because the build config there still has a custom, non-aspectified widget. Change-Id: Iacf902a2d9384d0074b10fdc98e082fa906fb6d6 Reviewed-by: hjk <[email protected]>
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/debugger/debuggerrunconfigurationaspect.cpp3
-rw-r--r--src/plugins/projectexplorer/projectconfigurationaspects.cpp5
-rw-r--r--src/plugins/projectexplorer/projectconfigurationaspects.h7
-rw-r--r--src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp15
-rw-r--r--src/plugins/qbsprojectmanager/qbsbuildconfiguration.h7
-rw-r--r--src/plugins/qbsprojectmanager/qbsbuildstep.cpp69
-rw-r--r--src/plugins/qbsprojectmanager/qbsbuildstep.h11
-rw-r--r--src/plugins/qtsupport/CMakeLists.txt1
-rw-r--r--src/plugins/qtsupport/baseqtversion.cpp2
-rw-r--r--src/plugins/qtsupport/baseqtversion.h2
-rw-r--r--src/plugins/qtsupport/qtbuildaspects.cpp75
-rw-r--r--src/plugins/qtsupport/qtbuildaspects.h48
-rw-r--r--src/plugins/qtsupport/qtsupport.pro2
-rw-r--r--src/plugins/qtsupport/qtsupport.qbs2
14 files changed, 173 insertions, 76 deletions
diff --git a/src/plugins/debugger/debuggerrunconfigurationaspect.cpp b/src/plugins/debugger/debuggerrunconfigurationaspect.cpp
index c02e1922130..f9b222eff34 100644
--- a/src/plugins/debugger/debuggerrunconfigurationaspect.cpp
+++ b/src/plugins/debugger/debuggerrunconfigurationaspect.cpp
@@ -244,6 +244,9 @@ bool DebuggerRunConfigurationAspect::useQmlDebugger() const
// (Using the Qt metatype system to avoid a hard qt4projectmanager dependency)
//
if (BuildConfiguration *bc = m_target->activeBuildConfiguration()) {
+ QVariant linkProperty = bc->property("linkQmlDebuggingLibrary");
+ if (linkProperty.isValid() && linkProperty.canConvert(QVariant::Bool))
+ return linkProperty.toBool();
if (BuildStepList *bsl = bc->stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD)) {
foreach (BuildStep *step, bsl->steps()) {
QVariant linkProperty = step->property("linkQmlDebuggingLibrary");
diff --git a/src/plugins/projectexplorer/projectconfigurationaspects.cpp b/src/plugins/projectexplorer/projectconfigurationaspects.cpp
index 794a61efe0c..6c4d4c1a348 100644
--- a/src/plugins/projectexplorer/projectconfigurationaspects.cpp
+++ b/src/plugins/projectexplorer/projectconfigurationaspects.cpp
@@ -394,6 +394,11 @@ void BaseBoolAspect::toMap(QVariantMap &data) const
data.insert(settingsKey(), d->m_value);
}
+QCheckBox *BaseBoolAspect::checkBox() const
+{
+ return d->m_checkBox;
+}
+
bool BaseBoolAspect::defaultValue() const
{
return d->m_defaultValue;
diff --git a/src/plugins/projectexplorer/projectconfigurationaspects.h b/src/plugins/projectexplorer/projectconfigurationaspects.h
index 90bdcbc2bbb..540ae635e8b 100644
--- a/src/plugins/projectexplorer/projectconfigurationaspects.h
+++ b/src/plugins/projectexplorer/projectconfigurationaspects.h
@@ -33,6 +33,10 @@
#include <memory>
+QT_BEGIN_NAMESPACE
+class QCheckBox;
+QT_END_NAMESPACE
+
namespace ProjectExplorer {
namespace Internal {
@@ -64,6 +68,9 @@ public:
void fromMap(const QVariantMap &map) override;
void toMap(QVariantMap &map) const override;
+protected:
+ QCheckBox *checkBox() const;
+
private:
std::unique_ptr<Internal::BaseBoolAspectPrivate> d;
};
diff --git a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp
index 06bc76a0ea4..7acbaccccb9 100644
--- a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp
+++ b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp
@@ -45,6 +45,7 @@
#include <projectexplorer/target.h>
#include <projectexplorer/toolchain.h>
+#include <qtsupport/qtbuildaspects.h>
#include <qtsupport/qtkitinformation.h>
#include <utils/mimetypes/mimedatabase.h>
@@ -87,6 +88,11 @@ QbsBuildConfiguration::QbsBuildConfiguration(Target *target, Core::Id id)
connect(m_configurationName, &BaseStringAspect::changed,
this, &BuildConfiguration::buildDirectoryChanged);
+ const auto qmlDebuggingAspect = addAspect<QtSupport::QmlDebuggingAspect>();
+ qmlDebuggingAspect->setKit(target->kit());
+ connect(qmlDebuggingAspect, &QtSupport::QmlDebuggingAspect::changed,
+ this, &QbsBuildConfiguration::qbsConfigurationChanged);
+
connect(this, &BuildConfiguration::environmentChanged,
this, &QbsBuildConfiguration::triggerReparseIfActive);
connect(this, &BuildConfiguration::buildDirectoryChanged,
@@ -144,11 +150,11 @@ void QbsBuildConfiguration::initialize()
+ '_' + kitHash.toHex().left(16);
m_configurationName->setValue(uniqueConfigName);
+ if (initialBuildType() == Release)
+ aspect<QtSupport::QmlDebuggingAspect>()->setDefaultValue(false);
BuildStepList *buildSteps = stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
auto bs = new QbsBuildStep(buildSteps);
- if (initialBuildType() == Release)
- bs->setQmlDebuggingEnabled(false);
bs->setQbsConfiguration(bd);
buildSteps->appendStep(bs);
@@ -369,6 +375,11 @@ QString QbsBuildConfiguration::equivalentCommandLine(const BuildStep *buildStep)
return commandLine.arguments();
}
+bool QbsBuildConfiguration::isQmlDebuggingEnabled() const
+{
+ return aspect<QtSupport::QmlDebuggingAspect>()->value();
+}
+
// ---------------------------------------------------------------------------
// QbsBuildConfigurationFactory:
// ---------------------------------------------------------------------------
diff --git a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.h b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.h
index a19c52fd997..01edafc3218 100644
--- a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.h
+++ b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.h
@@ -44,6 +44,11 @@ class QbsBuildConfiguration : public ProjectExplorer::BuildConfiguration
{
Q_OBJECT
+ // used in DebuggerRunConfigurationAspect
+ Q_PROPERTY(bool linkQmlDebuggingLibrary
+ READ isQmlDebuggingEnabled
+ NOTIFY qbsConfigurationChanged)
+
friend class ProjectExplorer::BuildConfigurationFactory;
QbsBuildConfiguration(ProjectExplorer::Target *target, Core::Id id);
~QbsBuildConfiguration() final;
@@ -69,6 +74,8 @@ public:
QString configurationName() const;
QString equivalentCommandLine(const ProjectExplorer::BuildStep *buildStep) const;
+ bool isQmlDebuggingEnabled() const;
+
signals:
void qbsConfigurationChanged();
diff --git a/src/plugins/qbsprojectmanager/qbsbuildstep.cpp b/src/plugins/qbsprojectmanager/qbsbuildstep.cpp
index d86a4c68d8e..45d9b4f63db 100644
--- a/src/plugins/qbsprojectmanager/qbsbuildstep.cpp
+++ b/src/plugins/qbsprojectmanager/qbsbuildstep.cpp
@@ -43,7 +43,6 @@
#include <utils/pathchooser.h>
#include <utils/qtcassert.h>
#include <utils/qtcprocess.h>
-#include <utils/utilsicons.h>
#include <QBoxLayout>
#include <QCheckBox>
@@ -82,7 +81,6 @@ public:
private:
void updateState();
- void updateQmlDebuggingOption();
void updatePropertyEdit(const QVariantMap &data);
void changeBuildVariant(int);
@@ -98,9 +96,6 @@ private:
QbsBuildStep *qbsStep() const;
- // QML debugging:
- void linkQmlDebuggingLibraryChecked(bool checked);
-
bool validateProperties(Utils::FancyLineEdit *edit, QString *errorMessage);
class Property
@@ -127,11 +122,8 @@ private:
QComboBox *buildVariantComboBox;
QSpinBox *jobSpinBox;
- QCheckBox *qmlDebuggingLibraryCheckBox;
FancyLineEdit *propertyEdit;
PathChooser *installDirChooser;
- QLabel *qmlDebuggingWarningIcon;
- QLabel *qmlDebuggingWarningText;
QCheckBox *keepGoingCheckBox;
QCheckBox *showCommandLinesCheckBox;
QCheckBox *forceProbesCheckBox;
@@ -146,8 +138,7 @@ private:
// --------------------------------------------------------------------
QbsBuildStep::QbsBuildStep(ProjectExplorer::BuildStepList *bsl) :
- ProjectExplorer::BuildStep(bsl, Constants::QBS_BUILDSTEP_ID),
- m_enableQmlDebugging(QtSupport::BaseQtVersion::isQmlDebuggingSupported(target()->kit()))
+ ProjectExplorer::BuildStep(bsl, Constants::QBS_BUILDSTEP_ID)
{
setDisplayName(tr("Qbs Build"));
setQbsConfiguration(QVariantMap());
@@ -222,7 +213,7 @@ QVariantMap QbsBuildStep::qbsConfiguration(VariableHandling variableHandling) co
{
QVariantMap config = m_qbsConfiguration;
config.insert(Constants::QBS_FORCE_PROBES_KEY, m_forceProbes);
- if (m_enableQmlDebugging)
+ if (static_cast<QbsBuildConfiguration *>(buildConfiguration())->isQmlDebuggingEnabled())
config.insert(Constants::QBS_CONFIG_QUICK_DEBUG_KEY, true);
else
config.remove(Constants::QBS_CONFIG_QUICK_DEBUG_KEY);
@@ -278,7 +269,6 @@ int QbsBuildStep::maxJobs() const
}
static QString forceProbesKey() { return QLatin1String("Qbs.forceProbesKey"); }
-static QString enableQmlDebuggingKey() { return QLatin1String("Qbs.enableQmlDebuggingKey"); }
bool QbsBuildStep::fromMap(const QVariantMap &map)
{
@@ -292,7 +282,6 @@ bool QbsBuildStep::fromMap(const QVariantMap &map)
m_install = map.value(QBS_INSTALL, true).toBool();
m_cleanInstallDir = map.value(QBS_CLEAN_INSTALL_ROOT).toBool();
m_forceProbes = map.value(forceProbesKey()).toBool();
- m_enableQmlDebugging = map.value(enableQmlDebuggingKey()).toBool();
return true;
}
@@ -306,7 +295,6 @@ QVariantMap QbsBuildStep::toMap() const
map.insert(QBS_INSTALL, m_install);
map.insert(QBS_CLEAN_INSTALL_ROOT, m_cleanInstallDir);
map.insert(forceProbesKey(), m_forceProbes);
- map.insert(enableQmlDebuggingKey(), m_enableQmlDebugging);
return map;
}
@@ -532,7 +520,8 @@ QbsBuildStepConfigWidget::QbsBuildStepConfigWidget(QbsBuildStep *step) :
{
connect(step, &ProjectConfiguration::displayNameChanged,
this, &QbsBuildStepConfigWidget::updateState);
- connect(step, &QbsBuildStep::qbsConfigurationChanged,
+ connect(static_cast<QbsBuildConfiguration *>(step->buildConfiguration()),
+ &QbsBuildConfiguration::qbsConfigurationChanged,
this, &QbsBuildStepConfigWidget::updateState);
connect(step, &QbsBuildStep::qbsBuildOptionsChanged,
this, &QbsBuildStepConfigWidget::updateState);
@@ -563,22 +552,9 @@ QbsBuildStepConfigWidget::QbsBuildStepConfigWidget(QbsBuildStep *step) :
horizontalLayout_6->addWidget(jobSpinBox);
horizontalLayout_6->addItem(new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum));
- qmlDebuggingLibraryCheckBox = new QCheckBox(this);
- qmlDebuggingWarningIcon = new QLabel(this);
- qmlDebuggingWarningText = new QLabel(this);
-
- auto qmlDebuggingLayout = new QHBoxLayout();
- qmlDebuggingLayout->addWidget(qmlDebuggingLibraryCheckBox);
- qmlDebuggingLayout->addWidget(qmlDebuggingWarningIcon);
- qmlDebuggingLayout->addWidget(qmlDebuggingWarningText);
- qmlDebuggingLayout->addItem(new QSpacerItem(40, 5, QSizePolicy::Expanding, QSizePolicy::Minimum));
-
propertyEdit = new FancyLineEdit(this);
-
keepGoingCheckBox = new QCheckBox(this);
-
showCommandLinesCheckBox = new QCheckBox(this);
-
forceProbesCheckBox = new QCheckBox(this);
auto flagsLayout = new QHBoxLayout();
@@ -610,7 +586,6 @@ QbsBuildStepConfigWidget::QbsBuildStepConfigWidget(QbsBuildStep *step) :
auto formLayout = new QFormLayout(this);
formLayout->addRow(tr("Build variant:"), horizontalLayout_5);
formLayout->addRow(tr("Parallel jobs:"), horizontalLayout_6);
- formLayout->addRow(tr("Enable QML debugging:"), qmlDebuggingLayout);
formLayout->addRow(tr("Properties:"), propertyEdit);
formLayout->addRow(tr("Flags:"), flagsLayout);
formLayout->addRow(tr("Installation flags:"), installLayout);
@@ -618,8 +593,7 @@ QbsBuildStepConfigWidget::QbsBuildStepConfigWidget(QbsBuildStep *step) :
formLayout->addRow(tr("Equivalent command line:"), commandLineTextEdit);
QWidget::setTabOrder(buildVariantComboBox, jobSpinBox);
- QWidget::setTabOrder(jobSpinBox, qmlDebuggingLibraryCheckBox);
- QWidget::setTabOrder(qmlDebuggingLibraryCheckBox, propertyEdit);
+ QWidget::setTabOrder(jobSpinBox, propertyEdit);
QWidget::setTabOrder(propertyEdit, keepGoingCheckBox);
QWidget::setTabOrder(keepGoingCheckBox, showCommandLinesCheckBox);
QWidget::setTabOrder(showCommandLinesCheckBox, forceProbesCheckBox);
@@ -647,8 +621,6 @@ QbsBuildStepConfigWidget::QbsBuildStepConfigWidget(QbsBuildStep *step) :
return validateProperties(edit, errorMessage);
});
- qmlDebuggingWarningIcon->setPixmap(Utils::Icons::WARNING.pixmap());
-
connect(buildVariantComboBox,
QOverload<int>::of(&QComboBox::currentIndexChanged),
this, &QbsBuildStepConfigWidget::changeBuildVariant);
@@ -668,8 +640,6 @@ QbsBuildStepConfigWidget::QbsBuildStepConfigWidget(QbsBuildStep *step) :
&QbsBuildStepConfigWidget::changeInstallDir);
connect(forceProbesCheckBox, &QCheckBox::toggled, this,
&QbsBuildStepConfigWidget::changeForceProbes);
- connect(qmlDebuggingLibraryCheckBox, &QAbstractButton::toggled,
- this, &QbsBuildStepConfigWidget::linkQmlDebuggingLibraryChecked);
updateState();
}
@@ -683,43 +653,27 @@ void QbsBuildStepConfigWidget::updateState()
cleanInstallRootCheckBox->setChecked(qbsStep()->cleanInstallRoot());
forceProbesCheckBox->setChecked(qbsStep()->forceProbes());
updatePropertyEdit(qbsStep()->qbsConfiguration(QbsBuildStep::PreserveVariables));
- qmlDebuggingLibraryCheckBox->setChecked(qbsStep()->isQmlDebuggingEnabled());
installDirChooser->setFileName(qbsStep()->installRoot(QbsBuildStep::PreserveVariables));
defaultInstallDirCheckBox->setChecked(!qbsStep()->hasCustomInstallRoot());
}
- updateQmlDebuggingOption();
-
const QString buildVariant = qbsStep()->buildVariant();
const int idx = (buildVariant == Constants::QBS_VARIANT_DEBUG) ? 0 : 1;
buildVariantComboBox->setCurrentIndex(idx);
- QString command = static_cast<QbsBuildConfiguration *>(step()->buildConfiguration())
- ->equivalentCommandLine(qbsStep());
+ const auto qbsBuildConfig = static_cast<QbsBuildConfiguration *>(step()->buildConfiguration());
+ QString command = qbsBuildConfig->equivalentCommandLine(qbsStep());
for (int i = 0; i < m_propertyCache.count(); ++i) {
command += ' ' + m_propertyCache.at(i).name + ':' + m_propertyCache.at(i).effectiveValue;
}
- if (qbsStep()->isQmlDebuggingEnabled())
+ if (qbsBuildConfig->isQmlDebuggingEnabled())
command.append(' ').append(Constants::QBS_CONFIG_QUICK_DEBUG_KEY).append(":true");
commandLineTextEdit->setPlainText(command);
setSummaryText(tr("<b>Qbs:</b> %1").arg(command));
}
-void QbsBuildStepConfigWidget::updateQmlDebuggingOption()
-{
- QString warningText;
- bool supported = QtSupport::BaseQtVersion::isQmlDebuggingSupported(step()->target()->kit(),
- &warningText);
- qmlDebuggingLibraryCheckBox->setEnabled(supported);
-
- if (supported && qbsStep()->isQmlDebuggingEnabled())
- warningText = tr("Might make your application vulnerable. Only use in a safe environment.");
-
- qmlDebuggingWarningText->setText(warningText);
- qmlDebuggingWarningIcon->setVisible(!warningText.isEmpty());
-}
void QbsBuildStepConfigWidget::updatePropertyEdit(const QVariantMap &data)
{
@@ -852,13 +806,6 @@ QbsBuildStep *QbsBuildStepConfigWidget::qbsStep() const
return static_cast<QbsBuildStep *>(step());
}
-void QbsBuildStepConfigWidget::linkQmlDebuggingLibraryChecked(bool checked)
-{
- m_ignoreChange = true;
- qbsStep()->setQmlDebuggingEnabled(checked);
- m_ignoreChange = false;
-}
-
bool QbsBuildStepConfigWidget::validateProperties(Utils::FancyLineEdit *edit, QString *errorMessage)
{
Utils::QtcProcess::SplitError err;
diff --git a/src/plugins/qbsprojectmanager/qbsbuildstep.h b/src/plugins/qbsprojectmanager/qbsbuildstep.h
index 5cd6199aa57..dc85d255a58 100644
--- a/src/plugins/qbsprojectmanager/qbsbuildstep.h
+++ b/src/plugins/qbsprojectmanager/qbsbuildstep.h
@@ -44,10 +44,6 @@ class QbsBuildStep : public ProjectExplorer::BuildStep
{
Q_OBJECT
- // used in DebuggerRunConfigurationAspect
- Q_PROPERTY(bool linkQmlDebuggingLibrary READ isQmlDebuggingEnabled
- WRITE setQmlDebuggingEnabled NOTIFY qbsConfigurationChanged)
-
public:
enum VariableHandling
{
@@ -73,12 +69,6 @@ public:
void setForceProbes(bool force) { m_forceProbes = force; emit qbsConfigurationChanged(); }
bool forceProbes() const { return m_forceProbes; }
- void setQmlDebuggingEnabled(bool debug) {
- m_enableQmlDebugging = debug;
- emit qbsConfigurationChanged();
- }
- bool isQmlDebuggingEnabled() const { return m_enableQmlDebugging; }
-
QbsBuildSystem *qbsBuildSystem() const;
signals:
@@ -129,7 +119,6 @@ private:
bool m_install = true;
bool m_cleanInstallDir = false;
bool m_forceProbes = false;
- bool m_enableQmlDebugging;
// Temporary data:
QStringList m_changedFiles;
diff --git a/src/plugins/qtsupport/CMakeLists.txt b/src/plugins/qtsupport/CMakeLists.txt
index 80c54bd06fb..0f032ac76c6 100644
--- a/src/plugins/qtsupport/CMakeLists.txt
+++ b/src/plugins/qtsupport/CMakeLists.txt
@@ -13,6 +13,7 @@ add_qtc_plugin(QtSupport
profilereader.cpp profilereader.h
qmldumptool.cpp qmldumptool.h
qscxmlcgenerator.cpp qscxmlcgenerator.h
+ qtbuildaspects.cpp qtbuildaspects.h
qtconfigwidget.cpp qtconfigwidget.h
qtcppkitinfo.cpp qtcppkitinfo.h
qtkitinformation.cpp qtkitinformation.h
diff --git a/src/plugins/qtsupport/baseqtversion.cpp b/src/plugins/qtsupport/baseqtversion.cpp
index 23fe51d5440..54811a92fa4 100644
--- a/src/plugins/qtsupport/baseqtversion.cpp
+++ b/src/plugins/qtsupport/baseqtversion.cpp
@@ -1937,7 +1937,7 @@ bool BaseQtVersion::isSubProject(const FilePath &filePath) const
return false;
}
-bool BaseQtVersion::isQmlDebuggingSupported(Kit *k, QString *reason)
+bool BaseQtVersion::isQmlDebuggingSupported(const Kit *k, QString *reason)
{
QTC_ASSERT(k, return false);
BaseQtVersion *version = QtKitAspect::qtVersion(k);
diff --git a/src/plugins/qtsupport/baseqtversion.h b/src/plugins/qtsupport/baseqtversion.h
index 80489d1bb9d..ce50c34ba40 100644
--- a/src/plugins/qtsupport/baseqtversion.h
+++ b/src/plugins/qtsupport/baseqtversion.h
@@ -174,7 +174,7 @@ public:
/// warnings and finally info items.
ProjectExplorer::Tasks reportIssues(const QString &proFile, const QString &buildDir) const;
- static bool isQmlDebuggingSupported(ProjectExplorer::Kit *k, QString *reason = nullptr);
+ static bool isQmlDebuggingSupported(const ProjectExplorer::Kit *k, QString *reason = nullptr);
bool isQmlDebuggingSupported(QString *reason = nullptr) const;
static bool isQtQuickCompilerSupported(ProjectExplorer::Kit *k, QString *reason = nullptr);
bool isQtQuickCompilerSupported(QString *reason = nullptr) const;
diff --git a/src/plugins/qtsupport/qtbuildaspects.cpp b/src/plugins/qtsupport/qtbuildaspects.cpp
new file mode 100644
index 00000000000..5c8a400499b
--- /dev/null
+++ b/src/plugins/qtsupport/qtbuildaspects.cpp
@@ -0,0 +1,75 @@
+/****************************************************************************
+**
+** Copyright (C) 2019 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 "qtbuildaspects.h"
+
+#include "baseqtversion.h"
+
+#include <projectexplorer/kitmanager.h>
+#include <utils/utilsicons.h>
+
+#include <QCheckBox>
+#include <QLabel>
+#include <QLayout>
+
+using namespace ProjectExplorer;
+
+namespace QtSupport {
+
+QmlDebuggingAspect::QmlDebuggingAspect() : BaseBoolAspect("EnableQmlDebugging")
+{
+ setDefaultValue(true);
+ setLabel(tr("Enable QML debugging and profiling"));
+}
+
+void QmlDebuggingAspect::addToLayout(LayoutBuilder &builder)
+{
+ BaseBoolAspect::addToLayout(builder);
+ const auto warningIconLabel = new QLabel;
+ warningIconLabel->setAlignment(Qt::AlignTop);
+ warningIconLabel->setPixmap(Utils::Icons::WARNING.pixmap());
+ const auto warningTextLabel = new QLabel;
+ warningTextLabel->setAlignment(Qt::AlignTop);
+ builder.startNewRow().addItems(QString(), warningIconLabel, warningTextLabel);
+ const auto changeHandler = [this, warningIconLabel, warningTextLabel] {
+ QString warningText;
+ const bool supported = m_kit && BaseQtVersion::isQmlDebuggingSupported(m_kit, &warningText);
+ if (!supported) {
+ setValue(false);
+ } else if (value()) {
+ warningText = tr("Might make your application vulnerable.<br/>"
+ "Only use in a safe environment.");
+ }
+ warningTextLabel->setText(warningText);
+ checkBox()->setVisible(supported);
+ warningIconLabel->setVisible(supported && !warningText.isEmpty());
+ warningTextLabel->setVisible(supported);
+ };
+ connect(KitManager::instance(), &KitManager::kitsChanged, builder.layout(), changeHandler);
+ connect(this, &QmlDebuggingAspect::changed, builder.layout(), changeHandler);
+ changeHandler();
+}
+
+} // namespace QtSupport
diff --git a/src/plugins/qtsupport/qtbuildaspects.h b/src/plugins/qtsupport/qtbuildaspects.h
new file mode 100644
index 00000000000..20c29fc8952
--- /dev/null
+++ b/src/plugins/qtsupport/qtbuildaspects.h
@@ -0,0 +1,48 @@
+/****************************************************************************
+**
+** Copyright (C) 2019 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.
+**
+****************************************************************************/
+
+#pragma once
+
+#include "qtsupport_global.h"
+
+#include <projectexplorer/projectconfigurationaspects.h>
+
+namespace QtSupport {
+
+class QTSUPPORT_EXPORT QmlDebuggingAspect : public ProjectExplorer::BaseBoolAspect
+{
+ Q_OBJECT
+public:
+ QmlDebuggingAspect();
+
+ void setKit(const ProjectExplorer::Kit *kit) { m_kit = kit; }
+
+private:
+ void addToLayout(ProjectExplorer::LayoutBuilder &builder) override;
+
+ const ProjectExplorer::Kit *m_kit = nullptr;
+};
+
+} // namespace QtSupport
diff --git a/src/plugins/qtsupport/qtsupport.pro b/src/plugins/qtsupport/qtsupport.pro
index eb0c78c8804..5cdbac964a9 100644
--- a/src/plugins/qtsupport/qtsupport.pro
+++ b/src/plugins/qtsupport/qtsupport.pro
@@ -11,6 +11,7 @@ HEADERS += \
codegensettings.h \
codegensettingspage.h \
gettingstartedwelcomepage.h \
+ qtbuildaspects.h \
qtcppkitinfo.h \
qtprojectimporter.h \
qtsupportplugin.h \
@@ -39,6 +40,7 @@ SOURCES += \
codegensettings.cpp \
codegensettingspage.cpp \
gettingstartedwelcomepage.cpp \
+ qtbuildaspects.cpp \
qtcppkitinfo.cpp \
qtprojectimporter.cpp \
qtsupportplugin.cpp \
diff --git a/src/plugins/qtsupport/qtsupport.qbs b/src/plugins/qtsupport/qtsupport.qbs
index 40ff98448c8..ebb0838c3c6 100644
--- a/src/plugins/qtsupport/qtsupport.qbs
+++ b/src/plugins/qtsupport/qtsupport.qbs
@@ -66,6 +66,8 @@ Project {
"codegensettingspage.cpp",
"codegensettingspage.h",
"codegensettingspagewidget.ui",
+ "qtbuildaspects.cpp",
+ "qtbuildaspects.h",
"qtconfigwidget.cpp",
"qtconfigwidget.h",
"qtcppkitinfo.cpp",