From 30bd05b792259a559e98c6a19035f7b6adaac1ce Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Fri, 22 Dec 2017 11:25:30 +0100 Subject: [PATCH 01/15] Update qbs submodule To HEAD of 1.10 branch. Change-Id: I352a93492a4f8e67f81c47b221abfa0881f647d9 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 8815e000700..7862e87dc3e 160000 --- a/src/shared/qbs +++ b/src/shared/qbs @@ -1 +1 @@ -Subproject commit 8815e0007006e996bc145a91970d71b9b4ae86d0 +Subproject commit 7862e87dc3ed3f7e2e6c8de936d6e15e914a02a4 From b861e31f1a5eaeccf4053c87e8b307df5e1de66c Mon Sep 17 00:00:00 2001 From: Ivan Donchevskii Date: Tue, 2 Jan 2018 15:26:08 +0100 Subject: [PATCH 02/15] Clang: macOS: fix unknown integer types Always exclude clang include paths which do not come with libclang used by code model. This solves the issue with GCC that uses system clang include folder on macOS. Task-number: QTCREATORBUG-19397 Change-Id: I3b4845248a3cf03a95fbd4038856f8fb31346bfa Reviewed-by: Nikolai Kosjar --- .../cpptools/clangcompileroptionsbuilder.cpp | 10 ---------- .../cpptools/clangcompileroptionsbuilder.h | 2 -- src/plugins/cpptools/compileroptionsbuilder.cpp | 17 +++++++---------- 3 files changed, 7 insertions(+), 22 deletions(-) diff --git a/src/plugins/cpptools/clangcompileroptionsbuilder.cpp b/src/plugins/cpptools/clangcompileroptionsbuilder.cpp index 6a412e7d725..f94b75ae3bf 100644 --- a/src/plugins/cpptools/clangcompileroptionsbuilder.cpp +++ b/src/plugins/cpptools/clangcompileroptionsbuilder.cpp @@ -89,16 +89,6 @@ ClangCompilerOptionsBuilder::ClangCompilerOptionsBuilder(const CppTools::Project { } -bool ClangCompilerOptionsBuilder::excludeHeaderPath(const QString &path) const -{ - if (m_projectPart.toolchainType == ProjectExplorer::Constants::CLANG_TOOLCHAIN_TYPEID - && path.contains("lib/gcc/i686-apple-darwin")) { - return true; - } - - return CompilerOptionsBuilder::excludeHeaderPath(path); -} - void ClangCompilerOptionsBuilder::addPredefinedHeaderPathsOptions() { add("-undef"); diff --git a/src/plugins/cpptools/clangcompileroptionsbuilder.h b/src/plugins/cpptools/clangcompileroptionsbuilder.h index fbe2a5baad2..d8ed2f03a2e 100644 --- a/src/plugins/cpptools/clangcompileroptionsbuilder.h +++ b/src/plugins/cpptools/clangcompileroptionsbuilder.h @@ -44,8 +44,6 @@ public: virtual void addPredefinedHeaderPathsOptions(); virtual void addExtraOptions(); - bool excludeHeaderPath(const QString &path) const override; - virtual void addWrappedQtHeadersIncludePath(); void addProjectConfigFileInclude(); diff --git a/src/plugins/cpptools/compileroptionsbuilder.cpp b/src/plugins/cpptools/compileroptionsbuilder.cpp index 914973bc447..43a4146218d 100644 --- a/src/plugins/cpptools/compileroptionsbuilder.cpp +++ b/src/plugins/cpptools/compileroptionsbuilder.cpp @@ -440,16 +440,13 @@ bool CompilerOptionsBuilder::excludeDefineDirective(const ProjectExplorer::Macro bool CompilerOptionsBuilder::excludeHeaderPath(const QString &headerPath) const { - // A clang tool chain might have another version and passing in the - // intrinsics path from that version will lead to errors (unknown - // intrinsics, unfavorable order with regard to include_next). - if (m_projectPart.toolchainType == ProjectExplorer::Constants::CLANG_TOOLCHAIN_TYPEID) { - static QRegularExpression clangIncludeDir( - QLatin1String("\\A.*/lib/clang/\\d+\\.\\d+(\\.\\d+)?/include\\z")); - return clangIncludeDir.match(headerPath).hasMatch(); - } - - return false; + // Always exclude clang system includes (including intrinsics) which do not come with libclang + // that Qt Creator uses for code model. + // For example GCC on macOS uses system clang include path which makes clang code model + // include incorrect system headers. + static QRegularExpression clangIncludeDir( + QLatin1String("\\A.*/lib/clang/\\d+\\.\\d+(\\.\\d+)?/include\\z")); + return clangIncludeDir.match(headerPath).hasMatch(); } } // namespace CppTools From bada98379d4891ed230a55549d45cf26eafed73e Mon Sep 17 00:00:00 2001 From: Robert Loehning Date: Wed, 27 Dec 2017 13:10:18 +0100 Subject: [PATCH 03/15] Squish: Remove outdated workaround Task-number: QTCREATORBUG-18290 Change-Id: Iddf51cc9655d24c866d3887afc4be6291768087d Reviewed-by: Christian Stenger --- .../suite_general/tst_cmake_speedcrunch/test.py | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/tests/system/suite_general/tst_cmake_speedcrunch/test.py b/tests/system/suite_general/tst_cmake_speedcrunch/test.py index 6801d7c7834..fdfbd1f0651 100644 --- a/tests/system/suite_general/tst_cmake_speedcrunch/test.py +++ b/tests/system/suite_general/tst_cmake_speedcrunch/test.py @@ -68,16 +68,13 @@ def main(): treeFile = "projecttree_speedcrunch.tsv" compareProjectTree(naviTreeView % "speedcrunch( \[\S+\])?", treeFile) - if not cmakeSupportsServerMode() and JIRA.isBugStillOpen(18290): - test.xfail("Building with cmake in Tealeafreader mode may fail", "QTCREATORBUG-18290") - else: - # Invoke a rebuild of the application - invokeMenuItem("Build", "Rebuild All") + # Invoke a rebuild of the application + invokeMenuItem("Build", "Rebuild All") - # Wait for, and test if the build succeeded - waitForCompile(300000) - checkCompile() - checkLastBuild() + # Wait for, and test if the build succeeded + waitForCompile(300000) + checkCompile() + checkLastBuild() invokeMenuItem("File", "Exit") From 0ebdeccb83d882d4ee10521b630a67d0e62d686e Mon Sep 17 00:00:00 2001 From: Ulf Hermann Date: Wed, 3 Jan 2018 11:52:16 +0100 Subject: [PATCH 04/15] QmlProfiler: Set scheme for URL in attach dialog Change-Id: I2d96753c52f34f5d1b7a1f5de7792de748b3f507 Task-number: QTCREATORBUG-19496 Reviewed-by: hjk --- src/plugins/qmlprofiler/qmlprofilertool.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/plugins/qmlprofiler/qmlprofilertool.cpp b/src/plugins/qmlprofiler/qmlprofilertool.cpp index 3488c93f14d..8e6b0014bb5 100644 --- a/src/plugins/qmlprofiler/qmlprofilertool.cpp +++ b/src/plugins/qmlprofiler/qmlprofilertool.cpp @@ -551,6 +551,7 @@ void QmlProfilerTool::attachToWaitingApplication() IDevice::ConstPtr device = DeviceKitInformation::device(kit); QTC_ASSERT(device, return); QUrl toolControl = device->toolControlChannel(IDevice::QmlControlChannel); + serverUrl.setScheme(urlTcpScheme()); serverUrl.setHost(toolControl.host()); serverUrl.setPort(port); From 359e4c88c929980344180eb07bbb262707b768cb Mon Sep 17 00:00:00 2001 From: Ulf Hermann Date: Wed, 3 Jan 2018 12:42:09 +0100 Subject: [PATCH 05/15] QmlProfiler: Stop run control if connection to external app closes We don't have control over the application's life cycle in this case, so we need to use the debug connection as indicator. Change-Id: I3f30194e12c10c6585a58133c5148dbea9e6761f Task-number: QTCREATORBUG-19496 Reviewed-by: hjk --- src/plugins/qmlprofiler/qmlprofilertool.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/plugins/qmlprofiler/qmlprofilertool.cpp b/src/plugins/qmlprofiler/qmlprofilertool.cpp index 8e6b0014bb5..9966b2132d8 100644 --- a/src/plugins/qmlprofiler/qmlprofilertool.cpp +++ b/src/plugins/qmlprofiler/qmlprofilertool.cpp @@ -562,6 +562,8 @@ void QmlProfilerTool::attachToWaitingApplication() auto profiler = new QmlProfilerRunner(runControl); profiler->setServerUrl(serverUrl); + connect(d->m_profilerConnections, &QmlProfilerClientManager::connectionClosed, + runControl, &RunControl::initiateStop); ProjectExplorerPlugin::startRunControl(runControl); } From ffe120a43ff93e9ba0b37e987496c886c3274ad9 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Wed, 3 Jan 2018 10:59:50 +0100 Subject: [PATCH 06/15] Debugger: imitate windows gdb all uppercase PATH env variable name Task-number: QTCREATORBUG-19547 Change-Id: I57295b7febd7e017408d5d75ebec7020a7cbb32f Reviewed-by: hjk --- src/plugins/debugger/gdb/gdbengine.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index d87c33a7414..5ec1e38feb7 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -3955,14 +3955,22 @@ void GdbEngine::loadInitScript() void GdbEngine::setEnvironmentVariables() { + auto isWindowsPath = [this](const QString &str){ + return HostOsInfo::isWindowsHost() + && !isRemoteEngine() + && str.compare("path", Qt::CaseInsensitive) == 0; + }; + Environment sysEnv = Environment::systemEnvironment(); Environment runEnv = runParameters().inferior.environment; foreach (const EnvironmentItem &item, sysEnv.diff(runEnv)) { + // imitate the weird windows gdb behavior of setting the case of the path environment + // variable name to an all uppercase PATH + const QString name = isWindowsPath(item.name) ? "PATH" : item.name; if (item.operation == EnvironmentItem::Unset) - runCommand({"unset environment " + item.name}); + runCommand({"unset environment " + name}); else - runCommand({"-gdb-set environment " + item.name + '=' - + item.value}); + runCommand({"-gdb-set environment " + name + '=' + item.value}); } } From 4a5bd323a9bc9c2de44e92f8414ed283feb314b1 Mon Sep 17 00:00:00 2001 From: Ulf Hermann Date: Wed, 3 Jan 2018 13:40:48 +0100 Subject: [PATCH 07/15] QmlProfiler: Retain event types between sessions on same connection The server won't re-send the event types. We need to keep them until the connection goes away. Otherwise we get invalid event types and soft asserts when trying to look up event types for new events. Also, when clearing the event types, also clear the server type IDs. Not clearing those constitutes a memory leak. Change-Id: I564b0c4cf0ed754549d2b8ede63c97fa01affcec Reviewed-by: Christian Kandeler --- .../qmlprofiler/qmlprofilerclientmanager.cpp | 6 ++++++ .../qmlprofiler/qmlprofilerclientmanager.h | 1 + .../qmlprofiler/qmlprofilermodelmanager.cpp | 19 +++++++++++++++---- .../qmlprofiler/qmlprofilermodelmanager.h | 2 ++ src/plugins/qmlprofiler/qmlprofilertool.cpp | 11 +++++++++-- src/plugins/qmlprofiler/qmlprofilertool.h | 1 + .../qmlprofiler/qmlprofilertraceclient.cpp | 10 ++++++++-- .../qmlprofiler/qmlprofilertraceclient.h | 1 + 8 files changed, 43 insertions(+), 8 deletions(-) diff --git a/src/plugins/qmlprofiler/qmlprofilerclientmanager.cpp b/src/plugins/qmlprofiler/qmlprofilerclientmanager.cpp index 7f0677af7bc..248ebe485b8 100644 --- a/src/plugins/qmlprofiler/qmlprofilerclientmanager.cpp +++ b/src/plugins/qmlprofiler/qmlprofilerclientmanager.cpp @@ -88,6 +88,12 @@ void QmlProfilerClientManager::clearConnection() stopConnectionTimer(); } +void QmlProfilerClientManager::clearEvents() +{ + if (m_qmlclientplugin) + m_qmlclientplugin->clearEvents(); +} + void QmlProfilerClientManager::clearBufferedData() { if (m_qmlclientplugin) diff --git a/src/plugins/qmlprofiler/qmlprofilerclientmanager.h b/src/plugins/qmlprofiler/qmlprofilerclientmanager.h index c64429abc70..15af88bbc2d 100644 --- a/src/plugins/qmlprofiler/qmlprofilerclientmanager.h +++ b/src/plugins/qmlprofiler/qmlprofilerclientmanager.h @@ -50,6 +50,7 @@ public: void connectToServer(const QUrl &server); void clearConnection(); + void clearEvents(); void clearBufferedData(); bool isConnected() const; diff --git a/src/plugins/qmlprofiler/qmlprofilermodelmanager.cpp b/src/plugins/qmlprofiler/qmlprofilermodelmanager.cpp index 7c85817841e..687ad50db56 100644 --- a/src/plugins/qmlprofiler/qmlprofilermodelmanager.cpp +++ b/src/plugins/qmlprofiler/qmlprofilermodelmanager.cpp @@ -691,9 +691,8 @@ QmlProfilerModelManager::State QmlProfilerModelManager::state() const return d->state; } -void QmlProfilerModelManager::clear() +void QmlProfilerModelManager::doClearEvents() { - setState(ClearingData); d->numLoadedEvents = 0; d->numFinishedFinalizers = 0; d->file.remove(); @@ -702,13 +701,25 @@ void QmlProfilerModelManager::clear() d->eventStream.setDevice(&d->file); else emit error(tr("Cannot open temporary trace file to store events.")); - d->eventTypes.clear(); - d->detailsRewriter->clear(); d->traceTime->clear(); d->notesModel->clear(); setVisibleFeatures(0); setRecordedFeatures(0); +} +void QmlProfilerModelManager::clearEvents() +{ + setState(ClearingData); + doClearEvents(); + setState(Empty); +} + +void QmlProfilerModelManager::clear() +{ + setState(ClearingData); + doClearEvents(); + d->eventTypes.clear(); + d->detailsRewriter->clear(); setState(Empty); } diff --git a/src/plugins/qmlprofiler/qmlprofilermodelmanager.h b/src/plugins/qmlprofiler/qmlprofilermodelmanager.h index f09537667e5..b0ecd6ddcb4 100644 --- a/src/plugins/qmlprofiler/qmlprofilermodelmanager.h +++ b/src/plugins/qmlprofiler/qmlprofilermodelmanager.h @@ -134,6 +134,7 @@ public: static const char *featureName(ProfileFeature feature); + void clearEvents(); void clear(); void restrictToRange(qint64 startTime, qint64 endTime); bool isRestrictedToRange() const; @@ -156,6 +157,7 @@ signals: private: void setState(State state); void detailsChanged(int typeId, const QString &newString); + void doClearEvents(); class QmlProfilerModelManagerPrivate; QmlProfilerModelManagerPrivate *d; diff --git a/src/plugins/qmlprofiler/qmlprofilertool.cpp b/src/plugins/qmlprofiler/qmlprofilertool.cpp index 9966b2132d8..3b4f48aaa36 100644 --- a/src/plugins/qmlprofiler/qmlprofilertool.cpp +++ b/src/plugins/qmlprofiler/qmlprofilertool.cpp @@ -405,7 +405,7 @@ void QmlProfilerTool::recordingButtonChanged(bool recording) if (checkForUnsavedNotes()) { if (!d->m_profilerModelManager->aggregateTraces() || d->m_profilerModelManager->state() == QmlProfilerModelManager::Done) - clearData(); // clear before the recording starts, unless we aggregate recordings + clearEvents(); // clear before the recording starts, unless we aggregate recordings if (d->m_profilerState->clientRecording()) d->m_profilerState->setClientRecording(false); d->m_profilerState->setClientRecording(true); @@ -469,6 +469,13 @@ void QmlProfilerTool::showTimeLineSearch() Core::Find::openFindToolBar(Core::Find::FindForwardDirection); } +void QmlProfilerTool::clearEvents() +{ + d->m_profilerModelManager->clearEvents(); + d->m_profilerConnections->clearEvents(); + setRecordedFeatures(0); +} + void QmlProfilerTool::clearData() { d->m_profilerModelManager->clear(); @@ -859,7 +866,7 @@ void QmlProfilerTool::serverRecordingChanged() d->m_recordingElapsedTime.start(); if (!d->m_profilerModelManager->aggregateTraces() || d->m_profilerModelManager->state() == QmlProfilerModelManager::Done) - clearData(); + clearEvents(); d->m_profilerModelManager->startAcquiring(); } else { d->m_recordingTimer.stop(); diff --git a/src/plugins/qmlprofiler/qmlprofilertool.h b/src/plugins/qmlprofiler/qmlprofilertool.h index 4b784dfe8e1..334e51aeed2 100644 --- a/src/plugins/qmlprofiler/qmlprofilertool.h +++ b/src/plugins/qmlprofiler/qmlprofilertool.h @@ -74,6 +74,7 @@ public: void gotoSourceLocation(const QString &fileUrl, int lineNumber, int columnNumber); private: + void clearEvents(); void clearData(); void showErrorDialog(const QString &error); void profilerDataModelStateChanged(); diff --git a/src/plugins/qmlprofiler/qmlprofilertraceclient.cpp b/src/plugins/qmlprofiler/qmlprofilertraceclient.cpp index 6bf359c9242..93fea88900d 100644 --- a/src/plugins/qmlprofiler/qmlprofilertraceclient.cpp +++ b/src/plugins/qmlprofiler/qmlprofilertraceclient.cpp @@ -213,9 +213,8 @@ QmlProfilerTraceClient::~QmlProfilerTraceClient() delete d; } -void QmlProfilerTraceClient::clearData() +void QmlProfilerTraceClient::clearEvents() { - d->eventTypeIds.clear(); d->rangesInProgress.clear(); d->pendingDebugMessages.clear(); if (d->recordedFeatures != 0) { @@ -225,6 +224,13 @@ void QmlProfilerTraceClient::clearData() emit cleared(); } +void QmlProfilerTraceClient::clearData() +{ + d->eventTypeIds.clear(); + d->serverTypeIds.clear(); + clearEvents(); +} + void QmlProfilerTraceClient::sendRecordingStatus(int engineId) { d->sendRecordingStatus(engineId); diff --git a/src/plugins/qmlprofiler/qmlprofilertraceclient.h b/src/plugins/qmlprofiler/qmlprofilertraceclient.h index b0f17c97893..6aa877d060a 100644 --- a/src/plugins/qmlprofiler/qmlprofilertraceclient.h +++ b/src/plugins/qmlprofiler/qmlprofilertraceclient.h @@ -55,6 +55,7 @@ public: virtual void messageReceived(const QByteArray &) override; virtual void stateChanged(State status) override; + void clearEvents(); void clearData(); void sendRecordingStatus(int engineId = -1); void setRequestedFeatures(quint64 features); From ca0d0088080e63b0ede1f4525ac72b837ed05317 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Thu, 2 Nov 2017 09:50:19 +0100 Subject: [PATCH 08/15] Add option to not build sdktool (QTC_SKIP_SDKTOOL) Change-Id: I3106bbc3bec7b6532a9fff1705a55ae3eaa0c3d6 Reviewed-by: Iikka Eklund Reviewed-by: Eike Ziller --- src/tools/tools.pro | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/tools/tools.pro b/src/tools/tools.pro index 23268020b79..7724b5df844 100644 --- a/src/tools/tools.pro +++ b/src/tools/tools.pro @@ -2,11 +2,12 @@ TEMPLATE = subdirs SUBDIRS = qtpromaker \ ../plugins/cpaster/frontend \ - sdktool \ valgrindfake \ 3rdparty \ buildoutputparser +isEmpty(QTC_SKIP_SDKTOOL): SUBDIRS += sdktool + qtHaveModule(quick-private): SUBDIRS += qml2puppet win32 { From 6797ca18f6ef39f0ca05f89c07d7e3a131138f00 Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Fri, 5 Jan 2018 00:07:16 +0200 Subject: [PATCH 09/15] Dark Theme: Fix bad color value Change-Id: Ie798db7cd887ff3933832e8589c908b115699529 Reviewed-by: Eike Ziller --- share/qtcreator/themes/dark.creatortheme | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/share/qtcreator/themes/dark.creatortheme b/share/qtcreator/themes/dark.creatortheme index 0c6e90e838b..de48453e5fc 100644 --- a/share/qtcreator/themes/dark.creatortheme +++ b/share/qtcreator/themes/dark.creatortheme @@ -176,7 +176,7 @@ Timeline_RangeColor=selectedBackground VcsBase_FileStatusUnknown_TextColor=text VcsBase_FileAdded_TextColor=ff00ff00 VcsBase_FileModified_TextColor=ff8ee0ff -VcsBase_FileDeleted_TextColor=fffff6c6c +VcsBase_FileDeleted_TextColor=ffff6c6c VcsBase_FileRenamed_TextColor=ffffa500 VcsBase_FileUnmerged_TextColor=ffff4040 From af62a9590c33dd9daec1bab49cc4a9494410aa62 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Thu, 4 Jan 2018 14:50:05 +0100 Subject: [PATCH 10/15] QbsProjectManager: Fix reparsing after switching build configurations After switching to a different build configuration, property changes in the build config widget would no longer cause project reparsing. Likely caused by e52ebbf217. Change-Id: Ifebec74475def49885232ad71d4de01f51568fcb Reviewed-by: hjk --- src/plugins/qbsprojectmanager/qbsproject.cpp | 30 ++------------------ src/plugins/qbsprojectmanager/qbsproject.h | 3 -- 2 files changed, 2 insertions(+), 31 deletions(-) diff --git a/src/plugins/qbsprojectmanager/qbsproject.cpp b/src/plugins/qbsprojectmanager/qbsproject.cpp index f82715addea..e87dda87cb7 100644 --- a/src/plugins/qbsprojectmanager/qbsproject.cpp +++ b/src/plugins/qbsprojectmanager/qbsproject.cpp @@ -125,7 +125,6 @@ QbsProject::QbsProject(const FileName &fileName) : m_parsingScheduled(false), m_cancelStatus(CancelStatusNone), m_cppCodeModelUpdater(new CppTools::CppProjectUpdater(this)), - m_currentBc(0), m_extraCompilersPending(false) { m_parsingDelay.setInterval(1000); // delay parsing by 1s. @@ -148,6 +147,7 @@ QbsProject::QbsProject(const FileName &fileName) : }; subscribeSignal(&BuildConfiguration::environmentChanged, this, delayedParsing); subscribeSignal(&BuildConfiguration::buildDirectoryChanged, this, delayedParsing); + subscribeSignal(&QbsBuildConfiguration::qbsConfigurationChanged, this, delayedParsing); subscribeSignal(&Target::activeBuildConfigurationChanged, this, delayedParsing); connect(&m_parsingDelay, &QTimer::timeout, this, &QbsProject::startParsing); @@ -338,11 +338,6 @@ bool QbsProject::renameFileInProduct(const QString &oldPath, const QString &newP return addFilesToProduct(QStringList() << newPath, newProductData, newGroupData, &dummy); } -void QbsProject::invalidate() -{ - prepareForParsing(); -} - static qbs::AbstractJob *doBuildOrClean(const qbs::Project &project, const QList &products, const qbs::BuildOptions &options) @@ -546,29 +541,8 @@ void QbsProject::handleRuleExecutionDone() void QbsProject::changeActiveTarget(Target *t) { - BuildConfiguration *bc = 0; - if (t) { + if (t) m_qbsProject = m_qbsProjects.value(t); - if (t->kit()) - bc = t->activeBuildConfiguration(); - } - buildConfigurationChanged(bc); -} - -void QbsProject::buildConfigurationChanged(BuildConfiguration *bc) -{ - if (m_currentBc) - disconnect(m_currentBc, &QbsBuildConfiguration::qbsConfigurationChanged, - this, &QbsProject::delayParsing); - - m_currentBc = qobject_cast(bc); - if (m_currentBc) { - connect(m_currentBc, &QbsBuildConfiguration::qbsConfigurationChanged, - this, &QbsProject::delayParsing); - delayParsing(); - } else { - invalidate(); - } } void QbsProject::startParsing() diff --git a/src/plugins/qbsprojectmanager/qbsproject.h b/src/plugins/qbsprojectmanager/qbsproject.h index 055618e6e12..1e38cd23035 100644 --- a/src/plugins/qbsprojectmanager/qbsproject.h +++ b/src/plugins/qbsprojectmanager/qbsproject.h @@ -110,7 +110,6 @@ public: void configureAsExampleProject(const QSet &platforms) final; - void invalidate(); void delayParsing(); private: @@ -119,7 +118,6 @@ private: void rebuildProjectTree(); void changeActiveTarget(ProjectExplorer::Target *t); - void buildConfigurationChanged(ProjectExplorer::BuildConfiguration *bc); void startParsing(); void parse(const QVariantMap &config, const Utils::Environment &env, const QString &dir, @@ -168,7 +166,6 @@ private: CppTools::CppProjectUpdater *m_cppCodeModelUpdater = nullptr; CppTools::ProjectInfo m_cppCodeModelProjectInfo; - QbsBuildConfiguration *m_currentBc; mutable ProjectExplorer::ProjectImporter *m_importer = nullptr; QTimer m_parsingDelay; From e9cbb83b46a00ad729bad3094991652744534f89 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Fri, 5 Jan 2018 10:38:29 +0100 Subject: [PATCH 11/15] Update qbs submodule To HEAD of 1.10 branch. Change-Id: I226d9d3f99ba119bfd16be690adb246c48c8e160 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 7862e87dc3e..3bde712fa2c 160000 --- a/src/shared/qbs +++ b/src/shared/qbs @@ -1 +1 @@ -Subproject commit 7862e87dc3ed3f7e2e6c8de936d6e15e914a02a4 +Subproject commit 3bde712fa2c1f926720e85d20ae7fd5f9f378fef From 1decef8fc98e156338d9a558bd089dcd1224c414 Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Sat, 6 Jan 2018 22:28:05 +0200 Subject: [PATCH 12/15] Gerrit: Deduplicate detection of current repository MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: Ib3a63f71dd45c45b20eab51a2a0bf9c21ba8754a Reviewed-by: André Hartmann Reviewed-by: Eike Ziller --- src/plugins/git/gerrit/gerritplugin.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/plugins/git/gerrit/gerritplugin.cpp b/src/plugins/git/gerrit/gerritplugin.cpp index ba644b6530f..e495ff57483 100644 --- a/src/plugins/git/gerrit/gerritplugin.cpp +++ b/src/plugins/git/gerrit/gerritplugin.cpp @@ -349,6 +349,11 @@ void GerritPlugin::push(const QString &topLevel) GitPlugin::client()->push(topLevel, {dialog.selectedRemoteName(), target}); } +static QString currentRepository() +{ + return GitPlugin::instance()->currentState().topLevel(); +} + // Open or raise the Gerrit dialog window. void GerritPlugin::openView() { @@ -359,8 +364,7 @@ void GerritPlugin::openView() if (!ICore::showOptionsDialog("Gerrit")) return; } - const QString repository = GitPlugin::instance()->currentState().topLevel(); - GerritDialog *gd = new GerritDialog(m_parameters, m_server, repository, ICore::mainWindow()); + GerritDialog *gd = new GerritDialog(m_parameters, m_server, currentRepository(), ICore::mainWindow()); gd->setModal(false); connect(gd, &GerritDialog::fetchDisplay, this, [this](const QSharedPointer &change) { fetch(change, FetchDisplay); }); @@ -383,7 +387,7 @@ void GerritPlugin::openView() void GerritPlugin::push() { - push(GitPlugin::instance()->currentState().topLevel()); + push(currentRepository()); } Utils::FileName GerritPlugin::gitBinDirectory() From 53b2df46e0100488d2baeb7d94eef07a1c8a069c Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Sat, 6 Jan 2018 22:28:55 +0200 Subject: [PATCH 13/15] Gerrit: Set current repository every time the dialog is shown Task-number: QTCREATORBUG-19562 Change-Id: I17918e08f7d3092ffe54ab359bf2b41c51813367 Reviewed-by: Eike Ziller --- src/plugins/git/gerrit/gerritplugin.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/plugins/git/gerrit/gerritplugin.cpp b/src/plugins/git/gerrit/gerritplugin.cpp index e495ff57483..6e92a821c9c 100644 --- a/src/plugins/git/gerrit/gerritplugin.cpp +++ b/src/plugins/git/gerrit/gerritplugin.cpp @@ -376,6 +376,7 @@ void GerritPlugin::openView() connect(this, &GerritPlugin::fetchFinished, gd, &GerritDialog::fetchFinished); m_dialog = gd; } else { + m_dialog->setCurrentPath(currentRepository()); m_dialog->refresh(); } const Qt::WindowStates state = m_dialog->windowState(); From 1e0ea7f42eb0acbf0d73f03d60c3f1c4f354d981 Mon Sep 17 00:00:00 2001 From: Ulf Hermann Date: Mon, 8 Jan 2018 16:09:59 +0100 Subject: [PATCH 14/15] ProjectExplorer: Remove target/BC listeners from ExtraCompiler When target or build configuration change, the target files that ExtraCompiler checks to see if a rebuild is necessary will be outdated. The project managers recognize that and reinitialize the ExtraCompilers in that case. Thus, we don't need to listen for those changes in ExtraCompiler. This has the added benefit of reducing the number of transparent rebuilds triggered by ExtraCompiler. Change-Id: If8b55f0f5343b221c039d4bd4a8f0c3ab412cc94 Reviewed-by: Christian Kandeler --- src/plugins/projectexplorer/extracompiler.cpp | 38 ------------------- src/plugins/projectexplorer/extracompiler.h | 2 - 2 files changed, 40 deletions(-) diff --git a/src/plugins/projectexplorer/extracompiler.cpp b/src/plugins/projectexplorer/extracompiler.cpp index ab020004404..1d5e97add91 100644 --- a/src/plugins/projectexplorer/extracompiler.cpp +++ b/src/plugins/projectexplorer/extracompiler.cpp @@ -80,9 +80,6 @@ ExtraCompiler::ExtraCompiler(const Project *project, const Utils::FileName &sour d->contents.insert(target, QByteArray()); d->timer.setSingleShot(true); - connect(d->project, &Project::activeTargetChanged, this, &ExtraCompiler::onActiveTargetChanged); - onActiveTargetChanged(); - connect(&d->timer, &QTimer::timeout, this, [this](){ if (d->dirty && d->lastEditor) { d->dirty = false; @@ -254,41 +251,6 @@ void ExtraCompiler::onEditorAboutToClose(Core::IEditor *editor) d->lastEditor = nullptr; } -void ExtraCompiler::onActiveTargetChanged() -{ - disconnect(d->activeBuildConfigConnection); - if (Target *target = d->project->activeTarget()) { - d->activeBuildConfigConnection = connect( - target, &Target::activeBuildConfigurationChanged, - this, &ExtraCompiler::onActiveBuildConfigurationChanged); - onActiveBuildConfigurationChanged(); - } else { - disconnect(d->activeEnvironmentConnection); - setDirty(); - } -} - -void ExtraCompiler::onActiveBuildConfigurationChanged() -{ - disconnect(d->activeEnvironmentConnection); - Target *target = d->project->activeTarget(); - QTC_ASSERT(target, return); - if (BuildConfiguration *bc = target->activeBuildConfiguration()) { - d->activeEnvironmentConnection = connect( - bc, &BuildConfiguration::environmentChanged, - this, &ExtraCompiler::setDirty); - } else { - d->activeEnvironmentConnection = connect(KitManager::instance(), &KitManager::kitUpdated, - this, [this](Kit *kit) { - Target *target = d->project->activeTarget(); - QTC_ASSERT(target, return); - if (kit == target->kit()) - setDirty(); - }); - } - setDirty(); -} - Utils::Environment ExtraCompiler::buildEnvironment() const { if (Target *target = project()->activeTarget()) { diff --git a/src/plugins/projectexplorer/extracompiler.h b/src/plugins/projectexplorer/extracompiler.h index 67cccc60f4d..e69d4b3ca81 100644 --- a/src/plugins/projectexplorer/extracompiler.h +++ b/src/plugins/projectexplorer/extracompiler.h @@ -84,8 +84,6 @@ private: void onTargetsBuilt(Project *project); void onEditorChanged(Core::IEditor *editor); void onEditorAboutToClose(Core::IEditor *editor); - void onActiveTargetChanged(); - void onActiveBuildConfigurationChanged(); void setDirty(); // This method may not block! virtual void run(const QByteArray &sourceContent) = 0; From 32786ea9cadb4329b09dae2f825e61dcbd9fcc75 Mon Sep 17 00:00:00 2001 From: Sergey Belyashov Date: Tue, 9 Jan 2018 12:25:41 +0300 Subject: [PATCH 15/15] Fix typo in Russian translation Task-number: QTCREATORBUG-19555 Change-Id: I4bc595e1d724ff6231f4dc5d6fcc266c8c3468ea Reviewed-by: Denis Shienkov --- share/qtcreator/translations/qtcreator_ru.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/share/qtcreator/translations/qtcreator_ru.ts b/share/qtcreator/translations/qtcreator_ru.ts index c215f4ba9d4..7c0d2dfd5eb 100644 --- a/share/qtcreator/translations/qtcreator_ru.ts +++ b/share/qtcreator/translations/qtcreator_ru.ts @@ -35841,7 +35841,7 @@ For more details, see /etc/sysctl.d/10-ptrace.conf No compiler can produce code for this Qt version. Please define one or more compilers for: %1 - Компилятор не может создавть код для этого профиля Qt. Задайте минимум один компилятор для: %1 + Компилятор не может создавать код для этого профиля Qt. Задайте минимум один компилятор для: %1 The following ABIs are currently not supported: %1