From 17b761ce86e9fdfadff49b35858533d06ba0d05b Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Wed, 15 Nov 2017 15:43:28 +0100 Subject: [PATCH 01/16] QmlDesigner: Ignore indentation for multi line expressions If expressions cover multiple lines they might be altered by the indenter. This means the expression differs slighlty in white spaces. This did assert before, but is a false alarm. For now we just treat the white spaces in th beginning of the line as a special case. Eventually we have to fully normalize expressions. Task-number: QTCREATORBUG-19284 Change-Id: Icc57ef08d1c889deded7cca08ccfba66f09f3115 Reviewed-by: Eike Ziller Reviewed-by: Tim Jenssen --- .../designercore/model/texttomodelmerger.cpp | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp index 47ce2bad158..6255fd85fd3 100644 --- a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp +++ b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp @@ -55,6 +55,7 @@ #include #include #include +#include using namespace LanguageUtils; using namespace QmlJS; @@ -330,6 +331,19 @@ static inline QString extractComponentFromQml(const QString &source) return result; } +static QString normalizeJavaScriptExpression(const QString &expression) +{ + static const QRegularExpression regExp("\\n(\\s)+"); + + QString result = expression; + return result.replace(regExp, "\n"); +} + +static bool compareJavaScriptExpression(const QString &expression1, const QString &expression2) +{ + return normalizeJavaScriptExpression(expression1) == normalizeJavaScriptExpression(expression2); +} + } // anonymous namespace namespace QmlDesigner { @@ -1379,7 +1393,7 @@ void TextToModelMerger::syncExpressionProperty(AbstractProperty &modelProperty, { if (modelProperty.isBindingProperty()) { BindingProperty bindingProperty = modelProperty.toBindingProperty(); - if (bindingProperty.expression() != javascript + if (!compareJavaScriptExpression(bindingProperty.expression(), javascript) || astType.isEmpty() == bindingProperty.isDynamic() || astType != bindingProperty.dynamicTypeName()) { differenceHandler.bindingExpressionsDiffer(bindingProperty, javascript, astType); @@ -1574,7 +1588,7 @@ void ModelValidator::bindingExpressionsDiffer(BindingProperty &modelProperty, Q_UNUSED(modelProperty) Q_UNUSED(javascript) Q_UNUSED(astType) - Q_ASSERT(modelProperty.expression() == javascript); + Q_ASSERT(compareJavaScriptExpression(modelProperty.expression(), javascript)); Q_ASSERT(modelProperty.dynamicTypeName() == astType); Q_ASSERT(0); } From ac1ce65a386aae6db2949b8684c9ea65fb946c78 Mon Sep 17 00:00:00 2001 From: Filipe Azevedo Date: Wed, 15 Nov 2017 13:22:45 +0100 Subject: [PATCH 02/16] Add isRemoteRunning() as isRunning() only apply to local processes Change-Id: I75d726cea160c557374051db3ba413d3dd1a41a2 Reviewed-by: Ulf Hermann --- src/plugins/projectexplorer/applicationlauncher.cpp | 11 +++++++++++ src/plugins/projectexplorer/applicationlauncher.h | 1 + 2 files changed, 12 insertions(+) diff --git a/src/plugins/projectexplorer/applicationlauncher.cpp b/src/plugins/projectexplorer/applicationlauncher.cpp index da295063257..f0d84760c54 100644 --- a/src/plugins/projectexplorer/applicationlauncher.cpp +++ b/src/plugins/projectexplorer/applicationlauncher.cpp @@ -87,6 +87,7 @@ public: void bringToForeground(); qint64 applicationPID() const; bool isRunning() const; + bool isRemoteRunning() const; // Remote void doReportError(const QString &message); @@ -220,6 +221,11 @@ bool ApplicationLauncher::isRunning() const return d->isRunning(); } +bool ApplicationLauncher::isRemoteRunning() const +{ + return d->isRemoteRunning(); +} + bool ApplicationLauncherPrivate::isRunning() const { if (m_currentMode == ApplicationLauncher::Gui) @@ -227,6 +233,11 @@ bool ApplicationLauncherPrivate::isRunning() const return m_consoleProcess.isRunning(); } +bool ApplicationLauncherPrivate::isRemoteRunning() const +{ + return m_isLocal ? false : m_deviceProcess->state() == QProcess::Running; +} + ProcessHandle ApplicationLauncher::applicationPID() const { return ProcessHandle(d->applicationPID()); diff --git a/src/plugins/projectexplorer/applicationlauncher.h b/src/plugins/projectexplorer/applicationlauncher.h index a8570dbbaab..3c6178f815f 100644 --- a/src/plugins/projectexplorer/applicationlauncher.h +++ b/src/plugins/projectexplorer/applicationlauncher.h @@ -61,6 +61,7 @@ public: void stop(); bool isRunning() const; Utils::ProcessHandle applicationPID() const; + bool isRemoteRunning() const; QString errorString() const; QProcess::ProcessError processError() const; From c1d3e22511498a709131afa948d3a41563f58063 Mon Sep 17 00:00:00 2001 From: hjk Date: Thu, 16 Nov 2017 12:29:25 +0100 Subject: [PATCH 03/16] Debugger: Do not create a new terminal when attaching ... to a running application that already has one. Task-number: QTCREATORBUG-19302 Change-Id: Id83f840408c26f3db85dbe30dadac9949ce6b660 Reviewed-by: Orgad Shaneh --- src/plugins/debugger/debuggerplugin.cpp | 2 +- src/plugins/debugger/debuggerruncontrol.cpp | 4 ++-- src/plugins/debugger/debuggerruncontrol.h | 3 ++- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp index 1aeb3f68130..d1af5e3c4d8 100644 --- a/src/plugins/debugger/debuggerplugin.cpp +++ b/src/plugins/debugger/debuggerplugin.cpp @@ -2103,7 +2103,7 @@ void DebuggerPlugin::attachExternalApplication(RunControl *rc) ProcessHandle pid = rc->applicationProcessHandle(); RunConfiguration *runConfig = rc->runConfiguration(); auto runControl = new RunControl(runConfig, ProjectExplorer::Constants::DEBUG_RUN_MODE); - auto debugger = new DebuggerRunTool(runControl, guessKitFromAbis({rc->abi()})); + auto debugger = new DebuggerRunTool(runControl, guessKitFromAbis({rc->abi()}), false); debugger->setAttachPid(pid); debugger->setRunControlName(tr("Process %1").arg(pid.pid())); debugger->setStartMode(AttachExternal); diff --git a/src/plugins/debugger/debuggerruncontrol.cpp b/src/plugins/debugger/debuggerruncontrol.cpp index b873bf21060..a5ba691137b 100644 --- a/src/plugins/debugger/debuggerruncontrol.cpp +++ b/src/plugins/debugger/debuggerruncontrol.cpp @@ -794,7 +794,7 @@ Internal::TerminalRunner *DebuggerRunTool::terminalRunner() const return d->terminalRunner; } -DebuggerRunTool::DebuggerRunTool(RunControl *runControl, Kit *kit) +DebuggerRunTool::DebuggerRunTool(RunControl *runControl, Kit *kit, bool allowTerminal) : RunWorker(runControl), d(new DebuggerRunToolPrivate) { setDisplayName("DebuggerRunTool"); @@ -838,7 +838,7 @@ DebuggerRunTool::DebuggerRunTool(RunControl *runControl, Kit *kit) // Normalize to work around QTBUG-17529 (QtDeclarative fails with 'File name case mismatch'...) m_runParameters.inferior.workingDirectory = FileUtils::normalizePathName(m_runParameters.inferior.workingDirectory); - setUseTerminal(m_runParameters.inferior.runMode == ApplicationLauncher::Console); + setUseTerminal(allowTerminal && m_runParameters.inferior.runMode == ApplicationLauncher::Console); } const QByteArray envBinary = qgetenv("QTC_DEBUGGER_PATH"); diff --git a/src/plugins/debugger/debuggerruncontrol.h b/src/plugins/debugger/debuggerruncontrol.h index 1795b9bf68f..5ab3e8efa8e 100644 --- a/src/plugins/debugger/debuggerruncontrol.h +++ b/src/plugins/debugger/debuggerruncontrol.h @@ -47,7 +47,8 @@ class DEBUGGER_EXPORT DebuggerRunTool : public ProjectExplorer::RunWorker public: explicit DebuggerRunTool(ProjectExplorer::RunControl *runControl, - ProjectExplorer::Kit *kit = nullptr); + ProjectExplorer::Kit *kit = nullptr, + bool allowTerminal = true); ~DebuggerRunTool(); Internal::DebuggerEngine *engine() const { return m_engine; } From a02ee529ef3f172556b8b3fb73683959bedf8e1d Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Thu, 16 Nov 2017 21:59:18 +0200 Subject: [PATCH 04/16] Valgrind: Fix callgrind parsing with git version Commit db860c7cdce8765f8c4ec28127860c8e97ba34ab added a format marker to the file. First line is now: `# callgrind format` Task-number: QTCREATORBUG-19004 Change-Id: I2f6ed81044fa0d675a02b9634d8ee8e3ea1da6e5 Reviewed-by: hjk --- src/plugins/valgrind/callgrind/callgrindparser.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/plugins/valgrind/callgrind/callgrindparser.cpp b/src/plugins/valgrind/callgrind/callgrindparser.cpp index fec9f52c5c3..41254c3ec43 100644 --- a/src/plugins/valgrind/callgrind/callgrindparser.cpp +++ b/src/plugins/valgrind/callgrind/callgrindparser.cpp @@ -298,7 +298,9 @@ void Parser::Private::parseHeader(QIODevice *device) // now that we're done checking if we're done (heh) with the header, parse the address // and cost column descriptions. speed is unimportant here. - if (line.startsWith("positions: ")) { + if (line.startsWith('#')) { + continue; + } else if (line.startsWith("positions: ")) { QString values = getValue(line, 11); data->setPositions(values.split(QLatin1Char(' '), QString::SkipEmptyParts)); addressValuesCount = data->positions().count(); From 951f0e0bbd76230c97b054fb19ab23464f8f77be Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Thu, 16 Nov 2017 20:41:58 +0200 Subject: [PATCH 05/16] Valgrind: Fix cyclic connect Editing the widget triggers rawPathChanged(), which calls setValgrindExecutable, which emits valgrindExecutableChanged(), which calls setPath on the widget. No other path reaches any of these functions. This causes the cursor to jump to the end, so if you want to change 'valgrind' to '/usr/local/bin/valgrind' you have to jump back after each character. Removed the now unused signal. Change-Id: Iaf4e902fb9a42975e9ada6662b7a64e53fab5cad Reviewed-by: hjk --- src/plugins/valgrind/valgrindconfigwidget.cpp | 2 -- src/plugins/valgrind/valgrindsettings.cpp | 5 +---- src/plugins/valgrind/valgrindsettings.h | 1 - 3 files changed, 1 insertion(+), 7 deletions(-) diff --git a/src/plugins/valgrind/valgrindconfigwidget.cpp b/src/plugins/valgrind/valgrindconfigwidget.cpp index 37c1ad67a58..11352b30885 100644 --- a/src/plugins/valgrind/valgrindconfigwidget.cpp +++ b/src/plugins/valgrind/valgrindconfigwidget.cpp @@ -62,8 +62,6 @@ ValgrindConfigWidget::ValgrindConfigWidget(ValgrindBaseSettings *settings, connect(m_ui->valgrindExeChooser, &Utils::PathChooser::rawPathChanged, m_settings, &ValgrindBaseSettings::setValgrindExecutable); - connect(m_settings, &ValgrindBaseSettings::valgrindExecutableChanged, - m_ui->valgrindExeChooser, &Utils::PathChooser::setPath); connect(m_ui->smcDetectionComboBox, static_cast(&QComboBox::currentIndexChanged), m_settings, &ValgrindBaseSettings::setSelfModifyingCodeDetection); diff --git a/src/plugins/valgrind/valgrindsettings.cpp b/src/plugins/valgrind/valgrindsettings.cpp index a494dbae3e1..08e2b627107 100644 --- a/src/plugins/valgrind/valgrindsettings.cpp +++ b/src/plugins/valgrind/valgrindsettings.cpp @@ -143,10 +143,7 @@ void ValgrindBaseSettings::toMap(QVariantMap &map) const void ValgrindBaseSettings::setValgrindExecutable(const QString &valgrindExecutable) { - if (m_valgrindExecutable != valgrindExecutable) { - m_valgrindExecutable = valgrindExecutable; - emit valgrindExecutableChanged(valgrindExecutable); - } + m_valgrindExecutable = valgrindExecutable; } void ValgrindBaseSettings::setSelfModifyingCodeDetection(int smcDetection) diff --git a/src/plugins/valgrind/valgrindsettings.h b/src/plugins/valgrind/valgrindsettings.h index b0d62e83172..4ec154158e0 100644 --- a/src/plugins/valgrind/valgrindsettings.h +++ b/src/plugins/valgrind/valgrindsettings.h @@ -78,7 +78,6 @@ public: void setSelfModifyingCodeDetection(int); signals: - void valgrindExecutableChanged(const QString &); void selfModifyingCodeDetectionChanged(int); private: From b289a3f87a5286b9e2e4fc0c3a1da0852bdac2c5 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Tue, 14 Nov 2017 14:19:52 +0100 Subject: [PATCH 06/16] QbsProjectManager: Run updateAfterParse() also on add/remove file Adding and removing files via the project tree is essentially the same thing as doing it by editing a project file, except that no reparsing is necessary. Task-number: QTCREATORBUG-19292 Change-Id: Idb1bcf0e183f34d4de513f69f974e45ac91afeeb Reviewed-by: Nikolai Kosjar Reviewed-by: Christian Kandeler --- src/plugins/qbsprojectmanager/qbsproject.cpp | 10 +++++++--- src/plugins/qbsprojectmanager/qbsproject.h | 1 + 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/plugins/qbsprojectmanager/qbsproject.cpp b/src/plugins/qbsprojectmanager/qbsproject.cpp index eb3191e60e3..f82715addea 100644 --- a/src/plugins/qbsprojectmanager/qbsproject.cpp +++ b/src/plugins/qbsprojectmanager/qbsproject.cpp @@ -275,7 +275,7 @@ bool QbsProject::addFilesToProduct(const QStringList &filePaths, } if (notAdded->count() != filePaths.count()) { m_projectData = m_qbsProject.projectData(); - rebuildProjectTree(); + delayedUpdateAfterParse(); } return notAdded->isEmpty(); } @@ -302,8 +302,7 @@ bool QbsProject::removeFilesFromProduct(const QStringList &filePaths, } if (notRemoved->count() != filePaths.count()) { m_projectData = m_qbsProject.projectData(); - rebuildProjectTree(); - emit fileListChanged(); + delayedUpdateAfterParse(); } return notRemoved->isEmpty(); } @@ -472,6 +471,11 @@ void QbsProject::updateAfterParse() emit fileListChanged(); } +void QbsProject::delayedUpdateAfterParse() +{ + QTimer::singleShot(0, this, &QbsProject::updateAfterParse); +} + void QbsProject::updateProjectNodes() { OpTimer opTimer("updateProjectNodes"); diff --git a/src/plugins/qbsprojectmanager/qbsproject.h b/src/plugins/qbsprojectmanager/qbsproject.h index fa12083716a..055618e6e12 100644 --- a/src/plugins/qbsprojectmanager/qbsproject.h +++ b/src/plugins/qbsprojectmanager/qbsproject.h @@ -136,6 +136,7 @@ private: void handleRuleExecutionDone(); bool checkCancelStatus(); void updateAfterParse(); + void delayedUpdateAfterParse(); void updateProjectNodes(); void projectLoaded() override; From 7a0fbf2c2347ca270a5502b0f0e2946ea3f189e6 Mon Sep 17 00:00:00 2001 From: Jake Petroules Date: Thu, 16 Nov 2017 23:59:11 -0800 Subject: [PATCH 07/16] Use qbs.defaultBuildVariant to inform Qbs of the default build variant Qt Creator always put its value for qbs.buildVariant in the config when building Qbs projects. That overwrote values applied by the multiplexing mechanism or by the project files, which is undesired. Instead, Qt Creator will now use the qbs.defaultBuildVariant property, which is provided for this reason. Task-number: QTCREATORBUG-19316 Change-Id: I923dfb6e083135b7c3ae6346af3ac639a4f02dbc Reviewed-by: Eike Ziller Reviewed-by: Christian Kandeler --- src/plugins/qbsprojectmanager/qbsprojectmanagerconstants.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/qbsprojectmanager/qbsprojectmanagerconstants.h b/src/plugins/qbsprojectmanager/qbsprojectmanagerconstants.h index cc6bcd8ed3e..8bc262710c0 100644 --- a/src/plugins/qbsprojectmanager/qbsprojectmanagerconstants.h +++ b/src/plugins/qbsprojectmanager/qbsprojectmanagerconstants.h @@ -63,7 +63,7 @@ const char QBS_INSTALLSTEP_ID[] = "Qbs.InstallStep"; const char QBS_VARIANT_DEBUG[] = "debug"; const char QBS_VARIANT_RELEASE[] = "release"; -const char QBS_CONFIG_VARIANT_KEY[] = "qbs.buildVariant"; +const char QBS_CONFIG_VARIANT_KEY[] = "qbs.defaultBuildVariant"; const char QBS_CONFIG_PROFILE_KEY[] = "qbs.profile"; const char QBS_INSTALL_ROOT_KEY[] = "qbs.installRoot"; const char QBS_CONFIG_DECLARATIVE_DEBUG_KEY[] = "Qt.declarative.qmlDebugging"; From 4ead3aa522e697cb55f06bd0eae0c3fc8c6d3860 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Mon, 20 Nov 2017 07:12:16 +0100 Subject: [PATCH 08/16] AutoTest: Fix nullptr access Task-number: QTCREATORBUG-19313 Change-Id: I84a6f35c4da325ed5b0bd12de90cf156d27b86c5 Reviewed-by: David Schulz --- src/plugins/autotest/testnavigationwidget.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/autotest/testnavigationwidget.cpp b/src/plugins/autotest/testnavigationwidget.cpp index aaeef64a1a6..299ad4d7681 100644 --- a/src/plugins/autotest/testnavigationwidget.cpp +++ b/src/plugins/autotest/testnavigationwidget.cpp @@ -101,7 +101,7 @@ TestNavigationWidget::TestNavigationWidget(QWidget *parent) : connect(m_model->parser(), &TestCodeParser::parsingFailed, this, &TestNavigationWidget::onParsingFinished); connect(m_model, &TestTreeModel::updatedActiveFrameworks, - [this] (int numberOfActive) { + this, [this] (int numberOfActive) { m_missingFrameworksWidget->setVisible(numberOfActive == 0); }); connect(m_progressTimer, &QTimer::timeout, From fae4f2c9b5da6c58313702a7b7ac6c851ef5a91e Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Fri, 17 Nov 2017 11:46:33 +0100 Subject: [PATCH 09/16] Update qbs submodule To HEAD of 1.10 branch. Change-Id: I12398ee8eb381b31356fdc515d07addc9bf501da Reviewed-by: Jake Petroules --- src/shared/qbs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/shared/qbs b/src/shared/qbs index 2e4d332924e..acf142851ae 160000 --- a/src/shared/qbs +++ b/src/shared/qbs @@ -1 +1 @@ -Subproject commit 2e4d332924e17225d08ac11891828e6fefc3529b +Subproject commit acf142851aeec850083811afb012a3fbcba793c6 From 466fb7ea530b67ded1af2895b22e782afd809c74 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Mon, 20 Nov 2017 09:28:19 +0100 Subject: [PATCH 10/16] AutoTest: Fix running Quick Tests with special functions If special functions (init, initTestCase, cleanup, cleanupTestCase) are present for a Quick Test they must get ignored when trying to run a single test as they cannot get explicitly addressed. Task-number: QTCREATORBUG-19311 Change-Id: Ie91928271928cf581bfef0b5e3463e027af985fd Reviewed-by: David Schulz --- src/plugins/autotest/quick/quicktesttreeitem.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/plugins/autotest/quick/quicktesttreeitem.cpp b/src/plugins/autotest/quick/quicktesttreeitem.cpp index 953f31e6618..29f6aa4a7cc 100644 --- a/src/plugins/autotest/quick/quicktesttreeitem.cpp +++ b/src/plugins/autotest/quick/quicktesttreeitem.cpp @@ -123,8 +123,12 @@ TestConfiguration *QuickTestTreeItem::testConfiguration() const switch (type()) { case TestCase: { QStringList testFunctions; - for (int row = 0, count = childCount(); row < count; ++row) - testFunctions << name() + "::" + childItem(row)->name(); + for (int row = 0, count = childCount(); row < count; ++row) { + const TestTreeItem *child = childItem(row); + if (child->type() == TestTreeItem::TestSpecialFunction) + continue; + testFunctions << name() + "::" + child->name(); + } config = new QuickTestConfiguration; config->setTestCases(testFunctions); config->setProjectFile(proFile()); From 0d87abee8bb71f0d6e2115402f427689f1840eb5 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Mon, 20 Nov 2017 14:02:09 +0100 Subject: [PATCH 11/16] AutoTest: Fix handling of forward declared test classes If a class has been forward declared we might not end up inside the real class declaration when trying to find declared test functions. So, do not just take the first found symbol into account, continue to process others if we haven't found the real declaration. Task-number: QTCREATORBUG-19319 Change-Id: I752d7a10470f5362e2214596966d93c037d58f4a Reviewed-by: David Schulz --- src/plugins/autotest/qtest/qttestparser.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/autotest/qtest/qttestparser.cpp b/src/plugins/autotest/qtest/qttestparser.cpp index a262148eccf..482e14f60b2 100644 --- a/src/plugins/autotest/qtest/qttestparser.cpp +++ b/src/plugins/autotest/qtest/qttestparser.cpp @@ -148,8 +148,8 @@ static CPlusPlus::Document::Ptr declaringDocument(CPlusPlus::Document::Ptr doc, } } - if (lookupItems.size()) { - if (CPlusPlus::Symbol *symbol = lookupItems.first().declaration()) { + for (const CPlusPlus::LookupItem &item : lookupItems) { + if (CPlusPlus::Symbol *symbol = item.declaration()) { if (CPlusPlus::Class *toeClass = symbol->asClass()) { const QString declFileName = QLatin1String(toeClass->fileId()->chars(), toeClass->fileId()->size()); From 7186456fd5ac4f5da0c36ecb1c38d5bae07f8d8e Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Tue, 14 Nov 2017 14:24:15 +0100 Subject: [PATCH 12/16] More 4.5 changes Change-Id: Id75bc6dbfdfda12f2c12c70fb7a95ae7a0a3c56b Reviewed-by: Leena Miettinen --- dist/changes-4.5.0.md | 60 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 58 insertions(+), 2 deletions(-) diff --git a/dist/changes-4.5.0.md b/dist/changes-4.5.0.md index 88c2bcfdc37..47f629a0252 100644 --- a/dist/changes-4.5.0.md +++ b/dist/changes-4.5.0.md @@ -14,10 +14,13 @@ General * Changed `File System` pane to tree view with top level directory selectable from `Computer`, `Home`, `Projects`, and individual project root directories (QTCREATORBUG-8305) +* Fixed crash when closing Qt Creator while searching for updates + (QTCREATORBUG-19165) Editing -* Added shortcut for sorting selected lines +* Added `Edit` > `Advanced` > `Sort Selected Lines`, replacing `Tools` > + `External` > `Text` > `Sort Selection` All Projects @@ -25,12 +28,27 @@ All Projects * Added support for changing the maximum number of lines shown in compile output (QTCREATORBUG-2200) +QMake Projects + +* Fixed support of wildcards in `INSTALLS` variable (QTCREATORBUG-17935) +* Fixed that `QMAKE_CFLAGS` was not passed to code model + CMake Projects * Added groups to CMake configuration UI * Added option to change configuration variable types +* Added option to unset configuration variable +* Improved handling of CMake configuration changes on disk (QTCREATORBUG-17555) +* Improved simplified project tree (QTCREATORBUG-19040) * Fixed that value was removed when renaming configuration variable (QTCREATORBUG-17926) +* Fixed that `PATH` environment was unnecessarily modified (QTCREATORBUG-18714) +* Fixed that QML errors in application output where not linked to the source + (QTCREATORBUG-18586) + +Qbs Projects + +* Fixed that custom `installRoot` was not saved (QTCREATORBUG-18895) C++ Support @@ -39,6 +57,7 @@ C++ Support * Fixed detection of macros defined by tool chain for `C` * Fixed that `Refactoring` context menu blocked UI while checking for available actions +* Fixed crash when refactoring class with errors (QTCREATORBUG-19180) * Clang Code Model * Added sanity check to `Clang Code Model Warnings` option (QTCREATORBUG-18864) @@ -52,6 +71,7 @@ C++ Support QML Support * Added wizards with different starting UI layouts +* Fixed that undo history was lost when reformatting file (QTCREATORBUG-18645) Python Support @@ -65,6 +85,11 @@ Debugging * LLDB / macOS * Added pretty printing of Core Foundation and Foundation string-like types (QTCREATORBUG-18638) +* CDB + * Fixed attaching to running process with command line arguments + (QTCREATORBUG-19034) +* QML + * Fixed changing values of ECMAScript strings (QTCREATORBUG-19032) QML Profiler @@ -73,11 +98,25 @@ QML Profiler Qt Quick Designer * Added option to only show visible items in navigator +* Fixed crash in integrated code editor (QTCREATORBUG-19079) +* Fixed crash when Ctrl-clicking on newly refactored QML file + (QTCREATORBUG-19064) +* Fixed filtering in Library view (QTCREATORBUG-19054) +* Fixed `Cmd + Left` in integrated code editor on macOS (QTCREATORBUG-19272) +* Fixed crash with `Become Last Sibling` and multiline expressions + (QTCREATORBUG-19284) Version Control Systems * Added query for saving modified files before opening commit editor (QTCREATORBUG-3857) +* Git + * Fixed issues with localized tool output (QTCREATORBUG-19017) + +Test Integration + +* Fixed issue with finding test target with CMake projects (QTCREATORBUG-17882, + QTCREATORBUG-18922, QTCREATORBUG-18932) Beautifier @@ -98,6 +137,7 @@ Platform Specific Windows +* Fixed detection of Visual Studio Build Tools 2017 (QTCREATORBUG-19053) * Fixed that environment variable keys were converted to upper case in build and run configurations (QTCREATORBUG-18915) @@ -111,8 +151,16 @@ Android * Removed support for local deployment (QTBUG-62995) * Removed support for Ant +* Added UI for managing Android SDKs (QTCREATORBUG-18978) +* Improved Android settings * Improved checks for minimum requirements of Android tools (QTCREATORBUG-18837) +iOS + +* Fixed check for minimum Xcode version (QTCREATORBUG-18091) +* Fixed switching between simulator device types with Xcode 9 + (QTCREATORBUG-19270) + Universal Windows Platform * Fixed deployment on Windows 10 Phone emulator @@ -122,19 +170,24 @@ Alessandro Portale Alexander Volkov Andre Hartmann André Pönitz +Benjamin Terrier Christian Kandeler Christian Stenger Claus Steuer Daniel Trevitz David Schulz +Donald Carr Eike Ziller +Filipe Azevedo Friedemann Kleint Ivan Donchevskii Jake Petroules Jaroslaw Kobus Jochen Becher +Kai Köhne Knud Dollereder Laurent Montel +Leena Miettinen Marco Benelli Marco Bubke Mitch Curtis @@ -145,10 +198,13 @@ Orgad Shaneh Robert Löhning Ryuji Kakemizu Samuel Gaist +scootergrisen +Sergey Belyashov Serhii Moroz Thiago Macieira Thomas Hartmann Tim Jenssen Tobias Hunger Ulf Hermann -Vikas Pachdha +Vikas Pachdha +Viktor Kireev From 2abf1f29cc9a17c030b4c402cb11f0526540e895 Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Mon, 20 Nov 2017 13:30:36 +0100 Subject: [PATCH 13/16] Clang: Add identifying macro Q_CREATOR_RUN Use the same we use for the built-in code model. This is useful for conditions of pragmas. Task-number: QTCREATORBUG-16847 Change-Id: I4c83be46bb2b8a23e4c8f70d98e2b4c9572121ee Reviewed-by: David Schulz --- src/plugins/clangcodemodel/clangutils.cpp | 6 ++++++ src/plugins/cpptools/compileroptionsbuilder.h | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/plugins/clangcodemodel/clangutils.cpp b/src/plugins/clangcodemodel/clangutils.cpp index 0058ee4023b..1ad979578df 100644 --- a/src/plugins/clangcodemodel/clangutils.cpp +++ b/src/plugins/clangcodemodel/clangutils.cpp @@ -78,6 +78,12 @@ public: { } + void addToolchainAndProjectMacros() final + { + addMacros({ProjectExplorer::Macro("Q_CREATOR_RUN", "1")}); + CompilerOptionsBuilder::addToolchainAndProjectMacros(); + } + void addExtraOptions() final { addDummyUiHeaderOnDiskIncludePath(); diff --git a/src/plugins/cpptools/compileroptionsbuilder.h b/src/plugins/cpptools/compileroptionsbuilder.h index 8ca985dc28c..9274a1bafc1 100644 --- a/src/plugins/cpptools/compileroptionsbuilder.h +++ b/src/plugins/cpptools/compileroptionsbuilder.h @@ -54,7 +54,7 @@ public: virtual void enableExceptions(); void addHeaderPathOptions(); void addPrecompiledHeaderOptions(PchUsage pchUsage); - void addToolchainAndProjectMacros(); + virtual void addToolchainAndProjectMacros(); void addMacros(const ProjectExplorer::Macros ¯os); virtual void addLanguageOption(ProjectFile::Kind fileKind); virtual void addOptionsForLanguage(bool checkForBorlandExtensions = true); From 216e40b3f0fa2e6da85367e8620c8f93f6b3c5b8 Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Tue, 21 Nov 2017 11:06:41 +0100 Subject: [PATCH 14/16] CMake: Fix tree scanner not getting run automatically This lead to entry being missing from the project tree. Task-number: QTCREATORBUG-19333 Change-Id: Ice3bab6d92aaa3799e66800cbae0bacd57537322 Reviewed-by: Eike Ziller --- .../cmakeprojectmanager/builddirmanager.h | 5 ++-- .../cmakeprojectmanager/cmakeproject.cpp | 27 +++++++++++-------- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/builddirmanager.h b/src/plugins/cmakeprojectmanager/builddirmanager.h index d703aed5ad0..58fe11484cc 100644 --- a/src/plugins/cmakeprojectmanager/builddirmanager.h +++ b/src/plugins/cmakeprojectmanager/builddirmanager.h @@ -88,8 +88,9 @@ public: REPARSE_URGENT = 1, // Do not wait for more requests, start ASAP REPARSE_FORCE_CONFIGURATION = 2, // Force configuration arguments to cmake REPARSE_CHECK_CONFIGURATION = 4, // Check and warn if on-disk config and QtC config differ - REPARSE_IGNORE = 8, // Do not reparse:-) - REPARSE_FAIL = 16 // Do not reparse and raise a warning + REPARSE_SCAN = 8, + REPARSE_IGNORE = 16, // Do not reparse:-) + REPARSE_FAIL = 32 // Do not reparse and raise a warning }; signals: diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.cpp b/src/plugins/cmakeprojectmanager/cmakeproject.cpp index 81345fee8e4..a47a7ee91e2 100644 --- a/src/plugins/cmakeprojectmanager/cmakeproject.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeproject.cpp @@ -390,25 +390,27 @@ bool CMakeProject::supportsKit(Kit *k, QString *errorMessage) const void CMakeProject::runCMake() { - if (isParsing()) + CMakeBuildConfiguration *bc = activeBc(this); + if (isParsing() || !bc) return; - CMakeBuildConfiguration *bc = activeBc(this); - if (bc) { - BuildDirParameters parameters(bc); - m_buildDirManager.setParametersAndRequestParse(parameters, - BuildDirManager::REPARSE_CHECK_CONFIGURATION, - BuildDirManager::REPARSE_CHECK_CONFIGURATION); - } + BuildDirParameters parameters(bc); + m_buildDirManager.setParametersAndRequestParse(parameters, + BuildDirManager::REPARSE_CHECK_CONFIGURATION, + BuildDirManager::REPARSE_CHECK_CONFIGURATION); } void CMakeProject::runCMakeAndScanProjectTree() { - if (!m_treeScanner.isFinished()) + CMakeBuildConfiguration *bc = activeBc(this); + if (isParsing() || !bc) return; + QTC_ASSERT(m_treeScanner.isFinished(), return); - m_waitingForScan = true; - runCMake(); + BuildDirParameters parameters(bc); + m_buildDirManager.setParametersAndRequestParse(parameters, + BuildDirManager::REPARSE_CHECK_CONFIGURATION | BuildDirManager::REPARSE_SCAN, + BuildDirManager::REPARSE_CHECK_CONFIGURATION | BuildDirManager::REPARSE_SCAN); } void CMakeProject::buildCMakeTarget(const QString &buildTarget) @@ -452,6 +454,8 @@ void CMakeProject::handleReparseRequest(int reparseParameters) m_delayedParsingTimer.setInterval((reparseParameters & BuildDirManager::REPARSE_URGENT) ? 0 : 1000); m_delayedParsingTimer.start(); m_delayedParsingParameters = m_delayedParsingParameters | reparseParameters; + if (m_allFiles.isEmpty()) + m_delayedParsingParameters |= BuildDirManager::REPARSE_SCAN; } void CMakeProject::startParsing(int reparseParameters) @@ -466,6 +470,7 @@ void CMakeProject::startParsing(int reparseParameters) emitParsingStarted(); + m_waitingForScan = reparseParameters & BuildDirManager::REPARSE_SCAN; m_waitingForParse = true; m_combinedScanAndParseResult = true; From 59e3d9af1e3197d29682e59c810ec7a40454feec Mon Sep 17 00:00:00 2001 From: Vikas Pachdha Date: Mon, 20 Nov 2017 12:26:19 +0100 Subject: [PATCH 15/16] Android: Enable emulator tool installation Let Android sdk manager UI install the emulator tool. AVD needs this tool to manage AVD's. Task-number: QTCREATORBUG-19332 Change-Id: If836c511ca4a5673470d42c14115afa21b1b96fd Reviewed-by: Tobias Hunger --- src/plugins/android/androidsdkmanager.cpp | 25 ++++++++++++++++++++++- src/plugins/android/androidsdkpackage.cpp | 16 +++++++++++++++ src/plugins/android/androidsdkpackage.h | 14 ++++++++++++- 3 files changed, 53 insertions(+), 2 deletions(-) diff --git a/src/plugins/android/androidsdkmanager.cpp b/src/plugins/android/androidsdkmanager.cpp index f71e22d5cb7..b01a971bb88 100644 --- a/src/plugins/android/androidsdkmanager.cpp +++ b/src/plugins/android/androidsdkmanager.cpp @@ -260,6 +260,7 @@ public: BuildToolsMarker = 0x080, SdkToolsMarker = 0x100, PlatformToolsMarker = 0x200, + EmulatorToolsMarker = 0x400, SectionMarkers = InstalledPackagesMarker | AvailablePackagesMarkers | AvailableUpdatesMarker }; @@ -278,6 +279,7 @@ private: BuildTools *parseBuildToolsPackage(const QStringList &data) const; SdkTools *parseSdkToolsPackage(const QStringList &data) const; PlatformTools *parsePlatformToolsPackage(const QStringList &data) const; + EmulatorTools *parseEmulatorToolsPackage(const QStringList &data) const; MarkerTag parseMarkers(const QString &line); MarkerTag m_currentSection = MarkerTag::None; @@ -292,7 +294,8 @@ const std::map markerTags { {SdkManagerOutputParser::MarkerTag::SystemImageMarker, "system-images"}, {SdkManagerOutputParser::MarkerTag::BuildToolsMarker, "build-tools"}, {SdkManagerOutputParser::MarkerTag::SdkToolsMarker, "tools"}, - {SdkManagerOutputParser::MarkerTag::PlatformToolsMarker, "platform-tools"} + {SdkManagerOutputParser::MarkerTag::PlatformToolsMarker, "platform-tools"}, + {SdkManagerOutputParser::MarkerTag::EmulatorToolsMarker, "emulator"} }; AndroidSdkManager::AndroidSdkManager(const AndroidConfig &config, QObject *parent): @@ -543,6 +546,10 @@ void SdkManagerOutputParser::parsePackageData(MarkerTag packageMarker, const QSt createPackage(&SdkManagerOutputParser::parsePlatformToolsPackage); break; + case MarkerTag::EmulatorToolsMarker: + createPackage(&SdkManagerOutputParser::parseEmulatorToolsPackage); + break; + case MarkerTag::PlatformMarker: createPackage(&SdkManagerOutputParser::parsePlatform); break; @@ -705,6 +712,22 @@ PlatformTools *SdkManagerOutputParser::parsePlatformToolsPackage(const QStringLi return platformTools; } +EmulatorTools *SdkManagerOutputParser::parseEmulatorToolsPackage(const QStringList &data) const +{ + EmulatorTools *emulatorTools = nullptr; + GenericPackageData packageData; + if (parseAbstractData(packageData, data, 1, "Emulator-tools")) { + emulatorTools = new EmulatorTools(packageData.revision, data.at(0)); + emulatorTools->setDescriptionText(packageData.description); + emulatorTools->setDisplayText(packageData.description); + emulatorTools->setInstalledLocation(packageData.installedLocation); + } else { + qCDebug(sdkManagerLog) << "Emulator-tools: Parsing failed. Minimum required data " + "unavailable:" << data; + } + return emulatorTools; +} + SdkManagerOutputParser::MarkerTag SdkManagerOutputParser::parseMarkers(const QString &line) { if (line.isEmpty()) diff --git a/src/plugins/android/androidsdkpackage.cpp b/src/plugins/android/androidsdkpackage.cpp index b7d15105854..94b7a2b87bf 100644 --- a/src/plugins/android/androidsdkpackage.cpp +++ b/src/plugins/android/androidsdkpackage.cpp @@ -253,4 +253,20 @@ AndroidSdkPackage::PackageType PlatformTools::type() const return AndroidSdkPackage::PlatformToolsPackage; } +EmulatorTools::EmulatorTools(QVersionNumber revision, QString sdkStylePathStr, QObject *parent): + AndroidSdkPackage(revision, sdkStylePathStr, parent) +{ + +} + +bool EmulatorTools::isValid() const +{ + return installedLocation().exists(); +} + +AndroidSdkPackage::PackageType EmulatorTools::type() const +{ + return AndroidSdkPackage::EmulatorToolsPackage; +} + } // namespace Android diff --git a/src/plugins/android/androidsdkpackage.h b/src/plugins/android/androidsdkpackage.h index 486c604b604..dac6a5662dc 100644 --- a/src/plugins/android/androidsdkpackage.h +++ b/src/plugins/android/androidsdkpackage.h @@ -52,8 +52,9 @@ public: PlatformToolsPackage = 1 << 3, SdkPlatformPackage = 1 << 4, SystemImagePackage = 1 << 5, + EmulatorToolsPackage = 1 << 6, AnyValidType = SdkToolsPackage | BuildToolsPackage | PlatformToolsPackage | - SdkPlatformPackage | SystemImagePackage + SdkPlatformPackage | SystemImagePackage | EmulatorToolsPackage }; enum PackageState { @@ -169,6 +170,17 @@ public: PackageType type() const override; }; +class EmulatorTools : public AndroidSdkPackage +{ +public: + EmulatorTools(QVersionNumber revision, QString sdkStylePathStr, QObject *parent = nullptr); + +// AndroidSdkPackage Overrides +public: + bool isValid() const override; + PackageType type() const override; +}; + class SdkTools : public AndroidSdkPackage { public: From 194bde265c9c207052f1039c54cf9d6cb32703c8 Mon Sep 17 00:00:00 2001 From: Ivan Donchevskii Date: Tue, 21 Nov 2017 12:18:28 +0100 Subject: [PATCH 16/16] Clang: Define __FUNCSIG__ and others for msvc toolchain Affects __FUNCSIG__, __FUNCTION__ and __FUNCDNAME__. By default Clang can't concatenate strings under those macros with other strings. Because of that we need to define them with empty strings to make clang compile such cases without errors. Task-number: QTCREATORBUG-19295 Change-Id: I9a3770ebe56b4b8a49ba9982c5a1ba90c8f0b304 Reviewed-by: Nikolai Kosjar --- src/plugins/cpptools/clangcompileroptionsbuilder.cpp | 1 + src/plugins/cpptools/compileroptionsbuilder.cpp | 6 ++++++ src/plugins/cpptools/compileroptionsbuilder.h | 1 + 3 files changed, 8 insertions(+) diff --git a/src/plugins/cpptools/clangcompileroptionsbuilder.cpp b/src/plugins/cpptools/clangcompileroptionsbuilder.cpp index 0b2209cc628..6a412e7d725 100644 --- a/src/plugins/cpptools/clangcompileroptionsbuilder.cpp +++ b/src/plugins/cpptools/clangcompileroptionsbuilder.cpp @@ -65,6 +65,7 @@ QStringList ClangCompilerOptionsBuilder::build(CppTools::ProjectFile::Kind fileK addToolchainAndProjectMacros(); undefineClangVersionMacrosForMsvc(); undefineCppLanguageFeatureMacrosForMsvc2015(); + addDefineFunctionMacrosMsvc(); addPredefinedHeaderPathsOptions(); addWrappedQtHeadersIncludePath(); diff --git a/src/plugins/cpptools/compileroptionsbuilder.cpp b/src/plugins/cpptools/compileroptionsbuilder.cpp index 88a85e17cda..914973bc447 100644 --- a/src/plugins/cpptools/compileroptionsbuilder.cpp +++ b/src/plugins/cpptools/compileroptionsbuilder.cpp @@ -339,6 +339,12 @@ void CompilerOptionsBuilder::undefineCppLanguageFeatureMacrosForMsvc2015() } } +void CompilerOptionsBuilder::addDefineFunctionMacrosMsvc() +{ + if (m_projectPart.toolchainType == ProjectExplorer::Constants::MSVC_TOOLCHAIN_TYPEID) + addMacros({{"__FUNCSIG__", "\"\""}, {"__FUNCTION__", "\"\""}, {"__FUNCDNAME__", "\"\""}}); +} + void CompilerOptionsBuilder::addDefineFloat128ForMingw() { // CLANG-UPGRADE-CHECK: Workaround still needed? diff --git a/src/plugins/cpptools/compileroptionsbuilder.h b/src/plugins/cpptools/compileroptionsbuilder.h index 9274a1bafc1..e3cf1bbcefd 100644 --- a/src/plugins/cpptools/compileroptionsbuilder.h +++ b/src/plugins/cpptools/compileroptionsbuilder.h @@ -61,6 +61,7 @@ public: void addMsvcCompatibilityVersion(); void undefineCppLanguageFeatureMacrosForMsvc2015(); + void addDefineFunctionMacrosMsvc(); void addDefineFloat128ForMingw();