From 91a82fe8b2575125eecd43968503bd1bc51d1e72 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Mon, 28 Nov 2016 14:34:19 +0100 Subject: [PATCH 01/28] Doc: Describe and link to Qt Quick Controls 2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Remove info about Qt Quick Controls 1. Change-Id: I25f4915cc33df1bca010900ba8d07ed6cc21f207 Reviewed-by: Topi Reiniƶ Reviewed-by: Thomas Hartmann --- doc/src/qtquick/qtquick-screens.qdoc | 113 ++++++++++++++++----------- 1 file changed, 68 insertions(+), 45 deletions(-) diff --git a/doc/src/qtquick/qtquick-screens.qdoc b/doc/src/qtquick/qtquick-screens.qdoc index 5aa994c3a13..5758756151c 100644 --- a/doc/src/qtquick/qtquick-screens.qdoc +++ b/doc/src/qtquick/qtquick-screens.qdoc @@ -114,7 +114,7 @@ \li \l{Using Layouts} - \li \l{Using Split Views} + \li \l{Organizing Items} \endlist @@ -269,12 +269,29 @@ \uicontrol Layout > \uicontrol {Fill Width} in the context menu. To make the item as high as possible, select \uicontrol {Fill Height}. - \section2 Using Split Views + \section2 Organizing Items - From Qt 5.1, you can use the SplitView Qt Quick Control to arrange items - horizontally or vertically - with a draggable splitter between each item. + From Qt 5.7, you can use the following \l{Qt Quick Controls 2} types to + organize items on screens: + \list + + \li \l [QtQuickControls2]{Frame} places a logical group of controls + within a visual frame. + + \li \l [QtQuickControls2]{GroupBox}{Group Box} is used to lay out a + logical group of controls together, within a titled visual frame. + + \li \l [QtQuickControls2]{Label} is a text label with inherited styling + and font. + + \li \l [QtQuickControls2]{PageIndicator}{Page Indicator} indicates the + currently active page. + + \li \l [QtQuickControls2]{Pane} provides a background matching with the + application style and theme. + + \endlist \section1 Using States @@ -382,62 +399,68 @@ \endlist - From Qt 5.1, you can also use the following - \l{Qt Quick Controls} to present or receive input from the user: + Since Qt 5.7, you can also use the following \l{Qt Quick Controls 2} types + to inform users about the progress of the application or to gather input + from the user: \list - \li \l{Button} provides a push button that you can associate with an - action. + \li \l [QtQuickControls2]{BusyIndicator}{Busy Indicator} indicates + activity while content is being loaded. - \li CheckBox provides an option button that can be toggled on - (checked) or off (unchecked). + \li \l [QtQuickControls2]{Button} provides a push button that you can + associate with an action. - \li ComboBox provides a drop-down list. Add items to the combo box by - assigning it a ListModel, or a list of strings to the model - property. + \li \l [QtQuickControls2]{CheckBox}{Check Box} provides an option button + that can be toggled on (checked) or off (unchecked). - \li GroupBox provides a frame, a title on top, and place for various - other controls inside the frame. + \li \l [QtQuickControls2]{CheckDelegate}{Check Delegate} presents an + item delegate that can be toggled on (checked) or off (unchecked). - \li \l{Label} provides a text label that follows the font and color scheme - of the system. + \li \l [QtQuickControls2]{ComboBox}{Combo Box} is a combined button and + popup list that is populated by using a data model. - \li ProgressBar indicates the progress of an operation. + \li \l [QtQuickControls2]{Dial} is a circular dial that is rotated to + set a value. - \li RadioButton provides an option button that can be switched on - (checked) or off (unchecked). + \li \l [QtQuickControls2]{ItemDelegate}{Item Delegate} is a standard + view item that can be used in various views and controls. - \li \l{Slider} - {Slider (Horizontal) and Slider (Vertical)} enable the user to move - a slider handle along a horizontal or vertical groove and translate - the handle's position into a value within the specified range. + \li \l [QtQuickControls2]{ProgressBar}{Progress Bar} indicates the + progress of an operation. - \li SpinBox enables the user to specify a value by clicking the up or - down buttons, by pressing up or down on the keyboard, or by entering - a value in the box. + \li \l [QtQuickControls2]{RadioButton}{Radio Button} provides an option + button that can be switched on (checked) or off (unchecked). - \omit - Not visible in the item library in 3.2. - \li StatusBar contains status information in your application. It - does not provide a layout of its own, but requires you to position - its contents, for instance by creating a \uicontrol {Row Layout}. - \endomit + \li \l [QtQuickControls2]{RadioDelegate}{Radio Delegate} presents an + item delegate that can be toggled on (checked) or off (unchecked). - \li TextArea displays multiple lines of editable formatted text. + \li \l [QtQuickControls2]{Slider} selects a value by sliding a handle + along a track. - \li TextField displays a single line of editable plain text. + \li \l [QtQuickControls2]{SpinBox}{Spin Box} enables the user to specify + a value by clicking the up or down buttons, by pressing up or down + on the keyboard, or by entering a value in the box. - \omit - Not visible in the item library in 3.2. - \li ToolBar provides styling for ToolButton as well as other controls - that it can contain. However, it does not provide a layout of its - own, but requires you to position its contents, for instance by - creating a \uicontrol {Row Layout}. - \endomit + \li \l [QtQuickControls2]{Switch} is an option button that can be + toggled on or off. - \li ToolButton provides a button that is functionally similar to - \uicontrol Button, but that looks more suitable on a \uicontrol {Tool Bar}. + \li \l [QtQuickControls2]{TextArea}{Text Area} displays multiple lines + of editable formatted text. + + \li \l [QtQuickControls2]{TextField}{Text Field} displays a single line + of editable plain text. + + \li \l [QtQuickControls2]{ToolBar}{Tool Bar} is a container of + application-wide and context sensitive actions and controls, such as + navigation buttons and search fields. + + \li \l [QtQuickControls2]{ToolButton}{Tool Button} is a button + that is functionally similar to \uicontrol Button, but provides a + look that is more suitable for a \uicontrol {Tool Bar}. + + \li \l [QtQuickControls2]{Tumbler} is a spinnable wheel of items that + can be selected. \endlist From 53022f01fd8d5780fc8272013bb32ed339e14df8 Mon Sep 17 00:00:00 2001 From: hjk Date: Wed, 30 Nov 2016 16:15:56 +0100 Subject: [PATCH 02/28] Debugger: Add dumper for std::once_flag Change-Id: I8b5166fc0e7d54676b84a1b0d45c6a2793c2a37c Reviewed-by: Christian Stenger --- share/qtcreator/debugger/stdtypes.py | 6 ++++++ tests/auto/debugger/tst_dumpers.cpp | 7 +++++++ 2 files changed, 13 insertions(+) diff --git a/share/qtcreator/debugger/stdtypes.py b/share/qtcreator/debugger/stdtypes.py index c4d050a6173..b8117681a1b 100644 --- a/share/qtcreator/debugger/stdtypes.py +++ b/share/qtcreator/debugger/stdtypes.py @@ -1003,6 +1003,12 @@ def qdump__wstring(d, value): qdump__std__wstring(d, value) +def qdump__std__once_flag(d, value): + d.putItem(value[0]) + d.putBetterType(value.type) + d.putPlainChildren(value) + + def qdump____gnu_cxx__hash_set(d, value): ht = value["_M_ht"] size = ht["_M_num_elements"].integer() diff --git a/tests/auto/debugger/tst_dumpers.cpp b/tests/auto/debugger/tst_dumpers.cpp index 897c1140aab..8176d1272db 100644 --- a/tests/auto/debugger/tst_dumpers.cpp +++ b/tests/auto/debugger/tst_dumpers.cpp @@ -4386,6 +4386,13 @@ void tst_Dumpers::dumper_data() + Check("p3.data", "\"ABC\"", "std::string"); + QTest::newRow("StdOnce") + << Data("#include \n", + "std::once_flag x; unused(&x);\n") + + Cxx11Profile() + + Check("x", "0", "std::once_flag"); + + QTest::newRow("StdSharedPtr") << Data("#include \n" "#include \n" + fooData, From c944d0870204a7e56cdeaf85d01d0cc9d4e3bfa8 Mon Sep 17 00:00:00 2001 From: hjk Date: Wed, 30 Nov 2016 17:22:16 +0100 Subject: [PATCH 03/28] Debugger: Make {boost,std}::shared_ptr display more compact After debugging through a code base that makes extensive use of shared pointers (LLDB...) I came to the conclusion that the display of weak and strong counts is pretty much useless and it would be better to avoid that level in the display. Change-Id: Ie03b05fff4f7f5b7dced2e656b404e8e7938cc25 Reviewed-by: Christian Stenger --- share/qtcreator/debugger/boosttypes.py | 8 ++----- share/qtcreator/debugger/stdtypes.py | 32 ++++++++------------------ tests/auto/debugger/tst_dumpers.cpp | 29 ++++++----------------- 3 files changed, 18 insertions(+), 51 deletions(-) diff --git a/share/qtcreator/debugger/boosttypes.py b/share/qtcreator/debugger/boosttypes.py index 552b0594120..17d553da84c 100644 --- a/share/qtcreator/debugger/boosttypes.py +++ b/share/qtcreator/debugger/boosttypes.py @@ -65,12 +65,8 @@ def qdump__boost__shared_ptr(d, value): d.check(weakcount >= 0) d.check(weakcount <= usecount) d.check(usecount <= 10*1000*1000) - - with Children(d): - short = d.putSubItem("data", d.createValue(px, value.type[0])) - d.putIntItem("weakcount", weakcount) - d.putIntItem("usecount", usecount) - d.putValue(short.value, short.encoding) + d.putItem(d.createValue(px, value.type[0])) + d.putBetterType(value.type) def qdump__boost__container__list(d, value): diff --git a/share/qtcreator/debugger/stdtypes.py b/share/qtcreator/debugger/stdtypes.py index b8117681a1b..b6e96c17226 100644 --- a/share/qtcreator/debugger/stdtypes.py +++ b/share/qtcreator/debugger/stdtypes.py @@ -667,41 +667,27 @@ def qdump__std__shared_ptr(d, value): if i.pointer() == 0: d.putValue("(null)") d.putNumChild(0) - return - with Children(d): - short = d.putSubItem("data", i.dereference()) - if d.isMsvcTarget(): - refcount = value["_Rep"] - d.putIntItem("usecount", refcount["_Uses"]) - d.putIntItem("weakcount", refcount["_Weaks"]) - else: - refcount = value["_M_refcount"]["_M_pi"] - d.putIntItem("usecount", refcount["_M_use_count"]) - d.putIntItem("weakcount", refcount["_M_weak_count"]) - d.putValue(short.value, short.encoding) + else: + d.putItem(i.dereference()) + d.putBetterType(value.type) def qdump__std____1__shared_ptr(d, value): i = value["__ptr_"] if i.pointer() == 0: d.putValue("(null)") d.putNumChild(0) - return - with Children(d): - short = d.putSubItem("data", i.dereference()) - d.putFields(value["__cntrl_"].dereference()) - #d.putIntItem("usecount", refcount["_M_use_count"]) - #d.putIntItem("weakcount", refcount["_M_weak_count"]) - d.putValue(short.value, short.encoding) + else: + d.putItem(i.dereference()) + d.putBetterType(value.type) def qdump__std__unique_ptr(d, value): p = d.extractPointer(value) if p == 0: d.putValue("(null)") d.putNumChild(0) - return - with Children(d): - short = d.putSubItem("data", d.createValue(p, value.type[0])) - d.putValue(short.value, short.encoding) + else: + d.putItem(d.createValue(p, value.type[0])) + d.putBetterType(value.type) def qdump__std____1__unique_ptr(d, value): qdump__std__unique_ptr(d, value) diff --git a/tests/auto/debugger/tst_dumpers.cpp b/tests/auto/debugger/tst_dumpers.cpp index 8176d1272db..b76e17ad989 100644 --- a/tests/auto/debugger/tst_dumpers.cpp +++ b/tests/auto/debugger/tst_dumpers.cpp @@ -4375,15 +4375,9 @@ void tst_Dumpers::dumper_data() + MacLibCppProfile() + Check("p0", "(null)", "std::unique_ptr >") - + Check("p1", "32", "std::unique_ptr >") - + Check("p1.data", "32", "int") - + Check("p2", Pointer(), "std::unique_ptr >") - + CheckType("p2.data", "Foo") - - + Check("p3", "\"ABC\"", "std::unique_ptr >") - + Check("p3.data", "\"ABC\"", "std::string"); + + Check("p3", "\"ABC\"", "std::unique_ptr >"); QTest::newRow("StdOnce") @@ -4408,17 +4402,12 @@ void tst_Dumpers::dumper_data() + MacLibCppProfile() + Check("pi", "32", "std::shared_ptr") - + Check("pi.data", "32", "int") + Check("pf", Pointer(), "std::shared_ptr") - + CheckType("pf.data", "Foo") + Check("ps", "\"ABC\"", "std::shared_ptr") - + Check("ps.data", "\"ABC\"", "std::string") + Check("wi", "32", "std::weak_ptr") - + Check("wi.data", "32", "int") + Check("wf", Pointer(), "std::weak_ptr") - + CheckType("wf.data", "Foo") + Check("ws", "\"ABC\"", "std::weak_ptr") - + Check("ws.data", "\"ABC\"", "std::string"); + + Check("ps", "\"ABC\"", "std::shared_ptr"); QTest::newRow("StdSharedPtr2") << Data("#include \n" @@ -4436,10 +4425,10 @@ void tst_Dumpers::dumper_data() + Check("inner.m_1", "0x1", "int *") + Check("inner.m_2", "0x2", "int *") + Check("inner.x", "3", "int") - + Check("a.data.m_0", "0x0", "int *") - + Check("a.data.m_1", "0x1", "int *") - + Check("a.data.m_2", "0x2", "int *") - + Check("a.data.x", "3", "int"); + + Check("a.m_0", "0x0", "int *") + + Check("a.m_1", "0x1", "int *") + + Check("a.m_2", "0x2", "int *") + + Check("a.x", "3", "int"); QTest::newRow("StdSet") << Data("#include \n", @@ -5594,13 +5583,9 @@ void tst_Dumpers::dumper_data() + Check("s", "(null)", "boost::shared_ptr") + Check("i", "43", "boost::shared_ptr") - + Check("i.weakcount", "1", "int") - + Check("i.usecount", "2", "int") - + Check("i.data", "43", "int") + Check("j", "43", "boost::shared_ptr") + Check("sl", "<1 items>", " boost::shared_ptr<@QStringList>") - + Check("sl.data", "<1 items>", "@QStringList") - + Check("sl.data.0", "[0]", "\"HUH!\"", "@QString"); + + Check("sl.0", "[0]", "\"HUH!\"", "@QString"); QTest::newRow("BoostGregorianDate") From e48c2e516f3bb711bee2cfbe8ceda3539348a2dc Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Wed, 30 Nov 2016 16:51:44 +0100 Subject: [PATCH 04/28] Doc: Describe Model Editor zooming commands Change-Id: Ie2838120eab37430449f85cd2f84e773b26a5c8a Reviewed-by: Jochen Becher Reviewed-by: Leena Miettinen --- doc/src/editors/creator-modeling.qdoc | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/doc/src/editors/creator-modeling.qdoc b/doc/src/editors/creator-modeling.qdoc index 3b7acd31f83..2c09149a123 100644 --- a/doc/src/editors/creator-modeling.qdoc +++ b/doc/src/editors/creator-modeling.qdoc @@ -91,10 +91,13 @@ To keep the selections in the diagram and the \uicontrol Structure view synchronized, select \uicontrol {Keep Synchronized}. - To zoom into diagrams, press \key Ctrl++ or press \key Ctrl and roll the - mouse wheel up. To zoom out of diagrams, press \key Ctrl+- or press - \key Ctrl and roll the mouse wheel down. To reset the diagram size to 100%, - select \key Ctrl+0. + To zoom into diagrams, select \uicontrol Tools > \uicontrol {Model Editor} > + \uicontrol {Zoom In}, press \key Ctrl++, or press \key Ctrl and roll the + mouse wheel up. To zoom out of diagrams, select \uicontrol Tools > + \uicontrol {Model Editor} > \uicontrol {Zoom Out}, press \key Ctrl+-, or + press \key Ctrl and roll the mouse wheel down. To reset the diagram size to + 100%, select \uicontrol Tools > \uicontrol {Model Editor} > \uicontrol + {Reset Zoom} or press \key Ctrl+0. To print diagrams, press \key Ctrl+C when no elements are selected in the editor to copy all elements to the clipboard by using 300 dpi. Then From 681efe2324fc6874eeedd7e54a0158732b809c88 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Thu, 1 Dec 2016 08:39:20 +0100 Subject: [PATCH 05/28] Dumper: Fix std::once_flag dumper when using libc++ Change-Id: I5f320153f6ace6aecfad12f6156bba700fe7ad85 Reviewed-by: hjk --- share/qtcreator/debugger/stdtypes.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/share/qtcreator/debugger/stdtypes.py b/share/qtcreator/debugger/stdtypes.py index b6e96c17226..568b1cbe6c7 100644 --- a/share/qtcreator/debugger/stdtypes.py +++ b/share/qtcreator/debugger/stdtypes.py @@ -988,6 +988,8 @@ def qdump__std____1__basic_string(d, value): def qdump__wstring(d, value): qdump__std__wstring(d, value) +def qdump__std____1__once_flag(d, value): + qdump__std__once_flag(d, value) def qdump__std__once_flag(d, value): d.putItem(value[0]) From 54a363b36c1e0934380ad4094952beacb54a765b Mon Sep 17 00:00:00 2001 From: David Schulz Date: Thu, 24 Nov 2016 13:46:02 +0100 Subject: [PATCH 06/28] Debugger: Move symbolgroup indices after expanding Change-Id: I0c2078b5c780a8f8f018e72c27575825c076cdd3 Reviewed-by: Christian Stenger --- src/libs/qtcreatorcdbext/pyvalue.cpp | 38 +++++++++++++++++++++++++--- 1 file changed, 35 insertions(+), 3 deletions(-) diff --git a/src/libs/qtcreatorcdbext/pyvalue.cpp b/src/libs/qtcreatorcdbext/pyvalue.cpp index 6e5fb53d3ec..a39d8eb7e76 100644 --- a/src/libs/qtcreatorcdbext/pyvalue.cpp +++ b/src/libs/qtcreatorcdbext/pyvalue.cpp @@ -32,9 +32,14 @@ #include "stringutils.h" #include "symbolgroupvalue.h" +#include +#include + constexpr bool debugPyValue = false; constexpr bool debuggingValueEnabled() { return debugPyValue || debugPyCdbextModule; } +static std::map> valuesForSymbolGroup; + std::string getSymbolName(CIDebugSymbolGroup *sg, ULONG index) { ULONG size = 0; @@ -147,6 +152,21 @@ PyObject *value_Address(Value *self) return Py_BuildValue("K", address); } +void indicesMoved(CIDebugSymbolGroup *symbolGroup, ULONG start, ULONG delta) +{ + if (delta == 0) + return; + ULONG count; + if (FAILED(symbolGroup->GetNumberSymbols(&count))) + return; + if (count <= start) + return; + for (Value *val : valuesForSymbolGroup[symbolGroup]) { + if (val->m_index >= start && val->m_index + delta < count) + val->m_index += delta; + } +} + bool expandValue(Value *v) { DEBUG_SYMBOL_PARAMETERS params; @@ -154,7 +174,15 @@ bool expandValue(Value *v) return false; if (params.Flags & DEBUG_SYMBOL_EXPANDED) return true; - return SUCCEEDED(v->m_symbolGroup->ExpandSymbol(v->m_index, TRUE)); + if (FAILED(v->m_symbolGroup->ExpandSymbol(v->m_index, TRUE))) + return false; + if (FAILED(v->m_symbolGroup->GetSymbolParameters(v->m_index, 1, ¶ms))) + return false; + if (params.Flags & DEBUG_SYMBOL_EXPANDED) { + indicesMoved(v->m_symbolGroup, v->m_index + 1, params.SubElements); + return true; + } + return false; } ULONG numberOfChildren(Value *v) @@ -310,8 +338,11 @@ PyObject *value_ChildFromIndex(Value *self, PyObject *args) return createValue(self->m_index + index + 1, self->m_symbolGroup); } -void value_Dealloc(Value *) -{ } +void value_Dealloc(Value *v) +{ + auto values = valuesForSymbolGroup[v->m_symbolGroup]; + std::remove(values.begin(), values.end(), v); +} PyObject *value_New(PyTypeObject *type, PyObject *, PyObject *) { @@ -339,6 +370,7 @@ PyObject *createValue(ULONG index, CIDebugSymbolGroup *symbolGroup) if (value != NULL) { value->m_index = index; value->m_symbolGroup = symbolGroup; + valuesForSymbolGroup[symbolGroup].push_back(value); } return reinterpret_cast(value); } From 0b02891b1d5b343883c545c32e37866028329fde Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Thu, 1 Dec 2016 09:55:17 +0100 Subject: [PATCH 07/28] Doc: -1 is no longer supported in Diff Editor options Change-Id: I83f19223cd78279a7c3946f7ffd0c85933c2a322 Reviewed-by: Jarek Kobus --- doc/src/editors/creator-diff-editor.qdoc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/doc/src/editors/creator-diff-editor.qdoc b/doc/src/editors/creator-diff-editor.qdoc index 391a6171183..78c1c0274e1 100644 --- a/doc/src/editors/creator-diff-editor.qdoc +++ b/doc/src/editors/creator-diff-editor.qdoc @@ -83,8 +83,7 @@ To only show text changes, select \uicontrol {Ignore Whitespace}. To expand the context for the changes, set the number of unchanged lines to - show in \uicontrol {Context lines}. Set the value to -1 to show the whole - file. + show in \uicontrol {Context lines}. By default, the horizontal scroll bars in the left and right pane are synchronized. To use them independently of each other, select the From 6b0495d997c40a2326a5f9700ec41d57395dde06 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Thu, 1 Dec 2016 12:23:20 +0100 Subject: [PATCH 08/28] Version bump Change-Id: I25f835a66200a1f578deff65ca83aeb02c217790 Reviewed-by: Eike Ziller --- qbs/modules/qtc/qtc.qbs | 8 ++++---- qtcreator.pri | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/qbs/modules/qtc/qtc.qbs b/qbs/modules/qtc/qtc.qbs index d2c7cc3bf74..c689ae2e055 100644 --- a/qbs/modules/qtc/qtc.qbs +++ b/qbs/modules/qtc/qtc.qbs @@ -4,14 +4,14 @@ import "qtc.js" as HelperFunctions Module { property string ide_version_major: '4' - property string ide_version_minor: '1' - property string ide_version_release: '83' + property string ide_version_minor: '2' + property string ide_version_release: '0' property string qtcreator_version: ide_version_major + '.' + ide_version_minor + '.' + ide_version_release property string ide_compat_version_major: '4' - property string ide_compat_version_minor: '1' - property string ide_compat_version_release: '83' + property string ide_compat_version_minor: '2' + property string ide_compat_version_release: '0' property string qtcreator_compat_version: ide_compat_version_major + '.' + ide_compat_version_minor + '.' + ide_compat_version_release diff --git a/qtcreator.pri b/qtcreator.pri index 12fc225f40c..36badac7750 100644 --- a/qtcreator.pri +++ b/qtcreator.pri @@ -1,8 +1,8 @@ !isEmpty(QTCREATOR_PRI_INCLUDED):error("qtcreator.pri already included") QTCREATOR_PRI_INCLUDED = 1 -QTCREATOR_VERSION = 4.1.83 -QTCREATOR_COMPAT_VERSION = 4.1.83 +QTCREATOR_VERSION = 4.2.0 +QTCREATOR_COMPAT_VERSION = 4.2.0 VERSION = $$QTCREATOR_VERSION BINARY_ARTIFACTS_BRANCH = 4.2 From c269cc1c6d9c5635ebfa9de3e8c8f8941bee542f Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Thu, 1 Dec 2016 12:24:42 +0100 Subject: [PATCH 09/28] Revert "Revert "Revert "Algorithms: Simplify Utils::transform implementation""" This reverts commit defb18aef413f0c9c99f957ebdd3bf1f8e2134e8. This reverts commit 602f8e72be21f9d1c68375a9e877b2e8524916cf. The refactoring of transform does not compile with MSVC2015 Update 2. Retry when we can upgrade to update 3. Change-Id: I8bfd6ad12c71759af4840c2615d9a8f2390fd4bc Reviewed-by: Eike Ziller --- src/libs/utils/algorithm.h | 144 +++++++++++++++++++++++-------------- 1 file changed, 89 insertions(+), 55 deletions(-) diff --git a/src/libs/utils/algorithm.h b/src/libs/utils/algorithm.h index 10b6daef94f..76645e3311a 100644 --- a/src/libs/utils/algorithm.h +++ b/src/libs/utils/algorithm.h @@ -214,78 +214,112 @@ using decay_t = typename std::decay::type; template using result_of_t = typename std::result_of::type; -// Result type of transform operation +// abstraction to treat Container and QStringList similarly +template +struct ContainerType +{ -template class Container, template class InputContainer, typename IT, typename Function> -using ResultContainer = Container>>; +}; -} // anonymous +// specialization for qt container T_Container +template class T_Container, typename T_Type> +struct ContainerType> +{ + template class C = T_Container> + using ResultOfTransform = C>>; + + template + using ResultOfTransformPMF = T_Container>; +}; + +// specialization for QStringList +template<> +struct ContainerType : ContainerType> +{ +}; + +} + +// actual implementation of transform +template // input container type +struct TransformImpl { + template + Q_REQUIRED_RESULT + static C call(const SC &container, F function) + { + C result; + std::transform(container.begin(), container.end(), + inserter(result), + function); + return result; + } + + template + Q_REQUIRED_RESULT + static C call(const SC &container, R (S::*p)() const) + { + return call(container, std::mem_fn(p)); + } + +}; + +// same container type for input and output, e.g. transforming a QList into QList +// or QStringList -> QList<> +template +Q_REQUIRED_RESULT +auto transform(const C &container, F function) +-> typename ContainerType::template ResultOfTransform +{ + return TransformImpl< + typename ContainerType::template ResultOfTransform, + C + >::call(container, function); +} + +// same container type for member function pointer +template +Q_REQUIRED_RESULT +auto transform(const C &container, R (S::*p)() const) + ->typename ContainerType::template ResultOfTransformPMF +{ + return TransformImpl< + typename ContainerType::template ResultOfTransformPMF, + C + >::call(container, p); +} // different container types for input and output, e.g. transforming a QList into a QSet template class C, // result container type - template class SC, // input container type - typename T, // input value type + typename SC, // input container type typename F> // function type Q_REQUIRED_RESULT -auto transform(const SC &container, F function) -> ResultContainer +auto transform(const SC &container, F function) + -> typename ContainerType::template ResultOfTransform { - ResultContainer result; - std::transform(container.begin(), container.end(), - inserter(result), - function); - return result; + return TransformImpl< + typename ContainerType::template ResultOfTransform, + SC + >::call(container, function); } // different container types for input and output, e.g. transforming a QList into a QSet // for member function pointers template class C, // result container type - template class SC, // input container type - typename T, // input value type + typename SC, // input container type typename R, typename S> Q_REQUIRED_RESULT -auto transform(const SC &container, R (S::*p)() const) -> ResultContainer +auto transform(const SC &container, R (S::*p)() const) + -> C> { - return Utils::transform(container, std::mem_fn(p)); -} - -// same container type for input and output, e.g. transforming a QList into QList -// or QStringList -> QList<> -template class C, // container - typename T, // container value type - typename F> -Q_REQUIRED_RESULT -auto transform(const C &container, F function) -> ResultContainer -{ - return Utils::transform(container, function); -} - -// same container type for member function pointer -template class C, // container - typename T, // container value type - typename R, - typename S> -Q_REQUIRED_RESULT -auto transform(const C &container, R (S::*p)() const) -> ResultContainer -{ - return Utils::transform(container, std::mem_fn(p)); -} - -// QStringList different containers -template class C, // result container type - typename F> -Q_REQUIRED_RESULT -auto transform(const QStringList &container, F function) -> ResultContainer -{ - return Utils::transform(container, function); -} - -// QStringList -> QList -template -Q_REQUIRED_RESULT -auto transform(const QStringList &container, F function) -> ResultContainer -{ - return Utils::transform(container, function); + return TransformImpl< + C>, + SC + >::call(container, p); } ////////////////// From a7fb4cd3ed923d79dbe1708326051ea7f468fd29 Mon Sep 17 00:00:00 2001 From: hjk Date: Thu, 1 Dec 2016 00:42:10 +0100 Subject: [PATCH 10/28] Debugger: Make QStandardItem dumper work without debug info Change-Id: Iccdc693616558d2d224c1145eee78f903792c4a6 Task-number: QTCREATORBUG-16908 Reviewed-by: Christian Stenger --- share/qtcreator/debugger/dumper.py | 7 ++++++ share/qtcreator/debugger/qttypes.py | 33 +++++++++++++++++++++++++++-- tests/auto/debugger/tst_dumpers.cpp | 1 + 3 files changed, 39 insertions(+), 2 deletions(-) diff --git a/share/qtcreator/debugger/dumper.py b/share/qtcreator/debugger/dumper.py index 104c20a5f4d..2bcc5ef6a42 100644 --- a/share/qtcreator/debugger/dumper.py +++ b/share/qtcreator/debugger/dumper.py @@ -790,6 +790,13 @@ class DumperBase: self.putField('keyencoded', key.encoding) self.putValue(value.value, value.encoding) + def putEnumValue(self, value, vals): + ival = value.integer() + nice = vals.get(ival, None) + display = ('%d' % ival) if nice is None else ('%s (%d)' % (nice, ival)) + self.putValue(display) + self.putNumChild(0) + def putCallItem(self, name, rettype, value, func, *args): with SubItem(self, name): try: diff --git a/share/qtcreator/debugger/qttypes.py b/share/qtcreator/debugger/qttypes.py index b964e8b7810..8e32a19c811 100644 --- a/share/qtcreator/debugger/qttypes.py +++ b/share/qtcreator/debugger/qttypes.py @@ -190,6 +190,34 @@ def qdump_X_QModelIndex(d, value): d.putCallItem('parent', '@QModelIndex', value, 'parent') #gdb.execute('call free($mi)') +def qdump__Qt__ItemDataRole(d, value): + d.putEnumValue(value, { + 0 : "Qt::DisplayRole", + 1 : "Qt::DecorationRole", + 2 : "Qt::EditRole", + 3 : "Qt::ToolTipRole", + 4 : "Qt::StatusTipRole", + 5 : "Qt::WhatsThisRole", + 6 : "Qt::FontRole", + 7 : "Qt::TextAlignmentRole", + # obsolete: 8 : "Qt::BackgroundColorRole", + 8 : "Qt::BackgroundRole", + # obsolete: 9 : "Qt::TextColorRole", + 9 : "Qt::ForegroundRole", + 10 : "Qt::CheckStateRole", + 11 : "Qt::AccessibleTextRole", + 12 : "Qt::AccessibleDescriptionRole", + 13 : "Qt::SizeHintRole", + 14 : "Qt::InitialSortOrderRole", + # 27-31 Qt4 ItemDataRoles + 27 : "Qt::DisplayPropertyRole", + 28 : "Qt::DecorationPropertyRole", + 29 : "Qt::ToolTipPropertyRole", + 30 : "Qt::StatusTipPropertyRole", + 31 : "Qt::WhatsThisPropertyRole", + 0x100 : "Qt::UserRole" + }) + def qdump__QStandardItemData(d, value): role, pad, val = value.split('{@Qt::ItemDataRole}@{QVariant}') d.putPairContents(role.value(), (role, val), 'role', 'value') @@ -202,8 +230,9 @@ def qdump__QStandardItem(d, value): if d.isExpanded(): with Children(d): d.putSubItem('[model]', d.createValue(model, '@QStandardItemModel')) - d.putSubItem('[values]', d.createVectorItem(values, 'QStandardItemData')) - d.putSubItem('[children]', d.createVectorItem(children, '@QStandardItem*')) + d.putSubItem('[values]', d.createVectorItem(values, '@QStandardItemData')) + d.putSubItem('[children]', d.createVectorItem(children, + d.createPointerType(value.type))) def qdump__QDate(d, value): diff --git a/tests/auto/debugger/tst_dumpers.cpp b/tests/auto/debugger/tst_dumpers.cpp index b76e17ad989..1131d9b65ca 100644 --- a/tests/auto/debugger/tst_dumpers.cpp +++ b/tests/auto/debugger/tst_dumpers.cpp @@ -6381,6 +6381,7 @@ void tst_Dumpers::dumper_data() " root->appendRow(item);\n" "}\n") + GuiProfile() + + Check("root.[children].0.[values].0.role", "Qt::DisplayRole (0)", "@Qt::ItemDataRole") + Check("root.[children].0.[values].0.value", "\"item 0\"", "@QVariant (@QString)"); From aba0a6b9ce5699ca8906fcec7c3f46598af61353 Mon Sep 17 00:00:00 2001 From: hjk Date: Thu, 1 Dec 2016 10:37:39 +0100 Subject: [PATCH 11/28] Debugger: Add dumper support for libc++'s std::weak_ptr Change-Id: Ie9041f95159e85c81f108aeff1564be136e4b7ef Reviewed-by: Christian Stenger --- share/qtcreator/debugger/stdtypes.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/share/qtcreator/debugger/stdtypes.py b/share/qtcreator/debugger/stdtypes.py index 568b1cbe6c7..6dc82a7c95e 100644 --- a/share/qtcreator/debugger/stdtypes.py +++ b/share/qtcreator/debugger/stdtypes.py @@ -657,6 +657,9 @@ def qdump__std____weak_ptr(d, value): def qdump__std__weak_ptr(d, value): return qdump__std__shared_ptr(d, value) +def qdump__std____1__weak_ptr(d, value): + return qdump__std____1__shared_ptr(d, value) + def qdump__std__shared_ptr(d, value): if d.isMsvcTarget(): From 6a03705c27a9951d4ec3c23a0a9f0c6193284e35 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Thu, 1 Dec 2016 15:26:16 +0100 Subject: [PATCH 12/28] qbs build: Fix one more relative path Change-Id: If8ad1fd77b3f79a23cb46addf56a91465d530057 Reviewed-by: Joerg Bornemann --- tests/auto/valgrind/memcheck/testapps/testapp.qbs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/auto/valgrind/memcheck/testapps/testapp.qbs b/tests/auto/valgrind/memcheck/testapps/testapp.qbs index 31178978d6b..375024c5007 100644 --- a/tests/auto/valgrind/memcheck/testapps/testapp.qbs +++ b/tests/auto/valgrind/memcheck/testapps/testapp.qbs @@ -8,5 +8,5 @@ QtcAutotest { targetName: testName // Test runner hardcodes the names of the executables destinationDirectory: project.buildDirectory + '/' + qtc.ide_bin_path + '/testapps/' + testName - files: "main.cpp" + files: sourceDirectory + "/main.cpp" } From 6286d31da32a83d0c1fb2d3a07be2c9ecaa32968 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Thu, 1 Dec 2016 16:12:40 +0100 Subject: [PATCH 13/28] Doc: Fix typo "where" > "were" Change-Id: I0dcbccfcbf29249149807c04f072d83fa503a895 Reviewed-by: Leena Miettinen --- doc/src/debugger/creator-debugger-setup.qdoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/debugger/creator-debugger-setup.qdoc b/doc/src/debugger/creator-debugger-setup.qdoc index 8887ea5ceb7..0e5d9c0261a 100644 --- a/doc/src/debugger/creator-debugger-setup.qdoc +++ b/doc/src/debugger/creator-debugger-setup.qdoc @@ -236,7 +236,7 @@ To enable the debugger to step into the code and display the source code when using a copy of the source tree at a location different from the one - at which the libraries where built, map the source paths to target paths: + at which the libraries were built, map the source paths to target paths: \list 1 From 87e1093d59688c1d8e08d5563d77de9a95e3be50 Mon Sep 17 00:00:00 2001 From: hjk Date: Thu, 1 Dec 2016 16:27:33 +0100 Subject: [PATCH 14/28] Debugger: Fix QStandardItem test with namespaced Qt Change-Id: I610dfddd519057c5464d89f42508108c7f8abb14 Reviewed-by: hjk --- tests/auto/debugger/tst_dumpers.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/auto/debugger/tst_dumpers.cpp b/tests/auto/debugger/tst_dumpers.cpp index 1131d9b65ca..0d1126a17f5 100644 --- a/tests/auto/debugger/tst_dumpers.cpp +++ b/tests/auto/debugger/tst_dumpers.cpp @@ -6382,7 +6382,7 @@ void tst_Dumpers::dumper_data() "}\n") + GuiProfile() + Check("root.[children].0.[values].0.role", "Qt::DisplayRole (0)", "@Qt::ItemDataRole") - + Check("root.[children].0.[values].0.value", "\"item 0\"", "@QVariant (@QString)"); + + Check("root.[children].0.[values].0.value", "\"item 0\"", "@QVariant (QString)"); QTest::newRow("Internal1") From 2d5e6ef2320f6976263d2cc480de5bddc913511e Mon Sep 17 00:00:00 2001 From: hjk Date: Thu, 1 Dec 2016 02:04:51 +0100 Subject: [PATCH 15/28] Debugger: Fix QObject parent pointer display Change-Id: If8b6c7415d5cd6b8e5df6c2d760b015e3077c20f Reviewed-by: Christian Stenger --- share/qtcreator/debugger/dumper.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/share/qtcreator/debugger/dumper.py b/share/qtcreator/debugger/dumper.py index 2bcc5ef6a42..1bb9df7437d 100644 --- a/share/qtcreator/debugger/dumper.py +++ b/share/qtcreator/debugger/dumper.py @@ -1794,7 +1794,7 @@ class DumperBase: qobjectPtrType = self.createType('QObject') # FIXME. with SubItem(self, '[parent]'): self.putField('sortgroup', 9) - self.putItem(self.createValue(dd + 2 * ptrSize, qobjectPtrType)) + self.putItem(self.createValue(parentPtr, qobjectPtrType)) with SubItem(self, '[children]'): self.putField('sortgroup', 8) base = self.extractPointer(dd + 3 * ptrSize) # It's a QList From e2eb591c4c15ff706ff7162a71a8f1cc1f0c01bb Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Thu, 1 Dec 2016 14:26:09 +0100 Subject: [PATCH 16/28] Doc: Update SCXML Editor screenshot The icons have been changed. Also create "doc versions" of two icons that did not look good when used in doc generation. Change-Id: I8b35e5ebdd2a837102fcb2826594b96914aeb1b4 Reviewed-by: Alessandro Portale --- doc/images/navigator.png | Bin 0 -> 434 bytes doc/images/qtcreator-scxml-editor.png | Bin 35919 -> 37102 bytes doc/images/statistics.png | Bin 0 -> 258 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/images/navigator.png create mode 100644 doc/images/statistics.png diff --git a/doc/images/navigator.png b/doc/images/navigator.png new file mode 100644 index 0000000000000000000000000000000000000000..69d9a6e491e5908cd8c24aec4d47facc2e48fffc GIT binary patch literal 434 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4rT@h1`S>QU(4HXp?g@uKiH*a3Lbm^QqbEZ$9o}Qk*cJ12Lt5^5; z_t(_aY~Q}Uv$M0bv~>OY^~;wppEPMwcXxMFQ&Uz})`=4*4j(?eZ{NNZD^^5BMeW|b zJ1;LUDJh9RFg${RfkCt+$S;_|F~-6o=Jo5>PH$g>K#Y}%7~dI5;cf;7hUK0vjv*44 zTTi$%H5mvn9JoKpFZ7?z{ABue?)r=~-f>B8ni+FbUyIHX z)ZCGLep~LWUGw@c^mNX-q15NhCBUz^@n~mPH9};&yP}NZ7Ie6sw4hG%1j|07U z`ONHunBUt>pS9HKz$JFIFK!-OffeCd9BEe1wPt&b?XB8y0TgpIm40}e>r4# mN3UNM7j){&2B-R322TT#|DN~HtzlqbVDNPHb6Mw<&;$Ts4Yv#c literal 0 HcmV?d00001 diff --git a/doc/images/qtcreator-scxml-editor.png b/doc/images/qtcreator-scxml-editor.png index 2598cfead8d317f8db264e6e318da2ba0f6180c2..c9512046ddf8f055fe871fa9af7e85572a7ce9e1 100644 GIT binary patch literal 37102 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 literal 35919 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 D&Ynv2 literal 0 HcmV?d00001 From de9c2d3bf044dd17a3b490ac0d34add24d4f335d Mon Sep 17 00:00:00 2001 From: Maurice Kalinowski Date: Fri, 2 Dec 2016 09:50:14 +0100 Subject: [PATCH 17/28] Fix potential startup crashes Change-Id: Id0f03b4fa9ff6a8f0f5b0de11fe51c3729065140 Reviewed-by: Tobias Hunger --- src/plugins/coreplugin/find/findplugin.cpp | 14 ++++++++------ src/plugins/projectexplorer/projectexplorer.cpp | 4 ++-- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/plugins/coreplugin/find/findplugin.cpp b/src/plugins/coreplugin/find/findplugin.cpp index 0b3eb6962b3..7fa23ddebd4 100644 --- a/src/plugins/coreplugin/find/findplugin.cpp +++ b/src/plugins/coreplugin/find/findplugin.cpp @@ -106,12 +106,14 @@ void Find::destroy() { delete m_instance; m_instance = 0; - delete d->m_currentDocumentFind; - delete d->m_findToolBar; - delete d->m_findDialog; - ExtensionSystem::PluginManager::removeObject(d->m_searchResultWindow); - delete d->m_searchResultWindow; - delete d; + if (d) { + delete d->m_currentDocumentFind; + delete d->m_findToolBar; + delete d->m_findDialog; + ExtensionSystem::PluginManager::removeObject(d->m_searchResultWindow); + delete d->m_searchResultWindow; + delete d; + } } Find *Find::instance() diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index fb4f32c01d2..ac67ba9ea31 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -331,11 +331,11 @@ public: QAction *m_projectSelectorActionQuick; QAction *m_runSubProject; - ProjectWindow *m_proWindow; + ProjectWindow *m_proWindow = nullptr; QString m_sessionToRestoreAtStartup; QStringList m_profileMimeTypes; - AppOutputPane *m_outputPane; + AppOutputPane *m_outputPane = nullptr; QList > m_recentProjects; // pair of filename, displayname static const int m_maxRecentProjects = 25; From ce5b08d9dfc837f455d7cab6b26b3956bdf6d076 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Wed, 30 Nov 2016 10:47:47 +0100 Subject: [PATCH 18/28] User docs: Describe the "Force probes" checkbox in the qbs build step Change-Id: I467bd9bb518e38d714edf535a6e2eb6e805a6708 Reviewed-by: Leena Miettinen Reviewed-by: Jake Petroules --- doc/images/creator-qbs-build-app.png | Bin 15972 -> 18822 bytes doc/src/projects/creator-projects-qbs.qdoc | 3 +++ 2 files changed, 3 insertions(+) diff --git a/doc/images/creator-qbs-build-app.png b/doc/images/creator-qbs-build-app.png index 29e45f84fba14ad78b5dcff924cbdbf2f2f6984b..43228c25617e4da58725421719a56d30f067e7e7 100644 GIT binary patch literal 18822 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 U>#(sS0|Nttr>mdKI;Vst0G#+RBLDyZ literal 15972 zcmeAS@N?(olHy`uVBq!ia0y~yV2Wa3VC3asW?*1=@XVTvfq|JJz$e7@%a<>oK7IQC z|No5}H=aL#{{8#+w{PD*e*E~=+mCNPe);wL@5PH34;(zUcmI*ww{O3H|Ng;)2g{c) zzkKD&jvYHrpFaKS)vI&o&e_^neg6Od_^XDe|dfT^V1_=UY^fQ?b^6`Qe|b$*N=~#U0qL{IPw4A_y2$178UlC6c@g^F#q10 zFK0J)wKmnKF7WQ=Q+q?Jc?Nzr9 z%!rR|&&|r(dHLa*lXs@AK7Ie!|KhZoFOPScSvwuQayLF9@#*oI|32RejO|ZIEj;q% z)5i0U-#oo@@#>v-w{~}Qb_Pcl&fRfo^3ubl%{$uaCU=#VU4H-R-qmBr)=b_%yYk}8 z&+pzmdGq*Uam~WukcL}N-*(M9^!nPGrjqWdh0)cWJr{02etG9u6+NlJ=}`eo_g|m9?b5$b=ZhNGy4Zwl+qCKKv1KP$G`1#Y z+&{N^;>7-?{gw5Rp;ylw-?egnWL9%ZapjqF*B{@y>}g@U~1>D;@z-66W( zT1BgF@zJ)f)yd7XbEAq&Vv{p`6BG^NZ{2^Ml0PY{wsZ5X_eYLj*>&+!=j8djC#5%+ zCw490SlK=A-mb08`hRFP>bJ6J_tR^!%%b&raMpy|aGK zroiH9r{?DbRIaM`sk-~_!Hm+{*@>yi{w@)|mT{8~%v`^wFS@SW!((2y>*EJIJ%eM) zb@2ss{UY1wloW5$`Y6ZIrR#r}vo(kp(6Qe=dE)Yt_ID@!KHY4Ony_sx1B11^r;B4q z#jQ7UIRk{lB^u0G8%0D~oMtg3S}?Ih30z>~@Mv_n zq^vp=rfV!}iV~4I+8p$ncTtk9y z_tlrjnn`dr{s?!-QskHr)iIMPh}*H@iqjd92~iwOOT?0vHC%BL`13pK=6$Q{H5Vtl z2))r%R229hu$Djick5sNrydqz+snW5G)3|5El=o~ud#$fo~w=Ri3i6KlPglIHcGEr zd3)!s;@rKr&h^Z5yr$MYuP$cop@XL;TzSo2oxNq-yNH~`gO_ZBwq8z>J$d}lp+lW5 z4n9t6A3N9H5BXxcmG9j86+3M!_9caH-f{iaD{(Q;^`39vYMb`0+IhRGDDU-y%?oGk zw5=^){BD9k$Nuou@i(e%-|=s4%i7b?GUHy<#ryTPd_s$A-#5fQe2~7jwz0MOcN?2_ zXpRTR5tS<4uE2w_z~;NV3k-JmsY*AiUUS z>m#qO#aSn{&N?cnxrL>jtDc;8PA2na;MOTA1}sTQDa+M3GUbA}8?QL+33FJh*?7fC zVXHte^UBs4iV9l={&TfN6@Os7cZ?_LS&#g&)k`-9z7^gS_qtT-8@p6cmiN;KbFVjL z=7a@bJLpuhLZCZcbK*wv3pc!v9@`{&>|ycz7Y`=yeL7u8J|ML9=&9ENmlyW5ZMr2T zWVijHVsfi$TWiO3p-C@W8GBrH-aI{^bMC|SQ(V_B8^lVe{wUaO+P40kx|PAFyXPe` zH_w_SdF+mNYX#F6pEd4>nswjTyO=QQJa$*tYU`hr^0ZBRjd-Sj@;dhpBa>dyBgzNN zPjyRkBz-Jj*OVdhd&c~Vbk=$;xA0u4XY9#3 z!1O)Hebsj*yGXZigGuH!>ODG^>}z?KetgULasQ2MO|6M)m$MCnwQq<{y}On<`3hI$ z>8HOOUni~nnX=kOulldn=Nh9w!uhNiEyTW%ChZ{H~ zywce`>Gi{{DdxLR@aPL4^!>Ct`#;l-HI#sd~U2^!5p^XK&|)WxW2jPiOOF9bED5 zQOc@$bsKivDk=Qy+*hzuseX|zM+e)cD7|@`ls`5exB3*Zby~UoR}uCN(jA&Vt{w4> z@nm`?n9h4IHE*h<-tmq*cCVsjlBP`jp>Xni=8`IXhbZYZHtsvRkLE3QWGv7Arv@7P6OP)Y$31*r(wG}@b{kbr`j6Z zX-}u$*>{39-(_FE&70ga@4IUYIJuRYgO9GA_wL1;+LN7K{^lE>96!FEe`{jh|1+u; zon`6aIS%tq?0;}&W!kq;%hgrJt5pK`D*8;cJ9y8P+1mJKqVIiiW3io%0zHNcKD=V8 z-*kTE&*kFVTutYdC~b4Q^wuuh$6R-&mhJg;*A00}&sWc1X|4BDoU7bZ_1%91&n-S1 zl0xrH56ii@X-C77^TOT_Opixw{>-u4tb)^e_T)Ula+CA@Qy(4kv5b2^J7<1Lb%M*< zWn16ea$g`OuQl`CAtg?e(=MKm{13j{uDm*RN8^)%t?%9*Kk|XU)9cG67uB%DvwNQg z@N5=WO*OC0Ui|xQVd>=c(Xrk~l#*f7or1WoPD|L z&<>Sdx5N(oEI4XjxoGv>iIwe(?YO&a>`J$$+?15evF1@f8ZH>_?aO#Y>S)2CIPI<9 z)7LQ0b2SdQ7JcQ`@=edIuP5o4^28T^ew()NNpS^w+|i;^@zZDItiKx@TmEeG zQr7R@x8BL#dy*i$1x{?4Rnq=ku)-ml*1el-C-aYyKyg+qh3`ubI~VyBE06@9KZIokM2L zM%IUoKi*Axu(IOOI%kEFq|k5g%(`0V-~X{kXV1%L4;iLyKQ)mtF87sd^C#o2d1o!( zvFY7@w0QnH@0E|E=hVF`S$oGkvfS|Q!SC(APk!sSUTWsXsX0YTWAe(Sp8s_=9$B@R zr);*Yd70G?)Av$}i{S{j$0~YX+~U4)@a);-bxJ+`$W$J2GFqzT7(E(IwNC z-J;iKMHnf)R8uRR8UB&yn9iD<^2P{t)9Wi(rk}Q(6MQ4_P?OOwHMZ(GXY5~vs+{`p=7Zi-m-beE@BAuME6n%!*j#M6@=(OeetX~jyTY|S;`c?x z<2ie-TTMRw^~8lG*_mvwZEg8AIm}FDZZ=}*t6H8qv6;si4K!Bt6qCg zmMf5baawuH+IHb2XD8i-ViN@tzkg105i0!7>#wAEOZ|=Vm8QArC*5E6_3_F0ymzx% z^VH9y`276FsE;n8rWJQiZC!nGM%-3)w+D}tX7IGD`|nCz=U*yUvs-+BsYCM9cS|Oh ztSES{^vmhimMe!+ZnWLu`SvF$e$te+inp(arM%EcUG6dC>V5w&iI1;-%9MTaW>sgd ztU-I*{VTznjoF1B%}aUZX714ukyV?-X?eFbnJ@GHpPPUGE(kO2E}zPiWw@!!@sPph zW>>+76U>wky;NSCy>-vpQ@b{(Dpj9dw$_nx-t~6@oylBvQr-*dR~}Wr&6fXi8$-I( zzUOvJ+RAoruCaO161Ajx{@ZUyu73LXBhmYg+`0Zdn?DUs`e&6TnI1)SzjwO6?cX`s zsjJ*uAqSzv|!ol}nG9nS_Ri`+W?3^y}9q z-JG4rUd2Sm=o)Yr)a;B}@-AMBt^4ac?$)QX7i+BhxpIQQ!<9Rybjx^jM7SJ3=F*jI zXt`o}hs?!;r`Jksu>0{KPweR8Yi(N|7%jcCqy3Sf^5xKdFF&=N+9C1jL}cLi$qsve zOKUmnS+svBI&5qBU{=75q`KcL#O-8HaVEXdTsP&9u!zMq{>-wab94mPL?oV!Na@sl zVKGtrjRi~auKI-{t@lc}dYjUps)%vR%u!x1U@o!blUz?5{%jw%8#k)>v zLPy92=2Qj6q^gV2i!=_26?yo#`>tTMogP$Yb?KQ?onq_Tya)0d_vQYc$<_6H@mt@s zQzo|yYd+P{aSCzVnW4EObxQ7ryVqVWSj~}=cxdIKdtJ+(-QoRun>TEE{Jnrh66M|z z=ZwxTEje)O$HVxu;^qSTpYM`c7p9~-TlL6SPW>U-Z7x#Tq3+UatZLJ>!NYIyhsNp0X1@46r8|CkrKyeH?z=N`8ARXxxwzm^ znN^nN3d?ibO+$mjd<(Y-ORhGLy3zG)^%?UiM{|W1n_Mi_eb#xfichp!^UV5h$yK`( z%>=vsXUADCnL6RSTZ73%&pBFujZO4)4ohTyjXrVsqs6JD6OUI}X+Dy9ox5S919R@e zq%*$Twrz{fypdthbu4m5!6_bT?-%_Bx!ft`*IZK7+!CrkpF4ehP1mtAJ@?YgWcp|S z|5s9_8yc^-eG1F^zGIuj_DRMZ?ghRzjHob7jW&j!z{mMu}Q5<~?5 zMCyK>zKT`*xXCq1U1Qd*39NB#+l?e2uWpVy{IUDMwd$$ikDvcBT(J6M$I6wa=~|%f zK>+vcKMhx$7Q}HIrUtBUogoQgF}>OG9mm%CpjRVpLaAfY;P7r>+LcxJJ1JHaTYP zU2yH@&(D?;2W%StAKW#sPQgs`RJBjg&kA=}<4X-l>LGn`s z;saJ&{koJarFU`L^p!_%SS=DevuWnEsC()*I-fq3F8KOWPezhc<*;DDbjPf{E2eE* zy5R8^`BUW;@xHqsG&8wOGWY_D7-uHffeOs~MzH_GGdW)Zxx29&U*m@)0 zDt7-nmvir@dl zut1kV+=6sl^|HilFVz<0c+x$s#)Ya@<7{Xfbn$_#w@$%u94SUc2 zelT;cfA?Gcrl>zFUQamMBvZIp=8>Ypm8w^wR=q7N1WHz(`q8rN;Jmf@wZVUXdhI{+ zVb`-acfQ?2zc~f^pwvjjUeg%cM>TPQB`}vNLpA_%x0u9~tjWoe=f^ zt!gl9>d%i;o^G_}JK-(ivG#wME~}{O&yNR=ZrS-ssBP04-JsX|L%eTZd$;yxW8unQ zI(s8ueqF(uxAKhGo0N?=Id_Q)AO<@;1G~S3CvbQ^FkQKH)fxlAQ=7lk#dkh7U8&l> z_oI5sRQCysP9<`9KB!-GE!t}n%cbIpQ9_6QyXx+^9A2uq=S-kOmM6#L(A5s9(uJ2b zb4yN%y;>dO?UojOBS=z`XQis9&yp~y)Wb%XW)v3d{`nrzX+87toRdGM)O@lJd>tFN z?!I{a3RUI3sXsqmtzPP>q3FdWe4p!ua9*)a>bfuL$L}}=2VHB3GIP`{{<&bHiI zQ*+Ip-41?s$tif-TCTq>HoRNEh}GT-`0{N<)TPfH7dB2i@GQDGd*=B-@(fP-7_;YZhd;TA}W6+Z*u#U zNdjtn%5Jd|1-~vT;=Z^t66p^^u2$m|0*cv8Jz9pH87o<=9HrHY=+f-+jl&ID^(4BmWa)J;?%cNW{)&_d#`ZSn*+x|t_@9{swlt6*rhY^)pVco z8u@oWU+K?07c9lLQdRSh|GH!U&)u7OKt=QzEr=k?31O$$QS-oN%D zZ77Yn*2$!<$9YrthaMN5)79^tb7#TYjRzBp(lea?bxFET zzOr3>GP_#FTW0%kZJy&UI(CBFnjBBtZ@LuU$*@InN>uN@Dmwa@0RGL28IY&d| zZH`v-&60nvE0xOjut@$iNj@@Bw4FIiaMR7C{`GI9Hu_yZS#-*CMQYI`>zT~G%OqXD zHM(s!zAH9+%B$5vTSI1aoKHw_+`8+>-)il@??pHq#P@}Atx&Z#s6NkQcCx*gW9yUV zOA$3LWlG(;w>K{Q{$s|~X8RSQw@*H@$;&#v>4=)9p7q(>*|$qux7~On`qyKt$K?~L zla5BY>KZPc_M$mzQ+b{J$EWS>F26qXw%pj>5s>{m?CG`1sn(^%^GtWeuQ~HV!?8_O zyEOari5saVbG=sVZ%}?ce?iG~{<({9muWff3^Xl%9A><=IQ85$(J4_ApL{yqqH$ow z>dGUJ5-un$7PC>g)De*N_G5(@m+Yhv_parBai>!J=bb$|>*>c5vT z-N9h;aCzL!ZR>ydEqpm;b?oL_dR-PfUv5slntz)A5QoYUg$V+g%zt4RtFv)UOwt9m~Bye(U0Y%v&c!G4L{OZD3d+77*O=>tJ+@>WS+v^4_+~ z7`Hae59{7lU1k0%>G`TPIyKX>Y?Z^G3O&^9d-qL9yn9Bmj#m5>*5?gT4qvYmT{4%-+@*HrJZxGU;G;8qn*a9{o3L6>bd^96ph-}hIy8ZcOWlE0G8_=Wun6H`N!gD)eLR-6)LF+Kb3{Bw@~ z1nyKlWPDXP@s+UL5;>+n+gsMu6da$tw||1YORS-vqCj`Oo35arB9}XpM#a^?p2533 zQ%bKZJ8=A~s9*c7>U)b?@-bDvjP>*HCVnwIn;+8c{x5&xjI7DhwLZ7J_i7&TJi53n zezmHC{oB>u?UUL4UOa!(ofCaFzPi%N{o*G{!D)>Ge-7?muIwi#pSLpjmr`18T;#FK zpXLa?opgWIw9~0aS!059lb`I(Y<&~+u&U2jqbKQ+)21-@wxYE;-4{+d8On%mTKQCc z>!A*R?f}MxVvGL^UEepyL(#lfQDEKk{L>HH2d!FsbBu@97FBVH@C%4uQ2@15NR~K{_CSX zGvCFswnP;L7wxm#_{4M1zJi{6wSHX;_1D6dt+$WceWSlt3n$HB5dQd+ z$!o27=i}Vp&tL6M+p{xth6_TKdh=e~Gwrm9BNEl)EAZ>hUG(+?|tQoSTQQ~K%RC3mgWzx;{O z^*NDZC?M9|6Q#6mQAm2;ZPiU0b4wRJI5f+7dVju?h_1C#tk2)7y;k$??KyhZ!_stG z?uXR$86A^9J$z$$SaWMtxr$pgr`Cb@bI&!c_6sxH;%w$;z&E`^93|7bkv?lHM{ zn{+*w3$E5_irRJ}YI}#!DZy4x!&P4+a#J>+h|tvxT7E{(FIg;QLeIP{rdrJ&$08z@ z+-Np1_|U&;#S(U>3op)}+j+hE_6iw~DZBsJ^&GUkbN_CF{J95n-tTO`d8hTC(G$a+ zH~2dHLbG2znsw}(_Prh7N~J$9__w3{*~62Ys}8f9@tNOQ`SynIl`Q46DO)$p5DL@% zdu`^KKYMC)&iq|19X3T`z3uOsO6yD4WzyTUoo1ikIr)m#oYOxdw=N3L`!$<&>o?Ok zDN(o0WezkOeOP~$>&d^`t(!KL{7Ek2_1zR{=RKuUJY20K%EzJY!k0bF2OmA>%>JJf zowCU`>G;{!rl_EG5l)ZU)@3dgF=|dat{jsQVYYtKoDGQw?*B?rdbern?b&4-PsBd0 z`)0T{N_D5vsV$REvd<2xmi2esqB6rFU1=W+BS-3=oIP`%O`hIc4uQfW7zm!c(gM7KKFZVs-QDWtBwx`eI$|3b<$$fJY#H(rwx&N=0 zR$3F3{p?JnMORc7@5-}({+l= zyH>PLlb4+H(d>Cr_wp^zuN_Y~=#Y7SQAyTA1w~UK);n8dUtXJ$!@JbBZ?mPl_cXav zFN+ss=C=N8G*8v{lHXrl@k{2VdY0$5U*&hZpRT!^WK+6j*Sp&<^;rJ6=w!{^;I>As zdsg`Cm%Pav?CyWfD0r3ByxuNihMTT#ACuQjjRpIr=kOV}WgUJi?VU4U>la__95dne zt)E^y_uaF-zuH>2;)>E=>5iz|PJOe?+~1sAoqjCAz9(vBhwIu;dw;jj5!Q^;EpjP+ zektntgDZ7HXSF;QPn*-ScZt=aX}^Q?!m^Lu+3@{Y`|9dEb3e`5`xfx54t;Q@to+Bb z^-(X&!XEwG8r%_O5z`faJM7_$2j8m~glQ!OddnHk)QLG25}&e4Ig3}jcK3bxn(aRe zLany0;I!cE*tFCnZ%fSTu-{zHqGz+ReD}RRdMjn?p0L}Kv%a6xx+DMOs@AN;&eA=v zw0`aSx3pA=X_7!^l$O?|mf}Tk(l)m3uDrYR@~-#Q=jOO?m%45Hy3FnIN7cpeoR@r% zUt}^{ZLQV*o$s5k#wF%$IdbM<-mV)TR!aE3?_=Av+9dwWblIuxv(8WYw<1_=CD(&L ztA3t%bah^@>WdlAZI~trv`1}eYnHn#7JimvLv@wR=lNGA1=%G34De!Ld@L5>%mPo9 z0o*4<9M;Oenaddxk}A^hmQ^))n&vk)CblGrwwvrJ+D?(_EfU}6Mx+Qv${a|%&l1Tx zy@7#ISoi`%a(qZYpp!4FYly*ip6xAfO8mHIJ}>!io|82t_jyX?`G+6R&;9-X^ZnoZ zzTf};t~&kMOpmAgo32fA<(_x4-hW2@Lv_wA{~oOWl(E-N-uC{dH|-(+)IX_YNY0+g z`F45SoSQ2QZZ5iXZ}zfhD@-%$-B-vc|M<1$=rykM7k;2mPO=539Ww$QpFM0I!)ce3pt$8!6S3FBn7?i(7BV8NN)(x%#eVcA?Ae`5z4zr0%M# zc8~eD)OhAx%U`*Tb>}bqdVgy2f>7aCMmIM9vd!gcyf$m$#Ve1sYj@1OYBIHEclS$C~Z$-bKeQ0I>_E#+P1c9X)H$Ug_tISq? z|3&YSeb=*0+W^TXnyC-cw&wYeu|; z;UNBL%j(aY4lTQ~NXh8fDWe&=p1N8=bBd4bY~9-vf5Gp)vef0kxrfa+aL#(FvV&be z{fP9P>JX(Jy2jP2r~bYFAsT+TVfz-%W$)KAZ21$uKX`?&aC*R$&{tx6YTBN;FIC*q z@w|7dt;qGOPY!rHbM@X>w)M-5RTU==dNXVJ?#eo7Y`iQxI=*h_x2xjIgq2qF9@k%3 z5%xLKZ0?Up*Nckw8Oa_^;kHr|Vc~zA{qi5)YQD7Le+uU9Gp?B~XP9d47#z4+uKU^igSkZGER%ajZo-OG^KEeu>V6=#np!*Q9=)Z$B$3VN>MG7fH%DjWwUWDeV4s zOe9-XJ*e^Wp^~kgYxrMsHi#LdJ!UjZG?VEHtT^TN>4xRiOE(T)U9Zb`*_v73P)GJd zu9f({)kpgkzVtCDvoI;KGZtORa4x##Qx|+XNRe5Y)$ffL6ZGen>(1u;W>y#zVznxdZ+C@i z%lhxD;v`;IS#GNf&-bv6dO7!g<_DH(E6Q24ADl?GFVLuM5aYe!E$k~_aM%C7;G6xA z|N1qrvs=*;$N5G$@0?!XNxhlJOHC)oCb^$G#BsRozU1goToKwcB5`Zd?@Z%i7`ax-O4tV^nVoSH43- zluiDTUAvUG_&H9W=W+FE>AYDJ)lN2ZxO`*u`fNG*$+5lR#q6SjQOk=CrmcKcmnwdC z>C`f-bwOJU4r@KBT)Nu(PHL*7(p$A1R$guyGgY?Fn(V_Qa5g!MsduY+rmBG6_D6j! z_RZI}Wc+vD@5PXzy3Q>zNq0)Z@7LR$qdaW(i<|sDy{TW*W%oy$6%QElSGIhgC|dWs zMD5?kx-F>%Gmjjb@~+{d-Y&EK{qBd%#$ua*_lk`z5eYK=Y41)PSF)J3p<`;C;SW2xTT|sD_sUxqzFpwlnE&th zRVU`hEW%u8_nEw9KNTtw{JHLs)2C0n-cIv+tQWLp%J%4U+2zuQ-ZDu);V(8i_{^Bk zb+gZ&_K_5k8-N@BX$6_R}UNd$MrI`gKfO6CJ;}Wk!YRrfY0WA|4mNGcs?< zvh28IH`}FqRU04si?B^Lle~gcpT7OCckE`TaoN#FuuFhxUcN51X)2ZpT*D3qhx5cy)+aq#4LL zd0z-K-#7V4+;y*w*9FW@{7{>Iz%q5FiNmj;`>Yc#3MM(KeXkD?W(d5T@lw5NrB3Kp z#S1}VXBMPtX*}5M?{U#cymIA=#^(*w^7eSR@5 zT<{XVmF!jY$}eTwH~x73gbzJC79QU(rrR@X=IOQT8d^Gd-<~<~bk^I%{^#!wwynCn zLtdpNUM6SL#emol&e@~lH82gp?ag@`WvhP*r7ChbUw$O9OZX2a#Dl@Xfdc~^0 z=B>UKeKw|#@se<$&bCvzQ{%JEG!EtzP2QQdcURDs24>^DcD0N_#Gq^bgFLRuH`YfiQrK2~NN!r-_=8JOn4I5uY zSns-VUD@mBHMMuksx+f^zd5t*TgckYkJVhS7AUSXk^R#Uy*EQ;dnLQd5e?&ayMr@S z8-2CCIvzY>*lM|b=I5GOvfnGJc(?m7^etqt+^}2GLBVX@?2gl2M@;hcZd}%{_FE{* z6uZZ`cy=zM?%Eq!N{V8)bFJ9lM#rpMX*W^e{!_X0&Snz?YTxXbATV+Jons0jO{e(s zY7bZBeLgumb7$dV;|$R`8y-KKmCby7&)T-MJHD$`UKZZ=_#d{#z+LTf$5eI?7WSAM zWEL~foxeb6MXCa|n?&ZO-De>me``kKrN5)-yFpSz7=*((m_ zQ#vcBo}J7;xjFLigO;;xQ!j8ob3S%ucb3evr-tSlP18R3WZz$DS|p&bPluzW?R?XJ zuX|?GU`|EF}TtNS?We&tVKmgR}q8FID$aE*c5L2rq$dHssg z9jw1qe;TmzRQ~R4`B1sk=5oi9b2XYi*Q#%>oWEqET8(~#x#*S!n!6rNU!MD0&hwh} zoBQ3@wrHes8$8!%_Ex*SW^q8w&)-K2zJ1;G*vRu>J6nBizF1^R4WF^E3g4>vk5)_nk;6;Ypa>`|0M?9jkfRL?Y$15`TVc4wM($*kzM^ zdFQiEuXd@8JxiM`A4k;4&OQ7;TlkUj&-W+yv*_OQzabM;bt3=Q1Kr~n9y%)Z-ClKa zlA;Q8(975i<%>Jcs83YW<$71~w{7IlIepOZR2Z zjicv8EBO2OJIu0ORou<=W!}|BR%hEB4nLt??kR2u*KJWxYf$U_cYel%v`F^+*SYPX!dR$q1TR(;+&TisbJoo~lPF{Xfpj<$sr5%<{ir z+?gD+eU5nU$=@7CN|}=`t#}#CzC-Lr{cInNTDjGe4}U$AY-qQvt4h=Vyti$OqVF5l zV|+)hJ$mWdZF@=GXxWkMn)A!WDqmlCeE5EZ^!$fxw*%Dun?u%L6H1>OP|Lf1HcOP~ zu`d-4++RY4_eGz4vrI+y#i9q!@ygXoj$L89raxzOSbbXP5~VC^C)wW9zPxa?)18AeU>$!dS%W^6qfTnKPFmO zeYN0p?8cyDdw+*n)SdfLB!pXb%A#Z8aa9n9IiPHJPG=k2A-z8C&Uej#-C z)yl|gvJ+zESyy`EyNb>ezX&bl-K%B0 z?TE>e<2v82_`H*~dLDhvb-%c>oZiLD-fJ~aafI5v;o8m2C9~qj*JSx?SG<|GT=Uv&&DKD0nu8np2{I21;vrhcGvbz#bciy<+TO0Ys zvUiJ^Z(`u*r~h&tPn6qEnwOK6;Ln>;_FZn<*M|+vGp<$ado9<~`^Vjp)8gu^+%_%K ztoGNtUWoZiMjiZOp?%D=`uTgkjXu8?#=PC=v^Ht$GWN=&*Gsh~m_!*T9dXo||2E_5 zqm-tlTavzS`MrYud~cD$q4 zBjV-HNgS!Z<)3z46L{)mw?yGsWUgD@tjt8KFI_ghLXTLJeHXd#ivExeXXcW1miW5* zM4R5JS*uSli1KKN3d^Rpggx!wo4#(5WE77)6S?(r)@eo04H2yMxv#^m zgt{(RJ(=BKAHDI`3CqceQx}NuwUz&WBW}yBxRSV?c2A#`hry0+OPRX->Ep7=@_^zbZL~hXD2#wIj?T- z1pZTjoO>cG^KZ$mDv;8Z-fiW(<81JQC-cob{BpOkZaKB*fDr5LElb|Ycy-)up2sG2 zNSdw9{@cc`)tp-Q?B-`lhJcymrt`19!+Eur17O7)kul<$7j^{+E@g+l(N zn(9Z-mvl`mS{2~xYY=8Gt^1H6;D}U~Bj?0qmi<%2JdX+FobWH6UtadzaqT`YCc6c@ zKOJIm(3biX!@0oqlAqJBNl&+lx9M(SR=K;-I6X|FMcLsJ%dDr3)!B;`x!M?oB$hKw zvox{fDG2)Bbn?cHS1LBO83$$i>uQd#H7UNo_HM;vv zRJ6nwPMyLvEnsz?#yS6ci?8-Rj+RaS_+)PUo#W>{H*A#U(5>iZK5r-)~ek6(7nR_Px19N_qNT=NNTA&S5T_F)?jm}u0_Dz%lV}??}Puup3~Vf$wy+t z0!Ln(uS$Fm4Sw2~b6&V)n(*;Jgx;-KYx#E@k3F(9vz~fBoRv=VY@2kJxSV3@`6cs<@NV8gQoGqfxJIp2L;z zsoQTQ7jwT(H@~$0<@PgokKPnMd!9|kd3sAfcTv&#JHkInthdsvE}**p?@-E)0n zyP9yRkLbGec_+@6rUzQg(^1k~_|0E3YR2NrkE=Z&U-YWkadG|I6Iq6I>l=Cmu;e5s3C#o}JvD?N}ww=dgzq(A{k?n+$~8B6i^R^;?}MGzPx;spi$v zSGK;C4!gJg(f?JCg%1RXOnkRmB`zCjI>}kwHK4u)x{vhI{%v=09ZB^RQi; zng3h6K88VMj*qoTr=** z!`550%V+F)&8p{NwANRC9{bu@^TPZSO`$0fKTd^BGBzp5eDp3$S=ZEwyQxfkua~v0 z_KR0M5ASg$E=*Yb^1br5e;W+`lm;I_md#oKR&ZERdx2*=`PmMQZ0M`Vv+l|&TAG$+86Fkm^e+E`*YM} z$0N&oOBhmT{5<^X?lS+IlO(^%-Yw1kczfl}Sg9@L>-6s)=GQ-c;&sY=@x17Yk82F> zZuF^^KRC@?b$R=PCX>svJk&4Oo(x}{?i8i_eeHu|y&K+7Z`rc#V)vDE)qL+JZP7UX z>aIR-+f$XIm~F;u+YUX|-()an+0(rzb}U=6aDrH*di`@Z<0VhKQZ8@uUzYrRnZ@_0 z&3Y3i%&A`cgRf-$(;dODT=%P&9JtykW3hC?^A^j-?_1zpHuHV&bC1gNFxEAiIdAtlp$kni*Ps^FIzB=!;_l@Q)F_TlGMAa_mrGL`hC(-M6n#Vcgy6uw(bMJh~P?7I0dHmaD zOT7EyLW7yF4%Ua8UNTydRlW1-ABI{pm5(<0d&ds#p)S(sommXcQnmI&jYTq)|1d*;+6%PVE`Q6+uGp)$+;MQ`8 zQV{FgB9he~GM#aUkGJr<_Y-$%Nj9wBa>#UE?};C>MhxMZy6Y4_cif6+dtjw&->;zi zBRA^u_3K}xXWQO;zuWNhuAe`7cLlL$9=yLKv{&+XNp5mmV$jL&jNTrXn`6`iGu^u@ee_b!JpEvronO9*ttn(7|#7j#8_e5T`Ov}m=KPO~squ18mZCKuC zviixjnS$BY?qcy?e)r_JrzU9q)D0~N&=qamav(QqanmNbWl!@A=f_XHSX*@^&@yx7 z=i_1O`P-B-ryiBhmCl?NJ@wNST}#8GlFm Date: Wed, 30 Nov 2016 11:33:49 +0100 Subject: [PATCH 19/28] Doc: Describe excluding large files when indexing ...in Tools > Options > C++ > Code Model. Change-Id: I8efda2f62a4efd5c782cc4460a3b0c3eebbd23a6 Reviewed-by: Nikolai Kosjar --- .../qtcreator-clang-code-model-options.png | Bin 15106 -> 16323 bytes doc/src/editors/creator-clang-codemodel.qdoc | 8 +++++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/doc/images/qtcreator-clang-code-model-options.png b/doc/images/qtcreator-clang-code-model-options.png index cd28c697d9cd69156b0dc5576ba7f1100135b60e..ff9e367c02274d351a016cfe84d31d080d46cf3d 100644 GIT binary patch literal 16323 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 Date: Fri, 2 Dec 2016 10:56:16 +0100 Subject: [PATCH 20/28] Doc: Try to make the Projects mode sidebar docs clearer After receiving user comments. Change-Id: I525aba5121f0ce629838fa5146f44120283c7f12 Reviewed-by: Tobias Hunger Reviewed-by: hjk --- .../creator-projects-settings-overview.qdoc | 61 +++++++++---------- 1 file changed, 28 insertions(+), 33 deletions(-) diff --git a/doc/src/projects/creator-projects-settings-overview.qdoc b/doc/src/projects/creator-projects-settings-overview.qdoc index e31cac5f055..f8a0e38c4eb 100644 --- a/doc/src/projects/creator-projects-settings-overview.qdoc +++ b/doc/src/projects/creator-projects-settings-overview.qdoc @@ -41,23 +41,29 @@ build and run settings for the development targets might be set up automatically in \QC. - To view and modify the settings for currently open projects, switch to the - \uicontrol Projects mode by pressing \key Ctrl+5. + When you open a project for the first time, the + \uicontrol {Configure Projects} view is displayed to let you select a set of + \l{glossary-buildandrun-kit}{kits} that you want to use to build and run + your project. At least one kit must be active for you to be able to build + and run the project. For more information about selecting the initial kit, + see \l{Opening Projects}. - You can select build and run \l{glossary-buildandrun-kit}{kits} for the - open projects and use the \uicontrol Build menu commands to build, deploy, and - run projects. + To maintain the list of active kits for a currently open project, switch to + the \uicontrol Projects mode by pressing \key Ctrl+5. - \section1 Selecting Kits + \section1 Activating Kits for a Project + + All kits compatible with your project are listed in the + \uicontrol {Build & Run} section of the sidebar. To activate one or more + disabled kits, click them. \image qtcreator-project-kits.png - To enable kits for the project, click them in \uicontrol {Build & Run}. The - list displays kits that are configured in \uicontrol Tools > + The list displays kits that are configured in \uicontrol Tools > \uicontrol Options > \uicontrol {Build & Run} > \uicontrol Kits. To modify - kit configuration or to add kits to the list, select - \uicontrol {Manage Kits} in the context menu. For more information about - managing kits, see \l{Adding Kits}. + kit configuration or to add kits to the list, right-click the sidebar to + open a context-menu, and then select \uicontrol {Manage Kits}. For more + information about managing kits, see \l{Adding Kits}. Each kit consists of a set of values that define one environment, such as a device, compiler, and Qt version. For more information, see @@ -66,33 +72,22 @@ To copy the build and run settings for a kit to another kit, select \uicontrol {Copy Steps from Other Kit} in the context menu. - To disable a kit for the project, select \uicontrol {Disable Kit for Project} - in the context menu. + To deactivate a kit, select \uicontrol {Disable Kit for Project} in the + context menu. + + \note Deactivating a kit removes all custom build and run settings for the + kit. To import an existing build for the project, select \uicontrol {Import Existing Build} in the context menu. \section1 Specifying Settings - The \uicontrol Projects mode displays one of the following views: + To specify build or run settings for a kit, select \uicontrol Build or + \uicontrol Run below the kit. For more information, see + \l{Specifying Build Settings} and \l{Specifying Run Settings}. - \list - - \li \uicontrol {Build & Run} settings for each configured kit: - - \list - - \li \l{Specifying Build Settings}{Build} - - \li \l{Specifying Run Settings}{Run} - - \endlist - - \note If you have not configured the project for building, the - \uicontrol {Build & Run} view is replaced by the - \l{Opening Projects}{Configure Projects} view. - - \li \uicontrol {Project Settings} for each project: + In addition, you can modify the following global settings for each project: \list @@ -102,14 +97,14 @@ \li \l{Specifying Dependencies}{Dependencies} - \li \l{Parsing C++ Files with the Clang Code Model} (experimental) + \li \l{Parsing C++ Files with the Clang Code Model} + {Clang Code Model} (experimental) \li \l{Using Clang Static Analyzer}{Clang Static Analyzer} \li \l{To-Do Entries}{To-Do} (experimental) \endlist - \endlist If you have multiple projects open in \QC, select the project to configure in the list of projects. From 2275d683739ac90602d28bde5b8455d075e9cc37 Mon Sep 17 00:00:00 2001 From: hjk Date: Thu, 1 Dec 2016 09:22:53 +0100 Subject: [PATCH 21/28] Debugger: Switch on QObject name display by default ... and use the option to govern general QObject guts display. This allows people to completely avoid the performance impact of attempted QObject display and still makes the feature more prominent for our favorite use case. Change-Id: I1e53b6448f646ab7eea9168a3cd24c77769e6328 Reviewed-by: Christian Stenger --- share/qtcreator/debugger/dumper.py | 120 +++++++---------------- share/qtcreator/debugger/gdbbridge.py | 11 +++ share/qtcreator/debugger/lldbbridge.py | 5 + src/plugins/debugger/debuggeractions.cpp | 6 +- tests/auto/debugger/tst_dumpers.cpp | 8 ++ 5 files changed, 62 insertions(+), 88 deletions(-) diff --git a/share/qtcreator/debugger/dumper.py b/share/qtcreator/debugger/dumper.py index 1bb9df7437d..3f820ddf9a9 100644 --- a/share/qtcreator/debugger/dumper.py +++ b/share/qtcreator/debugger/dumper.py @@ -253,6 +253,7 @@ class DumperBase: self.typesReported = {} self.typesToReport = {} self.qtNamespaceToReport = None + self.qtCustomEventFunc = 0 self.passExceptions = False self.isTesting = False @@ -303,7 +304,7 @@ class DumperBase: self.forceQtNamespace = int(args.get('forcens', '0')) self.passExceptions = int(args.get('passexceptions', '0')) self.isTesting = int(args.get('testing', '0')) - self.showQObjectNames = int(args.get('qobjectnames', '0')) + self.showQObjectNames = int(args.get('qobjectnames', '1')) self.nativeMixed = int(args.get('nativemixed', '0')) self.autoDerefPointers = int(args.get('autoderef', '0')) self.partialVariable = args.get('partialvar', '') @@ -1373,11 +1374,13 @@ class DumperBase: def putQObjectNameValue(self, value): try: - intSize = 4 - ptrSize = self.ptrSize() # dd = value['d_ptr']['d'] is just behind the vtable. (vtable, dd) = self.split('pp', value) + if not self.couldBeQObjectVTable(vtable): + return False + intSize = 4 + ptrSize = self.ptrSize() if self.qtVersion() < 0x050000: # Size of QObjectData: 5 pointer + 2 int # - vtable @@ -1428,97 +1431,47 @@ class DumperBase: except: # warn('NO QOBJECT: %s' % value.type) - pass + return False - def canBePointer(self, p): + def couldBePointer(self, p): if self.ptrSize() == 4: return p > 100000 and (p & 0x3 == 0) else: return p > 100000 and (p & 0x7 == 0) and (p < 0x7fffffffffff) - def canBeVTableEntry(self, p): + def couldBeVTableEntry(self, p): if self.ptrSize() == 4: return p > 100000 and (p & 0x1 == 0) else: return p > 100000 and (p & 0x1 == 0) and (p < 0x7fffffffffff) - def couldBeQObject(self, objectPtr): + def couldBeQObjectPointer(self, objectPtr): try: - (vtablePtr, dd) = self.split('pp', objectPtr) + vtablePtr, dd = self.split('pp', objectPtr) except: self.bump('nostruct-1') return False - if not self.canBePointer(vtablePtr): - self.bump('vtable') - return False - if not self.canBePointer(dd): - self.bump('d_d_ptr') - return False - try: - metaObjectFunc, metaCastFunc, metaCallFunc = self.split('ppp', vtablePtr) - except: - return False - - # The first three entries are in a fairly rigid relationship defined - # by the Q_OBJECT macro. - if not self.canBeVTableEntry(metaObjectFunc): - return False - if not self.canBeVTableEntry(metaCastFunc): - return False - if not self.canBeVTableEntry(metaCallFunc): - return False - if metaCastFunc < metaObjectFunc or metaCastFunc > metaObjectFunc + 200: - # The metaObject implementation is just that: - # QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() - # : &staticMetaObject; - # That should not exceed 200 bytes. Observed on x86_64 debug 72. - return False - if metaCallFunc < metaCastFunc or metaCallFunc > metaCastFunc + 200: - # if (!_clname) return nullptr; - # if (!strcmp(_clname, qt_meta_stringdata_Bar__TestObject.stringdata0)) - # return static_cast(const_cast< TestObject*>(this)); - # return QWidget::qt_metacast(_clname); - # That should not exceed 200 bytes. Observed on x86_64 debug 80. - return False - - try: - (dvtablePtr, qptr, parentPtr, childrenDPtr, flags) \ - = self.split('ppppI', dd) + dvtablePtr, qptr, parentPtr = self.split('ppp', dd) except: self.bump('nostruct-2') return False - #warn('STRUCT DD: %s 0x%x' % (self.currentIName, qptr)) - if not self.canBePointer(dvtablePtr): - self.bump('dvtable') - #warn('DVT: 0x%x' % dvtablePtr) - return False # Check d_ptr.d.q_ptr == objectPtr if qptr != objectPtr: - #warn('QPTR: 0x%x 0x%x' % (qptr, objectPtr)) self.bump('q_ptr') return False - if parentPtr and not self.canBePointer(parentPtr): - #warn('PAREN') - self.bump('parent') - return False - if not self.canBePointer(childrenDPtr): - #warn('CHILD') - self.bump('children') - return False - #if flags >= 0x80: # Only 7 flags are defined - # warn('FLAGS: 0x%x %s' % (flags, self.currentIName)) - # self.bump('flags') - # return False - #warn('OK') - #if dynMetaObjectPtr and not self.canBePointer(dynMetaObjectPtr): - # self.bump('dynmo') - # return False - self.bump('couldBeQObject') - return True + return self.couldBeQObjectVTable(vtablePtr) + def couldBeQObjectVTable(self, vtablePtr): + try: + customEventFunc = self.extractPointer(vtablePtr + 9 * self.ptrSize()) + except: + self.bump('nostruct-3') + return False + + return self.qtCustomEventFunc == customEventFunc def extractMetaObjectPtr(self, objectPtr, typeobj): """ objectPtr - address of *potential* instance of QObject derived class @@ -1528,7 +1481,7 @@ class DumperBase: self.checkIntType(objectPtr) def extractMetaObjectPtrFromAddress(): - return 0 + #return 0 # FIXME: Calling 'works' but seems to impact memory contents(!) # in relevant places. One symptom is that object name # contents 'vanishes' as the reported size of the string @@ -1542,7 +1495,7 @@ class DumperBase: res = self.parseAndEvaluate(cmd) #warn('MO RES: %s' % res) self.bump('successfulMetaObjectCall') - return toInteger(res) + return res.pointer() except: self.bump('failedMetaObjectCall') #warn('COULD NOT EXECUTE: %s' % cmd) @@ -1594,7 +1547,8 @@ class DumperBase: # if base is not None and base != someTypeObj: # sanity check # result = extractStaticMetaObjectPtrFromType(base) - self.knownStaticMetaObjects[someTypeName] = result + if result: + self.knownStaticMetaObjects[someTypeName] = result return result @@ -1610,7 +1564,7 @@ class DumperBase: #warn('CACHED RESULT: %s %s 0x%x' % (self.currentIName, typeName, result)) return result - if not self.couldBeQObject(objectPtr): + if not self.couldBeQObjectPointer(objectPtr): self.bump('cannotBeQObject') #warn('DOES NOT LOOK LIKE A QOBJECT: %s' % self.currentIName) return 0 @@ -1690,8 +1644,11 @@ class DumperBase: self.putNumChild(0) # This is called is when a QObject derived class is expanded - def putQObjectGuts(self, qobject, metaObjectPtr): - self.putQObjectGutsHelper(qobject, qobject.address(), -1, metaObjectPtr, 'QObject') + def tryPutQObjectGuts(self, value): + metaObjectPtr = self.extractMetaObjectPtr(value.address(), value.type) + if metaObjectPtr: + self.putQObjectGutsHelper(value, value.address(), + -1, metaObjectPtr, 'QObject') def metaString(self, metaObjectPtr, index, revision): ptrSize = self.ptrSize() @@ -2686,23 +2643,16 @@ class DumperBase: self.putNumChild(1) self.putEmptyValue() #warn('STRUCT GUTS: %s ADDRESS: 0x%x ' % (value.name, value.address())) - metaObjectPtr = self.extractMetaObjectPtr(value.address(), value.type) if self.showQObjectNames: self.preping(self.currentIName) - metaObjectPtr = self.extractMetaObjectPtr(value.address(), value.type) - self.ping(self.currentIName) - if metaObjectPtr: - self.context = value self.putQObjectNameValue(value) - #warn('STRUCT GUTS: %s MO: 0x%x ' % (self.currentIName, metaObjectPtr)) + self.ping(self.currentIName) if self.isExpanded(): self.putField('sortable', 1) with Children(self, 1, childType=None): self.putFields(value) - if not self.showQObjectNames: - metaObjectPtr = self.extractMetaObjectPtr(value.address(), value.type) - if metaObjectPtr: - self.putQObjectGuts(value, metaObjectPtr) + if self.showQObjectNames: + self.tryPutQObjectGuts(value) def symbolAddress(self, symbolName): res = self.parseAndEvaluate('(size_t)&' + symbolName) @@ -3282,7 +3232,7 @@ class DumperBase: except: return None #warn('VTBL: 0x%x' % vtbl) - if not self.dumper.canBePointer(vtbl): + if not self.dumper.couldBePointer(vtbl): return None return self.dumper.nativeDynamicTypeName(address, self) diff --git a/share/qtcreator/debugger/gdbbridge.py b/share/qtcreator/debugger/gdbbridge.py index f78b5fc6f42..a84293d35cc 100644 --- a/share/qtcreator/debugger/gdbbridge.py +++ b/share/qtcreator/debugger/gdbbridge.py @@ -1039,6 +1039,17 @@ class Dumper(DumperBase): except: pass + try: + lenns = len(ns) + if lenns: + sym = '_ZN%d%s7QObject11customEventEPNS_6QEventE' % \ + (lenns - 2, ns[:lenns - 2]) + else: + sym = '_ZN7QObject11customEventEP6QEvent' + self.qtCustomEventFunc = toInteger(gdb.parse_and_eval('(size_t)&%s' % sym)) + except: + pass + # This might be wrong, but we can't do better: We found # a libQt5Core and could not extract a namespace. # The best guess is that there isn't any. diff --git a/share/qtcreator/debugger/lldbbridge.py b/share/qtcreator/debugger/lldbbridge.py index b54a34b4f4e..9ac37beeb6b 100644 --- a/share/qtcreator/debugger/lldbbridge.py +++ b/share/qtcreator/debugger/lldbbridge.py @@ -679,6 +679,11 @@ class Dumper(DumperBase): qtVersion = 0x10000 * int(major) + 0x100 * int(minor) + int(patch) self.qtVersion = lambda: qtVersion + funcs = self.target.FindFunctions('QObject::customEvent') + if len(funcs): + symbol = funcs[0].GetSymbol() + self.qtCustomEventFunc = symbol.GetStartAddress().GetLoadAddress(self.target) + return (qtNamespace, qtVersion) return ('', 0x50200) diff --git a/src/plugins/debugger/debuggeractions.cpp b/src/plugins/debugger/debuggeractions.cpp index 5c225aed955..4e4b28bd618 100644 --- a/src/plugins/debugger/debuggeractions.cpp +++ b/src/plugins/debugger/debuggeractions.cpp @@ -257,15 +257,15 @@ DebuggerSettings::DebuggerSettings() insertItem(ShowQtNamespace, item); item = new SavedAction(this); - item->setSettingsKey(debugModeGroup, QLatin1String("ShowQObjectNames")); + item->setSettingsKey(debugModeGroup, QLatin1String("ShowQObjectNames2")); item->setText(tr("Show QObject names if available")); item->setDialogText(tr("Show QObject names if available")); item->setToolTip(tr("

Displays the objectName property of QObject based items. " "Note that this can negatively impact debugger performance " "even if no QObjects are present.")); item->setCheckable(true); - item->setDefaultValue(false); - item->setValue(false); + item->setDefaultValue(true); + item->setValue(true); insertItem(ShowQObjectNames, item); item = new SavedAction(this); diff --git a/tests/auto/debugger/tst_dumpers.cpp b/tests/auto/debugger/tst_dumpers.cpp index 0d1126a17f5..48e10ce52d6 100644 --- a/tests/auto/debugger/tst_dumpers.cpp +++ b/tests/auto/debugger/tst_dumpers.cpp @@ -3398,6 +3398,14 @@ void tst_Dumpers::dumper_data() "{\n" " void run()\n" " {\n" + " auto mo = &QThread::metaObject;\n" + " auto mc = &QThread::qt_metacast;\n" + " auto p0 = (*(void***)this)[0]; unused(&p0);\n" + " auto p1 = (*(void***)this)[1]; unused(&p1);\n" + " auto p2 = (*(void***)this)[2]; unused(&p2);\n" + " auto p3 = (*(void***)this)[3]; unused(&p3);\n" + " auto p4 = (*(void***)this)[4]; unused(&p4);\n" + " auto p5 = (*(void***)this)[5]; unused(&p5);\n" " if (m_id == 3) {\n" " BREAK;\n" " }\n" From 349ad040d685ccdc288cd15c07eeca63013771e2 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Fri, 2 Dec 2016 09:05:46 +0100 Subject: [PATCH 22/28] AutoTest: Limit purging of test tree to project switching Instead of purging the current test tree on all full parses, just purge the whole tree if the user switches the current project. If an item can no more be found after the full parse it gets removed anyhow. This avoids losing the check state on any full-parse. Change-Id: Ia7bae6ced65a69444adf0d7e2a554d90ddd5caa4 Reviewed-by: David Schulz --- src/plugins/autotest/testcodeparser.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/plugins/autotest/testcodeparser.cpp b/src/plugins/autotest/testcodeparser.cpp index fe4c1132f1e..dab7f80f672 100644 --- a/src/plugins/autotest/testcodeparser.cpp +++ b/src/plugins/autotest/testcodeparser.cpp @@ -155,8 +155,6 @@ void TestCodeParser::updateTestTree() return; m_fullUpdatePostponed = false; - - emit aboutToPerformFullParse(); qCDebug(LOG) << "calling scanForTests (updateTestTree)"; scanForTests(); } @@ -199,6 +197,7 @@ void TestCodeParser::onStartupProjectChanged(ProjectExplorer::Project *project) qCDebug(LOG) << "Canceling scanForTest (startup project changed)"; Core::ProgressManager::instance()->cancelTasks(Constants::TASK_PARSE); } + emit aboutToPerformFullParse(); if (project) emitUpdateTestTree(); } From dc2724a3f72afbfde272b1640b9eea1a71cf8964 Mon Sep 17 00:00:00 2001 From: hjk Date: Fri, 2 Dec 2016 09:06:05 +0100 Subject: [PATCH 23/28] Debugger: Allow QObject property extraction without debug info Task-number: QTCREATORBUG-16908 Change-Id: I1e1e9d91a6317808610f39868383b67e5c80a9a4 Reviewed-by: Christian Stenger --- share/qtcreator/debugger/dumper.py | 33 ++++++++++++++++++++++++-- share/qtcreator/debugger/gdbbridge.py | 27 +++++++++++++-------- share/qtcreator/debugger/lldbbridge.py | 4 ++++ 3 files changed, 52 insertions(+), 12 deletions(-) diff --git a/share/qtcreator/debugger/dumper.py b/share/qtcreator/debugger/dumper.py index 3f820ddf9a9..35abe174a77 100644 --- a/share/qtcreator/debugger/dumper.py +++ b/share/qtcreator/debugger/dumper.py @@ -254,6 +254,7 @@ class DumperBase: self.typesToReport = {} self.qtNamespaceToReport = None self.qtCustomEventFunc = 0 + self.qtPropertyFunc = 0 self.passExceptions = False self.isTesting = False @@ -1473,6 +1474,21 @@ class DumperBase: return self.qtCustomEventFunc == customEventFunc + def extractQObjectProperty(objectPtr): + vtablePtr = self.extractPointer(objectPtr) + metaObjectFunc = self.extractPointer(vtablePtr) + cmd = '((void*(*)(void*))0x%x)((void*)0x%x)' % (metaObjectFunc, objectPtr) + try: + #warn('MO CMD: %s' % cmd) + res = self.parseAndEvaluate(cmd) + #warn('MO RES: %s' % res) + self.bump('successfulMetaObjectCall') + return res.pointer() + except: + self.bump('failedMetaObjectCall') + #warn('COULD NOT EXECUTE: %s' % cmd) + return 0 + def extractMetaObjectPtr(self, objectPtr, typeobj): """ objectPtr - address of *potential* instance of QObject derived class typeobj - type of *objectPtr if known, None otherwise. """ @@ -1845,8 +1861,21 @@ class DumperBase: if qobject: # LLDB doesn't like calling it on a derived class, possibly # due to type information living in a different shared object. - base = self.createValue(qobjectPtr, '@QObject') - self.putCallItem(name, '@QVariant', base, 'property', '"' + name + '"') + #base = self.createValue(qobjectPtr, '@QObject') + #warn("CALL FUNC: 0x%x" % self.qtPropertyFunc) + cmd = '((QVariant(*)(void*,char*))0x%x)((void*)0x%x,"%s")' \ + % (self.qtPropertyFunc, qobjectPtr, name) + try: + #warn('PROP CMD: %s' % cmd) + res = self.parseAndEvaluate(cmd) + #warn('PROP RES: %s' % res) + except: + self.bump('failedMetaObjectCall') + putt(name, ' ') + continue + #warn('COULD NOT EXECUTE: %s' % cmd) + #self.putCallItem(name, '@QVariant', base, 'property', '"' + name + '"') + self.putSubItem(name, res) else: putt(name, ' ') diff --git a/share/qtcreator/debugger/gdbbridge.py b/share/qtcreator/debugger/gdbbridge.py index a84293d35cc..43e234fa4d0 100644 --- a/share/qtcreator/debugger/gdbbridge.py +++ b/share/qtcreator/debugger/gdbbridge.py @@ -1010,6 +1010,12 @@ class Dumper(DumperBase): self.ping('qtNamespace') return res + def findSymbol(self, symbolName): + try: + return toInteger(gdb.parse_and_eval('(size_t)&%s' % symbolName)) + except: + return 0 + def qtNamespaceX(self): if not self.currentQtNamespaceGuess is None: return self.currentQtNamespaceGuess @@ -1039,16 +1045,17 @@ class Dumper(DumperBase): except: pass - try: - lenns = len(ns) - if lenns: - sym = '_ZN%d%s7QObject11customEventEPNS_6QEventE' % \ - (lenns - 2, ns[:lenns - 2]) - else: - sym = '_ZN7QObject11customEventEP6QEvent' - self.qtCustomEventFunc = toInteger(gdb.parse_and_eval('(size_t)&%s' % sym)) - except: - pass + lenns = len(ns) + strns = ('%d%s' % (lenns - 2, ns[:lenns - 2])) if lenns else '' + + if lenns: + sym = '_ZN%s7QObject11customEventEPNS_6QEventE' % strns + else: + sym = '_ZN7QObject11customEventEP6QEvent' + self.qtCustomEventFunc = self.findSymbol(sym) + + sym = '_ZNK7%sQObject8propertyEPKc' % strns + self.qtPropertyFunc = self.findSymbol(sym) # This might be wrong, but we can't do better: We found # a libQt5Core and could not extract a namespace. diff --git a/share/qtcreator/debugger/lldbbridge.py b/share/qtcreator/debugger/lldbbridge.py index 9ac37beeb6b..bf3dae2f2db 100644 --- a/share/qtcreator/debugger/lldbbridge.py +++ b/share/qtcreator/debugger/lldbbridge.py @@ -684,6 +684,10 @@ class Dumper(DumperBase): symbol = funcs[0].GetSymbol() self.qtCustomEventFunc = symbol.GetStartAddress().GetLoadAddress(self.target) + funcs = self.target.FindFunctions('QObject::property') + if len(funcs): + symbol = funcs[0].GetSymbol() + self.qtPropertyFunc = symbol.GetStartAddress().GetLoadAddress(self.target) return (qtNamespace, qtVersion) return ('', 0x50200) From 983936f9750ee35297ce75492f144812284feb2d Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Fri, 2 Dec 2016 13:07:58 +0100 Subject: [PATCH 24/28] Dumper: Fix QObject detection when using procedure linkage tables Change-Id: I3ac9889b822cb30d2ccdb6a7e2452e753cc3f2df Reviewed-by: hjk --- share/qtcreator/debugger/dumper.py | 3 ++- share/qtcreator/debugger/gdbbridge.py | 8 +++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/share/qtcreator/debugger/dumper.py b/share/qtcreator/debugger/dumper.py index 35abe174a77..cfeb8f652a8 100644 --- a/share/qtcreator/debugger/dumper.py +++ b/share/qtcreator/debugger/dumper.py @@ -254,6 +254,7 @@ class DumperBase: self.typesToReport = {} self.qtNamespaceToReport = None self.qtCustomEventFunc = 0 + self.qtCustomEventPltFunc = 0 self.qtPropertyFunc = 0 self.passExceptions = False self.isTesting = False @@ -1472,7 +1473,7 @@ class DumperBase: self.bump('nostruct-3') return False - return self.qtCustomEventFunc == customEventFunc + return customEventFunc in (self.qtCustomEventFunc, self.qtCustomEventPltFunc) def extractQObjectProperty(objectPtr): vtablePtr = self.extractPointer(objectPtr) diff --git a/share/qtcreator/debugger/gdbbridge.py b/share/qtcreator/debugger/gdbbridge.py index 43e234fa4d0..ae3336569d5 100644 --- a/share/qtcreator/debugger/gdbbridge.py +++ b/share/qtcreator/debugger/gdbbridge.py @@ -1012,7 +1012,7 @@ class Dumper(DumperBase): def findSymbol(self, symbolName): try: - return toInteger(gdb.parse_and_eval('(size_t)&%s' % symbolName)) + return toInteger(gdb.parse_and_eval("(size_t)&'%s'" % symbolName)) except: return 0 @@ -1054,6 +1054,12 @@ class Dumper(DumperBase): sym = '_ZN7QObject11customEventEP6QEvent' self.qtCustomEventFunc = self.findSymbol(sym) + if lenns: + sym = '_ZN%s7QObject11customEventEPNS_6QEventE@plt' % strns + else: + sym = '_ZN7QObject11customEventEP6QEvent@plt' + self.qtCustomEventPltFunc = self.findSymbol(sym) + sym = '_ZNK7%sQObject8propertyEPKc' % strns self.qtPropertyFunc = self.findSymbol(sym) From cae9f70d75caa279eef2a5d3d2561e9ef975b422 Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Fri, 2 Dec 2016 15:15:04 +0100 Subject: [PATCH 25/28] CMake: Do not forget cmake generator information on load Task-number: QTCREATORBUG-17311 Change-Id: I3439933e396f74a092c9b46aaced0a73c33c4407 Reviewed-by: Tim Jenssen --- src/plugins/cmakeprojectmanager/cmakekitinformation.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/cmakekitinformation.cpp b/src/plugins/cmakeprojectmanager/cmakekitinformation.cpp index 7375c7feb2a..418974c3d7c 100644 --- a/src/plugins/cmakeprojectmanager/cmakekitinformation.cpp +++ b/src/plugins/cmakeprojectmanager/cmakekitinformation.cpp @@ -410,8 +410,8 @@ void CMakeGeneratorKitInformation::fix(Kit *k) void CMakeGeneratorKitInformation::upgrade(Kit *k) { const QVariant value = k->value(GENERATOR_ID); - GeneratorInfo info; if (value.type() != QVariant::Map) { + GeneratorInfo info; const QString fullName = value.toString(); const int pos = fullName.indexOf(" - "); if (pos >= 0) { @@ -420,8 +420,8 @@ void CMakeGeneratorKitInformation::upgrade(Kit *k) } else { info.generator = fullName; } + setGeneratorInfo(k, info); } - setGeneratorInfo(k, info); } KitInformation::ItemList CMakeGeneratorKitInformation::toUserOutput(const Kit *k) const From f1fc8824c0b56d2b9b437886137e3bb31c53bd5a Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Fri, 2 Dec 2016 17:05:20 +0100 Subject: [PATCH 26/28] Update qbs submodule To HEAD of 1.7 branch. Change-Id: Ic47bfa33e826cded51369fbd35572f0d7d5cca6f Reviewed-by: Joerg Bornemann --- src/shared/qbs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/shared/qbs b/src/shared/qbs index 83325ac2948..bf31eeeb789 160000 --- a/src/shared/qbs +++ b/src/shared/qbs @@ -1 +1 @@ -Subproject commit 83325ac2948b22623d833353fd1c5c7ecd2bae80 +Subproject commit bf31eeeb789572dd919f797b21cbab15758916ff From 532c9d49ac7e9d99f5fe5feba3c091a0e2d93d28 Mon Sep 17 00:00:00 2001 From: hjk Date: Mon, 5 Dec 2016 09:37:40 +0100 Subject: [PATCH 27/28] QmakeBuildConfiguration: Pass build dir to base setter Change-Id: I55bd47d62ef644257b49d3423c4d43a6443564aa Reviewed-by: Tobias Hunger --- src/plugins/projectexplorer/buildconfiguration.cpp | 2 ++ .../qmakeprojectmanager/qmakebuildconfiguration.cpp | 10 ++-------- .../qmakeprojectmanager/qmakebuildconfiguration.h | 1 - 3 files changed, 4 insertions(+), 9 deletions(-) diff --git a/src/plugins/projectexplorer/buildconfiguration.cpp b/src/plugins/projectexplorer/buildconfiguration.cpp index 3625990b31a..ec3cf9894f9 100644 --- a/src/plugins/projectexplorer/buildconfiguration.cpp +++ b/src/plugins/projectexplorer/buildconfiguration.cpp @@ -122,6 +122,8 @@ Utils::FileName BuildConfiguration::rawBuildDirectory() const void BuildConfiguration::setBuildDirectory(const Utils::FileName &dir) { + if (dir == m_buildDirectory) + return; m_buildDirectory = dir; emitBuildDirectoryChanged(); } diff --git a/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp b/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp index 86928ce9c94..86e87645614 100644 --- a/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp +++ b/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp @@ -102,6 +102,8 @@ enum { debug = 0 }; QmakeBuildConfiguration::QmakeBuildConfiguration(Target *target) : QmakeBuildConfiguration(target, Core::Id(QMAKE_BC_ID)) { + connect(this, &BuildConfiguration::buildDirectoryChanged, + this, &QmakeBuildConfiguration::emitProFileEvaluateNeeded); } QmakeBuildConfiguration::QmakeBuildConfiguration(Target *target, Core::Id id) : @@ -223,14 +225,6 @@ bool QmakeBuildConfiguration::isShadowBuild() const return buildDirectory() != target()->project()->projectDirectory(); } -void QmakeBuildConfiguration::setBuildDirectory(const FileName &directory) -{ - if (directory == buildDirectory()) - return; - BuildConfiguration::setBuildDirectory(directory); - emitProFileEvaluateNeeded(); -} - QString QmakeBuildConfiguration::makefile() const { return static_cast(target()->project())->rootProjectNode()->makefile(); diff --git a/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.h b/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.h index 120a375806d..9f69b2681f6 100644 --- a/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.h +++ b/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.h @@ -116,7 +116,6 @@ protected: QmakeBuildConfiguration(ProjectExplorer::Target *target, QmakeBuildConfiguration *source); QmakeBuildConfiguration(ProjectExplorer::Target *target, Core::Id id); bool fromMap(const QVariantMap &map) override; - void setBuildDirectory(const Utils::FileName &directory) override; private: void ctor(); From c390c716d13403ecc926cf5adceb7be97d6ce783 Mon Sep 17 00:00:00 2001 From: hjk Date: Mon, 5 Dec 2016 09:53:12 +0100 Subject: [PATCH 28/28] BuildConfiguration: De-virtualize setBuildConfiguration ... and adjust users in Nim and Autotoolsplugins. Change-Id: I6133ca933a5a4dc4d7d9ff73c8ca7afaa51ae516 Reviewed-by: Tobias Hunger --- .../autotoolsbuildconfiguration.cpp | 20 ++++++++----------- .../autotoolsbuildconfiguration.h | 6 ------ .../nim/project/nimbuildconfiguration.cpp | 7 ------- .../nim/project/nimbuildconfiguration.h | 2 -- .../projectexplorer/buildconfiguration.h | 2 +- 5 files changed, 9 insertions(+), 28 deletions(-) diff --git a/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.cpp b/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.cpp index b3fca076658..5095c0e57a7 100644 --- a/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.cpp +++ b/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.cpp @@ -59,9 +59,14 @@ using namespace ProjectExplorer::Constants; AutotoolsBuildConfiguration::AutotoolsBuildConfiguration(Target *parent) : BuildConfiguration(parent, Core::Id(AUTOTOOLS_BC_ID)) { - // / is used so the un-changed check in setBuildDirectory() works correctly. - // The leading / is to avoid the relative the path expansion in BuildConfiguration::buildDirectory. - BuildConfiguration::setBuildDirectory(Utils::FileName::fromString(QString::fromLatin1("/"))); + // / is used so the un-changed check in setBuildDirectory() works correctly. + // The leading / is to avoid the relative the path expansion in BuildConfiguration::buildDirectory. + BuildConfiguration::setBuildDirectory(Utils::FileName::fromString(QString::fromLatin1("/"))); + + connect(this, &BuildConfiguration::buildDirectoryChanged, this, [this] { + foreach (auto bs, stepList(BUILDSTEPS_BUILD)->allOfType()) + bs->notifyBuildDirectoryChanged(); + }); } NamedWidget *AutotoolsBuildConfiguration::createConfigWidget() @@ -222,12 +227,3 @@ BuildConfiguration::BuildType AutotoolsBuildConfiguration::buildType() const // TODO: Should I return something different from Unknown? return Unknown; } - -void AutotoolsBuildConfiguration::setBuildDirectory(const Utils::FileName &directory) -{ - if (directory == buildDirectory()) - return; - BuildConfiguration::setBuildDirectory(directory); - foreach (auto bs, stepList(BUILDSTEPS_BUILD)->allOfType()) - bs->notifyBuildDirectoryChanged(); -} diff --git a/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.h b/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.h index 3bceb4cc3aa..3d7f170f5b4 100644 --- a/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.h +++ b/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.h @@ -36,7 +36,6 @@ namespace Internal { class AutotoolsTarget; class AutotoolsBuildConfigurationFactory; -class AutotoolsBuildSettingsWidget; class AutotoolsBuildConfiguration : public ProjectExplorer::BuildConfiguration { @@ -53,11 +52,6 @@ public: protected: AutotoolsBuildConfiguration(ProjectExplorer::Target *parent, Core::Id id); AutotoolsBuildConfiguration(ProjectExplorer::Target *parent, AutotoolsBuildConfiguration *source); - - friend class AutotoolsBuildSettingsWidget; - -private: - void setBuildDirectory(const Utils::FileName &directory) override; }; class AutotoolsBuildConfigurationFactory : public ProjectExplorer::IBuildConfigurationFactory diff --git a/src/plugins/nim/project/nimbuildconfiguration.cpp b/src/plugins/nim/project/nimbuildconfiguration.cpp index d382ec5adb4..81f34e12fb2 100644 --- a/src/plugins/nim/project/nimbuildconfiguration.cpp +++ b/src/plugins/nim/project/nimbuildconfiguration.cpp @@ -54,13 +54,6 @@ BuildConfiguration::BuildType NimBuildConfiguration::buildType() const return BuildConfiguration::Unknown; } -void NimBuildConfiguration::setBuildDirectory(const FileName &dir) -{ - if (dir == buildDirectory()) - return; - BuildConfiguration::setBuildDirectory(dir); -} - bool NimBuildConfiguration::fromMap(const QVariantMap &map) { if (!BuildConfiguration::fromMap(map)) diff --git a/src/plugins/nim/project/nimbuildconfiguration.h b/src/plugins/nim/project/nimbuildconfiguration.h index a205ae1b18e..1228be06806 100644 --- a/src/plugins/nim/project/nimbuildconfiguration.h +++ b/src/plugins/nim/project/nimbuildconfiguration.h @@ -46,8 +46,6 @@ public: ProjectExplorer::BuildConfiguration::BuildType buildType() const override; - void setBuildDirectory(const Utils::FileName &dir) override; - bool fromMap(const QVariantMap &map) override; QVariantMap toMap() const override; diff --git a/src/plugins/projectexplorer/buildconfiguration.h b/src/plugins/projectexplorer/buildconfiguration.h index dd727abea74..03d42d4dbdc 100644 --- a/src/plugins/projectexplorer/buildconfiguration.h +++ b/src/plugins/projectexplorer/buildconfiguration.h @@ -50,6 +50,7 @@ public: Utils::FileName buildDirectory() const; Utils::FileName rawBuildDirectory() const; + void setBuildDirectory(const Utils::FileName &dir); virtual NamedWidget *createConfigWidget() = 0; virtual QList createSubConfigWidgets(); @@ -96,7 +97,6 @@ protected: BuildConfiguration(Target *target, Core::Id id); BuildConfiguration(Target *target, BuildConfiguration *source); - virtual void setBuildDirectory(const Utils::FileName &dir); void cloneSteps(BuildConfiguration *source); void emitEnvironmentChanged();