From eb70e20453876ea82b4ec6bed1805eb62283b8dd Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 6 Jul 2021 15:58:33 +0200 Subject: [PATCH 01/16] Utils: Add a FilePath::environment A hook into the system environment of the FilePath's device. Change-Id: I274032f9e716f3cd8b2e4af2eca010b9805a4568 Reviewed-by: Christian Stenger --- src/libs/utils/fileutils.cpp | 10 ++++++++++ src/libs/utils/fileutils.h | 7 ++++++- .../projectexplorer/devicesupport/devicemanager.cpp | 6 ++++++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/libs/utils/fileutils.cpp b/src/libs/utils/fileutils.cpp index e44faa5e087..a4704bf696d 100644 --- a/src/libs/utils/fileutils.cpp +++ b/src/libs/utils/fileutils.cpp @@ -1387,6 +1387,16 @@ FilePath FilePath::onDeviceSearchInPath() const return Environment::systemEnvironment().searchInPath(path()); } +Environment FilePath::deviceEnvironment() const +{ + if (needsDevice()) { + QTC_ASSERT(s_deviceHooks.environment, return {}); + return s_deviceHooks.environment(*this); + } + return Environment::systemEnvironment(); +} + + FilePath FilePath::pathAppended(const QString &path) const { FilePath fn = *this; diff --git a/src/libs/utils/fileutils.h b/src/libs/utils/fileutils.h index 0d8d48d0285..07792a7faca 100644 --- a/src/libs/utils/fileutils.h +++ b/src/libs/utils/fileutils.h @@ -40,7 +40,10 @@ #include #include -namespace Utils { class FilePath; } +namespace Utils { +class Environment; +class FilePath; +} // Utils QT_BEGIN_NAMESPACE class QDataStream; @@ -91,6 +94,7 @@ public: std::function lastModified; std::function permissions; std::function osType; + std::function environment; }; class QTCREATOR_UTILS_EXPORT FilePath @@ -213,6 +217,7 @@ public: static void setDeviceFileHooks(const DeviceFileHooks &hooks); FilePath onDeviceSearchInPath() const; + Environment deviceEnvironment() const; private: friend class ::tst_fileutils; diff --git a/src/plugins/projectexplorer/devicesupport/devicemanager.cpp b/src/plugins/projectexplorer/devicesupport/devicemanager.cpp index 97c700eb2b5..32ff16cf3a0 100644 --- a/src/plugins/projectexplorer/devicesupport/devicemanager.cpp +++ b/src/plugins/projectexplorer/devicesupport/devicemanager.cpp @@ -507,6 +507,12 @@ DeviceManager::DeviceManager(bool isInstance) : d(std::make_uniqueosType(); }; + deviceHooks.environment = [](const FilePath &filePath) { + auto device = DeviceManager::deviceForPath(filePath); + QTC_ASSERT(device, return Environment{}); + return device->systemEnvironment(); + }; + FilePath::setDeviceFileHooks(deviceHooks); DeviceProcessHooks processHooks; From 93be13bfc1b3e44b1466a7263835ad5703f25e48 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Mon, 28 Jun 2021 17:09:13 +0200 Subject: [PATCH 02/16] Doc: Describe new GDB options Task-number: QTCREATORBUG-25642 Change-Id: I32b5d9bffd0eab2dbc1f6afd1f05be149fe1a10e Reviewed-by: hjk --- .../images/qtcreator-gdb-options.png | Bin 7825 -> 7774 bytes .../debugger/creator-debugger-common.qdocinc | 4 ++++ .../creator-debugger-settings.qdocinc | 4 ++++ .../creator-only/creator-debugger.qdoc | 12 ++++++++++-- 4 files changed, 18 insertions(+), 2 deletions(-) diff --git a/doc/qtcreator/images/qtcreator-gdb-options.png b/doc/qtcreator/images/qtcreator-gdb-options.png index d8f3f59be027550000844455c7e03bdfa43faf9d..e1ec43cc37bb1eb680754e0568b8e7d59b912d3d 100644 GIT binary patch literal 7774 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 II;Vst0D$nPI{*Lx literal 7825 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 diff --git a/doc/qtcreator/src/debugger/creator-debugger-common.qdocinc b/doc/qtcreator/src/debugger/creator-debugger-common.qdocinc index ecd69024923..4abf8997e7d 100644 --- a/doc/qtcreator/src/debugger/creator-debugger-common.qdocinc +++ b/doc/qtcreator/src/debugger/creator-debugger-common.qdocinc @@ -162,6 +162,10 @@ editor, select \uicontrol GDB > \uicontrol {Adjust breakpoint locations} or \uicontrol CDB > \uicontrol {Correct breakpoint location}. + When using GDB as backend, you can extend the ordinary GDB + breakpoint class by using Python. Select \uicontrol GDB > + \uicontrol {Use pseudo message tracepoints}. + When using CDB as backend, you can specify that the debugger should break on specific events, such as C++ exceptions, thread creation or exit, loading or unloading \l{Viewing Modules}{application modules}, or particular output. diff --git a/doc/qtcreator/src/debugger/creator-only/creator-debugger-settings.qdocinc b/doc/qtcreator/src/debugger/creator-only/creator-debugger-settings.qdocinc index 72cd80d3a30..f1d74a9d8e9 100644 --- a/doc/qtcreator/src/debugger/creator-only/creator-debugger-settings.qdocinc +++ b/doc/qtcreator/src/debugger/creator-only/creator-debugger-settings.qdocinc @@ -112,6 +112,10 @@ By default, GDB shows AT&T style disassembly. To switch to the Intel style, select the \uicontrol {Use Intel style disassembly} check box. + To have GDB automatically save a copy of its symbol index in a cache + on disk and retrieve it from there when loading the same binary in the + future, select the \uicontrol {Use automatic symbol cache} check box. + To execute GDB commands after GDB has been started, but before the debugged program is started or attached, and before the debugging helpers are initialized, enter them in the \uicontrol {Additional Startup Commands} diff --git a/doc/qtcreator/src/debugger/creator-only/creator-debugger.qdoc b/doc/qtcreator/src/debugger/creator-only/creator-debugger.qdoc index 67b271053d2..34ecaa1785a 100644 --- a/doc/qtcreator/src/debugger/creator-only/creator-debugger.qdoc +++ b/doc/qtcreator/src/debugger/creator-only/creator-debugger.qdoc @@ -1540,8 +1540,16 @@ \section1 Built-in Debugger Is Slow During Startup and Runtime - The part of the slowness that is related to the loading of debug information - is hard to avoid. Another part stems from maintaining breakpoints inside + Slowness that is related to the loading of debug information is hard to + avoid. + + When using GDB as backend, you can automatically save a copy of + its symbol index in a cache on disk and retrieve it from there + when loading the same binary in the future. Select \uicontrol Tools + > \uicontrol Options > \uicontrol Debugger > \uicontrol GDB > + \uicontrol {Use automatic symbol cache}. + + Some slowness stems from maintaining breakpoints inside the debugger (under some circumstances all breakpoints need to be inserted and removed again for each step) and the evaluation of expressions after each step. We recommend that you minimize the number of breakpoints and From 434c33f4ee7cd00612fb893354d5c9655dcfb6cc Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Tue, 6 Jul 2021 17:51:28 +0200 Subject: [PATCH 03/16] Update changes file for 5.0 Change-Id: Ibbe0661d3ce1c5ff6a624e7908a996a3ad9e187a Reviewed-by: Leena Miettinen --- dist/changes-5.0.0.md | 36 ++++++++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/dist/changes-5.0.0.md b/dist/changes-5.0.0.md index bceddafe821..8bcf9440bc6 100644 --- a/dist/changes-5.0.0.md +++ b/dist/changes-5.0.0.md @@ -21,17 +21,20 @@ Editing * Added line ending and indentation to file properties information * Added menu item and shortcut for editing bookmark comments (QTCREATORBUG-25696) +* Fixed folding for Markdown (QTCREATORBUG-25882) ### C++ +* Added experimental support for `clangd` (no code completion yet, requires + development build of `clangd`) * Added highlighting option for function parameters (QTCREATORBUG-24880) -* Added experimental support for `clangd` for global index (`Find References`, - `Rename Symbol`, `Follow Symbol`) * Added template parameters to symbols in Locator * Fixed that project-unrelated files were selected by default when renaming symbols (QTCREATORBUG-8561) * Fixed highlighting of string literals with multi-byte characters (QTCREATORBUG-25715) +* Fixed code model for changed but not yet built `.ui` and `.scxml` files + (QTCREATORBUG-25937) ### QML @@ -57,10 +60,17 @@ Editing Projects -------- +* Added experimental support for building and running on Docker devices +* Added option `Show Source and Header Groups` to project tree + (QTCREATORBUG-25313) * Fixed crash when closing project while changing current configuration (QTCREATORBUG-25655) * Fixed that output of custom targets was interpreted as errors (QTCREATORBUG-25677) +* Fixed missing update of run configuration environment (QTCREATORBUG-25947) +* Fixed that user files were unnecessarily saved with new time stamp + (QTCREATORBUG-25921) +* Reduced UI freeze after loading projects (QTCREATORBUG-25783) ### CMake @@ -69,6 +79,12 @@ Projects * Added CMake output to right side of `Projects` mode (QTCREATORBUG-25522) * Fixed `Jump to File` for file names with special characters (QTCREATORBUG-25572) +* Fixed updating of available targets (QTCREATORBUG-24914, QTCREATORBUG-25906) +* Fixed persistence of CMake tool options (QTCREATORBUG-25911) + +### Qbs + +* Improved performance of registering profiles (QTCREATORBUG-25463) Debugging --------- @@ -87,6 +103,14 @@ Debugging * Implemented `Load QML Stack` for LLDB (QTCREATORBUG-25554) +Analyzer +-------- + +### Clang + +* Fixed URL for `clang-tidy` checks (QTCREATORBUG-25902) +* Fixed application of options to checks (QTCREATORBUG-25827) + FakeVim ------- @@ -103,6 +127,11 @@ Platforms * Fixed performance issue with registering file watches after loading projects +### Android + +* Fixed detection of `_prepare_apk_dir` target for CMake projects + (QTCREATORBUG-25216) + ### QNX * Fixed device configuration @@ -138,6 +167,7 @@ Jaroslaw Kobus Jochen Becher Johanna Vanhatapio Kai Köhne +Kama Wójcik Knud Dollereder Leena Miettinen Lukas Holecek @@ -149,6 +179,7 @@ Michael Weghorn Miikka Heikkinen Miina Puuronen Miklós Márton +Nodir Temirkhodjaev Oliver Wolff Orgad Shaneh Pekka Kaikkonen @@ -158,4 +189,5 @@ Tim Blechmann Tim Jenssen Tom Praschan Vikas Pachdha +Wojciech Smigaj Youri Westerman From 0df677f7ace7cd4a8e6dc7424351e71809737fc2 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Wed, 7 Jul 2021 10:33:28 +0200 Subject: [PATCH 04/16] AutoTest: Guard simultaneous access to header cache It is accessed from multiple threads at once. Guard with mutex to avoid crashes. Amends 64ce2a6f4374012b37b420dc0aaa6ea406bf7168 Change-Id: I5048e5fcdb27b2492656b302775378829b6da013 Reviewed-by: Christian Stenger --- src/plugins/autotest/itestparser.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/plugins/autotest/itestparser.cpp b/src/plugins/autotest/itestparser.cpp index fd021df42ef..b11393b9520 100644 --- a/src/plugins/autotest/itestparser.cpp +++ b/src/plugins/autotest/itestparser.cpp @@ -37,6 +37,7 @@ namespace Autotest { using LookupInfo = QPair; static QHash s_pchLookupCache; +Q_GLOBAL_STATIC(QMutex, s_cacheMutex); CppParser::CppParser(ITestFramework *framework) : ITestParser(framework) @@ -96,6 +97,7 @@ bool precompiledHeaderContains(const CPlusPlus::Snapshot &snapshot, } return it.value(); }; + QMutexLocker l(s_cacheMutex()); return Utils::anyOf(precompiledHeaders, headerContains); } @@ -127,6 +129,7 @@ void CppParser::release() { m_cppSnapshot = CPlusPlus::Snapshot(); m_workingCopy = CppTools::WorkingCopy(); + QMutexLocker l(s_cacheMutex()); s_pchLookupCache.clear(); } From 916fc90b448b71db911793cae252298e45d538dd Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Wed, 7 Jul 2021 09:57:27 +0200 Subject: [PATCH 05/16] Doc: Describe Show Source and Header Groups filter in Projects view Task-number: QTCREATORBUG-25642 Change-Id: Ic3243d0be5c15e1ff853b52271ba31e3c3b148b4 Reviewed-by: Eike Ziller --- doc/qtcreator/src/user-interface/creator-projects-view.qdoc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/doc/qtcreator/src/user-interface/creator-projects-view.qdoc b/doc/qtcreator/src/user-interface/creator-projects-view.qdoc index cfcc814521d..a9f50806f49 100644 --- a/doc/qtcreator/src/user-interface/creator-projects-view.qdoc +++ b/doc/qtcreator/src/user-interface/creator-projects-view.qdoc @@ -133,6 +133,9 @@ not enabled for the current target, \li \uicontrol {Hide Empty Directories} hides directories that do not contain any files. + \li \uicontrol {Show Source and Header Groups} shows source and header + files grouped together in the view, regardless of their location in + the file system. \endlist To stop synchronizing the position in the project tree with the file From e065107fa537238aa65c097d24b649a0de9f5f9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20L=C3=B6hning?= Date: Tue, 6 Jul 2021 14:04:33 +0200 Subject: [PATCH 06/16] QmlJSTools: Guard against null pointer access Fixes: QTCREATORBUG-25943 Change-Id: If9e6528b0dc5642dbd150e7d20aeb9347f3d4465 Reviewed-by: Eike Ziller Reviewed-by: Erik Verbruggen --- src/plugins/qmljstools/qmljsmodelmanager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/qmljstools/qmljsmodelmanager.cpp b/src/plugins/qmljstools/qmljsmodelmanager.cpp index 5eb23083685..c3092bf1cbb 100644 --- a/src/plugins/qmljstools/qmljsmodelmanager.cpp +++ b/src/plugins/qmljstools/qmljsmodelmanager.cpp @@ -148,7 +148,7 @@ ModelManagerInterface::ProjectInfo ModelManager::defaultProjectInfoForProject( projectInfo.tryQmlDump = project && qtVersion->type() == QLatin1String(QtSupport::Constants::DESKTOPQT); projectInfo.qtQmlPath = qtVersion->qmlPath().toFileInfo().canonicalFilePath(); projectInfo.qtVersionString = qtVersion->qtVersionString(); - } else if (!activeKit->value(QtSupport::SuppliesQtQuickImportPath::id(), false).toBool()) { + } else if (!activeKit || !activeKit->value(QtSupport::SuppliesQtQuickImportPath::id(), false).toBool()) { projectInfo.qtQmlPath = QFileInfo(QLibraryInfo::location(QLibraryInfo::Qml2ImportsPath)).canonicalFilePath(); projectInfo.qtVersionString = QLatin1String(qVersion()); } From d2aa0f4ed9cd721b2658550e69ea3059d8f70f77 Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Wed, 7 Jul 2021 12:13:36 +0300 Subject: [PATCH 07/16] Git: Fix regression on cherry-pick MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Amends commit 55f768e1b0a2f49977a48972b243d3efa255e337. Fixes: QTCREATORBUG-25975 Change-Id: Ie49b64f777bd7155cc226b70c0c473a5ac1ce282 Reviewed-by: Robert Löhning --- src/plugins/git/gitclient.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp index c9173666133..c1bbeec724c 100644 --- a/src/plugins/git/gitclient.cpp +++ b/src/plugins/git/gitclient.cpp @@ -1823,7 +1823,7 @@ bool GitClient::isRemoteCommit(const QString &workingDirectory, const QString &c { QtcProcess proc; vcsFullySynchronousExec(proc, workingDirectory, {"branch", "-r", "--contains", commit}, silentFlags); - return proc.rawStdOut().isEmpty(); + return !proc.rawStdOut().isEmpty(); } bool GitClient::isFastForwardMerge(const QString &workingDirectory, const QString &branch) From d7062b5b92b90fac184574eb59adba40044732e4 Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 6 Jul 2021 15:56:30 +0200 Subject: [PATCH 08/16] Utils: Allow additional directories for FilePath::searchInPath This mimics Environment::searchInPath(). Change-Id: I8c772ed31c31c74b09c7aa0e4912de8586dd2468 Reviewed-by: Christian Stenger --- src/libs/utils/fileutils.cpp | 6 ++--- src/libs/utils/fileutils.h | 4 ++-- src/plugins/docker/dockerdevice.cpp | 22 ++++++++++++++----- src/plugins/docker/dockerdevice.h | 3 ++- .../devicesupport/devicemanager.cpp | 4 ++-- .../projectexplorer/devicesupport/idevice.cpp | 2 +- .../projectexplorer/devicesupport/idevice.h | 3 ++- 7 files changed, 28 insertions(+), 16 deletions(-) diff --git a/src/libs/utils/fileutils.cpp b/src/libs/utils/fileutils.cpp index a4704bf696d..c739b74ec31 100644 --- a/src/libs/utils/fileutils.cpp +++ b/src/libs/utils/fileutils.cpp @@ -1378,13 +1378,13 @@ FilePath FilePath::onDevice(const FilePath &deviceTemplate) const assert(fullPath == FilePath::fromUrl("docker://123/usr/bin/make")) \endcode */ -FilePath FilePath::onDeviceSearchInPath() const +FilePath FilePath::onDeviceSearchInPath(const FilePaths &additionalDirs) const { if (needsDevice()) { QTC_ASSERT(s_deviceHooks.searchInPath, return {}); - return s_deviceHooks.searchInPath(*this); + return s_deviceHooks.searchInPath(*this, additionalDirs); } - return Environment::systemEnvironment().searchInPath(path()); + return Environment::systemEnvironment().searchInPath(path(), additionalDirs); } Environment FilePath::deviceEnvironment() const diff --git a/src/libs/utils/fileutils.h b/src/libs/utils/fileutils.h index 07792a7faca..24da9d380d1 100644 --- a/src/libs/utils/fileutils.h +++ b/src/libs/utils/fileutils.h @@ -85,7 +85,7 @@ public: std::function removeRecursively; std::function copyFile; std::function renameFile; - std::function searchInPath; + std::function &)> searchInPath; std::function symLinkTarget; std::function(const FilePath &, const QStringList &, QDir::Filters, QDir::SortFlags)> dirEntries; @@ -216,7 +216,7 @@ public: static void setDeviceFileHooks(const DeviceFileHooks &hooks); - FilePath onDeviceSearchInPath() const; + FilePath onDeviceSearchInPath(const QList &additionalDirs = {}) const; Environment deviceEnvironment() const; private: diff --git a/src/plugins/docker/dockerdevice.cpp b/src/plugins/docker/dockerdevice.cpp index b2a7af5c985..515b3ad5bd4 100644 --- a/src/plugins/docker/dockerdevice.cpp +++ b/src/plugins/docker/dockerdevice.cpp @@ -1045,23 +1045,33 @@ FilePath DockerDevice::symLinkTarget(const FilePath &filePath) const return {}; } -FilePath DockerDevice::searchInPath(const FilePath &filePath) const +FilePath DockerDevice::searchInPath(const FilePath &filePath, const FilePaths &additionalDirs) const { + QTC_ASSERT(handlesFile(filePath), return {}); + tryCreateLocalFileAccess(); + const QString path = filePath.path(); + // FIXME: Check whether local search via deviceEnvironment/PATH is faster? CommandLine dcmd{"docker", {"exec", d->m_container, "which", path}}; QtcProcess proc; proc.setCommand(dcmd); - proc.setWorkingDirectory(QDir::tempPath()); proc.start(); proc.waitForFinished(); LOG("Run sync:" << dcmd.toUserOutput() << " result: " << proc.exitCode()); - if (proc.exitCode() != 0) - return {}; + if (proc.exitCode() == 0) { + const QString output = proc.stdOut().trimmed(); + return mapToGlobalPath(FilePath::fromString(output)); + } - const QString output = proc.stdOut().trimmed(); - return mapToGlobalPath(FilePath::fromString(output)); + for (const FilePath &dir : additionalDirs) { + const FilePath candidate = dir / filePath.path(); + if (candidate.exists()) + return candidate; + } + + return {}; } FilePaths DockerDevice::directoryEntries(const FilePath &filePath, diff --git a/src/plugins/docker/dockerdevice.h b/src/plugins/docker/dockerdevice.h index 509bd2deeeb..0c994e73082 100644 --- a/src/plugins/docker/dockerdevice.h +++ b/src/plugins/docker/dockerdevice.h @@ -88,7 +88,8 @@ public: bool removeRecursively(const Utils::FilePath &filePath) const override; bool copyFile(const Utils::FilePath &filePath, const Utils::FilePath &target) const override; bool renameFile(const Utils::FilePath &filePath, const Utils::FilePath &target) const override; - Utils::FilePath searchInPath(const Utils::FilePath &filePath) const override; + Utils::FilePath searchInPath(const Utils::FilePath &filePath, + const Utils::FilePaths &additionalDirs) const override; Utils::FilePath symLinkTarget(const Utils::FilePath &filePath) const override; QList directoryEntries(const Utils::FilePath &filePath, const QStringList &nameFilters, diff --git a/src/plugins/projectexplorer/devicesupport/devicemanager.cpp b/src/plugins/projectexplorer/devicesupport/devicemanager.cpp index 32ff16cf3a0..3d7439522dd 100644 --- a/src/plugins/projectexplorer/devicesupport/devicemanager.cpp +++ b/src/plugins/projectexplorer/devicesupport/devicemanager.cpp @@ -458,10 +458,10 @@ DeviceManager::DeviceManager(bool isInstance) : d(std::make_uniquerenameFile(filePath, target); }; - deviceHooks.searchInPath = [](const FilePath &filePath) { + deviceHooks.searchInPath = [](const FilePath &filePath, const FilePaths &additionalDirs) { auto device = DeviceManager::deviceForPath(filePath); QTC_ASSERT(device, return FilePath{}); - return device->searchInPath(filePath); + return device->searchInPath(filePath, additionalDirs); }; deviceHooks.symLinkTarget = [](const FilePath &filePath) { diff --git a/src/plugins/projectexplorer/devicesupport/idevice.cpp b/src/plugins/projectexplorer/devicesupport/idevice.cpp index 8983576c033..d51040d5862 100644 --- a/src/plugins/projectexplorer/devicesupport/idevice.cpp +++ b/src/plugins/projectexplorer/devicesupport/idevice.cpp @@ -311,7 +311,7 @@ bool IDevice::renameFile(const FilePath &filePath, const FilePath &target) const return false; } -FilePath IDevice::searchInPath(const FilePath &filePath) const +FilePath IDevice::searchInPath(const FilePath &filePath, const FilePaths &additionalDirs) const { return Environment::systemEnvironment().searchInPath(filePath.path()); } diff --git a/src/plugins/projectexplorer/devicesupport/idevice.h b/src/plugins/projectexplorer/devicesupport/idevice.h index 46122f0144b..d5ad9858ad0 100644 --- a/src/plugins/projectexplorer/devicesupport/idevice.h +++ b/src/plugins/projectexplorer/devicesupport/idevice.h @@ -249,7 +249,8 @@ public: virtual bool removeRecursively(const Utils::FilePath &filePath) const; virtual bool copyFile(const Utils::FilePath &filePath, const Utils::FilePath &target) const; virtual bool renameFile(const Utils::FilePath &filePath, const Utils::FilePath &target) const; - virtual Utils::FilePath searchInPath(const Utils::FilePath &filePath) const; + virtual Utils::FilePath searchInPath(const Utils::FilePath &filePath, + const QList &additionalDirs = {}) const; virtual Utils::FilePath symLinkTarget(const Utils::FilePath &filePath) const; virtual QList directoryEntries(const Utils::FilePath &filePath, const QStringList &nameFilters, From 42141fed2620e4aedc0e6e9f3ca2c2844846127d Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Wed, 7 Jul 2021 15:40:58 +0200 Subject: [PATCH 09/16] Doc: Describe "MCU dependencies" option in Kit options Task-number: QTCREATORBUG-25642 Change-Id: I9b4be0682381dc886487b4c70d8bc9e79d8620b5 Reviewed-by: Erik Verbruggen --- doc/qtcreator/images/qtcreator-mcu-device.png | Bin 8321 -> 8598 bytes doc/qtcreator/images/qtcreator-mcu-kit.png | Bin 26040 -> 26402 bytes .../images/qtcreator-mcu-options.png | Bin 30155 -> 9520 bytes doc/qtcreator/src/mcu/creator-mcu-dev.qdoc | 3 +++ 4 files changed, 3 insertions(+) diff --git a/doc/qtcreator/images/qtcreator-mcu-device.png b/doc/qtcreator/images/qtcreator-mcu-device.png index 4159ec10c6502c3325ddb04be4af12c6ba4820a5..2a2dd2beab5fe87450fcaaba301af225c63f7e20 100644 GIT binary patch literal 8598 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 literal 8321 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 MPgg&ebxsLQ05paz>% diff --git a/doc/qtcreator/images/qtcreator-mcu-kit.png b/doc/qtcreator/images/qtcreator-mcu-kit.png index e91f784a39aa02ee292ab1988bbb0cec7ba57ed6..112707e22a1d34470362cab5f0f317fec678243c 100644 GIT binary patch literal 26402 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 N;OXk;vd$@?2>>jT3043A literal 26040 zcmeAS@N?(olHy`uVBq!ia0y~yU>0LwV2bBpVqjp%{d4^R14C-Pr;B4q#jUq{Pv@(g ztX=W?|KdXa%&sLYF}ru)?7zsPSrWV?LL}bScU!9D2G#k!jNc>Hy?R}p>+pPzZ}!5* z6W`uEF+Rj$RdN=c7Yeu*0PS(}M+gT&5^Uv>J@cVT59%bXzGa}EwKg^#Jmhwb- zlacbit`nzz?LB+;>~jD4^XAN%mz`$@I=~K0mNqc)c|FVu8 zKeJuiwyBAI{k{MH@BgVQCo(4?nW_cXZ+YKyRUm`I!T^mH=2oYL0U8Vp zB3;L32rUfI5MelwBl7B1n#G=-rchfa~3+yd>`YQDHgwwY59vOqNgl#Kgk;PRan{Yu-6b_aCpv@`YSlmFEhx` zFn(`_|H4b#9Kt`kISZ`#)w{$pd#d!d*2u%lZ|{|_E%k1nRjNN_XXf%8?DufM&`;L2`iwQsm?ER6FH#%!adx`t`X7|DN<(cgtpP_*21?;+sUW<~U!R z=p_1E;Eu4f(VTKkvLBzJ_Ub1j|SYIHs$@1M$Bn;+koYIOqVi}L-y@BS8ziQ{j-KK*F-zAwhS z_Wxs+e%V~N{NY#sNuP>WpNsCyDcN-U>lquy%EBopmo$ zc(Z5v`kpDDGOCUXv@$Wwh*`L6;X)_NWbU-5^Xlh(zoqmzt?$8x*4w=y>y~^f`*gt} z?(^*?^*>d6%HQwWYroIQ(%UUxeZ95FT$?KgA_^;XPM%tN>5KU3GwWk0=4+EZgXn&-R+l`d;mILXS( z``?^z_v1lx+TkzwVYw4*PgK18@?aslAKm{X%NS0BcRBuz#79XzC?GM)P7fSr~`t`#P zzmkoY)_^>CS$$c+^5x6TzJ{)BDo=E>F}vy_4trzD*F68x->Q$%aFkLw9P$(eV3mc_O%D-{>{ z3kvPkO9G-gz1odbHRpc|p60U9i22v6^}h0_R9`&)6t+^0tJR#5fnm)Yr=%~*2X??YNeOqPMOiQC!y(#=p{wgvsF!Y>n(!7#t6_@%W zV5Qg1%j&^XJ@&7dp86qJENmet01`!B{rEAXJ*|`rlw2B|7$MZ%otIyK-4VDZ_?74@ zevrC2POU4ye*L<4@7}+Ec8iR?TX%s{;%Bdbg=XgF=4NJP<>mc-eN~{8vGwoQd;u0m z0T#pgf*~4-+1c5-xx7c;@QHLOa5O1Q3s{)&johG7ozqiNlTfepUwuI-=O^?@YtE>YX=CCke z#W|5zE? zl!HK!QrrSZ1=E(y5!PuG3ns;MXDSvx|!J;S?o(!b@+&CHce z-;!VSWNJ>?(J$8bXx(C;wks~vme(nq-#F)03jZ?tJr;7F2#<;gjz z0V~cdI5($oZ<3C_>GD0%uhs@lQ#!l1-+G0U3U;XMAzqzXo z5$LE4S#kODW%lC3SI-uhc(FY_?Kp`?C9|UVYeJ*rLXcTZt*>q^u!#-IoEevz(l>SK zeU-FHGt>LFaD%PtPz_lzdGh4BmWrYaQXZ&x@xA4l6ll2qL}*DwYGq2=#N{!2BC_;m zyjyJAozDK^#hXqqo7a=TPJQOKu;%?q;j@uDoh>yht^&;;6IUY3g3j$=X-$e6hJ3woq?<+@GKIf7knYB(1$%^Yh!@uMNJHCQCnB_(HsM zD`>^5Z?≷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 diff --git a/doc/qtcreator/src/mcu/creator-mcu-dev.qdoc b/doc/qtcreator/src/mcu/creator-mcu-dev.qdoc index b6682931bef..479ae52ea4e 100644 --- a/doc/qtcreator/src/mcu/creator-mcu-dev.qdoc +++ b/doc/qtcreator/src/mcu/creator-mcu-dev.qdoc @@ -171,6 +171,9 @@ the kit's toolkits and SDKs, and keeps them synchronized when selecting \uicontrol Apply or \uicontrol OK. + The \uicontrol {MCU dependencies} field displays paths to 3rd party + software required for MCU development with the current kit. + \section1 Running Applications on MCUs You can use a wizard to set up a project for developing an application that From cd843318485749d4e019a3f039ba16dc18079a7a Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Wed, 7 Jul 2021 13:55:37 +0200 Subject: [PATCH 10/16] CMake build: Fix workaround for new *Private targets with CMake < 3.18 Amends a803d04c171b31ec90c1ea2bb82930a967027ec8 Change-Id: I2df067d988a79845f4a9f85485c13e5e2f8019dc Reviewed-by: Christian Stenger Reviewed-by: Tim Jenssen --- cmake/FindQt5.cmake | 1 + 1 file changed, 1 insertion(+) diff --git a/cmake/FindQt5.cmake b/cmake/FindQt5.cmake index ae58487eea7..dbbb07681f3 100644 --- a/cmake/FindQt5.cmake +++ b/cmake/FindQt5.cmake @@ -48,6 +48,7 @@ else() if(dcIndex GREATER_EQUAL 0) find_package(Qt6${possible_private_libs}Private CONFIG QUIET) if(TARGET Qt6::${possible_private_libs}Private) + set_property(TARGET Qt6::${possible_private_libs}Private PROPERTY IMPORTED_GLOBAL TRUE) add_library(Qt5::${possible_private_libs} ALIAS Qt6::${possible_private_libs}Private) list(REMOVE_AT Qt5_FIND_COMPONENTS ${dcIndex}) endif() From 40d03d1896e5f5dc0abf92a13e2da44b97c6704c Mon Sep 17 00:00:00 2001 From: Tim Jenssen Date: Wed, 7 Jul 2021 17:32:53 +0200 Subject: [PATCH 11/16] Avoid size_t to (u)int warnings with auto, where it is possible Change-Id: I1ec7454ebce59d99bc828bfd5086907eb0905632 Reviewed-by: Tim Jenssen --- src/libs/languageserverprotocol/icontent.h | 2 +- src/libs/modelinglib/qmt/infrastructure/uid.h | 2 +- src/libs/modelinglib/qmt/stereotype/customrelation.h | 6 +++--- .../modelinglib/qmt/stereotype/stereotypecontroller.cpp | 2 +- src/libs/sqlite/utf8string.h | 2 +- src/libs/utils/mimetypes/mimetype.h | 2 +- src/plugins/autotest/testresult.h | 2 +- src/plugins/classview/classviewsymbolinformation.h | 4 ++-- src/plugins/coreplugin/find/searchresultcolor.h | 2 +- src/plugins/debugger/breakhandler.h | 6 +++--- src/plugins/projectexplorer/abi.h | 2 +- src/plugins/projectexplorer/buildtargetinfo.h | 2 +- src/plugins/projectexplorer/headerpath.h | 2 +- src/plugins/projectexplorer/projectmacro.h | 2 +- src/plugins/qmlprofiler/qmleventlocation.h | 2 +- 15 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/libs/languageserverprotocol/icontent.h b/src/libs/languageserverprotocol/icontent.h index a6ecb407142..ea19b25a92d 100644 --- a/src/libs/languageserverprotocol/icontent.h +++ b/src/libs/languageserverprotocol/icontent.h @@ -92,7 +92,7 @@ struct ResponseHandler using ResponseHandlers = std::function; using MethodHandler = std::function; -inline uint qHash(const LanguageServerProtocol::MessageId &id) +inline auto qHash(const LanguageServerProtocol::MessageId &id) { if (Utils::holds_alternative(id)) return QT_PREPEND_NAMESPACE(qHash(Utils::get(id))); diff --git a/src/libs/modelinglib/qmt/infrastructure/uid.h b/src/libs/modelinglib/qmt/infrastructure/uid.h index 757f5c11b03..852daea248f 100644 --- a/src/libs/modelinglib/qmt/infrastructure/uid.h +++ b/src/libs/modelinglib/qmt/infrastructure/uid.h @@ -55,7 +55,7 @@ private: QUuid m_uuid; }; -inline uint qHash(const Uid &uid) +inline auto qHash(const Uid &uid) { return qHash(uid.get()); } diff --git a/src/libs/modelinglib/qmt/stereotype/customrelation.h b/src/libs/modelinglib/qmt/stereotype/customrelation.h index 0b72be20fdf..d74bd0dd4e4 100644 --- a/src/libs/modelinglib/qmt/stereotype/customrelation.h +++ b/src/libs/modelinglib/qmt/stereotype/customrelation.h @@ -151,15 +151,15 @@ private: QColor m_color; }; -inline uint qHash(CustomRelation::Relationship relationship) { +inline auto qHash(CustomRelation::Relationship relationship) { return ::qHash(static_cast(relationship)); } -inline uint qHash(CustomRelation::ShaftPattern pattern) { +inline auto qHash(CustomRelation::ShaftPattern pattern) { return ::qHash(static_cast(pattern)); } -inline uint qHash(CustomRelation::Head head) { +inline auto qHash(CustomRelation::Head head) { return ::qHash(static_cast(head)); } diff --git a/src/libs/modelinglib/qmt/stereotype/stereotypecontroller.cpp b/src/libs/modelinglib/qmt/stereotype/stereotypecontroller.cpp index ae1974717bd..925b7bb19ab 100644 --- a/src/libs/modelinglib/qmt/stereotype/stereotypecontroller.cpp +++ b/src/libs/modelinglib/qmt/stereotype/stereotypecontroller.cpp @@ -77,7 +77,7 @@ bool operator==(const IconKey &lhs, const IconKey &rhs) { && lhs.m_lineWidth == rhs.m_lineWidth; } -uint qHash(const IconKey &key) { +auto qHash(const IconKey &key) { return ::qHash(key.m_element) + qHash(key.m_stereotypes) + qHash(key.m_defaultIconPath) + qHash(key.m_styleUid) + ::qHash(key.m_size.width()) + ::qHash(key.m_size.height()); } diff --git a/src/libs/sqlite/utf8string.h b/src/libs/sqlite/utf8string.h index 0c6a1fb3341..28e77be487a 100644 --- a/src/libs/sqlite/utf8string.h +++ b/src/libs/sqlite/utf8string.h @@ -302,7 +302,7 @@ public: return datastream; } - friend uint qHash(const Utf8String &utf8String) + friend auto qHash(const Utf8String &utf8String) { return qHash(utf8String.byteArray); } diff --git a/src/libs/utils/mimetypes/mimetype.h b/src/libs/utils/mimetypes/mimetype.h index 4d64de32754..ff0acaae347 100644 --- a/src/libs/utils/mimetypes/mimetype.h +++ b/src/libs/utils/mimetypes/mimetype.h @@ -120,7 +120,7 @@ protected: QExplicitlySharedDataPointer d; }; -inline uint qHash(const MimeType &mime) { return qHash(mime.name()); } +inline auto qHash(const MimeType &mime) { return qHash(mime.name()); } } // Utils diff --git a/src/plugins/autotest/testresult.h b/src/plugins/autotest/testresult.h index e1081fe9523..241b0f711f2 100644 --- a/src/plugins/autotest/testresult.h +++ b/src/plugins/autotest/testresult.h @@ -75,7 +75,7 @@ enum class ResultType { LAST_TYPE = Invalid }; -inline uint qHash(const ResultType &result) +inline auto qHash(const ResultType &result) { return QT_PREPEND_NAMESPACE(qHash(int(result))); } diff --git a/src/plugins/classview/classviewsymbolinformation.h b/src/plugins/classview/classviewsymbolinformation.h index 8d5394aaddd..c6189c0b39e 100644 --- a/src/plugins/classview/classviewsymbolinformation.h +++ b/src/plugins/classview/classviewsymbolinformation.h @@ -46,7 +46,7 @@ public: inline const QString &name() const { return m_name; } inline const QString &type() const { return m_type; } inline int iconType() const { return m_iconType; } - inline uint hash() const { return m_hash; } + inline auto hash() const { return m_hash; } inline bool operator==(const SymbolInformation &other) const { return hash() == other.hash() && iconType() == other.iconType() && name() == other.name() @@ -64,7 +64,7 @@ private: }; //! qHash overload for QHash/QSet -inline uint qHash(const SymbolInformation &information) +inline auto qHash(const SymbolInformation &information) { return information.hash(); } diff --git a/src/plugins/coreplugin/find/searchresultcolor.h b/src/plugins/coreplugin/find/searchresultcolor.h index 0291133c0b8..ec1b4c1bd42 100644 --- a/src/plugins/coreplugin/find/searchresultcolor.h +++ b/src/plugins/coreplugin/find/searchresultcolor.h @@ -55,7 +55,7 @@ public: }; -inline uint qHash(SearchResultColor::Style style) +inline auto qHash(SearchResultColor::Style style) { return QT_PREPEND_NAMESPACE(qHash(int(style))); } diff --git a/src/plugins/debugger/breakhandler.h b/src/plugins/debugger/breakhandler.h index 20bd7365a12..b20555cae45 100644 --- a/src/plugins/debugger/breakhandler.h +++ b/src/plugins/debugger/breakhandler.h @@ -223,9 +223,9 @@ using SubBreakpoints = const QList; using BreakHandlerModel = Utils::TreeModel, BreakpointItem, SubBreakpointItem>; using BreakpointManagerModel = Utils::TreeModel, GlobalBreakpointItem>; -inline uint qHash(const Debugger::Internal::SubBreakpoint &b) { return qHash(b.data()); } -inline uint qHash(const Debugger::Internal::Breakpoint &b) { return qHash(b.data()); } -inline uint qHash(const Debugger::Internal::GlobalBreakpoint &b) { return qHash(b.data()); } +inline auto qHash(const Debugger::Internal::SubBreakpoint &b) { return qHash(b.data()); } +inline auto qHash(const Debugger::Internal::Breakpoint &b) { return qHash(b.data()); } +inline auto qHash(const Debugger::Internal::GlobalBreakpoint &b) { return qHash(b.data()); } class BreakHandler : public BreakHandlerModel { diff --git a/src/plugins/projectexplorer/abi.h b/src/plugins/projectexplorer/abi.h index fbc868cb5e3..2ddfdfa8817 100644 --- a/src/plugins/projectexplorer/abi.h +++ b/src/plugins/projectexplorer/abi.h @@ -193,7 +193,7 @@ private: QString m_param; }; -inline int qHash(const ProjectExplorer::Abi &abi) +inline auto qHash(const ProjectExplorer::Abi &abi) { int h = abi.architecture() + (abi.os() << 3) diff --git a/src/plugins/projectexplorer/buildtargetinfo.h b/src/plugins/projectexplorer/buildtargetinfo.h index 28af0330a4f..7d786de3ca7 100644 --- a/src/plugins/projectexplorer/buildtargetinfo.h +++ b/src/plugins/projectexplorer/buildtargetinfo.h @@ -70,7 +70,7 @@ inline bool operator!=(const BuildTargetInfo &ti1, const BuildTargetInfo &ti2) return !(ti1 == ti2); } -inline uint qHash(const BuildTargetInfo &ti) +inline auto qHash(const BuildTargetInfo &ti) { return qHash(ti.displayName) ^ qHash(ti.buildKey); } diff --git a/src/plugins/projectexplorer/headerpath.h b/src/plugins/projectexplorer/headerpath.h index 26e10315fcc..09337684b34 100644 --- a/src/plugins/projectexplorer/headerpath.h +++ b/src/plugins/projectexplorer/headerpath.h @@ -59,7 +59,7 @@ public: HeaderPathType type = HeaderPathType::User; }; -inline uint qHash(const HeaderPath &key, uint seed = 0) +inline auto qHash(const HeaderPath &key, uint seed = 0) { return ((qHash(key.path) << 2) | uint(key.type)) ^ seed; } diff --git a/src/plugins/projectexplorer/projectmacro.h b/src/plugins/projectexplorer/projectmacro.h index 2a4537aaf89..76125b53af4 100644 --- a/src/plugins/projectexplorer/projectmacro.h +++ b/src/plugins/projectexplorer/projectmacro.h @@ -85,7 +85,7 @@ private: }; inline -uint qHash(const Macro ¯o) +auto qHash(const Macro ¯o) { using QT_PREPEND_NAMESPACE(qHash); return qHash(macro.key) ^ qHash(macro.value) ^ qHash(int(macro.type)); diff --git a/src/plugins/qmlprofiler/qmleventlocation.h b/src/plugins/qmlprofiler/qmleventlocation.h index b29440987cc..5faf9071019 100644 --- a/src/plugins/qmlprofiler/qmleventlocation.h +++ b/src/plugins/qmlprofiler/qmleventlocation.h @@ -76,7 +76,7 @@ inline bool operator!=(const QmlEventLocation &location1, const QmlEventLocation return !(location1 == location2); } -inline uint qHash(const QmlEventLocation &location) +inline auto qHash(const QmlEventLocation &location) { return qHash(location.filename()) ^ ((location.line() & 0xfff) // 12 bits of line number From 59ac4dbf0dd515a755597e53bdfe6fda94bb4b18 Mon Sep 17 00:00:00 2001 From: Tim Jenssen Date: Wed, 7 Jul 2021 17:33:32 +0200 Subject: [PATCH 12/16] fix msvc Qt6 dev builds Change-Id: I4264a15c5033b9123c4e97caa86a909e654cef34 Reviewed-by: hjk Reviewed-by: Qt CI Bot --- src/plugins/baremetal/baremetaldeviceconfigurationwidget.cpp | 1 + src/plugins/baremetal/baremetaldeviceconfigurationwizard.cpp | 2 ++ .../baremetal/baremetaldeviceconfigurationwizardpages.cpp | 1 + src/plugins/docker/dockerdevice.cpp | 1 + src/plugins/nim/project/nimtoolchainfactory.cpp | 1 + .../devicesupport/desktopprocesssignaloperation.cpp | 1 + .../devicesupport/devicefactoryselectiondialog.cpp | 2 ++ .../projectexplorer/devicesupport/devicemanagermodel.cpp | 1 + src/plugins/projectexplorer/devicesupport/deviceprocess.cpp | 1 + src/plugins/projectexplorer/devicesupport/deviceprocesslist.cpp | 1 + src/plugins/projectexplorer/devicesupport/devicetestdialog.cpp | 2 ++ .../projectexplorer/devicesupport/sshdeviceprocesslist.cpp | 1 + src/plugins/qnx/qnxdeviceprocesslist.cpp | 1 + src/plugins/qnx/qnxdeviceprocesssignaloperation.cpp | 2 ++ src/plugins/qnx/qnxdevicetester.cpp | 1 + .../remotelinux/genericlinuxdeviceconfigurationwizard.cpp | 1 + .../remotelinux/remotelinuxcheckforfreediskspaceservice.cpp | 1 + .../remotelinux/remotelinuxcustomcommanddeployservice.cpp | 1 + src/plugins/remotelinux/remotelinuxkillappservice.cpp | 2 ++ src/plugins/remotelinux/remotelinuxpackageinstaller.cpp | 1 + src/plugins/remotelinux/remotelinuxsignaloperation.cpp | 1 + 21 files changed, 26 insertions(+) diff --git a/src/plugins/baremetal/baremetaldeviceconfigurationwidget.cpp b/src/plugins/baremetal/baremetaldeviceconfigurationwidget.cpp index e20e89bc824..351484ee67e 100644 --- a/src/plugins/baremetal/baremetaldeviceconfigurationwidget.cpp +++ b/src/plugins/baremetal/baremetaldeviceconfigurationwidget.cpp @@ -30,6 +30,7 @@ #include "debugserverproviderchooser.h" #include +#include #include diff --git a/src/plugins/baremetal/baremetaldeviceconfigurationwizard.cpp b/src/plugins/baremetal/baremetaldeviceconfigurationwizard.cpp index 2555b9f5914..bb8a3f6b96f 100644 --- a/src/plugins/baremetal/baremetaldeviceconfigurationwizard.cpp +++ b/src/plugins/baremetal/baremetaldeviceconfigurationwizard.cpp @@ -29,6 +29,8 @@ #include "baremetaldeviceconfigurationwizard.h" #include "baremetaldeviceconfigurationwizardpages.h" +#include + namespace BareMetal { namespace Internal { diff --git a/src/plugins/baremetal/baremetaldeviceconfigurationwizardpages.cpp b/src/plugins/baremetal/baremetaldeviceconfigurationwizardpages.cpp index 7b5a58ff49d..52849a9efa7 100644 --- a/src/plugins/baremetal/baremetaldeviceconfigurationwizardpages.cpp +++ b/src/plugins/baremetal/baremetaldeviceconfigurationwizardpages.cpp @@ -30,6 +30,7 @@ #include "debugserverproviderchooser.h" #include +#include #include #include diff --git a/src/plugins/docker/dockerdevice.cpp b/src/plugins/docker/dockerdevice.cpp index 515b3ad5bd4..d90c83ee485 100644 --- a/src/plugins/docker/dockerdevice.cpp +++ b/src/plugins/docker/dockerdevice.cpp @@ -57,6 +57,7 @@ #include #include #include +#include #include #include diff --git a/src/plugins/nim/project/nimtoolchainfactory.cpp b/src/plugins/nim/project/nimtoolchainfactory.cpp index 1d11d1bd873..7876cd30a68 100644 --- a/src/plugins/nim/project/nimtoolchainfactory.cpp +++ b/src/plugins/nim/project/nimtoolchainfactory.cpp @@ -33,6 +33,7 @@ #include #include #include +#include #include #include diff --git a/src/plugins/projectexplorer/devicesupport/desktopprocesssignaloperation.cpp b/src/plugins/projectexplorer/devicesupport/desktopprocesssignaloperation.cpp index 333a264bbe5..8afa9611052 100644 --- a/src/plugins/projectexplorer/devicesupport/desktopprocesssignaloperation.cpp +++ b/src/plugins/projectexplorer/devicesupport/desktopprocesssignaloperation.cpp @@ -30,6 +30,7 @@ #include #include +#include #include #include diff --git a/src/plugins/projectexplorer/devicesupport/devicefactoryselectiondialog.cpp b/src/plugins/projectexplorer/devicesupport/devicefactoryselectiondialog.cpp index f2e9688df17..6ba62b26c49 100644 --- a/src/plugins/projectexplorer/devicesupport/devicefactoryselectiondialog.cpp +++ b/src/plugins/projectexplorer/devicesupport/devicefactoryselectiondialog.cpp @@ -29,6 +29,8 @@ #include "idevice.h" #include "idevicefactory.h" +#include + #include namespace ProjectExplorer { diff --git a/src/plugins/projectexplorer/devicesupport/devicemanagermodel.cpp b/src/plugins/projectexplorer/devicesupport/devicemanagermodel.cpp index 6f01cc8749c..f38f7e8e7b2 100644 --- a/src/plugins/projectexplorer/devicesupport/devicemanagermodel.cpp +++ b/src/plugins/projectexplorer/devicesupport/devicemanagermodel.cpp @@ -28,6 +28,7 @@ #include "devicemanager.h" #include +#include #include diff --git a/src/plugins/projectexplorer/devicesupport/deviceprocess.cpp b/src/plugins/projectexplorer/devicesupport/deviceprocess.cpp index dd6b89d4c70..766e21cb999 100644 --- a/src/plugins/projectexplorer/devicesupport/deviceprocess.cpp +++ b/src/plugins/projectexplorer/devicesupport/deviceprocess.cpp @@ -28,6 +28,7 @@ #include "idevice.h" #include +#include namespace ProjectExplorer { diff --git a/src/plugins/projectexplorer/devicesupport/deviceprocesslist.cpp b/src/plugins/projectexplorer/devicesupport/deviceprocesslist.cpp index 04059561005..50ccc5c66b9 100644 --- a/src/plugins/projectexplorer/devicesupport/deviceprocesslist.cpp +++ b/src/plugins/projectexplorer/devicesupport/deviceprocesslist.cpp @@ -28,6 +28,7 @@ #include #include +#include using namespace Utils; diff --git a/src/plugins/projectexplorer/devicesupport/devicetestdialog.cpp b/src/plugins/projectexplorer/devicesupport/devicetestdialog.cpp index fd4dc1385b7..3c28a48fd14 100644 --- a/src/plugins/projectexplorer/devicesupport/devicetestdialog.cpp +++ b/src/plugins/projectexplorer/devicesupport/devicetestdialog.cpp @@ -26,6 +26,8 @@ #include "devicetestdialog.h" #include "ui_devicetestdialog.h" +#include + #include #include #include diff --git a/src/plugins/projectexplorer/devicesupport/sshdeviceprocesslist.cpp b/src/plugins/projectexplorer/devicesupport/sshdeviceprocesslist.cpp index d8107458fd5..32d58dc5dce 100644 --- a/src/plugins/projectexplorer/devicesupport/sshdeviceprocesslist.cpp +++ b/src/plugins/projectexplorer/devicesupport/sshdeviceprocesslist.cpp @@ -29,6 +29,7 @@ #include #include +#include using namespace QSsh; diff --git a/src/plugins/qnx/qnxdeviceprocesslist.cpp b/src/plugins/qnx/qnxdeviceprocesslist.cpp index 81b2fb531b9..1269ea3c165 100644 --- a/src/plugins/qnx/qnxdeviceprocesslist.cpp +++ b/src/plugins/qnx/qnxdeviceprocesslist.cpp @@ -26,6 +26,7 @@ #include "qnxdeviceprocesslist.h" #include +#include #include #include diff --git a/src/plugins/qnx/qnxdeviceprocesssignaloperation.cpp b/src/plugins/qnx/qnxdeviceprocesssignaloperation.cpp index df2f95913fb..be72624d7ce 100644 --- a/src/plugins/qnx/qnxdeviceprocesssignaloperation.cpp +++ b/src/plugins/qnx/qnxdeviceprocesssignaloperation.cpp @@ -25,6 +25,8 @@ #include "qnxdeviceprocesssignaloperation.h" +#include + using namespace Qnx; using namespace Qnx::Internal; diff --git a/src/plugins/qnx/qnxdevicetester.cpp b/src/plugins/qnx/qnxdevicetester.cpp index f4a88b62b62..17787274c0f 100644 --- a/src/plugins/qnx/qnxdevicetester.cpp +++ b/src/plugins/qnx/qnxdevicetester.cpp @@ -28,6 +28,7 @@ #include #include +#include namespace Qnx { namespace Internal { diff --git a/src/plugins/remotelinux/genericlinuxdeviceconfigurationwizard.cpp b/src/plugins/remotelinux/genericlinuxdeviceconfigurationwizard.cpp index e4c7565b037..63596622e82 100644 --- a/src/plugins/remotelinux/genericlinuxdeviceconfigurationwizard.cpp +++ b/src/plugins/remotelinux/genericlinuxdeviceconfigurationwizard.cpp @@ -30,6 +30,7 @@ #include "remotelinux_constants.h" #include +#include using namespace ProjectExplorer; using namespace QSsh; diff --git a/src/plugins/remotelinux/remotelinuxcheckforfreediskspaceservice.cpp b/src/plugins/remotelinux/remotelinuxcheckforfreediskspaceservice.cpp index e1d2447c510..4f75d409557 100644 --- a/src/plugins/remotelinux/remotelinuxcheckforfreediskspaceservice.cpp +++ b/src/plugins/remotelinux/remotelinuxcheckforfreediskspaceservice.cpp @@ -26,6 +26,7 @@ #include "remotelinuxcheckforfreediskspaceservice.h" #include +#include namespace RemoteLinux { namespace Internal { diff --git a/src/plugins/remotelinux/remotelinuxcustomcommanddeployservice.cpp b/src/plugins/remotelinux/remotelinuxcustomcommanddeployservice.cpp index 471ace1a0e6..7b7f59efd5c 100644 --- a/src/plugins/remotelinux/remotelinuxcustomcommanddeployservice.cpp +++ b/src/plugins/remotelinux/remotelinuxcustomcommanddeployservice.cpp @@ -26,6 +26,7 @@ #include "remotelinuxcustomcommanddeployservice.h" #include +#include #include using namespace QSsh; diff --git a/src/plugins/remotelinux/remotelinuxkillappservice.cpp b/src/plugins/remotelinux/remotelinuxkillappservice.cpp index c3ce06c2548..73e7b697e5c 100644 --- a/src/plugins/remotelinux/remotelinuxkillappservice.cpp +++ b/src/plugins/remotelinux/remotelinuxkillappservice.cpp @@ -25,6 +25,8 @@ #include "remotelinuxkillappservice.h" +#include +# namespace RemoteLinux { namespace Internal { class RemoteLinuxKillAppServicePrivate diff --git a/src/plugins/remotelinux/remotelinuxpackageinstaller.cpp b/src/plugins/remotelinux/remotelinuxpackageinstaller.cpp index bf27f6d03ea..e61a0bb7e9d 100644 --- a/src/plugins/remotelinux/remotelinuxpackageinstaller.cpp +++ b/src/plugins/remotelinux/remotelinuxpackageinstaller.cpp @@ -26,6 +26,7 @@ #include "remotelinuxpackageinstaller.h" #include +#include #include using namespace ProjectExplorer; diff --git a/src/plugins/remotelinux/remotelinuxsignaloperation.cpp b/src/plugins/remotelinux/remotelinuxsignaloperation.cpp index 5a5def6bb31..b2dcdf1233b 100644 --- a/src/plugins/remotelinux/remotelinuxsignaloperation.cpp +++ b/src/plugins/remotelinux/remotelinuxsignaloperation.cpp @@ -28,6 +28,7 @@ #include #include #include +#include using namespace RemoteLinux; using namespace ProjectExplorer; From 4c878e570010dcb1b1c4318ff56e8b15b542b336 Mon Sep 17 00:00:00 2001 From: Tim Jenssen Date: Wed, 7 Jul 2021 17:34:09 +0200 Subject: [PATCH 13/16] smallstring: Avoid size_t to (u)int warning Change-Id: If206f0e3a90694b4e0d50e2d4569e0d6a34cf8ce Reviewed-by: Tim Jenssen --- src/libs/utils/smallstringio.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/utils/smallstringio.h b/src/libs/utils/smallstringio.h index 2ab190da345..10690f8ad85 100644 --- a/src/libs/utils/smallstringio.h +++ b/src/libs/utils/smallstringio.h @@ -155,7 +155,7 @@ namespace std { template<> struct hash { using argument_type = Utils::SmallString; - using result_type = uint; + using result_type = std::size_t; result_type operator()(const argument_type& string) const { return qHashBits(string.data(), string.size()); From 22a87fdd95761189f68b937a10d3d52a5a66ae68 Mon Sep 17 00:00:00 2001 From: Tim Jenssen Date: Wed, 7 Jul 2021 13:04:37 +0200 Subject: [PATCH 14/16] qmlpuppet: adjust to api changes in Qt 6.2 Change-Id: I3c9139cacb7ff9eb7b8138e0a7f589280a24c13a Reviewed-by: Qt CI Bot Reviewed-by: Tim Jenssen --- .../qmlpuppet/qmlprivategate/qmlprivategate.h | 4 +--- .../qmlprivategate/qmlprivategate_56.cpp | 20 ++++++++----------- 2 files changed, 9 insertions(+), 15 deletions(-) diff --git a/share/qtcreator/qml/qmlpuppet/qmlprivategate/qmlprivategate.h b/share/qtcreator/qml/qmlpuppet/qmlprivategate/qmlprivategate.h index b0b68907edd..6577b3a4f5a 100644 --- a/share/qtcreator/qml/qmlpuppet/qmlprivategate/qmlprivategate.h +++ b/share/qtcreator/qml/qmlpuppet/qmlprivategate/qmlprivategate.h @@ -71,9 +71,7 @@ public: PropertyNameList propertyNameListForWritableProperties(QObject *object, const PropertyName &baseName = PropertyName(), QObjectList *inspectedObjects = nullptr); - PropertyNameList allPropertyNames(QObject *object, - const PropertyName &baseName = PropertyName(), - QObjectList *inspectedObjects = nullptr); + PropertyNameList allPropertyNames(QObject *object); bool hasFullImplementedListInterface(const QQmlListReference &list); void registerCustomData(QObject *object); diff --git a/share/qtcreator/qml/qmlpuppet/qmlprivategate/qmlprivategate_56.cpp b/share/qtcreator/qml/qmlpuppet/qmlprivategate/qmlprivategate_56.cpp index 2f775d05346..f0ef76cb19d 100644 --- a/share/qtcreator/qml/qmlpuppet/qmlprivategate/qmlprivategate_56.cpp +++ b/share/qtcreator/qml/qmlpuppet/qmlprivategate/qmlprivategate_56.cpp @@ -68,8 +68,8 @@ static void addToPropertyNameListIfNotBlackListed( } PropertyNameList allPropertyNamesInline(QObject *object, - const PropertyName &baseName, - QObjectList *inspectedObjects, + const PropertyName &baseName = {}, + QObjectList *inspectedObjects = nullptr, int depth = 0) { QQuickDesignerSupport::PropertyNameList propertyNameList; @@ -136,24 +136,20 @@ PropertyNameList allPropertyNamesInline(QObject *object, } #endif -PropertyNameList allPropertyNames(QObject *object, - const PropertyName &baseName, - QObjectList *inspectedObjects) +PropertyNameList allPropertyNames(QObject *object) { #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) - return QQuickDesignerSupportProperties::allPropertyNames(object, baseName, inspectedObjects); + return QQuickDesignerSupportProperties::allPropertyNames(object); #elif QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) - return allPropertyNamesInline(object, baseName, inspectedObjects); + return allPropertyNamesInline(object); #else - return QQuickDesignerSupportProperties::allPropertyNames(object, baseName, inspectedObjects); + return QQuickDesignerSupportProperties::allPropertyNames(object); #endif } -PropertyNameList propertyNameListForWritableProperties(QObject *object, - const PropertyName &baseName, - QObjectList *inspectedObjects) +PropertyNameList propertyNameListForWritableProperties(QObject *object) { - return QQuickDesignerSupportProperties::propertyNameListForWritableProperties(object, baseName, inspectedObjects); + return QQuickDesignerSupportProperties::propertyNameListForWritableProperties(object); } void tweakObjects(QObject *object) From 50f9180cd21ce57bdbb15bd863ae2884c9a81009 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Fri, 2 Jul 2021 15:01:25 +0200 Subject: [PATCH 15/16] QML/JS Editor: Fix UI text Task-number: QTCREATORBUG-25915 Change-Id: I96da82dee989cc1833e1219f33cbee072df19f83 Reviewed-by: Vikas Pachdha --- src/plugins/qmljseditor/qmljscomponentnamedialog.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/plugins/qmljseditor/qmljscomponentnamedialog.cpp b/src/plugins/qmljseditor/qmljscomponentnamedialog.cpp index 293f6e385be..55e374676ea 100644 --- a/src/plugins/qmljseditor/qmljscomponentnamedialog.cpp +++ b/src/plugins/qmljseditor/qmljscomponentnamedialog.cpp @@ -163,13 +163,13 @@ QString ComponentNameDialog::isValid() const QString compName = ui->componentNameEdit->text(); if (compName.isEmpty() || !compName[0].isUpper()) - return tr("Invalid component name"); + return tr("Invalid component name."); if (!ui->pathEdit->isValid()) - return tr("Invalid path"); + return tr("Invalid path."); if (QDir(ui->pathEdit->path()).exists(compName + u".qml")) - return tr("Component already exists"); + return tr("Component already exists."); return QString(); } From eff5cbeb86d36297d86e55d5c94a9bb767d1095b Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Tue, 6 Jul 2021 15:50:50 +0200 Subject: [PATCH 16/16] CppEditor: Enable/disable outline dynamically The "outline enabled" property is not static: E.g. the user might switch on/off clangd support, and then we should hide/show our outline, respectively. This also eliminates the danger of null pointer accesses. Amends c0a44be27b. Fixes: QTCREATORBUG-25963 Change-Id: I508b9700ba1a99204ea8315546db089486b5d122 Reviewed-by: David Schulz --- src/plugins/cppeditor/cppeditorwidget.cpp | 45 ++++++++++++++++------- 1 file changed, 32 insertions(+), 13 deletions(-) diff --git a/src/plugins/cppeditor/cppeditorwidget.cpp b/src/plugins/cppeditor/cppeditorwidget.cpp index ee242640bc0..d2abe8699f8 100644 --- a/src/plugins/cppeditor/cppeditorwidget.cpp +++ b/src/plugins/cppeditor/cppeditorwidget.cpp @@ -49,6 +49,7 @@ #include #include #include +#include #include #include #include @@ -114,11 +115,15 @@ class CppEditorWidgetPrivate public: CppEditorWidgetPrivate(CppEditorWidget *q); + bool shouldOfferOutline() const { return CppModelManager::supportsOutline(m_cppEditorDocument); } + public: QPointer m_modelManager; CppEditorDocument *m_cppEditorDocument; CppEditorOutline *m_cppEditorOutline = nullptr; + QAction *m_outlineAction = nullptr; + QTimer m_outlineTimer; QTimer m_updateFunctionDeclDefLinkTimer; SemanticInfo m_lastSemanticInfo; @@ -159,11 +164,11 @@ void CppEditorWidget::finalizeInitialization() // clang-format off // function combo box sorting - if (CppModelManager::supportsOutline(d->m_cppEditorDocument)) { - d->m_cppEditorOutline = new CppEditorOutline(this); - connect(CppEditorPlugin::instance(), &CppEditorPlugin::outlineSortingChanged, - outline(), &CppEditorOutline::setSorted); - } + d->m_cppEditorOutline = new CppEditorOutline(this); + + // TODO: Nobody emits this signal... Remove? + connect(CppEditorPlugin::instance(), &CppEditorPlugin::outlineSortingChanged, + outline(), &CppEditorOutline::setSorted); connect(d->m_cppEditorDocument, &CppEditorDocument::codeWarningsUpdated, this, &CppEditorWidget::onCodeWarningsUpdated); @@ -197,10 +202,10 @@ void CppEditorWidget::finalizeInitialization() }); connect(&d->m_localRenaming, &CppLocalRenaming::processKeyPressNormally, this, &CppEditorWidget::processKeyNormally); - if (d->m_cppEditorOutline) { - connect(this, &QPlainTextEdit::cursorPositionChanged, - d->m_cppEditorOutline, &CppEditorOutline::updateIndex); - } + connect(this, &QPlainTextEdit::cursorPositionChanged, this, [this] { + if (d->shouldOfferOutline()) + d->m_cppEditorOutline->updateIndex(); + }); connect(cppEditorDocument(), &CppEditorDocument::preprocessorSettingsChanged, this, [this](bool customSettings) { @@ -236,8 +241,8 @@ void CppEditorWidget::finalizeInitialization() }); // Toolbar: Outline/Overview combo box - if (d->m_cppEditorOutline) - insertExtraToolBarWidget(TextEditorWidget::Left, d->m_cppEditorOutline->widget()); + d->m_outlineAction = insertExtraToolBarWidget(TextEditorWidget::Left, + d->m_cppEditorOutline->widget()); // clang-format on // Toolbar: '#' Button @@ -261,6 +266,20 @@ void CppEditorWidget::finalizeInitialization() }); connect(&cppEditorDocument()->minimizableInfoBars(), &MinimizableInfoBars::showAction, this, &CppEditorWidget::onShowInfoBarAction); + + d->m_outlineTimer.setInterval(5000); + d->m_outlineTimer.setSingleShot(true); + connect(&d->m_outlineTimer, &QTimer::timeout, this, [this] { + d->m_outlineAction->setVisible(d->shouldOfferOutline()); + if (d->m_outlineAction->isVisible()) { + d->m_cppEditorOutline->update(); + d->m_cppEditorOutline->updateIndex(); + } + }); + connect(&ClangdSettings::instance(), &ClangdSettings::changed, + &d->m_outlineTimer, qOverload<>(&QTimer::start)); + connect(d->m_cppEditorDocument, &CppEditorDocument::changed, + &d->m_outlineTimer, qOverload<>(&QTimer::start)); } void CppEditorWidget::finalizeInitializationAfterDuplication(TextEditorWidget *other) @@ -271,7 +290,7 @@ void CppEditorWidget::finalizeInitializationAfterDuplication(TextEditorWidget *o if (cppEditorWidget->isSemanticInfoValidExceptLocalUses()) updateSemanticInfo(cppEditorWidget->semanticInfo()); - if (d->m_cppEditorOutline) + if (d->shouldOfferOutline()) d->m_cppEditorOutline->update(); const Id selectionKind = CodeWarningsSelection; setExtraSelections(selectionKind, cppEditorWidget->extraSelections(selectionKind)); @@ -331,7 +350,7 @@ void CppEditorWidget::selectAll() void CppEditorWidget::onCppDocumentUpdated() { - if (d->m_cppEditorOutline) + if (d->shouldOfferOutline()) d->m_cppEditorOutline->update(); }