aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--README.md4
-rw-r--r--dist/changes-4.8.0.md64
-rw-r--r--docs.pri13
-rw-r--r--qbs/modules/clang_defines/clang_defines.qbs18
-rw-r--r--qbs/modules/libclang/libclang.qbs4
-rw-r--r--qbs/modules/qtc/qtc.qbs6
-rw-r--r--qtcreator.pri8
-rw-r--r--qtcreator.pro2
-rwxr-xr-xscripts/deployqt.py6
-rw-r--r--share/qtcreator/debugger/lldbbridge.py4
-rw-r--r--share/qtcreator/qml/qmlpuppet/commands/changeauxiliarycommand.cpp4
-rw-r--r--share/qtcreator/qml/qmlpuppet/commands/changebindingscommand.cpp4
-rw-r--r--share/qtcreator/qml/qmlpuppet/commands/changefileurlcommand.cpp4
-rw-r--r--share/qtcreator/qml/qmlpuppet/commands/changeidscommand.cpp4
-rw-r--r--share/qtcreator/qml/qmlpuppet/commands/changenodesourcecommand.cpp4
-rw-r--r--share/qtcreator/qml/qmlpuppet/commands/changevaluescommand.cpp4
-rw-r--r--share/qtcreator/qml/qmlpuppet/commands/clearscenecommand.cpp4
-rw-r--r--share/qtcreator/qml/qmlpuppet/commands/completecomponentcommand.cpp4
-rw-r--r--share/qtcreator/qml/qmlpuppet/commands/componentcompletedcommand.cpp4
-rw-r--r--share/qtcreator/qml/qmlpuppet/commands/createinstancescommand.cpp4
-rw-r--r--share/qtcreator/qml/qmlpuppet/commands/createscenecommand.cpp4
-rw-r--r--share/qtcreator/qml/qmlpuppet/commands/debugoutputcommand.cpp4
-rw-r--r--share/qtcreator/qml/qmlpuppet/commands/endpuppetcommand.cpp4
-rw-r--r--share/qtcreator/qml/qmlpuppet/commands/informationchangedcommand.cpp4
-rw-r--r--share/qtcreator/qml/qmlpuppet/commands/pixmapchangedcommand.cpp4
-rw-r--r--share/qtcreator/qml/qmlpuppet/commands/puppetalivecommand.cpp4
-rw-r--r--share/qtcreator/qml/qmlpuppet/commands/removeinstancescommand.cpp4
-rw-r--r--share/qtcreator/qml/qmlpuppet/commands/removepropertiescommand.cpp4
-rw-r--r--share/qtcreator/qml/qmlpuppet/commands/removesharedmemorycommand.cpp4
-rw-r--r--share/qtcreator/qml/qmlpuppet/commands/reparentinstancescommand.cpp4
-rw-r--r--share/qtcreator/qml/qmlpuppet/commands/statepreviewimagechangedcommand.cpp4
-rw-r--r--share/qtcreator/qml/qmlpuppet/commands/valueschangedcommand.cpp4
-rw-r--r--share/qtcreator/qml/qmlpuppet/container/addimportcontainer.cpp4
-rw-r--r--share/qtcreator/qml/qmlpuppet/container/imagecontainer.cpp10
-rw-r--r--share/qtcreator/qml/qmlpuppet/container/instancecontainer.cpp4
-rw-r--r--share/qtcreator/qml/qmlpuppet/container/mockuptypecontainer.cpp5
-rw-r--r--share/qtcreator/qml/qmlpuppet/container/sharedmemory_qt.cpp8
-rw-r--r--share/qtcreator/qml/qmlpuppet/interfaces/nodeinstanceglobal.h6
-rw-r--r--share/qtcreator/qml/qmlpuppet/interfaces/nodeinstanceserverinterface.h2
-rw-r--r--share/qtcreator/qml/qmlpuppet/qml2puppet/instances/anchorchangesnodeinstance.h4
-rw-r--r--share/qtcreator/qml/qmlpuppet/qml2puppet/instances/behaviornodeinstance.h4
-rw-r--r--share/qtcreator/qml/qmlpuppet/qml2puppet/instances/componentnodeinstance.h5
-rw-r--r--share/qtcreator/qml/qmlpuppet/qml2puppet/instances/dummynodeinstance.h4
-rw-r--r--share/qtcreator/qml/qmlpuppet/qml2puppet/instances/instances.pri2
-rw-r--r--share/qtcreator/qml/qmlpuppet/qml2puppet/instances/layoutnodeinstance.h4
-rw-r--r--share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.h9
-rw-r--r--share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstancesignalspy.h5
-rw-r--r--share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.h6
-rw-r--r--share/qtcreator/qml/qmlpuppet/qml2puppet/instances/positionernodeinstance.h4
-rw-r--r--share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qmlpropertychangesnodeinstance.h4
-rw-r--r--share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qmlstatenodeinstance.h4
-rw-r--r--share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qmltransitionnodeinstance.h4
-rw-r--r--share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt3dpresentationnodeinstance.cpp51
-rw-r--r--share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt3dpresentationnodeinstance.h (renamed from src/plugins/qmljseditor/qmljspreviewrunner.h)24
-rw-r--r--share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.h4
-rw-r--r--share/qtcreator/qml/qmlpuppet/qml2puppet/instances/servernodeinstance.cpp3
-rw-r--r--share/qtcreator/qml/qmlpuppet/types/enumeration.cpp4
-rw-r--r--share/qtcreator/qml/qmlpuppet/types/enumeration.h2
-rw-r--r--share/qtcreator/templates/wizards/projects/consoleapp/CMakeLists.txt4
-rw-r--r--src/libs/3rdparty/optional/optional.hpp4
-rw-r--r--src/libs/aggregation/aggregate.h10
-rw-r--r--src/libs/clangsupport/clangrefactoringservermessages.h4
-rw-r--r--src/libs/clangsupport/clangsupport-lib.pri10
-rw-r--r--src/libs/clangsupport/clangsupport_global.h4
-rw-r--r--src/libs/clangsupport/codecompletion.cpp3
-rw-r--r--src/libs/clangsupport/codecompletion.h10
-rw-r--r--src/libs/clangsupport/completionsmessage.cpp12
-rw-r--r--src/libs/clangsupport/completionsmessage.h10
-rw-r--r--src/libs/clangsupport/filecontainerv2.h6
-rw-r--r--src/libs/clangsupport/filepath.h7
-rw-r--r--src/libs/clangsupport/filepathcache.h6
-rw-r--r--src/libs/clangsupport/generatedfiles.cpp99
-rw-r--r--src/libs/clangsupport/generatedfiles.h (renamed from src/plugins/clangcodemodel/clangassistproposal.h)27
-rw-r--r--src/libs/clangsupport/pchmanagerserverinterface.cpp8
-rw-r--r--src/libs/clangsupport/pchmanagerserverinterface.h2
-rw-r--r--src/libs/clangsupport/pchmanagerserverproxy.cpp12
-rw-r--r--src/libs/clangsupport/pchmanagerserverproxy.h2
-rw-r--r--src/libs/clangsupport/projectmanagementserverinterface.h4
-rw-r--r--src/libs/clangsupport/refactoringserverinterface.cpp6
-rw-r--r--src/libs/clangsupport/refactoringserverproxy.cpp10
-rw-r--r--src/libs/clangsupport/refactoringserverproxy.h2
-rw-r--r--src/libs/clangsupport/removegeneratedfilesmessage.cpp37
-rw-r--r--src/libs/clangsupport/removegeneratedfilesmessage.h79
-rw-r--r--src/libs/clangsupport/updategeneratedfilesmessage.cpp38
-rw-r--r--src/libs/clangsupport/updategeneratedfilesmessage.h77
-rw-r--r--src/libs/clangsupport/updateprojectpartsmessage.h20
-rw-r--r--src/libs/cplusplus/CppDocument.cpp54
-rw-r--r--src/libs/cplusplus/CppRewriter.cpp52
-rw-r--r--src/libs/cplusplus/DeprecatedGenTemplateInstance.cpp50
-rw-r--r--src/libs/cplusplus/Icons.cpp244
-rw-r--r--src/libs/cplusplus/Icons.h32
-rw-r--r--src/libs/cplusplus/ResolveExpression.cpp6
-rw-r--r--src/libs/cplusplus/cplusplus-lib.pri2
-rw-r--r--src/libs/cplusplus/cplusplus.qbs1
-rw-r--r--src/libs/cplusplus/cplusplus.qrc44
-rw-r--r--src/libs/extensionsystem/invoker.cpp2
-rw-r--r--src/libs/extensionsystem/optionsparser.cpp4
-rw-r--r--src/libs/extensionsystem/pluginerroroverview.cpp2
-rw-r--r--src/libs/extensionsystem/pluginmanager.cpp34
-rw-r--r--src/libs/extensionsystem/pluginmanager_p.h14
-rw-r--r--src/libs/extensionsystem/pluginspec.cpp6
-rw-r--r--src/libs/extensionsystem/pluginspec.h2
-rw-r--r--src/libs/extensionsystem/pluginview.cpp28
-rw-r--r--src/libs/modelinglib/qmt/config/stereotypedefinitionparser.cpp1
-rw-r--r--src/libs/qmljs/qmljsbind.cpp13
-rw-r--r--src/libs/qmljs/qmljsbind.h1
-rw-r--r--src/libs/qmljs/qmljscodeformatter.cpp12
-rw-r--r--src/libs/qmljs/qmljscodeformatter.h4
-rw-r--r--src/libs/qmljs/qmljsicons.cpp8
-rw-r--r--src/libs/qmljs/qmljsreformatter.cpp2
-rw-r--r--src/libs/qtcreatorcdbext/eventcallback.cpp16
-rw-r--r--src/libs/qtcreatorcdbext/extensioncontext.h2
-rw-r--r--src/libs/qtcreatorcdbext/qtcreatorcdbextension.cpp6
-rw-r--r--src/libs/sqlite/utf8string.h30
-rw-r--r--src/libs/tracing/safecastable.h62
-rw-r--r--src/libs/tracing/timelinemodel.cpp86
-rw-r--r--src/libs/tracing/timelinemodel.h11
-rw-r--r--src/libs/tracing/traceevent.h10
-rw-r--r--src/libs/tracing/traceeventtype.h10
-rw-r--r--src/libs/tracing/tracing.pro1
-rw-r--r--src/libs/tracing/tracing.qbs1
-rw-r--r--src/libs/utils/algorithm.h24
-rw-r--r--src/libs/utils/ansiescapecodehandler.h4
-rw-r--r--src/libs/utils/appmainwindow.h2
-rw-r--r--src/libs/utils/basetreeview.cpp34
-rw-r--r--src/libs/utils/basetreeview.h2
-rw-r--r--src/libs/utils/changeset.cpp8
-rw-r--r--src/libs/utils/changeset.h23
-rw-r--r--src/libs/utils/checkablemessagebox.cpp27
-rw-r--r--src/libs/utils/classnamevalidatinglineedit.cpp11
-rw-r--r--src/libs/utils/completinglineedit.cpp2
-rw-r--r--src/libs/utils/completingtextedit.cpp18
-rw-r--r--src/libs/utils/consoleprocess_p.h28
-rw-r--r--src/libs/utils/consoleprocess_unix.cpp13
-rw-r--r--src/libs/utils/consoleprocess_win.cpp36
-rw-r--r--src/libs/utils/crumblepath.cpp2
-rw-r--r--src/libs/utils/delegates.cpp (renamed from src/libs/utils/annotateditemdelegate.cpp)70
-rw-r--r--src/libs/utils/delegates.h (renamed from src/libs/utils/annotateditemdelegate.h)27
-rw-r--r--src/libs/utils/detailswidget.cpp10
-rw-r--r--src/libs/utils/dropsupport.cpp8
-rw-r--r--src/libs/utils/dropsupport.h2
-rw-r--r--src/libs/utils/elfreader.cpp4
-rw-r--r--src/libs/utils/elfreader.h4
-rw-r--r--src/libs/utils/environment.cpp8
-rw-r--r--src/libs/utils/environment.h2
-rw-r--r--src/libs/utils/fadingindicator.cpp4
-rw-r--r--src/libs/utils/faketooltip.cpp4
-rw-r--r--src/libs/utils/fancylineedit.cpp6
-rw-r--r--src/libs/utils/fancylineedit.h2
-rw-r--r--src/libs/utils/fancymainwindow.cpp48
-rw-r--r--src/libs/utils/fileinprojectfinder.cpp8
-rw-r--r--src/libs/utils/fileinprojectfinder.h4
-rw-r--r--src/libs/utils/filesearch.cpp10
-rw-r--r--src/libs/utils/filesearch.h28
-rw-r--r--src/libs/utils/filesystemwatcher.cpp22
-rw-r--r--src/libs/utils/fileutils.cpp12
-rw-r--r--src/libs/utils/fileutils.h4
-rw-r--r--src/libs/utils/filewizardpage.cpp9
-rw-r--r--src/libs/utils/fixedsizeclicklabel.cpp1
-rw-r--r--src/libs/utils/fixedsizeclicklabel.h2
-rw-r--r--src/libs/utils/flowlayout.cpp8
-rw-r--r--src/libs/utils/guard.cpp4
-rw-r--r--src/libs/utils/headerviewstretcher.cpp8
-rw-r--r--src/libs/utils/highlightingitemdelegate.cpp4
-rw-r--r--src/libs/utils/historycompleter.cpp12
-rw-r--r--src/libs/utils/htmldocextractor.cpp5
-rw-r--r--src/libs/utils/htmldocextractor.h4
-rw-r--r--src/libs/utils/icon.cpp12
-rw-r--r--src/libs/utils/icon.h2
-rw-r--r--src/libs/utils/images/classmemberfunction.png (renamed from src/libs/cplusplus/images/classmemberfunction.png)bin139 -> 139 bytes
-rw-r--r--src/libs/utils/images/classmemberfunction@2x.png (renamed from src/libs/cplusplus/images/classmemberfunction@2x.png)bin168 -> 168 bytes
-rw-r--r--src/libs/utils/images/classmembervariable.png (renamed from src/libs/cplusplus/images/classmembervariable.png)bin136 -> 136 bytes
-rw-r--r--src/libs/utils/images/classmembervariable@2x.png (renamed from src/libs/cplusplus/images/classmembervariable@2x.png)bin165 -> 165 bytes
-rw-r--r--src/libs/utils/images/classparent.png (renamed from src/libs/cplusplus/images/classparent.png)bin155 -> 155 bytes
-rw-r--r--src/libs/utils/images/classparent@2x.png (renamed from src/libs/cplusplus/images/classparent@2x.png)bin175 -> 175 bytes
-rw-r--r--src/libs/utils/images/classrelation.png (renamed from src/libs/cplusplus/images/classrelation.png)bin106 -> 106 bytes
-rw-r--r--src/libs/utils/images/classrelation@2x.png (renamed from src/libs/cplusplus/images/classrelation@2x.png)bin114 -> 114 bytes
-rw-r--r--src/libs/utils/images/classrelationbackground.png (renamed from src/libs/cplusplus/images/classrelationbackground.png)bin121 -> 121 bytes
-rw-r--r--src/libs/utils/images/classrelationbackground@2x.png (renamed from src/libs/cplusplus/images/classrelationbackground@2x.png)bin133 -> 133 bytes
-rw-r--r--src/libs/utils/images/enum.png (renamed from src/libs/cplusplus/images/enum.png)bin112 -> 112 bytes
-rw-r--r--src/libs/utils/images/enum@2x.png (renamed from src/libs/cplusplus/images/enum@2x.png)bin118 -> 118 bytes
-rw-r--r--src/libs/utils/images/enumerator.png (renamed from src/libs/cplusplus/images/enumerator.png)bin124 -> 124 bytes
-rw-r--r--src/libs/utils/images/enumerator@2x.png (renamed from src/libs/cplusplus/images/enumerator@2x.png)bin129 -> 129 bytes
-rw-r--r--src/libs/utils/images/keyword.png (renamed from src/libs/cplusplus/images/keyword.png)bin139 -> 139 bytes
-rw-r--r--src/libs/utils/images/keyword@2x.png (renamed from src/libs/cplusplus/images/keyword@2x.png)bin143 -> 143 bytes
-rw-r--r--src/libs/utils/images/macro.png (renamed from src/libs/cplusplus/images/macro.png)bin133 -> 133 bytes
-rw-r--r--src/libs/utils/images/macro@2x.png (renamed from src/libs/cplusplus/images/macro@2x.png)bin217 -> 217 bytes
-rw-r--r--src/libs/utils/images/member.png (renamed from src/libs/cplusplus/images/member.png)bin169 -> 169 bytes
-rw-r--r--src/libs/utils/images/member@2x.png (renamed from src/libs/cplusplus/images/member@2x.png)bin202 -> 202 bytes
-rw-r--r--src/libs/utils/images/private.png (renamed from src/libs/cplusplus/images/private.png)bin112 -> 112 bytes
-rw-r--r--src/libs/utils/images/private@2x.png (renamed from src/libs/cplusplus/images/private@2x.png)bin165 -> 165 bytes
-rw-r--r--src/libs/utils/images/privatebackground.png (renamed from src/libs/cplusplus/images/privatebackground.png)bin144 -> 144 bytes
-rw-r--r--src/libs/utils/images/privatebackground@2x.png (renamed from src/libs/cplusplus/images/privatebackground@2x.png)bin153 -> 153 bytes
-rw-r--r--src/libs/utils/images/property.png (renamed from src/libs/cplusplus/images/property.png)bin148 -> 148 bytes
-rw-r--r--src/libs/utils/images/property@2x.png (renamed from src/libs/cplusplus/images/property@2x.png)bin133 -> 133 bytes
-rw-r--r--src/libs/utils/images/propertybackground.png (renamed from src/libs/cplusplus/images/propertybackground.png)bin131 -> 131 bytes
-rw-r--r--src/libs/utils/images/propertybackground@2x.png (renamed from src/libs/cplusplus/images/propertybackground@2x.png)bin187 -> 187 bytes
-rw-r--r--src/libs/utils/images/protected.png (renamed from src/libs/cplusplus/images/protected.png)bin115 -> 115 bytes
-rw-r--r--src/libs/utils/images/protected@2x.png (renamed from src/libs/cplusplus/images/protected@2x.png)bin177 -> 177 bytes
-rw-r--r--src/libs/utils/images/protectedbackground.png (renamed from src/libs/cplusplus/images/protectedbackground.png)bin216 -> 216 bytes
-rw-r--r--src/libs/utils/images/protectedbackground@2x.png (renamed from src/libs/cplusplus/images/protectedbackground@2x.png)bin385 -> 385 bytes
-rw-r--r--src/libs/utils/images/signal.png (renamed from src/libs/cplusplus/images/signal.png)bin199 -> 199 bytes
-rw-r--r--src/libs/utils/images/signal@2x.png (renamed from src/libs/cplusplus/images/signal@2x.png)bin374 -> 374 bytes
-rw-r--r--src/libs/utils/images/slot.png (renamed from src/libs/cplusplus/images/slot.png)bin188 -> 188 bytes
-rw-r--r--src/libs/utils/images/slot@2x.png (renamed from src/libs/cplusplus/images/slot@2x.png)bin210 -> 210 bytes
-rw-r--r--src/libs/utils/images/static.png (renamed from src/libs/cplusplus/images/static.png)bin120 -> 120 bytes
-rw-r--r--src/libs/utils/images/static@2x.png (renamed from src/libs/cplusplus/images/static@2x.png)bin159 -> 159 bytes
-rw-r--r--src/libs/utils/images/staticbackground.png (renamed from src/libs/cplusplus/images/staticbackground.png)bin131 -> 131 bytes
-rw-r--r--src/libs/utils/images/staticbackground@2x.png (renamed from src/libs/cplusplus/images/staticbackground@2x.png)bin173 -> 173 bytes
-rw-r--r--src/libs/utils/json.cpp33
-rw-r--r--src/libs/utils/json.h2
-rw-r--r--src/libs/utils/link.h8
-rw-r--r--src/libs/utils/macroexpander.cpp14
-rw-r--r--src/libs/utils/macroexpander.h12
-rw-r--r--src/libs/utils/mimetypes/mimedatabase.cpp2
-rw-r--r--src/libs/utils/mimetypes/mimemagicrule.cpp8
-rw-r--r--src/libs/utils/mimetypes/mimeprovider.cpp4
-rw-r--r--src/libs/utils/mimetypes/mimetype.cpp9
-rw-r--r--src/libs/utils/mimetypes/mimetype.h3
-rw-r--r--src/libs/utils/mimetypes/mimetypeparser.cpp2
-rw-r--r--src/libs/utils/networkaccessmanager.cpp4
-rw-r--r--src/libs/utils/newclasswidget.cpp30
-rw-r--r--src/libs/utils/optional.h1
-rw-r--r--src/libs/utils/outputformatter.cpp2
-rw-r--r--src/libs/utils/outputformatter.h2
-rw-r--r--src/libs/utils/overridecursor.cpp2
-rw-r--r--src/libs/utils/overridecursor.h2
-rw-r--r--src/libs/utils/pathchooser.cpp14
-rw-r--r--src/libs/utils/pathchooser.h6
-rw-r--r--src/libs/utils/pathlisteditor.cpp4
-rw-r--r--src/libs/utils/persistentsettings.cpp8
-rw-r--r--src/libs/utils/pointeralgorithm.h4
-rw-r--r--src/libs/utils/port.h4
-rw-r--r--src/libs/utils/portlist.cpp2
-rw-r--r--src/libs/utils/process_ctrlc_stub.cpp6
-rw-r--r--src/libs/utils/progressindicator.cpp2
-rw-r--r--src/libs/utils/proxyaction.cpp8
-rw-r--r--src/libs/utils/proxyaction.h8
-rw-r--r--src/libs/utils/qtcolorbutton.cpp4
-rw-r--r--src/libs/utils/qtcprocess.cpp4
-rw-r--r--src/libs/utils/qtcprocess.h9
-rw-r--r--src/libs/utils/runextensions.h2
-rw-r--r--src/libs/utils/savedaction.cpp5
-rw-r--r--src/libs/utils/savedaction.h6
-rw-r--r--src/libs/utils/savefile.cpp4
-rw-r--r--src/libs/utils/savefile.h2
-rw-r--r--src/libs/utils/scopedswap.h2
-rw-r--r--src/libs/utils/settingsaccessor.cpp20
-rw-r--r--src/libs/utils/settingsaccessor.h42
-rw-r--r--src/libs/utils/settingsselector.cpp5
-rw-r--r--src/libs/utils/settingsselector.h4
-rw-r--r--src/libs/utils/shellcommand.cpp53
-rw-r--r--src/libs/utils/shellcommand.h2
-rw-r--r--src/libs/utils/shellcommandpage.cpp6
-rw-r--r--src/libs/utils/sizedarray.h2
-rw-r--r--src/libs/utils/smallstring.h6
-rw-r--r--src/libs/utils/statuslabel.cpp2
-rw-r--r--src/libs/utils/statuslabel.h2
-rw-r--r--src/libs/utils/stylehelper.cpp2
-rw-r--r--src/libs/utils/synchronousprocess.cpp17
-rw-r--r--src/libs/utils/textfileformat.cpp9
-rw-r--r--src/libs/utils/textfileformat.h6
-rw-r--r--src/libs/utils/textutils.cpp5
-rw-r--r--src/libs/utils/textutils.h40
-rw-r--r--src/libs/utils/theme/theme.cpp2
-rw-r--r--src/libs/utils/tooltip/tips.cpp4
-rw-r--r--src/libs/utils/tooltip/tooltip.cpp10
-rw-r--r--src/libs/utils/treemodel.cpp47
-rw-r--r--src/libs/utils/treemodel.h4
-rw-r--r--src/libs/utils/treeviewcombobox.cpp4
-rw-r--r--src/libs/utils/treeviewcombobox.h2
-rw-r--r--src/libs/utils/uncommentselection.cpp7
-rw-r--r--src/libs/utils/uncommentselection.h2
-rw-r--r--src/libs/utils/url.cpp2
-rw-r--r--src/libs/utils/utils-lib.pri4
-rw-r--r--src/libs/utils/utils.qbs4
-rw-r--r--src/libs/utils/utils.qrc42
-rw-r--r--src/libs/utils/utilsicons.cpp194
-rw-r--r--src/libs/utils/utilsicons.h34
-rw-r--r--src/libs/utils/winutils.cpp14
-rw-r--r--src/libs/utils/wizard.cpp41
-rw-r--r--src/libs/utils/wizardpage.cpp4
-rw-r--r--src/plugins/android/adbcommandswidget.cpp4
-rw-r--r--src/plugins/android/adbcommandswidget.h2
-rw-r--r--src/plugins/android/android.pro11
-rw-r--r--src/plugins/android/android.qbs7
-rw-r--r--src/plugins/android/androidavdmanager.cpp7
-rw-r--r--src/plugins/android/androidbuildapkstep.cpp154
-rw-r--r--src/plugins/android/androidbuildapkstep.h25
-rw-r--r--src/plugins/android/androidbuildapkwidget.cpp170
-rw-r--r--src/plugins/android/androidbuildapkwidget.h47
-rw-r--r--src/plugins/android/androidconfigurations.cpp77
-rw-r--r--src/plugins/android/androidconfigurations.h6
-rw-r--r--src/plugins/android/androidcreatekeystorecertificate.h4
-rw-r--r--src/plugins/android/androiddebugsupport.cpp34
-rw-r--r--src/plugins/android/androiddebugsupport.h4
-rw-r--r--src/plugins/android/androiddeployconfiguration.cpp11
-rw-r--r--src/plugins/android/androiddeployqtstep.cpp157
-rw-r--r--src/plugins/android/androiddeployqtstep.h4
-rw-r--r--src/plugins/android/androiddeployqtwidget.h6
-rw-r--r--src/plugins/android/androiddevice.cpp20
-rw-r--r--src/plugins/android/androiddevice.h2
-rw-r--r--src/plugins/android/androiddevicedialog.cpp44
-rw-r--r--src/plugins/android/androiddevicedialog.h4
-rw-r--r--src/plugins/android/androiddevicefactory.h14
-rw-r--r--src/plugins/android/androidextralibrarylistmodel.cpp (renamed from src/plugins/qmakeandroidsupport/androidextralibrarylistmodel.cpp)93
-rw-r--r--src/plugins/android/androidextralibrarylistmodel.h (renamed from src/plugins/qmakeandroidsupport/androidextralibrarylistmodel.h)31
-rw-r--r--src/plugins/android/androidmanager.cpp76
-rw-r--r--src/plugins/android/androidmanager.h4
-rw-r--r--src/plugins/android/androidmanifesteditor.cpp2
-rw-r--r--src/plugins/android/androidmanifesteditorfactory.cpp2
-rw-r--r--src/plugins/android/androidmanifesteditorfactory.h2
-rw-r--r--src/plugins/android/androidmanifesteditorwidget.cpp36
-rw-r--r--src/plugins/android/androidmanifesteditorwidget.h13
-rw-r--r--src/plugins/android/androidpackageinstallationstep.cpp2
-rw-r--r--src/plugins/android/androidpackageinstallationstep.h2
-rw-r--r--src/plugins/android/androidplugin.cpp18
-rw-r--r--src/plugins/android/androidqmltoolingsupport.cpp7
-rw-r--r--src/plugins/android/androidqmltoolingsupport.h6
-rw-r--r--src/plugins/android/androidqtsupport.cpp53
-rw-r--r--src/plugins/android/androidqtsupport.h38
-rw-r--r--src/plugins/android/androidqtversion.h22
-rw-r--r--src/plugins/android/androidqtversionfactory.cpp10
-rw-r--r--src/plugins/android/androidqtversionfactory.h10
-rw-r--r--src/plugins/android/androidrunconfiguration.cpp6
-rw-r--r--src/plugins/android/androidruncontrol.cpp6
-rw-r--r--src/plugins/android/androidruncontrol.h4
-rw-r--r--src/plugins/android/androidrunenvironmentaspect.cpp48
-rw-r--r--src/plugins/android/androidrunenvironmentaspect.h (renamed from src/plugins/resourceeditor/qrceditor/test/mainwindow.h)20
-rw-r--r--src/plugins/android/androidrunner.cpp19
-rw-r--r--src/plugins/android/androidrunner.h4
-rw-r--r--src/plugins/android/androidrunnerworker.cpp84
-rw-r--r--src/plugins/android/androidrunnerworker.h2
-rw-r--r--src/plugins/android/androidsdkmanager.cpp4
-rw-r--r--src/plugins/android/androidsdkmanager.h2
-rw-r--r--src/plugins/android/androidsdkmanagerwidget.h4
-rw-r--r--src/plugins/android/androidsdkmodel.h2
-rw-r--r--src/plugins/android/androidsdkpackage.cpp2
-rw-r--r--src/plugins/android/androidsdkpackage.h2
-rw-r--r--src/plugins/android/androidsettingspage.h8
-rw-r--r--src/plugins/android/androidsettingswidget.cpp2
-rw-r--r--src/plugins/android/androidsettingswidget.h12
-rw-r--r--src/plugins/android/androidsignaloperation.h10
-rw-r--r--src/plugins/android/androidtoolchain.cpp14
-rw-r--r--src/plugins/android/androidtoolmanager.cpp5
-rw-r--r--src/plugins/android/avddialog.cpp4
-rw-r--r--src/plugins/android/avddialog.h4
-rw-r--r--src/plugins/android/certificatesmodel.h4
-rw-r--r--src/plugins/android/createandroidmanifestwizard.cpp (renamed from src/plugins/qmakeandroidsupport/createandroidmanifestwizard.cpp)119
-rw-r--r--src/plugins/android/createandroidmanifestwizard.h (renamed from src/plugins/qmakeandroidsupport/createandroidmanifestwizard.h)24
-rw-r--r--src/plugins/android/javaindenter.cpp7
-rw-r--r--src/plugins/android/javaparser.h4
-rw-r--r--src/plugins/autotest/autotestplugin.h2
-rw-r--r--src/plugins/autotest/autotestunittests.cpp2
-rw-r--r--src/plugins/autotest/autotestunittests.h2
-rw-r--r--src/plugins/autotest/gtest/gtestframework.cpp2
-rw-r--r--src/plugins/autotest/gtest/gtestoutputreader.cpp2
-rw-r--r--src/plugins/autotest/gtest/gtestsettingspage.h1
-rw-r--r--src/plugins/autotest/gtest/gtesttreeitem.cpp2
-rw-r--r--src/plugins/autotest/gtest/gtestvisitors.h2
-rw-r--r--src/plugins/autotest/itestsettingspage.h2
-rw-r--r--src/plugins/autotest/qtest/qttestoutputreader.cpp6
-rw-r--r--src/plugins/autotest/qtest/qttestparser.cpp9
-rw-r--r--src/plugins/autotest/qtest/qttestsettings.cpp3
-rw-r--r--src/plugins/autotest/qtest/qttestsettingspage.cpp2
-rw-r--r--src/plugins/autotest/qtest/qttestsettingspage.h3
-rw-r--r--src/plugins/autotest/qtest/qttesttreeitem.cpp1
-rw-r--r--src/plugins/autotest/qtest/qttestvisitors.h16
-rw-r--r--src/plugins/autotest/quick/quicktestparser.cpp6
-rw-r--r--src/plugins/autotest/quick/quicktestparser.h1
-rw-r--r--src/plugins/autotest/quick/quicktesttreeitem.cpp2
-rw-r--r--src/plugins/autotest/testconfiguration.cpp4
-rw-r--r--src/plugins/autotest/testconfiguration.h3
-rw-r--r--src/plugins/autotest/testnavigationwidget.cpp4
-rw-r--r--src/plugins/autotest/testnavigationwidget.h3
-rw-r--r--src/plugins/autotest/testresult.cpp2
-rw-r--r--src/plugins/autotest/testresultdelegate.cpp2
-rw-r--r--src/plugins/autotest/testresultmodel.cpp4
-rw-r--r--src/plugins/autotest/testresultmodel.h1
-rw-r--r--src/plugins/autotest/testresultspane.h4
-rw-r--r--src/plugins/autotest/testrunconfiguration.h3
-rw-r--r--src/plugins/autotest/testrunner.cpp53
-rw-r--r--src/plugins/autotest/testrunner.h5
-rw-r--r--src/plugins/autotest/testsettings.cpp2
-rw-r--r--src/plugins/autotest/testsettingspage.cpp6
-rw-r--r--src/plugins/autotest/testsettingspage.h1
-rw-r--r--src/plugins/autotest/testtreeitem.cpp21
-rw-r--r--src/plugins/autotest/testtreeitem.h3
-rw-r--r--src/plugins/autotest/testtreeitemdelegate.cpp4
-rw-r--r--src/plugins/autotest/testtreeitemdelegate.h1
-rw-r--r--src/plugins/autotest/testtreemodel.cpp2
-rw-r--r--src/plugins/autotest/testtreemodel.h2
-rw-r--r--src/plugins/autotoolsprojectmanager/autogenstep.cpp2
-rw-r--r--src/plugins/autotoolsprojectmanager/autogenstep.h2
-rw-r--r--src/plugins/autotoolsprojectmanager/autoreconfstep.cpp2
-rw-r--r--src/plugins/autotoolsprojectmanager/autoreconfstep.h2
-rw-r--r--src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.cpp6
-rw-r--r--src/plugins/autotoolsprojectmanager/configurestep.cpp2
-rw-r--r--src/plugins/autotoolsprojectmanager/configurestep.h2
-rw-r--r--src/plugins/autotoolsprojectmanager/makestep.cpp215
-rw-r--r--src/plugins/autotoolsprojectmanager/makestep.h80
-rw-r--r--src/plugins/baremetal/baremetalcustomrunconfiguration.cpp2
-rw-r--r--src/plugins/baremetal/defaultgdbserverprovider.h2
-rw-r--r--src/plugins/baremetal/gdbserverproviderssettingspage.cpp39
-rw-r--r--src/plugins/baremetal/gdbserverproviderssettingspage.h9
-rw-r--r--src/plugins/clangcodemodel/clangassistproposal.cpp58
-rw-r--r--src/plugins/clangcodemodel/clangassistproposalitem.cpp190
-rw-r--r--src/plugins/clangcodemodel/clangassistproposalitem.h12
-rw-r--r--src/plugins/clangcodemodel/clangassistproposalmodel.cpp13
-rw-r--r--src/plugins/clangcodemodel/clangassistproposalmodel.h7
-rw-r--r--src/plugins/clangcodemodel/clangbackendreceiver.cpp6
-rw-r--r--src/plugins/clangcodemodel/clangcodemodel.pro2
-rw-r--r--src/plugins/clangcodemodel/clangcodemodel.qbs15
-rw-r--r--src/plugins/clangcodemodel/clangcodemodelplugin.cpp99
-rw-r--r--src/plugins/clangcodemodel/clangcodemodelplugin.h13
-rw-r--r--src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp120
-rw-r--r--src/plugins/clangcodemodel/clangcompletionassistprocessor.h6
-rw-r--r--src/plugins/clangcodemodel/clangconstants.h1
-rw-r--r--src/plugins/clangcodemodel/clangcurrentdocumentfilter.cpp17
-rw-r--r--src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp2
-rw-r--r--src/plugins/clangcodemodel/clangoverviewmodel.cpp2
-rw-r--r--src/plugins/clangcodemodel/clangutils.cpp142
-rw-r--r--src/plugins/clangcodemodel/clangutils.h9
-rw-r--r--src/plugins/clangpchmanager/clangpchmanager.qbs15
-rw-r--r--src/plugins/clangpchmanager/projectupdater.cpp64
-rw-r--r--src/plugins/clangpchmanager/projectupdater.h17
-rw-r--r--src/plugins/clangpchmanager/qtcreatorprojectupdater.cpp2
-rw-r--r--src/plugins/clangpchmanager/qtcreatorprojectupdater.h23
-rw-r--r--src/plugins/clangrefactoring/clangqueryprojectsfindfilter.cpp2
-rw-r--r--src/plugins/clangrefactoring/clangrefactoring.qbs15
-rw-r--r--src/plugins/clangrefactoring/refactoringengine.cpp2
-rw-r--r--src/plugins/clangtools/clangtidyclazytool.cpp24
-rw-r--r--src/plugins/clangtools/clangtidyclazytool.h1
-rw-r--r--src/plugins/clangtools/clangtool.cpp5
-rw-r--r--src/plugins/clangtools/clangtool.h4
-rw-r--r--src/plugins/clangtools/clangtoolruncontrol.cpp35
-rw-r--r--src/plugins/clangtools/clangtools.qbs16
-rw-r--r--src/plugins/clangtools/clangtoolsbasicsettings.ui3
-rw-r--r--src/plugins/clangtools/clangtoolspreconfiguredsessiontests.cpp3
-rw-r--r--src/plugins/clangtools/clangtoolsunittests.cpp3
-rw-r--r--src/plugins/classview/classviewnavigationwidget.cpp2
-rw-r--r--src/plugins/classview/classviewtreeitemmodel.cpp2
-rw-r--r--src/plugins/classview/classviewutils.cpp46
-rw-r--r--src/plugins/cmakeprojectmanager/builddirmanager.cpp8
-rw-r--r--src/plugins/cmakeprojectmanager/builddirparameters.cpp10
-rw-r--r--src/plugins/cmakeprojectmanager/builddirparameters.h3
-rw-r--r--src/plugins/cmakeprojectmanager/builddirreader.cpp5
-rw-r--r--src/plugins/cmakeprojectmanager/cmakebuildstep.cpp13
-rw-r--r--src/plugins/cmakeprojectmanager/cmakebuildstep.h3
-rw-r--r--src/plugins/cmakeprojectmanager/cmakeconfigitem.cpp2
-rw-r--r--src/plugins/cmakeprojectmanager/cmakekitinformation.cpp11
-rw-r--r--src/plugins/cmakeprojectmanager/cmakekitinformation.h1
-rw-r--r--src/plugins/cmakeprojectmanager/cmakeprojectmanager.pro2
-rw-r--r--src/plugins/cmakeprojectmanager/cmakeprojectmanager.qbs2
-rw-r--r--src/plugins/cmakeprojectmanager/cmakeprojectplugin.cpp6
-rw-r--r--src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp2
-rw-r--r--src/plugins/cmakeprojectmanager/cmakesettingspage.cpp12
-rw-r--r--src/plugins/cmakeprojectmanager/cmaketool.cpp141
-rw-r--r--src/plugins/cmakeprojectmanager/cmaketool.h23
-rw-r--r--src/plugins/cmakeprojectmanager/cmaketoolmanager.cpp348
-rw-r--r--src/plugins/cmakeprojectmanager/cmaketoolmanager.h6
-rw-r--r--src/plugins/cmakeprojectmanager/cmaketoolsettingsaccessor.cpp257
-rw-r--r--src/plugins/cmakeprojectmanager/cmaketoolsettingsaccessor.h65
-rw-r--r--src/plugins/cmakeprojectmanager/servermode.cpp2
-rw-r--r--src/plugins/cmakeprojectmanager/servermodereader.cpp15
-rw-r--r--src/plugins/cmakeprojectmanager/tealeafreader.cpp20
-rw-r--r--src/plugins/coreplugin/actionmanager/actioncontainer.cpp36
-rw-r--r--src/plugins/coreplugin/actionmanager/actioncontainer_p.h2
-rw-r--r--src/plugins/coreplugin/actionmanager/actionmanager.cpp16
-rw-r--r--src/plugins/coreplugin/actionmanager/actionmanager_p.h4
-rw-r--r--src/plugins/coreplugin/actionmanager/command.cpp19
-rw-r--r--src/plugins/coreplugin/actionmanager/command_p.h8
-rw-r--r--src/plugins/coreplugin/actionmanager/commandbutton.cpp4
-rw-r--r--src/plugins/coreplugin/actionmanager/commandmappings.cpp8
-rw-r--r--src/plugins/coreplugin/basefilewizard.cpp4
-rw-r--r--src/plugins/coreplugin/basefilewizardfactory.cpp2
-rw-r--r--src/plugins/coreplugin/basefilewizardfactory.h2
-rw-r--r--src/plugins/coreplugin/coreplugin.cpp49
-rw-r--r--src/plugins/coreplugin/coreplugin.h6
-rw-r--r--src/plugins/coreplugin/coreplugin.pro3
-rw-r--r--src/plugins/coreplugin/coreplugin.qbs2
-rw-r--r--src/plugins/coreplugin/designmode.cpp10
-rw-r--r--src/plugins/coreplugin/dialogs/externaltoolconfig.cpp14
-rw-r--r--src/plugins/coreplugin/dialogs/externaltoolconfig.h6
-rw-r--r--src/plugins/coreplugin/dialogs/filepropertiesdialog.cpp5
-rw-r--r--src/plugins/coreplugin/dialogs/ioptionspage.cpp2
-rw-r--r--src/plugins/coreplugin/dialogs/newdialog.cpp17
-rw-r--r--src/plugins/coreplugin/dialogs/newdialog.h2
-rw-r--r--src/plugins/coreplugin/dialogs/promptoverwritedialog.cpp4
-rw-r--r--src/plugins/coreplugin/dialogs/readonlyfilesdialog.cpp12
-rw-r--r--src/plugins/coreplugin/dialogs/saveitemsdialog.cpp2
-rw-r--r--src/plugins/coreplugin/dialogs/settingsdialog.cpp20
-rw-r--r--src/plugins/coreplugin/dialogs/shortcutsettings.cpp8
-rw-r--r--src/plugins/coreplugin/documentmanager.cpp8
-rw-r--r--src/plugins/coreplugin/documentmanager.h2
-rw-r--r--src/plugins/coreplugin/editmode.cpp6
-rw-r--r--src/plugins/coreplugin/editmode.h2
-rw-r--r--src/plugins/coreplugin/editormanager/documentmodel.cpp10
-rw-r--r--src/plugins/coreplugin/editormanager/documentmodel_p.h2
-rw-r--r--src/plugins/coreplugin/editormanager/editormanager.cpp229
-rw-r--r--src/plugins/coreplugin/editormanager/editormanager.h11
-rw-r--r--src/plugins/coreplugin/editormanager/editormanager_p.h4
-rw-r--r--src/plugins/coreplugin/editormanager/editorview.cpp27
-rw-r--r--src/plugins/coreplugin/editormanager/editorview.h2
-rw-r--r--src/plugins/coreplugin/editormanager/editorwindow.cpp8
-rw-r--r--src/plugins/coreplugin/editormanager/editorwindow.h4
-rw-r--r--src/plugins/coreplugin/editormanager/ieditorfactory.cpp61
-rw-r--r--src/plugins/coreplugin/editormanager/ieditorfactory.h9
-rw-r--r--src/plugins/coreplugin/editormanager/ieditorfactory_p.h89
-rw-r--r--src/plugins/coreplugin/editormanager/iexternaleditor.cpp12
-rw-r--r--src/plugins/coreplugin/editormanager/iexternaleditor.h8
-rw-r--r--src/plugins/coreplugin/editormanager/openeditorsview.cpp6
-rw-r--r--src/plugins/coreplugin/editormanager/openeditorsview.h6
-rw-r--r--src/plugins/coreplugin/editormanager/openeditorswindow.cpp10
-rw-r--r--src/plugins/coreplugin/editormanager/openeditorswindow.h16
-rw-r--r--src/plugins/coreplugin/editormanager/systemeditor.h10
-rw-r--r--src/plugins/coreplugin/editortoolbar.cpp24
-rw-r--r--src/plugins/coreplugin/editortoolbar.h2
-rw-r--r--src/plugins/coreplugin/externaltool.cpp20
-rw-r--r--src/plugins/coreplugin/externaltool.h8
-rw-r--r--src/plugins/coreplugin/externaltoolmanager.cpp12
-rw-r--r--src/plugins/coreplugin/find/basetextfind.cpp6
-rw-r--r--src/plugins/coreplugin/find/currentdocumentfind.cpp14
-rw-r--r--src/plugins/coreplugin/find/currentdocumentfind.h2
-rw-r--r--src/plugins/coreplugin/find/findplugin.cpp18
-rw-r--r--src/plugins/coreplugin/find/findtoolbar.cpp36
-rw-r--r--src/plugins/coreplugin/find/findtoolbar.h12
-rw-r--r--src/plugins/coreplugin/find/findtoolwindow.cpp24
-rw-r--r--src/plugins/coreplugin/find/findtoolwindow.h8
-rw-r--r--src/plugins/coreplugin/find/highlightscrollbarcontroller.cpp2
-rw-r--r--src/plugins/coreplugin/find/ifindsupport.h2
-rw-r--r--src/plugins/coreplugin/find/itemviewfind.cpp2
-rw-r--r--src/plugins/coreplugin/find/searchresulttreeitemdelegate.cpp2
-rw-r--r--src/plugins/coreplugin/find/searchresulttreeitemdelegate.h4
-rw-r--r--src/plugins/coreplugin/find/searchresulttreeitems.cpp6
-rw-r--r--src/plugins/coreplugin/find/searchresulttreeitems.h2
-rw-r--r--src/plugins/coreplugin/find/searchresulttreemodel.cpp8
-rw-r--r--src/plugins/coreplugin/find/searchresulttreemodel.h12
-rw-r--r--src/plugins/coreplugin/find/searchresulttreeview.cpp2
-rw-r--r--src/plugins/coreplugin/find/searchresulttreeview.h2
-rw-r--r--src/plugins/coreplugin/find/searchresultwidget.cpp22
-rw-r--r--src/plugins/coreplugin/find/searchresultwidget.h4
-rw-r--r--src/plugins/coreplugin/find/searchresultwindow.cpp12
-rw-r--r--src/plugins/coreplugin/findplaceholder.cpp10
-rw-r--r--src/plugins/coreplugin/findplaceholder.h2
-rw-r--r--src/plugins/coreplugin/generalsettings.cpp4
-rw-r--r--src/plugins/coreplugin/generalsettings.h6
-rw-r--r--src/plugins/coreplugin/generatedfile.cpp16
-rw-r--r--src/plugins/coreplugin/generatedfile.h2
-rw-r--r--src/plugins/coreplugin/helpmanager.cpp15
-rw-r--r--src/plugins/coreplugin/helpmanager.h2
-rw-r--r--src/plugins/coreplugin/icontext.h4
-rw-r--r--src/plugins/coreplugin/icore.cpp31
-rw-r--r--src/plugins/coreplugin/icore.h7
-rw-r--r--src/plugins/coreplugin/id.cpp8
-rw-r--r--src/plugins/coreplugin/id.h7
-rw-r--r--src/plugins/coreplugin/idocumentfactory.cpp2
-rw-r--r--src/plugins/coreplugin/idocumentfactory.h2
-rw-r--r--src/plugins/coreplugin/inavigationwidgetfactory.cpp1
-rw-r--r--src/plugins/coreplugin/inavigationwidgetfactory.h2
-rw-r--r--src/plugins/coreplugin/infobar.cpp12
-rw-r--r--src/plugins/coreplugin/iversioncontrol.cpp8
-rw-r--r--src/plugins/coreplugin/iversioncontrol.h6
-rw-r--r--src/plugins/coreplugin/iwizardfactory.cpp4
-rw-r--r--src/plugins/coreplugin/iwizardfactory.h2
-rw-r--r--src/plugins/coreplugin/jsexpander.cpp2
-rw-r--r--src/plugins/coreplugin/locator/basefilefilter.cpp3
-rw-r--r--src/plugins/coreplugin/locator/directoryfilter.cpp2
-rw-r--r--src/plugins/coreplugin/locator/executefilter.cpp2
-rw-r--r--src/plugins/coreplugin/locator/ilocatorfilter.cpp4
-rw-r--r--src/plugins/coreplugin/locator/javascriptfilter.h4
-rw-r--r--src/plugins/coreplugin/locator/locator.cpp2
-rw-r--r--src/plugins/coreplugin/locator/locator_test.cpp2
-rw-r--r--src/plugins/coreplugin/locator/locatorfiltertest.cpp8
-rw-r--r--src/plugins/coreplugin/locator/locatorfiltertest.h4
-rw-r--r--src/plugins/coreplugin/locator/locatormanager.cpp13
-rw-r--r--src/plugins/coreplugin/locator/locatormanager.h2
-rw-r--r--src/plugins/coreplugin/locator/locatorsettingspage.cpp2
-rw-r--r--src/plugins/coreplugin/locator/locatorsettingspage.h6
-rw-r--r--src/plugins/coreplugin/locator/locatorwidget.cpp60
-rw-r--r--src/plugins/coreplugin/locator/locatorwidget.h6
-rw-r--r--src/plugins/coreplugin/mainwindow.cpp21
-rw-r--r--src/plugins/coreplugin/manhattanstyle.cpp16
-rw-r--r--src/plugins/coreplugin/menubarfilter.cpp57
-rw-r--r--src/plugins/coreplugin/menubarfilter.h7
-rw-r--r--src/plugins/coreplugin/messagemanager.cpp8
-rw-r--r--src/plugins/coreplugin/messageoutputwindow.cpp2
-rw-r--r--src/plugins/coreplugin/mimetypemagicdialog.cpp5
-rw-r--r--src/plugins/coreplugin/mimetypemagicdialog.h15
-rw-r--r--src/plugins/coreplugin/mimetypesettings.cpp169
-rw-r--r--src/plugins/coreplugin/mimetypesettings.h10
-rw-r--r--src/plugins/coreplugin/mimetypesettingspage.ui48
-rw-r--r--src/plugins/coreplugin/minisplitter.cpp4
-rw-r--r--src/plugins/coreplugin/modemanager.cpp20
-rw-r--r--src/plugins/coreplugin/modemanager.h3
-rw-r--r--src/plugins/coreplugin/navigationsubwidget.cpp22
-rw-r--r--src/plugins/coreplugin/navigationsubwidget.h8
-rw-r--r--src/plugins/coreplugin/navigationwidget.cpp10
-rw-r--r--src/plugins/coreplugin/opendocumentstreeview.cpp13
-rw-r--r--src/plugins/coreplugin/outputpane.cpp10
-rw-r--r--src/plugins/coreplugin/outputpanemanager.cpp22
-rw-r--r--src/plugins/coreplugin/outputpanemanager.h39
-rw-r--r--src/plugins/coreplugin/outputwindow.cpp12
-rw-r--r--src/plugins/coreplugin/plugindialog.cpp12
-rw-r--r--src/plugins/coreplugin/progressmanager/futureprogress.cpp10
-rw-r--r--src/plugins/coreplugin/progressmanager/progressbar.h12
-rw-r--r--src/plugins/coreplugin/progressmanager/progressmanager.cpp39
-rw-r--r--src/plugins/coreplugin/progressmanager/progressmanager.h2
-rw-r--r--src/plugins/coreplugin/progressmanager/progressmanager_p.h8
-rw-r--r--src/plugins/coreplugin/progressmanager/progressmanager_win.cpp8
-rw-r--r--src/plugins/coreplugin/progressmanager/progressview.cpp6
-rw-r--r--src/plugins/coreplugin/progressmanager/progressview.h4
-rw-r--r--src/plugins/coreplugin/reaper.cpp4
-rw-r--r--src/plugins/coreplugin/rightpane.cpp21
-rw-r--r--src/plugins/coreplugin/rightpane.h4
-rw-r--r--src/plugins/coreplugin/settingsdatabase.cpp2
-rw-r--r--src/plugins/coreplugin/sidebar.cpp18
-rw-r--r--src/plugins/coreplugin/sidebarwidget.cpp19
-rw-r--r--src/plugins/coreplugin/sidebarwidget.h14
-rw-r--r--src/plugins/coreplugin/statusbarmanager.cpp33
-rw-r--r--src/plugins/coreplugin/styleanimator.cpp2
-rw-r--r--src/plugins/coreplugin/styleanimator.h18
-rw-r--r--src/plugins/coreplugin/systemsettings.cpp4
-rw-r--r--src/plugins/coreplugin/systemsettings.h6
-rw-r--r--src/plugins/coreplugin/textdocument.h2
-rw-r--r--src/plugins/coreplugin/themechooser.cpp4
-rw-r--r--src/plugins/coreplugin/toolsettings.cpp2
-rw-r--r--src/plugins/coreplugin/toolsettings.h8
-rw-r--r--src/plugins/coreplugin/variablechooser.cpp69
-rw-r--r--src/plugins/coreplugin/vcsmanager.cpp8
-rw-r--r--src/plugins/coreplugin/vcsmanager.h2
-rw-r--r--src/plugins/coreplugin/versiondialog.cpp4
-rw-r--r--src/plugins/coreplugin/versiondialog.h2
-rw-r--r--src/plugins/coreplugin/windowsupport.cpp2
-rw-r--r--src/plugins/coreplugin/windowsupport.h4
-rw-r--r--src/plugins/cppeditor/cppincludehierarchy.cpp2
-rw-r--r--src/plugins/cppeditor/cpptypehierarchy.cpp2
-rw-r--r--src/plugins/cppeditor/cppuseselectionsupdater.cpp1
-rw-r--r--src/plugins/cppeditor/resourcepreviewhoverhandler.cpp12
-rw-r--r--src/plugins/cpptools/builtincursorinfo.cpp2
-rw-r--r--src/plugins/cpptools/compileroptionsbuilder.cpp201
-rw-r--r--src/plugins/cpptools/compileroptionsbuilder.h29
-rw-r--r--src/plugins/cpptools/cppchecksymbols.cpp44
-rw-r--r--src/plugins/cpptools/cppcompletionassist.cpp2
-rw-r--r--src/plugins/cpptools/cpplocalsymbols.cpp50
-rw-r--r--src/plugins/cpptools/cppmodelmanager.cpp3
-rw-r--r--src/plugins/cpptools/cppprojectfile.cpp2
-rw-r--r--src/plugins/cpptools/cpprefactoringchanges.cpp14
-rw-r--r--src/plugins/cpptools/stringtable.cpp2
-rw-r--r--src/plugins/cpptools/symbolfinder.cpp4
-rw-r--r--src/plugins/cpptools/typehierarchybuilder.cpp2
-rw-r--r--src/plugins/debugger/analyzer/analyzermanager.h4
-rw-r--r--src/plugins/debugger/analyzer/analyzerrunconfigwidget.cpp8
-rw-r--r--src/plugins/debugger/analyzer/analyzerutils.cpp6
-rw-r--r--src/plugins/debugger/analyzer/detailederrorview.cpp4
-rw-r--r--src/plugins/debugger/analyzer/diagnosticlocation.cpp4
-rw-r--r--src/plugins/debugger/analyzer/diagnosticlocation.h4
-rw-r--r--src/plugins/debugger/analyzer/startremotedialog.cpp4
-rw-r--r--src/plugins/debugger/breakhandler.cpp62
-rw-r--r--src/plugins/debugger/breakhandler.h12
-rw-r--r--src/plugins/debugger/breakpoint.cpp4
-rw-r--r--src/plugins/debugger/breakpoint.h8
-rw-r--r--src/plugins/debugger/cdb/cdbengine.cpp298
-rw-r--r--src/plugins/debugger/cdb/cdbengine.h35
-rw-r--r--src/plugins/debugger/cdb/cdboptionspage.cpp36
-rw-r--r--src/plugins/debugger/cdb/cdboptionspage.h16
-rw-r--r--src/plugins/debugger/cdb/cdboptionspagewidget.ui29
-rw-r--r--src/plugins/debugger/cdb/cdbparsehelpers.cpp16
-rw-r--r--src/plugins/debugger/cdb/cdbparsehelpers.h14
-rw-r--r--src/plugins/debugger/cdb/stringinputstream.cpp2
-rw-r--r--src/plugins/debugger/cdb/stringinputstream.h8
-rw-r--r--src/plugins/debugger/commonoptionspage.cpp28
-rw-r--r--src/plugins/debugger/console/console.cpp6
-rw-r--r--src/plugins/debugger/console/console.h2
-rw-r--r--src/plugins/debugger/console/consoleedit.h4
-rw-r--r--src/plugins/debugger/console/consoleitem.cpp4
-rw-r--r--src/plugins/debugger/console/consoleitem.h2
-rw-r--r--src/plugins/debugger/console/consoleitemdelegate.cpp13
-rw-r--r--src/plugins/debugger/console/consoleitemdelegate.h17
-rw-r--r--src/plugins/debugger/console/consoleitemmodel.cpp3
-rw-r--r--src/plugins/debugger/console/consoleitemmodel.h4
-rw-r--r--src/plugins/debugger/console/consoleproxymodel.h3
-rw-r--r--src/plugins/debugger/console/consoleview.cpp14
-rw-r--r--src/plugins/debugger/console/consoleview.h10
-rw-r--r--src/plugins/debugger/debuggeractions.cpp14
-rw-r--r--src/plugins/debugger/debuggeractions.h6
-rw-r--r--src/plugins/debugger/debuggercore.h3
-rw-r--r--src/plugins/debugger/debuggerdialogs.cpp33
-rw-r--r--src/plugins/debugger/debuggerdialogs.h2
-rw-r--r--src/plugins/debugger/debuggerengine.cpp47
-rw-r--r--src/plugins/debugger/debuggerengine.h13
-rw-r--r--src/plugins/debugger/debuggeritem.cpp14
-rw-r--r--src/plugins/debugger/debuggeritem.h6
-rw-r--r--src/plugins/debugger/debuggeritemmanager.cpp10
-rw-r--r--src/plugins/debugger/debuggeritemmanager.h2
-rw-r--r--src/plugins/debugger/debuggerkitconfigwidget.cpp5
-rw-r--r--src/plugins/debugger/debuggerkitconfigwidget.h2
-rw-r--r--src/plugins/debugger/debuggerkitinformation.cpp6
-rw-r--r--src/plugins/debugger/debuggermainwindow.cpp294
-rw-r--r--src/plugins/debugger/debuggermainwindow.h124
-rw-r--r--src/plugins/debugger/debuggerplugin.cpp264
-rw-r--r--src/plugins/debugger/debuggerprotocol.cpp8
-rw-r--r--src/plugins/debugger/debuggerprotocol.h18
-rw-r--r--src/plugins/debugger/debuggerrunconfigurationaspect.cpp4
-rw-r--r--src/plugins/debugger/debuggerruncontrol.cpp57
-rw-r--r--src/plugins/debugger/debuggersourcepathmappingwidget.cpp8
-rw-r--r--src/plugins/debugger/debuggersourcepathmappingwidget.h2
-rw-r--r--src/plugins/debugger/debuggertooltipmanager.cpp42
-rw-r--r--src/plugins/debugger/debuggertooltipmanager.h2
-rw-r--r--src/plugins/debugger/disassembleragent.cpp28
-rw-r--r--src/plugins/debugger/disassemblerlines.cpp8
-rw-r--r--src/plugins/debugger/disassemblerlines.h24
-rw-r--r--src/plugins/debugger/gdb/gdbengine.cpp97
-rw-r--r--src/plugins/debugger/gdb/gdbengine.h5
-rw-r--r--src/plugins/debugger/gdb/gdboptionspage.cpp12
-rw-r--r--src/plugins/debugger/imageviewer.cpp6
-rw-r--r--src/plugins/debugger/imageviewer.h2
-rw-r--r--src/plugins/debugger/lldb/lldbengine.cpp14
-rw-r--r--src/plugins/debugger/lldb/lldbengine.h1
-rw-r--r--src/plugins/debugger/loadcoredialog.cpp4
-rw-r--r--src/plugins/debugger/loadcoredialog.h4
-rw-r--r--src/plugins/debugger/localsandexpressionswindow.cpp1
-rw-r--r--src/plugins/debugger/localsandexpressionswindow.h4
-rw-r--r--src/plugins/debugger/logwindow.cpp14
-rw-r--r--src/plugins/debugger/memoryagent.h4
-rw-r--r--src/plugins/debugger/moduleshandler.cpp2
-rw-r--r--src/plugins/debugger/moduleshandler.h16
-rw-r--r--src/plugins/debugger/namedemangler/globalparsestate.h2
-rw-r--r--src/plugins/debugger/namedemangler/parsetreenodes.cpp110
-rw-r--r--src/plugins/debugger/namedemangler/parsetreenodes.h424
-rw-r--r--src/plugins/debugger/outputcollector.h2
-rw-r--r--src/plugins/debugger/pdb/pdbengine.cpp6
-rw-r--r--src/plugins/debugger/pdb/pdbengine.h1
-rw-r--r--src/plugins/debugger/procinterrupt.cpp2
-rw-r--r--src/plugins/debugger/qml/qmlcppengine.cpp5
-rw-r--r--src/plugins/debugger/qml/qmlcppengine.h1
-rw-r--r--src/plugins/debugger/qml/qmlengine.cpp92
-rw-r--r--src/plugins/debugger/qml/qmlengine.h1
-rw-r--r--src/plugins/debugger/qml/qmlengineutils.cpp70
-rw-r--r--src/plugins/debugger/qml/qmlinspectoragent.cpp22
-rw-r--r--src/plugins/debugger/qml/qmlinspectoragent.h18
-rw-r--r--src/plugins/debugger/qml/qmlv8debuggerclientconstants.h1
-rw-r--r--src/plugins/debugger/registerhandler.cpp10
-rw-r--r--src/plugins/debugger/registerhandler.h2
-rw-r--r--src/plugins/debugger/registerpostmortemaction.cpp2
-rw-r--r--src/plugins/debugger/shared/cdbsymbolpathlisteditor.cpp4
-rw-r--r--src/plugins/debugger/shared/peutils.cpp30
-rw-r--r--src/plugins/debugger/shared/symbolpathsdialog.h2
-rw-r--r--src/plugins/debugger/simplifytype.cpp2
-rw-r--r--src/plugins/debugger/snapshothandler.cpp11
-rw-r--r--src/plugins/debugger/snapshothandler.h14
-rw-r--r--src/plugins/debugger/snapshotwindow.h4
-rw-r--r--src/plugins/debugger/sourceagent.cpp10
-rw-r--r--src/plugins/debugger/sourcefileshandler.cpp6
-rw-r--r--src/plugins/debugger/sourceutils.cpp52
-rw-r--r--src/plugins/debugger/sourceutils.h5
-rw-r--r--src/plugins/debugger/stackframe.cpp6
-rw-r--r--src/plugins/debugger/stackframe.h10
-rw-r--r--src/plugins/debugger/stackhandler.cpp8
-rw-r--r--src/plugins/debugger/threaddata.h22
-rw-r--r--src/plugins/debugger/threadshandler.cpp7
-rw-r--r--src/plugins/debugger/threadshandler.h2
-rw-r--r--src/plugins/debugger/unstartedappwatcherdialog.cpp16
-rw-r--r--src/plugins/debugger/watchdata.cpp8
-rw-r--r--src/plugins/debugger/watchdelegatewidgets.cpp2
-rw-r--r--src/plugins/debugger/watchhandler.cpp63
-rw-r--r--src/plugins/debugger/watchhandler.h4
-rw-r--r--src/plugins/debugger/watchwindow.cpp2
-rw-r--r--src/plugins/debugger/watchwindow.h2
-rw-r--r--src/plugins/designer/codemodelhelpers.cpp2
-rw-r--r--src/plugins/designer/formeditorplugin.cpp2
-rw-r--r--src/plugins/fakevim/fakevimhandler.cpp2
-rw-r--r--src/plugins/fakevim/fakevimhandler.h1
-rw-r--r--src/plugins/fakevim/fakevimplugin.cpp14
-rw-r--r--src/plugins/genericprojectmanager/genericmakestep.cpp271
-rw-r--r--src/plugins/genericprojectmanager/genericmakestep.h55
-rw-r--r--src/plugins/genericprojectmanager/genericmakestep.ui63
-rw-r--r--src/plugins/genericprojectmanager/genericproject.cpp6
-rw-r--r--src/plugins/genericprojectmanager/genericproject.h2
-rw-r--r--src/plugins/genericprojectmanager/genericprojectmanager.pro2
-rw-r--r--src/plugins/genericprojectmanager/genericprojectmanager.qbs1
-rw-r--r--src/plugins/git/gitclient.cpp4
-rw-r--r--src/plugins/git/mergetool.cpp7
-rw-r--r--src/plugins/glsleditor/glslcompletionassist.cpp12
-rw-r--r--src/plugins/glsleditor/glsleditor.cpp2
-rw-r--r--src/plugins/help/helpplugin.cpp2
-rw-r--r--src/plugins/imageviewer/imageview.cpp2
-rw-r--r--src/plugins/ios/iosbuildstep.cpp10
-rw-r--r--src/plugins/ios/iosconfigurations.cpp15
-rw-r--r--src/plugins/ios/iosdeploystepfactory.cpp2
-rw-r--r--src/plugins/ios/iosdeploystepfactory.h2
-rw-r--r--src/plugins/ios/iosdsymbuildstep.cpp4
-rw-r--r--src/plugins/ios/iosdsymbuildstep.h1
-rw-r--r--src/plugins/ios/iosqtversion.cpp2
-rw-r--r--src/plugins/ios/iossettingswidget.cpp2
-rw-r--r--src/plugins/ios/iostoolhandler.cpp4
-rw-r--r--src/plugins/ios/simulatorcontrol.cpp29
-rw-r--r--src/plugins/ios/simulatorcontrol.h2
-rw-r--r--src/plugins/ios/simulatoroperationdialog.cpp4
-rw-r--r--src/plugins/nim/nimplugin.cpp3
-rw-r--r--src/plugins/nim/project/nimcompilerbuildstep.cpp2
-rw-r--r--src/plugins/nim/project/nimcompilercleanstep.cpp2
-rw-r--r--src/plugins/nim/project/nimrunconfiguration.cpp6
-rw-r--r--src/plugins/plugins.pro4
-rw-r--r--src/plugins/projectexplorer/abi.cpp528
-rw-r--r--src/plugins/projectexplorer/abi.h26
-rw-r--r--src/plugins/projectexplorer/abiwidget.cpp15
-rw-r--r--src/plugins/projectexplorer/abiwidget.h4
-rw-r--r--src/plugins/projectexplorer/abstractmsvctoolchain.cpp9
-rw-r--r--src/plugins/projectexplorer/abstractmsvctoolchain.h2
-rw-r--r--src/plugins/projectexplorer/applicationlauncher.cpp54
-rw-r--r--src/plugins/projectexplorer/applicationlauncher.h10
-rw-r--r--src/plugins/projectexplorer/appoutputpane.cpp25
-rw-r--r--src/plugins/projectexplorer/baseprojectwizarddialog.cpp9
-rw-r--r--src/plugins/projectexplorer/baseprojectwizarddialog.h4
-rw-r--r--src/plugins/projectexplorer/buildconfiguration.cpp37
-rw-r--r--src/plugins/projectexplorer/buildconfiguration.h6
-rw-r--r--src/plugins/projectexplorer/buildinfo.cpp3
-rw-r--r--src/plugins/projectexplorer/buildmanager.cpp8
-rw-r--r--src/plugins/projectexplorer/buildstep.cpp12
-rw-r--r--src/plugins/projectexplorer/buildstep.h11
-rw-r--r--src/plugins/projectexplorer/buildsteplist.cpp2
-rw-r--r--src/plugins/projectexplorer/buildstepspage.cpp5
-rw-r--r--src/plugins/projectexplorer/buildstepspage.h8
-rw-r--r--src/plugins/projectexplorer/compileoutputwindow.cpp6
-rw-r--r--src/plugins/projectexplorer/currentprojectfind.cpp2
-rw-r--r--src/plugins/projectexplorer/customexecutablerunconfiguration.cpp5
-rw-r--r--src/plugins/projectexplorer/customparser.cpp140
-rw-r--r--src/plugins/projectexplorer/customparser.h5
-rw-r--r--src/plugins/projectexplorer/customtoolchain.cpp37
-rw-r--r--src/plugins/projectexplorer/customwizard/customwizard.cpp14
-rw-r--r--src/plugins/projectexplorer/customwizard/customwizardpage.cpp4
-rw-r--r--src/plugins/projectexplorer/customwizard/customwizardparameters.cpp4
-rw-r--r--src/plugins/projectexplorer/customwizard/customwizardscriptgenerator.cpp2
-rw-r--r--src/plugins/projectexplorer/deploymentdataview.cpp7
-rw-r--r--src/plugins/projectexplorer/deploymentdataview.h4
-rw-r--r--src/plugins/projectexplorer/devicesupport/desktopdevice.cpp8
-rw-r--r--src/plugins/projectexplorer/devicesupport/devicemanager.cpp25
-rw-r--r--src/plugins/projectexplorer/devicesupport/devicemanager.h4
-rw-r--r--src/plugins/projectexplorer/devicesupport/devicemanagermodel.cpp7
-rw-r--r--src/plugins/projectexplorer/devicesupport/devicemanagermodel.h4
-rw-r--r--src/plugins/projectexplorer/devicesupport/deviceprocessesdialog.cpp29
-rw-r--r--src/plugins/projectexplorer/devicesupport/deviceprocessesdialog.h4
-rw-r--r--src/plugins/projectexplorer/devicesupport/deviceprocesslist.cpp10
-rw-r--r--src/plugins/projectexplorer/devicesupport/deviceprocesslist.h4
-rw-r--r--src/plugins/projectexplorer/devicesupport/devicesettingswidget.cpp10
-rw-r--r--src/plugins/projectexplorer/devicesupport/devicetestdialog.cpp8
-rw-r--r--src/plugins/projectexplorer/devicesupport/devicetestdialog.h6
-rw-r--r--src/plugins/projectexplorer/devicesupport/deviceusedportsgatherer.cpp10
-rw-r--r--src/plugins/projectexplorer/devicesupport/idevice.cpp42
-rw-r--r--src/plugins/projectexplorer/devicesupport/idevice.h3
-rw-r--r--src/plugins/projectexplorer/devicesupport/sshdeviceprocess.cpp5
-rw-r--r--src/plugins/projectexplorer/devicesupport/sshdeviceprocess.h4
-rw-r--r--src/plugins/projectexplorer/devicesupport/sshdeviceprocesslist.cpp7
-rw-r--r--src/plugins/projectexplorer/devicesupport/sshdeviceprocesslist.h4
-rw-r--r--src/plugins/projectexplorer/editorconfiguration.cpp5
-rw-r--r--src/plugins/projectexplorer/editorconfiguration.h4
-rw-r--r--src/plugins/projectexplorer/environmentaspect.cpp4
-rw-r--r--src/plugins/projectexplorer/environmentwidget.cpp5
-rw-r--r--src/plugins/projectexplorer/environmentwidget.h4
-rw-r--r--src/plugins/projectexplorer/extraabi.cpp101
-rw-r--r--src/plugins/projectexplorer/extraabi.h (renamed from src/plugins/resourceeditor/qrceditor/test/main.cpp)20
-rw-r--r--src/plugins/projectexplorer/extracompiler.cpp7
-rw-r--r--src/plugins/projectexplorer/extracompiler.h3
-rw-r--r--src/plugins/projectexplorer/foldernavigationwidget.cpp2
-rw-r--r--src/plugins/projectexplorer/gcctoolchain.cpp149
-rw-r--r--src/plugins/projectexplorer/gcctoolchainfactories.h16
-rw-r--r--src/plugins/projectexplorer/gnumakeparser.cpp12
-rw-r--r--src/plugins/projectexplorer/ioutputparser.cpp2
-rw-r--r--src/plugins/projectexplorer/ioutputparser.h1
-rw-r--r--src/plugins/projectexplorer/jsonwizard/jsonfieldpage.cpp19
-rw-r--r--src/plugins/projectexplorer/jsonwizard/jsonfieldpage.h4
-rw-r--r--src/plugins/projectexplorer/jsonwizard/jsonwizardfactory.cpp14
-rw-r--r--src/plugins/projectexplorer/jsonwizard/jsonwizardfilegenerator.cpp2
-rw-r--r--src/plugins/projectexplorer/jsonwizard/jsonwizardgeneratorfactory.cpp10
-rw-r--r--src/plugins/projectexplorer/jsonwizard/jsonwizardpagefactory.cpp3
-rw-r--r--src/plugins/projectexplorer/kit.cpp11
-rw-r--r--src/plugins/projectexplorer/kit.h9
-rw-r--r--src/plugins/projectexplorer/kitinformationconfigwidget.cpp1
-rw-r--r--src/plugins/projectexplorer/kitmanager.cpp307
-rw-r--r--src/plugins/projectexplorer/kitmanager.h22
-rw-r--r--src/plugins/projectexplorer/kitmanagerconfigwidget.cpp23
-rw-r--r--src/plugins/projectexplorer/kitmanagerconfigwidget.h4
-rw-r--r--src/plugins/projectexplorer/kitmodel.cpp14
-rw-r--r--src/plugins/projectexplorer/kitoptionspage.cpp2
-rw-r--r--src/plugins/projectexplorer/makestep.cpp492
-rw-r--r--src/plugins/projectexplorer/makestep.h119
-rw-r--r--src/plugins/projectexplorer/makestep.ui119
-rw-r--r--src/plugins/projectexplorer/miniprojecttargetselector.cpp48
-rw-r--r--src/plugins/projectexplorer/msvctoolchain.cpp378
-rw-r--r--src/plugins/projectexplorer/msvctoolchain.h44
-rw-r--r--src/plugins/projectexplorer/outputparser_test.cpp27
-rw-r--r--src/plugins/projectexplorer/outputparser_test.h4
-rw-r--r--src/plugins/projectexplorer/panelswidget.cpp8
-rw-r--r--src/plugins/projectexplorer/processstep.cpp8
-rw-r--r--src/plugins/projectexplorer/processstep.h2
-rw-r--r--src/plugins/projectexplorer/project.cpp115
-rw-r--r--src/plugins/projectexplorer/project.h11
-rw-r--r--src/plugins/projectexplorer/projectexplorer.cpp89
-rw-r--r--src/plugins/projectexplorer/projectexplorer.h3
-rw-r--r--src/plugins/projectexplorer/projectexplorer.pro15
-rw-r--r--src/plugins/projectexplorer/projectexplorer.qbs5
-rw-r--r--src/plugins/projectexplorer/projectimporter.cpp19
-rw-r--r--src/plugins/projectexplorer/projectmodels.cpp2
-rw-r--r--src/plugins/projectexplorer/projecttree.cpp15
-rw-r--r--src/plugins/projectexplorer/projecttreewidget.cpp4
-rw-r--r--src/plugins/projectexplorer/projectwindow.cpp28
-rw-r--r--src/plugins/projectexplorer/projectwindow.h4
-rw-r--r--src/plugins/projectexplorer/projectwizardpage.cpp6
-rw-r--r--src/plugins/projectexplorer/runconfiguration.cpp113
-rw-r--r--src/plugins/projectexplorer/runconfiguration.h62
-rw-r--r--src/plugins/projectexplorer/runconfigurationaspects.cpp10
-rw-r--r--src/plugins/projectexplorer/runconfigurationaspects.h3
-rw-r--r--src/plugins/projectexplorer/selectablefilesmodel.cpp2
-rw-r--r--src/plugins/projectexplorer/session.cpp11
-rw-r--r--src/plugins/projectexplorer/session.h2
-rw-r--r--src/plugins/projectexplorer/sessiondialog.cpp4
-rw-r--r--src/plugins/projectexplorer/sessionview.cpp2
-rw-r--r--src/plugins/projectexplorer/subscription.cpp63
-rw-r--r--src/plugins/projectexplorer/subscription.h2
-rw-r--r--src/plugins/projectexplorer/target.cpp17
-rw-r--r--src/plugins/projectexplorer/target.h8
-rw-r--r--src/plugins/projectexplorer/targetsettingspanel.cpp23
-rw-r--r--src/plugins/projectexplorer/targetsettingspanel.h4
-rw-r--r--src/plugins/projectexplorer/targetsetuppage.cpp4
-rw-r--r--src/plugins/projectexplorer/targetsetupwidget.cpp6
-rw-r--r--src/plugins/projectexplorer/taskhub.cpp10
-rw-r--r--src/plugins/projectexplorer/taskmodel.cpp2
-rw-r--r--src/plugins/projectexplorer/taskwindow.cpp33
-rw-r--r--src/plugins/projectexplorer/taskwindow.h4
-rw-r--r--src/plugins/projectexplorer/toolchain.cpp12
-rw-r--r--src/plugins/projectexplorer/toolchain.h3
-rw-r--r--src/plugins/projectexplorer/toolchainmanager.cpp5
-rw-r--r--src/plugins/projectexplorer/toolchainoptionspage.cpp2
-rw-r--r--src/plugins/projectexplorer/toolchainsettingsaccessor.cpp2
-rw-r--r--src/plugins/projectexplorer/userfileaccessor.cpp1492
-rw-r--r--src/plugins/projectexplorer/windebuginterface.cpp20
-rw-r--r--src/plugins/projectexplorer/xcodebuildparser.cpp4
-rw-r--r--src/plugins/pythoneditor/pythoneditorplugin.cpp8
-rw-r--r--src/plugins/qbsprojectmanager/customqbspropertiesdialog.cpp4
-rw-r--r--src/plugins/qbsprojectmanager/customqbspropertiesdialog.h4
-rw-r--r--src/plugins/qbsprojectmanager/defaultpropertyprovider.cpp2
-rw-r--r--src/plugins/qbsprojectmanager/defaultpropertyprovider.h5
-rw-r--r--src/plugins/qbsprojectmanager/propertyprovider.h2
-rw-r--r--src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp6
-rw-r--r--src/plugins/qbsprojectmanager/qbsbuildconfigurationwidget.cpp6
-rw-r--r--src/plugins/qbsprojectmanager/qbsbuildstep.cpp28
-rw-r--r--src/plugins/qbsprojectmanager/qbsbuildstep.h2
-rw-r--r--src/plugins/qbsprojectmanager/qbscleanstep.cpp14
-rw-r--r--src/plugins/qbsprojectmanager/qbscleanstep.h8
-rw-r--r--src/plugins/qbsprojectmanager/qbsinstallstep.cpp15
-rw-r--r--src/plugins/qbsprojectmanager/qbsinstallstep.h8
-rw-r--r--src/plugins/qbsprojectmanager/qbslogsink.h7
-rw-r--r--src/plugins/qbsprojectmanager/qbsnodes.cpp20
-rw-r--r--src/plugins/qbsprojectmanager/qbsnodes.h8
-rw-r--r--src/plugins/qbsprojectmanager/qbsparser.h4
-rw-r--r--src/plugins/qbsprojectmanager/qbsprofilessettingspage.cpp9
-rw-r--r--src/plugins/qbsprojectmanager/qbsprofilessettingspage.h4
-rw-r--r--src/plugins/qbsprojectmanager/qbsproject.cpp33
-rw-r--r--src/plugins/qbsprojectmanager/qbsproject.h10
-rw-r--r--src/plugins/qbsprojectmanager/qbsprojectimporter.cpp2
-rw-r--r--src/plugins/qbsprojectmanager/qbsprojectmanager.h2
-rw-r--r--src/plugins/qbsprojectmanager/qbsprojectmanagerplugin.cpp42
-rw-r--r--src/plugins/qbsprojectmanager/qbsprojectparser.cpp9
-rw-r--r--src/plugins/qbsprojectmanager/qbsprojectparser.h10
-rw-r--r--src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp14
-rw-r--r--src/plugins/qmakeandroidsupport/androidqmakebuildconfigurationfactory.cpp31
-rw-r--r--src/plugins/qmakeandroidsupport/androidqmakebuildconfigurationfactory.h4
-rw-r--r--src/plugins/qmakeandroidsupport/qmakeandroidbuildapkstep.cpp213
-rw-r--r--src/plugins/qmakeandroidsupport/qmakeandroidbuildapkstep.h67
-rw-r--r--src/plugins/qmakeandroidsupport/qmakeandroidbuildapkwidget.cpp145
-rw-r--r--src/plugins/qmakeandroidsupport/qmakeandroidbuildapkwidget.h66
-rw-r--r--src/plugins/qmakeandroidsupport/qmakeandroidbuildapkwidget.ui135
-rw-r--r--src/plugins/qmakeandroidsupport/qmakeandroidsupport.cpp188
-rw-r--r--src/plugins/qmakeandroidsupport/qmakeandroidsupport.h18
-rw-r--r--src/plugins/qmakeandroidsupport/qmakeandroidsupport.pro10
-rw-r--r--src/plugins/qmakeandroidsupport/qmakeandroidsupport.qbs9
-rw-r--r--src/plugins/qmakeandroidsupport/qmakeandroidsupportplugin.cpp2
-rw-r--r--src/plugins/qmakeprojectmanager/addlibrarywizard.cpp10
-rw-r--r--src/plugins/qmakeprojectmanager/addlibrarywizard.h10
-rw-r--r--src/plugins/qmakeprojectmanager/customwidgetwizard/classlist.cpp6
-rw-r--r--src/plugins/qmakeprojectmanager/customwidgetwizard/customwidgetwidgetswizardpage.cpp4
-rw-r--r--src/plugins/qmakeprojectmanager/customwidgetwizard/customwidgetwizard.cpp2
-rw-r--r--src/plugins/qmakeprojectmanager/customwidgetwizard/plugingenerator.h2
-rw-r--r--src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.cpp2
-rw-r--r--src/plugins/qmakeprojectmanager/externaleditors.h2
-rw-r--r--src/plugins/qmakeprojectmanager/librarydetailscontroller.cpp8
-rw-r--r--src/plugins/qmakeprojectmanager/librarydetailscontroller.h44
-rw-r--r--src/plugins/qmakeprojectmanager/makefileparse.cpp2
-rw-r--r--src/plugins/qmakeprojectmanager/makestep.cpp464
-rw-r--r--src/plugins/qmakeprojectmanager/makestep.h119
-rw-r--r--src/plugins/qmakeprojectmanager/makestep.ui50
-rw-r--r--src/plugins/qmakeprojectmanager/profilehighlighter.h2
-rw-r--r--src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp55
-rw-r--r--src/plugins/qmakeprojectmanager/qmakebuildconfiguration.h5
-rw-r--r--src/plugins/qmakeprojectmanager/qmakemakestep.cpp202
-rw-r--r--src/plugins/qmakeprojectmanager/qmakemakestep.h65
-rw-r--r--src/plugins/qmakeprojectmanager/qmakenodes.cpp2
-rw-r--r--src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp20
-rw-r--r--src/plugins/qmakeprojectmanager/qmakeproject.cpp52
-rw-r--r--src/plugins/qmakeprojectmanager/qmakeprojectconfigwidget.cpp6
-rw-r--r--src/plugins/qmakeprojectmanager/qmakeprojectconfigwidget.h2
-rw-r--r--src/plugins/qmakeprojectmanager/qmakeprojectimporter.cpp6
-rw-r--r--src/plugins/qmakeprojectmanager/qmakeprojectmanager.cpp16
-rw-r--r--src/plugins/qmakeprojectmanager/qmakeprojectmanager.pro10
-rw-r--r--src/plugins/qmakeprojectmanager/qmakeprojectmanager.qbs2
-rw-r--r--src/plugins/qmakeprojectmanager/qmakeprojectmanagerplugin.cpp12
-rw-r--r--src/plugins/qmakeprojectmanager/qmakestep.cpp54
-rw-r--r--src/plugins/qmakeprojectmanager/qmakestep.h5
-rw-r--r--src/plugins/qmakeprojectmanager/qtmodulesinfo.cpp2
-rw-r--r--src/plugins/qmakeprojectmanager/wizards/filespage.cpp2
-rw-r--r--src/plugins/qmakeprojectmanager/wizards/filespage.h4
-rw-r--r--src/plugins/qmakeprojectmanager/wizards/guiappwizard.cpp2
-rw-r--r--src/plugins/qmakeprojectmanager/wizards/guiappwizard.h4
-rw-r--r--src/plugins/qmakeprojectmanager/wizards/librarywizard.cpp2
-rw-r--r--src/plugins/qmakeprojectmanager/wizards/librarywizard.h4
-rw-r--r--src/plugins/qmakeprojectmanager/wizards/librarywizarddialog.cpp20
-rw-r--r--src/plugins/qmakeprojectmanager/wizards/modulespage.cpp4
-rw-r--r--src/plugins/qmakeprojectmanager/wizards/modulespage.h2
-rw-r--r--src/plugins/qmakeprojectmanager/wizards/qtprojectparameters.cpp5
-rw-r--r--src/plugins/qmakeprojectmanager/wizards/qtprojectparameters.h6
-rw-r--r--src/plugins/qmakeprojectmanager/wizards/qtwizard.cpp12
-rw-r--r--src/plugins/qmakeprojectmanager/wizards/qtwizard.h4
-rw-r--r--src/plugins/qmakeprojectmanager/wizards/subdirsprojectwizard.cpp4
-rw-r--r--src/plugins/qmldesigner/components/componentcore/abstractaction.cpp2
-rw-r--r--src/plugins/qmldesigner/components/componentcore/actioninterface.h2
-rw-r--r--src/plugins/qmldesigner/components/componentcore/addimagesdialog.cpp8
-rw-r--r--src/plugins/qmldesigner/components/componentcore/changestyleaction.cpp2
-rw-r--r--src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp20
-rw-r--r--src/plugins/qmldesigner/components/componentcore/designeractionmanager.h2
-rw-r--r--src/plugins/qmldesigner/components/componentcore/designeractionmanagerview.cpp2
-rw-r--r--src/plugins/qmldesigner/components/componentcore/findimplementation.cpp30
-rw-r--r--src/plugins/qmldesigner/components/componentcore/layoutingridlayout.cpp2
-rw-r--r--src/plugins/qmldesigner/components/componentcore/layoutingridlayout.h2
-rw-r--r--src/plugins/qmldesigner/components/componentcore/modelnodecontextmenu.cpp2
-rw-r--r--src/plugins/qmldesigner/components/componentcore/modelnodecontextmenu_helper.h4
-rw-r--r--src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp14
-rw-r--r--src/plugins/qmldesigner/components/componentcore/theme.cpp2
-rw-r--r--src/plugins/qmldesigner/components/componentcore/zoomaction.cpp2
-rw-r--r--src/plugins/qmldesigner/components/debugview/debugview.cpp4
-rw-r--r--src/plugins/qmldesigner/components/formeditor/abstractcustomtool.cpp2
-rw-r--r--src/plugins/qmldesigner/components/formeditor/abstractformeditortool.cpp20
-rw-r--r--src/plugins/qmldesigner/components/formeditor/anchorindicator.cpp4
-rw-r--r--src/plugins/qmldesigner/components/formeditor/backgroundaction.cpp2
-rw-r--r--src/plugins/qmldesigner/components/formeditor/bindingindicator.cpp4
-rw-r--r--src/plugins/qmldesigner/components/formeditor/bindingindicatorgraphicsitem.cpp4
-rw-r--r--src/plugins/qmldesigner/components/formeditor/contentnoteditableindicator.cpp6
-rw-r--r--src/plugins/qmldesigner/components/formeditor/contentnoteditableindicator.h2
-rw-r--r--src/plugins/qmldesigner/components/formeditor/dragtool.cpp5
-rw-r--r--src/plugins/qmldesigner/components/formeditor/formeditorgraphicsview.cpp6
-rw-r--r--src/plugins/qmldesigner/components/formeditor/formeditorscene.cpp10
-rw-r--r--src/plugins/qmldesigner/components/formeditor/formeditorview.cpp17
-rw-r--r--src/plugins/qmldesigner/components/formeditor/formeditorwidget.cpp9
-rw-r--r--src/plugins/qmldesigner/components/formeditor/layeritem.cpp5
-rw-r--r--src/plugins/qmldesigner/components/formeditor/lineeditaction.cpp2
-rw-r--r--src/plugins/qmldesigner/components/formeditor/movetool.cpp13
-rw-r--r--src/plugins/qmldesigner/components/formeditor/numberseriesaction.cpp4
-rw-r--r--src/plugins/qmldesigner/components/formeditor/resizecontroller.cpp63
-rw-r--r--src/plugins/qmldesigner/components/formeditor/resizehandleitem.cpp6
-rw-r--r--src/plugins/qmldesigner/components/formeditor/resizemanipulator.cpp4
-rw-r--r--src/plugins/qmldesigner/components/formeditor/resizetool.cpp5
-rw-r--r--src/plugins/qmldesigner/components/formeditor/rubberbandselectionmanipulator.cpp2
-rw-r--r--src/plugins/qmldesigner/components/formeditor/scalemanipulator.cpp4
-rw-r--r--src/plugins/qmldesigner/components/formeditor/selectionindicator.cpp5
-rw-r--r--src/plugins/qmldesigner/components/formeditor/selectionrectangle.cpp2
-rw-r--r--src/plugins/qmldesigner/components/formeditor/selectiontool.cpp5
-rw-r--r--src/plugins/qmldesigner/components/formeditor/snapper.cpp16
-rw-r--r--src/plugins/qmldesigner/components/formeditor/snappinglinecreator.h4
-rw-r--r--src/plugins/qmldesigner/components/formeditor/toolbox.cpp4
-rw-r--r--src/plugins/qmldesigner/components/importmanager/importlabel.cpp2
-rw-r--r--src/plugins/qmldesigner/components/importmanager/importmanagerview.cpp11
-rw-r--r--src/plugins/qmldesigner/components/importmanager/importswidget.cpp4
-rw-r--r--src/plugins/qmldesigner/components/integration/componentaction.cpp2
-rw-r--r--src/plugins/qmldesigner/components/integration/componentview.cpp2
-rw-r--r--src/plugins/qmldesigner/components/integration/designdocument.cpp14
-rw-r--r--src/plugins/qmldesigner/components/integration/designdocumentview.cpp14
-rw-r--r--src/plugins/qmldesigner/components/integration/designdocumentview.h2
-rw-r--r--src/plugins/qmldesigner/components/integration/utilitypanelcontroller.cpp4
-rw-r--r--src/plugins/qmldesigner/components/itemlibrary/customfilesystemmodel.cpp8
-rw-r--r--src/plugins/qmldesigner/components/itemlibrary/itemlibraryitem.cpp4
-rw-r--r--src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp12
-rw-r--r--src/plugins/qmldesigner/components/itemlibrary/itemlibraryresourceview.cpp10
-rw-r--r--src/plugins/qmldesigner/components/itemlibrary/itemlibrarysectionmodel.cpp2
-rw-r--r--src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.cpp7
-rw-r--r--src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp12
-rw-r--r--src/plugins/qmldesigner/components/navigator/iconcheckboxitemdelegate.cpp2
-rw-r--r--src/plugins/qmldesigner/components/navigator/nameitemdelegate.cpp10
-rw-r--r--src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp10
-rw-r--r--src/plugins/qmldesigner/components/navigator/navigatortreeview.cpp4
-rw-r--r--src/plugins/qmldesigner/components/navigator/navigatorview.cpp6
-rw-r--r--src/plugins/qmldesigner/components/navigator/navigatorwidget.cpp7
-rw-r--r--src/plugins/qmldesigner/components/propertyeditor/fileresourcesmodel.cpp4
-rw-r--r--src/plugins/qmldesigner/components/propertyeditor/gradientmodel.cpp8
-rw-r--r--src/plugins/qmldesigner/components/propertyeditor/propertyeditorcontextobject.cpp10
-rw-r--r--src/plugins/qmldesigner/components/propertyeditor/propertyeditorqmlbackend.cpp20
-rw-r--r--src/plugins/qmldesigner/components/propertyeditor/propertyeditorqmlbackend.h2
-rw-r--r--src/plugins/qmldesigner/components/propertyeditor/propertyeditorvalue.cpp6
-rw-r--r--src/plugins/qmldesigner/components/propertyeditor/propertyeditorview.cpp20
-rw-r--r--src/plugins/qmldesigner/components/propertyeditor/qmlanchorbindingproxy.cpp6
-rw-r--r--src/plugins/qmldesigner/components/stateseditor/stateseditormodel.cpp2
-rw-r--r--src/plugins/qmldesigner/components/stateseditor/stateseditorview.cpp4
-rw-r--r--src/plugins/qmldesigner/components/stateseditor/stateseditorwidget.cpp11
-rw-r--r--src/plugins/qmldesigner/components/texteditor/texteditorview.cpp6
-rw-r--r--src/plugins/qmldesigner/components/texteditor/texteditorwidget.cpp4
-rw-r--r--src/plugins/qmldesigner/componentsplugin/addtabdesigneraction.h12
-rw-r--r--src/plugins/qmldesigner/componentsplugin/addtabtotabviewdialog.h4
-rw-r--r--src/plugins/qmldesigner/componentsplugin/componentsplugin.h6
-rw-r--r--src/plugins/qmldesigner/componentsplugin/entertabdesigneraction.cpp2
-rw-r--r--src/plugins/qmldesigner/componentsplugin/tabviewindexmodel.cpp2
-rw-r--r--src/plugins/qmldesigner/componentsplugin/tabviewindexmodel.h2
-rw-r--r--src/plugins/qmldesigner/designercore/exceptions/exception.cpp4
-rw-r--r--src/plugins/qmldesigner/designercore/filemanager/addarraymembervisitor.cpp6
-rw-r--r--src/plugins/qmldesigner/designercore/filemanager/addarraymembervisitor.h4
-rw-r--r--src/plugins/qmldesigner/designercore/filemanager/addobjectvisitor.h4
-rw-r--r--src/plugins/qmldesigner/designercore/filemanager/addpropertyvisitor.cpp4
-rw-r--r--src/plugins/qmldesigner/designercore/filemanager/addpropertyvisitor.h4
-rw-r--r--src/plugins/qmldesigner/designercore/filemanager/changeimportsvisitor.cpp2
-rw-r--r--src/plugins/qmldesigner/designercore/filemanager/changeobjecttypevisitor.h4
-rw-r--r--src/plugins/qmldesigner/designercore/filemanager/changepropertyvisitor.cpp20
-rw-r--r--src/plugins/qmldesigner/designercore/filemanager/changepropertyvisitor.h4
-rw-r--r--src/plugins/qmldesigner/designercore/filemanager/firstdefinitionfinder.cpp4
-rw-r--r--src/plugins/qmldesigner/designercore/filemanager/moveobjectbeforeobjectvisitor.cpp16
-rw-r--r--src/plugins/qmldesigner/designercore/filemanager/moveobjectbeforeobjectvisitor.h10
-rw-r--r--src/plugins/qmldesigner/designercore/filemanager/moveobjectvisitor.cpp10
-rw-r--r--src/plugins/qmldesigner/designercore/filemanager/moveobjectvisitor.h8
-rw-r--r--src/plugins/qmldesigner/designercore/filemanager/qmlrewriter.cpp32
-rw-r--r--src/plugins/qmldesigner/designercore/filemanager/qmlrewriter.h2
-rw-r--r--src/plugins/qmldesigner/designercore/filemanager/removepropertyvisitor.cpp12
-rw-r--r--src/plugins/qmldesigner/designercore/filemanager/removepropertyvisitor.h4
-rw-r--r--src/plugins/qmldesigner/designercore/filemanager/removeuiobjectmembervisitor.cpp4
-rw-r--r--src/plugins/qmldesigner/designercore/filemanager/removeuiobjectmembervisitor.h16
-rw-r--r--src/plugins/qmldesigner/designercore/include/abstractproperty.h6
-rw-r--r--src/plugins/qmldesigner/designercore/include/abstractview.h10
-rw-r--r--src/plugins/qmldesigner/designercore/include/forwardview.h44
-rw-r--r--src/plugins/qmldesigner/designercore/include/itemlibraryinfo.h2
-rw-r--r--src/plugins/qmldesigner/designercore/include/iwidgetplugin.h2
-rw-r--r--src/plugins/qmldesigner/designercore/include/metainfo.h2
-rw-r--r--src/plugins/qmldesigner/designercore/include/model.h2
-rw-r--r--src/plugins/qmldesigner/designercore/include/modelnode.h8
-rw-r--r--src/plugins/qmldesigner/designercore/include/nodeabstractproperty.h2
-rw-r--r--src/plugins/qmldesigner/designercore/include/nodeanchors.h6
-rw-r--r--src/plugins/qmldesigner/designercore/include/nodeinstanceview.h2
-rw-r--r--src/plugins/qmldesigner/designercore/include/nodelistproperty.h2
-rw-r--r--src/plugins/qmldesigner/designercore/include/nodemetainfo.h2
-rw-r--r--src/plugins/qmldesigner/designercore/include/qmldesignercorelib_global.h10
-rw-r--r--src/plugins/qmldesigner/designercore/include/textmodifier.h2
-rw-r--r--src/plugins/qmldesigner/designercore/instances/nodeinstance.cpp48
-rw-r--r--src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.cpp4
-rw-r--r--src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp6
-rw-r--r--src/plugins/qmldesigner/designercore/instances/puppetcreator.cpp2
-rw-r--r--src/plugins/qmldesigner/designercore/metainfo/itemlibraryinfo.cpp17
-rw-r--r--src/plugins/qmldesigner/designercore/metainfo/metainfo.cpp15
-rw-r--r--src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp40
-rw-r--r--src/plugins/qmldesigner/designercore/model/abstractproperty.cpp22
-rw-r--r--src/plugins/qmldesigner/designercore/model/abstractview.cpp6
-rw-r--r--src/plugins/qmldesigner/designercore/model/basetexteditmodifier.cpp23
-rw-r--r--src/plugins/qmldesigner/designercore/model/bindingproperty.cpp4
-rw-r--r--src/plugins/qmldesigner/designercore/model/componenttextmodifier.cpp4
-rw-r--r--src/plugins/qmldesigner/designercore/model/import.cpp4
-rw-r--r--src/plugins/qmldesigner/designercore/model/internalbindingproperty.cpp2
-rw-r--r--src/plugins/qmldesigner/designercore/model/internalbindingproperty.h6
-rw-r--r--src/plugins/qmldesigner/designercore/model/internalnode.cpp2
-rw-r--r--src/plugins/qmldesigner/designercore/model/internalnode_p.h10
-rw-r--r--src/plugins/qmldesigner/designercore/model/internalnodeabstractproperty.h8
-rw-r--r--src/plugins/qmldesigner/designercore/model/internalnodelistproperty.cpp2
-rw-r--r--src/plugins/qmldesigner/designercore/model/internalnodelistproperty.h20
-rw-r--r--src/plugins/qmldesigner/designercore/model/internalnodeproperty.cpp2
-rw-r--r--src/plugins/qmldesigner/designercore/model/internalnodeproperty.h20
-rw-r--r--src/plugins/qmldesigner/designercore/model/internalproperty.cpp8
-rw-r--r--src/plugins/qmldesigner/designercore/model/internalproperty.h9
-rw-r--r--src/plugins/qmldesigner/designercore/model/internalsignalhandlerproperty.cpp2
-rw-r--r--src/plugins/qmldesigner/designercore/model/internalsignalhandlerproperty.h6
-rw-r--r--src/plugins/qmldesigner/designercore/model/internalvariantproperty.cpp2
-rw-r--r--src/plugins/qmldesigner/designercore/model/internalvariantproperty.h6
-rw-r--r--src/plugins/qmldesigner/designercore/model/model.cpp70
-rw-r--r--src/plugins/qmldesigner/designercore/model/model_p.h19
-rw-r--r--src/plugins/qmldesigner/designercore/model/modelnode.cpp20
-rw-r--r--src/plugins/qmldesigner/designercore/model/modeltotextmerger.cpp3
-rw-r--r--src/plugins/qmldesigner/designercore/model/modeltotextmerger.h2
-rw-r--r--src/plugins/qmldesigner/designercore/model/nodeabstractproperty.cpp4
-rw-r--r--src/plugins/qmldesigner/designercore/model/nodelistproperty.cpp3
-rw-r--r--src/plugins/qmldesigner/designercore/model/nodeproperty.cpp4
-rw-r--r--src/plugins/qmldesigner/designercore/model/plaintexteditmodifier.cpp8
-rw-r--r--src/plugins/qmldesigner/designercore/model/propertycontainer.cpp4
-rw-r--r--src/plugins/qmldesigner/designercore/model/propertynode.cpp4
-rw-r--r--src/plugins/qmldesigner/designercore/model/propertyparser.cpp36
-rw-r--r--src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp6
-rw-r--r--src/plugins/qmldesigner/designercore/model/qmlmodelnodefacade.cpp5
-rw-r--r--src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp1
-rw-r--r--src/plugins/qmldesigner/designercore/model/qmlstate.cpp1
-rw-r--r--src/plugins/qmldesigner/designercore/model/qmltimeline.cpp5
-rw-r--r--src/plugins/qmldesigner/designercore/model/qmltimelinekeyframegroup.cpp7
-rw-r--r--src/plugins/qmldesigner/designercore/model/rewriteaction.cpp4
-rw-r--r--src/plugins/qmldesigner/designercore/model/rewriteaction.h91
-rw-r--r--src/plugins/qmldesigner/designercore/model/rewriteactioncompressor.cpp4
-rw-r--r--src/plugins/qmldesigner/designercore/model/rewriterview.cpp22
-rw-r--r--src/plugins/qmldesigner/designercore/model/signalhandlerproperty.cpp4
-rw-r--r--src/plugins/qmldesigner/designercore/model/textmodifier.cpp4
-rw-r--r--src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp197
-rw-r--r--src/plugins/qmldesigner/designercore/model/texttomodelmerger.h169
-rw-r--r--src/plugins/qmldesigner/designercore/model/variantproperty.cpp3
-rw-r--r--src/plugins/qmldesigner/designercore/model/viewmanager.cpp8
-rw-r--r--src/plugins/qmldesigner/designercore/pluginmanager/widgetpluginmanager.cpp6
-rw-r--r--src/plugins/qmldesigner/designercore/pluginmanager/widgetpluginmanager.h4
-rw-r--r--src/plugins/qmldesigner/designercore/pluginmanager/widgetpluginpath.cpp14
-rw-r--r--src/plugins/qmldesigner/designercore/pluginmanager/widgetpluginpath.h4
-rw-r--r--src/plugins/qmldesigner/designersettings.cpp4
-rw-r--r--src/plugins/qmldesigner/designmodewidget.cpp29
-rw-r--r--src/plugins/qmldesigner/documentmanager.cpp10
-rw-r--r--src/plugins/qmldesigner/documentwarningwidget.cpp6
-rw-r--r--src/plugins/qmldesigner/qmldesignerextension/colortool/colortool.cpp19
-rw-r--r--src/plugins/qmldesigner/qmldesignerextension/connectioneditor/backendmodel.cpp4
-rw-r--r--src/plugins/qmldesigner/qmldesignerextension/connectioneditor/bindingmodel.cpp2
-rw-r--r--src/plugins/qmldesigner/qmldesignerextension/connectioneditor/connectionmodel.cpp8
-rw-r--r--src/plugins/qmldesigner/qmldesignerextension/connectioneditor/connectionview.cpp4
-rw-r--r--src/plugins/qmldesigner/qmldesignerextension/connectioneditor/connectionviewwidget.cpp20
-rw-r--r--src/plugins/qmldesigner/qmldesignerextension/connectioneditor/delegates.cpp34
-rw-r--r--src/plugins/qmldesigner/qmldesignerextension/connectioneditor/dynamicpropertiesmodel.cpp10
-rw-r--r--src/plugins/qmldesigner/qmldesignerextension/pathtool/controlpoint.cpp13
-rw-r--r--src/plugins/qmldesigner/qmldesignerextension/pathtool/cubicsegment.cpp4
-rw-r--r--src/plugins/qmldesigner/qmldesignerextension/pathtool/pathitem.cpp39
-rw-r--r--src/plugins/qmldesigner/qmldesignerextension/pathtool/pathitem.h12
-rw-r--r--src/plugins/qmldesigner/qmldesignerextension/pathtool/pathselectionmanipulator.cpp4
-rw-r--r--src/plugins/qmldesigner/qmldesignerextension/pathtool/pathtool.cpp26
-rw-r--r--src/plugins/qmldesigner/qmldesignerextension/pathtool/pathtoolview.cpp3
-rw-r--r--src/plugins/qmldesigner/qmldesignerextension/sourcetool/sourcetool.cpp22
-rw-r--r--src/plugins/qmldesigner/qmldesignerextension/texttool/textedititem.cpp4
-rw-r--r--src/plugins/qmldesigner/qmldesignerextension/texttool/textedititem.h4
-rw-r--r--src/plugins/qmldesigner/qmldesignerextension/texttool/textedititemwidget.cpp3
-rw-r--r--src/plugins/qmldesigner/qmldesignerextension/texttool/textedititemwidget.h2
-rw-r--r--src/plugins/qmldesigner/qmldesignerextension/texttool/texttool.cpp23
-rw-r--r--src/plugins/qmldesigner/qmldesignerplugin.cpp4
-rw-r--r--src/plugins/qmldesigner/qtquickplugin/qtquickplugin.cpp6
-rw-r--r--src/plugins/qmldesigner/qtquickplugin/qtquickplugin.h6
-rw-r--r--src/plugins/qmldesigner/settingspage.cpp2
-rw-r--r--src/plugins/qmldesigner/shortcutmanager.cpp8
-rw-r--r--src/plugins/qmldesigner/switchsplittabwidget.cpp4
-rw-r--r--src/plugins/qmljseditor/qmljscomponentfromobjectdef.cpp4
-rw-r--r--src/plugins/qmljseditor/qmljseditor.cpp4
-rw-r--r--src/plugins/qmljseditor/qmljseditor.pro2
-rw-r--r--src/plugins/qmljseditor/qmljseditor.qbs2
-rw-r--r--src/plugins/qmljseditor/qmljseditordocument.cpp32
-rw-r--r--src/plugins/qmljseditor/qmljseditorplugin.cpp1
-rw-r--r--src/plugins/qmljseditor/qmljsfindreferences.cpp62
-rw-r--r--src/plugins/qmljseditor/qmljshighlighter.cpp21
-rw-r--r--src/plugins/qmljseditor/qmljsoutlinetreeview.cpp2
-rw-r--r--src/plugins/qmljseditor/qmljspreviewrunner.cpp79
-rw-r--r--src/plugins/qmljseditor/qmljsquickfixes.cpp4
-rw-r--r--src/plugins/qmljseditor/qmljswrapinloader.cpp6
-rw-r--r--src/plugins/qmljstools/qmljslocatordata.cpp19
-rw-r--r--src/plugins/qmljstools/qmljsrefactoringchanges.cpp14
-rw-r--r--src/plugins/qmljstools/qmljssemanticinfo.cpp10
-rw-r--r--src/plugins/qmlprofiler/memoryusagemodel.cpp8
-rw-r--r--src/plugins/qmlprofiler/qmlevent.h10
-rw-r--r--src/plugins/qmlprofiler/qmleventtype.cpp2
-rw-r--r--src/plugins/qmlprofiler/qmleventtype.h2
-rw-r--r--src/plugins/qmlprofiler/qmlprofilerbindingloopsrenderpass.cpp8
-rw-r--r--src/plugins/qmlprofiler/qmlprofilerdetailsrewriter.cpp13
-rw-r--r--src/plugins/qmlprofiler/qmlprofilerdetailsrewriter.h1
-rw-r--r--src/plugins/qmlprofiler/qmlprofilermodelmanager.cpp26
-rw-r--r--src/plugins/qmlprofiler/qmlprofilerruncontrol.cpp1
-rw-r--r--src/plugins/qmlprofiler/qmlprofilertool.cpp18
-rw-r--r--src/plugins/qmlprofiler/qmlprofilertracefile.cpp4
-rw-r--r--src/plugins/qmlprofiler/qmlprofilerviewmanager.cpp31
-rw-r--r--src/plugins/qmlprofiler/qmlprofilerviewmanager.h5
-rw-r--r--src/plugins/qmlprofiler/tests/memoryusagemodel_test.cpp14
-rw-r--r--src/plugins/qmlprofiler/tests/qmlprofilerattachdialog_test.cpp9
-rw-r--r--src/plugins/qmlprofiler/tests/qmlprofilerdetailsrewriter_test.cpp20
-rw-r--r--src/plugins/qmlprofiler/tests/qmlprofilertool_test.cpp7
-rw-r--r--src/plugins/qmlprojectmanager/qmlproject.cpp13
-rw-r--r--src/plugins/qmlprojectmanager/qmlproject.h1
-rw-r--r--src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp3
-rw-r--r--src/plugins/qnx/pathchooserdelegate.cpp103
-rw-r--r--src/plugins/qnx/pathchooserdelegate.h65
-rw-r--r--src/plugins/qnx/qnx.pro2
-rw-r--r--src/plugins/qnx/qnx.qbs2
-rw-r--r--src/plugins/qnx/qnxconfiguration.cpp19
-rw-r--r--src/plugins/qnx/qnxdevicetester.cpp1
-rw-r--r--src/plugins/qnx/qnxutils.cpp7
-rw-r--r--src/plugins/qtsupport/baseqtversion.cpp188
-rw-r--r--src/plugins/qtsupport/baseqtversion.h59
-rw-r--r--src/plugins/qtsupport/qtprojectimporter.cpp5
-rw-r--r--src/plugins/qtsupport/qtsupportplugin.cpp2
-rw-r--r--src/plugins/remotelinux/abstractpackagingstep.cpp2
-rw-r--r--src/plugins/resourceeditor/qrceditor/test/mainwindow.cpp94
-rw-r--r--src/plugins/resourceeditor/qrceditor/test/test.pro7
-rw-r--r--src/plugins/texteditor/codeassist/assistproposaliteminterface.h1
-rw-r--r--src/plugins/texteditor/codeassist/codeassistant.cpp2
-rw-r--r--src/plugins/valgrind/callgrind/callgrindcontroller.cpp1
-rw-r--r--src/plugins/valgrind/callgrindengine.cpp4
-rw-r--r--src/plugins/valgrind/callgrindtool.cpp93
-rw-r--r--src/plugins/valgrind/callgrindvisualisation.cpp72
-rw-r--r--src/plugins/valgrind/callgrindvisualisation.h6
-rw-r--r--src/plugins/valgrind/memchecktool.cpp108
-rw-r--r--src/plugins/valgrind/valgrindengine.cpp4
-rw-r--r--src/plugins/valgrind/valgrindrunner.cpp6
-rw-r--r--src/plugins/valgrind/valgrindrunner.h1
-rw-r--r--src/plugins/vcsbase/commonsettingspage.cpp14
-rw-r--r--src/plugins/vcsbase/nicknamedialog.cpp8
-rw-r--r--src/plugins/vcsbase/submiteditorwidget.cpp12
-rw-r--r--src/plugins/vcsbase/vcsbaseclient.cpp48
-rw-r--r--src/plugins/vcsbase/vcsbaseclientsettings.cpp14
-rw-r--r--src/plugins/vcsbase/vcsbaseeditor.cpp7
-rw-r--r--src/plugins/vcsbase/vcscommand.cpp24
-rw-r--r--src/plugins/vcsbase/vcsoutputwindow.cpp23
-rw-r--r--src/plugins/vcsbase/vcsprojectcache.cpp10
-rw-r--r--src/plugins/vcsbase/wizard/vcscommandpage.cpp10
-rw-r--r--src/plugins/winrt/winrtpackagedeploymentstep.cpp2
-rw-r--r--src/shared/clang/clang_installation.pri31
-rw-r--r--src/shared/help/topicchooser.cpp4
-rw-r--r--src/shared/help/topicchooser.ui50
-rw-r--r--src/shared/modeltest/modeltest.cpp2
-rw-r--r--src/shared/modeltest/modeltest.h4
-rw-r--r--src/shared/registryaccess/registryaccess.cpp8
-rw-r--r--src/shared/registryaccess/registryaccess.h2
-rw-r--r--src/tools/buildoutputparser/buildoutputparser.pro2
-rw-r--r--src/tools/buildoutputparser/buildoutputparser.qbs2
-rw-r--r--src/tools/buildoutputparser/main.cpp10
-rw-r--r--src/tools/buildoutputparser/outputprocessor.cpp6
-rw-r--r--src/tools/buildoutputparser/outputprocessor.h6
-rw-r--r--src/tools/clangbackend/source/clangbackend_global.h5
-rw-r--r--src/tools/clangbackend/source/clangcodecompleteresults.cpp12
-rw-r--r--src/tools/clangbackend/source/clangcodecompleteresults.h2
-rw-r--r--src/tools/clangbackend/source/clangcompletecodejob.cpp12
-rw-r--r--src/tools/clangbackend/source/clangcompletecodejob.h10
-rw-r--r--src/tools/clangbackend/source/clangjobrequest.cpp3
-rw-r--r--src/tools/clangbackend/source/clangtooltipinfocollector.cpp26
-rw-r--r--src/tools/clangbackend/source/clangtooltipinfocollector.h3
-rw-r--r--src/tools/clangbackend/source/clangtranslationunit.cpp18
-rw-r--r--src/tools/clangbackend/source/clangtranslationunit.h10
-rw-r--r--src/tools/clangbackend/source/codecompleter.cpp67
-rw-r--r--src/tools/clangbackend/source/codecompleter.h10
-rw-r--r--src/tools/clangbackend/source/codecompletionsextractor.cpp39
-rw-r--r--src/tools/clangbackend/source/codecompletionsextractor.h5
-rw-r--r--src/tools/clangbackend/source/fulltokeninfo.cpp27
-rw-r--r--src/tools/clangpchmanagerbackend/source/pchmanagerserver.cpp13
-rw-r--r--src/tools/clangpchmanagerbackend/source/pchmanagerserver.h2
-rw-r--r--src/tools/clangrefactoringbackend/source/clangrefactoringbackend-source.pri6
-rw-r--r--src/tools/clangrefactoringbackend/source/collectsymbolsaction.h4
-rw-r--r--src/tools/clangrefactoringbackend/source/projectpartqueue.cpp147
-rw-r--r--src/tools/clangrefactoringbackend/source/projectpartqueue.h46
-rw-r--r--src/tools/clangrefactoringbackend/source/refactoringserver.cpp13
-rw-r--r--src/tools/clangrefactoringbackend/source/refactoringserver.h5
-rw-r--r--src/tools/clangrefactoringbackend/source/symbolindexer.cpp2
-rw-r--r--src/tools/clangrefactoringbackend/source/symbolindexer.h2
-rw-r--r--src/tools/clangrefactoringbackend/source/symbolindexing.cpp5
-rw-r--r--src/tools/clangrefactoringbackend/source/symbolindexing.h2
-rw-r--r--src/tools/clangrefactoringbackend/source/symbolindexinginterface.h2
-rw-r--r--src/tools/iconlister/iconlister.cpp64
-rw-r--r--src/tools/iconlister/iconlister.pro2
-rw-r--r--src/tools/icons/qtcreatoricons.svg40
-rw-r--r--src/tools/qml2puppet/qml2puppet.qbs2
-rw-r--r--src/tools/sdktool/addabiflavor.cpp174
-rw-r--r--src/tools/sdktool/addabiflavor.h58
-rw-r--r--src/tools/sdktool/addcmakeoperation.cpp6
-rw-r--r--src/tools/sdktool/addkitoperation.cpp2
-rw-r--r--src/tools/sdktool/addqtoperation.cpp44
-rw-r--r--src/tools/sdktool/addqtoperation.h4
-rw-r--r--src/tools/sdktool/addtoolchainoperation.cpp6
-rw-r--r--src/tools/sdktool/main.cpp65
-rw-r--r--src/tools/sdktool/rmcmakeoperation.cpp13
-rw-r--r--src/tools/sdktool/rmkitoperation.cpp2
-rw-r--r--src/tools/sdktool/rmqtoperation.cpp5
-rw-r--r--src/tools/sdktool/sdktool.pro2
-rw-r--r--src/tools/sdktool/sdktool.qbs1
-rw-r--r--src/tools/sdktool/settings.cpp2
-rw-r--r--src/tools/tools.pro4
-rw-r--r--tests/auto/tracing/timelinemodel/tst_timelinemodel.cpp11
-rw-r--r--tests/system/suite_tools/tst_git_clone/test.py9
-rw-r--r--tests/unit/mockup/projectexplorer/abi.h68
-rw-r--r--tests/unit/mockup/projectexplorer/project.h4
-rw-r--r--tests/unit/unittest/clangcodemodelserver-test.cpp4
-rw-r--r--tests/unit/unittest/clientserverinprocess-test.cpp4
-rw-r--r--tests/unit/unittest/codecompleter-test.cpp35
-rw-r--r--tests/unit/unittest/codecompletionsextractor-test.cpp198
-rw-r--r--tests/unit/unittest/data/symbolindexing_main1.cpp5
-rw-r--r--tests/unit/unittest/generatedfiles-test.cpp72
-rw-r--r--tests/unit/unittest/gtest-creator-printing.cpp31
-rw-r--r--tests/unit/unittest/gtest-creator-printing.h6
-rw-r--r--tests/unit/unittest/mockpchmanagerserver.h14
-rw-r--r--tests/unit/unittest/mockrefactoringserver.h16
-rw-r--r--tests/unit/unittest/mocksymbolindexing.h2
-rw-r--r--tests/unit/unittest/pchmanagerclient-test.cpp3
-rw-r--r--tests/unit/unittest/pchmanagerclientserverinprocess-test.cpp30
-rw-r--r--tests/unit/unittest/pchmanagerserver-test.cpp40
-rw-r--r--tests/unit/unittest/projectpartqueue-test.cpp104
-rw-r--r--tests/unit/unittest/projectupdater-test.cpp102
-rw-r--r--tests/unit/unittest/readandwritemessageblock-test.cpp8
-rw-r--r--tests/unit/unittest/refactoringclientserverinprocess-test.cpp28
-rw-r--r--tests/unit/unittest/refactoringengine-test.cpp2
-rw-r--r--tests/unit/unittest/refactoringserver-test.cpp22
-rw-r--r--tests/unit/unittest/symbolindexing-test.cpp14
-rw-r--r--tests/unit/unittest/symbolscollector-test.cpp2
-rw-r--r--tests/unit/unittest/tokenprocessor-test.cpp15
-rw-r--r--tests/unit/unittest/unittest.pro4
1395 files changed, 13484 insertions, 13757 deletions
diff --git a/README.md b/README.md
index cb49a7e024..744f78dd11 100644
--- a/README.md
+++ b/README.md
@@ -18,11 +18,11 @@ Prerequisites:
* Qt WebEngine module for QtWebEngine based help viewer
* On Windows:
* ActiveState Active Perl
- * MinGW with g++ 4.9 or Visual Studio 2015 or later
+ * MinGW with g++ 5.3 or Visual Studio 2015 or later
* jom
* Python 3.5 or later (optional, needed for the python enabled debug helper)
* On Mac OS X: latest Xcode
-* On Linux: g++ 4.9 or later
+* On Linux: g++ 5.3 or later
* LLVM/Clang 6.0.0 or later (optional, needed for the Clang Code Model, see the
section "Get LLVM/Clang for the Clang Code Model")
* CMake (only for manual builds of LLVM/Clang)
diff --git a/dist/changes-4.8.0.md b/dist/changes-4.8.0.md
new file mode 100644
index 0000000000..0598b4fb01
--- /dev/null
+++ b/dist/changes-4.8.0.md
@@ -0,0 +1,64 @@
+Qt Creator version 4.8 contains bug fixes and new features.
+
+The most important changes are listed in this document. For a complete
+list of changes, see the Git log for the Qt Creator sources that
+you can check out from the public Git repository. For example:
+
+ git clone git://code.qt.io/qt-creator/qt-creator.git
+ git log --cherry-pick --pretty=oneline origin/4.7..v4.8.0
+
+General
+
+* Added `HostOs:PathListSeparator` and `HostOs:ExecutableSuffix` Qt Creator
+ variables
+* Added `Create Folder` to context menu of path choosers if the path does not
+ exist
+
+Editing
+
+* Made it possible to change default editors in MIME type settings
+
+Help
+
+All Projects
+
+* Added option for parallel jobs to `make` step, which is enabled by default
+ if `MAKEFLAGS` are not set (QTCREATORBUG-18414)
+* Improved handling of relative file paths for custom error parsers
+ (QTCREATORBUG-20605)
+* Fixed that `make` step required C++ tool chain
+
+QMake Projects
+
+C++ Support
+
+QML Support
+
+* Fixed indentation in object literals with ternary operator (QTCREATORBUG-7103)
+* Fixed that symbols from closed projects were still shown in Locator
+ (QTCREATORBUG-13459)
+
+Python Support
+
+Debugging
+
+Clang Static Analyzer
+
+QML Profiler
+
+Version Control Systems
+
+* Git
+ * Improved behavior if no merge tool is configured
+
+Image Viewer
+
+Test Integration
+
+Platform Specific
+
+Windows
+
+Android
+
+Credits for these changes go to:
diff --git a/docs.pri b/docs.pri
index 2a2993e6cb..3f37d7f4e7 100644
--- a/docs.pri
+++ b/docs.pri
@@ -23,7 +23,18 @@ qtcdocsdir.name = QTC_DOCS_DIR
qtcdocsdir.value = $$IDE_SOURCE_TREE/doc
qtccopyrightyear.name = QTCREATOR_COPYRIGHT_YEAR
qtccopyrightyear.value = $$QTCREATOR_COPYRIGHT_YEAR
-QDOC_ENV += qtcname qtcid qtccasedid qtcver qtcvertag qtdocs qdocindex qtcdocsdir qtccopyrightyear
+qtcsourcedir.name = IDE_SOURCE_TREE
+qtcsourcedir.value = $$IDE_SOURCE_TREE
+QDOC_ENV += qtcname \
+ qtcid \
+ qtccasedid \
+ qtcver \
+ qtcvertag \
+ qtdocs \
+ qdocindex \
+ qtcdocsdir \
+ qtccopyrightyear \
+ qtcsourcedir
DOC_INDEX_PATHS += $$IDE_BUILD_TREE/doc
DOC_HTML_INSTALLDIR = $$INSTALL_DOC_PATH
diff --git a/qbs/modules/clang_defines/clang_defines.qbs b/qbs/modules/clang_defines/clang_defines.qbs
new file mode 100644
index 0000000000..361941c2c9
--- /dev/null
+++ b/qbs/modules/clang_defines/clang_defines.qbs
@@ -0,0 +1,18 @@
+import qbs
+import qbs.FileInfo
+
+Module {
+ Depends { name: "cpp" }
+ Depends { name: "libclang"; required: false }
+
+ cpp.defines: libclang.present ? [
+ 'CLANG_VERSION="' + libclang.llvmVersion + '"',
+ 'CLANG_RESOURCE_DIR="' + FileInfo.joinPaths(libclang.llvmLibDir, "clang",
+ libclang.llvmVersion, "include") + '"',
+ 'CLANG_BINDIR="' + libclang.llvmBinDir + '"',
+ ] : [
+ 'CLANG_VERSION=""',
+ 'CLANG_RESOURCE_DIR=""',
+ 'CLANG_BINDIR=""',
+ ]
+}
diff --git a/qbs/modules/libclang/libclang.qbs b/qbs/modules/libclang/libclang.qbs
index bb427bc4f8..b13ba888ff 100644
--- a/qbs/modules/libclang/libclang.qbs
+++ b/qbs/modules/libclang/libclang.qbs
@@ -55,9 +55,7 @@ Module {
return incl != llvmIncludeDir;
})
property stringList llvmToolingCxxFlags: clangProbe.llvmToolingCxxFlags
- property bool toolingEnabled: !Environment.getEnv("QTC_NO_CLANG_LIBTOOLING")
- && Utilities.versionCompare(llvmVersion, "6") > 0
- && Utilities.versionCompare(llvmVersion, "7") < 0
+ property bool toolingEnabled: Environment.getEnv("QTC_ENABLE_CLANG_LIBTOOLING")
validate: {
if (!clangProbe.found) {
diff --git a/qbs/modules/qtc/qtc.qbs b/qbs/modules/qtc/qtc.qbs
index 9d739f926b..976dbf7cb3 100644
--- a/qbs/modules/qtc/qtc.qbs
+++ b/qbs/modules/qtc/qtc.qbs
@@ -4,16 +4,16 @@ import qbs.FileInfo
import "qtc.js" as HelperFunctions
Module {
- property string qtcreator_display_version: '4.7.1'
+ property string qtcreator_display_version: '4.8.0-beta1'
property string ide_version_major: '4'
property string ide_version_minor: '7'
- property string ide_version_release: '1'
+ property string ide_version_release: '82'
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: '7'
- property string ide_compat_version_release: '0'
+ property string ide_compat_version_release: '82'
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 6a65bf602c..15f544ff4d 100644
--- a/qtcreator.pri
+++ b/qtcreator.pri
@@ -1,12 +1,12 @@
!isEmpty(QTCREATOR_PRI_INCLUDED):error("qtcreator.pri already included")
QTCREATOR_PRI_INCLUDED = 1
-QTCREATOR_VERSION = 4.7.1
-QTCREATOR_COMPAT_VERSION = 4.7.0
+QTCREATOR_VERSION = 4.7.82
+QTCREATOR_COMPAT_VERSION = 4.7.82
VERSION = $$QTCREATOR_VERSION
-QTCREATOR_DISPLAY_VERSION = 4.7.1
+QTCREATOR_DISPLAY_VERSION = 4.8.0-beta1
QTCREATOR_COPYRIGHT_YEAR = 2018
-BINARY_ARTIFACTS_BRANCH = 4.7
+BINARY_ARTIFACTS_BRANCH = master
isEmpty(IDE_DISPLAY_NAME): IDE_DISPLAY_NAME = Qt Creator
isEmpty(IDE_ID): IDE_ID = qtcreator
diff --git a/qtcreator.pro b/qtcreator.pro
index c4324555ba..214740353a 100644
--- a/qtcreator.pro
+++ b/qtcreator.pro
@@ -19,7 +19,7 @@ DISTFILES += dist/copyright_template.txt \
README.md \
$$files(dist/changes-*) \
qtcreator.qbs \
- qbs/pluginjson/pluginjson.qbs \
+ $$files(qbs/*, true) \
$$files(scripts/*.py) \
$$files(scripts/*.sh) \
$$files(scripts/*.pl)
diff --git a/scripts/deployqt.py b/scripts/deployqt.py
index 35c664b37e..4efe99761c 100755
--- a/scripts/deployqt.py
+++ b/scripts/deployqt.py
@@ -220,16 +220,22 @@ def deploy_libclang(install_dir, llvm_install_dir, chrpath_bin):
os.path.join(install_dir, 'bin')))
deployinfo.append((os.path.join(llvm_install_dir, 'bin', 'clang.exe'),
clangbindirtarget))
+ deployinfo.append((os.path.join(llvm_install_dir, 'bin', 'clang-cl.exe'),
+ clangbindirtarget))
+ deployinfo.append((os.path.join(llvm_install_dir, 'bin', 'clangd.exe'),
+ clangbindirtarget))
resourcetarget = os.path.join(clanglibdirtarget, 'clang')
else:
libsources = glob(os.path.join(llvm_install_dir, 'lib', 'libclang.so*'))
for libsource in libsources:
deployinfo.append((libsource, os.path.join(install_dir, 'lib', 'qtcreator')))
clangbinary = os.path.join(llvm_install_dir, 'bin', 'clang')
+ clangdbinary = os.path.join(llvm_install_dir, 'bin', 'clangd')
clangbinary_targetdir = os.path.join(install_dir, 'libexec', 'qtcreator', 'clang', 'bin')
if not os.path.exists(clangbinary_targetdir):
os.makedirs(clangbinary_targetdir)
deployinfo.append((clangbinary, clangbinary_targetdir))
+ deployinfo.append((clangdbinary, clangbinary_targetdir))
# copy link target if clang is actually a symlink
if os.path.islink(clangbinary):
linktarget = os.readlink(clangbinary)
diff --git a/share/qtcreator/debugger/lldbbridge.py b/share/qtcreator/debugger/lldbbridge.py
index 21a7da4c11..6f8871f977 100644
--- a/share/qtcreator/debugger/lldbbridge.py
+++ b/share/qtcreator/debugger/lldbbridge.py
@@ -1505,7 +1505,7 @@ class Dumper(DumperBase):
self.reportResult('', args)
def executeNextI(self, args):
- self.currentThread().StepInstruction(lldb.eOnlyThisThread)
+ self.currentThread().StepInstruction(True)
self.reportResult('', args)
def executeStep(self, args):
@@ -1527,7 +1527,7 @@ class Dumper(DumperBase):
self.reportResult('', args)
def executeStepI(self, args):
- self.currentThread().StepInstruction(lldb.eOnlyThisThread)
+ self.currentThread().StepInstruction(False)
self.reportResult('', args)
def executeStepOut(self, args = {}):
diff --git a/share/qtcreator/qml/qmlpuppet/commands/changeauxiliarycommand.cpp b/share/qtcreator/qml/qmlpuppet/commands/changeauxiliarycommand.cpp
index 9a99d45420..7f67b2112d 100644
--- a/share/qtcreator/qml/qmlpuppet/commands/changeauxiliarycommand.cpp
+++ b/share/qtcreator/qml/qmlpuppet/commands/changeauxiliarycommand.cpp
@@ -29,9 +29,7 @@
namespace QmlDesigner {
-ChangeAuxiliaryCommand::ChangeAuxiliaryCommand()
-{
-}
+ChangeAuxiliaryCommand::ChangeAuxiliaryCommand() = default;
ChangeAuxiliaryCommand::ChangeAuxiliaryCommand(const QVector<PropertyValueContainer> &auxiliaryChangeVector)
: m_auxiliaryChangeVector (auxiliaryChangeVector)
diff --git a/share/qtcreator/qml/qmlpuppet/commands/changebindingscommand.cpp b/share/qtcreator/qml/qmlpuppet/commands/changebindingscommand.cpp
index 940bb8ef35..1846b260b2 100644
--- a/share/qtcreator/qml/qmlpuppet/commands/changebindingscommand.cpp
+++ b/share/qtcreator/qml/qmlpuppet/commands/changebindingscommand.cpp
@@ -29,9 +29,7 @@
namespace QmlDesigner {
-ChangeBindingsCommand::ChangeBindingsCommand()
-{
-}
+ChangeBindingsCommand::ChangeBindingsCommand() = default;
ChangeBindingsCommand::ChangeBindingsCommand(const QVector<PropertyBindingContainer> &bindingChangeVector)
: m_bindingChangeVector (bindingChangeVector)
diff --git a/share/qtcreator/qml/qmlpuppet/commands/changefileurlcommand.cpp b/share/qtcreator/qml/qmlpuppet/commands/changefileurlcommand.cpp
index 012941d39a..d67c07be93 100644
--- a/share/qtcreator/qml/qmlpuppet/commands/changefileurlcommand.cpp
+++ b/share/qtcreator/qml/qmlpuppet/commands/changefileurlcommand.cpp
@@ -30,9 +30,7 @@
namespace QmlDesigner {
-ChangeFileUrlCommand::ChangeFileUrlCommand()
-{
-}
+ChangeFileUrlCommand::ChangeFileUrlCommand() = default;
ChangeFileUrlCommand::ChangeFileUrlCommand(const QUrl &fileUrl)
: m_fileUrl(fileUrl)
diff --git a/share/qtcreator/qml/qmlpuppet/commands/changeidscommand.cpp b/share/qtcreator/qml/qmlpuppet/commands/changeidscommand.cpp
index cbe2282278..a0a41df654 100644
--- a/share/qtcreator/qml/qmlpuppet/commands/changeidscommand.cpp
+++ b/share/qtcreator/qml/qmlpuppet/commands/changeidscommand.cpp
@@ -29,9 +29,7 @@
namespace QmlDesigner {
-ChangeIdsCommand::ChangeIdsCommand()
-{
-}
+ChangeIdsCommand::ChangeIdsCommand() = default;
ChangeIdsCommand::ChangeIdsCommand(const QVector<IdContainer> &idVector)
: m_idVector(idVector)
diff --git a/share/qtcreator/qml/qmlpuppet/commands/changenodesourcecommand.cpp b/share/qtcreator/qml/qmlpuppet/commands/changenodesourcecommand.cpp
index 271fbef1b9..be0cd34ca1 100644
--- a/share/qtcreator/qml/qmlpuppet/commands/changenodesourcecommand.cpp
+++ b/share/qtcreator/qml/qmlpuppet/commands/changenodesourcecommand.cpp
@@ -30,9 +30,7 @@
namespace QmlDesigner {
-ChangeNodeSourceCommand::ChangeNodeSourceCommand()
-{
-}
+ChangeNodeSourceCommand::ChangeNodeSourceCommand() = default;
ChangeNodeSourceCommand::ChangeNodeSourceCommand(qint32 newInstanceId, const QString &newNodeSource)
: m_instanceId(newInstanceId), m_nodeSource(newNodeSource)
diff --git a/share/qtcreator/qml/qmlpuppet/commands/changevaluescommand.cpp b/share/qtcreator/qml/qmlpuppet/commands/changevaluescommand.cpp
index 5f11eca87a..f8b2604e48 100644
--- a/share/qtcreator/qml/qmlpuppet/commands/changevaluescommand.cpp
+++ b/share/qtcreator/qml/qmlpuppet/commands/changevaluescommand.cpp
@@ -29,9 +29,7 @@
namespace QmlDesigner {
-ChangeValuesCommand::ChangeValuesCommand()
-{
-}
+ChangeValuesCommand::ChangeValuesCommand() = default;
ChangeValuesCommand::ChangeValuesCommand(const QVector<PropertyValueContainer> &valueChangeVector)
: m_valueChangeVector (valueChangeVector)
diff --git a/share/qtcreator/qml/qmlpuppet/commands/clearscenecommand.cpp b/share/qtcreator/qml/qmlpuppet/commands/clearscenecommand.cpp
index c4dc3863f3..349a93ad6a 100644
--- a/share/qtcreator/qml/qmlpuppet/commands/clearscenecommand.cpp
+++ b/share/qtcreator/qml/qmlpuppet/commands/clearscenecommand.cpp
@@ -29,9 +29,7 @@
namespace QmlDesigner {
-ClearSceneCommand::ClearSceneCommand()
-{
-}
+ClearSceneCommand::ClearSceneCommand() = default;
QDataStream &operator<<(QDataStream &out, const ClearSceneCommand &/*command*/)
{
diff --git a/share/qtcreator/qml/qmlpuppet/commands/completecomponentcommand.cpp b/share/qtcreator/qml/qmlpuppet/commands/completecomponentcommand.cpp
index 3012bee180..bbe8f30557 100644
--- a/share/qtcreator/qml/qmlpuppet/commands/completecomponentcommand.cpp
+++ b/share/qtcreator/qml/qmlpuppet/commands/completecomponentcommand.cpp
@@ -30,9 +30,7 @@
namespace QmlDesigner {
-CompleteComponentCommand::CompleteComponentCommand()
-{
-}
+CompleteComponentCommand::CompleteComponentCommand() = default;
CompleteComponentCommand::CompleteComponentCommand(const QVector<qint32> &container)
: m_instanceVector(container)
diff --git a/share/qtcreator/qml/qmlpuppet/commands/componentcompletedcommand.cpp b/share/qtcreator/qml/qmlpuppet/commands/componentcompletedcommand.cpp
index 38f5d53c9a..87f880cb2b 100644
--- a/share/qtcreator/qml/qmlpuppet/commands/componentcompletedcommand.cpp
+++ b/share/qtcreator/qml/qmlpuppet/commands/componentcompletedcommand.cpp
@@ -32,9 +32,7 @@
namespace QmlDesigner {
-ComponentCompletedCommand::ComponentCompletedCommand()
-{
-}
+ComponentCompletedCommand::ComponentCompletedCommand() = default;
ComponentCompletedCommand::ComponentCompletedCommand(const QVector<qint32> &container)
: m_instanceVector(container)
diff --git a/share/qtcreator/qml/qmlpuppet/commands/createinstancescommand.cpp b/share/qtcreator/qml/qmlpuppet/commands/createinstancescommand.cpp
index 1efcdf9a06..58dd93153b 100644
--- a/share/qtcreator/qml/qmlpuppet/commands/createinstancescommand.cpp
+++ b/share/qtcreator/qml/qmlpuppet/commands/createinstancescommand.cpp
@@ -30,9 +30,7 @@
namespace QmlDesigner {
-CreateInstancesCommand::CreateInstancesCommand()
-{
-}
+CreateInstancesCommand::CreateInstancesCommand() = default;
CreateInstancesCommand::CreateInstancesCommand(const QVector<InstanceContainer> &container)
: m_instanceVector(container)
diff --git a/share/qtcreator/qml/qmlpuppet/commands/createscenecommand.cpp b/share/qtcreator/qml/qmlpuppet/commands/createscenecommand.cpp
index f28f5c278c..71dfb4ee47 100644
--- a/share/qtcreator/qml/qmlpuppet/commands/createscenecommand.cpp
+++ b/share/qtcreator/qml/qmlpuppet/commands/createscenecommand.cpp
@@ -29,9 +29,7 @@
namespace QmlDesigner {
-CreateSceneCommand::CreateSceneCommand()
-{
-}
+CreateSceneCommand::CreateSceneCommand() = default;
CreateSceneCommand::CreateSceneCommand(const QVector<InstanceContainer> &instanceContainer,
const QVector<ReparentContainer> &reparentContainer,
diff --git a/share/qtcreator/qml/qmlpuppet/commands/debugoutputcommand.cpp b/share/qtcreator/qml/qmlpuppet/commands/debugoutputcommand.cpp
index 70c824fd02..f52501ad9d 100644
--- a/share/qtcreator/qml/qmlpuppet/commands/debugoutputcommand.cpp
+++ b/share/qtcreator/qml/qmlpuppet/commands/debugoutputcommand.cpp
@@ -29,9 +29,7 @@
namespace QmlDesigner {
-DebugOutputCommand::DebugOutputCommand()
-{
-}
+DebugOutputCommand::DebugOutputCommand() = default;
DebugOutputCommand::DebugOutputCommand(const QString &text, DebugOutputCommand::Type type, const QVector<qint32> &instanceIds)
: m_instanceIds(instanceIds)
diff --git a/share/qtcreator/qml/qmlpuppet/commands/endpuppetcommand.cpp b/share/qtcreator/qml/qmlpuppet/commands/endpuppetcommand.cpp
index 0a2c591be3..8fdfd9412c 100644
--- a/share/qtcreator/qml/qmlpuppet/commands/endpuppetcommand.cpp
+++ b/share/qtcreator/qml/qmlpuppet/commands/endpuppetcommand.cpp
@@ -29,9 +29,7 @@
namespace QmlDesigner {
-EndPuppetCommand::EndPuppetCommand()
-{
-}
+EndPuppetCommand::EndPuppetCommand() = default;
QDataStream &operator<<(QDataStream &out, const EndPuppetCommand &/*command*/)
{
diff --git a/share/qtcreator/qml/qmlpuppet/commands/informationchangedcommand.cpp b/share/qtcreator/qml/qmlpuppet/commands/informationchangedcommand.cpp
index 82521f223a..0c846a7ed3 100644
--- a/share/qtcreator/qml/qmlpuppet/commands/informationchangedcommand.cpp
+++ b/share/qtcreator/qml/qmlpuppet/commands/informationchangedcommand.cpp
@@ -34,9 +34,7 @@
namespace QmlDesigner {
-InformationChangedCommand::InformationChangedCommand()
-{
-}
+InformationChangedCommand::InformationChangedCommand() = default;
InformationChangedCommand::InformationChangedCommand(const QVector<InformationContainer> &informationVector)
: m_informationVector(informationVector)
diff --git a/share/qtcreator/qml/qmlpuppet/commands/pixmapchangedcommand.cpp b/share/qtcreator/qml/qmlpuppet/commands/pixmapchangedcommand.cpp
index e5ea2d3298..fd7887b160 100644
--- a/share/qtcreator/qml/qmlpuppet/commands/pixmapchangedcommand.cpp
+++ b/share/qtcreator/qml/qmlpuppet/commands/pixmapchangedcommand.cpp
@@ -33,9 +33,7 @@
namespace QmlDesigner {
-PixmapChangedCommand::PixmapChangedCommand()
-{
-}
+PixmapChangedCommand::PixmapChangedCommand() = default;
PixmapChangedCommand::PixmapChangedCommand(const QVector<ImageContainer> &imageVector)
: m_imageVector(imageVector)
diff --git a/share/qtcreator/qml/qmlpuppet/commands/puppetalivecommand.cpp b/share/qtcreator/qml/qmlpuppet/commands/puppetalivecommand.cpp
index 0f63fd99b1..1690e3a5b8 100644
--- a/share/qtcreator/qml/qmlpuppet/commands/puppetalivecommand.cpp
+++ b/share/qtcreator/qml/qmlpuppet/commands/puppetalivecommand.cpp
@@ -27,9 +27,7 @@
namespace QmlDesigner {
-PuppetAliveCommand::PuppetAliveCommand()
-{
-}
+PuppetAliveCommand::PuppetAliveCommand() = default;
QDataStream &operator<<(QDataStream &out, const PuppetAliveCommand &/*command*/)
{
diff --git a/share/qtcreator/qml/qmlpuppet/commands/removeinstancescommand.cpp b/share/qtcreator/qml/qmlpuppet/commands/removeinstancescommand.cpp
index 714aef5a91..2706344a61 100644
--- a/share/qtcreator/qml/qmlpuppet/commands/removeinstancescommand.cpp
+++ b/share/qtcreator/qml/qmlpuppet/commands/removeinstancescommand.cpp
@@ -30,9 +30,7 @@
namespace QmlDesigner {
-RemoveInstancesCommand::RemoveInstancesCommand()
-{
-}
+RemoveInstancesCommand::RemoveInstancesCommand() = default;
RemoveInstancesCommand::RemoveInstancesCommand(const QVector<qint32> &idVector)
: m_instanceIdVector(idVector)
diff --git a/share/qtcreator/qml/qmlpuppet/commands/removepropertiescommand.cpp b/share/qtcreator/qml/qmlpuppet/commands/removepropertiescommand.cpp
index 57fa40819c..0a5735f0fe 100644
--- a/share/qtcreator/qml/qmlpuppet/commands/removepropertiescommand.cpp
+++ b/share/qtcreator/qml/qmlpuppet/commands/removepropertiescommand.cpp
@@ -29,9 +29,7 @@
namespace QmlDesigner {
-RemovePropertiesCommand::RemovePropertiesCommand()
-{
-}
+RemovePropertiesCommand::RemovePropertiesCommand() = default;
RemovePropertiesCommand::RemovePropertiesCommand(const QVector<PropertyAbstractContainer> &properties)
: m_properties(properties)
diff --git a/share/qtcreator/qml/qmlpuppet/commands/removesharedmemorycommand.cpp b/share/qtcreator/qml/qmlpuppet/commands/removesharedmemorycommand.cpp
index 93c355337f..fe9b8f1f2b 100644
--- a/share/qtcreator/qml/qmlpuppet/commands/removesharedmemorycommand.cpp
+++ b/share/qtcreator/qml/qmlpuppet/commands/removesharedmemorycommand.cpp
@@ -30,9 +30,7 @@
namespace QmlDesigner {
-RemoveSharedMemoryCommand::RemoveSharedMemoryCommand()
-{
-}
+RemoveSharedMemoryCommand::RemoveSharedMemoryCommand() = default;
RemoveSharedMemoryCommand::RemoveSharedMemoryCommand(const QString &typeName, const QVector<qint32> &keyNumberVector)
: m_typeName(typeName),
diff --git a/share/qtcreator/qml/qmlpuppet/commands/reparentinstancescommand.cpp b/share/qtcreator/qml/qmlpuppet/commands/reparentinstancescommand.cpp
index f7a029879d..7491975ef2 100644
--- a/share/qtcreator/qml/qmlpuppet/commands/reparentinstancescommand.cpp
+++ b/share/qtcreator/qml/qmlpuppet/commands/reparentinstancescommand.cpp
@@ -30,9 +30,7 @@
namespace QmlDesigner {
-ReparentInstancesCommand::ReparentInstancesCommand()
-{
-}
+ReparentInstancesCommand::ReparentInstancesCommand() = default;
ReparentInstancesCommand::ReparentInstancesCommand(const QVector<ReparentContainer> &container)
: m_reparentInstanceVector(container)
diff --git a/share/qtcreator/qml/qmlpuppet/commands/statepreviewimagechangedcommand.cpp b/share/qtcreator/qml/qmlpuppet/commands/statepreviewimagechangedcommand.cpp
index 1aa49d1652..b2109cde82 100644
--- a/share/qtcreator/qml/qmlpuppet/commands/statepreviewimagechangedcommand.cpp
+++ b/share/qtcreator/qml/qmlpuppet/commands/statepreviewimagechangedcommand.cpp
@@ -31,9 +31,7 @@
namespace QmlDesigner {
-StatePreviewImageChangedCommand::StatePreviewImageChangedCommand()
-{
-}
+StatePreviewImageChangedCommand::StatePreviewImageChangedCommand() = default;
StatePreviewImageChangedCommand::StatePreviewImageChangedCommand(const QVector<ImageContainer> &imageVector)
: m_previewVector(imageVector)
diff --git a/share/qtcreator/qml/qmlpuppet/commands/valueschangedcommand.cpp b/share/qtcreator/qml/qmlpuppet/commands/valueschangedcommand.cpp
index 249cf38432..73e360122a 100644
--- a/share/qtcreator/qml/qmlpuppet/commands/valueschangedcommand.cpp
+++ b/share/qtcreator/qml/qmlpuppet/commands/valueschangedcommand.cpp
@@ -36,7 +36,7 @@
namespace QmlDesigner {
// using cache as a container which deletes sharedmemory pointers at process exit
-typedef QCache<qint32, SharedMemory> GlobalSharedMemoryContainer;
+using GlobalSharedMemoryContainer = QCache<qint32, SharedMemory>;
Q_GLOBAL_STATIC_WITH_ARGS(GlobalSharedMemoryContainer, globalSharedMemoryContainer, (10000))
ValuesChangedCommand::ValuesChangedCommand()
@@ -88,7 +88,7 @@ static SharedMemory *createSharedMemory(qint32 key, int byteCount)
delete sharedMemory;
}
- return 0;
+ return nullptr;
}
QDataStream &operator<<(QDataStream &out, const ValuesChangedCommand &command)
diff --git a/share/qtcreator/qml/qmlpuppet/container/addimportcontainer.cpp b/share/qtcreator/qml/qmlpuppet/container/addimportcontainer.cpp
index 109630ee53..2e605fbae8 100644
--- a/share/qtcreator/qml/qmlpuppet/container/addimportcontainer.cpp
+++ b/share/qtcreator/qml/qmlpuppet/container/addimportcontainer.cpp
@@ -30,9 +30,7 @@
namespace QmlDesigner {
-AddImportContainer::AddImportContainer()
-{
-}
+AddImportContainer::AddImportContainer() = default;
AddImportContainer::AddImportContainer(const QUrl &url, const QString &fileName, const QString &version, const QString &alias, const QStringList &importPathList)
: m_url(url),
diff --git a/share/qtcreator/qml/qmlpuppet/container/imagecontainer.cpp b/share/qtcreator/qml/qmlpuppet/container/imagecontainer.cpp
index 77efa1af5c..798e448108 100644
--- a/share/qtcreator/qml/qmlpuppet/container/imagecontainer.cpp
+++ b/share/qtcreator/qml/qmlpuppet/container/imagecontainer.cpp
@@ -39,7 +39,7 @@
namespace QmlDesigner {
// using cache as a container which deletes sharedmemory pointers at process exit
-typedef QCache<qint32, SharedMemory> GlobalSharedMemoryContainer;
+using GlobalSharedMemoryContainer = QCache<qint32, SharedMemory>;
Q_GLOBAL_STATIC_WITH_ARGS(GlobalSharedMemoryContainer, globalSharedMemoryContainer, (10000))
ImageContainer::ImageContainer()
@@ -91,14 +91,14 @@ static SharedMemory *createSharedMemory(qint32 key, int byteCount)
{
SharedMemory *sharedMemory = (*globalSharedMemoryContainer())[key];
- if (sharedMemory == 0) {
+ if (sharedMemory == nullptr) {
sharedMemory = new SharedMemory(QString(imageKeyTemplateString).arg(key));
bool sharedMemoryIsCreated = sharedMemory->create(byteCount);
if (sharedMemoryIsCreated) {
globalSharedMemoryContainer()->insert(key, sharedMemory);
} else {
delete sharedMemory;
- sharedMemory = 0;
+ sharedMemory = nullptr;
}
} else {
bool sharedMemoryIsAttached = sharedMemory->isAttached();
@@ -117,7 +117,7 @@ static SharedMemory *createSharedMemory(qint32 key, int byteCount)
if (!sharedMemory->isAttached()) {
globalSharedMemoryContainer()->remove(key);
- sharedMemory = 0;
+ sharedMemory = nullptr;
}
}
@@ -165,7 +165,7 @@ QDataStream &operator<<(QDataStream &out, const ImageContainer &container)
} else {
SharedMemory *sharedMemory = createSharedMemory(container.keyNumber(), image.byteCount() + extraDataSize);
- out << qint32(sharedMemory != 0); // send if shared memory is used
+ out << qint32(sharedMemory != nullptr); // send if shared memory is used
if (sharedMemory)
writeSharedMemory(sharedMemory, image);
diff --git a/share/qtcreator/qml/qmlpuppet/container/instancecontainer.cpp b/share/qtcreator/qml/qmlpuppet/container/instancecontainer.cpp
index 8562f7bc86..72056e8852 100644
--- a/share/qtcreator/qml/qmlpuppet/container/instancecontainer.cpp
+++ b/share/qtcreator/qml/qmlpuppet/container/instancecontainer.cpp
@@ -40,9 +40,7 @@ static TypeName properDelemitingOfType(const TypeName &typeName)
return convertedTypeName;
}
-InstanceContainer::InstanceContainer()
-{
-}
+InstanceContainer::InstanceContainer() = default;
InstanceContainer::InstanceContainer(qint32 instanceId,
const TypeName &type,
diff --git a/share/qtcreator/qml/qmlpuppet/container/mockuptypecontainer.cpp b/share/qtcreator/qml/qmlpuppet/container/mockuptypecontainer.cpp
index 5c6a299509..6a1d980ad8 100644
--- a/share/qtcreator/qml/qmlpuppet/container/mockuptypecontainer.cpp
+++ b/share/qtcreator/qml/qmlpuppet/container/mockuptypecontainer.cpp
@@ -29,10 +29,7 @@
namespace QmlDesigner {
-QmlDesigner::MockupTypeContainer::MockupTypeContainer()
-{
-
-}
+QmlDesigner::MockupTypeContainer::MockupTypeContainer() = default;
QmlDesigner::MockupTypeContainer::MockupTypeContainer(const QmlDesigner::TypeName &type,
const QString &importUri,
diff --git a/share/qtcreator/qml/qmlpuppet/container/sharedmemory_qt.cpp b/share/qtcreator/qml/qmlpuppet/container/sharedmemory_qt.cpp
index 929c47f41f..6548d8f513 100644
--- a/share/qtcreator/qml/qmlpuppet/container/sharedmemory_qt.cpp
+++ b/share/qtcreator/qml/qmlpuppet/container/sharedmemory_qt.cpp
@@ -27,18 +27,14 @@
namespace QmlDesigner {
-SharedMemory::SharedMemory()
-{
-}
+SharedMemory::SharedMemory() = default;
SharedMemory::SharedMemory(const QString &key)
: m_sharedMemory(key)
{
}
-SharedMemory::~SharedMemory()
-{
-}
+SharedMemory::~SharedMemory() = default;
void SharedMemory::setKey(const QString &key)
{
diff --git a/share/qtcreator/qml/qmlpuppet/interfaces/nodeinstanceglobal.h b/share/qtcreator/qml/qmlpuppet/interfaces/nodeinstanceglobal.h
index c7ceef01b2..a7f9b3629b 100644
--- a/share/qtcreator/qml/qmlpuppet/interfaces/nodeinstanceglobal.h
+++ b/share/qtcreator/qml/qmlpuppet/interfaces/nodeinstanceglobal.h
@@ -30,8 +30,8 @@
namespace QmlDesigner {
-typedef QByteArray PropertyName;
-typedef QList<PropertyName> PropertyNameList;
-typedef QByteArray TypeName;
+using PropertyName = QByteArray;
+using PropertyNameList = QList<PropertyName>;
+using TypeName = QByteArray;
}
diff --git a/share/qtcreator/qml/qmlpuppet/interfaces/nodeinstanceserverinterface.h b/share/qtcreator/qml/qmlpuppet/interfaces/nodeinstanceserverinterface.h
index 6d742615e5..0fddbde5c0 100644
--- a/share/qtcreator/qml/qmlpuppet/interfaces/nodeinstanceserverinterface.h
+++ b/share/qtcreator/qml/qmlpuppet/interfaces/nodeinstanceserverinterface.h
@@ -59,7 +59,7 @@ public:
TestModus // No preview images and synchronized
};
- explicit NodeInstanceServerInterface(QObject *parent = 0);
+ explicit NodeInstanceServerInterface(QObject *parent = nullptr);
virtual void createInstances(const CreateInstancesCommand &command) = 0;
virtual void changeFileUrl(const ChangeFileUrlCommand &command) = 0;
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/anchorchangesnodeinstance.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/anchorchangesnodeinstance.h
index a9072b6058..d7cc1c582b 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/anchorchangesnodeinstance.h
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/anchorchangesnodeinstance.h
@@ -41,8 +41,8 @@ namespace Internal {
class AnchorChangesNodeInstance : public ObjectNodeInstance
{
public:
- typedef QSharedPointer<AnchorChangesNodeInstance> Pointer;
- typedef QWeakPointer<AnchorChangesNodeInstance> WeakPointer;
+ using Pointer = QSharedPointer<AnchorChangesNodeInstance>;
+ using WeakPointer = QWeakPointer<AnchorChangesNodeInstance>;
static Pointer create(QObject *objectToBeWrapped);
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/behaviornodeinstance.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/behaviornodeinstance.h
index b18f4882cb..9ab68aeb2d 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/behaviornodeinstance.h
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/behaviornodeinstance.h
@@ -33,8 +33,8 @@ namespace Internal {
class BehaviorNodeInstance : public ObjectNodeInstance
{
public:
- typedef QSharedPointer<BehaviorNodeInstance> Pointer;
- typedef QWeakPointer<BehaviorNodeInstance> WeakPointer;
+ using Pointer = QSharedPointer<BehaviorNodeInstance>;
+ using WeakPointer = QWeakPointer<BehaviorNodeInstance>;
BehaviorNodeInstance(QObject *object);
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/componentnodeinstance.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/componentnodeinstance.h
index 24ae2dd5d2..27b115ad77 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/componentnodeinstance.h
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/componentnodeinstance.h
@@ -37,8 +37,9 @@ namespace Internal {
class ComponentNodeInstance : public ObjectNodeInstance
{
public:
- typedef QSharedPointer<ComponentNodeInstance> Pointer;
- typedef QWeakPointer<ComponentNodeInstance> WeakPointer;
+ using Pointer = QSharedPointer<ComponentNodeInstance>;
+ using WeakPointer = QWeakPointer<ComponentNodeInstance>;
+
ComponentNodeInstance(QQmlComponent *component);
static Pointer create(QObject *objectToBeWrapped);
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/dummynodeinstance.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/dummynodeinstance.h
index 6a1711399e..3505b0cc29 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/dummynodeinstance.h
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/dummynodeinstance.h
@@ -35,8 +35,8 @@ namespace Internal {
class DummyNodeInstance : public ObjectNodeInstance
{
public:
- typedef QSharedPointer<DummyNodeInstance> Pointer;
- typedef QWeakPointer<DummyNodeInstance> WeakPointer;
+ using Pointer = QSharedPointer<DummyNodeInstance>;
+ using WeakPointer = QWeakPointer<DummyNodeInstance>;
static Pointer create();
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/instances.pri b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/instances.pri
index a1f143a495..300f80d2b3 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/instances.pri
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/instances.pri
@@ -22,6 +22,7 @@ HEADERS += $$PWD/servernodeinstance.h
HEADERS += $$PWD/anchorchangesnodeinstance.h
HEADERS += $$PWD/positionernodeinstance.h
HEADERS += $$PWD/layoutnodeinstance.h
+HEADERS += $$PWD/qt3dpresentationnodeinstance.h
SOURCES += $$PWD/qt5nodeinstanceserver.cpp
SOURCES += $$PWD/qt5testnodeinstanceserver.cpp
@@ -45,3 +46,4 @@ SOURCES += $$PWD/servernodeinstance.cpp
SOURCES += $$PWD/anchorchangesnodeinstance.cpp
SOURCES += $$PWD/positionernodeinstance.cpp
SOURCES += $$PWD/layoutnodeinstance.cpp
+SOURCES += $$PWD/qt3dpresentationnodeinstance.cpp
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/layoutnodeinstance.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/layoutnodeinstance.h
index f7d0d3e3a6..4f6225af2c 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/layoutnodeinstance.h
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/layoutnodeinstance.h
@@ -34,8 +34,8 @@ class LayoutNodeInstance : public QuickItemNodeInstance
{
public:
- typedef QSharedPointer<LayoutNodeInstance> Pointer;
- typedef QWeakPointer<LayoutNodeInstance> WeakPointer;
+ using Pointer = QSharedPointer<LayoutNodeInstance>;
+ using WeakPointer = QWeakPointer<LayoutNodeInstance>;
static Pointer create(QObject *objectToBeWrapped);
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.h
index e43c804ca6..2aebef1174 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.h
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.h
@@ -65,10 +65,11 @@ class NodeInstanceServer : public NodeInstanceServerInterface
{
Q_OBJECT
public:
- typedef QPair<QPointer<QObject>, PropertyName> ObjectPropertyPair;
- typedef QPair<qint32, QString> IdPropertyPair;
- typedef QPair<ServerNodeInstance, PropertyName> InstancePropertyPair;
- typedef QPair<QString, QPointer<QObject> > DummyPair;
+ using ObjectPropertyPair = QPair<QPointer<QObject>, PropertyName>;
+ using IdPropertyPair = QPair<qint32, QString>;
+ using InstancePropertyPair= QPair<ServerNodeInstance, PropertyName>;
+ using DummyPair = QPair<QString, QPointer<QObject> >;
+
explicit NodeInstanceServer(NodeInstanceClientInterface *nodeInstanceClient);
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstancesignalspy.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstancesignalspy.h
index 3dc00ed7cc..2965e06106 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstancesignalspy.h
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstancesignalspy.h
@@ -36,8 +36,9 @@ namespace QmlDesigner {
namespace Internal {
class ObjectNodeInstance;
-typedef QSharedPointer<ObjectNodeInstance> ObjectNodeInstancePointer;
-typedef QWeakPointer<ObjectNodeInstance> ObjectNodeInstanceWeakPointer;
+
+using ObjectNodeInstancePointer = QSharedPointer<ObjectNodeInstance>;
+using ObjectNodeInstanceWeakPointer = QWeakPointer<ObjectNodeInstance>;
class NodeInstanceSignalSpy : public QObject
{
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.h
index 5977d3d31c..07c5d50b6e 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.h
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.h
@@ -60,8 +60,8 @@ class WidgetNodeInstance;
class ObjectNodeInstance
{
public:
- typedef QSharedPointer<ObjectNodeInstance> Pointer;
- typedef QWeakPointer<ObjectNodeInstance> WeakPointer;
+ using Pointer = QSharedPointer<ObjectNodeInstance>;
+ using WeakPointer = QWeakPointer<ObjectNodeInstance>;
virtual ~ObjectNodeInstance();
void destroy();
@@ -163,7 +163,7 @@ public:
void setInLayoutable(bool isInLayoutable);
virtual void refreshLayoutable();
- bool hasBindingForProperty(const PropertyName &propertyName, bool *hasChanged = 0) const;
+ bool hasBindingForProperty(const PropertyName &propertyName, bool *hasChanged = nullptr) const;
QQmlContext *context() const;
QQmlEngine *engine() const;
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/positionernodeinstance.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/positionernodeinstance.h
index 7575014ea8..63e31297e7 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/positionernodeinstance.h
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/positionernodeinstance.h
@@ -37,8 +37,8 @@ namespace Internal {
class PositionerNodeInstance : public QuickItemNodeInstance
{
public:
- typedef QSharedPointer<PositionerNodeInstance> Pointer;
- typedef QWeakPointer<PositionerNodeInstance> WeakPointer;
+ using Pointer = QSharedPointer<PositionerNodeInstance>;
+ using WeakPointer = QWeakPointer<PositionerNodeInstance>;
static Pointer create(QObject *objectToBeWrapped);
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qmlpropertychangesnodeinstance.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qmlpropertychangesnodeinstance.h
index 017a0eb710..be16da972d 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qmlpropertychangesnodeinstance.h
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qmlpropertychangesnodeinstance.h
@@ -39,8 +39,8 @@ class QmlPropertyChangesNodeInstance;
class QmlPropertyChangesNodeInstance : public ObjectNodeInstance
{
public:
- typedef QSharedPointer<QmlPropertyChangesNodeInstance> Pointer;
- typedef QWeakPointer<QmlPropertyChangesNodeInstance> WeakPointer;
+ using Pointer = QSharedPointer<QmlPropertyChangesNodeInstance>;
+ using WeakPointer = QWeakPointer<QmlPropertyChangesNodeInstance>;
static Pointer create(QObject *objectToBeWrapped);
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qmlstatenodeinstance.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qmlstatenodeinstance.h
index 5c09bb7ab7..9870223fa7 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qmlstatenodeinstance.h
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qmlstatenodeinstance.h
@@ -34,8 +34,8 @@ namespace Internal {
class QmlStateNodeInstance : public ObjectNodeInstance
{
public:
- typedef QSharedPointer<QmlStateNodeInstance> Pointer;
- typedef QWeakPointer<QmlStateNodeInstance> WeakPointer;
+ using Pointer = QSharedPointer<QmlStateNodeInstance>;
+ using WeakPointer = QWeakPointer<QmlStateNodeInstance>;
static Pointer create(QObject *objectToBeWrapped);
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qmltransitionnodeinstance.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qmltransitionnodeinstance.h
index dc1f01dec4..f24fd3bac2 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qmltransitionnodeinstance.h
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qmltransitionnodeinstance.h
@@ -33,8 +33,8 @@ namespace Internal {
class QmlTransitionNodeInstance : public ObjectNodeInstance
{
public:
- typedef QSharedPointer<QmlTransitionNodeInstance> Pointer;
- typedef QWeakPointer<QmlTransitionNodeInstance> WeakPointer;
+ using Pointer = QSharedPointer<QmlTransitionNodeInstance>;
+ using WeakPointer = QWeakPointer<QmlTransitionNodeInstance>;
static Pointer create(QObject *objectToBeWrapped);
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt3dpresentationnodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt3dpresentationnodeinstance.cpp
new file mode 100644
index 0000000000..0fedfa7b74
--- /dev/null
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt3dpresentationnodeinstance.cpp
@@ -0,0 +1,51 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+#include "qt3dpresentationnodeinstance.h"
+#include <QQuickItem>
+
+namespace QmlDesigner {
+namespace Internal {
+
+Qt3DPresentationNodeInstance::Qt3DPresentationNodeInstance(QObject *object)
+ : ObjectNodeInstance(object)
+{
+}
+
+Qt3DPresentationNodeInstance::Pointer Qt3DPresentationNodeInstance::create(QObject *object)
+{
+ Pointer instance(new Qt3DPresentationNodeInstance(object));
+ instance->populateResetHashes();
+
+ return instance;
+}
+
+PropertyNameList Qt3DPresentationNodeInstance::ignoredProperties() const
+{
+ static const PropertyNameList properties({"source"});
+ return properties;
+}
+} // namespace Internal
+} // namespace QmlDesigner
diff --git a/src/plugins/qmljseditor/qmljspreviewrunner.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt3dpresentationnodeinstance.h
index 631311cb96..df41c2085f 100644
--- a/src/plugins/qmljseditor/qmljspreviewrunner.h
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt3dpresentationnodeinstance.h
@@ -25,28 +25,24 @@
#pragma once
-#include <QObject>
+#include "objectnodeinstance.h"
-#include <projectexplorer/applicationlauncher.h>
-
-namespace QmlJSEditor {
+namespace QmlDesigner {
namespace Internal {
-class QmlJSPreviewRunner : public QObject
+class Qt3DPresentationNodeInstance : public ObjectNodeInstance
{
- Q_OBJECT
public:
- explicit QmlJSPreviewRunner(QObject *parent = 0);
-
- bool isReady() const;
- void run(const QString &filename);
+ using Pointer = QSharedPointer<Qt3DPresentationNodeInstance>;
+ using WeakPointer = QWeakPointer<Qt3DPresentationNodeInstance>;
-private:
- QString m_qmlViewerDefaultPath;
+ static Pointer create(QObject *objectToBeWrapped);
- ProjectExplorer::ApplicationLauncher m_applicationLauncher;
+ PropertyNameList ignoredProperties() const override;
+protected:
+ Qt3DPresentationNodeInstance(QObject *item);
};
} // namespace Internal
-} // namespace QmlJSEditor
+} // namespace QmlDesigner
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.h
index bf78df2212..8aab24178b 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.h
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.h
@@ -38,8 +38,8 @@ namespace Internal {
class QuickItemNodeInstance : public ObjectNodeInstance
{
public:
- typedef QSharedPointer<QuickItemNodeInstance> Pointer;
- typedef QWeakPointer<QuickItemNodeInstance> WeakPointer;
+ using Pointer = QSharedPointer<QuickItemNodeInstance>;
+ using WeakPointer = QWeakPointer<QuickItemNodeInstance>;
~QuickItemNodeInstance() override;
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/servernodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/servernodeinstance.cpp
index 2f090517dc..11234b9521 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/servernodeinstance.cpp
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/servernodeinstance.cpp
@@ -36,6 +36,7 @@
#include "positionernodeinstance.h"
#include "layoutnodeinstance.h"
#include "debugoutputcommand.h"
+#include "qt3dpresentationnodeinstance.h"
#include "quickitemnodeinstance.h"
@@ -161,6 +162,8 @@ Internal::ObjectNodeInstance::Pointer ServerNodeInstance::createInstance(QObject
if (objectToBeWrapped == 0)
instance = Internal::DummyNodeInstance::create();
+ else if (isSubclassOf(objectToBeWrapped, "Q3DSPresentationItem"))
+ instance = Internal::Qt3DPresentationNodeInstance::create(objectToBeWrapped);
else if (isSubclassOf(objectToBeWrapped, "QQuickBasePositioner"))
instance = Internal::PositionerNodeInstance::create(objectToBeWrapped);
else if (isSubclassOf(objectToBeWrapped, "QQuickLayout"))
diff --git a/share/qtcreator/qml/qmlpuppet/types/enumeration.cpp b/share/qtcreator/qml/qmlpuppet/types/enumeration.cpp
index a77f460f4f..12435838ea 100644
--- a/share/qtcreator/qml/qmlpuppet/types/enumeration.cpp
+++ b/share/qtcreator/qml/qmlpuppet/types/enumeration.cpp
@@ -31,9 +31,7 @@
namespace QmlDesigner {
-Enumeration::Enumeration()
-{
-}
+Enumeration::Enumeration() = default;
Enumeration::Enumeration(const EnumerationName &enumerationName)
: m_enumerationName(enumerationName)
diff --git a/share/qtcreator/qml/qmlpuppet/types/enumeration.h b/share/qtcreator/qml/qmlpuppet/types/enumeration.h
index 84028dd24a..d7bc3ac049 100644
--- a/share/qtcreator/qml/qmlpuppet/types/enumeration.h
+++ b/share/qtcreator/qml/qmlpuppet/types/enumeration.h
@@ -32,7 +32,7 @@
namespace QmlDesigner {
-typedef QByteArray EnumerationName;
+using EnumerationName = QByteArray;
class Enumeration
{
diff --git a/share/qtcreator/templates/wizards/projects/consoleapp/CMakeLists.txt b/share/qtcreator/templates/wizards/projects/consoleapp/CMakeLists.txt
index 0d3c1252fa..4beef640b7 100644
--- a/share/qtcreator/templates/wizards/projects/consoleapp/CMakeLists.txt
+++ b/share/qtcreator/templates/wizards/projects/consoleapp/CMakeLists.txt
@@ -1,6 +1,6 @@
-cmake_minimum_required(VERSION 2.8.12)
+cmake_minimum_required(VERSION 3.0.0)
-project(%{ProjectName})
+project(%{ProjectName} VERSION 0.1 LANGUAGES CXX)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
diff --git a/src/libs/3rdparty/optional/optional.hpp b/src/libs/3rdparty/optional/optional.hpp
index 13df7c92ac..607696d8e1 100644
--- a/src/libs/3rdparty/optional/optional.hpp
+++ b/src/libs/3rdparty/optional/optional.hpp
@@ -498,6 +498,7 @@ public:
// 20.5.4.5, Observers
explicit constexpr operator bool() const noexcept { return initialized(); }
+ constexpr bool has_value() const noexcept { return initialized(); }
constexpr T const* operator ->() const {
return TR2_OPTIONAL_ASSERTED_EXPRESSION(initialized(), dataptr());
@@ -693,7 +694,8 @@ public:
explicit constexpr operator bool() const noexcept {
return ref != nullptr;
}
-
+ constexpr bool has_value() const noexcept { return ref != nullptr; }
+
template <class V>
constexpr typename decay<T>::type value_or(V&& v) const
{
diff --git a/src/libs/aggregation/aggregate.h b/src/libs/aggregation/aggregate.h
index 13881d85d8..8c3332bf81 100644
--- a/src/libs/aggregation/aggregate.h
+++ b/src/libs/aggregation/aggregate.h
@@ -40,7 +40,7 @@ class AGGREGATION_EXPORT Aggregate : public QObject
Q_OBJECT
public:
- Aggregate(QObject *parent = 0);
+ Aggregate(QObject *parent = nullptr);
~Aggregate() override;
void add(QObject *component);
@@ -52,7 +52,7 @@ public:
if (T *result = qobject_cast<T *>(component))
return result;
}
- return (T *)0;
+ return nullptr;
}
template <typename T> QList<T *> components() {
@@ -84,19 +84,19 @@ private:
template <typename T> T *query(Aggregate *obj)
{
if (!obj)
- return (T *)0;
+ return nullptr;
return obj->template component<T>();
}
template <typename T> T *query(QObject *obj)
{
if (!obj)
- return (T *)0;
+ return nullptr;
T *result = qobject_cast<T *>(obj);
if (!result) {
QReadLocker locker(&Aggregate::lock());
Aggregate *parentAggregation = Aggregate::parentAggregate(obj);
- result = (parentAggregation ? query<T>(parentAggregation) : 0);
+ result = (parentAggregation ? query<T>(parentAggregation) : nullptr);
}
return result;
}
diff --git a/src/libs/clangsupport/clangrefactoringservermessages.h b/src/libs/clangsupport/clangrefactoringservermessages.h
index cdcc309c2d..dd1cb3a6d7 100644
--- a/src/libs/clangsupport/clangrefactoringservermessages.h
+++ b/src/libs/clangsupport/clangrefactoringservermessages.h
@@ -30,5 +30,7 @@
#include "requestsourcelocationforrenamingmessage.h"
#include "requestsourcerangesanddiagnosticsforquerymessage.h"
#include "requestsourcerangesforquerymessage.h"
-#include "updateprojectpartsmessage.h"
+#include "removegeneratedfilesmessage.h"
#include "removeprojectpartsmessage.h"
+#include "updategeneratedfilesmessage.h"
+#include "updateprojectpartsmessage.h"
diff --git a/src/libs/clangsupport/clangsupport-lib.pri b/src/libs/clangsupport/clangsupport-lib.pri
index 857bc39ddd..c7064262aa 100644
--- a/src/libs/clangsupport/clangsupport-lib.pri
+++ b/src/libs/clangsupport/clangsupport-lib.pri
@@ -87,7 +87,10 @@ SOURCES += \
$$PWD/writemessageblock.cpp \
$$PWD/filepathcaching.cpp \
$$PWD/filepathid.cpp \
- $$PWD/baseserverproxy.cpp
+ $$PWD/baseserverproxy.cpp \
+ $$PWD/updategeneratedfilesmessage.cpp \
+ $$PWD/removegeneratedfilesmessage.cpp \
+ $$PWD/generatedfiles.cpp
HEADERS += \
$$PWD/cancelmessage.h \
@@ -202,6 +205,9 @@ HEADERS += \
$$PWD/nativefilepath.h \
$$PWD/filepathview.h \
$$PWD/compilermacro.h \
- $$PWD/projectpartpchproviderinterface.h
+ $$PWD/projectpartpchproviderinterface.h \
+ $$PWD/updategeneratedfilesmessage.h \
+ $$PWD/removegeneratedfilesmessage.h \
+ $$PWD/generatedfiles.h
contains(QT_CONFIG, reduce_exports):CONFIG += hide_symbols
diff --git a/src/libs/clangsupport/clangsupport_global.h b/src/libs/clangsupport/clangsupport_global.h
index 01e9e2c7f4..75454a5288 100644
--- a/src/libs/clangsupport/clangsupport_global.h
+++ b/src/libs/clangsupport/clangsupport_global.h
@@ -177,7 +177,9 @@ enum class MessageType : quint8 {
CancelMessage,
UpdateProjectPartsMessage,
RemoveProjectPartsMessage,
- PrecompiledHeadersUpdatedMessage
+ PrecompiledHeadersUpdatedMessage,
+ UpdateGeneratedFilesMessage,
+ RemoveGeneratedFilesMessage
};
template<MessageType messageEnumeration>
diff --git a/src/libs/clangsupport/codecompletion.cpp b/src/libs/clangsupport/codecompletion.cpp
index fb321d664a..6e1b9ca53f 100644
--- a/src/libs/clangsupport/codecompletion.cpp
+++ b/src/libs/clangsupport/codecompletion.cpp
@@ -36,6 +36,7 @@ static const char *completionKindToString(CodeCompletion::Kind kind)
switch (kind) {
case CodeCompletion::Other: return "Other";
case CodeCompletion::FunctionCompletionKind: return "Function";
+ case CodeCompletion::FunctionDefinitionCompletionKind: return "FunctionDefinitionCompletion";
case CodeCompletion::TemplateFunctionCompletionKind: return "TemplateFunction";
case CodeCompletion::FunctionOverloadCompletionKind: return "FunctionOverload";
case CodeCompletion::ConstructorCompletionKind: return "Constructor";
@@ -77,6 +78,8 @@ QDebug operator<<(QDebug debug, const CodeCompletion &message)
debug.nospace() << message.priority << ", ";
debug.nospace() << completionKindToString(message.completionKind) << ", ";
debug.nospace() << availabilityToString(message.availability) << ", ";
+ if (!message.requiredFixIts.isEmpty())
+ debug.nospace() << message.requiredFixIts << ", ";
debug.nospace() << message.hasParameters;
debug.nospace() << ")";
diff --git a/src/libs/clangsupport/codecompletion.h b/src/libs/clangsupport/codecompletion.h
index 974b3c3f9a..e3553f22a8 100644
--- a/src/libs/clangsupport/codecompletion.h
+++ b/src/libs/clangsupport/codecompletion.h
@@ -27,8 +27,9 @@
#include "clangsupport_global.h"
#include "codecompletionchunk.h"
+#include "fixitcontainer.h"
-#include <utf8string.h>
+#include <sqlite/utf8string.h>
#include <QDataStream>
#include <QVector>
@@ -44,6 +45,7 @@ public:
enum Kind : quint32 {
Other = 0,
FunctionCompletionKind,
+ FunctionDefinitionCompletionKind,
FunctionOverloadCompletionKind,
TemplateFunctionCompletionKind,
ConstructorCompletionKind,
@@ -90,6 +92,7 @@ public:
out << message.text;
out << message.briefComment;
out << message.chunks;
+ out << message.requiredFixIts;
out << message.priority;
out << static_cast<quint32>(message.completionKind);
out << static_cast<quint32>(message.availability);
@@ -106,6 +109,7 @@ public:
in >> message.text;
in >> message.briefComment;
in >> message.chunks;
+ in >> message.requiredFixIts;
in >> message.priority;
in >> completionKind;
in >> availability;
@@ -120,13 +124,15 @@ public:
friend bool operator==(const CodeCompletion &first, const CodeCompletion &second)
{
return first.text == second.text
- && first.completionKind == second.completionKind;
+ && first.completionKind == second.completionKind
+ && first.requiredFixIts == second.requiredFixIts;
}
public:
Utf8String text;
Utf8String briefComment;
CodeCompletionChunks chunks;
+ QVector<FixItContainer> requiredFixIts;
quint32 priority = 0;
Kind completionKind = Other;
Availability availability = NotAvailable;
diff --git a/src/libs/clangsupport/completionsmessage.cpp b/src/libs/clangsupport/completionsmessage.cpp
index b6324f6a64..d41f3dfe97 100644
--- a/src/libs/clangsupport/completionsmessage.cpp
+++ b/src/libs/clangsupport/completionsmessage.cpp
@@ -29,23 +29,11 @@
namespace ClangBackEnd {
-#define RETURN_TEXT_FOR_CASE(enumValue) case CompletionCorrection::enumValue: return #enumValue
-static const char *completionCorrectionToText(CompletionCorrection correction)
-{
- switch (correction) {
- RETURN_TEXT_FOR_CASE(NoCorrection);
- RETURN_TEXT_FOR_CASE(DotToArrowCorrection);
- default: return "UnhandledCompletionCorrection";
- }
-}
-#undef RETURN_TEXT_FOR_CASE
-
QDebug operator<<(QDebug debug, const CompletionsMessage &message)
{
debug.nospace() << "CompletionsMessage(";
debug.nospace() << message.codeCompletions << ", "
- << completionCorrectionToText(message.neededCorrection) << ", "
<< message.ticketNumber;
debug.nospace() << ")";
diff --git a/src/libs/clangsupport/completionsmessage.h b/src/libs/clangsupport/completionsmessage.h
index b77710a93b..f23256c06f 100644
--- a/src/libs/clangsupport/completionsmessage.h
+++ b/src/libs/clangsupport/completionsmessage.h
@@ -38,18 +38,15 @@ class CompletionsMessage
public:
CompletionsMessage() = default;
CompletionsMessage(const CodeCompletions &codeCompletions,
- CompletionCorrection neededCorrection,
quint64 ticketNumber)
: codeCompletions(codeCompletions)
, ticketNumber(ticketNumber)
- , neededCorrection(neededCorrection)
{
}
friend QDataStream &operator<<(QDataStream &out, const CompletionsMessage &message)
{
out << message.codeCompletions;
- out << static_cast<quint32>(message.neededCorrection);
out << message.ticketNumber;
return out;
@@ -57,28 +54,21 @@ public:
friend QDataStream &operator>>(QDataStream &in, CompletionsMessage &message)
{
- quint32 neededCorrection;
-
in >> message.codeCompletions;
- in >> neededCorrection;
in >> message.ticketNumber;
- message.neededCorrection = static_cast<CompletionCorrection>(neededCorrection);
-
return in;
}
friend bool operator==(const CompletionsMessage &first, const CompletionsMessage &second)
{
return first.ticketNumber == second.ticketNumber
- && first.neededCorrection == second.neededCorrection
&& first.codeCompletions == second.codeCompletions;
}
public:
CodeCompletions codeCompletions;
quint64 ticketNumber = 0;
- CompletionCorrection neededCorrection = CompletionCorrection::NoCorrection;
};
CLANGSUPPORT_EXPORT QDebug operator<<(QDebug debug, const CompletionsMessage &message);
diff --git a/src/libs/clangsupport/filecontainerv2.h b/src/libs/clangsupport/filecontainerv2.h
index c75205cfa4..aa7248fb5e 100644
--- a/src/libs/clangsupport/filecontainerv2.h
+++ b/src/libs/clangsupport/filecontainerv2.h
@@ -40,7 +40,7 @@ public:
FileContainer(FilePath &&filePath,
Utils::SmallString &&unsavedFileContent,
- Utils::SmallStringVector &&commandLineArguments,
+ Utils::SmallStringVector &&commandLineArguments = {},
quint32 documentRevision = 0)
: filePath(std::move(filePath)),
unsavedFileContent(std::move(unsavedFileContent)),
@@ -77,8 +77,8 @@ public:
friend bool operator<(const FileContainer &first, const FileContainer &second)
{
- return std::tie(first.documentRevision, first.filePath, first.unsavedFileContent, first.commandLineArguments)
- < std::tie(second.documentRevision, second.filePath, second.unsavedFileContent, second.commandLineArguments);
+ return std::tie(first.filePath, first.documentRevision, first.unsavedFileContent, first.commandLineArguments)
+ < std::tie(second.filePath, second.documentRevision, second.unsavedFileContent, second.commandLineArguments);
}
FileContainer clone() const
diff --git a/src/libs/clangsupport/filepath.h b/src/libs/clangsupport/filepath.h
index 50f6f44323..9ff019de76 100644
--- a/src/libs/clangsupport/filepath.h
+++ b/src/libs/clangsupport/filepath.h
@@ -133,7 +133,9 @@ public:
friend bool operator==(const FilePath &first, const FilePath &second)
{
- return first.toStringView() == second.toStringView();
+ return first.slashIndex() == second.slashIndex()
+ && first.name() == second.name()
+ && first.directory() == second.directory();
}
friend bool operator==(const FilePath &first, const FilePathView &second)
@@ -148,7 +150,8 @@ public:
friend bool operator<(const FilePath &first, const FilePath &second)
{
- return first.toStringView() < second.toStringView();
+ return std::make_tuple(first.slashIndex(), first.name(), first.directory())
+ < std::make_tuple(second.slashIndex(), second.name(), second.directory());
}
FilePath clone() const
diff --git a/src/libs/clangsupport/filepathcache.h b/src/libs/clangsupport/filepathcache.h
index 9d68b0c497..d0c8a529df 100644
--- a/src/libs/clangsupport/filepathcache.h
+++ b/src/libs/clangsupport/filepathcache.h
@@ -121,7 +121,7 @@ public:
{
Utils::SmallStringView directoryPath = filePath.directory();
- int directoryId = m_directyPathCache.stringId(directoryPath,
+ int directoryId = m_directoryPathCache.stringId(directoryPath,
[&] (const Utils::SmallStringView) {
return m_filePathStorage.fetchDirectoryId(directoryPath);
});
@@ -143,7 +143,7 @@ public:
auto fetchFilePath = [&] (int id) { return m_filePathStorage.fetchDirectoryPath(id); };
- Utils::PathString directoryPath = m_directyPathCache.string(filePathId.directoryId,
+ Utils::PathString directoryPath = m_directoryPathCache.string(filePathId.directoryId,
fetchFilePath);
@@ -158,7 +158,7 @@ public:
}
private:
- mutable DirectoryPathCache m_directyPathCache;
+ mutable DirectoryPathCache m_directoryPathCache;
mutable FileNameCache m_fileNameCache;
FilePathStorage &m_filePathStorage;
};
diff --git a/src/libs/clangsupport/generatedfiles.cpp b/src/libs/clangsupport/generatedfiles.cpp
new file mode 100644
index 0000000000..554d84d2f4
--- /dev/null
+++ b/src/libs/clangsupport/generatedfiles.cpp
@@ -0,0 +1,99 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+#include "generatedfiles.h"
+
+namespace ClangBackEnd {
+template<class Type>
+void GeneratedFiles::updateInternal(Type &&fileContainers)
+{
+ V2::FileContainers unionFileContainers;
+ unionFileContainers.reserve(m_fileContainers.size() + fileContainers.size());
+
+ auto compare = [] (const V2::FileContainer &first, const V2::FileContainer &second) {
+ return first.filePath < second.filePath;
+ };
+
+ std::set_union(std::make_move_iterator(fileContainers.begin()),
+ std::make_move_iterator(fileContainers.end()),
+ std::make_move_iterator(m_fileContainers.begin()),
+ std::make_move_iterator(m_fileContainers.end()),
+ std::back_inserter(unionFileContainers),
+ compare);
+
+ m_fileContainers = std::move(unionFileContainers);
+}
+
+void GeneratedFiles::update(V2::FileContainers &&fileContainers)
+{
+ updateInternal(std::move(fileContainers));
+}
+
+void GeneratedFiles::update(const V2::FileContainers &fileContainers)
+{
+ updateInternal(fileContainers);
+}
+
+class Compare {
+public:
+ bool operator()(const FilePath &first, const FilePath &second)
+ {
+ return first < second;
+ }
+ bool operator()(const V2::FileContainer &first, const V2::FileContainer &second)
+ {
+ return first.filePath < second.filePath;
+ }
+ bool operator()(const V2::FileContainer &first, const FilePath &second)
+ {
+ return first.filePath < second;
+ }
+ bool operator()(const FilePath &first, const V2::FileContainer &second)
+ {
+ return second.filePath < first;
+ }
+};
+
+void GeneratedFiles::remove(const FilePaths &filePaths)
+{
+ V2::FileContainers differenceFileContainers;
+ differenceFileContainers.reserve(m_fileContainers.size());
+
+ std::set_difference(std::make_move_iterator(m_fileContainers.begin()),
+ std::make_move_iterator(m_fileContainers.end()),
+ filePaths.begin(),
+ filePaths.end(),
+ std::back_inserter(differenceFileContainers),
+ Compare{});
+
+ m_fileContainers = std::move(differenceFileContainers);
+}
+
+const V2::FileContainers &GeneratedFiles::fileContainers() const
+{
+ return m_fileContainers;
+}
+
+} // namespace ClangBackEnd
diff --git a/src/plugins/clangcodemodel/clangassistproposal.h b/src/libs/clangsupport/generatedfiles.h
index 4353b43fb2..1838e7dab4 100644
--- a/src/plugins/clangcodemodel/clangassistproposal.h
+++ b/src/libs/clangsupport/generatedfiles.h
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2018 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
@@ -25,21 +25,24 @@
#pragma once
-#include "clangassistproposalmodel.h"
+#include <filecontainerv2.h>
-#include <texteditor/codeassist/genericproposal.h>
+namespace ClangBackEnd {
-namespace ClangCodeModel {
-namespace Internal {
-
-class ClangAssistProposal : public TextEditor::GenericProposal
+class CLANGSUPPORT_EXPORT GeneratedFiles
{
public:
- ClangAssistProposal(int cursorPos, TextEditor::GenericProposalModelPtr model);
+ void update(V2::FileContainers &&fileContainers);
+ void update(const V2::FileContainers &fileContainers);
+ void remove(const FilePaths &filePaths);
+
+ const V2::FileContainers &fileContainers() const;
+private:
+ template<class Type>
+ void updateInternal(Type &&fileContainers);
- bool isCorrective(TextEditor::TextEditorWidget *editorWidget) const override;
- void makeCorrection(TextEditor::TextEditorWidget *editorWidget) override;
+private:
+ V2::FileContainers m_fileContainers;
};
-} // namespace Internal
-} // namespace ClangCodeModel
+} // namespace ClangBackEnd
diff --git a/src/libs/clangsupport/pchmanagerserverinterface.cpp b/src/libs/clangsupport/pchmanagerserverinterface.cpp
index 549e835450..256aa228ac 100644
--- a/src/libs/clangsupport/pchmanagerserverinterface.cpp
+++ b/src/libs/clangsupport/pchmanagerserverinterface.cpp
@@ -26,7 +26,9 @@
#include "pchmanagerserverinterface.h"
#include "messageenvelop.h"
+#include "removegeneratedfilesmessage.h"
#include "removeprojectpartsmessage.h"
+#include "updategeneratedfilesmessage.h"
#include "updateprojectpartsmessage.h"
#include <QDebug>
@@ -45,6 +47,12 @@ void PchManagerServerInterface::dispatch(const MessageEnvelop &messageEnvelop)
case MessageType::RemoveProjectPartsMessage:
removeProjectParts(messageEnvelop.message<RemoveProjectPartsMessage>());
break;
+ case MessageType::UpdateGeneratedFilesMessage:
+ updateGeneratedFiles(messageEnvelop.message<UpdateGeneratedFilesMessage>());
+ break;
+ case MessageType::RemoveGeneratedFilesMessage:
+ removeGeneratedFiles(messageEnvelop.message<RemoveGeneratedFilesMessage>());
+ break;
default:
qWarning() << "Unknown IpcClientMessage";
}
diff --git a/src/libs/clangsupport/pchmanagerserverinterface.h b/src/libs/clangsupport/pchmanagerserverinterface.h
index 48ac0d3679..eb2a4310a5 100644
--- a/src/libs/clangsupport/pchmanagerserverinterface.h
+++ b/src/libs/clangsupport/pchmanagerserverinterface.h
@@ -32,8 +32,6 @@
namespace ClangBackEnd {
class PchManagerClientInterface;
-class RemoveProjectPartsMessage;
-class UpdateProjectPartsMessage;
class CLANGSUPPORT_EXPORT PchManagerServerInterface : public ProjectManagementServerInterface
{
diff --git a/src/libs/clangsupport/pchmanagerserverproxy.cpp b/src/libs/clangsupport/pchmanagerserverproxy.cpp
index fbf4866542..dedbb23d50 100644
--- a/src/libs/clangsupport/pchmanagerserverproxy.cpp
+++ b/src/libs/clangsupport/pchmanagerserverproxy.cpp
@@ -28,7 +28,9 @@
#include "endmessage.h"
#include "messageenvelop.h"
#include "pchmanagerclientinterface.h"
+#include "removegeneratedfilesmessage.h"
#include "removeprojectpartsmessage.h"
+#include "updategeneratedfilesmessage.h"
#include "updateprojectpartsmessage.h"
#include <QIODevice>
@@ -56,4 +58,14 @@ void PchManagerServerProxy::removeProjectParts(RemoveProjectPartsMessage &&messa
m_writeMessageBlock.write(message);
}
+void PchManagerServerProxy::updateGeneratedFiles(UpdateGeneratedFilesMessage &&message)
+{
+ m_writeMessageBlock.write(message);
+}
+
+void PchManagerServerProxy::removeGeneratedFiles(RemoveGeneratedFilesMessage &&message)
+{
+ m_writeMessageBlock.write(message);
+}
+
} // namespace ClangBackEnd
diff --git a/src/libs/clangsupport/pchmanagerserverproxy.h b/src/libs/clangsupport/pchmanagerserverproxy.h
index 30ae12782c..570de91a03 100644
--- a/src/libs/clangsupport/pchmanagerserverproxy.h
+++ b/src/libs/clangsupport/pchmanagerserverproxy.h
@@ -52,6 +52,8 @@ public:
void end() override;
void updateProjectParts(UpdateProjectPartsMessage &&message) override;
void removeProjectParts(RemoveProjectPartsMessage &&message) override;
+ void updateGeneratedFiles(UpdateGeneratedFilesMessage &&message) override;
+ void removeGeneratedFiles(RemoveGeneratedFilesMessage &&message) override;
};
} // namespace ClangBackEnd
diff --git a/src/libs/clangsupport/projectmanagementserverinterface.h b/src/libs/clangsupport/projectmanagementserverinterface.h
index eb06960dc3..08d6edbb0c 100644
--- a/src/libs/clangsupport/projectmanagementserverinterface.h
+++ b/src/libs/clangsupport/projectmanagementserverinterface.h
@@ -29,7 +29,9 @@
namespace ClangBackEnd {
+class RemoveGeneratedFilesMessage;
class RemoveProjectPartsMessage;
+class UpdateGeneratedFilesMessage;
class UpdateProjectPartsMessage;
class ProjectManagementServerInterface : public IpcServerInterface
@@ -37,6 +39,8 @@ class ProjectManagementServerInterface : public IpcServerInterface
public:
virtual void updateProjectParts(UpdateProjectPartsMessage &&message) = 0;
virtual void removeProjectParts(RemoveProjectPartsMessage &&message) = 0;
+ virtual void updateGeneratedFiles(UpdateGeneratedFilesMessage &&message) = 0;
+ virtual void removeGeneratedFiles(RemoveGeneratedFilesMessage &&message) = 0;
protected:
~ProjectManagementServerInterface() = default;
diff --git a/src/libs/clangsupport/refactoringserverinterface.cpp b/src/libs/clangsupport/refactoringserverinterface.cpp
index e9a2456d74..a95837f80a 100644
--- a/src/libs/clangsupport/refactoringserverinterface.cpp
+++ b/src/libs/clangsupport/refactoringserverinterface.cpp
@@ -50,9 +50,15 @@ void RefactoringServerInterface::dispatch(const MessageEnvelop &messageEnvelop)
case MessageType::UpdateProjectPartsMessage:
updateProjectParts(messageEnvelop.message<UpdateProjectPartsMessage>());
break;
+ case MessageType::UpdateGeneratedFilesMessage:
+ updateGeneratedFiles(messageEnvelop.message<UpdateGeneratedFilesMessage>());
+ break;
case MessageType::RemoveProjectPartsMessage:
removeProjectParts(messageEnvelop.message<RemoveProjectPartsMessage>());
break;
+ case MessageType::RemoveGeneratedFilesMessage:
+ removeGeneratedFiles(messageEnvelop.message<RemoveGeneratedFilesMessage>());
+ break;
case MessageType::CancelMessage:
cancel();
break;
diff --git a/src/libs/clangsupport/refactoringserverproxy.cpp b/src/libs/clangsupport/refactoringserverproxy.cpp
index 809a66fe57..3bc8fe20af 100644
--- a/src/libs/clangsupport/refactoringserverproxy.cpp
+++ b/src/libs/clangsupport/refactoringserverproxy.cpp
@@ -69,6 +69,16 @@ void RefactoringServerProxy::removeProjectParts(RemoveProjectPartsMessage &&mess
m_writeMessageBlock.write(message);
}
+void RefactoringServerProxy::updateGeneratedFiles(UpdateGeneratedFilesMessage &&message)
+{
+ m_writeMessageBlock.write(message);
+}
+
+void RefactoringServerProxy::removeGeneratedFiles(RemoveGeneratedFilesMessage &&message)
+{
+ m_writeMessageBlock.write(message);
+}
+
void RefactoringServerProxy::cancel()
{
m_writeMessageBlock.write(CancelMessage());
diff --git a/src/libs/clangsupport/refactoringserverproxy.h b/src/libs/clangsupport/refactoringserverproxy.h
index e5006e66e9..55ae20d441 100644
--- a/src/libs/clangsupport/refactoringserverproxy.h
+++ b/src/libs/clangsupport/refactoringserverproxy.h
@@ -55,6 +55,8 @@ public:
void requestSourceRangesForQueryMessage(RequestSourceRangesForQueryMessage &&message) override;
void updateProjectParts(UpdateProjectPartsMessage &&message) override;
void removeProjectParts(RemoveProjectPartsMessage &&message) override;
+ void updateGeneratedFiles(UpdateGeneratedFilesMessage &&message) override;
+ void removeGeneratedFiles(RemoveGeneratedFilesMessage &&message) override;
void cancel() override;
};
diff --git a/src/libs/clangsupport/removegeneratedfilesmessage.cpp b/src/libs/clangsupport/removegeneratedfilesmessage.cpp
new file mode 100644
index 0000000000..2ed92a8169
--- /dev/null
+++ b/src/libs/clangsupport/removegeneratedfilesmessage.cpp
@@ -0,0 +1,37 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+#include "removegeneratedfilesmessage.h"
+
+namespace ClangBackEnd {
+
+QDebug operator<<(QDebug debug, const RemoveGeneratedFilesMessage &message)
+{
+ debug.nospace() << "RemoveGeneratedFilesMessage("
+ << message.generatedFiles << ")";
+
+ return debug;
+}
+} // namespace ClangBackEnd
diff --git a/src/libs/clangsupport/removegeneratedfilesmessage.h b/src/libs/clangsupport/removegeneratedfilesmessage.h
new file mode 100644
index 0000000000..6aebaccb27
--- /dev/null
+++ b/src/libs/clangsupport/removegeneratedfilesmessage.h
@@ -0,0 +1,79 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+#pragma once
+
+#include <clangsupport_global.h>
+
+#include "filepath.h"
+
+namespace ClangBackEnd {
+
+class RemoveGeneratedFilesMessage
+{
+public:
+ RemoveGeneratedFilesMessage() = default;
+ RemoveGeneratedFilesMessage(FilePaths &&generatedFiles)
+ : generatedFiles(std::move(generatedFiles))
+ {}
+
+ FilePaths takeGeneratedFiles()
+ {
+ return std::move(generatedFiles);
+ }
+
+ friend QDataStream &operator<<(QDataStream &out, const RemoveGeneratedFilesMessage &message)
+ {
+ out << message.generatedFiles;
+
+ return out;
+ }
+
+ friend QDataStream &operator>>(QDataStream &in, RemoveGeneratedFilesMessage &message)
+ {
+ in >> message.generatedFiles;
+
+ return in;
+ }
+
+ friend bool operator==(const RemoveGeneratedFilesMessage &first,
+ const RemoveGeneratedFilesMessage &second)
+ {
+ return first.generatedFiles == second.generatedFiles;
+ }
+
+ RemoveGeneratedFilesMessage clone() const
+ {
+ return *this;
+ }
+
+public:
+ FilePaths generatedFiles;
+};
+
+CLANGSUPPORT_EXPORT QDebug operator<<(QDebug debug, const RemoveGeneratedFilesMessage &message);
+
+DECLARE_MESSAGE(RemoveGeneratedFilesMessage)
+} // namespace ClangBackEnd
diff --git a/src/libs/clangsupport/updategeneratedfilesmessage.cpp b/src/libs/clangsupport/updategeneratedfilesmessage.cpp
new file mode 100644
index 0000000000..9ef71a0df5
--- /dev/null
+++ b/src/libs/clangsupport/updategeneratedfilesmessage.cpp
@@ -0,0 +1,38 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+#include "updategeneratedfilesmessage.h"
+
+namespace ClangBackEnd {
+
+QDebug operator<<(QDebug debug, const UpdateGeneratedFilesMessage &message)
+{
+ debug.nospace() << "UpdateGeneratedFilesMessage("
+ << message.generatedFiles << ")";
+
+ return debug;
+}
+
+} // namespace ClangBackEnd
diff --git a/src/libs/clangsupport/updategeneratedfilesmessage.h b/src/libs/clangsupport/updategeneratedfilesmessage.h
new file mode 100644
index 0000000000..fabfda0125
--- /dev/null
+++ b/src/libs/clangsupport/updategeneratedfilesmessage.h
@@ -0,0 +1,77 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+#pragma once
+
+#include "filecontainerv2.h"
+
+namespace ClangBackEnd {
+
+class UpdateGeneratedFilesMessage
+{
+public:
+ UpdateGeneratedFilesMessage() = default;
+ UpdateGeneratedFilesMessage(V2::FileContainers &&generatedFiles)
+ : generatedFiles(std::move(generatedFiles))
+ {}
+
+ V2::FileContainers takeGeneratedFiles()
+ {
+ return std::move(generatedFiles);
+ }
+
+ friend QDataStream &operator<<(QDataStream &out, const UpdateGeneratedFilesMessage &message)
+ {
+ out << message.generatedFiles;
+
+ return out;
+ }
+
+ friend QDataStream &operator>>(QDataStream &in, UpdateGeneratedFilesMessage &message)
+ {
+ in >> message.generatedFiles;
+
+ return in;
+ }
+
+ friend bool operator==(const UpdateGeneratedFilesMessage &first,
+ const UpdateGeneratedFilesMessage &second)
+ {
+ return first.generatedFiles == second.generatedFiles;
+ }
+
+ UpdateGeneratedFilesMessage clone() const
+ {
+ return *this;
+ }
+
+public:
+ V2::FileContainers generatedFiles;
+};
+
+CLANGSUPPORT_EXPORT QDebug operator<<(QDebug debug, const UpdateGeneratedFilesMessage &message);
+
+DECLARE_MESSAGE(UpdateGeneratedFilesMessage)
+} // namespace ClangBackEnd
diff --git a/src/libs/clangsupport/updateprojectpartsmessage.h b/src/libs/clangsupport/updateprojectpartsmessage.h
index 8c2ee5befe..e923d7ba03 100644
--- a/src/libs/clangsupport/updateprojectpartsmessage.h
+++ b/src/libs/clangsupport/updateprojectpartsmessage.h
@@ -34,10 +34,8 @@ class UpdateProjectPartsMessage
{
public:
UpdateProjectPartsMessage() = default;
- UpdateProjectPartsMessage(V2::ProjectPartContainers &&projectsParts,
- V2::FileContainers &&generatedFiles)
- : projectsParts(std::move(projectsParts)),
- generatedFiles(std::move(generatedFiles))
+ UpdateProjectPartsMessage(V2::ProjectPartContainers &&projectsParts)
+ : projectsParts(std::move(projectsParts))
{}
V2::ProjectPartContainers takeProjectsParts()
@@ -45,15 +43,9 @@ public:
return std::move(projectsParts);
}
- V2::FileContainers takeGeneratedFiles()
- {
- return std::move(generatedFiles);
- }
-
friend QDataStream &operator<<(QDataStream &out, const UpdateProjectPartsMessage &message)
{
out << message.projectsParts;
- out << message.generatedFiles;
return out;
}
@@ -61,7 +53,6 @@ public:
friend QDataStream &operator>>(QDataStream &in, UpdateProjectPartsMessage &message)
{
in >> message.projectsParts;
- in >> message.generatedFiles;
return in;
}
@@ -69,19 +60,16 @@ public:
friend bool operator==(const UpdateProjectPartsMessage &first,
const UpdateProjectPartsMessage &second)
{
- return first.projectsParts == second.projectsParts
- && first.generatedFiles == second.generatedFiles;
+ return first.projectsParts == second.projectsParts;
}
UpdateProjectPartsMessage clone() const
{
- return UpdateProjectPartsMessage(Utils::clone(projectsParts),
- Utils::clone(generatedFiles));
+ return *this;
}
public:
V2::ProjectPartContainers projectsParts;
- V2::FileContainers generatedFiles;
};
CLANGSUPPORT_EXPORT QDebug operator<<(QDebug debug, const UpdateProjectPartsMessage &message);
diff --git a/src/libs/cplusplus/CppDocument.cpp b/src/libs/cplusplus/CppDocument.cpp
index 93f3654e4f..d892948468 100644
--- a/src/libs/cplusplus/CppDocument.cpp
+++ b/src/libs/cplusplus/CppDocument.cpp
@@ -142,34 +142,34 @@ protected:
using SymbolVisitor::visit;
- virtual bool preVisit(Symbol *)
+ bool preVisit(Symbol *) override
{ return ! _scope; }
- virtual bool visit(UsingNamespaceDirective *) { return false; }
- virtual bool visit(UsingDeclaration *) { return false; }
- virtual bool visit(NamespaceAlias *) { return false; }
- virtual bool visit(Declaration *) { return false; }
- virtual bool visit(Argument *) { return false; }
- virtual bool visit(TypenameArgument *) { return false; }
- virtual bool visit(BaseClass *) { return false; }
- virtual bool visit(ForwardClassDeclaration *) { return false; }
+ bool visit(UsingNamespaceDirective *) override { return false; }
+ bool visit(UsingDeclaration *) override { return false; }
+ bool visit(NamespaceAlias *) override { return false; }
+ bool visit(Declaration *) override { return false; }
+ bool visit(Argument *) override { return false; }
+ bool visit(TypenameArgument *) override { return false; }
+ bool visit(BaseClass *) override { return false; }
+ bool visit(ForwardClassDeclaration *) override { return false; }
- virtual bool visit(Enum *symbol)
+ bool visit(Enum *symbol) override
{ return process(symbol); }
- virtual bool visit(Function *symbol)
+ bool visit(Function *symbol) override
{ return process(symbol); }
- virtual bool visit(Namespace *symbol)
+ bool visit(Namespace *symbol) override
{ return process(symbol); }
- virtual bool visit(Class *symbol)
+ bool visit(Class *symbol) override
{ return process(symbol); }
- virtual bool visit(Block *symbol)
+ bool visit(Block *symbol) override
{ return process(symbol); }
- virtual bool visit(Template *symbol)
+ bool visit(Template *symbol) override
{
if (Symbol *decl = symbol->declaration()) {
if (decl->isFunction() || decl->isClass() || decl->isDeclaration())
@@ -179,19 +179,19 @@ protected:
}
// Objective-C
- virtual bool visit(ObjCBaseClass *) { return false; }
- virtual bool visit(ObjCBaseProtocol *) { return false; }
- virtual bool visit(ObjCForwardClassDeclaration *) { return false; }
- virtual bool visit(ObjCForwardProtocolDeclaration *) { return false; }
- virtual bool visit(ObjCPropertyDeclaration *) { return false; }
+ bool visit(ObjCBaseClass *) override { return false; }
+ bool visit(ObjCBaseProtocol *) override { return false; }
+ bool visit(ObjCForwardClassDeclaration *) override { return false; }
+ bool visit(ObjCForwardProtocolDeclaration *) override { return false; }
+ bool visit(ObjCPropertyDeclaration *) override { return false; }
- virtual bool visit(ObjCClass *symbol)
+ bool visit(ObjCClass *symbol) override
{ return process(symbol); }
- virtual bool visit(ObjCProtocol *symbol)
+ bool visit(ObjCProtocol *symbol) override
{ return process(symbol); }
- virtual bool visit(ObjCMethod *symbol)
+ bool visit(ObjCMethod *symbol) override
{ return process(symbol); }
};
@@ -209,10 +209,10 @@ public:
errorCount(0)
{ }
- virtual void report(int level,
- const StringLiteral *fileId,
- unsigned line, unsigned column,
- const char *format, va_list ap)
+ void report(int level,
+ const StringLiteral *fileId,
+ unsigned line, unsigned column,
+ const char *format, va_list ap) override
{
if (level == Error) {
++errorCount;
diff --git a/src/libs/cplusplus/CppRewriter.cpp b/src/libs/cplusplus/CppRewriter.cpp
index 1ce9cc2dfa..aec22d8248 100644
--- a/src/libs/cplusplus/CppRewriter.cpp
+++ b/src/libs/cplusplus/CppRewriter.cpp
@@ -73,52 +73,52 @@ public:
return (!temps.isEmpty()) ? temps.takeLast() : ty;
}
- virtual void visit(UndefinedType *)
+ void visit(UndefinedType *) override
{
temps.append(FullySpecifiedType());
}
- virtual void visit(VoidType *)
+ void visit(VoidType *) override
{
temps.append(control()->voidType());
}
- virtual void visit(IntegerType *type)
+ void visit(IntegerType *type) override
{
temps.append(control()->integerType(type->kind()));
}
- virtual void visit(FloatType *type)
+ void visit(FloatType *type) override
{
temps.append(control()->floatType(type->kind()));
}
- virtual void visit(PointerToMemberType *type)
+ void visit(PointerToMemberType *type) override
{
const Name *memberName = rewrite->rewriteName(type->memberName());
const FullySpecifiedType elementType = rewrite->rewriteType(type->elementType());
temps.append(control()->pointerToMemberType(memberName, elementType));
}
- virtual void visit(PointerType *type)
+ void visit(PointerType *type) override
{
const FullySpecifiedType elementType = rewrite->rewriteType(type->elementType());
temps.append(control()->pointerType(elementType));
}
- virtual void visit(ReferenceType *type)
+ void visit(ReferenceType *type) override
{
const FullySpecifiedType elementType = rewrite->rewriteType(type->elementType());
temps.append(control()->referenceType(elementType, type->isRvalueReference()));
}
- virtual void visit(ArrayType *type)
+ void visit(ArrayType *type) override
{
const FullySpecifiedType elementType = rewrite->rewriteType(type->elementType());
temps.append(control()->arrayType(elementType, type->size()));
}
- virtual void visit(NamedType *type)
+ void visit(NamedType *type) override
{
FullySpecifiedType ty = rewrite->env->apply(type->name(), rewrite);
if (! ty->isUndefinedType()) {
@@ -129,7 +129,7 @@ public:
}
}
- virtual void visit(Function *type)
+ void visit(Function *type) override
{
Function *funTy = control()->newFunction(0, 0);
funTy->copy(type);
@@ -158,55 +158,55 @@ public:
temps.append(funTy);
}
- virtual void visit(Namespace *type)
+ void visit(Namespace *type) override
{
qWarning() << Q_FUNC_INFO;
temps.append(type);
}
- virtual void visit(Class *type)
+ void visit(Class *type) override
{
qWarning() << Q_FUNC_INFO;
temps.append(type);
}
- virtual void visit(Enum *type)
+ void visit(Enum *type) override
{
qWarning() << Q_FUNC_INFO;
temps.append(type);
}
- virtual void visit(ForwardClassDeclaration *type)
+ void visit(ForwardClassDeclaration *type) override
{
qWarning() << Q_FUNC_INFO;
temps.append(type);
}
- virtual void visit(ObjCClass *type)
+ void visit(ObjCClass *type) override
{
qWarning() << Q_FUNC_INFO;
temps.append(type);
}
- virtual void visit(ObjCProtocol *type)
+ void visit(ObjCProtocol *type) override
{
qWarning() << Q_FUNC_INFO;
temps.append(type);
}
- virtual void visit(ObjCMethod *type)
+ void visit(ObjCMethod *type) override
{
qWarning() << Q_FUNC_INFO;
temps.append(type);
}
- virtual void visit(ObjCForwardClassDeclaration *type)
+ void visit(ObjCForwardClassDeclaration *type) override
{
qWarning() << Q_FUNC_INFO;
temps.append(type);
}
- virtual void visit(ObjCForwardProtocolDeclaration *type)
+ void visit(ObjCForwardProtocolDeclaration *type) override
{
qWarning() << Q_FUNC_INFO;
temps.append(type);
@@ -242,19 +242,19 @@ public:
return (!temps.isEmpty()) ? temps.takeLast() : name;
}
- virtual void visit(const QualifiedNameId *name)
+ void visit(const QualifiedNameId *name) override
{
const Name *base = rewrite->rewriteName(name->base());
const Name *n = rewrite->rewriteName(name->name());
temps.append(control()->qualifiedNameId(base, n));
}
- virtual void visit(const Identifier *name)
+ void visit(const Identifier *name) override
{
temps.append(control()->identifier(name->chars(), name->size()));
}
- virtual void visit(const TemplateNameId *name)
+ void visit(const TemplateNameId *name) override
{
QVarLengthArray<FullySpecifiedType, 8> args(name->templateArgumentCount());
for (unsigned i = 0; i < name->templateArgumentCount(); ++i)
@@ -263,23 +263,23 @@ public:
args.data(), args.size()));
}
- virtual void visit(const DestructorNameId *name)
+ void visit(const DestructorNameId *name) override
{
temps.append(control()->destructorNameId(identifier(name->identifier())));
}
- virtual void visit(const OperatorNameId *name)
+ void visit(const OperatorNameId *name) override
{
temps.append(control()->operatorNameId(name->kind()));
}
- virtual void visit(const ConversionNameId *name)
+ void visit(const ConversionNameId *name) override
{
FullySpecifiedType ty = rewrite->rewriteType(name->type());
temps.append(control()->conversionNameId(ty));
}
- virtual void visit(const SelectorNameId *name)
+ void visit(const SelectorNameId *name) override
{
QVarLengthArray<const Name *, 8> names(name->nameCount());
for (unsigned i = 0; i < name->nameCount(); ++i)
diff --git a/src/libs/cplusplus/DeprecatedGenTemplateInstance.cpp b/src/libs/cplusplus/DeprecatedGenTemplateInstance.cpp
index 90cd52ef6b..db39d0b20d 100644
--- a/src/libs/cplusplus/DeprecatedGenTemplateInstance.cpp
+++ b/src/libs/cplusplus/DeprecatedGenTemplateInstance.cpp
@@ -81,48 +81,48 @@ private:
return previousType;
}
- virtual void visit(VoidType *)
+ void visit(VoidType *) override
{
// nothing to do
}
- virtual void visit(IntegerType *)
+ void visit(IntegerType *) override
{
// nothing to do
}
- virtual void visit(FloatType *)
+ void visit(FloatType *) override
{
// nothing to do
}
- virtual void visit(PointerToMemberType *)
+ void visit(PointerToMemberType *) override
{
qDebug() << Q_FUNC_INFO; // ### TODO
}
- virtual void visit(PointerType *ptrTy)
+ void visit(PointerType *ptrTy) override
{
_type.setType(control()->pointerType(q->apply(ptrTy->elementType())));
}
- virtual void visit(ReferenceType *refTy)
+ void visit(ReferenceType *refTy) override
{
_type.setType(control()->referenceType(q->apply(refTy->elementType()), refTy->isRvalueReference()));
}
- virtual void visit(ArrayType *arrayTy)
+ void visit(ArrayType *arrayTy) override
{
_type.setType(control()->arrayType(q->apply(arrayTy->elementType()), arrayTy->size()));
}
- virtual void visit(NamedType *ty)
+ void visit(NamedType *ty) override
{
FullySpecifiedType n = q->apply(ty->name());
_type.setType(n.type());
}
- virtual void visit(Function *funTy)
+ void visit(Function *funTy) override
{
Function *fun = control()->newFunction(/*sourceLocation=*/ 0, funTy->name());
fun->setEnclosingScope(funTy->enclosingScope());
@@ -149,47 +149,47 @@ private:
_type.setType(fun);
}
- virtual void visit(Namespace *)
+ void visit(Namespace *) override
{
qDebug() << Q_FUNC_INFO;
}
- virtual void visit(Class *)
+ void visit(Class *) override
{
qDebug() << Q_FUNC_INFO;
}
- virtual void visit(Enum *)
+ void visit(Enum *) override
{
qDebug() << Q_FUNC_INFO;
}
- virtual void visit(ForwardClassDeclaration *)
+ void visit(ForwardClassDeclaration *) override
{
qDebug() << Q_FUNC_INFO;
}
- virtual void visit(ObjCClass *)
+ void visit(ObjCClass *) override
{
qDebug() << Q_FUNC_INFO;
}
- virtual void visit(ObjCProtocol *)
+ void visit(ObjCProtocol *) override
{
qDebug() << Q_FUNC_INFO;
}
- virtual void visit(ObjCMethod *)
+ void visit(ObjCMethod *) override
{
qDebug() << Q_FUNC_INFO;
}
- virtual void visit(ObjCForwardClassDeclaration *)
+ void visit(ObjCForwardClassDeclaration *) override
{
qDebug() << Q_FUNC_INFO;
}
- virtual void visit(ObjCForwardProtocolDeclaration *)
+ void visit(ObjCForwardProtocolDeclaration *) override
{
qDebug() << Q_FUNC_INFO;
}
@@ -229,7 +229,7 @@ private:
return previousType;
}
- virtual void visit(const Identifier *name)
+ void visit(const Identifier *name) override
{
int index = findSubstitution(name->identifier());
@@ -240,7 +240,7 @@ private:
_type = control()->namedType(name);
}
- virtual void visit(const TemplateNameId *name)
+ void visit(const TemplateNameId *name) override
{
QVarLengthArray<FullySpecifiedType, 8> arguments(name->templateArgumentCount());
for (unsigned i = 0; i < name->templateArgumentCount(); ++i) {
@@ -294,31 +294,31 @@ private:
return 0;
}
- virtual void visit(const QualifiedNameId *name)
+ void visit(const QualifiedNameId *name) override
{
if (const Name *n = instantiate(name))
_type = control()->namedType(n);
}
- virtual void visit(const DestructorNameId *name)
+ void visit(const DestructorNameId *name) override
{
Overview oo;
qWarning() << "ignored name:" << oo.prettyName(name);
}
- virtual void visit(const OperatorNameId *name)
+ void visit(const OperatorNameId *name) override
{
Overview oo;
qWarning() << "ignored name:" << oo.prettyName(name);
}
- virtual void visit(const ConversionNameId *name)
+ void visit(const ConversionNameId *name) override
{
Overview oo;
qWarning() << "ignored name:" << oo.prettyName(name);
}
- virtual void visit(const SelectorNameId *name)
+ void visit(const SelectorNameId *name) override
{
Overview oo;
qWarning() << "ignored name:" << oo.prettyName(name);
diff --git a/src/libs/cplusplus/Icons.cpp b/src/libs/cplusplus/Icons.cpp
index 5e5297b403..5f2397d0e5 100644
--- a/src/libs/cplusplus/Icons.cpp
+++ b/src/libs/cplusplus/Icons.cpp
@@ -30,8 +30,6 @@
#include <cplusplus/Symbols.h>
#include <cplusplus/Type.h>
-#include <utils/icon.h>
-
using namespace CPlusPlus;
using CPlusPlus::Icons;
@@ -42,16 +40,17 @@ QIcon Icons::iconForSymbol(const Symbol *symbol)
QIcon Icons::keywordIcon()
{
- return iconForType(KeywordIconType);
+ return iconForType(Utils::CodeModelIcon::Keyword);
}
QIcon Icons::macroIcon()
{
- return iconForType(MacroIconType);
+ return iconForType(Utils::CodeModelIcon::Macro);
}
-Icons::IconType Icons::iconTypeForSymbol(const Symbol *symbol)
+Utils::CodeModelIcon::Type Icons::iconTypeForSymbol(const Symbol *symbol)
{
+ using namespace Utils::CodeModelIcon;
if (const Template *templ = symbol->asTemplate()) {
if (Symbol *decl = templ->declaration())
return iconTypeForSymbol(decl);
@@ -67,244 +66,53 @@ Icons::IconType Icons::iconTypeForSymbol(const Symbol *symbol)
if (function->isSlot()) {
if (function->isPublic())
- return SlotPublicIconType;
+ return SlotPublic;
else if (function->isProtected())
- return SlotProtectedIconType;
+ return SlotProtected;
else if (function->isPrivate())
- return SlotPrivateIconType;
+ return SlotPrivate;
} else if (function->isSignal()) {
- return SignalIconType;
+ return Signal;
} else if (symbol->isPublic()) {
- return symbol->isStatic() ? FuncPublicStaticIconType : FuncPublicIconType;
+ return symbol->isStatic() ? FuncPublicStatic : FuncPublic;
} else if (symbol->isProtected()) {
- return symbol->isStatic() ? FuncProtectedStaticIconType : FuncProtectedIconType;
+ return symbol->isStatic() ? FuncProtectedStatic : FuncProtected;
} else if (symbol->isPrivate()) {
- return symbol->isStatic() ? FuncPrivateStaticIconType : FuncPrivateIconType;
+ return symbol->isStatic() ? FuncPrivateStatic : FuncPrivate;
}
} else if (symbol->enclosingScope() && symbol->enclosingScope()->isEnum()) {
- return EnumeratorIconType;
+ return Enumerator;
} else if (symbol->isDeclaration() || symbol->isArgument()) {
if (symbol->isPublic()) {
- return symbol->isStatic() ? VarPublicStaticIconType : VarPublicIconType;
+ return symbol->isStatic() ? VarPublicStatic : VarPublic;
} else if (symbol->isProtected()) {
- return symbol->isStatic() ? VarProtectedStaticIconType : VarProtectedIconType;
+ return symbol->isStatic() ? VarProtectedStatic : VarProtected;
} else if (symbol->isPrivate()) {
- return symbol->isStatic() ? VarPrivateStaticIconType : VarPrivateIconType;
+ return symbol->isStatic() ? VarPrivateStatic : VarPrivate;
}
} else if (symbol->isEnum()) {
- return EnumIconType;
+ return Utils::CodeModelIcon::Enum;
} else if (symbol->isForwardClassDeclaration()) {
- return ClassIconType; // TODO: Store class key in ForwardClassDeclaration
+ return Utils::CodeModelIcon::Class; // TODO: Store class key in ForwardClassDeclaration
} else if (const Class *klass = symbol->asClass()) {
- return klass->isStruct() ? StructIconType : ClassIconType;
+ return klass->isStruct() ? Struct : Utils::CodeModelIcon::Class;
} else if (symbol->isObjCClass() || symbol->isObjCForwardClassDeclaration()) {
- return ClassIconType;
+ return Utils::CodeModelIcon::Class;
} else if (symbol->isObjCProtocol() || symbol->isObjCForwardProtocolDeclaration()) {
- return ClassIconType;
+ return Utils::CodeModelIcon::Class;
} else if (symbol->isObjCMethod()) {
- return FuncPublicIconType;
+ return FuncPublic;
} else if (symbol->isNamespace()) {
- return NamespaceIconType;
+ return Utils::CodeModelIcon::Namespace;
} else if (symbol->isTypenameArgument()) {
- return ClassIconType;
+ return Utils::CodeModelIcon::Class;
} else if (symbol->isQtPropertyDeclaration() || symbol->isObjCPropertyDeclaration()) {
- return PropertyIconType;
+ return Property;
} else if (symbol->isUsingNamespaceDirective() ||
symbol->isUsingDeclaration()) {
// TODO: Might be nice to have a different icons for these things
- return NamespaceIconType;
+ return Utils::CodeModelIcon::Namespace;
}
- return UnknownIconType;
-}
-
-QIcon Icons::iconForType(IconType type)
-{
- using namespace Utils;
-
- static const IconMaskAndColor classRelationIcon {
- QLatin1String(":/codemodel/images/classrelation.png"), Theme::IconsCodeModelOverlayForegroundColor};
- static const IconMaskAndColor classRelationBackgroundIcon {
- QLatin1String(":/codemodel/images/classrelationbackground.png"), Theme::IconsCodeModelOverlayBackgroundColor};
- static const IconMaskAndColor classMemberFunctionIcon {
- QLatin1String(":/codemodel/images/classmemberfunction.png"), Theme::IconsCodeModelFunctionColor};
- static const IconMaskAndColor classMemberVariableIcon {
- QLatin1String(":/codemodel/images/classmembervariable.png"), Theme::IconsCodeModelVariableColor};
- static const IconMaskAndColor functionIcon {
- QLatin1String(":/codemodel/images/member.png"), Theme::IconsCodeModelFunctionColor};
- static const IconMaskAndColor variableIcon {
- QLatin1String(":/codemodel/images/member.png"), Theme::IconsCodeModelVariableColor};
- static const IconMaskAndColor signalIcon {
- QLatin1String(":/codemodel/images/signal.png"), Theme::IconsCodeModelFunctionColor};
- static const IconMaskAndColor slotIcon {
- QLatin1String(":/codemodel/images/slot.png"), Theme::IconsCodeModelFunctionColor};
- static const IconMaskAndColor propertyIcon {
- QLatin1String(":/codemodel/images/property.png"), Theme::IconsCodeModelOverlayForegroundColor};
- static const IconMaskAndColor propertyBackgroundIcon {
- QLatin1String(":/codemodel/images/propertybackground.png"), Theme::IconsCodeModelOverlayBackgroundColor};
- static const IconMaskAndColor protectedIcon {
- QLatin1String(":/codemodel/images/protected.png"), Theme::IconsCodeModelOverlayForegroundColor};
- static const IconMaskAndColor protectedBackgroundIcon {
- QLatin1String(":/codemodel/images/protectedbackground.png"), Theme::IconsCodeModelOverlayBackgroundColor};
- static const IconMaskAndColor privateIcon {
- QLatin1String(":/codemodel/images/private.png"), Theme::IconsCodeModelOverlayForegroundColor};
- static const IconMaskAndColor privateBackgroundIcon {
- QLatin1String(":/codemodel/images/privatebackground.png"), Theme::IconsCodeModelOverlayBackgroundColor};
- static const IconMaskAndColor staticIcon {
- QLatin1String(":/codemodel/images/static.png"), Theme::IconsCodeModelOverlayForegroundColor};
- static const IconMaskAndColor staticBackgroundIcon {
- QLatin1String(":/codemodel/images/staticbackground.png"), Theme::IconsCodeModelOverlayBackgroundColor};
-
- switch (type) {
- case ClassIconType: {
- const static QIcon icon(Icon({
- classRelationBackgroundIcon, classRelationIcon,
- {QLatin1String(":/codemodel/images/classparent.png"), Theme::IconsCodeModelClassColor},
- classMemberFunctionIcon, classMemberVariableIcon
- }, Icon::Tint).icon());
- return icon;
- }
- case StructIconType: {
- const static QIcon icon(Icon({
- classRelationBackgroundIcon, classRelationIcon,
- {QLatin1String(":/codemodel/images/classparent.png"), Theme::IconsCodeModelStructColor},
- classMemberFunctionIcon, classMemberVariableIcon
- }, Icon::Tint).icon());
- return icon;
- }
- case EnumIconType: {
- const static QIcon icon(Icon({
- {QLatin1String(":/codemodel/images/enum.png"), Theme::IconsCodeModelEnumColor}
- }, Icon::Tint).icon());
- return icon;
- }
- case EnumeratorIconType: {
- const static QIcon icon(Icon({
- {QLatin1String(":/codemodel/images/enumerator.png"), Theme::IconsCodeModelEnumColor}
- }, Icon::Tint).icon());
- return icon;
- }
- case FuncPublicIconType: {
- const static QIcon icon(Icon({
- functionIcon}, Icon::Tint).icon());
- return icon;
- }
- case FuncProtectedIconType: {
- const static QIcon icon(Icon({
- functionIcon, protectedBackgroundIcon, protectedIcon
- }, Icon::Tint).icon());
- return icon;
- }
- case FuncPrivateIconType: {
- const static QIcon icon(Icon({
- functionIcon, privateBackgroundIcon, privateIcon
- }, Icon::Tint).icon());
- return icon;
- }
- case FuncPublicStaticIconType: {
- const static QIcon icon(Icon({
- functionIcon, staticBackgroundIcon, staticIcon
- }, Icon::Tint).icon());
- return icon;
- }
- case FuncProtectedStaticIconType: {
- const static QIcon icon(Icon({
- functionIcon, staticBackgroundIcon, staticIcon, protectedBackgroundIcon, protectedIcon
- }, Icon::Tint).icon());
- return icon;
- }
- case FuncPrivateStaticIconType: {
- const static QIcon icon(Icon({
- functionIcon, staticBackgroundIcon, staticIcon, privateBackgroundIcon, privateIcon
- }, Icon::Tint).icon());
- return icon;
- }
- case NamespaceIconType: {
- const static QIcon icon(Icon({
- {QLatin1String(":/utils/images/namespace.png"), Theme::IconsCodeModelKeywordColor}
- }, Icon::Tint).icon());
- return icon;
- }
- case VarPublicIconType: {
- const static QIcon icon(Icon({
- variableIcon
- }, Icon::Tint).icon());
- return icon;
- }
- case VarProtectedIconType: {
- const static QIcon icon(Icon({
- variableIcon, protectedBackgroundIcon, protectedIcon
- }, Icon::Tint).icon());
- return icon;
- }
- case VarPrivateIconType: {
- const static QIcon icon(Icon({
- variableIcon, privateBackgroundIcon, privateIcon
- }, Icon::Tint).icon());
- return icon;
- }
- case VarPublicStaticIconType: {
- const static QIcon icon(Icon({
- variableIcon, staticBackgroundIcon, staticIcon
- }, Icon::Tint).icon());
- return icon;
- }
- case VarProtectedStaticIconType: {
- const static QIcon icon(Icon({
- variableIcon, staticBackgroundIcon, staticIcon, protectedBackgroundIcon, protectedIcon
- }, Icon::Tint).icon());
- return icon;
- }
- case VarPrivateStaticIconType: {
- const static QIcon icon(Icon({
- variableIcon, staticBackgroundIcon, staticIcon, privateBackgroundIcon, privateIcon
- }, Icon::Tint).icon());
- return icon;
- }
- case SignalIconType: {
- const static QIcon icon(Icon({
- signalIcon
- }, Icon::Tint).icon());
- return icon;
- }
- case SlotPublicIconType: {
- const static QIcon icon(Icon({
- slotIcon
- }, Icon::Tint).icon());
- return icon;
- }
- case SlotProtectedIconType: {
- const static QIcon icon(Icon({
- slotIcon, protectedBackgroundIcon, protectedIcon
- }, Icon::Tint).icon());
- return icon;
- }
- case SlotPrivateIconType: {
- const static QIcon icon(Icon({
- slotIcon, privateBackgroundIcon, privateIcon
- }, Icon::Tint).icon());
- return icon;
- }
- case KeywordIconType: {
- const static QIcon icon(Icon({
- {QLatin1String(":/codemodel/images/keyword.png"), Theme::IconsCodeModelKeywordColor}
- }, Icon::Tint).icon());
- return icon;
- }
- case MacroIconType: {
- const static QIcon icon(Icon({
- {QLatin1String(":/codemodel/images/macro.png"), Theme::IconsCodeModelMacroColor}
- }, Icon::Tint).icon());
- return icon;
- }
- case PropertyIconType: {
- const static QIcon icon(Icon({
- variableIcon, propertyBackgroundIcon, propertyIcon
- }, Icon::Tint).icon());
- return icon;
- }
- default:
- break;
- }
- return QIcon();
+ return Unknown;
}
diff --git a/src/libs/cplusplus/Icons.h b/src/libs/cplusplus/Icons.h
index a5aaa33d60..05b067f246 100644
--- a/src/libs/cplusplus/Icons.h
+++ b/src/libs/cplusplus/Icons.h
@@ -26,6 +26,7 @@
#pragma once
#include <cplusplus/CPlusPlusForwardDeclarations.h>
+#include <utils/utilsicons.h>
#include <QIcon>
@@ -41,36 +42,7 @@ public:
static QIcon keywordIcon();
static QIcon macroIcon();
- enum IconType {
- ClassIconType = 0,
- StructIconType,
- EnumIconType,
- EnumeratorIconType,
- FuncPublicIconType,
- FuncProtectedIconType,
- FuncPrivateIconType,
- FuncPublicStaticIconType,
- FuncProtectedStaticIconType,
- FuncPrivateStaticIconType,
- NamespaceIconType,
- VarPublicIconType,
- VarProtectedIconType,
- VarPrivateIconType,
- VarPublicStaticIconType,
- VarProtectedStaticIconType,
- VarPrivateStaticIconType,
- SignalIconType,
- SlotPublicIconType,
- SlotProtectedIconType,
- SlotPrivateIconType,
- KeywordIconType,
- MacroIconType,
- PropertyIconType,
- UnknownIconType
- };
-
- static IconType iconTypeForSymbol(const Symbol *symbol);
- static QIcon iconForType(IconType type);
+ static Utils::CodeModelIcon::Type iconTypeForSymbol(const Symbol *symbol);
private:
Icons() {}
diff --git a/src/libs/cplusplus/ResolveExpression.cpp b/src/libs/cplusplus/ResolveExpression.cpp
index 37b9ce8b30..034ea6fcc1 100644
--- a/src/libs/cplusplus/ResolveExpression.cpp
+++ b/src/libs/cplusplus/ResolveExpression.cpp
@@ -659,7 +659,7 @@ public:
accept(tu->ast());
}
- virtual bool preVisit(AST *)
+ bool preVisit(AST *) override
{
if (_block)
return false;
@@ -667,7 +667,7 @@ public:
return true;
}
- virtual bool visit(SimpleNameAST *ast)
+ bool visit(SimpleNameAST *ast) override
{
if (ast->name
&& ast->name->identifier()
@@ -678,7 +678,7 @@ public:
return false;
}
- virtual bool visit(MemberAccessAST *ast)
+ bool visit(MemberAccessAST *ast) override
{
accept(ast->base_expression);
return false;
diff --git a/src/libs/cplusplus/cplusplus-lib.pri b/src/libs/cplusplus/cplusplus-lib.pri
index 0931855a55..94e988f0bb 100644
--- a/src/libs/cplusplus/cplusplus-lib.pri
+++ b/src/libs/cplusplus/cplusplus-lib.pri
@@ -84,5 +84,3 @@ SOURCES += \
$$PWD/findcdbbreakpoint.cpp \
$$PWD/PPToken.cpp \
$$PWD/cppmodelmanagerbase.cpp
-
-RESOURCES += $$PWD/cplusplus.qrc
diff --git a/src/libs/cplusplus/cplusplus.qbs b/src/libs/cplusplus/cplusplus.qbs
index 4eb6581498..b08745263e 100644
--- a/src/libs/cplusplus/cplusplus.qbs
+++ b/src/libs/cplusplus/cplusplus.qbs
@@ -122,7 +122,6 @@ Project {
"SymbolNameVisitor.cpp", "SymbolNameVisitor.h",
"TypeOfExpression.cpp", "TypeOfExpression.h",
"TypePrettyPrinter.cpp", "TypePrettyPrinter.h",
- "cplusplus.qrc",
"findcdbbreakpoint.cpp", "findcdbbreakpoint.h",
"pp-cctype.h",
"pp-engine.cpp", "pp-engine.h",
diff --git a/src/libs/cplusplus/cplusplus.qrc b/src/libs/cplusplus/cplusplus.qrc
deleted file mode 100644
index 357db691c0..0000000000
--- a/src/libs/cplusplus/cplusplus.qrc
+++ /dev/null
@@ -1,44 +0,0 @@
-<RCC>
- <qresource prefix="/codemodel">
- <file>images/enum.png</file>
- <file>images/enum@2x.png</file>
- <file>images/enumerator.png</file>
- <file>images/enumerator@2x.png</file>
- <file>images/keyword.png</file>
- <file>images/keyword@2x.png</file>
- <file>images/macro.png</file>
- <file>images/macro@2x.png</file>
- <file>images/signal.png</file>
- <file>images/signal@2x.png</file>
- <file>images/slot.png</file>
- <file>images/slot@2x.png</file>
- <file>images/member.png</file>
- <file>images/member@2x.png</file>
- <file>images/private.png</file>
- <file>images/private@2x.png</file>
- <file>images/privatebackground.png</file>
- <file>images/privatebackground@2x.png</file>
- <file>images/property.png</file>
- <file>images/property@2x.png</file>
- <file>images/propertybackground.png</file>
- <file>images/propertybackground@2x.png</file>
- <file>images/protected.png</file>
- <file>images/protected@2x.png</file>
- <file>images/protectedbackground.png</file>
- <file>images/protectedbackground@2x.png</file>
- <file>images/static.png</file>
- <file>images/static@2x.png</file>
- <file>images/staticbackground.png</file>
- <file>images/staticbackground@2x.png</file>
- <file>images/classmemberfunction.png</file>
- <file>images/classmemberfunction@2x.png</file>
- <file>images/classmembervariable.png</file>
- <file>images/classmembervariable@2x.png</file>
- <file>images/classparent.png</file>
- <file>images/classparent@2x.png</file>
- <file>images/classrelation.png</file>
- <file>images/classrelation@2x.png</file>
- <file>images/classrelationbackground.png</file>
- <file>images/classrelationbackground@2x.png</file>
- </qresource>
-</RCC>
diff --git a/src/libs/extensionsystem/invoker.cpp b/src/libs/extensionsystem/invoker.cpp
index d4a19804a0..1506c4910a 100644
--- a/src/libs/extensionsystem/invoker.cpp
+++ b/src/libs/extensionsystem/invoker.cpp
@@ -34,7 +34,7 @@ InvokerBase::InvokerBase()
nag = true;
success = true;
connectionType = Qt::AutoConnection;
- target = 0;
+ target = nullptr;
}
InvokerBase::~InvokerBase()
diff --git a/src/libs/extensionsystem/optionsparser.cpp b/src/libs/extensionsystem/optionsparser.cpp
index 9dc6327b65..c3daed5daa 100644
--- a/src/libs/extensionsystem/optionsparser.cpp
+++ b/src/libs/extensionsystem/optionsparser.cpp
@@ -265,9 +265,9 @@ bool OptionsParser::checkForUnknownOption()
void OptionsParser::forceDisableAllPluginsExceptTestedAndForceEnabled()
{
- for (const PluginManagerPrivate::TestSpec &testSpec : m_pmPrivate->testSpecs)
+ for (const PluginManagerPrivate::TestSpec &testSpec : qAsConst(m_pmPrivate->testSpecs))
testSpec.pluginSpec->d->setForceEnabled(true);
- for (PluginSpec *spec : m_pmPrivate->pluginSpecs) {
+ for (PluginSpec *spec : qAsConst(m_pmPrivate->pluginSpecs)) {
if (!spec->isForceEnabled() && !spec->isRequired())
spec->d->setForceDisabled(true);
}
diff --git a/src/libs/extensionsystem/pluginerroroverview.cpp b/src/libs/extensionsystem/pluginerroroverview.cpp
index a5d82a1c62..828bd013f4 100644
--- a/src/libs/extensionsystem/pluginerroroverview.cpp
+++ b/src/libs/extensionsystem/pluginerroroverview.cpp
@@ -65,7 +65,7 @@ PluginErrorOverview::~PluginErrorOverview()
void PluginErrorOverview::showDetails(QListWidgetItem *item)
{
if (item) {
- PluginSpec *spec = item->data(Qt::UserRole).value<PluginSpec *>();
+ auto *spec = item->data(Qt::UserRole).value<PluginSpec *>();
m_ui->pluginError->setText(spec->errorString());
} else {
m_ui->pluginError->clear();
diff --git a/src/libs/extensionsystem/pluginmanager.cpp b/src/libs/extensionsystem/pluginmanager.cpp
index d92a4ec67b..9edb0cdb62 100644
--- a/src/libs/extensionsystem/pluginmanager.cpp
+++ b/src/libs/extensionsystem/pluginmanager.cpp
@@ -256,8 +256,8 @@ namespace ExtensionSystem {
using namespace Internal;
-static Internal::PluginManagerPrivate *d = 0;
-static PluginManager *m_instance = 0;
+static Internal::PluginManagerPrivate *d = nullptr;
+static PluginManager *m_instance = nullptr;
/*!
Gets the unique plugin manager instance.
@@ -282,7 +282,7 @@ PluginManager::PluginManager()
PluginManager::~PluginManager()
{
delete d;
- d = 0;
+ d = nullptr;
}
/*!
@@ -625,7 +625,7 @@ void PluginManager::remoteArguments(const QString &serializedArgument, QObject *
arguments);
if (socketParent && socket) {
socket->setParent(socketParent);
- socket = 0;
+ socket = nullptr;
}
}
}
@@ -829,7 +829,7 @@ void PluginManagerPrivate::nextDelayedInitialize()
if (delayedInitializeQueue.isEmpty()) {
m_isInitializationDone = true;
delete delayedInitializeTimer;
- delayedInitializeTimer = 0;
+ delayedInitializeTimer = nullptr;
profilingSummary();
emit q->initializationDone();
#ifdef WITH_TESTS
@@ -845,12 +845,6 @@ void PluginManagerPrivate::nextDelayedInitialize()
\internal
*/
PluginManagerPrivate::PluginManagerPrivate(PluginManager *pluginManager) :
- delayedInitializeTimer(0),
- shutdownEventLoop(0),
- m_profileElapsedMS(0),
- m_profilingVerbosity(0),
- settings(0),
- globalSettings(0),
q(pluginManager)
{
}
@@ -907,7 +901,7 @@ void PluginManagerPrivate::stopAll()
if (delayedInitializeTimer && delayedInitializeTimer->isActive()) {
delayedInitializeTimer->stop();
delete delayedInitializeTimer;
- delayedInitializeTimer = 0;
+ delayedInitializeTimer = nullptr;
}
QList<PluginSpec *> queue = loadQueue();
foreach (PluginSpec *spec, queue) {
@@ -927,8 +921,8 @@ void PluginManagerPrivate::deleteAll()
#ifdef WITH_TESTS
-typedef QMap<QObject *, QStringList> TestPlan; // Object -> selected test functions
-typedef QMapIterator<QObject *, QStringList> TestPlanIterator;
+using TestPlan = QMap<QObject *, QStringList>; // Object -> selected test functions
+using TestPlanIterator = QMapIterator<QObject *, QStringList>;
static bool isTestFunction(const QMetaMethod &metaMethod)
{
@@ -999,7 +993,7 @@ static QStringList matchingTestFunctions(const QStringList &testFunctions,
static QObject *objectWithClassName(const QList<QObject *> &objects, const QString &className)
{
- return Utils::findOr(objects, 0, [className] (QObject *object) -> bool {
+ return Utils::findOr(objects, nullptr, [className] (QObject *object) -> bool {
QString candidate = QString::fromUtf8(object->metaObject()->className());
const int colonIndex = candidate.lastIndexOf(QLatin1Char(':'));
if (colonIndex != -1 && colonIndex < candidate.size() - 1)
@@ -1159,7 +1153,7 @@ void PluginManagerPrivate::addObject(QObject *obj)
{
{
QWriteLocker lock(&m_lock);
- if (obj == 0) {
+ if (obj == nullptr) {
qWarning() << "PluginManagerPrivate::addObject(): trying to add null object";
return;
}
@@ -1188,7 +1182,7 @@ void PluginManagerPrivate::addObject(QObject *obj)
*/
void PluginManagerPrivate::removeObject(QObject *obj)
{
- if (obj == 0) {
+ if (obj == nullptr) {
qWarning() << "PluginManagerPrivate::removeObject(): trying to remove null object";
return;
}
@@ -1265,7 +1259,7 @@ void PluginManagerPrivate::shutdown()
*/
void PluginManagerPrivate::asyncShutdownFinished()
{
- IPlugin *plugin = qobject_cast<IPlugin *>(sender());
+ auto *plugin = qobject_cast<IPlugin *>(sender());
Q_ASSERT(plugin);
asynchronousPlugins.removeAll(plugin->pluginSpec());
if (asynchronousPlugins.isEmpty())
@@ -1442,7 +1436,7 @@ void PluginManagerPrivate::readPluginPaths()
pluginCategories.insert(QString(), QList<PluginSpec *>());
foreach (const QString &pluginFile, pluginFiles(pluginPaths)) {
- PluginSpec *spec = new PluginSpec;
+ auto *spec = new PluginSpec;
if (!spec->d->read(pluginFile)) { // not a Qt Creator plugin
delete spec;
continue;
@@ -1505,7 +1499,7 @@ PluginSpec *PluginManagerPrivate::pluginForOption(const QString &option, bool *r
return spec;
}
}
- return 0;
+ return nullptr;
}
PluginSpec *PluginManagerPrivate::pluginByName(const QString &name) const
diff --git a/src/libs/extensionsystem/pluginmanager_p.h b/src/libs/extensionsystem/pluginmanager_p.h
index 6b7a2cc75b..b21a3f7ce4 100644
--- a/src/libs/extensionsystem/pluginmanager_p.h
+++ b/src/libs/extensionsystem/pluginmanager_p.h
@@ -55,7 +55,7 @@ class EXTENSIONSYSTEM_EXPORT PluginManagerPrivate : public QObject
Q_OBJECT
public:
PluginManagerPrivate(PluginManager *pluginManager);
- virtual ~PluginManagerPrivate();
+ ~PluginManagerPrivate() override;
// Object pool operations
void addObject(QObject *obj);
@@ -106,19 +106,19 @@ public:
QStringList disabledPlugins;
QStringList forceEnabledPlugins;
// delayed initialization
- QTimer *delayedInitializeTimer;
+ QTimer *delayedInitializeTimer = nullptr;
QList<PluginSpec *> delayedInitializeQueue;
// ansynchronous shutdown
QList<PluginSpec *> asynchronousPlugins; // plugins that have requested async shutdown
- QEventLoop *shutdownEventLoop; // used for async shutdown
+ QEventLoop *shutdownEventLoop = nullptr; // used for async shutdown
QStringList arguments;
QScopedPointer<QTime> m_profileTimer;
QHash<const PluginSpec *, int> m_profileTotal;
- int m_profileElapsedMS;
- unsigned m_profilingVerbosity;
- QSettings *settings;
- QSettings *globalSettings;
+ int m_profileElapsedMS = 0;
+ unsigned m_profilingVerbosity = 0;
+ QSettings *settings = nullptr;
+ QSettings *globalSettings = nullptr;
// Look in argument descriptions of the specs for the option.
PluginSpec *pluginForOption(const QString &option, bool *requiresArgument) const;
diff --git a/src/libs/extensionsystem/pluginspec.cpp b/src/libs/extensionsystem/pluginspec.cpp
index b439c54f64..501ceba009 100644
--- a/src/libs/extensionsystem/pluginspec.cpp
+++ b/src/libs/extensionsystem/pluginspec.cpp
@@ -182,7 +182,7 @@ PluginSpec::PluginSpec()
PluginSpec::~PluginSpec()
{
delete d;
- d = 0;
+ d = nullptr;
}
/*!
@@ -963,7 +963,7 @@ bool PluginSpecPrivate::loadLibrary()
+ QString::fromLatin1(": ") + loader.errorString();
return false;
}
- IPlugin *pluginObject = qobject_cast<IPlugin*>(loader.instance());
+ auto *pluginObject = qobject_cast<IPlugin*>(loader.instance());
if (!pluginObject) {
hasError = true;
errorString = QCoreApplication::translate("PluginSpec", "Plugin is not valid (does not derive from IPlugin)");
@@ -1065,6 +1065,6 @@ void PluginSpecPrivate::kill()
if (!plugin)
return;
delete plugin;
- plugin = 0;
+ plugin = nullptr;
state = PluginSpec::Deleted;
}
diff --git a/src/libs/extensionsystem/pluginspec.h b/src/libs/extensionsystem/pluginspec.h
index 25c08cd412..e7c2987ebe 100644
--- a/src/libs/extensionsystem/pluginspec.h
+++ b/src/libs/extensionsystem/pluginspec.h
@@ -106,7 +106,7 @@ public:
QVector<PluginDependency> dependencies() const;
QJsonObject metaData() const;
- typedef QVector<PluginArgumentDescription> PluginArgumentDescriptions;
+ using PluginArgumentDescriptions = QVector<PluginArgumentDescription>;
PluginArgumentDescriptions argumentDescriptions() const;
// other information, valid after 'Read' state is reached
diff --git a/src/libs/extensionsystem/pluginview.cpp b/src/libs/extensionsystem/pluginview.cpp
index af80a2747a..65b44307be 100644
--- a/src/libs/extensionsystem/pluginview.cpp
+++ b/src/libs/extensionsystem/pluginview.cpp
@@ -110,7 +110,7 @@ public:
int columnCount() const { return 4; }
- QVariant data(int column, int role) const
+ QVariant data(int column, int role) const override
{
if (role == HiddenByDefaultRole)
return m_spec->isHiddenByDefault() || !m_spec->isAvailableForHostPlatform();
@@ -177,7 +177,7 @@ public:
return QVariant();
}
- bool setData(int column, const QVariant &data, int role)
+ bool setData(int column, const QVariant &data, int role) override
{
if (column == LoadedColumn && role == Qt::CheckStateRole)
return m_view->setPluginsEnabled(QSet<PluginSpec *>() << m_spec, data.toBool());
@@ -189,7 +189,7 @@ public:
return m_spec->isAvailableForHostPlatform() && !m_spec->isRequired();
}
- Qt::ItemFlags flags(int column) const
+ Qt::ItemFlags flags(int column) const override
{
Qt::ItemFlags ret = Qt::ItemIsSelectable;
@@ -221,7 +221,7 @@ public:
int columnCount() const { return 4; }
- QVariant data(int column, int role) const
+ QVariant data(int column, int role) const override
{
if (role == HiddenByDefaultRole)
return false;
@@ -260,7 +260,7 @@ public:
return QVariant();
}
- bool setData(int column, const QVariant &data, int role)
+ bool setData(int column, const QVariant &data, int role) override
{
if (column == LoadedColumn && role == Qt::CheckStateRole) {
const QList<PluginSpec *> affectedPlugins =
@@ -273,7 +273,7 @@ public:
return false;
}
- Qt::ItemFlags flags(int column) const
+ Qt::ItemFlags flags(int column) const override
{
Qt::ItemFlags ret = Qt::ItemIsSelectable | Qt::ItemIsEnabled;
if (column == LoadedColumn)
@@ -290,7 +290,7 @@ public:
class PluginFilterModel : public CategorySortFilterModel
{
public:
- PluginFilterModel(QObject *parent = 0) : CategorySortFilterModel(parent) {}
+ PluginFilterModel(QObject *parent = nullptr) : CategorySortFilterModel(parent) {}
void setShowHidden(bool show)
{
@@ -355,7 +355,7 @@ PluginView::PluginView(QWidget *parent)
m_sortModel->setFilterKeyColumn(-1/*all*/);
m_categoryView->setModel(m_sortModel);
- QGridLayout *gridLayout = new QGridLayout(this);
+ auto *gridLayout = new QGridLayout(this);
gridLayout->setContentsMargins(2, 2, 2, 2);
gridLayout->addWidget(m_categoryView, 1, 0, 1, 1);
@@ -367,10 +367,10 @@ PluginView::PluginView(QWidget *parent)
this, &PluginView::updatePlugins);
connect(m_categoryView, &QAbstractItemView::activated,
- [this](const QModelIndex &idx) { pluginActivated(pluginForIndex(idx)); });
+ [this](const QModelIndex &idx) { emit pluginActivated(pluginForIndex(idx)); });
connect(m_categoryView->selectionModel(), &QItemSelectionModel::currentChanged,
- [this](const QModelIndex &idx) { currentPluginChanged(pluginForIndex(idx)); });
+ [this](const QModelIndex &idx) { emit currentPluginChanged(pluginForIndex(idx)); });
updatePlugins();
}
@@ -378,9 +378,7 @@ PluginView::PluginView(QWidget *parent)
/*!
\internal
*/
-PluginView::~PluginView()
-{
-}
+PluginView::~PluginView() = default;
/*!
Returns the current selection in the list of plugins.
@@ -411,7 +409,7 @@ PluginSpec *PluginView::pluginForIndex(const QModelIndex &index) const
{
const QModelIndex &sourceIndex = m_sortModel->mapToSource(index);
PluginItem *item = m_model->itemForIndexAtLevel<2>(sourceIndex);
- return item ? item->m_spec: 0;
+ return item ? item->m_spec: nullptr;
}
void PluginView::updatePlugins()
@@ -432,7 +430,7 @@ void PluginView::updatePlugins()
foreach (CollectionItem *collection, collections)
m_model->rootItem()->appendChild(collection);
- m_model->layoutChanged();
+ emit m_model->layoutChanged();
m_categoryView->expandAll();
}
diff --git a/src/libs/modelinglib/qmt/config/stereotypedefinitionparser.cpp b/src/libs/modelinglib/qmt/config/stereotypedefinitionparser.cpp
index f73d4afc3b..fe070fc08a 100644
--- a/src/libs/modelinglib/qmt/config/stereotypedefinitionparser.cpp
+++ b/src/libs/modelinglib/qmt/config/stereotypedefinitionparser.cpp
@@ -168,7 +168,6 @@ public:
IconCommandParameter(int keyword, ShapeValueF::Unit unit, ShapeValueF::Origin origin = ShapeValueF::OriginSmart)
: m_keyword(keyword),
- m_type(ShapeValue),
m_unit(unit),
m_origin(origin)
{
diff --git a/src/libs/qmljs/qmljsbind.cpp b/src/libs/qmljs/qmljsbind.cpp
index f823aff50b..92516dee2e 100644
--- a/src/libs/qmljs/qmljsbind.cpp
+++ b/src/libs/qmljs/qmljsbind.cpp
@@ -29,6 +29,8 @@
#include "qmljsdocument.h"
#include "qmljsmodelmanagerinterface.h"
+#include <utils/algorithm.h>
+
using namespace LanguageUtils;
using namespace QmlJS;
using namespace QmlJS::AST;
@@ -178,6 +180,17 @@ bool Bind::visit(AST::Program *)
return true;
}
+void Bind::endVisit(UiProgram *)
+{
+ if (_doc->language() == Dialect::QmlQbs) {
+ static const QString qbsBaseImport = QStringLiteral("qbs");
+ static auto isQbsBaseImport = [] (const ImportInfo &ii) {
+ return ii.name() == qbsBaseImport; };
+ if (!Utils::anyOf(_imports, isQbsBaseImport))
+ _imports += ImportInfo::moduleImport(qbsBaseImport, ComponentVersion(), QString());
+ }
+}
+
bool Bind::visit(UiImport *ast)
{
ComponentVersion version;
diff --git a/src/libs/qmljs/qmljsbind.h b/src/libs/qmljs/qmljsbind.h
index 81da23b6fa..e584abef7b 100644
--- a/src/libs/qmljs/qmljsbind.h
+++ b/src/libs/qmljs/qmljsbind.h
@@ -66,6 +66,7 @@ protected:
bool visit(AST::UiProgram *ast) override;
bool visit(AST::Program *ast) override;
+ void endVisit(AST::UiProgram *) override;
// Ui
bool visit(AST::UiImport *ast) override;
diff --git a/src/libs/qmljs/qmljscodeformatter.cpp b/src/libs/qmljs/qmljscodeformatter.cpp
index 8c34cdc4ac..973338395c 100644
--- a/src/libs/qmljs/qmljscodeformatter.cpp
+++ b/src/libs/qmljs/qmljscodeformatter.cpp
@@ -177,6 +177,7 @@ void CodeFormatter::recalculateStateAfter(const QTextBlock &block)
case Property: enter(property_start); break;
case Function: enter(function_start); break;
case Signal: enter(signal_start); break;
+ case Enum: enter(enum_start); break;
case On:
case As:
case List:
@@ -215,6 +216,11 @@ void CodeFormatter::recalculateStateAfter(const QTextBlock &block)
default: leave(true); continue;
} break;
+ case enum_start:
+ switch (kind) {
+ case LeftBrace: enter(objectliteral_open); break;
+ } break;
+
case signal_start:
switch (kind) {
case Colon: enter(binding_assignment); break; // oops, was a binding
@@ -284,7 +290,7 @@ void CodeFormatter::recalculateStateAfter(const QTextBlock &block)
if (tryInsideExpression())
break;
switch (kind) {
- case Comma:
+ case Comma: leave(true); break;
case Delimiter: enter(expression_continuation); break;
case RightBracket:
case RightParenthesis: leave(); continue;
@@ -336,11 +342,11 @@ void CodeFormatter::recalculateStateAfter(const QTextBlock &block)
if (tryInsideExpression())
break;
switch (kind) {
+ case Comma: leave(); break;
case Delimiter: enter(expression_continuation); break;
case RightBracket:
case RightParenthesis: leave(); continue; // error recovery
case RightBrace: leave(); continue; // so we also leave objectliteral_open
- case Comma: leave(); break;
} break;
case bracket_element_start:
@@ -931,6 +937,8 @@ CodeFormatter::TokenKind CodeFormatter::extendedTokenKind(const QmlJS::Token &to
return On;
if (text == QLatin1String("list"))
return List;
+ if (text == QLatin1String("enum"))
+ return Enum;
} else if (kind == Keyword) {
const char char1 = text.at(0).toLatin1();
const char char2 = text.at(1).toLatin1();
diff --git a/src/libs/qmljs/qmljscodeformatter.h b/src/libs/qmljs/qmljscodeformatter.h
index 990ec080ce..55fe2d2d86 100644
--- a/src/libs/qmljs/qmljscodeformatter.h
+++ b/src/libs/qmljs/qmljscodeformatter.h
@@ -109,6 +109,8 @@ public: // must be public to make Q_GADGET introspection work
property_name, // after the type
property_maybe_initializer, // after the identifier
+ enum_start, // after 'enum'
+
signal_start, // after 'signal'
signal_maybe_arglist, // after identifier
signal_arglist_open, // after '('
@@ -197,6 +199,7 @@ protected:
Comma,
Dot,
Delimiter,
+ RegExp,
EndOfExistingTokenKinds,
@@ -209,6 +212,7 @@ protected:
Delete,
Do,
Else,
+ Enum,
Finally,
For,
Function,
diff --git a/src/libs/qmljs/qmljsicons.cpp b/src/libs/qmljs/qmljsicons.cpp
index 411c0d2c37..58eeae732a 100644
--- a/src/libs/qmljs/qmljsicons.cpp
+++ b/src/libs/qmljs/qmljsicons.cpp
@@ -123,20 +123,20 @@ QIcon Icons::icon(Node *node)
QIcon Icons::objectDefinitionIcon()
{
- return CPlusPlus::Icons::iconForType(CPlusPlus::Icons::ClassIconType);
+ return Utils::CodeModelIcon::iconForType(Utils::CodeModelIcon::Class);
}
QIcon Icons::scriptBindingIcon()
{
- return CPlusPlus::Icons::iconForType(CPlusPlus::Icons::VarPublicIconType);
+ return Utils::CodeModelIcon::iconForType(Utils::CodeModelIcon::VarPublic);
}
QIcon Icons::publicMemberIcon()
{
- return CPlusPlus::Icons::iconForType(CPlusPlus::Icons::FuncPublicIconType);
+ return Utils::CodeModelIcon::iconForType(Utils::CodeModelIcon::FuncPublic);
}
QIcon Icons::functionDeclarationIcon()
{
- return CPlusPlus::Icons::iconForType(CPlusPlus::Icons::FuncPublicIconType);
+ return Utils::CodeModelIcon::iconForType(Utils::CodeModelIcon::FuncPublic);
}
diff --git a/src/libs/qmljs/qmljsreformatter.cpp b/src/libs/qmljs/qmljsreformatter.cpp
index 2116fa7467..91d4db897e 100644
--- a/src/libs/qmljs/qmljsreformatter.cpp
+++ b/src/libs/qmljs/qmljsreformatter.cpp
@@ -187,7 +187,7 @@ protected:
{
SourceLocation fixedLoc = commentLoc;
fixCommentLocation(fixedLoc);
- if (precededByEmptyLine(fixedLoc))
+ if (precededByEmptyLine(fixedLoc) && !_result.endsWith(QLatin1String("\n\n")))
newLine();
outCommentText(toString(fixedLoc)); // don't use the sourceloc overload here
if (followedByNewLine(fixedLoc))
diff --git a/src/libs/qtcreatorcdbext/eventcallback.cpp b/src/libs/qtcreatorcdbext/eventcallback.cpp
index 2e5e69abca..caafd9c3e2 100644
--- a/src/libs/qtcreatorcdbext/eventcallback.cpp
+++ b/src/libs/qtcreatorcdbext/eventcallback.cpp
@@ -173,14 +173,16 @@ STDMETHODIMP EventCallback::Exception(
__in ULONG FirstChance
)
{
- // Report the exception as GBMI and set potential stop reason
- const ExtensionContext::StopReasonMap parameters =
- exceptionParameters(*Ex, FirstChance);
+ if ((FirstChance && ExtensionContext::instance().parameters().firstChanceException != 0)
+ || (!FirstChance && ExtensionContext::instance().parameters().secondChanceException != 0)) {
+ // Report the exception as GBMI and set potential stop reason
+ const ExtensionContext::StopReasonMap parameters = exceptionParameters(*Ex, FirstChance);
- std::ostringstream str;
- formatGdbmiHash(str, parameters);
- ExtensionContext::instance().setStopReason(parameters, "exception");
- ExtensionContext::instance().report('E', 0, 0, "exception", "%s", str.str().c_str());
+ std::ostringstream str;
+ formatGdbmiHash(str, parameters);
+ ExtensionContext::instance().setStopReason(parameters, "exception");
+ ExtensionContext::instance().report('E', 0, 0, "exception", "%s", str.str().c_str());
+ }
return m_wrapped ? m_wrapped->Exception(Ex, FirstChance) : S_OK;
}
diff --git a/src/libs/qtcreatorcdbext/extensioncontext.h b/src/libs/qtcreatorcdbext/extensioncontext.h
index e52abc4e86..1cdbb77a92 100644
--- a/src/libs/qtcreatorcdbext/extensioncontext.h
+++ b/src/libs/qtcreatorcdbext/extensioncontext.h
@@ -43,6 +43,8 @@ struct Parameters
unsigned maxStringLength = 10000;
unsigned maxArraySize = 100;
unsigned maxStackDepth = 1000;
+ unsigned firstChanceException = 1;
+ unsigned secondChanceException = 1;
};
// Global singleton with context.
diff --git a/src/libs/qtcreatorcdbext/qtcreatorcdbextension.cpp b/src/libs/qtcreatorcdbext/qtcreatorcdbextension.cpp
index 61c41de761..fad25230a3 100644
--- a/src/libs/qtcreatorcdbext/qtcreatorcdbextension.cpp
+++ b/src/libs/qtcreatorcdbext/qtcreatorcdbextension.cpp
@@ -965,6 +965,12 @@ extern "C" HRESULT CALLBACK setparameter(CIDebugClient *, PCSTR args)
} else if (!token.compare(0, equalsPos, "maxArraySize")) {
if (integerFromString(value, &ExtensionContext::instance().parameters().maxArraySize))
++success;
+ } else if (!token.compare(0, equalsPos, "firstChance")) {
+ if (integerFromString(value, &ExtensionContext::instance().parameters().firstChanceException))
+ ++success;
+ } else if (!token.compare(0, equalsPos, "secondChance")) {
+ if (integerFromString(value, &ExtensionContext::instance().parameters().secondChanceException))
+ ++success;
} else if (!token.compare(0, equalsPos, "maxStackDepth")) {
if (integerFromString(value, &ExtensionContext::instance().parameters().maxStackDepth))
++success;
diff --git a/src/libs/sqlite/utf8string.h b/src/libs/sqlite/utf8string.h
index cd1d6fdb55..f23237d2be 100644
--- a/src/libs/sqlite/utf8string.h
+++ b/src/libs/sqlite/utf8string.h
@@ -116,6 +116,26 @@ public:
byteArray.append(textToAppend.byteArray);
}
+ void chop(int n)
+ {
+ byteArray.chop(n);
+ }
+
+ int indexOf(const Utf8String &text) const
+ {
+ return byteArray.indexOf(text.byteArray);
+ }
+
+ int indexOf(const char *text) const
+ {
+ return byteArray.indexOf(text);
+ }
+
+ int indexOf(char character) const
+ {
+ return byteArray.indexOf(character);
+ }
+
bool contains(const Utf8String &text) const
{
return byteArray.contains(text.byteArray);
@@ -151,6 +171,16 @@ public:
return byteArray.endsWith(text.byteArray);
}
+ bool endsWith(const char *text) const
+ {
+ return byteArray.endsWith(text);
+ }
+
+ bool endsWith(char character) const
+ {
+ return byteArray.endsWith(character);
+ }
+
bool isNull() const
{
return byteArray.isNull();
diff --git a/src/libs/tracing/safecastable.h b/src/libs/tracing/safecastable.h
new file mode 100644
index 0000000000..7c1fae2e7a
--- /dev/null
+++ b/src/libs/tracing/safecastable.h
@@ -0,0 +1,62 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+#pragma once
+
+namespace Timeline {
+
+template<class Base>
+class SafeCastable
+{
+public:
+ template<class Derived>
+ bool is() const
+ {
+ return static_cast<const Base *>(this)->classId() == Derived::staticClassId;
+ }
+
+ template<class Derived>
+ Derived &asRef()
+ {
+ Q_ASSERT(is<Derived>());
+ return static_cast<Derived &>(*this);
+ }
+
+ template<class Derived>
+ const Derived &asConstRef() const
+ {
+ Q_ASSERT(is<Derived>());
+ return static_cast<const Derived &>(*this);
+ }
+
+ template<class Derived>
+ Derived &&asRvalueRef()
+ {
+ Q_ASSERT(is<Derived>());
+ return static_cast<Derived &&>(*this);
+ }
+};
+
+} // namespace Timeline
diff --git a/src/libs/tracing/timelinemodel.cpp b/src/libs/tracing/timelinemodel.cpp
index e2f28e1849..c7b7c98904 100644
--- a/src/libs/tracing/timelinemodel.cpp
+++ b/src/libs/tracing/timelinemodel.cpp
@@ -59,7 +59,6 @@ namespace Timeline {
*/
void TimelineModel::computeNesting()
{
- Q_D(TimelineModel);
QLinkedList<int> parents;
for (int range = 0; range != count(); ++range) {
TimelineModelPrivate::Range &current = d->ranges[range];
@@ -107,43 +106,26 @@ void TimelineModel::computeNesting()
int TimelineModel::collapsedRowCount() const
{
- Q_D(const TimelineModel);
return d->collapsedRowCount;
}
void TimelineModel::setCollapsedRowCount(int rows)
{
- Q_D(TimelineModel);
- if (d->collapsedRowCount != rows) {
+ if (d->collapsedRowCount != rows)
d->collapsedRowCount = rows;
- emit collapsedRowCountChanged();
- if (!d->expanded) {
- emit rowCountChanged();
- emit heightChanged(); // collapsed rows have a fixed size
- }
- }
}
int TimelineModel::expandedRowCount() const
{
- Q_D(const TimelineModel);
return d->expandedRowCount;
}
void TimelineModel::setExpandedRowCount(int rows)
{
- Q_D(TimelineModel);
if (d->expandedRowCount != rows) {
- int prevHeight = height();
if (d->rowOffsets.length() > rows)
d->rowOffsets.resize(rows);
d->expandedRowCount = rows;
- emit expandedRowCountChanged();
- if (d->expanded) {
- emit rowCountChanged();
- if (height() != prevHeight)
- emit heightChanged();
- }
}
}
@@ -159,16 +141,21 @@ TimelineModel::TimelineModelPrivate::TimelineModelPrivate(int modelId) :
}
TimelineModel::TimelineModel(TimelineModelAggregator *parent) :
- QObject(parent), d_ptr(new TimelineModelPrivate(parent->generateModelId()))
+ QObject(parent), d(std::make_unique<TimelineModelPrivate>(parent->generateModelId()))
{
connect(this, &TimelineModel::contentChanged, this, &TimelineModel::labelsChanged);
connect(this, &TimelineModel::contentChanged, this, &TimelineModel::detailsChanged);
+ connect(this, &TimelineModel::hiddenChanged, this, &TimelineModel::heightChanged);
+ connect(this, &TimelineModel::expandedChanged, this, &TimelineModel::heightChanged);
+ connect(this, &TimelineModel::expandedRowHeightChanged, this, &TimelineModel::heightChanged);
+ connect(this, &TimelineModel::expandedChanged, this, &TimelineModel::rowCountChanged);
+ connect(this, &TimelineModel::contentChanged, this, &TimelineModel::rowCountChanged);
+ connect(this, &TimelineModel::contentChanged,
+ this, [this]() { emit expandedRowHeightChanged(-1, -1); });
}
TimelineModel::~TimelineModel()
{
- Q_D(TimelineModel);
- delete d;
}
bool TimelineModel::isEmpty() const
@@ -178,7 +165,6 @@ bool TimelineModel::isEmpty() const
int TimelineModel::modelId() const
{
- Q_D(const TimelineModel);
return d->modelId;
}
@@ -195,7 +181,6 @@ int TimelineModel::collapsedRowOffset(int rowNumber) const
int TimelineModel::expandedRowHeight(int rowNumber) const
{
- Q_D(const TimelineModel);
if (d->rowOffsets.size() > rowNumber)
return d->rowOffsets[rowNumber] - (rowNumber > 0 ? d->rowOffsets[rowNumber - 1] : 0);
return TimelineModelPrivate::DefaultRowHeight;
@@ -203,7 +188,6 @@ int TimelineModel::expandedRowHeight(int rowNumber) const
int TimelineModel::expandedRowOffset(int rowNumber) const
{
- Q_D(const TimelineModel);
if (rowNumber == 0)
return 0;
@@ -217,7 +201,6 @@ int TimelineModel::expandedRowOffset(int rowNumber) const
void TimelineModel::setExpandedRowHeight(int rowNumber, int height)
{
- Q_D(TimelineModel);
if (height < TimelineModelPrivate::DefaultRowHeight)
height = TimelineModelPrivate::DefaultRowHeight;
@@ -231,8 +214,6 @@ void TimelineModel::setExpandedRowHeight(int rowNumber, int height)
d->rowOffsets[offsetRow] += difference;
}
emit expandedRowHeightChanged(rowNumber, height);
- if (d->expanded)
- emit heightChanged();
}
}
@@ -248,7 +229,6 @@ int TimelineModel::rowHeight(int rowNumber) const
int TimelineModel::height() const
{
- Q_D(const TimelineModel);
if (d->hidden || isEmpty())
return 0;
@@ -266,25 +246,21 @@ int TimelineModel::height() const
*/
int TimelineModel::count() const
{
- Q_D(const TimelineModel);
return d->ranges.count();
}
qint64 TimelineModel::duration(int index) const
{
- Q_D(const TimelineModel);
return d->ranges[index].duration;
}
qint64 TimelineModel::startTime(int index) const
{
- Q_D(const TimelineModel);
return d->ranges[index].start;
}
qint64 TimelineModel::endTime(int index) const
{
- Q_D(const TimelineModel);
return d->ranges[index].start + d->ranges[index].duration;
}
@@ -309,7 +285,6 @@ int TimelineModel::typeId(int index) const
*/
int TimelineModel::firstIndex(qint64 startTime) const
{
- Q_D(const TimelineModel);
int index = d->firstIndexNoParents(startTime);
if (index == -1)
return -1;
@@ -343,7 +318,6 @@ int TimelineModel::TimelineModelPrivate::firstIndexNoParents(qint64 startTime) c
*/
int TimelineModel::lastIndex(qint64 endTime) const
{
- Q_D(const TimelineModel);
// in the "starttime" list, find the last event that starts before endtime
// lowerBound() never returns "invalid", so handle this manually.
@@ -364,8 +338,6 @@ int TimelineModel::lastIndex(qint64 endTime) const
*/
int TimelineModel::bestIndex(qint64 timestamp) const
{
- Q_D(const TimelineModel);
-
if (d->ranges.isEmpty())
return -1;
@@ -390,7 +362,6 @@ int TimelineModel::bestIndex(qint64 timestamp) const
int TimelineModel::parentIndex(int index) const
{
- Q_D(const TimelineModel);
return d->ranges[index].parent;
}
@@ -467,7 +438,6 @@ QRgb TimelineModel::colorByHue(int hue) const
*/
int TimelineModel::insert(qint64 startTime, qint64 duration, int selectionId)
{
- Q_D(TimelineModel);
/* Doing insert-sort here is preferable as most of the time the times will actually be
* presorted in the right way. So usually this will just result in appending. */
int index = d->insertStart(TimelineModelPrivate::Range(startTime, duration, selectionId));
@@ -485,7 +455,6 @@ int TimelineModel::insert(qint64 startTime, qint64 duration, int selectionId)
*/
int TimelineModel::insertStart(qint64 startTime, int selectionId)
{
- Q_D(TimelineModel);
int index = d->insertStart(TimelineModelPrivate::Range(startTime, 0, selectionId));
if (index < d->ranges.size() - 1)
d->incrementStartIndices(index);
@@ -497,52 +466,38 @@ int TimelineModel::insertStart(qint64 startTime, int selectionId)
*/
void TimelineModel::insertEnd(int index, qint64 duration)
{
- Q_D(TimelineModel);
d->ranges[index].duration = duration;
d->insertEnd(TimelineModelPrivate::RangeEnd(index, d->ranges[index].start + duration));
}
bool TimelineModel::expanded() const
{
- Q_D(const TimelineModel);
return d->expanded;
}
void TimelineModel::setExpanded(bool expanded)
{
- Q_D(TimelineModel);
if (expanded != d->expanded) {
- int prevHeight = height();
d->expanded = expanded;
emit expandedChanged();
- if (prevHeight != height())
- emit heightChanged();
- if (d->collapsedRowCount != d->expandedRowCount)
- emit rowCountChanged();
}
}
bool TimelineModel::hidden() const
{
- Q_D(const TimelineModel);
return d->hidden;
}
void TimelineModel::setHidden(bool hidden)
{
- Q_D(TimelineModel);
if (hidden != d->hidden) {
- int prevHeight = height();
d->hidden = hidden;
emit hiddenChanged();
- if (height() != prevHeight)
- emit heightChanged();
}
}
void TimelineModel::setDisplayName(const QString &displayName)
{
- Q_D(TimelineModel);
if (d->displayName != displayName) {
d->displayName = displayName;
emit displayNameChanged();
@@ -551,13 +506,11 @@ void TimelineModel::setDisplayName(const QString &displayName)
QString TimelineModel::displayName() const
{
- Q_D(const TimelineModel);
return d->displayName;
}
int TimelineModel::rowCount() const
{
- Q_D(const TimelineModel);
return d->expanded ? d->expandedRowCount : d->collapsedRowCount;
}
@@ -600,15 +553,11 @@ int TimelineModel::collapsedRow(int index) const
*/
int TimelineModel::selectionId(int index) const
{
- Q_D(const TimelineModel);
return d->ranges[index].selectionId;
}
void TimelineModel::clear()
{
- Q_D(TimelineModel);
- bool hadRowHeights = !d->rowOffsets.empty();
- bool wasEmpty = isEmpty();
setExpandedRowCount(1);
setCollapsedRowCount(1);
setExpanded(false);
@@ -616,27 +565,18 @@ void TimelineModel::clear()
d->rowOffsets.clear();
d->ranges.clear();
d->endTimes.clear();
- if (hadRowHeights)
- emit expandedRowHeightChanged(-1, -1);
- if (!wasEmpty) {
- emit contentChanged();
- emit heightChanged();
- emit labelsChanged();
- emit detailsChanged();
- }
+ emit contentChanged();
}
int TimelineModel::nextItemBySelectionId(int selectionId, qint64 time, int currentItem) const
{
- Q_D(const TimelineModel);
- return d->nextItemById([d, selectionId](int index) {
+ return d->nextItemById([this, selectionId](int index) {
return d->ranges[index].selectionId == selectionId;
}, time, currentItem);
}
int TimelineModel::nextItemByTypeId(int requestedTypeId, qint64 time, int currentItem) const
{
- Q_D(const TimelineModel);
return d->nextItemById([this, requestedTypeId](int index) {
return typeId(index) == requestedTypeId;
}, time, currentItem);
@@ -644,15 +584,13 @@ int TimelineModel::nextItemByTypeId(int requestedTypeId, qint64 time, int curren
int TimelineModel::prevItemBySelectionId(int selectionId, qint64 time, int currentItem) const
{
- Q_D(const TimelineModel);
- return d->prevItemById([d, selectionId](int index) {
+ return d->prevItemById([this, selectionId](int index) {
return d->ranges[index].selectionId == selectionId;
}, time, currentItem);
}
int TimelineModel::prevItemByTypeId(int requestedTypeId, qint64 time, int currentItem) const
{
- Q_D(const TimelineModel);
return d->prevItemById([this, requestedTypeId](int index) {
return typeId(index) == requestedTypeId;
}, time, currentItem);
diff --git a/src/libs/tracing/timelinemodel.h b/src/libs/tracing/timelinemodel.h
index abf0953bac..65d4784e07 100644
--- a/src/libs/tracing/timelinemodel.h
+++ b/src/libs/tracing/timelinemodel.h
@@ -30,6 +30,8 @@
#include <QVariant>
#include <QColor>
+#include <memory>
+
namespace Timeline {
class TimelineModelAggregator;
@@ -42,8 +44,8 @@ class TRACING_EXPORT TimelineModel : public QObject
Q_PROPERTY(bool hidden READ hidden WRITE setHidden NOTIFY hiddenChanged)
Q_PROPERTY(bool expanded READ expanded WRITE setExpanded NOTIFY expandedChanged)
Q_PROPERTY(int height READ height NOTIFY heightChanged)
- Q_PROPERTY(int expandedRowCount READ expandedRowCount NOTIFY expandedRowCountChanged)
- Q_PROPERTY(int collapsedRowCount READ collapsedRowCount NOTIFY collapsedRowCountChanged)
+ Q_PROPERTY(int expandedRowCount READ expandedRowCount NOTIFY contentChanged)
+ Q_PROPERTY(int collapsedRowCount READ collapsedRowCount NOTIFY contentChanged)
Q_PROPERTY(int rowCount READ rowCount NOTIFY rowCountChanged)
Q_PROPERTY(QVariantList labels READ labels NOTIFY labelsChanged)
Q_PROPERTY(int count READ count NOTIFY contentChanged)
@@ -120,8 +122,6 @@ signals:
void expandedRowHeightChanged(int row, int height);
void contentChanged();
void heightChanged();
- void expandedRowCountChanged();
- void collapsedRowCountChanged();
void rowCountChanged();
void displayNameChanged();
void labelsChanged();
@@ -143,8 +143,7 @@ protected:
virtual void clear();
private:
- TimelineModelPrivate *d_ptr;
- Q_DECLARE_PRIVATE(TimelineModel)
+ std::unique_ptr<TimelineModelPrivate> d;
};
} // namespace Timeline
diff --git a/src/libs/tracing/traceevent.h b/src/libs/tracing/traceevent.h
index 780ebf7ad9..7f097315eb 100644
--- a/src/libs/tracing/traceevent.h
+++ b/src/libs/tracing/traceevent.h
@@ -26,13 +26,14 @@
#pragma once
#include "tracing_global.h"
+#include "safecastable.h"
#include <QHash>
#include <QMetaType>
namespace Timeline {
-class TraceEvent
+class TraceEvent : public SafeCastable<TraceEvent>
{
public:
qint64 timestamp() const { return m_timestamp; }
@@ -43,9 +44,11 @@ public:
bool isValid() const { return m_typeIndex != -1; }
+ qint32 classId() const { return m_classId; }
+
protected:
- TraceEvent(qint64 timestamp = -1, qint32 typeIndex = -1)
- : m_timestamp(timestamp), m_typeIndex(typeIndex)
+ TraceEvent(qint32 classId, qint64 timestamp = -1, qint32 typeIndex = -1)
+ : m_timestamp(timestamp), m_typeIndex(typeIndex), m_classId(classId)
{}
TraceEvent(const TraceEvent &) = default;
@@ -56,6 +59,7 @@ protected:
private:
qint64 m_timestamp;
qint32 m_typeIndex;
+ qint32 m_classId;
};
} // namespace Timeline
diff --git a/src/libs/tracing/traceeventtype.h b/src/libs/tracing/traceeventtype.h
index 58a3e180cd..9a667d6fd7 100644
--- a/src/libs/tracing/traceeventtype.h
+++ b/src/libs/tracing/traceeventtype.h
@@ -26,6 +26,7 @@
#pragma once
#include "tracing_global.h"
+#include "safecastable.h"
#include <QHash>
#include <QMetaType>
@@ -33,7 +34,7 @@
namespace Timeline {
-class TraceEventType
+class TraceEventType : public SafeCastable<TraceEventType>
{
public:
const QString &displayName() const { return m_displayName; }
@@ -42,9 +43,11 @@ public:
quint8 feature() const { return m_feature; }
void setFeature(quint8 feature) { m_feature = feature; }
+ qint32 classId() const { return m_classId; }
+
protected:
- TraceEventType(quint8 feature = 255, const QString &displayName = QString())
- : m_displayName(displayName), m_feature(feature)
+ TraceEventType(qint32 classId, quint8 feature = 255, const QString &displayName = QString())
+ : m_displayName(displayName), m_classId(classId), m_feature(feature)
{}
TraceEventType(const TraceEventType &) = default;
@@ -54,6 +57,7 @@ protected:
private:
QString m_displayName;
+ qint32 m_classId;
quint8 m_feature;
};
diff --git a/src/libs/tracing/tracing.pro b/src/libs/tracing/tracing.pro
index 1ef079a20b..a12f03a860 100644
--- a/src/libs/tracing/tracing.pro
+++ b/src/libs/tracing/tracing.pro
@@ -25,6 +25,7 @@ SOURCES += \
HEADERS += \
$$PWD/flamegraph.h \
$$PWD/flamegraphattached.h \
+ $$PWD/safecastable.h \
$$PWD/tracing_global.h \
$$PWD/timelinemodel.h \
$$PWD/timelinemodel_p.h \
diff --git a/src/libs/tracing/tracing.qbs b/src/libs/tracing/tracing.qbs
index d91c765db0..4705d9adc7 100644
--- a/src/libs/tracing/tracing.qbs
+++ b/src/libs/tracing/tracing.qbs
@@ -17,6 +17,7 @@ Project {
"README",
"flamegraph.cpp", "flamegraph.h",
"flamegraphattached.h",
+ "safecastable.h",
"timelineabstractrenderer.cpp", "timelineabstractrenderer.h",
"timelineabstractrenderer_p.h",
"timelineformattime.cpp", "timelineformattime.h",
diff --git a/src/libs/utils/algorithm.h b/src/libs/utils/algorithm.h
index 7692b987fe..42dd638fbf 100644
--- a/src/libs/utils/algorithm.h
+++ b/src/libs/utils/algorithm.h
@@ -229,7 +229,7 @@ protected:
Container *container;
public:
- typedef Container container_type;
+ using container_type = Container;
explicit SetInsertIterator (Container &x)
: container(&x) {}
SetInsertIterator<Container> &operator=(const typename Container::value_type &value)
@@ -253,7 +253,7 @@ template <class Container>
Container *container;
public:
- typedef Container container_type;
+ using container_type = Container;
explicit MapInsertIterator (Container &x)
: container(&x) {}
MapInsertIterator<Container> &operator=(const std::pair<const typename Container::key_type, typename Container::mapped_type> &value)
@@ -627,6 +627,20 @@ Container<T> qobject_container_cast(const Container<Base> &container)
}
//////////////////
+// static_container_cast
+/////////////////
+template <class T, template<typename> class Container, typename Base>
+Container<T> static_container_cast(const Container<Base> &container)
+{
+ Container<T> result;
+ reserve(result, container.size());
+ auto ins = inserter(result);
+ for (Base val : container)
+ ins = static_cast<T>(val);
+ return result;
+}
+
+//////////////////
// sort
/////////////////
template <typename Container>
@@ -713,15 +727,15 @@ auto toConstReferences(const SourceContainer &sources)
/////////////////
template<class C, typename P>
-Q_REQUIRED_RESULT Utils::optional<typename C::value_type> take(C &container, P predicate)
+Q_REQUIRED_RESULT optional<typename C::value_type> take(C &container, P predicate)
{
const auto end = std::end(container);
const auto it = std::find_if(std::begin(container), end, predicate);
if (it == end)
- return Utils::nullopt;
+ return nullopt;
- Utils::optional<typename C::value_type> result = Utils::make_optional(std::move(*it));
+ optional<typename C::value_type> result = Utils::make_optional(std::move(*it));
container.erase(it);
return result;
}
diff --git a/src/libs/utils/ansiescapecodehandler.h b/src/libs/utils/ansiescapecodehandler.h
index 0451297621..b2e848f845 100644
--- a/src/libs/utils/ansiescapecodehandler.h
+++ b/src/libs/utils/ansiescapecodehandler.h
@@ -33,8 +33,8 @@ namespace Utils {
class QTCREATOR_UTILS_EXPORT FormattedText {
public:
- FormattedText() { }
- FormattedText(const FormattedText &other) : text(other.text), format(other.format) { }
+ FormattedText() = default;
+ FormattedText(const FormattedText &other) = default;
FormattedText(const QString &txt, const QTextCharFormat &fmt = QTextCharFormat()) :
text(txt), format(fmt)
{ }
diff --git a/src/libs/utils/appmainwindow.h b/src/libs/utils/appmainwindow.h
index c93695550d..916772a5d1 100644
--- a/src/libs/utils/appmainwindow.h
+++ b/src/libs/utils/appmainwindow.h
@@ -45,7 +45,7 @@ signals:
#ifdef Q_OS_WIN
protected:
virtual bool winEvent(MSG *message, long *result);
- virtual bool event(QEvent *event);
+ bool event(QEvent *event) override;
#endif
private:
diff --git a/src/libs/utils/basetreeview.cpp b/src/libs/utils/basetreeview.cpp
index 59ce925588..bae4c16fef 100644
--- a/src/libs/utils/basetreeview.cpp
+++ b/src/libs/utils/basetreeview.cpp
@@ -50,19 +50,19 @@ class BaseTreeViewPrivate : public QObject
{
public:
explicit BaseTreeViewPrivate(BaseTreeView *parent)
- : q(parent), m_settings(0), m_expectUserChanges(false), m_progressIndicator(0)
+ : q(parent)
{
m_settingsTimer.setSingleShot(true);
connect(&m_settingsTimer, &QTimer::timeout,
this, &BaseTreeViewPrivate::doSaveState);
}
- bool eventFilter(QObject *, QEvent *event)
+ bool eventFilter(QObject *, QEvent *event) override
{
if (event->type() == QEvent::MouseMove) {
// At this time we don't know which section will get which size.
// But we know that a resizedSection() will be emitted later.
- QMouseEvent *me = static_cast<QMouseEvent *>(event);
+ const auto *me = static_cast<QMouseEvent *>(event);
if (me->buttons() & Qt::LeftButton)
m_expectUserChanges = true;
}
@@ -219,11 +219,11 @@ public:
public:
BaseTreeView *q;
QMap<int, int> m_userHandled; // column -> width, "not present" means "automatic"
- QSettings *m_settings;
+ QSettings *m_settings = nullptr;
QTimer m_settingsTimer;
QString m_settingsKey;
- bool m_expectUserChanges;
- ProgressIndicator *m_progressIndicator;
+ bool m_expectUserChanges = false;
+ ProgressIndicator *m_progressIndicator = nullptr;
};
class BaseTreeViewDelegate : public QItemDelegate
@@ -232,7 +232,7 @@ public:
BaseTreeViewDelegate(QObject *parent): QItemDelegate(parent) {}
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option,
- const QModelIndex &index) const
+ const QModelIndex &index) const override
{
Q_UNUSED(option);
QLabel *label = new QLabel(parent);
@@ -283,7 +283,7 @@ BaseTreeView::~BaseTreeView()
void BaseTreeView::setModel(QAbstractItemModel *m)
{
- if (BaseTreeModel *oldModel = qobject_cast<BaseTreeModel *>(model())) {
+ if (auto oldModel = qobject_cast<BaseTreeModel *>(model())) {
disconnect(oldModel, &BaseTreeModel::requestExpansion, this, &BaseTreeView::expand);
disconnect(oldModel, &BaseTreeModel::requestCollapse, this, &BaseTreeView::collapse);
}
@@ -291,7 +291,7 @@ void BaseTreeView::setModel(QAbstractItemModel *m)
TreeView::setModel(m);
if (m) {
- if (BaseTreeModel *newModel = qobject_cast<BaseTreeModel *>(m)) {
+ if (auto newModel = qobject_cast<BaseTreeModel *>(m)) {
connect(newModel, &BaseTreeModel::requestExpansion, this, &BaseTreeView::expand);
connect(newModel, &BaseTreeModel::requestCollapse, this, &BaseTreeView::collapse);
}
@@ -309,6 +309,7 @@ void BaseTreeView::setModel(QAbstractItemModel *m)
void BaseTreeView::mousePressEvent(QMouseEvent *ev)
{
ItemViewEvent ive(ev, this);
+ QTC_ASSERT(model(), return);
if (!model()->setData(ive.index(), QVariant::fromValue(ive), ItemViewEventRole))
TreeView::mousePressEvent(ev);
// Resizing columns by clicking on the empty space seems to be controversial.
@@ -321,6 +322,7 @@ void BaseTreeView::mousePressEvent(QMouseEvent *ev)
void BaseTreeView::mouseReleaseEvent(QMouseEvent *ev)
{
ItemViewEvent ive(ev, this);
+ QTC_ASSERT(model(), return);
if (!model()->setData(ive.index(), QVariant::fromValue(ive), ItemViewEventRole))
TreeView::mouseReleaseEvent(ev);
}
@@ -444,15 +446,17 @@ ItemViewEvent::ItemViewEvent(QEvent *ev, QAbstractItemView *view)
m_index = view->indexAt(m_pos);
break;
default:
- m_index = selection->currentIndex();
+ m_index = selection ? selection->currentIndex() : QModelIndex();
break;
}
- m_selectedRows = selection->selectedRows();
- if (m_selectedRows.isEmpty()) {
- QModelIndex current = selection->currentIndex();
- if (current.isValid())
- m_selectedRows.append(current);
+ if (selection) {
+ m_selectedRows = selection->selectedRows();
+ if (m_selectedRows.isEmpty()) {
+ QModelIndex current = selection->currentIndex();
+ if (current.isValid())
+ m_selectedRows.append(current);
+ }
}
}
diff --git a/src/libs/utils/basetreeview.h b/src/libs/utils/basetreeview.h
index 653d9fb22b..923c69b042 100644
--- a/src/libs/utils/basetreeview.h
+++ b/src/libs/utils/basetreeview.h
@@ -110,7 +110,7 @@ template <class T> T *checkEventType(QEvent *ev)
class QTCREATOR_UTILS_EXPORT ItemViewEvent
{
public:
- ItemViewEvent() {}
+ ItemViewEvent() = default;
ItemViewEvent(QEvent *ev, QAbstractItemView *view);
template <class T> T *as() const {
diff --git a/src/libs/utils/changeset.cpp b/src/libs/utils/changeset.cpp
index 86548a482e..7ee4339182 100644
--- a/src/libs/utils/changeset.cpp
+++ b/src/libs/utils/changeset.cpp
@@ -116,8 +116,8 @@ QList<ChangeSet::EditOp> ChangeSet::operationList() const
void ChangeSet::clear()
{
- m_string = 0;
- m_cursor = 0;
+ m_string = nullptr;
+ m_cursor = nullptr;
m_operationList.clear();
m_error = false;
}
@@ -334,14 +334,14 @@ void ChangeSet::apply(QString *s)
{
m_string = s;
apply_helper();
- m_string = 0;
+ m_string = nullptr;
}
void ChangeSet::apply(QTextCursor *textCursor)
{
m_cursor = textCursor;
apply_helper();
- m_cursor = 0;
+ m_cursor = nullptr;
}
QString ChangeSet::textAt(int pos, int length)
diff --git a/src/libs/utils/changeset.h b/src/libs/utils/changeset.h
index d445237b44..4b63cfb727 100644
--- a/src/libs/utils/changeset.h
+++ b/src/libs/utils/changeset.h
@@ -49,26 +49,25 @@ public:
Copy
};
- EditOp(): type(Unset), pos1(0), pos2(0), length1(0), length2(0) {}
- EditOp(Type t): type(t), pos1(0), pos2(0), length1(0), length2(0) {}
-
- Type type;
- int pos1;
- int pos2;
- int length1;
- int length2;
+ EditOp() = default;
+ EditOp(Type t): type(t) {}
+
+ Type type = Unset;
+ int pos1 = 0;
+ int pos2 = 0;
+ int length1 = 0;
+ int length2 = 0;
QString text;
};
struct Range {
- Range()
- : start(0), end(0) {}
+ Range() = default;
Range(int start, int end)
: start(start), end(end) {}
- int start;
- int end;
+ int start = 0;
+ int end = 0;
};
public:
diff --git a/src/libs/utils/checkablemessagebox.cpp b/src/libs/utils/checkablemessagebox.cpp
index 8813db0bea..70413886fa 100644
--- a/src/libs/utils/checkablemessagebox.cpp
+++ b/src/libs/utils/checkablemessagebox.cpp
@@ -52,7 +52,6 @@ class CheckableMessageBoxPrivate
{
public:
CheckableMessageBoxPrivate(QDialog *q)
- : clickedButton(0)
{
QSizePolicy sizePolicy(QSizePolicy::Minimum, QSizePolicy::Preferred);
@@ -63,7 +62,7 @@ public:
pixmapLabel->setSizePolicy(sizePolicy);
pixmapLabel->setVisible(false);
- QSpacerItem *pixmapSpacer =
+ auto pixmapSpacer =
new QSpacerItem(0, 5, QSizePolicy::Minimum, QSizePolicy::MinimumExpanding);
messageLabel = new QLabel(q);
@@ -72,9 +71,9 @@ public:
messageLabel->setOpenExternalLinks(true);
messageLabel->setTextInteractionFlags(Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse);
- QSpacerItem *checkBoxRightSpacer =
+ auto checkBoxRightSpacer =
new QSpacerItem(1, 1, QSizePolicy::Expanding, QSizePolicy::Minimum);
- QSpacerItem *buttonSpacer =
+ auto buttonSpacer =
new QSpacerItem(0, 1, QSizePolicy::Minimum, QSizePolicy::Minimum);
checkBox = new QCheckBox(q);
@@ -84,30 +83,30 @@ public:
buttonBox->setOrientation(Qt::Horizontal);
buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok);
- QVBoxLayout *verticalLayout = new QVBoxLayout();
+ auto verticalLayout = new QVBoxLayout();
verticalLayout->addWidget(pixmapLabel);
verticalLayout->addItem(pixmapSpacer);
- QHBoxLayout *horizontalLayout_2 = new QHBoxLayout();
+ auto horizontalLayout_2 = new QHBoxLayout();
horizontalLayout_2->addLayout(verticalLayout);
horizontalLayout_2->addWidget(messageLabel);
- QHBoxLayout *horizontalLayout = new QHBoxLayout();
+ auto horizontalLayout = new QHBoxLayout();
horizontalLayout->addWidget(checkBox);
horizontalLayout->addItem(checkBoxRightSpacer);
- QVBoxLayout *verticalLayout_2 = new QVBoxLayout(q);
+ auto verticalLayout_2 = new QVBoxLayout(q);
verticalLayout_2->addLayout(horizontalLayout_2);
verticalLayout_2->addLayout(horizontalLayout);
verticalLayout_2->addItem(buttonSpacer);
verticalLayout_2->addWidget(buttonBox);
}
- QLabel *pixmapLabel;
- QLabel *messageLabel;
- QCheckBox *checkBox;
- QDialogButtonBox *buttonBox;
- QAbstractButton *clickedButton;
+ QLabel *pixmapLabel = nullptr;
+ QLabel *messageLabel = nullptr;
+ QCheckBox *checkBox = nullptr;
+ QDialogButtonBox *buttonBox = nullptr;
+ QAbstractButton *clickedButton = nullptr;
};
CheckableMessageBox::CheckableMessageBox(QWidget *parent) :
@@ -215,7 +214,7 @@ QPushButton *CheckableMessageBox::addButton(const QString &text, QDialogButtonBo
QDialogButtonBox::StandardButton CheckableMessageBox::defaultButton() const
{
foreach (QAbstractButton *b, d->buttonBox->buttons())
- if (QPushButton *pb = qobject_cast<QPushButton *>(b))
+ if (auto *pb = qobject_cast<QPushButton *>(b))
if (pb->isDefault())
return d->buttonBox->standardButton(pb);
return QDialogButtonBox::NoButton;
diff --git a/src/libs/utils/classnamevalidatinglineedit.cpp b/src/libs/utils/classnamevalidatinglineedit.cpp
index 62bc091ab7..ca032a0c44 100644
--- a/src/libs/utils/classnamevalidatinglineedit.cpp
+++ b/src/libs/utils/classnamevalidatinglineedit.cpp
@@ -45,17 +45,14 @@ struct ClassNameValidatingLineEditPrivate {
QRegExp m_nameRegexp;
QString m_namespaceDelimiter;
- bool m_namespacesEnabled;
- bool m_lowerCaseFileName;
- bool m_forceFirstCapitalLetter;
+ bool m_namespacesEnabled = false;
+ bool m_lowerCaseFileName = true;
+ bool m_forceFirstCapitalLetter = false;
};
// Match something like "Namespace1::Namespace2::ClassName".
ClassNameValidatingLineEditPrivate:: ClassNameValidatingLineEditPrivate() :
- m_namespaceDelimiter(QLatin1String("::")),
- m_namespacesEnabled(false),
- m_lowerCaseFileName(true),
- m_forceFirstCapitalLetter(false)
+ m_namespaceDelimiter(QLatin1String("::"))
{
}
diff --git a/src/libs/utils/completinglineedit.cpp b/src/libs/utils/completinglineedit.cpp
index 5ae7448288..4711ee8e72 100644
--- a/src/libs/utils/completinglineedit.cpp
+++ b/src/libs/utils/completinglineedit.cpp
@@ -43,7 +43,7 @@ bool CompletingLineEdit::event(QEvent *e)
if (e->type() == QEvent::ShortcutOverride) {
if (QCompleter *comp = completer()) {
if (comp->popup() && comp->popup()->isVisible()) {
- QKeyEvent *ke = static_cast<QKeyEvent *>(e);
+ auto ke = static_cast<QKeyEvent *>(e);
if (ke->key() == Qt::Key_Escape && !ke->modifiers()) {
ke->accept();
return true;
diff --git a/src/libs/utils/completingtextedit.cpp b/src/libs/utils/completingtextedit.cpp
index 5f55778134..f4d7b0441c 100644
--- a/src/libs/utils/completingtextedit.cpp
+++ b/src/libs/utils/completingtextedit.cpp
@@ -55,17 +55,15 @@ public:
bool acceptsCompletionPrefix(const QString &prefix) const;
- QCompleter *m_completer;
- int m_completionLengthThreshold;
+ QCompleter *m_completer = nullptr;
+ int m_completionLengthThreshold = 3;
private:
CompletingTextEdit *m_backPointer;
};
CompletingTextEditPrivate::CompletingTextEditPrivate(CompletingTextEdit *textEdit)
- : m_completer(0),
- m_completionLengthThreshold(3),
- m_backPointer(textEdit)
+ : m_backPointer(textEdit)
{
}
@@ -107,7 +105,7 @@ CompletingTextEdit::~CompletingTextEdit()
void CompletingTextEdit::setCompleter(QCompleter *c)
{
if (completer())
- disconnect(completer(), 0, this, 0);
+ disconnect(completer(), nullptr, this, nullptr);
d->m_completer = c;
@@ -153,12 +151,12 @@ void CompletingTextEdit::keyPressEvent(QKeyEvent *e)
}
const bool isShortcut = ((e->modifiers() & Qt::ControlModifier) && e->key() == Qt::Key_E); // CTRL+E
- if (completer() == 0 || !isShortcut) // do not process the shortcut when we have a completer
+ if (completer() == nullptr || !isShortcut) // do not process the shortcut when we have a completer
QTextEdit::keyPressEvent(e);
const bool ctrlOrShift = e->modifiers() & (Qt::ControlModifier | Qt::ShiftModifier);
const QString text = e->text();
- if (completer() == 0 || (ctrlOrShift && text.isEmpty()))
+ if (completer() == nullptr || (ctrlOrShift && text.isEmpty()))
return;
const bool hasModifier = (e->modifiers() != Qt::NoModifier) && !ctrlOrShift;
@@ -183,7 +181,7 @@ void CompletingTextEdit::keyPressEvent(QKeyEvent *e)
void CompletingTextEdit::focusInEvent(QFocusEvent *e)
{
- if (completer() != 0)
+ if (completer() != nullptr)
completer()->setWidget(this);
QTextEdit::focusInEvent(e);
}
@@ -193,7 +191,7 @@ bool CompletingTextEdit::event(QEvent *e)
// workaround for QTCREATORBUG-9453
if (e->type() == QEvent::ShortcutOverride && completer()
&& completer()->popup() && completer()->popup()->isVisible()) {
- QKeyEvent *ke = static_cast<QKeyEvent *>(e);
+ auto ke = static_cast<QKeyEvent *>(e);
if (ke->key() == Qt::Key_Escape && !ke->modifiers()) {
ke->accept();
return true;
diff --git a/src/libs/utils/consoleprocess_p.h b/src/libs/utils/consoleprocess_p.h
index 8fa610a709..5d8d193493 100644
--- a/src/libs/utils/consoleprocess_p.h
+++ b/src/libs/utils/consoleprocess_p.h
@@ -48,32 +48,32 @@ struct ConsoleProcessPrivate {
ConsoleProcessPrivate();
static QString m_defaultConsoleProcess;
- ConsoleProcess::Mode m_mode;
+ ConsoleProcess::Mode m_mode = ConsoleProcess::Run;
QString m_workingDir;
Environment m_environment;
- qint64 m_appPid;
+ qint64 m_appPid = 0;
int m_appCode;
QString m_executable;
QProcess::ExitStatus m_appStatus;
QLocalServer m_stubServer;
- QLocalSocket *m_stubSocket;
- QTemporaryFile *m_tempFile;
- QProcess::ProcessError m_error;
+ QLocalSocket *m_stubSocket = nullptr;
+ QTemporaryFile *m_tempFile = nullptr;
+ QProcess::ProcessError m_error = QProcess::UnknownError;
QString m_errorString;
#ifdef Q_OS_UNIX
QProcess m_process;
QByteArray m_stubServerDir;
- QSettings *m_settings;
- bool m_stubConnected;
- qint64 m_stubPid;
- QTimer *m_stubConnectTimer;
+ QSettings *m_settings = nullptr;
+ bool m_stubConnected = false;
+ qint64 m_stubPid = 0;
+ QTimer *m_stubConnectTimer = nullptr;
#else
- qint64 m_appMainThreadId;
- PROCESS_INFORMATION *m_pid;
- HANDLE m_hInferior;
- QWinEventNotifier *inferiorFinishedNotifier;
- QWinEventNotifier *processFinishedNotifier;
+ qint64 m_appMainThreadId = 0;
+ PROCESS_INFORMATION *m_pid = nullptr;
+ HANDLE m_hInferior = NULL;
+ QWinEventNotifier *inferiorFinishedNotifier = nullptr;
+ QWinEventNotifier *processFinishedNotifier = nullptr;
#endif
};
diff --git a/src/libs/utils/consoleprocess_unix.cpp b/src/libs/utils/consoleprocess_unix.cpp
index 223f8ebdab..be07027f6e 100644
--- a/src/libs/utils/consoleprocess_unix.cpp
+++ b/src/libs/utils/consoleprocess_unix.cpp
@@ -43,18 +43,7 @@
namespace Utils {
-ConsoleProcessPrivate::ConsoleProcessPrivate() :
- m_mode(ConsoleProcess::Run),
- m_appPid(0),
- m_stubSocket(0),
- m_tempFile(0),
- m_error(QProcess::UnknownError),
- m_settings(0),
- m_stubConnected(false),
- m_stubPid(0),
- m_stubConnectTimer(0)
-{
-}
+ConsoleProcessPrivate::ConsoleProcessPrivate() = default;
ConsoleProcess::ConsoleProcess(QObject *parent) :
QObject(parent), d(new ConsoleProcessPrivate)
diff --git a/src/libs/utils/consoleprocess_win.cpp b/src/libs/utils/consoleprocess_win.cpp
index f12d31e8af..344642542e 100644
--- a/src/libs/utils/consoleprocess_win.cpp
+++ b/src/libs/utils/consoleprocess_win.cpp
@@ -36,19 +36,7 @@
namespace Utils {
-ConsoleProcessPrivate::ConsoleProcessPrivate() :
- m_mode(ConsoleProcess::Run),
- m_appPid(0),
- m_stubSocket(0),
- m_tempFile(0),
- m_error(QProcess::UnknownError),
- m_appMainThreadId(0),
- m_pid(0),
- m_hInferior(NULL),
- inferiorFinishedNotifier(0),
- processFinishedNotifier(0)
-{
-}
+ConsoleProcessPrivate::ConsoleProcessPrivate() = default;
ConsoleProcess::ConsoleProcess(QObject *parent) :
QObject(parent), d(new ConsoleProcessPrivate)
@@ -95,7 +83,7 @@ bool ConsoleProcess::start(const QString &program, const QString &args)
stubServerShutdown();
emitError(QProcess::FailedToStart, msgCannotCreateTempFile(d->m_tempFile->errorString()));
delete d->m_tempFile;
- d->m_tempFile = 0;
+ d->m_tempFile = nullptr;
return false;
}
QTextStream out(d->m_tempFile);
@@ -109,7 +97,7 @@ bool ConsoleProcess::start(const QString &program, const QString &args)
stubServerShutdown();
emitError(QProcess::FailedToStart, msgCannotWriteTempFile());
delete d->m_tempFile;
- d->m_tempFile = 0;
+ d->m_tempFile = nullptr;
return false;
}
}
@@ -143,9 +131,9 @@ bool ConsoleProcess::start(const QString &program, const QString &args)
if (!success) {
delete d->m_pid;
- d->m_pid = 0;
+ d->m_pid = nullptr;
delete d->m_tempFile;
- d->m_tempFile = 0;
+ d->m_tempFile = nullptr;
stubServerShutdown();
emitError(QProcess::FailedToStart, tr("The process \"%1\" could not be started: %2").arg(cmdLine, winErrorMessage(GetLastError())));
return false;
@@ -183,7 +171,7 @@ void ConsoleProcess::stop()
bool ConsoleProcess::isRunning() const
{
- return d->m_pid != 0;
+ return d->m_pid != nullptr;
}
QString ConsoleProcess::stubServerListen()
@@ -198,7 +186,7 @@ QString ConsoleProcess::stubServerListen()
void ConsoleProcess::stubServerShutdown()
{
delete d->m_stubSocket;
- d->m_stubSocket = 0;
+ d->m_stubSocket = nullptr;
if (d->m_stubServer.isListening())
d->m_stubServer.close();
}
@@ -224,7 +212,7 @@ void ConsoleProcess::readStubOutput()
} else if (out.startsWith("pid ")) {
// Will not need it any more
delete d->m_tempFile;
- d->m_tempFile = 0;
+ d->m_tempFile = nullptr;
d->m_appPid = out.mid(4).toLongLong();
d->m_hInferior = OpenProcess(
@@ -251,7 +239,7 @@ void ConsoleProcess::readStubOutput()
void ConsoleProcess::cleanupInferior()
{
delete d->inferiorFinishedNotifier;
- d->inferiorFinishedNotifier = 0;
+ d->inferiorFinishedNotifier = nullptr;
CloseHandle(d->m_hInferior);
d->m_hInferior = NULL;
d->m_appPid = 0;
@@ -274,13 +262,13 @@ void ConsoleProcess::cleanupStub()
{
stubServerShutdown();
delete d->processFinishedNotifier;
- d->processFinishedNotifier = 0;
+ d->processFinishedNotifier = nullptr;
CloseHandle(d->m_pid->hThread);
CloseHandle(d->m_pid->hProcess);
delete d->m_pid;
- d->m_pid = 0;
+ d->m_pid = nullptr;
delete d->m_tempFile;
- d->m_tempFile = 0;
+ d->m_tempFile = nullptr;
}
void ConsoleProcess::stubExited()
diff --git a/src/libs/utils/crumblepath.cpp b/src/libs/utils/crumblepath.cpp
index e30332a907..ad8c81ef0a 100644
--- a/src/libs/utils/crumblepath.cpp
+++ b/src/libs/utils/crumblepath.cpp
@@ -96,7 +96,7 @@ static QPixmap segmentPixmap(CrumblePathButton::SegmentType type, QStyle::State
if (!QPixmapCache::find(pixmapKey, pixmap)) {
const QString maskFileName = QStringLiteral(":/utils/images/crumblepath-segment-%1%2.png")
.arg(segmentName).arg(QLatin1String(hover ? "-hover" : ""));
- pixmap = Utils::Icon({{maskFileName, Theme::IconsBaseColor}}).pixmap(iconMode);
+ pixmap = Icon({{maskFileName, Theme::IconsBaseColor}}).pixmap(iconMode);
QPixmapCache::insert(pixmapKey, pixmap);
}
diff --git a/src/libs/utils/annotateditemdelegate.cpp b/src/libs/utils/delegates.cpp
index 0756f000f7..6b6ab7279e 100644
--- a/src/libs/utils/annotateditemdelegate.cpp
+++ b/src/libs/utils/delegates.cpp
@@ -23,7 +23,7 @@
**
****************************************************************************/
-#include "annotateditemdelegate.h"
+#include "delegates.h"
#include <QPainter>
#include <QApplication>
@@ -33,8 +33,7 @@ using namespace Utils;
AnnotatedItemDelegate::AnnotatedItemDelegate(QObject *parent) : QStyledItemDelegate(parent)
{}
-AnnotatedItemDelegate::~AnnotatedItemDelegate()
-{}
+AnnotatedItemDelegate::~AnnotatedItemDelegate() = default;
void AnnotatedItemDelegate::setAnnotationRole(int role)
{
@@ -110,5 +109,68 @@ QSize AnnotatedItemDelegate::sizeHint(const QStyleOptionViewItem &option,
if (!annotation.isEmpty())
opt.text += m_delimiter + annotation;
- return QApplication::style()->sizeFromContents(QStyle::CT_ItemViewItem, &opt, QSize(), 0);
+ return QApplication::style()->sizeFromContents(QStyle::CT_ItemViewItem, &opt, QSize(), nullptr);
+}
+
+PathChooserDelegate::PathChooserDelegate(QObject *parent)
+ : QStyledItemDelegate(parent)
+{
+}
+
+void PathChooserDelegate::setExpectedKind(Utils::PathChooser::Kind kind)
+{
+ m_kind = kind;
+}
+
+void PathChooserDelegate::setPromptDialogFilter(const QString &filter)
+{
+ m_filter = filter;
+}
+
+QWidget *PathChooserDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
+{
+ Q_UNUSED(option);
+ Q_UNUSED(index);
+
+ auto editor = new Utils::PathChooser(parent);
+
+ editor->setHistoryCompleter(m_historyKey);
+ editor->setAutoFillBackground(true); // To hide the text beneath the editor widget
+ editor->lineEdit()->setMinimumWidth(0);
+
+ connect(editor, &Utils::PathChooser::browsingFinished, this, [this, editor]() {
+ emit const_cast<PathChooserDelegate*>(this)->commitData(editor);
+ });
+
+ return editor;
+}
+
+void PathChooserDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
+{
+ if (auto *pathChooser = qobject_cast<Utils::PathChooser *>(editor)) {
+ pathChooser->setExpectedKind(m_kind);
+ pathChooser->setPromptDialogFilter(m_filter);
+ pathChooser->setPath(index.model()->data(index, Qt::EditRole).toString());
+ }
+}
+
+void PathChooserDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
+{
+ auto pathChooser = qobject_cast<Utils::PathChooser *>(editor);
+ if (!pathChooser)
+ return;
+
+ model->setData(index, pathChooser->path(), Qt::EditRole);
+}
+
+void PathChooserDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const
+{
+ Q_UNUSED(index);
+
+ editor->setGeometry(option.rect);
+}
+
+void PathChooserDelegate::setHistoryCompleter(const QString &key)
+{
+ m_historyKey = key;
}
diff --git a/src/libs/utils/annotateditemdelegate.h b/src/libs/utils/delegates.h
index ffbcfbd9f4..cb9809a36f 100644
--- a/src/libs/utils/annotateditemdelegate.h
+++ b/src/libs/utils/delegates.h
@@ -26,6 +26,7 @@
#pragma once
#include "utils_global.h"
+#include "pathchooser.h"
#include <QStyledItemDelegate>
@@ -54,4 +55,30 @@ private:
QString m_delimiter;
};
+class QTCREATOR_UTILS_EXPORT PathChooserDelegate : public QStyledItemDelegate
+{
+public:
+ explicit PathChooserDelegate(QObject *parent = nullptr);
+
+ void setExpectedKind(PathChooser::Kind kind);
+ void setPromptDialogFilter(const QString &filter);
+
+ QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option,
+ const QModelIndex &index) const override;
+
+ void setEditorData(QWidget *editor, const QModelIndex &index) const override;
+ void setModelData(QWidget *editor, QAbstractItemModel *model,
+ const QModelIndex &index) const override;
+
+ void updateEditorGeometry(QWidget *editor,
+ const QStyleOptionViewItem &option, const QModelIndex &index) const override;
+
+ void setHistoryCompleter(const QString &key);
+
+private:
+ PathChooser::Kind m_kind = PathChooser::ExistingDirectory;
+ QString m_filter;
+ QString m_historyKey;
+};
+
} // Utils
diff --git a/src/libs/utils/detailswidget.cpp b/src/libs/utils/detailswidget.cpp
index e0e4139f1d..dd02d1a4a5 100644
--- a/src/libs/utils/detailswidget.cpp
+++ b/src/libs/utils/detailswidget.cpp
@@ -100,7 +100,7 @@ DetailsWidgetPrivate::DetailsWidgetPrivate(QWidget *parent) :
m_hovered(false),
m_useCheckBox(false)
{
- QHBoxLayout *summaryLayout = new QHBoxLayout;
+ auto summaryLayout = new QHBoxLayout;
summaryLayout->setContentsMargins(MARGIN, MARGIN, MARGIN, MARGIN);
summaryLayout->setSpacing(0);
@@ -177,7 +177,7 @@ void DetailsWidgetPrivate::updateControls()
for (QWidget *w = q; w; w = w->parentWidget()) {
if (w->layout())
w->layout()->activate();
- if (QScrollArea *area = qobject_cast<QScrollArea*>(w)) {
+ if (auto area = qobject_cast<QScrollArea*>(w)) {
QEvent e(QEvent::LayoutRequest);
QCoreApplication::sendEvent(area, &e);
}
@@ -249,7 +249,7 @@ void DetailsWidget::setSummaryFontBold(bool b)
void DetailsWidget::setIcon(const QIcon &icon)
{
- int iconSize = style()->pixelMetric(QStyle::PM_ButtonIconSize, 0, this);
+ int iconSize = style()->pixelMetric(QStyle::PM_ButtonIconSize, nullptr, this);
d->m_summaryLabelIcon->setFixedWidth(icon.isNull() ? 0 : iconSize);
d->m_summaryLabelIcon->setPixmap(icon.pixmap(iconSize, iconSize));
d->m_summaryCheckBox->setIcon(icon);
@@ -347,10 +347,10 @@ QWidget *DetailsWidget::widget() const
QWidget *DetailsWidget::takeWidget()
{
QWidget *widget = d->m_widget;
- d->m_widget = 0;
+ d->m_widget = nullptr;
d->m_grid->removeWidget(widget);
if (widget)
- widget->setParent(0);
+ widget->setParent(nullptr);
return widget;
}
diff --git a/src/libs/utils/dropsupport.cpp b/src/libs/utils/dropsupport.cpp
index fb78b12ef9..c202714bb2 100644
--- a/src/libs/utils/dropsupport.cpp
+++ b/src/libs/utils/dropsupport.cpp
@@ -39,10 +39,10 @@
namespace Utils {
-static bool isFileDrop(const QMimeData *d, QList<DropSupport::FileSpec> *files = 0)
+static bool isFileDrop(const QMimeData *d, QList<DropSupport::FileSpec> *files = nullptr)
{
// internal drop
- if (const DropMimeData *internalData = qobject_cast<const DropMimeData *>(d)) {
+ if (const auto internalData = qobject_cast<const DropMimeData *>(d)) {
if (files)
*files = internalData->files();
return !internalData->files().isEmpty();
@@ -99,7 +99,7 @@ bool DropSupport::isFileDrop(QDropEvent *event) const
bool DropSupport::isValueDrop(QDropEvent *event) const
{
- if (const DropMimeData *internalData = qobject_cast<const DropMimeData *>(event->mimeData())) {
+ if (const auto internalData = qobject_cast<const DropMimeData *>(event->mimeData())) {
return !internalData->values().isEmpty();
}
return false;
@@ -123,7 +123,7 @@ bool DropSupport::eventFilter(QObject *obj, QEvent *event)
bool accepted = false;
auto de = static_cast<QDropEvent *>(event);
if (!m_filterFunction || m_filterFunction(de, this)) {
- const DropMimeData *fileDropMimeData = qobject_cast<const DropMimeData *>(de->mimeData());
+ const auto fileDropMimeData = qobject_cast<const DropMimeData *>(de->mimeData());
QList<FileSpec> tempFiles;
if (Utils::isFileDrop(de->mimeData(), &tempFiles)) {
event->accept();
diff --git a/src/libs/utils/dropsupport.h b/src/libs/utils/dropsupport.h
index 720612ada3..e12dcdad87 100644
--- a/src/libs/utils/dropsupport.h
+++ b/src/libs/utils/dropsupport.h
@@ -51,7 +51,7 @@ public:
int column;
};
// returns true if the event should be accepted
- typedef std::function<bool(QDropEvent*,DropSupport*)> DropFilterFunction;
+ using DropFilterFunction = std::function<bool(QDropEvent*, DropSupport*)>;
DropSupport(QWidget *parentWidget, const DropFilterFunction &filterFunction = DropFilterFunction());
diff --git a/src/libs/utils/elfreader.cpp b/src/libs/utils/elfreader.cpp
index d26b7523a1..7f685e8552 100644
--- a/src/libs/utils/elfreader.cpp
+++ b/src/libs/utils/elfreader.cpp
@@ -108,7 +108,7 @@ bool ElfMapper::map()
fdlen = file.size();
ustart = file.map(0, fdlen);
- if (ustart == 0) {
+ if (ustart == nullptr) {
// Try reading the data into memory instead.
try {
raw = file.readAll();
@@ -221,7 +221,7 @@ ElfReader::Result ElfReader::readIt()
QTC_CHECK(data == mapper.ustart + (is64Bit ? 64 : 52));
if (quint64(e_shnum) * e_shentsize > fdlen) {
- const QString reason = tr("announced %n sections, each %1 bytes, exceed file size", 0, e_shnum)
+ const QString reason = tr("announced %n sections, each %1 bytes, exceed file size", nullptr, e_shnum)
.arg(e_shentsize);
m_errorString = msgInvalidElfObject(m_binary, reason);
return Corrupt;
diff --git a/src/libs/utils/elfreader.h b/src/libs/utils/elfreader.h
index d1c1dc2286..cc82e71d01 100644
--- a/src/libs/utils/elfreader.h
+++ b/src/libs/utils/elfreader.h
@@ -137,7 +137,7 @@ public:
class QTCREATOR_UTILS_EXPORT ElfData
{
public:
- ElfData() : symbolsType(UnknownSymbols) {}
+ ElfData() = default;
int indexOf(const QByteArray &name) const;
public:
@@ -148,7 +148,7 @@ public:
quint64 entryPoint;
QByteArray debugLink;
QByteArray buildId;
- DebugSymbolsType symbolsType;
+ DebugSymbolsType symbolsType = UnknownSymbols;
QVector<ElfSectionHeader> sectionHeaders;
QVector<ElfProgramHeader> programHeaders;
};
diff --git a/src/libs/utils/environment.cpp b/src/libs/utils/environment.cpp
index 1efbc024dd..9b77a8b71e 100644
--- a/src/libs/utils/environment.cpp
+++ b/src/libs/utils/environment.cpp
@@ -183,16 +183,16 @@ QDebug operator<<(QDebug debug, const EnvironmentItem &i)
debug.nospace();
debug << "EnvironmentItem(";
switch (i.operation) {
- case Utils::EnvironmentItem::Set:
+ case EnvironmentItem::Set:
debug << "set \"" << i.name << "\" to \"" << i.value << '"';
break;
- case Utils::EnvironmentItem::Unset:
+ case EnvironmentItem::Unset:
debug << "unset \"" << i.name << '"';
break;
- case Utils::EnvironmentItem::Prepend:
+ case EnvironmentItem::Prepend:
debug << "prepend to \"" << i.name << "\":\"" << i.value << '"';
break;
- case Utils::EnvironmentItem::Append:
+ case EnvironmentItem::Append:
debug << "append to \"" << i.name << "\":\"" << i.value << '"';
break;
}
diff --git a/src/libs/utils/environment.h b/src/libs/utils/environment.h
index ea2dab2420..4803dda2a5 100644
--- a/src/libs/utils/environment.h
+++ b/src/libs/utils/environment.h
@@ -82,7 +82,7 @@ QTCREATOR_UTILS_EXPORT QDebug operator<<(QDebug debug, const EnvironmentItem &i)
class QTCREATOR_UTILS_EXPORT Environment
{
public:
- typedef QMap<QString, QString>::const_iterator const_iterator;
+ using const_iterator = QMap<QString, QString>::const_iterator;
explicit Environment(OsType osType = HostOsInfo::hostOs()) : m_osType(osType) {}
explicit Environment(const QStringList &env, OsType osType = HostOsInfo::hostOs());
diff --git a/src/libs/utils/fadingindicator.cpp b/src/libs/utils/fadingindicator.cpp
index a9718c9118..954d076e53 100644
--- a/src/libs/utils/fadingindicator.cpp
+++ b/src/libs/utils/fadingindicator.cpp
@@ -76,7 +76,7 @@ public:
void setPixmap(const QString &uri)
{
m_label->hide();
- m_pixmap.load(Utils::StyleHelper::dpiSpecificImageFile(uri));
+ m_pixmap.load(StyleHelper::dpiSpecificImageFile(uri));
layout()->setSizeConstraint(QLayout::SetNoConstraint);
resize(m_pixmap.size() / m_pixmap.devicePixelRatio());
if (QWidget *parent = parentWidget())
@@ -91,7 +91,7 @@ public:
}
protected:
- void paintEvent(QPaintEvent *)
+ void paintEvent(QPaintEvent *) override
{
QPainter p(this);
p.setRenderHint(QPainter::Antialiasing);
diff --git a/src/libs/utils/faketooltip.cpp b/src/libs/utils/faketooltip.cpp
index 05a4760faf..8d111887ae 100644
--- a/src/libs/utils/faketooltip.cpp
+++ b/src/libs/utils/faketooltip.cpp
@@ -52,9 +52,9 @@ FakeToolTip::FakeToolTip(QWidget *parent) :
p.setColor(QPalette::Inactive, QPalette::ButtonText, toolTipTextColor);
setPalette(p);
- const int margin = 1 + style()->pixelMetric(QStyle::PM_ToolTipLabelFrameWidth, 0, this);
+ const int margin = 1 + style()->pixelMetric(QStyle::PM_ToolTipLabelFrameWidth, nullptr, this);
setContentsMargins(margin + 1, margin, margin, margin);
- setWindowOpacity(style()->styleHint(QStyle::SH_ToolTipLabel_Opacity, 0, this) / 255.0);
+ setWindowOpacity(style()->styleHint(QStyle::SH_ToolTipLabel_Opacity, nullptr, this) / 255.0);
}
void FakeToolTip::paintEvent(QPaintEvent *)
diff --git a/src/libs/utils/fancylineedit.cpp b/src/libs/utils/fancylineedit.cpp
index 93d9830d15..9efe74687e 100644
--- a/src/libs/utils/fancylineedit.cpp
+++ b/src/libs/utils/fancylineedit.cpp
@@ -89,7 +89,7 @@ public:
FancyLineEdit *m_lineEdit;
IconButton *m_iconbutton[2];
- HistoryCompleter *m_historyCompleter = 0;
+ HistoryCompleter *m_historyCompleter = nullptr;
FancyLineEdit::ValidationFunction m_validationFunction = &FancyLineEdit::validateWithValidator;
QString m_oldText;
QMenu *m_menu[2];
@@ -119,7 +119,7 @@ FancyLineEditPrivate::FancyLineEditPrivate(FancyLineEdit *parent) :
m_iconbutton[i]->hide();
m_iconbutton[i]->setAutoHide(false);
- m_menu[i] = 0;
+ m_menu[i] = nullptr;
m_menuTabFocusTrigger[i] = false;
m_iconEnabled[i] = false;
@@ -194,7 +194,7 @@ QAbstractButton *FancyLineEdit::button(FancyLineEdit::Side side) const
void FancyLineEdit::iconClicked()
{
- IconButton *button = qobject_cast<IconButton *>(sender());
+ auto button = qobject_cast<IconButton *>(sender());
int index = -1;
for (int i = 0; i < 2; ++i)
if (d->m_iconbutton[i] == button)
diff --git a/src/libs/utils/fancylineedit.h b/src/libs/utils/fancylineedit.h
index 8cef228b0d..3f40d93df2 100644
--- a/src/libs/utils/fancylineedit.h
+++ b/src/libs/utils/fancylineedit.h
@@ -121,7 +121,7 @@ public:
// Validation
// line edit, (out)errorMessage -> valid?
- typedef std::function<bool(FancyLineEdit *, QString *)> ValidationFunction;
+ using ValidationFunction = std::function<bool(FancyLineEdit *, QString *)>;
enum State { Invalid, DisplayingPlaceholderText, Valid };
State state() const;
diff --git a/src/libs/utils/fancymainwindow.cpp b/src/libs/utils/fancymainwindow.cpp
index 5ce2c25b36..e3bec7be0b 100644
--- a/src/libs/utils/fancymainwindow.cpp
+++ b/src/libs/utils/fancymainwindow.cpp
@@ -73,9 +73,9 @@ class DockWidget : public QDockWidget
public:
DockWidget(QWidget *inner, FancyMainWindow *parent, bool immutable = false);
- bool eventFilter(QObject *, QEvent *event);
- void enterEvent(QEvent *event);
- void leaveEvent(QEvent *event);
+ bool eventFilter(QObject *, QEvent *event) override;
+ void enterEvent(QEvent *event) override;
+ void leaveEvent(QEvent *event) override;
void handleMouseTimeout();
void handleToplevelChanged(bool floating);
@@ -98,13 +98,13 @@ public:
setFocusPolicy(Qt::NoFocus);
}
- QSize sizeHint() const
+ QSize sizeHint() const override
{
ensurePolished();
- int size = 2*style()->pixelMetric(QStyle::PM_DockWidgetTitleBarButtonMargin, 0, this);
+ int size = 2*style()->pixelMetric(QStyle::PM_DockWidgetTitleBarButtonMargin, nullptr, this);
if (!icon().isNull()) {
- int iconSize = style()->pixelMetric(QStyle::PM_SmallIconSize, 0, this);
+ int iconSize = style()->pixelMetric(QStyle::PM_SmallIconSize, nullptr, this);
QSize sz = icon().actualSize(QSize(iconSize, iconSize));
size += qMax(sz.width(), sz.height());
}
@@ -112,23 +112,23 @@ public:
return QSize(size, size);
}
- QSize minimumSizeHint() const { return sizeHint(); }
+ QSize minimumSizeHint() const override { return sizeHint(); }
- void enterEvent(QEvent *event)
+ void enterEvent(QEvent *event) override
{
if (isEnabled())
update();
QAbstractButton::enterEvent(event);
}
- void leaveEvent(QEvent *event)
+ void leaveEvent(QEvent *event) override
{
if (isEnabled())
update();
QAbstractButton::leaveEvent(event);
}
- void paintEvent(QPaintEvent *event);
+ void paintEvent(QPaintEvent *event) override;
};
void DockWidgetTitleButton::paintEvent(QPaintEvent *)
@@ -139,11 +139,11 @@ void DockWidgetTitleButton::paintEvent(QPaintEvent *)
opt.init(this);
opt.state |= QStyle::State_AutoRaise;
opt.icon = icon();
- opt.subControls = 0;
- opt.activeSubControls = 0;
+ opt.subControls = nullptr;
+ opt.activeSubControls = nullptr;
opt.features = QStyleOptionToolButton::None;
opt.arrowType = Qt::NoArrow;
- int size = style()->pixelMetric(QStyle::PM_SmallIconSize, 0, this);
+ int size = style()->pixelMetric(QStyle::PM_SmallIconSize, nullptr, this);
opt.iconSize = QSize(size, size);
style()->drawComplexControl(QStyle::CC_ToolButton, &opt, &p, this);
}
@@ -194,7 +194,7 @@ public:
setProperty("managed_titlebar", 1);
}
- void enterEvent(QEvent *event)
+ void enterEvent(QEvent *event) override
{
setActive(true);
QWidget::enterEvent(event);
@@ -219,13 +219,13 @@ public:
return m_active || !q->q->autoHideTitleBars();
}
- QSize sizeHint() const
+ QSize sizeHint() const override
{
ensurePolished();
return isClickable() ? m_maximumActiveSize : m_maximumInactiveSize;
}
- QSize minimumSizeHint() const
+ QSize minimumSizeHint() const override
{
ensurePolished();
return isClickable() ? m_minimumActiveSize : m_minimumInactiveSize;
@@ -292,7 +292,7 @@ DockWidget::DockWidget(QWidget *inner, FancyMainWindow *parent, bool immutable)
bool DockWidget::eventFilter(QObject *, QEvent *event)
{
if (!m_immutable && event->type() == QEvent::MouseMove && q->autoHideTitleBars()) {
- QMouseEvent *me = static_cast<QMouseEvent *>(event);
+ auto me = static_cast<QMouseEvent *>(event);
int y = me->pos().y();
int x = me->pos().x();
int h = qMin(8, m_titleBar->m_floatButton->height());
@@ -350,11 +350,11 @@ void DockWidget::handleToplevelChanged(bool floating)
FancyMainWindowPrivate::FancyMainWindowPrivate(FancyMainWindow *parent) :
q(parent),
m_handleDockVisibilityChanges(true),
- m_showCentralWidget(FancyMainWindow::tr("Central Widget"), 0),
- m_menuSeparator1(0),
- m_menuSeparator2(0),
- m_resetLayoutAction(FancyMainWindow::tr("Reset to Default Layout"), 0),
- m_autoHideTitleBars(FancyMainWindow::tr("Automatically Hide View Title Bars"), 0)
+ m_showCentralWidget(FancyMainWindow::tr("Central Widget"), nullptr),
+ m_menuSeparator1(nullptr),
+ m_menuSeparator2(nullptr),
+ m_resetLayoutAction(FancyMainWindow::tr("Reset to Default Layout"), nullptr),
+ m_autoHideTitleBars(FancyMainWindow::tr("Automatically Hide View Title Bars"), nullptr)
{
m_showCentralWidget.setCheckable(true);
m_showCentralWidget.setChecked(true);
@@ -391,7 +391,7 @@ FancyMainWindow::~FancyMainWindow()
QDockWidget *FancyMainWindow::addDockForWidget(QWidget *widget, bool immutable)
{
- QTC_ASSERT(widget, return 0);
+ QTC_ASSERT(widget, return nullptr);
QTC_CHECK(widget->objectName().size());
QTC_CHECK(widget->windowTitle().size());
@@ -416,7 +416,7 @@ QDockWidget *FancyMainWindow::addDockForWidget(QWidget *widget, bool immutable)
void FancyMainWindow::onDockActionTriggered()
{
- QDockWidget *dw = qobject_cast<QDockWidget *>(sender()->parent());
+ auto dw = qobject_cast<QDockWidget *>(sender()->parent());
if (dw) {
if (dw->isVisible())
dw->raise();
diff --git a/src/libs/utils/fileinprojectfinder.cpp b/src/libs/utils/fileinprojectfinder.cpp
index 8758da6bcc..f732417679 100644
--- a/src/libs/utils/fileinprojectfinder.cpp
+++ b/src/libs/utils/fileinprojectfinder.cpp
@@ -63,9 +63,7 @@ static bool checkPath(const QString &candidate, FileInProjectFinder::FindMode fi
\endlist
*/
-FileInProjectFinder::FileInProjectFinder()
-{
-}
+FileInProjectFinder::FileInProjectFinder() = default;
static QString stripTrailingSlashes(const QString &path)
{
@@ -95,7 +93,7 @@ QString FileInProjectFinder::projectDirectory() const
return m_projectDir;
}
-void FileInProjectFinder::setProjectFiles(const Utils::FileNameList &projectFiles)
+void FileInProjectFinder::setProjectFiles(const FileNameList &projectFiles)
{
if (m_projectFiles == projectFiles)
return;
@@ -180,7 +178,7 @@ QString FileInProjectFinder::findFileOrDirectory(const QString &originalPath, Fi
int prefixToIgnore = -1;
const QChar separator = QLatin1Char('/');
if (originalPath.startsWith(m_projectDir + separator)) {
- if (Utils::HostOsInfo::isMacHost()) {
+ if (HostOsInfo::isMacHost()) {
// starting with the project path is not sufficient if the file was
// copied in an insource build, e.g. into MyApp.app/Contents/Resources
static const QString appResourcePath = QString::fromLatin1(".app/Contents/Resources");
diff --git a/src/libs/utils/fileinprojectfinder.h b/src/libs/utils/fileinprojectfinder.h
index 546e36031e..56acd0d15a 100644
--- a/src/libs/utils/fileinprojectfinder.h
+++ b/src/libs/utils/fileinprojectfinder.h
@@ -49,7 +49,7 @@ public:
void setProjectDirectory(const QString &absoluteProjectPath);
QString projectDirectory() const;
- void setProjectFiles(const Utils::FileNameList &projectFiles);
+ void setProjectFiles(const FileNameList &projectFiles);
void setSysroot(const QString &sysroot);
QString findFile(const QUrl &fileUrl, bool *success = nullptr) const;
@@ -74,7 +74,7 @@ private:
QString m_projectDir;
QString m_sysroot;
- Utils::FileNameList m_projectFiles;
+ FileNameList m_projectFiles;
QStringList m_searchDirectories;
mutable QHash<QString,QString> m_cache;
};
diff --git a/src/libs/utils/filesearch.cpp b/src/libs/utils/filesearch.cpp
index 348c59e012..c34532a1de 100644
--- a/src/libs/utils/filesearch.cpp
+++ b/src/libs/utils/filesearch.cpp
@@ -42,14 +42,14 @@ static inline QString msgCanceled(const QString &searchTerm, int numMatches, int
{
return QCoreApplication::translate("Utils::FileSearch",
"%1: canceled. %n occurrences found in %2 files.",
- 0, numMatches).arg(searchTerm).arg(numFilesSearched);
+ nullptr, numMatches).arg(searchTerm).arg(numFilesSearched);
}
static inline QString msgFound(const QString &searchTerm, int numMatches, int numFilesSearched)
{
return QCoreApplication::translate("Utils::FileSearch",
"%1: %n occurrences found in %2 files.",
- 0, numMatches).arg(searchTerm).arg(numFilesSearched);
+ nullptr, numMatches).arg(searchTerm).arg(numFilesSearched);
}
namespace {
@@ -301,7 +301,7 @@ struct SearchState
{
SearchState(const QString &term, FileIterator *iterator) : searchTerm(term), files(iterator) {}
QString searchTerm;
- FileIterator *files = 0;
+ FileIterator *files = nullptr;
FileSearchResultList cachedResults;
int numFilesSearched = 0;
int numMatches = 0;
@@ -482,7 +482,7 @@ static bool matches(const QList<QRegExp> &exprList, const QString &filePath)
{
return Utils::anyOf(exprList, [&filePath](QRegExp reg) {
return (reg.exactMatch(filePath)
- || reg.exactMatch(Utils::FileName::fromString(filePath).fileName()));
+ || reg.exactMatch(FileName::fromString(filePath).fileName()));
});
}
@@ -649,7 +649,7 @@ SubDirFileIterator::SubDirFileIterator(const QStringList &directories, const QSt
: m_filterFiles(filterFilesFunction(filters, exclusionFilters)),
m_progress(0)
{
- m_encoding = (encoding == 0 ? QTextCodec::codecForLocale() : encoding);
+ m_encoding = (encoding == nullptr ? QTextCodec::codecForLocale() : encoding);
qreal maxPer = qreal(MAX_PROGRESS) / directories.count();
foreach (const QString &directoryEntry, directories) {
if (!directoryEntry.isEmpty()) {
diff --git a/src/libs/utils/filesearch.h b/src/libs/utils/filesearch.h
index a25949e220..cddb637184 100644
--- a/src/libs/utils/filesearch.h
+++ b/src/libs/utils/filesearch.h
@@ -65,26 +65,26 @@ public:
class Item
{
public:
- Item() : encoding(nullptr) { }
+ Item() = default;
Item(const QString &path, QTextCodec *codec)
: filePath(path), encoding(codec)
{}
QString filePath;
- QTextCodec *encoding;
+ QTextCodec *encoding = nullptr;
};
- typedef Item value_type;
+ using value_type = Item;
class const_iterator
{
public:
- typedef std::forward_iterator_tag iterator_category;
- typedef Item value_type;
- typedef std::ptrdiff_t difference_type;
- typedef const value_type *pointer;
- typedef const value_type &reference;
+ using iterator_category = std::forward_iterator_tag;
+ using value_type = Item;
+ using difference_type = std::ptrdiff_t;
+ using pointer = const value_type*;
+ using reference = const value_type&;
- const_iterator() : m_parent(nullptr), m_index(-1) { }
+ const_iterator() = default;
const_iterator(const FileIterator *parent, int id)
: m_parent(parent), m_index(id)
{}
@@ -100,11 +100,11 @@ public:
}
bool operator!=(const const_iterator &other) const { return !operator==(other); }
- const FileIterator *m_parent;
- int m_index; // -1 == end
+ const FileIterator *m_parent = nullptr;
+ int m_index = -1; // -1 == end
};
- virtual ~FileIterator() {}
+ virtual ~FileIterator() = default;
const_iterator begin() const;
const_iterator end() const;
@@ -169,7 +169,7 @@ private:
class QTCREATOR_UTILS_EXPORT FileSearchResult
{
public:
- FileSearchResult() {}
+ FileSearchResult() = default;
FileSearchResult(const QString &fileName, int lineNumber, const QString &matchingLine,
int matchStart, int matchLength,
const QStringList &regexpCapturedTexts)
@@ -189,7 +189,7 @@ public:
QStringList regexpCapturedTexts;
};
-typedef QList<FileSearchResult> FileSearchResultList;
+using FileSearchResultList = QList<FileSearchResult>;
QTCREATOR_UTILS_EXPORT QFuture<FileSearchResultList> findInFiles(const QString &searchTerm, FileIterator *files,
QTextDocument::FindFlags flags, const QMap<QString, QString> &fileToContentsMap = QMap<QString, QString>());
diff --git a/src/libs/utils/filesystemwatcher.cpp b/src/libs/utils/filesystemwatcher.cpp
index 96748779eb..4304441832 100644
--- a/src/libs/utils/filesystemwatcher.cpp
+++ b/src/libs/utils/filesystemwatcher.cpp
@@ -87,32 +87,32 @@ class FileSystemWatcherStaticData
{
public:
FileSystemWatcherStaticData() :
- maxFileOpen(getFileLimit()) , m_objectCount(0), m_watcher(0) {}
+ maxFileOpen(getFileLimit()) {}
quint64 maxFileOpen;
- int m_objectCount;
+ int m_objectCount = 0;
QHash<QString, int> m_fileCount;
QHash<QString, int> m_directoryCount;
- QFileSystemWatcher *m_watcher;
+ QFileSystemWatcher *m_watcher = nullptr;
};
-typedef QMap<int, FileSystemWatcherStaticData> FileSystemWatcherStaticDataMap;
+using FileSystemWatcherStaticDataMap = QMap<int, FileSystemWatcherStaticData>;
Q_GLOBAL_STATIC(FileSystemWatcherStaticDataMap, fileSystemWatcherStaticDataMap)
class WatchEntry
{
public:
- typedef FileSystemWatcher::WatchMode WatchMode;
+ using WatchMode = FileSystemWatcher::WatchMode;
explicit WatchEntry(const QString &file, WatchMode wm) :
watchMode(wm), modifiedTime(QFileInfo(file).lastModified()) {}
- WatchEntry() : watchMode(FileSystemWatcher::WatchAllChanges) {}
+ WatchEntry() = default;
bool trigger(const QString &fileName);
- WatchMode watchMode;
+ WatchMode watchMode = FileSystemWatcher::WatchAllChanges;
QDateTime modifiedTime;
};
@@ -131,13 +131,13 @@ bool WatchEntry::trigger(const QString &fileName)
return false;
}
-typedef QHash<QString, WatchEntry> WatchEntryMap;
-typedef WatchEntryMap::iterator WatchEntryMapIterator;
+using WatchEntryMap = QHash<QString, WatchEntry>;
+using WatchEntryMapIterator = WatchEntryMap::iterator;
class FileSystemWatcherPrivate
{
public:
- explicit FileSystemWatcherPrivate(int id) : m_id(id), m_staticData(0) {}
+ explicit FileSystemWatcherPrivate(int id) : m_id(id), m_staticData(nullptr) {}
WatchEntryMap m_files;
WatchEntryMap m_directories;
@@ -208,7 +208,7 @@ FileSystemWatcher::~FileSystemWatcher()
if (--(d->m_staticData->m_objectCount) == 0) {
delete d->m_staticData->m_watcher;
- d->m_staticData->m_watcher = 0;
+ d->m_staticData->m_watcher = nullptr;
d->m_staticData->m_fileCount.clear();
d->m_staticData->m_directoryCount.clear();
if (debug)
diff --git a/src/libs/utils/fileutils.cpp b/src/libs/utils/fileutils.cpp
index 001dd70a05..48d8787100 100644
--- a/src/libs/utils/fileutils.cpp
+++ b/src/libs/utils/fileutils.cpp
@@ -305,7 +305,7 @@ QString FileUtils::normalizePathName(const QString &name)
{
#ifdef Q_OS_WIN
const QString nativeSeparatorName(QDir::toNativeSeparators(name));
- const LPCTSTR nameC = reinterpret_cast<LPCTSTR>(nativeSeparatorName.utf16()); // MinGW
+ const auto nameC = reinterpret_cast<LPCTSTR>(nativeSeparatorName.utf16()); // MinGW
PIDLIST_ABSOLUTE file;
HRESULT hr = SHParseDisplayName(nameC, NULL, &file, 0, NULL);
if (FAILED(hr))
@@ -395,10 +395,7 @@ bool FileReader::fetch(const QString &fileName, QIODevice::OpenMode mode, QWidge
}
#endif // QT_GUI_LIB
-FileSaverBase::FileSaverBase()
- : m_hasError(false)
-{
-}
+FileSaverBase::FileSaverBase() = default;
FileSaverBase::~FileSaverBase() = default;
@@ -514,7 +511,7 @@ bool FileSaver::finalize()
if (!m_isSafe)
return FileSaverBase::finalize();
- SaveFile *sf = static_cast<SaveFile *>(m_file.get());
+ auto sf = static_cast<SaveFile *>(m_file.get());
if (m_hasError) {
if (sf->isOpen())
sf->rollback();
@@ -526,10 +523,9 @@ bool FileSaver::finalize()
}
TempFileSaver::TempFileSaver(const QString &templ)
- : m_autoRemove(true)
{
m_file.reset(new QTemporaryFile{});
- QTemporaryFile *tempFile = static_cast<QTemporaryFile *>(m_file.get());
+ auto tempFile = static_cast<QTemporaryFile *>(m_file.get());
if (!templ.isEmpty())
tempFile->setFileTemplate(templ);
tempFile->setAutoRemove(false);
diff --git a/src/libs/utils/fileutils.h b/src/libs/utils/fileutils.h
index 011069e118..f6b0032f61 100644
--- a/src/libs/utils/fileutils.h
+++ b/src/libs/utils/fileutils.h
@@ -206,7 +206,7 @@ protected:
std::unique_ptr<QFile> m_file;
QString m_fileName;
QString m_errorString;
- bool m_hasError;
+ bool m_hasError = false;
private:
Q_DISABLE_COPY(FileSaverBase)
@@ -236,7 +236,7 @@ public:
void setAutoRemove(bool on) { m_autoRemove = on; }
private:
- bool m_autoRemove;
+ bool m_autoRemove = true;
};
} // namespace Utils
diff --git a/src/libs/utils/filewizardpage.cpp b/src/libs/utils/filewizardpage.cpp
index 9b9ae54337..cd9f3b345b 100644
--- a/src/libs/utils/filewizardpage.cpp
+++ b/src/libs/utils/filewizardpage.cpp
@@ -44,16 +44,11 @@ namespace Utils {
class FileWizardPagePrivate
{
public:
- FileWizardPagePrivate();
+ FileWizardPagePrivate() = default;
Ui::WizardPage m_ui;
- bool m_complete;
+ bool m_complete = false;
};
-FileWizardPagePrivate::FileWizardPagePrivate() :
- m_complete(false)
-{
-}
-
FileWizardPage::FileWizardPage(QWidget *parent) :
WizardPage(parent),
d(new FileWizardPagePrivate)
diff --git a/src/libs/utils/fixedsizeclicklabel.cpp b/src/libs/utils/fixedsizeclicklabel.cpp
index a648fd66e3..2e1ab89ef6 100644
--- a/src/libs/utils/fixedsizeclicklabel.cpp
+++ b/src/libs/utils/fixedsizeclicklabel.cpp
@@ -58,7 +58,6 @@ namespace Utils {
*/
FixedSizeClickLabel::FixedSizeClickLabel(QWidget *parent)
: QLabel(parent)
- , m_pressed(false)
{
}
diff --git a/src/libs/utils/fixedsizeclicklabel.h b/src/libs/utils/fixedsizeclicklabel.h
index eb89de7ab9..93cf27cc9f 100644
--- a/src/libs/utils/fixedsizeclicklabel.h
+++ b/src/libs/utils/fixedsizeclicklabel.h
@@ -54,7 +54,7 @@ signals:
private:
QString m_maxText;
- bool m_pressed;
+ bool m_pressed = false;
};
} // namespace Utils
diff --git a/src/libs/utils/flowlayout.cpp b/src/libs/utils/flowlayout.cpp
index bfdad6bbe6..d138a15149 100644
--- a/src/libs/utils/flowlayout.cpp
+++ b/src/libs/utils/flowlayout.cpp
@@ -84,12 +84,12 @@ QLayoutItem *FlowLayout::takeAt(int index)
if (index >= 0 && index < itemList.size())
return itemList.takeAt(index);
else
- return 0;
+ return nullptr;
}
Qt::Orientations FlowLayout::expandingDirections() const
{
- return 0;
+ return nullptr;
}
bool FlowLayout::hasHeightForWidth() const
@@ -167,8 +167,8 @@ int FlowLayout::smartSpacing(QStyle::PixelMetric pm) const
if (!parent) {
return -1;
} else if (parent->isWidgetType()) {
- QWidget *pw = static_cast<QWidget *>(parent);
- return pw->style()->pixelMetric(pm, 0, pw);
+ auto pw = static_cast<QWidget *>(parent);
+ return pw->style()->pixelMetric(pm, nullptr, pw);
} else {
return static_cast<QLayout *>(parent)->spacing();
}
diff --git a/src/libs/utils/guard.cpp b/src/libs/utils/guard.cpp
index 69f872db00..b1e220136e 100644
--- a/src/libs/utils/guard.cpp
+++ b/src/libs/utils/guard.cpp
@@ -85,9 +85,7 @@
namespace Utils {
-Guard::Guard()
-{
-}
+Guard::Guard() = default;
Guard::~Guard()
{
diff --git a/src/libs/utils/headerviewstretcher.cpp b/src/libs/utils/headerviewstretcher.cpp
index 0728dedfa0..2c3ece302a 100644
--- a/src/libs/utils/headerviewstretcher.cpp
+++ b/src/libs/utils/headerviewstretcher.cpp
@@ -57,18 +57,18 @@ bool HeaderViewStretcher::eventFilter(QObject *obj, QEvent *ev)
{
if (obj == parent()) {
if (ev->type() == QEvent::Show) {
- QHeaderView *hv = qobject_cast<QHeaderView*>(obj);
+ auto hv = qobject_cast<QHeaderView*>(obj);
for (int i = 0; i < hv->count(); ++i)
hv->setSectionResizeMode(i, QHeaderView::Interactive);
} else if (ev->type() == QEvent::Hide) {
- QHeaderView *hv = qobject_cast<QHeaderView*>(obj);
+ auto hv = qobject_cast<QHeaderView*>(obj);
for (int i = 0; i < hv->count(); ++i)
hv->setSectionResizeMode(i, i == m_columnToStretch
? QHeaderView::Stretch : QHeaderView::ResizeToContents);
} else if (ev->type() == QEvent::Resize) {
- QHeaderView *hv = qobject_cast<QHeaderView*>(obj);
+ auto hv = qobject_cast<QHeaderView*>(obj);
if (hv->sectionResizeMode(m_columnToStretch) == QHeaderView::Interactive) {
- QResizeEvent *re = static_cast<QResizeEvent*>(ev);
+ auto re = static_cast<QResizeEvent*>(ev);
int diff = re->size().width() - re->oldSize().width() ;
hv->resizeSection(m_columnToStretch, qMax(32, hv->sectionSize(m_columnToStretch) + diff));
}
diff --git a/src/libs/utils/highlightingitemdelegate.cpp b/src/libs/utils/highlightingitemdelegate.cpp
index c9bb43eb94..e253689843 100644
--- a/src/libs/utils/highlightingitemdelegate.cpp
+++ b/src/libs/utils/highlightingitemdelegate.cpp
@@ -135,7 +135,7 @@ int HighlightingItemDelegate::drawLineNumber(QPainter *painter, const QStyleOpti
opt.palette.setColor(cg, QPalette::Text, Qt::darkGray);
const QStyle *style = QApplication::style();
- const int textMargin = style->pixelMetric(QStyle::PM_FocusFrameHMargin, 0, 0) + 1;
+ const int textMargin = style->pixelMetric(QStyle::PM_FocusFrameHMargin, nullptr, nullptr) + 1;
const QRect rowRect
= lineNumberAreaRect.adjusted(-textMargin, 0,
@@ -263,7 +263,7 @@ void HighlightingItemDelegate::drawDisplay(QPainter *painter,
const QWidget *widget = option.widget;
QStyle *style = widget ? widget->style() : QApplication::style();
- const int textMargin = style->pixelMetric(QStyle::PM_FocusFrameHMargin, 0, widget) + 1;
+ const int textMargin = style->pixelMetric(QStyle::PM_FocusFrameHMargin, nullptr, widget) + 1;
QRect textRect = rect.adjusted(textMargin, 0, -textMargin, 0); // remove width padding
const bool wrapText = opt.features & QStyleOptionViewItem::WrapText;
QTextOption textOption;
diff --git a/src/libs/utils/historycompleter.cpp b/src/libs/utils/historycompleter.cpp
index 6d0484b85a..4a04ac5b95 100644
--- a/src/libs/utils/historycompleter.cpp
+++ b/src/libs/utils/historycompleter.cpp
@@ -41,14 +41,14 @@
namespace Utils {
namespace Internal {
-static QSettings *theSettings = 0;
+static QSettings *theSettings = nullptr;
class HistoryCompleterPrivate : public QAbstractListModel
{
public:
- int rowCount(const QModelIndex &parent = QModelIndex()) const;
- QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
- bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex());
+ int rowCount(const QModelIndex &parent = QModelIndex()) const override;
+ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
+ bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()) override;
void clearHistory();
void addEntry(const QString &str);
@@ -69,7 +69,7 @@ public:
, icon(Icons::EDIT_CLEAR.icon())
{}
- void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
+ void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override
{
// from QHistoryCompleter
QStyleOptionViewItem optCopy = option;
@@ -109,7 +109,7 @@ public:
}
private:
- void mousePressEvent(QMouseEvent *event)
+ void mousePressEvent(QMouseEvent *event) override
{
const QSize clearButtonSize = delegate->clearIconSize;
if (clearButtonSize.isValid()) {
diff --git a/src/libs/utils/htmldocextractor.cpp b/src/libs/utils/htmldocextractor.cpp
index e58accf8ef..ac3246d281 100644
--- a/src/libs/utils/htmldocextractor.cpp
+++ b/src/libs/utils/htmldocextractor.cpp
@@ -38,10 +38,7 @@ namespace {
}
}
-HtmlDocExtractor::HtmlDocExtractor() :
- m_formatContents(true),
- m_mode(FirstParagraph)
-{}
+HtmlDocExtractor::HtmlDocExtractor() = default;
void HtmlDocExtractor::setMode(Mode mode)
{ m_mode = mode; }
diff --git a/src/libs/utils/htmldocextractor.h b/src/libs/utils/htmldocextractor.h
index f7c82f54a1..d4ede7d4ee 100644
--- a/src/libs/utils/htmldocextractor.h
+++ b/src/libs/utils/htmldocextractor.h
@@ -81,8 +81,8 @@ private:
static void replaceTablesForSimpleLines(QString *html);
static void replaceListsForSimpleLines(QString *html);
- bool m_formatContents;
- Mode m_mode;
+ bool m_formatContents = true;
+ Mode m_mode = FirstParagraph;
};
} // namespace Utils
diff --git a/src/libs/utils/icon.cpp b/src/libs/utils/icon.cpp
index 4a800bd40b..dc7625aae3 100644
--- a/src/libs/utils/icon.cpp
+++ b/src/libs/utils/icon.cpp
@@ -47,10 +47,10 @@ static QPixmap maskToColorAndAlpha(const QPixmap &mask, const QColor &color)
{
QImage result(mask.toImage().convertToFormat(QImage::Format_ARGB32));
result.setDevicePixelRatio(mask.devicePixelRatio());
- QRgb *bitsStart = reinterpret_cast<QRgb*>(result.bits());
+ auto bitsStart = reinterpret_cast<QRgb*>(result.bits());
const QRgb *bitsEnd = bitsStart + result.width() * result.height();
const QRgb tint = color.rgb() & 0x00ffffff;
- const QRgb alpha = QRgb(color.alpha());
+ const auto alpha = QRgb(color.alpha());
for (QRgb *pixel = bitsStart; pixel < bitsEnd; ++pixel) {
QRgb pixelAlpha = (((~*pixel) & 0xff) * alpha) >> 8;
*pixel = (pixelAlpha << 24) | tint;
@@ -58,8 +58,8 @@ static QPixmap maskToColorAndAlpha(const QPixmap &mask, const QColor &color)
return QPixmap::fromImage(result);
}
-typedef QPair<QPixmap, QColor> MaskAndColor;
-typedef QList<MaskAndColor> MasksAndColors;
+using MaskAndColor = QPair<QPixmap, QColor>;
+using MasksAndColors = QList<MaskAndColor>;
static MasksAndColors masksAndColors(const Icon &icon, int dpr)
{
MasksAndColors result;
@@ -154,9 +154,7 @@ static QPixmap masksToIcon(const MasksAndColors &masks, const QPixmap &combinedM
return result;
}
-Icon::Icon()
-{
-}
+Icon::Icon() = default;
Icon::Icon(std::initializer_list<IconMaskAndColor> args, Icon::IconStyleOptions style)
: QVector<IconMaskAndColor>(args)
diff --git a/src/libs/utils/icon.h b/src/libs/utils/icon.h
index 5de0896653..67c39ac4ee 100644
--- a/src/libs/utils/icon.h
+++ b/src/libs/utils/icon.h
@@ -38,7 +38,7 @@ QT_FORWARD_DECLARE_CLASS(QString)
namespace Utils {
-typedef QPair<QString, Theme::Color> IconMaskAndColor;
+using IconMaskAndColor = QPair<QString, Theme::Color>;
// Returns a recolored icon with shadow and custom disabled state for a
// series of grayscalemask|Theme::Color mask pairs
diff --git a/src/libs/cplusplus/images/classmemberfunction.png b/src/libs/utils/images/classmemberfunction.png
index f97d706e7f..f97d706e7f 100644
--- a/src/libs/cplusplus/images/classmemberfunction.png
+++ b/src/libs/utils/images/classmemberfunction.png
Binary files differ
diff --git a/src/libs/cplusplus/images/classmemberfunction@2x.png b/src/libs/utils/images/classmemberfunction@2x.png
index f30e61336b..f30e61336b 100644
--- a/src/libs/cplusplus/images/classmemberfunction@2x.png
+++ b/src/libs/utils/images/classmemberfunction@2x.png
Binary files differ
diff --git a/src/libs/cplusplus/images/classmembervariable.png b/src/libs/utils/images/classmembervariable.png
index 82f8024b2e..82f8024b2e 100644
--- a/src/libs/cplusplus/images/classmembervariable.png
+++ b/src/libs/utils/images/classmembervariable.png
Binary files differ
diff --git a/src/libs/cplusplus/images/classmembervariable@2x.png b/src/libs/utils/images/classmembervariable@2x.png
index 6f426c3a41..6f426c3a41 100644
--- a/src/libs/cplusplus/images/classmembervariable@2x.png
+++ b/src/libs/utils/images/classmembervariable@2x.png
Binary files differ
diff --git a/src/libs/cplusplus/images/classparent.png b/src/libs/utils/images/classparent.png
index 19bb952842..19bb952842 100644
--- a/src/libs/cplusplus/images/classparent.png
+++ b/src/libs/utils/images/classparent.png
Binary files differ
diff --git a/src/libs/cplusplus/images/classparent@2x.png b/src/libs/utils/images/classparent@2x.png
index 5ae4e36890..5ae4e36890 100644
--- a/src/libs/cplusplus/images/classparent@2x.png
+++ b/src/libs/utils/images/classparent@2x.png
Binary files differ
diff --git a/src/libs/cplusplus/images/classrelation.png b/src/libs/utils/images/classrelation.png
index acf3c8e269..acf3c8e269 100644
--- a/src/libs/cplusplus/images/classrelation.png
+++ b/src/libs/utils/images/classrelation.png
Binary files differ
diff --git a/src/libs/cplusplus/images/classrelation@2x.png b/src/libs/utils/images/classrelation@2x.png
index 6da54dd223..6da54dd223 100644
--- a/src/libs/cplusplus/images/classrelation@2x.png
+++ b/src/libs/utils/images/classrelation@2x.png
Binary files differ
diff --git a/src/libs/cplusplus/images/classrelationbackground.png b/src/libs/utils/images/classrelationbackground.png
index 601c8b3321..601c8b3321 100644
--- a/src/libs/cplusplus/images/classrelationbackground.png
+++ b/src/libs/utils/images/classrelationbackground.png
Binary files differ
diff --git a/src/libs/cplusplus/images/classrelationbackground@2x.png b/src/libs/utils/images/classrelationbackground@2x.png
index 530e3d4c1e..530e3d4c1e 100644
--- a/src/libs/cplusplus/images/classrelationbackground@2x.png
+++ b/src/libs/utils/images/classrelationbackground@2x.png
Binary files differ
diff --git a/src/libs/cplusplus/images/enum.png b/src/libs/utils/images/enum.png
index c769846370..c769846370 100644
--- a/src/libs/cplusplus/images/enum.png
+++ b/src/libs/utils/images/enum.png
Binary files differ
diff --git a/src/libs/cplusplus/images/enum@2x.png b/src/libs/utils/images/enum@2x.png
index 562ac461d3..562ac461d3 100644
--- a/src/libs/cplusplus/images/enum@2x.png
+++ b/src/libs/utils/images/enum@2x.png
Binary files differ
diff --git a/src/libs/cplusplus/images/enumerator.png b/src/libs/utils/images/enumerator.png
index 292f387ff5..292f387ff5 100644
--- a/src/libs/cplusplus/images/enumerator.png
+++ b/src/libs/utils/images/enumerator.png
Binary files differ
diff --git a/src/libs/cplusplus/images/enumerator@2x.png b/src/libs/utils/images/enumerator@2x.png
index 705e86be9e..705e86be9e 100644
--- a/src/libs/cplusplus/images/enumerator@2x.png
+++ b/src/libs/utils/images/enumerator@2x.png
Binary files differ
diff --git a/src/libs/cplusplus/images/keyword.png b/src/libs/utils/images/keyword.png
index 335e63eeaf..335e63eeaf 100644
--- a/src/libs/cplusplus/images/keyword.png
+++ b/src/libs/utils/images/keyword.png
Binary files differ
diff --git a/src/libs/cplusplus/images/keyword@2x.png b/src/libs/utils/images/keyword@2x.png
index bfbe3c49cb..bfbe3c49cb 100644
--- a/src/libs/cplusplus/images/keyword@2x.png
+++ b/src/libs/utils/images/keyword@2x.png
Binary files differ
diff --git a/src/libs/cplusplus/images/macro.png b/src/libs/utils/images/macro.png
index aa621fce04..aa621fce04 100644
--- a/src/libs/cplusplus/images/macro.png
+++ b/src/libs/utils/images/macro.png
Binary files differ
diff --git a/src/libs/cplusplus/images/macro@2x.png b/src/libs/utils/images/macro@2x.png
index 67b5938fc9..67b5938fc9 100644
--- a/src/libs/cplusplus/images/macro@2x.png
+++ b/src/libs/utils/images/macro@2x.png
Binary files differ
diff --git a/src/libs/cplusplus/images/member.png b/src/libs/utils/images/member.png
index e974865e93..e974865e93 100644
--- a/src/libs/cplusplus/images/member.png
+++ b/src/libs/utils/images/member.png
Binary files differ
diff --git a/src/libs/cplusplus/images/member@2x.png b/src/libs/utils/images/member@2x.png
index d0a22156c0..d0a22156c0 100644
--- a/src/libs/cplusplus/images/member@2x.png
+++ b/src/libs/utils/images/member@2x.png
Binary files differ
diff --git a/src/libs/cplusplus/images/private.png b/src/libs/utils/images/private.png
index 8e25668d80..8e25668d80 100644
--- a/src/libs/cplusplus/images/private.png
+++ b/src/libs/utils/images/private.png
Binary files differ
diff --git a/src/libs/cplusplus/images/private@2x.png b/src/libs/utils/images/private@2x.png
index 348785c1ba..348785c1ba 100644
--- a/src/libs/cplusplus/images/private@2x.png
+++ b/src/libs/utils/images/private@2x.png
Binary files differ
diff --git a/src/libs/cplusplus/images/privatebackground.png b/src/libs/utils/images/privatebackground.png
index 0c482e5e3b..0c482e5e3b 100644
--- a/src/libs/cplusplus/images/privatebackground.png
+++ b/src/libs/utils/images/privatebackground.png
Binary files differ
diff --git a/src/libs/cplusplus/images/privatebackground@2x.png b/src/libs/utils/images/privatebackground@2x.png
index e29934552e..e29934552e 100644
--- a/src/libs/cplusplus/images/privatebackground@2x.png
+++ b/src/libs/utils/images/privatebackground@2x.png
Binary files differ
diff --git a/src/libs/cplusplus/images/property.png b/src/libs/utils/images/property.png
index e3f2244ca5..e3f2244ca5 100644
--- a/src/libs/cplusplus/images/property.png
+++ b/src/libs/utils/images/property.png
Binary files differ
diff --git a/src/libs/cplusplus/images/property@2x.png b/src/libs/utils/images/property@2x.png
index 9e5b80909e..9e5b80909e 100644
--- a/src/libs/cplusplus/images/property@2x.png
+++ b/src/libs/utils/images/property@2x.png
Binary files differ
diff --git a/src/libs/cplusplus/images/propertybackground.png b/src/libs/utils/images/propertybackground.png
index 7766b9fe82..7766b9fe82 100644
--- a/src/libs/cplusplus/images/propertybackground.png
+++ b/src/libs/utils/images/propertybackground.png
Binary files differ
diff --git a/src/libs/cplusplus/images/propertybackground@2x.png b/src/libs/utils/images/propertybackground@2x.png
index 0557290218..0557290218 100644
--- a/src/libs/cplusplus/images/propertybackground@2x.png
+++ b/src/libs/utils/images/propertybackground@2x.png
Binary files differ
diff --git a/src/libs/cplusplus/images/protected.png b/src/libs/utils/images/protected.png
index 2c87cf2c09..2c87cf2c09 100644
--- a/src/libs/cplusplus/images/protected.png
+++ b/src/libs/utils/images/protected.png
Binary files differ
diff --git a/src/libs/cplusplus/images/protected@2x.png b/src/libs/utils/images/protected@2x.png
index ad1c62356c..ad1c62356c 100644
--- a/src/libs/cplusplus/images/protected@2x.png
+++ b/src/libs/utils/images/protected@2x.png
Binary files differ
diff --git a/src/libs/cplusplus/images/protectedbackground.png b/src/libs/utils/images/protectedbackground.png
index d3c1b51334..d3c1b51334 100644
--- a/src/libs/cplusplus/images/protectedbackground.png
+++ b/src/libs/utils/images/protectedbackground.png
Binary files differ
diff --git a/src/libs/cplusplus/images/protectedbackground@2x.png b/src/libs/utils/images/protectedbackground@2x.png
index 3f129b5ce0..3f129b5ce0 100644
--- a/src/libs/cplusplus/images/protectedbackground@2x.png
+++ b/src/libs/utils/images/protectedbackground@2x.png
Binary files differ
diff --git a/src/libs/cplusplus/images/signal.png b/src/libs/utils/images/signal.png
index ff712b8619..ff712b8619 100644
--- a/src/libs/cplusplus/images/signal.png
+++ b/src/libs/utils/images/signal.png
Binary files differ
diff --git a/src/libs/cplusplus/images/signal@2x.png b/src/libs/utils/images/signal@2x.png
index 241e3d7634..241e3d7634 100644
--- a/src/libs/cplusplus/images/signal@2x.png
+++ b/src/libs/utils/images/signal@2x.png
Binary files differ
diff --git a/src/libs/cplusplus/images/slot.png b/src/libs/utils/images/slot.png
index 1c06b59727..1c06b59727 100644
--- a/src/libs/cplusplus/images/slot.png
+++ b/src/libs/utils/images/slot.png
Binary files differ
diff --git a/src/libs/cplusplus/images/slot@2x.png b/src/libs/utils/images/slot@2x.png
index f1a96a773a..f1a96a773a 100644
--- a/src/libs/cplusplus/images/slot@2x.png
+++ b/src/libs/utils/images/slot@2x.png
Binary files differ
diff --git a/src/libs/cplusplus/images/static.png b/src/libs/utils/images/static.png
index 988d55d825..988d55d825 100644
--- a/src/libs/cplusplus/images/static.png
+++ b/src/libs/utils/images/static.png
Binary files differ
diff --git a/src/libs/cplusplus/images/static@2x.png b/src/libs/utils/images/static@2x.png
index 93b9d17751..93b9d17751 100644
--- a/src/libs/cplusplus/images/static@2x.png
+++ b/src/libs/utils/images/static@2x.png
Binary files differ
diff --git a/src/libs/cplusplus/images/staticbackground.png b/src/libs/utils/images/staticbackground.png
index 314bace86a..314bace86a 100644
--- a/src/libs/cplusplus/images/staticbackground.png
+++ b/src/libs/utils/images/staticbackground.png
Binary files differ
diff --git a/src/libs/cplusplus/images/staticbackground@2x.png b/src/libs/utils/images/staticbackground@2x.png
index 912032dcae..912032dcae 100644
--- a/src/libs/cplusplus/images/staticbackground@2x.png
+++ b/src/libs/utils/images/staticbackground@2x.png
Binary files differ
diff --git a/src/libs/utils/json.cpp b/src/libs/utils/json.cpp
index 6eb46b60dc..104cf571b9 100644
--- a/src/libs/utils/json.cpp
+++ b/src/libs/utils/json.cpp
@@ -46,14 +46,13 @@ JsonValue::JsonValue(Kind kind)
: m_kind(kind)
{}
-JsonValue::~JsonValue()
-{}
+JsonValue::~JsonValue() = default;
JsonValue *JsonValue::create(const QString &s, JsonMemoryPool *pool)
{
const QJsonDocument document = QJsonDocument::fromJson(s.toUtf8());
if (document.isNull())
- return 0;
+ return nullptr;
return build(document.toVariant(), pool);
}
@@ -92,14 +91,14 @@ JsonValue *JsonValue::build(const QVariant &variant, JsonMemoryPool *pool)
switch (variant.type()) {
case QVariant::List: {
- JsonArrayValue *newValue = new (pool) JsonArrayValue;
+ auto newValue = new (pool) JsonArrayValue;
foreach (const QVariant &element, variant.toList())
newValue->addElement(build(element, pool));
return newValue;
}
case QVariant::Map: {
- JsonObjectValue *newValue = new (pool) JsonObjectValue;
+ auto newValue = new (pool) JsonObjectValue;
const QVariantMap variantMap = variant.toMap();
for (QVariantMap::const_iterator it = variantMap.begin(); it != variantMap.end(); ++it)
newValue->addMember(it.key(), build(it.value(), pool));
@@ -125,7 +124,7 @@ JsonValue *JsonValue::build(const QVariant &variant, JsonMemoryPool *pool)
break;
}
- return 0;
+ return nullptr;
}
@@ -295,7 +294,7 @@ JsonObjectValue *JsonSchema::propertySchema(const QString &property,
if (JsonObjectValue *base = resolveBase(v))
return propertySchema(property, base);
- return 0;
+ return nullptr;
}
bool JsonSchema::hasPropertySchema(const QString &property) const
@@ -526,14 +525,14 @@ bool JsonSchema::maybeSchemaName(const QString &s)
JsonObjectValue *JsonSchema::rootValue() const
{
- QTC_ASSERT(!m_schemas.isEmpty(), return 0);
+ QTC_ASSERT(!m_schemas.isEmpty(), return nullptr);
return m_schemas.first().m_value;
}
JsonObjectValue *JsonSchema::currentValue() const
{
- QTC_ASSERT(!m_schemas.isEmpty(), return 0);
+ QTC_ASSERT(!m_schemas.isEmpty(), return nullptr);
return m_schemas.last().m_value;
}
@@ -616,14 +615,14 @@ JsonObjectValue *JsonSchema::resolveBase(JsonObjectValue *ov) const
}
}
- return 0;
+ return nullptr;
}
JsonStringValue *JsonSchema::getStringValue(const QString &name, JsonObjectValue *value)
{
JsonValue *v = value->member(name);
if (!v)
- return 0;
+ return nullptr;
return v->toString();
}
@@ -632,7 +631,7 @@ JsonObjectValue *JsonSchema::getObjectValue(const QString &name, JsonObjectValue
{
JsonValue *v = value->member(name);
if (!v)
- return 0;
+ return nullptr;
return v->toObject();
}
@@ -641,7 +640,7 @@ JsonBooleanValue *JsonSchema::getBooleanValue(const QString &name, JsonObjectVal
{
JsonValue *v = value->member(name);
if (!v)
- return 0;
+ return nullptr;
return v->toBoolean();
}
@@ -650,7 +649,7 @@ JsonArrayValue *JsonSchema::getArrayValue(const QString &name, JsonObjectValue *
{
JsonValue *v = value->member(name);
if (!v)
- return 0;
+ return nullptr;
return v->toArray();
}
@@ -659,7 +658,7 @@ JsonDoubleValue *JsonSchema::getDoubleValue(const QString &name, JsonObjectValue
{
JsonValue *v = value->member(name);
if (!v)
- return 0;
+ return nullptr;
return v->toDouble();
}
@@ -717,7 +716,7 @@ JsonSchema *JsonSchemaManager::schemaByName(const QString &baseName) const
it = m_schemas.find(baseName);
if (it == m_schemas.end())
- return 0;
+ return nullptr;
JsonSchemaData *schemaData = &it.value();
if (!schemaData->m_schema) {
@@ -743,5 +742,5 @@ JsonSchema *JsonSchemaManager::parseSchema(const QString &schemaFileName) const
return new JsonSchema(json->toObject(), this);
}
- return 0;
+ return nullptr;
}
diff --git a/src/libs/utils/json.h b/src/libs/utils/json.h
index df7881a55e..1179a0c967 100644
--- a/src/libs/utils/json.h
+++ b/src/libs/utils/json.h
@@ -51,7 +51,7 @@ public:
inline void *allocate(size_t size)
{
- char *obj = new char[size];
+ auto obj = new char[size];
_objs.append(obj);
return obj;
}
diff --git a/src/libs/utils/link.h b/src/libs/utils/link.h
index d6df02c076..caf58a0251 100644
--- a/src/libs/utils/link.h
+++ b/src/libs/utils/link.h
@@ -35,9 +35,7 @@ namespace Utils {
struct Link
{
Link(const QString &fileName = QString(), int line = 0, int column = 0)
- : linkTextStart(-1)
- , linkTextEnd(-1)
- , targetFileName(fileName)
+ : targetFileName(fileName)
, targetLine(line)
, targetColumn(column)
{}
@@ -51,8 +49,8 @@ struct Link
bool operator==(const Link &other) const
{ return linkTextStart == other.linkTextStart && linkTextEnd == other.linkTextEnd; }
- int linkTextStart;
- int linkTextEnd;
+ int linkTextStart = -1;
+ int linkTextEnd = -1;
QString targetFileName;
int targetLine;
diff --git a/src/libs/utils/macroexpander.cpp b/src/libs/utils/macroexpander.cpp
index 755f2e0a89..eb3f05e175 100644
--- a/src/libs/utils/macroexpander.cpp
+++ b/src/libs/utils/macroexpander.cpp
@@ -49,11 +49,9 @@ const char kFileBaseNamePostfix[] = ":FileBaseName";
class MacroExpanderPrivate : public AbstractMacroExpander
{
public:
- MacroExpanderPrivate()
- : m_accumulating(false), m_aborted(false), m_lockDepth(0)
- {}
+ MacroExpanderPrivate() = default;
- bool resolveMacro(const QString &name, QString *ret, QSet<AbstractMacroExpander *> &seen)
+ bool resolveMacro(const QString &name, QString *ret, QSet<AbstractMacroExpander *> &seen) override
{
// Prevent loops:
const int count = seen.count();
@@ -113,10 +111,10 @@ public:
QMap<QByteArray, QString> m_descriptions;
QString m_displayName;
QVector<MacroExpanderProvider> m_subProviders;
- bool m_accumulating;
+ bool m_accumulating = false;
- bool m_aborted;
- int m_lockDepth;
+ bool m_aborted = false;
+ int m_lockDepth = 0;
};
} // Internal
@@ -396,7 +394,7 @@ void MacroExpander::registerFileVariables(const QByteArray &prefix,
registerVariable(prefix + kFileNamePostfix,
tr("%1: File name without path.").arg(heading),
- [base]() -> QString { QString tmp = base(); return tmp.isEmpty() ? QString() : Utils::FileName::fromString(tmp).fileName(); },
+ [base]() -> QString { QString tmp = base(); return tmp.isEmpty() ? QString() : FileName::fromString(tmp).fileName(); },
visibleInChooser);
registerVariable(prefix + kFileBaseNamePostfix,
diff --git a/src/libs/utils/macroexpander.h b/src/libs/utils/macroexpander.h
index ff96eb1089..f17ae86b8c 100644
--- a/src/libs/utils/macroexpander.h
+++ b/src/libs/utils/macroexpander.h
@@ -38,8 +38,8 @@ namespace Utils {
namespace Internal { class MacroExpanderPrivate; }
class MacroExpander;
-typedef std::function<MacroExpander *()> MacroExpanderProvider;
-typedef QVector<MacroExpanderProvider> MacroExpanderProviders;
+using MacroExpanderProvider = std::function<MacroExpander *()>;
+using MacroExpanderProviders = QVector<MacroExpanderProvider>;
class QTCREATOR_UTILS_EXPORT MacroExpander
{
@@ -59,10 +59,10 @@ public:
QString expandProcessArgs(const QString &argsWithVariables) const;
- typedef std::function<QString(QString)> PrefixFunction;
- typedef std::function<bool(QString, QString *)> ResolverFunction;
- typedef std::function<QString()> StringFunction;
- typedef std::function<int()> IntFunction;
+ using PrefixFunction = std::function<QString(QString)>;
+ using ResolverFunction = std::function<bool(QString, QString *)>;
+ using StringFunction = std::function<QString()>;
+ using IntFunction = std::function<int()>;
void registerPrefix(const QByteArray &prefix,
const QString &description, const PrefixFunction &value);
diff --git a/src/libs/utils/mimetypes/mimedatabase.cpp b/src/libs/utils/mimetypes/mimedatabase.cpp
index 9f3c1ac8f5..8a85a43876 100644
--- a/src/libs/utils/mimetypes/mimedatabase.cpp
+++ b/src/libs/utils/mimetypes/mimedatabase.cpp
@@ -328,7 +328,7 @@ MimeDatabase::MimeDatabase() :
*/
MimeDatabase::~MimeDatabase()
{
- d = 0;
+ d = nullptr;
}
void Utils::addMimeTypes(const QString &fileName, const QByteArray &data)
diff --git a/src/libs/utils/mimetypes/mimemagicrule.cpp b/src/libs/utils/mimetypes/mimemagicrule.cpp
index 5e3f912ff0..c425417426 100644
--- a/src/libs/utils/mimetypes/mimemagicrule.cpp
+++ b/src/libs/utils/mimetypes/mimemagicrule.cpp
@@ -98,7 +98,7 @@ public:
quint32 number;
quint32 numberMask;
- typedef bool (*MatchFunction)(const MimeMagicRulePrivate *d, const QByteArray &data);
+ using MatchFunction = bool (*)(const MimeMagicRulePrivate*, const QByteArray&);
MatchFunction matchFunction;
};
@@ -263,7 +263,7 @@ MimeMagicRule::MimeMagicRule(MimeMagicRule::Type theType,
d->startPos = theStartPos;
d->endPos = theEndPos;
d->mask = theMask;
- d->matchFunction = 0;
+ d->matchFunction = nullptr;
if (d->value.isEmpty()) {
d->type = Invalid;
@@ -365,9 +365,7 @@ MimeMagicRule::MimeMagicRule(const MimeMagicRule &other) :
{
}
-MimeMagicRule::~MimeMagicRule()
-{
-}
+MimeMagicRule::~MimeMagicRule() = default;
MimeMagicRule &MimeMagicRule::operator=(const MimeMagicRule &other)
{
diff --git a/src/libs/utils/mimetypes/mimeprovider.cpp b/src/libs/utils/mimetypes/mimeprovider.cpp
index 151da05458..3d14b971ce 100644
--- a/src/libs/utils/mimetypes/mimeprovider.cpp
+++ b/src/libs/utils/mimetypes/mimeprovider.cpp
@@ -75,12 +75,12 @@ MimeProviderBase::MimeProviderBase(MimeDatabasePrivate *db)
{
}
-int qmime_secondsBetweenChecks = 5;
+static int mime_secondsBetweenChecks = 5;
bool MimeProviderBase::shouldCheck()
{
const QDateTime now = QDateTime::currentDateTime();
- if (m_lastCheck.isValid() && m_lastCheck.secsTo(now) < qmime_secondsBetweenChecks)
+ if (m_lastCheck.isValid() && m_lastCheck.secsTo(now) < mime_secondsBetweenChecks)
return false;
m_lastCheck = now;
return true;
diff --git a/src/libs/utils/mimetypes/mimetype.cpp b/src/libs/utils/mimetypes/mimetype.cpp
index 3ccca3671c..5f06576767 100644
--- a/src/libs/utils/mimetypes/mimetype.cpp
+++ b/src/libs/utils/mimetypes/mimetype.cpp
@@ -139,10 +139,7 @@ MimeType::MimeType() :
\fn MimeType::MimeType(const MimeType &other);
Constructs this MimeType object as a copy of \a other.
*/
-MimeType::MimeType(const MimeType &other) :
- d(other.d)
-{
-}
+MimeType::MimeType(const MimeType &other) = default;
/*!
\fn MimeType &MimeType::operator=(const MimeType &other);
@@ -181,9 +178,7 @@ MimeType::MimeType(const MimeTypePrivate &dd) :
\fn MimeType::~MimeType();
Destroys the MimeType object, and releases the d pointer.
*/
-MimeType::~MimeType()
-{
-}
+MimeType::~MimeType() = default;
/*!
\fn bool MimeType::operator==(const MimeType &other) const;
diff --git a/src/libs/utils/mimetypes/mimetype.h b/src/libs/utils/mimetypes/mimetype.h
index 8b47696d7d..db17b43700 100644
--- a/src/libs/utils/mimetypes/mimetype.h
+++ b/src/libs/utils/mimetypes/mimetype.h
@@ -121,6 +121,8 @@ protected:
QExplicitlySharedDataPointer<Internal::MimeTypePrivate> d;
};
+inline uint QTCREATOR_UTILS_EXPORT qHash(const MimeType &mime) { return qHash(mime.name()); }
+
} // Utils
//Q_DECLARE_SHARED(Utils::MimeType)
@@ -131,3 +133,4 @@ class QDebug;
QTCREATOR_UTILS_EXPORT QDebug operator<<(QDebug debug, const Utils::MimeType &mime);
QT_END_NAMESPACE
#endif
+
diff --git a/src/libs/utils/mimetypes/mimetypeparser.cpp b/src/libs/utils/mimetypes/mimetypeparser.cpp
index 7099acd43a..9ce6cd0f09 100644
--- a/src/libs/utils/mimetypes/mimetypeparser.cpp
+++ b/src/libs/utils/mimetypes/mimetypeparser.cpp
@@ -295,7 +295,7 @@ bool MimeTypeParserBase::parse(const QByteArray &content, const QString &fileNam
}
break;
case ParseMagicMatchRule: {
- MimeMagicRule *rule = 0;
+ MimeMagicRule *rule = nullptr;
if (!createMagicMatchRule(atts, errorMessage, rule))
return false;
QList<MimeMagicRule> *ruleList;
diff --git a/src/libs/utils/networkaccessmanager.cpp b/src/libs/utils/networkaccessmanager.cpp
index 9cc475e87c..2409149525 100644
--- a/src/libs/utils/networkaccessmanager.cpp
+++ b/src/libs/utils/networkaccessmanager.cpp
@@ -47,12 +47,12 @@
namespace Utils {
-static NetworkAccessManager *namInstance = 0;
+static NetworkAccessManager *namInstance = nullptr;
void cleanupNetworkAccessManager()
{
delete namInstance;
- namInstance = 0;
+ namInstance = nullptr;
}
NetworkAccessManager *NetworkAccessManager::instance()
diff --git a/src/libs/utils/newclasswidget.cpp b/src/libs/utils/newclasswidget.cpp
index 9bfef0a66e..8700b8204c 100644
--- a/src/libs/utils/newclasswidget.cpp
+++ b/src/libs/utils/newclasswidget.cpp
@@ -51,34 +51,24 @@ struct NewClassWidgetPrivate {
QString m_headerExtension;
QString m_sourceExtension;
QString m_formExtension;
- bool m_valid;
- bool m_classEdited;
+ bool m_valid = false;
+ bool m_classEdited = false;
// Store the "visible" values to prevent the READ accessors from being
// fooled by a temporarily hidden widget
- bool m_baseClassInputVisible;
- bool m_formInputVisible;
- bool m_headerInputVisible;
- bool m_sourceInputVisible;
- bool m_pathInputVisible;
- bool m_qobjectCheckBoxVisible;
- bool m_formInputCheckable;
+ bool m_baseClassInputVisible = true;
+ bool m_formInputVisible = true;
+ bool m_headerInputVisible = true;
+ bool m_sourceInputVisible = true;
+ bool m_pathInputVisible = true;
+ bool m_qobjectCheckBoxVisible = false;
+ bool m_formInputCheckable = false;
QRegExp m_classNameValidator;
};
NewClassWidgetPrivate:: NewClassWidgetPrivate() :
m_headerExtension(QLatin1Char('h')),
m_sourceExtension(QLatin1String("cpp")),
- m_formExtension(QLatin1String("ui")),
- m_valid(false),
- m_classEdited(false),
- m_baseClassInputVisible(true),
- m_formInputVisible(true),
- m_headerInputVisible(true),
- m_sourceInputVisible(true),
- m_pathInputVisible(true),
- m_qobjectCheckBoxVisible(false),
- m_formInputCheckable(false)
-
+ m_formExtension(QLatin1String("ui"))
{
}
diff --git a/src/libs/utils/optional.h b/src/libs/utils/optional.h
index e4f943259f..a9f58334b7 100644
--- a/src/libs/utils/optional.h
+++ b/src/libs/utils/optional.h
@@ -41,6 +41,7 @@ namespace Utils {
using std::experimental::optional;
// --> Utils::nullopt
using std::experimental::nullopt;
+using std::experimental::nullopt_t;
// --> Utils::in_place
using std::experimental::in_place;
diff --git a/src/libs/utils/outputformatter.cpp b/src/libs/utils/outputformatter.cpp
index aae6a28d16..de1e20d33f 100644
--- a/src/libs/utils/outputformatter.cpp
+++ b/src/libs/utils/outputformatter.cpp
@@ -38,7 +38,7 @@ class OutputFormatterPrivate
{
public:
OutputFormatterPrivate()
- : plainTextEdit(0), overwriteOutput(false)
+ : plainTextEdit(nullptr), overwriteOutput(false)
{}
QPlainTextEdit *plainTextEdit;
diff --git a/src/libs/utils/outputformatter.h b/src/libs/utils/outputformatter.h
index d30a640b7b..2091fb6d8c 100644
--- a/src/libs/utils/outputformatter.h
+++ b/src/libs/utils/outputformatter.h
@@ -66,7 +66,7 @@ protected:
void initFormats();
virtual void clearLastLine();
QTextCharFormat charFormat(OutputFormat format) const;
- QList<Utils::FormattedText> parseAnsi(const QString &text, const QTextCharFormat &format);
+ QList<FormattedText> parseAnsi(const QString &text, const QTextCharFormat &format);
void append(QTextCursor &cursor, const QString &text, const QTextCharFormat &format);
private:
diff --git a/src/libs/utils/overridecursor.cpp b/src/libs/utils/overridecursor.cpp
index 4c9093917f..7868289725 100644
--- a/src/libs/utils/overridecursor.cpp
+++ b/src/libs/utils/overridecursor.cpp
@@ -30,7 +30,7 @@
using namespace Utils;
OverrideCursor::OverrideCursor(const QCursor &cursor)
- : m_set(true), m_cursor(cursor)
+ : m_cursor(cursor)
{
QApplication::setOverrideCursor(cursor);
}
diff --git a/src/libs/utils/overridecursor.h b/src/libs/utils/overridecursor.h
index 5ca2bb5800..00ce021fe2 100644
--- a/src/libs/utils/overridecursor.h
+++ b/src/libs/utils/overridecursor.h
@@ -39,7 +39,7 @@ public:
void set();
void reset();
private:
- bool m_set;
+ bool m_set = true;
QCursor m_cursor;
};
diff --git a/src/libs/utils/pathchooser.cpp b/src/libs/utils/pathchooser.cpp
index 7fde56993e..e8a7e2d597 100644
--- a/src/libs/utils/pathchooser.cpp
+++ b/src/libs/utils/pathchooser.cpp
@@ -49,9 +49,11 @@
This class has some validation logic for embedding into QWizardPage.
*/
+namespace Utils {
+
static QString appBundleExpandedPath(const QString &path)
{
- if (Utils::HostOsInfo::hostOs() == Utils::OsTypeMac && path.endsWith(".app")) {
+ if (HostOsInfo::hostOs() == OsTypeMac && path.endsWith(".app")) {
// possibly expand to Foo.app/Contents/MacOS/Foo
QFileInfo info(path);
if (info.isDir()) {
@@ -63,9 +65,7 @@ static QString appBundleExpandedPath(const QString &path)
return path;
}
-Utils::PathChooser::AboutToShowContextMenuHandler Utils::PathChooser::s_aboutToShowContextMenuHandler;
-
-namespace Utils {
+PathChooser::AboutToShowContextMenuHandler PathChooser::s_aboutToShowContextMenuHandler;
// ------------------ BinaryVersionToolTipEventFilter
// Event filter to be installed on a lineedit used for entering
@@ -78,7 +78,7 @@ class BinaryVersionToolTipEventFilter : public QObject
public:
explicit BinaryVersionToolTipEventFilter(QLineEdit *le);
- virtual bool eventFilter(QObject *, QEvent *);
+ bool eventFilter(QObject *, QEvent *) override;
QStringList arguments() const { return m_arguments; }
void setArguments(const QStringList &arguments) { m_arguments = arguments; }
@@ -102,7 +102,7 @@ bool BinaryVersionToolTipEventFilter::eventFilter(QObject *o, QEvent *e)
{
if (e->type() != QEvent::ToolTip)
return false;
- QLineEdit *le = qobject_cast<QLineEdit *>(o);
+ auto le = qobject_cast<QLineEdit *>(o);
QTC_ASSERT(le, return false);
const QString binary = le->text();
@@ -674,7 +674,7 @@ QString PathChooser::toolVersion(const QString &binary, const QStringList &argum
void PathChooser::installLineEditVersionToolTip(QLineEdit *le, const QStringList &arguments)
{
- BinaryVersionToolTipEventFilter *ef = new BinaryVersionToolTipEventFilter(le);
+ auto ef = new BinaryVersionToolTipEventFilter(le);
ef->setArguments(arguments);
}
diff --git a/src/libs/utils/pathchooser.h b/src/libs/utils/pathchooser.h
index 3f91ebc7cb..deaaf4f05d 100644
--- a/src/libs/utils/pathchooser.h
+++ b/src/libs/utils/pathchooser.h
@@ -95,7 +95,7 @@ public:
FileName rawFileName() const; // The raw unexpanded input.
FileName fileName() const;
- static QString expandedDirectory(const QString &input, const Utils::Environment &env,
+ static QString expandedDirectory(const QString &input, const Environment &env,
const QString &baseDir);
QString baseDirectory() const;
@@ -142,7 +142,7 @@ public:
// global handler for adding context menus to ALL pathchooser
// used by the coreplugin to add "Open in Terminal" and "Open in Explorer" context menu actions
- using AboutToShowContextMenuHandler = std::function<void (Utils::PathChooser *, QMenu *)>;
+ using AboutToShowContextMenuHandler = std::function<void (PathChooser *, QMenu *)>;
static void setAboutToShowContextMenuHandler(AboutToShowContextMenuHandler handler);
QColor errorColor() const;
@@ -166,7 +166,7 @@ signals:
public slots:
void setPath(const QString &);
- void setFileName(const Utils::FileName &);
+ void setFileName(const FileName &);
void setErrorColor(const QColor &errorColor);
void setOkColor(const QColor &okColor);
diff --git a/src/libs/utils/pathlisteditor.cpp b/src/libs/utils/pathlisteditor.cpp
index c4691d8585..70ec975db7 100644
--- a/src/libs/utils/pathlisteditor.cpp
+++ b/src/libs/utils/pathlisteditor.cpp
@@ -68,7 +68,7 @@ const int PathListEditor::lastInsertButtonIndex = 0;
class PathListPlainTextEdit : public QPlainTextEdit {
public:
- explicit PathListPlainTextEdit(QWidget *parent = 0);
+ explicit PathListPlainTextEdit(QWidget *parent = nullptr);
protected:
void insertFromMimeData (const QMimeData *source) override;
};
@@ -149,7 +149,7 @@ QPushButton *PathListEditor::addButton(const QString &text, QObject *parent,
QPushButton *PathListEditor::insertButton(int index /* -1 */, const QString &text, QObject *parent,
std::function<void()> slotFunc)
{
- QPushButton *rc = new QPushButton(text, this);
+ auto rc = new QPushButton(text, this);
QObject::connect(rc, &QPushButton::pressed, parent, slotFunc);
d->buttonLayout->insertWidget(index, rc);
return rc;
diff --git a/src/libs/utils/persistentsettings.cpp b/src/libs/utils/persistentsettings.cpp
index 8a600f90f7..898ce27547 100644
--- a/src/libs/utils/persistentsettings.cpp
+++ b/src/libs/utils/persistentsettings.cpp
@@ -281,7 +281,7 @@ QString ParseContext::formatWarning(const QXmlStreamReader &r, const QString &me
{
QString result = QLatin1String("Warning reading ");
if (const QIODevice *device = r.device())
- if (const QFile *file = qobject_cast<const QFile *>(device))
+ if (const auto file = qobject_cast<const QFile *>(device))
result += QDir::toNativeSeparators(file->fileName()) + QLatin1Char(':');
result += QString::number(r.lineNumber());
result += QLatin1String(": ");
@@ -327,9 +327,7 @@ QVariant ParseContext::readSimpleValue(QXmlStreamReader &r, const QXmlStreamAttr
// =================================== PersistentSettingsReader
-PersistentSettingsReader::PersistentSettingsReader()
-{
-}
+PersistentSettingsReader::PersistentSettingsReader() = default;
QVariant PersistentSettingsReader::restoreValue(const QString &variable, const QVariant &defaultValue) const
{
@@ -417,7 +415,7 @@ PersistentSettingsWriter::PersistentSettingsWriter(const FileName &fileName, con
PersistentSettingsWriter::~PersistentSettingsWriter()
{
- write(m_savedData, 0);
+ write(m_savedData, nullptr);
}
bool PersistentSettingsWriter::save(const QVariantMap &data, QString *errorString) const
diff --git a/src/libs/utils/pointeralgorithm.h b/src/libs/utils/pointeralgorithm.h
index 1ab336f510..bb65c346a1 100644
--- a/src/libs/utils/pointeralgorithm.h
+++ b/src/libs/utils/pointeralgorithm.h
@@ -275,13 +275,13 @@ auto toRawPointer(const SourceContainer &sources)
// take:
/////////////////
template<typename C>
-Q_REQUIRED_RESULT Utils::optional<ValueType<C>> take(C &container, PointerType<C> p)
+Q_REQUIRED_RESULT optional<ValueType<C>> take(C &container, PointerType<C> p)
{
return take(container, [p](const ValueType<C> &v) { return v.get() == p; });
}
template <typename C>
-Q_REQUIRED_RESULT Utils::optional<ValueType<C>> take(C &container, std::nullptr_t)
+Q_REQUIRED_RESULT optional<ValueType<C>> take(C &container, std::nullptr_t)
{
return take(container, static_cast<PointerType<C>>(nullptr));
}
diff --git a/src/libs/utils/port.h b/src/libs/utils/port.h
index 0ed62d0a9b..56d0b646dc 100644
--- a/src/libs/utils/port.h
+++ b/src/libs/utils/port.h
@@ -38,7 +38,7 @@ namespace Utils {
class QTCREATOR_UTILS_EXPORT Port
{
public:
- Port() : m_port(-1) {}
+ Port() = default;
explicit Port(quint16 port) : m_port(port) {}
explicit Port(int port) :
m_port((port < 0 || port > std::numeric_limits<quint16>::max()) ? -1 : port)
@@ -56,7 +56,7 @@ public:
QString toString() const { return QString::number(m_port); }
private:
- int m_port;
+ int m_port = -1;
};
inline bool operator<(const Port &p1, const Port &p2) { return p1.number() < p2.number(); }
diff --git a/src/libs/utils/portlist.cpp b/src/libs/utils/portlist.cpp
index d78cd24b23..6fb9ecb89f 100644
--- a/src/libs/utils/portlist.cpp
+++ b/src/libs/utils/portlist.cpp
@@ -35,7 +35,7 @@ namespace Utils {
namespace Internal {
namespace {
-typedef QPair<Port, Port> Range;
+using Range = QPair<Port, Port>;
class PortsSpecParser
{
diff --git a/src/libs/utils/process_ctrlc_stub.cpp b/src/libs/utils/process_ctrlc_stub.cpp
index cd4b6ccb55..396ed3c153 100644
--- a/src/libs/utils/process_ctrlc_stub.cpp
+++ b/src/libs/utils/process_ctrlc_stub.cpp
@@ -47,7 +47,7 @@ const wchar_t szTitle[] = L"qtcctrlcstub";
const wchar_t szWindowClass[] = L"wcqtcctrlcstub";
UINT uiShutDownWindowMessage;
UINT uiInterruptMessage;
-HWND hwndMain = 0;
+HWND hwndMain = nullptr;
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
BOOL WINAPI shutdownHandler(DWORD dwCtrlType);
@@ -68,7 +68,7 @@ int main(int argc, char **)
WNDCLASSEX wcex = {0};
wcex.cbSize = sizeof(wcex);
wcex.lpfnWndProc = WndProc;
- wcex.hInstance = GetModuleHandle(0);
+ wcex.hInstance = GetModuleHandle(nullptr);
wcex.lpszClassName = szWindowClass;
if (!RegisterClassEx(&wcex))
return 1;
@@ -156,7 +156,7 @@ BOOL WINAPI interruptHandler(DWORD /*dwCtrlType*/)
DWORD WINAPI processWatcherThread(LPVOID lpParameter)
{
- HANDLE hProcess = reinterpret_cast<HANDLE>(lpParameter);
+ auto hProcess = reinterpret_cast<HANDLE>(lpParameter);
WaitForSingleObject(hProcess, INFINITE);
DWORD dwExitCode;
if (!GetExitCodeProcess(hProcess, &dwExitCode))
diff --git a/src/libs/utils/progressindicator.cpp b/src/libs/utils/progressindicator.cpp
index 407114282f..dc2d8bb626 100644
--- a/src/libs/utils/progressindicator.cpp
+++ b/src/libs/utils/progressindicator.cpp
@@ -205,7 +205,7 @@ void ProgressIndicatorPainter::stopAnimation()
/*!
\internal
*/
-void Utils::ProgressIndicatorPainter::nextAnimationStep()
+void ProgressIndicatorPainter::nextAnimationStep()
{
m_rotation = (m_rotation + m_rotationStep + 360) % 360;
}
diff --git a/src/libs/utils/proxyaction.cpp b/src/libs/utils/proxyaction.cpp
index 06e85d59ad..67917e71b1 100644
--- a/src/libs/utils/proxyaction.cpp
+++ b/src/libs/utils/proxyaction.cpp
@@ -28,11 +28,7 @@
using namespace Utils;
ProxyAction::ProxyAction(QObject *parent) :
- QAction(parent),
- m_action(0),
- m_attributes(0),
- m_showShortcut(false),
- m_block(false)
+ QAction(parent)
{
connect(this, &QAction::changed, this, &ProxyAction::updateToolTipWithKeySequence);
updateState();
@@ -178,7 +174,7 @@ QString ProxyAction::stringWithAppendedShortcut(const QString &str, const QKeySe
ProxyAction *ProxyAction::proxyActionWithIcon(QAction *original, const QIcon &newIcon)
{
- ProxyAction *proxyAction = new ProxyAction(original);
+ auto proxyAction = new ProxyAction(original);
proxyAction->setAction(original);
proxyAction->setIcon(newIcon);
proxyAction->setAttribute(UpdateText);
diff --git a/src/libs/utils/proxyaction.h b/src/libs/utils/proxyaction.h
index 5058bb42f3..6f5671cea7 100644
--- a/src/libs/utils/proxyaction.h
+++ b/src/libs/utils/proxyaction.h
@@ -68,11 +68,11 @@ private:
void connectAction();
void update(QAction *action, bool initialize);
- QPointer<QAction> m_action;
- Attributes m_attributes;
- bool m_showShortcut;
+ QPointer<QAction> m_action = nullptr;
+ Attributes m_attributes = {};
+ bool m_showShortcut = false;
QString m_toolTip;
- bool m_block;
+ bool m_block = false;
};
} // namespace Utils
diff --git a/src/libs/utils/qtcolorbutton.cpp b/src/libs/utils/qtcolorbutton.cpp
index f5aec0a61e..5463f96dda 100644
--- a/src/libs/utils/qtcolorbutton.cpp
+++ b/src/libs/utils/qtcolorbutton.cpp
@@ -236,9 +236,9 @@ void QtColorButton::mouseMoveEvent(QMouseEvent *event)
#ifndef QT_NO_DRAGANDDROP
if (event->buttons() & Qt::LeftButton &&
(d_ptr->m_dragStart - event->pos()).manhattanLength() > QApplication::startDragDistance()) {
- QMimeData *mime = new QMimeData;
+ auto mime = new QMimeData;
mime->setColorData(color());
- QDrag *drg = new QDrag(this);
+ auto drg = new QDrag(this);
drg->setMimeData(mime);
drg->setPixmap(d_ptr->generatePixmap());
setDown(false);
diff --git a/src/libs/utils/qtcprocess.cpp b/src/libs/utils/qtcprocess.cpp
index eb9cf9f647..dd4fe16f49 100644
--- a/src/libs/utils/qtcprocess.cpp
+++ b/src/libs/utils/qtcprocess.cpp
@@ -668,9 +668,7 @@ bool QtcProcess::prepareCommand(const QString &command, const QString &arguments
}
QtcProcess::QtcProcess(QObject *parent)
- : QProcess(parent),
- m_haveEnv(false),
- m_useCtrlCStub(false)
+ : QProcess(parent)
{
static int qProcessExitStatusMeta = qRegisterMetaType<QProcess::ExitStatus>();
static int qProcessProcessErrorMeta = qRegisterMetaType<QProcess::ProcessError>();
diff --git a/src/libs/utils/qtcprocess.h b/src/libs/utils/qtcprocess.h
index 4ff75a7dae..44c5786661 100644
--- a/src/libs/utils/qtcprocess.h
+++ b/src/libs/utils/qtcprocess.h
@@ -106,7 +106,7 @@ public:
class QTCREATOR_UTILS_EXPORT ArgIterator {
public:
ArgIterator(QString *str, OsType osType = HostOsInfo::hostOs())
- : m_str(str), m_pos(0), m_prev(-1), m_osType(osType)
+ : m_str(str), m_osType(osType)
{}
//! Get the next argument. Returns false on encountering end of first command.
bool next();
@@ -121,7 +121,8 @@ public:
void appendArg(const QString &str);
private:
QString *m_str, m_value;
- int m_pos, m_prev;
+ int m_pos = 0;
+ int m_prev = -1;
bool m_simple;
OsType m_osType;
};
@@ -143,8 +144,8 @@ private:
QString m_command;
QString m_arguments;
Environment m_environment;
- bool m_haveEnv;
- bool m_useCtrlCStub;
+ bool m_haveEnv = false;
+ bool m_useCtrlCStub = false;
};
} // namespace Utils
diff --git a/src/libs/utils/runextensions.h b/src/libs/utils/runextensions.h
index 14cf5e4922..6925504693 100644
--- a/src/libs/utils/runextensions.h
+++ b/src/libs/utils/runextensions.h
@@ -59,7 +59,7 @@ struct hasCallOperator
namespace Utils {
-using StackSizeInBytes = Utils::optional<uint>;
+using StackSizeInBytes = optional<uint>;
namespace Internal {
diff --git a/src/libs/utils/savedaction.cpp b/src/libs/utils/savedaction.cpp
index 8454488095..0000e54d31 100644
--- a/src/libs/utils/savedaction.cpp
+++ b/src/libs/utils/savedaction.cpp
@@ -56,7 +56,6 @@ namespace Utils {
SavedAction::SavedAction(QObject *parent)
: QAction(parent)
{
- m_widget = 0;
connect(this, &QAction::triggered, this, &SavedAction::actionTriggered);
}
@@ -285,7 +284,7 @@ void SavedAction::connectWidget(QWidget *widget, ApplyMode applyMode)
*/
void SavedAction::disconnectWidget()
{
- m_widget = 0;
+ m_widget = nullptr;
}
void SavedAction::apply(QSettings *s)
@@ -335,7 +334,7 @@ void SavedAction::actionTriggered(bool)
if (actionGroup() && actionGroup()->isExclusive()) {
// FIXME: should be taken care of more directly
foreach (QAction *act, actionGroup()->actions())
- if (SavedAction *dact = qobject_cast<SavedAction *>(act))
+ if (auto dact = qobject_cast<SavedAction *>(act))
dact->setValue(bool(act == this));
}
}
diff --git a/src/libs/utils/savedaction.h b/src/libs/utils/savedaction.h
index 45454939f1..5f90de65ed 100644
--- a/src/libs/utils/savedaction.h
+++ b/src/libs/utils/savedaction.h
@@ -83,14 +83,14 @@ private:
QString m_settingsKey;
QString m_settingsGroup;
QString m_dialogText;
- QWidget *m_widget;
+ QWidget *m_widget = nullptr;
};
class QTCREATOR_UTILS_EXPORT SavedActionSet
{
public:
- SavedActionSet() {}
- ~SavedActionSet() {}
+ SavedActionSet() = default;
+ ~SavedActionSet() = default;
void insert(SavedAction *action, QWidget *widget);
void apply(QSettings *settings);
diff --git a/src/libs/utils/savefile.cpp b/src/libs/utils/savefile.cpp
index 13b9db0d84..36b515568e 100644
--- a/src/libs/utils/savefile.cpp
+++ b/src/libs/utils/savefile.cpp
@@ -36,10 +36,10 @@
namespace Utils {
-QFile::Permissions SaveFile::m_umask = 0;
+QFile::Permissions SaveFile::m_umask = nullptr;
SaveFile::SaveFile(const QString &filename) :
- m_finalFileName(filename), m_finalized(true)
+ m_finalFileName(filename)
{
}
diff --git a/src/libs/utils/savefile.h b/src/libs/utils/savefile.h
index 56d60aacc9..799b30c9ca 100644
--- a/src/libs/utils/savefile.h
+++ b/src/libs/utils/savefile.h
@@ -51,7 +51,7 @@ public:
private:
const QString m_finalFileName;
std::unique_ptr<QTemporaryFile> m_tempFile;
- bool m_finalized;
+ bool m_finalized = true;
static QFile::Permissions m_umask;
};
diff --git a/src/libs/utils/scopedswap.h b/src/libs/utils/scopedswap.h
index 4cc129bd21..46384448bc 100644
--- a/src/libs/utils/scopedswap.h
+++ b/src/libs/utils/scopedswap.h
@@ -49,6 +49,6 @@ public:
}
};
-typedef ScopedSwap<bool> ScopedBoolSwap;
+using ScopedBoolSwap = ScopedSwap<bool>;
} // Utils namespace
diff --git a/src/libs/utils/settingsaccessor.cpp b/src/libs/utils/settingsaccessor.cpp
index cab3a348a8..09210c3766 100644
--- a/src/libs/utils/settingsaccessor.cpp
+++ b/src/libs/utils/settingsaccessor.cpp
@@ -110,7 +110,7 @@ SettingsAccessor::RestoreData SettingsAccessor::readData(const FileName &path, Q
/*!
* Store the \a data in \a path on disk. Do all the necessary preprocessing of the data.
*/
-Utils::optional<SettingsAccessor::Issue>
+optional<SettingsAccessor::Issue>
SettingsAccessor::writeData(const FileName &path, const QVariantMap &data, QWidget *parent) const
{
Q_UNUSED(parent);
@@ -155,7 +155,7 @@ SettingsAccessor::RestoreData SettingsAccessor::readFile(const FileName &path) c
*
* This method does not do *any* processing of the file contents.
*/
-Utils::optional<SettingsAccessor::Issue>
+optional<SettingsAccessor::Issue>
SettingsAccessor::writeFile(const FileName &path, const QVariantMap &data) const
{
if (data.isEmpty()) {
@@ -239,11 +239,11 @@ int BackUpStrategy::compare(const SettingsAccessor::RestoreData &data1,
return 0;
}
-Utils::optional<Utils::FileName>
+optional<FileName>
BackUpStrategy::backupName(const QVariantMap &oldData, const FileName &path, const QVariantMap &data) const
{
if (oldData == data)
- return Utils::nullopt;
+ return nullopt;
FileName backup = path;
backup.appendString(".bak");
return backup;
@@ -264,7 +264,7 @@ BackingUpSettingsAccessor::BackingUpSettingsAccessor(std::unique_ptr<BackUpStrat
{ }
SettingsAccessor::RestoreData
-BackingUpSettingsAccessor::readData(const Utils::FileName &path, QWidget *parent) const
+BackingUpSettingsAccessor::readData(const FileName &path, QWidget *parent) const
{
const FileNameList fileList = readFileCandidates(path);
if (fileList.isEmpty()) // No settings found at all.
@@ -288,8 +288,8 @@ BackingUpSettingsAccessor::readData(const Utils::FileName &path, QWidget *parent
return result;
}
-Utils::optional<SettingsAccessor::Issue>
-BackingUpSettingsAccessor::writeData(const Utils::FileName &path, const QVariantMap &data,
+optional<SettingsAccessor::Issue>
+BackingUpSettingsAccessor::writeData(const FileName &path, const QVariantMap &data,
QWidget *parent) const
{
if (data.isEmpty())
@@ -300,7 +300,7 @@ BackingUpSettingsAccessor::writeData(const Utils::FileName &path, const QVariant
return SettingsAccessor::writeData(path, data, parent);
}
-FileNameList BackingUpSettingsAccessor::readFileCandidates(const Utils::FileName &path) const
+FileNameList BackingUpSettingsAccessor::readFileCandidates(const FileName &path) const
{
FileNameList result = Utils::filteredUnique(m_strategy->readFileCandidates(path));
if (result.removeOne(baseFilePath()))
@@ -631,7 +631,7 @@ SettingsAccessor::RestoreData MergingSettingsAccessor::readData(const FileName &
secondaryData.issue = Issue(QApplication::translate("Utils::SettingsAccessor",
"Unsupported Merge Settings File"),
QApplication::translate("Utils::SettingsAccessor",
- "\"%1\" is not supported by %1. "
+ "\"%1\" is not supported by %2. "
"Do you want to try loading it anyway?")
.arg(secondaryData.path.toUserOutput())
.arg(applicationDisplayName), Issue::Type::WARNING);
@@ -752,7 +752,7 @@ static QVariant mergeQVariantMapsRecursion(const QVariantMap &mainTree, const QV
global.key = keyPrefix + key;
local.key = key;
- Utils::optional<QPair<QString, QVariant>> mergeResult = merge(global, local);
+ optional<QPair<QString, QVariant>> mergeResult = merge(global, local);
if (!mergeResult)
continue;
diff --git a/src/libs/utils/settingsaccessor.h b/src/libs/utils/settingsaccessor.h
index d7859067ff..10675cbf4c 100644
--- a/src/libs/utils/settingsaccessor.h
+++ b/src/libs/utils/settingsaccessor.h
@@ -63,7 +63,7 @@ QTCREATOR_UTILS_EXPORT void setVersionInMap(QVariantMap &data, int version);
QTCREATOR_UTILS_EXPORT void setOriginalVersionInMap(QVariantMap &data, int version);
QTCREATOR_UTILS_EXPORT void setSettingsIdInMap(QVariantMap &data, const QByteArray &id);
-using SettingsMergeResult = Utils::optional<QPair<QString, QVariant>>;
+using SettingsMergeResult = optional<QPair<QString, QVariant>>;
// --------------------------------------------------------------------
// SettingsAccessor:
@@ -78,7 +78,7 @@ public:
virtual ~SettingsAccessor() = default;
enum ProceedInfo { Continue, DiscardAndContinue };
- typedef QHash<QMessageBox::StandardButton, ProceedInfo> ButtonMap;
+ using ButtonMap = QHash<QMessageBox::StandardButton, ProceedInfo>;
class Issue {
public:
enum class Type { ERROR, WARNING };
@@ -99,7 +99,7 @@ public:
class RestoreData {
public:
RestoreData() = default;
- RestoreData(const Utils::FileName &path, const QVariantMap &data) : path{path}, data{data} { }
+ RestoreData(const FileName &path, const QVariantMap &data) : path{path}, data{data} { }
RestoreData(const QString &title, const QString &message, const Issue::Type type) :
RestoreData(Issue(title, message, type))
{ }
@@ -109,9 +109,9 @@ public:
bool hasError() const { return hasIssue() && issue.value().type == Issue::Type::ERROR; }
bool hasWarning() const { return hasIssue() && issue.value().type == Issue::Type::WARNING; }
- Utils::FileName path;
+ FileName path;
QVariantMap data;
- Utils::optional<Issue> issue;
+ optional<Issue> issue;
};
QVariantMap restoreSettings(QWidget *parent) const;
@@ -121,26 +121,26 @@ public:
const QString displayName;
const QString applicationDisplayName;
- void setBaseFilePath(const Utils::FileName &baseFilePath) { m_baseFilePath = baseFilePath; }
+ void setBaseFilePath(const FileName &baseFilePath) { m_baseFilePath = baseFilePath; }
void setReadOnly() { m_readOnly = true; }
- Utils::FileName baseFilePath() const { return m_baseFilePath; }
+ FileName baseFilePath() const { return m_baseFilePath; }
- virtual RestoreData readData(const Utils::FileName &path, QWidget *parent) const;
- virtual Utils::optional<Issue> writeData(const Utils::FileName &path, const QVariantMap &data, QWidget *parent) const;
+ virtual RestoreData readData(const FileName &path, QWidget *parent) const;
+ virtual optional<Issue> writeData(const FileName &path, const QVariantMap &data, QWidget *parent) const;
protected:
// Report errors:
- QVariantMap restoreSettings(const Utils::FileName &settingsPath, QWidget *parent) const;
+ QVariantMap restoreSettings(const FileName &settingsPath, QWidget *parent) const;
ProceedInfo reportIssues(const Issue &issue, const FileName &path, QWidget *parent) const;
virtual QVariantMap preprocessReadSettings(const QVariantMap &data) const;
virtual QVariantMap prepareToWriteSettings(const QVariantMap &data) const;
- virtual RestoreData readFile(const Utils::FileName &path) const;
- virtual Utils::optional<Issue> writeFile(const Utils::FileName &path, const QVariantMap &data) const;
+ virtual RestoreData readFile(const FileName &path) const;
+ virtual optional<Issue> writeFile(const FileName &path, const QVariantMap &data) const;
private:
- Utils::FileName m_baseFilePath;
+ FileName m_baseFilePath;
mutable std::unique_ptr<PersistentSettingsWriter> m_writer;
bool m_readOnly = false;
};
@@ -154,7 +154,7 @@ class QTCREATOR_UTILS_EXPORT BackUpStrategy
public:
virtual ~BackUpStrategy() = default;
- virtual FileNameList readFileCandidates(const Utils::FileName &baseFileName) const;
+ virtual FileNameList readFileCandidates(const FileName &baseFileName) const;
// Return -1 if data1 is better that data2, 0 if both are equally worthwhile
// and 1 if data2 is better than data1
virtual int compare(const SettingsAccessor::RestoreData &data1,
@@ -172,14 +172,14 @@ public:
BackingUpSettingsAccessor(std::unique_ptr<BackUpStrategy> &&strategy, const QString &docType,
const QString &displayName, const QString &applicationDisplayName);
- RestoreData readData(const Utils::FileName &path, QWidget *parent) const override;
- Utils::optional<Issue> writeData(const Utils::FileName &path, const QVariantMap &data,
- QWidget *parent) const override;
+ RestoreData readData(const FileName &path, QWidget *parent) const override;
+ optional<Issue> writeData(const FileName &path, const QVariantMap &data,
+ QWidget *parent) const override;
BackUpStrategy *strategy() const { return m_strategy.get(); }
private:
- Utils::FileNameList readFileCandidates(const FileName &path) const;
+ FileNameList readFileCandidates(const FileName &path) const;
RestoreData bestReadFileData(const FileNameList &candidates, QWidget *parent) const;
void backupFile(const FileName &path, const QVariantMap &data, QWidget *parent) const;
@@ -224,7 +224,7 @@ public:
virtual QVariantMap upgrade(const QVariantMap &data) = 0;
protected:
- typedef QPair<QLatin1String,QLatin1String> Change;
+ using Change = QPair<QLatin1String,QLatin1String>;
QVariantMap renameKeys(const QList<Change> &changes, QVariantMap map) const;
private:
@@ -251,7 +251,7 @@ public:
bool isValidVersionAndId(const int version, const QByteArray &id) const;
VersionUpgrader *upgrader(const int version) const;
- RestoreData readData(const Utils::FileName &path, QWidget *parent) const override;
+ RestoreData readData(const FileName &path, QWidget *parent) const override;
protected:
QVariantMap prepareToWriteSettings(const QVariantMap &data) const override;
@@ -284,7 +284,7 @@ public:
const QString &docType, const QString &displayName,
const QString &applicationDisplayName);
- RestoreData readData(const Utils::FileName &path, QWidget *parent) const final;
+ RestoreData readData(const FileName &path, QWidget *parent) const final;
void setSecondaryAccessor(std::unique_ptr<SettingsAccessor> &&secondary);
diff --git a/src/libs/utils/settingsselector.cpp b/src/libs/utils/settingsselector.cpp
index 1af35d92ab..ddfa7a137c 100644
--- a/src/libs/utils/settingsselector.cpp
+++ b/src/libs/utils/settingsselector.cpp
@@ -41,7 +41,7 @@ namespace Utils {
SettingsSelector::SettingsSelector(QWidget *parent) :
QWidget(parent)
{
- QHBoxLayout *layout = new QHBoxLayout(this);
+ auto layout = new QHBoxLayout(this);
layout->setContentsMargins(0, 0, 0, 0);
layout->setSpacing(6);
@@ -77,8 +77,7 @@ SettingsSelector::SettingsSelector(QWidget *parent) :
this, &SettingsSelector::currentChanged);
}
-SettingsSelector::~SettingsSelector()
-{ }
+SettingsSelector::~SettingsSelector() = default;
void SettingsSelector::setConfigurationModel(QAbstractItemModel *model)
{
diff --git a/src/libs/utils/settingsselector.h b/src/libs/utils/settingsselector.h
index 7c5220afad..16d98e40c7 100644
--- a/src/libs/utils/settingsselector.h
+++ b/src/libs/utils/settingsselector.h
@@ -46,8 +46,8 @@ class QTCREATOR_UTILS_EXPORT SettingsSelector : public QWidget
Q_OBJECT
public:
- explicit SettingsSelector(QWidget *parent = 0);
- ~SettingsSelector();
+ explicit SettingsSelector(QWidget *parent = nullptr);
+ ~SettingsSelector() override;
void setConfigurationModel(QAbstractItemModel *model);
QAbstractItemModel *configurationModel() const;
diff --git a/src/libs/utils/shellcommand.cpp b/src/libs/utils/shellcommand.cpp
index 05c515eabf..92d97dc65b 100644
--- a/src/libs/utils/shellcommand.cpp
+++ b/src/libs/utils/shellcommand.cpp
@@ -68,11 +68,11 @@ class ShellCommandPrivate
{
public:
struct Job {
- explicit Job(const QString &wd, const Utils::FileName &b, const QStringList &a, int t,
+ explicit Job(const QString &wd, const FileName &b, const QStringList &a, int t,
const ExitCodeInterpreter &interpreter);
QString workingDirectory;
- Utils::FileName binary;
+ FileName binary;
QStringList arguments;
ExitCodeInterpreter exitCodeInterpreter;
int timeoutS;
@@ -113,7 +113,7 @@ ShellCommandPrivate::~ShellCommandPrivate()
delete m_progressParser;
}
-ShellCommandPrivate::Job::Job(const QString &wd, const Utils::FileName &b, const QStringList &a,
+ShellCommandPrivate::Job::Job(const QString &wd, const FileName &b, const QStringList &a,
int t, const ExitCodeInterpreter &interpreter) :
workingDirectory(wd),
binary(b),
@@ -195,13 +195,13 @@ void ShellCommand::addFlags(unsigned f)
d->m_flags |= f;
}
-void ShellCommand::addJob(const Utils::FileName &binary, const QStringList &arguments,
+void ShellCommand::addJob(const FileName &binary, const QStringList &arguments,
const QString &workingDirectory, const ExitCodeInterpreter &interpreter)
{
addJob(binary, arguments, defaultTimeoutS(), workingDirectory, interpreter);
}
-void ShellCommand::addJob(const Utils::FileName &binary, const QStringList &arguments, int timeoutS,
+void ShellCommand::addJob(const FileName &binary, const QStringList &arguments, int timeoutS,
const QString &workingDirectory, const ExitCodeInterpreter &interpreter)
{
d->m_jobs.push_back(Internal::ShellCommandPrivate::Job(workDirectory(workingDirectory), binary,
@@ -286,13 +286,13 @@ void ShellCommand::run(QFutureInterface<void> &future)
d->m_lastExecSuccess = true;
for (int j = 0; j < count; j++) {
const Internal::ShellCommandPrivate::Job &job = d->m_jobs.at(j);
- Utils::SynchronousProcessResponse resp
+ SynchronousProcessResponse resp
= runCommand(job.binary, job.arguments, job.timeoutS, job.workingDirectory,
job.exitCodeInterpreter);
stdOut += resp.stdOut();
stdErr += resp.stdErr();
d->m_lastExecExitCode = resp.exitCode;
- d->m_lastExecSuccess = resp.result == Utils::SynchronousProcessResponse::Finished;
+ d->m_lastExecSuccess = resp.result == SynchronousProcessResponse::Finished;
if (!d->m_lastExecSuccess)
break;
}
@@ -314,22 +314,22 @@ void ShellCommand::run(QFutureInterface<void> &future)
}
if (d->m_progressParser)
- d->m_progressParser->setFuture(0);
+ d->m_progressParser->setFuture(nullptr);
// As it is used asynchronously, we need to delete ourselves
this->deleteLater();
}
-Utils::SynchronousProcessResponse ShellCommand::runCommand(const Utils::FileName &binary,
- const QStringList &arguments, int timeoutS,
- const QString &workingDirectory,
- const ExitCodeInterpreter &interpreter)
+SynchronousProcessResponse ShellCommand::runCommand(const FileName &binary,
+ const QStringList &arguments, int timeoutS,
+ const QString &workingDirectory,
+ const ExitCodeInterpreter &interpreter)
{
- Utils::SynchronousProcessResponse response;
+ SynchronousProcessResponse response;
const QString dir = workDirectory(workingDirectory);
if (binary.isEmpty()) {
- response.result = Utils::SynchronousProcessResponse::StartFailed;
+ response.result = SynchronousProcessResponse::StartFailed;
return response;
}
@@ -345,7 +345,7 @@ Utils::SynchronousProcessResponse ShellCommand::runCommand(const Utils::FileName
if (!d->m_aborted) {
// Success/Fail message in appropriate window?
- if (response.result == Utils::SynchronousProcessResponse::Finished) {
+ if (response.result == SynchronousProcessResponse::Finished) {
if (d->m_flags & ShowSuccessMessage)
proxy->appendMessage(response.exitMessage(binary.toUserOutput(), timeoutS));
} else if (!(d->m_flags & SuppressFailMessage)) {
@@ -356,15 +356,15 @@ Utils::SynchronousProcessResponse ShellCommand::runCommand(const Utils::FileName
return response;
}
-Utils::SynchronousProcessResponse ShellCommand::runFullySynchronous(const Utils::FileName &binary,
- const QStringList &arguments,
- QSharedPointer<OutputProxy> proxy,
- int timeoutS,
- const QString &workingDirectory,
- const ExitCodeInterpreter &interpreter)
+SynchronousProcessResponse ShellCommand::runFullySynchronous(const FileName &binary,
+ const QStringList &arguments,
+ QSharedPointer<OutputProxy> proxy,
+ int timeoutS,
+ const QString &workingDirectory,
+ const ExitCodeInterpreter &interpreter)
{
// Set up process
- Utils::SynchronousProcess process;
+ SynchronousProcess process;
process.setFlags(processFlags());
const QString dir = workDirectory(workingDirectory);
if (!dir.isEmpty())
@@ -403,9 +403,9 @@ SynchronousProcessResponse ShellCommand::runSynchronous(const FileName &binary,
const QString &workingDirectory,
const ExitCodeInterpreter &interpreter)
{
- Utils::SynchronousProcess process;
+ SynchronousProcess process;
process.setExitCodeInterpreter(interpreter);
- connect(this, &ShellCommand::terminate, &process, &Utils::SynchronousProcess::terminate);
+ connect(this, &ShellCommand::terminate, &process, &SynchronousProcess::terminate);
process.setProcessEnvironment(processEnvironment());
process.setTimeoutS(timeoutS);
if (d->m_codec)
@@ -421,7 +421,7 @@ SynchronousProcessResponse ShellCommand::runSynchronous(const FileName &binary,
} else if (d->m_progressiveOutput
|| !(d->m_flags & SuppressStdErr)) {
process.setStdErrBufferedSignalsEnabled(true);
- connect(&process, &Utils::SynchronousProcess::stdErrBuffered,
+ connect(&process, &SynchronousProcess::stdErrBuffered,
this, [this, proxy](const QString &text)
{
if (d->m_progressParser)
@@ -436,7 +436,7 @@ SynchronousProcessResponse ShellCommand::runSynchronous(const FileName &binary,
// connect stdout to the output window if desired
if (d->m_progressParser || d->m_progressiveOutput || (d->m_flags & ShowStdOut)) {
process.setStdOutBufferedSignalsEnabled(true);
- connect(&process, &Utils::SynchronousProcess::stdOutBuffered,
+ connect(&process, &SynchronousProcess::stdOutBuffered,
this, [this, proxy](const QString &text)
{
if (d->m_progressParser)
@@ -503,7 +503,6 @@ void ShellCommand::setOutputProxyFactory(const std::function<OutputProxy *()> &f
}
ProgressParser::ProgressParser() :
- m_future(0),
m_futureMutex(new QMutex)
{ }
diff --git a/src/libs/utils/shellcommand.h b/src/libs/utils/shellcommand.h
index eb3161e3a1..c1bdb5a785 100644
--- a/src/libs/utils/shellcommand.h
+++ b/src/libs/utils/shellcommand.h
@@ -63,7 +63,7 @@ private:
void setFuture(QFutureInterface<void> *future);
QFutureInterface<void> *m_future;
- QMutex *m_futureMutex;
+ QMutex *m_futureMutex = nullptr;
friend class ShellCommand;
};
diff --git a/src/libs/utils/shellcommandpage.cpp b/src/libs/utils/shellcommandpage.cpp
index 6f4690ef65..423fe64623 100644
--- a/src/libs/utils/shellcommandpage.cpp
+++ b/src/libs/utils/shellcommandpage.cpp
@@ -53,7 +53,7 @@ ShellCommandPage::ShellCommandPage(QWidget *parent) :
resize(264, 200);
auto verticalLayout = new QVBoxLayout(this);
m_logPlainTextEdit = new QPlainTextEdit;
- m_formatter = new Utils::OutputFormatter;
+ m_formatter = new OutputFormatter;
m_logPlainTextEdit->setReadOnly(true);
m_formatter->setPlainTextEdit(m_logPlainTextEdit);
@@ -86,10 +86,10 @@ void ShellCommandPage::start(ShellCommand *command)
m_command = command;
command->setProgressiveOutput(true);
connect(command, &ShellCommand::stdOutText, this, [this](const QString &text) {
- m_formatter->appendMessage(text, Utils::StdOutFormat);
+ m_formatter->appendMessage(text, StdOutFormat);
});
connect(command, &ShellCommand::stdErrText, this, [this](const QString &text) {
- m_formatter->appendMessage(text, Utils::StdErrFormat);
+ m_formatter->appendMessage(text, StdErrFormat);
});
connect(command, &ShellCommand::finished, this, &ShellCommandPage::slotFinished);
QApplication::setOverrideCursor(Qt::WaitCursor);
diff --git a/src/libs/utils/sizedarray.h b/src/libs/utils/sizedarray.h
index 4e85c93ca0..2aecaf21b7 100644
--- a/src/libs/utils/sizedarray.h
+++ b/src/libs/utils/sizedarray.h
@@ -54,7 +54,7 @@ public:
using std::array<T, MaxSize>::rend;
using std::array<T, MaxSize>::crend;
- constexpr SizedArray() = default;
+ constexpr SizedArray() : std::array<T, MaxSize>() {}
SizedArray(std::initializer_list<T> list)
: m_size(std::uint8_t(list.size()))
{
diff --git a/src/libs/utils/smallstring.h b/src/libs/utils/smallstring.h
index 59fc3d6699..dce302594b 100644
--- a/src/libs/utils/smallstring.h
+++ b/src/libs/utils/smallstring.h
@@ -146,7 +146,7 @@ public:
{
}
- BasicSmallString(std::initializer_list<Utils::SmallStringView> list)
+ BasicSmallString(std::initializer_list<SmallStringView> list)
: m_data(Internal::StringDataLayout<Size>())
{
appendInitializerList(list, 0);
@@ -695,7 +695,7 @@ private:
void appendInitializerList(std::initializer_list<SmallStringView> list, std::size_t initialSize)
{
- auto addSize = [] (std::size_t size, Utils::SmallStringView string) {
+ auto addSize = [] (std::size_t size, SmallStringView string) {
return size + string.size();
};
@@ -706,7 +706,7 @@ private:
char *currentData = data() + initialSize;
- for (Utils::SmallStringView string : list) {
+ for (SmallStringView string : list) {
std::memcpy(currentData, string.data(), string.size());
currentData += string.size();
}
diff --git a/src/libs/utils/statuslabel.cpp b/src/libs/utils/statuslabel.cpp
index 70205172ce..ff4a63843d 100644
--- a/src/libs/utils/statuslabel.cpp
+++ b/src/libs/utils/statuslabel.cpp
@@ -35,7 +35,7 @@
namespace Utils {
-StatusLabel::StatusLabel(QWidget *parent) : QLabel(parent), m_timer(0)
+StatusLabel::StatusLabel(QWidget *parent) : QLabel(parent)
{
// A manual size let's us shrink below minimum text width which is what
// we want in [fake] status bars.
diff --git a/src/libs/utils/statuslabel.h b/src/libs/utils/statuslabel.h
index 470040d572..054330b085 100644
--- a/src/libs/utils/statuslabel.h
+++ b/src/libs/utils/statuslabel.h
@@ -47,7 +47,7 @@ private:
void slotTimeout();
void stopTimer();
- QTimer *m_timer;
+ QTimer *m_timer = nullptr;
QString m_lastPermanentStatusMessage;
};
diff --git a/src/libs/utils/stylehelper.cpp b/src/libs/utils/stylehelper.cpp
index 468bccc348..628e062b3e 100644
--- a/src/libs/utils/stylehelper.cpp
+++ b/src/libs/utils/stylehelper.cpp
@@ -376,7 +376,7 @@ QPixmap StyleHelper::disabledSideBarIcon(const QPixmap &enabledicon)
{
QImage im = enabledicon.toImage().convertToFormat(QImage::Format_ARGB32);
for (int y=0; y<im.height(); ++y) {
- QRgb *scanLine = reinterpret_cast<QRgb*>(im.scanLine(y));
+ auto scanLine = reinterpret_cast<QRgb*>(im.scanLine(y));
for (int x=0; x<im.width(); ++x) {
QRgb pixel = *scanLine;
char intensity = char(qGray(pixel));
diff --git a/src/libs/utils/synchronousprocess.cpp b/src/libs/utils/synchronousprocess.cpp
index 732a8e2a30..0f8d4ea825 100644
--- a/src/libs/utils/synchronousprocess.cpp
+++ b/src/libs/utils/synchronousprocess.cpp
@@ -84,7 +84,7 @@ namespace Utils {
// A special QProcess derivative allowing for terminal control.
class TerminalControllingProcess : public QProcess {
public:
- TerminalControllingProcess() : m_flags(0) {}
+ TerminalControllingProcess() = default;
unsigned flags() const { return m_flags; }
void setFlags(unsigned tc) { m_flags = tc; }
@@ -93,7 +93,7 @@ protected:
void setupChildProcess() override;
private:
- unsigned m_flags;
+ unsigned m_flags = 0;
};
void TerminalControllingProcess::setupChildProcess()
@@ -317,8 +317,8 @@ SynchronousProcess::SynchronousProcess() :
SynchronousProcess::~SynchronousProcess()
{
- disconnect(&d->m_timer, 0, this, 0);
- disconnect(&d->m_process, 0, this, 0);
+ disconnect(&d->m_timer, nullptr, this, nullptr);
+ disconnect(&d->m_process, nullptr, this, nullptr);
delete d;
}
@@ -488,7 +488,8 @@ SynchronousProcessResponse SynchronousProcess::runBlocking(const QString &binary
// event loop in that case.
d->m_binary = binary;
d->m_process.start(binary, args, QIODevice::ReadOnly);
- if (!d->m_process.waitForStarted(d->m_maxHangTimerCount * 1000)) {
+ if (!d->m_process.waitForStarted(d->m_maxHangTimerCount * 1000)
+ && d->m_process.state() == QProcess::NotRunning) {
d->m_result.result = SynchronousProcessResponse::StartFailed;
return d->m_result;
}
@@ -539,10 +540,10 @@ static inline bool askToKill(const QString &binary = QString())
msg += QLatin1Char(' ');
msg += SynchronousProcess::tr("Would you like to terminate it?");
// Restore the cursor that is set to wait while running.
- const bool hasOverrideCursor = QApplication::overrideCursor() != 0;
+ const bool hasOverrideCursor = QApplication::overrideCursor() != nullptr;
if (hasOverrideCursor)
QApplication::restoreOverrideCursor();
- QMessageBox::StandardButton answer = QMessageBox::question(0, title, msg, QMessageBox::Yes|QMessageBox::No);
+ QMessageBox::StandardButton answer = QMessageBox::question(nullptr, title, msg, QMessageBox::Yes|QMessageBox::No);
if (hasOverrideCursor)
QApplication::setOverrideCursor(Qt::WaitCursor);
return answer == QMessageBox::Yes;
@@ -615,7 +616,7 @@ void SynchronousProcess::processStdErr(bool emitSignals)
QSharedPointer<QProcess> SynchronousProcess::createProcess(unsigned flags)
{
- TerminalControllingProcess *process = new TerminalControllingProcess;
+ auto process = new TerminalControllingProcess;
process->setFlags(flags);
return QSharedPointer<QProcess>(process);
}
diff --git a/src/libs/utils/textfileformat.cpp b/src/libs/utils/textfileformat.cpp
index 2882286871..afd4e62e83 100644
--- a/src/libs/utils/textfileformat.cpp
+++ b/src/libs/utils/textfileformat.cpp
@@ -68,10 +68,7 @@ QDebug operator<<(QDebug d, const TextFileFormat &format)
as strings or string lists and to write out files.
*/
-TextFileFormat::TextFileFormat() :
- lineTerminationMode(NativeLineTerminator), hasUtf8Bom(false), codec(0)
-{
-}
+TextFileFormat::TextFileFormat() = default;
/*!
Detects the format of text data.
@@ -83,7 +80,7 @@ TextFileFormat TextFileFormat::detect(const QByteArray &data)
if (data.isEmpty())
return result;
const int bytesRead = data.size();
- const unsigned char *buf = reinterpret_cast<const unsigned char *>(data.constData());
+ const auto buf = reinterpret_cast<const unsigned char *>(data.constData());
// code taken from qtextstream
if (bytesRead >= 4 && ((buf[0] == 0xff && buf[1] == 0xfe && buf[2] == 0 && buf[3] == 0)
|| (buf[0] == 0 && buf[1] == 0 && buf[2] == 0xfe && buf[3] == 0xff))) {
@@ -202,7 +199,7 @@ bool TextFileFormat::decode(const QByteArray &data, QStringList *target) const
template <class Target>
TextFileFormat::ReadResult readTextFile(const QString &fileName, const QTextCodec *defaultCodec,
Target *target, TextFileFormat *format, QString *errorString,
- QByteArray *decodingErrorSampleIn = 0)
+ QByteArray *decodingErrorSampleIn = nullptr)
{
if (decodingErrorSampleIn)
decodingErrorSampleIn->clear();
diff --git a/src/libs/utils/textfileformat.h b/src/libs/utils/textfileformat.h
index ab432a53d6..9ac452a6e5 100644
--- a/src/libs/utils/textfileformat.h
+++ b/src/libs/utils/textfileformat.h
@@ -78,9 +78,9 @@ public:
static QByteArray decodingErrorSample(const QByteArray &data);
- LineTerminationMode lineTerminationMode;
- bool hasUtf8Bom;
- const QTextCodec *codec;
+ LineTerminationMode lineTerminationMode = NativeLineTerminator;
+ bool hasUtf8Bom = false;
+ const QTextCodec *codec = nullptr;
};
} // namespace Utils
diff --git a/src/libs/utils/textutils.cpp b/src/libs/utils/textutils.cpp
index 0eb16d2dd1..b9fbeae907 100644
--- a/src/libs/utils/textutils.cpp
+++ b/src/libs/utils/textutils.cpp
@@ -27,7 +27,6 @@
#include <QTextDocument>
#include <QTextBlock>
-#include <QTextCursor>
namespace Utils {
namespace Text {
@@ -46,9 +45,9 @@ bool convertPosition(const QTextDocument *document, int pos, int *line, int *col
}
}
-Utils::OptionalLineColumn convertPosition(const QTextDocument *document, int pos)
+OptionalLineColumn convertPosition(const QTextDocument *document, int pos)
{
- Utils::OptionalLineColumn optional;
+ OptionalLineColumn optional;
QTextBlock block = document->findBlock(pos);
diff --git a/src/libs/utils/textutils.h b/src/libs/utils/textutils.h
index 7c87108832..c03e7ce2ce 100644
--- a/src/libs/utils/textutils.h
+++ b/src/libs/utils/textutils.h
@@ -29,6 +29,7 @@
#include "utils_global.h"
#include <QString>
+#include <QTextCursor>
QT_FORWARD_DECLARE_CLASS(QTextDocument)
QT_FORWARD_DECLARE_CLASS(QTextCursor)
@@ -41,7 +42,7 @@ QTCREATOR_UTILS_EXPORT bool convertPosition(const QTextDocument *document,
int pos,
int *line, int *column);
QTCREATOR_UTILS_EXPORT
-Utils::OptionalLineColumn convertPosition(const QTextDocument *document, int pos);
+OptionalLineColumn convertPosition(const QTextDocument *document, int pos);
// line and column are 1-based
QTCREATOR_UTILS_EXPORT int positionInText(QTextDocument *textDocument, int line, int column);
@@ -54,5 +55,42 @@ QTCREATOR_UTILS_EXPORT QTextCursor flippedCursor(const QTextCursor &cursor);
QTCREATOR_UTILS_EXPORT QTextCursor wordStartCursor(const QTextCursor &cursor);
+template <class CharacterProvider>
+void moveToPrevChar(CharacterProvider &provider, QTextCursor &cursor)
+{
+ cursor.movePosition(QTextCursor::PreviousCharacter);
+ while (provider.characterAt(cursor.position()).isSpace())
+ cursor.movePosition(QTextCursor::PreviousCharacter);
+}
+
+template <class CharacterProvider>
+bool matchPreviousWord(CharacterProvider &provider, QTextCursor cursor, QString pattern)
+{
+ cursor.movePosition(QTextCursor::PreviousWord);
+ while (provider.characterAt(cursor.position()) == ':')
+ cursor.movePosition(QTextCursor::PreviousWord, QTextCursor::MoveAnchor, 2);
+
+ int previousWordStart = cursor.position();
+ cursor.movePosition(QTextCursor::NextWord);
+ moveToPrevChar(provider, cursor);
+ QString toMatch = provider.textAt(previousWordStart, cursor.position() - previousWordStart + 1);
+
+ pattern = pattern.simplified();
+ while (!pattern.isEmpty() && pattern.endsWith(toMatch)) {
+ pattern.chop(toMatch.length());
+ if (pattern.endsWith(' '))
+ pattern.chop(1);
+ if (!pattern.isEmpty()) {
+ cursor.movePosition(QTextCursor::StartOfWord);
+ cursor.movePosition(QTextCursor::PreviousWord);
+ previousWordStart = cursor.position();
+ cursor.movePosition(QTextCursor::NextWord);
+ moveToPrevChar(provider, cursor);
+ toMatch = provider.textAt(previousWordStart, cursor.position() - previousWordStart + 1);
+ }
+ }
+ return pattern.isEmpty();
+}
+
} // Text
} // Utils
diff --git a/src/libs/utils/theme/theme.cpp b/src/libs/utils/theme/theme.cpp
index e0ea6f2b5a..fc3018fc1d 100644
--- a/src/libs/utils/theme/theme.cpp
+++ b/src/libs/utils/theme/theme.cpp
@@ -36,7 +36,7 @@
namespace Utils {
-static Theme *m_creatorTheme = 0;
+static Theme *m_creatorTheme = nullptr;
ThemePrivate::ThemePrivate()
{
diff --git a/src/libs/utils/tooltip/tips.cpp b/src/libs/utils/tooltip/tips.cpp
index ec13013812..b0aee273f4 100644
--- a/src/libs/utils/tooltip/tips.cpp
+++ b/src/libs/utils/tooltip/tips.cpp
@@ -120,11 +120,11 @@ TextTip::TextTip(QWidget *parent) : QTipLabel(parent)
setForegroundRole(QPalette::ToolTipText);
setBackgroundRole(QPalette::ToolTipBase);
ensurePolished();
- setMargin(1 + style()->pixelMetric(QStyle::PM_ToolTipLabelFrameWidth, 0, this));
+ setMargin(1 + style()->pixelMetric(QStyle::PM_ToolTipLabelFrameWidth, nullptr, this));
setFrameStyle(QFrame::NoFrame);
setAlignment(Qt::AlignLeft);
setIndent(1);
- setWindowOpacity(style()->styleHint(QStyle::SH_ToolTipLabel_Opacity, 0, this) / 255.0);
+ setWindowOpacity(style()->styleHint(QStyle::SH_ToolTipLabel_Opacity, nullptr, this) / 255.0);
}
static bool likelyContainsLink(const QString &s)
diff --git a/src/libs/utils/tooltip/tooltip.cpp b/src/libs/utils/tooltip/tooltip.cpp
index 857ec071a7..42ce6b5c56 100644
--- a/src/libs/utils/tooltip/tooltip.cpp
+++ b/src/libs/utils/tooltip/tooltip.cpp
@@ -45,7 +45,7 @@
using namespace Utils;
using namespace Internal;
-ToolTip::ToolTip() : m_tip(0), m_widget(0)
+ToolTip::ToolTip() : m_tip(nullptr), m_widget(nullptr)
{
connect(&m_showTimer, &QTimer::timeout, this, &ToolTip::hideTipImmediately);
connect(&m_hideDelayTimer, &QTimer::timeout, this, &ToolTip::hideTipImmediately);
@@ -53,7 +53,7 @@ ToolTip::ToolTip() : m_tip(0), m_widget(0)
ToolTip::~ToolTip()
{
- m_tip = 0;
+ m_tip = nullptr;
}
ToolTip *ToolTip::instance()
@@ -109,7 +109,7 @@ bool ToolTip::pinToolTip(QWidget *w, QWidget *parent)
// Find the parent WidgetTip, tell it to pin/release the
// widget and close.
for (QWidget *p = w->parentWidget(); p ; p = p->parentWidget()) {
- if (WidgetTip *wt = qobject_cast<WidgetTip *>(p)) {
+ if (auto wt = qobject_cast<WidgetTip *>(p)) {
wt->pinToolTipWidget(parent);
ToolTip::hide();
return true;
@@ -234,7 +234,7 @@ void ToolTip::hideTipImmediately()
if (m_tip) {
m_tip->close();
m_tip->deleteLater();
- m_tip = 0;
+ m_tip = nullptr;
}
m_showTimer.stop();
m_hideDelayTimer.stop();
@@ -246,7 +246,7 @@ void ToolTip::showInternal(const QPoint &pos, const QVariant &content,
int typeId, QWidget *w, const QString &helpId, const QRect &rect)
{
if (acceptShow(content, typeId, pos, w, helpId, rect)) {
- QWidget *target = 0;
+ QWidget *target = nullptr;
if (HostOsInfo::isWindowsHost())
target = QApplication::desktop()->screen(Internal::screenNumber(pos, w));
else
diff --git a/src/libs/utils/treemodel.cpp b/src/libs/utils/treemodel.cpp
index d17174a024..0d587dddbc 100644
--- a/src/libs/utils/treemodel.cpp
+++ b/src/libs/utils/treemodel.cpp
@@ -605,21 +605,18 @@ namespace Utils {
//
// TreeItem
//
-TreeItem::TreeItem()
- : m_parent(0), m_model(0)
-{
-}
+TreeItem::TreeItem() = default;
TreeItem::~TreeItem()
{
- QTC_CHECK(m_parent == 0);
- QTC_CHECK(m_model == 0);
+ QTC_CHECK(m_parent == nullptr);
+ QTC_CHECK(m_model == nullptr);
removeChildren();
}
TreeItem *TreeItem::childAt(int pos) const
{
- QTC_ASSERT(pos >= 0, return 0);
+ QTC_ASSERT(pos >= 0, return nullptr);
return pos < childCount() ? *(begin() + pos) : nullptr;
}
@@ -837,7 +834,7 @@ void TreeItem::forChildrenAtLevel(int level, const std::function<void(TreeItem *
TreeItem *TreeItem::findChildAtLevel(int level, const std::function<bool(TreeItem *)> &pred) const
{
- QTC_ASSERT(level > 0, return 0);
+ QTC_ASSERT(level > 0, return nullptr);
if (level == 1) {
for (TreeItem *item : *this)
if (pred(item))
@@ -848,7 +845,7 @@ TreeItem *TreeItem::findChildAtLevel(int level, const std::function<bool(TreeIte
return found;
}
}
- return 0;
+ return nullptr;
}
TreeItem *TreeItem::findAnyChild(const std::function<bool(TreeItem *)> &pred) const
@@ -859,7 +856,7 @@ TreeItem *TreeItem::findAnyChild(const std::function<bool(TreeItem *)> &pred) co
if (TreeItem *found = item->findAnyChild(pred))
return found;
}
- return 0;
+ return nullptr;
}
TreeItem *TreeItem::reverseFindAnyChild(const std::function<bool (TreeItem *)> &pred) const
@@ -878,8 +875,8 @@ void TreeItem::clear()
{
while (childCount() != 0) {
TreeItem *item = m_children.takeLast();
- item->m_model = 0;
- item->m_parent = 0;
+ item->m_model = nullptr;
+ item->m_parent = nullptr;
delete item;
}
}
@@ -908,7 +905,7 @@ void TreeItem::collapse()
void TreeItem::propagateModel(BaseTreeModel *m)
{
QTC_ASSERT(m, return);
- QTC_ASSERT(m_model == 0 || m_model == m, return);
+ QTC_ASSERT(m_model == nullptr || m_model == m, return);
if (m && !m_model) {
m_model = m;
for (TreeItem *item : *this)
@@ -945,9 +942,9 @@ BaseTreeModel::BaseTreeModel(TreeItem *root, QObject *parent)
BaseTreeModel::~BaseTreeModel()
{
QTC_ASSERT(m_root, return);
- QTC_ASSERT(m_root->m_parent == 0, return);
+ QTC_ASSERT(m_root->m_parent == nullptr, return);
QTC_ASSERT(m_root->m_model == this, return);
- m_root->m_model = 0;
+ m_root->m_model = nullptr;
delete m_root;
}
@@ -1039,7 +1036,7 @@ bool BaseTreeModel::hasChildren(const QModelIndex &idx) const
Qt::ItemFlags BaseTreeModel::flags(const QModelIndex &idx) const
{
if (!idx.isValid())
- return 0;
+ return nullptr;
TreeItem *item = itemForIndex(idx);
return item ? item->flags(idx.column())
: (Qt::ItemIsEnabled|Qt::ItemIsSelectable);
@@ -1070,19 +1067,19 @@ TreeItem *BaseTreeModel::rootItem() const
void BaseTreeModel::setRootItem(TreeItem *item)
{
QTC_ASSERT(item, return);
- QTC_ASSERT(item->m_model == 0, return);
- QTC_ASSERT(item->m_parent == 0, return);
+ QTC_ASSERT(item->m_model == nullptr, return);
+ QTC_ASSERT(item->m_parent == nullptr, return);
QTC_ASSERT(item != m_root, return);
QTC_CHECK(m_root);
beginResetModel();
if (m_root) {
- QTC_CHECK(m_root->m_parent == 0);
+ QTC_CHECK(m_root->m_parent == nullptr);
QTC_CHECK(m_root->m_model == this);
// needs to be done explicitly before setting the model to 0, otherwise it might lead to a
// crash inside a view or proxy model, especially if there are selected items
m_root->removeChildren();
- m_root->m_model = 0;
+ m_root->m_model = nullptr;
delete m_root;
}
m_root = item;
@@ -1118,8 +1115,8 @@ TreeItem *BaseTreeModel::itemForIndex(const QModelIndex &idx) const
{
CHECK_INDEX(idx);
TreeItem *item = idx.isValid() ? static_cast<TreeItem*>(idx.internalPointer()) : m_root;
- QTC_ASSERT(item, return 0);
- QTC_ASSERT(item->m_model == static_cast<const BaseTreeModel *>(this), return 0);
+ QTC_ASSERT(item, return nullptr);
+ QTC_ASSERT(item->m_model == static_cast<const BaseTreeModel *>(this), return nullptr);
return item;
}
@@ -1132,7 +1129,7 @@ QModelIndex BaseTreeModel::indexForItem(const TreeItem *item) const
TreeItem *p = item->parent();
QTC_ASSERT(p, return QModelIndex());
- TreeItem *mitem = const_cast<TreeItem *>(item);
+ auto mitem = const_cast<TreeItem *>(item);
int row = p->indexOf(mitem);
return createIndex(row, 0, mitem);
}
@@ -1166,8 +1163,8 @@ TreeItem *BaseTreeModel::takeItem(TreeItem *item)
QModelIndex idx = indexForItem(parent);
beginRemoveRows(idx, pos, pos);
- item->m_parent = 0;
- item->m_model = 0;
+ item->m_parent = nullptr;
+ item->m_model = nullptr;
parent->m_children.removeAt(pos);
endRemoveRows();
return item;
diff --git a/src/libs/utils/treemodel.h b/src/libs/utils/treemodel.h
index bf20b75c8d..92f501ff4a 100644
--- a/src/libs/utils/treemodel.h
+++ b/src/libs/utils/treemodel.h
@@ -99,8 +99,8 @@ private:
void removeItemAt(int pos);
void propagateModel(BaseTreeModel *m);
- TreeItem *m_parent; // Not owned.
- BaseTreeModel *m_model; // Not owned.
+ TreeItem *m_parent = nullptr; // Not owned.
+ BaseTreeModel *m_model = nullptr; // Not owned.
QVector<TreeItem *> m_children; // Owned.
friend class BaseTreeModel;
};
diff --git a/src/libs/utils/treeviewcombobox.cpp b/src/libs/utils/treeviewcombobox.cpp
index 6e81d9377b..36a62d3694 100644
--- a/src/libs/utils/treeviewcombobox.cpp
+++ b/src/libs/utils/treeviewcombobox.cpp
@@ -44,7 +44,7 @@ void TreeViewComboBoxView::adjustWidth(int width)
TreeViewComboBox::TreeViewComboBox(QWidget *parent)
- : QComboBox(parent), m_skipNextHide(false)
+ : QComboBox(parent)
{
m_view = new TreeViewComboBoxView;
m_view->setHeaderHidden(true);
@@ -135,7 +135,7 @@ void TreeViewComboBox::setCurrentIndex(const QModelIndex &index)
bool TreeViewComboBox::eventFilter(QObject *object, QEvent *event)
{
if (event->type() == QEvent::MouseButtonPress && object == view()->viewport()) {
- QMouseEvent* mouseEvent = static_cast<QMouseEvent*>(event);
+ auto* mouseEvent = static_cast<QMouseEvent*>(event);
QModelIndex index = view()->indexAt(mouseEvent->pos());
if (!view()->visualRect(index).contains(mouseEvent->pos()))
m_skipNextHide = true;
diff --git a/src/libs/utils/treeviewcombobox.h b/src/libs/utils/treeviewcombobox.h
index 0bdfc73cbb..08ab5d7226 100644
--- a/src/libs/utils/treeviewcombobox.h
+++ b/src/libs/utils/treeviewcombobox.h
@@ -61,6 +61,6 @@ private:
QModelIndex lastIndex(const QModelIndex &index);
TreeViewComboBoxView *m_view;
- bool m_skipNextHide;
+ bool m_skipNextHide = false;
};
}
diff --git a/src/libs/utils/uncommentselection.cpp b/src/libs/utils/uncommentselection.cpp
index 852bea627a..6771f3f4ea 100644
--- a/src/libs/utils/uncommentselection.cpp
+++ b/src/libs/utils/uncommentselection.cpp
@@ -32,14 +32,11 @@ using namespace Utils;
CommentDefinition CommentDefinition::CppStyle = CommentDefinition("//", "/*", "*/");
CommentDefinition CommentDefinition::HashStyle = CommentDefinition("#");
-CommentDefinition::CommentDefinition() :
- isAfterWhiteSpaces(false)
-{}
+CommentDefinition::CommentDefinition() = default;
CommentDefinition::CommentDefinition(const QString &single, const QString &multiStart,
const QString &multiEnd)
- : isAfterWhiteSpaces(false),
- singleLine(single),
+ : singleLine(single),
multiLineStart(multiStart),
multiLineEnd(multiEnd)
{
diff --git a/src/libs/utils/uncommentselection.h b/src/libs/utils/uncommentselection.h
index dbc47bbc64..b61fce48c9 100644
--- a/src/libs/utils/uncommentselection.h
+++ b/src/libs/utils/uncommentselection.h
@@ -50,7 +50,7 @@ public:
bool hasMultiLineStyle() const;
public:
- bool isAfterWhiteSpaces;
+ bool isAfterWhiteSpaces = false;
QString singleLine;
QString multiLineStart;
QString multiLineEnd;
diff --git a/src/libs/utils/url.cpp b/src/libs/utils/url.cpp
index 56b832eb5c..026af262fc 100644
--- a/src/libs/utils/url.cpp
+++ b/src/libs/utils/url.cpp
@@ -47,7 +47,7 @@ QUrl urlFromLocalSocket()
{
QUrl serverUrl;
serverUrl.setScheme(urlSocketScheme());
- Utils::TemporaryFile file("qtcreator-freesocket");
+ TemporaryFile file("qtcreator-freesocket");
if (file.open())
serverUrl.setPath(file.fileName());
return serverUrl;
diff --git a/src/libs/utils/utils-lib.pri b/src/libs/utils/utils-lib.pri
index 7de656218b..0cd5f68e12 100644
--- a/src/libs/utils/utils-lib.pri
+++ b/src/libs/utils/utils-lib.pri
@@ -74,7 +74,7 @@ SOURCES += \
$$PWD/crumblepath.cpp \
$$PWD/historycompleter.cpp \
$$PWD/buildablehelperlibrary.cpp \
- $$PWD/annotateditemdelegate.cpp \
+ $$PWD/delegates.cpp \
$$PWD/fileinprojectfinder.cpp \
$$PWD/statuslabel.cpp \
$$PWD/outputformatter.cpp \
@@ -184,7 +184,7 @@ HEADERS += \
$$PWD/crumblepath.h \
$$PWD/historycompleter.h \
$$PWD/buildablehelperlibrary.h \
- $$PWD/annotateditemdelegate.h \
+ $$PWD/delegates.h \
$$PWD/fileinprojectfinder.h \
$$PWD/statuslabel.h \
$$PWD/outputformatter.h \
diff --git a/src/libs/utils/utils.qbs b/src/libs/utils/utils.qbs
index d6f02202e9..c277c21427 100644
--- a/src/libs/utils/utils.qbs
+++ b/src/libs/utils/utils.qbs
@@ -39,8 +39,6 @@ Project {
files: [
"QtConcurrentTools",
"algorithm.h",
- "annotateditemdelegate.cpp",
- "annotateditemdelegate.h",
"ansiescapecodehandler.cpp",
"ansiescapecodehandler.h",
"appmainwindow.cpp",
@@ -71,6 +69,8 @@ Project {
"crumblepath.cpp",
"crumblepath.h",
"declarationmacros.h",
+ "delegates.cpp",
+ "delegates.h",
"detailsbutton.cpp",
"detailsbutton.h",
"detailswidget.cpp",
diff --git a/src/libs/utils/utils.qrc b/src/libs/utils/utils.qrc
index 032ca917c0..a19903f09b 100644
--- a/src/libs/utils/utils.qrc
+++ b/src/libs/utils/utils.qrc
@@ -210,4 +210,46 @@
<file>images/toolbuttonexpandarrow.png</file>
<file>images/toolbuttonexpandarrow@2x.png</file>
</qresource>
+ <qresource prefix="/codemodel">
+ <file>images/enum.png</file>
+ <file>images/enum@2x.png</file>
+ <file>images/enumerator.png</file>
+ <file>images/enumerator@2x.png</file>
+ <file>images/keyword.png</file>
+ <file>images/keyword@2x.png</file>
+ <file>images/macro.png</file>
+ <file>images/macro@2x.png</file>
+ <file>images/signal.png</file>
+ <file>images/signal@2x.png</file>
+ <file>images/slot.png</file>
+ <file>images/slot@2x.png</file>
+ <file>images/member.png</file>
+ <file>images/member@2x.png</file>
+ <file>images/private.png</file>
+ <file>images/private@2x.png</file>
+ <file>images/privatebackground.png</file>
+ <file>images/privatebackground@2x.png</file>
+ <file>images/property.png</file>
+ <file>images/property@2x.png</file>
+ <file>images/propertybackground.png</file>
+ <file>images/propertybackground@2x.png</file>
+ <file>images/protected.png</file>
+ <file>images/protected@2x.png</file>
+ <file>images/protectedbackground.png</file>
+ <file>images/protectedbackground@2x.png</file>
+ <file>images/static.png</file>
+ <file>images/static@2x.png</file>
+ <file>images/staticbackground.png</file>
+ <file>images/staticbackground@2x.png</file>
+ <file>images/classmemberfunction.png</file>
+ <file>images/classmemberfunction@2x.png</file>
+ <file>images/classmembervariable.png</file>
+ <file>images/classmembervariable@2x.png</file>
+ <file>images/classparent.png</file>
+ <file>images/classparent@2x.png</file>
+ <file>images/classrelation.png</file>
+ <file>images/classrelation@2x.png</file>
+ <file>images/classrelationbackground.png</file>
+ <file>images/classrelationbackground@2x.png</file>
+ </qresource>
</RCC>
diff --git a/src/libs/utils/utilsicons.cpp b/src/libs/utils/utilsicons.cpp
index 62f8743706..a441ff3e81 100644
--- a/src/libs/utils/utilsicons.cpp
+++ b/src/libs/utils/utilsicons.cpp
@@ -30,9 +30,9 @@ namespace Icons {
const Icon HOME({
- {QLatin1String(":/utils/images/home.png"), Utils::Theme::PanelTextColorDark}}, Icon::Tint);
+ {QLatin1String(":/utils/images/home.png"), Theme::PanelTextColorDark}}, Icon::Tint);
const Icon HOME_TOOLBAR({
- {QLatin1String(":/utils/images/home.png"), Utils::Theme::IconsBaseColor}});
+ {QLatin1String(":/utils/images/home.png"), Theme::IconsBaseColor}});
const Icon EDIT_CLEAR({
{QLatin1String(":/utils/images/editclear.png"), Theme::PanelTextColorMid}}, Icon::Tint);
const Icon EDIT_CLEAR_TOOLBAR({
@@ -256,4 +256,194 @@ const Icon CODEMODEL_FIXIT({
{":/utils/images/lightbulb.png", Theme::IconsWarningColor}}, Icon::Tint);
} // namespace Icons
+
+QIcon CodeModelIcon::iconForType(CodeModelIcon::Type type)
+{
+ static const IconMaskAndColor classRelationIcon {
+ QLatin1String(":/codemodel/images/classrelation.png"), Theme::IconsCodeModelOverlayForegroundColor};
+ static const IconMaskAndColor classRelationBackgroundIcon {
+ QLatin1String(":/codemodel/images/classrelationbackground.png"), Theme::IconsCodeModelOverlayBackgroundColor};
+ static const IconMaskAndColor classMemberFunctionIcon {
+ QLatin1String(":/codemodel/images/classmemberfunction.png"), Theme::IconsCodeModelFunctionColor};
+ static const IconMaskAndColor classMemberVariableIcon {
+ QLatin1String(":/codemodel/images/classmembervariable.png"), Theme::IconsCodeModelVariableColor};
+ static const IconMaskAndColor functionIcon {
+ QLatin1String(":/codemodel/images/member.png"), Theme::IconsCodeModelFunctionColor};
+ static const IconMaskAndColor variableIcon {
+ QLatin1String(":/codemodel/images/member.png"), Theme::IconsCodeModelVariableColor};
+ static const IconMaskAndColor signalIcon {
+ QLatin1String(":/codemodel/images/signal.png"), Theme::IconsCodeModelFunctionColor};
+ static const IconMaskAndColor slotIcon {
+ QLatin1String(":/codemodel/images/slot.png"), Theme::IconsCodeModelFunctionColor};
+ static const IconMaskAndColor propertyIcon {
+ QLatin1String(":/codemodel/images/property.png"), Theme::IconsCodeModelOverlayForegroundColor};
+ static const IconMaskAndColor propertyBackgroundIcon {
+ QLatin1String(":/codemodel/images/propertybackground.png"), Theme::IconsCodeModelOverlayBackgroundColor};
+ static const IconMaskAndColor protectedIcon {
+ QLatin1String(":/codemodel/images/protected.png"), Theme::IconsCodeModelOverlayForegroundColor};
+ static const IconMaskAndColor protectedBackgroundIcon {
+ QLatin1String(":/codemodel/images/protectedbackground.png"), Theme::IconsCodeModelOverlayBackgroundColor};
+ static const IconMaskAndColor privateIcon {
+ QLatin1String(":/codemodel/images/private.png"), Theme::IconsCodeModelOverlayForegroundColor};
+ static const IconMaskAndColor privateBackgroundIcon {
+ QLatin1String(":/codemodel/images/privatebackground.png"), Theme::IconsCodeModelOverlayBackgroundColor};
+ static const IconMaskAndColor staticIcon {
+ QLatin1String(":/codemodel/images/static.png"), Theme::IconsCodeModelOverlayForegroundColor};
+ static const IconMaskAndColor staticBackgroundIcon {
+ QLatin1String(":/codemodel/images/staticbackground.png"), Theme::IconsCodeModelOverlayBackgroundColor};
+
+ switch (type) {
+ case Class: {
+ const static QIcon icon(Icon({
+ classRelationBackgroundIcon, classRelationIcon,
+ {QLatin1String(":/codemodel/images/classparent.png"), Theme::IconsCodeModelClassColor},
+ classMemberFunctionIcon, classMemberVariableIcon
+ }, Icon::Tint).icon());
+ return icon;
+ }
+ case Struct: {
+ const static QIcon icon(Icon({
+ classRelationBackgroundIcon, classRelationIcon,
+ {QLatin1String(":/codemodel/images/classparent.png"), Theme::IconsCodeModelStructColor},
+ classMemberFunctionIcon, classMemberVariableIcon
+ }, Icon::Tint).icon());
+ return icon;
+ }
+ case Enum: {
+ const static QIcon icon(Icon({
+ {QLatin1String(":/codemodel/images/enum.png"), Theme::IconsCodeModelEnumColor}
+ }, Icon::Tint).icon());
+ return icon;
+ }
+ case Enumerator: {
+ const static QIcon icon(Icon({
+ {QLatin1String(":/codemodel/images/enumerator.png"), Theme::IconsCodeModelEnumColor}
+ }, Icon::Tint).icon());
+ return icon;
+ }
+ case FuncPublic: {
+ const static QIcon icon(Icon({
+ functionIcon}, Icon::Tint).icon());
+ return icon;
+ }
+ case FuncProtected: {
+ const static QIcon icon(Icon({
+ functionIcon, protectedBackgroundIcon, protectedIcon
+ }, Icon::Tint).icon());
+ return icon;
+ }
+ case FuncPrivate: {
+ const static QIcon icon(Icon({
+ functionIcon, privateBackgroundIcon, privateIcon
+ }, Icon::Tint).icon());
+ return icon;
+ }
+ case FuncPublicStatic: {
+ const static QIcon icon(Icon({
+ functionIcon, staticBackgroundIcon, staticIcon
+ }, Icon::Tint).icon());
+ return icon;
+ }
+ case FuncProtectedStatic: {
+ const static QIcon icon(Icon({
+ functionIcon, staticBackgroundIcon, staticIcon, protectedBackgroundIcon, protectedIcon
+ }, Icon::Tint).icon());
+ return icon;
+ }
+ case FuncPrivateStatic: {
+ const static QIcon icon(Icon({
+ functionIcon, staticBackgroundIcon, staticIcon, privateBackgroundIcon, privateIcon
+ }, Icon::Tint).icon());
+ return icon;
+ }
+ case Namespace: {
+ const static QIcon icon(Icon({
+ {QLatin1String(":/utils/images/namespace.png"), Theme::IconsCodeModelKeywordColor}
+ }, Icon::Tint).icon());
+ return icon;
+ }
+ case VarPublic: {
+ const static QIcon icon(Icon({
+ variableIcon
+ }, Icon::Tint).icon());
+ return icon;
+ }
+ case VarProtected: {
+ const static QIcon icon(Icon({
+ variableIcon, protectedBackgroundIcon, protectedIcon
+ }, Icon::Tint).icon());
+ return icon;
+ }
+ case VarPrivate: {
+ const static QIcon icon(Icon({
+ variableIcon, privateBackgroundIcon, privateIcon
+ }, Icon::Tint).icon());
+ return icon;
+ }
+ case VarPublicStatic: {
+ const static QIcon icon(Icon({
+ variableIcon, staticBackgroundIcon, staticIcon
+ }, Icon::Tint).icon());
+ return icon;
+ }
+ case VarProtectedStatic: {
+ const static QIcon icon(Icon({
+ variableIcon, staticBackgroundIcon, staticIcon, protectedBackgroundIcon, protectedIcon
+ }, Icon::Tint).icon());
+ return icon;
+ }
+ case VarPrivateStatic: {
+ const static QIcon icon(Icon({
+ variableIcon, staticBackgroundIcon, staticIcon, privateBackgroundIcon, privateIcon
+ }, Icon::Tint).icon());
+ return icon;
+ }
+ case Signal: {
+ const static QIcon icon(Icon({
+ signalIcon
+ }, Icon::Tint).icon());
+ return icon;
+ }
+ case SlotPublic: {
+ const static QIcon icon(Icon({
+ slotIcon
+ }, Icon::Tint).icon());
+ return icon;
+ }
+ case SlotProtected: {
+ const static QIcon icon(Icon({
+ slotIcon, protectedBackgroundIcon, protectedIcon
+ }, Icon::Tint).icon());
+ return icon;
+ }
+ case SlotPrivate: {
+ const static QIcon icon(Icon({
+ slotIcon, privateBackgroundIcon, privateIcon
+ }, Icon::Tint).icon());
+ return icon;
+ }
+ case Keyword: {
+ const static QIcon icon(Icon({
+ {QLatin1String(":/codemodel/images/keyword.png"), Theme::IconsCodeModelKeywordColor}
+ }, Icon::Tint).icon());
+ return icon;
+ }
+ case Macro: {
+ const static QIcon icon(Icon({
+ {QLatin1String(":/codemodel/images/macro.png"), Theme::IconsCodeModelMacroColor}
+ }, Icon::Tint).icon());
+ return icon;
+ }
+ case Property: {
+ const static QIcon icon(Icon({
+ variableIcon, propertyBackgroundIcon, propertyIcon
+ }, Icon::Tint).icon());
+ return icon;
+ }
+ default:
+ break;
+ }
+ return QIcon();
+}
+
} // namespace Utils
diff --git a/src/libs/utils/utilsicons.h b/src/libs/utils/utilsicons.h
index acdc27ed9b..b5cf0801ef 100644
--- a/src/libs/utils/utilsicons.h
+++ b/src/libs/utils/utilsicons.h
@@ -145,4 +145,38 @@ QTCREATOR_UTILS_EXPORT extern const Icon CODEMODEL_DISABLED_WARNING;
QTCREATOR_UTILS_EXPORT extern const Icon CODEMODEL_FIXIT;
} // namespace Icons
+
+namespace CodeModelIcon {
+
+enum Type {
+ Class = 0,
+ Struct,
+ Enum,
+ Enumerator,
+ FuncPublic,
+ FuncProtected,
+ FuncPrivate,
+ FuncPublicStatic,
+ FuncProtectedStatic,
+ FuncPrivateStatic,
+ Namespace,
+ VarPublic,
+ VarProtected,
+ VarPrivate,
+ VarPublicStatic,
+ VarProtectedStatic,
+ VarPrivateStatic,
+ Signal,
+ SlotPublic,
+ SlotProtected,
+ SlotPrivate,
+ Keyword,
+ Macro,
+ Property,
+ Unknown
+};
+
+QTCREATOR_UTILS_EXPORT QIcon iconForType(Type type);
+
+} // namespace CodeModel
} // namespace Utils
diff --git a/src/libs/utils/winutils.cpp b/src/libs/utils/winutils.cpp
index f9d04a5d77..5190e11fca 100644
--- a/src/libs/utils/winutils.cpp
+++ b/src/libs/utils/winutils.cpp
@@ -80,9 +80,9 @@ QTCREATOR_UTILS_EXPORT QString winGetDLLVersion(WinDLLVersionType t,
{
#ifdef Q_OS_WIN
// Resolve required symbols from the version.dll
- typedef DWORD (APIENTRY *GetFileVersionInfoSizeProtoType)(LPCTSTR, LPDWORD);
- typedef BOOL (APIENTRY *GetFileVersionInfoWProtoType)(LPCWSTR, DWORD, DWORD, LPVOID);
- typedef BOOL (APIENTRY *VerQueryValueWProtoType)(const LPVOID, LPWSTR lpSubBlock, LPVOID, PUINT);
+ using GetFileVersionInfoSizeProtoType = DWORD (APIENTRY*)(LPCTSTR, LPDWORD);
+ using GetFileVersionInfoWProtoType = BOOL (APIENTRY*)(LPCWSTR, DWORD, DWORD, LPVOID);
+ using VerQueryValueWProtoType = BOOL (APIENTRY*)(const LPVOID, LPWSTR lpSubBlock, LPVOID, PUINT);
const char *versionDLLC = "version.dll";
QLibrary versionLib(QLatin1String(versionDLLC), 0);
@@ -91,9 +91,9 @@ QTCREATOR_UTILS_EXPORT QString winGetDLLVersion(WinDLLVersionType t,
return QString();
}
// MinGW requires old-style casts
- GetFileVersionInfoSizeProtoType getFileVersionInfoSizeW = (GetFileVersionInfoSizeProtoType)(versionLib.resolve("GetFileVersionInfoSizeW"));
- GetFileVersionInfoWProtoType getFileVersionInfoW = (GetFileVersionInfoWProtoType)(versionLib.resolve("GetFileVersionInfoW"));
- VerQueryValueWProtoType verQueryValueW = (VerQueryValueWProtoType)(versionLib.resolve("VerQueryValueW"));
+ auto getFileVersionInfoSizeW = (GetFileVersionInfoSizeProtoType)(versionLib.resolve("GetFileVersionInfoSizeW"));
+ auto getFileVersionInfoW = (GetFileVersionInfoWProtoType)(versionLib.resolve("GetFileVersionInfoW"));
+ auto verQueryValueW = (VerQueryValueWProtoType)(versionLib.resolve("VerQueryValueW"));
if (!getFileVersionInfoSizeW || !getFileVersionInfoW || !verQueryValueW) {
*errorMessage = msgCannotResolve(versionDLLC);
return QString();
@@ -101,7 +101,7 @@ QTCREATOR_UTILS_EXPORT QString winGetDLLVersion(WinDLLVersionType t,
// Now go ahead, read version info resource
DWORD dummy = 0;
- const LPCTSTR fileName = reinterpret_cast<LPCTSTR>(name.utf16()); // MinGWsy
+ const auto fileName = reinterpret_cast<LPCTSTR>(name.utf16()); // MinGWsy
const DWORD infoSize = (*getFileVersionInfoSizeW)(fileName, &dummy);
if (infoSize == 0) {
*errorMessage = QString::fromLatin1("Unable to determine the size of the version information of %1: %2").arg(name, winErrorMessage(GetLastError()));
diff --git a/src/libs/utils/wizard.cpp b/src/libs/utils/wizard.cpp
index d00d0345d6..a1c0e2fb68 100644
--- a/src/libs/utils/wizard.cpp
+++ b/src/libs/utils/wizard.cpp
@@ -57,7 +57,7 @@ class ProgressItemWidget : public QWidget
{
Q_OBJECT
public:
- ProgressItemWidget(const QPixmap &indicatorPixmap, const QString &title, QWidget *parent = 0)
+ ProgressItemWidget(const QPixmap &indicatorPixmap, const QString &title, QWidget *parent = nullptr)
: QWidget(parent),
m_indicatorVisible(false),
m_indicatorPixmap(indicatorPixmap)
@@ -65,7 +65,7 @@ public:
m_indicatorLabel = new QLabel(this);
m_indicatorLabel->setFixedSize(m_indicatorPixmap.size());
m_titleLabel = new QLabel(title, this);
- QHBoxLayout *l = new QHBoxLayout(this);
+ auto l = new QHBoxLayout(this);
l->setMargin(0);
l->addWidget(m_indicatorLabel);
l->addWidget(m_titleLabel);
@@ -97,7 +97,7 @@ class LinearProgressWidget : public QWidget
{
Q_OBJECT
public:
- LinearProgressWidget(WizardProgress *progress, QWidget *parent = 0);
+ LinearProgressWidget(WizardProgress *progress, QWidget *parent = nullptr);
private:
void slotItemAdded(WizardProgressItem *item);
@@ -126,14 +126,14 @@ private:
LinearProgressWidget::LinearProgressWidget(WizardProgress *progress, QWidget *parent)
:
QWidget(parent),
- m_dotsItemWidget(0),
+ m_dotsItemWidget(nullptr),
m_disableUpdatesCount(0)
{
m_indicatorPixmap = QIcon::fromTheme(QLatin1String("go-next"), QIcon(QLatin1String(":/utils/images/arrow.png"))).pixmap(16);
m_wizardProgress = progress;
m_mainLayout = new QVBoxLayout(this);
m_itemWidgetLayout = new QVBoxLayout();
- QSpacerItem *spacer = new QSpacerItem(0, 0, QSizePolicy::Ignored, QSizePolicy::Expanding);
+ auto spacer = new QSpacerItem(0, 0, QSizePolicy::Ignored, QSizePolicy::Expanding);
m_mainLayout->addLayout(m_itemWidgetLayout);
m_mainLayout->addSpacerItem(spacer);
@@ -477,7 +477,7 @@ void Wizard::_q_pageAdded(int pageId)
Q_D(Wizard);
QWizardPage *p = page(pageId);
- WizardPage *wp = qobject_cast<WizardPage *>(p);
+ auto wp = qobject_cast<WizardPage *>(p);
if (wp)
wp->pageWasAdded();
@@ -501,8 +501,8 @@ void Wizard::_q_pageAdded(int pageId)
if (index < pages.count() - 1)
nextId = pages.at(index + 1);
- WizardProgressItem *prevItem = 0;
- WizardProgressItem *nextItem = 0;
+ WizardProgressItem *prevItem = nullptr;
+ WizardProgressItem *nextItem = nullptr;
if (prevId >= 0)
prevItem = d->m_wizardProgress->item(prevId);
@@ -538,8 +538,8 @@ void Wizard::_q_pageRemoved(int pageId)
if (index < pages.count() - 1)
nextId = pages.at(index + 1);
- WizardProgressItem *prevItem = 0;
- WizardProgressItem *nextItem = 0;
+ WizardProgressItem *prevItem = nullptr;
+ WizardProgressItem *nextItem = nullptr;
if (prevId >= 0)
prevItem = d->m_wizardProgress->item(prevId);
@@ -565,12 +565,7 @@ class WizardProgressPrivate
Q_DECLARE_PUBLIC(WizardProgress)
public:
- WizardProgressPrivate()
- :
- m_currentItem(0),
- m_startItem(0)
- {
- }
+ WizardProgressPrivate() = default;
bool isNextItem(WizardProgressItem *item, WizardProgressItem *nextItem) const;
// if multiple paths are possible the empty list is returned
@@ -585,8 +580,8 @@ public:
QList<WizardProgressItem *> m_visitedItems;
QList<WizardProgressItem *> m_reachableItems;
- WizardProgressItem *m_currentItem;
- WizardProgressItem *m_startItem;
+ WizardProgressItem *m_currentItem = nullptr;
+ WizardProgressItem *m_startItem = nullptr;
};
class WizardProgressItemPrivate
@@ -673,7 +668,7 @@ QList<WizardProgressItem *> WizardProgressPrivate::singlePathBetween(WizardProgr
void WizardProgressPrivate::updateReachableItems()
{
m_reachableItems = m_visitedItems;
- WizardProgressItem *item = 0;
+ WizardProgressItem *item = nullptr;
if (m_visitedItems.count() > 0)
item = m_visitedItems.last();
if (!item) {
@@ -712,7 +707,7 @@ WizardProgressItem *WizardProgress::addItem(const QString &title)
{
Q_D(WizardProgress);
- WizardProgressItem *item = new WizardProgressItem(this, title);
+ auto item = new WizardProgressItem(this, title);
d->m_itemToItem.insert(item, item);
emit itemAdded(item);
return item;
@@ -835,7 +830,7 @@ void WizardProgress::setCurrentPage(int pageId)
Q_D(WizardProgress);
if (pageId < 0) { // reset history
- d->m_currentItem = 0;
+ d->m_currentItem = nullptr;
d->m_visitedItems.clear();
d->m_reachableItems.clear();
d->updateReachableItems();
@@ -903,7 +898,7 @@ WizardProgressItem::WizardProgressItem(WizardProgress *progress, const QString &
d_ptr->m_title = title;
d_ptr->m_titleWordWrap = false;
d_ptr->m_wizardProgress = progress;
- d_ptr->m_nextShownItem = 0;
+ d_ptr->m_nextShownItem = nullptr;
}
WizardProgressItem::~WizardProgressItem()
@@ -947,7 +942,7 @@ void WizardProgressItem::setNextItems(const QList<WizardProgressItem *> &items)
return;
if (!items.contains(d->m_nextShownItem))
- setNextShownItem(0);
+ setNextShownItem(nullptr);
// update prev items (remove this item from the old next items)
for (int i = 0; i < d->m_nextItems.count(); i++) {
diff --git a/src/libs/utils/wizardpage.cpp b/src/libs/utils/wizardpage.cpp
index 42cb46ba4d..8afd6d0d34 100644
--- a/src/libs/utils/wizardpage.cpp
+++ b/src/libs/utils/wizardpage.cpp
@@ -43,7 +43,7 @@ WizardPage::WizardPage(QWidget *parent) : QWizardPage(parent)
void WizardPage::pageWasAdded()
{
- Wizard *wiz = qobject_cast<Wizard *>(wizard());
+ auto wiz = qobject_cast<Wizard *>(wizard());
if (!wiz)
return;
@@ -62,7 +62,7 @@ void WizardPage::registerFieldWithName(const QString &name, QWidget *widget,
void WizardPage::registerFieldName(const QString &name)
{
- Wizard *wiz = qobject_cast<Wizard *>(wizard());
+ auto wiz = qobject_cast<Wizard *>(wizard());
if (wiz)
wiz->registerFieldName(name);
else
diff --git a/src/plugins/android/adbcommandswidget.cpp b/src/plugins/android/adbcommandswidget.cpp
index a4d1623e0f..287652203b 100644
--- a/src/plugins/android/adbcommandswidget.cpp
+++ b/src/plugins/android/adbcommandswidget.cpp
@@ -77,9 +77,7 @@ AdbCommandsWidget::AdbCommandsWidget(QWidget *parent) :
{
}
-AdbCommandsWidget::~AdbCommandsWidget()
-{
-}
+AdbCommandsWidget::~AdbCommandsWidget() = default;
QStringList AdbCommandsWidget::commandsList() const
{
diff --git a/src/plugins/android/adbcommandswidget.h b/src/plugins/android/adbcommandswidget.h
index 2334fc76de..6231d4e414 100644
--- a/src/plugins/android/adbcommandswidget.h
+++ b/src/plugins/android/adbcommandswidget.h
@@ -40,7 +40,7 @@ class AdbCommandsWidget : public QGroupBox
Q_OBJECT
public:
explicit AdbCommandsWidget(QWidget *parent);
- ~AdbCommandsWidget();
+ ~AdbCommandsWidget() override;
QStringList commandsList() const;
void setCommandList(const QStringList &commands);
diff --git a/src/plugins/android/android.pro b/src/plugins/android/android.pro
index e17c7e284b..d6ee2f56fc 100644
--- a/src/plugins/android/android.pro
+++ b/src/plugins/android/android.pro
@@ -53,7 +53,10 @@ HEADERS += \
androidsdkpackage.h \
androidsdkmodel.h \
androidsdkmanagerwidget.h \
- androidpackageinstallationstep.h
+ androidpackageinstallationstep.h \
+ androidextralibrarylistmodel.h \
+ createandroidmanifestwizard.h \
+ androidrunenvironmentaspect.h
SOURCES += \
androidconfigurations.cpp \
@@ -92,7 +95,6 @@ SOURCES += \
avddialog.cpp \
androidbuildapkstep.cpp \
androidbuildapkwidget.cpp \
- androidqtsupport.cpp \
androidtoolmanager.cpp \
androidsdkmanager.cpp \
androidavdmanager.cpp \
@@ -100,7 +102,10 @@ SOURCES += \
androidsdkpackage.cpp \
androidsdkmodel.cpp \
androidsdkmanagerwidget.cpp \
- androidpackageinstallationstep.cpp
+ androidpackageinstallationstep.cpp \
+ androidextralibrarylistmodel.cpp \
+ createandroidmanifestwizard.cpp \
+ androidrunenvironmentaspect.cpp
FORMS += \
androidsettingswidget.ui \
diff --git a/src/plugins/android/android.qbs b/src/plugins/android/android.qbs
index b573d3883b..cc5e62d97b 100644
--- a/src/plugins/android/android.qbs
+++ b/src/plugins/android/android.qbs
@@ -55,6 +55,8 @@ Project {
"androiddevicefactory.h",
"androiderrormessage.h",
"androiderrormessage.cpp",
+ "androidextralibrarylistmodel.cpp",
+ "androidextralibrarylistmodel.h",
"androidgdbserverkitinformation.cpp",
"androidgdbserverkitinformation.h",
"androidglobal.h",
@@ -76,7 +78,6 @@ Project {
"androidpotentialkit.h",
"androidqmltoolingsupport.cpp",
"androidqmltoolingsupport.h",
- "androidqtsupport.cpp",
"androidqtsupport.h",
"androidqtversion.cpp",
"androidqtversion.h",
@@ -84,6 +85,8 @@ Project {
"androidqtversionfactory.h",
"androidrunconfiguration.cpp",
"androidrunconfiguration.h",
+ "androidrunenvironmentaspect.h",
+ "androidrunenvironmentaspect.cpp",
"androidruncontrol.cpp",
"androidruncontrol.h",
"androidrunner.cpp",
@@ -114,6 +117,8 @@ Project {
"avddialog.h",
"certificatesmodel.cpp",
"certificatesmodel.h",
+ "createandroidmanifestwizard.h",
+ "createandroidmanifestwizard.cpp",
"javaeditor.cpp",
"javaeditor.h",
"javaindenter.cpp",
diff --git a/src/plugins/android/androidavdmanager.cpp b/src/plugins/android/androidavdmanager.cpp
index 44ed85b170..cbe5dba2eb 100644
--- a/src/plugins/android/androidavdmanager.cpp
+++ b/src/plugins/android/androidavdmanager.cpp
@@ -234,10 +234,7 @@ AndroidAvdManager::AndroidAvdManager(const AndroidConfig &config):
}
-AndroidAvdManager::~AndroidAvdManager()
-{
-
-}
+AndroidAvdManager::~AndroidAvdManager() = default;
void AndroidAvdManager::launchAvdManagerUiTool() const
{
@@ -296,7 +293,7 @@ bool AndroidAvdManager::startAvdAsync(const QString &avdName) const
.arg(m_config.emulatorToolPath().toString()));
return false;
}
- QProcess *avdProcess = new QProcess();
+ auto avdProcess = new QProcess();
avdProcess->setReadChannelMode(QProcess::MergedChannels);
QObject::connect(avdProcess,
static_cast<void (QProcess::*)(int)>(&QProcess::finished),
diff --git a/src/plugins/android/androidbuildapkstep.cpp b/src/plugins/android/androidbuildapkstep.cpp
index 3ebbcb2dbc..d095a96061 100644
--- a/src/plugins/android/androidbuildapkstep.cpp
+++ b/src/plugins/android/androidbuildapkstep.cpp
@@ -25,6 +25,7 @@
****************************************************************************/
#include "androidbuildapkstep.h"
+
#include "androidbuildapkwidget.h"
#include "androidconfigurations.h"
#include "androidconstants.h"
@@ -40,6 +41,7 @@
#include <projectexplorer/buildconfiguration.h>
#include <projectexplorer/project.h>
+#include <projectexplorer/projectexplorerconstants.h>
#include <projectexplorer/target.h>
#include <qtsupport/qtkitinformation.h>
@@ -48,10 +50,13 @@
#include <utils/synchronousprocess.h>
#include <utils/utilsicons.h>
+#include <qmakeprojectmanager/qmakeprojectmanagerconstants.h>
+
#include <QDialogButtonBox>
#include <QHBoxLayout>
#include <QLabel>
#include <QLineEdit>
+#include <QLoggingCategory>
#include <QMessageBox>
#include <QProcess>
#include <QPushButton>
@@ -59,8 +64,16 @@
#include <memory>
+using namespace ProjectExplorer;
+using namespace Android::Internal;
+
+namespace {
+Q_LOGGING_CATEGORY(buildapkstepLog, "qtc.android.build.androidbuildapkstep")
+}
+
namespace Android {
-using namespace Internal;
+
+const Core::Id ANDROID_BUILD_APK_ID("QmakeProjectManager.AndroidBuildApkStep");
const QVersionNumber gradleScriptRevokedSdkVersion(25, 3, 0);
const char KeystoreLocationKey[] = "KeystoreLocation";
@@ -68,6 +81,20 @@ const char BuildTargetSdkKey[] = "BuildTargetSdk";
const char VerboseOutputKey[] = "VerboseOutput";
const char UseMinistroKey[] = "UseMinistro";
+static void setupProcessParameters(ProcessParameters *pp,
+ BuildConfiguration *bc,
+ const QStringList &arguments,
+ const QString &command)
+{
+ pp->setMacroExpander(bc->macroExpander());
+ pp->setWorkingDirectory(bc->buildDirectory().toString());
+ Utils::Environment env = bc->environment();
+ pp->setEnvironment(env);
+ pp->setCommand(command);
+ pp->setArguments(Utils::QtcProcess::joinArgs(arguments));
+ pp->resolveAll();
+}
+
class PasswordInputDialog : public QDialog
{
Q_OBJECT
@@ -95,8 +122,8 @@ private:
this);
};
-AndroidBuildApkStep::AndroidBuildApkStep(ProjectExplorer::BuildStepList *parent, Core::Id id)
- : ProjectExplorer::AbstractProcessStep(parent, id),
+AndroidBuildApkStep::AndroidBuildApkStep(BuildStepList *parent)
+ : AbstractProcessStep(parent, ANDROID_BUILD_APK_ID),
m_buildTargetSdk(AndroidConfig::apiLevelNameFor(AndroidConfigurations::
sdkManager()->latestAndroidSdkPlatform()))
{
@@ -109,9 +136,12 @@ bool AndroidBuildApkStep::init(QList<const BuildStep *> &earlierSteps)
ProjectExplorer::BuildConfiguration *bc = buildConfiguration();
if (m_signPackage) {
+ qCDebug(buildapkstepLog) << "Signing enabled";
// check keystore and certificate passwords
- if (!verifyKeystorePassword() || !verifyCertificatePassword())
+ if (!verifyKeystorePassword() || !verifyCertificatePassword()) {
+ qCDebug(buildapkstepLog) << "Init failed. Keystore/Certificate password verification failed.";
return false;
+ }
if (bc->buildType() != ProjectExplorer::BuildConfiguration::Release)
emit addOutput(tr("Warning: Signing a debug or profile package."),
@@ -145,21 +175,91 @@ bool AndroidBuildApkStep::init(QList<const BuildStep *> &earlierSteps)
return false;
}
- JavaParser *parser = new JavaParser;
+ auto parser = new JavaParser;
parser->setProjectFileList(Utils::transform(target()->project()->files(ProjectExplorer::Project::AllFiles),
&Utils::FileName::toString));
- parser->setSourceDirectory(AndroidManager::androidQtSupport(target())->packageSourceDir(target()));
+ AndroidQtSupport *qtSupport = AndroidManager::androidQtSupport(target());
+ QFileInfo sourceDirInfo(qtSupport->targetData(Constants::AndroidPackageSourceDir, target()).toString());
+ parser->setSourceDirectory(Utils::FileName::fromString(sourceDirInfo.canonicalFilePath()));
parser->setBuildDirectory(Utils::FileName::fromString(bc->buildDirectory().appendPath(Constants::ANDROID_BUILDDIRECTORY).toString()));
setOutputParser(parser);
m_openPackageLocationForRun = m_openPackageLocation;
- m_apkPath = AndroidManager::androidQtSupport(target())->apkPath(target()).toString();
+ m_apkPath = AndroidManager::apkPath(target()).toString();
+ qCDebug(buildapkstepLog) << "APK path:" << m_apkPath;
- bool result = AbstractProcessStep::init(earlierSteps);
- if (!result)
+ if (!AbstractProcessStep::init(earlierSteps))
return false;
+ QString command = version->qmakeProperty("QT_HOST_BINS");
+ if (!command.endsWith('/'))
+ command += '/';
+ command += "androiddeployqt";
+ if (Utils::HostOsInfo::isWindowsHost())
+ command += ".exe";
+
+ QString outputDir = bc->buildDirectory().appendPath(Constants::ANDROID_BUILDDIRECTORY).toString();
+
+ QString inputFile = AndroidManager::androidQtSupport(target())
+ ->targetData(Constants::AndroidDeploySettingsFile, target()).toString();
+ if (inputFile.isEmpty()) {
+ m_skipBuilding = true;
+ return true;
+ }
+
+ QString buildTargetSdk = AndroidManager::buildTargetSDK(target());
+ if (buildTargetSdk.isEmpty()) {
+ emit addOutput(tr("Android build SDK not defined. Check Android settings."),
+ OutputFormat::Stderr);
+ return false;
+ }
+
+ QStringList arguments = {"--input", inputFile,
+ "--output", outputDir,
+ "--android-platform", AndroidManager::buildTargetSDK(target()),
+ "--jdk", AndroidConfigurations::currentConfig().openJDKLocation().toString()};
+
+ if (m_verbose)
+ arguments << "--verbose";
+
+ arguments << "--gradle";
+
+ if (m_useMinistro)
+ arguments << "--deployment" << "ministro";
+
+ QStringList argumentsPasswordConcealed = arguments;
+
+ if (m_signPackage) {
+ arguments << "--sign" << m_keystorePath.toString() << m_certificateAlias
+ << "--storepass" << m_keystorePasswd;
+ argumentsPasswordConcealed << "--sign" << "******"
+ << "--storepass" << "******";
+ if (!m_certificatePasswd.isEmpty()) {
+ arguments << "--keypass" << m_certificatePasswd;
+ argumentsPasswordConcealed << "--keypass" << "******";
+ }
+
+ }
+
+ // Must be the last option, otherwise androiddeployqt might use the other
+ // params (e.g. --sign) to choose not to add gdbserver
+ if (version->qtVersion() >= QtSupport::QtVersionNumber(5, 6, 0)) {
+ if (m_addDebugger || bc->buildType() == ProjectExplorer::BuildConfiguration::Debug)
+ arguments << "--gdbserver";
+ else
+ arguments << "--no-gdbserver";
+ }
+
+ ProjectExplorer::ProcessParameters *pp = processParameters();
+ setupProcessParameters(pp, bc, arguments, command);
+
+ // Generate arguments with keystore password concealed
+ ProjectExplorer::ProcessParameters pp2;
+ setupProcessParameters(&pp2, bc, argumentsPasswordConcealed, command);
+ m_command = pp2.effectiveCommand();
+ m_argumentsPasswordConcealed = pp2.prettyArguments();
+
return true;
}
@@ -224,6 +324,24 @@ bool AndroidBuildApkStep::verifyCertificatePassword()
return success;
}
+void AndroidBuildApkStep::run(QFutureInterface<bool> &fi)
+{
+ if (m_skipBuilding) {
+ emit addOutput(tr("No application .pro file found, not building an APK."), BuildStep::OutputFormat::ErrorMessage);
+ reportRunResult(fi, true);
+ return;
+ }
+ AbstractProcessStep::run(fi);
+}
+
+void AndroidBuildApkStep::processStarted()
+{
+ emit addOutput(tr("Starting: \"%1\" %2")
+ .arg(QDir::toNativeSeparators(m_command),
+ m_argumentsPasswordConcealed),
+ BuildStep::OutputFormat::NormalMessage);
+}
+
bool AndroidBuildApkStep::fromMap(const QVariantMap &map)
{
m_keystorePath = Utils::FileName::fromString(map.value(KeystoreLocationKey).toString());
@@ -351,7 +469,7 @@ QAbstractItemModel *AndroidBuildApkStep::keystoreCertificates()
const Utils::SynchronousProcessResponse response
= keytoolProc.run(AndroidConfigurations::currentConfig().keytoolPath().toString(), params);
if (response.result > Utils::SynchronousProcessResponse::FinishedError)
- QMessageBox::critical(0, tr("Error"), tr("Failed to run keytool."));
+ QMessageBox::critical(nullptr, tr("Error"), tr("Failed to run keytool."));
else
model = new CertificatesModel(response.stdOut(), this);
@@ -426,6 +544,22 @@ QString PasswordInputDialog::getPassword(Context context, std::function<bool (co
return isAccepted ? dlg->inputEdit->text() : "";
}
+
+namespace Internal {
+
+// AndroidBuildApkStepFactory
+
+AndroidBuildApkStepFactory::AndroidBuildApkStepFactory()
+{
+ registerStep<AndroidBuildApkStep>(ANDROID_BUILD_APK_ID);
+ setSupportedProjectType(QmakeProjectManager::Constants::QMAKEPROJECT_ID);
+ setSupportedDeviceType(Constants::ANDROID_DEVICE_TYPE);
+ setSupportedStepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
+ setDisplayName(AndroidBuildApkStep::tr("Build Android APK"));
+ setRepeatable(false);
+}
+
+} // namespace Internal
} // namespace Android
#include "androidbuildapkstep.moc"
diff --git a/src/plugins/android/androidbuildapkstep.h b/src/plugins/android/androidbuildapkstep.h
index b7d5e5d179..665c28db4d 100644
--- a/src/plugins/android/androidbuildapkstep.h
+++ b/src/plugins/android/androidbuildapkstep.h
@@ -27,6 +27,7 @@
#pragma once
#include "android_global.h"
+
#include <projectexplorer/abstractprocessstep.h>
QT_BEGIN_NAMESPACE
@@ -39,10 +40,9 @@ class ANDROID_EXPORT AndroidBuildApkStep : public ProjectExplorer::AbstractProce
{
Q_OBJECT
-protected:
- AndroidBuildApkStep(ProjectExplorer::BuildStepList *bc, Core::Id id);
-
public:
+ AndroidBuildApkStep(ProjectExplorer::BuildStepList *bc);
+
bool fromMap(const QVariantMap &map) override;
QVariantMap toMap() const override;
@@ -72,17 +72,19 @@ public:
QString buildTargetSdk() const;
void setBuildTargetSdk(const QString &sdk);
-protected:
+private:
Q_INVOKABLE void showInGraphicalShell();
bool init(QList<const BuildStep *> &earlierSteps) override;
ProjectExplorer::BuildStepConfigWidget *createConfigWidget() override;
bool immutable() const override { return true; }
+ void processStarted() override;
void processFinished(int exitCode, QProcess::ExitStatus status) override;
bool verifyKeystorePassword();
bool verifyCertificatePassword();
-protected:
+ void run(QFutureInterface<bool> &fi) override;
+
bool m_signPackage = false;
bool m_verbose = false;
bool m_useMinistro = false;
@@ -96,6 +98,19 @@ protected:
QString m_certificateAlias;
QString m_certificatePasswd;
QString m_apkPath;
+
+ QString m_command;
+ QString m_argumentsPasswordConcealed;
+ bool m_skipBuilding = false;
+};
+
+namespace Internal {
+
+class AndroidBuildApkStepFactory : public ProjectExplorer::BuildStepFactory
+{
+public:
+ AndroidBuildApkStepFactory();
};
+} // namespace Internal
} // namespace Android
diff --git a/src/plugins/android/androidbuildapkwidget.cpp b/src/plugins/android/androidbuildapkwidget.cpp
index dceb496f5e..d436a38827 100644
--- a/src/plugins/android/androidbuildapkwidget.cpp
+++ b/src/plugins/android/androidbuildapkwidget.cpp
@@ -30,11 +30,13 @@
#include "androidcreatekeystorecertificate.h"
#include "androidmanager.h"
#include "androidsdkmanager.h"
+#include "createandroidmanifestwizard.h"
#include "ui_androidbuildapkwidget.h"
#include <projectexplorer/buildconfiguration.h>
#include <projectexplorer/project.h>
#include <projectexplorer/target.h>
+
#include <qtsupport/qtkitinformation.h>
#include <utils/fancylineedit.h>
@@ -42,15 +44,19 @@
#include <utils/utilsicons.h>
#include <QFileDialog>
+#include <QGroupBox>
+#include <QLabel>
+#include <QListView>
+#include <QPushButton>
+#include <QToolButton>
+#include <QVBoxLayout>
#include <algorithm>
-using namespace Android;
-using namespace Internal;
-
-const int minApiSupported = 9;
+namespace Android {
+namespace Internal {
-AndroidBuildApkWidget::AndroidBuildApkWidget(AndroidBuildApkStep *step)
+AndroidBuildApkInnerWidget::AndroidBuildApkInnerWidget(AndroidBuildApkStep *step)
: ProjectExplorer::BuildStepConfigWidget(),
m_ui(new Ui::AndroidBuildApkWidget),
m_step(step)
@@ -58,6 +64,7 @@ AndroidBuildApkWidget::AndroidBuildApkWidget(AndroidBuildApkStep *step)
m_ui->setupUi(this);
// Target sdk combobox
+ const int minApiSupported = AndroidManager::apiLevelRange().first;
QStringList targets = AndroidConfig::apiLevelNamesFor(AndroidConfigurations::sdkManager()->
filteredSdkPlatforms(minApiSupported));
targets.removeDuplicates();
@@ -88,60 +95,60 @@ AndroidBuildApkWidget::AndroidBuildApkWidget(AndroidBuildApkStep *step)
// target sdk
connect(m_ui->targetSDKComboBox,
static_cast<void (QComboBox::*)(const QString &)>(&QComboBox::activated),
- this, &AndroidBuildApkWidget::setTargetSdk);
+ this, &AndroidBuildApkInnerWidget::setTargetSdk);
// deployment options
connect(m_ui->ministroOption, &QAbstractButton::clicked,
m_step, &AndroidBuildApkStep::setUseMinistro);
connect(m_ui->openPackageLocationCheckBox, &QAbstractButton::toggled,
- this, &AndroidBuildApkWidget::openPackageLocationCheckBoxToggled);
+ this, &AndroidBuildApkInnerWidget::openPackageLocationCheckBoxToggled);
connect(m_ui->verboseOutputCheckBox, &QAbstractButton::toggled,
- this, &AndroidBuildApkWidget::verboseOutputCheckBoxToggled);
+ this, &AndroidBuildApkInnerWidget::verboseOutputCheckBoxToggled);
connect(m_ui->addDebuggerCheckBox, &QAbstractButton::toggled,
m_step, &AndroidBuildApkStep::setAddDebugger);
//signing
connect(m_ui->signPackageCheckBox, &QAbstractButton::toggled,
- this, &AndroidBuildApkWidget::signPackageCheckBoxToggled);
+ this, &AndroidBuildApkInnerWidget::signPackageCheckBoxToggled);
connect(m_ui->KeystoreCreatePushButton, &QAbstractButton::clicked,
- this, &AndroidBuildApkWidget::createKeyStore);
+ this, &AndroidBuildApkInnerWidget::createKeyStore);
connect(m_ui->KeystoreLocationPathChooser, &Utils::PathChooser::pathChanged,
- this, &AndroidBuildApkWidget::updateKeyStorePath);
+ this, &AndroidBuildApkInnerWidget::updateKeyStorePath);
connect(m_ui->certificatesAliasComboBox,
static_cast<void (QComboBox::*)(const QString &)>(&QComboBox::activated),
- this, &AndroidBuildApkWidget::certificatesAliasComboBoxActivated);
+ this, &AndroidBuildApkInnerWidget::certificatesAliasComboBoxActivated);
connect(m_ui->certificatesAliasComboBox,
static_cast<void (QComboBox::*)(const QString &)>(&QComboBox::currentIndexChanged),
- this, &AndroidBuildApkWidget::certificatesAliasComboBoxCurrentIndexChanged);
+ this, &AndroidBuildApkInnerWidget::certificatesAliasComboBoxCurrentIndexChanged);
connect(m_step->buildConfiguration(), &ProjectExplorer::BuildConfiguration::buildTypeChanged,
- this, &AndroidBuildApkWidget::updateSigningWarning);
+ this, &AndroidBuildApkInnerWidget::updateSigningWarning);
updateSigningWarning();
}
-AndroidBuildApkWidget::~AndroidBuildApkWidget()
+AndroidBuildApkInnerWidget::~AndroidBuildApkInnerWidget()
{
delete m_ui;
}
-QString AndroidBuildApkWidget::displayName() const
+QString AndroidBuildApkInnerWidget::displayName() const
{
return tr("<b>Build Android APK</b>");
}
-QString AndroidBuildApkWidget::summaryText() const
+QString AndroidBuildApkInnerWidget::summaryText() const
{
return displayName();
}
-void AndroidBuildApkWidget::setTargetSdk(const QString &sdk)
+void AndroidBuildApkInnerWidget::setTargetSdk(const QString &sdk)
{
m_step->setBuildTargetSdk(sdk);
}
-void AndroidBuildApkWidget::signPackageCheckBoxToggled(bool checked)
+void AndroidBuildApkInnerWidget::signPackageCheckBoxToggled(bool checked)
{
m_ui->certificatesAliasComboBox->setEnabled(checked);
m_step->setSignPackage(checked);
@@ -153,7 +160,7 @@ void AndroidBuildApkWidget::signPackageCheckBoxToggled(bool checked)
setCertificates();
}
-void AndroidBuildApkWidget::createKeyStore()
+void AndroidBuildApkInnerWidget::createKeyStore()
{
AndroidCreateKeystoreCertificate d;
if (d.exec() != QDialog::Accepted)
@@ -166,7 +173,7 @@ void AndroidBuildApkWidget::createKeyStore()
setCertificates();
}
-void AndroidBuildApkWidget::setCertificates()
+void AndroidBuildApkInnerWidget::setCertificates()
{
QAbstractItemModel *certificates = m_step->keystoreCertificates();
if (certificates) {
@@ -175,7 +182,7 @@ void AndroidBuildApkWidget::setCertificates()
}
}
-void AndroidBuildApkWidget::updateKeyStorePath(const QString &path)
+void AndroidBuildApkInnerWidget::updateKeyStorePath(const QString &path)
{
Utils::FileName file = Utils::FileName::fromString(path);
m_step->setKeystorePath(file);
@@ -184,29 +191,29 @@ void AndroidBuildApkWidget::updateKeyStorePath(const QString &path)
setCertificates();
}
-void AndroidBuildApkWidget::certificatesAliasComboBoxActivated(const QString &alias)
+void AndroidBuildApkInnerWidget::certificatesAliasComboBoxActivated(const QString &alias)
{
if (alias.length())
m_step->setCertificateAlias(alias);
}
-void AndroidBuildApkWidget::certificatesAliasComboBoxCurrentIndexChanged(const QString &alias)
+void AndroidBuildApkInnerWidget::certificatesAliasComboBoxCurrentIndexChanged(const QString &alias)
{
if (alias.length())
m_step->setCertificateAlias(alias);
}
-void AndroidBuildApkWidget::openPackageLocationCheckBoxToggled(bool checked)
+void AndroidBuildApkInnerWidget::openPackageLocationCheckBoxToggled(bool checked)
{
m_step->setOpenPackageLocation(checked);
}
-void AndroidBuildApkWidget::verboseOutputCheckBoxToggled(bool checked)
+void AndroidBuildApkInnerWidget::verboseOutputCheckBoxToggled(bool checked)
{
m_step->setVerboseOutput(checked);
}
-void AndroidBuildApkWidget::updateSigningWarning()
+void AndroidBuildApkInnerWidget::updateSigningWarning()
{
bool nonRelease = m_step->buildConfiguration()->buildType()
!= ProjectExplorer::BuildConfiguration::Release;
@@ -218,3 +225,112 @@ void AndroidBuildApkWidget::updateSigningWarning()
m_ui->signingDebugWarningLabel->setVisible(false);
}
}
+
+
+// AndroidBuildApkWidget
+
+AndroidBuildApkWidget::AndroidBuildApkWidget(AndroidBuildApkStep *step) :
+ m_step(step)
+{
+ m_extraLibraryListModel = new AndroidExtraLibraryListModel(m_step->target(), this);
+
+ auto base = new AndroidBuildApkInnerWidget(step);
+ base->layout()->setContentsMargins(0, 0, 0, 0);
+
+ auto createTemplatesGroupBox = new QGroupBox(tr("Android"));
+ createTemplatesGroupBox->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+
+ auto createAndroidTemplatesButton = new QPushButton(tr("Create Templates"));
+
+ auto horizontalLayout = new QHBoxLayout(createTemplatesGroupBox);
+ horizontalLayout->addWidget(createAndroidTemplatesButton);
+ horizontalLayout->addStretch(1);
+
+ auto additionalLibrariesGroupBox = new QGroupBox(tr("Additional Libraries"));
+ additionalLibrariesGroupBox->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding);
+
+ m_androidExtraLibsListView = new QListView;
+ m_androidExtraLibsListView->setSelectionMode(QAbstractItemView::ExtendedSelection);
+ m_androidExtraLibsListView->setToolTip(tr("List of extra libraries to include in Android package and load on startup."));
+ m_androidExtraLibsListView->setModel(m_extraLibraryListModel);
+
+ auto addAndroidExtraLibButton = new QToolButton;
+ addAndroidExtraLibButton->setText(tr("Add..."));
+ addAndroidExtraLibButton->setToolTip(tr("Select library to include in package."));
+ addAndroidExtraLibButton->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed);
+ addAndroidExtraLibButton->setToolButtonStyle(Qt::ToolButtonTextOnly);
+
+ m_removeAndroidExtraLibButton = new QToolButton;
+ m_removeAndroidExtraLibButton->setText(tr("Remove"));
+ m_removeAndroidExtraLibButton->setToolTip(tr("Remove currently selected library from list."));
+
+ auto androidExtraLibsButtonLayout = new QVBoxLayout();
+ androidExtraLibsButtonLayout->addWidget(addAndroidExtraLibButton);
+ androidExtraLibsButtonLayout->addWidget(m_removeAndroidExtraLibButton);
+ androidExtraLibsButtonLayout->addStretch(1);
+
+ auto androidExtraLibsLayout = new QHBoxLayout(additionalLibrariesGroupBox);
+ androidExtraLibsLayout->addWidget(m_androidExtraLibsListView);
+ androidExtraLibsLayout->addLayout(androidExtraLibsButtonLayout);
+
+ auto topLayout = new QVBoxLayout(this);
+ topLayout->addWidget(base);
+ topLayout->addWidget(createTemplatesGroupBox);
+ topLayout->addWidget(additionalLibrariesGroupBox);
+
+ connect(createAndroidTemplatesButton, &QAbstractButton::clicked, this, [this] {
+ CreateAndroidManifestWizard wizard(m_step->target());
+ wizard.exec();
+ });
+
+ connect(addAndroidExtraLibButton, &QAbstractButton::clicked,
+ this, &AndroidBuildApkWidget::addAndroidExtraLib);
+
+ connect(m_removeAndroidExtraLibButton, &QAbstractButton::clicked,
+ this, &AndroidBuildApkWidget::removeAndroidExtraLib);
+
+ connect(m_androidExtraLibsListView->selectionModel(), &QItemSelectionModel::selectionChanged,
+ this, &AndroidBuildApkWidget::checkEnableRemoveButton);
+
+ connect(m_extraLibraryListModel, &AndroidExtraLibraryListModel::enabledChanged,
+ additionalLibrariesGroupBox, &QWidget::setEnabled);
+
+ AndroidQtSupport *qtSupport = AndroidManager::androidQtSupport(m_step->target());
+ QTC_ASSERT(qtSupport, return);
+ additionalLibrariesGroupBox->setEnabled(qtSupport->extraLibraryEnabled(m_step->target()));
+}
+
+void AndroidBuildApkWidget::addAndroidExtraLib()
+{
+ QStringList fileNames = QFileDialog::getOpenFileNames(this,
+ tr("Select additional libraries"),
+ QDir::homePath(),
+ tr("Libraries (*.so)"));
+
+ if (!fileNames.isEmpty())
+ m_extraLibraryListModel->addEntries(fileNames);
+}
+
+void AndroidBuildApkWidget::removeAndroidExtraLib()
+{
+ QModelIndexList removeList = m_androidExtraLibsListView->selectionModel()->selectedIndexes();
+ m_extraLibraryListModel->removeEntries(removeList);
+}
+
+void AndroidBuildApkWidget::checkEnableRemoveButton()
+{
+ m_removeAndroidExtraLibButton->setEnabled(m_androidExtraLibsListView->selectionModel()->hasSelection());
+}
+
+QString AndroidBuildApkWidget::summaryText() const
+{
+ return tr("<b>Build Android APK</b>");
+}
+
+QString AndroidBuildApkWidget::displayName() const
+{
+ return summaryText();
+}
+
+} // Internal
+} // Android
diff --git a/src/plugins/android/androidbuildapkwidget.h b/src/plugins/android/androidbuildapkwidget.h
index dec3806986..47946298d2 100644
--- a/src/plugins/android/androidbuildapkwidget.h
+++ b/src/plugins/android/androidbuildapkwidget.h
@@ -28,26 +28,29 @@
#include "android_global.h"
+#include "androidbuildapkstep.h"
+#include "androidextralibrarylistmodel.h"
+#include "androidqtsupport.h"
+
#include <projectexplorer/buildstep.h>
-#include <QWidget>
+#include <QListView>
+#include <QToolButton>
QT_BEGIN_NAMESPACE
namespace Ui { class AndroidBuildApkWidget; }
QT_END_NAMESPACE
-namespace QmakeProjectManager { class QmakeBuildConfiguration; }
-
namespace Android {
-class AndroidBuildApkStep;
+namespace Internal {
-class ANDROID_EXPORT AndroidBuildApkWidget : public ProjectExplorer::BuildStepConfigWidget
+class AndroidBuildApkInnerWidget : public ProjectExplorer::BuildStepConfigWidget
{
Q_OBJECT
public:
- AndroidBuildApkWidget(AndroidBuildApkStep *step);
- ~AndroidBuildApkWidget() override;
+ AndroidBuildApkInnerWidget(AndroidBuildApkStep *step);
+ ~AndroidBuildApkInnerWidget() override;
private:
void setTargetSdk(const QString &sdk);
@@ -68,4 +71,32 @@ private:
AndroidBuildApkStep *m_step;
};
-}
+class AndroidBuildApkWidget : public ProjectExplorer::BuildStepConfigWidget
+{
+ Q_OBJECT
+
+public:
+ explicit AndroidBuildApkWidget(AndroidBuildApkStep *step);
+
+signals:
+ void requestAndroidTemplates();
+
+private:
+ void addAndroidExtraLib();
+ void removeAndroidExtraLib();
+ void checkEnableRemoveButton();
+
+ QString summaryText() const final;
+ QString displayName() const final;
+
+private:
+ QListView *m_androidExtraLibsListView = nullptr;
+ QToolButton *m_removeAndroidExtraLibButton = nullptr;
+
+ AndroidBuildApkStep *m_step = nullptr;
+ Android::AndroidExtraLibraryListModel *m_extraLibraryListModel = nullptr;
+ bool m_ignoreChange = false;
+};
+
+} // namespace Internal
+} // namespace Android
diff --git a/src/plugins/android/androidconfigurations.cpp b/src/plugins/android/androidconfigurations.cpp
index 555b4622ab..0ceb88240f 100644
--- a/src/plugins/android/androidconfigurations.cpp
+++ b/src/plugins/android/androidconfigurations.cpp
@@ -93,7 +93,6 @@ namespace {
const QLatin1String OpenJDKLocationKey("OpenJDKLocation");
const QLatin1String KeystoreLocationKey("KeystoreLocation");
const QLatin1String AutomaticKitCreationKey("AutomatiKitCreation");
- const QLatin1String DeviceQmlsceneCommandKey("DeviceQmlsceneCommand");
const QLatin1String MakeExtraSearchDirectory("MakeExtraSearchDirectory");
const QLatin1String PartitionSizeKey("PartitionSize");
const QLatin1String ToolchainHostKey("ToolchainHost");
@@ -126,8 +125,8 @@ namespace {
const QLatin1String sdkToolsVersionKey("Pkg.Revision");
const QLatin1String ndkRevisionKey("Pkg.Revision");
- const QLatin1String defaultQmlScene("org.qtproject.example.qmlscene/"
- "org.qtproject.qt5.android.bindings.QtActivity");
+ const QString defaultQtLiveApk = Core::ICore::resourcePath() +
+ ("/qtlive/android/armv7/qt_live_viewer.apk");
static QString sdkSettingsFileName()
{
@@ -257,7 +256,6 @@ void AndroidConfig::load(const QSettings &settings)
m_keystoreLocation = FileName::fromString(settings.value(KeystoreLocationKey).toString());
m_toolchainHost = settings.value(ToolchainHostKey).toString();
m_automaticKitCreation = settings.value(AutomaticKitCreationKey, true).toBool();
- m_deviceQmlsceneCommand = settings.value(DeviceQmlsceneCommandKey, defaultQmlScene).toString();
QString extraDirectory = settings.value(MakeExtraSearchDirectory).toString();
m_makeExtraSearchDirectories.clear();
if (!extraDirectory.isEmpty())
@@ -274,7 +272,6 @@ void AndroidConfig::load(const QSettings &settings)
m_keystoreLocation = FileName::fromString(reader.restoreValue(KeystoreLocationKey, m_keystoreLocation.toString()).toString());
m_toolchainHost = reader.restoreValue(ToolchainHostKey, m_toolchainHost).toString();
m_automaticKitCreation = reader.restoreValue(AutomaticKitCreationKey, m_automaticKitCreation).toBool();
- m_deviceQmlsceneCommand = reader.restoreValue(DeviceQmlsceneCommandKey, m_deviceQmlsceneCommand).toString();
QString extraDirectory = reader.restoreValue(MakeExtraSearchDirectory).toString();
m_makeExtraSearchDirectories.clear();
if (!extraDirectory.isEmpty())
@@ -298,7 +295,6 @@ void AndroidConfig::save(QSettings &settings) const
settings.setValue(KeystoreLocationKey, m_keystoreLocation.toString());
settings.setValue(PartitionSizeKey, m_partitionSize);
settings.setValue(AutomaticKitCreationKey, m_automaticKitCreation);
- settings.setValue(DeviceQmlsceneCommandKey, m_deviceQmlsceneCommand);
settings.setValue(ToolchainHostKey, m_toolchainHost);
settings.setValue(MakeExtraSearchDirectory,
m_makeExtraSearchDirectories.isEmpty() ? QString()
@@ -316,7 +312,7 @@ void AndroidConfig::updateNdkInformation() const
const QString &fileName = it.next();
m_availableNdkPlatforms.push_back(fileName.midRef(fileName.lastIndexOf(QLatin1Char('-')) + 1).toInt());
}
- Utils::sort(m_availableNdkPlatforms, std::greater<int>());
+ Utils::sort(m_availableNdkPlatforms, std::greater<>());
// detect toolchain host
QStringList hostPatterns;
@@ -713,13 +709,13 @@ bool AndroidConfig::useNativeUiTools() const
QString AndroidConfig::bestNdkPlatformMatch(int target) const
{
- target = std::max(9, target);
+ target = std::max(AndroidManager::apiLevelRange().first, target);
updateNdkInformation();
foreach (int apiLevel, m_availableNdkPlatforms) {
if (apiLevel <= target)
return QString::fromLatin1("android-%1").arg(apiLevel);
}
- return QLatin1String("android-9");
+ return QString("android-%1").arg(AndroidManager::apiLevelRange().first);
}
FileName AndroidConfig::sdkLocation() const
@@ -876,14 +872,12 @@ void AndroidConfig::setAutomaticKitCreation(bool b)
m_automaticKitCreation = b;
}
-QString AndroidConfig::deviceQmlsceneCommand() const
+FileName AndroidConfig::qtLiveApkPath() const
{
- return m_deviceQmlsceneCommand;
-}
-
-void AndroidConfig::setDeviceQmlsceneCommand(const QString &qmlsceneCommand)
-{
- m_deviceQmlsceneCommand = qmlsceneCommand;
+ QString apkPathStr(defaultQtLiveApk);
+ if (qEnvironmentVariableIsSet("QTC_QT_LIVE_APK_PATH"))
+ apkPathStr = QString::fromLocal8Bit(qgetenv("QTC_QT_LIVE_APK_PATH"));
+ return Utils::FileName::fromString(apkPathStr);
}
///////////////////////////////////
@@ -1043,9 +1037,7 @@ void AndroidConfigurations::updateAutomaticKitList()
&& tc->typeId() == Constants::ANDROID_TOOLCHAIN_ID
&& !static_cast<const AndroidToolChain *>(tc)->isSecondaryToolChain();
});
- const QList<AndroidToolChain *> toolchains = Utils::transform(tmp, [](ToolChain *tc) {
- return static_cast<AndroidToolChain *>(tc);
- });
+ const auto toolchains = Utils::static_container_cast<AndroidToolChain *>(tmp);
for (AndroidToolChain *tc : toolchains) {
if (tc->isSecondaryToolChain() || tc->language() != Core::Id(ProjectExplorer::Constants::CXX_LANGUAGE_ID))
continue;
@@ -1065,17 +1057,18 @@ void AndroidConfigurations::updateAutomaticKitList()
};
for (const QtSupport::BaseQtVersion *qt : qtVersionsForArch.value(tc->targetAbi())) {
- Kit *newKit = new Kit;
- initBasicKitData(newKit, qt);
- Kit *existingKit = Utils::findOrDefault(existingKits, [newKit](const Kit *k) {
- return matchKits(newKit, k);
+ auto newKit = std::make_unique<Kit>();
+ Kit *toSetup = newKit.get();
+ initBasicKitData(toSetup, qt);
+ Kit *existingKit = Utils::findOrDefault(existingKits, [toSetup](const Kit *k) {
+ return matchKits(toSetup, k);
});
if (existingKit) {
// Existing kit found.
// Update the existing kit with new data.
initBasicKitData(existingKit, qt);
- KitManager::deleteKit(newKit);
- newKit = existingKit;
+ newKit.reset();
+ toSetup = existingKit;
}
Debugger::DebuggerItem debugger;
@@ -1086,16 +1079,16 @@ void AndroidConfigurations::updateAutomaticKitList()
debugger.setAbi(tc->targetAbi());
debugger.reinitializeFromFile();
QVariant id = Debugger::DebuggerItemManager::registerDebugger(debugger);
- Debugger::DebuggerKitInformation::setDebugger(newKit, id);
-
- AndroidGdbServerKitInformation::setGdbSever(newKit, tc->suggestedGdbServer());
- newKit->makeSticky();
- newKit->setUnexpandedDisplayName(tr("Android for %1 (GCC %2, %3)")
- .arg(static_cast<const AndroidQtVersion *>(qt)->targetArch())
- .arg(tc->ndkToolChainVersion())
- .arg(qt->displayName()));
+ Debugger::DebuggerKitInformation::setDebugger(toSetup, id);
+
+ AndroidGdbServerKitInformation::setGdbSever(toSetup, tc->suggestedGdbServer());
+ toSetup->makeSticky();
+ toSetup->setUnexpandedDisplayName(tr("Android for %1 (GCC %2, %3)")
+ .arg(static_cast<const AndroidQtVersion *>(qt)->targetArch())
+ .arg(tc->ndkToolChainVersion())
+ .arg(qt->displayName()));
if (!existingKit)
- KitManager::registerKit(newKit);
+ KitManager::registerKit(std::move(newKit));
}
}
}
@@ -1181,10 +1174,7 @@ AndroidConfigurations::AndroidConfigurations()
m_instance = this;
}
-AndroidConfigurations::~AndroidConfigurations()
-{
-
-}
+AndroidConfigurations::~AndroidConfigurations() = default;
static FileName javaHomeForJavac(const FileName &location)
{
@@ -1293,6 +1283,15 @@ void AndroidConfigurations::updateAndroidDevice()
devMgr->removeDevice(Core::Id(Constants::ANDROID_DEVICE_ID));
}
-AndroidConfigurations *AndroidConfigurations::m_instance = 0;
+AndroidConfigurations *AndroidConfigurations::m_instance = nullptr;
+
+QDebug &operator<<(QDebug &stream, const AndroidDeviceInfo &device)
+{
+ stream << "Type:"<< (device.type == AndroidDeviceInfo::Emulator ? "Emulator" : "Device")
+ << ", ABI:" << device.cpuAbi << ", Serial:" << device.serialNumber
+ << ", Name:" << device.avdname << ", API:" << device.sdk
+ << ", Authorised:" << !device.unauthorized;
+ return stream;
+}
} // namespace Android
diff --git a/src/plugins/android/androidconfigurations.h b/src/plugins/android/androidconfigurations.h
index 0a7fa4c3b7..941fab7fbd 100644
--- a/src/plugins/android/androidconfigurations.h
+++ b/src/plugins/android/androidconfigurations.h
@@ -124,8 +124,7 @@ public:
bool automaticKitCreation() const;
void setAutomaticKitCreation(bool b);
- QString deviceQmlsceneCommand() const;
- void setDeviceQmlsceneCommand(const QString &qmlsceneCommand);
+ Utils::FileName qtLiveApkPath() const;
Utils::FileName adbToolPath() const;
Utils::FileName androidToolPath() const;
@@ -182,7 +181,6 @@ private:
QStringList m_makeExtraSearchDirectories;
unsigned m_partitionSize = 1024;
bool m_automaticKitCreation = true;
- QString m_deviceQmlsceneCommand;
//caches
mutable bool m_NdkInformationUpToDate = false;
@@ -231,6 +229,8 @@ private:
bool m_force32bit;
};
+QDebug &operator<<(QDebug &stream, const AndroidDeviceInfo &device);
+
} // namespace Android
Q_DECLARE_METATYPE(Android::AndroidDeviceInfo)
diff --git a/src/plugins/android/androidcreatekeystorecertificate.h b/src/plugins/android/androidcreatekeystorecertificate.h
index 86ee222a10..86c9f36fcf 100644
--- a/src/plugins/android/androidcreatekeystorecertificate.h
+++ b/src/plugins/android/androidcreatekeystorecertificate.h
@@ -47,8 +47,8 @@ class AndroidCreateKeystoreCertificate : public QDialog
};
public:
- explicit AndroidCreateKeystoreCertificate(QWidget *parent = 0);
- ~AndroidCreateKeystoreCertificate();
+ explicit AndroidCreateKeystoreCertificate(QWidget *parent = nullptr);
+ ~AndroidCreateKeystoreCertificate() override;
Utils::FileName keystoreFilePath();
QString keystorePassword();
QString certificateAlias();
diff --git a/src/plugins/android/androiddebugsupport.cpp b/src/plugins/android/androiddebugsupport.cpp
index 84ed1bf52d..0cb44f0a4b 100644
--- a/src/plugins/android/androiddebugsupport.cpp
+++ b/src/plugins/android/androiddebugsupport.cpp
@@ -44,8 +44,13 @@
#include <utils/hostosinfo.h>
#include <QDirIterator>
+#include <QLoggingCategory>
#include <QHostAddress>
+namespace {
+Q_LOGGING_CATEGORY(androidDebugSupportLog, "qtc.android.run.androiddebugsupport")
+}
+
using namespace Debugger;
using namespace ProjectExplorer;
@@ -94,13 +99,11 @@ static QString toNdkArch(const QString &arch)
return QLatin1String("arch-") + arch;
}
-AndroidDebugSupport::AndroidDebugSupport(RunControl *runControl, const QString &intentName,
- const QString &extraAppParams,
- const Utils::Environment &extraEnvVars)
+AndroidDebugSupport::AndroidDebugSupport(RunControl *runControl, const QString &intentName)
: Debugger::DebuggerRunTool(runControl)
{
setDisplayName("AndroidDebugger");
- m_runner = new AndroidRunner(runControl, intentName, extraAppParams, extraEnvVars);
+ m_runner = new AndroidRunner(runControl, intentName);
addStartDependency(m_runner);
}
@@ -111,23 +114,30 @@ void AndroidDebugSupport::start()
Kit *kit = target->kit();
setStartMode(AttachToRemoteServer);
- setRunControlName(AndroidManager::packageName(target));
+ const QString packageName = AndroidManager::packageName(target);
+ setRunControlName(packageName);
setUseContinueInsteadOfRun(true);
setAttachPid(m_runner->pid());
+ qCDebug(androidDebugSupportLog) << "Start. Package name: " << packageName
+ << "PID: " << m_runner->pid().pid();
if (!Utils::HostOsInfo::isWindowsHost() &&
AndroidConfigurations::currentConfig().ndkVersion() >= QVersionNumber(11, 0, 0)) {
+ qCDebug(androidDebugSupportLog) << "UseTargetAsync: " << true;
setUseTargetAsync(true);
}
QtSupport::BaseQtVersion *qtVersion = QtSupport::QtKitInformation::qtVersion(kit);
if (isCppDebugging()) {
+ qCDebug(androidDebugSupportLog) << "C++ debugging enabled";
AndroidQtSupport *qtSupport = AndroidManager::androidQtSupport(target);
QStringList solibSearchPath = qtSupport->soLibSearchPath(target);
+ QStringList extraLibs = qtSupport->targetData(Android::Constants::AndroidExtraLibs, target).toStringList();
solibSearchPath.append(qtSoPaths(qtVersion));
- solibSearchPath.append(uniquePaths(qtSupport->androidExtraLibs(target)));
+ solibSearchPath.append(uniquePaths(extraLibs));
setSolibSearchPath(solibSearchPath);
+ qCDebug(androidDebugSupportLog) << "SoLibSearchPath: "<<solibSearchPath;
setSymbolFile(target->activeBuildConfiguration()->buildDirectory().toString()
+ "/app_process");
setSkipExecutableValidation(true);
@@ -136,11 +146,16 @@ void AndroidDebugSupport::start()
gdbServer.setHost(QHostAddress(QHostAddress::LocalHost).toString());
gdbServer.setPort(m_runner->gdbServerPort().number());
setRemoteChannel(gdbServer);
- setSysRoot(AndroidConfigurations::currentConfig().ndkLocation().appendPath("platforms")
- .appendPath(QString("android-%1").arg(AndroidManager::minimumSDK(target)))
- .appendPath(toNdkArch(AndroidManager::targetArch(target))).toString());
+
+ QString sysRoot = AndroidConfigurations::currentConfig().ndkLocation().appendPath("platforms")
+ .appendPath(QString("android-%1").arg(AndroidManager::minimumSDK(target)))
+ .appendPath(toNdkArch(AndroidManager::targetArch(target))).toString();
+ setSysRoot(sysRoot);
+ qCDebug(androidDebugSupportLog) << "Sysroot: " << sysRoot;
}
if (isQmlDebugging()) {
+ qCDebug(androidDebugSupportLog) << "QML debugging enabled. QML server: "
+ << m_runner->qmlServer().toDisplayString();
setQmlServer(m_runner->qmlServer());
//TODO: Not sure if these are the right paths.
if (qtVersion)
@@ -152,6 +167,7 @@ void AndroidDebugSupport::start()
void AndroidDebugSupport::stop()
{
+ qCDebug(androidDebugSupportLog) << "Stop";
DebuggerRunTool::stop();
}
diff --git a/src/plugins/android/androiddebugsupport.h b/src/plugins/android/androiddebugsupport.h
index 81351836f7..43a5f1f724 100644
--- a/src/plugins/android/androiddebugsupport.h
+++ b/src/plugins/android/androiddebugsupport.h
@@ -37,9 +37,7 @@ class AndroidDebugSupport : public Debugger::DebuggerRunTool
public:
AndroidDebugSupport(ProjectExplorer::RunControl *runControl,
- const QString &intentName = QString(),
- const QString &extraAppParams = QString(),
- const Utils::Environment &extraEnvVars = Utils::Environment());
+ const QString &intentName = QString());
void start() override;
void stop() override;
diff --git a/src/plugins/android/androiddeployconfiguration.cpp b/src/plugins/android/androiddeployconfiguration.cpp
index 5987db8496..bb0169db0e 100644
--- a/src/plugins/android/androiddeployconfiguration.cpp
+++ b/src/plugins/android/androiddeployconfiguration.cpp
@@ -63,10 +63,13 @@ AndroidDeployConfigurationFactory::AndroidDeployConfigurationFactory()
QList<QString> AndroidDeployConfigurationFactory::availableBuildTargets(Target *parent) const
{
- ToolChain *tc = ToolChainKitInformation::toolChain(parent->kit(), ProjectExplorer::Constants::CXX_LANGUAGE_ID);
-
- if (!tc || tc->targetAbi().osFlavor() != Abi::AndroidLinuxFlavor)
- return {};
+ if (!parent->project()->id().name().startsWith("QmlProjectManager.QmlProject")) {
+ // Avoid tool chain check for QML Project
+ Core::Id cxxLangId(ProjectExplorer::Constants::CXX_LANGUAGE_ID);
+ ToolChain *tc = ToolChainKitInformation::toolChain(parent->kit(), cxxLangId);
+ if (!tc || tc->targetAbi().osFlavor() != Abi::AndroidLinuxFlavor)
+ return {};
+ }
QtSupport::BaseQtVersion *qt = QtSupport::QtKitInformation::qtVersion(parent->kit());
if (!qt || qt->type() != Constants::ANDROIDQT)
diff --git a/src/plugins/android/androiddeployqtstep.cpp b/src/plugins/android/androiddeployqtstep.cpp
index 1a110dbb2b..767ea101b2 100644
--- a/src/plugins/android/androiddeployqtstep.cpp
+++ b/src/plugins/android/androiddeployqtstep.cpp
@@ -43,6 +43,7 @@
#include <projectexplorer/buildsteplist.h>
#include <projectexplorer/projectexplorerconstants.h>
#include <projectexplorer/project.h>
+#include <projectexplorer/runconfiguration.h>
#include <projectexplorer/target.h>
#include <projectexplorer/toolchain.h>
@@ -55,18 +56,24 @@
#include <QInputDialog>
#include <QMessageBox>
+#include <QLoggingCategory>
using namespace ProjectExplorer;
using namespace Android;
using namespace Android::Internal;
+namespace {
+Q_LOGGING_CATEGORY(deployStepLog, "qtc.android.build.androiddeployqtstep")
+}
+
const QLatin1String UninstallPreviousPackageKey("UninstallPreviousPackage");
const QLatin1String InstallFailedInconsistentCertificatesString("INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES");
const QLatin1String InstallFailedUpdateIncompatible("INSTALL_FAILED_UPDATE_INCOMPATIBLE");
const QLatin1String InstallFailedPermissionModelDowngrade("INSTALL_FAILED_PERMISSION_MODEL_DOWNGRADE");
const QLatin1String InstallFailedVersionDowngrade("INSTALL_FAILED_VERSION_DOWNGRADE");
const Core::Id AndroidDeployQtStep::Id("Qt4ProjectManager.AndroidDeployQtStep");
+static const char *qmlProjectRunConfigIdName = "QmlProjectManager.QmlRunConfiguration";
// AndroidDeployQtStepFactory
@@ -77,7 +84,7 @@ AndroidDeployQtStepFactory::AndroidDeployQtStepFactory()
setSupportedStepList(ProjectExplorer::Constants::BUILDSTEPS_DEPLOY);
setSupportedDeviceType(Constants::ANDROID_DEVICE_TYPE);
setRepeatable(false);
- setDisplayName(tr("Deploy to Android device or emulator"));
+ setDisplayName(AndroidDeployQtStep::tr("Deploy to Android device or emulator"));
}
// AndroidDeployQtStep
@@ -110,24 +117,32 @@ bool AndroidDeployQtStep::init(QList<const BuildStep *> &earlierSteps)
Q_UNUSED(earlierSteps);
m_androiddeployqtArgs.clear();
- if (AndroidManager::checkForQt51Files(project()->projectDirectory()))
- emit addOutput(tr("Found old folder \"android\" in source directory. Qt 5.2 does not use that folder by default."), OutputFormat::Stderr);
-
m_targetArch = AndroidManager::targetArch(target());
if (m_targetArch.isEmpty()) {
emit addOutput(tr("No Android arch set by the .pro file."), OutputFormat::Stderr);
return false;
}
- AndroidBuildApkStep *androidBuildApkStep
- = AndroidGlobal::buildStep<AndroidBuildApkStep>(target()->activeBuildConfiguration());
- if (!androidBuildApkStep)
+ emit addOutput(tr("initializing deployment to Android device/simulator"), OutputFormat::Stdout);
+
+ RunConfiguration *rc = target()->activeRunConfiguration();
+ QTC_ASSERT(rc, return false);
+ const bool deployQtLive = rc->id().name().startsWith(qmlProjectRunConfigIdName);
+ ProjectExplorer::BuildConfiguration *bc = buildConfiguration();
+ QTC_ASSERT(deployQtLive || bc, return false);
+
+ auto androidBuildApkStep = AndroidGlobal::buildStep<AndroidBuildApkStep>(bc);
+ if (!androidBuildApkStep && !deployQtLive) {
emit addOutput(tr("Cannot find the android build step."), OutputFormat::Stderr);
+ return false;
+ }
- int deviceAPILevel = AndroidManager::minimumSDK(target());
+ int minTargetApi = AndroidManager::minimumSDK(target());
+ qCDebug(deployStepLog) << "Target architecture:" << m_targetArch
+ << "Min target API" << minTargetApi;
AndroidDeviceInfo info = earlierDeviceInfo(earlierSteps, Id);
if (!info.isValid()) {
- info = AndroidConfigurations::showDeviceDialog(project(), deviceAPILevel, m_targetArch);
+ info = AndroidConfigurations::showDeviceDialog(project(), minTargetApi, m_targetArch);
m_deviceInfo = info; // Keep around for later steps
}
@@ -136,36 +151,15 @@ bool AndroidDeployQtStep::init(QList<const BuildStep *> &earlierSteps)
m_avdName = info.avdname;
m_serialNumber = info.serialNumber;
+ qCDebug(deployStepLog) << "Selected Device:" << info;
- ProjectExplorer::BuildConfiguration *bc = target()->activeBuildConfiguration();
- m_filesToPull.clear();
- QString buildDir = bc ? bc->buildDirectory().toString() : QString();
- if (bc && !buildDir.endsWith("/")) {
- buildDir += "/";
- }
- QString linkerName("linker");
- QString libDirName("lib");
- if (info.cpuAbi.contains(QLatin1String("arm64-v8a")) ||
- info.cpuAbi.contains(QLatin1String("x86_64"))) {
- ProjectExplorer::ToolChain *tc = ProjectExplorer::ToolChainKitInformation::toolChain(target()->kit(), ProjectExplorer::Constants::CXX_LANGUAGE_ID);
- if (tc && tc->targetAbi().wordWidth() == 64) {
- m_filesToPull["/system/bin/app_process64"] = buildDir + "app_process";
- libDirName = "lib64";
- linkerName = "linker64";
- } else {
- m_filesToPull["/system/bin/app_process32"] = buildDir + "app_process";
- }
- } else {
- m_filesToPull["/system/bin/app_process32"] = buildDir + "app_process";
- m_filesToPull["/system/bin/app_process"] = buildDir + "app_process";
- }
-
- m_filesToPull["/system/bin/" + linkerName] = buildDir + linkerName;
- m_filesToPull["/system/" + libDirName + "/libc.so"] = buildDir + "libc.so";
+ if (!deployQtLive)
+ gatherFilesToPull();
AndroidManager::setDeviceSerialNumber(target(), m_serialNumber);
AndroidManager::setDeviceApiLevel(target(), info.sdk);
+ emit addOutput(tr("Deploying to %1").arg(m_serialNumber), OutputFormat::Stdout);
QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(target()->kit());
if (!version)
@@ -176,31 +170,35 @@ bool AndroidDeployQtStep::init(QList<const BuildStep *> &earlierSteps)
m_manifestName = AndroidManager::manifestPath(target());
AndroidQtSupport *qtSupport = AndroidManager::androidQtSupport(target());
- m_useAndroiddeployqt = qtSupport && version->qtVersion() >= QtSupport::QtVersionNumber(5, 4, 0);
+ m_useAndroiddeployqt = !deployQtLive && qtSupport &&
+ version->qtVersion() >= QtSupport::QtVersionNumber(5, 4, 0);
if (m_useAndroiddeployqt) {
- Utils::FileName tmp = qtSupport->androiddeployqtPath(target());
- if (tmp.isEmpty()) {
+ m_command = version->qmakeProperty("QT_HOST_BINS");
+ if (m_command.isEmpty()) {
emit addOutput(tr("Cannot find the androiddeployqt tool."), OutputFormat::Stderr);
return false;
}
+ qCDebug(deployStepLog) << "Using androiddeployqt";
+ if (!m_command.endsWith(QLatin1Char('/')))
+ m_command += QLatin1Char('/');
+ m_command += Utils::HostOsInfo::withExecutableSuffix(QLatin1String("androiddeployqt"));
- m_command = tmp.toString();
- m_workingDirectory = bc ? bc->buildDirectory().appendPath(QLatin1String(Constants::ANDROID_BUILDDIRECTORY)).toString()
- : QString();
+ m_workingDirectory = bc->buildDirectory().appendPath(QLatin1String(Constants::ANDROID_BUILDDIRECTORY)).toString();
Utils::QtcProcess::addArg(&m_androiddeployqtArgs, QLatin1String("--verbose"));
Utils::QtcProcess::addArg(&m_androiddeployqtArgs, QLatin1String("--output"));
Utils::QtcProcess::addArg(&m_androiddeployqtArgs, m_workingDirectory);
Utils::QtcProcess::addArg(&m_androiddeployqtArgs, QLatin1String("--no-build"));
Utils::QtcProcess::addArg(&m_androiddeployqtArgs, QLatin1String("--input"));
- tmp = AndroidManager::androidQtSupport(target())->androiddeployJsonPath(target());
- if (tmp.isEmpty()) {
+ const QString jsonFile = qtSupport->targetData(Constants::AndroidDeploySettingsFile, target()).toString();
+ if (jsonFile.isEmpty()) {
emit addOutput(tr("Cannot find the androiddeploy Json file."), OutputFormat::Stderr);
return false;
}
- Utils::QtcProcess::addArg(&m_androiddeployqtArgs, tmp.toString());
+ Utils::QtcProcess::addArg(&m_androiddeployqtArgs, jsonFile);
if (androidBuildApkStep && androidBuildApkStep->useMinistro()) {
+ qCDebug(deployStepLog) << "Using ministro";
Utils::QtcProcess::addArg(&m_androiddeployqtArgs, QLatin1String("--deployment"));
Utils::QtcProcess::addArg(&m_androiddeployqtArgs, QLatin1String("ministro"));
}
@@ -219,7 +217,8 @@ bool AndroidDeployQtStep::init(QList<const BuildStep *> &earlierSteps)
} else {
m_uninstallPreviousPackageRun = true;
m_command = AndroidConfigurations::currentConfig().adbToolPath().toString();
- m_apkPath = qtSupport ? qtSupport->apkPath(target()).toString() : QString();
+ const AndroidConfig &config = AndroidConfigurations::currentConfig();
+ m_apkPath = deployQtLive ? config.qtLiveApkPath() : AndroidManager::apkPath(target());
m_workingDirectory = bc ? bc->buildDirectory().toString() : QString();
}
m_environment = bc ? bc->environment() : Utils::Environment();
@@ -248,13 +247,24 @@ AndroidDeployQtStep::DeployErrorCode AndroidDeployQtStep::runDeploy(QFutureInter
Utils::QtcProcess::addArg(&args, m_serialNumber);
}
} else {
+ RunConfiguration *rc = target()->activeRunConfiguration();
+ QTC_ASSERT(rc, return DeployErrorCode::Failure);
+ const bool deployQtLive = rc->id().name().startsWith(qmlProjectRunConfigIdName);
+ QString packageName;
+ if (deployQtLive) {
+ AndroidManager::apkInfo(m_apkPath, &packageName);
+ if (AndroidManager::packageInstalled(m_serialNumber, packageName))
+ return DeployErrorCode::NoError;
+ }
+
if (m_uninstallPreviousPackageRun) {
- const QString packageName = AndroidManager::packageName(m_manifestName);
+ if (!deployQtLive)
+ packageName = AndroidManager::packageName(m_manifestName);
if (packageName.isEmpty()) {
emit addOutput(tr("Cannot find the package name."), OutputFormat::Stderr);
return Failure;
}
-
+ qCDebug(deployStepLog) << "Uninstalling previous package";
emit addOutput(tr("Uninstall previous package %1.").arg(packageName), OutputFormat::NormalMessage);
runCommand(m_adbPath,
AndroidDeviceInfo::adbSelector(m_serialNumber)
@@ -266,7 +276,7 @@ AndroidDeployQtStep::DeployErrorCode AndroidDeployQtStep::runDeploy(QFutureInter
Utils::QtcProcess::addArg(&args, QLatin1String("install"));
Utils::QtcProcess::addArg(&args, QLatin1String("-r"));
- Utils::QtcProcess::addArg(&args, m_apkPath);
+ Utils::QtcProcess::addArg(&args, m_apkPath.toString());
}
m_process = new Utils::QtcProcess;
@@ -314,7 +324,7 @@ AndroidDeployQtStep::DeployErrorCode AndroidDeployQtStep::runDeploy(QFutureInter
QProcess::ExitStatus exitStatus = m_process->exitStatus();
int exitCode = m_process->exitCode();
delete m_process;
- m_process = 0;
+ m_process = nullptr;
if (exitStatus == QProcess::NormalExit && exitCode == 0) {
emit addOutput(tr("The process \"%1\" exited normally.").arg(m_command),
@@ -368,13 +378,14 @@ void AndroidDeployQtStep::slotAskForUninstall(DeployErrorCode errorCode)
}
uninstallMsg.append(tr("\nUninstalling the installed package may solve the issue.\nDo you want to uninstall the existing package?"));
- int button = QMessageBox::critical(0, tr("Install failed"), uninstallMsg,
+ int button = QMessageBox::critical(nullptr, tr("Install failed"), uninstallMsg,
QMessageBox::Yes, QMessageBox::No);
m_askForUninstall = button == QMessageBox::Yes;
}
void AndroidDeployQtStep::slotSetSerialNumber(const QString &serialNumber)
{
+ qCDebug(deployStepLog) << "Target device serial number change:" << serialNumber;
AndroidManager::setDeviceSerialNumber(target(), serialNumber);
}
@@ -382,6 +393,7 @@ void AndroidDeployQtStep::run(QFutureInterface<bool> &fi)
{
if (!m_avdName.isEmpty()) {
QString serialNumber = AndroidAvdManager().waitForAvd(m_avdName, fi);
+ qCDebug(deployStepLog) << "Deploying to AVD:" << m_avdName << serialNumber;
if (serialNumber.isEmpty()) {
reportRunResult(fi, false);
return;
@@ -390,11 +402,6 @@ void AndroidDeployQtStep::run(QFutureInterface<bool> &fi)
emit setSerialNumber(serialNumber);
}
- if (!target()->activeBuildConfiguration()) { // nothing to deploy
- reportRunResult(fi, true);
- return;
- }
-
DeployErrorCode returnValue = runDeploy(fi);
if (returnValue > DeployErrorCode::NoError && returnValue < DeployErrorCode::Failure) {
emit askForUninstall(returnValue);
@@ -404,7 +411,9 @@ void AndroidDeployQtStep::run(QFutureInterface<bool> &fi)
}
}
- emit addOutput(tr("Pulling files necessary for debugging."), OutputFormat::NormalMessage);
+ if (!m_filesToPull.isEmpty())
+ emit addOutput(tr("Pulling files necessary for debugging."), OutputFormat::NormalMessage);
+
for (auto itr = m_filesToPull.constBegin(); itr != m_filesToPull.constEnd(); ++itr) {
QFile::remove(itr.value());
runCommand(m_adbPath,
@@ -420,6 +429,44 @@ void AndroidDeployQtStep::run(QFutureInterface<bool> &fi)
reportRunResult(fi, returnValue == NoError);
}
+void AndroidDeployQtStep::gatherFilesToPull()
+{
+ m_filesToPull.clear();
+ ProjectExplorer::BuildConfiguration *bc = buildConfiguration();
+ QString buildDir = bc ? bc->buildDirectory().toString() : QString();
+ if (bc && !buildDir.endsWith("/")) {
+ buildDir += "/";
+ }
+
+ if (!m_deviceInfo.isValid())
+ return;
+
+ QString linkerName("linker");
+ QString libDirName("lib");
+ if (m_deviceInfo.cpuAbi.contains(QLatin1String("arm64-v8a")) ||
+ m_deviceInfo.cpuAbi.contains(QLatin1String("x86_64"))) {
+ const Core::Id cxxLanguageId = ProjectExplorer::Constants::CXX_LANGUAGE_ID;
+ ToolChain *tc = ToolChainKitInformation::toolChain(target()->kit(), cxxLanguageId);
+ if (tc && tc->targetAbi().wordWidth() == 64) {
+ m_filesToPull["/system/bin/app_process64"] = buildDir + "app_process";
+ libDirName = "lib64";
+ linkerName = "linker64";
+ } else {
+ m_filesToPull["/system/bin/app_process32"] = buildDir + "app_process";
+ }
+ } else {
+ m_filesToPull["/system/bin/app_process32"] = buildDir + "app_process";
+ m_filesToPull["/system/bin/app_process"] = buildDir + "app_process";
+ }
+
+ m_filesToPull["/system/bin/" + linkerName] = buildDir + linkerName;
+ m_filesToPull["/system/" + libDirName + "/libc.so"] = buildDir + "libc.so";
+
+ qCDebug(deployStepLog) << "Files to pull from device:";
+ for (auto itr = m_filesToPull.constBegin(); itr != m_filesToPull.constEnd(); ++itr)
+ qCDebug(deployStepLog) << itr.key() << "to" << itr.value();
+}
+
void AndroidDeployQtStep::runCommand(const QString &program, const QStringList &arguments)
{
Utils::SynchronousProcess buildProc;
diff --git a/src/plugins/android/androiddeployqtstep.h b/src/plugins/android/androiddeployqtstep.h
index 4b5534fda5..a23f8f9ef6 100644
--- a/src/plugins/android/androiddeployqtstep.h
+++ b/src/plugins/android/androiddeployqtstep.h
@@ -43,7 +43,6 @@ namespace Internal {
class AndroidDeployQtStepFactory : public ProjectExplorer::BuildStepFactory
{
- Q_OBJECT
public:
AndroidDeployQtStepFactory();
};
@@ -92,6 +91,7 @@ private:
bool init(QList<const BuildStep *> &earlierSteps) override;
void run(QFutureInterface<bool> &fi) override;
+ void gatherFilesToPull();
DeployErrorCode runDeploy(QFutureInterface<bool> &fi);
void slotAskForUninstall(DeployErrorCode errorCode);
void slotSetSerialNumber(const QString &serialNumber);
@@ -114,7 +114,7 @@ private:
Utils::FileName m_manifestName;
QString m_serialNumber;
QString m_avdName;
- QString m_apkPath;
+ Utils::FileName m_apkPath;
QMap<QString, QString> m_filesToPull;
QString m_targetArch;
diff --git a/src/plugins/android/androiddeployqtwidget.h b/src/plugins/android/androiddeployqtwidget.h
index 9989bebe99..949aee637e 100644
--- a/src/plugins/android/androiddeployqtwidget.h
+++ b/src/plugins/android/androiddeployqtwidget.h
@@ -44,15 +44,15 @@ class AndroidDeployQtWidget : public ProjectExplorer::BuildStepConfigWidget
public:
AndroidDeployQtWidget(AndroidDeployQtStep *step);
- ~AndroidDeployQtWidget();
+ ~AndroidDeployQtWidget() override;
private:
void installMinistro();
void cleanLibsOnDevice();
void resetDefaultDevices();
- virtual QString summaryText() const;
- virtual QString displayName() const;
+ QString summaryText() const override;
+ QString displayName() const override;
Ui::AndroidDeployQtWidget *m_ui;
AndroidDeployQtStep *m_step;
diff --git a/src/plugins/android/androiddevice.cpp b/src/plugins/android/androiddevice.cpp
index 48aaa35cca..cc108e6ca4 100644
--- a/src/plugins/android/androiddevice.cpp
+++ b/src/plugins/android/androiddevice.cpp
@@ -27,15 +27,21 @@
#include "androidconstants.h"
#include "androidsignaloperation.h"
#include "androidconfigurations.h"
+#include "androidmanager.h"
#include <projectexplorer/runconfiguration.h>
#include <utils/url.h>
#include <QCoreApplication>
+#include <QLoggingCategory>
using namespace ProjectExplorer;
+namespace {
+Q_LOGGING_CATEGORY(androidDeviceLog, "qtc.android.build.androiddevice")
+}
+
namespace Android {
namespace Internal {
@@ -47,13 +53,15 @@ AndroidDevice::AndroidDevice()
{
setDisplayName(QCoreApplication::translate("Android::Internal::AndroidDevice", "Run on Android"));
setDeviceState(DeviceReadyToUse);
- setQmlsceneCommand(AndroidConfigurations::currentConfig().deviceQmlsceneCommand());
+ QString activityPath;
+ const AndroidConfig &config = AndroidConfigurations::currentConfig();
+ AndroidManager::apkInfo(config.qtLiveApkPath(), nullptr, nullptr, &activityPath);
+ qCDebug(androidDeviceLog) << "Using Qt live apk from: " << config.qtLiveApkPath()
+ << "Activity Path:" << activityPath;
+ setQmlsceneCommand(activityPath);
}
-AndroidDevice::AndroidDevice(const AndroidDevice &other)
- : IDevice(other)
-{ }
-
+AndroidDevice::AndroidDevice(const AndroidDevice &other) = default;
IDevice::DeviceInfo AndroidDevice::deviceInformation() const
{
@@ -67,7 +75,7 @@ QString AndroidDevice::displayType() const
IDeviceWidget *AndroidDevice::createWidget()
{
- return 0;
+ return nullptr;
}
QList<Core::Id> AndroidDevice::actionIds() const
diff --git a/src/plugins/android/androiddevice.h b/src/plugins/android/androiddevice.h
index fc710ef365..622e89d6f6 100644
--- a/src/plugins/android/androiddevice.h
+++ b/src/plugins/android/androiddevice.h
@@ -41,7 +41,7 @@ public:
ProjectExplorer::IDeviceWidget *createWidget() override;
QList<Core::Id> actionIds() const override;
QString displayNameForActionId(Core::Id actionId) const override;
- void executeAction(Core::Id actionId, QWidget *parent = 0) override;
+ void executeAction(Core::Id actionId, QWidget *parent = nullptr) override;
bool canAutoDetectPorts() const override;
ProjectExplorer::DeviceProcessSignalOperation::Ptr signalOperation() const override;
Utils::OsType osType() const override;
diff --git a/src/plugins/android/androiddevicedialog.cpp b/src/plugins/android/androiddevicedialog.cpp
index 3d8559696a..db70967727 100644
--- a/src/plugins/android/androiddevicedialog.cpp
+++ b/src/plugins/android/androiddevicedialog.cpp
@@ -107,23 +107,21 @@ class AndroidDeviceModelDelegate : public QStyledItemDelegate
{
Q_OBJECT
public:
- AndroidDeviceModelDelegate(QObject * parent = 0)
+ AndroidDeviceModelDelegate(QObject * parent = nullptr)
: QStyledItemDelegate(parent)
{
}
- ~AndroidDeviceModelDelegate()
- {
- }
+ ~AndroidDeviceModelDelegate() override = default;
- void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
+ void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override
{
QStyleOptionViewItem opt = option;
initStyleOption(&opt, index);
painter->save();
- AndroidDeviceModelNode *node = static_cast<AndroidDeviceModelNode *>(index.internalPointer());
+ auto node = static_cast<AndroidDeviceModelNode *>(index.internalPointer());
AndroidDeviceInfo device = node->deviceInfo();
painter->setPen(Qt::NoPen);
@@ -221,7 +219,7 @@ public:
painter->restore();
}
- QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
+ QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override
{
QStyleOptionViewItem opt = option;
initStyleOption(&opt, index);
@@ -240,12 +238,12 @@ class AndroidDeviceModel : public QAbstractItemModel
public:
AndroidDeviceModel(int apiLevel, const QString &abi);
QModelIndex index(int row, int column,
- const QModelIndex &parent = QModelIndex()) const;
- QModelIndex parent(const QModelIndex &child) const;
- int rowCount(const QModelIndex &parent = QModelIndex()) const;
- int columnCount(const QModelIndex &parent = QModelIndex()) const;
- QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
- Qt::ItemFlags flags(const QModelIndex &index) const;
+ const QModelIndex &parent = QModelIndex()) const override;
+ QModelIndex parent(const QModelIndex &child) const override;
+ int rowCount(const QModelIndex &parent = QModelIndex()) const override;
+ int columnCount(const QModelIndex &parent = QModelIndex()) const override;
+ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
+ Qt::ItemFlags flags(const QModelIndex &index) const override;
AndroidDeviceInfo device(QModelIndex index);
void setDevices(const QVector<AndroidDeviceInfo> &devices);
@@ -263,7 +261,7 @@ private:
// AndroidDeviceModel
/////////////////
AndroidDeviceModel::AndroidDeviceModel(int apiLevel, const QString &abi)
- : m_apiLevel(apiLevel), m_abi(abi), m_root(0)
+ : m_apiLevel(apiLevel), m_abi(abi), m_root(nullptr)
{
}
@@ -281,7 +279,7 @@ QModelIndex AndroidDeviceModel::index(int row, int column, const QModelIndex &pa
return createIndex(row, column, m_root->children().at(row));
}
- AndroidDeviceModelNode *node = static_cast<AndroidDeviceModelNode *>(parent.internalPointer());
+ auto node = static_cast<AndroidDeviceModelNode *>(parent.internalPointer());
if (row < node->children().count())
return createIndex(row, column, node->children().at(row));
@@ -294,7 +292,7 @@ QModelIndex AndroidDeviceModel::parent(const QModelIndex &child) const
return QModelIndex();
if (!m_root)
return QModelIndex();
- AndroidDeviceModelNode *node = static_cast<AndroidDeviceModelNode *>(child.internalPointer());
+ auto node = static_cast<AndroidDeviceModelNode *>(child.internalPointer());
if (node == m_root)
return QModelIndex();
AndroidDeviceModelNode *parent = node->parent();
@@ -312,7 +310,7 @@ int AndroidDeviceModel::rowCount(const QModelIndex &parent) const
return 0;
if (!parent.isValid())
return m_root->children().count();
- AndroidDeviceModelNode *node = static_cast<AndroidDeviceModelNode *>(parent.internalPointer());
+ auto node = static_cast<AndroidDeviceModelNode *>(parent.internalPointer());
return node->children().count();
}
@@ -326,7 +324,7 @@ QVariant AndroidDeviceModel::data(const QModelIndex &index, int role) const
{
if (role != Qt::DisplayRole)
return QVariant();
- AndroidDeviceModelNode *node = static_cast<AndroidDeviceModelNode *>(index.internalPointer());
+ auto node = static_cast<AndroidDeviceModelNode *>(index.internalPointer());
if (!node)
return QVariant();
return node->deviceInfo().serialNumber;
@@ -334,7 +332,7 @@ QVariant AndroidDeviceModel::data(const QModelIndex &index, int role) const
Qt::ItemFlags AndroidDeviceModel::flags(const QModelIndex &index) const
{
- AndroidDeviceModelNode *node = static_cast<AndroidDeviceModelNode *>(index.internalPointer());
+ auto node = static_cast<AndroidDeviceModelNode *>(index.internalPointer());
if (node)
if (node->displayName().isEmpty() && node->incompatibleReason().isEmpty())
return Qt::ItemIsSelectable | Qt::ItemIsEnabled;
@@ -344,7 +342,7 @@ Qt::ItemFlags AndroidDeviceModel::flags(const QModelIndex &index) const
AndroidDeviceInfo AndroidDeviceModel::device(QModelIndex index)
{
- AndroidDeviceModelNode *node = static_cast<AndroidDeviceModelNode *>(index.internalPointer());
+ auto node = static_cast<AndroidDeviceModelNode *>(index.internalPointer());
if (!node)
return AndroidDeviceInfo();
return node->deviceInfo();
@@ -354,10 +352,10 @@ void AndroidDeviceModel::setDevices(const QVector<AndroidDeviceInfo> &devices)
{
beginResetModel();
delete m_root;
- m_root = new AndroidDeviceModelNode(0, QString());
+ m_root = new AndroidDeviceModelNode(nullptr, QString());
AndroidDeviceModelNode *compatibleDevices = new AndroidDeviceModelNode(m_root, AndroidDeviceDialog::tr("Compatible devices"));
- AndroidDeviceModelNode *incompatibleDevices = 0; // created on demand
+ AndroidDeviceModelNode *incompatibleDevices = nullptr; // created on demand
foreach (const AndroidDeviceInfo &device, devices) {
QString error;
if (device.state == AndroidDeviceInfo::UnAuthorizedState) {
@@ -614,7 +612,7 @@ void AndroidDeviceDialog::enableOkayButton()
void AndroidDeviceDialog::clickedOnView(const QModelIndex &idx)
{
if (idx.isValid()) {
- AndroidDeviceModelNode *node = static_cast<AndroidDeviceModelNode *>(idx.internalPointer());
+ auto node = static_cast<AndroidDeviceModelNode *>(idx.internalPointer());
if (!node->displayName().isEmpty()) {
if (m_ui->deviceView->isExpanded(idx))
m_ui->deviceView->collapse(idx);
diff --git a/src/plugins/android/androiddevicedialog.h b/src/plugins/android/androiddevicedialog.h
index db379c068e..e366b18075 100644
--- a/src/plugins/android/androiddevicedialog.h
+++ b/src/plugins/android/androiddevicedialog.h
@@ -53,8 +53,8 @@ class AndroidDeviceDialog : public QDialog
public:
explicit AndroidDeviceDialog(int apiLevel, const QString &abi,
- const QString &serialNumber, QWidget *parent = 0);
- ~AndroidDeviceDialog();
+ const QString &serialNumber, QWidget *parent = nullptr);
+ ~AndroidDeviceDialog() override;
AndroidDeviceInfo device();
diff --git a/src/plugins/android/androiddevicefactory.h b/src/plugins/android/androiddevicefactory.h
index 3954e42507..781c6ae1f5 100644
--- a/src/plugins/android/androiddevicefactory.h
+++ b/src/plugins/android/androiddevicefactory.h
@@ -36,14 +36,14 @@ class AndroidDeviceFactory : public ProjectExplorer::IDeviceFactory
public:
AndroidDeviceFactory();
- QString displayNameForId(Core::Id type) const;
- QList<Core::Id> availableCreationIds() const;
- QIcon iconForId(Core::Id type) const;
+ QString displayNameForId(Core::Id type) const override;
+ QList<Core::Id> availableCreationIds() const override;
+ QIcon iconForId(Core::Id type) const override;
- bool canCreate() const;
- ProjectExplorer::IDevice::Ptr create(Core::Id id) const;
- bool canRestore(const QVariantMap &map) const;
- ProjectExplorer::IDevice::Ptr restore(const QVariantMap &map) const;
+ bool canCreate() const override;
+ ProjectExplorer::IDevice::Ptr create(Core::Id id) const override;
+ bool canRestore(const QVariantMap &map) const override;
+ ProjectExplorer::IDevice::Ptr restore(const QVariantMap &map) const override;
};
} // namespace Internal
diff --git a/src/plugins/qmakeandroidsupport/androidextralibrarylistmodel.cpp b/src/plugins/android/androidextralibrarylistmodel.cpp
index f2995d2371..60956c963a 100644
--- a/src/plugins/qmakeandroidsupport/androidextralibrarylistmodel.cpp
+++ b/src/plugins/android/androidextralibrarylistmodel.cpp
@@ -26,33 +26,28 @@
#include "androidextralibrarylistmodel.h"
+#include <android/androidqtsupport.h>
+#include <android/androidmanager.h>
+
+#include <projectexplorer/project.h>
#include <projectexplorer/runconfiguration.h>
#include <projectexplorer/target.h>
-#include <qmakeprojectmanager/qmakeproject.h>
-#include <qmakeprojectmanager/qmakenodes.h>
-
-#include <proparser/prowriter.h>
-
-
-using namespace QmakeAndroidSupport;
-using namespace Internal;
-using QmakeProjectManager::QmakeProject;
+namespace Android {
AndroidExtraLibraryListModel::AndroidExtraLibraryListModel(ProjectExplorer::Target *target,
QObject *parent)
: QAbstractItemModel(parent),
m_target(target)
{
+ updateModel();
- activeRunConfigurationChanged();
-
- auto project = static_cast<QmakeProject *>(target->project());
- connect(project, &QmakeProject::proFileUpdated,
- this, &AndroidExtraLibraryListModel::proFileUpdated);
-
+ connect(target->project(), &ProjectExplorer::Project::parsingStarted,
+ this, &AndroidExtraLibraryListModel::updateModel);
+ connect(target->project(), &ProjectExplorer::Project::parsingFinished,
+ this, &AndroidExtraLibraryListModel::updateModel);
connect(target, &ProjectExplorer::Target::activeRunConfigurationChanged,
- this, &AndroidExtraLibraryListModel::activeRunConfigurationChanged);
+ this, &AndroidExtraLibraryListModel::updateModel);
}
QModelIndex AndroidExtraLibraryListModel::index(int row, int column, const QModelIndex &) const
@@ -85,22 +80,20 @@ QVariant AndroidExtraLibraryListModel::data(const QModelIndex &index, int role)
};
}
-void AndroidExtraLibraryListModel::activeRunConfigurationChanged()
+void AndroidExtraLibraryListModel::updateModel()
{
- QmakeProjectManager::QmakeProFile *pro = activeProFile();
- if (!pro || pro->parseInProgress()) {
+ AndroidQtSupport *qtSupport = Android::AndroidManager::androidQtSupport(m_target);
+ QTC_ASSERT(qtSupport, return);
+
+ if (qtSupport->parseInProgress(m_target)) {
emit enabledChanged(false);
return;
}
- m_scope = QLatin1String("contains(ANDROID_TARGET_ARCH,")
- + pro->singleVariableValue(QmakeProjectManager::Variable::AndroidArch)
- + QLatin1Char(')');
-
bool enabled;
beginResetModel();
- if (pro->validParse() && pro->projectType() == QmakeProjectManager::ProjectType::ApplicationTemplate) {
- m_entries = pro->variableValue(QmakeProjectManager::Variable::AndroidExtraLibs);
+ if (qtSupport->validParse(m_target)) {
+ m_entries = qtSupport->targetData(Constants::AndroidExtraLibs, m_target).toStringList();
enabled = true;
} else {
// parsing error or not a application template
@@ -112,44 +105,19 @@ void AndroidExtraLibraryListModel::activeRunConfigurationChanged()
emit enabledChanged(enabled);
}
-QmakeProjectManager::QmakeProFile *AndroidExtraLibraryListModel::activeProFile() const
-{
- ProjectExplorer::RunConfiguration *rc = m_target->activeRunConfiguration();
- if (!rc)
- return nullptr;
- auto project = static_cast<QmakeProject *>(m_target->project());
- return project->rootProFile()->findProFile(Utils::FileName::fromString(rc->buildKey()));
-}
-
-void AndroidExtraLibraryListModel::proFileUpdated(QmakeProjectManager::QmakeProFile *pro)
-{
- if (activeProFile() != pro)
- return;
- activeRunConfigurationChanged();
-}
-
-bool AndroidExtraLibraryListModel::isEnabled() const
-{
- QmakeProjectManager::QmakeProFile *pro = activeProFile();
- return pro && !pro->parseInProgress() && pro->projectType() == QmakeProjectManager::ProjectType::ApplicationTemplate;
-}
-
void AndroidExtraLibraryListModel::addEntries(const QStringList &list)
{
- QmakeProjectManager::QmakeProFile *pro = activeProFile();
- if (!pro || pro->projectType() != QmakeProjectManager::ProjectType::ApplicationTemplate)
- return;
+ AndroidQtSupport *qtSupport = Android::AndroidManager::androidQtSupport(m_target);
+ QTC_ASSERT(qtSupport, return);
+ Utils::FileName projectFilePath = qtSupport->projectFilePath(m_target);
beginInsertRows(QModelIndex(), m_entries.size(), m_entries.size() + list.size());
- foreach (const QString &path, list)
- m_entries += QLatin1String("$$PWD/")
- + pro->filePath().toFileInfo().absoluteDir().relativeFilePath(path);
-
- pro->setProVariable("ANDROID_EXTRA_LIBS", m_entries, m_scope,
- QmakeProjectManager::Internal::ProWriter::ReplaceValues
- | QmakeProjectManager::Internal::ProWriter::MultiLine);
+ const QDir dir = qtSupport->projectFilePath(m_target).toFileInfo().absoluteDir();
+ for (const QString &path : list)
+ m_entries += "$$PWD/" + dir.relativeFilePath(path);
+ qtSupport->setTargetData(Constants::AndroidExtraLibs, m_entries, m_target);
endInsertRows();
}
@@ -160,10 +128,7 @@ bool greaterModelIndexByRow(const QModelIndex &a, const QModelIndex &b)
void AndroidExtraLibraryListModel::removeEntries(QModelIndexList list)
{
- QmakeProjectManager::QmakeProFile *pro = activeProFile();
- if (!pro)
- return;
- if (list.isEmpty() || !pro || pro->projectType() != QmakeProjectManager::ProjectType::ApplicationTemplate)
+ if (list.isEmpty())
return;
std::sort(list.begin(), list.end(), greaterModelIndexByRow);
@@ -182,5 +147,9 @@ void AndroidExtraLibraryListModel::removeEntries(QModelIndexList list)
endRemoveRows();
}
- pro->setProVariable(QLatin1String("ANDROID_EXTRA_LIBS"), m_entries, m_scope);
+ AndroidQtSupport *qtSupport = AndroidManager::androidQtSupport(m_target);
+ QTC_ASSERT(qtSupport, return);
+ qtSupport->setTargetData(Constants::AndroidExtraLibs, m_entries, m_target);
}
+
+} // Android
diff --git a/src/plugins/qmakeandroidsupport/androidextralibrarylistmodel.h b/src/plugins/android/androidextralibrarylistmodel.h
index e0b401d473..bbd21ce815 100644
--- a/src/plugins/qmakeandroidsupport/androidextralibrarylistmodel.h
+++ b/src/plugins/android/androidextralibrarylistmodel.h
@@ -26,6 +26,8 @@
#pragma once
+#include "android_global.h"
+
#include <QAbstractItemModel>
#include <QStringList>
@@ -34,41 +36,32 @@ class RunConfiguration;
class Target;
}
-namespace QmakeProjectManager { class QmakeProFile; }
-
-namespace QmakeAndroidSupport {
+namespace Android {
-namespace Internal {
-class AndroidExtraLibraryListModel : public QAbstractItemModel
+class ANDROID_EXPORT AndroidExtraLibraryListModel : public QAbstractItemModel
{
Q_OBJECT
public:
explicit AndroidExtraLibraryListModel(ProjectExplorer::Target *target,
- QObject *parent = 0);
+ QObject *parent = nullptr);
- QModelIndex index(int row, int column, const QModelIndex &parent) const;
- QModelIndex parent(const QModelIndex &child) const;
- int rowCount(const QModelIndex &parent) const;
- int columnCount(const QModelIndex &parent) const;
- QVariant data(const QModelIndex &index, int role) const;
+ QModelIndex index(int row, int column, const QModelIndex &parent) const override;
+ QModelIndex parent(const QModelIndex &child) const override;
+ int rowCount(const QModelIndex &parent) const override;
+ int columnCount(const QModelIndex &parent) const override;
+ QVariant data(const QModelIndex &index, int role) const override;
void removeEntries(QModelIndexList list);
void addEntries(const QStringList &list);
- bool isEnabled() const;
-
signals:
void enabledChanged(bool);
private:
- void proFileUpdated(QmakeProjectManager::QmakeProFile *pro);
- void activeRunConfigurationChanged();
- QmakeProjectManager::QmakeProFile *activeProFile() const;
+ void updateModel();
ProjectExplorer::Target *m_target;
QStringList m_entries;
- QString m_scope;
};
-} // namespace Internal
-} // namespace QmakeAndroidSupport
+} // namespace Android
diff --git a/src/plugins/android/androidmanager.cpp b/src/plugins/android/androidmanager.cpp
index c6f5a42e03..df678d1f74 100644
--- a/src/plugins/android/androidmanager.cpp
+++ b/src/plugins/android/androidmanager.cpp
@@ -48,7 +48,9 @@
#include <qtsupport/qtkitinformation.h>
#include <qtsupport/qtsupportconstants.h>
+
#include <utils/algorithm.h>
+#include <utils/qtcassert.h>
#include <utils/synchronousprocess.h>
#include <QDir>
@@ -100,6 +102,9 @@ namespace {
};
} // anonymous namespace
+
+using namespace Utils;
+
namespace Android {
using namespace Internal;
@@ -114,7 +119,7 @@ public:
QString name;
};
-typedef QMap<QString, Library> LibrariesMap;
+using LibrariesMap = QMap<QString, Library>;
static bool openXmlFile(QDomDocument &doc, const Utils::FileName &fileName);
static bool openManifest(ProjectExplorer::Target *target, QDomDocument &doc);
@@ -246,7 +251,7 @@ int AndroidManager::minimumSDK(const ProjectExplorer::Kit *kit)
QString AndroidManager::buildTargetSDK(ProjectExplorer::Target *target)
{
- AndroidBuildApkStep *androidBuildApkStep
+ auto androidBuildApkStep
= AndroidGlobal::buildStep<AndroidBuildApkStep>(target->activeBuildConfiguration());
if (androidBuildApkStep)
return androidBuildApkStep->buildTargetSdk();
@@ -258,7 +263,7 @@ QString AndroidManager::buildTargetSDK(ProjectExplorer::Target *target)
bool AndroidManager::signPackage(ProjectExplorer::Target *target)
{
- AndroidBuildApkStep *androidBuildApkStep
+ auto androidBuildApkStep
= AndroidGlobal::buildStep<AndroidBuildApkStep>(target->activeBuildConfiguration());
if (androidBuildApkStep)
return androidBuildApkStep->signPackage();
@@ -267,23 +272,46 @@ bool AndroidManager::signPackage(ProjectExplorer::Target *target)
QString AndroidManager::targetArch(ProjectExplorer::Target *target)
{
- AndroidQtVersion *qt = static_cast<AndroidQtVersion *>(QtSupport::QtKitInformation::qtVersion(target->kit()));
+ auto qt = static_cast<AndroidQtVersion *>(QtSupport::QtKitInformation::qtVersion(target->kit()));
return qt->targetArch();
}
-Utils::FileName AndroidManager::dirPath(ProjectExplorer::Target *target)
+Utils::FileName AndroidManager::dirPath(const ProjectExplorer::Target *target)
{
if (target->activeBuildConfiguration())
return target->activeBuildConfiguration()->buildDirectory().appendPath(QLatin1String(Constants::ANDROID_BUILDDIRECTORY));
return Utils::FileName();
}
+Utils::FileName AndroidManager::apkPath(const ProjectExplorer::Target *target)
+{
+ QTC_ASSERT(target, return Utils::FileName());
+
+ auto buildApkStep
+ = Android::AndroidGlobal::buildStep<AndroidBuildApkStep>(target->activeBuildConfiguration());
+
+ if (!buildApkStep)
+ return Utils::FileName();
+
+ QString apkPath("build/outputs/apk/android-build-");
+ if (buildApkStep->signPackage())
+ apkPath += QLatin1String("release.apk");
+ else
+ apkPath += QLatin1String("debug.apk");
+
+ return dirPath(target).appendPath(apkPath);
+}
+
Utils::FileName AndroidManager::manifestSourcePath(ProjectExplorer::Target *target)
{
if (AndroidQtSupport *androidQtSupport = AndroidManager::androidQtSupport(target)) {
- Utils::FileName source = androidQtSupport->manifestSourcePath(target);
- if (!source.isEmpty())
- return source;
+ const QString packageSource
+ = androidQtSupport->targetData(Android::Constants::AndroidPackageSourceDir, target).toString();
+ if (!packageSource.isEmpty()) {
+ const FileName manifest = FileName::fromUserInput(packageSource + "/AndroidManifest.xml");
+ if (manifest.exists())
+ return manifest;
+ }
}
return manifestPath(target);
}
@@ -300,7 +328,7 @@ Utils::FileName AndroidManager::defaultPropertiesPath(ProjectExplorer::Target *t
bool AndroidManager::bundleQt(ProjectExplorer::Target *target)
{
- AndroidBuildApkStep *androidBuildApkStep
+ auto androidBuildApkStep
= AndroidGlobal::buildStep<AndroidBuildApkStep>(target->activeBuildConfiguration());
if (androidBuildApkStep)
return !androidBuildApkStep->useMinistro();
@@ -315,6 +343,8 @@ QString AndroidManager::deviceSerialNumber(ProjectExplorer::Target *target)
void AndroidManager::setDeviceSerialNumber(ProjectExplorer::Target *target, const QString &deviceSerialNumber)
{
+ qCDebug(androidManagerLog) << "Device serial for the target changed"
+ << target->displayName() << deviceSerialNumber;
target->setNamedSettings(AndroidDeviceSn, deviceSerialNumber);
}
@@ -325,12 +355,14 @@ int AndroidManager::deviceApiLevel(ProjectExplorer::Target *target)
void AndroidManager::setDeviceApiLevel(ProjectExplorer::Target *target, int level)
{
+ qCDebug(androidManagerLog) << "Device API level for the target changed"
+ << target->displayName() << level;
target->setNamedSettings(ApiLevelKey, level);
}
QPair<int, int> AndroidManager::apiLevelRange()
{
- return qMakePair(9, 26);
+ return qMakePair(16, 27);
}
QString AndroidManager::androidNameForApiLevel(int x)
@@ -382,6 +414,8 @@ QString AndroidManager::androidNameForApiLevel(int x)
return QLatin1String("Android 7.1");
case 26:
return QLatin1String("Android 8.0");
+ case 27:
+ return QLatin1String("Android 8.1");
default:
return tr("Unknown Android version. API Level: %1").arg(QString::number(x));
}
@@ -389,7 +423,7 @@ QString AndroidManager::androidNameForApiLevel(int x)
static void raiseError(const QString &reason)
{
- QMessageBox::critical(0, AndroidManager::tr("Error creating Android templates."), reason);
+ QMessageBox::critical(nullptr, AndroidManager::tr("Error creating Android templates."), reason);
}
static bool openXmlFile(QDomDocument &doc, const Utils::FileName &fileName)
@@ -516,27 +550,16 @@ bool AndroidManager::checkCertificateExists(const QString &keystorePath,
return response.result == Utils::SynchronousProcessResponse::Finished && response.exitCode == 0;
}
-bool AndroidManager::checkForQt51Files(Utils::FileName fileName)
-{
- fileName.appendPath(QLatin1String("android")).appendPath(QLatin1String("version.xml"));
- if (!fileName.exists())
- return false;
- QDomDocument dstVersionDoc;
- if (!openXmlFile(dstVersionDoc, fileName))
- return false;
- return dstVersionDoc.documentElement().attribute(QLatin1String("value")).toDouble() < 5.2;
-}
-
AndroidQtSupport *AndroidManager::androidQtSupport(ProjectExplorer::Target *target)
{
for (AndroidQtSupport *provider : g_androidQtSupportProviders) {
if (provider->canHandle(target))
return provider;
}
- return 0;
+ return nullptr;
}
-typedef QMap<QByteArray, QByteArray> GradleProperties;
+using GradleProperties = QMap<QByteArray, QByteArray>;
static GradleProperties readGradleProperties(const QString &path)
{
@@ -608,7 +631,8 @@ bool AndroidManager::updateGradleProperties(ProjectExplorer::Target *target)
if (!qtSupport)
return false;
- Utils::FileName packageSourceDir = qtSupport->packageSourceDir(target);
+ QFileInfo sourceDirInfo(qtSupport->targetData(Constants::AndroidPackageSourceDir, target).toString());
+ FileName packageSourceDir = FileName::fromString(sourceDirInfo.canonicalFilePath());
if (!packageSourceDir.appendPath("gradlew").exists())
return false;
@@ -661,7 +685,7 @@ int AndroidManager::findApiLevel(const Utils::FileName &platformPath)
void AndroidManager::runAdbCommandDetached(const QStringList &args)
{
- QProcess *process = new QProcess();
+ auto process = new QProcess();
connect(process, static_cast<void (QProcess::*)(int)>(&QProcess::finished),
process, &QObject::deleteLater);
const QString adb = AndroidConfigurations::currentConfig().adbToolPath().toString();
diff --git a/src/plugins/android/androidmanager.h b/src/plugins/android/androidmanager.h
index fcda5e46d4..444710ac91 100644
--- a/src/plugins/android/androidmanager.h
+++ b/src/plugins/android/androidmanager.h
@@ -74,10 +74,11 @@ public:
static QString targetArch(ProjectExplorer::Target *target);
- static Utils::FileName dirPath(ProjectExplorer::Target *target);
+ static Utils::FileName dirPath(const ProjectExplorer::Target *target);
static Utils::FileName manifestPath(ProjectExplorer::Target *target);
static Utils::FileName manifestSourcePath(ProjectExplorer::Target *target);
static Utils::FileName defaultPropertiesPath(ProjectExplorer::Target *target);
+ static Utils::FileName apkPath(const ProjectExplorer::Target *target);
static QPair<int, int> apiLevelRange();
static QString androidNameForApiLevel(int x);
@@ -89,7 +90,6 @@ public:
static bool checkCertificatePassword(const QString &keystorePath, const QString &keystorePasswd, const QString &alias, const QString &certificatePasswd);
static bool checkCertificateExists(const QString &keystorePath, const QString &keystorePasswd,
const QString &alias);
- static bool checkForQt51Files(Utils::FileName fileName);
static AndroidQtSupport *androidQtSupport(ProjectExplorer::Target *target);
static bool updateGradleProperties(ProjectExplorer::Target *target);
static int findApiLevel(const Utils::FileName &platformPath);
diff --git a/src/plugins/android/androidmanifesteditor.cpp b/src/plugins/android/androidmanifesteditor.cpp
index de0babde15..8e9ee762ff 100644
--- a/src/plugins/android/androidmanifesteditor.cpp
+++ b/src/plugins/android/androidmanifesteditor.cpp
@@ -38,7 +38,7 @@ using namespace Android;
using namespace Internal;
AndroidManifestEditor::AndroidManifestEditor(AndroidManifestEditorWidget *editorWidget)
- : Core::IEditor(editorWidget), m_toolBar(0)
+ : Core::IEditor(editorWidget), m_toolBar(nullptr)
{
m_toolBar = new QToolBar(editorWidget);
m_actionGroup = new QActionGroup(this);
diff --git a/src/plugins/android/androidmanifesteditorfactory.cpp b/src/plugins/android/androidmanifesteditorfactory.cpp
index 1d0bee2390..ce78388537 100644
--- a/src/plugins/android/androidmanifesteditorfactory.cpp
+++ b/src/plugins/android/androidmanifesteditorfactory.cpp
@@ -49,6 +49,6 @@ AndroidManifestEditorFactory::AndroidManifestEditorFactory()
Core::IEditor *AndroidManifestEditorFactory::createEditor()
{
- AndroidManifestEditorWidget *androidManifestEditorWidget = new AndroidManifestEditorWidget();
+ auto androidManifestEditorWidget = new AndroidManifestEditorWidget();
return androidManifestEditorWidget->editor();
}
diff --git a/src/plugins/android/androidmanifesteditorfactory.h b/src/plugins/android/androidmanifesteditorfactory.h
index c13d4e14b0..82d26b2f4a 100644
--- a/src/plugins/android/androidmanifesteditorfactory.h
+++ b/src/plugins/android/androidmanifesteditorfactory.h
@@ -37,7 +37,7 @@ class AndroidManifestEditorFactory : public Core::IEditorFactory
public:
AndroidManifestEditorFactory();
- Core::IEditor *createEditor();
+ Core::IEditor *createEditor() override;
};
} // namespace Internal
diff --git a/src/plugins/android/androidmanifesteditorwidget.cpp b/src/plugins/android/androidmanifesteditorwidget.cpp
index 91e8a43b64..6117e91774 100644
--- a/src/plugins/android/androidmanifesteditorwidget.cpp
+++ b/src/plugins/android/androidmanifesteditorwidget.cpp
@@ -25,6 +25,7 @@
#include "androidmanifesteditorwidget.h"
#include "androidmanifesteditor.h"
+#include "androidconfigurations.h"
#include "androidconstants.h"
#include "androidmanifestdocument.h"
#include "androidmanager.h"
@@ -34,6 +35,7 @@
#include <coreplugin/infobar.h>
#include <coreplugin/editormanager/ieditor.h>
+#include <projectexplorer/buildconfiguration.h>
#include <projectexplorer/project.h>
#include <projectexplorer/projectwindow.h>
#include <projectexplorer/session.h>
@@ -93,7 +95,7 @@ Project *androidProject(const Utils::FileName &fileName)
&& fileName.isChildOf(project->projectDirectory()))
return project;
}
- return 0;
+ return nullptr;
}
} // anonymous namespace
@@ -127,15 +129,15 @@ void AndroidManifestEditorWidget::initializePage()
{
QWidget *mainWidget = new QWidget; // different name
- QVBoxLayout *topLayout = new QVBoxLayout(mainWidget);
+ auto topLayout = new QVBoxLayout(mainWidget);
- QGroupBox *packageGroupBox = new QGroupBox(mainWidget);
+ auto packageGroupBox = new QGroupBox(mainWidget);
topLayout->addWidget(packageGroupBox);
auto setDirtyFunc = [this] { setDirty(); };
packageGroupBox->setTitle(tr("Package"));
{
- QFormLayout *formLayout = new QFormLayout();
+ auto formLayout = new QFormLayout();
m_packageNameLineEdit = new QLineEdit(packageGroupBox);
m_packageNameLineEdit->setToolTip(tr(
@@ -161,7 +163,7 @@ void AndroidManifestEditorWidget::initializePage()
m_packageNameWarningIcon->setVisible(false);
m_packageNameWarningIcon->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
- QHBoxLayout *warningRow = new QHBoxLayout;
+ auto warningRow = new QHBoxLayout;
warningRow->setMargin(0);
warningRow->addWidget(m_packageNameWarningIcon);
warningRow->addWidget(m_packageNameWarning);
@@ -213,12 +215,12 @@ void AndroidManifestEditorWidget::initializePage()
}
// Application
- QGroupBox *applicationGroupBox = new QGroupBox(mainWidget);
+ auto applicationGroupBox = new QGroupBox(mainWidget);
topLayout->addWidget(applicationGroupBox);
applicationGroupBox->setTitle(tr("Application"));
{
- QFormLayout *formLayout = new QFormLayout();
+ auto formLayout = new QFormLayout();
m_appNameLineEdit = new QLineEdit(applicationGroupBox);
formLayout->addRow(tr("Application name:"), m_appNameLineEdit);
@@ -232,7 +234,7 @@ void AndroidManifestEditorWidget::initializePage()
m_targetLineEdit->installEventFilter(this);
formLayout->addRow(tr("Run:"), m_targetLineEdit);
- QHBoxLayout *iconLayout = new QHBoxLayout();
+ auto iconLayout = new QHBoxLayout();
m_lIconButton = new QToolButton(applicationGroupBox);
m_lIconButton->setMinimumSize(QSize(48, 48));
m_lIconButton->setMaximumSize(QSize(48, 48));
@@ -276,12 +278,12 @@ void AndroidManifestEditorWidget::initializePage()
// Permissions
- QGroupBox *permissionsGroupBox = new QGroupBox(mainWidget);
+ auto permissionsGroupBox = new QGroupBox(mainWidget);
topLayout->addWidget(permissionsGroupBox);
permissionsGroupBox->setTitle(tr("Permissions"));
{
- QGridLayout *layout = new QGridLayout(permissionsGroupBox);
+ auto layout = new QGridLayout(permissionsGroupBox);
m_defaultPermissonsCheckBox = new QCheckBox(this);
m_defaultPermissonsCheckBox->setText(tr("Include default permissions for Qt modules."));
@@ -459,7 +461,7 @@ void AndroidManifestEditorWidget::initializePage()
topLayout->addSpacerItem(new QSpacerItem(0, 0, QSizePolicy::Fixed, QSizePolicy::MinimumExpanding));
- QScrollArea *mainWidgetScrollArea = new QScrollArea;
+ auto mainWidgetScrollArea = new QScrollArea;
mainWidgetScrollArea->setWidgetResizable(true);
mainWidgetScrollArea->setWidget(mainWidget);
mainWidgetScrollArea->setFocusProxy(m_packageNameLineEdit);
@@ -605,9 +607,15 @@ void AndroidManifestEditorWidget::postSave()
ProjectExplorer::Project *project = androidProject(docPath);
if (project) {
if (Target *target = project->activeTarget()) {
- AndroidQtSupport *androidQtSupport = AndroidManager::androidQtSupport(target);
- if (androidQtSupport)
- androidQtSupport->manifestSaved(target);
+ if (BuildConfiguration *bc = target->activeBuildConfiguration()) {
+ QString androidNdkPlatform = AndroidConfigurations::currentConfig()
+ .bestNdkPlatformMatch(AndroidManager::minimumSDK(target));
+ if (m_androidNdkPlatform != androidNdkPlatform) {
+ m_androidNdkPlatform = androidNdkPlatform;
+ bc->updateCacheAndEmitEnvironmentChanged();
+ bc->regenerateBuildFiles(nullptr);
+ }
+ }
}
}
}
diff --git a/src/plugins/android/androidmanifesteditorwidget.h b/src/plugins/android/androidmanifesteditorwidget.h
index 59a879aa3c..a9d21e44a3 100644
--- a/src/plugins/android/androidmanifesteditorwidget.h
+++ b/src/plugins/android/androidmanifesteditorwidget.h
@@ -58,16 +58,16 @@ class PermissionsModel: public QAbstractListModel
{
Q_OBJECT
public:
- PermissionsModel(QObject *parent = 0 );
+ PermissionsModel(QObject *parent = nullptr);
void setPermissions(const QStringList &permissions);
const QStringList &permissions();
QModelIndex addPermission(const QString &permission);
bool updatePermission(const QModelIndex &index, const QString &permission);
void removePermission(int index);
- QVariant data(const QModelIndex &index, int role) const;
+ QVariant data(const QModelIndex &index, int role) const override;
protected:
- int rowCount(const QModelIndex &parent) const;
+ int rowCount(const QModelIndex &parent) const override;
private:
QStringList m_permissions;
@@ -77,7 +77,7 @@ class AndroidManifestTextEditorWidget : public TextEditor::TextEditorWidget
{
public:
explicit AndroidManifestTextEditorWidget(AndroidManifestEditorWidget *parent);
- ~AndroidManifestTextEditorWidget();
+ ~AndroidManifestTextEditorWidget() override;
private:
Core::IContext *m_context;
@@ -111,8 +111,8 @@ signals:
void guiChanged();
protected:
- bool eventFilter(QObject *obj, QEvent *event);
- void focusInEvent(QFocusEvent *event);
+ bool eventFilter(QObject *obj, QEvent *event) override;
+ void focusInEvent(QFocusEvent *event) override;
private:
void setLDPIIcon();
@@ -191,6 +191,7 @@ private:
QTimer m_timerParseCheck;
TextEditor::TextEditorWidget *m_textEditorWidget;
AndroidManifestEditor *m_editor;
+ QString m_androidNdkPlatform;
};
} // namespace Internal
} // namespace Android
diff --git a/src/plugins/android/androidpackageinstallationstep.cpp b/src/plugins/android/androidpackageinstallationstep.cpp
index fa69951e82..3148fbc42d 100644
--- a/src/plugins/android/androidpackageinstallationstep.cpp
+++ b/src/plugins/android/androidpackageinstallationstep.cpp
@@ -155,7 +155,7 @@ AndroidPackageInstallationFactory::AndroidPackageInstallationFactory()
setSupportedStepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
setSupportedDeviceType(Android::Constants::ANDROID_DEVICE_TYPE);
setRepeatable(false);
- setDisplayName(tr("Deploy to device"));
+ setDisplayName(AndroidPackageInstallationStep::tr("Deploy to device"));
}
} // namespace Internal
diff --git a/src/plugins/android/androidpackageinstallationstep.h b/src/plugins/android/androidpackageinstallationstep.h
index bf0a4653b8..40174ef1c6 100644
--- a/src/plugins/android/androidpackageinstallationstep.h
+++ b/src/plugins/android/androidpackageinstallationstep.h
@@ -68,8 +68,6 @@ private:
class AndroidPackageInstallationFactory: public ProjectExplorer::BuildStepFactory
{
- Q_OBJECT
-
public:
AndroidPackageInstallationFactory();
};
diff --git a/src/plugins/android/androidplugin.cpp b/src/plugins/android/androidplugin.cpp
index 3e5ace89e8..70d247476d 100644
--- a/src/plugins/android/androidplugin.cpp
+++ b/src/plugins/android/androidplugin.cpp
@@ -70,6 +70,10 @@ public:
registerRunConfiguration<Android::AndroidRunConfiguration>
("Qt4ProjectManager.AndroidRunConfiguration:");
addSupportedTargetDeviceType(Android::Constants::ANDROID_DEVICE_TYPE);
+ addRunWorkerFactory<AndroidRunSupport>(NORMAL_RUN_MODE);
+ addRunWorkerFactory<AndroidDebugSupport>(DEBUG_RUN_MODE);
+ addRunWorkerFactory<AndroidQmlToolingSupport>(QML_PROFILER_RUN_MODE);
+ addRunWorkerFactory<AndroidQmlToolingSupport>(QML_PREVIEW_RUN_MODE);
}
};
@@ -88,6 +92,7 @@ public:
AndroidPackageInstallationFactory packackeInstallationFactory;
AndroidManifestEditorFactory manifestEditorFactory;
AndroidRunConfigurationFactory runConfigFactory;
+ AndroidBuildApkStepFactory buildApkStepFactory;
};
AndroidPlugin::~AndroidPlugin()
@@ -100,16 +105,9 @@ bool AndroidPlugin::initialize(const QStringList &arguments, QString *errorMessa
Q_UNUSED(arguments);
Q_UNUSED(errorMessage);
- RunControl::registerWorker<AndroidRunConfiguration, AndroidRunSupport>(NORMAL_RUN_MODE);
- RunControl::registerWorker<AndroidRunConfiguration, AndroidDebugSupport>(DEBUG_RUN_MODE);
- RunControl::registerWorker<AndroidRunConfiguration, AndroidQmlToolingSupport>(
- QML_PROFILER_RUN_MODE);
- RunControl::registerWorker<AndroidRunConfiguration, AndroidQmlToolingSupport>(
- QML_PREVIEW_RUN_MODE);
-
RunControl::registerWorker(QML_PREVIEW_RUN_MODE, [](RunControl *runControl) -> RunWorker* {
const Runnable runnable = runControl->runConfiguration()->runnable();
- return new AndroidQmlToolingSupport(runControl, runnable.executable, runnable.commandLineArguments);
+ return new AndroidQmlToolingSupport(runControl, runnable.executable);
}, [](RunConfiguration *runConfig) {
return runConfig->isEnabled()
&& runConfig->id().name().startsWith("QmlProjectManager.QmlRunConfiguration")
@@ -119,7 +117,7 @@ bool AndroidPlugin::initialize(const QStringList &arguments, QString *errorMessa
d = new AndroidPluginPrivate;
- KitManager::registerKitInformation(new Internal::AndroidGdbServerKitInformation);
+ KitManager::registerKitInformation<Internal::AndroidGdbServerKitInformation>();
connect(KitManager::instance(), &KitManager::kitsLoaded,
this, &AndroidPlugin::kitsRestored);
@@ -132,7 +130,7 @@ void AndroidPlugin::kitsRestored()
AndroidConfigurations::updateAutomaticKitList();
connect(QtSupport::QtVersionManager::instance(), &QtSupport::QtVersionManager::qtVersionsChanged,
AndroidConfigurations::instance(), &AndroidConfigurations::updateAutomaticKitList);
- disconnect(KitManager::instance(), &KitManager::kitsChanged,
+ disconnect(KitManager::instance(), &KitManager::kitsLoaded,
this, &AndroidPlugin::kitsRestored);
}
diff --git a/src/plugins/android/androidqmltoolingsupport.cpp b/src/plugins/android/androidqmltoolingsupport.cpp
index d46311b2a4..001ad3d2d7 100644
--- a/src/plugins/android/androidqmltoolingsupport.cpp
+++ b/src/plugins/android/androidqmltoolingsupport.cpp
@@ -31,14 +31,13 @@ using namespace ProjectExplorer;
namespace Android {
namespace Internal {
-AndroidQmlToolingSupport::AndroidQmlToolingSupport(
- RunControl *runControl, const QString &intentName, const QString &extraAppParams,
- const Utils::Environment &extraEnvVars)
+AndroidQmlToolingSupport::AndroidQmlToolingSupport(RunControl *runControl,
+ const QString &intentName)
: RunWorker(runControl)
{
setDisplayName("AndroidQmlToolingSupport");
- auto runner = new AndroidRunner(runControl, intentName, extraAppParams, extraEnvVars);
+ auto runner = new AndroidRunner(runControl, intentName);
addStartDependency(runner);
auto profiler = runControl->createWorker(runControl->runMode());
diff --git a/src/plugins/android/androidqmltoolingsupport.h b/src/plugins/android/androidqmltoolingsupport.h
index 2d71ec48b3..5e1d00aa3b 100644
--- a/src/plugins/android/androidqmltoolingsupport.h
+++ b/src/plugins/android/androidqmltoolingsupport.h
@@ -36,10 +36,8 @@ class AndroidQmlToolingSupport : public ProjectExplorer::RunWorker
Q_OBJECT
public:
- explicit AndroidQmlToolingSupport(
- ProjectExplorer::RunControl *runControl, const QString &intentName = QString(),
- const QString &extraAppParams = QString(),
- const Utils::Environment &extraEnvVars = Utils::Environment());
+ explicit AndroidQmlToolingSupport(ProjectExplorer::RunControl *runControl,
+ const QString &intentName = QString());
private:
void start() override;
diff --git a/src/plugins/android/androidqtsupport.cpp b/src/plugins/android/androidqtsupport.cpp
deleted file mode 100644
index 012aa696e2..0000000000
--- a/src/plugins/android/androidqtsupport.cpp
+++ /dev/null
@@ -1,53 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 BogDan Vatra <bog_dan_ro@yahoo.com>
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of Qt Creator.
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-****************************************************************************/
-
-#include "androidbuildapkstep.h"
-#include "androidconstants.h"
-#include "androidglobal.h"
-#include "androidqtsupport.h"
-
-#include <projectexplorer/target.h>
-
-Utils::FileName Android::AndroidQtSupport::apkPath(const ProjectExplorer::Target *target) const
-{
- if (!target)
- return Utils::FileName();
-
- AndroidBuildApkStep *buildApkStep
- = Android::AndroidGlobal::buildStep<AndroidBuildApkStep>(target->activeBuildConfiguration());
-
- if (!buildApkStep)
- return Utils::FileName();
-
- QString apkPath("build/outputs/apk/android-build-");
- if (buildApkStep->signPackage())
- apkPath += QLatin1String("release.apk");
- else
- apkPath += QLatin1String("debug.apk");
-
- return target->activeBuildConfiguration()->buildDirectory()
- .appendPath(QLatin1String(Android::Constants::ANDROID_BUILDDIRECTORY))
- .appendPath(apkPath);
-}
diff --git a/src/plugins/android/androidqtsupport.h b/src/plugins/android/androidqtsupport.h
index ec5d569495..7b8c6bd2b8 100644
--- a/src/plugins/android/androidqtsupport.h
+++ b/src/plugins/android/androidqtsupport.h
@@ -27,19 +27,23 @@
#include "android_global.h"
+#include <coreplugin/id.h>
+
#include <QObject>
-#include <QList>
-namespace ProjectExplorer {
- class DeployConfiguration;
- class ProcessParameters;
- class Project;
- class Target;
-}
+namespace ProjectExplorer { class Target; }
namespace Utils { class FileName; }
namespace Android {
+namespace Constants {
+
+const char AndroidPackageSourceDir[] = "AndroidPackageSourceDir"; // QString
+const char AndroidDeploySettingsFile[] = "AndroidDeploySettingsFile"; // QString
+const char AndroidExtraLibs[] = "AndroidExtraLibs"; // QStringList
+const char AndroidArch[] = "AndroidArch"; // QString
+
+} // namespace Constants
class ANDROID_EXPORT AndroidQtSupport : public QObject
{
@@ -58,15 +62,19 @@ public:
virtual bool canHandle(const ProjectExplorer::Target *target) const = 0;
virtual QStringList soLibSearchPath(const ProjectExplorer::Target *target) const = 0;
- virtual QStringList androidExtraLibs(const ProjectExplorer::Target *target) const = 0;
virtual QStringList projectTargetApplications(const ProjectExplorer::Target *target) const = 0;
- virtual Utils::FileName apkPath(const ProjectExplorer::Target *target) const;
- virtual Utils::FileName androiddeployqtPath(const ProjectExplorer::Target *target) const = 0;
- virtual Utils::FileName androiddeployJsonPath(const ProjectExplorer::Target *target) const = 0;
- virtual void manifestSaved(const ProjectExplorer::Target *target) = 0;
- virtual Utils::FileName manifestSourcePath(const ProjectExplorer::Target *target) = 0;
- virtual QString deploySettingsFile(const ProjectExplorer::Target *target) const = 0;
- virtual Utils::FileName packageSourceDir(const ProjectExplorer::Target *target) const = 0;
+
+ virtual QVariant targetData(Core::Id role, const ProjectExplorer::Target *target) const = 0;
+ virtual bool setTargetData(Core::Id role, const QVariant &value,
+ const ProjectExplorer::Target *target) const = 0;
+
+ virtual bool parseInProgress(const ProjectExplorer::Target *target) const = 0;
+ virtual bool validParse(const ProjectExplorer::Target *target) const = 0;
+ virtual bool extraLibraryEnabled(const ProjectExplorer::Target *target) const = 0;
+ virtual Utils::FileName projectFilePath(const ProjectExplorer::Target *target) const = 0;
+
+ virtual void addFiles(const ProjectExplorer::Target *target, const QString &buildKey,
+ const QStringList &addedFiles) const = 0;
};
} // namespace Android
diff --git a/src/plugins/android/androidqtversion.h b/src/plugins/android/androidqtversion.h
index 865c31e65c..62bbd930c6 100644
--- a/src/plugins/android/androidqtversion.h
+++ b/src/plugins/android/androidqtversion.h
@@ -40,23 +40,23 @@ public:
AndroidQtVersion();
AndroidQtVersion(const Utils::FileName &path, bool isAutodetected = false, const QString &autodetectionSource = QString());
- AndroidQtVersion *clone() const;
- QString type() const;
- bool isValid() const;
- QString invalidReason() const;
+ AndroidQtVersion *clone() const override;
+ QString type() const override;
+ bool isValid() const override;
+ QString invalidReason() const override;
- QList<ProjectExplorer::Abi> detectQtAbis() const;
+ QList<ProjectExplorer::Abi> detectQtAbis() const override;
- void addToEnvironment(const ProjectExplorer::Kit *k, Utils::Environment &env) const;
- Utils::Environment qmakeRunEnvironment() const;
+ void addToEnvironment(const ProjectExplorer::Kit *k, Utils::Environment &env) const override;
+ Utils::Environment qmakeRunEnvironment() const override;
- QSet<Core::Id> availableFeatures() const;
- QSet<Core::Id> targetDeviceTypes() const;
+ QSet<Core::Id> availableFeatures() const override;
+ QSet<Core::Id> targetDeviceTypes() const override;
- QString description() const;
+ QString description() const override;
QString targetArch() const;
protected:
- virtual void parseMkSpec(ProFileEvaluator *) const;
+ void parseMkSpec(ProFileEvaluator *) const override;
private:
mutable QString m_targetArch;
};
diff --git a/src/plugins/android/androidqtversionfactory.cpp b/src/plugins/android/androidqtversionfactory.cpp
index 91ee664d95..00df010def 100644
--- a/src/plugins/android/androidqtversionfactory.cpp
+++ b/src/plugins/android/androidqtversionfactory.cpp
@@ -48,8 +48,8 @@ bool AndroidQtVersionFactory::canRestore(const QString &type)
QtSupport::BaseQtVersion *AndroidQtVersionFactory::restore(const QString &type,
const QVariantMap &data)
{
- QTC_ASSERT(canRestore(type), return 0);
- AndroidQtVersion *v = new AndroidQtVersion;
+ QTC_ASSERT(canRestore(type), return nullptr);
+ auto v = new AndroidQtVersion;
v->fromMap(data);
return v;
}
@@ -63,12 +63,12 @@ QtSupport::BaseQtVersion *AndroidQtVersionFactory::create(const Utils::FileName
{
QFileInfo fi = qmakePath.toFileInfo();
if (!fi.exists() || !fi.isExecutable() || !fi.isFile())
- return 0;
+ return nullptr;
if (!evaluator->values(QLatin1String("CONFIG")).contains(QLatin1String("android"))
&& evaluator->value(QLatin1String("QMAKE_PLATFORM")) != QLatin1String("android"))
- return 0;
+ return nullptr;
if (evaluator->values(QLatin1String("CONFIG")).contains(QLatin1String("android-no-sdk")))
- return 0;
+ return nullptr;
return new AndroidQtVersion(qmakePath, isAutoDetected, autoDetectionSource);
}
diff --git a/src/plugins/android/androidqtversionfactory.h b/src/plugins/android/androidqtversionfactory.h
index 8f551b9b86..92d2e44725 100644
--- a/src/plugins/android/androidqtversionfactory.h
+++ b/src/plugins/android/androidqtversionfactory.h
@@ -33,14 +33,14 @@ namespace Internal {
class AndroidQtVersionFactory : public QtSupport::QtVersionFactory
{
public:
- explicit AndroidQtVersionFactory(QObject *parent = 0);
+ explicit AndroidQtVersionFactory(QObject *parent = nullptr);
- bool canRestore(const QString &type);
- QtSupport::BaseQtVersion *restore(const QString &type, const QVariantMap &data);
+ bool canRestore(const QString &type) override;
+ QtSupport::BaseQtVersion *restore(const QString &type, const QVariantMap &data) override;
- int priority() const;
+ int priority() const override;
QtSupport::BaseQtVersion *create(const Utils::FileName &qmakePath, ProFileEvaluator *evaluator,
- bool isAutoDetected = false, const QString &autoDetectionSource = QString());
+ bool isAutoDetected = false, const QString &autoDetectionSource = QString()) override;
};
} // namespace Internal
diff --git a/src/plugins/android/androidrunconfiguration.cpp b/src/plugins/android/androidrunconfiguration.cpp
index 65505992fa..9948f69b5d 100644
--- a/src/plugins/android/androidrunconfiguration.cpp
+++ b/src/plugins/android/androidrunconfiguration.cpp
@@ -30,6 +30,7 @@
#include "androidtoolchain.h"
#include "androidmanager.h"
#include "adbcommandswidget.h"
+#include "androidrunenvironmentaspect.h"
#include <projectexplorer/kitinformation.h>
#include <projectexplorer/project.h>
@@ -110,6 +111,9 @@ void BaseStringListAspect::setLabel(const QString &label)
AndroidRunConfiguration::AndroidRunConfiguration(Target *target, Core::Id id)
: RunConfiguration(target, id)
{
+ addExtraAspect(new AndroidRunEnvironmentAspect(this));
+ addExtraAspect(new ArgumentsAspect(this));
+
auto amStartArgsAspect = new BaseStringAspect(this);
amStartArgsAspect->setId(Constants::ANDROID_AMSTARTARGS);
amStartArgsAspect->setSettingsKey("Android.AmStartArgsKey");
@@ -141,6 +145,7 @@ QWidget *AndroidRunConfiguration::createConfigurationWidget()
auto widget = new QWidget;
auto layout = new QFormLayout(widget);
+ extraAspect<ArgumentsAspect>()->addToConfigurationLayout(layout);
extraAspect(Constants::ANDROID_AMSTARTARGS)->addToConfigurationLayout(layout);
auto warningIconLabel = new QLabel;
@@ -151,6 +156,7 @@ QWidget *AndroidRunConfiguration::createConfigurationWidget()
extraAspect(Constants::ANDROID_PRESTARTSHELLCMDLIST)->addToConfigurationLayout(layout);
extraAspect(Constants::ANDROID_POSTFINISHSHELLCMDLIST)->addToConfigurationLayout(layout);
+ extraAspect<AndroidRunEnvironmentAspect>()->addToConfigurationLayout(layout);
auto wrapped = wrapWidget(widget);
auto detailsWidget = qobject_cast<DetailsWidget *>(wrapped);
diff --git a/src/plugins/android/androidruncontrol.cpp b/src/plugins/android/androidruncontrol.cpp
index 5c5f0e6a5e..9f6db54043 100644
--- a/src/plugins/android/androidruncontrol.cpp
+++ b/src/plugins/android/androidruncontrol.cpp
@@ -38,10 +38,8 @@ using namespace ProjectExplorer;
namespace Android {
namespace Internal {
-AndroidRunSupport::AndroidRunSupport(RunControl *runControl, const QString &intentName,
- const QString &extraAppParams,
- const Utils::Environment &extraEnvVars)
- : AndroidRunner(runControl, intentName, extraAppParams, extraEnvVars)
+AndroidRunSupport::AndroidRunSupport(RunControl *runControl, const QString &intentName)
+ : AndroidRunner(runControl, intentName)
{
runControl->setIcon(Utils::Icons::RUN_SMALL_TOOLBAR);
}
diff --git a/src/plugins/android/androidruncontrol.h b/src/plugins/android/androidruncontrol.h
index 974367929b..3fa963812e 100644
--- a/src/plugins/android/androidruncontrol.h
+++ b/src/plugins/android/androidruncontrol.h
@@ -40,9 +40,7 @@ class AndroidRunSupport : public AndroidRunner
public:
explicit AndroidRunSupport(ProjectExplorer::RunControl *runControl,
- const QString &intentName = QString(),
- const QString &extraAppParams = QString(),
- const Utils::Environment &extraEnvVars = Utils::Environment());
+ const QString &intentName = QString());
~AndroidRunSupport() override;
void start() override;
diff --git a/src/plugins/android/androidrunenvironmentaspect.cpp b/src/plugins/android/androidrunenvironmentaspect.cpp
new file mode 100644
index 0000000000..d2949de6b9
--- /dev/null
+++ b/src/plugins/android/androidrunenvironmentaspect.cpp
@@ -0,0 +1,48 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+#include "androidrunenvironmentaspect.h"
+
+namespace {
+enum BaseEnvironmentBase {
+ CleanEnvironmentBase
+};
+}
+
+namespace Android {
+
+AndroidRunEnvironmentAspect::AndroidRunEnvironmentAspect(ProjectExplorer::RunConfiguration *rc) :
+ ProjectExplorer::EnvironmentAspect (rc)
+{
+ addSupportedBaseEnvironment(CleanEnvironmentBase, tr("Clean Environment"));
+}
+
+Utils::Environment AndroidRunEnvironmentAspect::baseEnvironment() const
+{
+ // Clean Environment
+ return Utils::Environment();
+}
+
+} // namespace Android
+
diff --git a/src/plugins/resourceeditor/qrceditor/test/mainwindow.h b/src/plugins/android/androidrunenvironmentaspect.h
index d47b43e374..2b91bfafa1 100644
--- a/src/plugins/resourceeditor/qrceditor/test/mainwindow.h
+++ b/src/plugins/android/androidrunenvironmentaspect.h
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2018 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
@@ -22,23 +22,21 @@
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
-
#pragma once
-#include <QMainWindow>
+#include <projectexplorer/environmentaspect.h>
-namespace SharedTools { class QrcEditor; }
+namespace Android {
-class MainWindow : public QMainWindow
+class AndroidRunEnvironmentAspect : public ProjectExplorer::EnvironmentAspect
{
Q_OBJECT
public:
- MainWindow();
-
-private:
- void slotOpen();
- void slotSave();
+ AndroidRunEnvironmentAspect(ProjectExplorer::RunConfiguration *rc);
- SharedTools::QrcEditor *m_qrcEditor;
+ Utils::Environment baseEnvironment() const override;
};
+
+} // namespace Android
+
diff --git a/src/plugins/android/androidrunner.cpp b/src/plugins/android/androidrunner.cpp
index 06475a3118..a70c9f04dc 100644
--- a/src/plugins/android/androidrunner.cpp
+++ b/src/plugins/android/androidrunner.cpp
@@ -42,6 +42,12 @@
#include <projectexplorer/target.h>
#include <utils/url.h>
+#include <QLoggingCategory>
+
+namespace {
+Q_LOGGING_CATEGORY(androidRunnerLog, "qtc.android.run.androidrunner")
+}
+
using namespace ProjectExplorer;
using namespace Utils;
@@ -112,10 +118,7 @@ using namespace Utils;
namespace Android {
namespace Internal {
-AndroidRunner::AndroidRunner(RunControl *runControl,
- const QString &intentName,
- const QString &extraAppParams,
- const Utils::Environment &extraEnvVars)
+AndroidRunner::AndroidRunner(RunControl *runControl, const QString &intentName)
: RunWorker(runControl), m_target(runControl->runConfiguration()->target())
{
setDisplayName("AndroidRunner");
@@ -131,13 +134,14 @@ AndroidRunner::AndroidRunner(RunControl *runControl,
QString intent = intentName.isEmpty() ? AndroidManager::intentName(m_target) : intentName;
m_packageName = intent.left(intent.indexOf('/'));
+ qCDebug(androidRunnerLog) << "Intent name:" << intent << "Package name" << m_packageName;
const int apiLevel = AndroidManager::deviceApiLevel(m_target);
+ qCDebug(androidRunnerLog) << "Device API:" << apiLevel;
+
m_worker.reset(new AndroidRunnerWorker(this, m_packageName));
m_worker->setIntentName(intent);
m_worker->setIsPreNougat(apiLevel <= 23);
- m_worker->setExtraAppParams(extraAppParams);
- m_worker->setExtraEnvVars(extraEnvVars);
m_worker->moveToThread(&m_thread);
@@ -169,7 +173,7 @@ AndroidRunner::~AndroidRunner()
void AndroidRunner::start()
{
if (!ProjectExplorerPlugin::projectExplorerSettings().deployBeforeRun) {
- // User choose to run the app without deployment. Start the AVD if not running.
+ qCDebug(androidRunnerLog) << "Run without deployment";
launchAVD();
if (!m_launchedAVDName.isEmpty()) {
m_checkAVDTimer.start();
@@ -201,6 +205,7 @@ void AndroidRunner::qmlServerPortReady(Port port)
serverUrl.setHost(QHostAddress(QHostAddress::LocalHost).toString());
serverUrl.setPort(port.number());
serverUrl.setScheme(urlTcpScheme());
+ qCDebug(androidRunnerLog) << "Qml Server port ready"<< serverUrl;
emit qmlServerReady(serverUrl);
}
diff --git a/src/plugins/android/androidrunner.h b/src/plugins/android/androidrunner.h
index c1cd170c68..d56b59c001 100644
--- a/src/plugins/android/androidrunner.h
+++ b/src/plugins/android/androidrunner.h
@@ -50,9 +50,7 @@ class AndroidRunner : public ProjectExplorer::RunWorker
public:
explicit AndroidRunner(ProjectExplorer::RunControl *runControl,
- const QString &intentName = QString(),
- const QString &extraAppParams = QString(),
- const Utils::Environment &extraEnvVars = Utils::Environment());
+ const QString &intentName = QString());
~AndroidRunner() override;
Utils::Port gdbServerPort() const { return m_gdbServerPort; }
diff --git a/src/plugins/android/androidrunnerworker.cpp b/src/plugins/android/androidrunnerworker.cpp
index 39239bf642..3015f3f28d 100644
--- a/src/plugins/android/androidrunnerworker.cpp
+++ b/src/plugins/android/androidrunnerworker.cpp
@@ -31,6 +31,8 @@
#include "androidrunconfiguration.h"
#include <debugger/debuggerrunconfigurationaspect.h>
+#include <projectexplorer/environmentaspect.h>
+#include <projectexplorer/runconfigurationaspects.h>
#include <projectexplorer/target.h>
#include <qtsupport/baseqtversion.h>
#include <qtsupport/qtkitinformation.h>
@@ -38,13 +40,19 @@
#include <utils/runextensions.h>
#include <utils/synchronousprocess.h>
#include <utils/temporaryfile.h>
+#include <utils/qtcprocess.h>
#include <utils/url.h>
+#include <QLoggingCategory>
#include <QTcpServer>
#include <QThread>
#include <chrono>
+namespace {
+Q_LOGGING_CATEGORY(androidRunWorkerLog, "qtc.android.run.androidrunnerworker")
+}
+
using namespace std;
using namespace std::placeholders;
using namespace ProjectExplorer;
@@ -105,6 +113,7 @@ static void findProcessPID(QFutureInterface<qint64> &fi, const QString &adbPath,
QStringList selector, const QString &packageName,
bool preNougat)
{
+ qCDebug(androidRunWorkerLog) << "Finding PID. PreNougat:" << preNougat;
if (packageName.isEmpty())
return;
@@ -125,17 +134,20 @@ static void findProcessPID(QFutureInterface<qint64> &fi, const QString &adbPath,
}
} while (processPID == -1 && !isTimedOut(start) && !fi.isCanceled());
+ qCDebug(androidRunWorkerLog) << "PID found:" << processPID;
if (!fi.isCanceled())
fi.reportResult(processPID);
}
static void deleter(QProcess *p)
{
+ qCDebug(androidRunWorkerLog) << "Killing process:" << p->objectName();
p->terminate();
if (!p->waitForFinished(1000)) {
p->kill();
p->waitForFinished();
}
+ qCDebug(androidRunWorkerLog) << "Done killing process:" << p->objectName();
// Might get deleted from its own signal handler.
p->deleteLater();
}
@@ -165,12 +177,14 @@ AndroidRunnerWorker::AndroidRunnerWorker(RunWorker *runner, const QString &packa
m_localGdbServerPort = Utils::Port(5039);
QTC_CHECK(m_localGdbServerPort.isValid());
if (m_qmlDebugServices != QmlDebug::NoQmlDebugServices) {
+ qCDebug(androidRunWorkerLog) << "QML debugging enabled";
QTcpServer server;
QTC_ASSERT(server.listen(QHostAddress::LocalHost),
qDebug() << tr("No free ports available on host for QML debugging."));
m_qmlServer.setScheme(Utils::urlTcpScheme());
m_qmlServer.setHost(server.serverAddress().toString());
m_qmlServer.setPort(server.serverPort());
+ qCDebug(androidRunWorkerLog) << "QML server:" << m_qmlServer.toDisplayString();
}
m_adb = AndroidConfigurations::currentConfig().adbToolPath().toString();
m_localJdbServerPort = Utils::Port(5038);
@@ -180,6 +194,12 @@ AndroidRunnerWorker::AndroidRunnerWorker(RunWorker *runner, const QString &packa
m_deviceSerialNumber = AndroidManager::deviceSerialNumber(target);
m_apiLevel = AndroidManager::deviceApiLevel(target);
+ m_extraEnvVars = runConfig->extraAspect<EnvironmentAspect>()->environment();
+ qCDebug(androidRunWorkerLog) << "Environment variables for the app"
+ << m_extraEnvVars.toStringList();
+
+ m_extraAppParams = runConfig->runnable().commandLineArguments;
+
if (auto aspect = runConfig->extraAspect(Constants::ANDROID_AMSTARTARGS))
m_amStartExtraArgs = static_cast<BaseStringAspect *>(aspect)->value().split(' ');
@@ -196,6 +216,12 @@ AndroidRunnerWorker::AndroidRunnerWorker(RunWorker *runner, const QString &packa
}
for (const QString &shellCmd : runner->recordedData(Constants::ANDROID_POSTFINISHSHELLCMDLIST).toStringList())
m_afterFinishAdbCommands.append(QString("shell %1").arg(shellCmd));
+
+ qCDebug(androidRunWorkerLog) << "Device Serial:" << m_deviceSerialNumber
+ << "API level:" << m_apiLevel
+ << "Extra Start Args:" << m_amStartExtraArgs
+ << "Before Start ADB cmds:" << m_beforeStartAdbCommands
+ << "After finish ADB cmds:" << m_afterFinishAdbCommands;
}
AndroidRunnerWorker::~AndroidRunnerWorker()
@@ -231,12 +257,16 @@ bool AndroidRunnerWorker::adbShellAmNeedsQuotes()
bool AndroidRunnerWorker::runAdb(const QStringList &args, int timeoutS)
{
+ QStringList adbArgs = selector() + args;
+ qCDebug(androidRunWorkerLog) << "ADB command: " << m_adb << adbArgs.join(' ');
Utils::SynchronousProcess adb;
adb.setTimeoutS(timeoutS);
- Utils::SynchronousProcessResponse response = adb.run(m_adb, selector() + args);
+ Utils::SynchronousProcessResponse response = adb.run(m_adb, adbArgs);
m_lastRunAdbError = response.exitMessage(m_adb, timeoutS);
m_lastRunAdbRawOutput = response.allRawOutput();
- return response.result == Utils::SynchronousProcessResponse::Finished;
+ bool success = response.result == Utils::SynchronousProcessResponse::Finished;
+ qCDebug(androidRunWorkerLog) << "ADB command result:" << success << response.allRawOutput();
+ return success;
}
void AndroidRunnerWorker::adbKill(qint64 pid)
@@ -342,6 +372,8 @@ void AndroidRunnerWorker::setAndroidDeviceInfo(const AndroidDeviceInfo &info)
{
m_deviceSerialNumber = info.serialNumber;
m_apiLevel = info.sdk;
+ qCDebug(androidRunWorkerLog) << "Android Device Info changed"
+ << m_deviceSerialNumber << m_apiLevel;
}
void AndroidRunnerWorker::asyncStartHelper()
@@ -358,7 +390,7 @@ void AndroidRunnerWorker::asyncStartHelper()
logcatProcess->start(m_adb, selector() << "logcat");
QTC_ASSERT(!m_adbLogcatProcess, /**/);
m_adbLogcatProcess = std::move(logcatProcess);
-
+ m_adbLogcatProcess->setObjectName("AdbLogcatProcess");
for (const QString &entry : m_beforeStartAdbCommands)
runAdb(entry.split(' ', QString::SkipEmptyParts));
@@ -367,13 +399,16 @@ void AndroidRunnerWorker::asyncStartHelper()
args << "-n" << m_intentName;
if (m_useCppDebugger) {
args << "-D";
- QString gdbServerSocket;
// run-as <package-name> pwd fails on API 22 so route the pwd through shell.
if (!runAdb({"shell", "run-as", m_packageName, "/system/bin/sh", "-c", "pwd"})) {
emit remoteProcessFinished(tr("Failed to get process path. Reason: %1.").arg(m_lastRunAdbError));
return;
}
- gdbServerSocket = QString::fromUtf8(m_lastRunAdbRawOutput.trimmed()) + "/debug-socket";
+
+ QString packageDir = QString::fromUtf8(m_lastRunAdbRawOutput.trimmed());
+ // Add executable flag to package dir. Gdb can't connect to running server on device on
+ // e.g. on Android 8 with NDK 10e
+ runAdb({"shell", "run-as", m_packageName, "chmod", "a+x", packageDir});
QString gdbServerExecutable;
if (!runAdb({"shell", "run-as", m_packageName, "ls", "lib/"})) {
@@ -393,6 +428,7 @@ void AndroidRunnerWorker::asyncStartHelper()
return;
}
+ QString gdbServerSocket = packageDir + "/debug-socket";
runAdb({"shell", "run-as", m_packageName, "killall", gdbServerExecutable});
runAdb({"shell", "run-as", m_packageName, "rm", gdbServerSocket});
std::unique_ptr<QProcess, Deleter> gdbServerProcess(new QProcess, deleter);
@@ -404,6 +440,7 @@ void AndroidRunnerWorker::asyncStartHelper()
return;
}
m_gdbServerProcess = std::move(gdbServerProcess);
+ m_gdbServerProcess->setObjectName("GdbServerProcess");
QStringList removeForward{"forward", "--remove", "tcp:" + m_localGdbServerPort.toString()};
runAdb(removeForward);
if (!runAdb({"forward", "tcp:" + m_localGdbServerPort.toString(),
@@ -432,9 +469,13 @@ void AndroidRunnerWorker::asyncStartHelper()
.arg(m_qmlServer.port()).arg(QmlDebug::qmlDebugServices(m_qmlDebugServices));
}
+
if (!m_extraAppParams.isEmpty()) {
+ QStringList appArgs =
+ Utils::QtcProcess::splitArgs(m_extraAppParams, Utils::OsType::OsTypeLinux);
+ qCDebug(androidRunWorkerLog) << "Using application arguments: " << appArgs;
args << "-e" << "extraappparams"
- << QString::fromLatin1(m_extraAppParams.toUtf8().toBase64());
+ << QString::fromLatin1(appArgs.join(' ').toUtf8().toBase64());
}
if (m_extraEnvVars.size() > 0) {
@@ -488,20 +529,24 @@ void AndroidRunnerWorker::handleJdbWaiting()
else
jdbPath.appendPath("jdb");
+ QStringList jdbArgs("-connect");
+ jdbArgs << QString("com.sun.jdi.SocketAttach:hostname=localhost,port=%1")
+ .arg(m_localJdbServerPort.toString());
+ qCDebug(androidRunWorkerLog) << "Starting JDB:" << jdbPath << jdbArgs.join(' ');
std::unique_ptr<QProcess, Deleter> jdbProcess(new QProcess, &deleter);
jdbProcess->setProcessChannelMode(QProcess::MergedChannels);
- jdbProcess->start(jdbPath.toString(), QStringList() << "-connect" <<
- QString("com.sun.jdi.SocketAttach:hostname=localhost,port=%1")
- .arg(m_localJdbServerPort.toString()));
+ jdbProcess->start(jdbPath.toString(), jdbArgs);
if (!jdbProcess->waitForStarted()) {
- emit remoteProcessFinished(tr("Failed to start jdb"));
+ emit remoteProcessFinished(tr("Failed to start jdb."));
return;
}
m_jdbProcess = std::move(jdbProcess);
+ m_jdbProcess->setObjectName("JdbProcess");
}
void AndroidRunnerWorker::handleJdbSettled()
{
+ qCDebug(androidRunWorkerLog) << "Handle JDB settled";
auto waitForCommand = [&]() {
for (int i= 0; i < 5 && m_jdbProcess->state() == QProcess::Running; ++i) {
m_jdbProcess->waitForReadyRead(500);
@@ -522,21 +567,26 @@ void AndroidRunnerWorker::handleJdbSettled()
if (!m_jdbProcess->waitForFinished(5000)) {
m_jdbProcess->terminate();
if (!m_jdbProcess->waitForFinished(5000)) {
+ qCDebug(androidRunWorkerLog) << "Killing JDB process";
m_jdbProcess->kill();
m_jdbProcess->waitForFinished();
}
} else if (m_jdbProcess->exitStatus() == QProcess::NormalExit && m_jdbProcess->exitCode() == 0) {
+ qCDebug(androidRunWorkerLog) << "JDB settled";
return;
}
}
}
- emit remoteProcessFinished(tr("Cannot attach jdb to the running application").arg(m_lastRunAdbError));
+ emit remoteProcessFinished(tr("Cannot attach jdb to the running application. Reason: %1.")
+ .arg(m_lastRunAdbError));
}
void AndroidRunnerWorker::onProcessIdChanged(qint64 pid)
{
// Don't write to m_psProc from a different thread
QTC_ASSERT(QThread::currentThread() == thread(), return);
+ qCDebug(androidRunWorkerLog) << "Process ID changed from:" << m_processPID
+ << "to:" << pid;
m_processPID = pid;
if (pid == -1) {
emit remoteProcessFinished(QLatin1String("\n\n") + tr("\"%1\" died.")
@@ -557,6 +607,7 @@ void AndroidRunnerWorker::onProcessIdChanged(qint64 pid)
logcatReadStandardOutput();
QTC_ASSERT(!m_psIsAlive, /**/);
m_psIsAlive.reset(new QProcess);
+ m_psIsAlive->setObjectName("IsAliveProcess");
m_psIsAlive->setProcessChannelMode(QProcess::MergedChannels);
connect(m_psIsAlive.get(), static_cast<void(QProcess::*)(int)>(&QProcess::finished),
this, bind(&AndroidRunnerWorker::onProcessIdChanged, this, -1));
@@ -565,16 +616,5 @@ void AndroidRunnerWorker::onProcessIdChanged(qint64 pid)
}
}
-void AndroidRunnerWorker::setExtraEnvVars(const Utils::Environment &extraEnvVars)
-{
- m_extraEnvVars = extraEnvVars;
-}
-
-void AndroidRunnerWorker::setExtraAppParams(const QString &extraAppParams)
-{
- m_extraAppParams = extraAppParams;
-}
-
-
} // namespace Internal
} // namespace Android
diff --git a/src/plugins/android/androidrunnerworker.h b/src/plugins/android/androidrunnerworker.h
index e34207bf03..c9714724cc 100644
--- a/src/plugins/android/androidrunnerworker.h
+++ b/src/plugins/android/androidrunnerworker.h
@@ -55,8 +55,6 @@ public:
void logcatReadStandardOutput();
void logcatProcess(const QByteArray &text, QByteArray &buffer, bool onlyError);
void setAndroidDeviceInfo(const AndroidDeviceInfo &info);
- void setExtraEnvVars(const Utils::Environment &extraEnvVars);
- void setExtraAppParams(const QString &extraAppParams);
void setIsPreNougat(bool isPreNougat) { m_isPreNougat = isPreNougat; }
void setIntentName(const QString &intentName) { m_intentName = intentName; }
diff --git a/src/plugins/android/androidsdkmanager.cpp b/src/plugins/android/androidsdkmanager.cpp
index 846fe9bdd9..5cd9ebdd85 100644
--- a/src/plugins/android/androidsdkmanager.cpp
+++ b/src/plugins/android/androidsdkmanager.cpp
@@ -313,7 +313,7 @@ SdkPlatformList AndroidSdkManager::installedSdkPlatforms()
{
AndroidSdkPackageList list = m_d->filteredPackages(AndroidSdkPackage::Installed,
AndroidSdkPackage::SdkPlatformPackage);
- return Utils::qobject_container_cast<SdkPlatform *>(list);
+ return Utils::static_container_cast<SdkPlatform *>(list);
}
const AndroidSdkPackageList &AndroidSdkManager::allSdkPackages()
@@ -514,7 +514,7 @@ void SdkManagerOutputParser::compilePackageAssociations()
return platform && platform->apiLevel() == imageApi;
});
if (itr != m_packages.end()) {
- SdkPlatform *platform = static_cast<SdkPlatform*>(*itr);
+ auto platform = static_cast<SdkPlatform*>(*itr);
platform->addSystemImage(static_cast<SystemImage *>(image));
}
}
diff --git a/src/plugins/android/androidsdkmanager.h b/src/plugins/android/androidsdkmanager.h
index fa15002cd2..4ef83e0a07 100644
--- a/src/plugins/android/androidsdkmanager.h
+++ b/src/plugins/android/androidsdkmanager.h
@@ -62,7 +62,7 @@ public:
};
AndroidSdkManager(const AndroidConfig &config, QObject *parent = nullptr);
- ~AndroidSdkManager();
+ ~AndroidSdkManager() override;
SdkPlatformList installedSdkPlatforms();
const AndroidSdkPackageList &allSdkPackages();
diff --git a/src/plugins/android/androidsdkmanagerwidget.h b/src/plugins/android/androidsdkmanagerwidget.h
index 0d6a930ac1..7ef83d31f4 100644
--- a/src/plugins/android/androidsdkmanagerwidget.h
+++ b/src/plugins/android/androidsdkmanagerwidget.h
@@ -55,7 +55,7 @@ class OptionsDialog : public QDialog
public:
OptionsDialog(AndroidSdkManager *sdkManager, const QStringList &args,
QWidget *parent = nullptr);
- ~OptionsDialog();
+ ~OptionsDialog() override;
QStringList sdkManagerArguments() const;
@@ -78,7 +78,7 @@ class AndroidSdkManagerWidget : public QWidget
public:
AndroidSdkManagerWidget(AndroidConfig &config, AndroidSdkManager *sdkManager,
QWidget *parent = nullptr);
- ~AndroidSdkManagerWidget();
+ ~AndroidSdkManagerWidget() override;
void setSdkManagerControlsEnabled(bool enable);
void installEssentials();
diff --git a/src/plugins/android/androidsdkmodel.h b/src/plugins/android/androidsdkmodel.h
index 8c36b442ef..b7f89f7997 100644
--- a/src/plugins/android/androidsdkmodel.h
+++ b/src/plugins/android/androidsdkmodel.h
@@ -52,7 +52,7 @@ public:
};
explicit AndroidSdkModel(const AndroidConfig &config, AndroidSdkManager *sdkManager,
- QObject *parent = 0);
+ QObject *parent = nullptr);
// QAbstractItemModel overrides.
QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
diff --git a/src/plugins/android/androidsdkpackage.cpp b/src/plugins/android/androidsdkpackage.cpp
index 94b7a2b87b..7451fef7f0 100644
--- a/src/plugins/android/androidsdkpackage.cpp
+++ b/src/plugins/android/androidsdkpackage.cpp
@@ -164,7 +164,7 @@ bool SdkPlatform::operator <(const AndroidSdkPackage &other) const
if (typeid(*this) != typeid(other))
return AndroidSdkPackage::operator <(other);
- const SdkPlatform &platform = static_cast<const SdkPlatform &>(other);
+ const auto &platform = static_cast<const SdkPlatform &>(other);
if (platform.m_apiLevel == m_apiLevel)
return AndroidSdkPackage::operator <(other);
diff --git a/src/plugins/android/androidsdkpackage.h b/src/plugins/android/androidsdkpackage.h
index 014ba078ae..0a209c38bf 100644
--- a/src/plugins/android/androidsdkpackage.h
+++ b/src/plugins/android/androidsdkpackage.h
@@ -65,7 +65,7 @@ public:
};
AndroidSdkPackage(QVersionNumber revision, QString sdkStylePathStr, QObject *parent = nullptr);
- ~AndroidSdkPackage() override { }
+ ~AndroidSdkPackage() override = default;
virtual bool isValid() const = 0;
virtual PackageType type() const = 0;
diff --git a/src/plugins/android/androidsettingspage.h b/src/plugins/android/androidsettingspage.h
index 1330721dbf..274653f940 100644
--- a/src/plugins/android/androidsettingspage.h
+++ b/src/plugins/android/androidsettingspage.h
@@ -39,11 +39,11 @@ class AndroidSettingsPage : public Core::IOptionsPage
Q_OBJECT
public:
- explicit AndroidSettingsPage(QObject *parent = 0);
+ explicit AndroidSettingsPage(QObject *parent = nullptr);
- QWidget *widget();
- void apply();
- void finish();
+ QWidget *widget() override;
+ void apply() override;
+ void finish() override;
private:
QPointer<AndroidSettingsWidget> m_widget;
diff --git a/src/plugins/android/androidsettingswidget.cpp b/src/plugins/android/androidsettingswidget.cpp
index a198cc3ceb..807cc3c732 100644
--- a/src/plugins/android/androidsettingswidget.cpp
+++ b/src/plugins/android/androidsettingswidget.cpp
@@ -564,7 +564,7 @@ void AndroidSettingsWidget::checkMissingQtVersion()
m_ui->kitWarningDetails->setVisible(isArchMissing);
if (isArchMissing) {
m_ui->kitWarningDetails->setSummaryText(tr("Cannot create kits for all architectures."));
- QLabel *detailsLabel = static_cast<QLabel *>(m_ui->kitWarningDetails->widget());
+ auto detailsLabel = static_cast<QLabel *>(m_ui->kitWarningDetails->widget());
QStringList archNames;
for (auto abi : missingQtArchs)
archNames << abi.toString();
diff --git a/src/plugins/android/androidsettingswidget.h b/src/plugins/android/androidsettingswidget.h
index 8e22f511fa..d94086af97 100644
--- a/src/plugins/android/androidsettingswidget.h
+++ b/src/plugins/android/androidsettingswidget.h
@@ -55,10 +55,10 @@ public:
QModelIndex indexForAvdName(const QString &avdName) const;
protected:
- QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
- QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
- int rowCount(const QModelIndex &parent = QModelIndex()) const;
- int columnCount(const QModelIndex &parent = QModelIndex()) const;
+ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
+ QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
+ int rowCount(const QModelIndex &parent = QModelIndex()) const override;
+ int columnCount(const QModelIndex &parent = QModelIndex()) const override;
private:
AndroidDeviceInfoList m_list;
@@ -69,8 +69,8 @@ class AndroidSettingsWidget : public QWidget
Q_OBJECT
public:
// Todo: This would be so much simpler if it just used Utils::PathChooser!!!
- AndroidSettingsWidget(QWidget *parent = 0);
- ~AndroidSettingsWidget();
+ AndroidSettingsWidget(QWidget *parent = nullptr);
+ ~AndroidSettingsWidget() override;
void saveSettings();
diff --git a/src/plugins/android/androidsignaloperation.h b/src/plugins/android/androidsignaloperation.h
index af82bdbd4b..f3d9145cce 100644
--- a/src/plugins/android/androidsignaloperation.h
+++ b/src/plugins/android/androidsignaloperation.h
@@ -38,11 +38,11 @@ class AndroidSignalOperation : public ProjectExplorer::DeviceProcessSignalOperat
{
Q_OBJECT
public:
- ~AndroidSignalOperation() {}
- void killProcess(qint64 pid);
- void killProcess(const QString &filePath);
- void interruptProcess(qint64 pid);
- void interruptProcess(const QString &filePath);
+ ~AndroidSignalOperation() override = default;
+ void killProcess(qint64 pid) override;
+ void killProcess(const QString &filePath) override;
+ void interruptProcess(qint64 pid) override;
+ void interruptProcess(const QString &filePath) override;
protected:
explicit AndroidSignalOperation();
diff --git a/src/plugins/android/androidtoolchain.cpp b/src/plugins/android/androidtoolchain.cpp
index ffdef58e9d..f8d0535c7e 100644
--- a/src/plugins/android/androidtoolchain.cpp
+++ b/src/plugins/android/androidtoolchain.cpp
@@ -84,13 +84,9 @@ AndroidToolChain::AndroidToolChain()
{
}
-AndroidToolChain::AndroidToolChain(const AndroidToolChain &tc) :
- GccToolChain(tc), m_ndkToolChainVersion(tc.m_ndkToolChainVersion),
- m_secondaryToolChain(tc.m_secondaryToolChain)
-{ }
+AndroidToolChain::AndroidToolChain(const AndroidToolChain &tc) = default;
-AndroidToolChain::~AndroidToolChain()
-{ }
+AndroidToolChain::~AndroidToolChain() = default;
static QString getArch(const QString &triple)
{
@@ -342,12 +338,12 @@ bool AndroidToolChainFactory::canRestore(const QVariantMap &data)
ToolChain *AndroidToolChainFactory::restore(const QVariantMap &data)
{
- AndroidToolChain *tc = new AndroidToolChain();
+ auto tc = new AndroidToolChain();
if (tc->fromMap(data))
return tc;
delete tc;
- return 0;
+ return nullptr;
}
QList<AndroidToolChainFactory::AndroidToolChainInformation> AndroidToolChainFactory::toolchainPathsForNdk(const FileName &ndkPath)
@@ -490,7 +486,7 @@ AndroidToolChainFactory::autodetectToolChainsForNdk(const FileName &ndkPath,
}
foreach (ToolChain *tc, result) {
- AndroidToolChain *atc = static_cast<AndroidToolChain *>(tc);
+ auto atc = static_cast<AndroidToolChain *>(tc);
atc->setSecondaryToolChain(!newestToolChainForArch.value(atc->targetAbi()).contains(atc));
}
diff --git a/src/plugins/android/androidtoolmanager.cpp b/src/plugins/android/androidtoolmanager.cpp
index c50124ce2c..c36480a3c3 100644
--- a/src/plugins/android/androidtoolmanager.cpp
+++ b/src/plugins/android/androidtoolmanager.cpp
@@ -92,10 +92,7 @@ AndroidToolManager::AndroidToolManager(const AndroidConfig &config) :
}
-AndroidToolManager::~AndroidToolManager()
-{
-
-}
+AndroidToolManager::~AndroidToolManager() = default;
SdkPlatformList AndroidToolManager::availableSdkPlatforms(bool *ok) const
{
diff --git a/src/plugins/android/avddialog.cpp b/src/plugins/android/avddialog.cpp
index 702b2120d7..7097f5c1c6 100644
--- a/src/plugins/android/avddialog.cpp
+++ b/src/plugins/android/avddialog.cpp
@@ -57,7 +57,7 @@ AvdDialog::AvdDialog(int minApiLevel, AndroidSdkManager *sdkManager, const QStri
m_avdDialog.abiComboBox->addItems(QStringList(targetArch));
}
- QRegExpValidator *v = new QRegExpValidator(m_allowedNameChars, this);
+ auto v = new QRegExpValidator(m_allowedNameChars, this);
m_avdDialog.nameLineEdit->setValidator(v);
m_avdDialog.nameLineEdit->installEventFilter(this);
@@ -155,7 +155,7 @@ void AvdDialog::updateApiLevelComboBox()
bool AvdDialog::eventFilter(QObject *obj, QEvent *event)
{
if (obj == m_avdDialog.nameLineEdit && event->type() == QEvent::KeyPress) {
- QKeyEvent *ke = static_cast<QKeyEvent *>(event);
+ auto ke = static_cast<QKeyEvent *>(event);
const QString key = ke->text();
if (!key.isEmpty() && !m_allowedNameChars.exactMatch(key)) {
QPoint position = m_avdDialog.nameLineEdit->parentWidget()->mapToGlobal(m_avdDialog.nameLineEdit->geometry().bottomLeft());
diff --git a/src/plugins/android/avddialog.h b/src/plugins/android/avddialog.h
index 8a30b613c6..d0e3fe0324 100644
--- a/src/plugins/android/avddialog.h
+++ b/src/plugins/android/avddialog.h
@@ -41,7 +41,7 @@ class AvdDialog : public QDialog
Q_OBJECT
public:
explicit AvdDialog(int minApiLevel, AndroidSdkManager *sdkManager, const QString &targetArch,
- QWidget *parent = 0);
+ QWidget *parent = nullptr);
const SdkPlatform *sdkPlatform() const;
QString name() const;
@@ -53,7 +53,7 @@ public:
private:
void updateApiLevelComboBox();
- bool eventFilter(QObject *obj, QEvent *event);
+ bool eventFilter(QObject *obj, QEvent *event) override;
Ui::AddNewAVDDialog m_avdDialog;
AndroidSdkManager *m_sdkManager;
diff --git a/src/plugins/android/certificatesmodel.h b/src/plugins/android/certificatesmodel.h
index 57c0a6ab43..7463394e66 100644
--- a/src/plugins/android/certificatesmodel.h
+++ b/src/plugins/android/certificatesmodel.h
@@ -39,9 +39,9 @@ public:
CertificatesModel(const QString &rowCertificates, QObject *parent);
protected:
- int rowCount(const QModelIndex &parent = QModelIndex()) const;
+ int rowCount(const QModelIndex &parent = QModelIndex()) const override;
- QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
+ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
private:
QVector<QPair<QString, QString> > m_certs;
diff --git a/src/plugins/qmakeandroidsupport/createandroidmanifestwizard.cpp b/src/plugins/android/createandroidmanifestwizard.cpp
index c49dd76f6c..01b167342b 100644
--- a/src/plugins/qmakeandroidsupport/createandroidmanifestwizard.cpp
+++ b/src/plugins/android/createandroidmanifestwizard.cpp
@@ -34,27 +34,23 @@
#include <projectexplorer/runconfiguration.h>
#include <projectexplorer/target.h>
-#include <qmakeprojectmanager/qmakeproject.h>
-
-#include <proparser/prowriter.h>
-
#include <qtsupport/qtkitinformation.h>
#include <utils/utilsicons.h>
#include <QCheckBox>
#include <QComboBox>
+#include <QDir>
+#include <QFileInfo>
#include <QFormLayout>
#include <QLabel>
#include <QMessageBox>
#include <QVBoxLayout>
-using namespace Android;
-using namespace QmakeAndroidSupport::Internal;
+using namespace ProjectExplorer;
using namespace Utils;
-using QmakeProjectManager::QmakeProject;
-using QmakeProjectManager::QmakeProFile;
+namespace Android {
//
// NoApplicationProFilePage
@@ -62,7 +58,7 @@ using QmakeProjectManager::QmakeProFile;
NoApplicationProFilePage::NoApplicationProFilePage(CreateAndroidManifestWizard *wizard)
: m_wizard(wizard)
{
- QVBoxLayout *layout = new QVBoxLayout(this);
+ auto layout = new QVBoxLayout(this);
QLabel *label = new QLabel(this);
label->setWordWrap(true);
label->setText(tr("No application .pro file found in this project."));
@@ -73,21 +69,26 @@ NoApplicationProFilePage::NoApplicationProFilePage(CreateAndroidManifestWizard *
//
// ChooseProFilePage
//
-ChooseProFilePage::ChooseProFilePage(CreateAndroidManifestWizard *wizard,
- const QList<QmakeProFile *> &files,
- const QmakeProFile *select) :
- m_wizard(wizard)
+ChooseProFilePage::ChooseProFilePage(CreateAndroidManifestWizard *wizard)
+ : m_wizard(wizard)
{
- QFormLayout *fl = new QFormLayout(this);
+ auto fl = new QFormLayout(this);
QLabel *label = new QLabel(this);
label->setWordWrap(true);
label->setText(tr("Select the .pro file for which you want to create the Android template files."));
fl->addRow(label);
+ Target *target = wizard->target();
+ QString currentBuildTarget;
+ if (RunConfiguration *rc = target->activeRunConfiguration())
+ currentBuildTarget = rc->buildKey();
+
m_comboBox = new QComboBox(this);
- for (QmakeProFile *file : files) {
- m_comboBox->addItem(file->displayName(), QVariant::fromValue(static_cast<void *>(file))); // TODO something more?
- if (file == select)
+ const BuildTargetInfoList buildTargets = wizard->target()->applicationTargets();
+ for (const BuildTargetInfo &bti : buildTargets.list) {
+ const QString displayName = bti.buildKey;
+ m_comboBox->addItem(displayName, QVariant(bti.buildKey)); // TODO something more?
+ if (bti.buildKey == currentBuildTarget)
m_comboBox->setCurrentIndex(m_comboBox->count() - 1);
}
@@ -102,7 +103,7 @@ ChooseProFilePage::ChooseProFilePage(CreateAndroidManifestWizard *wizard,
void ChooseProFilePage::nodeSelected(int index)
{
Q_UNUSED(index)
- m_wizard->setProFile(static_cast<QmakeProFile *>(m_comboBox->itemData(m_comboBox->currentIndex()).value<void *>()));
+ m_wizard->setBuildKey(m_comboBox->itemData(m_comboBox->currentIndex()).toString());
}
@@ -110,7 +111,7 @@ void ChooseProFilePage::nodeSelected(int index)
// ChooseDirectoryPage
//
ChooseDirectoryPage::ChooseDirectoryPage(CreateAndroidManifestWizard *wizard)
- : m_wizard(wizard), m_androidPackageSourceDir(0), m_complete(true)
+ : m_wizard(wizard), m_androidPackageSourceDir(nullptr), m_complete(true)
{
m_layout = new QFormLayout(this);
m_label = new QLabel(this);
@@ -131,7 +132,7 @@ ChooseDirectoryPage::ChooseDirectoryPage(CreateAndroidManifestWizard *wizard)
m_warningIcon->setWordWrap(true);
m_warningIcon->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
- QHBoxLayout *hbox = new QHBoxLayout;
+ auto hbox = new QHBoxLayout;
hbox->addWidget(m_warningIcon);
hbox->addWidget(m_sourceDirectoryWarning);
hbox->setAlignment(m_warningIcon, Qt::AlignTop);
@@ -142,7 +143,7 @@ ChooseDirectoryPage::ChooseDirectoryPage(CreateAndroidManifestWizard *wizard)
m_wizard, &CreateAndroidManifestWizard::setDirectory);
if (wizard->copyGradle()) {
- QCheckBox *checkBox = new QCheckBox(this);
+ auto checkBox = new QCheckBox(this);
checkBox->setChecked(true);
connect(checkBox, &QCheckBox::toggled, wizard, &CreateAndroidManifestWizard::setCopyGradle);
checkBox->setText(tr("Copy the Gradle files to Android directory"));
@@ -153,8 +154,11 @@ ChooseDirectoryPage::ChooseDirectoryPage(CreateAndroidManifestWizard *wizard)
void ChooseDirectoryPage::checkPackageSourceDir()
{
- QString projectDir = m_wizard->proFile()->filePath().toFileInfo().absolutePath();
- QString newDir = m_androidPackageSourceDir->path();
+ const QString buildKey = m_wizard->buildKey();
+ const BuildTargetInfo bti = m_wizard->target()->applicationTargets().buildTargetInfo(buildKey);
+ const QString projectDir = bti.projectFilePath.toFileInfo().absolutePath();
+
+ const QString newDir = m_androidPackageSourceDir->path();
bool isComplete = QFileInfo(projectDir) != QFileInfo(newDir);
m_sourceDirectoryWarning->setVisible(!isComplete);
@@ -173,13 +177,20 @@ bool ChooseDirectoryPage::isComplete() const
void ChooseDirectoryPage::initializePage()
{
- QString androidPackageDir = m_wizard->proFile()->singleVariableValue(QmakeProjectManager::Variable::AndroidPackageSourceDir);
+ const QString buildKey = m_wizard->buildKey();
+ const BuildTargetInfo bti = m_wizard->target()->applicationTargets().buildTargetInfo(buildKey);
+ const QString projectDir = bti.projectFilePath.toFileInfo().absolutePath();
+
+ AndroidQtSupport *qtSupport = AndroidManager::androidQtSupport(m_wizard->target());
+ const QString androidPackageDir
+ = qtSupport->targetData(Android::Constants::AndroidPackageSourceDir, m_wizard->target()).toString();
+
if (androidPackageDir.isEmpty()) {
m_label->setText(tr("Select the Android package source directory.\n\n"
"The files in the Android package source directory are copied to the build directory's "
"Android directory and the default files are overwritten."));
- m_androidPackageSourceDir->setPath(m_wizard->proFile()->filePath().toFileInfo().absolutePath().append(QLatin1String("/android")));
+ m_androidPackageSourceDir->setPath(projectDir + "/android");
connect(m_androidPackageSourceDir, &PathChooser::rawPathChanged,
this, &ChooseDirectoryPage::checkPackageSourceDir);
} else {
@@ -196,39 +207,34 @@ void ChooseDirectoryPage::initializePage()
// CreateAndroidManifestWizard
//
CreateAndroidManifestWizard::CreateAndroidManifestWizard(ProjectExplorer::Target *target)
- : m_target(target), m_proFile(0), m_copyState(Ask)
+ : m_target(target), m_copyState(Ask)
{
setWindowTitle(tr("Create Android Template Files Wizard"));
- QmakeProject *project = static_cast<QmakeProject *>(target->project());
- QList<QmakeProFile *> files = project->applicationProFiles();
+ const BuildTargetInfoList buildTargets = target->applicationTargets();
QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(target->kit());
m_copyGradle = version && version->qtVersion() >= QtSupport::QtVersionNumber(5, 4, 0);
- const QmakeProFile *currentRunNode = nullptr;
- if (ProjectExplorer::RunConfiguration *rc = target->activeRunConfiguration())
- currentRunNode = project->rootProFile()->findProFile(FileName::fromString(rc->buildKey()));
-
- if (files.isEmpty()) {
+ if (buildTargets.list.isEmpty()) {
// oh uhm can't create anything
addPage(new NoApplicationProFilePage(this));
- } else if (files.size() == 1) {
- setProFile(files.first());
+ } else if (buildTargets.list.size() == 1) {
+ setBuildKey(buildTargets.list.first().buildKey);
addPage(new ChooseDirectoryPage(this));
} else {
- addPage(new ChooseProFilePage(this, files, currentRunNode));
+ addPage(new ChooseProFilePage(this));
addPage(new ChooseDirectoryPage(this));
}
}
-QmakeProjectManager::QmakeProFile *CreateAndroidManifestWizard::proFile() const
+QString CreateAndroidManifestWizard::buildKey() const
{
- return m_proFile;
+ return m_buildKey;
}
-void CreateAndroidManifestWizard::setProFile(QmakeProjectManager::QmakeProFile *node)
+void CreateAndroidManifestWizard::setBuildKey(const QString &buildKey)
{
- m_proFile = node;
+ m_buildKey = buildKey;
}
void CreateAndroidManifestWizard::setDirectory(const QString &directory)
@@ -318,45 +324,56 @@ void CreateAndroidManifestWizard::createAndroidTemplateFiles()
.append(QLatin1String("/src/android/java/AndroidManifest.xml")));
FileUtils::copyRecursively(FileName::fromString(src),
FileName::fromString(m_directory + QLatin1String("/AndroidManifest.xml")),
- 0, [this, &addedFiles](QFileInfo src, QFileInfo dst, QString *){return copy(src, dst, &addedFiles);});
+ nullptr, [this, &addedFiles](QFileInfo src, QFileInfo dst, QString *){return copy(src, dst, &addedFiles);});
} else {
const QString src(version->qmakeProperty("QT_INSTALL_PREFIX")
.append(QLatin1String("/src/android/templates")));
FileUtils::copyRecursively(FileName::fromString(src),
FileName::fromString(m_directory),
- 0, [this, &addedFiles](QFileInfo src, QFileInfo dst, QString *){return copy(src, dst, &addedFiles);});
+ nullptr, [this, &addedFiles](QFileInfo src, QFileInfo dst, QString *){return copy(src, dst, &addedFiles);});
if (m_copyGradle) {
FileName gradlePath = FileName::fromString(version->qmakeProperty("QT_INSTALL_PREFIX").append(QLatin1String("/src/3rdparty/gradle")));
if (!gradlePath.exists())
gradlePath = AndroidConfigurations::currentConfig().sdkLocation().appendPath(QLatin1String("/tools/templates/gradle/wrapper"));
FileUtils::copyRecursively(gradlePath, FileName::fromString(m_directory),
- 0, [this, &addedFiles](QFileInfo src, QFileInfo dst, QString *){return copy(src, dst, &addedFiles);});
+ nullptr, [this, &addedFiles](QFileInfo src, QFileInfo dst, QString *){return copy(src, dst, &addedFiles);});
}
AndroidManager::updateGradleProperties(m_target);
}
- m_proFile->addFiles(addedFiles);
- if (m_proFile->singleVariableValue(QmakeProjectManager::Variable::AndroidPackageSourceDir).isEmpty()) {
+ AndroidQtSupport *qtSupport = AndroidManager::androidQtSupport(m_target);
+ qtSupport->addFiles(m_target, m_buildKey, addedFiles);
+
+ const QString androidPackageDir
+ = qtSupport->targetData(Android::Constants::AndroidPackageSourceDir, m_target).toString();
+
+ if (androidPackageDir.isEmpty()) {
// and now time for some magic
- QString value = QLatin1String("$$PWD/")
- + m_proFile->filePath().toFileInfo().absoluteDir().relativeFilePath(m_directory);
- bool result =
- m_proFile->setProVariable(QLatin1String("ANDROID_PACKAGE_SOURCE_DIR"), QStringList(value));
+ const BuildTargetInfo bti = m_target->applicationTargets().buildTargetInfo(m_buildKey);
+ const QString value = "$$PWD/" + bti.projectFilePath.toFileInfo().absoluteDir().relativeFilePath(m_directory);
+ bool result = qtSupport->setTargetData(Android::Constants::AndroidPackageSourceDir, value, m_target);
if (!result) {
QMessageBox::warning(this, tr("Project File not Updated"),
- tr("Could not update the .pro file %1.")
- .arg(m_proFile->filePath().toUserOutput()));
+ tr("Could not update the project file %1.")
+ .arg(bti.projectFilePath.toUserOutput()));
}
}
Core::EditorManager::openEditor(m_directory + QLatin1String("/AndroidManifest.xml"));
}
+ProjectExplorer::Target *CreateAndroidManifestWizard::target() const
+{
+ return m_target;
+}
+
void CreateAndroidManifestWizard::accept()
{
createAndroidTemplateFiles();
Wizard::accept();
}
+
+} // namespace Android
diff --git a/src/plugins/qmakeandroidsupport/createandroidmanifestwizard.h b/src/plugins/android/createandroidmanifestwizard.h
index cdd49b247f..4695f9a4d5 100644
--- a/src/plugins/qmakeandroidsupport/createandroidmanifestwizard.h
+++ b/src/plugins/android/createandroidmanifestwizard.h
@@ -25,6 +25,8 @@
#pragma once
+#include "android_global.h"
+
#include <utils/fileutils.h>
#include <utils/pathchooser.h>
#include <utils/wizard.h>
@@ -36,10 +38,8 @@ class QFormLayout;
QT_END_NAMESPACE
namespace ProjectExplorer { class Target; }
-namespace QmakeProjectManager { class QmakeProFile; }
-namespace QmakeAndroidSupport {
-namespace Internal {
+namespace Android {
class CreateAndroidManifestWizard;
@@ -56,9 +56,8 @@ class ChooseProFilePage : public QWizardPage
{
Q_OBJECT
public:
- ChooseProFilePage(CreateAndroidManifestWizard *wizard,
- const QList<QmakeProjectManager::QmakeProFile *> &nodes,
- const QmakeProjectManager::QmakeProFile *select);
+ explicit ChooseProFilePage(CreateAndroidManifestWizard *wizard);
+
private:
void nodeSelected(int index);
private:
@@ -86,14 +85,14 @@ private:
bool m_complete;
};
-class CreateAndroidManifestWizard : public Utils::Wizard
+class ANDROID_EXPORT CreateAndroidManifestWizard : public Utils::Wizard
{
Q_OBJECT
public:
CreateAndroidManifestWizard(ProjectExplorer::Target *target);
- QmakeProjectManager::QmakeProFile *proFile() const;
- void setProFile(QmakeProjectManager::QmakeProFile *proFile);
+ QString buildKey() const;
+ void setBuildKey(const QString &buildKey);
void accept();
bool copyGradle();
@@ -101,6 +100,8 @@ public:
void setDirectory(const QString &directory);
void setCopyGradle(bool copy);
+ ProjectExplorer::Target *target() const;
+
private:
enum CopyState {
Ask,
@@ -112,11 +113,10 @@ private:
void createAndroidManifestFile();
void createAndroidTemplateFiles();
ProjectExplorer::Target *m_target;
- QmakeProjectManager::QmakeProFile *m_proFile;
+ QString m_buildKey;
QString m_directory;
CopyState m_copyState;
bool m_copyGradle;
};
-} //namespace QmakeAndroidSupport
-} //namespace Internal
+} // namespace Android
diff --git a/src/plugins/android/javaindenter.cpp b/src/plugins/android/javaindenter.cpp
index 21c99609ad..6b6d45d7ce 100644
--- a/src/plugins/android/javaindenter.cpp
+++ b/src/plugins/android/javaindenter.cpp
@@ -31,12 +31,9 @@
using namespace Android;
using namespace Android::Internal;
-JavaIndenter::JavaIndenter()
-{
-}
+JavaIndenter::JavaIndenter() = default;
-JavaIndenter::~JavaIndenter()
-{}
+JavaIndenter::~JavaIndenter() = default;
bool JavaIndenter::isElectricCharacter(const QChar &ch) const
{
diff --git a/src/plugins/android/javaparser.h b/src/plugins/android/javaparser.h
index f47075b4e2..5199f1057a 100644
--- a/src/plugins/android/javaparser.h
+++ b/src/plugins/android/javaparser.h
@@ -39,8 +39,8 @@ class JavaParser : public ProjectExplorer::IOutputParser
public:
JavaParser();
- void stdOutput(const QString &line);
- void stdError(const QString &line);
+ void stdOutput(const QString &line) override;
+ void stdError(const QString &line) override;
void setProjectFileList(const QStringList &fileList);
void setBuildDirectory(const Utils::FileName &buildDirectory);
diff --git a/src/plugins/autotest/autotestplugin.h b/src/plugins/autotest/autotestplugin.h
index efd8d31e77..5d48d2b460 100644
--- a/src/plugins/autotest/autotestplugin.h
+++ b/src/plugins/autotest/autotestplugin.h
@@ -46,7 +46,7 @@ class AutotestPlugin : public ExtensionSystem::IPlugin
public:
AutotestPlugin();
- ~AutotestPlugin();
+ ~AutotestPlugin() override;
bool initialize(const QStringList &arguments, QString *errorString) override;
void extensionsInitialized() override;
diff --git a/src/plugins/autotest/autotestunittests.cpp b/src/plugins/autotest/autotestunittests.cpp
index 0624f97eda..706824566c 100644
--- a/src/plugins/autotest/autotestunittests.cpp
+++ b/src/plugins/autotest/autotestunittests.cpp
@@ -54,7 +54,7 @@ namespace Internal {
AutoTestUnitTests::AutoTestUnitTests(TestTreeModel *model, QObject *parent)
: QObject(parent),
m_model(model),
- m_tmpDir(0),
+ m_tmpDir(nullptr),
m_isQt4(false)
{
}
diff --git a/src/plugins/autotest/autotestunittests.h b/src/plugins/autotest/autotestunittests.h
index aa43ead11e..1d0e0b397b 100644
--- a/src/plugins/autotest/autotestunittests.h
+++ b/src/plugins/autotest/autotestunittests.h
@@ -38,7 +38,7 @@ class AutoTestUnitTests : public QObject
{
Q_OBJECT
public:
- explicit AutoTestUnitTests(TestTreeModel *model, QObject *parent = 0);
+ explicit AutoTestUnitTests(TestTreeModel *model, QObject *parent = nullptr);
signals:
diff --git a/src/plugins/autotest/gtest/gtestframework.cpp b/src/plugins/autotest/gtest/gtestframework.cpp
index 67258c86ef..ceb0b12cb0 100644
--- a/src/plugins/autotest/gtest/gtestframework.cpp
+++ b/src/plugins/autotest/gtest/gtestframework.cpp
@@ -85,7 +85,7 @@ QString GTestFramework::groupingToolTip() const
{
return QCoreApplication::translate("GTestFramework",
"Enable or disable grouping of test cases by folder or "
- "gtest filter.\nSee also Google Test settings.");
+ "GTest filter.\nSee also Google Test settings.");
}
GTest::Constants::GroupMode GTestFramework::groupMode()
diff --git a/src/plugins/autotest/gtest/gtestoutputreader.cpp b/src/plugins/autotest/gtest/gtestoutputreader.cpp
index 29445f23c6..761cd6611f 100644
--- a/src/plugins/autotest/gtest/gtestoutputreader.cpp
+++ b/src/plugins/autotest/gtest/gtestoutputreader.cpp
@@ -96,7 +96,7 @@ void GTestOutputReader::processOutput(const QByteArray &outputLine)
TestResultPtr testResult = TestResultPtr(new GTestResult(m_projectFile));
testResult->setResult(Result::MessageDisabledTests);
int disabled = disabledTests.cap(1).toInt();
- testResult->setDescription(tr("You have %n disabled test(s).", 0, disabled));
+ testResult->setDescription(tr("You have %n disabled test(s).", nullptr, disabled));
testResult->setLine(disabled); // misuse line property to hold number of disabled
reportResult(testResult);
m_description.clear();
diff --git a/src/plugins/autotest/gtest/gtestsettingspage.h b/src/plugins/autotest/gtest/gtestsettingspage.h
index 4e5a056504..5bee96ec33 100644
--- a/src/plugins/autotest/gtest/gtestsettingspage.h
+++ b/src/plugins/autotest/gtest/gtestsettingspage.h
@@ -59,7 +59,6 @@ public:
QWidget *widget() override;
void apply() override;
- void finish() override { }
private:
QSharedPointer<GTestSettings> m_settings;
diff --git a/src/plugins/autotest/gtest/gtesttreeitem.cpp b/src/plugins/autotest/gtest/gtesttreeitem.cpp
index 0d49dfc28e..335979131a 100644
--- a/src/plugins/autotest/gtest/gtesttreeitem.cpp
+++ b/src/plugins/autotest/gtest/gtesttreeitem.cpp
@@ -466,7 +466,7 @@ QSet<QString> GTestTreeItem::internalTargets() const
const QVector<CppTools::ProjectPart::Ptr> projectParts = projectInfo.projectParts();
if (projectParts.isEmpty())
return TestTreeItem::dependingInternalTargets(cppMM, file);
- for (const CppTools::ProjectPart::Ptr projectPart : projectParts) {
+ for (const CppTools::ProjectPart::Ptr &projectPart : projectParts) {
if (projectPart->projectFile == proFile()
&& Utils::anyOf(projectPart->files, [&file] (const CppTools::ProjectFile &pf) {
return pf.path == file;
diff --git a/src/plugins/autotest/gtest/gtestvisitors.h b/src/plugins/autotest/gtest/gtestvisitors.h
index cf850ffd51..94c684d322 100644
--- a/src/plugins/autotest/gtest/gtestvisitors.h
+++ b/src/plugins/autotest/gtest/gtestvisitors.h
@@ -58,7 +58,7 @@ class GTestVisitor : public CPlusPlus::ASTVisitor
{
public:
explicit GTestVisitor(CPlusPlus::Document::Ptr doc);
- bool visit(CPlusPlus::FunctionDefinitionAST *ast);
+ bool visit(CPlusPlus::FunctionDefinitionAST *ast) override;
QMap<GTestCaseSpec, GTestCodeLocationList> gtestFunctions() const { return m_gtestFunctions; }
diff --git a/src/plugins/autotest/itestsettingspage.h b/src/plugins/autotest/itestsettingspage.h
index eecdec0040..be4f05f491 100644
--- a/src/plugins/autotest/itestsettingspage.h
+++ b/src/plugins/autotest/itestsettingspage.h
@@ -45,7 +45,7 @@ public:
setCategory(Constants::AUTOTEST_SETTINGS_CATEGORY);
}
- virtual ~ITestSettingsPage() {}
+ void finish() override {}
private:
void setId(Core::Id id)
diff --git a/src/plugins/autotest/qtest/qttestoutputreader.cpp b/src/plugins/autotest/qtest/qttestoutputreader.cpp
index d56a1658ec..864d219097 100644
--- a/src/plugins/autotest/qtest/qttestoutputreader.cpp
+++ b/src/plugins/autotest/qtest/qttestoutputreader.cpp
@@ -47,9 +47,9 @@ static QString decode(const QString& original)
while ((pos = regex.indexIn(original, pos)) != -1) {
const QString value = regex.cap(1);
if (value.startsWith('x'))
- result.replace(regex.cap(0), QChar(value.midRef(1).toInt(0, 16)));
+ result.replace(regex.cap(0), QChar(value.midRef(1).toInt(nullptr, 16)));
else
- result.replace(regex.cap(0), QChar(value.toInt(0, 10)));
+ result.replace(regex.cap(0), QChar(value.toInt(nullptr, 10)));
pos += regex.matchedLength();
}
@@ -120,7 +120,7 @@ static QString constructBenchmarkInformation(const QString &metric, double value
return QtTestOutputReader::tr("%1 %2 per iteration (total: %3, iterations: %4)")
.arg(formatResult(value))
.arg(metricsText)
- .arg(formatResult(value * (double)iterations))
+ .arg(formatResult(value * double(iterations)))
.arg(iterations);
}
diff --git a/src/plugins/autotest/qtest/qttestparser.cpp b/src/plugins/autotest/qtest/qttestparser.cpp
index 1bfabb42db..b806e79f8d 100644
--- a/src/plugins/autotest/qtest/qttestparser.cpp
+++ b/src/plugins/autotest/qtest/qttestparser.cpp
@@ -109,8 +109,8 @@ static QString testClass(const CppTools::CppModelManager *modelManager,
const QByteArray name = macro.macro().name();
if (QTestUtils::isQTestMacro(name)) {
const CPlusPlus::Document::Block arg = macro.arguments().at(0);
- return QLatin1String(fileContent.mid(arg.bytesBegin(),
- arg.bytesEnd() - arg.bytesBegin()));
+ return QLatin1String(fileContent.mid(int(arg.bytesBegin()),
+ int(arg.bytesEnd() - arg.bytesBegin())));
}
}
// check if one has used a self-defined macro or QTest::qExec() directly
@@ -126,7 +126,8 @@ static CPlusPlus::Document::Ptr declaringDocument(CPlusPlus::Document::Ptr doc,
const CPlusPlus::Snapshot &snapshot,
const QString &testCaseName,
const QStringList &alternativeFiles = {},
- unsigned *line = 0, unsigned *column = 0)
+ unsigned *line = nullptr,
+ unsigned *column = nullptr)
{
CPlusPlus::Document::Ptr declaringDoc;
CPlusPlus::TypeOfExpression typeOfExpr;
@@ -152,7 +153,7 @@ static CPlusPlus::Document::Ptr declaringDocument(CPlusPlus::Document::Ptr doc,
if (CPlusPlus::Symbol *symbol = item.declaration()) {
if (CPlusPlus::Class *toeClass = symbol->asClass()) {
const QString declFileName = QLatin1String(toeClass->fileId()->chars(),
- toeClass->fileId()->size());
+ int(toeClass->fileId()->size()));
declaringDoc = snapshot.document(declFileName);
if (line)
*line = toeClass->line();
diff --git a/src/plugins/autotest/qtest/qttestsettings.cpp b/src/plugins/autotest/qtest/qttestsettings.cpp
index dba1be98e2..e1473c7826 100644
--- a/src/plugins/autotest/qtest/qttestsettings.cpp
+++ b/src/plugins/autotest/qtest/qttestsettings.cpp
@@ -88,9 +88,8 @@ QString QtTestSettings::metricsTypeToOption(const MetricsType type)
return QString("-callgrind");
case MetricsType::Perf:
return QString("-perf");
- default:
- return QString();
}
+ return QString();
}
} // namespace Internal
diff --git a/src/plugins/autotest/qtest/qttestsettingspage.cpp b/src/plugins/autotest/qtest/qttestsettingspage.cpp
index 4ea1fe1319..8652738425 100644
--- a/src/plugins/autotest/qtest/qttestsettingspage.cpp
+++ b/src/plugins/autotest/qtest/qttestsettingspage.cpp
@@ -65,8 +65,6 @@ void QtTestSettingsWidget::setSettings(const QtTestSettings &settings)
case MetricsType::Perf:
m_ui.perfRB->setChecked(true);
break;
- default:
- m_ui.walltimeRB->setChecked(true);
}
}
diff --git a/src/plugins/autotest/qtest/qttestsettingspage.h b/src/plugins/autotest/qtest/qttestsettingspage.h
index abfca142c9..cb4e5850dc 100644
--- a/src/plugins/autotest/qtest/qttestsettingspage.h
+++ b/src/plugins/autotest/qtest/qttestsettingspage.h
@@ -41,7 +41,7 @@ class QtTestSettingsWidget : public QWidget
{
Q_OBJECT
public:
- explicit QtTestSettingsWidget(QWidget *parent = 0);
+ explicit QtTestSettingsWidget(QWidget *parent = nullptr);
void setSettings(const QtTestSettings &settings);
QtTestSettings settings() const;
@@ -58,7 +58,6 @@ public:
QWidget *widget() override;
void apply() override;
- void finish() override { }
private:
QSharedPointer<QtTestSettings> m_settings;
diff --git a/src/plugins/autotest/qtest/qttesttreeitem.cpp b/src/plugins/autotest/qtest/qttesttreeitem.cpp
index c9917d41bc..3fe96b6f39 100644
--- a/src/plugins/autotest/qtest/qttesttreeitem.cpp
+++ b/src/plugins/autotest/qtest/qttesttreeitem.cpp
@@ -167,7 +167,6 @@ static void fillTestConfigurationsFromCheckState(const TestTreeItem *item,
testConfigurations << testConfig;
return;
case Qt::PartiallyChecked:
- default:
QStringList testCases;
item->forFirstLevelChildren([&testCases](TestTreeItem *grandChild) {
if (grandChild->checked() == Qt::Checked) {
diff --git a/src/plugins/autotest/qtest/qttestvisitors.h b/src/plugins/autotest/qtest/qttestvisitors.h
index 6c008617cb..8209119249 100644
--- a/src/plugins/autotest/qtest/qttestvisitors.h
+++ b/src/plugins/autotest/qtest/qttestvisitors.h
@@ -50,7 +50,7 @@ public:
QSet<QString> baseClasses() const { return m_baseClasses; }
bool resultValid() const { return m_valid; }
- bool visit(CPlusPlus::Class *symbol);
+ bool visit(CPlusPlus::Class *symbol) override;
private:
CppTools::SymbolFinder m_symbolFinder;
@@ -67,8 +67,8 @@ class TestAstVisitor : public CPlusPlus::ASTVisitor
public:
explicit TestAstVisitor(CPlusPlus::Document::Ptr doc, const CPlusPlus::Snapshot &snapshot);
- bool visit(CPlusPlus::CallAST *ast);
- bool visit(CPlusPlus::CompoundStatementAST *ast);
+ bool visit(CPlusPlus::CallAST *ast) override;
+ bool visit(CPlusPlus::CompoundStatementAST *ast) override;
QString className() const { return m_className; }
@@ -84,11 +84,11 @@ class TestDataFunctionVisitor : public CPlusPlus::ASTVisitor
public:
explicit TestDataFunctionVisitor(CPlusPlus::Document::Ptr doc);
- bool visit(CPlusPlus::UsingDirectiveAST *ast);
- bool visit(CPlusPlus::FunctionDefinitionAST *ast);
- bool visit(CPlusPlus::CallAST *ast);
- bool preVisit(CPlusPlus::AST *ast);
- void postVisit(CPlusPlus::AST *ast);
+ bool visit(CPlusPlus::UsingDirectiveAST *ast) override;
+ bool visit(CPlusPlus::FunctionDefinitionAST *ast) override;
+ bool visit(CPlusPlus::CallAST *ast) override;
+ bool preVisit(CPlusPlus::AST *ast) override;
+ void postVisit(CPlusPlus::AST *ast) override;
QMap<QString, QtTestCodeLocationList> dataTags() const { return m_dataTags; }
private:
diff --git a/src/plugins/autotest/quick/quicktestparser.cpp b/src/plugins/autotest/quick/quicktestparser.cpp
index 6e9b4ae82e..c4f7e7963a 100644
--- a/src/plugins/autotest/quick/quicktestparser.cpp
+++ b/src/plugins/autotest/quick/quicktestparser.cpp
@@ -120,7 +120,7 @@ static QString quickTestName(const CPlusPlus::Document::Ptr &doc,
if (QuickTestUtils::isQuickTestMacro(name)) {
CPlusPlus::Document::Block arg = macro.arguments().at(0);
return QLatin1String(CppParser::getFileContent(doc->fileName())
- .mid(arg.bytesBegin(), arg.bytesEnd() - arg.bytesBegin()));
+ .mid(int(arg.bytesBegin()), int(arg.bytesEnd() - arg.bytesBegin())));
}
}
@@ -311,10 +311,6 @@ QuickTestParser::QuickTestParser()
this, &QuickTestParser::doUpdateWatchPaths, Qt::QueuedConnection);
}
-QuickTestParser::~QuickTestParser()
-{
-}
-
void QuickTestParser::init(const QStringList &filesToParse, bool fullParse)
{
m_qmlSnapshot = QmlJSTools::Internal::ModelManager::instance()->snapshot();
diff --git a/src/plugins/autotest/quick/quicktestparser.h b/src/plugins/autotest/quick/quicktestparser.h
index 6d005bec4e..c05fa607dd 100644
--- a/src/plugins/autotest/quick/quicktestparser.h
+++ b/src/plugins/autotest/quick/quicktestparser.h
@@ -46,7 +46,6 @@ class QuickTestParser : public QObject, public CppParser
Q_OBJECT
public:
QuickTestParser();
- virtual ~QuickTestParser();
void init(const QStringList &filesToParse, bool fullParse) override;
void release() override;
bool processDocument(QFutureInterface<TestParseResultPtr> futureInterface,
diff --git a/src/plugins/autotest/quick/quicktesttreeitem.cpp b/src/plugins/autotest/quick/quicktesttreeitem.cpp
index 94672bcc23..6bc57a0e38 100644
--- a/src/plugins/autotest/quick/quicktesttreeitem.cpp
+++ b/src/plugins/autotest/quick/quicktesttreeitem.cpp
@@ -416,7 +416,7 @@ QSet<QString> QuickTestTreeItem::internalTargets() const
QSet<QString> result;
const auto cppMM = CppTools::CppModelManager::instance();
const auto projectInfo = cppMM->projectInfo(ProjectExplorer::SessionManager::startupProject());
- for (const CppTools::ProjectPart::Ptr projectPart : projectInfo.projectParts()) {
+ for (const CppTools::ProjectPart::Ptr &projectPart : projectInfo.projectParts()) {
if (projectPart->buildTargetType != CppTools::ProjectPart::Executable)
continue;
if (projectPart->projectFile == proFile()) {
diff --git a/src/plugins/autotest/testconfiguration.cpp b/src/plugins/autotest/testconfiguration.cpp
index c4c020349f..1cd550c807 100644
--- a/src/plugins/autotest/testconfiguration.cpp
+++ b/src/plugins/autotest/testconfiguration.cpp
@@ -48,10 +48,6 @@ using namespace ProjectExplorer;
namespace Autotest {
namespace Internal {
-TestConfiguration::TestConfiguration()
-{
-}
-
TestConfiguration::~TestConfiguration()
{
m_testCases.clear();
diff --git a/src/plugins/autotest/testconfiguration.h b/src/plugins/autotest/testconfiguration.h
index 4e98c9ee9c..a2a06d95c3 100644
--- a/src/plugins/autotest/testconfiguration.h
+++ b/src/plugins/autotest/testconfiguration.h
@@ -52,7 +52,7 @@ using TestResultPtr = QSharedPointer<TestResult>;
class TestConfiguration
{
public:
- explicit TestConfiguration();
+ explicit TestConfiguration() = default;
virtual ~TestConfiguration();
void completeTestInformation(TestRunMode runMode);
@@ -113,7 +113,6 @@ class DebuggableTestConfiguration : public TestConfiguration
public:
explicit DebuggableTestConfiguration(TestRunMode runMode = TestRunMode::Run)
: m_runMode(runMode) {}
- ~DebuggableTestConfiguration() {}
void setRunMode(TestRunMode mode) { m_runMode = mode; }
TestRunMode runMode() const { return m_runMode; }
diff --git a/src/plugins/autotest/testnavigationwidget.cpp b/src/plugins/autotest/testnavigationwidget.cpp
index 948af3af72..363fd1a3b4 100644
--- a/src/plugins/autotest/testnavigationwidget.cpp
+++ b/src/plugins/autotest/testnavigationwidget.cpp
@@ -108,10 +108,6 @@ TestNavigationWidget::TestNavigationWidget(QWidget *parent) :
m_progressIndicator, &Utils::ProgressIndicator::show);
}
-TestNavigationWidget::~TestNavigationWidget()
-{
-}
-
void TestNavigationWidget::contextMenuEvent(QContextMenuEvent *event)
{
const bool enabled = !ProjectExplorer::BuildManager::isBuilding()
diff --git a/src/plugins/autotest/testnavigationwidget.h b/src/plugins/autotest/testnavigationwidget.h
index 163547c9c1..422ade8c58 100644
--- a/src/plugins/autotest/testnavigationwidget.h
+++ b/src/plugins/autotest/testnavigationwidget.h
@@ -58,8 +58,7 @@ class TestNavigationWidget : public QWidget
Q_OBJECT
public:
- explicit TestNavigationWidget(QWidget *parent = 0);
- ~TestNavigationWidget();
+ explicit TestNavigationWidget(QWidget *parent = nullptr);
void contextMenuEvent(QContextMenuEvent *event) override;
QList<QToolButton *> createToolButtons();
diff --git a/src/plugins/autotest/testresult.cpp b/src/plugins/autotest/testresult.cpp
index 47c4b3dba6..c2fcd97fa6 100644
--- a/src/plugins/autotest/testresult.cpp
+++ b/src/plugins/autotest/testresult.cpp
@@ -100,7 +100,7 @@ Result::Type TestResult::toResultType(int rt)
if (rt < Result::FIRST_TYPE || rt > Result::LAST_TYPE)
return Result::Invalid;
- return (Result::Type)rt;
+ return Result::Type(rt);
}
QString TestResult::resultToString(const Result::Type type)
diff --git a/src/plugins/autotest/testresultdelegate.cpp b/src/plugins/autotest/testresultdelegate.cpp
index a8e0b4fbe8..d70b6fa39e 100644
--- a/src/plugins/autotest/testresultdelegate.cpp
+++ b/src/plugins/autotest/testresultdelegate.cpp
@@ -38,7 +38,7 @@
namespace Autotest {
namespace Internal {
-const static int outputLimit = 100000;
+constexpr int outputLimit = 100000;
static bool isSummaryItem(Result::Type type)
{
diff --git a/src/plugins/autotest/testresultmodel.cpp b/src/plugins/autotest/testresultmodel.cpp
index 240b61cfc4..cbcbf73be8 100644
--- a/src/plugins/autotest/testresultmodel.cpp
+++ b/src/plugins/autotest/testresultmodel.cpp
@@ -42,10 +42,6 @@ TestResultItem::TestResultItem(const TestResultPtr &testResult)
{
}
-TestResultItem::~TestResultItem()
-{
-}
-
static QIcon testResultIcon(Result::Type result) {
const static QIcon icons[] = {
Icons::RESULT_PASS.icon(),
diff --git a/src/plugins/autotest/testresultmodel.h b/src/plugins/autotest/testresultmodel.h
index b6d38ffedd..de48db5a0d 100644
--- a/src/plugins/autotest/testresultmodel.h
+++ b/src/plugins/autotest/testresultmodel.h
@@ -41,7 +41,6 @@ class TestResultItem : public Utils::TreeItem
{
public:
explicit TestResultItem(const TestResultPtr &testResult);
- ~TestResultItem();
QVariant data(int column, int role) const override;
const TestResult *testResult() const { return m_testResult.data(); }
void updateDescription(const QString &description);
diff --git a/src/plugins/autotest/testresultspane.h b/src/plugins/autotest/testresultspane.h
index 9cedf7e7c6..7dcd1f94be 100644
--- a/src/plugins/autotest/testresultspane.h
+++ b/src/plugins/autotest/testresultspane.h
@@ -72,7 +72,7 @@ class TestResultsPane : public Core::IOutputPane
{
Q_OBJECT
public:
- virtual ~TestResultsPane();
+ ~TestResultsPane() override;
static TestResultsPane *instance();
// IOutputPane interface
@@ -119,7 +119,7 @@ private:
void toggleOutputStyle();
QString getWholeOutput(const QModelIndex &parent = QModelIndex());
- void createMarks(const QModelIndex& parent = QModelIndex());
+ void createMarks(const QModelIndex &parent = QModelIndex());
void clearMarks();
QStackedWidget *m_outputWidget;
diff --git a/src/plugins/autotest/testrunconfiguration.h b/src/plugins/autotest/testrunconfiguration.h
index b4159c05e7..17e9c721d3 100644
--- a/src/plugins/autotest/testrunconfiguration.h
+++ b/src/plugins/autotest/testrunconfiguration.h
@@ -28,12 +28,12 @@
#include "autotestplugin.h"
#include "testconfiguration.h"
+#include <debugger/debuggerrunconfigurationaspect.h>
#include <projectexplorer/applicationlauncher.h>
#include <projectexplorer/projectexplorerconstants.h>
#include <projectexplorer/devicesupport/devicemanager.h>
#include <projectexplorer/runconfiguration.h>
#include <utils/qtcassert.h>
-#include <debugger/debuggerrunconfigurationaspect.h>
#include <QCoreApplication>
@@ -67,7 +67,6 @@ public:
r.commandLineArguments = m_testConfig->argumentsForTestRunner().join(' ');
r.workingDirectory = m_testConfig->workingDirectory();
r.environment = m_testConfig->environment();
- r.runMode = ProjectExplorer::ApplicationLauncher::Gui;
r.device = ProjectExplorer::DeviceManager::instance()->defaultDevice(
ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE);
return r;
diff --git a/src/plugins/autotest/testrunner.cpp b/src/plugins/autotest/testrunner.cpp
index 0b774c6c7a..57574012ec 100644
--- a/src/plugins/autotest/testrunner.cpp
+++ b/src/plugins/autotest/testrunner.cpp
@@ -77,8 +77,7 @@ TestRunner *TestRunner::instance()
}
TestRunner::TestRunner(QObject *parent) :
- QObject(parent),
- m_executingTests(false)
+ QObject(parent)
{
connect(&m_futureWatcher, &QFutureWatcher<TestResultPtr>::resultReadyAt,
this, [this](int index) { emit testResultReady(m_futureWatcher.resultAt(index)); });
@@ -329,17 +328,14 @@ void TestRunner::prepareToRunTests(TestRunMode mode)
}
}
-static QString firstTestCaseTarget(const TestConfiguration *config)
+static QString firstNonEmptyTestCaseTarget(const TestConfiguration *config)
{
- for (const QString &internalTarget : config->internalTargets()) {
- const QString buildTarget = internalTarget.split('|').first();
- if (!buildTarget.isEmpty())
- return buildTarget;
- }
- return QString();
+ return Utils::findOrDefault(config->internalTargets(), [](const QString &internalTarget) {
+ return !internalTarget.isEmpty();
+ });
}
-static ProjectExplorer::RunConfiguration *getRunConfiguration(const QString &dialogDetail)
+static ProjectExplorer::RunConfiguration *getRunConfiguration(const QString &buildTargetKey)
{
using namespace ProjectExplorer;
const Project *project = SessionManager::startupProject();
@@ -357,7 +353,7 @@ static ProjectExplorer::RunConfiguration *getRunConfiguration(const QString &dia
if (runConfigurations.size() == 1)
return runConfigurations.first();
- RunConfigurationSelectionDialog dialog(dialogDetail, Core::ICore::dialogParent());
+ RunConfigurationSelectionDialog dialog(buildTargetKey, Core::ICore::dialogParent());
if (dialog.exec() == QDialog::Accepted) {
const QString dName = dialog.displayName();
if (dName.isEmpty())
@@ -409,7 +405,7 @@ void TestRunner::runTests()
projectChanged = true;
toBeRemoved.append(config);
} else if (!config->hasExecutable()) {
- if (auto rc = getRunConfiguration(firstTestCaseTarget(config)))
+ if (auto rc = getRunConfiguration(firstNonEmptyTestCaseTarget(config)))
config->setOriginalRunConfiguration(rc);
else
toBeRemoved.append(config);
@@ -483,7 +479,7 @@ void TestRunner::debugTests()
return;
}
if (!config->hasExecutable()) {
- if (auto *rc = getRunConfiguration(firstTestCaseTarget(config)))
+ if (auto *rc = getRunConfiguration(firstNonEmptyTestCaseTarget(config)))
config->completeTestInformation(rc, TestRunMode::Debug);
}
@@ -571,15 +567,14 @@ void TestRunner::runOrDebugTests()
case TestRunMode::Run:
case TestRunMode::RunWithoutDeploy:
runTests();
- break;
+ return;
case TestRunMode::Debug:
case TestRunMode::DebugWithoutDeploy:
debugTests();
- break;
- default:
- onFinished();
- QTC_ASSERT(false, return); // unexpected run mode
+ return;
}
+ onFinished();
+ QTC_ASSERT(false, return); // unexpected run mode
}
void TestRunner::buildProject(ProjectExplorer::Project *project)
@@ -628,7 +623,15 @@ void TestRunner::onFinished()
/*************************************************************************************************/
-RunConfigurationSelectionDialog::RunConfigurationSelectionDialog(const QString &testsInfo,
+static QFrame *createLine(QWidget *parent)
+{
+ QFrame *line = new QFrame(parent);
+ line->setFrameShape(QFrame::HLine);
+ line->setFrameShadow(QFrame::Sunken);
+ return line;
+}
+
+RunConfigurationSelectionDialog::RunConfigurationSelectionDialog(const QString &buildTargetKey,
QWidget *parent)
: QDialog(parent)
{
@@ -636,8 +639,8 @@ RunConfigurationSelectionDialog::RunConfigurationSelectionDialog(const QString &
setWindowTitle(tr("Select Run Configuration"));
QString details = tr("Could not determine which run configuration to choose for running tests");
- if (!testsInfo.isEmpty())
- details.append(QString(" (%1)").arg(testsInfo));
+ if (!buildTargetKey.isEmpty())
+ details.append(QString(" (%1)").arg(buildTargetKey));
m_details = new QLabel(details, this);
m_rcCombo = new QComboBox(this);
m_executable = new QLabel(this);
@@ -647,15 +650,11 @@ RunConfigurationSelectionDialog::RunConfigurationSelectionDialog(const QString &
m_buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok);
m_buttonBox->button(QDialogButtonBox::Ok)->setDefault(true);
- auto line = new QFrame(this);
- line->setFrameShape(QFrame::HLine);
- line->setFrameShadow(QFrame::Sunken);
-
auto formLayout = new QFormLayout;
formLayout->setFieldGrowthPolicy(QFormLayout::AllNonFixedFieldsGrow);
formLayout->addRow(m_details);
formLayout->addRow(tr("Run Configuration:"), m_rcCombo);
- formLayout->addRow(line);
+ formLayout->addRow(createLine(this));
formLayout->addRow(tr("Executable:"), m_executable);
formLayout->addRow(tr("Arguments:"), m_arguments);
formLayout->addRow(tr("Working Directory:"), m_workingDir);
@@ -663,7 +662,7 @@ RunConfigurationSelectionDialog::RunConfigurationSelectionDialog(const QString &
auto vboxLayout = new QVBoxLayout(this);
vboxLayout->addLayout(formLayout);
vboxLayout->addStretch();
- vboxLayout->addWidget(line);
+ vboxLayout->addWidget(createLine(this));
vboxLayout->addWidget(m_buttonBox);
connect(m_rcCombo, &QComboBox::currentTextChanged,
diff --git a/src/plugins/autotest/testrunner.h b/src/plugins/autotest/testrunner.h
index ae4fc7c0d5..c5bc3dfe4d 100644
--- a/src/plugins/autotest/testrunner.h
+++ b/src/plugins/autotest/testrunner.h
@@ -52,12 +52,11 @@ namespace Internal {
class AUTOTESTSHARED_EXPORT TestRunner : public QObject
{
Q_OBJECT
-
public:
enum CancelReason { UserCanceled, Timeout, KitChanged };
static TestRunner* instance();
- ~TestRunner();
+ ~TestRunner() override;
void setSelectedTests(const QList<TestConfiguration *> &selected);
void runTest(TestRunMode mode, const TestTreeItem *item);
@@ -109,7 +108,7 @@ class RunConfigurationSelectionDialog : public QDialog
{
Q_OBJECT
public:
- explicit RunConfigurationSelectionDialog(const QString &testsInfo, QWidget *parent = nullptr);
+ explicit RunConfigurationSelectionDialog(const QString &buildTargetKey, QWidget *parent = nullptr);
QString displayName() const;
QString executable() const;
private:
diff --git a/src/plugins/autotest/testsettings.cpp b/src/plugins/autotest/testsettings.cpp
index 55cbe31114..c19ed8ecf4 100644
--- a/src/plugins/autotest/testsettings.cpp
+++ b/src/plugins/autotest/testsettings.cpp
@@ -44,7 +44,7 @@ static const char filtersKey[] = "WhiteListFilters";
static const char processArgsKey[] = "ProcessArgs";
static const char groupSuffix[] = ".group";
-static const int defaultTimeout = 60000;
+constexpr int defaultTimeout = 60000;
TestSettings::TestSettings()
: timeout(defaultTimeout)
diff --git a/src/plugins/autotest/testsettingspage.cpp b/src/plugins/autotest/testsettingspage.cpp
index 738e37ec33..97946d8226 100644
--- a/src/plugins/autotest/testsettingspage.cpp
+++ b/src/plugins/autotest/testsettingspage.cpp
@@ -45,7 +45,7 @@ namespace Internal {
class TestFilterDialog : public QDialog
{
public:
- explicit TestFilterDialog(QWidget *parent = nullptr, Qt::WindowFlags f = 0);
+ explicit TestFilterDialog(QWidget *parent = nullptr, Qt::WindowFlags f = nullptr);
QString filterPath() const;
void setDetailsText(const QString &details) { m_details->setText(details); }
void setDefaultFilterPath(const QString &defaultPath);
@@ -286,10 +286,6 @@ TestSettingsPage::TestSettingsPage(const QSharedPointer<TestSettings> &settings)
Utils::Theme::PanelTextColorDark}}, Utils::Icon::Tint));
}
-TestSettingsPage::~TestSettingsPage()
-{
-}
-
QWidget *TestSettingsPage::widget()
{
if (!m_widget) {
diff --git a/src/plugins/autotest/testsettingspage.h b/src/plugins/autotest/testsettingspage.h
index 66077e20ae..2b1216c9eb 100644
--- a/src/plugins/autotest/testsettingspage.h
+++ b/src/plugins/autotest/testsettingspage.h
@@ -63,7 +63,6 @@ class TestSettingsPage : public Core::IOptionsPage
Q_OBJECT
public:
explicit TestSettingsPage(const QSharedPointer<TestSettings> &settings);
- ~TestSettingsPage();
QWidget *widget() override;
void apply() override;
diff --git a/src/plugins/autotest/testtreeitem.cpp b/src/plugins/autotest/testtreeitem.cpp
index c6b5101557..e1c1debe9c 100644
--- a/src/plugins/autotest/testtreeitem.cpp
+++ b/src/plugins/autotest/testtreeitem.cpp
@@ -62,8 +62,8 @@ static QIcon testTreeIcon(TestTreeItem::Type type)
static QIcon icons[] = {
QIcon(),
Utils::Icons::OPENFILE.icon(),
- CPlusPlus::Icons::iconForType(CPlusPlus::Icons::ClassIconType),
- CPlusPlus::Icons::iconForType(CPlusPlus::Icons::SlotPrivateIconType),
+ Utils::CodeModelIcon::iconForType(Utils::CodeModelIcon::Class),
+ Utils::CodeModelIcon::iconForType(Utils::CodeModelIcon::SlotPrivate),
QIcon(":/autotest/images/data.png")
};
@@ -90,7 +90,7 @@ QVariant TestTreeItem::data(int /*column*/, int role) const
if (m_type == GroupNode)
return QVariant();
QVariant itemLink;
- itemLink.setValue(Utils::Link(m_filePath, m_line, m_column));
+ itemLink.setValue(Utils::Link(m_filePath, int(m_line), int(m_column)));
return itemLink;
}
case ItalicRole:
@@ -107,7 +107,7 @@ bool TestTreeItem::setData(int /*column*/, const QVariant &data, int role)
{
if (role == Qt::CheckStateRole) {
Qt::CheckState old = m_checked;
- m_checked = (Qt::CheckState)data.toInt();
+ m_checked = Qt::CheckState(data.toInt());
return m_checked != old;
}
return false;
@@ -124,9 +124,6 @@ Qt::ItemFlags TestTreeItem::flags(int /*column*/) const
return defaultFlags | Qt::ItemIsAutoTristate | Qt::ItemIsUserCheckable;
case TestFunctionOrSet:
return defaultFlags | Qt::ItemIsUserCheckable;
- case TestDataFunction:
- case TestSpecialFunction:
- case TestDataTag:
default:
return defaultFlags;
}
@@ -244,9 +241,8 @@ TestConfiguration *TestTreeItem::asConfiguration(TestRunMode mode) const
case TestRunMode::Debug:
case TestRunMode::DebugWithoutDeploy:
return debugConfiguration();
- default:
- return nullptr;
}
+ return nullptr;
}
QList<TestConfiguration *> TestTreeItem::getAllTestConfigurations() const
@@ -287,9 +283,8 @@ bool TestTreeItem::lessThan(const TestTreeItem *other, SortMode mode) const
}
return leftLink.targetFileName > rightLink.targetFileName;
}
- default:
- return true;
}
+ return true;
}
bool TestTreeItem::isGroupNodeFor(const TestTreeItem *other) const
@@ -315,7 +310,7 @@ QSet<QString> TestTreeItem::internalTargets() const
if (projectParts.isEmpty())
return TestTreeItem::dependingInternalTargets(cppMM, m_filePath);
QSet<QString> targets;
- for (const CppTools::ProjectPart::Ptr part : projectParts) {
+ for (const CppTools::ProjectPart::Ptr &part : projectParts) {
targets.insert(part->buildSystemTarget);
if (part->buildTargetType != CppTools::ProjectPart::Executable)
targets.unite(TestTreeItem::dependingInternalTargets(cppMM, m_filePath));
@@ -372,7 +367,7 @@ QSet<QString> TestTreeItem::dependingInternalTargets(CppTools::CppModelManager *
const Utils::FileNameList dependingFiles = snapshot.filesDependingOn(
wasHeader ? file : correspondingFile);
for (const Utils::FileName &fn : dependingFiles) {
- for (const CppTools::ProjectPart::Ptr part : cppMM->projectPart(fn))
+ for (const CppTools::ProjectPart::Ptr &part : cppMM->projectPart(fn))
result.insert(part->buildSystemTarget);
}
return result;
diff --git a/src/plugins/autotest/testtreeitem.h b/src/plugins/autotest/testtreeitem.h
index de9e824eda..74e6c98d8f 100644
--- a/src/plugins/autotest/testtreeitem.h
+++ b/src/plugins/autotest/testtreeitem.h
@@ -50,6 +50,7 @@ namespace Internal {
class TestParseResult;
class TestConfiguration;
enum class TestRunMode;
+
class TestTreeItem : public Utils::TypedTreeItem<TestTreeItem>
{
public:
@@ -158,7 +159,7 @@ private:
class TestCodeLocationAndType
{
public:
- QString m_name; // tag name for m_type == TEST_DATATAG, file name for other values
+ QString m_name; // tag name for m_type == TestDataTag, file name for other values
unsigned m_line = 0;
unsigned m_column = 0;
TestTreeItem::Type m_type = TestTreeItem::Root;
diff --git a/src/plugins/autotest/testtreeitemdelegate.cpp b/src/plugins/autotest/testtreeitemdelegate.cpp
index e7151632e1..2a1aeea0f4 100644
--- a/src/plugins/autotest/testtreeitemdelegate.cpp
+++ b/src/plugins/autotest/testtreeitemdelegate.cpp
@@ -36,10 +36,6 @@ TestTreeItemDelegate::TestTreeItemDelegate(QObject *parent)
{
}
-TestTreeItemDelegate::~TestTreeItemDelegate()
-{
-}
-
void TestTreeItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
QStyleOptionViewItem opt = option;
diff --git a/src/plugins/autotest/testtreeitemdelegate.h b/src/plugins/autotest/testtreeitemdelegate.h
index 02c87b3627..51e1a8b27f 100644
--- a/src/plugins/autotest/testtreeitemdelegate.h
+++ b/src/plugins/autotest/testtreeitemdelegate.h
@@ -35,7 +35,6 @@ class TestTreeItemDelegate : public QStyledItemDelegate
Q_OBJECT
public:
explicit TestTreeItemDelegate(QObject *parent = nullptr);
- ~TestTreeItemDelegate();
public:
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
diff --git a/src/plugins/autotest/testtreemodel.cpp b/src/plugins/autotest/testtreemodel.cpp
index 0b9eaaa426..7e4e577812 100644
--- a/src/plugins/autotest/testtreemodel.cpp
+++ b/src/plugins/autotest/testtreemodel.cpp
@@ -383,7 +383,7 @@ void TestTreeModel::revalidateCheckState(TestTreeItem *item)
|| type == TestTreeItem::TestDataTag) {
return;
}
- const Qt::CheckState oldState = (Qt::CheckState)item->data(0, Qt::CheckStateRole).toInt();
+ const Qt::CheckState oldState = Qt::CheckState(item->data(0, Qt::CheckStateRole).toInt());
Qt::CheckState newState = Qt::Checked;
bool foundChecked = false;
bool foundUnchecked = false;
diff --git a/src/plugins/autotest/testtreemodel.h b/src/plugins/autotest/testtreemodel.h
index 561e76302a..2945765d47 100644
--- a/src/plugins/autotest/testtreemodel.h
+++ b/src/plugins/autotest/testtreemodel.h
@@ -47,7 +47,7 @@ class AUTOTESTSHARED_EXPORT TestTreeModel : public Utils::TreeModel<>
Q_OBJECT
public:
static TestTreeModel* instance();
- ~TestTreeModel();
+ ~TestTreeModel() override;
bool setData(const QModelIndex &index, const QVariant &value, int role) override;
Qt::ItemFlags flags(const QModelIndex &index) const override;
diff --git a/src/plugins/autotoolsprojectmanager/autogenstep.cpp b/src/plugins/autotoolsprojectmanager/autogenstep.cpp
index 0106a435b8..3bcb90d052 100644
--- a/src/plugins/autotoolsprojectmanager/autogenstep.cpp
+++ b/src/plugins/autotoolsprojectmanager/autogenstep.cpp
@@ -56,7 +56,7 @@ const char AUTOGEN_STEP_ID[] = "AutotoolsProjectManager.AutogenStep";
AutogenStepFactory::AutogenStepFactory()
{
registerStep<AutogenStep>(AUTOGEN_STEP_ID);
- setDisplayName(tr("Autogen", "Display name for AutotoolsProjectManager::AutogenStep id."));
+ setDisplayName(AutogenStep::tr("Autogen", "Display name for AutotoolsProjectManager::AutogenStep id."));
setSupportedProjectType(Constants::AUTOTOOLS_PROJECT_ID);
setSupportedStepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
}
diff --git a/src/plugins/autotoolsprojectmanager/autogenstep.h b/src/plugins/autotoolsprojectmanager/autogenstep.h
index 320c0bacaf..a4659ebcbc 100644
--- a/src/plugins/autotoolsprojectmanager/autogenstep.h
+++ b/src/plugins/autotoolsprojectmanager/autogenstep.h
@@ -50,8 +50,6 @@ class AutogenStepConfigWidget;
*/
class AutogenStepFactory : public ProjectExplorer::BuildStepFactory
{
- Q_OBJECT
-
public:
AutogenStepFactory();
};
diff --git a/src/plugins/autotoolsprojectmanager/autoreconfstep.cpp b/src/plugins/autotoolsprojectmanager/autoreconfstep.cpp
index 473e587d78..51e2e34751 100644
--- a/src/plugins/autotoolsprojectmanager/autoreconfstep.cpp
+++ b/src/plugins/autotoolsprojectmanager/autoreconfstep.cpp
@@ -55,7 +55,7 @@ const char AUTORECONF_ADDITIONAL_ARGUMENTS_KEY[] = "AutotoolsProjectManager.Auto
AutoreconfStepFactory::AutoreconfStepFactory()
{
registerStep<AutoreconfStep>(AUTORECONF_STEP_ID);
- setDisplayName(tr("Autoreconf", "Display name for AutotoolsProjectManager::AutoreconfStep id."));
+ setDisplayName(AutoreconfStep::tr("Autoreconf", "Display name for AutotoolsProjectManager::AutoreconfStep id."));
setSupportedProjectType(Constants::AUTOTOOLS_PROJECT_ID);
setSupportedStepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
}
diff --git a/src/plugins/autotoolsprojectmanager/autoreconfstep.h b/src/plugins/autotoolsprojectmanager/autoreconfstep.h
index 160f6fc5c1..7aa345c148 100644
--- a/src/plugins/autotoolsprojectmanager/autoreconfstep.h
+++ b/src/plugins/autotoolsprojectmanager/autoreconfstep.h
@@ -49,8 +49,6 @@ class AutoreconfStep;
*/
class AutoreconfStepFactory : public ProjectExplorer::BuildStepFactory
{
- Q_OBJECT
-
public:
AutoreconfStepFactory();
};
diff --git a/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.cpp b/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.cpp
index d930c380d7..c4f90b83c1 100644
--- a/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.cpp
+++ b/src/plugins/autotoolsprojectmanager/autotoolsbuildconfiguration.cpp
@@ -89,14 +89,12 @@ void AutotoolsBuildConfiguration::initialize(const BuildInfo *info)
configureStep, &ConfigureStep::notifyBuildDirectoryChanged);
// make
- MakeStep *makeStep = new MakeStep(buildSteps);
+ MakeStep *makeStep = new MakeStep(buildSteps, "all");
buildSteps->insertStep(2, makeStep);
- makeStep->setBuildTarget(QLatin1String("all"), /*on =*/ true);
// ### Build Steps Clean ###
BuildStepList *cleanSteps = stepList(BUILDSTEPS_CLEAN);
- MakeStep *cleanMakeStep = new MakeStep(cleanSteps);
- cleanMakeStep->setAdditionalArguments("clean");
+ MakeStep *cleanMakeStep = new MakeStep(cleanSteps, "clean");
cleanMakeStep->setClean(true);
cleanSteps->insertStep(0, cleanMakeStep);
}
diff --git a/src/plugins/autotoolsprojectmanager/configurestep.cpp b/src/plugins/autotoolsprojectmanager/configurestep.cpp
index 7d370e2ded..5ae119553d 100644
--- a/src/plugins/autotoolsprojectmanager/configurestep.cpp
+++ b/src/plugins/autotoolsprojectmanager/configurestep.cpp
@@ -70,7 +70,7 @@ static QString projectDirRelativeToBuildDir(BuildConfiguration *bc) {
ConfigureStepFactory::ConfigureStepFactory()
{
registerStep<ConfigureStep>(CONFIGURE_STEP_ID);
- setDisplayName(tr("Configure", "Display name for AutotoolsProjectManager::ConfigureStep id."));
+ setDisplayName(ConfigureStep::tr("Configure", "Display name for AutotoolsProjectManager::ConfigureStep id."));
setSupportedProjectType(Constants::AUTOTOOLS_PROJECT_ID);
setSupportedStepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
}
diff --git a/src/plugins/autotoolsprojectmanager/configurestep.h b/src/plugins/autotoolsprojectmanager/configurestep.h
index 2f5ce3e65e..0ab97fbae3 100644
--- a/src/plugins/autotoolsprojectmanager/configurestep.h
+++ b/src/plugins/autotoolsprojectmanager/configurestep.h
@@ -49,8 +49,6 @@ class ConfigureStepConfigWidget;
*/
class ConfigureStepFactory : public ProjectExplorer::BuildStepFactory
{
- Q_OBJECT
-
public:
ConfigureStepFactory();
};
diff --git a/src/plugins/autotoolsprojectmanager/makestep.cpp b/src/plugins/autotoolsprojectmanager/makestep.cpp
index 222978d44a..315d235c9b 100644
--- a/src/plugins/autotoolsprojectmanager/makestep.cpp
+++ b/src/plugins/autotoolsprojectmanager/makestep.cpp
@@ -31,220 +31,39 @@
#include "autotoolsbuildconfiguration.h"
#include <projectexplorer/buildsteplist.h>
-#include <projectexplorer/target.h>
-#include <projectexplorer/toolchain.h>
-#include <projectexplorer/gnumakeparser.h>
-#include <projectexplorer/kitinformation.h>
-#include <projectexplorer/projectexplorer.h>
#include <projectexplorer/projectexplorerconstants.h>
-#include <qtsupport/qtkitinformation.h>
-#include <qtsupport/qtparser.h>
-#include <utils/qtcprocess.h>
-
-#include <QVariantMap>
-#include <QLineEdit>
-#include <QFormLayout>
using namespace AutotoolsProjectManager;
using namespace AutotoolsProjectManager::Internal;
using namespace AutotoolsProjectManager::Constants;
-using namespace ProjectExplorer;
-using namespace ProjectExplorer::Constants;
const char MAKE_STEP_ID[] = "AutotoolsProjectManager.MakeStep";
-const char CLEAN_KEY[] = "AutotoolsProjectManager.MakeStep.Clean";
-const char BUILD_TARGETS_KEY[] = "AutotoolsProjectManager.MakeStep.BuildTargets";
-const char MAKE_STEP_ADDITIONAL_ARGUMENTS_KEY[] = "AutotoolsProjectManager.MakeStep.AdditionalArguments";
-
// MakeStepFactory
MakeStepFactory::MakeStepFactory()
{
- setObjectName("Autotools::MakeStepFactory");
- registerStep<MakeStep>(MAKE_STEP_ID);
- setDisplayName(tr("Make", "Display name for AutotoolsProjectManager::MakeStep id."));
+ struct Step : public MakeStep
+ {
+ Step(ProjectExplorer::BuildStepList *bsl) : MakeStep(bsl)
+ {
+ if (bsl->id() == ProjectExplorer::Constants::BUILDSTEPS_CLEAN) {
+ setBuildTarget("clean", true);
+ setClean(true);
+ } else {
+ setBuildTarget("all", true);
+ }
+ }
+ };
+
+ registerStep<Step>(MAKE_STEP_ID);
+ setDisplayName(ProjectExplorer::MakeStep::defaultDisplayName());
setSupportedProjectType(AUTOTOOLS_PROJECT_ID);
}
// MakeStep
-MakeStep::MakeStep(BuildStepList *bsl) : AbstractProcessStep(bsl, MAKE_STEP_ID)
-{
- setDefaultDisplayName(tr("Make"));
-}
-
-void MakeStep::setClean(bool clean)
-{
- m_clean = clean;
-}
-
-bool MakeStep::init(QList<const BuildStep *> &earlierSteps)
-{
- BuildConfiguration *bc = buildConfiguration();
- if (!bc)
- bc = target()->activeBuildConfiguration();
- if (!bc)
- emit addTask(Task::buildConfigurationMissingTask());
-
- QList<ToolChain *> tcList = ToolChainKitInformation::toolChains(target()->kit());
- if (tcList.isEmpty())
- emit addTask(Task::compilerMissingTask());
-
- if (tcList.isEmpty() || !bc) {
- emitFaultyConfigurationMessage();
- return false;
- }
-
- QString arguments = Utils::QtcProcess::joinArgs(m_buildTargets);
- Utils::QtcProcess::addArgs(&arguments, additionalArguments());
-
- setIgnoreReturnValue(m_clean);
-
- ProcessParameters *pp = processParameters();
- pp->setMacroExpander(bc->macroExpander());
- Utils::Environment env = bc->environment();
- Utils::Environment::setupEnglishOutput(&env);
- pp->setEnvironment(env);
- pp->setWorkingDirectory(bc->buildDirectory().toString());
- pp->setCommand(tcList.at(0)->makeCommand(bc->environment()));
- pp->setArguments(arguments);
- pp->resolveAll();
-
- setOutputParser(new GnuMakeParser());
- IOutputParser *parser = target()->kit()->createOutputParser();
- if (parser)
- appendOutputParser(parser);
- outputParser()->setWorkingDirectory(pp->effectiveWorkingDirectory());
-
- return AbstractProcessStep::init(earlierSteps);
-}
-
-void MakeStep::run(QFutureInterface<bool> &interface)
-{
- AbstractProcessStep::run(interface);
-}
-
-BuildStepConfigWidget *MakeStep::createConfigWidget()
-{
- return new MakeStepConfigWidget(this);
-}
-
-bool MakeStep::immutable() const
-{
- return false;
-}
-
-void MakeStep::setBuildTarget(const QString &target, bool on)
-{
- QStringList old = m_buildTargets;
- if (on && !old.contains(target))
- old << target;
- else if (!on && old.contains(target))
- old.removeOne(target);
-
- m_buildTargets = old;
-}
-
-void MakeStep::setAdditionalArguments(const QString &list)
+MakeStep::MakeStep(ProjectExplorer::BuildStepList *bsl, const QString &buildTarget)
+ : ProjectExplorer::MakeStep(bsl, MAKE_STEP_ID, buildTarget, {"all", "clean"})
{
- if (list == m_additionalArguments)
- return;
-
- m_additionalArguments = list;
-
- emit additionalArgumentsChanged(list);
-}
-
-QString MakeStep::additionalArguments() const
-{
- return m_additionalArguments;
-}
-
-QVariantMap MakeStep::toMap() const
-{
- QVariantMap map = AbstractProcessStep::toMap();
-
- map.insert(BUILD_TARGETS_KEY, m_buildTargets);
- map.insert(MAKE_STEP_ADDITIONAL_ARGUMENTS_KEY, m_additionalArguments);
- map.insert(CLEAN_KEY, m_clean);
- return map;
-}
-
-bool MakeStep::fromMap(const QVariantMap &map)
-{
- m_buildTargets = map.value(BUILD_TARGETS_KEY).toStringList();
- m_additionalArguments = map.value(MAKE_STEP_ADDITIONAL_ARGUMENTS_KEY).toString();
- m_clean = map.value(CLEAN_KEY).toBool();
-
- return BuildStep::fromMap(map);
-}
-
-///////////////////////////////
-// MakeStepConfigWidget class
-///////////////////////////////
-MakeStepConfigWidget::MakeStepConfigWidget(MakeStep *makeStep) :
- m_makeStep(makeStep),
- m_summaryText(),
- m_additionalArguments(0)
-{
- QFormLayout *fl = new QFormLayout(this);
- fl->setMargin(0);
- fl->setFieldGrowthPolicy(QFormLayout::ExpandingFieldsGrow);
- setLayout(fl);
-
- m_additionalArguments = new QLineEdit(this);
- fl->addRow(tr("Arguments:"), m_additionalArguments);
- m_additionalArguments->setText(m_makeStep->additionalArguments());
-
- updateDetails();
-
- connect(m_additionalArguments, &QLineEdit::textChanged,
- makeStep, &MakeStep::setAdditionalArguments);
- connect(makeStep, &MakeStep::additionalArgumentsChanged,
- this, &MakeStepConfigWidget::updateDetails);
- m_makeStep->project()->subscribeSignal(&BuildConfiguration::environmentChanged, this, [this]() {
- if (static_cast<BuildConfiguration *>(sender())->isActive())
- updateDetails();
- });
- connect(makeStep->project(), &Project::activeProjectConfigurationChanged,
- this, [this](ProjectConfiguration *pc) {
- if (pc && pc->isActive())
- updateDetails();
- });
-}
-
-QString MakeStepConfigWidget::displayName() const
-{
- return tr("Make", "AutotoolsProjectManager::MakeStepConfigWidget display name.");
-}
-
-QString MakeStepConfigWidget::summaryText() const
-{
- return m_summaryText;
-}
-
-void MakeStepConfigWidget::updateDetails()
-{
- BuildConfiguration *bc = m_makeStep->buildConfiguration();
- if (!bc)
- bc = m_makeStep->target()->activeBuildConfiguration();
- QList<ToolChain *> tcList = ToolChainKitInformation::toolChains(m_makeStep->target()->kit());
-
- if (!tcList.isEmpty()) {
- QString arguments = Utils::QtcProcess::joinArgs(m_makeStep->m_buildTargets);
- Utils::QtcProcess::addArgs(&arguments, m_makeStep->additionalArguments());
-
- ProcessParameters param;
- param.setMacroExpander(m_makeStep->macroExpander());
- param.setEnvironment(bc->environment());
- param.setWorkingDirectory(bc->buildDirectory().toString());
- param.setCommand(tcList.at(0)->makeCommand(bc->environment()));
- param.setArguments(arguments);
- m_summaryText = param.summary(displayName());
- } else {
- m_summaryText = "<b>" + ToolChainKitInformation::msgNoToolChainInTarget() + "</b>";
- }
-
- emit updateSummary();
}
diff --git a/src/plugins/autotoolsprojectmanager/makestep.h b/src/plugins/autotoolsprojectmanager/makestep.h
index 1ded149366..f738fd1057 100644
--- a/src/plugins/autotoolsprojectmanager/makestep.h
+++ b/src/plugins/autotoolsprojectmanager/makestep.h
@@ -27,31 +27,16 @@
#pragma once
-#include <projectexplorer/abstractprocessstep.h>
-#include <projectexplorer/task.h>
-
-QT_BEGIN_NAMESPACE
-class QLineEdit;
-QT_END_NAMESPACE
+#include <projectexplorer/makestep.h>
namespace AutotoolsProjectManager {
namespace Internal {
-class AutotoolsProject;
-class MakeStep;
-
///////////////////////////
// MakeStepFactory class
///////////////////////////
-/**
- * @brief Implementation of the ProjectExplorer::IBuildStepFactory interface.
- *
- * The factory is used to create instances of MakeStep.
- */
class MakeStepFactory : public ProjectExplorer::BuildStepFactory
{
- Q_OBJECT
-
public:
MakeStepFactory();
};
@@ -59,71 +44,12 @@ public:
/////////////////////
// MakeStep class
/////////////////////
-/**
- * @brief Implementation of the ProjectExplorer::AbstractProcessStep interface.
- *
- * A make step can be configured by selecting the "Projects" button of Qt Creator
- * (in the left hand side menu) and under "Build Settings".
- *
- * It is possible for the user to specify custom arguments. The corresponding
- * configuration widget is created by MakeStep::createConfigWidget and is
- * represented by an instance of the class MakeStepConfigWidget.
- */
-class MakeStep : public ProjectExplorer::AbstractProcessStep
-{
- Q_OBJECT
- friend class MakeStepFactory;
- friend class MakeStepConfigWidget;
-
-public:
- explicit MakeStep(ProjectExplorer::BuildStepList *bsl);
-
- bool init(QList<const BuildStep *> &earlierSteps) override;
- void run(QFutureInterface<bool> &interface) override;
- ProjectExplorer::BuildStepConfigWidget *createConfigWidget() override;
- void setClean(bool clean);
- bool immutable() const override;
- void setBuildTarget(const QString &target, bool on);
- QString additionalArguments() const;
- QVariantMap toMap() const override;
-
- void setAdditionalArguments(const QString &list);
-
-signals:
- void additionalArgumentsChanged(const QString &);
-
-private:
- bool fromMap(const QVariantMap &map) override;
-
- QStringList m_buildTargets;
- QString m_additionalArguments;
- bool m_clean = false;
-};
-
-///////////////////////////////
-// MakeStepConfigWidget class
-///////////////////////////////
-/**
- * @brief Implementation of the ProjectExplorer::BuildStepConfigWidget interface.
- *
- * Allows to configure a make step in the GUI.
- */
-class MakeStepConfigWidget : public ProjectExplorer::BuildStepConfigWidget
+class MakeStep : public ProjectExplorer::MakeStep
{
Q_OBJECT
public:
- MakeStepConfigWidget(MakeStep *makeStep);
-
- QString displayName() const override;
- QString summaryText() const override;
-
-private:
- void updateDetails();
-
- MakeStep *m_makeStep;
- QString m_summaryText;
- QLineEdit *m_additionalArguments;
+ explicit MakeStep(ProjectExplorer::BuildStepList *bsl, const QString &buildTarget = QString());
};
} // namespace Internal
diff --git a/src/plugins/baremetal/baremetalcustomrunconfiguration.cpp b/src/plugins/baremetal/baremetalcustomrunconfiguration.cpp
index 667c278e85..363d7a21d9 100644
--- a/src/plugins/baremetal/baremetalcustomrunconfiguration.cpp
+++ b/src/plugins/baremetal/baremetalcustomrunconfiguration.cpp
@@ -52,7 +52,7 @@ BareMetalCustomRunConfiguration::BareMetalCustomRunConfiguration(Target *target,
addExtraAspect(new ArgumentsAspect(this, "Qt4ProjectManager.MaemoRunConfiguration.Arguments"));
addExtraAspect(new WorkingDirectoryAspect(this, "BareMetal.RunConfig.WorkingDirectory"));
- setDefaultDisplayName(RunConfigurationFactory::decoratedTargetName(tr("Custom Executable)"), target));
+ setDefaultDisplayName(RunConfigurationFactory::decoratedTargetName(tr("Custom Executable"), target));
}
const char *BareMetalCustomRunConfiguration::Id = "BareMetal";
diff --git a/src/plugins/baremetal/defaultgdbserverprovider.h b/src/plugins/baremetal/defaultgdbserverprovider.h
index 28dd296560..f5cb1dd3db 100644
--- a/src/plugins/baremetal/defaultgdbserverprovider.h
+++ b/src/plugins/baremetal/defaultgdbserverprovider.h
@@ -79,8 +79,6 @@ public:
bool canRestore(const QVariantMap &data) const final;
GdbServerProvider *restore(const QVariantMap &data) final;
-
- GdbServerProviderConfigWidget *configurationWidget(GdbServerProvider *);
};
class DefaultGdbServerProviderConfigWidget : public GdbServerProviderConfigWidget
diff --git a/src/plugins/baremetal/gdbserverproviderssettingspage.cpp b/src/plugins/baremetal/gdbserverproviderssettingspage.cpp
index c34a38f29a..3eb43c8911 100644
--- a/src/plugins/baremetal/gdbserverproviderssettingspage.cpp
+++ b/src/plugins/baremetal/gdbserverproviderssettingspage.cpp
@@ -61,19 +61,10 @@ public:
GdbServerProviderNode(GdbServerProvider *provider, bool changed = false)
: provider(provider), changed(changed)
{
- widget = provider ? provider->configurationWidget() : 0;
- }
-
- Qt::ItemFlags flags(int) const override
- {
- return provider ? Qt::ItemIsEnabled|Qt::ItemIsSelectable : Qt::ItemIsEnabled;
}
QVariant data(int column, int role) const override
{
- if (!provider)
- return QVariant();
-
if (role == Qt::FontRole) {
QFont f = QApplication::font();
if (changed)
@@ -89,14 +80,12 @@ public:
return QVariant();
}
- GdbServerProvider *provider;
- GdbServerProviderConfigWidget *widget;
- bool changed;
+ GdbServerProvider *provider = nullptr;
+ GdbServerProviderConfigWidget *widget = nullptr;
+ bool changed = false;
};
-
-GdbServerProviderModel::GdbServerProviderModel(QObject *parent)
- : TreeModel<>(parent)
+GdbServerProviderModel::GdbServerProviderModel()
{
setHeader({tr("Name"), tr("Type")});
@@ -206,19 +195,13 @@ void GdbServerProviderModel::markForAddition(GdbServerProvider *provider)
GdbServerProviderNode *GdbServerProviderModel::createNode(
GdbServerProvider *provider, bool changed)
{
- auto n = new GdbServerProviderNode(provider, changed);
- if (n->widget) {
- connect(n->widget, &GdbServerProviderConfigWidget::dirty, this, [this, n] {
- for (TreeItem *item : *rootItem()) {
- auto nn = static_cast<GdbServerProviderNode *>(item);
- if (nn->widget == n->widget) {
- nn->changed = true;
- nn->update();
- }
- }
- });
- }
- return n;
+ auto node = new GdbServerProviderNode(provider, changed);
+ node->widget = provider->configurationWidget();
+ connect(node->widget, &GdbServerProviderConfigWidget::dirty, this, [node] {
+ node->changed = true;
+ node->update();
+ });
+ return node;
}
void GdbServerProviderModel::addProvider(GdbServerProvider *provider)
diff --git a/src/plugins/baremetal/gdbserverproviderssettingspage.h b/src/plugins/baremetal/gdbserverproviderssettingspage.h
index b8fa04cc4b..28c5bc3b4c 100644
--- a/src/plugins/baremetal/gdbserverproviderssettingspage.h
+++ b/src/plugins/baremetal/gdbserverproviderssettingspage.h
@@ -46,12 +46,13 @@ class GdbServerProviderFactory;
class GdbServerProviderNode;
class GdbServerProvidersSettingsWidget;
-class GdbServerProviderModel : public Utils::TreeModel<>
+class GdbServerProviderModel
+ : public Utils::TreeModel<Utils::TypedTreeItem<GdbServerProviderNode>, GdbServerProviderNode>
{
Q_OBJECT
public:
- explicit GdbServerProviderModel(QObject *parent = 0);
+ GdbServerProviderModel();
GdbServerProvider *provider(const QModelIndex &) const;
GdbServerProviderConfigWidget *widget(const QModelIndex &) const;
@@ -82,14 +83,14 @@ class GdbServerProvidersSettingsPage : public Core::IOptionsPage
Q_OBJECT
public:
- explicit GdbServerProvidersSettingsPage(QObject *parent = 0);
+ explicit GdbServerProvidersSettingsPage(QObject *parent = nullptr);
private:
QWidget *widget();
void apply();
void finish();
- GdbServerProvidersSettingsWidget *m_configWidget = 0;
+ GdbServerProvidersSettingsWidget *m_configWidget = nullptr;
};
} // namespace Internal
diff --git a/src/plugins/clangcodemodel/clangassistproposal.cpp b/src/plugins/clangcodemodel/clangassistproposal.cpp
deleted file mode 100644
index 16b9937908..0000000000
--- a/src/plugins/clangcodemodel/clangassistproposal.cpp
+++ /dev/null
@@ -1,58 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of Qt Creator.
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-****************************************************************************/
-
-#include "clangassistproposal.h"
-
-#include <texteditor/texteditor.h>
-
-namespace ClangCodeModel {
-namespace Internal {
-
-ClangAssistProposal::ClangAssistProposal(int cursorPos, TextEditor::GenericProposalModelPtr model)
- : GenericProposal(cursorPos, model)
-{
-}
-
-bool ClangAssistProposal::isCorrective(TextEditor::TextEditorWidget *editorWidget) const
-{
- auto clangAssistProposalModel = model().staticCast<ClangAssistProposalModel>();
-
- return clangAssistProposalModel->neededCorrection()
- == ClangBackEnd::CompletionCorrection::DotToArrowCorrection
- && editorWidget->textAt(basePosition() - 1, 1) == ".";
-}
-
-void ClangAssistProposal::makeCorrection(TextEditor::TextEditorWidget *editorWidget)
-{
- const int oldPosition = editorWidget->position();
- editorWidget->setCursorPosition(basePosition() - 1);
- editorWidget->replace(1, QLatin1String("->"));
- editorWidget->setCursorPosition(oldPosition + 1);
- moveBasePosition(1);
-}
-
-} // namespace Internal
-} // namespace ClangCodeModel
-
diff --git a/src/plugins/clangcodemodel/clangassistproposalitem.cpp b/src/plugins/clangcodemodel/clangassistproposalitem.cpp
index ef3b394f99..28e8401d8f 100644
--- a/src/plugins/clangcodemodel/clangassistproposalitem.cpp
+++ b/src/plugins/clangcodemodel/clangassistproposalitem.cpp
@@ -26,6 +26,7 @@
#include "clangassistproposalitem.h"
#include "clangcompletionchunkstotextconverter.h"
+#include "clangfixitoperation.h"
#include <cplusplus/Icons.h>
#include <cplusplus/MatchingText.h>
@@ -35,9 +36,12 @@
#include <texteditor/completionsettings.h>
#include <texteditor/texteditorsettings.h>
+#include <QCoreApplication>
#include <QTextCursor>
#include <utils/algorithm.h>
+#include <utils/textutils.h>
+#include <utils/qtcassert.h>
using namespace CPlusPlus;
using namespace ClangBackEnd;
@@ -53,7 +57,7 @@ bool ClangAssistProposalItem::prematurelyApplies(const QChar &typedCharacter) co
applies = QString::fromLatin1("(,").contains(typedCharacter);
else if (m_completionOperator == T_STRING_LITERAL || m_completionOperator == T_ANGLE_STRING_LITERAL)
applies = (typedCharacter == QLatin1Char('/')) && text().endsWith(QLatin1Char('/'));
- else if (codeCompletion().completionKind == CodeCompletion::ObjCMessageCompletionKind)
+ else if (firstCodeCompletion().completionKind == CodeCompletion::ObjCMessageCompletionKind)
applies = QString::fromLatin1(";.,").contains(typedCharacter);
else
applies = QString::fromLatin1(";.,:(").contains(typedCharacter);
@@ -69,14 +73,6 @@ bool ClangAssistProposalItem::implicitlyApplies() const
return true;
}
-static void moveToPrevChar(TextEditor::TextDocumentManipulatorInterface &manipulator,
- QTextCursor &cursor)
-{
- cursor.movePosition(QTextCursor::PreviousCharacter);
- while (manipulator.characterAt(cursor.position()).isSpace())
- cursor.movePosition(QTextCursor::PreviousCharacter);
-}
-
static QString textUntilPreviousStatement(TextEditor::TextDocumentManipulatorInterface &manipulator,
int startPosition)
{
@@ -114,12 +110,45 @@ static bool isAtUsingDeclaration(TextEditor::TextDocumentManipulatorInterface &m
});
}
+static QString methodDefinitionParameters(const CodeCompletionChunks &chunks)
+{
+ QString result;
+
+ auto typedTextChunkIt = std::find_if(chunks.begin(), chunks.end(),
+ [](const CodeCompletionChunk &chunk) {
+ return chunk.kind == CodeCompletionChunk::TypedText;
+ });
+ if (typedTextChunkIt == chunks.end())
+ return result;
+
+ std::for_each(++typedTextChunkIt, chunks.end(), [&result](const CodeCompletionChunk &chunk) {
+ if (chunk.kind == CodeCompletionChunk::Placeholder && chunk.text.contains('=')) {
+ Utf8String text = chunk.text.mid(0, chunk.text.indexOf('='));
+ if (text.endsWith(' '))
+ text.chop(1);
+ result += text;
+ } else {
+ result += chunk.text;
+ }
+ });
+
+ return result;
+}
+
void ClangAssistProposalItem::apply(TextEditor::TextDocumentManipulatorInterface &manipulator,
int basePosition) const
{
- const CodeCompletion ccr = codeCompletion();
+ const CodeCompletion ccr = firstCodeCompletion();
+
+ if (!ccr.requiredFixIts.empty()) {
+ ClangFixItOperation fixItOperation(Utf8String(), ccr.requiredFixIts);
+ fixItOperation.perform();
+
+ const int shift = fixItsShift(manipulator);
+ basePosition += shift;
+ }
- QString textToBeInserted = text();
+ QString textToBeInserted = m_text;
QString extraCharacters;
int extraLength = 0;
int cursorOffset = 0;
@@ -152,7 +181,9 @@ void ClangAssistProposalItem::apply(TextEditor::TextDocumentManipulatorInterface
if (autoInsertBrackets &&
(ccr.completionKind == CodeCompletion::FunctionCompletionKind
+ || ccr.completionKind == CodeCompletion::FunctionDefinitionCompletionKind
|| ccr.completionKind == CodeCompletion::DestructorCompletionKind
+ || ccr.completionKind == CodeCompletion::ConstructorCompletionKind
|| ccr.completionKind == CodeCompletion::SignalCompletionKind
|| ccr.completionKind == CodeCompletion::SlotCompletionKind)) {
// When the user typed the opening parenthesis, he'll likely also type the closing one,
@@ -160,21 +191,27 @@ void ClangAssistProposalItem::apply(TextEditor::TextDocumentManipulatorInterface
// inserted closing parenthesis.
const bool skipClosingParenthesis = m_typedCharacter != QLatin1Char('(');
QTextCursor cursor = manipulator.textCursorAt(basePosition);
- cursor.movePosition(QTextCursor::PreviousWord);
- while (manipulator.characterAt(cursor.position()) == ':')
- cursor.movePosition(QTextCursor::PreviousWord, QTextCursor::MoveAnchor, 2);
- // Move to the last character in the previous word
- cursor.movePosition(QTextCursor::NextWord);
- moveToPrevChar(manipulator, cursor);
bool abandonParen = false;
- if (manipulator.characterAt(cursor.position()) == '&') {
- moveToPrevChar(manipulator, cursor);
+ if (Utils::Text::matchPreviousWord(manipulator, cursor, "&")) {
+ Utils::Text::moveToPrevChar(manipulator, cursor);
+ Utils::Text::moveToPrevChar(manipulator, cursor);
const QChar prevChar = manipulator.characterAt(cursor.position());
+ cursor.setPosition(basePosition);
abandonParen = QString("(;,{}").contains(prevChar);
}
if (!abandonParen)
abandonParen = isAtUsingDeclaration(manipulator, basePosition);
+
+ if (!abandonParen && ccr.completionKind == CodeCompletion::FunctionDefinitionCompletionKind) {
+ const CodeCompletionChunk resultType = ccr.chunks.first();
+ QTC_ASSERT(resultType.kind == CodeCompletionChunk::ResultType, return;);
+ if (Utils::Text::matchPreviousWord(manipulator, cursor, resultType.text.toString())) {
+ extraCharacters += methodDefinitionParameters(ccr.chunks);
+ // To skip the next block.
+ abandonParen = true;
+ }
+ }
if (!abandonParen) {
if (completionSettings.m_spaceAfterFunctionName)
extraCharacters += QLatin1Char(' ');
@@ -269,7 +306,49 @@ void ClangAssistProposalItem::setText(const QString &text)
QString ClangAssistProposalItem::text() const
{
- return m_text;
+ return m_text + (requiresFixIts() ? fixItText() : QString());
+}
+
+const QVector<ClangBackEnd::FixItContainer> &ClangAssistProposalItem::firstCompletionFixIts() const
+{
+ return firstCodeCompletion().requiredFixIts;
+}
+
+// FIXME: Indicate required fix-it without adding extra text.
+QString ClangAssistProposalItem::fixItText() const
+{
+ const FixItContainer &fixIt = firstCompletionFixIts().first();
+ const SourceRangeContainer &range = fixIt.range;
+ return QCoreApplication::translate("ClangCodeModel::ClangAssistProposalItem",
+ " (requires to correct [%1:%2-%3:%4] to \"%5\")")
+ .arg(range.start.line)
+ .arg(range.start.column)
+ .arg(range.end.line)
+ .arg(range.end.column)
+ .arg(fixIt.text.toString());
+}
+
+int ClangAssistProposalItem::fixItsShift(
+ const TextEditor::TextDocumentManipulatorInterface &manipulator) const
+{
+ const QVector<ClangBackEnd::FixItContainer> &requiredFixIts = firstCompletionFixIts();
+ if (requiredFixIts.empty())
+ return 0;
+
+ int shift = 0;
+ QTextCursor cursor = manipulator.textCursorAt(0);
+ for (const FixItContainer &fixIt : requiredFixIts) {
+ const int fixItStartPos = Utils::Text::positionInText(
+ cursor.document(),
+ static_cast<int>(fixIt.range.start.line),
+ static_cast<int>(fixIt.range.start.column));
+ const int fixItEndPos = Utils::Text::positionInText(
+ cursor.document(),
+ static_cast<int>(fixIt.range.end.line),
+ static_cast<int>(fixIt.range.end.column));
+ shift += fixIt.text.toString().length() - (fixItEndPos - fixItStartPos);
+ }
+ return shift;
}
QIcon ClangAssistProposalItem::icon() const
@@ -278,57 +357,59 @@ QIcon ClangAssistProposalItem::icon() const
static const char SNIPPET_ICON_PATH[] = ":/texteditor/images/snippet.png";
static const QIcon snippetIcon = QIcon(QLatin1String(SNIPPET_ICON_PATH));
- switch (m_codeCompletion.completionKind) {
+ const ClangBackEnd::CodeCompletion &completion = firstCodeCompletion();
+ switch (completion.completionKind) {
case CodeCompletion::ClassCompletionKind:
case CodeCompletion::TemplateClassCompletionKind:
case CodeCompletion::TypeAliasCompletionKind:
- return Icons::iconForType(Icons::ClassIconType);
+ return ::Utils::CodeModelIcon::iconForType(::Utils::CodeModelIcon::Class);
case CodeCompletion::EnumerationCompletionKind:
- return Icons::iconForType(Icons::EnumIconType);
+ return ::Utils::CodeModelIcon::iconForType(::Utils::CodeModelIcon::Enum);
case CodeCompletion::EnumeratorCompletionKind:
- return Icons::iconForType(Icons::EnumeratorIconType);
+ return ::Utils::CodeModelIcon::iconForType(::Utils::CodeModelIcon::Enumerator);
case CodeCompletion::ConstructorCompletionKind:
case CodeCompletion::DestructorCompletionKind:
case CodeCompletion::FunctionCompletionKind:
+ case CodeCompletion::FunctionDefinitionCompletionKind:
case CodeCompletion::TemplateFunctionCompletionKind:
case CodeCompletion::ObjCMessageCompletionKind:
- switch (m_codeCompletion.availability) {
+ switch (completion.availability) {
case CodeCompletion::Available:
case CodeCompletion::Deprecated:
- return Icons::iconForType(Icons::FuncPublicIconType);
+ return ::Utils::CodeModelIcon::iconForType(::Utils::CodeModelIcon::FuncPublic);
default:
- return Icons::iconForType(Icons::FuncPrivateIconType);
+ return ::Utils::CodeModelIcon::iconForType(::Utils::CodeModelIcon::FuncPrivate);
}
case CodeCompletion::SignalCompletionKind:
- return Icons::iconForType(Icons::SignalIconType);
+ return ::Utils::CodeModelIcon::iconForType(::Utils::CodeModelIcon::Signal);
case CodeCompletion::SlotCompletionKind:
- switch (m_codeCompletion.availability) {
+ switch (completion.availability) {
case CodeCompletion::Available:
case CodeCompletion::Deprecated:
- return Icons::iconForType(Icons::SlotPublicIconType);
+ return ::Utils::CodeModelIcon::iconForType(::Utils::CodeModelIcon::SlotPublic);
case CodeCompletion::NotAccessible:
case CodeCompletion::NotAvailable:
- return Icons::iconForType(Icons::SlotPrivateIconType);
+ return ::Utils::CodeModelIcon::iconForType(::Utils::CodeModelIcon::SlotPrivate);
}
break;
case CodeCompletion::NamespaceCompletionKind:
- return Icons::iconForType(Icons::NamespaceIconType);
+ return ::Utils::CodeModelIcon::iconForType(::Utils::CodeModelIcon::Namespace);
case CodeCompletion::PreProcessorCompletionKind:
- return Icons::iconForType(Icons::MacroIconType);
+ return ::Utils::CodeModelIcon::iconForType(::Utils::CodeModelIcon::Macro);
case CodeCompletion::VariableCompletionKind:
- switch (m_codeCompletion.availability) {
+ switch (completion.availability) {
case CodeCompletion::Available:
case CodeCompletion::Deprecated:
- return Icons::iconForType(Icons::VarPublicIconType);
+ return ::Utils::CodeModelIcon::iconForType(::Utils::CodeModelIcon::VarPublic);
default:
- return Icons::iconForType(Icons::VarPrivateIconType);
+ return ::Utils::CodeModelIcon::iconForType(::Utils::CodeModelIcon::VarPrivate);
}
case CodeCompletion::KeywordCompletionKind:
- return Icons::iconForType(Icons::KeywordIconType);
+ return ::Utils::CodeModelIcon::iconForType(::Utils::CodeModelIcon::Keyword);
case CodeCompletion::ClangSnippetKind:
return snippetIcon;
case CodeCompletion::Other:
- return Icons::iconForType(Icons::UnknownIconType);
+ return ::Utils::CodeModelIcon::iconForType(::Utils::CodeModelIcon::Unknown);
default:
break;
}
@@ -338,11 +419,15 @@ QIcon ClangAssistProposalItem::icon() const
QString ClangAssistProposalItem::detail() const
{
- QString detail = CompletionChunksToTextConverter::convertToToolTipWithHtml(
- m_codeCompletion.chunks, m_codeCompletion.completionKind);
-
- if (!m_codeCompletion.briefComment.isEmpty())
- detail += QStringLiteral("\n\n") + m_codeCompletion.briefComment.toString();
+ QString detail;
+ for (const ClangBackEnd::CodeCompletion &codeCompletion : m_codeCompletions) {
+ if (!detail.isEmpty())
+ detail += "<br>";
+ detail += CompletionChunksToTextConverter::convertToToolTipWithHtml(
+ codeCompletion.chunks, codeCompletion.completionKind);
+ if (!codeCompletion.briefComment.isEmpty())
+ detail += "<br>" + codeCompletion.briefComment.toString();
+ }
return detail;
}
@@ -362,6 +447,11 @@ quint64 ClangAssistProposalItem::hash() const
return 0;
}
+bool ClangAssistProposalItem::requiresFixIts() const
+{
+ return !firstCompletionFixIts().empty();
+}
+
bool ClangAssistProposalItem::hasOverloadsWithParameters() const
{
return m_hasOverloadsWithParameters;
@@ -377,14 +467,20 @@ void ClangAssistProposalItem::keepCompletionOperator(unsigned compOp)
m_completionOperator = compOp;
}
-void ClangAssistProposalItem::setCodeCompletion(const CodeCompletion &codeCompletion)
+void ClangAssistProposalItem::appendCodeCompletion(const CodeCompletion &codeCompletion)
+{
+ m_codeCompletions.push_back(codeCompletion);
+}
+
+const ClangBackEnd::CodeCompletion &ClangAssistProposalItem::firstCodeCompletion() const
{
- m_codeCompletion = codeCompletion;
+ return m_codeCompletions.at(0);
}
-const ClangBackEnd::CodeCompletion &ClangAssistProposalItem::codeCompletion() const
+void ClangAssistProposalItem::removeFirstCodeCompletion()
{
- return m_codeCompletion;
+ QTC_ASSERT(!m_codeCompletions.empty(), return;);
+ m_codeCompletions.erase(m_codeCompletions.begin());
}
} // namespace Internal
diff --git a/src/plugins/clangcodemodel/clangassistproposalitem.h b/src/plugins/clangcodemodel/clangassistproposalitem.h
index 90dcff35c8..c524c9b21d 100644
--- a/src/plugins/clangcodemodel/clangassistproposalitem.h
+++ b/src/plugins/clangcodemodel/clangassistproposalitem.h
@@ -50,17 +50,23 @@ public:
bool isSnippet() const final;
bool isValid() const final;
quint64 hash() const final;
+ bool requiresFixIts() const final;
void keepCompletionOperator(unsigned compOp);
bool hasOverloadsWithParameters() const;
void setHasOverloadsWithParameters(bool hasOverloadsWithParameters);
- void setCodeCompletion(const ClangBackEnd::CodeCompletion &codeCompletion);
- const ClangBackEnd::CodeCompletion &codeCompletion() const;
+ void appendCodeCompletion(const ClangBackEnd::CodeCompletion &firstCodeCompletion);
+ const ClangBackEnd::CodeCompletion &firstCodeCompletion() const;
+ void removeFirstCodeCompletion();
private:
- ClangBackEnd::CodeCompletion m_codeCompletion;
+ const QVector<ClangBackEnd::FixItContainer> &firstCompletionFixIts() const;
+ QString fixItText() const;
+ int fixItsShift(const TextEditor::TextDocumentManipulatorInterface &manipulator) const;
+
+ std::vector<ClangBackEnd::CodeCompletion> m_codeCompletions;
QList<ClangBackEnd::CodeCompletion> m_overloads;
bool m_hasOverloadsWithParameters = false;
QString m_text;
diff --git a/src/plugins/clangcodemodel/clangassistproposalmodel.cpp b/src/plugins/clangcodemodel/clangassistproposalmodel.cpp
index 9806fd929f..7fb13327f7 100644
--- a/src/plugins/clangcodemodel/clangassistproposalmodel.cpp
+++ b/src/plugins/clangcodemodel/clangassistproposalmodel.cpp
@@ -36,12 +36,6 @@ namespace Internal {
constexpr int SORT_LIMIT = 30000;
-ClangAssistProposalModel::ClangAssistProposalModel(
- ClangBackEnd::CompletionCorrection neededCorrection)
- : m_neededCorrection(neededCorrection)
-{
-}
-
bool ClangAssistProposalModel::containsDuplicates() const
{
return false;
@@ -62,6 +56,8 @@ void ClangAssistProposalModel::sort(const QString &/*prefix*/)
return static_cast<int>(first->prefixMatch())
< static_cast<int>(second->prefixMatch());
}
+ if (first->requiresFixIts() != second->requiresFixIts())
+ return first->requiresFixIts() < second->requiresFixIts();
return (first->order() > 0
&& (first->order() < second->order()
|| (first->order() == second->order() && first->text() < second->text())));
@@ -70,11 +66,6 @@ void ClangAssistProposalModel::sort(const QString &/*prefix*/)
std::sort(m_currentItems.begin(), m_currentItems.end(), currentItemsCompare);
}
-ClangBackEnd::CompletionCorrection ClangAssistProposalModel::neededCorrection() const
-{
- return m_neededCorrection;
-}
-
} // namespace Internal
} // namespace ClangCodeModel
diff --git a/src/plugins/clangcodemodel/clangassistproposalmodel.h b/src/plugins/clangcodemodel/clangassistproposalmodel.h
index b71d256856..cb2cb7edd3 100644
--- a/src/plugins/clangcodemodel/clangassistproposalmodel.h
+++ b/src/plugins/clangcodemodel/clangassistproposalmodel.h
@@ -37,17 +37,12 @@ namespace Internal {
class ClangAssistProposalModel : public TextEditor::GenericProposalModel
{
public:
- ClangAssistProposalModel(ClangBackEnd::CompletionCorrection neededCorrection);
+ ClangAssistProposalModel() = default;
bool containsDuplicates() const override;
bool isSortable(const QString &prefix) const override;
void sort(const QString &prefix) override;
-
- ClangBackEnd::CompletionCorrection neededCorrection() const;
-
-private:
- ClangBackEnd::CompletionCorrection m_neededCorrection;
};
} // namespace Internal
diff --git a/src/plugins/clangcodemodel/clangbackendreceiver.cpp b/src/plugins/clangcodemodel/clangbackendreceiver.cpp
index d340a990d3..7218695d61 100644
--- a/src/plugins/clangcodemodel/clangbackendreceiver.cpp
+++ b/src/plugins/clangcodemodel/clangbackendreceiver.cpp
@@ -187,10 +187,8 @@ void BackendReceiver::completions(const CompletionsMessage &message)
const quint64 ticket = message.ticketNumber;
QScopedPointer<ClangCompletionAssistProcessor> processor(m_assistProcessorsTable.take(ticket));
- if (processor) {
- processor->handleAvailableCompletions(message.codeCompletions,
- message.neededCorrection);
- }
+ if (processor)
+ processor->handleAvailableCompletions(message.codeCompletions);
}
void BackendReceiver::annotations(const AnnotationsMessage &message)
diff --git a/src/plugins/clangcodemodel/clangcodemodel.pro b/src/plugins/clangcodemodel/clangcodemodel.pro
index decfacf8bd..fd64057eff 100644
--- a/src/plugins/clangcodemodel/clangcodemodel.pro
+++ b/src/plugins/clangcodemodel/clangcodemodel.pro
@@ -8,7 +8,6 @@ requires(!isEmpty(LLVM_VERSION))
SOURCES += \
clangactivationsequencecontextprocessor.cpp \
clangactivationsequenceprocessor.cpp \
- clangassistproposal.cpp \
clangassistproposalitem.cpp \
clangassistproposalmodel.cpp \
clangbackendcommunicator.cpp \
@@ -46,7 +45,6 @@ SOURCES += \
HEADERS += \
clangactivationsequencecontextprocessor.h \
clangactivationsequenceprocessor.h \
- clangassistproposal.h \
clangassistproposalitem.h \
clangassistproposalmodel.h \
clangbackendcommunicator.h \
diff --git a/src/plugins/clangcodemodel/clangcodemodel.qbs b/src/plugins/clangcodemodel/clangcodemodel.qbs
index ce1cba0e1f..20e0cb269d 100644
--- a/src/plugins/clangcodemodel/clangcodemodel.qbs
+++ b/src/plugins/clangcodemodel/clangcodemodel.qbs
@@ -11,7 +11,9 @@ QtcPlugin {
Depends { name: "TextEditor" }
Depends { name: "Utils" }
Depends { name: "ClangSupport" }
+
Depends { name: "libclang"; required: false }
+ Depends { name: "clang_defines" }
pluginTestDepends: [
"CppEditor",
@@ -20,24 +22,11 @@ QtcPlugin {
condition: libclang.present
- cpp.defines: {
- var defines = base;
- // The following defines are used to determine the clang include path for intrinsics.
- defines.push('CLANG_VERSION="' + libclang.llvmVersion + '"');
- var resourceDir = FileInfo.joinPaths(libclang.llvmLibDir, "clang", libclang.llvmVersion,
- "include");
- defines.push('CLANG_RESOURCE_DIR="' + resourceDir + '"');
- defines.push('CLANG_BINDIR="' + libclang.llvmBinDir + '"');
- return defines;
- }
-
files: [
"clangactivationsequencecontextprocessor.cpp",
"clangactivationsequencecontextprocessor.h",
"clangactivationsequenceprocessor.cpp",
"clangactivationsequenceprocessor.h",
- "clangassistproposal.cpp",
- "clangassistproposal.h",
"clangassistproposalitem.cpp",
"clangassistproposalitem.h",
"clangassistproposalmodel.cpp",
diff --git a/src/plugins/clangcodemodel/clangcodemodelplugin.cpp b/src/plugins/clangcodemodel/clangcodemodelplugin.cpp
index b2c44f0e90..5edfcca397 100644
--- a/src/plugins/clangcodemodel/clangcodemodelplugin.cpp
+++ b/src/plugins/clangcodemodel/clangcodemodelplugin.cpp
@@ -27,27 +27,33 @@
#include "clangconstants.h"
#include "clangprojectsettingswidget.h"
+#include "clangutils.h"
#ifdef WITH_TESTS
# include "test/clangbatchfileprocessor.h"
# include "test/clangcodecompletion_test.h"
#endif
+#include <coreplugin/actionmanager/actioncontainer.h>
+#include <coreplugin/actionmanager/actionmanager.h>
+
#include <cpptools/cppmodelmanager.h>
+#include <projectexplorer/buildconfiguration.h>
#include <projectexplorer/projectpanelfactory.h>
#include <projectexplorer/projectexplorer.h>
#include <projectexplorer/session.h>
+#include <projectexplorer/target.h>
#include <projectexplorer/taskhub.h>
#include <texteditor/textmark.h>
+#include <QtConcurrent>
+
namespace ClangCodeModel {
namespace Internal {
-namespace {
-
-void addProjectPanelWidget()
+static void addProjectPanelWidget()
{
auto panelFactory = new ProjectExplorer::ProjectPanelFactory();
panelFactory->setPriority(60);
@@ -58,7 +64,32 @@ void addProjectPanelWidget()
ProjectExplorer::ProjectPanelFactory::registerFactory(panelFactory);
}
-} // anonymous namespace
+void ClangCodeModelPlugin::generateCompilationDB() {
+ using namespace CppTools;
+
+ ProjectExplorer::Project *project = ProjectExplorer::SessionManager::startupProject();
+ if (!project)
+ return;
+
+ m_generatorWatcher.setFuture(QtConcurrent::run(
+ &Utils::generateCompilationDB,
+ project->projectDirectory(),
+ CppModelManager::instance()->projectInfo(project)));
+}
+
+static bool isDBGenerationEnabled(ProjectExplorer::Project *project)
+{
+ using namespace CppTools;
+ if (!project)
+ return false;
+ ProjectInfo projectInfo = CppModelManager::instance()->projectInfo(project);
+ return projectInfo.isValid() && !projectInfo.projectParts().isEmpty();
+}
+
+ClangCodeModelPlugin::~ClangCodeModelPlugin()
+{
+ m_generatorWatcher.waitForFinished();
+}
bool ClangCodeModelPlugin::initialize(const QStringList &arguments, QString *errorMessage)
{
@@ -77,9 +108,69 @@ bool ClangCodeModelPlugin::initialize(const QStringList &arguments, QString *err
addProjectPanelWidget();
+ createCompilationDBButton();
+
return true;
}
+void ClangCodeModelPlugin::createCompilationDBButton()
+{
+ Core::ActionContainer *mbuild =
+ Core::ActionManager::actionContainer(ProjectExplorer::Constants::M_BUILDPROJECT);
+ // generate compile_commands.json
+ m_generateCompilationDBAction = new ::Utils::ParameterAction(
+ tr("Generate compilation database"),
+ tr("Generate compilation database for \"%1\""),
+ ::Utils::ParameterAction::AlwaysEnabled, this);
+
+ ProjectExplorer::Project *startupProject = ProjectExplorer::SessionManager::startupProject();
+ m_generateCompilationDBAction->setEnabled(isDBGenerationEnabled(startupProject));
+ if (startupProject)
+ m_generateCompilationDBAction->setParameter(startupProject->displayName());
+
+ Core::Command *command = Core::ActionManager::registerAction(m_generateCompilationDBAction,
+ Constants::GENERATE_COMPILATION_DB);
+ command->setAttribute(Core::Command::CA_UpdateText);
+ command->setDescription(m_generateCompilationDBAction->text());
+ mbuild->addAction(command, ProjectExplorer::Constants::G_BUILD_BUILD);
+
+ connect(&m_generatorWatcher, &QFutureWatcher<void>::finished, this, [this] () {
+ m_generateCompilationDBAction->setEnabled(
+ isDBGenerationEnabled(ProjectExplorer::SessionManager::startupProject()));
+ });
+ connect(m_generateCompilationDBAction, &QAction::triggered, this, [this] {
+ if (!m_generateCompilationDBAction->isEnabled())
+ return;
+
+ m_generateCompilationDBAction->setEnabled(false);
+ generateCompilationDB();
+ });
+ connect(CppTools::CppModelManager::instance(), &CppTools::CppModelManager::projectPartsUpdated,
+ this, [this](ProjectExplorer::Project *project) {
+ if (project != ProjectExplorer::SessionManager::startupProject())
+ return;
+ m_generateCompilationDBAction->setParameter(project->displayName());
+ if (!m_generatorWatcher.isRunning())
+ m_generateCompilationDBAction->setEnabled(isDBGenerationEnabled(project));
+ });
+ connect(ProjectExplorer::SessionManager::instance(),
+ &ProjectExplorer::SessionManager::startupProjectChanged,
+ this,
+ [this](ProjectExplorer::Project *project) {
+ m_generateCompilationDBAction->setParameter(project ? project->displayName() : "");
+ if (!m_generatorWatcher.isRunning())
+ m_generateCompilationDBAction->setEnabled(isDBGenerationEnabled(project));
+ });
+ connect(ProjectExplorer::SessionManager::instance(),
+ &ProjectExplorer::SessionManager::projectDisplayNameChanged,
+ this,
+ [this](ProjectExplorer::Project *project) {
+ if (project != ProjectExplorer::SessionManager::startupProject())
+ return;
+ m_generateCompilationDBAction->setParameter(project->displayName());
+ });
+}
+
void ClangCodeModelPlugin::extensionsInitialized()
{
}
diff --git a/src/plugins/clangcodemodel/clangcodemodelplugin.h b/src/plugins/clangcodemodel/clangcodemodelplugin.h
index 8e41fe6020..5e24352a76 100644
--- a/src/plugins/clangcodemodel/clangcodemodelplugin.h
+++ b/src/plugins/clangcodemodel/clangcodemodelplugin.h
@@ -29,15 +29,20 @@
#include <extensionsystem/iplugin.h>
+#include <utils/parameteraction.h>
+
+#include <QFutureWatcher>
+
namespace ClangCodeModel {
namespace Internal {
-class ClangCodeModelPlugin: public ExtensionSystem::IPlugin
+class ClangCodeModelPlugin final: public ExtensionSystem::IPlugin
{
Q_OBJECT
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QtCreatorPlugin" FILE "ClangCodeModel.json")
public:
+ ~ClangCodeModelPlugin();
bool initialize(const QStringList &arguments, QString *errorMessage);
void extensionsInitialized();
@@ -45,8 +50,12 @@ private:
void maybeHandleBatchFileAndExit() const;
private:
- ModelManagerSupportProviderClang m_modelManagerSupportProvider;
+ void generateCompilationDB();
+ void createCompilationDBButton();
+ ModelManagerSupportProviderClang m_modelManagerSupportProvider;
+ Utils::ParameterAction *m_generateCompilationDBAction = nullptr;
+ QFutureWatcher<void> m_generatorWatcher;
#ifdef WITH_TESTS
QList<QObject *> createTestObjects() const;
#endif
diff --git a/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp b/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp
index 974b2d3e86..2afa03a3b4 100644
--- a/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp
+++ b/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp
@@ -26,7 +26,6 @@
#include "clangassistproposalitem.h"
#include "clangactivationsequenceprocessor.h"
-#include "clangassistproposal.h"
#include "clangassistproposalmodel.h"
#include "clangcompletionassistprocessor.h"
#include "clangcompletioncontextanalyzer.h"
@@ -41,6 +40,7 @@
#include <texteditor/codeassist/assistproposalitem.h>
#include <texteditor/codeassist/functionhintproposal.h>
+#include <texteditor/codeassist/genericproposal.h>
#include <texteditor/codeassist/ifunctionhintproposalmodel.h>
#include <cplusplus/BackwardsScanner.h>
@@ -64,15 +64,58 @@ namespace Internal {
using ClangBackEnd::CodeCompletion;
using TextEditor::AssistProposalItemInterface;
-namespace {
+static void addAssistProposalItem(QList<AssistProposalItemInterface *> &items,
+ const CodeCompletion &codeCompletion,
+ const QString &name)
+{
+ ClangAssistProposalItem *item = new ClangAssistProposalItem;
+ items.push_back(item);
-QList<AssistProposalItemInterface *> toAssistProposalItems(const CodeCompletions &completions)
+ item->setText(name);
+ item->setOrder(int(codeCompletion.priority));
+ item->appendCodeCompletion(codeCompletion);
+}
+
+static void addFunctionOverloadAssistProposalItem(QList<AssistProposalItemInterface *> &items,
+ AssistProposalItemInterface *sameItem,
+ const ClangCompletionAssistInterface *interface,
+ const CodeCompletion &codeCompletion,
+ const QString &name)
{
+ ClangBackEnd::CodeCompletionChunk resultType = codeCompletion.chunks.first();
+ auto *item = static_cast<ClangAssistProposalItem *>(sameItem);
+ item->setHasOverloadsWithParameters(true);
+ if (resultType.kind != ClangBackEnd::CodeCompletionChunk::ResultType) {
+ // It's the constructor.
+ // CLANG-UPGRADE-CHECK: Can we get here with constructor definition?
+ if (!item->firstCodeCompletion().hasParameters)
+ item->removeFirstCodeCompletion();
+ item->appendCodeCompletion(codeCompletion);
+ return;
+ }
+
+ QTextCursor cursor = interface->textEditorWidget()->textCursor();
+ cursor.setPosition(interface->position());
+ cursor.movePosition(QTextCursor::StartOfWord);
+
+ if (::Utils::Text::matchPreviousWord(*interface->textEditorWidget(),
+ cursor,
+ resultType.text.toString())) {
+ addAssistProposalItem(items, codeCompletion, name);
+ } else {
+ item->appendCodeCompletion(codeCompletion);
+ }
+}
+static QList<AssistProposalItemInterface *> toAssistProposalItems(
+ const CodeCompletions &completions,
+ const ClangCompletionAssistInterface *interface)
+{
bool signalCompletion = false; // TODO
bool slotCompletion = false; // TODO
- QHash<QString, ClangAssistProposalItem *> items;
+ QList<AssistProposalItemInterface *> items;
+ items.reserve(completions.size());
for (const CodeCompletion &codeCompletion : completions) {
if (codeCompletion.text.isEmpty()) // TODO: Make isValid()?
continue;
@@ -81,35 +124,42 @@ QList<AssistProposalItemInterface *> toAssistProposalItems(const CodeCompletions
if (slotCompletion && codeCompletion.completionKind != CodeCompletion::SlotCompletionKind)
continue;
- QString name;
- if (codeCompletion.completionKind == CodeCompletion::KeywordCompletionKind)
- name = CompletionChunksToTextConverter::convertToName(codeCompletion.chunks);
- else
- name = codeCompletion.text.toString();
+ const QString name = codeCompletion.completionKind == CodeCompletion::KeywordCompletionKind
+ ? CompletionChunksToTextConverter::convertToName(codeCompletion.chunks)
+ : codeCompletion.text.toString();
+
+ if (codeCompletion.completionKind == CodeCompletion::ConstructorCompletionKind
+ || codeCompletion.completionKind == CodeCompletion::ClassCompletionKind) {
+ auto samePreviousConstructor
+ = std::find_if(items.begin(),
+ items.end(),
+ [&name](const AssistProposalItemInterface *item) {
+ return item->text() == name;
+ });
+ if (samePreviousConstructor == items.end()) {
+ addAssistProposalItem(items, codeCompletion, name);
+ } else {
+ addFunctionOverloadAssistProposalItem(items, *samePreviousConstructor, interface,
+ codeCompletion, name);
+ }
+ continue;
+ }
- ClangAssistProposalItem *item = items.value(name, 0);
- if (item) {
- if (codeCompletion.hasParameters)
- item->setHasOverloadsWithParameters(true);
+ if (!items.empty() && items.last()->text() == name) {
+ if ((codeCompletion.completionKind == CodeCompletion::FunctionCompletionKind
+ || codeCompletion.completionKind == CodeCompletion::FunctionDefinitionCompletionKind)
+ && codeCompletion.hasParameters) {
+ addFunctionOverloadAssistProposalItem(items, items.back(), interface,
+ codeCompletion, name);
+ }
} else {
- item = new ClangAssistProposalItem;
- items.insert(name, item);
-
- item->setText(name);
- item->setOrder(int(codeCompletion.priority));
- item->setCodeCompletion(codeCompletion);
+ addAssistProposalItem(items, codeCompletion, name);
}
}
- QList<AssistProposalItemInterface *> results;
- results.reserve(items.size());
- std::copy(items.cbegin(), items.cend(), std::back_inserter(results));
-
- return results;
+ return items;
}
-} // Anonymous
-
using namespace CPlusPlus;
using namespace TextEditor;
@@ -143,18 +193,17 @@ static CodeCompletions filterFunctionSignatures(const CodeCompletions &completio
}
void ClangCompletionAssistProcessor::handleAvailableCompletions(
- const CodeCompletions &completions,
- CompletionCorrection neededCorrection)
+ const CodeCompletions &completions)
{
QTC_CHECK(m_completions.isEmpty());
if (m_sentRequestType == NormalCompletion) {
- m_completions = toAssistProposalItems(completions);
+ m_completions = toAssistProposalItems(completions, m_interface.data());
if (m_addSnippets && !m_completions.isEmpty())
addSnippets();
- setAsyncProposalAvailable(createProposal(neededCorrection));
+ setAsyncProposalAvailable(createProposal());
} else {
const CodeCompletions functionSignatures = filterFunctionSignatures(completions);
if (!functionSignatures.isEmpty())
@@ -447,11 +496,11 @@ bool ClangCompletionAssistProcessor::completePreprocessorDirectives()
{
foreach (const QString &preprocessorCompletion, m_preprocessorCompletions)
addCompletionItem(preprocessorCompletion,
- Icons::iconForType(Icons::MacroIconType));
+ ::Utils::CodeModelIcon::iconForType(::Utils::CodeModelIcon::Macro));
if (m_interface->objcEnabled())
addCompletionItem(QLatin1String("import"),
- Icons::iconForType(Icons::MacroIconType));
+ ::Utils::CodeModelIcon::iconForType(::Utils::CodeModelIcon::Macro));
return !m_completions.isEmpty();
}
@@ -591,13 +640,12 @@ bool ClangCompletionAssistProcessor::sendCompletionRequest(int position,
return false;
}
-TextEditor::IAssistProposal *ClangCompletionAssistProcessor::createProposal(
- CompletionCorrection neededCorrection)
+TextEditor::IAssistProposal *ClangCompletionAssistProcessor::createProposal()
{
m_requestSent = false;
- TextEditor::GenericProposalModelPtr model(new ClangAssistProposalModel(neededCorrection));
+ TextEditor::GenericProposalModelPtr model(new ClangAssistProposalModel());
model->loadContent(m_completions);
- return new ClangAssistProposal(m_positionForProposal, model);
+ return new GenericProposal(m_positionForProposal, model);
}
IAssistProposal *ClangCompletionAssistProcessor::createFunctionHintProposal(
diff --git a/src/plugins/clangcodemodel/clangcompletionassistprocessor.h b/src/plugins/clangcodemodel/clangcompletionassistprocessor.h
index d406422aa3..f5f7b06684 100644
--- a/src/plugins/clangcodemodel/clangcompletionassistprocessor.h
+++ b/src/plugins/clangcodemodel/clangcompletionassistprocessor.h
@@ -50,8 +50,7 @@ public:
TextEditor::IAssistProposal *perform(const TextEditor::AssistInterface *interface) override;
- void handleAvailableCompletions(const CodeCompletions &completions,
- CompletionCorrection neededCorrection);
+ void handleAvailableCompletions(const CodeCompletions &completions);
bool running() final { return m_requestSent; }
const TextEditor::TextEditorWidget *textEditorWidget() const;
@@ -62,8 +61,7 @@ private:
int findStartOfName(int pos = -1) const;
bool accepts() const;
- TextEditor::IAssistProposal *createProposal(
- CompletionCorrection neededCorrection = CompletionCorrection::NoCorrection);
+ TextEditor::IAssistProposal *createProposal();
TextEditor::IAssistProposal *createFunctionHintProposal(
const CodeCompletions &completions);
diff --git a/src/plugins/clangcodemodel/clangconstants.h b/src/plugins/clangcodemodel/clangconstants.h
index 294618aa88..da6223f133 100644
--- a/src/plugins/clangcodemodel/clangconstants.h
+++ b/src/plugins/clangcodemodel/clangconstants.h
@@ -29,6 +29,7 @@ namespace ClangCodeModel {
namespace Constants {
const char CLANG_MODELMANAGERSUPPORT_ID[] = "ClangCodeModel.ClangCodeModel";
+const char GENERATE_COMPILATION_DB[] = "ClangCodeModel.GenerateCompilationDB";
const char CLANG_ERROR[] = "Clang.Error";
const char CLANG_WARNING[] = "Clang.Warning";
diff --git a/src/plugins/clangcodemodel/clangcurrentdocumentfilter.cpp b/src/plugins/clangcodemodel/clangcurrentdocumentfilter.cpp
index 25f0d4f234..951c6efd53 100644
--- a/src/plugins/clangcodemodel/clangcurrentdocumentfilter.cpp
+++ b/src/plugins/clangcodemodel/clangcurrentdocumentfilter.cpp
@@ -69,11 +69,6 @@ static QString addType(const QString &signature, const ClangBackEnd::ExtraInfo &
return signature + QLatin1String(" -> ", 4) + extraInfo.typeSpelling.toString();
}
-static QString addTypeToVariableName(const QString &name, const ClangBackEnd::ExtraInfo &extraInfo)
-{
- return extraInfo.typeSpelling.toString() + QLatin1String(" ") + name;
-}
-
static Core::LocatorFilterEntry makeEntry(Core::ILocatorFilter *filter,
const ClangBackEnd::TokenInfoContainer &info)
{
@@ -84,20 +79,18 @@ static Core::LocatorFilterEntry makeEntry(Core::ILocatorFilter *filter,
QString extra;
ClangBackEnd::HighlightingType mainType = info.types.mainHighlightingType;
if (mainType == ClangBackEnd::HighlightingType::VirtualFunction
- || mainType == ClangBackEnd::HighlightingType::Function) {
+ || mainType == ClangBackEnd::HighlightingType::Function
+ || mainType == ClangBackEnd::HighlightingType::GlobalVariable
+ || mainType == ClangBackEnd::HighlightingType::Field
+ || mainType == ClangBackEnd::HighlightingType::QtProperty) {
displayName = addType(displayName, extraInfo);
extra = extraInfo.semanticParentTypeSpelling.toString();
- } else if (mainType == ClangBackEnd::HighlightingType::GlobalVariable
- || mainType == ClangBackEnd::HighlightingType::Field
- || mainType == ClangBackEnd::HighlightingType::QtProperty) {
- displayName = addTypeToVariableName(displayName, extraInfo);
- extra = extraInfo.semanticParentTypeSpelling.toString();
} else {
extra = extraInfo.typeSpelling.toString();
}
entry.displayName = displayName;
entry.extraInfo = extra;
- entry.displayIcon = CPlusPlus::Icons::iconForType(Utils::iconTypeForToken(info));
+ entry.displayIcon = ::Utils::CodeModelIcon::iconForType(Utils::iconTypeForToken(info));
return entry;
}
diff --git a/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp b/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp
index 2c6608c6b8..25054f14ec 100644
--- a/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp
+++ b/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp
@@ -475,7 +475,7 @@ private:
}
CppTools::CompilerOptionsBuilder builder(m_projectPart);
- builder.addLanguageOption(fileKind);
+ builder.updateLanguageOption(fileKind);
m_options.append(builder.options());
}
diff --git a/src/plugins/clangcodemodel/clangoverviewmodel.cpp b/src/plugins/clangcodemodel/clangoverviewmodel.cpp
index e663eec27a..a8704fe808 100644
--- a/src/plugins/clangcodemodel/clangoverviewmodel.cpp
+++ b/src/plugins/clangcodemodel/clangoverviewmodel.cpp
@@ -171,7 +171,7 @@ QVariant TokenTreeItem::data(int column, int role) const
}
case Qt::DecorationRole: {
- return CPlusPlus::Icons::iconForType(ClangCodeModel::Utils::iconTypeForToken(token));
+ return ::Utils::CodeModelIcon::iconForType(ClangCodeModel::Utils::iconTypeForToken(token));
}
case CppTools::AbstractOverviewModel::FileNameRole: {
diff --git a/src/plugins/clangcodemodel/clangutils.cpp b/src/plugins/clangcodemodel/clangutils.cpp
index 4a55973bed..8f11758ac4 100644
--- a/src/plugins/clangcodemodel/clangutils.cpp
+++ b/src/plugins/clangcodemodel/clangutils.cpp
@@ -39,13 +39,19 @@
#include <cpptools/projectpart.h>
#include <cpptools/cppcodemodelsettings.h>
#include <cpptools/cpptoolsreuse.h>
+#include <projectexplorer/buildconfiguration.h>
#include <projectexplorer/projectexplorerconstants.h>
+#include <projectexplorer/target.h>
#include <utils/algorithm.h>
+#include <utils/fileutils.h>
#include <utils/qtcassert.h>
#include <QDir>
#include <QFile>
+#include <QJsonArray>
+#include <QJsonDocument>
+#include <QJsonObject>
#include <QStringList>
#include <QTextBlock>
@@ -86,17 +92,32 @@ static QString creatorResourcePath()
#endif
}
+static QString clangIncludeDirectory(const QString &clangVersion,
+ const QString &clangResourceDirectory)
+{
+#ifndef UNIT_TESTS
+ return Core::ICore::clangIncludeDirectory(clangVersion, clangResourceDirectory);
+#else
+ return QString();
+#endif
+}
+
class LibClangOptionsBuilder final : public CompilerOptionsBuilder
{
public:
LibClangOptionsBuilder(const ProjectPart &projectPart)
- : CompilerOptionsBuilder(projectPart, CLANG_VERSION, CLANG_RESOURCE_DIR)
+ : CompilerOptionsBuilder(projectPart)
+ , m_clangVersion(CLANG_VERSION)
+ , m_clangResourceDirectory(CLANG_RESOURCE_DIR)
{
}
void addPredefinedHeaderPathsOptions() final
{
CompilerOptionsBuilder::addPredefinedHeaderPathsOptions();
+ add("-nostdinc");
+ add("-nostdlibinc");
+ addClangIncludeFolder();
addWrappedQtHeadersIncludePath();
}
@@ -117,6 +138,13 @@ public:
}
private:
+ void addClangIncludeFolder()
+ {
+ QTC_CHECK(!m_clangVersion.isEmpty());
+ add("-I");
+ add(clangIncludeDirectory(m_clangVersion, m_clangResourceDirectory));
+ }
+
void addWrappedQtHeadersIncludePath()
{
static const QString resourcePath = creatorResourcePath();
@@ -125,9 +153,9 @@ private:
if (m_projectPart.qtVersion != CppTools::ProjectPart::NoQt) {
const QString wrappedQtCoreHeaderPath = wrappedQtHeadersPath + "/QtCore";
- add(includeDirOption());
+ add(includeDirOptionForPath(wrappedQtHeadersPath));
add(QDir::toNativeSeparators(wrappedQtHeadersPath));
- add(includeDirOption());
+ add(includeDirOptionForPath(wrappedQtHeadersPath));
add(QDir::toNativeSeparators(wrappedQtCoreHeaderPath));
}
}
@@ -136,10 +164,13 @@ private:
{
const QString path = ModelManagerSupportClang::instance()->dummyUiHeaderOnDiskDirPath();
if (!path.isEmpty()) {
- add(includeDirOption());
+ add("-I");
add(QDir::toNativeSeparators(path));
}
}
+
+ QString m_clangVersion;
+ QString m_clangResourceDirectory;
};
/**
@@ -205,52 +236,52 @@ int clangColumn(const QTextBlock &line, int cppEditorColumn)
return line.text().left(cppEditorColumn).toUtf8().size() + 1;
}
-CPlusPlus::Icons::IconType iconTypeForToken(const ClangBackEnd::TokenInfoContainer &token)
+::Utils::CodeModelIcon::Type iconTypeForToken(const ClangBackEnd::TokenInfoContainer &token)
{
const ClangBackEnd::ExtraInfo &extraInfo = token.extraInfo;
if (extraInfo.signal)
- return CPlusPlus::Icons::SignalIconType;
+ return ::Utils::CodeModelIcon::Signal;
ClangBackEnd::AccessSpecifier access = extraInfo.accessSpecifier;
if (extraInfo.slot) {
switch (access) {
case ClangBackEnd::AccessSpecifier::Public:
case ClangBackEnd::AccessSpecifier::Invalid:
- return CPlusPlus::Icons::SlotPublicIconType;
+ return ::Utils::CodeModelIcon::SlotPublic;
case ClangBackEnd::AccessSpecifier::Protected:
- return CPlusPlus::Icons::SlotProtectedIconType;
+ return ::Utils::CodeModelIcon::SlotProtected;
case ClangBackEnd::AccessSpecifier::Private:
- return CPlusPlus::Icons::SlotPrivateIconType;
+ return ::Utils::CodeModelIcon::SlotPrivate;
}
}
ClangBackEnd::HighlightingType mainType = token.types.mainHighlightingType;
if (mainType == ClangBackEnd::HighlightingType::QtProperty)
- return CPlusPlus::Icons::PropertyIconType;
+ return ::Utils::CodeModelIcon::Property;
if (mainType == ClangBackEnd::HighlightingType::PreprocessorExpansion
|| mainType == ClangBackEnd::HighlightingType::PreprocessorDefinition) {
- return CPlusPlus::Icons::MacroIconType;
+ return ::Utils::CodeModelIcon::Macro;
}
if (mainType == ClangBackEnd::HighlightingType::Enumeration)
- return CPlusPlus::Icons::EnumeratorIconType;
+ return ::Utils::CodeModelIcon::Enumerator;
if (mainType == ClangBackEnd::HighlightingType::Type
|| mainType == ClangBackEnd::HighlightingType::Keyword) {
const ClangBackEnd::MixinHighlightingTypes &types = token.types.mixinHighlightingTypes;
if (types.contains(ClangBackEnd::HighlightingType::Enum))
- return CPlusPlus::Icons::EnumIconType;
+ return ::Utils::CodeModelIcon::Enum;
if (types.contains(ClangBackEnd::HighlightingType::Struct))
- return CPlusPlus::Icons::StructIconType;
+ return ::Utils::CodeModelIcon::Struct;
if (types.contains(ClangBackEnd::HighlightingType::Namespace))
- return CPlusPlus::Icons::NamespaceIconType;
+ return ::Utils::CodeModelIcon::Namespace;
if (types.contains(ClangBackEnd::HighlightingType::Class))
- return CPlusPlus::Icons::ClassIconType;
+ return ::Utils::CodeModelIcon::Class;
if (mainType == ClangBackEnd::HighlightingType::Keyword)
- return CPlusPlus::Icons::KeywordIconType;
- return CPlusPlus::Icons::ClassIconType;
+ return ::Utils::CodeModelIcon::Keyword;
+ return ::Utils::CodeModelIcon::Class;
}
ClangBackEnd::StorageClass storageClass = extraInfo.storageClass;
@@ -261,21 +292,21 @@ CPlusPlus::Icons::IconType iconTypeForToken(const ClangBackEnd::TokenInfoContain
switch (access) {
case ClangBackEnd::AccessSpecifier::Public:
case ClangBackEnd::AccessSpecifier::Invalid:
- return CPlusPlus::Icons::FuncPublicIconType;
+ return ::Utils::CodeModelIcon::FuncPublic;
case ClangBackEnd::AccessSpecifier::Protected:
- return CPlusPlus::Icons::FuncProtectedIconType;
+ return ::Utils::CodeModelIcon::FuncProtected;
case ClangBackEnd::AccessSpecifier::Private:
- return CPlusPlus::Icons::FuncPrivateIconType;
+ return ::Utils::CodeModelIcon::FuncPrivate;
}
} else {
switch (access) {
case ClangBackEnd::AccessSpecifier::Public:
case ClangBackEnd::AccessSpecifier::Invalid:
- return CPlusPlus::Icons::FuncPublicStaticIconType;
+ return ::Utils::CodeModelIcon::FuncPublicStatic;
case ClangBackEnd::AccessSpecifier::Protected:
- return CPlusPlus::Icons::FuncProtectedStaticIconType;
+ return ::Utils::CodeModelIcon::FuncProtectedStatic;
case ClangBackEnd::AccessSpecifier::Private:
- return CPlusPlus::Icons::FuncPrivateStaticIconType;
+ return ::Utils::CodeModelIcon::FuncPrivateStatic;
}
}
}
@@ -285,26 +316,26 @@ CPlusPlus::Icons::IconType iconTypeForToken(const ClangBackEnd::TokenInfoContain
switch (access) {
case ClangBackEnd::AccessSpecifier::Public:
case ClangBackEnd::AccessSpecifier::Invalid:
- return CPlusPlus::Icons::VarPublicIconType;
+ return ::Utils::CodeModelIcon::VarPublic;
case ClangBackEnd::AccessSpecifier::Protected:
- return CPlusPlus::Icons::VarProtectedIconType;
+ return ::Utils::CodeModelIcon::VarProtected;
case ClangBackEnd::AccessSpecifier::Private:
- return CPlusPlus::Icons::VarPrivateIconType;
+ return ::Utils::CodeModelIcon::VarPrivate;
}
} else {
switch (access) {
case ClangBackEnd::AccessSpecifier::Public:
case ClangBackEnd::AccessSpecifier::Invalid:
- return CPlusPlus::Icons::VarPublicStaticIconType;
+ return ::Utils::CodeModelIcon::VarPublicStatic;
case ClangBackEnd::AccessSpecifier::Protected:
- return CPlusPlus::Icons::VarProtectedStaticIconType;
+ return ::Utils::CodeModelIcon::VarProtectedStatic;
case ClangBackEnd::AccessSpecifier::Private:
- return CPlusPlus::Icons::VarPrivateStaticIconType;
+ return ::Utils::CodeModelIcon::VarPrivateStatic;
}
}
}
- return CPlusPlus::Icons::UnknownIconType;
+ return ::Utils::CodeModelIcon::Unknown;
}
QString diagnosticCategoryPrefixRemoved(const QString &text)
@@ -332,5 +363,54 @@ QString diagnosticCategoryPrefixRemoved(const QString &text)
return text;
}
+static ::Utils::FileName buildDirectory(const CppTools::ProjectPart &projectPart)
+{
+ ProjectExplorer::Target *target = projectPart.project->activeTarget();
+ if (!target)
+ return ::Utils::FileName();
+
+ ProjectExplorer::BuildConfiguration *buildConfig = target->activeBuildConfiguration();
+ if (!buildConfig)
+ return ::Utils::FileName();
+
+ return buildConfig->buildDirectory();
+}
+
+static QJsonObject createFileObject(CompilerOptionsBuilder &optionsBuilder,
+ const ProjectFile &projFile,
+ const ::Utils::FileName &buildDir)
+{
+ optionsBuilder.updateLanguageOption(ProjectFile::classify(projFile.path));
+
+ QJsonObject fileObject;
+ fileObject["file"] = projFile.path;
+ QJsonArray args = QJsonArray::fromStringList(optionsBuilder.options());
+ args.append(QDir::toNativeSeparators(projFile.path));
+ fileObject["arguments"] = args;
+ fileObject["directory"] = buildDir.toString();
+ return fileObject;
+}
+
+void generateCompilationDB(::Utils::FileName projectDir, CppTools::ProjectInfo projectInfo)
+{
+ QFile compileCommandsFile(projectDir.toString() + "/compile_commands.json");
+
+ QJsonArray array;
+ for (ProjectPart::Ptr projectPart : projectInfo.projectParts()) {
+ const ::Utils::FileName buildDir = buildDirectory(*projectPart);
+
+ CompilerOptionsBuilder optionsBuilder(*projectPart);
+ optionsBuilder.build(CppTools::ProjectFile::Unclassified,
+ CppTools::CompilerOptionsBuilder::PchUsage::None);
+
+ for (const ProjectFile &projFile : projectPart->files)
+ array.push_back(createFileObject(optionsBuilder, projFile, buildDir));
+ }
+
+ compileCommandsFile.open(QIODevice::WriteOnly | QIODevice::Truncate);
+ compileCommandsFile.write(QJsonDocument(array).toJson());
+ compileCommandsFile.close();
+}
+
} // namespace Utils
} // namespace Clang
diff --git a/src/plugins/clangcodemodel/clangutils.h b/src/plugins/clangcodemodel/clangutils.h
index 8ba10911b8..d35aaf1f26 100644
--- a/src/plugins/clangcodemodel/clangutils.h
+++ b/src/plugins/clangcodemodel/clangutils.h
@@ -35,6 +35,11 @@ QT_END_NAMESPACE
namespace CppTools {
class CppEditorDocumentHandle;
+class ProjectInfo;
+}
+
+namespace Utils {
+class FileName;
}
namespace ClangBackEnd { class TokenInfoContainer; }
@@ -58,7 +63,9 @@ int clangColumn(const QTextBlock &lineText, int cppEditorColumn);
QString diagnosticCategoryPrefixRemoved(const QString &text);
-CPlusPlus::Icons::IconType iconTypeForToken(const ClangBackEnd::TokenInfoContainer &token);
+::Utils::CodeModelIcon::Type iconTypeForToken(const ClangBackEnd::TokenInfoContainer &token);
+
+void generateCompilationDB(::Utils::FileName projectDir, CppTools::ProjectInfo projectInfo);
} // namespace Utils
} // namespace Clang
diff --git a/src/plugins/clangpchmanager/clangpchmanager.qbs b/src/plugins/clangpchmanager/clangpchmanager.qbs
index 8e7c5447a6..8c22188633 100644
--- a/src/plugins/clangpchmanager/clangpchmanager.qbs
+++ b/src/plugins/clangpchmanager/clangpchmanager.qbs
@@ -5,6 +5,7 @@ QtcPlugin {
name: "ClangPchManager"
Depends { name: "libclang"; required: false }
+ Depends { name: "clang_defines" }
condition: libclang.present && libclang.toolingEnabled
Depends { name: "ClangSupport" }
@@ -14,19 +15,7 @@ QtcPlugin {
Depends { name: "CppTools" }
Depends { name: "ProjectExplorer" }
- cpp.defines: {
- var defines = base;
- defines.push("CLANGPCHMANAGER_LIB");
-
- // The following defines are used to determine the clang include path for intrinsics.
- defines.push('CLANG_VERSION="' + libclang.llvmVersion + '"');
- var resourceDir = FileInfo.joinPaths(libclang.llvmLibDir, "clang", libclang.llvmVersion,
- "include");
- defines.push('CLANG_RESOURCE_DIR="' + resourceDir + '"');
- defines.push('CLANG_BINDIR="' + libclang.llvmBinDir + '"');
- return defines;
- }
-
+ cpp.defines: base.concat("CLANGPCHMANAGER_LIB")
cpp.includePaths: ["."]
files: [
diff --git a/src/plugins/clangpchmanager/projectupdater.cpp b/src/plugins/clangpchmanager/projectupdater.cpp
index 9d0342d20a..ce890ee117 100644
--- a/src/plugins/clangpchmanager/projectupdater.cpp
+++ b/src/plugins/clangpchmanager/projectupdater.cpp
@@ -29,7 +29,9 @@
#include <filepathid.h>
#include <pchmanagerserverinterface.h>
+#include <removegeneratedfilesmessage.h>
#include <removeprojectpartsmessage.h>
+#include <updategeneratedfilesmessage.h>
#include <updateprojectpartsmessage.h>
#include <cpptools/compileroptionsbuilder.h>
@@ -62,15 +64,10 @@ ProjectUpdater::ProjectUpdater(ClangBackEnd::ProjectManagementServerInterface &s
{
}
-void ProjectUpdater::updateProjectParts(const std::vector<CppTools::ProjectPart *> &projectParts,
- ClangBackEnd::V2::FileContainers &&generatedFiles)
+void ProjectUpdater::updateProjectParts(const std::vector<CppTools::ProjectPart *> &projectParts)
{
- m_excludedPaths = createExcludedPaths(generatedFiles);
-
- ClangBackEnd::UpdateProjectPartsMessage message{toProjectPartContainers(projectParts),
- std::move(generatedFiles)};
-
- m_server.updateProjectParts(std::move(message));
+ m_server.updateProjectParts(
+ ClangBackEnd::UpdateProjectPartsMessage{toProjectPartContainers(projectParts)});
}
void ProjectUpdater::removeProjectParts(const QStringList &projectPartIds)
@@ -80,9 +77,41 @@ void ProjectUpdater::removeProjectParts(const QStringList &projectPartIds)
m_server.removeProjectParts(std::move(message));
}
-void ProjectUpdater::setExcludedPaths(Utils::PathStringVector &&excludedPaths)
+void ProjectUpdater::updateGeneratedFiles(ClangBackEnd::V2::FileContainers &&generatedFiles)
+{
+ std::sort(generatedFiles.begin(), generatedFiles.end());
+
+ m_generatedFiles.update(generatedFiles);
+
+ m_excludedPaths = createExcludedPaths(m_generatedFiles.fileContainers());
+
+ m_server.updateGeneratedFiles(
+ ClangBackEnd::UpdateGeneratedFilesMessage{std::move(generatedFiles)});
+}
+
+void ProjectUpdater::removeGeneratedFiles(ClangBackEnd::FilePaths &&filePaths)
+{
+ m_generatedFiles.remove(filePaths);
+
+ m_excludedPaths = createExcludedPaths(m_generatedFiles.fileContainers());
+
+ m_server.removeGeneratedFiles(
+ ClangBackEnd::RemoveGeneratedFilesMessage{std::move(filePaths)});
+}
+
+void ProjectUpdater::setExcludedPaths(ClangBackEnd::FilePaths &&excludedPaths)
+{
+ m_excludedPaths = std::move(excludedPaths);
+}
+
+const ClangBackEnd::FilePaths &ProjectUpdater::excludedPaths() const
{
- m_excludedPaths = excludedPaths;
+ return m_excludedPaths;
+}
+
+const ClangBackEnd::GeneratedFiles &ProjectUpdater::generatedFiles() const
+{
+ return m_generatedFiles;
}
void ProjectUpdater::addToHeaderAndSources(HeaderAndSources &headerAndSources,
@@ -111,13 +140,16 @@ HeaderAndSources ProjectUpdater::headerAndSourcesFromProjectPart(
for (const CppTools::ProjectFile &projectFile : projectPart->files)
addToHeaderAndSources(headerAndSources, projectFile);
+ std::sort(headerAndSources.sources.begin(), headerAndSources.sources.end());
+ std::sort(headerAndSources.headers.begin(), headerAndSources.headers.end());
+
return headerAndSources;
}
QStringList ProjectUpdater::compilerArguments(CppTools::ProjectPart *projectPart)
{
using CppTools::CompilerOptionsBuilder;
- CompilerOptionsBuilder builder(*projectPart, CLANG_VERSION, CLANG_RESOURCE_DIR);
+ CompilerOptionsBuilder builder(*projectPart, CppTools::UseSystemHeader::Yes);
return builder.build(CppTools::ProjectFile::CXXHeader, CompilerOptionsBuilder::PchUsage::None);
}
@@ -143,6 +175,8 @@ Utils::SmallStringVector ProjectUpdater::createIncludeSearchPaths(
includePaths.emplace_back(projectPartHeaderPath.path);
}
+ std::sort(includePaths.begin(), includePaths.end());
+
return includePaths;
}
@@ -175,17 +209,19 @@ std::vector<ClangBackEnd::V2::ProjectPartContainer> ProjectUpdater::toProjectPar
std::back_inserter(projectPartContainers),
std::bind(&ProjectUpdater::toProjectPartContainer, this, _1));
+ std::sort(projectPartContainers.begin(), projectPartContainers.end());
+
return projectPartContainers;
}
-Utils::PathStringVector ProjectUpdater::createExcludedPaths(
+ClangBackEnd::FilePaths ProjectUpdater::createExcludedPaths(
const ClangBackEnd::V2::FileContainers &generatedFiles)
{
- Utils::PathStringVector excludedPaths;
+ ClangBackEnd::FilePaths excludedPaths;
excludedPaths.reserve(generatedFiles.size());
auto convertToPath = [] (const ClangBackEnd::V2::FileContainer &fileContainer) {
- return fileContainer.filePath.path();
+ return fileContainer.filePath;
};
std::transform(generatedFiles.begin(),
diff --git a/src/plugins/clangpchmanager/projectupdater.h b/src/plugins/clangpchmanager/projectupdater.h
index e4066cd0d1..c0040863a9 100644
--- a/src/plugins/clangpchmanager/projectupdater.h
+++ b/src/plugins/clangpchmanager/projectupdater.h
@@ -30,6 +30,7 @@
#include <compilermacro.h>
#include <filecontainerv2.h>
#include <filepathcachinginterface.h>
+#include <generatedfiles.h>
namespace ProjectExplorer {
class Macro;
@@ -66,12 +67,17 @@ public:
ProjectUpdater(ClangBackEnd::ProjectManagementServerInterface &server,
ClangBackEnd::FilePathCachingInterface &filePathCache);
- void updateProjectParts(const std::vector<CppTools::ProjectPart *> &projectParts,
- ClangBackEnd::V2::FileContainers &&generatedFiles);
+ void updateProjectParts(const std::vector<CppTools::ProjectPart *> &projectParts);
void removeProjectParts(const QStringList &projectPartIds);
+ void updateGeneratedFiles(ClangBackEnd::V2::FileContainers &&generatedFiles);
+ void removeGeneratedFiles(ClangBackEnd::FilePaths &&filePaths);
+
unittest_public:
- void setExcludedPaths(Utils::PathStringVector &&excludedPaths);
+ void setExcludedPaths(ClangBackEnd::FilePaths &&excludedPaths);
+ const ClangBackEnd::FilePaths &excludedPaths() const;
+
+ const ClangBackEnd::GeneratedFiles &generatedFiles() const;
HeaderAndSources headerAndSourcesFromProjectPart(CppTools::ProjectPart *projectPart) const;
ClangBackEnd::V2::ProjectPartContainer toProjectPartContainer(
@@ -85,11 +91,12 @@ unittest_public:
const ProjectExplorer::Macros &projectMacros);
static Utils::SmallStringVector createIncludeSearchPaths(
const CppTools::ProjectPartHeaderPaths &projectPartHeaderPaths);
- static Utils::PathStringVector createExcludedPaths(
+ static ClangBackEnd::FilePaths createExcludedPaths(
const ClangBackEnd::V2::FileContainers &generatedFiles);
private:
- Utils::PathStringVector m_excludedPaths;
+ ClangBackEnd::GeneratedFiles m_generatedFiles;
+ ClangBackEnd::FilePaths m_excludedPaths;
ClangBackEnd::ProjectManagementServerInterface &m_server;
ClangBackEnd::FilePathCachingInterface &m_filePathCache;
};
diff --git a/src/plugins/clangpchmanager/qtcreatorprojectupdater.cpp b/src/plugins/clangpchmanager/qtcreatorprojectupdater.cpp
index 53b37ee2b5..5331e2ef05 100644
--- a/src/plugins/clangpchmanager/qtcreatorprojectupdater.cpp
+++ b/src/plugins/clangpchmanager/qtcreatorprojectupdater.cpp
@@ -55,6 +55,8 @@ std::vector<ClangBackEnd::V2::FileContainer> createGeneratedFiles()
std::back_inserter(generatedFiles),
toFileContainer);
+ std::sort(generatedFiles.begin(), generatedFiles.end());
+
return generatedFiles;
}
diff --git a/src/plugins/clangpchmanager/qtcreatorprojectupdater.h b/src/plugins/clangpchmanager/qtcreatorprojectupdater.h
index 387e4573ad..9be66f1444 100644
--- a/src/plugins/clangpchmanager/qtcreatorprojectupdater.h
+++ b/src/plugins/clangpchmanager/qtcreatorprojectupdater.h
@@ -71,8 +71,7 @@ public:
void projectPartsUpdated(ProjectExplorer::Project *project)
{
- ProjectUpdaterType::updateProjectParts(Internal::createProjectParts(project),
- Internal::createGeneratedFiles());
+ ProjectUpdaterType::updateProjectParts(Internal::createProjectParts(project));
}
void projectPartsRemoved(const QStringList &projectPartIds)
@@ -80,15 +79,35 @@ public:
ProjectUpdaterType::removeProjectParts(projectPartIds);
}
+ void abstractEditorUpdated(const QString &filePath, const QByteArray &contents)
+ {
+ ProjectUpdaterType::updateGeneratedFiles({{ClangBackEnd::FilePath{filePath}, contents}});
+ }
+
+ void abstractEditorRemoved(const QString &filePath)
+ {
+ ProjectUpdaterType::removeGeneratedFiles({ClangBackEnd::FilePath{filePath}});
+ }
+
private:
void connectToCppModelManager()
{
+ ProjectUpdaterType::updateGeneratedFiles(Internal::createGeneratedFiles());
+
QObject::connect(Internal::cppModelManager(),
&CppTools::CppModelManager::projectPartsUpdated,
[&] (ProjectExplorer::Project *project) { projectPartsUpdated(project); });
QObject::connect(Internal::cppModelManager(),
&CppTools::CppModelManager::projectPartsRemoved,
[&] (const QStringList &projectPartIds) { projectPartsRemoved(projectPartIds); });
+ QObject::connect(Internal::cppModelManager(),
+ &CppTools::CppModelManager::abstractEditorSupportContentsUpdated,
+ [&] (const QString &filePath, const QByteArray &contents) {
+ abstractEditorUpdated(filePath, contents);
+ });
+ QObject::connect(Internal::cppModelManager(),
+ &CppTools::CppModelManager::abstractEditorSupportRemoved,
+ [&] (const QString &filePath) { abstractEditorRemoved(filePath); });
}
};
diff --git a/src/plugins/clangrefactoring/clangqueryprojectsfindfilter.cpp b/src/plugins/clangrefactoring/clangqueryprojectsfindfilter.cpp
index 654253ae9a..77d4a9ef6e 100644
--- a/src/plugins/clangrefactoring/clangqueryprojectsfindfilter.cpp
+++ b/src/plugins/clangrefactoring/clangqueryprojectsfindfilter.cpp
@@ -153,7 +153,7 @@ Utils::SmallStringVector ClangQueryProjectsFindFilter::compilerArguments(CppTool
{
using CppTools::CompilerOptionsBuilder;
- CompilerOptionsBuilder builder(*projectPart, CLANG_VERSION, CLANG_RESOURCE_DIR);
+ CompilerOptionsBuilder builder(*projectPart, CppTools::UseSystemHeader::Yes);
return Utils::SmallStringVector(builder.build(fileKind,
CompilerOptionsBuilder::PchUsage::None));
diff --git a/src/plugins/clangrefactoring/clangrefactoring.qbs b/src/plugins/clangrefactoring/clangrefactoring.qbs
index 803986423c..af92d01aec 100644
--- a/src/plugins/clangrefactoring/clangrefactoring.qbs
+++ b/src/plugins/clangrefactoring/clangrefactoring.qbs
@@ -5,6 +5,7 @@ QtcPlugin {
name: "ClangRefactoring"
Depends { name: "libclang"; required: false }
+ Depends { name: "clang_defines" }
condition: libclang.present && libclang.toolingEnabled
Depends { name: "ClangSupport" }
@@ -16,19 +17,7 @@ QtcPlugin {
Depends { name: "ProjectExplorer" }
Depends { name: "TextEditor" }
- cpp.defines: {
- var defines = base;
- defines.push("CLANGPCHMANAGER_LIB");
-
- // The following defines are used to determine the clang include path for intrinsics.
- defines.push('CLANG_VERSION="' + libclang.llvmVersion + '"');
- var resourceDir = FileInfo.joinPaths(libclang.llvmLibDir, "clang", libclang.llvmVersion,
- "include");
- defines.push('CLANG_RESOURCE_DIR="' + resourceDir + '"');
- defines.push('CLANG_BINDIR="' + libclang.llvmBinDir + '"');
- return defines;
- }
-
+ cpp.defines: base.concat("CLANGPCHMANAGER_LIB")
cpp.includePaths: ["."]
files: [
diff --git a/src/plugins/clangrefactoring/refactoringengine.cpp b/src/plugins/clangrefactoring/refactoringengine.cpp
index 952ed9bf19..57122fd3be 100644
--- a/src/plugins/clangrefactoring/refactoringengine.cpp
+++ b/src/plugins/clangrefactoring/refactoringengine.cpp
@@ -74,7 +74,7 @@ void RefactoringEngine::startLocalRenaming(const CppTools::CursorInEditor &data,
QString filePath = data.filePath().toString();
QTextCursor textCursor = data.cursor();
- CompilerOptionsBuilder optionsBuilder{*projectPart, CLANG_VERSION, CLANG_RESOURCE_DIR};
+ CompilerOptionsBuilder optionsBuilder{*projectPart, CppTools::UseSystemHeader::Yes};
Utils::SmallStringVector commandLine{optionsBuilder.build(
fileKindInProjectPart(projectPart, filePath),
CppTools::getPchUsage())};
diff --git a/src/plugins/clangtools/clangtidyclazytool.cpp b/src/plugins/clangtools/clangtidyclazytool.cpp
index d3f3d841b7..27d7fe171b 100644
--- a/src/plugins/clangtools/clangtidyclazytool.cpp
+++ b/src/plugins/clangtools/clangtidyclazytool.cpp
@@ -254,7 +254,7 @@ ClangTidyClazyTool::ClangTidyClazyTool()
&ClangToolsDiagnosticModel::fixItsToApplyCountChanged,
[this](int c) {
m_applyFixitsButton->setEnabled(c);
- static_cast<DiagnosticView *>(m_diagnosticView)->setSelectedFixItsCount(c);
+ static_cast<DiagnosticView *>(m_diagnosticView.data())->setSelectedFixItsCount(c);
});
connect(m_applyFixitsButton, &QToolButton::clicked, [this]() {
QVector<DiagnosticItem *> diagnosticItems;
@@ -269,10 +269,8 @@ ClangTidyClazyTool::ClangTidyClazyTool()
const QString toolTip = tr("Clang-Tidy and Clazy use a customized Clang executable from the "
"Clang project to search for errors and warnings.");
- Debugger::registerPerspective(ClangTidyClazyPerspectiveId, new Perspective(
- tr("Clang-Tidy and Clazy"),
- {{ClangTidyClazyDockId, m_diagnosticView, {}, Perspective::SplitVertical}}
- ));
+ auto perspective = new Perspective(ClangTidyClazyPerspectiveId, tr("Clang-Tidy and Clazy"));
+ perspective->addWindow(m_diagnosticView, Perspective::SplitVertical, nullptr);
action = new QAction(tr("Clang-Tidy and Clazy..."), this);
action->setToolTip(toolTip);
@@ -284,14 +282,14 @@ ClangTidyClazyTool::ClangTidyClazyTool()
action->setEnabled(m_startAction->isEnabled());
});
- ToolbarDescription tidyClazyToolbar;
- tidyClazyToolbar.addAction(m_startAction);
- tidyClazyToolbar.addAction(m_stopAction);
- tidyClazyToolbar.addAction(m_goBack);
- tidyClazyToolbar.addAction(m_goNext);
- tidyClazyToolbar.addWidget(m_filterLineEdit);
- tidyClazyToolbar.addWidget(m_applyFixitsButton);
- Debugger::registerToolbar(ClangTidyClazyPerspectiveId, tidyClazyToolbar);
+ perspective->addToolbarAction(m_startAction);
+ perspective->addToolbarAction(m_stopAction);
+ perspective->addToolbarAction(m_goBack);
+ perspective->addToolbarAction(m_goNext);
+ perspective->addToolbarWidget(m_filterLineEdit);
+ perspective->addToolbarWidget(m_applyFixitsButton);
+
+ Debugger::registerPerspective(perspective);
updateRunActions();
diff --git a/src/plugins/clangtools/clangtidyclazytool.h b/src/plugins/clangtools/clangtidyclazytool.h
index 72832451d1..2391afbe3a 100644
--- a/src/plugins/clangtools/clangtidyclazytool.h
+++ b/src/plugins/clangtools/clangtidyclazytool.h
@@ -39,7 +39,6 @@ namespace Internal {
class DiagnosticFilterModel;
const char ClangTidyClazyPerspectiveId[] = "ClangTidyClazy.Perspective";
-const char ClangTidyClazyDockId[] = "ClangTidyClazy.Dock";
class ClangTidyClazyTool final : public ClangTool
{
diff --git a/src/plugins/clangtools/clangtool.cpp b/src/plugins/clangtools/clangtool.cpp
index 248bee44ea..da23b619fd 100644
--- a/src/plugins/clangtools/clangtool.cpp
+++ b/src/plugins/clangtools/clangtool.cpp
@@ -98,6 +98,11 @@ ClangTool::ClangTool(const QString &name)
m_stopAction = Debugger::createStopAction();
}
+ClangTool::~ClangTool()
+{
+ delete m_diagnosticView;
+}
+
FileInfos ClangTool::collectFileInfos(Project *project, bool askUserForFileSelection) const
{
auto projectInfo = CppTools::CppModelManager::instance()->projectInfo(project);
diff --git a/src/plugins/clangtools/clangtool.h b/src/plugins/clangtools/clangtool.h
index 6363cedb64..39d66b7e73 100644
--- a/src/plugins/clangtools/clangtool.h
+++ b/src/plugins/clangtools/clangtool.h
@@ -44,7 +44,7 @@ class ClangTool : public QObject
public:
ClangTool(const QString &name);
- virtual ~ClangTool() = default;
+ virtual ~ClangTool();
virtual void startTool(bool askUserForFileSelection) = 0;
@@ -72,7 +72,7 @@ protected:
void initDiagnosticView();
ClangToolsDiagnosticModel *m_diagnosticModel = nullptr;
- Debugger::DetailedErrorView *m_diagnosticView = nullptr;
+ QPointer<Debugger::DetailedErrorView> m_diagnosticView;
QAction *m_startAction = nullptr;
QAction *m_stopAction = nullptr;
diff --git a/src/plugins/clangtools/clangtoolruncontrol.cpp b/src/plugins/clangtools/clangtoolruncontrol.cpp
index 8e33d18b3a..08cea9383f 100644
--- a/src/plugins/clangtools/clangtoolruncontrol.cpp
+++ b/src/plugins/clangtools/clangtoolruncontrol.cpp
@@ -145,16 +145,17 @@ private:
if (buildType == BuildConfiguration::Release) {
const QString wrongMode = ClangToolRunControl::tr("Release");
const QString toolName = m_parent->tool()->name();
- const QString title = ClangToolRunControl::tr("Run %1 in %2 Mode?").arg(toolName)
- .arg(wrongMode);
- const QString message = ClangToolRunControl::tr(
- "<html><head/><body>"
- "<p>You are trying to run the tool \"%1\" on an application in %2 mode. The tool is "
+ const QString title = ClangToolRunControl::tr("Run %1 in %2 Mode?").arg(toolName, wrongMode);
+ const QString problem = ClangToolRunControl::tr(
+ "You are trying to run the tool \"%1\" on an application in %2 mode. The tool is "
"designed to be used in Debug mode since enabled assertions can reduce the number of "
- "false positives.</p>"
- "<p>Do you want to continue and run the tool in %2 mode?</p>"
- "</body></html>")
- .arg(toolName).arg(wrongMode);
+ "false positives.").arg(toolName, wrongMode);
+ const QString question = ClangToolRunControl::tr(
+ "Do you want to continue and run the tool in %1 mode?").arg(wrongMode);
+ const QString message = QString("<html><head/><body>"
+ "<p>%1</p>"
+ "<p>%2</p>"
+ "</body></html>").arg(problem, question);
if (Utils::CheckableMessageBox::doNotAskAgainQuestion(Core::ICore::mainWindow(),
title, message, Core::ICore::settings(),
"ClangToolsCorrectModeWarning") != QDialogButtonBox::Yes)
@@ -190,9 +191,7 @@ static AnalyzeUnits toAnalyzeUnits(const FileInfos &fileInfos)
AnalyzeUnits unitsToAnalyze;
const CompilerOptionsBuilder::PchUsage pchUsage = CppTools::getPchUsage();
for (const FileInfo &fileInfo : fileInfos) {
- CompilerOptionsBuilder optionsBuilder(*fileInfo.projectPart,
- CLANG_VERSION,
- CLANG_RESOURCE_DIR);
+ CompilerOptionsBuilder optionsBuilder(*fileInfo.projectPart);
QStringList arguments = extraClangToolsPrependOptions();
arguments.append(optionsBuilder.build(fileInfo.kind, pchUsage));
arguments.append(extraClangToolsAppendOptions());
@@ -228,7 +227,7 @@ ClangToolRunControl::ClangToolRunControl(RunControl *runControl,
const FileInfos &fileInfos)
: RunWorker(runControl)
, m_projectBuilder(new ProjectBuilder(runControl, target->project(), this))
- , m_clangExecutable(CppTools::clangExecutable(CLANG_BINDIR))
+ , m_clangExecutable(Core::ICore::clangExecutable(CLANG_BINDIR))
, m_temporaryDir("clangtools-XXXXXX")
, m_target(target)
, m_fileInfos(fileInfos)
@@ -299,7 +298,7 @@ void ClangToolRunControl::start()
// Create log dir
if (!m_temporaryDir.isValid()) {
const QString errorMessage
- = toolName + tr(": Failed to create temporary dir, stop.");
+ = tr("%1: Failed to create temporary dir, stop.").arg(toolName);
appendMessage(errorMessage, Utils::ErrorMessageFormat);
TaskHub::addTask(Task::Error, errorMessage, Debugger::Constants::ANALYZERTASK_ID);
TaskHub::requestPopup();
@@ -448,13 +447,13 @@ void ClangToolRunControl::updateProgressValue()
void ClangToolRunControl::finalize()
{
const QString toolName = tool()->name();
- appendMessage(toolName + tr(" finished: "
- "Processed %1 files successfully, %2 failed.")
- .arg(m_filesAnalyzed).arg(m_filesNotAnalyzed),
+ appendMessage(tr("%1 finished: "
+ "Processed %2 files successfully, %3 failed.")
+ .arg(toolName, m_filesAnalyzed, m_filesNotAnalyzed),
Utils::NormalMessageFormat);
if (m_filesNotAnalyzed != 0) {
- QString msg = toolName + tr(": Not all files could be analyzed.");
+ QString msg = tr("%1: Not all files could be analyzed.").arg(toolName);
TaskHub::addTask(Task::Error, msg, Debugger::Constants::ANALYZERTASK_ID);
TaskHub::requestPopup();
}
diff --git a/src/plugins/clangtools/clangtools.qbs b/src/plugins/clangtools/clangtools.qbs
index e0bab2c34c..97759e54c5 100644
--- a/src/plugins/clangtools/clangtools.qbs
+++ b/src/plugins/clangtools/clangtools.qbs
@@ -12,7 +12,9 @@ QtcPlugin {
Depends { name: "ProjectExplorer" }
Depends { name: "QtcSsh" }
Depends { name: "Utils" }
+
Depends { name: "libclang"; required: false }
+ Depends { name: "clang_defines" }
Depends { name: "Qt.widgets" }
@@ -23,24 +25,12 @@ QtcPlugin {
condition: libclang.present
+ cpp.defines: base.concat("CLANGPCHMANAGER_LIB")
cpp.includePaths: base.concat(libclang.llvmIncludeDir)
cpp.libraryPaths: base.concat(libclang.llvmLibDir)
cpp.dynamicLibraries: base.concat(libclang.llvmLibs)
cpp.rpaths: base.concat(libclang.llvmLibDir)
- cpp.defines: {
- var defines = base;
- defines.push("CLANGPCHMANAGER_LIB");
-
- // The following defines are used to determine the clang include path for intrinsics.
- defines.push('CLANG_VERSION="' + libclang.llvmVersion + '"');
- var resourceDir = FileInfo.joinPaths(libclang.llvmLibDir, "clang", libclang.llvmVersion,
- "include");
- defines.push('CLANG_RESOURCE_DIR="' + resourceDir + '"');
- defines.push('CLANG_BINDIR="' + libclang.llvmBinDir + '"');
- return defines;
- }
-
files: [
"clangfileinfo.h",
"clangfixitsrefactoringchanges.cpp",
diff --git a/src/plugins/clangtools/clangtoolsbasicsettings.ui b/src/plugins/clangtools/clangtoolsbasicsettings.ui
index 22842500d5..4b6f14111e 100644
--- a/src/plugins/clangtools/clangtoolsbasicsettings.ui
+++ b/src/plugins/clangtools/clangtoolsbasicsettings.ui
@@ -10,9 +10,6 @@
<height>300</height>
</rect>
</property>
- <property name="windowTitle">
- <string>Form</string>
- </property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<property name="leftMargin">
<number>0</number>
diff --git a/src/plugins/clangtools/clangtoolspreconfiguredsessiontests.cpp b/src/plugins/clangtools/clangtoolspreconfiguredsessiontests.cpp
index d08bfcd23c..6014e00821 100644
--- a/src/plugins/clangtools/clangtoolspreconfiguredsessiontests.cpp
+++ b/src/plugins/clangtools/clangtoolspreconfiguredsessiontests.cpp
@@ -29,6 +29,7 @@
#include "clangtidyclazytool.h"
#include "clangtoolsutils.h"
+#include <coreplugin/icore.h>
#include <cpptools/compileroptionsbuilder.h>
#include <cpptools/projectinfo.h>
#include <projectexplorer/kitinformation.h>
@@ -168,7 +169,7 @@ static QList<Target *> validTargets(Project *project)
const ToolChain * const toolchain = ToolChainKitInformation::toolChain(kit, ProjectExplorer::Constants::CXX_LANGUAGE_ID);
QTC_ASSERT(toolchain, return false);
- if (CppTools::clangExecutable(CLANG_BINDIR).isEmpty()) {
+ if (Core::ICore::clangExecutable(CLANG_BINDIR).isEmpty()) {
qWarning("Project \"%s\": Skipping target \"%s\" since no suitable clang was found for the toolchain.",
qPrintable(projectFileName),
qPrintable(target->displayName()));
diff --git a/src/plugins/clangtools/clangtoolsunittests.cpp b/src/plugins/clangtools/clangtoolsunittests.cpp
index 98577a78a0..eed554633a 100644
--- a/src/plugins/clangtools/clangtoolsunittests.cpp
+++ b/src/plugins/clangtools/clangtoolsunittests.cpp
@@ -29,6 +29,7 @@
#include "clangtidyclazytool.h"
#include "clangtoolsutils.h"
+#include <coreplugin/icore.h>
#include <cpptools/cppcodemodelsettings.h>
#include <cpptools/cppmodelmanager.h>
#include <cpptools/cpptoolstestcase.h>
@@ -62,7 +63,7 @@ void ClangToolsUnitTests::initTestCase()
if (!toolchain)
QSKIP("This test requires that there is a kit with a toolchain.");
- if (CppTools::clangExecutable(CLANG_BINDIR).isEmpty())
+ if (Core::ICore::clangExecutable(CLANG_BINDIR).isEmpty())
QSKIP("No clang suitable for analyzing found");
m_tmpDir = new CppTools::Tests::TemporaryCopiedDir(QLatin1String(":/unit-tests"));
diff --git a/src/plugins/classview/classviewnavigationwidget.cpp b/src/plugins/classview/classviewnavigationwidget.cpp
index 58cab5a6d8..a2f793fcab 100644
--- a/src/plugins/classview/classviewnavigationwidget.cpp
+++ b/src/plugins/classview/classviewnavigationwidget.cpp
@@ -173,7 +173,7 @@ QList<QToolButton *> NavigationWidget::createToolButtons()
// create a button
fullProjectsModeButton = new QToolButton();
fullProjectsModeButton->setIcon(
- CPlusPlus::Icons::iconForType(CPlusPlus::Icons::ClassIconType));
+ ::Utils::CodeModelIcon::iconForType(::Utils::CodeModelIcon::Class));
fullProjectsModeButton->setCheckable(true);
fullProjectsModeButton->setToolTip(tr("Show Subprojects"));
diff --git a/src/plugins/classview/classviewtreeitemmodel.cpp b/src/plugins/classview/classviewtreeitemmodel.cpp
index b00f8e3020..0e295324c9 100644
--- a/src/plugins/classview/classviewtreeitemmodel.cpp
+++ b/src/plugins/classview/classviewtreeitemmodel.cpp
@@ -62,7 +62,7 @@ QVariant TreeItemModel::data(const QModelIndex &index, int role) const
bool ok = false;
int type = iconType.toInt(&ok);
if (ok && type >= 0)
- return CPlusPlus::Icons::iconForType(static_cast<CPlusPlus::Icons::IconType>(type));
+ return ::Utils::CodeModelIcon::iconForType(static_cast<::Utils::CodeModelIcon::Type>(type));
}
}
break;
diff --git a/src/plugins/classview/classviewutils.cpp b/src/plugins/classview/classviewutils.cpp
index 793fa3ea6d..53a673bb76 100644
--- a/src/plugins/classview/classviewutils.cpp
+++ b/src/plugins/classview/classviewutils.cpp
@@ -43,29 +43,29 @@ namespace Constants {
//! Default icon sort order
const int IconSortOrder[] = {
- CPlusPlus::Icons::NamespaceIconType,
- CPlusPlus::Icons::EnumIconType,
- CPlusPlus::Icons::ClassIconType,
- CPlusPlus::Icons::FuncPublicIconType,
- CPlusPlus::Icons::FuncProtectedIconType,
- CPlusPlus::Icons::FuncPrivateIconType,
- CPlusPlus::Icons::FuncPublicStaticIconType,
- CPlusPlus::Icons::FuncProtectedStaticIconType,
- CPlusPlus::Icons::FuncPrivateStaticIconType,
- CPlusPlus::Icons::SignalIconType,
- CPlusPlus::Icons::SlotPublicIconType,
- CPlusPlus::Icons::SlotProtectedIconType,
- CPlusPlus::Icons::SlotPrivateIconType,
- CPlusPlus::Icons::VarPublicIconType,
- CPlusPlus::Icons::VarProtectedIconType,
- CPlusPlus::Icons::VarPrivateIconType,
- CPlusPlus::Icons::VarPublicStaticIconType,
- CPlusPlus::Icons::VarProtectedStaticIconType,
- CPlusPlus::Icons::VarPrivateStaticIconType,
- CPlusPlus::Icons::EnumeratorIconType,
- CPlusPlus::Icons::KeywordIconType,
- CPlusPlus::Icons::MacroIconType,
- CPlusPlus::Icons::UnknownIconType
+ Utils::CodeModelIcon::Namespace,
+ Utils::CodeModelIcon::Enum,
+ Utils::CodeModelIcon::Class,
+ Utils::CodeModelIcon::FuncPublic,
+ Utils::CodeModelIcon::FuncProtected,
+ Utils::CodeModelIcon::FuncPrivate,
+ Utils::CodeModelIcon::FuncPublicStatic,
+ Utils::CodeModelIcon::FuncProtectedStatic,
+ Utils::CodeModelIcon::FuncPrivateStatic,
+ Utils::CodeModelIcon::Signal,
+ Utils::CodeModelIcon::SlotPublic,
+ Utils::CodeModelIcon::SlotProtected,
+ Utils::CodeModelIcon::SlotPrivate,
+ Utils::CodeModelIcon::VarPublic,
+ Utils::CodeModelIcon::VarProtected,
+ Utils::CodeModelIcon::VarPrivate,
+ Utils::CodeModelIcon::VarPublicStatic,
+ Utils::CodeModelIcon::VarProtectedStatic,
+ Utils::CodeModelIcon::VarPrivateStatic,
+ Utils::CodeModelIcon::Enumerator,
+ Utils::CodeModelIcon::Keyword,
+ Utils::CodeModelIcon::Macro,
+ Utils::CodeModelIcon::Unknown
};
} // namespace Constants
diff --git a/src/plugins/cmakeprojectmanager/builddirmanager.cpp b/src/plugins/cmakeprojectmanager/builddirmanager.cpp
index db703727dc..68a7ceb684 100644
--- a/src/plugins/cmakeprojectmanager/builddirmanager.cpp
+++ b/src/plugins/cmakeprojectmanager/builddirmanager.cpp
@@ -64,7 +64,7 @@ BuildDirManager::~BuildDirManager() = default;
Utils::FileName BuildDirManager::workDirectory(const BuildDirParameters &parameters) const
{
const Utils::FileName bdir = parameters.buildDirectory;
- const CMakeTool *cmake = parameters.cmakeTool;
+ const CMakeTool *cmake = parameters.cmakeTool();
if (bdir.exists()) {
m_buildDirToTempDir.erase(bdir);
return bdir;
@@ -141,7 +141,7 @@ bool BuildDirManager::hasConfigChanged()
const CMakeConfig currentConfig = takeCMakeConfiguration();
- const CMakeTool *tool = m_parameters.cmakeTool;
+ const CMakeTool *tool = m_parameters.cmakeTool();
QTC_ASSERT(tool, return false); // No cmake... we should not have ended up here in the first place
const QString extraKitGenerator = m_parameters.extraGenerator;
const QString mainKitGenerator = m_parameters.generator;
@@ -196,7 +196,7 @@ void BuildDirManager::setParametersAndRequestParse(const BuildDirParameters &par
int newReaderReparseOptions,
int existingReaderReparseOptions)
{
- if (!parameters.cmakeTool) {
+ if (!parameters.cmakeTool()) {
TaskHub::addTask(Task::Error,
tr("The kit needs to define a CMake tool to parse this project."),
ProjectExplorer::Constants::TASK_CATEGORY_BUILDSYSTEM);
@@ -240,7 +240,7 @@ void BuildDirManager::becameDirty()
if (!m_parameters.buildConfiguration || !m_parameters.buildConfiguration->isActive())
return;
- const CMakeTool *tool = m_parameters.cmakeTool;
+ const CMakeTool *tool = m_parameters.cmakeTool();
if (!tool->isAutoRun())
return;
diff --git a/src/plugins/cmakeprojectmanager/builddirparameters.cpp b/src/plugins/cmakeprojectmanager/builddirparameters.cpp
index 4af170b490..481695f7e9 100644
--- a/src/plugins/cmakeprojectmanager/builddirparameters.cpp
+++ b/src/plugins/cmakeprojectmanager/builddirparameters.cpp
@@ -27,6 +27,7 @@
#include "cmakebuildconfiguration.h"
#include "cmakekitinformation.h"
+#include "cmaketoolmanager.h"
#include <projectexplorer/kit.h>
#include <projectexplorer/kitinformation.h>
@@ -53,7 +54,7 @@ BuildDirParameters::BuildDirParameters(CMakeBuildConfiguration *bc)
environment = bc->environment();
- cmakeTool = CMakeKitInformation::cmakeTool(k);
+ cmakeToolId = CMakeKitInformation::cmakeToolId(k);
auto tc = ToolChainKitInformation::toolChain(k, Constants::CXX_LANGUAGE_ID);
if (tc)
@@ -74,7 +75,12 @@ BuildDirParameters::BuildDirParameters(CMakeBuildConfiguration *bc)
generatorArguments = CMakeGeneratorKitInformation::generatorArguments(k);
}
-bool BuildDirParameters::isValid() const { return buildConfiguration && cmakeTool; }
+bool BuildDirParameters::isValid() const { return buildConfiguration && cmakeTool(); }
+
+CMakeTool *BuildDirParameters::cmakeTool() const
+{
+ return CMakeToolManager::findById(cmakeToolId);
+}
BuildDirParameters::BuildDirParameters(const BuildDirParameters &) = default;
diff --git a/src/plugins/cmakeprojectmanager/builddirparameters.h b/src/plugins/cmakeprojectmanager/builddirparameters.h
index 1c26b45ffe..92f5f16eee 100644
--- a/src/plugins/cmakeprojectmanager/builddirparameters.h
+++ b/src/plugins/cmakeprojectmanager/builddirparameters.h
@@ -46,6 +46,7 @@ public:
BuildDirParameters(const BuildDirParameters &other);
bool isValid() const;
+ CMakeTool *cmakeTool() const;
CMakeBuildConfiguration *buildConfiguration = nullptr;
QString projectName;
@@ -54,7 +55,7 @@ public:
Utils::FileName buildDirectory;
Utils::FileName workDirectory; // either buildDirectory or a QTemporaryDirectory!
Utils::Environment environment;
- CMakeTool *cmakeTool = nullptr;
+ Core::Id cmakeToolId;
QByteArray cxxToolChainId;
QByteArray cToolChainId;
diff --git a/src/plugins/cmakeprojectmanager/builddirreader.cpp b/src/plugins/cmakeprojectmanager/builddirreader.cpp
index 1d15eb7f7f..3cf74ad6f4 100644
--- a/src/plugins/cmakeprojectmanager/builddirreader.cpp
+++ b/src/plugins/cmakeprojectmanager/builddirreader.cpp
@@ -41,8 +41,9 @@ namespace Internal {
BuildDirReader *BuildDirReader::createReader(const BuildDirParameters &p)
{
- QTC_ASSERT(p.isValid() && p.cmakeTool, return nullptr);
- if (p.cmakeTool->hasServerMode())
+ CMakeTool *cmake = p.cmakeTool();
+ QTC_ASSERT(p.isValid() && cmake, return nullptr);
+ if (cmake->hasServerMode())
return new ServerModeReader;
return new TeaLeafReader;
}
diff --git a/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp b/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp
index 0677bb9ae2..306ec7b4e1 100644
--- a/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp
@@ -109,11 +109,6 @@ CMakeBuildConfiguration *CMakeBuildStep::cmakeBuildConfiguration() const
return static_cast<CMakeBuildConfiguration *>(buildConfiguration());
}
-CMakeBuildConfiguration *CMakeBuildStep::targetsActiveBuildConfiguration() const
-{
- return static_cast<CMakeBuildConfiguration *>(target()->activeBuildConfiguration());
-}
-
CMakeRunConfiguration *CMakeBuildStep::targetsActiveRunConfiguration() const
{
return qobject_cast<CMakeRunConfiguration *>(target()->activeRunConfiguration());
@@ -154,8 +149,6 @@ bool CMakeBuildStep::init(QList<const BuildStep *> &earlierSteps)
{
bool canInit = true;
CMakeBuildConfiguration *bc = cmakeBuildConfiguration();
- if (!bc)
- bc = targetsActiveBuildConfiguration();
if (!bc) {
emit addTask(Task::buildConfigurationMissingTask());
canInit = false;
@@ -241,8 +234,6 @@ void CMakeBuildStep::run(QFutureInterface<bool> &fi)
{
// Make sure CMake state was written to disk before trying to build:
CMakeBuildConfiguration *bc = cmakeBuildConfiguration();
- if (!bc)
- bc = targetsActiveBuildConfiguration();
QTC_ASSERT(bc, return);
bool mustDelay = false;
@@ -535,8 +526,6 @@ void CMakeBuildStepConfigWidget::selectedBuildTargetsChanged()
void CMakeBuildStepConfigWidget::updateDetails()
{
BuildConfiguration *bc = m_buildStep->buildConfiguration();
- if (!bc)
- bc = m_buildStep->targetsActiveBuildConfiguration();
if (!bc) {
m_summaryText = tr("<b>No build configuration found on this kit.</b>");
emit updateSummary();
@@ -566,7 +555,7 @@ QString CMakeBuildStepConfigWidget::summaryText() const
CMakeBuildStepFactory::CMakeBuildStepFactory()
{
registerStep<CMakeBuildStep>(Constants::CMAKE_BUILD_STEP_ID);
- setDisplayName(tr("Build", "Display name for CMakeProjectManager::CMakeBuildStep id."));
+ setDisplayName(CMakeBuildStep::tr("Build", "Display name for CMakeProjectManager::CMakeBuildStep id."));
setSupportedProjectType(Constants::CMAKEPROJECT_ID);
}
diff --git a/src/plugins/cmakeprojectmanager/cmakebuildstep.h b/src/plugins/cmakeprojectmanager/cmakebuildstep.h
index 68c40d5752..098310f1eb 100644
--- a/src/plugins/cmakeprojectmanager/cmakebuildstep.h
+++ b/src/plugins/cmakeprojectmanager/cmakebuildstep.h
@@ -55,7 +55,6 @@ public:
explicit CMakeBuildStep(ProjectExplorer::BuildStepList *bsl);
CMakeBuildConfiguration *cmakeBuildConfiguration() const;
- CMakeBuildConfiguration *targetsActiveBuildConfiguration() const;
bool init(QList<const BuildStep *> &earlierSteps) override;
void run(QFutureInterface<bool> &fi) override;
@@ -139,8 +138,6 @@ private:
class CMakeBuildStepFactory : public ProjectExplorer::BuildStepFactory
{
- Q_OBJECT
-
public:
CMakeBuildStepFactory();
};
diff --git a/src/plugins/cmakeprojectmanager/cmakeconfigitem.cpp b/src/plugins/cmakeprojectmanager/cmakeconfigitem.cpp
index c4531fed20..7e6db558e5 100644
--- a/src/plugins/cmakeprojectmanager/cmakeconfigitem.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakeconfigitem.cpp
@@ -44,7 +44,7 @@ CMakeConfigItem::CMakeConfigItem() = default;
CMakeConfigItem::CMakeConfigItem(const CMakeConfigItem &other) :
key(other.key), type(other.type), isAdvanced(other.isAdvanced),
- inCMakeCache(false), isUnset(other.isUnset), value(other.value),
+ isUnset(other.isUnset), value(other.value),
documentation(other.documentation), values(other.values)
{}
diff --git a/src/plugins/cmakeprojectmanager/cmakekitinformation.cpp b/src/plugins/cmakeprojectmanager/cmakekitinformation.cpp
index 6903be8f2c..3646b066b5 100644
--- a/src/plugins/cmakeprojectmanager/cmakekitinformation.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakekitinformation.cpp
@@ -83,13 +83,16 @@ Core::Id CMakeKitInformation::id()
return TOOL_ID;
}
-CMakeTool *CMakeKitInformation::cmakeTool(const Kit *k)
+Core::Id CMakeKitInformation::cmakeToolId(const Kit *k)
{
if (!k)
- return nullptr;
+ return {};
+ return Core::Id::fromSetting(k->value(TOOL_ID));
+}
- const QVariant id = k->value(TOOL_ID);
- return CMakeToolManager::findById(Core::Id::fromSetting(id));
+CMakeTool *CMakeKitInformation::cmakeTool(const Kit *k)
+{
+ return CMakeToolManager::findById(cmakeToolId(k));
}
void CMakeKitInformation::setCMakeTool(Kit *k, const Core::Id id)
diff --git a/src/plugins/cmakeprojectmanager/cmakekitinformation.h b/src/plugins/cmakeprojectmanager/cmakekitinformation.h
index 87f9de0b67..3da3f7d7b2 100644
--- a/src/plugins/cmakeprojectmanager/cmakekitinformation.h
+++ b/src/plugins/cmakeprojectmanager/cmakekitinformation.h
@@ -43,6 +43,7 @@ public:
static Core::Id id();
+ static Core::Id cmakeToolId(const ProjectExplorer::Kit *k);
static CMakeTool *cmakeTool(const ProjectExplorer::Kit *k);
static void setCMakeTool(ProjectExplorer::Kit *k, const Core::Id id);
diff --git a/src/plugins/cmakeprojectmanager/cmakeprojectmanager.pro b/src/plugins/cmakeprojectmanager/cmakeprojectmanager.pro
index 1b80127ace..c242998441 100644
--- a/src/plugins/cmakeprojectmanager/cmakeprojectmanager.pro
+++ b/src/plugins/cmakeprojectmanager/cmakeprojectmanager.pro
@@ -20,6 +20,7 @@ HEADERS = builddirmanager.h \
cmakelocatorfilter.h \
cmakefilecompletionassist.h \
cmaketool.h \
+ cmaketoolsettingsaccessor.h \
cmakeparser.h \
cmakesettingspage.h \
cmaketoolmanager.h \
@@ -56,6 +57,7 @@ SOURCES = builddirmanager.cpp \
cmakelocatorfilter.cpp \
cmakefilecompletionassist.cpp \
cmaketool.cpp \
+ cmaketoolsettingsaccessor.cpp \
cmakeparser.cpp \
cmakesettingspage.cpp \
cmaketoolmanager.cpp \
diff --git a/src/plugins/cmakeprojectmanager/cmakeprojectmanager.qbs b/src/plugins/cmakeprojectmanager/cmakeprojectmanager.qbs
index a69662f5b9..d0ce6bebe2 100644
--- a/src/plugins/cmakeprojectmanager/cmakeprojectmanager.qbs
+++ b/src/plugins/cmakeprojectmanager/cmakeprojectmanager.qbs
@@ -69,6 +69,8 @@ QtcPlugin {
"cmaketool.h",
"cmaketoolmanager.cpp",
"cmaketoolmanager.h",
+ "cmaketoolsettingsaccessor.cpp",
+ "cmaketoolsettingsaccessor.h",
"cmakesettingspage.h",
"cmakesettingspage.cpp",
"cmakeindenter.h",
diff --git a/src/plugins/cmakeprojectmanager/cmakeprojectplugin.cpp b/src/plugins/cmakeprojectmanager/cmakeprojectplugin.cpp
index da3b80d570..806c5f1ab8 100644
--- a/src/plugins/cmakeprojectmanager/cmakeprojectplugin.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakeprojectplugin.cpp
@@ -106,9 +106,9 @@ bool CMakeProjectPlugin::initialize(const QStringList & /*arguments*/, QString *
new CMakeToolManager(this);
- KitManager::registerKitInformation(new CMakeKitInformation);
- KitManager::registerKitInformation(new CMakeGeneratorKitInformation);
- KitManager::registerKitInformation(new CMakeConfigurationKitInformation);
+ KitManager::registerKitInformation<CMakeKitInformation>();
+ KitManager::registerKitInformation<CMakeGeneratorKitInformation>();
+ KitManager::registerKitInformation<CMakeConfigurationKitInformation>();
//menus
ActionContainer *msubproject =
diff --git a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp
index a5cb8c4d38..1c0c4f2ee9 100644
--- a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp
@@ -112,6 +112,8 @@ CMakeRunConfigurationFactory::CMakeRunConfigurationFactory()
registerRunConfiguration<CMakeRunConfiguration>("CMakeProjectManager.CMakeRunConfiguration.");
addSupportedProjectType(CMakeProjectManager::Constants::CMAKEPROJECT_ID);
addSupportedTargetDeviceType(ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE);
+
+ addRunWorkerFactory<SimpleTargetRunner>(ProjectExplorer::Constants::NORMAL_RUN_MODE);
}
} // Internal
diff --git a/src/plugins/cmakeprojectmanager/cmakesettingspage.cpp b/src/plugins/cmakeprojectmanager/cmakesettingspage.cpp
index 2d9dc9e37d..037bd8e35e 100644
--- a/src/plugins/cmakeprojectmanager/cmakesettingspage.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakesettingspage.cpp
@@ -108,8 +108,7 @@ public:
m_executable(executable),
m_isAutoRun(autoRun),
m_autoCreateBuildDirectory(autoCreate),
- m_autodetected(autodetected),
- m_changed(true)
+ m_autodetected(autodetected)
{}
CMakeToolTreeItem() = default;
@@ -250,6 +249,9 @@ CMakeToolTreeItem *CMakeToolItemModel::cmakeToolItem(const QModelIndex &index) c
void CMakeToolItemModel::removeCMakeTool(const Core::Id &id)
{
+ if (m_removedItems.contains(id))
+ return; // Item has already been removed in the model!
+
CMakeToolTreeItem *treeItem = cmakeToolItem(id);
QTC_ASSERT(treeItem, return);
@@ -278,13 +280,11 @@ void CMakeToolItemModel::apply()
foreach (CMakeToolTreeItem *item, toRegister) {
CMakeTool::Detection detection = item->m_autodetected ? CMakeTool::AutoDetection
: CMakeTool::ManualDetection;
- CMakeTool *cmake = new CMakeTool(detection, item->m_id);
+ auto cmake = std::make_unique<CMakeTool>(detection, item->m_id);
cmake->setDisplayName(item->m_name);
cmake->setCMakeExecutable(item->m_executable);
- if (!CMakeToolManager::registerCMakeTool(cmake)) {
+ if (!CMakeToolManager::registerCMakeTool(std::move(cmake)))
item->m_changed = true;
- delete cmake;
- }
}
CMakeToolManager::setDefaultCMakeTool(defaultItemId());
diff --git a/src/plugins/cmakeprojectmanager/cmaketool.cpp b/src/plugins/cmakeprojectmanager/cmaketool.cpp
index e123bd4e5a..795f2dc7cb 100644
--- a/src/plugins/cmakeprojectmanager/cmaketool.cpp
+++ b/src/plugins/cmakeprojectmanager/cmaketool.cpp
@@ -55,18 +55,45 @@ bool CMakeTool::Generator::matches(const QString &n, const QString &ex) const
return n == name && (ex.isEmpty() || extraGenerators.contains(ex));
}
+namespace Internal {
+
+// --------------------------------------------------------------------
+// CMakeIntrospectionData:
+// --------------------------------------------------------------------
+
+class IntrospectionData
+{
+public:
+ bool m_didAttemptToRun = false;
+ bool m_didRun = false;
+ bool m_hasServerMode = false;
+
+ bool m_queriedServerMode = false;
+ bool m_triedCapabilities = false;
+
+ QList<CMakeTool::Generator> m_generators;
+ QMap<QString, QStringList> m_functionArgs;
+ QStringList m_variables;
+ QStringList m_functions;
+ CMakeTool::Version m_version;
+};
+
+} // namespace Internal
+
///////////////////////////
// CMakeTool
///////////////////////////
CMakeTool::CMakeTool(Detection d, const Core::Id &id) :
- m_id(id), m_isAutoDetected(d == AutoDetection)
+ m_id(id), m_isAutoDetected(d == AutoDetection),
+ m_introspection(std::make_unique<Internal::IntrospectionData>())
{
QTC_ASSERT(m_id.isValid(), m_id = Core::Id::fromString(QUuid::createUuid().toString()));
}
-CMakeTool::CMakeTool(const QVariantMap &map, bool fromSdk) : m_isAutoDetected(fromSdk)
+CMakeTool::CMakeTool(const QVariantMap &map, bool fromSdk) :
+ CMakeTool(fromSdk ? CMakeTool::AutoDetection : CMakeTool::ManualDetection,
+ Core::Id::fromSetting(map.value(CMAKE_INFORMATION_ID)))
{
- m_id = Core::Id::fromSetting(map.value(CMAKE_INFORMATION_ID));
m_displayName = map.value(CMAKE_INFORMATION_DISPLAYNAME).toString();
m_isAutoRun = map.value(CMAKE_INFORMATION_AUTORUN, true).toBool();
m_autoCreateBuildDirectory = map.value(CMAKE_INFORMATION_AUTO_CREATE_BUILD_DIRECTORY, false).toBool();
@@ -78,6 +105,8 @@ CMakeTool::CMakeTool(const QVariantMap &map, bool fromSdk) : m_isAutoDetected(fr
setCMakeExecutable(Utils::FileName::fromString(map.value(CMAKE_INFORMATION_COMMAND).toString()));
}
+CMakeTool::~CMakeTool() = default;
+
Core::Id CMakeTool::createId()
{
return Core::Id::fromString(QUuid::createUuid().toString());
@@ -88,8 +117,8 @@ void CMakeTool::setCMakeExecutable(const Utils::FileName &executable)
if (m_executable == executable)
return;
- m_didRun = false;
- m_didAttemptToRun = false;
+ m_introspection->m_didRun = false;
+ m_introspection->m_didAttemptToRun = false;
m_executable = executable;
CMakeToolManager::notifyAboutUpdate(this);
@@ -118,15 +147,15 @@ bool CMakeTool::isValid() const
if (!m_id.isValid())
return false;
- if (!m_didAttemptToRun)
+ if (!m_introspection->m_didAttemptToRun)
supportedGenerators();
- return m_didRun;
+ return m_introspection->m_didRun;
}
Utils::SynchronousProcessResponse CMakeTool::run(const QStringList &args, bool mayFail) const
{
- if (m_didAttemptToRun && !m_didRun) {
+ if (m_introspection->m_didAttemptToRun && !m_introspection->m_didRun) {
Utils::SynchronousProcessResponse response;
response.result = Utils::SynchronousProcessResponse::StartFailed;
return response;
@@ -141,8 +170,8 @@ Utils::SynchronousProcessResponse CMakeTool::run(const QStringList &args, bool m
cmake.setTimeOutMessageBoxEnabled(false);
Utils::SynchronousProcessResponse response = cmake.runBlocking(m_executable.toString(), args);
- m_didAttemptToRun = true;
- m_didRun = mayFail ? true : (response.result == Utils::SynchronousProcessResponse::Finished);
+ m_introspection->m_didAttemptToRun = true;
+ m_introspection->m_didRun = mayFail ? true : (response.result == Utils::SynchronousProcessResponse::Finished);
return response;
}
@@ -182,16 +211,16 @@ bool CMakeTool::autoCreateBuildDirectory() const
QList<CMakeTool::Generator> CMakeTool::supportedGenerators() const
{
readInformation(QueryType::GENERATORS);
- return m_generators;
+ return m_introspection->m_generators;
}
TextEditor::Keywords CMakeTool::keywords()
{
- if (m_functions.isEmpty()) {
+ if (m_introspection->m_functions.isEmpty()) {
Utils::SynchronousProcessResponse response;
response = run({"--help-command-list"});
if (response.result == Utils::SynchronousProcessResponse::Finished)
- m_functions = response.stdOut().split('\n');
+ m_introspection->m_functions = response.stdOut().split('\n');
response = run({"--help-commands"});
if (response.result == Utils::SynchronousProcessResponse::Finished)
@@ -199,29 +228,31 @@ TextEditor::Keywords CMakeTool::keywords()
response = run({"--help-property-list"});
if (response.result == Utils::SynchronousProcessResponse::Finished)
- m_variables = parseVariableOutput(response.stdOut());
+ m_introspection->m_variables = parseVariableOutput(response.stdOut());
response = run({"--help-variable-list"});
if (response.result == Utils::SynchronousProcessResponse::Finished) {
- m_variables.append(parseVariableOutput(response.stdOut()));
- m_variables = Utils::filteredUnique(m_variables);
- Utils::sort(m_variables);
+ m_introspection->m_variables.append(parseVariableOutput(response.stdOut()));
+ m_introspection->m_variables = Utils::filteredUnique(m_introspection->m_variables);
+ Utils::sort(m_introspection->m_variables);
}
}
- return TextEditor::Keywords(m_variables, m_functions, m_functionArgs);
+ return TextEditor::Keywords(m_introspection->m_variables,
+ m_introspection->m_functions,
+ m_introspection->m_functionArgs);
}
bool CMakeTool::hasServerMode() const
{
readInformation(QueryType::SERVER_MODE);
- return m_hasServerMode;
+ return m_introspection->m_hasServerMode;
}
CMakeTool::Version CMakeTool::version() const
{
readInformation(QueryType::VERSION);
- return m_version;
+ return m_introspection->m_version;
}
bool CMakeTool::isAutoDetected() const
@@ -254,16 +285,16 @@ CMakeTool::PathMapper CMakeTool::pathMapper() const
void CMakeTool::readInformation(CMakeTool::QueryType type) const
{
- if ((type == QueryType::GENERATORS && !m_generators.isEmpty())
- || (type == QueryType::SERVER_MODE && m_queriedServerMode)
- || (type == QueryType::VERSION && !m_version.fullVersion.isEmpty()))
+ if ((type == QueryType::GENERATORS && !m_introspection->m_generators.isEmpty())
+ || (type == QueryType::SERVER_MODE && m_introspection->m_queriedServerMode)
+ || (type == QueryType::VERSION && !m_introspection->m_version.fullVersion.isEmpty()))
return;
- if (!m_triedCapabilities) {
+ if (!m_introspection->m_triedCapabilities) {
fetchFromCapabilities();
- m_triedCapabilities = true;
- m_queriedServerMode = true; // Got added after "-E capabilities" support!
- if (type == QueryType::GENERATORS && !m_generators.isEmpty())
+ m_introspection->m_triedCapabilities = true;
+ m_introspection->m_queriedServerMode = true; // Got added after "-E capabilities" support!
+ if (type == QueryType::GENERATORS && !m_introspection->m_generators.isEmpty())
return;
}
@@ -312,7 +343,7 @@ static QStringList parseDefinition(const QString &definition)
void CMakeTool::parseFunctionDetailsOutput(const QString &output)
{
QSet<QString> functionSet;
- functionSet.fromList(m_functions);
+ functionSet.fromList(m_introspection->m_functions);
bool expectDefinition = false;
QString currentDefinition;
@@ -333,13 +364,13 @@ void CMakeTool::parseFunctionDetailsOutput(const QString &output)
if (!words.isEmpty()) {
const QString command = words.takeFirst();
if (functionSet.contains(command)) {
- QStringList tmp = words + m_functionArgs[command];
+ QStringList tmp = words + m_introspection->m_functionArgs[command];
Utils::sort(tmp);
- m_functionArgs[command] = Utils::filteredUnique(tmp);
+ m_introspection->m_functionArgs[command] = Utils::filteredUnique(tmp);
}
}
if (!words.isEmpty() && functionSet.contains(words.at(0)))
- m_functionArgs[words.at(0)];
+ m_introspection->m_functionArgs[words.at(0)];
currentDefinition.clear();
} else {
currentDefinition.append(line.trimmed() + ' ');
@@ -374,10 +405,13 @@ void CMakeTool::fetchGeneratorsFromHelp() const
Utils::SynchronousProcessResponse response = run({"--help"});
if (response.result != Utils::SynchronousProcessResponse::Finished)
return;
+ parseGeneratorsFromHelp(response.stdOut().split('\n'));
+}
+void CMakeTool::parseGeneratorsFromHelp(const QStringList &lines) const
+{
bool inGeneratorSection = false;
QHash<QString, QStringList> generatorInfo;
- const QStringList lines = response.stdOut().split('\n');
foreach (const QString &line, lines) {
if (line.isEmpty())
continue;
@@ -418,7 +452,7 @@ void CMakeTool::fetchGeneratorsFromHelp() const
// Populate genertor list:
for (auto it = generatorInfo.constBegin(); it != generatorInfo.constEnd(); ++it)
- m_generators.append(Generator(it.key(), it.value()));
+ m_introspection->m_generators.append(Generator(it.key(), it.value()));
}
void CMakeTool::fetchVersionFromVersionOutput() const
@@ -427,17 +461,21 @@ void CMakeTool::fetchVersionFromVersionOutput() const
if (response.result != Utils::SynchronousProcessResponse::Finished)
return;
+ parseVersionFormVersionOutput(response.stdOut().split('\n'));
+}
+
+void CMakeTool::parseVersionFormVersionOutput(const QStringList &lines) const
+{
QRegularExpression versionLine("^cmake.* version ((\\d+).(\\d+).(\\d+).*)$");
- const QString responseText = response.stdOut();
- for (const QStringRef &line : responseText.splitRef(QLatin1Char('\n'))) {
+ for (const QString &line : lines) {
QRegularExpressionMatch match = versionLine.match(line);
if (!match.hasMatch())
continue;
- m_version.major = match.captured(2).toInt();
- m_version.minor = match.captured(3).toInt();
- m_version.patch = match.captured(4).toInt();
- m_version.fullVersion = match.captured(1).toUtf8();
+ m_introspection->m_version.major = match.captured(2).toInt();
+ m_introspection->m_version.minor = match.captured(3).toInt();
+ m_introspection->m_version.patch = match.captured(4).toInt();
+ m_introspection->m_version.fullVersion = match.captured(1).toUtf8();
break;
}
}
@@ -448,26 +486,31 @@ void CMakeTool::fetchFromCapabilities() const
if (response.result != Utils::SynchronousProcessResponse::Finished)
return;
- auto doc = QJsonDocument::fromJson(response.stdOut().toUtf8());
+ parseFromCapabilities(response.stdOut());
+}
+
+void CMakeTool::parseFromCapabilities(const QString &input) const
+{
+ auto doc = QJsonDocument::fromJson(input.toUtf8());
if (!doc.isObject())
return;
const QVariantMap data = doc.object().toVariantMap();
- m_hasServerMode = data.value("serverMode").toBool();
+ m_introspection->m_hasServerMode = data.value("serverMode").toBool();
const QVariantList generatorList = data.value("generators").toList();
for (const QVariant &v : generatorList) {
const QVariantMap gen = v.toMap();
- m_generators.append(Generator(gen.value("name").toString(),
- gen.value("extraGenerators").toStringList(),
- gen.value("platformSupport").toBool(),
- gen.value("toolsetSupport").toBool()));
+ m_introspection->m_generators.append(Generator(gen.value("name").toString(),
+ gen.value("extraGenerators").toStringList(),
+ gen.value("platformSupport").toBool(),
+ gen.value("toolsetSupport").toBool()));
}
const QVariantMap versionInfo = data.value("version").toMap();
- m_version.major = versionInfo.value("major").toInt();
- m_version.minor = versionInfo.value("minor").toInt();
- m_version.patch = versionInfo.value("patch").toInt();
- m_version.fullVersion = versionInfo.value("string").toByteArray();
+ m_introspection->m_version.major = versionInfo.value("major").toInt();
+ m_introspection->m_version.minor = versionInfo.value("minor").toInt();
+ m_introspection->m_version.patch = versionInfo.value("patch").toInt();
+ m_introspection->m_version.fullVersion = versionInfo.value("string").toByteArray();
}
} // namespace CMakeProjectManager
diff --git a/src/plugins/cmakeprojectmanager/cmaketool.h b/src/plugins/cmakeprojectmanager/cmaketool.h
index 95556cefd7..c36511dbd4 100644
--- a/src/plugins/cmakeprojectmanager/cmaketool.h
+++ b/src/plugins/cmakeprojectmanager/cmaketool.h
@@ -43,9 +43,10 @@ namespace ProjectExplorer { class Kit; }
namespace CMakeProjectManager {
-class CMAKE_EXPORT CMakeTool : public QObject
+namespace Internal { class IntrospectionData; }
+
+class CMAKE_EXPORT CMakeTool
{
- Q_OBJECT
public:
enum Detection {
ManualDetection,
@@ -79,7 +80,7 @@ public:
explicit CMakeTool(Detection d, const Core::Id &id);
explicit CMakeTool(const QVariantMap &map, bool fromSdk);
- ~CMakeTool() override = default;
+ ~CMakeTool();
static Core::Id createId();
@@ -120,8 +121,11 @@ private:
QStringList parseVariableOutput(const QString &output);
void fetchGeneratorsFromHelp() const;
+ void parseGeneratorsFromHelp(const QStringList &lines) const;
void fetchVersionFromVersionOutput() const;
+ void parseVersionFormVersionOutput(const QStringList &lines) const;
void fetchFromCapabilities() const;
+ void parseFromCapabilities(const QString &input) const;
Core::Id m_id;
QString m_displayName;
@@ -131,18 +135,7 @@ private:
bool m_isAutoDetected = false;
bool m_autoCreateBuildDirectory = false;
- mutable bool m_didAttemptToRun = false;
- mutable bool m_didRun = false;
- mutable bool m_hasServerMode = false;
-
- mutable bool m_queriedServerMode = false;
- mutable bool m_triedCapabilities = false;
-
- mutable QList<Generator> m_generators;
- mutable QMap<QString, QStringList> m_functionArgs;
- mutable QStringList m_variables;
- mutable QStringList m_functions;
- mutable Version m_version;
+ std::unique_ptr<Internal::IntrospectionData> m_introspection;
PathMapper m_pathMapper;
};
diff --git a/src/plugins/cmakeprojectmanager/cmaketoolmanager.cpp b/src/plugins/cmakeprojectmanager/cmaketoolmanager.cpp
index d7af9c454f..a90fe59c81 100644
--- a/src/plugins/cmakeprojectmanager/cmaketoolmanager.cpp
+++ b/src/plugins/cmakeprojectmanager/cmaketoolmanager.cpp
@@ -25,16 +25,12 @@
#include "cmaketoolmanager.h"
+#include "cmaketoolsettingsaccessor.h"
+
#include <coreplugin/icore.h>
-#include <projectexplorer/toolchainmanager.h>
-#include <utils/persistentsettings.h>
-#include <utils/qtcassert.h>
-#include <utils/environment.h>
-#include <utils/algorithm.h>
-#include <QFileInfo>
-#include <QDebug>
-#include <QDir>
+#include <utils/pointeralgorithm.h>
+#include <utils/qtcassert.h>
using namespace Core;
using namespace Utils;
@@ -42,161 +38,22 @@ using namespace ProjectExplorer;
namespace CMakeProjectManager {
-const char CMAKETOOL_COUNT_KEY[] = "CMakeTools.Count";
-const char CMAKETOOL_DEFAULT_KEY[] = "CMakeTools.Default";
-const char CMAKETOOL_DATA_KEY[] = "CMakeTools.";
-const char CMAKETOOL_FILE_VERSION_KEY[] = "Version";
-const char CMAKETOOL_FILENAME[] = "/cmaketools.xml";
+// --------------------------------------------------------------------
+// CMakeToolManagerPrivate:
+// --------------------------------------------------------------------
class CMakeToolManagerPrivate
{
public:
Id m_defaultCMake;
- QList<CMakeTool *> m_cmakeTools;
- PersistentSettingsWriter *m_writer = nullptr;
- QList<CMakeToolManager::AutodetectionHelper> m_autoDetectionHelpers;
+ std::vector<std::unique_ptr<CMakeTool>> m_cmakeTools;
+ Internal::CMakeToolSettingsAccessor m_accessor;
};
static CMakeToolManagerPrivate *d = nullptr;
-static void addCMakeTool(CMakeTool *item)
-{
- QTC_ASSERT(item->id().isValid(), return);
-
- d->m_cmakeTools.append(item);
-
- //set the first registered cmake tool as default if there is not already one
- if (!d->m_defaultCMake.isValid())
- CMakeToolManager::setDefaultCMakeTool(item->id());
-}
-
-static FileName userSettingsFileName()
-{
- return FileName::fromString(ICore::userResourcePath() + CMAKETOOL_FILENAME);
-}
-
-static QList<CMakeTool *> readCMakeTools(const FileName &fileName, Core::Id *defaultId, bool fromSDK)
-{
- PersistentSettingsReader reader;
- if (!reader.load(fileName))
- return QList<CMakeTool *>();
-
- QVariantMap data = reader.restoreValues();
-
- // Check version
- int version = data.value(QLatin1String(CMAKETOOL_FILE_VERSION_KEY), 0).toInt();
- if (version < 1)
- return QList<CMakeTool *>();
-
- QList<CMakeTool *> loaded;
-
- int count = data.value(QLatin1String(CMAKETOOL_COUNT_KEY), 0).toInt();
- for (int i = 0; i < count; ++i) {
- const QString key = QString::fromLatin1(CMAKETOOL_DATA_KEY) + QString::number(i);
- if (!data.contains(key))
- continue;
-
- const QVariantMap dbMap = data.value(key).toMap();
- auto item = new CMakeTool(dbMap,fromSDK);
- if (item->isAutoDetected()) {
- if (!item->cmakeExecutable().toFileInfo().isExecutable()) {
- qWarning() << QString::fromLatin1("CMakeTool \"%1\" (%2) read from \"%3\" dropped since the command is not executable.")
- .arg(item->cmakeExecutable().toUserOutput(), item->id().toString(), fileName.toUserOutput());
- delete item;
- continue;
- }
- }
-
- loaded.append(item);
- }
-
- *defaultId = Id::fromSetting(data.value(QLatin1String(CMAKETOOL_DEFAULT_KEY), defaultId->toSetting()));
-
- return loaded;
-}
-
-static void readAndDeleteLegacyCMakeSettings ()
-{
- // restore the legacy cmake
- QSettings *settings = ICore::settings();
- settings->beginGroup(QLatin1String("CMakeSettings"));
-
- FileName exec = FileName::fromUserInput(settings->value(QLatin1String("cmakeExecutable")).toString());
- if (exec.toFileInfo().isExecutable()) {
- CMakeTool *item = CMakeToolManager::findByCommand(exec);
- if (!item) {
- item = new CMakeTool(CMakeTool::ManualDetection, CMakeTool::createId());
- item->setCMakeExecutable(exec);
- item->setDisplayName(CMakeToolManager::tr("CMake at %1").arg(item->cmakeExecutable().toUserOutput()));
-
- if (!CMakeToolManager::registerCMakeTool(item)) {
- delete item;
- item = nullptr;
- }
- }
-
- //this setting used to be the default cmake, make sure it is again
- if (item)
- d->m_defaultCMake = item->id();
- }
-
- settings->remove(QString());
- settings->endGroup();
-}
-
-static QList<CMakeTool *> autoDetectCMakeTools()
-{
- Utils::Environment env = Environment::systemEnvironment();
-
- Utils::FileNameList path = env.path();
- path = Utils::filteredUnique(path);
-
- if (HostOsInfo::isWindowsHost()) {
- const QString progFiles = QLatin1String(qgetenv("ProgramFiles"));
- path.append(Utils::FileName::fromString(progFiles + "/CMake"));
- path.append(Utils::FileName::fromString(progFiles + "/CMake/bin"));
- const QString progFilesX86 = QLatin1String(qgetenv("ProgramFiles(x86)"));
- if (!progFilesX86.isEmpty()) {
- path.append(Utils::FileName::fromString(progFilesX86 + "/CMake"));
- path.append(Utils::FileName::fromString(progFilesX86 + "/CMake/bin"));
- }
- }
-
- if (HostOsInfo::isMacHost()) {
- path.append(Utils::FileName::fromString("/Applications/CMake.app/Contents/bin"));
- path.append(Utils::FileName::fromString("/usr/local/bin"));
- path.append(Utils::FileName::fromString("/opt/local/bin"));
- }
-
- const QStringList execs = env.appendExeExtensions(QLatin1String("cmake"));
-
- FileNameList suspects;
- foreach (const Utils::FileName &base, path) {
- if (base.isEmpty())
- continue;
-
- QFileInfo fi;
- for (const QString &exec : execs) {
- fi.setFile(base.toString(), exec);
- if (fi.exists() && fi.isFile() && fi.isExecutable())
- suspects << FileName::fromString(fi.absoluteFilePath());
- }
- }
-
- QList<CMakeTool *> found;
- foreach (const FileName &command, suspects) {
- auto item = new CMakeTool(CMakeTool::AutoDetection, CMakeTool::createId());
- item->setCMakeExecutable(command);
- item->setDisplayName(CMakeToolManager::tr("System CMake at %1").arg(command.toUserOutput()));
-
- found.append(item);
- }
-
- //execute custom helpers if available
- foreach (CMakeToolManager::AutodetectionHelper source, d->m_autoDetectionHelpers)
- found.append(source());
-
- return found;
-}
+// --------------------------------------------------------------------
+// CMakeToolManager:
+// --------------------------------------------------------------------
CMakeToolManager *CMakeToolManager::m_instance = nullptr;
@@ -206,7 +63,6 @@ CMakeToolManager::CMakeToolManager(QObject *parent) : QObject(parent)
m_instance = this;
d = new CMakeToolManagerPrivate;
- d->m_writer = new PersistentSettingsWriter(userSettingsFileName(), QStringLiteral("QtCreatorCMakeTools"));
connect(ICore::instance(), &ICore::saveSettingsRequested,
this, &CMakeToolManager::saveCMakeTools);
@@ -217,8 +73,6 @@ CMakeToolManager::CMakeToolManager(QObject *parent) : QObject(parent)
CMakeToolManager::~CMakeToolManager()
{
- delete d->m_writer;
- qDeleteAll(d->m_cmakeTools);
delete d;
}
@@ -229,85 +83,70 @@ CMakeToolManager *CMakeToolManager::instance()
QList<CMakeTool *> CMakeToolManager::cmakeTools()
{
- return d->m_cmakeTools;
+ return Utils::toRawPointer<QList>(d->m_cmakeTools);
}
Id CMakeToolManager::registerOrFindCMakeTool(const FileName &command)
{
- CMakeTool *cmake = findByCommand(command);
- if (cmake)
+ if (CMakeTool *cmake = findByCommand(command))
return cmake->id();
- cmake = new CMakeTool(CMakeTool::ManualDetection, CMakeTool::createId());
+ auto cmake = std::make_unique<CMakeTool>(CMakeTool::ManualDetection, CMakeTool::createId());
cmake->setCMakeExecutable(command);
cmake->setDisplayName(tr("CMake at %1").arg(command.toUserOutput()));
- addCMakeTool(cmake);
- emit m_instance->cmakeAdded(cmake->id());
- return cmake->id();
+ Core::Id id = cmake->id();
+ QTC_ASSERT(registerCMakeTool(std::move(cmake)), return Core::Id());
+ return id;
}
-bool CMakeToolManager::registerCMakeTool(CMakeTool *tool)
+bool CMakeToolManager::registerCMakeTool(std::unique_ptr<CMakeTool> &&tool)
{
- if (!tool || d->m_cmakeTools.contains(tool))
+ if (!tool || Utils::contains(d->m_cmakeTools, tool.get()))
return true;
- QTC_ASSERT(tool->id().isValid(),return false);
+ const Core::Id toolId = tool->id();
+ QTC_ASSERT(toolId.isValid(),return false);
//make sure the same id was not used before
- foreach (CMakeTool *current, d->m_cmakeTools) {
- if (tool->id() == current->id())
- return false;
- }
+ QTC_ASSERT(!Utils::contains(d->m_cmakeTools, [toolId](const std::unique_ptr<CMakeTool> &known) {
+ return toolId == known->id();
+ }), return false);
+
+ d->m_cmakeTools.emplace_back(std::move(tool));
+
+ emit CMakeToolManager::m_instance->cmakeAdded(toolId);
+
+ ensureDefaultCMakeToolIsValid();
- addCMakeTool(tool);
- emit m_instance->cmakeAdded(tool->id());
return true;
}
void CMakeToolManager::deregisterCMakeTool(const Id &id)
{
- int idx = Utils::indexOf(d->m_cmakeTools, Utils::equal(&CMakeTool::id, id));
- if (idx >= 0) {
- CMakeTool *toRemove = d->m_cmakeTools.takeAt(idx);
- if (toRemove->id() == d->m_defaultCMake) {
- if (d->m_cmakeTools.isEmpty())
- d->m_defaultCMake = Id();
- else
- d->m_defaultCMake = d->m_cmakeTools.first()->id();
-
- emit m_instance->defaultCMakeChanged();
- }
+ auto toRemove = Utils::take(d->m_cmakeTools, Utils::equal(&CMakeTool::id, id));
+ if (toRemove.has_value()) {
+
+ ensureDefaultCMakeToolIsValid();
emit m_instance->cmakeRemoved(id);
- delete toRemove;
}
}
CMakeTool *CMakeToolManager::defaultCMakeTool()
{
- CMakeTool *tool = findById(d->m_defaultCMake);
- if (!tool) {
- //if the id is not valid, we set the firstly registered one as default
- if (!d->m_cmakeTools.isEmpty()) {
- d->m_defaultCMake = d->m_cmakeTools.first()->id();
- emit m_instance->defaultCMakeChanged();
-
- return d->m_cmakeTools.first();
- }
- }
- return tool;
+ return findById(d->m_defaultCMake);
}
void CMakeToolManager::setDefaultCMakeTool(const Id &id)
{
- if (d->m_defaultCMake == id)
- return;
-
- if (findById(id)) {
+ if (d->m_defaultCMake != id && findById(id)) {
d->m_defaultCMake = id;
emit m_instance->defaultCMakeChanged();
+ return;
}
+
+ ensureDefaultCMakeToolIsValid();
}
CMakeTool *CMakeToolManager::findByCommand(const FileName &command)
@@ -322,105 +161,40 @@ CMakeTool *CMakeToolManager::findById(const Id &id)
void CMakeToolManager::restoreCMakeTools()
{
- Core::Id defaultId;
-
- FileName sdkSettingsFile = FileName::fromString(ICore::installerResourcePath()
- + CMAKETOOL_FILENAME);
-
- QList<CMakeTool *> toolsToRegister = readCMakeTools(sdkSettingsFile, &defaultId, true);
-
- //read the tools from the user settings file
- QList<CMakeTool *> readTools = readCMakeTools(userSettingsFileName(), &defaultId, false);
-
- //autodetect tools
- QList<CMakeTool *> autoDetected = autoDetectCMakeTools();
-
- //filter out the tools that were stored in SDK
- for (int i = readTools.size() - 1; i >= 0; i--) {
- CMakeTool *currTool = readTools.takeAt(i);
- if (Utils::anyOf(toolsToRegister, Utils::equal(&CMakeTool::id, currTool->id()))) {
- delete currTool;
- } else {
- //if the current tool is marked as autodetected and NOT in the autodetected list,
- //it is a leftover SDK provided tool. The user will not be able to edit it,
- //so we automatically drop it
- if (currTool->isAutoDetected()) {
- if (!Utils::anyOf(autoDetected,
- Utils::equal(&CMakeTool::cmakeExecutable, currTool->cmakeExecutable()))) {
-
- qWarning() << QString::fromLatin1("Previously SDK provided CMakeTool \"%1\" (%2) dropped.")
- .arg(currTool->cmakeExecutable().toUserOutput(), currTool->id().toString());
-
- delete currTool;
- continue;
- }
- }
- toolsToRegister.append(currTool);
- }
- }
-
- //filter out the tools that are already known
- while (autoDetected.size()) {
- CMakeTool *currTool = autoDetected.takeFirst();
- if (Utils::anyOf(toolsToRegister,
- Utils::equal(&CMakeTool::cmakeExecutable, currTool->cmakeExecutable())))
- delete currTool;
- else
- toolsToRegister.append(currTool);
- }
-
- // Store all tools
- foreach (CMakeTool *current, toolsToRegister) {
- if (!registerCMakeTool(current)) {
- //this should never happen, but lets make sure we do not leak memory
- qWarning() << QString::fromLatin1("CMakeTool \"%1\" (%2) dropped.")
- .arg(current->cmakeExecutable().toUserOutput(), current->id().toString());
+ Internal::CMakeToolSettingsAccessor::CMakeTools tools
+ = d->m_accessor.restoreCMakeTools(ICore::dialogParent());
+ d->m_cmakeTools = std::move(tools.cmakeTools);
+ setDefaultCMakeTool(tools.defaultToolId);
- delete current;
- }
- }
-
- if (CMakeToolManager::findById(defaultId))
- d->m_defaultCMake = defaultId;
-
- // restore the legacy cmake settings only once and keep them around
- readAndDeleteLegacyCMakeSettings();
emit m_instance->cmakeToolsLoaded();
}
-void CMakeToolManager::registerAutodetectionHelper(CMakeToolManager::AutodetectionHelper helper)
-{
- d->m_autoDetectionHelpers.append(helper);
-}
-
void CMakeToolManager::notifyAboutUpdate(CMakeTool *tool)
{
- if (!tool || !d->m_cmakeTools.contains(tool))
+ if (!tool || !Utils::contains(d->m_cmakeTools, tool))
return;
emit m_instance->cmakeUpdated(tool->id());
}
void CMakeToolManager::saveCMakeTools()
{
- QTC_ASSERT(d->m_writer, return);
- QVariantMap data;
- data.insert(QLatin1String(CMAKETOOL_FILE_VERSION_KEY), 1);
- data.insert(QLatin1String(CMAKETOOL_DEFAULT_KEY), d->m_defaultCMake.toSetting());
-
- int count = 0;
- foreach (CMakeTool *item, d->m_cmakeTools) {
- QFileInfo fi = item->cmakeExecutable().toFileInfo();
-
- if (fi.isExecutable()) {
- QVariantMap tmp = item->toMap();
- if (tmp.isEmpty())
- continue;
- data.insert(QString::fromLatin1(CMAKETOOL_DATA_KEY) + QString::number(count), tmp);
- ++count;
- }
+ d->m_accessor.saveCMakeTools(cmakeTools(), d->m_defaultCMake, ICore::dialogParent());
+}
+
+void CMakeToolManager::ensureDefaultCMakeToolIsValid()
+{
+ const Core::Id oldId = d->m_defaultCMake;
+ if (d->m_cmakeTools.size() == 0) {
+ d->m_defaultCMake = Core::Id();
+ } else {
+ if (findById(d->m_defaultCMake))
+ return;
+ d->m_defaultCMake = d->m_cmakeTools.at(0)->id();
}
- data.insert(QLatin1String(CMAKETOOL_COUNT_KEY), count);
- d->m_writer->save(data, ICore::mainWindow());
+
+ // signaling:
+ if (oldId != d->m_defaultCMake)
+ emit m_instance->defaultCMakeChanged();
}
} // namespace CMakeProjectManager
diff --git a/src/plugins/cmakeprojectmanager/cmaketoolmanager.h b/src/plugins/cmakeprojectmanager/cmaketoolmanager.h
index 81ffab8522..bd7f232553 100644
--- a/src/plugins/cmakeprojectmanager/cmaketoolmanager.h
+++ b/src/plugins/cmakeprojectmanager/cmaketoolmanager.h
@@ -40,8 +40,6 @@ class CMAKE_EXPORT CMakeToolManager : public QObject
{
Q_OBJECT
public:
- typedef std::function<QList<CMakeTool *> ()> AutodetectionHelper;
-
CMakeToolManager(QObject *parent);
~CMakeToolManager() override;
@@ -50,14 +48,13 @@ public:
static QList<CMakeTool *> cmakeTools();
static Core::Id registerOrFindCMakeTool(const Utils::FileName &command);
- static bool registerCMakeTool(CMakeTool *tool);
+ static bool registerCMakeTool(std::unique_ptr<CMakeTool> &&tool);
static void deregisterCMakeTool(const Core::Id &id);
static CMakeTool *defaultCMakeTool();
static void setDefaultCMakeTool(const Core::Id &id);
static CMakeTool *findByCommand(const Utils::FileName &command);
static CMakeTool *findById(const Core::Id &id);
- static void registerAutodetectionHelper(AutodetectionHelper helper);
static void notifyAboutUpdate(CMakeTool *);
static void restoreCMakeTools();
@@ -72,6 +69,7 @@ signals:
private:
static void saveCMakeTools();
+ static void ensureDefaultCMakeToolIsValid();
static CMakeToolManager *m_instance;
};
diff --git a/src/plugins/cmakeprojectmanager/cmaketoolsettingsaccessor.cpp b/src/plugins/cmakeprojectmanager/cmaketoolsettingsaccessor.cpp
new file mode 100644
index 0000000000..2f2d40b91d
--- /dev/null
+++ b/src/plugins/cmakeprojectmanager/cmaketoolsettingsaccessor.cpp
@@ -0,0 +1,257 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+#include "cmaketoolsettingsaccessor.h"
+
+#include "cmaketool.h"
+#include "cmaketoolmanager.h"
+
+#include <coreplugin/icore.h>
+
+#include <app/app_version.h>
+
+#include <utils/algorithm.h>
+#include <utils/environment.h>
+
+#include <QDebug>
+#include <QDir>
+#include <QFileInfo>
+
+using namespace Utils;
+
+namespace CMakeProjectManager {
+namespace Internal {
+
+// --------------------------------------------------------------------
+// CMakeToolSettingsUpgraders:
+// --------------------------------------------------------------------
+
+class CMakeToolSettingsUpgraderV0 : public Utils::VersionUpgrader
+{
+ // Necessary to make Version 1 supported.
+public:
+ CMakeToolSettingsUpgraderV0() : Utils::VersionUpgrader(0, "4.6") { }
+
+ // NOOP
+ QVariantMap upgrade(const QVariantMap &data) final { return data; }
+};
+
+// --------------------------------------------------------------------
+// Helpers:
+// --------------------------------------------------------------------
+
+static const char CMAKE_TOOL_COUNT_KEY[] = "CMakeTools.Count";
+static const char CMAKE_TOOL_DATA_KEY[] = "CMakeTools.";
+static const char CMAKE_TOOL_DEFAULT_KEY[] = "CMakeTools.Default";
+static const char CMAKE_TOOL_FILENAME[] = "/cmaketools.xml";
+
+
+static std::vector<std::unique_ptr<CMakeTool>> autoDetectCMakeTools()
+{
+ Utils::Environment env = Environment::systemEnvironment();
+
+ Utils::FileNameList path = env.path();
+ path = Utils::filteredUnique(path);
+
+ if (HostOsInfo::isWindowsHost()) {
+ const QString progFiles = QLatin1String(qgetenv("ProgramFiles"));
+ path.append(Utils::FileName::fromString(progFiles + "/CMake"));
+ path.append(Utils::FileName::fromString(progFiles + "/CMake/bin"));
+ const QString progFilesX86 = QLatin1String(qgetenv("ProgramFiles(x86)"));
+ if (!progFilesX86.isEmpty()) {
+ path.append(Utils::FileName::fromString(progFilesX86 + "/CMake"));
+ path.append(Utils::FileName::fromString(progFilesX86 + "/CMake/bin"));
+ }
+ }
+
+ if (HostOsInfo::isMacHost()) {
+ path.append(Utils::FileName::fromString("/Applications/CMake.app/Contents/bin"));
+ path.append(Utils::FileName::fromString("/usr/local/bin"));
+ path.append(Utils::FileName::fromString("/opt/local/bin"));
+ }
+
+ const QStringList execs = env.appendExeExtensions(QLatin1String("cmake"));
+
+ FileNameList suspects;
+ foreach (const Utils::FileName &base, path) {
+ if (base.isEmpty())
+ continue;
+
+ QFileInfo fi;
+ for (const QString &exec : execs) {
+ fi.setFile(QDir(base.toString()), exec);
+ if (fi.exists() && fi.isFile() && fi.isExecutable())
+ suspects << FileName::fromString(fi.absoluteFilePath());
+ }
+ }
+
+ std::vector<std::unique_ptr<CMakeTool>> found;
+ foreach (const FileName &command, suspects) {
+ auto item = std::make_unique<CMakeTool>(CMakeTool::AutoDetection, CMakeTool::createId());
+ item->setCMakeExecutable(command);
+ item->setDisplayName(CMakeToolManager::tr("System CMake at %1").arg(command.toUserOutput()));
+
+ found.emplace_back(std::move(item));
+ }
+
+ return found;
+}
+
+
+static std::vector<std::unique_ptr<CMakeTool>>
+mergeTools(std::vector<std::unique_ptr<CMakeTool>> &sdkTools,
+ std::vector<std::unique_ptr<CMakeTool>> &userTools,
+ std::vector<std::unique_ptr<CMakeTool>> &autoDetectedTools)
+{
+ std::vector<std::unique_ptr<CMakeTool>> result = std::move(sdkTools);
+ while (userTools.size() > 0) {
+ std::unique_ptr<CMakeTool> userTool = std::move(userTools[0]);
+ userTools.erase(std::begin(userTools));
+
+ if (!Utils::contains(result, Utils::equal(&CMakeTool::id, userTool->id()))) {
+ if (userTool->isAutoDetected()
+ && !Utils::contains(autoDetectedTools, Utils::equal(&CMakeTool::cmakeExecutable,
+ userTool->cmakeExecutable()))) {
+
+ qWarning() << QString::fromLatin1("Previously SDK provided CMakeTool \"%1\" (%2) dropped.")
+ .arg(userTool->cmakeExecutable().toUserOutput(), userTool->id().toString());
+ continue;
+ }
+ result.emplace_back(std::move(userTool));
+ }
+ }
+
+ // add all the autodetected tools that are not known yet
+ while (autoDetectedTools.size() > 0) {
+ std::unique_ptr<CMakeTool> autoDetectedTool = std::move(autoDetectedTools[0]);
+ autoDetectedTools.erase(std::begin(autoDetectedTools));
+
+ if (!Utils::contains(result,
+ Utils::equal(&CMakeTool::cmakeExecutable, autoDetectedTool->cmakeExecutable())))
+ result.emplace_back(std::move(autoDetectedTool));
+ }
+
+ return result;
+}
+
+
+// --------------------------------------------------------------------
+// CMakeToolSettingsAccessor:
+// --------------------------------------------------------------------
+
+CMakeToolSettingsAccessor::CMakeToolSettingsAccessor() :
+ UpgradingSettingsAccessor("QtCreatorCMakeTools",
+ QCoreApplication::translate("CMakeProjectManager::CMakeToolManager", "CMake"),
+ Core::Constants::IDE_DISPLAY_NAME)
+{
+ setBaseFilePath(FileName::fromString(Core::ICore::userResourcePath() + CMAKE_TOOL_FILENAME));
+
+ addVersionUpgrader(std::make_unique<CMakeToolSettingsUpgraderV0>());
+}
+
+CMakeToolSettingsAccessor::CMakeTools CMakeToolSettingsAccessor::restoreCMakeTools(QWidget *parent) const
+{
+ CMakeTools result;
+
+ const FileName sdkSettingsFile = FileName::fromString(Core::ICore::installerResourcePath()
+ + CMAKE_TOOL_FILENAME);
+
+ CMakeTools sdkTools = cmakeTools(restoreSettings(sdkSettingsFile, parent), true);
+
+ //read the tools from the user settings file
+ CMakeTools userTools = cmakeTools(restoreSettings(parent), false);
+
+ //autodetect tools
+ std::vector<std::unique_ptr<CMakeTool>> autoDetectedTools = autoDetectCMakeTools();
+
+ //filter out the tools that were stored in SDK
+ std::vector<std::unique_ptr<CMakeTool>> toRegister = mergeTools(sdkTools.cmakeTools,
+ userTools.cmakeTools,
+ autoDetectedTools);
+
+ // Store all tools
+ for (auto it = std::begin(toRegister); it != std::end(toRegister); ++it)
+ result.cmakeTools.emplace_back(std::move(*it));
+
+ result.defaultToolId = userTools.defaultToolId.isValid() ? userTools.defaultToolId : sdkTools.defaultToolId;
+
+ // Set default TC...
+ return result;
+}
+
+void CMakeToolSettingsAccessor::saveCMakeTools(const QList<CMakeTool *> &cmakeTools,
+ const Core::Id &defaultId,
+ QWidget *parent)
+{
+ QVariantMap data;
+ data.insert(QLatin1String(CMAKE_TOOL_DEFAULT_KEY), defaultId.toSetting());
+
+ int count = 0;
+ for (const CMakeTool *item : cmakeTools) {
+ QFileInfo fi = item->cmakeExecutable().toFileInfo();
+
+ if (fi.isExecutable()) {
+ QVariantMap tmp = item->toMap();
+ if (tmp.isEmpty())
+ continue;
+ data.insert(QString::fromLatin1(CMAKE_TOOL_DATA_KEY) + QString::number(count), tmp);
+ ++count;
+ }
+ }
+ data.insert(QLatin1String(CMAKE_TOOL_COUNT_KEY), count);
+
+ saveSettings(data, parent);
+}
+
+CMakeToolSettingsAccessor::CMakeTools
+CMakeToolSettingsAccessor::cmakeTools(const QVariantMap &data, bool fromSdk) const
+{
+ CMakeTools result;
+
+ int count = data.value(QLatin1String(CMAKE_TOOL_COUNT_KEY), 0).toInt();
+ for (int i = 0; i < count; ++i) {
+ const QString key = QString::fromLatin1(CMAKE_TOOL_DATA_KEY) + QString::number(i);
+ if (!data.contains(key))
+ continue;
+
+ const QVariantMap dbMap = data.value(key).toMap();
+ auto item = std::make_unique<CMakeTool>(dbMap, fromSdk);
+ if (item->isAutoDetected() && !item->cmakeExecutable().toFileInfo().isExecutable()) {
+ qWarning() << QString::fromLatin1("CMakeTool \"%1\" (%2) dropped since the command is not executable.")
+ .arg(item->cmakeExecutable().toUserOutput(), item->id().toString());
+ continue;
+ }
+
+ result.cmakeTools.emplace_back(std::move(item));
+ }
+
+ result.defaultToolId = Core::Id::fromSetting(data.value(CMAKE_TOOL_DEFAULT_KEY,
+ Core::Id().toSetting()));
+
+ return result;
+}
+
+} // namespace Internal
+} // namespace CMakeProjectManager
diff --git a/src/plugins/cmakeprojectmanager/cmaketoolsettingsaccessor.h b/src/plugins/cmakeprojectmanager/cmaketoolsettingsaccessor.h
new file mode 100644
index 0000000000..05c7ac6920
--- /dev/null
+++ b/src/plugins/cmakeprojectmanager/cmaketoolsettingsaccessor.h
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+#pragma once
+
+#include <utils/settingsaccessor.h>
+
+#include <coreplugin/id.h>
+
+#include <QList>
+
+#include <memory>
+
+namespace Core { class Id; }
+
+namespace CMakeProjectManager {
+
+class CMakeTool;
+
+namespace Internal {
+
+class CMakeToolSettingsAccessor : public Utils::UpgradingSettingsAccessor
+{
+public:
+ CMakeToolSettingsAccessor();
+
+ struct CMakeTools {
+ Core::Id defaultToolId;
+ std::vector<std::unique_ptr<CMakeTool>> cmakeTools;
+ };
+
+ CMakeTools restoreCMakeTools(QWidget *parent) const;
+
+ void saveCMakeTools(const QList<CMakeTool *> &cmakeTools,
+ const Core::Id &defaultId,
+ QWidget *parent);
+
+private:
+ CMakeTools cmakeTools(const QVariantMap &data, bool fromSdk) const;
+};
+
+} // namespace Internal
+} // namespace CMakeProjectManager
diff --git a/src/plugins/cmakeprojectmanager/servermode.cpp b/src/plugins/cmakeprojectmanager/servermode.cpp
index 473b58ed65..2fe3d894e2 100644
--- a/src/plugins/cmakeprojectmanager/servermode.cpp
+++ b/src/plugins/cmakeprojectmanager/servermode.cpp
@@ -103,7 +103,7 @@ ServerMode::ServerMode(const Environment &env,
m_connectionTimer.setInterval(100);
connect(&m_connectionTimer, &QTimer::timeout, this, &ServerMode::connectToServer);
- m_cmakeProcess.reset(new QtcProcess);
+ m_cmakeProcess = std::make_unique<QtcProcess>();
m_cmakeProcess->setEnvironment(env);
m_cmakeProcess->setWorkingDirectory(buildDirectory.toString());
diff --git a/src/plugins/cmakeprojectmanager/servermodereader.cpp b/src/plugins/cmakeprojectmanager/servermodereader.cpp
index b0fd84118b..3451e704da 100644
--- a/src/plugins/cmakeprojectmanager/servermodereader.cpp
+++ b/src/plugins/cmakeprojectmanager/servermodereader.cpp
@@ -98,13 +98,14 @@ ServerModeReader::~ServerModeReader()
void ServerModeReader::setParameters(const BuildDirParameters &p)
{
- QTC_ASSERT(p.cmakeTool, return);
+ CMakeTool *cmake = p.cmakeTool();
+ QTC_ASSERT(cmake, return);
BuildDirReader::setParameters(p);
if (!m_cmakeServer) {
m_cmakeServer.reset(new ServerMode(p.environment,
p.sourceDirectory, p.workDirectory,
- p.cmakeTool->cmakeExecutable(),
+ cmake->cmakeExecutable(),
p.generator, p.extraGenerator, p.platform, p.toolset,
true, 1));
connect(m_cmakeServer.get(), &ServerMode::errorOccured,
@@ -139,15 +140,17 @@ void ServerModeReader::setParameters(const BuildDirParameters &p)
bool ServerModeReader::isCompatible(const BuildDirParameters &p)
{
- if (!p.cmakeTool)
+ CMakeTool *newCmake = p.cmakeTool();
+ CMakeTool *oldCmake = m_parameters.cmakeTool();
+ if (!newCmake || !oldCmake)
return false;
// Server mode connection got lost, reset...
- if (!m_parameters.cmakeTool->cmakeExecutable().isEmpty() && !m_cmakeServer)
+ if (!oldCmake && oldCmake->cmakeExecutable().isEmpty() && !m_cmakeServer)
return false;
- return p.cmakeTool->hasServerMode()
- && p.cmakeTool->cmakeExecutable() == m_parameters.cmakeTool->cmakeExecutable()
+ return newCmake->hasServerMode()
+ && newCmake->cmakeExecutable() == oldCmake->cmakeExecutable()
&& p.environment == m_parameters.environment
&& p.generator == m_parameters.generator
&& p.extraGenerator == m_parameters.extraGenerator
diff --git a/src/plugins/cmakeprojectmanager/tealeafreader.cpp b/src/plugins/cmakeprojectmanager/tealeafreader.cpp
index 2cca6c3569..6577decf18 100644
--- a/src/plugins/cmakeprojectmanager/tealeafreader.cpp
+++ b/src/plugins/cmakeprojectmanager/tealeafreader.cpp
@@ -131,8 +131,8 @@ TeaLeafReader::TeaLeafReader()
connect(EditorManager::instance(), &EditorManager::aboutToSave,
this, [this](const IDocument *document) {
if (m_cmakeFiles.contains(document->filePath())
- || !m_parameters.cmakeTool
- || !m_parameters.cmakeTool->isAutoRun())
+ || !m_parameters.cmakeTool()
+ || !m_parameters.cmakeTool()->isAutoRun())
emit dirty();
});
@@ -154,9 +154,9 @@ TeaLeafReader::~TeaLeafReader()
bool TeaLeafReader::isCompatible(const BuildDirParameters &p)
{
- if (!p.cmakeTool)
+ if (!p.cmakeTool())
return false;
- return !p.cmakeTool->hasServerMode();
+ return !p.cmakeTool()->hasServerMode();
}
void TeaLeafReader::resetData()
@@ -409,7 +409,8 @@ void TeaLeafReader::cleanUpProcess()
void TeaLeafReader::extractData()
{
- QTC_ASSERT(m_parameters.isValid() && m_parameters.cmakeTool, return);
+ CMakeTool *cmake = m_parameters.cmakeTool();
+ QTC_ASSERT(m_parameters.isValid() && cmake, return);
const FileName srcDir = m_parameters.sourceDirectory;
const FileName bldDir = m_parameters.workDirectory;
@@ -436,7 +437,7 @@ void TeaLeafReader::extractData()
// setFolderName
CMakeCbpParser cbpparser;
// Parsing
- if (!cbpparser.parseCbpFile(m_parameters.cmakeTool->pathMapper(), cbpFile, srcDir))
+ if (!cbpparser.parseCbpFile(cmake->pathMapper(), cbpFile, srcDir))
return;
m_projectName = cbpparser.projectName();
@@ -461,7 +462,8 @@ void TeaLeafReader::extractData()
void TeaLeafReader::startCMake(const QStringList &configurationArguments)
{
- QTC_ASSERT(m_parameters.isValid() && m_parameters.cmakeTool, return);
+ CMakeTool *cmake = m_parameters.cmakeTool();
+ QTC_ASSERT(m_parameters.isValid() && cmake, return);
const FileName workDirectory = m_parameters.workDirectory;
QTC_ASSERT(!m_cmakeProcess, return);
@@ -506,7 +508,7 @@ void TeaLeafReader::startCMake(const QStringList &configurationArguments)
TaskHub::clearTasks(ProjectExplorer::Constants::TASK_CATEGORY_BUILDSYSTEM);
MessageManager::write(tr("Running \"%1 %2\" in %3.")
- .arg(m_parameters.cmakeTool->cmakeExecutable().toUserOutput())
+ .arg(cmake->cmakeExecutable().toUserOutput())
.arg(args)
.arg(workDirectory.toUserOutput()));
@@ -516,7 +518,7 @@ void TeaLeafReader::startCMake(const QStringList &configurationArguments)
tr("Configuring \"%1\"").arg(m_parameters.projectName),
"CMake.Configure");
- m_cmakeProcess->setCommand(m_parameters.cmakeTool->cmakeExecutable().toString(), args);
+ m_cmakeProcess->setCommand(cmake->cmakeExecutable().toString(), args);
emit configurationStarted();
m_cmakeProcess->start();
}
diff --git a/src/plugins/coreplugin/actionmanager/actioncontainer.cpp b/src/plugins/coreplugin/actionmanager/actioncontainer.cpp
index e1374ac73a..b602dc54cd 100644
--- a/src/plugins/coreplugin/actionmanager/actioncontainer.cpp
+++ b/src/plugins/coreplugin/actionmanager/actioncontainer.cpp
@@ -202,29 +202,29 @@ QList<Group>::const_iterator ActionContainerPrivate::findGroup(Id groupId) const
QAction *ActionContainerPrivate::insertLocation(Id groupId) const
{
QList<Group>::const_iterator it = findGroup(groupId);
- QTC_ASSERT(it != m_groups.constEnd(), return 0);
+ QTC_ASSERT(it != m_groups.constEnd(), return nullptr);
return insertLocation(it);
}
QAction *ActionContainerPrivate::insertLocation(QList<Group>::const_iterator group) const
{
if (group == m_groups.constEnd())
- return 0;
+ return nullptr;
++group;
while (group != m_groups.constEnd()) {
if (!group->items.isEmpty()) {
QObject *item = group->items.first();
- if (Command *cmd = qobject_cast<Command *>(item)) {
+ if (auto cmd = qobject_cast<Command *>(item)) {
return cmd->action();
- } else if (ActionContainer *container = qobject_cast<ActionContainer *>(item)) {
+ } else if (auto container = qobject_cast<ActionContainer *>(item)) {
if (container->menu())
return container->menu()->menuAction();
}
- QTC_ASSERT(false, return 0);
+ QTC_ASSERT(false, return nullptr);
}
++group;
}
- return 0;
+ return nullptr;
}
void ActionContainerPrivate::addAction(Command *command, Id groupId)
@@ -247,11 +247,11 @@ void ActionContainerPrivate::addAction(Command *command, Id groupId)
void ActionContainerPrivate::addMenu(ActionContainer *menu, Id groupId)
{
- ActionContainerPrivate *containerPrivate = static_cast<ActionContainerPrivate *>(menu);
+ auto containerPrivate = static_cast<ActionContainerPrivate *>(menu);
if (!containerPrivate->canBeAddedToMenu())
return;
- MenuActionContainer *container = static_cast<MenuActionContainer *>(containerPrivate);
+ auto container = static_cast<MenuActionContainer *>(containerPrivate);
const Id actualGroupId = groupId.isValid() ? groupId : Id(Constants::G_DEFAULT_TWO);
QList<Group>::const_iterator groupIt = findGroup(actualGroupId);
QTC_ASSERT(groupIt != m_groups.constEnd(), return);
@@ -265,11 +265,11 @@ void ActionContainerPrivate::addMenu(ActionContainer *menu, Id groupId)
void ActionContainerPrivate::addMenu(ActionContainer *before, ActionContainer *menu, Id groupId)
{
- ActionContainerPrivate *containerPrivate = static_cast<ActionContainerPrivate *>(menu);
+ auto containerPrivate = static_cast<ActionContainerPrivate *>(menu);
if (!containerPrivate->canBeAddedToMenu())
return;
- MenuActionContainer *container = static_cast<MenuActionContainer *>(containerPrivate);
+ auto container = static_cast<MenuActionContainer *>(containerPrivate);
const Id actualGroupId = groupId.isValid() ? groupId : Id(Constants::G_DEFAULT_TWO);
QList<Group>::const_iterator groupIt = findGroup(actualGroupId);
QTC_ASSERT(groupIt != m_groups.constEnd(), return);
@@ -293,7 +293,7 @@ void ActionContainerPrivate::addMenu(ActionContainer *before, ActionContainer *m
Command *ActionContainerPrivate::addSeparator(const Context &context, Id group, QAction **outSeparator)
{
static int separatorIdCount = 0;
- QAction *separator = new QAction(this);
+ auto separator = new QAction(this);
separator->setSeparator(true);
Id sepId = id().withSuffix(".Separator.").withSuffix(++separatorIdCount);
Command *cmd = ActionManager::registerAction(separator, sepId, context);
@@ -309,12 +309,12 @@ void ActionContainerPrivate::clear()
while (it.hasNext()) {
Group &group = it.next();
foreach (QObject *item, group.items) {
- if (Command *command = qobject_cast<Command *>(item)) {
+ if (auto command = qobject_cast<Command *>(item)) {
removeAction(command->action());
disconnect(command, &Command::activeStateChanged,
this, &ActionContainerPrivate::scheduleUpdate);
disconnect(command, &QObject::destroyed, this, &ActionContainerPrivate::itemDestroyed);
- } else if (ActionContainer *container = qobject_cast<ActionContainer *>(item)) {
+ } else if (auto container = qobject_cast<ActionContainer *>(item)) {
container->clear();
disconnect(container, &QObject::destroyed,
this, &ActionContainerPrivate::itemDestroyed);
@@ -344,12 +344,12 @@ Id ActionContainerPrivate::id() const
QMenu *ActionContainerPrivate::menu() const
{
- return 0;
+ return nullptr;
}
QMenuBar *ActionContainerPrivate::menuBar() const
{
- return 0;
+ return nullptr;
}
bool ActionContainerPrivate::canAddAction(Command *action) const
@@ -429,7 +429,7 @@ bool MenuActionContainer::updateInternal()
while (it.hasNext()) {
const Group &group = it.next();
foreach (QObject *item, group.items) {
- if (ActionContainerPrivate *container = qobject_cast<ActionContainerPrivate*>(item)) {
+ if (auto container = qobject_cast<ActionContainerPrivate*>(item)) {
actions.removeAll(container->menu()->menuAction());
if (container == this) {
QByteArray warning = Q_FUNC_INFO + QByteArray(" container '");
@@ -443,7 +443,7 @@ bool MenuActionContainer::updateInternal()
hasitems = true;
break;
}
- } else if (Command *command = qobject_cast<Command *>(item)) {
+ } else if (auto command = qobject_cast<Command *>(item)) {
actions.removeAll(command->action());
if (command->isActive()) {
hasitems = true;
@@ -488,7 +488,7 @@ bool MenuActionContainer::canBeAddedToMenu() const
*/
MenuBarActionContainer::MenuBarActionContainer(Id id)
- : ActionContainerPrivate(id), m_menuBar(0)
+ : ActionContainerPrivate(id), m_menuBar(nullptr)
{
setOnAllDisabledBehavior(Show);
}
diff --git a/src/plugins/coreplugin/actionmanager/actioncontainer_p.h b/src/plugins/coreplugin/actionmanager/actioncontainer_p.h
index 27fed6a705..ffa24eecdd 100644
--- a/src/plugins/coreplugin/actionmanager/actioncontainer_p.h
+++ b/src/plugins/coreplugin/actionmanager/actioncontainer_p.h
@@ -46,7 +46,7 @@ class ActionContainerPrivate : public ActionContainer
public:
ActionContainerPrivate(Id id);
- ~ActionContainerPrivate() override {}
+ ~ActionContainerPrivate() override = default;
void setOnAllDisabledBehavior(OnAllDisabledBehavior behavior) override;
ActionContainer::OnAllDisabledBehavior onAllDisabledBehavior() const override;
diff --git a/src/plugins/coreplugin/actionmanager/actionmanager.cpp b/src/plugins/coreplugin/actionmanager/actionmanager.cpp
index 748a295afd..9b2bec82dc 100644
--- a/src/plugins/coreplugin/actionmanager/actionmanager.cpp
+++ b/src/plugins/coreplugin/actionmanager/actionmanager.cpp
@@ -152,7 +152,7 @@ using namespace Core::Internal;
Emitted when a command (with the \a id) is added.
*/
-static ActionManager *m_instance = 0;
+static ActionManager *m_instance = nullptr;
static ActionManagerPrivate *d;
/*!
@@ -198,7 +198,7 @@ ActionContainer *ActionManager::createMenu(Id id)
if (it != d->m_idContainerMap.constEnd())
return it.value();
- MenuActionContainer *mc = new MenuActionContainer(id);
+ auto mc = new MenuActionContainer(id);
d->m_idContainerMap.insert(id, mc);
connect(mc, &QObject::destroyed, d, &ActionManagerPrivate::containerDestroyed);
@@ -219,10 +219,10 @@ ActionContainer *ActionManager::createMenuBar(Id id)
if (it != d->m_idContainerMap.constEnd())
return it.value();
- QMenuBar *mb = new QMenuBar; // No parent (System menu bar on Mac OS X)
+ auto mb = new QMenuBar; // No parent (System menu bar on macOS)
mb->setObjectName(id.toString());
- MenuBarActionContainer *mbc = new MenuBarActionContainer(id);
+ auto mbc = new MenuBarActionContainer(id);
mbc->setMenuBar(mb);
d->m_idContainerMap.insert(id, mbc);
@@ -268,7 +268,7 @@ Command *ActionManager::command(Id id)
if (warnAboutFindFailures)
qWarning() << "ActionManagerPrivate::command(): failed to find :"
<< id.name();
- return 0;
+ return nullptr;
}
return it.value();
}
@@ -287,7 +287,7 @@ ActionContainer *ActionManager::actionContainer(Id id)
if (warnAboutFindFailures)
qWarning() << "ActionManagerPrivate::actionContainer(): failed to find :"
<< id.name();
- return 0;
+ return nullptr;
}
return it.value();
}
@@ -415,13 +415,13 @@ bool ActionManagerPrivate::hasContext(const Context &context) const
void ActionManagerPrivate::containerDestroyed()
{
- ActionContainerPrivate *container = static_cast<ActionContainerPrivate *>(sender());
+ auto container = static_cast<ActionContainerPrivate *>(sender());
m_idContainerMap.remove(m_idContainerMap.key(container));
}
void ActionManagerPrivate::actionTriggered()
{
- QAction *action = qobject_cast<QAction *>(QObject::sender());
+ auto action = qobject_cast<QAction *>(QObject::sender());
if (action)
showShortcutPopup(action->shortcut().toString());
}
diff --git a/src/plugins/coreplugin/actionmanager/actionmanager_p.h b/src/plugins/coreplugin/actionmanager/actionmanager_p.h
index 0573bbe675..216f936273 100644
--- a/src/plugins/coreplugin/actionmanager/actionmanager_p.h
+++ b/src/plugins/coreplugin/actionmanager/actionmanager_p.h
@@ -46,8 +46,8 @@ class ActionManagerPrivate : public QObject
Q_OBJECT
public:
- typedef QHash<Id, Action *> IdCmdMap;
- typedef QHash<Id, ActionContainerPrivate *> IdContainerMap;
+ using IdCmdMap = QHash<Id, Action *>;
+ using IdContainerMap = QHash<Id, ActionContainerPrivate *>;
~ActionManagerPrivate() override;
diff --git a/src/plugins/coreplugin/actionmanager/command.cpp b/src/plugins/coreplugin/actionmanager/command.cpp
index 45d72ecead..4d9715f8b8 100644
--- a/src/plugins/coreplugin/actionmanager/command.cpp
+++ b/src/plugins/coreplugin/actionmanager/command.cpp
@@ -200,12 +200,9 @@ namespace Internal {
\internal
*/
Action::Action(Id id)
- : m_attributes(0),
+ : m_attributes({}),
m_id(id),
- m_isKeyInitialized(false),
- m_action(new Utils::ProxyAction(this)),
- m_active(false),
- m_contextInitialized(false)
+ m_action(new Utils::ProxyAction(this))
{
m_action->setShortcutVisibleInToolTip(true);
connect(m_action, &QAction::changed, this, &Action::updateActiveState);
@@ -276,9 +273,9 @@ void Action::setCurrentContext(const Context &context)
{
m_context = context;
- QAction *currentAction = 0;
+ QAction *currentAction = nullptr;
for (int i = 0; i < m_context.size(); ++i) {
- if (QAction *a = m_contextActionMap.value(m_context.at(i), 0)) {
+ if (QAction *a = m_contextActionMap.value(m_context.at(i), nullptr)) {
currentAction = a;
break;
}
@@ -319,7 +316,7 @@ void Action::addOverrideAction(QAction *action, const Context &context, bool scr
for (int i = 0; i < context.size(); ++i) {
Id id = context.at(i);
if (m_contextActionMap.contains(id))
- qWarning("%s", qPrintable(msgActionWarning(action, id, m_contextActionMap.value(id, 0))));
+ qWarning("%s", qPrintable(msgActionWarning(action, id, m_contextActionMap.value(id, nullptr))));
m_contextActionMap.insert(id, action);
}
}
@@ -332,7 +329,7 @@ void Action::removeOverrideAction(QAction *action)
QMutableMapIterator<Id, QPointer<QAction> > it(m_contextActionMap);
while (it.hasNext()) {
it.next();
- if (it.value() == 0)
+ if (it.value() == nullptr)
it.remove();
else if (it.value() == action)
it.remove();
@@ -369,7 +366,7 @@ bool Action::isScriptable(const Context &context) const
return m_scriptableMap.value(m_action->action());
for (int i = 0; i < context.size(); ++i) {
- if (QAction *a = m_contextActionMap.value(context.at(i), 0)) {
+ if (QAction *a = m_contextActionMap.value(context.at(i), nullptr)) {
if (m_scriptableMap.contains(a) && m_scriptableMap.value(a))
return true;
}
@@ -433,7 +430,7 @@ void Command::augmentActionWithShortcutToolTip(QAction *a) const
QToolButton *Command::toolButtonWithAppendedShortcut(QAction *action, Command *cmd)
{
- QToolButton *button = new QToolButton;
+ auto button = new QToolButton;
button->setDefaultAction(action);
if (cmd)
cmd->augmentActionWithShortcutToolTip(action);
diff --git a/src/plugins/coreplugin/actionmanager/command_p.h b/src/plugins/coreplugin/actionmanager/command_p.h
index 046f6041cf..6b8734ad14 100644
--- a/src/plugins/coreplugin/actionmanager/command_p.h
+++ b/src/plugins/coreplugin/actionmanager/command_p.h
@@ -86,15 +86,15 @@ private:
Id m_id;
QKeySequence m_defaultKey;
QString m_defaultText;
- bool m_isKeyInitialized;
+ bool m_isKeyInitialized = false;
- Utils::ProxyAction *m_action;
+ Utils::ProxyAction *m_action = nullptr;
QString m_toolTip;
QMap<Id, QPointer<QAction> > m_contextActionMap;
QMap<QAction*, bool> m_scriptableMap;
- bool m_active;
- bool m_contextInitialized;
+ bool m_active = false;
+ bool m_contextInitialized = false;
};
} // namespace Internal
diff --git a/src/plugins/coreplugin/actionmanager/commandbutton.cpp b/src/plugins/coreplugin/actionmanager/commandbutton.cpp
index 29ac42ad73..3f4f5b7a13 100644
--- a/src/plugins/coreplugin/actionmanager/commandbutton.cpp
+++ b/src/plugins/coreplugin/actionmanager/commandbutton.cpp
@@ -44,13 +44,13 @@ using namespace Core;
CommandButton::CommandButton(QWidget *parent)
: QToolButton(parent)
- , m_command(0)
+ , m_command(nullptr)
{
}
CommandButton::CommandButton(Id id, QWidget *parent)
: QToolButton(parent)
- , m_command(0)
+ , m_command(nullptr)
{
setCommandId(id);
}
diff --git a/src/plugins/coreplugin/actionmanager/commandmappings.cpp b/src/plugins/coreplugin/actionmanager/commandmappings.cpp
index f17c195024..7febf11b29 100644
--- a/src/plugins/coreplugin/actionmanager/commandmappings.cpp
+++ b/src/plugins/coreplugin/actionmanager/commandmappings.cpp
@@ -77,21 +77,21 @@ public:
importButton = new QPushButton(CommandMappings::tr("Import..."), groupBox);
exportButton = new QPushButton(CommandMappings::tr("Export..."), groupBox);
- QHBoxLayout *hboxLayout1 = new QHBoxLayout();
+ auto hboxLayout1 = new QHBoxLayout();
hboxLayout1->addWidget(defaultButton);
hboxLayout1->addStretch();
hboxLayout1->addWidget(importButton);
hboxLayout1->addWidget(exportButton);
- QHBoxLayout *hboxLayout = new QHBoxLayout();
+ auto hboxLayout = new QHBoxLayout();
hboxLayout->addWidget(filterEdit);
- QVBoxLayout *vboxLayout1 = new QVBoxLayout(groupBox);
+ auto vboxLayout1 = new QVBoxLayout(groupBox);
vboxLayout1->addLayout(hboxLayout);
vboxLayout1->addWidget(commandList);
vboxLayout1->addLayout(hboxLayout1);
- QVBoxLayout *vboxLayout = new QVBoxLayout(parent);
+ auto vboxLayout = new QVBoxLayout(parent);
vboxLayout->addWidget(groupBox);
q->connect(exportButton, &QPushButton::clicked,
diff --git a/src/plugins/coreplugin/basefilewizard.cpp b/src/plugins/coreplugin/basefilewizard.cpp
index b252d0de2b..b388b7f7d8 100644
--- a/src/plugins/coreplugin/basefilewizard.cpp
+++ b/src/plugins/coreplugin/basefilewizard.cpp
@@ -89,7 +89,7 @@ void BaseFileWizard::accept()
reject();
return;
case BaseFileWizardFactory::OverwriteError:
- QMessageBox::critical(0, tr("Existing files"), errorMessage);
+ QMessageBox::critical(nullptr, tr("Existing files"), errorMessage);
reject();
return;
case BaseFileWizardFactory::OverwriteOk:
@@ -132,7 +132,7 @@ void BaseFileWizard::accept()
// Post generation handler
if (!m_factory->postGenerateFiles(this, m_files, &errorMessage))
if (!errorMessage.isEmpty())
- QMessageBox::critical(0, tr("File Generation Failure"), errorMessage);
+ QMessageBox::critical(nullptr, tr("File Generation Failure"), errorMessage);
Wizard::accept();
}
diff --git a/src/plugins/coreplugin/basefilewizardfactory.cpp b/src/plugins/coreplugin/basefilewizardfactory.cpp
index 3e90da89d4..633980bf39 100644
--- a/src/plugins/coreplugin/basefilewizardfactory.cpp
+++ b/src/plugins/coreplugin/basefilewizardfactory.cpp
@@ -78,7 +78,7 @@ Utils::Wizard *BaseFileWizardFactory::runWizardImpl(const QString &path, QWidget
Id platform,
const QVariantMap &extraValues)
{
- QTC_ASSERT(!path.isEmpty(), return 0);
+ QTC_ASSERT(!path.isEmpty(), return nullptr);
// Create dialog and run it. Ensure that the dialog is deleted when
// leaving the func, but not before the IFileWizardExtension::process
diff --git a/src/plugins/coreplugin/basefilewizardfactory.h b/src/plugins/coreplugin/basefilewizardfactory.h
index 586e350cdc..d37592d5fd 100644
--- a/src/plugins/coreplugin/basefilewizardfactory.h
+++ b/src/plugins/coreplugin/basefilewizardfactory.h
@@ -47,7 +47,7 @@ class BaseFileWizard;
class CORE_EXPORT WizardDialogParameters
{
public:
- typedef QList<QWizardPage *> WizardPageList;
+ using WizardPageList = QList<QWizardPage *>;
enum DialogParameterEnum {
ForceCapitalLetterForFileName = 0x01
diff --git a/src/plugins/coreplugin/coreplugin.cpp b/src/plugins/coreplugin/coreplugin.cpp
index 53a3cba228..67d2e33495 100644
--- a/src/plugins/coreplugin/coreplugin.cpp
+++ b/src/plugins/coreplugin/coreplugin.cpp
@@ -58,8 +58,10 @@
#include <utils/theme/theme_p.h>
#include <QtPlugin>
-#include <QDebug>
+
#include <QDateTime>
+#include <QDebug>
+#include <QDir>
#include <QMenu>
#include <QUuid>
@@ -68,9 +70,6 @@ using namespace Core::Internal;
using namespace Utils;
CorePlugin::CorePlugin()
- : m_mainWindow(0)
- , m_editMode(0)
- , m_locator(0)
{
qRegisterMetaType<Id>();
qRegisterMetaType<Core::Search::TextPosition>();
@@ -87,7 +86,7 @@ CorePlugin::~CorePlugin()
DesignMode::destroyModeIfRequired();
delete m_mainWindow;
- setCreatorTheme(0);
+ setCreatorTheme(nullptr);
}
struct CoreArguments {
@@ -187,6 +186,12 @@ bool CorePlugin::initialize(const QStringList &arguments, QString *errorMessage)
tr("Is %1 running on any unix-based platform?")
.arg(Constants::IDE_DISPLAY_NAME),
[]() { return QVariant(Utils::HostOsInfo::isAnyUnixHost()).toString(); });
+ expander->registerVariable("HostOs:PathListSeparator",
+ tr("Return the path list separator for the platform."),
+ []() { return QString(Utils::HostOsInfo::pathListSeparator()); });
+ expander->registerVariable("HostOs:ExecutableSuffix",
+ tr("Return the platform executable suffix."),
+ []() { return QString(Utils::HostOsInfo::withExecutableSuffix("")); });
expander->registerVariable("IDE:ResourcePath",
tr("The directory where %1 finds its pre-installed resources.")
.arg(Constants::IDE_DISPLAY_NAME),
@@ -239,7 +244,7 @@ QObject *CorePlugin::remoteCommand(const QStringList & /* options */,
return nullptr;
}
IDocument *res = m_mainWindow->openFiles(
- args, ICore::OpenFilesFlags(ICore::SwitchMode | ICore::CanContainLineAndColumnNumbers),
+ args, ICore::OpenFilesFlags(ICore::SwitchMode | ICore::CanContainLineAndColumnNumbers | ICore::SwitchSplitIfAlreadyVisible),
workingDirectory);
m_mainWindow->raiseWindow();
return res;
@@ -255,17 +260,27 @@ void CorePlugin::addToPathChooserContextMenu(Utils::PathChooser *pathChooser, QM
QList<QAction*> actions = menu->actions();
QAction *firstAction = actions.isEmpty() ? nullptr : actions.first();
- auto *showInGraphicalShell = new QAction(Core::FileUtils::msgGraphicalShellAction(), menu);
- connect(showInGraphicalShell, &QAction::triggered, pathChooser, [pathChooser]() {
- Core::FileUtils::showInGraphicalShell(pathChooser, pathChooser->path());
- });
- menu->insertAction(firstAction, showInGraphicalShell);
-
- auto *showInTerminal = new QAction(Core::FileUtils::msgTerminalAction(), menu);
- connect(showInTerminal, &QAction::triggered, pathChooser, [pathChooser]() {
- Core::FileUtils::openTerminal(pathChooser->path());
- });
- menu->insertAction(firstAction, showInTerminal);
+ if (QDir().exists(pathChooser->path())) {
+ auto *showInGraphicalShell = new QAction(Core::FileUtils::msgGraphicalShellAction(), menu);
+ connect(showInGraphicalShell, &QAction::triggered, pathChooser, [pathChooser]() {
+ Core::FileUtils::showInGraphicalShell(pathChooser, pathChooser->path());
+ });
+ menu->insertAction(firstAction, showInGraphicalShell);
+
+ auto *showInTerminal = new QAction(Core::FileUtils::msgTerminalAction(), menu);
+ connect(showInTerminal, &QAction::triggered, pathChooser, [pathChooser]() {
+ Core::FileUtils::openTerminal(pathChooser->path());
+ });
+ menu->insertAction(firstAction, showInTerminal);
+
+ } else {
+ auto *mkPathAct = new QAction(tr("Create Folder"), menu);
+ connect(mkPathAct, &QAction::triggered, pathChooser, [pathChooser]() {
+ QDir().mkpath(pathChooser->path());
+ pathChooser->triggerChanged();
+ });
+ menu->insertAction(firstAction, mkPathAct);
+ }
if (firstAction)
menu->insertSeparator(firstAction);
diff --git a/src/plugins/coreplugin/coreplugin.h b/src/plugins/coreplugin/coreplugin.h
index 7e1ae1664c..b427bdd4d1 100644
--- a/src/plugins/coreplugin/coreplugin.h
+++ b/src/plugins/coreplugin/coreplugin.h
@@ -78,9 +78,9 @@ private slots:
private:
static void addToPathChooserContextMenu(Utils::PathChooser *pathChooser, QMenu *menu);
- MainWindow *m_mainWindow;
- EditMode *m_editMode;
- Locator *m_locator;
+ MainWindow *m_mainWindow = nullptr;
+ EditMode *m_editMode = nullptr;
+ Locator *m_locator = nullptr;
ReaperPrivate m_reaper;
};
diff --git a/src/plugins/coreplugin/coreplugin.pro b/src/plugins/coreplugin/coreplugin.pro
index 93c52d3dda..53b3943476 100644
--- a/src/plugins/coreplugin/coreplugin.pro
+++ b/src/plugins/coreplugin/coreplugin.pro
@@ -224,7 +224,8 @@ HEADERS += corejsextensions.h \
coreicons.h \
editormanager/documentmodel_p.h \
diffservice.h \
- menubarfilter.h
+ menubarfilter.h \
+ editormanager/ieditorfactory_p.h
FORMS += dialogs/newdialog.ui \
dialogs/saveitemsdialog.ui \
diff --git a/src/plugins/coreplugin/coreplugin.qbs b/src/plugins/coreplugin/coreplugin.qbs
index bab2b06259..c19b5d6845 100644
--- a/src/plugins/coreplugin/coreplugin.qbs
+++ b/src/plugins/coreplugin/coreplugin.qbs
@@ -229,7 +229,7 @@ Project {
"editorview.cpp", "editorview.h",
"editorwindow.cpp", "editorwindow.h",
"ieditor.cpp", "ieditor.h",
- "ieditorfactory.cpp", "ieditorfactory.h",
+ "ieditorfactory.cpp", "ieditorfactory.h", "ieditorfactory_p.h",
"iexternaleditor.cpp", "iexternaleditor.h",
"openeditorsview.cpp", "openeditorsview.h",
"openeditorswindow.cpp", "openeditorswindow.h",
diff --git a/src/plugins/coreplugin/designmode.cpp b/src/plugins/coreplugin/designmode.cpp
index 735121192a..64c4bb1455 100644
--- a/src/plugins/coreplugin/designmode.cpp
+++ b/src/plugins/coreplugin/designmode.cpp
@@ -80,7 +80,7 @@ static DesignModePrivate *d = nullptr;
DesignMode::DesignMode()
{
ICore::addPreCloseListener([]() -> bool {
- m_instance->currentEditorChanged(0);
+ m_instance->currentEditorChanged(nullptr);
return true;
});
@@ -130,7 +130,7 @@ void DesignMode::registerDesignWidget(QWidget *widget,
setDesignModeIsRequired();
int index = d->m_stackWidget->addWidget(widget);
- DesignEditorInfo *info = new DesignEditorInfo;
+ auto info = new DesignEditorInfo;
info->mimeTypes = mimeTypes;
info->context = context;
info->widgetIndex = index;
@@ -181,10 +181,10 @@ void DesignMode::currentEditorChanged(IEditor *editor)
if (!mimeEditorAvailable) {
setActiveContext(Context());
- if (ModeManager::currentMode() == id())
+ if (ModeManager::currentModeId() == id())
ModeManager::activateMode(Constants::MODE_EDIT);
setEnabled(false);
- d->m_currentEditor = 0;
+ d->m_currentEditor = nullptr;
emit actionsUpdated(d->m_currentEditor.data());
} else {
d->m_currentEditor = editor;
@@ -214,7 +214,7 @@ void DesignMode::setActiveContext(const Context &context)
if (d->m_activeContext == context)
return;
- if (ModeManager::currentMode() == id())
+ if (ModeManager::currentModeId() == id())
ICore::updateAdditionalContexts(d->m_activeContext, context);
d->m_activeContext = context;
diff --git a/src/plugins/coreplugin/dialogs/externaltoolconfig.cpp b/src/plugins/coreplugin/dialogs/externaltoolconfig.cpp
index 2cce88ec24..3e5255ea59 100644
--- a/src/plugins/coreplugin/dialogs/externaltoolconfig.cpp
+++ b/src/plugins/coreplugin/dialogs/externaltoolconfig.cpp
@@ -121,14 +121,14 @@ QVariant ExternalToolModel::data(const QString &category, int role) const
QMimeData *ExternalToolModel::mimeData(const QModelIndexList &indexes) const
{
if (indexes.isEmpty())
- return 0;
+ return nullptr;
QModelIndex modelIndex = indexes.first();
ExternalTool *tool = toolForIndex(modelIndex);
- QTC_ASSERT(tool, return 0);
+ QTC_ASSERT(tool, return nullptr);
bool found;
QString category = categoryForIndex(modelIndex.parent(), &found);
- QTC_ASSERT(found, return 0);
- QMimeData *md = new QMimeData();
+ QTC_ASSERT(found, return nullptr);
+ auto md = new QMimeData();
QByteArray ba;
QDataStream stream(&ba, QIODevice::WriteOnly);
stream << category << m_tools.value(category).indexOf(tool);
@@ -230,7 +230,7 @@ Qt::ItemFlags ExternalToolModel::flags(const QModelIndex &index) const
return TOOLSMENU_ITEM_FLAGS;
return CATEGORY_ITEM_FLAGS;
}
- return 0;
+ return nullptr;
}
bool ExternalToolModel::setData(const QModelIndex &modelIndex, const QVariant &value, int role)
@@ -342,7 +342,7 @@ QModelIndex ExternalToolModel::addTool(const QModelIndex &atIndex)
if (!found)
category = categoryForIndex(atIndex.parent(), &found);
- ExternalTool *tool = new ExternalTool;
+ auto tool = new ExternalTool;
tool->setDisplayCategory(category);
tool->setDisplayName(tr("New Tool"));
tool->setDescription(tr("This tool prints a line of useful text"));
@@ -440,7 +440,7 @@ ExternalToolConfig::ExternalToolConfig(QWidget *parent) :
connect(ui->revertButton, &QAbstractButton::clicked, this, &ExternalToolConfig::revertCurrentItem);
connect(ui->removeButton, &QAbstractButton::clicked, this, &ExternalToolConfig::removeTool);
- QMenu *menu = new QMenu(ui->addButton);
+ auto menu = new QMenu(ui->addButton);
ui->addButton->setMenu(menu);
QAction *addTool = new QAction(tr("Add Tool"), this);
menu->addAction(addTool);
diff --git a/src/plugins/coreplugin/dialogs/externaltoolconfig.h b/src/plugins/coreplugin/dialogs/externaltoolconfig.h
index 1a2b72b1ac..acc2a68edc 100644
--- a/src/plugins/coreplugin/dialogs/externaltoolconfig.h
+++ b/src/plugins/coreplugin/dialogs/externaltoolconfig.h
@@ -46,7 +46,7 @@ class ExternalToolModel : public QAbstractItemModel
public:
explicit ExternalToolModel(QObject *parent);
- ~ExternalToolModel();
+ ~ExternalToolModel() override;
int columnCount(const QModelIndex &parent = QModelIndex()) const override;
QVariant data(const QModelIndex &modelIndex, int role = Qt::DisplayRole) const override;
@@ -86,8 +86,8 @@ class ExternalToolConfig : public QWidget
Q_OBJECT
public:
- explicit ExternalToolConfig(QWidget *parent = 0);
- ~ExternalToolConfig();
+ explicit ExternalToolConfig(QWidget *parent = nullptr);
+ ~ExternalToolConfig() override;
void setTools(const QMap<QString, QList<ExternalTool *> > &tools);
QMap<QString, QList<ExternalTool *> > tools() const;
diff --git a/src/plugins/coreplugin/dialogs/filepropertiesdialog.cpp b/src/plugins/coreplugin/dialogs/filepropertiesdialog.cpp
index 059da5e9c6..33d2123238 100644
--- a/src/plugins/coreplugin/dialogs/filepropertiesdialog.cpp
+++ b/src/plugins/coreplugin/dialogs/filepropertiesdialog.cpp
@@ -71,10 +71,9 @@ void FilePropertiesDialog::refresh()
m_ui->name->setText(fileInfo.fileName());
m_ui->path->setText(QDir::toNativeSeparators(fileInfo.canonicalPath()));
- const Utils::MimeType mt = Utils::mimeTypeForFile(fileInfo);
- m_ui->mimeType->setText(mt.isValid() ? mt.name() : tr("Undefined"));
+ m_ui->mimeType->setText(Utils::mimeTypeForFile(fileInfo).name());
- const Core::EditorManager::EditorFactoryList factories = Core::EditorManager::editorFactories(m_fileName);
+ const Core::EditorFactoryList factories = Core::IEditorFactory::preferredEditorFactories(m_fileName);
m_ui->defaultEditor->setText(!factories.isEmpty() ? factories.at(0)->displayName() : tr("Undefined"));
m_ui->owner->setText(fileInfo.owner());
diff --git a/src/plugins/coreplugin/dialogs/ioptionspage.cpp b/src/plugins/coreplugin/dialogs/ioptionspage.cpp
index 86281fb01a..a8dbfbffde 100644
--- a/src/plugins/coreplugin/dialogs/ioptionspage.cpp
+++ b/src/plugins/coreplugin/dialogs/ioptionspage.cpp
@@ -169,7 +169,7 @@ const QList<Core::IOptionsPage *> Core::IOptionsPage::allOptionsPages()
bool Core::IOptionsPage::matches(const QString &searchKeyWord) const
{
if (!m_keywordsInitialized) {
- IOptionsPage *that = const_cast<IOptionsPage *>(this);
+ auto that = const_cast<IOptionsPage *>(this);
QWidget *widget = that->widget();
if (!widget)
return false;
diff --git a/src/plugins/coreplugin/dialogs/newdialog.cpp b/src/plugins/coreplugin/dialogs/newdialog.cpp
index 7ae0953ad1..7e1cca297e 100644
--- a/src/plugins/coreplugin/dialogs/newdialog.cpp
+++ b/src/plugins/coreplugin/dialogs/newdialog.cpp
@@ -61,10 +61,10 @@ using namespace Core::Internal;
class WizardFactoryContainer
{
public:
- WizardFactoryContainer() : wizard(nullptr), wizardOption(0) {}
+ WizardFactoryContainer() = default;
WizardFactoryContainer(Core::IWizardFactory *w, int i): wizard(w), wizardOption(i) {}
- Core::IWizardFactory *wizard;
- int wizardOption;
+ Core::IWizardFactory *wizard = nullptr;
+ int wizardOption = 0;
};
inline Core::IWizardFactory *factoryOfItem(const QStandardItem *item = nullptr)
@@ -175,8 +175,7 @@ QWidget *NewDialog::m_currentDialog = nullptr;
NewDialog::NewDialog(QWidget *parent) :
QDialog(parent),
- m_ui(new Ui::NewDialog),
- m_okButton(nullptr)
+ m_ui(new Ui::NewDialog)
{
QTC_CHECK(m_currentDialog == nullptr);
@@ -257,10 +256,10 @@ void NewDialog::setWizardFactories(QList<IWizardFactory *> factories,
QStandardItem *projectKindItem = new QStandardItem(tr("Projects"));
projectKindItem->setData(IWizardFactory::ProjectWizard, Qt::UserRole);
- projectKindItem->setFlags(0); // disable item to prevent focus
+ projectKindItem->setFlags(nullptr); // disable item to prevent focus
QStandardItem *filesKindItem = new QStandardItem(tr("Files and Classes"));
filesKindItem->setData(IWizardFactory::FileWizard, Qt::UserRole);
- filesKindItem->setFlags(0); // disable item to prevent focus
+ filesKindItem->setFlags(nullptr); // disable item to prevent focus
parentItem->appendRow(projectKindItem);
parentItem->appendRow(filesKindItem);
@@ -355,7 +354,7 @@ QWidget *NewDialog::currentDialog()
bool NewDialog::event(QEvent *event)
{
if (event->type() == QEvent::ShortcutOverride) {
- QKeyEvent *ke = static_cast<QKeyEvent *>(event);
+ auto ke = static_cast<QKeyEvent *>(event);
if (ke->key() == Qt::Key_Escape && !ke->modifiers()) {
ke->accept();
return true;
@@ -518,7 +517,7 @@ void NewDialog::reject()
void NewDialog::updateOkButton()
{
- m_okButton->setEnabled(currentWizardFactory() != 0);
+ m_okButton->setEnabled(currentWizardFactory() != nullptr);
}
void NewDialog::setSelectedPlatform(const QString & /*platform*/)
diff --git a/src/plugins/coreplugin/dialogs/newdialog.h b/src/plugins/coreplugin/dialogs/newdialog.h
index df0c9c777b..46047cbd4d 100644
--- a/src/plugins/coreplugin/dialogs/newdialog.h
+++ b/src/plugins/coreplugin/dialogs/newdialog.h
@@ -82,7 +82,7 @@ private:
Ui::NewDialog *m_ui;
QStandardItemModel *m_model;
QSortFilterProxyModel *m_filterProxyModel;
- QPushButton *m_okButton;
+ QPushButton *m_okButton = nullptr;
QIcon m_dummyIcon;
QList<QStandardItem*> m_categoryItems;
QString m_defaultLocation;
diff --git a/src/plugins/coreplugin/dialogs/promptoverwritedialog.cpp b/src/plugins/coreplugin/dialogs/promptoverwritedialog.cpp
index 95b6a948d2..a9434616c9 100644
--- a/src/plugins/coreplugin/dialogs/promptoverwritedialog.cpp
+++ b/src/plugins/coreplugin/dialogs/promptoverwritedialog.cpp
@@ -63,7 +63,7 @@ PromptOverwriteDialog::PromptOverwriteDialog(QWidget *parent) :
setWindowTitle(tr("Overwrite Existing Files"));
setModal(true);
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
- QVBoxLayout *mainLayout = new QVBoxLayout(this);
+ auto mainLayout = new QVBoxLayout(this);
mainLayout->addWidget(m_label);
m_view->setRootIsDecorated(false);
m_view->setUniformRowHeights(true);
@@ -105,7 +105,7 @@ QStandardItem *PromptOverwriteDialog::itemForFile(const QString &f) const
if (fileNameOfItem(item) == f)
return item;
}
- return 0;
+ return nullptr;
}
QStringList PromptOverwriteDialog::files(Qt::CheckState cs) const
diff --git a/src/plugins/coreplugin/dialogs/readonlyfilesdialog.cpp b/src/plugins/coreplugin/dialogs/readonlyfilesdialog.cpp
index 15039e5d7a..af41349cff 100644
--- a/src/plugins/coreplugin/dialogs/readonlyfilesdialog.cpp
+++ b/src/plugins/coreplugin/dialogs/readonlyfilesdialog.cpp
@@ -53,7 +53,7 @@ class ReadOnlyFilesDialogPrivate
Q_DECLARE_TR_FUNCTIONS(Core::ReadOnlyFilesDialog)
public:
- ReadOnlyFilesDialogPrivate(ReadOnlyFilesDialog *parent, IDocument *document = 0, bool useSaveAs = false);
+ ReadOnlyFilesDialogPrivate(ReadOnlyFilesDialog *parent, IDocument *document = nullptr, bool useSaveAs = false);
~ReadOnlyFilesDialogPrivate();
enum ReadOnlyFilesTreeColumn {
@@ -324,7 +324,7 @@ QRadioButton *ReadOnlyFilesDialogPrivate::createRadioButtonForItem(QTreeWidgetIt
ReadOnlyFilesTreeColumn type)
{
- QRadioButton *radioButton = new QRadioButton(q);
+ auto radioButton = new QRadioButton(q);
group->addButton(radioButton, type);
item->setTextAlignment(type, Qt::AlignHCenter);
ui.treeWidget->setItemWidget(item, type, radioButton);
@@ -353,7 +353,7 @@ void ReadOnlyFilesDialogPrivate::setAll(int index)
// Check for every file if the selected operation is available and change it to the operation.
foreach (ReadOnlyFilesDialogPrivate::ButtonGroupForFile groupForFile, buttonGroups) {
- QRadioButton *radioButton = qobject_cast<QRadioButton*> (groupForFile.group->button(type));
+ auto radioButton = qobject_cast<QRadioButton*> (groupForFile.group->button(type));
if (radioButton)
radioButton->setChecked(true);
}
@@ -400,11 +400,11 @@ void ReadOnlyFilesDialogPrivate::initDialog(const QStringList &fileNames)
const QString directory = info.absolutePath();
// Setup a default entry with filename folder and make writable radio button.
- QTreeWidgetItem *item = new QTreeWidgetItem(ui.treeWidget);
+ auto item = new QTreeWidgetItem(ui.treeWidget);
item->setText(FileName, visibleName);
item->setIcon(FileName, FileIconProvider::icon(fileName));
item->setText(Folder, Utils::FileUtils::shortNativePath(Utils::FileName(QFileInfo(directory))));
- QButtonGroup *radioButtonGroup = new QButtonGroup;
+ auto radioButtonGroup = new QButtonGroup;
// Add a button for opening the file with a version control system
// if the file is managed by an version control system which allows opening files.
@@ -442,7 +442,7 @@ void ReadOnlyFilesDialogPrivate::initDialog(const QStringList &fileNames)
if (useSaveAs)
createRadioButtonForItem(item, radioButtonGroup, SaveAs);
// If the file is managed by a version control system save the vcs for this file.
- versionControls[fileName] = fileManagedByVCS ? versionControlForFile : 0;
+ versionControls[fileName] = fileManagedByVCS ? versionControlForFile : nullptr;
// Also save the buttongroup for every file to get the result for each entry.
ReadOnlyFilesDialogPrivate::ButtonGroupForFile groupForFile;
diff --git a/src/plugins/coreplugin/dialogs/saveitemsdialog.cpp b/src/plugins/coreplugin/dialogs/saveitemsdialog.cpp
index edee9a6bca..f3e476fed3 100644
--- a/src/plugins/coreplugin/dialogs/saveitemsdialog.cpp
+++ b/src/plugins/coreplugin/dialogs/saveitemsdialog.cpp
@@ -166,7 +166,7 @@ void SaveItemsDialog::collectFilesToDiff()
{
m_filesToDiff.clear();
foreach (QTreeWidgetItem *item, m_ui.treeWidget->selectedItems()) {
- if (IDocument *doc = item->data(0, Qt::UserRole).value<IDocument*>())
+ if (auto doc = item->data(0, Qt::UserRole).value<IDocument*>())
m_filesToDiff.append(doc->filePath().toString());
}
reject();
diff --git a/src/plugins/coreplugin/dialogs/settingsdialog.cpp b/src/plugins/coreplugin/dialogs/settingsdialog.cpp
index 1cc52d6331..ddb91fe469 100644
--- a/src/plugins/coreplugin/dialogs/settingsdialog.cpp
+++ b/src/plugins/coreplugin/dialogs/settingsdialog.cpp
@@ -101,7 +101,7 @@ class CategoryModel : public QAbstractListModel
{
public:
CategoryModel();
- ~CategoryModel();
+ ~CategoryModel() override;
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
@@ -172,7 +172,7 @@ void CategoryModel::setPages(const QList<IOptionsPage*> &pages,
if (!category) {
category = new Category;
category->id = categoryId;
- category->tabWidget = 0;
+ category->tabWidget = nullptr;
category->index = -1;
m_categories.append(category);
}
@@ -189,7 +189,7 @@ void CategoryModel::setPages(const QList<IOptionsPage*> &pages,
if (!category) {
category = new Category;
category->id = categoryId;
- category->tabWidget = 0;
+ category->tabWidget = nullptr;
category->index = -1;
m_categories.append(category);
}
@@ -233,7 +233,7 @@ Category *CategoryModel::findCategoryById(Id id)
return category;
}
- return 0;
+ return nullptr;
}
// ----------- Category filter model
@@ -245,7 +245,7 @@ Category *CategoryModel::findCategoryById(Id id)
class CategoryFilterModel : public QSortFilterProxyModel
{
public:
- CategoryFilterModel() {}
+ CategoryFilterModel() = default;
protected:
bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override;
@@ -284,7 +284,7 @@ class CategoryListViewDelegate : public QStyledItemDelegate
public:
explicit CategoryListViewDelegate(QObject *parent) : QStyledItemDelegate(parent) {}
- QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
+ QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override
{
QSize size = QStyledItemDelegate::sizeHint(option, index);
size.setHeight(qMax(size.height(), 32));
@@ -540,7 +540,7 @@ void SettingsDialog::createGui()
headerLabelFont.setPointSize(pointSize + 2);
m_headerLabel->setFont(headerLabelFont);
- QHBoxLayout *headerHLayout = new QHBoxLayout;
+ auto headerHLayout = new QHBoxLayout;
const int leftMargin = QApplication::style()->pixelMetric(QStyle::PM_LayoutLeftMargin);
headerHLayout->addSpacerItem(new QSpacerItem(leftMargin, 0, QSizePolicy::Fixed, QSizePolicy::Ignored));
headerHLayout->addWidget(m_headerLabel);
@@ -559,7 +559,7 @@ void SettingsDialog::createGui()
connect(buttonBox, &QDialogButtonBox::accepted, this, &SettingsDialog::accept);
connect(buttonBox, &QDialogButtonBox::rejected, this, &SettingsDialog::reject);
- QGridLayout *mainGridLayout = new QGridLayout;
+ auto mainGridLayout = new QGridLayout;
mainGridLayout->addWidget(m_filterLineEdit, 0, 0, 1, 1);
mainGridLayout->addLayout(headerHLayout, 0, 1, 1, 1);
mainGridLayout->addWidget(m_categoryList, 1, 0, 1, 1);
@@ -598,12 +598,12 @@ void SettingsDialog::ensureCategoryWidget(Category *category)
return;
m_model.ensurePages(category);
- QTabWidget *tabWidget = new QTabWidget;
+ auto tabWidget = new QTabWidget;
tabWidget->tabBar()->setObjectName("qc_settings_main_tabbar"); // easier lookup in Squish
for (IOptionsPage *page : category->pages) {
QWidget *widget = page->widget();
ICore::setupScreenShooter(page->displayName(), widget);
- SmartScrollArea *ssa = new SmartScrollArea(this);
+ auto ssa = new SmartScrollArea(this);
ssa->setWidget(widget);
widget->setAutoFillBackground(false);
tabWidget->addTab(ssa, page->displayName());
diff --git a/src/plugins/coreplugin/dialogs/shortcutsettings.cpp b/src/plugins/coreplugin/dialogs/shortcutsettings.cpp
index 625833bad1..decb0a1f76 100644
--- a/src/plugins/coreplugin/dialogs/shortcutsettings.cpp
+++ b/src/plugins/coreplugin/dialogs/shortcutsettings.cpp
@@ -125,7 +125,7 @@ QSize ShortcutButton::sizeHint() const
{
if (m_preferredWidth < 0) { // initialize size hint
const QString originalText = text();
- ShortcutButton *that = const_cast<ShortcutButton *>(this);
+ auto that = const_cast<ShortcutButton *>(this);
that->setText(m_checkedText);
m_preferredWidth = QPushButton::sizeHint().width();
that->setText(m_uncheckedText);
@@ -153,7 +153,7 @@ bool ShortcutButton::eventFilter(QObject *obj, QEvent *evt)
return true;
}
if (evt->type() == QEvent::KeyPress) {
- QKeyEvent *k = static_cast<QKeyEvent*>(evt);
+ auto k = static_cast<QKeyEvent*>(evt);
int nextKey = k->key();
if (m_keyNum > 3
|| nextKey == Qt::Key_Control
@@ -486,8 +486,8 @@ void ShortcutSettingsWidget::initialize()
if (c->action() && c->action()->isSeparator())
continue;
- QTreeWidgetItem *item = 0;
- ShortcutItem *s = new ShortcutItem;
+ QTreeWidgetItem *item = nullptr;
+ auto s = new ShortcutItem;
m_scitems << s;
item = new QTreeWidgetItem;
s->m_cmd = c;
diff --git a/src/plugins/coreplugin/documentmanager.cpp b/src/plugins/coreplugin/documentmanager.cpp
index a647930e35..1fcbe6c770 100644
--- a/src/plugins/coreplugin/documentmanager.cpp
+++ b/src/plugins/coreplugin/documentmanager.cpp
@@ -436,7 +436,7 @@ void DocumentManager::renamedFile(const QString &from, const QString &to)
void DocumentManager::filePathChanged(const FileName &oldName, const FileName &newName)
{
- IDocument *doc = qobject_cast<IDocument *>(sender());
+ auto doc = qobject_cast<IDocument *>(sender());
QTC_ASSERT(doc, return);
if (doc == d->m_blockedIDocument)
return;
@@ -456,7 +456,7 @@ void DocumentManager::addDocument(IDocument *document, bool addWatcher)
void DocumentManager::documentDestroyed(QObject *obj)
{
- IDocument *document = static_cast<IDocument*>(obj);
+ auto document = static_cast<IDocument*>(obj);
// Check the special unwatched first:
if (!d->m_documentsWithoutWatch.removeOne(document))
removeFileInfo(document);
@@ -487,7 +487,7 @@ bool DocumentManager::removeDocument(IDocument *document)
because the file was saved under different name. */
void DocumentManager::checkForNewFileName()
{
- IDocument *document = qobject_cast<IDocument *>(sender());
+ auto document = qobject_cast<IDocument *>(sender());
// We modified the IDocument
// Trust the other code to also update the m_states map
if (document == d->m_blockedIDocument)
@@ -720,7 +720,7 @@ bool DocumentManager::saveDocument(IDocument *document, const QString &fileName,
return ret;
}
-QString DocumentManager::allDocumentFactoryFiltersString(QString *allFilesFilter = 0)
+QString DocumentManager::allDocumentFactoryFiltersString(QString *allFilesFilter = nullptr)
{
QSet<QString> uniqueFilters;
diff --git a/src/plugins/coreplugin/documentmanager.h b/src/plugins/coreplugin/documentmanager.h
index b74734ac3c..038cad8b18 100644
--- a/src/plugins/coreplugin/documentmanager.h
+++ b/src/plugins/coreplugin/documentmanager.h
@@ -54,7 +54,7 @@ public:
KeepLinks
};
- typedef QPair<QString, Id> RecentFile;
+ using RecentFile = QPair<QString, Id>;
static DocumentManager *instance();
diff --git a/src/plugins/coreplugin/editmode.cpp b/src/plugins/coreplugin/editmode.cpp
index eb4522d65a..c3d47d291c 100644
--- a/src/plugins/coreplugin/editmode.cpp
+++ b/src/plugins/coreplugin/editmode.cpp
@@ -61,13 +61,13 @@ EditMode::EditMode() :
auto editorPlaceHolder = new EditorManagerPlaceHolder;
m_rightSplitWidgetLayout->insertWidget(0, editorPlaceHolder);
- MiniSplitter *rightPaneSplitter = new MiniSplitter;
+ auto rightPaneSplitter = new MiniSplitter;
rightPaneSplitter->insertWidget(0, rightSplitWidget);
rightPaneSplitter->insertWidget(1, new RightPanePlaceHolder(Constants::MODE_EDIT));
rightPaneSplitter->setStretchFactor(0, 1);
rightPaneSplitter->setStretchFactor(1, 0);
- MiniSplitter *splitter = new MiniSplitter;
+ auto splitter = new MiniSplitter;
splitter->setOrientation(Qt::Vertical);
splitter->insertWidget(0, rightPaneSplitter);
QWidget *outputPane = new OutputPanePlaceHolder(Constants::MODE_EDIT, splitter);
@@ -87,7 +87,7 @@ EditMode::EditMode() :
this, &EditMode::grabEditorManager);
m_splitter->setFocusProxy(editorPlaceHolder);
- IContext *modeContextObject = new IContext(this);
+ auto modeContextObject = new IContext(this);
modeContextObject->setContext(Context(Constants::C_EDITORMANAGER));
modeContextObject->setWidget(m_splitter);
ICore::addContextObject(modeContextObject);
diff --git a/src/plugins/coreplugin/editmode.h b/src/plugins/coreplugin/editmode.h
index d11ab206e4..4bce114511 100644
--- a/src/plugins/coreplugin/editmode.h
+++ b/src/plugins/coreplugin/editmode.h
@@ -44,7 +44,7 @@ class EditMode : public IMode
public:
EditMode();
- ~EditMode();
+ ~EditMode() override;
private:
void grabEditorManager(Id mode);
diff --git a/src/plugins/coreplugin/editormanager/documentmodel.cpp b/src/plugins/coreplugin/editormanager/documentmodel.cpp
index 7ca7ff5f0b..dcf6a0eb0a 100644
--- a/src/plugins/coreplugin/editormanager/documentmodel.cpp
+++ b/src/plugins/coreplugin/editormanager/documentmodel.cpp
@@ -295,7 +295,7 @@ QVariant DocumentModelPrivate::data(const QModelIndex &index, int role) const
void DocumentModelPrivate::itemChanged()
{
- IDocument *document = qobject_cast<IDocument *>(sender());
+ auto document = qobject_cast<IDocument *>(sender());
const Utils::optional<int> idx = indexOfDocument(document);
if (!idx)
@@ -439,7 +439,7 @@ void DocumentModelPrivate::DynamicEntry::setNumberedName(int number)
} // Internal
DocumentModel::Entry::Entry() :
- document(0),
+ document(nullptr),
isSuspended(false)
{
}
@@ -450,9 +450,7 @@ DocumentModel::Entry::~Entry()
delete document;
}
-DocumentModel::DocumentModel()
-{
-}
+DocumentModel::DocumentModel() = default;
void DocumentModel::init()
{
@@ -561,7 +559,7 @@ DocumentModel::Entry *DocumentModel::entryAtRow(int row)
{
int entryIndex = row - 1/*<no document>*/;
if (entryIndex < 0)
- return 0;
+ return nullptr;
return d->m_entries[entryIndex];
}
diff --git a/src/plugins/coreplugin/editormanager/documentmodel_p.h b/src/plugins/coreplugin/editormanager/documentmodel_p.h
index ae6ff016fa..10f8ebfb4d 100644
--- a/src/plugins/coreplugin/editormanager/documentmodel_p.h
+++ b/src/plugins/coreplugin/editormanager/documentmodel_p.h
@@ -42,7 +42,7 @@ class DocumentModelPrivate : public QAbstractItemModel
Q_OBJECT
public:
- ~DocumentModelPrivate();
+ ~DocumentModelPrivate() override;
int columnCount(const QModelIndex &parent = QModelIndex()) const override;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
diff --git a/src/plugins/coreplugin/editormanager/editormanager.cpp b/src/plugins/coreplugin/editormanager/editormanager.cpp
index 4671f17422..f33143bc40 100644
--- a/src/plugins/coreplugin/editormanager/editormanager.cpp
+++ b/src/plugins/coreplugin/editormanager/editormanager.cpp
@@ -44,6 +44,7 @@
#include <coreplugin/diffservice.h>
#include <coreplugin/documentmanager.h>
#include <coreplugin/editormanager/ieditorfactory.h>
+#include <coreplugin/editormanager/ieditorfactory_p.h>
#include <coreplugin/editormanager/iexternaleditor.h>
#include <coreplugin/editortoolbar.h>
#include <coreplugin/fileutils.h>
@@ -121,6 +122,7 @@ static const char autoSuspendMinDocumentCountKey[] = "EditorManager/AutoSuspendM
static const char warnBeforeOpeningBigTextFilesKey[] = "EditorManager/WarnBeforeOpeningBigTextFiles";
static const char bigTextFileSizeLimitKey[] = "EditorManager/BigTextFileSizeLimitInMB";
static const char fileSystemCaseSensitivityKey[] = "Core/FileSystemCaseSensitivity";
+static const char preferredEditorFactoriesKey[] = "EditorManager/PreferredEditorFactories";
static const char scratchBufferKey[] = "_q_emScratchBuffer";
@@ -576,6 +578,17 @@ IEditor *EditorManagerPrivate::openEditor(EditorView *view, const QString &fileN
const QList<IEditor *> editors = DocumentModel::editorsForFilePath(fn);
if (!editors.isEmpty()) {
IEditor *editor = editors.first();
+ if (flags & EditorManager::SwitchSplitIfAlreadyVisible) {
+ for (IEditor *ed : editors) {
+ EditorView *v = viewForEditor(ed);
+ // Don't switch to a view where editor is not its current editor
+ if (v && v->currentEditor() == ed) {
+ editor = ed;
+ view = v;
+ break;
+ }
+ }
+ }
editor = activateEditor(view, editor, flags);
if (editor && flags & EditorManager::CanContainLineAndColumnNumber)
editor->gotoLine(lineNumber, columnNumber);
@@ -589,7 +602,7 @@ IEditor *EditorManagerPrivate::openEditor(EditorView *view, const QString &fileN
realFn = fn;
}
- EditorManager::EditorFactoryList factories = EditorManagerPrivate::findFactories(Id(), fn);
+ EditorFactoryList factories = EditorManagerPrivate::findFactories(Id(), fn);
if (factories.isEmpty()) {
Utils::MimeType mimeType = Utils::mimeTypeForFile(fn);
QMessageBox msgbox(QMessageBox::Critical, EditorManager::tr("File Error"),
@@ -652,9 +665,9 @@ IEditor *EditorManagerPrivate::openEditor(EditorView *view, const QString &fileN
IEditorFactory *selectedFactory = nullptr;
if (!factories.isEmpty()) {
- QPushButton *button = qobject_cast<QPushButton *>(msgbox.button(QMessageBox::Open));
+ auto button = qobject_cast<QPushButton *>(msgbox.button(QMessageBox::Open));
QTC_ASSERT(button, return nullptr);
- QMenu *menu = new QMenu(button);
+ auto menu = new QMenu(button);
foreach (IEditorFactory *factory, factories) {
QAction *action = menu->addAction(factory->displayName());
connect(action, &QAction::triggered, &msgbox, [&selectedFactory, factory, &msgbox]() {
@@ -772,7 +785,7 @@ EditorView *EditorManagerPrivate::viewForEditor(IEditor *editor)
QWidget *w = editor->widget();
while (w) {
w = w->parentWidget();
- if (EditorView *view = qobject_cast<EditorView *>(w))
+ if (auto view = qobject_cast<EditorView *>(w))
return view;
}
return nullptr;
@@ -925,15 +938,11 @@ void EditorManagerPrivate::showPopupOrSelectDocument()
Id EditorManagerPrivate::getOpenWithEditorId(const QString &fileName, bool *isExternalEditor)
{
// Collect editors that can open the file
- Utils::MimeType mt = Utils::mimeTypeForFile(fileName);
- //Unable to determine mime type of fileName. Falling back to text/plain",
- if (!mt.isValid())
- mt = Utils::mimeTypeForName("text/plain");
QList<Id> allEditorIds;
QStringList allEditorDisplayNames;
QList<Id> externalEditorIds;
// Built-in
- const EditorManager::EditorFactoryList editors = EditorManager::editorFactories(mt, false);
+ const EditorFactoryList editors = IEditorFactory::preferredEditorFactories(fileName);
const int size = editors.size();
allEditorDisplayNames.reserve(size);
for (int i = 0; i < size; i++) {
@@ -941,7 +950,8 @@ Id EditorManagerPrivate::getOpenWithEditorId(const QString &fileName, bool *isEx
allEditorDisplayNames.push_back(editors.at(i)->displayName());
}
// External editors
- const EditorManager::ExternalEditorList exEditors = EditorManager::externalEditors(mt, false);
+ const Utils::MimeType mt = Utils::mimeTypeForFile(fileName);
+ const ExternalEditorList exEditors = IExternalEditor::externalEditors(mt);
const int esize = exEditors.size();
for (int i = 0; i < esize; i++) {
externalEditorIds.push_back(exEditors.at(i)->id());
@@ -963,6 +973,39 @@ Id EditorManagerPrivate::getOpenWithEditorId(const QString &fileName, bool *isEx
return selectedId;
}
+static QMap<QString, QVariant> toMap(const QHash<Utils::MimeType, IEditorFactory *> &hash)
+{
+ QMap<QString, QVariant> map;
+ auto it = hash.begin();
+ const auto end = hash.end();
+ while (it != end) {
+ map.insert(it.key().name(), it.value()->id().toSetting());
+ ++it;
+ }
+ return map;
+}
+
+static QHash<Utils::MimeType, IEditorFactory *> fromMap(const QMap<QString, QVariant> &map)
+{
+ const EditorFactoryList factories = IEditorFactory::allEditorFactories();
+ QHash<Utils::MimeType, IEditorFactory *> hash;
+ auto it = map.begin();
+ const auto end = map.end();
+ while (it != end) {
+ const Utils::MimeType mimeType = Utils::mimeTypeForName(it.key());
+ if (mimeType.isValid()) {
+ const Id factoryId = Id::fromSetting(it.value());
+ IEditorFactory *factory = Utils::findOrDefault(factories,
+ Utils::equal(&IEditorFactory::id,
+ factoryId));
+ if (factory)
+ hash.insert(mimeType, factory);
+ }
+ ++it;
+ }
+ return hash;
+}
+
void EditorManagerPrivate::saveSettings()
{
ICore::settingsDatabase()->setValue(documentStatesKey, d->m_editorStates);
@@ -984,6 +1027,7 @@ void EditorManagerPrivate::saveSettings()
qsettings->remove(fileSystemCaseSensitivityKey);
else
qsettings->setValue(fileSystemCaseSensitivityKey, sensitivity);
+ qsettings->setValue(preferredEditorFactoriesKey, toMap(userPreferredEditorFactories()));
}
void EditorManagerPrivate::readSettings()
@@ -1015,6 +1059,9 @@ void EditorManagerPrivate::readSettings()
else
HostOsInfo::setOverrideFileNameCaseSensitivity(sensitivity);
}
+ const QHash<Utils::MimeType, IEditorFactory *> preferredEditorFactories = fromMap(
+ qs->value(preferredEditorFactoriesKey).toMap());
+ setUserPreferredEditorFactories(preferredEditorFactories);
SettingsDatabase *settings = ICore::settingsDatabase();
if (settings->contains(documentStatesKey)) {
@@ -1112,14 +1159,14 @@ void EditorManagerPrivate::setBigFileSizeLimit(int limitInMB)
d->m_bigFileSizeLimitInMB = limitInMB;
}
-EditorManager::EditorFactoryList EditorManagerPrivate::findFactories(Id editorId, const QString &fileName)
+EditorFactoryList EditorManagerPrivate::findFactories(Id editorId, const QString &fileName)
{
if (debugEditorManager)
qDebug() << Q_FUNC_INFO << editorId.name() << fileName;
- EditorManager::EditorFactoryList factories;
+ EditorFactoryList factories;
if (!editorId.isValid()) {
- factories = EditorManager::editorFactories(fileName, false);
+ factories = IEditorFactory::preferredEditorFactories(fileName);
} else {
// Find by editor id
IEditorFactory *factory = Utils::findOrDefault(IEditorFactory::allEditorFactories(),
@@ -1519,7 +1566,7 @@ EditorArea *EditorManagerPrivate::findEditorArea(const EditorView *view, int *ar
{
SplitterOrView *current = view->parentSplitterOrView();
while (current) {
- if (EditorArea *area = qobject_cast<EditorArea *>(current)) {
+ if (auto area = qobject_cast<EditorArea *>(current)) {
int index = d->m_editorAreas.indexOf(area);
QTC_ASSERT(index >= 0, return nullptr);
if (areaIndex)
@@ -1933,7 +1980,7 @@ void EditorManagerPrivate::vcsOpenCurrentEditor()
void EditorManagerPrivate::handleDocumentStateChange()
{
updateActions();
- IDocument *document = qobject_cast<IDocument *>(sender());
+ auto document = qobject_cast<IDocument *>(sender());
if (!document->isModified())
document->removeAutoSaveFile();
if (EditorManager::currentDocument() == document)
@@ -2035,7 +2082,7 @@ void EditorManagerPrivate::copyFilePathFromContextMenu()
void EditorManagerPrivate::copyLocationFromContextMenu()
{
- const QAction *action = qobject_cast<const QAction *>(sender());
+ const auto action = qobject_cast<const QAction *>(sender());
if (!d->m_contextMenuEntry || !action)
return;
const QString text = d->m_contextMenuEntry->fileName().toUserOutput()
@@ -2454,42 +2501,38 @@ void EditorManager::addNativeDirAndOpenWithActions(QMenu *contextMenu, DocumentM
void EditorManager::populateOpenWithMenu(QMenu *menu, const QString &fileName)
{
- typedef QList<IEditorFactory*> EditorFactoryList;
- typedef QList<IExternalEditor*> ExternalEditorList;
+ using EditorFactoryList = QList<IEditorFactory*>;
+ using ExternalEditorList = QList<IExternalEditor*>;
menu->clear();
- bool anyMatches = false;
-
+ const EditorFactoryList factories = IEditorFactory::preferredEditorFactories(fileName);
const Utils::MimeType mt = Utils::mimeTypeForFile(fileName);
- if (mt.isValid()) {
- const EditorFactoryList factories = editorFactories(mt, false);
- const ExternalEditorList extEditors = externalEditors(mt, false);
- anyMatches = !factories.empty() || !extEditors.empty();
- if (anyMatches) {
- // Add all suitable editors
- foreach (IEditorFactory *editorFactory, factories) {
- Core::Id editorId = editorFactory->id();
- // Add action to open with this very editor factory
- QString const actionTitle = editorFactory->displayName();
- QAction *action = menu->addAction(actionTitle);
- // Below we need QueuedConnection because otherwise, if a qrc file
- // is inside of a qrc file itself, and the qrc editor opens the Open with menu,
- // crashes happen, because the editor instance is deleted by openEditorWith
- // while the menu is still being processed.
- connect(action, &QAction::triggered, d,
- [fileName, editorId]() {
- EditorManagerPrivate::openEditorWith(fileName, editorId);
- }, Qt::QueuedConnection);
- }
- // Add all suitable external editors
- foreach (IExternalEditor *externalEditor, extEditors) {
- QAction *action = menu->addAction(externalEditor->displayName());
- Core::Id editorId = externalEditor->id();
- connect(action, &QAction::triggered, [fileName, editorId]() {
- EditorManager::openExternalEditor(fileName, editorId);
- });
- }
+ const ExternalEditorList extEditors = IExternalEditor::externalEditors(mt);
+ const bool anyMatches = !factories.empty() || !extEditors.empty();
+ if (anyMatches) {
+ // Add all suitable editors
+ foreach (IEditorFactory *editorFactory, factories) {
+ Core::Id editorId = editorFactory->id();
+ // Add action to open with this very editor factory
+ QString const actionTitle = editorFactory->displayName();
+ QAction *action = menu->addAction(actionTitle);
+ // Below we need QueuedConnection because otherwise, if a qrc file
+ // is inside of a qrc file itself, and the qrc editor opens the Open with menu,
+ // crashes happen, because the editor instance is deleted by openEditorWith
+ // while the menu is still being processed.
+ connect(action, &QAction::triggered, d,
+ [fileName, editorId]() {
+ EditorManagerPrivate::openEditorWith(fileName, editorId);
+ }, Qt::QueuedConnection);
+ }
+ // Add all suitable external editors
+ foreach (IExternalEditor *externalEditor, extEditors) {
+ QAction *action = menu->addAction(externalEditor->displayName());
+ Core::Id editorId = externalEditor->id();
+ connect(action, &QAction::triggered, [fileName, editorId]() {
+ EditorManager::openExternalEditor(fileName, editorId);
+ });
}
}
menu->setEnabled(anyMatches);
@@ -2565,96 +2608,6 @@ IEditor *EditorManager::activateEditorForDocument(IDocument *document, OpenEdito
return EditorManagerPrivate::activateEditorForDocument(EditorManagerPrivate::currentEditorView(), document, flags);
}
-/* For something that has a 'QStringList mimeTypes' (IEditorFactory
- * or IExternalEditor), find the one best matching the mimetype passed in.
- * Recurse over the parent classes of the mimetype to find them. */
-template <class EditorFactoryLike>
-static void mimeTypeFactoryLookup(const Utils::MimeType &mimeType,
- const QList<EditorFactoryLike*> &allFactories,
- bool firstMatchOnly,
- QList<EditorFactoryLike*> *list)
-{
- QSet<EditorFactoryLike *> matches;
- // search breadth-first through parent hierarchy, e.g. for hierarchy
- // * application/x-ruby
- // * application/x-executable
- // * application/octet-stream
- // * text/plain
- QList<Utils::MimeType> queue;
- QSet<QString> seen;
- queue.append(mimeType);
- seen.insert(mimeType.name());
- while (!queue.isEmpty()) {
- Utils::MimeType mt = queue.takeFirst();
- // check for matching factories
- foreach (EditorFactoryLike *factory, allFactories) {
- if (!matches.contains(factory)) {
- foreach (const QString &mimeName, factory->mimeTypes()) {
- if (mt.matchesName(mimeName)) {
- list->append(factory);
- if (firstMatchOnly)
- return;
- matches.insert(factory);
- }
- }
- }
- }
- // add parent mime types
- QStringList parentNames = mt.parentMimeTypes();
- foreach (const QString &parentName, parentNames) {
- const Utils::MimeType parent = Utils::mimeTypeForName(parentName);
- if (parent.isValid()) {
- int seenSize = seen.size();
- seen.insert(parent.name());
- if (seen.size() != seenSize) // not seen before, so add
- queue.append(parent);
- }
- }
- }
-}
-
-EditorManager::EditorFactoryList
- EditorManager::editorFactories(const Utils::MimeType &mimeType, bool bestMatchOnly)
-{
- EditorFactoryList rc;
- const EditorFactoryList allFactories = IEditorFactory::allEditorFactories();
- mimeTypeFactoryLookup(mimeType, allFactories, bestMatchOnly, &rc);
- if (debugEditorManager)
- qDebug() << Q_FUNC_INFO << mimeType.name() << " returns " << rc;
- return rc;
-}
-
-EditorManager::EditorFactoryList
- EditorManager::editorFactories(const QString &fileName, bool bestMatchOnly)
-{
- const QFileInfo fileInfo(fileName);
- // Find by mime type
- Utils::MimeType mimeType = Utils::mimeTypeForFile(fileInfo);
- if (!mimeType.isValid()) {
- qWarning("%s unable to determine mime type of %s. Falling back to text/plain",
- Q_FUNC_INFO, fileName.toUtf8().constData());
- mimeType = Utils::mimeTypeForName("text/plain");
- }
- // open text files > 48 MB in binary editor
- if (fileInfo.size() > EditorManager::maxTextFileSize()
- && mimeType.name().startsWith("text")) {
- mimeType = Utils::mimeTypeForName("application/octet-stream");
- }
-
- return EditorManager::editorFactories(mimeType, bestMatchOnly);
-}
-
-EditorManager::ExternalEditorList
- EditorManager::externalEditors(const Utils::MimeType &mimeType, bool bestMatchOnly)
-{
- ExternalEditorList rc;
- const ExternalEditorList allEditors = IExternalEditor::allExternalEditors();
- mimeTypeFactoryLookup(mimeType, allEditors, bestMatchOnly, &rc);
- if (debugEditorManager)
- qDebug() << Q_FUNC_INFO << mimeType.name() << " returns " << rc;
- return rc;
-}
-
IEditor *EditorManager::openEditor(const QString &fileName, Id editorId,
OpenEditorFlags flags, bool *newEditor)
{
diff --git a/src/plugins/coreplugin/editormanager/editormanager.h b/src/plugins/coreplugin/editormanager/editormanager.h
index 17d84431e3..30023e2bc7 100644
--- a/src/plugins/coreplugin/editormanager/editormanager.h
+++ b/src/plugins/coreplugin/editormanager/editormanager.h
@@ -75,9 +75,7 @@ class CORE_EXPORT EditorManager : public QObject
Q_OBJECT
public:
- typedef QList<IEditorFactory *> EditorFactoryList;
- typedef QList<IExternalEditor *> ExternalEditorList;
- typedef std::function<QString (const QString &)> WindowTitleHandler;
+ using WindowTitleHandler = std::function<QString (const QString &)>;
static EditorManager *instance();
@@ -89,7 +87,8 @@ public:
CanContainLineAndColumnNumber = 8,
OpenInOtherSplit = 16,
DoNotSwitchToDesignMode = 32,
- DoNotSwitchToEditMode = 64
+ DoNotSwitchToEditMode = 64,
+ SwitchSplitIfAlreadyVisible = 128
};
Q_DECLARE_FLAGS(OpenEditorFlags, OpenEditorFlag)
@@ -150,10 +149,6 @@ public:
const std::function<void()> &function = nullptr);
static void hideEditorStatusBar(const QString &id);
- static EditorFactoryList editorFactories(const Utils::MimeType &mimeType, bool bestMatchOnly = true);
- static EditorFactoryList editorFactories(const QString &fileName, bool bestMatchOnly = true);
- static ExternalEditorList externalEditors(const Utils::MimeType &mimeType, bool bestMatchOnly = true);
-
static bool isAutoSaveFile(const QString &fileName);
static QTextCodec *defaultTextCodec();
diff --git a/src/plugins/coreplugin/editormanager/editormanager_p.h b/src/plugins/coreplugin/editormanager/editormanager_p.h
index 07c81e9ca3..b9e021bcb8 100644
--- a/src/plugins/coreplugin/editormanager/editormanager_p.h
+++ b/src/plugins/coreplugin/editormanager/editormanager_p.h
@@ -30,12 +30,14 @@
#include "editormanager.h"
#include "editorview.h"
#include "ieditor.h"
+#include "ieditorfactory.h"
#include <coreplugin/idocument.h>
#include <QList>
#include <QObject>
#include <QPointer>
+#include <QSet>
#include <QString>
#include <QVariant>
@@ -185,7 +187,7 @@ private:
static OpenEditorsWindow *windowPopup();
static void showPopupOrSelectDocument();
- static EditorManager::EditorFactoryList findFactories(Id editorId, const QString &fileName);
+ static EditorFactoryList findFactories(Id editorId, const QString &fileName);
static IEditor *createEditor(IEditorFactory *factory, const QString &fileName);
static void addEditor(IEditor *editor);
static void removeEditor(IEditor *editor, bool removeSusependedEntry);
diff --git a/src/plugins/coreplugin/editormanager/editorview.cpp b/src/plugins/coreplugin/editormanager/editorview.cpp
index 1394572c57..aea929a3aa 100644
--- a/src/plugins/coreplugin/editormanager/editorview.cpp
+++ b/src/plugins/coreplugin/editormanager/editorview.cpp
@@ -68,10 +68,9 @@ EditorView::EditorView(SplitterOrView *parentSplitterOrView, QWidget *parent) :
m_container(new QStackedWidget(this)),
m_infoBarDisplay(new InfoBarDisplay(this)),
m_statusHLine(new QFrame(this)),
- m_statusWidget(new QFrame(this)),
- m_currentNavigationHistoryPosition(0)
+ m_statusWidget(new QFrame(this))
{
- QVBoxLayout *tl = new QVBoxLayout(this);
+ auto tl = new QVBoxLayout(this);
tl->setSpacing(0);
tl->setMargin(0);
{
@@ -106,7 +105,7 @@ EditorView::EditorView(SplitterOrView *parentSplitterOrView, QWidget *parent) :
m_statusWidget->setLineWidth(0);
m_statusWidget->setAutoFillBackground(true);
- QHBoxLayout *hbox = new QHBoxLayout(m_statusWidget);
+ auto hbox = new QHBoxLayout(m_statusWidget);
hbox->setContentsMargins(1, 0, 1, 1);
m_statusWidgetLabel = new QLabel;
m_statusWidgetLabel->setContentsMargins(3, 0, 3, 0);
@@ -153,9 +152,7 @@ EditorView::EditorView(SplitterOrView *parentSplitterOrView, QWidget *parent) :
updateNavigatorActions();
}
-EditorView::~EditorView()
-{
-}
+EditorView::~EditorView() = default;
SplitterOrView *EditorView::parentSplitterOrView() const
{
@@ -173,7 +170,7 @@ EditorView *EditorView::findNextView()
QTC_ASSERT(splitter->count() == 2, return nullptr);
// is current the first child? then the next view is the first one in current's sibling
if (splitter->widget(0) == current) {
- SplitterOrView *second = qobject_cast<SplitterOrView *>(splitter->widget(1));
+ auto second = qobject_cast<SplitterOrView *>(splitter->widget(1));
QTC_ASSERT(second, return nullptr);
return second->findFirstView();
}
@@ -196,7 +193,7 @@ EditorView *EditorView::findPreviousView()
QTC_ASSERT(splitter->count() == 2, return nullptr);
// is current the last child? then the previous view is the first child in current's sibling
if (splitter->widget(1) == current) {
- SplitterOrView *first = qobject_cast<SplitterOrView *>(splitter->widget(0));
+ auto first = qobject_cast<SplitterOrView *>(splitter->widget(0));
QTC_ASSERT(first, return nullptr);
return first->findFirstView();
}
@@ -652,7 +649,7 @@ EditorView *SplitterOrView::findFirstView()
{
if (m_splitter) {
for (int i = 0; i < m_splitter->count(); ++i) {
- if (SplitterOrView *splitterOrView = qobject_cast<SplitterOrView*>(m_splitter->widget(i)))
+ if (auto splitterOrView = qobject_cast<SplitterOrView*>(m_splitter->widget(i)))
if (EditorView *result = splitterOrView->findFirstView())
return result;
}
@@ -665,7 +662,7 @@ EditorView *SplitterOrView::findLastView()
{
if (m_splitter) {
for (int i = m_splitter->count() - 1; 0 < i; --i) {
- if (SplitterOrView *splitterOrView = qobject_cast<SplitterOrView*>(m_splitter->widget(i)))
+ if (auto splitterOrView = qobject_cast<SplitterOrView*>(m_splitter->widget(i)))
if (EditorView *result = splitterOrView->findLastView())
return result;
}
@@ -678,7 +675,7 @@ SplitterOrView *SplitterOrView::findParentSplitter() const
{
QWidget *w = parentWidget();
while (w) {
- if (SplitterOrView *splitter = qobject_cast<SplitterOrView *>(w)) {
+ if (auto splitter = qobject_cast<SplitterOrView *>(w)) {
QTC_CHECK(splitter->splitter());
return splitter;
}
@@ -801,7 +798,7 @@ const QList<IEditor *> SplitterOrView::unsplitAll_helper()
QList<IEditor *> editorsToDelete;
if (m_splitter) {
for (int i = 0; i < m_splitter->count(); ++i) {
- if (SplitterOrView *splitterOrView = qobject_cast<SplitterOrView*>(m_splitter->widget(i)))
+ if (auto splitterOrView = qobject_cast<SplitterOrView*>(m_splitter->widget(i)))
editorsToDelete.append(splitterOrView->unsplitAll_helper());
}
}
@@ -814,7 +811,7 @@ void SplitterOrView::unsplit()
return;
Q_ASSERT(m_splitter->count() == 1);
- SplitterOrView *childSplitterOrView = qobject_cast<SplitterOrView*>(m_splitter->widget(0));
+ auto childSplitterOrView = qobject_cast<SplitterOrView*>(m_splitter->widget(0));
QSplitter *oldSplitter = m_splitter;
m_splitter = nullptr;
QList<IEditor *> editorsToDelete;
@@ -838,7 +835,7 @@ void SplitterOrView::unsplit()
m_view = childSplitterOrView->takeView();
m_view->setParentSplitterOrView(this);
m_layout->addWidget(m_view);
- QSplitter *parentSplitter = qobject_cast<QSplitter *>(parentWidget());
+ auto parentSplitter = qobject_cast<QSplitter *>(parentWidget());
if (parentSplitter) { // not the toplevel splitterOrView
if (parentSplitter->orientation() == Qt::Horizontal)
m_view->setCloseSplitIcon(parentSplitter->widget(0) == this ?
diff --git a/src/plugins/coreplugin/editormanager/editorview.h b/src/plugins/coreplugin/editormanager/editorview.h
index 457df776e5..245c140f06 100644
--- a/src/plugins/coreplugin/editormanager/editorview.h
+++ b/src/plugins/coreplugin/editormanager/editorview.h
@@ -142,7 +142,7 @@ private:
QList<EditLocation> m_navigationHistory;
QList<EditLocation> m_editorHistory;
- int m_currentNavigationHistoryPosition;
+ int m_currentNavigationHistoryPosition = 0;
void updateCurrentPositionInNavigationHistory();
public:
diff --git a/src/plugins/coreplugin/editormanager/editorwindow.cpp b/src/plugins/coreplugin/editormanager/editorwindow.cpp
index 84666e115c..83b8707131 100644
--- a/src/plugins/coreplugin/editormanager/editorwindow.cpp
+++ b/src/plugins/coreplugin/editormanager/editorwindow.cpp
@@ -29,6 +29,7 @@
#include "editormanager_p.h"
#include <aggregation/aggregate.h>
+#include <coreplugin/coreconstants.h>
#include <coreplugin/icontext.h>
#include <coreplugin/icore.h>
#include <coreplugin/locator/locatormanager.h>
@@ -67,7 +68,10 @@ EditorWindow::EditorWindow(QWidget *parent) :
resize(QSize(800, 600));
static int windowId = 0;
- ICore::registerWindow(this, Context(Id("EditorManager.ExternalWindow.").withSuffix(++windowId)));
+
+ ICore::registerWindow(this,
+ Context(Id("EditorManager.ExternalWindow.").withSuffix(++windowId),
+ Constants::C_EDITORMANAGER));
connect(m_area, &EditorArea::windowTitleNeedsUpdate,
this, &EditorWindow::updateWindowTitle);
@@ -82,7 +86,7 @@ EditorWindow::EditorWindow(QWidget *parent) :
EditorWindow::~EditorWindow()
{
if (m_area)
- disconnect(m_area, 0, this, 0);
+ disconnect(m_area, nullptr, this, nullptr);
}
EditorArea *EditorWindow::editorArea() const
diff --git a/src/plugins/coreplugin/editormanager/editorwindow.h b/src/plugins/coreplugin/editormanager/editorwindow.h
index 2327e0145f..d17aeb27f3 100644
--- a/src/plugins/coreplugin/editormanager/editorwindow.h
+++ b/src/plugins/coreplugin/editormanager/editorwindow.h
@@ -36,8 +36,8 @@ class EditorWindow : public QWidget
{
Q_OBJECT
public:
- explicit EditorWindow(QWidget *parent = 0);
- ~EditorWindow();
+ explicit EditorWindow(QWidget *parent = nullptr);
+ ~EditorWindow() override;
EditorArea *editorArea() const;
diff --git a/src/plugins/coreplugin/editormanager/ieditorfactory.cpp b/src/plugins/coreplugin/editormanager/ieditorfactory.cpp
index b32b6036bc..c889e39404 100644
--- a/src/plugins/coreplugin/editormanager/ieditorfactory.cpp
+++ b/src/plugins/coreplugin/editormanager/ieditorfactory.cpp
@@ -24,12 +24,18 @@
****************************************************************************/
#include "ieditorfactory.h"
+#include "ieditorfactory_p.h"
+#include "editormanager.h"
+#include <utils/mimetypes/mimedatabase.h>
#include <utils/qtcassert.h>
+#include <QFileInfo>
+
namespace Core {
static QList<IEditorFactory *> g_editorFactories;
+static QHash<Utils::MimeType, IEditorFactory *> g_userPreferredEditorFactories;
IEditorFactory::IEditorFactory(QObject *parent)
: QObject(parent)
@@ -42,9 +48,62 @@ IEditorFactory::~IEditorFactory()
g_editorFactories.removeOne(this);
}
-const QList<IEditorFactory *> IEditorFactory::allEditorFactories()
+const EditorFactoryList IEditorFactory::allEditorFactories()
{
return g_editorFactories;
}
+/*!
+ Returns all available editors for this \a mimeType in the default order
+ (editors ordered by mime type hierarchy).
+*/
+const EditorFactoryList IEditorFactory::defaultEditorFactories(const Utils::MimeType &mimeType)
+{
+ EditorFactoryList rc;
+ const EditorFactoryList allFactories = IEditorFactory::allEditorFactories();
+ Internal::mimeTypeFactoryLookup(mimeType, allFactories, &rc);
+ return rc;
+}
+
+/*!
+ Returns the available editors for \a fileName in order of preference.
+ That is the default order for the file's MIME type but with a user overridden default
+ editor first, and if the file is a too large text file, with the binary editor as the
+ very first.
+*/
+const EditorFactoryList IEditorFactory::preferredEditorFactories(const QString &fileName)
+{
+ const QFileInfo fileInfo(fileName);
+ // default factories by mime type
+ const Utils::MimeType mimeType = Utils::mimeTypeForFile(fileInfo);
+ EditorFactoryList factories = defaultEditorFactories(mimeType);
+ const auto factories_moveToFront = [&factories](IEditorFactory *f) {
+ factories.removeAll(f);
+ factories.prepend(f);
+ };
+ // user preferred factory to front
+ IEditorFactory *userPreferred = Internal::userPreferredEditorFactories().value(mimeType);
+ if (userPreferred)
+ factories_moveToFront(userPreferred);
+ // open text files > 48 MB in binary editor
+ if (fileInfo.size() > EditorManager::maxTextFileSize()
+ && mimeType.inherits("text/plain")) {
+ const Utils::MimeType binary = Utils::mimeTypeForName("application/octet-stream");
+ const EditorFactoryList binaryEditors = defaultEditorFactories(binary);
+ if (!binaryEditors.isEmpty())
+ factories_moveToFront(binaryEditors.first());
+ }
+ return factories;
+}
+
+QHash<Utils::MimeType, Core::IEditorFactory *> Core::Internal::userPreferredEditorFactories()
+{
+ return g_userPreferredEditorFactories;
+}
+
+void Internal::setUserPreferredEditorFactories(const QHash<Utils::MimeType, IEditorFactory *> &factories)
+{
+ g_userPreferredEditorFactories = factories;
+}
+
} // Core
diff --git a/src/plugins/coreplugin/editormanager/ieditorfactory.h b/src/plugins/coreplugin/editormanager/ieditorfactory.h
index d7600adf71..a759854e72 100644
--- a/src/plugins/coreplugin/editormanager/ieditorfactory.h
+++ b/src/plugins/coreplugin/editormanager/ieditorfactory.h
@@ -28,12 +28,17 @@
#include <coreplugin/core_global.h>
#include <coreplugin/id.h>
+#include <utils/mimetypes/mimetype.h>
+
#include <QObject>
#include <QStringList>
namespace Core {
class IEditor;
+class IEditorFactory;
+
+using EditorFactoryList = QList<IEditorFactory *>;
class CORE_EXPORT IEditorFactory : public QObject
{
@@ -43,7 +48,9 @@ public:
IEditorFactory(QObject *parent = nullptr);
~IEditorFactory() override;
- static const QList<IEditorFactory *> allEditorFactories();
+ static const EditorFactoryList allEditorFactories();
+ static const EditorFactoryList defaultEditorFactories(const Utils::MimeType &mimeType);
+ static const EditorFactoryList preferredEditorFactories(const QString &fileName);
QString displayName() const { return m_displayName; }
void setDisplayName(const QString &displayName) { m_displayName = displayName; }
diff --git a/src/plugins/coreplugin/editormanager/ieditorfactory_p.h b/src/plugins/coreplugin/editormanager/ieditorfactory_p.h
new file mode 100644
index 0000000000..3da7cf2fa9
--- /dev/null
+++ b/src/plugins/coreplugin/editormanager/ieditorfactory_p.h
@@ -0,0 +1,89 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+#pragma once
+
+#include <utils/mimetypes/mimetype.h>
+#include <utils/mimetypes/mimedatabase.h>
+
+#include <QHash>
+#include <QSet>
+
+namespace Core {
+
+class IEditorFactory;
+
+namespace Internal {
+
+QHash<Utils::MimeType, IEditorFactory *> userPreferredEditorFactories();
+void setUserPreferredEditorFactories(const QHash<Utils::MimeType, IEditorFactory *> &factories);
+
+/* For something that has a 'QStringList mimeTypes' (IEditorFactory
+ * or IExternalEditor), find the one best matching the mimetype passed in.
+ * Recurse over the parent classes of the mimetype to find them. */
+template <class EditorFactoryLike>
+static void mimeTypeFactoryLookup(const Utils::MimeType &mimeType,
+ const QList<EditorFactoryLike*> &allFactories,
+ QList<EditorFactoryLike*> *list)
+{
+ QSet<EditorFactoryLike *> matches;
+ // search breadth-first through parent hierarchy, e.g. for hierarchy
+ // * application/x-ruby
+ // * application/x-executable
+ // * application/octet-stream
+ // * text/plain
+ QList<Utils::MimeType> queue;
+ QSet<QString> seen;
+ queue.append(mimeType);
+ seen.insert(mimeType.name());
+ while (!queue.isEmpty()) {
+ Utils::MimeType mt = queue.takeFirst();
+ // check for matching factories
+ foreach (EditorFactoryLike *factory, allFactories) {
+ if (!matches.contains(factory)) {
+ foreach (const QString &mimeName, factory->mimeTypes()) {
+ if (mt.matchesName(mimeName)) {
+ list->append(factory);
+ matches.insert(factory);
+ }
+ }
+ }
+ }
+ // add parent mime types
+ QStringList parentNames = mt.parentMimeTypes();
+ foreach (const QString &parentName, parentNames) {
+ const Utils::MimeType parent = Utils::mimeTypeForName(parentName);
+ if (parent.isValid()) {
+ int seenSize = seen.size();
+ seen.insert(parent.name());
+ if (seen.size() != seenSize) // not seen before, so add
+ queue.append(parent);
+ }
+ }
+ }
+}
+
+} // Internal
+} // Core
diff --git a/src/plugins/coreplugin/editormanager/iexternaleditor.cpp b/src/plugins/coreplugin/editormanager/iexternaleditor.cpp
index 246003162f..9fdb561587 100644
--- a/src/plugins/coreplugin/editormanager/iexternaleditor.cpp
+++ b/src/plugins/coreplugin/editormanager/iexternaleditor.cpp
@@ -25,6 +25,8 @@
#include "iexternaleditor.h"
+#include "ieditorfactory_p.h"
+
namespace Core {
/*!
@@ -66,9 +68,17 @@ IExternalEditor::~IExternalEditor()
g_externalEditors.removeOne(this);
}
-const QList<IExternalEditor *> IExternalEditor::allExternalEditors()
+const ExternalEditorList IExternalEditor::allExternalEditors()
{
return g_externalEditors;
}
+const ExternalEditorList IExternalEditor::externalEditors(const Utils::MimeType &mimeType)
+{
+ ExternalEditorList rc;
+ const ExternalEditorList allEditors = IExternalEditor::allExternalEditors();
+ Internal::mimeTypeFactoryLookup(mimeType, allEditors, &rc);
+ return rc;
+}
+
} // Core
diff --git a/src/plugins/coreplugin/editormanager/iexternaleditor.h b/src/plugins/coreplugin/editormanager/iexternaleditor.h
index 712af48eb8..97ca8c2760 100644
--- a/src/plugins/coreplugin/editormanager/iexternaleditor.h
+++ b/src/plugins/coreplugin/editormanager/iexternaleditor.h
@@ -27,11 +27,16 @@
#include <coreplugin/core_global.h>
+#include <utils/mimetypes/mimetype.h>
+
#include <QObject>
namespace Core {
class Id;
+class IExternalEditor;
+
+using ExternalEditorList = QList<IExternalEditor *>;
class CORE_EXPORT IExternalEditor : public QObject
{
@@ -41,7 +46,8 @@ public:
explicit IExternalEditor(QObject *parent = nullptr);
~IExternalEditor() override;
- static const QList<IExternalEditor *> allExternalEditors();
+ static const ExternalEditorList allExternalEditors();
+ static const ExternalEditorList externalEditors(const Utils::MimeType &mimeType);
virtual QStringList mimeTypes() const = 0;
virtual Id id() const = 0;
diff --git a/src/plugins/coreplugin/editormanager/openeditorsview.cpp b/src/plugins/coreplugin/editormanager/openeditorsview.cpp
index 1a7e0d618c..234fe28e5a 100644
--- a/src/plugins/coreplugin/editormanager/openeditorsview.cpp
+++ b/src/plugins/coreplugin/editormanager/openeditorsview.cpp
@@ -65,9 +65,7 @@ OpenEditorsWidget::OpenEditorsWidget()
this, &OpenEditorsWidget::contextMenuRequested);
}
-OpenEditorsWidget::~OpenEditorsWidget()
-{
-}
+OpenEditorsWidget::~OpenEditorsWidget() = default;
void OpenEditorsWidget::updateCurrentItem(IEditor *editor)
{
@@ -93,7 +91,7 @@ void OpenEditorsWidget::handleActivated(const QModelIndex &index)
// work around a bug in itemviews where the delegate wouldn't get the QStyle::State_MouseOver
QPoint cursorPos = QCursor::pos();
QWidget *vp = viewport();
- QMouseEvent e(QEvent::MouseMove, vp->mapFromGlobal(cursorPos), cursorPos, Qt::NoButton, 0, 0);
+ QMouseEvent e(QEvent::MouseMove, vp->mapFromGlobal(cursorPos), cursorPos, Qt::NoButton, nullptr, nullptr);
QCoreApplication::sendEvent(vp, &e);
}
}
diff --git a/src/plugins/coreplugin/editormanager/openeditorsview.h b/src/plugins/coreplugin/editormanager/openeditorsview.h
index fbde103154..f50a50e3dd 100644
--- a/src/plugins/coreplugin/editormanager/openeditorsview.h
+++ b/src/plugins/coreplugin/editormanager/openeditorsview.h
@@ -39,7 +39,7 @@ class ProxyModel : public QAbstractProxyModel
{
Q_OBJECT
public:
- explicit ProxyModel(QObject *parent = 0);
+ explicit ProxyModel(QObject *parent = nullptr);
QModelIndex mapFromSource(const QModelIndex & sourceIndex) const override;
QModelIndex mapToSource(const QModelIndex & proxyIndex) const override;
@@ -69,7 +69,7 @@ class OpenEditorsWidget : public OpenDocumentsTreeView
public:
OpenEditorsWidget();
- ~OpenEditorsWidget();
+ ~OpenEditorsWidget() override;
private:
void handleActivated(const QModelIndex &);
@@ -88,7 +88,7 @@ class OpenEditorsViewFactory : public INavigationWidgetFactory
public:
OpenEditorsViewFactory();
- NavigationView createWidget();
+ NavigationView createWidget() override;
};
} // namespace Internal
diff --git a/src/plugins/coreplugin/editormanager/openeditorswindow.cpp b/src/plugins/coreplugin/editormanager/openeditorswindow.cpp
index f937f43663..d766531f51 100644
--- a/src/plugins/coreplugin/editormanager/openeditorswindow.cpp
+++ b/src/plugins/coreplugin/editormanager/openeditorswindow.cpp
@@ -72,7 +72,7 @@ OpenEditorsWindow::OpenEditorsWindow(QWidget *parent) :
setFrameStyle(m_editorList->frameStyle());
m_editorList->setFrameStyle(QFrame::NoFrame);
- QVBoxLayout *layout = new QVBoxLayout(this);
+ auto layout = new QVBoxLayout(this);
layout->setMargin(0);
layout->addWidget(m_editorList);
@@ -97,7 +97,7 @@ bool OpenEditorsWindow::eventFilter(QObject *obj, QEvent *e)
{
if (obj == m_editorList) {
if (e->type() == QEvent::KeyPress) {
- QKeyEvent *ke = static_cast<QKeyEvent*>(e);
+ auto ke = static_cast<QKeyEvent*>(e);
if (ke->key() == Qt::Key_Escape) {
setVisible(false);
return true;
@@ -108,7 +108,7 @@ bool OpenEditorsWindow::eventFilter(QObject *obj, QEvent *e)
return true;
}
} else if (e->type() == QEvent::KeyRelease) {
- QKeyEvent *ke = static_cast<QKeyEvent*>(e);
+ auto ke = static_cast<QKeyEvent*>(e);
if (ke->modifiers() == 0
/*HACK this is to overcome some event inconsistencies between platforms*/
|| (ke->modifiers() == Qt::AltModifier
@@ -133,7 +133,7 @@ void OpenEditorsWindow::selectUpDown(bool up)
int index = m_editorList->indexOfTopLevelItem(m_editorList->currentItem());
if (index < 0)
return;
- QTreeWidgetItem *editor = 0;
+ QTreeWidgetItem *editor = nullptr;
int count = 0;
while (!editor && count < itemCount) {
if (up) {
@@ -245,7 +245,7 @@ void OpenEditorsWindow::addItem(DocumentModel::Entry *entry,
entriesDone.insert(entry);
QString title = entry->displayName();
QTC_ASSERT(!title.isEmpty(), return);
- QTreeWidgetItem *item = new QTreeWidgetItem();
+ auto item = new QTreeWidgetItem();
if (entry->document->isModified())
title += tr("*");
item->setIcon(0, !entry->fileName().isEmpty() && entry->document->isFileReadOnly()
diff --git a/src/plugins/coreplugin/editormanager/openeditorswindow.h b/src/plugins/coreplugin/editormanager/openeditorswindow.h
index 9bd769bf8c..4786620c16 100644
--- a/src/plugins/coreplugin/editormanager/openeditorswindow.h
+++ b/src/plugins/coreplugin/editormanager/openeditorswindow.h
@@ -45,9 +45,9 @@ namespace Internal {
class OpenEditorsTreeWidget : public QTreeWidget {
public:
- explicit OpenEditorsTreeWidget(QWidget *parent = 0) : QTreeWidget(parent) {}
- ~OpenEditorsTreeWidget() {}
- QSize sizeHint() const;
+ explicit OpenEditorsTreeWidget(QWidget *parent = nullptr) : QTreeWidget(parent) {}
+ ~OpenEditorsTreeWidget() override = default;
+ QSize sizeHint() const override;
};
@@ -58,16 +58,16 @@ class OpenEditorsWindow : public QFrame
public:
enum Mode {ListMode, HistoryMode };
- explicit OpenEditorsWindow(QWidget *parent = 0);
+ explicit OpenEditorsWindow(QWidget *parent = nullptr);
void setEditors(const QList<EditLocation> &globalHistory, EditorView *view);
- bool eventFilter(QObject *src, QEvent *e);
- void focusInEvent(QFocusEvent *);
- void setVisible(bool visible);
+ bool eventFilter(QObject *src, QEvent *e) override;
+ void focusInEvent(QFocusEvent*) override;
+ void setVisible(bool visible) override;
void selectNextEditor();
void selectPreviousEditor();
- QSize sizeHint() const;
+ QSize sizeHint() const override;
public slots:
void selectAndHide();
diff --git a/src/plugins/coreplugin/editormanager/systemeditor.h b/src/plugins/coreplugin/editormanager/systemeditor.h
index 1589dd21ce..10fb0dc949 100644
--- a/src/plugins/coreplugin/editormanager/systemeditor.h
+++ b/src/plugins/coreplugin/editormanager/systemeditor.h
@@ -35,13 +35,13 @@ class SystemEditor : public IExternalEditor
Q_OBJECT
public:
- explicit SystemEditor(QObject *parent = 0);
+ explicit SystemEditor(QObject *parent = nullptr);
- QStringList mimeTypes() const;
- Id id() const;
- QString displayName() const;
+ QStringList mimeTypes() const override;
+ Id id() const override;
+ QString displayName() const override;
- bool startEditor(const QString &fileName, QString *errorMessage);
+ bool startEditor(const QString &fileName, QString *errorMessage) override;
};
} // namespace Internal
diff --git a/src/plugins/coreplugin/editortoolbar.cpp b/src/plugins/coreplugin/editortoolbar.cpp
index 83384eb337..55430f1a42 100644
--- a/src/plugins/coreplugin/editortoolbar.cpp
+++ b/src/plugins/coreplugin/editortoolbar.cpp
@@ -93,7 +93,7 @@ EditorToolBarPrivate::EditorToolBarPrivate(QWidget *parent, EditorToolBar *q) :
m_closeEditorButton(new QToolButton(q)),
m_lockButton(new QToolButton(q)),
m_dragHandle(new QToolButton(q)),
- m_dragHandleMenu(0),
+ m_dragHandleMenu(nullptr),
m_goBackAction(new QAction(Utils::Icons::PREV_TOOLBAR.icon(), EditorManager::tr("Go Back"), parent)),
m_goForwardAction(new QAction(Utils::Icons::NEXT_TOOLBAR.icon(), EditorManager::tr("Go Forward"), parent)),
m_backButton(new QToolButton(q)),
@@ -105,7 +105,7 @@ EditorToolBarPrivate::EditorToolBarPrivate(QWidget *parent, EditorToolBar *q) :
EditorManager::tr("Split Side by Side"), parent)),
m_splitNewWindowAction(new QAction(EditorManager::tr("Open in New Window"), parent)),
m_closeSplitButton(new QToolButton(q)),
- m_activeToolBar(0),
+ m_activeToolBar(nullptr),
m_toolBarPlaceholder(new QWidget(q)),
m_defaultToolBar(new QWidget(q)),
m_isStandalone(false)
@@ -118,7 +118,7 @@ EditorToolBarPrivate::EditorToolBarPrivate(QWidget *parent, EditorToolBar *q) :
EditorToolBar::EditorToolBar(QWidget *parent) :
Utils::StyledBar(parent), d(new EditorToolBarPrivate(parent, this))
{
- QHBoxLayout *toolBarLayout = new QHBoxLayout(this);
+ auto toolBarLayout = new QHBoxLayout(this);
toolBarLayout->setMargin(0);
toolBarLayout->setSpacing(0);
toolBarLayout->addWidget(d->m_defaultToolBar);
@@ -164,7 +164,7 @@ EditorToolBar::EditorToolBar(QWidget *parent) :
d->m_splitButton->setToolTip(tr("Split"));
d->m_splitButton->setPopupMode(QToolButton::InstantPopup);
d->m_splitButton->setProperty("noArrow", true);
- QMenu *splitMenu = new QMenu(d->m_splitButton);
+ auto splitMenu = new QMenu(d->m_splitButton);
splitMenu->addAction(d->m_horizontalSplitAction);
splitMenu->addAction(d->m_verticalSplitAction);
splitMenu->addAction(d->m_splitNewWindowAction);
@@ -173,7 +173,7 @@ EditorToolBar::EditorToolBar(QWidget *parent) :
d->m_closeSplitButton->setAutoRaise(true);
d->m_closeSplitButton->setIcon(Utils::Icons::CLOSE_SPLIT_BOTTOM.icon());
- QHBoxLayout *toplayout = new QHBoxLayout(this);
+ auto toplayout = new QHBoxLayout(this);
toplayout->setSpacing(0);
toplayout->setMargin(0);
toplayout->addWidget(d->m_backButton);
@@ -236,14 +236,14 @@ void EditorToolBar::removeToolbarForEditor(IEditor *editor)
disconnect(editor->document(), &IDocument::changed, this, &EditorToolBar::checkDocumentStatus);
QWidget *toolBar = editor->toolBar();
- if (toolBar != 0) {
+ if (toolBar != nullptr) {
if (d->m_activeToolBar == toolBar) {
d->m_activeToolBar = d->m_defaultToolBar;
d->m_activeToolBar->setVisible(true);
}
d->m_toolBarPlaceholder->layout()->removeWidget(toolBar);
toolBar->setVisible(false);
- toolBar->setParent(0);
+ toolBar->setParent(nullptr);
}
}
@@ -319,7 +319,7 @@ void EditorToolBar::setMenuProvider(const EditorToolBar::MenuProvider &provider)
void EditorToolBar::setCurrentEditor(IEditor *editor)
{
- IDocument *document = editor ? editor->document() : 0;
+ IDocument *document = editor ? editor->document() : nullptr;
const Utils::optional<int> index = DocumentModel::rowOfDocument(document);
if (QTC_GUARD(index))
d->m_editorList->setCurrentIndex(*index);
@@ -327,7 +327,7 @@ void EditorToolBar::setCurrentEditor(IEditor *editor)
// If we never added the toolbar from the editor, we will never change
// the editor, so there's no need to update the toolbar either.
if (!d->m_isStandalone)
- updateToolBar(editor ? editor->toolBar() : 0);
+ updateToolBar(editor ? editor->toolBar() : nullptr);
updateDocumentStatus(document);
}
@@ -353,7 +353,7 @@ void EditorToolBar::fillListContextMenu(QMenu *menu)
} else {
IEditor *editor = EditorManager::currentEditor();
DocumentModel::Entry *entry = editor ? DocumentModel::entryForDocument(editor->document())
- : 0;
+ : nullptr;
EditorManager::addSaveAndCloseEditorActions(menu, entry, editor);
menu->addSeparator();
EditorManager::addNativeDirAndOpenWithActions(menu, entry);
@@ -386,7 +386,7 @@ void EditorToolBar::updateActionShortcuts()
void EditorToolBar::checkDocumentStatus()
{
- IDocument *document = qobject_cast<IDocument *>(sender());
+ auto document = qobject_cast<IDocument *>(sender());
QTC_ASSERT(document, return);
DocumentModel::Entry *entry = DocumentModel::entryAtRow(
d->m_editorList->currentIndex());
@@ -397,7 +397,7 @@ void EditorToolBar::checkDocumentStatus()
void EditorToolBar::updateDocumentStatus(IDocument *document)
{
- d->m_closeEditorButton->setEnabled(document != 0);
+ d->m_closeEditorButton->setEnabled(document != nullptr);
if (!document) {
d->m_lockButton->setIcon(QIcon());
diff --git a/src/plugins/coreplugin/editortoolbar.h b/src/plugins/coreplugin/editortoolbar.h
index 1d0c49ffdf..b8d7fad468 100644
--- a/src/plugins/coreplugin/editortoolbar.h
+++ b/src/plugins/coreplugin/editortoolbar.h
@@ -53,7 +53,7 @@ public:
explicit EditorToolBar(QWidget *parent = nullptr);
~EditorToolBar() override;
- typedef std::function<void(QMenu*)> MenuProvider;
+ using MenuProvider = std::function<void(QMenu*)>;
enum ToolbarCreationFlags { FlagsNone = 0, FlagsStandalone = 1 };
/**
diff --git a/src/plugins/coreplugin/externaltool.cpp b/src/plugins/coreplugin/externaltool.cpp
index 08e3ecc29b..1b61747dd2 100644
--- a/src/plugins/coreplugin/externaltool.cpp
+++ b/src/plugins/coreplugin/externaltool.cpp
@@ -81,11 +81,7 @@ const char kFalse[] = "false";
// #pragma mark -- ExternalTool
ExternalTool::ExternalTool() :
- m_displayCategory(QLatin1String("")), // difference between isNull and isEmpty
- m_order(-1),
- m_outputHandling(ShowInPane),
- m_errorHandling(ShowInPane),
- m_modifiesCurrentDocument(false)
+ m_displayCategory(QLatin1String("")) // difference between isNull and isEmpty
{
}
@@ -129,9 +125,7 @@ ExternalTool &ExternalTool::operator=(const ExternalTool &other)
return *this;
}
-ExternalTool::~ExternalTool()
-{
-}
+ExternalTool::~ExternalTool() = default;
QString ExternalTool::id() const
{
@@ -354,7 +348,7 @@ ExternalTool * ExternalTool::createFromXml(const QByteArray &xml, QString *error
int nameLocale = -1;
int categoryLocale = -1;
const QStringList &locales = splitLocale(locale);
- ExternalTool *tool = new ExternalTool;
+ auto tool = new ExternalTool;
QXmlStreamReader reader(xml);
if (!reader.readNextStartElement() || reader.name() != QLatin1String(kExternalTool))
@@ -442,7 +436,7 @@ ExternalTool * ExternalTool::createFromXml(const QByteArray &xml, QString *error
if (errorMessage)
*errorMessage = reader.errorString();
delete tool;
- return 0;
+ return nullptr;
}
return tool;
}
@@ -452,10 +446,10 @@ ExternalTool * ExternalTool::createFromFile(const QString &fileName, QString *er
QString absFileName = QFileInfo(fileName).absoluteFilePath();
FileReader reader;
if (!reader.fetch(absFileName, errorMessage))
- return 0;
+ return nullptr;
ExternalTool *tool = ExternalTool::createFromXml(reader.data(), errorMessage, locale);
if (!tool)
- return 0;
+ return nullptr;
tool->m_fileName = absFileName;
return tool;
}
@@ -541,7 +535,7 @@ bool ExternalTool::operator==(const ExternalTool &other) const
ExternalToolRunner::ExternalToolRunner(const ExternalTool *tool)
: m_tool(new ExternalTool(tool)),
- m_process(0),
+ m_process(nullptr),
m_outputCodec(QTextCodec::codecForLocale()),
m_hasError(false)
{
diff --git a/src/plugins/coreplugin/externaltool.h b/src/plugins/coreplugin/externaltool.h
index e284de3e91..b511b9e0e2 100644
--- a/src/plugins/coreplugin/externaltool.h
+++ b/src/plugins/coreplugin/externaltool.h
@@ -103,15 +103,15 @@ private:
QString m_description;
QString m_displayName;
QString m_displayCategory;
- int m_order;
+ int m_order = -1;
QStringList m_executables;
QString m_arguments;
QString m_input;
QString m_workingDirectory;
QList<Utils::EnvironmentItem> m_environment;
- OutputHandling m_outputHandling;
- OutputHandling m_errorHandling;
- bool m_modifiesCurrentDocument;
+ OutputHandling m_outputHandling = ShowInPane;
+ OutputHandling m_errorHandling = ShowInPane;
+ bool m_modifiesCurrentDocument = false;
QString m_fileName;
QString m_presetFileName;
diff --git a/src/plugins/coreplugin/externaltoolmanager.cpp b/src/plugins/coreplugin/externaltoolmanager.cpp
index 80d98243b6..1ba8a04acb 100644
--- a/src/plugins/coreplugin/externaltoolmanager.cpp
+++ b/src/plugins/coreplugin/externaltoolmanager.cpp
@@ -56,8 +56,8 @@ struct ExternalToolManagerPrivate
QAction *m_configureAction;
};
-static ExternalToolManager *m_instance = 0;
-static ExternalToolManagerPrivate *d = 0;
+static ExternalToolManager *m_instance = nullptr;
+static ExternalToolManagerPrivate *d = nullptr;
static void writeSettings();
static void readSettings(const QMap<QString, ExternalTool *> &tools,
@@ -211,7 +211,7 @@ void ExternalToolManager::setToolsByCategory(const QMap<QString, QList<ExternalT
it.toFront();
while (it.hasNext()) {
it.next();
- ActionContainer *container = 0;
+ ActionContainer *container = nullptr;
const QString &containerName = it.key();
if (containerName.isEmpty()) { // no displayCategory, so put into external tools menu directly
container = mexternaltools;
@@ -227,8 +227,8 @@ void ExternalToolManager::setToolsByCategory(const QMap<QString, QList<ExternalT
foreach (ExternalTool *tool, it.value()) {
const QString &toolId = tool->id();
// tool action and command
- QAction *action = 0;
- Command *command = 0;
+ QAction *action = nullptr;
+ Command *command = nullptr;
if (d->m_actions.contains(toolId)) {
action = d->m_actions.value(toolId);
command = ActionManager::command(externalToolsPrefix.withSuffix(toolId));
@@ -236,7 +236,7 @@ void ExternalToolManager::setToolsByCategory(const QMap<QString, QList<ExternalT
action = new QAction(tool->displayName(), m_instance);
d->m_actions.insert(toolId, action);
connect(action, &QAction::triggered, [tool] {
- ExternalToolRunner *runner = new ExternalToolRunner(tool);
+ auto runner = new ExternalToolRunner(tool);
if (runner->hasError())
MessageManager::write(runner->errorString());
});
diff --git a/src/plugins/coreplugin/find/basetextfind.cpp b/src/plugins/coreplugin/find/basetextfind.cpp
index f0b3ad64c3..b9c38b3a5e 100644
--- a/src/plugins/coreplugin/find/basetextfind.cpp
+++ b/src/plugins/coreplugin/find/basetextfind.cpp
@@ -111,7 +111,7 @@ void BaseTextFind::setTextCursor(const QTextCursor &cursor)
QTextDocument *BaseTextFind::document() const
{
- QTC_ASSERT(d->m_editor || d->m_plaineditor, return 0);
+ QTC_ASSERT(d->m_editor || d->m_plaineditor, return nullptr);
return d->m_editor ? d->m_editor->document() : d->m_plaineditor->document();
}
@@ -140,7 +140,7 @@ void BaseTextFind::resetIncrementalSearch()
void BaseTextFind::clearHighlights()
{
- highlightAll(QString(), 0);
+ highlightAll(QString(), nullptr);
}
QString BaseTextFind::currentFindString() const
@@ -191,7 +191,7 @@ IFindSupport::Result BaseTextFind::findIncremental(const QString &txt, FindFlags
if (found)
highlightAll(txt, findFlags);
else
- highlightAll(QString(), 0);
+ highlightAll(QString(), nullptr);
return found ? Found : NotFound;
}
diff --git a/src/plugins/coreplugin/find/currentdocumentfind.cpp b/src/plugins/coreplugin/find/currentdocumentfind.cpp
index eca3527bac..834b651ce7 100644
--- a/src/plugins/coreplugin/find/currentdocumentfind.cpp
+++ b/src/plugins/coreplugin/find/currentdocumentfind.cpp
@@ -40,7 +40,7 @@ using namespace Core;
using namespace Core::Internal;
CurrentDocumentFind::CurrentDocumentFind()
- : m_currentFind(0)
+ : m_currentFind(nullptr)
{
connect(qApp, &QApplication::focusChanged,
this, &CurrentDocumentFind::updateCandidateFindFilter);
@@ -48,7 +48,7 @@ CurrentDocumentFind::CurrentDocumentFind()
void CurrentDocumentFind::removeConnections()
{
- disconnect(qApp, 0, this, 0);
+ disconnect(qApp, nullptr, this, nullptr);
removeFindSupportConnections();
}
@@ -82,7 +82,7 @@ bool CurrentDocumentFind::supportsReplace() const
FindFlags CurrentDocumentFind::supportedFindFlags() const
{
- QTC_ASSERT(m_currentFind, return 0);
+ QTC_ASSERT(m_currentFind, return nullptr);
return m_currentFind->supportedFindFlags();
}
@@ -134,7 +134,7 @@ int CurrentDocumentFind::replaceAll(const QString &before, const QString &after,
QTC_CHECK(m_currentWidget);
int count = m_currentFind->replaceAll(before, after, findFlags);
Utils::FadingIndicator::showText(m_currentWidget,
- tr("%n occurrences replaced.", 0, count),
+ tr("%n occurrences replaced.", nullptr, count),
Utils::FadingIndicator::SmallText);
return count;
}
@@ -155,7 +155,7 @@ void CurrentDocumentFind::updateCandidateFindFilter(QWidget *old, QWidget *now)
{
Q_UNUSED(old)
QWidget *candidate = now;
- QPointer<IFindSupport> impl = 0;
+ QPointer<IFindSupport> impl = nullptr;
while (!impl && candidate) {
impl = Aggregation::query<IFindSupport>(candidate);
if (!impl)
@@ -215,8 +215,8 @@ void CurrentDocumentFind::removeFindSupportConnections()
void CurrentDocumentFind::clearFindSupport()
{
removeFindSupportConnections();
- m_currentWidget = 0;
- m_currentFind = 0;
+ m_currentWidget = nullptr;
+ m_currentFind = nullptr;
emit changed();
}
diff --git a/src/plugins/coreplugin/find/currentdocumentfind.h b/src/plugins/coreplugin/find/currentdocumentfind.h
index a0d40d8706..32aa5b97f8 100644
--- a/src/plugins/coreplugin/find/currentdocumentfind.h
+++ b/src/plugins/coreplugin/find/currentdocumentfind.h
@@ -61,7 +61,7 @@ public:
void removeConnections();
bool setFocusToCurrentFindSupport();
- bool eventFilter(QObject *obj, QEvent *event);
+ bool eventFilter(QObject *obj, QEvent *event) override;
signals:
void changed();
diff --git a/src/plugins/coreplugin/find/findplugin.cpp b/src/plugins/coreplugin/find/findplugin.cpp
index dad9776247..3fcc8fa14b 100644
--- a/src/plugins/coreplugin/find/findplugin.cpp
+++ b/src/plugins/coreplugin/find/findplugin.cpp
@@ -181,24 +181,24 @@ public:
void setupFilterMenuItems();
void readSettings();
- Internal::CurrentDocumentFind *m_currentDocumentFind = 0;
- Internal::FindToolBar *m_findToolBar = 0;
- Internal::FindToolWindow *m_findDialog = 0;
- SearchResultWindow *m_searchResultWindow = 0;
+ Internal::CurrentDocumentFind *m_currentDocumentFind = nullptr;
+ Internal::FindToolBar *m_findToolBar = nullptr;
+ Internal::FindToolWindow *m_findDialog = nullptr;
+ SearchResultWindow *m_searchResultWindow = nullptr;
FindFlags m_findFlags;
CompletionModel m_findCompletionModel;
QStringListModel m_replaceCompletionModel;
QStringList m_replaceCompletions;
- QAction *m_openFindDialog = 0;
+ QAction *m_openFindDialog = nullptr;
};
-Find *m_instance = 0;
-FindPrivate *d = 0;
+Find *m_instance = nullptr;
+FindPrivate *d = nullptr;
void Find::destroy()
{
delete m_instance;
- m_instance = 0;
+ m_instance = nullptr;
if (d) {
delete d->m_currentDocumentFind;
delete d->m_findToolBar;
@@ -245,7 +245,7 @@ void Find::extensionsInitialized()
void Find::aboutToShutdown()
{
d->m_findToolBar->setVisible(false);
- d->m_findToolBar->setParent(0);
+ d->m_findToolBar->setParent(nullptr);
d->m_currentDocumentFind->removeConnections();
}
diff --git a/src/plugins/coreplugin/find/findtoolbar.cpp b/src/plugins/coreplugin/find/findtoolbar.cpp
index 793b2990f8..e1aee5b9a7 100644
--- a/src/plugins/coreplugin/find/findtoolbar.cpp
+++ b/src/plugins/coreplugin/find/findtoolbar.cpp
@@ -121,26 +121,26 @@ FindToolBar::FindToolBar(CurrentDocumentFind *currentDocumentFind)
static_cast<void (QCompleter::*)(const QModelIndex &)>(&QCompleter::activated),
this, &FindToolBar::findCompleterActivated);
- QAction *shiftEnterAction = new QAction(m_ui.findEdit);
+ auto shiftEnterAction = new QAction(m_ui.findEdit);
shiftEnterAction->setShortcut(QKeySequence(tr("Shift+Enter")));
shiftEnterAction->setShortcutContext(Qt::WidgetShortcut);
connect(shiftEnterAction, &QAction::triggered,
this, &FindToolBar::invokeFindPrevious);
m_ui.findEdit->addAction(shiftEnterAction);
- QAction *shiftReturnAction = new QAction(m_ui.findEdit);
+ auto shiftReturnAction = new QAction(m_ui.findEdit);
shiftReturnAction->setShortcut(QKeySequence(tr("Shift+Return")));
shiftReturnAction->setShortcutContext(Qt::WidgetShortcut);
connect(shiftReturnAction, &QAction::triggered,
this, &FindToolBar::invokeFindPrevious);
m_ui.findEdit->addAction(shiftReturnAction);
- QAction *shiftEnterReplaceAction = new QAction(m_ui.replaceEdit);
+ auto shiftEnterReplaceAction = new QAction(m_ui.replaceEdit);
shiftEnterReplaceAction->setShortcut(QKeySequence(tr("Shift+Enter")));
shiftEnterReplaceAction->setShortcutContext(Qt::WidgetShortcut);
connect(shiftEnterReplaceAction, &QAction::triggered,
this, &FindToolBar::invokeReplacePrevious);
m_ui.replaceEdit->addAction(shiftEnterReplaceAction);
- QAction *shiftReturnReplaceAction = new QAction(m_ui.replaceEdit);
+ auto shiftReturnReplaceAction = new QAction(m_ui.replaceEdit);
shiftReturnReplaceAction->setShortcut(QKeySequence(tr("Shift+Return")));
shiftReturnReplaceAction->setShortcutContext(Qt::WidgetShortcut);
connect(shiftReturnReplaceAction, &QAction::triggered,
@@ -313,9 +313,7 @@ FindToolBar::FindToolBar(CurrentDocumentFind *currentDocumentFind)
connect(&m_findStepTimer, &QTimer::timeout, this, &FindToolBar::invokeFindStep);
}
-FindToolBar::~FindToolBar()
-{
-}
+FindToolBar::~FindToolBar() = default;
void FindToolBar::findCompleterActivated(const QModelIndex &index)
{
@@ -342,7 +340,7 @@ void FindToolBar::installEventFilters()
bool FindToolBar::eventFilter(QObject *obj, QEvent *event)
{
if (event->type() == QEvent::KeyPress) {
- QKeyEvent *ke = static_cast<QKeyEvent *>(event);
+ auto ke = static_cast<QKeyEvent *>(event);
if (ke->key() == Qt::Key_Down) {
if (obj == m_ui.findEdit) {
if (m_ui.findEdit->text().isEmpty())
@@ -358,7 +356,7 @@ bool FindToolBar::eventFilter(QObject *obj, QEvent *event)
if ((obj == m_ui.findEdit || obj == m_findCompleter->popup())
&& event->type() == QEvent::KeyPress) {
- QKeyEvent *ke = static_cast<QKeyEvent *>(event);
+ auto ke = static_cast<QKeyEvent *>(event);
if (ke->key() == Qt::Key_Space && (ke->modifiers() & Utils::HostOsInfo::controlModifier())) {
QString completedText = m_currentDocumentFind->completedFindString();
if (!completedText.isEmpty()) {
@@ -368,7 +366,7 @@ bool FindToolBar::eventFilter(QObject *obj, QEvent *event)
}
}
} else if (obj == this && event->type() == QEvent::ShortcutOverride) {
- QKeyEvent *ke = static_cast<QKeyEvent *>(event);
+ auto ke = static_cast<QKeyEvent *>(event);
if (ke->key() == Qt::Key_Space && (ke->modifiers() & Utils::HostOsInfo::controlModifier())) {
event->accept();
return true;
@@ -394,7 +392,7 @@ void FindToolBar::adaptToCandidate()
void FindToolBar::updateGlobalActions()
{
IFindSupport *candidate = m_currentDocumentFind->candidate();
- bool enabled = (candidate != 0);
+ bool enabled = (candidate != nullptr);
bool replaceEnabled = enabled && candidate->supportsReplace();
m_findInDocumentAction->setEnabled(enabled || (toolBarHasFocus() && isEnabled()));
m_findNextSelectedAction->setEnabled(enabled);
@@ -670,7 +668,7 @@ void FindToolBar::findFlagsChanged()
void FindToolBar::findEditButtonClicked()
{
- OptionsPopup *popup = new OptionsPopup(m_ui.findEdit);
+ auto popup = new OptionsPopup(m_ui.findEdit);
popup->show();
}
@@ -753,7 +751,7 @@ FindToolBarPlaceHolder *FindToolBar::findToolBarPlaceHolder() const
}
candidate = candidate->parentWidget();
}
- return 0;
+ return nullptr;
}
bool FindToolBar::toolBarHasFocus() const
@@ -826,7 +824,7 @@ void FindToolBar::openFindToolBar(OpenFlags flags)
FindToolBarPlaceHolder *previousHolder = FindToolBarPlaceHolder::getCurrent();
if (previousHolder != holder) {
if (previousHolder)
- previousHolder->setWidget(0);
+ previousHolder->setWidget(nullptr);
holder->setWidget(this);
FindToolBarPlaceHolder::setCurrent(holder);
}
@@ -987,7 +985,7 @@ OptionsPopup::OptionsPopup(QWidget *parent)
: QWidget(parent, Qt::Popup)
{
setAttribute(Qt::WA_DeleteOnClose);
- QVBoxLayout *layout = new QVBoxLayout(this);
+ auto layout = new QVBoxLayout(this);
layout->setContentsMargins(2, 2, 2, 2);
layout->setSpacing(2);
setLayout(layout);
@@ -1003,7 +1001,7 @@ OptionsPopup::OptionsPopup(QWidget *parent)
bool OptionsPopup::event(QEvent *ev)
{
if (ev->type() == QEvent::ShortcutOverride) {
- QKeyEvent *ke = static_cast<QKeyEvent *>(ev);
+ auto ke = static_cast<QKeyEvent *>(ev);
if (ke->key() == Qt::Key_Escape && !ke->modifiers()) {
ev->accept();
return true;
@@ -1014,9 +1012,9 @@ bool OptionsPopup::event(QEvent *ev)
bool OptionsPopup::eventFilter(QObject *obj, QEvent *ev)
{
- QCheckBox *checkbox = qobject_cast<QCheckBox *>(obj);
+ auto checkbox = qobject_cast<QCheckBox *>(obj);
if (ev->type() == QEvent::KeyPress && checkbox) {
- QKeyEvent *ke = static_cast<QKeyEvent *>(ev);
+ auto ke = static_cast<QKeyEvent *>(ev);
if (!ke->modifiers() && (ke->key() == Qt::Key_Enter || ke->key() == Qt::Key_Return)) {
checkbox->click();
ev->accept();
@@ -1028,7 +1026,7 @@ bool OptionsPopup::eventFilter(QObject *obj, QEvent *ev)
void OptionsPopup::actionChanged()
{
- QAction *action = qobject_cast<QAction *>(sender());
+ auto action = qobject_cast<QAction *>(sender());
QTC_ASSERT(action, return);
QCheckBox *checkbox = m_checkboxMap.value(action);
QTC_ASSERT(checkbox, return);
diff --git a/src/plugins/coreplugin/find/findtoolbar.h b/src/plugins/coreplugin/find/findtoolbar.h
index c1c78e6bcc..1095317682 100644
--- a/src/plugins/coreplugin/find/findtoolbar.h
+++ b/src/plugins/coreplugin/find/findtoolbar.h
@@ -51,8 +51,8 @@ public:
explicit OptionsPopup(QWidget *parent);
protected:
- bool event(QEvent *ev);
- bool eventFilter(QObject *obj, QEvent *ev);
+ bool event(QEvent *ev) override;
+ bool eventFilter(QObject *obj, QEvent *ev) override;
private:
void actionChanged();
@@ -77,7 +77,7 @@ public:
Q_DECLARE_FLAGS(OpenFlags, OpenFlag)
explicit FindToolBar(CurrentDocumentFind *currentDocumentFind);
- ~FindToolBar();
+ ~FindToolBar() override;
void readSettings();
void writeSettings();
@@ -91,8 +91,8 @@ public slots:
void setBackward(bool backward);
protected:
- bool focusNextPrevChild(bool next);
- void resizeEvent(QResizeEvent *event);
+ bool focusNextPrevChild(bool next) override;
+ void resizeEvent(QResizeEvent *event) override;
private:
void invokeFindNext();
@@ -147,7 +147,7 @@ private:
void acceptCandidateAndMoveToolBar();
void indicateSearchState(IFindSupport::Result searchState);
- bool eventFilter(QObject *obj, QEvent *event);
+ bool eventFilter(QObject *obj, QEvent *event) override;
void setFindText(const QString &text);
QString getFindText();
QString getReplaceText();
diff --git a/src/plugins/coreplugin/find/findtoolwindow.cpp b/src/plugins/coreplugin/find/findtoolwindow.cpp
index 7bb01b67a3..85897fb8ae 100644
--- a/src/plugins/coreplugin/find/findtoolwindow.cpp
+++ b/src/plugins/coreplugin/find/findtoolwindow.cpp
@@ -41,7 +41,7 @@
using namespace Core;
using namespace Core::Internal;
-static FindToolWindow *m_instance = 0;
+static FindToolWindow *m_instance = nullptr;
static bool validateRegExp(Utils::FancyLineEdit *edit, QString *errorMessage)
{
@@ -63,8 +63,8 @@ static bool validateRegExp(Utils::FancyLineEdit *edit, QString *errorMessage)
FindToolWindow::FindToolWindow(QWidget *parent)
: QWidget(parent),
m_findCompleter(new QCompleter(this)),
- m_currentFilter(0),
- m_configWidget(0)
+ m_currentFilter(nullptr),
+ m_configWidget(nullptr)
{
m_instance = this;
m_ui.setupUi(this);
@@ -93,7 +93,7 @@ FindToolWindow::FindToolWindow(QWidget *parent)
connect(m_ui.searchTerm, &Utils::FancyLineEdit::validChanged,
this, &FindToolWindow::updateButtonStates);
- QVBoxLayout *layout = new QVBoxLayout;
+ auto layout = new QVBoxLayout;
layout->setMargin(0);
layout->setSpacing(0);
m_ui.configWidget->setLayout(layout);
@@ -115,7 +115,7 @@ FindToolWindow *FindToolWindow::instance()
bool FindToolWindow::event(QEvent *event)
{
if (event->type() == QEvent::KeyPress) {
- QKeyEvent *ke = static_cast<QKeyEvent *>(event);
+ auto ke = static_cast<QKeyEvent *>(event);
if ((ke->key() == Qt::Key_Return || ke->key() == Qt::Key_Enter)
&& (ke->modifiers() == Qt::NoModifier || ke->modifiers() == Qt::KeypadModifier)) {
ke->accept();
@@ -130,7 +130,7 @@ bool FindToolWindow::event(QEvent *event)
bool FindToolWindow::eventFilter(QObject *obj, QEvent *event)
{
if (obj == m_ui.searchTerm && event->type() == QEvent::KeyPress) {
- QKeyEvent *ke = static_cast<QKeyEvent *>(event);
+ auto ke = static_cast<QKeyEvent *>(event);
if (ke->key() == Qt::Key_Down) {
if (m_ui.searchTerm->text().isEmpty())
m_findCompleter->setCompletionPrefix(QString());
@@ -247,12 +247,12 @@ void FindToolWindow::setCurrentFilter(int index)
m_ui.configWidget->layout()->addWidget(m_configWidget);
} else {
if (configWidget)
- configWidget->setParent(0);
+ configWidget->setParent(nullptr);
}
}
QWidget *w = m_ui.configWidget;
while (w) {
- QScrollArea *sa = qobject_cast<QScrollArea *>(w);
+ auto sa = qobject_cast<QScrollArea *>(w);
if (sa) {
sa->updateGeometry();
break;
@@ -268,7 +268,7 @@ void FindToolWindow::setCurrentFilter(int index)
void FindToolWindow::acceptAndGetParameters(QString *term, IFindFilter **filter)
{
QTC_ASSERT(filter, return);
- *filter = 0;
+ *filter = nullptr;
Find::updateFindCompletion(m_ui.searchTerm->text());
int index = m_ui.filterList->currentIndex();
QString searchTerm = m_ui.searchTerm->text();
@@ -277,13 +277,13 @@ void FindToolWindow::acceptAndGetParameters(QString *term, IFindFilter **filter)
if (term)
*term = searchTerm;
if (searchTerm.isEmpty() && *filter && !(*filter)->isValid())
- *filter = 0;
+ *filter = nullptr;
}
void FindToolWindow::search()
{
QString term;
- IFindFilter *filter = 0;
+ IFindFilter *filter = nullptr;
acceptAndGetParameters(&term, &filter);
QTC_ASSERT(filter, return);
filter->findAll(term, Find::findFlags());
@@ -292,7 +292,7 @@ void FindToolWindow::search()
void FindToolWindow::replace()
{
QString term;
- IFindFilter *filter = 0;
+ IFindFilter *filter = nullptr;
acceptAndGetParameters(&term, &filter);
QTC_ASSERT(filter, return);
filter->replaceAll(term, Find::findFlags());
diff --git a/src/plugins/coreplugin/find/findtoolwindow.h b/src/plugins/coreplugin/find/findtoolwindow.h
index 10097f1e80..91db0bd4db 100644
--- a/src/plugins/coreplugin/find/findtoolwindow.h
+++ b/src/plugins/coreplugin/find/findtoolwindow.h
@@ -42,8 +42,8 @@ class FindToolWindow : public QWidget
Q_OBJECT
public:
- explicit FindToolWindow(QWidget *parent = 0);
- ~FindToolWindow();
+ explicit FindToolWindow(QWidget *parent = nullptr);
+ ~FindToolWindow() override;
static FindToolWindow *instance();
void setFindFilters(const QList<IFindFilter *> &filters);
@@ -55,8 +55,8 @@ public:
void writeSettings();
protected:
- bool event(QEvent *event);
- bool eventFilter(QObject *obj, QEvent *event);
+ bool event(QEvent *event) override;
+ bool eventFilter(QObject *obj, QEvent *event) override;
private:
void search();
diff --git a/src/plugins/coreplugin/find/highlightscrollbarcontroller.cpp b/src/plugins/coreplugin/find/highlightscrollbarcontroller.cpp
index e9c8b237ae..c760460fac 100644
--- a/src/plugins/coreplugin/find/highlightscrollbarcontroller.cpp
+++ b/src/plugins/coreplugin/find/highlightscrollbarcontroller.cpp
@@ -204,7 +204,7 @@ void HighlightScrollBarOverlay::drawHighlights(QPainter *painter,
const QColor &color = creatorTheme()->color(itColor.key());
const QMap<int, int> &positions = itColor.value();
const auto itPosEnd = positions.constEnd();
- const int firstPos = int(docStart / lineHeight);
+ const auto firstPos = int(docStart / lineHeight);
auto itPos = positions.upperBound(firstPos);
if (itPos != positions.constBegin())
--itPos;
diff --git a/src/plugins/coreplugin/find/ifindsupport.h b/src/plugins/coreplugin/find/ifindsupport.h
index 384caddf27..213e1feb0d 100644
--- a/src/plugins/coreplugin/find/ifindsupport.h
+++ b/src/plugins/coreplugin/find/ifindsupport.h
@@ -40,7 +40,7 @@ public:
enum Result { Found, NotFound, NotYetFound };
IFindSupport() : QObject(nullptr) {}
- ~IFindSupport() override {}
+ ~IFindSupport() override = default;
virtual bool supportsReplace() const = 0;
virtual FindFlags supportedFindFlags() const = 0;
diff --git a/src/plugins/coreplugin/find/itemviewfind.cpp b/src/plugins/coreplugin/find/itemviewfind.cpp
index cc2dd466e5..13174c8cd9 100644
--- a/src/plugins/coreplugin/find/itemviewfind.cpp
+++ b/src/plugins/coreplugin/find/itemviewfind.cpp
@@ -230,7 +230,7 @@ IFindSupport::Result ItemViewFind::find(const QString &searchTxt,
d->m_view->setCurrentIndex(resultIndex);
d->m_view->scrollTo(resultIndex);
if (resultIndex.parent().isValid())
- if (QTreeView *treeView = qobject_cast<QTreeView *>(d->m_view))
+ if (auto treeView = qobject_cast<QTreeView *>(d->m_view))
treeView->expand(resultIndex.parent());
if (wrapped)
*wrapped = anyWrapped;
diff --git a/src/plugins/coreplugin/find/searchresulttreeitemdelegate.cpp b/src/plugins/coreplugin/find/searchresulttreeitemdelegate.cpp
index de67e62b99..81ec2541c6 100644
--- a/src/plugins/coreplugin/find/searchresulttreeitemdelegate.cpp
+++ b/src/plugins/coreplugin/find/searchresulttreeitemdelegate.cpp
@@ -134,7 +134,7 @@ int SearchResultTreeItemDelegate::drawLineNumber(QPainter *painter, const QStyle
opt.palette.setColor(cg, QPalette::Text, Qt::darkGray);
const QStyle *style = QApplication::style();
- const int textMargin = style->pixelMetric(QStyle::PM_FocusFrameHMargin, 0, 0) + 1;
+ const int textMargin = style->pixelMetric(QStyle::PM_FocusFrameHMargin, nullptr, nullptr) + 1;
const QRect rowRect = lineNumberAreaRect.adjusted(-textMargin, 0, textMargin-lineNumberAreaHorizontalPadding, 0);
QItemDelegate::drawDisplay(painter, opt, rowRect, lineText);
diff --git a/src/plugins/coreplugin/find/searchresulttreeitemdelegate.h b/src/plugins/coreplugin/find/searchresulttreeitemdelegate.h
index 99e05c2248..0551e4c8d7 100644
--- a/src/plugins/coreplugin/find/searchresulttreeitemdelegate.h
+++ b/src/plugins/coreplugin/find/searchresulttreeitemdelegate.h
@@ -33,8 +33,8 @@ namespace Internal {
class SearchResultTreeItemDelegate: public QItemDelegate
{
public:
- SearchResultTreeItemDelegate(int tabWidth, QObject *parent = 0);
- void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;
+ SearchResultTreeItemDelegate(int tabWidth, QObject *parent = nullptr);
+ void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
void setTabWidth(int width);
private:
diff --git a/src/plugins/coreplugin/find/searchresulttreeitems.cpp b/src/plugins/coreplugin/find/searchresulttreeitems.cpp
index e87681023b..51d6f9ced8 100644
--- a/src/plugins/coreplugin/find/searchresulttreeitems.cpp
+++ b/src/plugins/coreplugin/find/searchresulttreeitems.cpp
@@ -44,7 +44,7 @@ SearchResultTreeItem::~SearchResultTreeItem()
bool SearchResultTreeItem::isLeaf() const
{
- return childrenCount() == 0 && parent() != 0;
+ return childrenCount() == 0 && parent() != nullptr;
}
Qt::CheckState SearchResultTreeItem::checkState() const
@@ -96,7 +96,7 @@ int SearchResultTreeItem::insertionIndex(const QString &text, SearchResultTreeIt
if (insertionPosition != m_children.end() && (*insertionPosition)->item.text == text)
(*existingItem) = (*insertionPosition);
else
- *existingItem = 0;
+ *existingItem = nullptr;
}
return insertionPosition - m_children.begin();
}
@@ -113,7 +113,7 @@ void SearchResultTreeItem::insertChild(int index, SearchResultTreeItem *child)
void SearchResultTreeItem::insertChild(int index, const SearchResultItem &item)
{
- SearchResultTreeItem *child = new SearchResultTreeItem(item, this);
+ auto child = new SearchResultTreeItem(item, this);
insertChild(index, child);
}
diff --git a/src/plugins/coreplugin/find/searchresulttreeitems.h b/src/plugins/coreplugin/find/searchresulttreeitems.h
index 1709bc11d0..d4aa10f4ca 100644
--- a/src/plugins/coreplugin/find/searchresulttreeitems.h
+++ b/src/plugins/coreplugin/find/searchresulttreeitems.h
@@ -37,7 +37,7 @@ class SearchResultTreeItem
{
public:
explicit SearchResultTreeItem(const SearchResultItem &item = SearchResultItem(),
- SearchResultTreeItem *parent = NULL);
+ SearchResultTreeItem *parent = nullptr);
virtual ~SearchResultTreeItem();
bool isLeaf() const;
diff --git a/src/plugins/coreplugin/find/searchresulttreemodel.cpp b/src/plugins/coreplugin/find/searchresulttreemodel.cpp
index a60b46553c..ea2c5ae9df 100644
--- a/src/plugins/coreplugin/find/searchresulttreemodel.cpp
+++ b/src/plugins/coreplugin/find/searchresulttreemodel.cpp
@@ -37,7 +37,7 @@ using namespace Core::Internal;
SearchResultTreeModel::SearchResultTreeModel(QObject *parent)
: QAbstractItemModel(parent)
- , m_currentParent(0)
+ , m_currentParent(nullptr)
, m_showReplaceUI(false)
, m_editorFontIsUsed(false)
{
@@ -178,7 +178,7 @@ QVariant SearchResultTreeModel::data(const QModelIndex &idx, int role) const
bool SearchResultTreeModel::setData(const QModelIndex &idx, const QVariant &value, int role)
{
if (role == Qt::CheckStateRole) {
- Qt::CheckState checkState = static_cast<Qt::CheckState>(value.toInt());
+ auto checkState = static_cast<Qt::CheckState>(value.toInt());
return setCheckState(idx, checkState);
}
return QAbstractItemModel::setData(idx, value, role);
@@ -308,7 +308,7 @@ QSet<SearchResultTreeItem *> SearchResultTreeModel::addPath(const QStringList &p
QSet<SearchResultTreeItem *> pathNodes;
SearchResultTreeItem *currentItem = m_rootItem;
QModelIndex currentItemIndex = QModelIndex();
- SearchResultTreeItem *partItem = 0;
+ SearchResultTreeItem *partItem = nullptr;
QStringList currentPath;
foreach (const QString &part, path) {
const int insertionIndex = currentItem->insertionIndex(part, &partItem);
@@ -418,7 +418,7 @@ QList<QModelIndex> SearchResultTreeModel::addResults(const QList<SearchResultIte
void SearchResultTreeModel::clear()
{
beginResetModel();
- m_currentParent = NULL;
+ m_currentParent = nullptr;
m_rootItem->clearChildren();
m_editorFontIsUsed = false;
endResetModel();
diff --git a/src/plugins/coreplugin/find/searchresulttreemodel.h b/src/plugins/coreplugin/find/searchresulttreemodel.h
index 9eeb10eec3..a8514e74c3 100644
--- a/src/plugins/coreplugin/find/searchresulttreemodel.h
+++ b/src/plugins/coreplugin/find/searchresulttreemodel.h
@@ -41,8 +41,8 @@ class SearchResultTreeModel : public QAbstractItemModel
Q_OBJECT
public:
- SearchResultTreeModel(QObject *parent = 0);
- ~SearchResultTreeModel();
+ SearchResultTreeModel(QObject *parent = nullptr);
+ ~SearchResultTreeModel() override;
void setShowReplaceUI(bool show);
void setTextEditorFont(const QFont &font, const SearchResultColor &color);
@@ -56,8 +56,8 @@ public:
bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override;
QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
- QModelIndex next(const QModelIndex &idx, bool includeGenerated = false, bool *wrapped = 0) const;
- QModelIndex prev(const QModelIndex &idx, bool includeGenerated = false, bool *wrapped = 0) const;
+ QModelIndex next(const QModelIndex &idx, bool includeGenerated = false, bool *wrapped = nullptr) const;
+ QModelIndex prev(const QModelIndex &idx, bool includeGenerated = false, bool *wrapped = nullptr) const;
QList<QModelIndex> addResults(const QList<SearchResultItem> &items, SearchResult::AddMode mode);
@@ -74,8 +74,8 @@ private:
QSet<SearchResultTreeItem *> addPath(const QStringList &path);
QVariant data(const SearchResultTreeItem *row, int role) const;
bool setCheckState(const QModelIndex &idx, Qt::CheckState checkState, bool firstCall = true);
- QModelIndex nextIndex(const QModelIndex &idx, bool *wrapped = 0) const;
- QModelIndex prevIndex(const QModelIndex &idx, bool *wrapped = 0) const;
+ QModelIndex nextIndex(const QModelIndex &idx, bool *wrapped = nullptr) const;
+ QModelIndex prevIndex(const QModelIndex &idx, bool *wrapped = nullptr) const;
SearchResultTreeItem *treeItemAtIndex(const QModelIndex &idx) const;
SearchResultTreeItem *m_rootItem;
diff --git a/src/plugins/coreplugin/find/searchresulttreeview.cpp b/src/plugins/coreplugin/find/searchresulttreeview.cpp
index a8a3d3ba69..6a9b7067bf 100644
--- a/src/plugins/coreplugin/find/searchresulttreeview.cpp
+++ b/src/plugins/coreplugin/find/searchresulttreeview.cpp
@@ -89,7 +89,7 @@ void SearchResultTreeView::emitJumpToSearchResult(const QModelIndex &index)
void SearchResultTreeView::setTabWidth(int tabWidth)
{
- SearchResultTreeItemDelegate *delegate = static_cast<SearchResultTreeItemDelegate *>(itemDelegate());
+ auto delegate = static_cast<SearchResultTreeItemDelegate *>(itemDelegate());
delegate->setTabWidth(tabWidth);
doItemsLayout();
}
diff --git a/src/plugins/coreplugin/find/searchresulttreeview.h b/src/plugins/coreplugin/find/searchresulttreeview.h
index bf80cba1ad..961940fe01 100644
--- a/src/plugins/coreplugin/find/searchresulttreeview.h
+++ b/src/plugins/coreplugin/find/searchresulttreeview.h
@@ -40,7 +40,7 @@ class SearchResultTreeView : public Utils::TreeView
Q_OBJECT
public:
- explicit SearchResultTreeView(QWidget *parent = 0);
+ explicit SearchResultTreeView(QWidget *parent = nullptr);
void setAutoExpandResults(bool expand);
void setTextEditorFont(const QFont &font, const SearchResultColor &color);
diff --git a/src/plugins/coreplugin/find/searchresultwidget.cpp b/src/plugins/coreplugin/find/searchresultwidget.cpp
index d22531954d..9428a31a1d 100644
--- a/src/plugins/coreplugin/find/searchresultwidget.cpp
+++ b/src/plugins/coreplugin/find/searchresultwidget.cpp
@@ -69,7 +69,7 @@ public:
}
- QSize sizeHint() const
+ QSize sizeHint() const override
{
QSize sh = QLineEdit::minimumSizeHint();
sh.rwidth() += qMax(25 * fontMetrics().width(QLatin1Char('x')),
@@ -81,7 +81,7 @@ public:
SearchResultWidget::SearchResultWidget(QWidget *parent) :
QWidget(parent)
{
- QVBoxLayout *layout = new QVBoxLayout(this);
+ auto layout = new QVBoxLayout(this);
layout->setMargin(0);
layout->setSpacing(0);
setLayout(layout);
@@ -122,7 +122,7 @@ SearchResultWidget::SearchResultWidget(QWidget *parent) :
m_messageWidget->setLineWidth(1);
}
m_messageWidget->setAutoFillBackground(true);
- QHBoxLayout *messageLayout = new QHBoxLayout(m_messageWidget);
+ auto messageLayout = new QHBoxLayout(m_messageWidget);
messageLayout->setMargin(2);
m_messageWidget->setLayout(messageLayout);
QLabel *messageLabel = new QLabel(tr("Search was canceled."));
@@ -134,7 +134,7 @@ SearchResultWidget::SearchResultWidget(QWidget *parent) :
m_searchResultTreeView = new SearchResultTreeView(this);
m_searchResultTreeView->setFrameStyle(QFrame::NoFrame);
m_searchResultTreeView->setAttribute(Qt::WA_MacShowFocusRect, false);
- Aggregation::Aggregate * agg = new Aggregation::Aggregate;
+ auto agg = new Aggregation::Aggregate;
agg->add(m_searchResultTreeView);
agg->add(new ItemViewFind(m_searchResultTreeView,
ItemDataRoles::ResultLineRole));
@@ -144,7 +144,7 @@ SearchResultWidget::SearchResultWidget(QWidget *parent) :
m_infoBarDisplay.setInfoBar(&m_infoBar);
m_descriptionContainer = new QWidget(topFindWidget);
- QHBoxLayout *descriptionLayout = new QHBoxLayout(m_descriptionContainer);
+ auto descriptionLayout = new QHBoxLayout(m_descriptionContainer);
m_descriptionContainer->setLayout(descriptionLayout);
descriptionLayout->setMargin(0);
m_descriptionContainer->setMinimumWidth(200);
@@ -282,7 +282,7 @@ void SearchResultWidget::addResults(const QList<SearchResultItem> &items, Search
emit paused(true);
InfoBarEntry info(sizeWarningId,
tr("The search resulted in more than %n items, do you still want to continue?",
- 0, SEARCHRESULT_WARNING_LIMIT));
+ nullptr, SEARCHRESULT_WARNING_LIMIT));
info.setCancelButtonInfo(tr("Cancel"), [this]() { cancelAfterSizeWarning(); });
info.setCustomButtonInfo(tr("Continue"), [this]() { continueAfterSizeWarning(); });
m_infoBar.addInfo(info);
@@ -499,12 +499,12 @@ QList<SearchResultItem> SearchResultWidget::checkedItems() const
const int fileCount = model->rowCount();
for (int i = 0; i < fileCount; ++i) {
QModelIndex fileIndex = model->index(i, 0);
- SearchResultTreeItem *fileItem = static_cast<SearchResultTreeItem *>(fileIndex.internalPointer());
- QTC_ASSERT(fileItem != 0, continue);
+ auto fileItem = static_cast<SearchResultTreeItem *>(fileIndex.internalPointer());
+ QTC_ASSERT(fileItem != nullptr, continue);
for (int rowIndex = 0; rowIndex < fileItem->childrenCount(); ++rowIndex) {
QModelIndex textIndex = model->index(rowIndex, 0, fileIndex);
- SearchResultTreeItem *rowItem = static_cast<SearchResultTreeItem *>(textIndex.internalPointer());
- QTC_ASSERT(rowItem != 0, continue);
+ auto rowItem = static_cast<SearchResultTreeItem *>(textIndex.internalPointer());
+ QTC_ASSERT(rowItem != nullptr, continue);
if (rowItem->checkState())
result << rowItem->item;
}
@@ -517,7 +517,7 @@ void SearchResultWidget::updateMatchesFoundLabel()
if (m_count == 0)
m_matchesFoundLabel->setText(tr("No matches found."));
else
- m_matchesFoundLabel->setText(tr("%n matches found.", 0, m_count));
+ m_matchesFoundLabel->setText(tr("%n matches found.", nullptr, m_count));
}
} // namespace Internal
diff --git a/src/plugins/coreplugin/find/searchresultwidget.h b/src/plugins/coreplugin/find/searchresultwidget.h
index 5309ed69e1..22193a231e 100644
--- a/src/plugins/coreplugin/find/searchresultwidget.h
+++ b/src/plugins/coreplugin/find/searchresultwidget.h
@@ -49,8 +49,8 @@ class SearchResultWidget : public QWidget
{
Q_OBJECT
public:
- explicit SearchResultWidget(QWidget *parent = 0);
- ~SearchResultWidget();
+ explicit SearchResultWidget(QWidget *parent = nullptr);
+ ~SearchResultWidget() override;
void setInfo(const QString &label, const QString &toolTip, const QString &term);
QWidget *additionalReplaceWidget() const;
diff --git a/src/plugins/coreplugin/find/searchresultwindow.cpp b/src/plugins/coreplugin/find/searchresultwindow.cpp
index 7c790df2fa..7cea0166d1 100644
--- a/src/plugins/coreplugin/find/searchresultwindow.cpp
+++ b/src/plugins/coreplugin/find/searchresultwindow.cpp
@@ -67,7 +67,7 @@ namespace Internal {
setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
}
- QSize sizeHint() const
+ QSize sizeHint() const override
{
if (widget())
return widget()->size();
@@ -109,7 +109,7 @@ namespace Internal {
SearchResultWindowPrivate::SearchResultWindowPrivate(SearchResultWindow *window, QWidget *nsp) :
q(window),
- m_expandCollapseButton(0),
+ m_expandCollapseButton(nullptr),
m_expandCollapseAction(new QAction(tr("Expand All"), window)),
m_spacer(new QWidget),
m_historyLabel(new QLabel(tr("History:"))),
@@ -178,7 +178,7 @@ namespace Internal {
void SearchResultWindowPrivate::moveWidgetToTop()
{
- SearchResultWidget *widget = qobject_cast<SearchResultWidget *>(sender());
+ auto widget = qobject_cast<SearchResultWidget *>(sender());
QTC_ASSERT(widget, return);
int index = m_searchResultWidgets.indexOf(widget);
if (index == 0)
@@ -212,7 +212,7 @@ namespace Internal {
void SearchResultWindowPrivate::popupRequested(bool focus)
{
- SearchResultWidget *widget = qobject_cast<SearchResultWidget *>(sender());
+ auto widget = qobject_cast<SearchResultWidget *>(sender());
QTC_ASSERT(widget, return);
int internalIndex = m_searchResultWidgets.indexOf(widget) + 1/*account for "new search" entry*/;
setCurrentIndex(internalIndex, focus);
@@ -297,7 +297,7 @@ using namespace Core::Internal;
\internal
*/
-SearchResultWindow *SearchResultWindow::m_instance = 0;
+SearchResultWindow *SearchResultWindow::m_instance = nullptr;
/*!
\internal
@@ -316,7 +316,7 @@ SearchResultWindow::~SearchResultWindow()
{
qDeleteAll(d->m_searchResults);
delete d->m_widget;
- d->m_widget = 0;
+ d->m_widget = nullptr;
delete d;
}
diff --git a/src/plugins/coreplugin/findplaceholder.cpp b/src/plugins/coreplugin/findplaceholder.cpp
index 90ade039d5..101ccf87df 100644
--- a/src/plugins/coreplugin/findplaceholder.cpp
+++ b/src/plugins/coreplugin/findplaceholder.cpp
@@ -30,12 +30,12 @@
using namespace Core;
-FindToolBarPlaceHolder *FindToolBarPlaceHolder::m_current = 0;
+FindToolBarPlaceHolder *FindToolBarPlaceHolder::m_current = nullptr;
static QList<FindToolBarPlaceHolder *> g_findToolBarPlaceHolders;
FindToolBarPlaceHolder::FindToolBarPlaceHolder(QWidget *owner, QWidget *parent)
- : QWidget(parent), m_owner(owner), m_subWidget(0), m_lightColored(false)
+ : QWidget(parent), m_owner(owner), m_subWidget(nullptr)
{
g_findToolBarPlaceHolders.append(this);
setLayout(new QVBoxLayout);
@@ -48,10 +48,10 @@ FindToolBarPlaceHolder::~FindToolBarPlaceHolder()
g_findToolBarPlaceHolders.removeOne(this);
if (m_subWidget) {
m_subWidget->setVisible(false);
- m_subWidget->setParent(0);
+ m_subWidget->setParent(nullptr);
}
if (m_current == this)
- m_current = 0;
+ m_current = nullptr;
}
const QList<FindToolBarPlaceHolder *> FindToolBarPlaceHolder::allFindToolbarPlaceHolders()
@@ -82,7 +82,7 @@ void FindToolBarPlaceHolder::setWidget(Internal::FindToolBar *widget)
{
if (m_subWidget) {
m_subWidget->setVisible(false);
- m_subWidget->setParent(0);
+ m_subWidget->setParent(nullptr);
}
m_subWidget = widget;
if (m_subWidget) {
diff --git a/src/plugins/coreplugin/findplaceholder.h b/src/plugins/coreplugin/findplaceholder.h
index 685fae6fb0..a9f8fa9c73 100644
--- a/src/plugins/coreplugin/findplaceholder.h
+++ b/src/plugins/coreplugin/findplaceholder.h
@@ -56,7 +56,7 @@ public:
private:
QWidget *m_owner;
QPointer<Internal::FindToolBar> m_subWidget;
- bool m_lightColored;
+ bool m_lightColored = false;
static FindToolBarPlaceHolder *m_current;
};
diff --git a/src/plugins/coreplugin/generalsettings.cpp b/src/plugins/coreplugin/generalsettings.cpp
index b4eedbb0d9..27788d5711 100644
--- a/src/plugins/coreplugin/generalsettings.cpp
+++ b/src/plugins/coreplugin/generalsettings.cpp
@@ -48,7 +48,7 @@ namespace Internal {
const char settingsKeyDPI[] = "Core/EnableHighDpiScaling";
GeneralSettings::GeneralSettings()
- : m_page(0), m_dialog(0)
+ : m_page(nullptr), m_dialog(nullptr)
{
setId(Constants::SETTINGS_ID_INTERFACE);
setDisplayName(tr("Interface"));
@@ -143,7 +143,7 @@ void GeneralSettings::finish()
{
delete m_widget;
delete m_page;
- m_page = 0;
+ m_page = nullptr;
}
void GeneralSettings::resetInterfaceColor()
diff --git a/src/plugins/coreplugin/generalsettings.h b/src/plugins/coreplugin/generalsettings.h
index 584048bf72..ed0f177532 100644
--- a/src/plugins/coreplugin/generalsettings.h
+++ b/src/plugins/coreplugin/generalsettings.h
@@ -44,9 +44,9 @@ class GeneralSettings : public IOptionsPage
public:
GeneralSettings();
- QWidget *widget();
- void apply();
- void finish();
+ QWidget *widget() override;
+ void apply() override;
+ void finish() override;
private:
void resetInterfaceColor();
diff --git a/src/plugins/coreplugin/generatedfile.cpp b/src/plugins/coreplugin/generatedfile.cpp
index 094d1ab148..7d3c77c8cb 100644
--- a/src/plugins/coreplugin/generatedfile.cpp
+++ b/src/plugins/coreplugin/generatedfile.cpp
@@ -49,19 +49,18 @@ namespace Core {
class GeneratedFilePrivate : public QSharedData
{
public:
- GeneratedFilePrivate() : binary(false) {}
+ GeneratedFilePrivate() = default;
explicit GeneratedFilePrivate(const QString &p);
QString path;
QByteArray contents;
Id editorId;
- bool binary;
+ bool binary = false;
GeneratedFile::Attributes attributes;
};
GeneratedFilePrivate::GeneratedFilePrivate(const QString &p) :
path(QDir::cleanPath(p)),
- binary(false),
- attributes(0)
+ attributes({})
{
}
@@ -75,10 +74,7 @@ GeneratedFile::GeneratedFile(const QString &p) :
{
}
-GeneratedFile::GeneratedFile(const GeneratedFile &rhs) :
- m_d(rhs.m_d)
-{
-}
+GeneratedFile::GeneratedFile(const GeneratedFile &rhs) = default;
GeneratedFile &GeneratedFile::operator=(const GeneratedFile &rhs)
{
@@ -87,9 +83,7 @@ GeneratedFile &GeneratedFile::operator=(const GeneratedFile &rhs)
return *this;
}
-GeneratedFile::~GeneratedFile()
-{
-}
+GeneratedFile::~GeneratedFile() = default;
QString GeneratedFile::path() const
{
diff --git a/src/plugins/coreplugin/generatedfile.h b/src/plugins/coreplugin/generatedfile.h
index 9fb2815837..1cd97d95cf 100644
--- a/src/plugins/coreplugin/generatedfile.h
+++ b/src/plugins/coreplugin/generatedfile.h
@@ -84,6 +84,6 @@ private:
QSharedDataPointer<GeneratedFilePrivate> m_d;
};
-typedef QList<GeneratedFile> GeneratedFiles;
+using GeneratedFiles = QList<GeneratedFile>;
} // namespace Core
diff --git a/src/plugins/coreplugin/helpmanager.cpp b/src/plugins/coreplugin/helpmanager.cpp
index 82ce813904..51a2c426d7 100644
--- a/src/plugins/coreplugin/helpmanager.cpp
+++ b/src/plugins/coreplugin/helpmanager.cpp
@@ -57,10 +57,7 @@ namespace Core {
struct HelpManagerPrivate
{
- HelpManagerPrivate() :
- m_needsSetup(true), m_helpEngine(nullptr), m_collectionWatcher(nullptr)
- {}
-
+ HelpManagerPrivate() = default;
~HelpManagerPrivate();
const QStringList documentationFromInstaller();
@@ -68,9 +65,9 @@ struct HelpManagerPrivate
void writeSettings();
void cleanUpDocumentation();
- bool m_needsSetup;
- QHelpEngineCore *m_helpEngine;
- Utils::FileSystemWatcher *m_collectionWatcher;
+ bool m_needsSetup = true;
+ QHelpEngineCore *m_helpEngine = nullptr;
+ Utils::FileSystemWatcher *m_collectionWatcher = nullptr;
// data for delayed initialization
QSet<QString> m_filesToRegister;
@@ -506,7 +503,7 @@ void HelpManagerPrivate::writeSettings()
namespace Core {
-HelpManager *HelpManager::instance() { return 0; }
+HelpManager *HelpManager::instance() { return nullptr; }
QString HelpManager::collectionFilePath() { return QString(); }
@@ -542,7 +539,7 @@ void HelpManager::handleHelpRequest(const QUrl &, HelpManager::HelpViewerLocatio
void HelpManager::handleHelpRequest(const QString &, HelpViewerLocation) {}
HelpManager::HelpManager(QObject *) {}
-HelpManager::~HelpManager() {}
+HelpManager::~HelpManager() = default;
void HelpManager::aboutToShutdown() {}
void HelpManager::setupHelpManager() {}
diff --git a/src/plugins/coreplugin/helpmanager.h b/src/plugins/coreplugin/helpmanager.h
index 466f0feff3..33ba4f07a1 100644
--- a/src/plugins/coreplugin/helpmanager.h
+++ b/src/plugins/coreplugin/helpmanager.h
@@ -56,7 +56,7 @@ public:
ExternalHelpAlways = 3
};
- typedef QHash<QString, QStringList> Filters;
+ using Filters = QHash<QString, QStringList>;
static HelpManager *instance();
static QString collectionFilePath();
diff --git a/src/plugins/coreplugin/icontext.h b/src/plugins/coreplugin/icontext.h
index 01daa739b5..d7bb022c5b 100644
--- a/src/plugins/coreplugin/icontext.h
+++ b/src/plugins/coreplugin/icontext.h
@@ -40,7 +40,7 @@ namespace Core {
class CORE_EXPORT Context
{
public:
- Context() {}
+ Context() = default;
explicit Context(Id c1) { add(c1); }
Context(Id c1, Id c2) { add(c1); add(c2); }
@@ -51,7 +51,7 @@ public:
Id at(int i) const { return d.at(i); }
// FIXME: Make interface slimmer.
- typedef QList<Id>::const_iterator const_iterator;
+ using const_iterator = QList<Id>::const_iterator;
const_iterator begin() const { return d.begin(); }
const_iterator end() const { return d.end(); }
int indexOf(Id c) const { return d.indexOf(c); }
diff --git a/src/plugins/coreplugin/icore.cpp b/src/plugins/coreplugin/icore.cpp
index 359cb7012e..f88f0f8df4 100644
--- a/src/plugins/coreplugin/icore.cpp
+++ b/src/plugins/coreplugin/icore.cpp
@@ -337,8 +337,8 @@ ICore::ICore(MainWindow *mainwindow)
ICore::~ICore()
{
- m_instance = 0;
- m_mainwindow = 0;
+ m_instance = nullptr;
+ m_mainwindow = nullptr;
}
void ICore::showNewItemDialog(const QString &title,
@@ -459,6 +459,28 @@ QString ICore::libexecPath()
return QDir::cleanPath(QApplication::applicationDirPath() + '/' + RELATIVE_LIBEXEC_PATH);
}
+static QString clangIncludePath(const QString &clangVersion)
+{
+ return "/lib/clang/" + clangVersion + "/include";
+}
+
+QString ICore::clangIncludeDirectory(const QString &clangVersion, const QString &clangResourceDirectory)
+{
+ QDir dir(libexecPath() + "/clang" + clangIncludePath(clangVersion));
+ if (!dir.exists() || !QFileInfo(dir, "stdint.h").exists())
+ dir = QDir(clangResourceDirectory);
+ return QDir::toNativeSeparators(dir.canonicalPath());
+}
+
+QString ICore::clangExecutable(const QString &clangBinDirectory)
+{
+ const QString hostExeSuffix(QTC_HOST_EXE_SUFFIX);
+ QFileInfo executable(libexecPath() + "/clang/bin/clang" + hostExeSuffix);
+ if (!executable.exists())
+ executable = QFileInfo(clangBinDirectory + "/clang" + hostExeSuffix);
+ return QDir::toNativeSeparators(executable.canonicalFilePath());
+}
+
static QString compilerString()
{
#if defined(Q_CC_CLANG) // must be before GNU, because clang claims to be GNU too
@@ -509,6 +531,11 @@ QWidget *ICore::currentContextWidget()
return context ? context->widget() : nullptr;
}
+IContext *ICore::contextObject(QWidget *widget)
+{
+ return m_mainwindow->contextObject(widget);
+}
+
QMainWindow *ICore::mainWindow()
{
diff --git a/src/plugins/coreplugin/icore.h b/src/plugins/coreplugin/icore.h
index 4d53fedf91..37ce9b05dd 100644
--- a/src/plugins/coreplugin/icore.h
+++ b/src/plugins/coreplugin/icore.h
@@ -97,6 +97,9 @@ public:
static QString installerResourcePath();
static QString documentationPath();
static QString libexecPath();
+ static QString clangExecutable(const QString &clangBinDirectory);
+ static QString clangIncludeDirectory(const QString &clangVersion,
+ const QString &clangResourceDirectory);
static QString versionString();
static QString buildCompatibilityString();
@@ -109,6 +112,7 @@ public:
static IContext *currentContextObject();
static QWidget *currentContextWidget();
+ static IContext *contextObject(QWidget *widget);
// Adds and removes additional active contexts, these contexts are appended
// to the currently active contexts.
static void updateAdditionalContexts(const Context &remove, const Context &add,
@@ -127,7 +131,8 @@ public:
SwitchMode = 1,
CanContainLineAndColumnNumbers = 2,
/// Stop loading once the first file fails to load
- StopOnLoadFail = 4
+ StopOnLoadFail = 4,
+ SwitchSplitIfAlreadyVisible = 8
};
static void openFiles(const QStringList &fileNames, OpenFilesFlags flags = None);
diff --git a/src/plugins/coreplugin/id.cpp b/src/plugins/coreplugin/id.cpp
index 90a755f123..6e081746ae 100644
--- a/src/plugins/coreplugin/id.cpp
+++ b/src/plugins/coreplugin/id.cpp
@@ -56,9 +56,7 @@ namespace Core {
class StringHolder
{
public:
- StringHolder()
- : n(0), str(0)
- {}
+ StringHolder() = default;
StringHolder(const char *s, int length)
: n(length), str(s)
@@ -72,8 +70,8 @@ public:
h &= 0x0fffffff;
}
}
- int n;
- const char *str;
+ int n = 0;
+ const char *str = nullptr;
quintptr h;
};
diff --git a/src/plugins/coreplugin/id.h b/src/plugins/coreplugin/id.h
index af56c32b10..fc912da1b0 100644
--- a/src/plugins/coreplugin/id.h
+++ b/src/plugins/coreplugin/id.h
@@ -40,8 +40,9 @@ namespace Core {
class CORE_EXPORT Id
{
public:
- Id() : m_id(0) {}
+ Id() = default;
Id(const char *name); // Good to use.
+ Id(const QLatin1String &) = delete;
Id withSuffix(int suffix) const;
Id withSuffix(const char *suffix) const;
@@ -72,11 +73,9 @@ public:
static QStringList toStringList(const QSet<Id> &ids);
private:
- // Intentionally unimplemented
- Id(const QLatin1String &) = delete;
explicit Id(quintptr uid) : m_id(uid) {}
- quintptr m_id;
+ quintptr m_id = 0;
};
inline uint qHash(Id id) { return static_cast<uint>(id.uniqueIdentifier()); }
diff --git a/src/plugins/coreplugin/idocumentfactory.cpp b/src/plugins/coreplugin/idocumentfactory.cpp
index 016d562d8b..26ef65f608 100644
--- a/src/plugins/coreplugin/idocumentfactory.cpp
+++ b/src/plugins/coreplugin/idocumentfactory.cpp
@@ -49,7 +49,7 @@ const QList<IDocumentFactory *> IDocumentFactory::allDocumentFactories()
IDocument *IDocumentFactory::open(const QString &filename)
{
- QTC_ASSERT(m_opener, return 0);
+ QTC_ASSERT(m_opener, return nullptr);
return m_opener(filename);
}
diff --git a/src/plugins/coreplugin/idocumentfactory.h b/src/plugins/coreplugin/idocumentfactory.h
index 9e203870f6..7534528c1f 100644
--- a/src/plugins/coreplugin/idocumentfactory.h
+++ b/src/plugins/coreplugin/idocumentfactory.h
@@ -46,7 +46,7 @@ public:
static const QList<IDocumentFactory *> allDocumentFactories();
- typedef std::function<IDocument *(const QString &fileName)> Opener;
+ using Opener = std::function<IDocument *(const QString &fileName)>;
IDocument *open(const QString &filename);
QStringList mimeTypes() const { return m_mimeTypes; }
diff --git a/src/plugins/coreplugin/inavigationwidgetfactory.cpp b/src/plugins/coreplugin/inavigationwidgetfactory.cpp
index eb7c78993d..7fd39cccb7 100644
--- a/src/plugins/coreplugin/inavigationwidgetfactory.cpp
+++ b/src/plugins/coreplugin/inavigationwidgetfactory.cpp
@@ -91,7 +91,6 @@ static QList<INavigationWidgetFactory *> g_navigationWidgetFactories;
Creates a \l{Core::NavigationViewFactory}.
*/
INavigationWidgetFactory::INavigationWidgetFactory()
- : m_priority(0)
{
g_navigationWidgetFactories.append(this);
}
diff --git a/src/plugins/coreplugin/inavigationwidgetfactory.h b/src/plugins/coreplugin/inavigationwidgetfactory.h
index b39786cfa6..f69687e517 100644
--- a/src/plugins/coreplugin/inavigationwidgetfactory.h
+++ b/src/plugins/coreplugin/inavigationwidgetfactory.h
@@ -78,7 +78,7 @@ public:
private:
QString m_displayName;
- int m_priority;
+ int m_priority = 0;
Id m_id;
QKeySequence m_activationSequence;
};
diff --git a/src/plugins/coreplugin/infobar.cpp b/src/plugins/coreplugin/infobar.cpp
index 7efd7220cb..3ca512c554 100644
--- a/src/plugins/coreplugin/infobar.cpp
+++ b/src/plugins/coreplugin/infobar.cpp
@@ -202,7 +202,7 @@ void InfoBarDisplay::setInfoBar(InfoBar *infoBar)
void InfoBarDisplay::infoBarDestroyed()
{
- m_infoBar = 0;
+ m_infoBar = nullptr;
// Calling update() here causes a complicated crash on shutdown.
// So instead we rely on the view now being either destroyed (in which case it
// will delete the widgets itself) or setInfoBar() being called explicitly.
@@ -233,10 +233,10 @@ void InfoBarDisplay::update()
infoWidget->setLineWidth(1);
infoWidget->setAutoFillBackground(true);
- QHBoxLayout *hbox = new QHBoxLayout;
+ auto hbox = new QHBoxLayout;
hbox->setMargin(2);
- auto *vbox = new QVBoxLayout(infoWidget);
+ auto vbox = new QVBoxLayout(infoWidget);
vbox->setMargin(0);
vbox->addLayout(hbox);
@@ -250,7 +250,7 @@ void InfoBarDisplay::update()
vbox->addWidget(detailsWidget);
}
- auto *showDetailsButton = new QToolButton;
+ auto showDetailsButton = new QToolButton;
showDetailsButton->setCheckable(true);
showDetailsButton->setChecked(m_isShowingDetailsWidget);
showDetailsButton->setText(tr("&Show Details"));
@@ -271,7 +271,7 @@ void InfoBarDisplay::update()
}
if (!info.buttonText.isEmpty()) {
- QToolButton *infoWidgetButton = new QToolButton;
+ auto infoWidgetButton = new QToolButton;
infoWidgetButton->setText(info.buttonText);
connect(infoWidgetButton, &QAbstractButton::clicked, [info]() { info.m_buttonCallBack(); });
@@ -279,7 +279,7 @@ void InfoBarDisplay::update()
}
const Id id = info.id;
- QToolButton *infoWidgetSuppressButton = 0;
+ QToolButton *infoWidgetSuppressButton = nullptr;
if (info.globalSuppression == InfoBarEntry::GlobalSuppressionEnabled) {
infoWidgetSuppressButton = new QToolButton;
infoWidgetSuppressButton->setText(tr("Do Not Show Again"));
diff --git a/src/plugins/coreplugin/iversioncontrol.cpp b/src/plugins/coreplugin/iversioncontrol.cpp
index 678e4ecc8c..befa60fbab 100644
--- a/src/plugins/coreplugin/iversioncontrol.cpp
+++ b/src/plugins/coreplugin/iversioncontrol.cpp
@@ -87,7 +87,7 @@ ShellCommand *IVersionControl::createInitialCheckoutCommand(const QString &url,
Q_UNUSED(baseDirectory);
Q_UNUSED(localName);
Q_UNUSED(extraArgs);
- return 0;
+ return nullptr;
}
QString IVersionControl::vcsTopic(const QString &topLevel)
@@ -106,9 +106,7 @@ IVersionControl::OpenSupportMode IVersionControl::openSupportMode(const QString
return NoOpen;
}
-IVersionControl::TopicCache::~TopicCache()
-{
-}
+IVersionControl::TopicCache::~TopicCache() = default;
/*!
Returns the topic for repository under \a topLevel.
@@ -175,7 +173,7 @@ bool TestVersionControl::managesFile(const QString &workingDirectory, const QStr
QFileInfo fi(workingDirectory + QLatin1Char('/') + fileName);
QString dir = fi.absolutePath();
- if (!managesDirectory(dir, 0))
+ if (!managesDirectory(dir, nullptr))
return false;
QString file = fi.absoluteFilePath();
return m_managedFiles.contains(file);
diff --git a/src/plugins/coreplugin/iversioncontrol.h b/src/plugins/coreplugin/iversioncontrol.h
index 6386487e70..cdb780f7fc 100644
--- a/src/plugins/coreplugin/iversioncontrol.h
+++ b/src/plugins/coreplugin/iversioncontrol.h
@@ -241,7 +241,7 @@ class CORE_EXPORT TestVersionControl : public IVersionControl
Q_OBJECT
public:
TestVersionControl(Id id, const QString &name) :
- m_id(id), m_displayName(name), m_dirCount(0), m_fileCount(0)
+ m_id(id), m_displayName(name)
{ }
~TestVersionControl() override;
@@ -273,8 +273,8 @@ private:
QString m_displayName;
QHash<QString, QString> m_managedDirs;
QSet<QString> m_managedFiles;
- mutable int m_dirCount;
- mutable int m_fileCount;
+ mutable int m_dirCount = 0;
+ mutable int m_fileCount = 0;
};
} // namespace Core
diff --git a/src/plugins/coreplugin/iwizardfactory.cpp b/src/plugins/coreplugin/iwizardfactory.cpp
index 2b74a17118..ce784e9e79 100644
--- a/src/plugins/coreplugin/iwizardfactory.cpp
+++ b/src/plugins/coreplugin/iwizardfactory.cpp
@@ -151,7 +151,7 @@ namespace {
static QList<IFeatureProvider *> s_providerList;
QList<IWizardFactory *> s_allFactories;
QList<IWizardFactory::FactoryCreator> s_factoryCreators;
-QAction *s_inspectWizardAction = 0;
+QAction *s_inspectWizardAction = nullptr;
bool s_areFactoriesLoaded = false;
bool s_isWizardRunning = false;
QWidget *s_currentWizard = nullptr;
@@ -270,7 +270,7 @@ QString IWizardFactory::runPath(const QString &defaultPath)
Utils::Wizard *IWizardFactory::runWizard(const QString &path, QWidget *parent, Id platform, const QVariantMap &variables)
{
- QTC_ASSERT(!s_isWizardRunning, return 0);
+ QTC_ASSERT(!s_isWizardRunning, return nullptr);
s_isWizardRunning = true;
ICore::updateNewItemDialogState();
diff --git a/src/plugins/coreplugin/iwizardfactory.h b/src/plugins/coreplugin/iwizardfactory.h
index 4ab761d792..77339199ae 100644
--- a/src/plugins/coreplugin/iwizardfactory.h
+++ b/src/plugins/coreplugin/iwizardfactory.h
@@ -92,7 +92,7 @@ public:
virtual bool isAvailable(Id platformId) const;
QSet<Id> supportedPlatforms() const;
- typedef std::function<QList<IWizardFactory *>()> FactoryCreator;
+ using FactoryCreator = std::function<QList<IWizardFactory *>()>;
static void registerFactoryCreator(const FactoryCreator &creator);
// Utility to find all registered wizards
diff --git a/src/plugins/coreplugin/jsexpander.cpp b/src/plugins/coreplugin/jsexpander.cpp
index 0c44512497..effa3464cc 100644
--- a/src/plugins/coreplugin/jsexpander.cpp
+++ b/src/plugins/coreplugin/jsexpander.cpp
@@ -101,7 +101,7 @@ JsExpander::JsExpander()
JsExpander::~JsExpander()
{
delete d;
- d = 0;
+ d = nullptr;
}
} // namespace Core
diff --git a/src/plugins/coreplugin/locator/basefilefilter.cpp b/src/plugins/coreplugin/locator/basefilefilter.cpp
index 2053528687..27cec55045 100644
--- a/src/plugins/coreplugin/locator/basefilefilter.cpp
+++ b/src/plugins/coreplugin/locator/basefilefilter.cpp
@@ -67,8 +67,7 @@ public:
} // Internal
} // Core
-BaseFileFilter::Iterator::~Iterator()
-{}
+BaseFileFilter::Iterator::~Iterator() = default;
BaseFileFilter::BaseFileFilter()
: d(new Internal::BaseFileFilterPrivate)
diff --git a/src/plugins/coreplugin/locator/directoryfilter.cpp b/src/plugins/coreplugin/locator/directoryfilter.cpp
index 5bcfd9eb45..645bae42d3 100644
--- a/src/plugins/coreplugin/locator/directoryfilter.cpp
+++ b/src/plugins/coreplugin/locator/directoryfilter.cpp
@@ -212,7 +212,7 @@ void DirectoryFilter::refresh(QFutureInterface<void> &future)
if (future.isProgressUpdateNeeded()
|| future.progressValue() == 0 /*workaround for regression in Qt*/) {
future.setProgressValueAndText(subDirIterator.currentProgress(),
- tr("%1 filter update: %n files", 0, filesFound.size()).arg(displayName()));
+ tr("%1 filter update: %n files", nullptr, filesFound.size()).arg(displayName()));
}
}
diff --git a/src/plugins/coreplugin/locator/executefilter.cpp b/src/plugins/coreplugin/locator/executefilter.cpp
index 810ed8e8c2..b85bf4ff28 100644
--- a/src/plugins/coreplugin/locator/executefilter.cpp
+++ b/src/plugins/coreplugin/locator/executefilter.cpp
@@ -85,7 +85,7 @@ void ExecuteFilter::accept(LocatorFilterEntry selection,
Q_UNUSED(newText)
Q_UNUSED(selectionStart)
Q_UNUSED(selectionLength)
- ExecuteFilter *p = const_cast<ExecuteFilter *>(this);
+ auto p = const_cast<ExecuteFilter *>(this);
const QString value = selection.displayName.trimmed();
const int index = m_commandHistory.indexOf(value);
diff --git a/src/plugins/coreplugin/locator/ilocatorfilter.cpp b/src/plugins/coreplugin/locator/ilocatorfilter.cpp
index 5ba268b5e3..79aee8f637 100644
--- a/src/plugins/coreplugin/locator/ilocatorfilter.cpp
+++ b/src/plugins/coreplugin/locator/ilocatorfilter.cpp
@@ -167,8 +167,8 @@ bool ILocatorFilter::openConfigDialog(QWidget *parent, bool &needsRefresh)
QDialog dialog(parent, Qt::WindowTitleHint | Qt::WindowSystemMenuHint);
dialog.setWindowTitle(msgConfigureDialogTitle());
- QVBoxLayout *vlayout = new QVBoxLayout(&dialog);
- QHBoxLayout *hlayout = new QHBoxLayout;
+ auto vlayout = new QVBoxLayout(&dialog);
+ auto hlayout = new QHBoxLayout;
QLineEdit *shortcutEdit = new QLineEdit(shortcutString());
QCheckBox *includeByDefault = new QCheckBox(msgIncludeByDefault());
includeByDefault->setToolTip(msgIncludeByDefaultToolTip());
diff --git a/src/plugins/coreplugin/locator/javascriptfilter.h b/src/plugins/coreplugin/locator/javascriptfilter.h
index feaf326036..a11b9c0f21 100644
--- a/src/plugins/coreplugin/locator/javascriptfilter.h
+++ b/src/plugins/coreplugin/locator/javascriptfilter.h
@@ -43,9 +43,9 @@ class JavaScriptFilter : public Core::ILocatorFilter
Q_OBJECT
public:
JavaScriptFilter();
- ~JavaScriptFilter();
+ ~JavaScriptFilter() override;
- virtual void prepareSearch(const QString &entry) override;
+ void prepareSearch(const QString &entry) override;
QList<Core::LocatorFilterEntry> matchesFor(QFutureInterface<Core::LocatorFilterEntry> &future,
const QString &entry) override;
void accept(Core::LocatorFilterEntry selection, QString *newText,
diff --git a/src/plugins/coreplugin/locator/locator.cpp b/src/plugins/coreplugin/locator/locator.cpp
index dcfdba10ab..bdc1664c26 100644
--- a/src/plugins/coreplugin/locator/locator.cpp
+++ b/src/plugins/coreplugin/locator/locator.cpp
@@ -196,7 +196,7 @@ void Locator::updateFilterActions()
continue;
Id filterId = filter->id();
Id actionId = filter->actionId();
- QAction *action = 0;
+ QAction *action = nullptr;
if (!actionCopy.contains(filterId)) {
// register new action
action = new QAction(filter->displayName(), this);
diff --git a/src/plugins/coreplugin/locator/locator_test.cpp b/src/plugins/coreplugin/locator/locator_test.cpp
index 68a65b88cd..8d6e4453a2 100644
--- a/src/plugins/coreplugin/locator/locator_test.cpp
+++ b/src/plugins/coreplugin/locator/locator_test.cpp
@@ -55,7 +55,7 @@ public:
class ReferenceData
{
public:
- ReferenceData() {}
+ ReferenceData() = default;
ReferenceData(const QString &searchText, const ResultDataList &results)
: searchText(searchText), results(results) {}
diff --git a/src/plugins/coreplugin/locator/locatorfiltertest.cpp b/src/plugins/coreplugin/locator/locatorfiltertest.cpp
index 889f3ba040..8318e008c1 100644
--- a/src/plugins/coreplugin/locator/locatorfiltertest.cpp
+++ b/src/plugins/coreplugin/locator/locatorfiltertest.cpp
@@ -41,9 +41,7 @@ BasicLocatorFilterTest::BasicLocatorFilterTest(ILocatorFilter *filter) : m_filte
{
}
-BasicLocatorFilterTest::~BasicLocatorFilterTest()
-{
-}
+BasicLocatorFilterTest::~BasicLocatorFilterTest() = default;
QList<LocatorFilterEntry> BasicLocatorFilterTest::matchesFor(const QString &searchText)
{
@@ -57,9 +55,7 @@ QList<LocatorFilterEntry> BasicLocatorFilterTest::matchesFor(const QString &sear
return locatorSearch.results();
}
-ResultData::ResultData()
-{
-}
+ResultData::ResultData() = default;
ResultData::ResultData(const QString &textColumn1, const QString &textColumn2)
: textColumn1(textColumn1), textColumn2(textColumn2)
diff --git a/src/plugins/coreplugin/locator/locatorfiltertest.h b/src/plugins/coreplugin/locator/locatorfiltertest.h
index 2841f72643..1b7a074bb7 100644
--- a/src/plugins/coreplugin/locator/locatorfiltertest.h
+++ b/src/plugins/coreplugin/locator/locatorfiltertest.h
@@ -51,7 +51,7 @@ private:
class CORE_EXPORT ResultData
{
public:
- typedef QList<ResultData> ResultDataList;
+ using ResultDataList = QList<ResultData>;
ResultData();
ResultData(const QString &textColumn1, const QString &textColumn2);
@@ -67,7 +67,7 @@ public:
QString textColumn2;
};
-typedef ResultData::ResultDataList ResultDataList;
+using ResultDataList = ResultData::ResultDataList;
} // namespace Tests
} // namespace Core
diff --git a/src/plugins/coreplugin/locator/locatormanager.cpp b/src/plugins/coreplugin/locator/locatormanager.cpp
index 01c43b261a..0ff25b02cd 100644
--- a/src/plugins/coreplugin/locator/locatormanager.cpp
+++ b/src/plugins/coreplugin/locator/locatormanager.cpp
@@ -34,6 +34,8 @@
#include <extensionsystem/pluginmanager.h>
#include <utils/qtcassert.h>
+#include <QApplication>
+
using namespace Core::Internal;
namespace Core {
@@ -95,4 +97,15 @@ QWidget *LocatorManager::createLocatorInputWidget(QWidget *window)
return locatorWidget;
}
+bool LocatorManager::locatorHasFocus()
+{
+ QWidget *w = qApp->focusWidget();
+ while (w) {
+ if (qobject_cast<LocatorWidget *>(w))
+ return true;
+ w = w->parentWidget();
+ }
+ return false;
+}
+
} // namespace Core
diff --git a/src/plugins/coreplugin/locator/locatormanager.h b/src/plugins/coreplugin/locator/locatormanager.h
index ffc7493cd0..5d58da418a 100644
--- a/src/plugins/coreplugin/locator/locatormanager.h
+++ b/src/plugins/coreplugin/locator/locatormanager.h
@@ -44,6 +44,8 @@ public:
static void show(const QString &text, int selectionStart = -1, int selectionLength = 0);
static QWidget *createLocatorInputWidget(QWidget *window);
+
+ static bool locatorHasFocus();
};
} // namespace Core
diff --git a/src/plugins/coreplugin/locator/locatorsettingspage.cpp b/src/plugins/coreplugin/locator/locatorsettingspage.cpp
index 638448f103..d1b2df2183 100644
--- a/src/plugins/coreplugin/locator/locatorsettingspage.cpp
+++ b/src/plugins/coreplugin/locator/locatorsettingspage.cpp
@@ -161,7 +161,7 @@ QVariant CategoryItem::data(int column, int role) const
}
LocatorSettingsPage::LocatorSettingsPage(Locator *plugin)
- : m_plugin(plugin), m_widget(0)
+ : m_plugin(plugin), m_widget(nullptr)
{
setId(Constants::FILTER_OPTIONS_PAGE);
setDisplayName(QCoreApplication::translate("Locator", Constants::FILTER_OPTIONS_PAGE));
diff --git a/src/plugins/coreplugin/locator/locatorsettingspage.h b/src/plugins/coreplugin/locator/locatorsettingspage.h
index bf2736e644..b2ce1a507b 100644
--- a/src/plugins/coreplugin/locator/locatorsettingspage.h
+++ b/src/plugins/coreplugin/locator/locatorsettingspage.h
@@ -52,9 +52,9 @@ class LocatorSettingsPage : public IOptionsPage
public:
explicit LocatorSettingsPage(Locator *plugin);
- QWidget *widget();
- void apply();
- void finish();
+ QWidget *widget() override;
+ void apply() override;
+ void finish() override;
private:
void updateButtonStates();
diff --git a/src/plugins/coreplugin/locator/locatorwidget.cpp b/src/plugins/coreplugin/locator/locatorwidget.cpp
index 55be82072a..33a66f77ec 100644
--- a/src/plugins/coreplugin/locator/locatorwidget.cpp
+++ b/src/plugins/coreplugin/locator/locatorwidget.cpp
@@ -115,7 +115,7 @@ class CompletionList : public Utils::TreeView
public:
CompletionList(QWidget *parent = nullptr);
- void setModel(QAbstractItemModel *model);
+ void setModel(QAbstractItemModel *model) override;
void resizeHeaders();
@@ -124,8 +124,8 @@ public:
void showCurrentItemToolTip();
- void keyPressEvent(QKeyEvent *event);
- bool eventFilter(QObject *watched, QEvent *event);
+ void keyPressEvent(QKeyEvent *event) override;
+ bool eventFilter(QObject *watched, QEvent *event) override;
private:
QMetaObject::Connection m_updateSizeConnection;
@@ -276,7 +276,7 @@ void CompletionList::setModel(QAbstractItemModel *newModel)
};
if (model()) {
- disconnect(model(), 0, this, 0);
+ disconnect(model(), nullptr, this, nullptr);
}
QTreeView::setModel(newModel);
if (newModel) {
@@ -506,7 +506,7 @@ void CompletionList::keyPressEvent(QKeyEvent *event)
bool CompletionList::eventFilter(QObject *watched, QEvent *event)
{
if (watched == this && event->type() == QEvent::ShortcutOverride) {
- QKeyEvent *ke = static_cast<QKeyEvent *>(event);
+ auto ke = static_cast<QKeyEvent *>(event);
switch (ke->key()) {
case Qt::Key_Escape:
if (!ke->modifiers()) {
@@ -537,7 +537,7 @@ LocatorWidget::LocatorWidget(Locator *locator) :
setSizePolicy(sizePolicy);
setMinimumSize(QSize(200, 0));
- QHBoxLayout *layout = new QHBoxLayout(this);
+ auto layout = new QHBoxLayout(this);
setLayout(layout);
layout->setMargin(0);
layout->addWidget(m_fileLineEdit);
@@ -592,6 +592,8 @@ LocatorWidget::LocatorWidget(Locator *locator) :
updatePlaceholderText(locateCmd);
}
+ connect(qApp, &QApplication::focusChanged, this, &LocatorWidget::updatePreviousFocusWidget);
+
connect(locator, &Locator::filtersChanged, this, &LocatorWidget::updateFilterList);
updateFilterList();
}
@@ -620,10 +622,32 @@ void LocatorWidget::updateFilterList()
m_filterMenu->addAction(m_configureAction);
}
+bool LocatorWidget::isInMainWindow() const
+{
+ return window() == ICore::mainWindow();
+}
+
+void LocatorWidget::updatePreviousFocusWidget(QWidget *previous, QWidget *current)
+{
+ const auto isInLocator = [this](QWidget *w) { return w == this || isAncestorOf(w); };
+ if (isInLocator(current) && !isInLocator(previous))
+ m_previousFocusWidget = previous;
+}
+
+static void resetFocus(QPointer<QWidget> previousFocus, bool isInMainWindow)
+{
+ if (previousFocus) {
+ previousFocus->setFocus();
+ ICore::raiseWindow(previousFocus);
+ } else if (isInMainWindow) {
+ ModeManager::setFocusToCurrentMode();
+ }
+}
+
bool LocatorWidget::eventFilter(QObject *obj, QEvent *event)
{
if (obj == m_fileLineEdit && event->type() == QEvent::ShortcutOverride) {
- QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
+ auto keyEvent = static_cast<QKeyEvent *>(event);
switch (keyEvent->key()) {
case Qt::Key_P:
case Qt::Key_N:
@@ -638,7 +662,7 @@ bool LocatorWidget::eventFilter(QObject *obj, QEvent *event)
if (QToolTip::isVisible())
QToolTip::hideText();
- QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
+ auto keyEvent = static_cast<QKeyEvent *>(event);
switch (keyEvent->key()) {
case Qt::Key_PageUp:
case Qt::Key_PageDown:
@@ -683,7 +707,7 @@ bool LocatorWidget::eventFilter(QObject *obj, QEvent *event)
break;
}
} else if (obj == m_fileLineEdit && event->type() == QEvent::KeyRelease) {
- QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
+ auto keyEvent = static_cast<QKeyEvent *>(event);
if (m_possibleToolTipRequest) {
m_possibleToolTipRequest = false;
if ((keyEvent->key() == Qt::Key_Alt)
@@ -695,18 +719,23 @@ bool LocatorWidget::eventFilter(QObject *obj, QEvent *event)
} else if (obj == m_fileLineEdit && event->type() == QEvent::FocusOut) {
emit lostFocus();
} else if (obj == m_fileLineEdit && event->type() == QEvent::FocusIn) {
- QFocusEvent *fev = static_cast<QFocusEvent *>(event);
+ auto fev = static_cast<QFocusEvent *>(event);
if (fev->reason() != Qt::ActiveWindowFocusReason)
showPopupNow();
} else if (obj == this && event->type() == QEvent::ParentChange) {
emit parentChanged();
} else if (obj == this && event->type() == QEvent::ShortcutOverride) {
- QKeyEvent *ke = static_cast<QKeyEvent *>(event);
+ auto ke = static_cast<QKeyEvent *>(event);
switch (ke->key()) {
case Qt::Key_Escape:
if (!ke->modifiers()) {
event->accept();
- QTimer::singleShot(0, this, &LocatorWidget::setFocusToCurrentMode);
+ QTimer::singleShot(0,
+ this,
+ [focus = m_previousFocusWidget,
+ isInMainWindow = isInMainWindow()] {
+ resetFocus(focus, isInMainWindow);
+ });
return true;
}
break;
@@ -723,11 +752,6 @@ bool LocatorWidget::eventFilter(QObject *obj, QEvent *event)
return QWidget::eventFilter(obj, event);
}
-void LocatorWidget::setFocusToCurrentMode()
-{
- ModeManager::setFocusToCurrentMode();
-}
-
void LocatorWidget::showPopupDelayed()
{
m_updateRequested = true;
@@ -858,7 +882,7 @@ void LocatorWidget::acceptEntry(int row)
entry.filter->accept(entry, &newText, &selectionStart, &selectionLength);
if (newText.isEmpty()) {
emit hidePopup();
- m_fileLineEdit->clearFocus();
+ resetFocus(m_previousFocusWidget, isInMainWindow());
} else {
showText(newText, selectionStart, selectionLength);
}
diff --git a/src/plugins/coreplugin/locator/locatorwidget.h b/src/plugins/coreplugin/locator/locatorwidget.h
index 59805a76e2..6d5a3a2a74 100644
--- a/src/plugins/coreplugin/locator/locatorwidget.h
+++ b/src/plugins/coreplugin/locator/locatorwidget.h
@@ -79,10 +79,11 @@ private:
void showConfigureDialog();
void addSearchResults(int firstIndex, int endIndex);
void handleSearchFinished();
- void setFocusToCurrentMode();
void updateFilterList();
+ bool isInMainWindow() const;
- bool eventFilter(QObject *obj, QEvent *event);
+ void updatePreviousFocusWidget(QWidget *previous, QWidget *current);
+ bool eventFilter(QObject *obj, QEvent *event) override;
void updateCompletionList(const QString &text);
QList<ILocatorFilter*> filtersFor(const QString &text, QString &searchText);
@@ -103,6 +104,7 @@ private:
QWidget *m_progressIndicator = nullptr;
QTimer m_showProgressTimer;
Utils::optional<int> m_rowRequestedForAccept;
+ QPointer<QWidget> m_previousFocusWidget;
};
class LocatorPopup : public QWidget
diff --git a/src/plugins/coreplugin/mainwindow.cpp b/src/plugins/coreplugin/mainwindow.cpp
index cd76507098..68af2e6f89 100644
--- a/src/plugins/coreplugin/mainwindow.cpp
+++ b/src/plugins/coreplugin/mainwindow.cpp
@@ -192,7 +192,7 @@ MainWindow::MainWindow() :
statusBar()->setProperty("p_styled", true);
auto dropSupport = new DropSupport(this, [](QDropEvent *event, DropSupport *) {
- return event->source() == 0; // only accept drops from the "outside" (e.g. file manager)
+ return event->source() == nullptr; // only accept drops from the "outside" (e.g. file manager)
});
connect(dropSupport, &DropSupport::filesDropped,
this, &MainWindow::openDroppedFiles);
@@ -795,15 +795,10 @@ void MainWindow::openFile()
static IDocumentFactory *findDocumentFactory(const QList<IDocumentFactory*> &fileFactories,
const QFileInfo &fi)
{
- const MimeType mt = Utils::mimeTypeForFile(fi);
- if (mt.isValid()) {
- const QString typeName = mt.name();
- foreach (IDocumentFactory *factory, fileFactories) {
- if (factory->mimeTypes().contains(typeName))
- return factory;
- }
- }
- return 0;
+ const QString typeName = Utils::mimeTypeForFile(fi).name();
+ return Utils::findOrDefault(fileFactories, [typeName](IDocumentFactory *f) {
+ return f->mimeTypes().contains(typeName);
+ });
}
/*! Either opens \a fileNames with editors or loads a project.
@@ -845,6 +840,8 @@ IDocument *MainWindow::openFiles(const QStringList &fileNames,
QFlags<EditorManager::OpenEditorFlag> emFlags;
if (flags & ICore::CanContainLineAndColumnNumbers)
emFlags |= EditorManager::CanContainLineAndColumnNumber;
+ if (flags & ICore::SwitchSplitIfAlreadyVisible)
+ emFlags |= EditorManager::SwitchSplitIfAlreadyVisible;
IEditor *editor = EditorManager::openEditor(absoluteFilePath, Id(), emFlags);
if (!editor) {
if (flags & ICore::StopOnLoadFail)
@@ -953,7 +950,7 @@ void MainWindow::updateContextObject(const QList<IContext *> &context)
if (debugMainWindow) {
qDebug() << "new context objects =" << context;
foreach (IContext *c, context)
- qDebug() << (c ? c->widget() : 0) << (c ? c->widget()->metaObject()->className() : 0);
+ qDebug() << (c ? c->widget() : nullptr) << (c ? c->widget()->metaObject()->className() : nullptr);
}
}
@@ -1152,7 +1149,7 @@ void MainWindow::destroyVersionDialog()
{
if (m_versionDialog) {
m_versionDialog->deleteLater();
- m_versionDialog = 0;
+ m_versionDialog = nullptr;
}
}
diff --git a/src/plugins/coreplugin/manhattanstyle.cpp b/src/plugins/coreplugin/manhattanstyle.cpp
index add7b8c753..78e819a9c3 100644
--- a/src/plugins/coreplugin/manhattanstyle.cpp
+++ b/src/plugins/coreplugin/manhattanstyle.cpp
@@ -142,7 +142,7 @@ ManhattanStyle::ManhattanStyle(const QString &baseStyleName)
ManhattanStyle::~ManhattanStyle()
{
delete d;
- d = 0;
+ d = nullptr;
}
QPixmap ManhattanStyle::generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &pixmap, const QStyleOption *opt) const
@@ -398,7 +398,7 @@ void ManhattanStyle::drawPrimitive(PrimitiveElement element, const QStyleOption
QRect oldRect;
QRect newRect;
if (widget && (element == PE_PanelButtonTool) && !animating) {
- QWidget *w = const_cast<QWidget *> (widget);
+ auto w = const_cast<QWidget *> (widget);
int oldState = w->property("_q_stylestate").toInt();
oldRect = w->property("_q_stylerect").toRect();
newRect = w->rect();
@@ -422,7 +422,7 @@ void ManhattanStyle::drawPrimitive(PrimitiveElement element, const QStyleOption
opt.state = (QStyle::State)oldState;
opt.state |= State_Animating;
startImage.fill(0);
- Transition *t = new Transition;
+ auto t = new Transition;
t->setWidget(w);
QPainter startPainter(&startImage);
if (!anim) {
@@ -630,7 +630,7 @@ void ManhattanStyle::drawControl(ControlElement element, const QStyleOption *opt
switch (element) {
case CE_MenuItem:
painter->save();
- if (const QStyleOptionMenuItem *mbi = qstyleoption_cast<const QStyleOptionMenuItem *>(option)) {
+ if (const auto mbi = qstyleoption_cast<const QStyleOptionMenuItem *>(option)) {
const bool enabled = mbi->state & State_Enabled;
QStyleOptionMenuItem item = *mbi;
item.rect = mbi->rect;
@@ -649,7 +649,7 @@ void ManhattanStyle::drawControl(ControlElement element, const QStyleOption *opt
case CE_MenuBarItem:
painter->save();
- if (const QStyleOptionMenuItem *mbi = qstyleoption_cast<const QStyleOptionMenuItem *>(option)) {
+ if (const auto mbi = qstyleoption_cast<const QStyleOptionMenuItem *>(option)) {
const bool act = mbi->state & (State_Sunken | State_Selected);
const bool dis = !(mbi->state & State_Enabled);
@@ -687,7 +687,7 @@ void ManhattanStyle::drawControl(ControlElement element, const QStyleOption *opt
break;
case CE_ComboBoxLabel:
- if (const QStyleOptionComboBox *cb = qstyleoption_cast<const QStyleOptionComboBox *>(option)) {
+ if (const auto cb = qstyleoption_cast<const QStyleOptionComboBox *>(option)) {
if (panelWidget(widget)) {
painter->save();
QRect editRect = subControlRect(CC_ComboBox, cb, SC_ComboBoxEditField, widget);
@@ -872,7 +872,7 @@ void ManhattanStyle::drawComplexControl(ComplexControl control, const QStyleOpti
QRect rect = option->rect;
switch (control) {
case CC_ToolButton:
- if (const QStyleOptionToolButton *toolbutton = qstyleoption_cast<const QStyleOptionToolButton *>(option)) {
+ if (const auto toolbutton = qstyleoption_cast<const QStyleOptionToolButton *>(option)) {
bool reverse = option->direction == Qt::RightToLeft;
bool drawborder = (widget && widget->property("showborder").toBool());
@@ -946,7 +946,7 @@ void ManhattanStyle::drawComplexControl(ComplexControl control, const QStyleOpti
break;
case CC_ComboBox:
- if (const QStyleOptionComboBox *cb = qstyleoption_cast<const QStyleOptionComboBox *>(option)) {
+ if (const auto cb = qstyleoption_cast<const QStyleOptionComboBox *>(option)) {
painter->save();
bool isEmpty = cb->currentText.isEmpty() && cb->currentIcon.isNull();
bool reverse = option->direction == Qt::RightToLeft;
diff --git a/src/plugins/coreplugin/menubarfilter.cpp b/src/plugins/coreplugin/menubarfilter.cpp
index 6a82d8676e..69c178ae94 100644
--- a/src/plugins/coreplugin/menubarfilter.cpp
+++ b/src/plugins/coreplugin/menubarfilter.cpp
@@ -28,6 +28,8 @@
#include "actionmanager/actioncontainer.h"
#include "actionmanager/actionmanager.h"
#include "coreconstants.h"
+#include "icore.h"
+#include "locator/locatormanager.h"
#include <utils/algorithm.h>
#include <utils/qtcassert.h>
@@ -38,6 +40,13 @@
#include <QRegularExpression>
#include <QTimer>
+QT_BEGIN_NAMESPACE
+uint qHash(const QPointer<QAction> &p, uint seed)
+{
+ return qHash(p.data(), seed);
+}
+QT_END_NAMESPACE
+
using namespace Core::Internal;
using namespace Core;
@@ -46,6 +55,10 @@ MenuBarFilter::MenuBarFilter()
setId("Actions from the menu");
setDisplayName(tr("Actions from the Menu"));
setShortcutString("t");
+ connect(ICore::instance(), &ICore::contextAboutToChange, this, [this] {
+ if (LocatorManager::locatorHasFocus())
+ updateEnabledActionCache();
+ });
}
static const QList<QAction *> menuBarActions()
@@ -59,17 +72,8 @@ QList<LocatorFilterEntry> MenuBarFilter::matchesFor(QFutureInterface<LocatorFilt
const QString &entry)
{
Q_UNUSED(future);
- static const QString separators = ". >/";
- static const QRegularExpression seperatorRegExp(QString("[%1]").arg(separators));
- QList<LocatorFilterEntry> entries;
- QString normalized = entry;
- normalized.replace(seperatorRegExp, separators.at(0));
- const QStringList entryPath = normalized.split(separators.at(0), QString::SkipEmptyParts);
- QVector<const QMenu *> processedMenus;
- for (QAction* action : menuBarActions())
- entries << matchesForAction(action, entryPath, QStringList(), processedMenus);
-
- return entries;
+ Q_UNUSED(entry);
+ return std::move(m_entries);
}
void MenuBarFilter::accept(LocatorFilterEntry selection, QString *newText,
@@ -97,7 +101,7 @@ QList<LocatorFilterEntry> MenuBarFilter::matchesForAction(QAction *action,
QVector<const QMenu *> &processedMenus)
{
QList<LocatorFilterEntry> entries;
- if (!action->isEnabled())
+ if (!m_enabledActions.contains(action))
return entries;
const QString text = Utils::stripAccelerator(action->text());
if (QMenu *menu = action->menu()) {
@@ -158,9 +162,36 @@ static void requestMenuUpdate(const QAction* action)
}
}
+void MenuBarFilter::updateEnabledActionCache()
+{
+ m_enabledActions.clear();
+ QList<QAction *> queue = menuBarActions();
+ for (QAction *action : qAsConst(queue))
+ requestMenuUpdate(action);
+ while (!queue.isEmpty()) {
+ QAction *action = queue.takeFirst();
+ if (action->isEnabled()) {
+ m_enabledActions.insert(action);
+ if (QMenu *menu = action->menu()) {
+ if (menu->isEnabled())
+ queue.append(menu->actions());
+ }
+ }
+ }
+}
+
void Core::Internal::MenuBarFilter::prepareSearch(const QString &entry)
{
Q_UNUSED(entry);
- for (const QAction *action : menuBarActions())
+ static const QString separators = ". >/";
+ static const QRegularExpression seperatorRegExp(QString("[%1]").arg(separators));
+ QString normalized = entry;
+ normalized.replace(seperatorRegExp, separators.at(0));
+ const QStringList entryPath = normalized.split(separators.at(0), QString::SkipEmptyParts);
+ m_entries.clear();
+ QVector<const QMenu *> processedMenus;
+ for (QAction* action : menuBarActions()) {
requestMenuUpdate(action);
+ m_entries << matchesForAction(action, entryPath, QStringList(), processedMenus);
+ }
}
diff --git a/src/plugins/coreplugin/menubarfilter.h b/src/plugins/coreplugin/menubarfilter.h
index c7b137e6a9..39633aa6f1 100644
--- a/src/plugins/coreplugin/menubarfilter.h
+++ b/src/plugins/coreplugin/menubarfilter.h
@@ -27,6 +27,10 @@
#include <coreplugin/locator/ilocatorfilter.h>
+#include <QAction>
+#include <QPointer>
+#include <QSet>
+
QT_BEGIN_NAMESPACE
class QAction;
class QMenu;
@@ -52,7 +56,10 @@ private:
const QStringList &entryPath,
const QStringList &path,
QVector<const QMenu *> &processedMenus);
+ void updateEnabledActionCache();
+ QList<LocatorFilterEntry> m_entries;
+ QSet<QPointer<QAction>> m_enabledActions;
};
} // namespace Internal
diff --git a/src/plugins/coreplugin/messagemanager.cpp b/src/plugins/coreplugin/messagemanager.cpp
index f8d2b97506..c4bf4269a4 100644
--- a/src/plugins/coreplugin/messagemanager.cpp
+++ b/src/plugins/coreplugin/messagemanager.cpp
@@ -30,8 +30,8 @@
using namespace Core;
-static MessageManager *m_instance = 0;
-Internal::MessageOutputWindow *m_messageOutputWindow = 0;
+static MessageManager *m_instance = nullptr;
+Internal::MessageOutputWindow *m_messageOutputWindow = nullptr;
MessageManager *MessageManager::instance()
{
@@ -54,7 +54,7 @@ void MessageManager::showOutputPane(Core::MessageManager::PrintToOutputPaneFlags
MessageManager::MessageManager()
{
m_instance = this;
- m_messageOutputWindow = 0;
+ m_messageOutputWindow = nullptr;
qRegisterMetaType<MessageManager::PrintToOutputPaneFlags>();
}
@@ -64,7 +64,7 @@ MessageManager::~MessageManager()
ExtensionSystem::PluginManager::removeObject(m_messageOutputWindow);
delete m_messageOutputWindow;
}
- m_instance = 0;
+ m_instance = nullptr;
}
void MessageManager::init()
diff --git a/src/plugins/coreplugin/messageoutputwindow.cpp b/src/plugins/coreplugin/messageoutputwindow.cpp
index 3675b23685..35a1bd50be 100644
--- a/src/plugins/coreplugin/messageoutputwindow.cpp
+++ b/src/plugins/coreplugin/messageoutputwindow.cpp
@@ -46,7 +46,7 @@ MessageOutputWindow::MessageOutputWindow()
QColor activeHighlightedText = p.color(QPalette::Active, QPalette::HighlightedText);
p.setColor(QPalette::HighlightedText, activeHighlightedText);
m_widget->setPalette(p);
- Aggregation::Aggregate *agg = new Aggregation::Aggregate;
+ auto agg = new Aggregation::Aggregate;
agg->add(m_widget);
agg->add(new BaseTextFind(m_widget));
}
diff --git a/src/plugins/coreplugin/mimetypemagicdialog.cpp b/src/plugins/coreplugin/mimetypemagicdialog.cpp
index 7968560562..5c1566d022 100644
--- a/src/plugins/coreplugin/mimetypemagicdialog.cpp
+++ b/src/plugins/coreplugin/mimetypemagicdialog.cpp
@@ -45,10 +45,7 @@ static Utils::Internal::MimeMagicRule::Type typeValue(int i)
}
MimeTypeMagicDialog::MimeTypeMagicDialog(QWidget *parent) :
- QDialog(parent),
- m_customRangeStart(0),
- m_customRangeEnd(0),
- m_customPriority(50)
+ QDialog(parent)
{
ui.setupUi(this);
setWindowTitle(tr("Add Magic Header"));
diff --git a/src/plugins/coreplugin/mimetypemagicdialog.h b/src/plugins/coreplugin/mimetypemagicdialog.h
index 5f5bf8bfe6..f2140b28f6 100644
--- a/src/plugins/coreplugin/mimetypemagicdialog.h
+++ b/src/plugins/coreplugin/mimetypemagicdialog.h
@@ -36,8 +36,7 @@ class MagicData
{
public:
MagicData()
- : m_rule(Utils::Internal::MimeMagicRule::String, QByteArray(" "), 0, 0),
- m_priority(0)
+ : m_rule(Utils::Internal::MimeMagicRule::String, QByteArray(" "), 0, 0)
{
}
@@ -53,14 +52,14 @@ public:
static QByteArray normalizedMask(const Utils::Internal::MimeMagicRule &rule);
Utils::Internal::MimeMagicRule m_rule;
- int m_priority;
+ int m_priority = 0;
};
class MimeTypeMagicDialog : public QDialog
{
Q_DECLARE_TR_FUNCTIONS(Core::Internal::MimeTypeMagicDialog)
public:
- explicit MimeTypeMagicDialog(QWidget *parent = 0);
+ explicit MimeTypeMagicDialog(QWidget *parent = nullptr);
void setMagicData(const MagicData &data);
MagicData magicData() const;
@@ -69,12 +68,12 @@ private:
void setToRecommendedValues();
void applyRecommended(bool checked);
void validateAccept();
- Utils::Internal::MimeMagicRule createRule(QString *errorMessage = 0) const;
+ Utils::Internal::MimeMagicRule createRule(QString *errorMessage = nullptr) const;
Ui::MimeTypeMagicDialog ui;
- int m_customRangeStart;
- int m_customRangeEnd;
- int m_customPriority;
+ int m_customRangeStart = 0;
+ int m_customRangeEnd = 0;
+ int m_customPriority = 50;
};
} // Internal
diff --git a/src/plugins/coreplugin/mimetypesettings.cpp b/src/plugins/coreplugin/mimetypesettings.cpp
index 2e4272ab87..a5750d13c7 100644
--- a/src/plugins/coreplugin/mimetypesettings.cpp
+++ b/src/plugins/coreplugin/mimetypesettings.cpp
@@ -30,6 +30,7 @@
#include "ui_mimetypesettingspage.h"
#include <coreplugin/editormanager/editormanager.h>
#include <coreplugin/editormanager/ieditorfactory.h>
+#include <coreplugin/editormanager/ieditorfactory_p.h>
#include <coreplugin/editormanager/iexternaleditor.h>
#include <utils/algorithm.h>
@@ -48,6 +49,7 @@
#include <QScopedPointer>
#include <QSet>
#include <QStringList>
+#include <QStyledItemDelegate>
#include <QSortFilterProxyModel>
static const char kModifiedMimeTypesFile[] = "/mimetypes/modifiedmimetypes.xml";
@@ -66,6 +68,18 @@ static const char matchMaskAttributeC[] = "mask";
namespace Core {
namespace Internal {
+class MimeEditorDelegate : public QStyledItemDelegate
+{
+public:
+ QWidget *createEditor(QWidget *parent,
+ const QStyleOptionViewItem &option,
+ const QModelIndex &index) const final;
+ void setEditorData(QWidget *editor, const QModelIndex &index) const final;
+ void setModelData(QWidget *editor,
+ QAbstractItemModel *model,
+ const QModelIndex &index) const final;
+};
+
class UserMimeType
{
public:
@@ -81,20 +95,30 @@ class MimeTypeSettingsModel : public QAbstractTableModel
Q_OBJECT
public:
- MimeTypeSettingsModel(QObject *parent = 0)
+ enum class Role {
+ DefaultHandler = Qt::UserRole
+ };
+
+ MimeTypeSettingsModel(QObject *parent = nullptr)
: QAbstractTableModel(parent) {}
- virtual ~MimeTypeSettingsModel() {}
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
int columnCount(const QModelIndex &parent = QModelIndex()) const override;
QVariant headerData(int section, Qt::Orientation orientation,
int role = Qt::DisplayRole) const override;
QVariant data(const QModelIndex &modelIndex, int role = Qt::DisplayRole) const override;
+ bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) final;
+ Qt::ItemFlags flags(const QModelIndex &index) const final;
void load();
+ QList<IEditorFactory *> handlersForMimeType(const Utils::MimeType &mimeType) const;
+ IEditorFactory *defaultHandlerForMimeType(const Utils::MimeType &mimeType) const;
+ void resetUserDefaults();
+
QList<Utils::MimeType> m_mimeTypes;
- QHash<QString, QString> m_handlersByMimeType;
+ mutable QHash<Utils::MimeType, QList<IEditorFactory *>> m_handlersByMimeType;
+ QHash<Utils::MimeType, IEditorFactory *> m_userDefault;
};
int MimeTypeSettingsModel::rowCount(const QModelIndex &) const
@@ -125,39 +149,89 @@ QVariant MimeTypeSettingsModel::data(const QModelIndex &modelIndex, int role) co
const int column = modelIndex.column();
if (role == Qt::DisplayRole) {
- const QString &type = m_mimeTypes.at(modelIndex.row()).name();
- if (column == 0)
- return type;
- else
- return m_handlersByMimeType.value(type);
+ const Utils::MimeType &type = m_mimeTypes.at(modelIndex.row());
+ if (column == 0) {
+ return type.name();
+ } else {
+ IEditorFactory *defaultHandler = defaultHandlerForMimeType(type);
+ return defaultHandler ? defaultHandler->displayName() : QString();
+ }
+ } else if (role == Qt::EditRole) {
+ return qVariantFromValue(handlersForMimeType(m_mimeTypes.at(modelIndex.row())));
+ } else if (role == int(Role::DefaultHandler)) {
+ return qVariantFromValue(defaultHandlerForMimeType(m_mimeTypes.at(modelIndex.row())));
+ } else if (role == Qt::FontRole) {
+ if (column == 1) {
+ const Utils::MimeType &type = m_mimeTypes.at(modelIndex.row());
+ if (m_userDefault.contains(type)) {
+ QFont font = QGuiApplication::font();
+ font.setItalic(true);
+ return font;
+ }
+ }
+ return QVariant();
}
return QVariant();
}
+bool MimeTypeSettingsModel::setData(const QModelIndex &index, const QVariant &value, int role)
+{
+ if (role != int(Role::DefaultHandler) || index.column() != 1)
+ return false;
+ auto factory = value.value<IEditorFactory *>();
+ QTC_ASSERT(factory, return false);
+ const int row = index.row();
+ QTC_ASSERT(row >= 0 && row < m_mimeTypes.size(), return false);
+ const Utils::MimeType mimeType = m_mimeTypes.at(row);
+ const QList<IEditorFactory *> handlers = handlersForMimeType(mimeType);
+ QTC_ASSERT(handlers.contains(factory), return false);
+ if (handlers.first() == factory) // selection is the default anyhow
+ m_userDefault.remove(mimeType);
+ else
+ m_userDefault.insert(mimeType, factory);
+ emit dataChanged(index, index);
+ return true;
+}
+
+Qt::ItemFlags MimeTypeSettingsModel::flags(const QModelIndex &index) const
+{
+ if (index.column() == 0 || handlersForMimeType(m_mimeTypes.at(index.row())).size() < 2)
+ return QAbstractTableModel::flags(index);
+ return QAbstractTableModel::flags(index) | Qt::ItemIsEditable;
+}
+
void MimeTypeSettingsModel::load()
{
beginResetModel();
m_mimeTypes = Utils::allMimeTypes();
+ m_userDefault = Core::Internal::userPreferredEditorFactories();
Utils::sort(m_mimeTypes, [](const Utils::MimeType &a, const Utils::MimeType &b) {
return a.name().compare(b.name(), Qt::CaseInsensitive) < 0;
});
+ m_handlersByMimeType.clear();
+ endResetModel();
+}
- foreach (const Utils::MimeType &mimeType, m_mimeTypes) {
- QString value;
- const QList<IEditorFactory *> factories =
- EditorManager::editorFactories(mimeType);
- if (!factories.isEmpty()) {
- value = factories.front()->displayName();
- } else {
- const QList<IExternalEditor *> externalEditors =
- EditorManager::externalEditors(mimeType);
- if (!externalEditors.isEmpty())
- value = externalEditors.front()->displayName();
- else
- value = tr("Undefined");
- }
- m_handlersByMimeType.insert(mimeType.name(), value);
- }
+QList<IEditorFactory *> MimeTypeSettingsModel::handlersForMimeType(
+ const Utils::MimeType &mimeType) const
+{
+ if (!m_handlersByMimeType.contains(mimeType))
+ m_handlersByMimeType.insert(mimeType, IEditorFactory::defaultEditorFactories(mimeType));
+ return m_handlersByMimeType.value(mimeType);
+}
+
+IEditorFactory *MimeTypeSettingsModel::defaultHandlerForMimeType(const Utils::MimeType &mimeType) const
+{
+ if (m_userDefault.contains(mimeType))
+ return m_userDefault.value(mimeType);
+ const QList<IEditorFactory *> handlers = handlersForMimeType(mimeType);
+ return handlers.isEmpty() ? nullptr : handlers.first();
+}
+
+void MimeTypeSettingsModel::resetUserDefaults()
+{
+ beginResetModel();
+ m_userDefault.clear();
endResetModel();
}
@@ -168,7 +242,7 @@ class MimeTypeSettingsPrivate : public QObject
public:
MimeTypeSettingsPrivate();
- virtual ~MimeTypeSettingsPrivate();
+ ~MimeTypeSettingsPrivate() override;
void configureUi(QWidget *w);
@@ -190,7 +264,7 @@ private:
static void writeUserModifiedMimeTypes();
public:
- typedef QHash<QString, UserMimeType> UserMimeTypeHash; // name -> mime type
+ using UserMimeTypeHash = QHash<QString, UserMimeType>; // name -> mime type
static const QChar kSemiColon;
static UserMimeTypeHash readUserModifiedMimeTypes();
static void applyUserModifiedMimeTypes(const UserMimeTypeHash &mimeTypes);
@@ -202,6 +276,7 @@ public:
QString m_filterPattern;
Ui::MimeTypeSettingsPage m_ui;
QPointer<QWidget> m_widget;
+ MimeEditorDelegate m_delegate;
};
const QChar MimeTypeSettingsPrivate::kSemiColon(QLatin1Char(';'));
@@ -218,8 +293,7 @@ MimeTypeSettingsPrivate::MimeTypeSettingsPrivate()
this, &MimeTypeSettingsPrivate::writeUserModifiedMimeTypes);
}
-MimeTypeSettingsPrivate::~MimeTypeSettingsPrivate()
-{}
+MimeTypeSettingsPrivate::~MimeTypeSettingsPrivate() = default;
void MimeTypeSettingsPrivate::configureUi(QWidget *w)
{
@@ -230,6 +304,7 @@ void MimeTypeSettingsPrivate::configureUi(QWidget *w)
connect(m_ui.filterLineEdit, &QLineEdit::textChanged,
this, &MimeTypeSettingsPrivate::setFilterPattern);
m_ui.mimeTypesTreeView->setModel(m_filterModel);
+ m_ui.mimeTypesTreeView->setItemDelegate(&m_delegate);
new Utils::HeaderViewStretcher(m_ui.mimeTypesTreeView->header(), 1);
@@ -248,6 +323,8 @@ void MimeTypeSettingsPrivate::configureUi(QWidget *w)
this, &MimeTypeSettingsPrivate::editMagicHeader);
connect(m_ui.resetButton, &QPushButton::clicked,
this, &MimeTypeSettingsPrivate::resetMimeTypes);
+ connect(m_ui.resetHandlersButton, &QPushButton::clicked,
+ m_model, &MimeTypeSettingsModel::resetUserDefaults);
connect(m_ui.magicHeadersTreeWidget, &QTreeWidget::itemSelectionChanged,
this, &MimeTypeSettingsPrivate::updatePatternEditAndMagicButtons);
@@ -315,7 +392,7 @@ void MimeTypeSettingsPrivate::addMagicHeaderRow(const MagicData &data)
void MimeTypeSettingsPrivate::editMagicHeaderRowData(const int row, const MagicData &data)
{
- QTreeWidgetItem *item = new QTreeWidgetItem;
+ auto item = new QTreeWidgetItem;
item->setText(0, QString::fromUtf8(data.m_rule.value()));
item->setText(1, QString::fromLatin1(Utils::Internal::MimeMagicRule::typeName(data.m_rule.type())));
item->setText(2, QString::fromLatin1("%1:%2").arg(data.m_rule.startPos()).arg(data.m_rule.endPos()));
@@ -581,6 +658,7 @@ QWidget *MimeTypeSettings::widget()
void MimeTypeSettings::apply()
{
MimeTypeSettingsPrivate::applyUserModifiedMimeTypes(d->m_pendingModifiedMimeTypes);
+ Core::Internal::setUserPreferredEditorFactories(d->m_model->m_userDefault);
d->m_pendingModifiedMimeTypes.clear();
d->m_model->load();
}
@@ -598,6 +676,39 @@ void MimeTypeSettings::restoreSettings()
MimeTypeSettingsPrivate::applyUserModifiedMimeTypes(mimetypes);
}
+QWidget *MimeEditorDelegate::createEditor(QWidget *parent,
+ const QStyleOptionViewItem &option,
+ const QModelIndex &index) const
+{
+ Q_UNUSED(option)
+ Q_UNUSED(index)
+ return new QComboBox(parent);
+}
+
+void MimeEditorDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
+{
+ auto box = static_cast<QComboBox *>(editor);
+ const auto factories = index.model()->data(index, Qt::EditRole).value<QList<IEditorFactory *>>();
+ for (IEditorFactory *factory : factories)
+ box->addItem(factory->displayName(), qVariantFromValue(factory));
+ int currentIndex = factories.indexOf(
+ index.model()
+ ->data(index, int(MimeTypeSettingsModel::Role::DefaultHandler))
+ .value<IEditorFactory *>());
+ if (QTC_GUARD(currentIndex != -1))
+ box->setCurrentIndex(currentIndex);
+}
+
+void MimeEditorDelegate::setModelData(QWidget *editor,
+ QAbstractItemModel *model,
+ const QModelIndex &index) const
+{
+ auto box = static_cast<QComboBox *>(editor);
+ model->setData(index,
+ box->currentData(Qt::UserRole),
+ int(MimeTypeSettingsModel::Role::DefaultHandler));
+}
+
} // Internal
} // Core
diff --git a/src/plugins/coreplugin/mimetypesettings.h b/src/plugins/coreplugin/mimetypesettings.h
index 8153ecbb1b..3d9059bbfe 100644
--- a/src/plugins/coreplugin/mimetypesettings.h
+++ b/src/plugins/coreplugin/mimetypesettings.h
@@ -37,12 +37,12 @@ class MimeTypeSettings : public IOptionsPage
Q_OBJECT
public:
- MimeTypeSettings(QObject *parent = 0);
- virtual ~MimeTypeSettings();
+ MimeTypeSettings(QObject *parent = nullptr);
+ ~MimeTypeSettings() override;
- virtual QWidget *widget();
- virtual void apply();
- virtual void finish();
+ QWidget *widget() override;
+ void apply() override;
+ void finish() override;
static void restoreSettings();
private:
diff --git a/src/plugins/coreplugin/mimetypesettingspage.ui b/src/plugins/coreplugin/mimetypesettingspage.ui
index 8d1afd9bbe..e3d5731b2f 100644
--- a/src/plugins/coreplugin/mimetypesettingspage.ui
+++ b/src/plugins/coreplugin/mimetypesettingspage.ui
@@ -27,24 +27,7 @@
<string>Registered MIME Types</string>
</property>
<layout class="QGridLayout" name="gridLayout">
- <item row="0" column="0" colspan="2">
- <widget class="QLineEdit" name="filterLineEdit">
- <property name="placeholderText">
- <string>Filter</string>
- </property>
- </widget>
- </item>
- <item row="2" column="0">
- <widget class="QPushButton" name="resetButton">
- <property name="toolTip">
- <string>Reset all to default.</string>
- </property>
- <property name="text">
- <string>Reset All</string>
- </property>
- </widget>
- </item>
- <item row="2" column="1">
+ <item row="2" column="2">
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
@@ -57,8 +40,18 @@
</property>
</spacer>
</item>
- <item row="1" column="0" colspan="2">
+ <item row="0" column="0" colspan="3">
+ <widget class="QLineEdit" name="filterLineEdit">
+ <property name="placeholderText">
+ <string>Filter</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0" colspan="3">
<widget class="QTreeView" name="mimeTypesTreeView">
+ <property name="editTriggers">
+ <set>QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed|QAbstractItemView::SelectedClicked</set>
+ </property>
<property name="rootIsDecorated">
<bool>false</bool>
</property>
@@ -67,6 +60,23 @@
</property>
</widget>
</item>
+ <item row="2" column="0">
+ <widget class="QPushButton" name="resetButton">
+ <property name="toolTip">
+ <string>Reset all to default.</string>
+ </property>
+ <property name="text">
+ <string>Reset MIME Types</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <widget class="QPushButton" name="resetHandlersButton">
+ <property name="text">
+ <string>Reset Handlers</string>
+ </property>
+ </widget>
+ </item>
</layout>
</widget>
<widget class="QGroupBox" name="detailsGroupBox">
diff --git a/src/plugins/coreplugin/minisplitter.cpp b/src/plugins/coreplugin/minisplitter.cpp
index 64ee062ca1..6bac3ffdfc 100644
--- a/src/plugins/coreplugin/minisplitter.cpp
+++ b/src/plugins/coreplugin/minisplitter.cpp
@@ -46,8 +46,8 @@ public:
setAttribute(Qt::WA_MouseNoMask, true);
}
protected:
- void resizeEvent(QResizeEvent *event);
- void paintEvent(QPaintEvent *event);
+ void resizeEvent(QResizeEvent *event) override;
+ void paintEvent(QPaintEvent *event) override;
private:
bool m_lightColored;
diff --git a/src/plugins/coreplugin/modemanager.cpp b/src/plugins/coreplugin/modemanager.cpp
index cab2458037..be69338372 100644
--- a/src/plugins/coreplugin/modemanager.cpp
+++ b/src/plugins/coreplugin/modemanager.cpp
@@ -80,7 +80,7 @@ struct ModeManagerPrivate
};
static ModeManagerPrivate *d;
-static ModeManager *m_instance = 0;
+static ModeManager *m_instance = nullptr;
static int indexOf(Id id)
{
@@ -121,11 +121,11 @@ ModeManager::ModeManager(Internal::MainWindow *mainWindow,
ModeManager::~ModeManager()
{
delete d;
- d = 0;
- m_instance = 0;
+ d = nullptr;
+ m_instance = nullptr;
}
-Id ModeManager::currentMode()
+Id ModeManager::currentModeId()
{
int currentIndex = d->m_modeStack->currentIndex();
if (currentIndex < 0)
@@ -138,7 +138,7 @@ static IMode *findMode(Id id)
const int index = indexOf(id);
if (index >= 0)
return d->m_modes.at(index);
- return 0;
+ return nullptr;
}
void ModeManager::activateMode(Id id)
@@ -222,7 +222,7 @@ void ModeManagerPrivate::enabledStateChanged(IMode *mode)
d->m_modeStack->setTabEnabled(index, mode->isEnabled());
// Make sure we leave any disabled mode to prevent possible crashes:
- if (mode->id() == ModeManager::currentMode() && !mode->isEnabled()) {
+ if (mode->id() == ModeManager::currentModeId() && !mode->isEnabled()) {
// This assumes that there is always at least one enabled mode.
for (int i = 0; i < d->m_modes.count(); ++i) {
if (d->m_modes.at(i) != mode &&
@@ -298,7 +298,7 @@ void ModeManager::currentTabChanged(int index)
void ModeManager::setFocusToCurrentMode()
{
- IMode *mode = findMode(currentMode());
+ IMode *mode = findMode(currentModeId());
QTC_ASSERT(mode, return);
QWidget *widget = mode->widget();
if (widget) {
@@ -336,4 +336,10 @@ ModeManager *ModeManager::instance()
return m_instance;
}
+IMode *ModeManager::currentMode()
+{
+ const int currentIndex = d->m_modeStack->currentIndex();
+ return currentIndex < 0 ? nullptr : d->m_modes.at(currentIndex);
+}
+
} // namespace Core
diff --git a/src/plugins/coreplugin/modemanager.h b/src/plugins/coreplugin/modemanager.h
index 66ff7af7fc..889731b49e 100644
--- a/src/plugins/coreplugin/modemanager.h
+++ b/src/plugins/coreplugin/modemanager.h
@@ -54,7 +54,8 @@ public:
static ModeManager *instance();
- static Id currentMode();
+ static IMode *currentMode();
+ static Id currentModeId();
static void addAction(QAction *action, int priority);
static void addProjectSelector(QAction *action);
diff --git a/src/plugins/coreplugin/navigationsubwidget.cpp b/src/plugins/coreplugin/navigationsubwidget.cpp
index 0ed1a4ca22..c8aed179c5 100644
--- a/src/plugins/coreplugin/navigationsubwidget.cpp
+++ b/src/plugins/coreplugin/navigationsubwidget.cpp
@@ -60,17 +60,17 @@ NavigationSubWidget::NavigationSubWidget(NavigationWidget *parentWidget, int pos
m_navigationComboBox->setFocusPolicy(Qt::TabFocus);
m_navigationComboBox->setMinimumContentsLength(0);
m_navigationComboBox->setModel(parentWidget->factoryModel());
- m_navigationWidget = 0;
- m_navigationWidgetFactory = 0;
+ m_navigationWidget = nullptr;
+ m_navigationWidgetFactory = nullptr;
m_toolBar = new Utils::StyledBar(this);
- QHBoxLayout *toolBarLayout = new QHBoxLayout;
+ auto toolBarLayout = new QHBoxLayout;
toolBarLayout->setMargin(0);
toolBarLayout->setSpacing(0);
m_toolBar->setLayout(toolBarLayout);
toolBarLayout->addWidget(m_navigationComboBox);
- QToolButton *splitAction = new QToolButton();
+ auto splitAction = new QToolButton();
splitAction->setIcon(Utils::Icons::SPLIT_HORIZONTAL_TOOLBAR.icon());
splitAction->setToolTip(tr("Split"));
splitAction->setPopupMode(QToolButton::InstantPopup);
@@ -86,7 +86,7 @@ NavigationSubWidget::NavigationSubWidget(NavigationWidget *parentWidget, int pos
toolBarLayout->addWidget(splitAction);
toolBarLayout->addWidget(m_closeButton);
- QVBoxLayout *lay = new QVBoxLayout();
+ auto lay = new QVBoxLayout();
lay->setMargin(0);
lay->setSpacing(0);
setLayout(lay);
@@ -103,9 +103,7 @@ NavigationSubWidget::NavigationSubWidget(NavigationWidget *parentWidget, int pos
comboBoxIndexChanged(factoryIndex);
}
-NavigationSubWidget::~NavigationSubWidget()
-{
-}
+NavigationSubWidget::~NavigationSubWidget() = default;
void NavigationSubWidget::comboBoxIndexChanged(int factoryIndex)
{
@@ -118,8 +116,8 @@ void NavigationSubWidget::comboBoxIndexChanged(int factoryIndex)
// Remove old Widget
delete m_navigationWidget;
- m_navigationWidget = 0;
- m_navigationWidgetFactory = 0;
+ m_navigationWidget = nullptr;
+ m_navigationWidgetFactory = nullptr;
if (factoryIndex == -1)
return;
@@ -132,7 +130,7 @@ void NavigationSubWidget::comboBoxIndexChanged(int factoryIndex)
// Add Toolbutton
m_additionalToolBarWidgets = n.dockToolBarWidgets;
- QHBoxLayout *layout = qobject_cast<QHBoxLayout *>(m_toolBar->layout());
+ auto layout = qobject_cast<QHBoxLayout *>(m_toolBar->layout());
foreach (QToolButton *w, m_additionalToolBarWidgets) {
layout->insertWidget(layout->count()-2, w);
}
@@ -193,7 +191,7 @@ Core::Command *NavigationSubWidget::command(const QString &title) const
QHash<Id, Command *>::const_iterator r = commandMap.find(Id::fromString(title));
if (r != commandMap.end())
return r.value();
- return 0;
+ return nullptr;
}
void NavigationSubWidget::setCloseIcon(const QIcon &icon)
diff --git a/src/plugins/coreplugin/navigationsubwidget.h b/src/plugins/coreplugin/navigationsubwidget.h
index a1906a8a21..39339c4db1 100644
--- a/src/plugins/coreplugin/navigationsubwidget.h
+++ b/src/plugins/coreplugin/navigationsubwidget.h
@@ -48,7 +48,7 @@ class NavigationSubWidget : public QWidget
Q_OBJECT
public:
NavigationSubWidget(NavigationWidget *parentWidget, int position, int factoryIndex);
- virtual ~NavigationSubWidget();
+ ~NavigationSubWidget() override;
INavigationWidgetFactory *factory();
@@ -95,10 +95,10 @@ class CommandComboBox : public QComboBox
Q_OBJECT
public:
- explicit CommandComboBox(QWidget *parent = 0);
+ explicit CommandComboBox(QWidget *parent = nullptr);
protected:
- bool event(QEvent *event);
+ bool event(QEvent *event) override;
private:
virtual const Command *command(const QString &text) const = 0;
@@ -114,7 +114,7 @@ public:
m_navSubWidget(navSubWidget) {}
private:
- virtual const Command *command(const QString &text) const
+ const Command *command(const QString &text) const override
{ return m_navSubWidget->command(text); }
NavigationSubWidget *m_navSubWidget;
diff --git a/src/plugins/coreplugin/navigationwidget.cpp b/src/plugins/coreplugin/navigationwidget.cpp
index ff9c6cc581..f223cfa777 100644
--- a/src/plugins/coreplugin/navigationwidget.cpp
+++ b/src/plugins/coreplugin/navigationwidget.cpp
@@ -87,7 +87,7 @@ NavigationWidgetPlaceHolder::~NavigationWidgetPlaceHolder()
void NavigationWidgetPlaceHolder::applyStoredSize()
{
- QSplitter *splitter = qobject_cast<QSplitter *>(parentWidget());
+ auto splitter = qobject_cast<QSplitter *>(parentWidget());
if (splitter) {
// A splitter we need to resize the splitter sizes
QList<int> sizes = splitter->sizes();
@@ -332,7 +332,7 @@ Internal::NavigationSubWidget *NavigationWidget::insertSubItem(int position, int
if (!d->m_subWidgets.isEmpty()) // Make all icons the bottom icon
d->m_subWidgets.at(0)->setCloseIcon(Utils::Icons::CLOSE_SPLIT_BOTTOM.icon());
- Internal::NavigationSubWidget *nsw = new Internal::NavigationSubWidget(this, position, factoryIndex);
+ auto nsw = new Internal::NavigationSubWidget(this, position, factoryIndex);
connect(nsw, &Internal::NavigationSubWidget::splitMe, this, &NavigationWidget::splitSubWidget);
connect(nsw, &Internal::NavigationSubWidget::closeMe, this, &NavigationWidget::closeSubWidget);
connect(nsw, &Internal::NavigationSubWidget::factoryIndexChanged,
@@ -371,7 +371,7 @@ QWidget *NavigationWidget::activateSubWidget(Id factoryId, int preferredPosition
void NavigationWidget::splitSubWidget(int factoryIndex)
{
- Internal::NavigationSubWidget *original = qobject_cast<Internal::NavigationSubWidget *>(sender());
+ auto original = qobject_cast<Internal::NavigationSubWidget *>(sender());
int pos = indexOf(original) + 1;
insertSubItem(pos, factoryIndex);
}
@@ -379,7 +379,7 @@ void NavigationWidget::splitSubWidget(int factoryIndex)
void NavigationWidget::closeSubWidget()
{
if (d->m_subWidgets.count() != 1) {
- Internal::NavigationSubWidget *subWidget = qobject_cast<Internal::NavigationSubWidget *>(sender());
+ auto subWidget = qobject_cast<Internal::NavigationSubWidget *>(sender());
subWidget->saveSettings();
int position = d->m_subWidgets.indexOf(subWidget);
@@ -543,7 +543,7 @@ QString NavigationWidget::settingsKey(const QString &key) const
void NavigationWidget::onSubWidgetFactoryIndexChanged(int factoryIndex)
{
Q_UNUSED(factoryIndex);
- Internal::NavigationSubWidget *subWidget = qobject_cast<Internal::NavigationSubWidget *>(sender());
+ auto subWidget = qobject_cast<Internal::NavigationSubWidget *>(sender());
QTC_ASSERT(subWidget, return);
Id factoryId = subWidget->factory()->id();
NavigationWidgetPrivate::updateActivationsMap(factoryId, {d->m_side, subWidget->position()});
diff --git a/src/plugins/coreplugin/opendocumentstreeview.cpp b/src/plugins/coreplugin/opendocumentstreeview.cpp
index 13290846a3..7861199bdd 100644
--- a/src/plugins/coreplugin/opendocumentstreeview.cpp
+++ b/src/plugins/coreplugin/opendocumentstreeview.cpp
@@ -38,20 +38,19 @@ namespace Internal {
class OpenDocumentsDelegate : public QStyledItemDelegate
{
public:
- explicit OpenDocumentsDelegate(QObject *parent = 0);
+ explicit OpenDocumentsDelegate(QObject *parent = nullptr);
void setCloseButtonVisible(bool visible);
void handlePressed(const QModelIndex &index);
void paint(QPainter *painter, const QStyleOptionViewItem &option,
- const QModelIndex &index) const;
+ const QModelIndex &index) const override;
mutable QModelIndex pressedIndex;
- bool closeButtonVisible;
+ bool closeButtonVisible = true;
};
OpenDocumentsDelegate::OpenDocumentsDelegate(QObject *parent)
- : QStyledItemDelegate(parent),
- closeButtonVisible(true)
+ : QStyledItemDelegate(parent)
{
}
@@ -141,7 +140,7 @@ bool OpenDocumentsTreeView::eventFilter(QObject *obj, QEvent *event)
{
if (obj == this && event->type() == QEvent::KeyPress
&& currentIndex().isValid()) {
- QKeyEvent *ke = static_cast<QKeyEvent*>(event);
+ auto ke = static_cast<QKeyEvent*>(event);
if ((ke->key() == Qt::Key_Delete
|| ke->key() == Qt::Key_Backspace)
&& ke->modifiers() == 0) {
@@ -149,7 +148,7 @@ bool OpenDocumentsTreeView::eventFilter(QObject *obj, QEvent *event)
}
} else if (obj == viewport()
&& event->type() == QEvent::MouseButtonRelease) {
- QMouseEvent * me = static_cast<QMouseEvent*>(event);
+ auto me = static_cast<QMouseEvent*>(event);
if (me->button() == Qt::MiddleButton
&& me->modifiers() == Qt::NoModifier) {
QModelIndex index = indexAt(me->pos());
diff --git a/src/plugins/coreplugin/outputpane.cpp b/src/plugins/coreplugin/outputpane.cpp
index 6ac11d9780..b6d118d6b6 100644
--- a/src/plugins/coreplugin/outputpane.cpp
+++ b/src/plugins/coreplugin/outputpane.cpp
@@ -51,7 +51,7 @@ OutputPanePlaceHolderPrivate::OutputPanePlaceHolderPrivate(Id mode, QSplitter *p
{
}
-OutputPanePlaceHolder *OutputPanePlaceHolderPrivate::m_current = 0;
+OutputPanePlaceHolder *OutputPanePlaceHolderPrivate::m_current = nullptr;
OutputPanePlaceHolder::OutputPanePlaceHolder(Id mode, QSplitter *parent)
: QWidget(parent), d(new OutputPanePlaceHolderPrivate(mode, parent))
@@ -68,14 +68,14 @@ OutputPanePlaceHolder::OutputPanePlaceHolder(Id mode, QSplitter *parent)
this, &OutputPanePlaceHolder::currentModeChanged);
// if this is part of a lazily created mode widget,
// we need to check if this is the current placeholder
- currentModeChanged(ModeManager::currentMode());
+ currentModeChanged(ModeManager::currentModeId());
}
OutputPanePlaceHolder::~OutputPanePlaceHolder()
{
if (d->m_current == this) {
if (Internal::OutputPaneManager *om = Internal::OutputPaneManager::instance()) {
- om->setParent(0);
+ om->setParent(nullptr);
om->hide();
}
OutputPanePlaceHolderPrivate::m_current = nullptr;
@@ -86,12 +86,12 @@ OutputPanePlaceHolder::~OutputPanePlaceHolder()
void OutputPanePlaceHolder::currentModeChanged(Id mode)
{
if (d->m_current == this) {
- d->m_current = 0;
+ d->m_current = nullptr;
if (d->m_initialized)
Internal::OutputPaneManager::setOutputPaneHeightSetting(d->m_nonMaximizedSize);
Internal::OutputPaneManager *om = Internal::OutputPaneManager::instance();
om->hide();
- om->setParent(0);
+ om->setParent(nullptr);
om->updateStatusButtons(false);
}
if (d->m_mode == mode) {
diff --git a/src/plugins/coreplugin/outputpanemanager.cpp b/src/plugins/coreplugin/outputpanemanager.cpp
index 7262decedf..00e1c9699e 100644
--- a/src/plugins/coreplugin/outputpanemanager.cpp
+++ b/src/plugins/coreplugin/outputpanemanager.cpp
@@ -118,7 +118,7 @@ static int numberAreaWidth()
// OutputPaneManager
////
-static OutputPaneManager *m_instance = 0;
+static OutputPaneManager *m_instance = nullptr;
void OutputPaneManager::create()
{
@@ -128,7 +128,7 @@ void OutputPaneManager::create()
void OutputPaneManager::destroy()
{
delete m_instance;
- m_instance = 0;
+ m_instance = nullptr;
}
OutputPaneManager *OutputPaneManager::instance()
@@ -174,15 +174,11 @@ OutputPaneManager::OutputPaneManager(QWidget *parent) :
m_titleLabel(new QLabel),
m_manageButton(new OutputPaneManageButton),
m_closeButton(new QToolButton),
- m_minMaxAction(0),
m_minMaxButton(new QToolButton),
- m_nextAction(0),
- m_prevAction(0),
m_outputWidgetPane(new QStackedWidget),
m_opToolBarWidgets(new QStackedWidget),
m_minimizeIcon(Utils::Icons::ARROW_DOWN.icon()),
- m_maximizeIcon(Utils::Icons::ARROW_UP.icon()),
- m_outputPaneHeightSetting(0)
+ m_maximizeIcon(Utils::Icons::ARROW_UP.icon())
{
setWindowTitle(tr("Output"));
@@ -212,11 +208,11 @@ OutputPaneManager::OutputPaneManager(QWidget *parent) :
connect(ICore::instance(), &ICore::saveSettingsRequested, this, &OutputPaneManager::saveSettings);
- QVBoxLayout *mainlayout = new QVBoxLayout;
+ auto mainlayout = new QVBoxLayout;
mainlayout->setSpacing(0);
mainlayout->setMargin(0);
m_toolBar = new StyledBar;
- QHBoxLayout *toolLayout = new QHBoxLayout(m_toolBar);
+ auto toolLayout = new QHBoxLayout(m_toolBar);
toolLayout->setMargin(0);
toolLayout->setSpacing(0);
toolLayout->addWidget(m_titleLabel);
@@ -317,7 +313,7 @@ OutputPaneManager::OutputPaneManager(QWidget *parent) :
});
QWidget *toolButtonsContainer = new QWidget(m_opToolBarWidgets);
- QHBoxLayout *toolButtonsLayout = new QHBoxLayout;
+ auto toolButtonsLayout = new QHBoxLayout;
toolButtonsLayout->setMargin(0);
toolButtonsLayout->setSpacing(0);
foreach (QWidget *toolButton, outPane->toolBarWidgets())
@@ -369,9 +365,7 @@ OutputPaneManager::OutputPaneManager(QWidget *parent) :
readSettings();
}
-OutputPaneManager::~OutputPaneManager()
-{
-}
+OutputPaneManager::~OutputPaneManager() = default;
void OutputPaneManager::shortcutTriggered(int idx)
{
@@ -691,7 +685,7 @@ void OutputPaneToggleButton::paintEvent(QPaintEvent*)
if (c != Theme::BackgroundColorDark)
p.fillRect(rect(), creatorTheme()->color(c));
} else {
- const QImage *image = 0;
+ const QImage *image = nullptr;
if (isDown()) {
static const QImage pressed(
StyleHelper::dpiSpecificImageFile(":/utils/images/panel_button_pressed.png"));
diff --git a/src/plugins/coreplugin/outputpanemanager.h b/src/plugins/coreplugin/outputpanemanager.h
index 5570ceeaa8..80ff8dad40 100644
--- a/src/plugins/coreplugin/outputpanemanager.h
+++ b/src/plugins/coreplugin/outputpanemanager.h
@@ -89,28 +89,27 @@ private:
void buttonTriggered(int idx);
void readSettings();
- QLabel *m_titleLabel;
- OutputPaneManageButton *m_manageButton;
- QAction *m_clearAction;
- QToolButton *m_clearButton;
- QToolButton *m_closeButton;
-
- QAction *m_minMaxAction;
- QToolButton *m_minMaxButton;
-
- QAction *m_nextAction;
- QAction *m_prevAction;
- QToolButton *m_prevToolButton;
- QToolButton *m_nextToolButton;
- QWidget *m_toolBar;
-
- QStackedWidget *m_outputWidgetPane;
- QStackedWidget *m_opToolBarWidgets;
- QWidget *m_buttonsWidget;
+ QLabel *m_titleLabel = nullptr;
+ OutputPaneManageButton *m_manageButton = nullptr;
+ QAction *m_clearAction = nullptr;
+ QToolButton *m_clearButton = nullptr;
+ QToolButton *m_closeButton = nullptr;
+
+ QAction *m_minMaxAction = nullptr;
+ QToolButton *m_minMaxButton = nullptr;
+
+ QAction *m_nextAction = nullptr;
+ QAction *m_prevAction = nullptr;
+ QToolButton *m_prevToolButton = nullptr;
+ QToolButton *m_nextToolButton = nullptr;
+ QWidget *m_toolBar = nullptr;
+
+ QStackedWidget *m_outputWidgetPane = nullptr;
+ QStackedWidget *m_opToolBarWidgets = nullptr;
+ QWidget *m_buttonsWidget = nullptr;
QIcon m_minimizeIcon;
QIcon m_maximizeIcon;
- bool m_maximized;
- int m_outputPaneHeightSetting;
+ int m_outputPaneHeightSetting = 0;
};
class BadgeLabel
diff --git a/src/plugins/coreplugin/outputwindow.cpp b/src/plugins/coreplugin/outputwindow.cpp
index 2d69b09e54..690f10d506 100644
--- a/src/plugins/coreplugin/outputwindow.cpp
+++ b/src/plugins/coreplugin/outputwindow.cpp
@@ -87,12 +87,12 @@ OutputWindow::OutputWindow(Context context, QWidget *parent)
d->outputWindowContext->setWidget(this);
ICore::addContextObject(d->outputWindowContext);
- QAction *undoAction = new QAction(this);
- QAction *redoAction = new QAction(this);
- QAction *cutAction = new QAction(this);
- QAction *copyAction = new QAction(this);
- QAction *pasteAction = new QAction(this);
- QAction *selectAllAction = new QAction(this);
+ auto undoAction = new QAction(this);
+ auto redoAction = new QAction(this);
+ auto cutAction = new QAction(this);
+ auto copyAction = new QAction(this);
+ auto pasteAction = new QAction(this);
+ auto selectAllAction = new QAction(this);
ActionManager::registerAction(undoAction, Constants::UNDO, context);
ActionManager::registerAction(redoAction, Constants::REDO, context);
diff --git a/src/plugins/coreplugin/plugindialog.cpp b/src/plugins/coreplugin/plugindialog.cpp
index f3db85bccc..9163e1a2af 100644
--- a/src/plugins/coreplugin/plugindialog.cpp
+++ b/src/plugins/coreplugin/plugindialog.cpp
@@ -53,7 +53,7 @@ PluginDialog::PluginDialog(QWidget *parent)
{
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
- QVBoxLayout *vl = new QVBoxLayout(this);
+ auto vl = new QVBoxLayout(this);
auto filterLayout = new QHBoxLayout;
vl->addLayout(filterLayout);
@@ -85,7 +85,7 @@ PluginDialog::PluginDialog(QWidget *parent)
if (!s_isRestartRequired)
m_restartRequired->setVisible(false);
- QHBoxLayout *hl = new QHBoxLayout;
+ auto hl = new QHBoxLayout;
hl->addWidget(m_detailsButton);
hl->addWidget(m_errorDetailsButton);
hl->addSpacing(10);
@@ -144,9 +144,9 @@ void PluginDialog::openDetails(ExtensionSystem::PluginSpec *spec)
return;
QDialog dialog(this);
dialog.setWindowTitle(tr("Plugin Details of %1").arg(spec->name()));
- QVBoxLayout *layout = new QVBoxLayout;
+ auto layout = new QVBoxLayout;
dialog.setLayout(layout);
- ExtensionSystem::PluginDetailsView *details = new ExtensionSystem::PluginDetailsView(&dialog);
+ auto details = new ExtensionSystem::PluginDetailsView(&dialog);
layout->addWidget(details);
details->update(spec);
QDialogButtonBox *buttons = new QDialogButtonBox(QDialogButtonBox::Close, Qt::Horizontal, &dialog);
@@ -164,9 +164,9 @@ void PluginDialog::openErrorDetails()
return;
QDialog dialog(this);
dialog.setWindowTitle(tr("Plugin Errors of %1").arg(spec->name()));
- QVBoxLayout *layout = new QVBoxLayout;
+ auto layout = new QVBoxLayout;
dialog.setLayout(layout);
- ExtensionSystem::PluginErrorView *errors = new ExtensionSystem::PluginErrorView(&dialog);
+ auto errors = new ExtensionSystem::PluginErrorView(&dialog);
layout->addWidget(errors);
errors->update(spec);
QDialogButtonBox *buttons = new QDialogButtonBox(QDialogButtonBox::Close, Qt::Horizontal, &dialog);
diff --git a/src/plugins/coreplugin/progressmanager/futureprogress.cpp b/src/plugins/coreplugin/progressmanager/futureprogress.cpp
index b06670c656..d7eeec9ff4 100644
--- a/src/plugins/coreplugin/progressmanager/futureprogress.cpp
+++ b/src/plugins/coreplugin/progressmanager/futureprogress.cpp
@@ -74,8 +74,8 @@ public:
};
FutureProgressPrivate::FutureProgressPrivate(FutureProgress *q) :
- m_progress(new Internal::ProgressBar), m_widget(0), m_widgetLayout(new QHBoxLayout),
- m_statusBarWidget(0),
+ m_progress(new Internal::ProgressBar), m_widget(nullptr), m_widgetLayout(new QHBoxLayout),
+ m_statusBarWidget(nullptr),
m_keep(FutureProgress::HideOnFinish), m_waitingForUserInteraction(false),
m_q(q), m_fadeStarting(false), m_isFading(false)
{
@@ -124,7 +124,7 @@ FutureProgressPrivate::FutureProgressPrivate(FutureProgress *q) :
FutureProgress::FutureProgress(QWidget *parent) :
QWidget(parent), d(new FutureProgressPrivate(this))
{
- QVBoxLayout *layout = new QVBoxLayout;
+ auto layout = new QVBoxLayout;
setLayout(layout);
layout->addWidget(d->m_progress);
layout->setMargin(0);
@@ -370,11 +370,11 @@ void FutureProgressPrivate::fadeAway()
{
m_isFading = true;
- QGraphicsOpacityEffect *opacityEffect = new QGraphicsOpacityEffect;
+ auto opacityEffect = new QGraphicsOpacityEffect;
opacityEffect->setOpacity(.999);
m_q->setGraphicsEffect(opacityEffect);
- QSequentialAnimationGroup *group = new QSequentialAnimationGroup(this);
+ auto group = new QSequentialAnimationGroup(this);
QPropertyAnimation *animation = new QPropertyAnimation(opacityEffect, "opacity");
animation->setDuration(StyleHelper::progressFadeAnimationDuration);
animation->setEndValue(0.);
diff --git a/src/plugins/coreplugin/progressmanager/progressbar.h b/src/plugins/coreplugin/progressmanager/progressbar.h
index 148813092a..9ff599adbb 100644
--- a/src/plugins/coreplugin/progressmanager/progressbar.h
+++ b/src/plugins/coreplugin/progressmanager/progressbar.h
@@ -38,7 +38,7 @@ class ProgressBar : public QWidget
Q_PROPERTY(float cancelButtonFader READ cancelButtonFader WRITE setCancelButtonFader)
public:
- explicit ProgressBar(QWidget *parent = 0);
+ explicit ProgressBar(QWidget *parent = nullptr);
QString title() const;
void setTitle(const QString &title);
@@ -50,9 +50,9 @@ public:
bool isCancelEnabled() const;
void setError(bool on);
bool hasError() const;
- QSize sizeHint() const;
- void paintEvent(QPaintEvent *);
- void mouseMoveEvent(QMouseEvent *);
+ QSize sizeHint() const override;
+ void paintEvent(QPaintEvent *) override;
+ void mouseMoveEvent(QMouseEvent *) override;
int minimum() const { return m_minimum; }
int maximum() const { return m_maximum; }
int value() const { return m_value; }
@@ -63,13 +63,13 @@ public:
void setFinished(bool b);
float cancelButtonFader() { return m_cancelButtonFader; }
void setCancelButtonFader(float value) { update(); m_cancelButtonFader= value;}
- bool event(QEvent *);
+ bool event(QEvent *) override;
signals:
void clicked();
protected:
- void mousePressEvent(QMouseEvent *event);
+ void mousePressEvent(QMouseEvent *event) override;
private:
QFont titleFont() const;
diff --git a/src/plugins/coreplugin/progressmanager/progressmanager.cpp b/src/plugins/coreplugin/progressmanager/progressmanager.cpp
index 039cd76dd8..06c825ae80 100644
--- a/src/plugins/coreplugin/progressmanager/progressmanager.cpp
+++ b/src/plugins/coreplugin/progressmanager/progressmanager.cpp
@@ -263,14 +263,10 @@ using namespace Utils;
Sent when all tasks of a \a type have finished.
*/
-static ProgressManagerPrivate *m_instance = 0;
+static ProgressManagerPrivate *m_instance = nullptr;
ProgressManagerPrivate::ProgressManagerPrivate()
- : m_applicationTask(0),
- m_currentStatusDetailsWidget(0),
- m_opacityEffect(new QGraphicsOpacityEffect(this)),
- m_progressViewPinned(false),
- m_hovered(false)
+ : m_opacityEffect(new QGraphicsOpacityEffect(this))
{
m_opacityEffect->setOpacity(.999);
m_instance = this;
@@ -288,7 +284,7 @@ ProgressManagerPrivate::~ProgressManagerPrivate()
StatusBarManager::destroyStatusBarWidget(m_statusBarWidget);
m_statusBarWidget = nullptr;
cleanup();
- m_instance = 0;
+ m_instance = nullptr;
}
void ProgressManagerPrivate::readSettings()
@@ -304,7 +300,7 @@ void ProgressManagerPrivate::init()
readSettings();
m_statusBarWidget = new QWidget;
- QHBoxLayout *layout = new QHBoxLayout(m_statusBarWidget);
+ auto layout = new QHBoxLayout(m_statusBarWidget);
layout->setContentsMargins(0, 0, 0, 0);
layout->setSpacing(0);
m_statusBarWidget->setLayout(layout);
@@ -322,7 +318,7 @@ void ProgressManagerPrivate::init()
m_summaryProgressBar->setCancelEnabled(false);
m_summaryProgressLayout->addWidget(m_summaryProgressBar);
layout->addWidget(m_summaryProgressWidget);
- ToggleButton *toggleButton = new ToggleButton(m_statusBarWidget);
+ auto toggleButton = new ToggleButton(m_statusBarWidget);
layout->addWidget(toggleButton);
m_statusBarWidget->installEventFilter(this);
StatusBarManager::addStatusBarWidget(m_statusBarWidget, StatusBarManager::RightCorner);
@@ -381,7 +377,7 @@ bool ProgressManagerPrivate::eventFilter(QObject *obj, QEvent *event)
updateVisibilityWithDelay();
} else if (obj == m_statusBarWidget && event->type() == QEvent::MouseButtonPress
&& !m_taskList.isEmpty()) {
- QMouseEvent *me = static_cast<QMouseEvent *>(event);
+ auto me = static_cast<QMouseEvent *>(event);
if (me->button() == Qt::LeftButton && !me->modifiers()) {
FutureProgress *progress = m_currentStatusDetailsProgress;
if (!progress)
@@ -415,7 +411,7 @@ FutureProgress *ProgressManagerPrivate::doAddTask(const QFuture<void> &future, c
Id type, ProgressFlags flags)
{
// watch
- QFutureWatcher<void> *watcher = new QFutureWatcher<void>();
+ auto watcher = new QFutureWatcher<void>();
m_runningTasks.insert(watcher, type);
connect(watcher, &QFutureWatcherBase::progressRangeChanged,
this, &ProgressManagerPrivate::updateSummaryProgressBar);
@@ -442,7 +438,7 @@ FutureProgress *ProgressManagerPrivate::doAddTask(const QFuture<void> &future, c
removeOldTasks(type);
if (m_taskList.size() == 10)
removeOneOldTask();
- FutureProgress *progress = new FutureProgress;
+ auto progress = new FutureProgress;
progress->setTitle(title);
progress->setFuture(future);
@@ -475,7 +471,7 @@ void ProgressManagerPrivate::taskFinished()
{
QObject *taskObject = sender();
QTC_ASSERT(taskObject, return);
- QFutureWatcher<void> *task = static_cast<QFutureWatcher<void> *>(taskObject);
+ auto task = static_cast<QFutureWatcher<void> *>(taskObject);
if (m_applicationTask == task)
disconnectApplicationTask();
Id type = m_runningTasks.value(task);
@@ -494,7 +490,7 @@ void ProgressManagerPrivate::disconnectApplicationTask()
disconnect(m_applicationTask, &QFutureWatcherBase::progressValueChanged,
this, &ProgressManagerPrivate::setApplicationProgressValue);
setApplicationProgressVisible(false);
- m_applicationTask = 0;
+ m_applicationTask = nullptr;
}
void ProgressManagerPrivate::updateSummaryProgressBar()
@@ -566,7 +562,7 @@ bool ProgressManagerPrivate::isLastFading() const
void ProgressManagerPrivate::slotRemoveTask()
{
- FutureProgress *progress = qobject_cast<FutureProgress *>(sender());
+ auto progress = qobject_cast<FutureProgress *>(sender());
QTC_ASSERT(progress, return);
Id type = progress->type();
removeTask(progress);
@@ -655,7 +651,7 @@ void ProgressManagerPrivate::updateVisibilityWithDelay()
void ProgressManagerPrivate::updateStatusDetailsWidget()
{
- QWidget *candidateWidget = 0;
+ QWidget *candidateWidget = nullptr;
// get newest progress with a status bar widget
QList<FutureProgress *>::iterator i = m_taskList.end();
while (i != m_taskList.begin()) {
@@ -727,13 +723,9 @@ void ToggleButton::paintEvent(QPaintEvent *event)
}
-ProgressManager::ProgressManager()
-{
-}
+ProgressManager::ProgressManager() = default;
-ProgressManager::~ProgressManager()
-{
-}
+ProgressManager::~ProgressManager() = default;
ProgressManager *ProgressManager::instance()
{
@@ -781,8 +773,7 @@ ProgressTimer::ProgressTimer(const QFutureInterfaceBase &futureInterface,
QObject *parent)
: QObject(parent),
m_futureInterface(futureInterface),
- m_expectedTime(expectedSeconds),
- m_currentTime(0)
+ m_expectedTime(expectedSeconds)
{
m_futureInterface.setProgressRange(0, 100);
m_futureInterface.setProgressValue(0);
diff --git a/src/plugins/coreplugin/progressmanager/progressmanager.h b/src/plugins/coreplugin/progressmanager/progressmanager.h
index efc2d57705..d7b581ae42 100644
--- a/src/plugins/coreplugin/progressmanager/progressmanager.h
+++ b/src/plugins/coreplugin/progressmanager/progressmanager.h
@@ -82,7 +82,7 @@ private:
QFutureInterfaceBase m_futureInterface;
int m_expectedTime;
- int m_currentTime;
+ int m_currentTime = 0;
QTimer *m_timer;
};
diff --git a/src/plugins/coreplugin/progressmanager/progressmanager_p.h b/src/plugins/coreplugin/progressmanager/progressmanager_p.h
index 7680b81a35..85bf378159 100644
--- a/src/plugins/coreplugin/progressmanager/progressmanager_p.h
+++ b/src/plugins/coreplugin/progressmanager/progressmanager_p.h
@@ -96,18 +96,18 @@ private:
QPointer<ProgressView> m_progressView;
QList<FutureProgress *> m_taskList;
QMap<QFutureWatcher<void> *, Id> m_runningTasks;
- QFutureWatcher<void> *m_applicationTask;
+ QFutureWatcher<void> *m_applicationTask = nullptr;
StatusBarWidget *m_statusBarWidgetContainer;
QWidget *m_statusBarWidget;
QWidget *m_summaryProgressWidget;
QHBoxLayout *m_summaryProgressLayout;
- QWidget *m_currentStatusDetailsWidget;
+ QWidget *m_currentStatusDetailsWidget = nullptr;
QPointer<FutureProgress> m_currentStatusDetailsProgress;
ProgressBar *m_summaryProgressBar;
QGraphicsOpacityEffect *m_opacityEffect;
QPointer<QPropertyAnimation> m_opacityAnimation;
- bool m_progressViewPinned;
- bool m_hovered;
+ bool m_progressViewPinned = false;
+ bool m_hovered = false;
};
class ToggleButton : public QToolButton
diff --git a/src/plugins/coreplugin/progressmanager/progressmanager_win.cpp b/src/plugins/coreplugin/progressmanager/progressmanager_win.cpp
index 5286ce007d..9102626863 100644
--- a/src/plugins/coreplugin/progressmanager/progressmanager_win.cpp
+++ b/src/plugins/coreplugin/progressmanager/progressmanager_win.cpp
@@ -49,7 +49,7 @@
namespace {
int total = 0;
- ITaskbarList3* pITask = 0;
+ ITaskbarList3* pITask = nullptr;
}
QT_BEGIN_NAMESPACE
@@ -62,12 +62,12 @@ static inline QWindow *windowOfWidget(const QWidget *widget)
return window;
if (QWidget *topLevel = widget->nativeParentWidget())
return topLevel->windowHandle();
- return 0;
+ return nullptr;
}
static inline HWND hwndOfWidget(const QWidget *w)
{
- void *result = 0;
+ void *result = nullptr;
if (QWindow *window = windowOfWidget(w))
result = QGuiApplication::platformNativeInterface()->nativeResourceForWindow("handle", window);
return static_cast<HWND>(result);
@@ -81,7 +81,7 @@ void Core::Internal::ProgressManagerPrivate::initInternal()
IID_ITaskbarList3,(LPVOID*) &pITask);
if (FAILED(hRes))
{
- pITask = 0;
+ pITask = nullptr;
CoUninitialize();
return;
}
diff --git a/src/plugins/coreplugin/progressmanager/progressview.cpp b/src/plugins/coreplugin/progressmanager/progressview.cpp
index 1369c22982..9694e5a467 100644
--- a/src/plugins/coreplugin/progressmanager/progressview.cpp
+++ b/src/plugins/coreplugin/progressmanager/progressview.cpp
@@ -32,7 +32,7 @@ using namespace Core;
using namespace Core::Internal;
ProgressView::ProgressView(QWidget *parent)
- : QWidget(parent), m_referenceWidget(nullptr), m_hovered(false)
+ : QWidget(parent)
{
m_layout = new QVBoxLayout;
setLayout(m_layout);
@@ -42,9 +42,7 @@ ProgressView::ProgressView(QWidget *parent)
setWindowTitle(tr("Processes"));
}
-ProgressView::~ProgressView()
-{
-}
+ProgressView::~ProgressView() = default;
void ProgressView::addProgressWidget(QWidget *widget)
{
diff --git a/src/plugins/coreplugin/progressmanager/progressview.h b/src/plugins/coreplugin/progressmanager/progressview.h
index 4d619998a5..fe78c265c8 100644
--- a/src/plugins/coreplugin/progressmanager/progressview.h
+++ b/src/plugins/coreplugin/progressmanager/progressview.h
@@ -64,8 +64,8 @@ private:
void reposition();
QVBoxLayout *m_layout;
- QWidget *m_referenceWidget;
- bool m_hovered;
+ QWidget *m_referenceWidget = nullptr;
+ bool m_hovered = false;
};
} // namespace Internal
diff --git a/src/plugins/coreplugin/reaper.cpp b/src/plugins/coreplugin/reaper.cpp
index 907542928b..ff89b7d5e1 100644
--- a/src/plugins/coreplugin/reaper.cpp
+++ b/src/plugins/coreplugin/reaper.cpp
@@ -40,7 +40,7 @@ static ReaperPrivate *d = nullptr;
namespace {
void killProcess(QProcess *process)
{
- if (Utils::QtcProcess *qtcProcess = qobject_cast<Utils::QtcProcess*>(process))
+ if (auto qtcProcess = qobject_cast<Utils::QtcProcess*>(process))
qtcProcess->kill();
else
process->kill();
@@ -48,7 +48,7 @@ void killProcess(QProcess *process)
void terminateProcess(QProcess *process)
{
- if (Utils::QtcProcess *qtcProcess = qobject_cast<Utils::QtcProcess*>(process))
+ if (auto qtcProcess = qobject_cast<Utils::QtcProcess*>(process))
qtcProcess->terminate();
else
process->terminate();
diff --git a/src/plugins/coreplugin/rightpane.cpp b/src/plugins/coreplugin/rightpane.cpp
index 4c139cb284..e786051d04 100644
--- a/src/plugins/coreplugin/rightpane.cpp
+++ b/src/plugins/coreplugin/rightpane.cpp
@@ -38,7 +38,7 @@
using namespace Core;
using namespace Core::Internal;
-RightPanePlaceHolder *RightPanePlaceHolder::m_current = 0;
+RightPanePlaceHolder *RightPanePlaceHolder::m_current = nullptr;
RightPanePlaceHolder* RightPanePlaceHolder::current()
{
@@ -57,7 +57,7 @@ RightPanePlaceHolder::RightPanePlaceHolder(Id mode, QWidget *parent)
RightPanePlaceHolder::~RightPanePlaceHolder()
{
if (m_current == this) {
- RightPaneWidget::instance()->setParent(0);
+ RightPaneWidget::instance()->setParent(nullptr);
RightPaneWidget::instance()->hide();
}
}
@@ -65,7 +65,7 @@ RightPanePlaceHolder::~RightPanePlaceHolder()
void RightPanePlaceHolder::applyStoredSize(int width)
{
if (width) {
- QSplitter *splitter = qobject_cast<QSplitter *>(parentWidget());
+ auto splitter = qobject_cast<QSplitter *>(parentWidget());
if (splitter) {
// A splitter we need to resize the splitter sizes
QList<int> sizes = splitter->sizes();
@@ -95,8 +95,8 @@ void RightPanePlaceHolder::applyStoredSize(int width)
void RightPanePlaceHolder::currentModeChanged(Id mode)
{
if (m_current == this) {
- m_current = 0;
- RightPaneWidget::instance()->setParent(0);
+ m_current = nullptr;
+ RightPaneWidget::instance()->setParent(nullptr);
RightPaneWidget::instance()->hide();
}
if (m_mode == mode) {
@@ -117,14 +117,13 @@ void RightPanePlaceHolder::currentModeChanged(Id mode)
/////
-RightPaneWidget *RightPaneWidget::m_instance = 0;
+RightPaneWidget *RightPaneWidget::m_instance = nullptr;
RightPaneWidget::RightPaneWidget()
- : m_shown(true), m_width(0)
{
m_instance = this;
- QVBoxLayout *layout = new QVBoxLayout;
+ auto layout = new QVBoxLayout;
layout->setMargin(0);
setLayout(layout);
}
@@ -132,7 +131,7 @@ RightPaneWidget::RightPaneWidget()
RightPaneWidget::~RightPaneWidget()
{
clearWidget();
- m_instance = 0;
+ m_instance = nullptr;
}
RightPaneWidget *RightPaneWidget::instance()
@@ -207,7 +206,7 @@ void RightPaneWidget::clearWidget()
{
if (m_widget) {
m_widget->hide();
- m_widget->setParent(0);
- m_widget = 0;
+ m_widget->setParent(nullptr);
+ m_widget = nullptr;
}
}
diff --git a/src/plugins/coreplugin/rightpane.h b/src/plugins/coreplugin/rightpane.h
index 905d37d4d4..14026a03e0 100644
--- a/src/plugins/coreplugin/rightpane.h
+++ b/src/plugins/coreplugin/rightpane.h
@@ -80,8 +80,8 @@ protected:
private:
void clearWidget();
- bool m_shown;
- int m_width;
+ bool m_shown = true;
+ int m_width = 0;
QPointer<QWidget> m_widget;
static RightPaneWidget *m_instance;
};
diff --git a/src/plugins/coreplugin/settingsdatabase.cpp b/src/plugins/coreplugin/settingsdatabase.cpp
index 7c272c6720..9b5054fa57 100644
--- a/src/plugins/coreplugin/settingsdatabase.cpp
+++ b/src/plugins/coreplugin/settingsdatabase.cpp
@@ -57,7 +57,7 @@ enum { debug_settings = 0 };
namespace Core {
namespace Internal {
-typedef QMap<QString, QVariant> SettingsMap;
+using SettingsMap = QMap<QString, QVariant>;
class SettingsDatabasePrivate
{
diff --git a/src/plugins/coreplugin/sidebar.cpp b/src/plugins/coreplugin/sidebar.cpp
index 36e34f482f..a5466a597e 100644
--- a/src/plugins/coreplugin/sidebar.cpp
+++ b/src/plugins/coreplugin/sidebar.cpp
@@ -68,7 +68,7 @@ QList<QToolButton *> SideBarItem::createToolBarWidgets()
}
struct SideBarPrivate {
- SideBarPrivate() :m_closeWhenEmpty(false) {}
+ SideBarPrivate() = default;
QList<Internal::SideBarWidget*> m_widgets;
QMap<QString, QPointer<SideBarItem> > m_itemMap;
@@ -77,7 +77,7 @@ struct SideBarPrivate {
QStringList m_unavailableItemIds;
QStringList m_defaultVisible;
QMap<QString, Core::Command*> m_shortcutMap;
- bool m_closeWhenEmpty;
+ bool m_closeWhenEmpty = false;
};
SideBar::SideBar(QList<SideBarItem*> itemList,
@@ -143,10 +143,8 @@ void SideBar::setCloseWhenEmpty(bool value)
void SideBar::makeItemAvailable(SideBarItem *item)
{
- typedef QMap<QString, QPointer<SideBarItem> >::const_iterator Iterator;
-
- const Iterator cend = d->m_itemMap.constEnd();
- for (Iterator it = d->m_itemMap.constBegin(); it != cend ; ++it) {
+ auto cend = d->m_itemMap.constEnd();
+ for (auto it = d->m_itemMap.constBegin(); it != cend ; ++it) {
if (it.value().data() == item) {
d->m_availableItemIds.append(it.key());
d->m_availableItemTitles.append(it.value().data()->title());
@@ -193,7 +191,7 @@ SideBarItem *SideBar::item(const QString &id)
emit availableItemsChanged();
return d->m_itemMap.value(id).data();
}
- return 0;
+ return nullptr;
}
Internal::SideBarWidget *SideBar::insertSideBarWidget(int position, const QString &id)
@@ -201,7 +199,7 @@ Internal::SideBarWidget *SideBar::insertSideBarWidget(int position, const QStrin
if (!d->m_widgets.isEmpty())
d->m_widgets.at(0)->setCloseIcon(Utils::Icons::CLOSE_SPLIT_BOTTOM.icon());
- Internal::SideBarWidget *item = new Internal::SideBarWidget(this, id);
+ auto item = new Internal::SideBarWidget(this, id);
connect(item, &Internal::SideBarWidget::splitMe, this, &SideBar::splitSubWidget);
connect(item, &Internal::SideBarWidget::closeMe, this, &SideBar::closeSubWidget);
connect(item, &Internal::SideBarWidget::currentWidgetChanged, this, &SideBar::updateWidgets);
@@ -225,7 +223,7 @@ void SideBar::removeSideBarWidget(Internal::SideBarWidget *widget)
void SideBar::splitSubWidget()
{
- Internal::SideBarWidget *original = qobject_cast<Internal::SideBarWidget*>(sender());
+ auto original = qobject_cast<Internal::SideBarWidget*>(sender());
int pos = indexOf(original) + 1;
insertSideBarWidget(pos);
updateWidgets();
@@ -234,7 +232,7 @@ void SideBar::splitSubWidget()
void SideBar::closeSubWidget()
{
if (d->m_widgets.count() != 1) {
- Internal::SideBarWidget *widget = qobject_cast<Internal::SideBarWidget*>(sender());
+ auto widget = qobject_cast<Internal::SideBarWidget*>(sender());
if (!widget)
return;
removeSideBarWidget(widget);
diff --git a/src/plugins/coreplugin/sidebarwidget.cpp b/src/plugins/coreplugin/sidebarwidget.cpp
index 7982214a37..daad4cf813 100644
--- a/src/plugins/coreplugin/sidebarwidget.cpp
+++ b/src/plugins/coreplugin/sidebarwidget.cpp
@@ -48,15 +48,14 @@ public:
explicit SideBarComboBox(SideBarWidget *sideBarWidget) : m_sideBarWidget(sideBarWidget) {}
private:
- virtual const Command *command(const QString &text) const
+ const Command *command(const QString &text) const override
{ return m_sideBarWidget->command(text); }
SideBarWidget *m_sideBarWidget;
};
SideBarWidget::SideBarWidget(SideBar *sideBar, const QString &id)
- : m_currentItem(0)
- , m_sideBar(sideBar)
+ : m_sideBar(sideBar)
{
m_comboBox = new SideBarComboBox(this);
m_comboBox->setMinimumContentsLength(15);
@@ -81,7 +80,7 @@ SideBarWidget::SideBarWidget(SideBar *sideBar, const QString &id)
connect(m_closeAction, &QAction::triggered, this, &SideBarWidget::closeMe);
m_toolbar->addAction(m_closeAction);
- QVBoxLayout *lay = new QVBoxLayout();
+ auto lay = new QVBoxLayout();
lay->setMargin(0);
lay->setSpacing(0);
setLayout(lay);
@@ -104,9 +103,7 @@ SideBarWidget::SideBarWidget(SideBar *sideBar, const QString &id)
this, &SideBarWidget::setCurrentIndex);
}
-SideBarWidget::~SideBarWidget()
-{
-}
+SideBarWidget::~SideBarWidget() = default;
QString SideBarWidget::currentItemTitle() const
{
@@ -176,14 +173,14 @@ void SideBarWidget::removeCurrentItem()
QWidget *w = m_currentItem->widget();
w->hide();
layout()->removeWidget(w);
- w->setParent(0);
+ w->setParent(nullptr);
m_sideBar->makeItemAvailable(m_currentItem);
// Delete custom toolbar widgets
qDeleteAll(m_addedToolBarActions);
m_addedToolBarActions.clear();
- m_currentItem = 0;
+ m_currentItem = nullptr;
}
void SideBarWidget::setCurrentIndex(int)
@@ -197,12 +194,12 @@ Command *SideBarWidget::command(const QString &title) const
{
const QString id = m_sideBar->idForTitle(title);
if (id.isEmpty())
- return 0;
+ return nullptr;
const QMap<QString, Command*> shortcutMap = m_sideBar->shortcutMap();
QMap<QString, Command*>::const_iterator r = shortcutMap.find(id);
if (r != shortcutMap.end())
return r.value();
- return 0;
+ return nullptr;
}
void SideBarWidget::setCloseIcon(const QIcon &icon)
diff --git a/src/plugins/coreplugin/sidebarwidget.h b/src/plugins/coreplugin/sidebarwidget.h
index e6db3c2200..86d59102e4 100644
--- a/src/plugins/coreplugin/sidebarwidget.h
+++ b/src/plugins/coreplugin/sidebarwidget.h
@@ -45,7 +45,7 @@ class SideBarWidget : public QWidget
Q_OBJECT
public:
explicit SideBarWidget(SideBar *sideBar, const QString &title);
- virtual ~SideBarWidget();
+ ~SideBarWidget() override;
QString currentItemId() const;
QString currentItemTitle() const;
@@ -66,13 +66,13 @@ signals:
private:
void setCurrentIndex(int);
- SideBarComboBox *m_comboBox;
- SideBarItem *m_currentItem;
- QToolBar *m_toolbar;
- QAction *m_splitAction;
- QAction *m_closeAction;
+ SideBarComboBox *m_comboBox = nullptr;
+ SideBarItem *m_currentItem = nullptr;
+ QToolBar *m_toolbar = nullptr;
+ QAction *m_splitAction = nullptr;
+ QAction *m_closeAction = nullptr;
QList<QAction *> m_addedToolBarActions;
- SideBar *m_sideBar;
+ SideBar *m_sideBar = nullptr;
};
} // namespace Internal
diff --git a/src/plugins/coreplugin/statusbarmanager.cpp b/src/plugins/coreplugin/statusbarmanager.cpp
index c653928ad8..e71e745077 100644
--- a/src/plugins/coreplugin/statusbarmanager.cpp
+++ b/src/plugins/coreplugin/statusbarmanager.cpp
@@ -25,8 +25,10 @@
#include "statusbarmanager.h"
+#include "imode.h"
#include "mainwindow.h"
#include "minisplitter.h"
+#include "modemanager.h"
#include <utils/qtcassert.h>
@@ -45,6 +47,17 @@ static QPointer<QSplitter> m_splitter;
static QList<QPointer<QWidget>> m_statusBarWidgets;
static QList<QPointer<IContext>> m_contexts;
+/*!
+ Context that always returns the context of the active's mode widget (if available).
+*/
+class StatusBarContext : public IContext
+{
+public:
+ StatusBarContext(QObject *parent);
+
+ Context context() const final;
+};
+
static QWidget *createWidget(QWidget *parent)
{
QWidget *w = new QWidget(parent);
@@ -85,6 +98,10 @@ static void createStatusBarManager()
bar->insertPermanentWidget(1, rightCornerWidget);
m_statusBarWidgets.append(rightCornerWidget);
+ auto context = new StatusBarContext(bar);
+ context->setWidget(bar);
+ ICore::addContextObject(context);
+
QObject::connect(ICore::instance(), &ICore::saveSettingsRequested, [] {
QSettings *s = ICore::settings();
s->beginGroup(QLatin1String(kSettingsGroup));
@@ -152,4 +169,20 @@ void StatusBarManager::restoreSettings()
m_splitter->setSizes(QList<int>() << leftSplitWidth << (sum - leftSplitWidth));
}
+StatusBarContext::StatusBarContext(QObject *parent)
+ : IContext(parent)
+{
+}
+
+Context StatusBarContext::context() const
+{
+ IMode *currentMode = ModeManager::currentMode();
+ QWidget *modeWidget = currentMode ? currentMode->widget() : nullptr;
+ if (modeWidget) {
+ if (IContext *context = ICore::contextObject(modeWidget))
+ return context->context();
+ }
+ return Context();
+}
+
} // Core
diff --git a/src/plugins/coreplugin/styleanimator.cpp b/src/plugins/coreplugin/styleanimator.cpp
index 8843251f7c..03fe40dfbd 100644
--- a/src/plugins/coreplugin/styleanimator.cpp
+++ b/src/plugins/coreplugin/styleanimator.cpp
@@ -32,7 +32,7 @@
Animation * StyleAnimator::widgetAnimation(const QWidget *widget) const
{
if (!widget)
- return 0;
+ return nullptr;
return Utils::findOrDefault(animations, Utils::equal(&Animation::widget, widget));
}
diff --git a/src/plugins/coreplugin/styleanimator.h b/src/plugins/coreplugin/styleanimator.h
index 020c00edef..b29dade9fb 100644
--- a/src/plugins/coreplugin/styleanimator.h
+++ b/src/plugins/coreplugin/styleanimator.h
@@ -42,8 +42,8 @@
class Animation
{
public :
- Animation() : m_running(true) { }
- virtual ~Animation() { }
+ Animation() = default;
+ virtual ~Animation() = default;
QWidget * widget() const { return m_widget; }
bool running() const { return m_running; }
const QTime &startTime() const { return m_startTime; }
@@ -59,21 +59,21 @@ protected:
QImage m_primaryImage;
QImage m_secondaryImage;
QImage m_tempImage;
- bool m_running;
+ bool m_running = true;
};
// Handles state transition animations
class Transition : public Animation
{
public :
- Transition() : Animation(), m_duration(100) {}
- virtual ~Transition() {}
+ Transition() = default;
+ ~Transition() override = default;
void setDuration(int duration) { m_duration = duration; }
void setStartImage(const QImage &image) { m_primaryImage = image; }
void setEndImage(const QImage &image) { m_secondaryImage = image; }
- virtual void paint(QPainter *painter, const QStyleOption *option);
+ void paint(QPainter *painter, const QStyleOption *option) override;
int duration() const { return m_duration; }
- int m_duration; //set time in ms to complete a state transition
+ int m_duration = 100; //set time in ms to complete a state transition
};
class StyleAnimator : public QObject
@@ -81,9 +81,9 @@ class StyleAnimator : public QObject
Q_OBJECT
public:
- StyleAnimator(QObject *parent = 0) : QObject(parent) {}
+ StyleAnimator(QObject *parent = nullptr) : QObject(parent) {}
- void timerEvent(QTimerEvent *);
+ void timerEvent(QTimerEvent *) override;
void startAnimation(Animation *);
void stopAnimation(const QWidget *);
Animation* widgetAnimation(const QWidget *) const;
diff --git a/src/plugins/coreplugin/systemsettings.cpp b/src/plugins/coreplugin/systemsettings.cpp
index dd88478ed8..0f65161b66 100644
--- a/src/plugins/coreplugin/systemsettings.cpp
+++ b/src/plugins/coreplugin/systemsettings.cpp
@@ -50,7 +50,7 @@ namespace Core {
namespace Internal {
SystemSettings::SystemSettings()
- : m_page(nullptr), m_dialog(0)
+ : m_page(nullptr), m_dialog(nullptr)
{
setId(Constants::SETTINGS_ID_SYSTEM);
setDisplayName(tr("System"));
@@ -187,7 +187,7 @@ void SystemSettings::finish()
{
delete m_widget;
delete m_page;
- m_page = 0;
+ m_page = nullptr;
}
void SystemSettings::resetTerminal()
diff --git a/src/plugins/coreplugin/systemsettings.h b/src/plugins/coreplugin/systemsettings.h
index a4b99be557..dbf7e09a1d 100644
--- a/src/plugins/coreplugin/systemsettings.h
+++ b/src/plugins/coreplugin/systemsettings.h
@@ -44,9 +44,9 @@ class SystemSettings : public IOptionsPage
public:
SystemSettings();
- QWidget *widget();
- void apply();
- void finish();
+ QWidget *widget() override;
+ void apply() override;
+ void finish() override;
private:
void showHelpForFileBrowser();
diff --git a/src/plugins/coreplugin/textdocument.h b/src/plugins/coreplugin/textdocument.h
index cc695c1c1f..9b498124aa 100644
--- a/src/plugins/coreplugin/textdocument.h
+++ b/src/plugins/coreplugin/textdocument.h
@@ -38,7 +38,7 @@ class CORE_EXPORT BaseTextDocument : public IDocument
Q_OBJECT
public:
- typedef Utils::TextFileFormat::ReadResult ReadResult;
+ using ReadResult = Utils::TextFileFormat::ReadResult;
explicit BaseTextDocument(QObject *parent = nullptr);
~BaseTextDocument() override;
diff --git a/src/plugins/coreplugin/themechooser.cpp b/src/plugins/coreplugin/themechooser.cpp
index 18f0a4040b..7fedfea06f 100644
--- a/src/plugins/coreplugin/themechooser.cpp
+++ b/src/plugins/coreplugin/themechooser.cpp
@@ -79,7 +79,7 @@ QString ThemeEntry::filePath() const
class ThemeListModel : public QAbstractListModel
{
public:
- ThemeListModel(QObject *parent = 0):
+ ThemeListModel(QObject *parent = nullptr):
QAbstractListModel(parent)
{
}
@@ -135,7 +135,7 @@ ThemeChooserPrivate::ThemeChooserPrivate(QWidget *widget)
: m_themeListModel(new ThemeListModel)
, m_themeComboBox(new QComboBox)
{
- QHBoxLayout *layout = new QHBoxLayout(widget);
+ auto layout = new QHBoxLayout(widget);
layout->addWidget(m_themeComboBox);
auto overriddenLabel = new QLabel;
overriddenLabel->setText(ThemeChooser::tr("Current theme: %1")
diff --git a/src/plugins/coreplugin/toolsettings.cpp b/src/plugins/coreplugin/toolsettings.cpp
index 0e3904e825..857d154125 100644
--- a/src/plugins/coreplugin/toolsettings.cpp
+++ b/src/plugins/coreplugin/toolsettings.cpp
@@ -130,7 +130,7 @@ void ToolSettings::apply()
it.next();
QList<ExternalTool *> items;
foreach (ExternalTool *tool, it.value()) {
- ExternalTool *toolToAdd = 0;
+ ExternalTool *toolToAdd = nullptr;
if (ExternalTool *originalTool = originalTools.take(tool->id())) {
// check if it has different category and is custom tool
if (tool->displayCategory() != it.key() && !tool->preset())
diff --git a/src/plugins/coreplugin/toolsettings.h b/src/plugins/coreplugin/toolsettings.h
index 8ce3a8d8ba..28972bc213 100644
--- a/src/plugins/coreplugin/toolsettings.h
+++ b/src/plugins/coreplugin/toolsettings.h
@@ -39,11 +39,11 @@ class ToolSettings : public IOptionsPage
Q_OBJECT
public:
- explicit ToolSettings(QObject *parent = 0);
+ explicit ToolSettings(QObject *parent = nullptr);
- QWidget *widget();
- void apply();
- void finish();
+ QWidget *widget() override;
+ void apply() override;
+ void finish() override;
private:
QPointer<ExternalToolConfig> m_widget;
diff --git a/src/plugins/coreplugin/variablechooser.cpp b/src/plugins/coreplugin/variablechooser.cpp
index 186a74d6a3..f2e0edef02 100644
--- a/src/plugins/coreplugin/variablechooser.cpp
+++ b/src/plugins/coreplugin/variablechooser.cpp
@@ -72,9 +72,9 @@ public:
new HeaderViewStretcher(header(), 0);
}
- void contextMenuEvent(QContextMenuEvent *ev);
+ void contextMenuEvent(QContextMenuEvent *ev) override;
- void currentChanged(const QModelIndex &current, const QModelIndex &previous);
+ void currentChanged(const QModelIndex &current, const QModelIndex &previous) override;
private:
VariableChooserPrivate *m_target;
@@ -146,12 +146,9 @@ public:
class VariableGroupItem : public TreeItem
{
public:
- VariableGroupItem()
- : m_chooser(0), m_populated(false)
- {
- }
+ VariableGroupItem() = default;
- QVariant data(int column, int role) const
+ QVariant data(int column, int role) const override
{
if (role == Qt::DisplayRole || role == Qt::EditRole) {
if (column == 0)
@@ -162,12 +159,12 @@ public:
return QVariant();
}
- bool canFetchMore() const
+ bool canFetchMore() const override
{
return !m_populated;
}
- void fetchMore()
+ void fetchMore() override
{
if (MacroExpander *expander = m_provider())
populateGroup(expander);
@@ -177,15 +174,15 @@ public:
void populateGroup(MacroExpander *expander);
public:
- VariableChooserPrivate *m_chooser; // Not owned.
- bool m_populated;
+ VariableChooserPrivate *m_chooser = nullptr; // Not owned.
+ bool m_populated = false;
MacroExpanderProvider m_provider;
};
class VariableItem : public TypedTreeItem<TreeItem, VariableGroupItem>
{
public:
- VariableItem() {}
+ VariableItem() = default;
Qt::ItemFlags flags(int) const override
{
@@ -231,8 +228,8 @@ void VariableTreeView::contextMenuEvent(QContextMenuEvent *ev)
QString expandedText = index.data(ExpandedTextRole).toString();
QMenu menu;
- QAction *insertUnexpandedAction = 0;
- QAction *insertExpandedAction = 0;
+ QAction *insertUnexpandedAction = nullptr;
+ QAction *insertExpandedAction = nullptr;
if (unexpandedText.isEmpty()) {
insertUnexpandedAction = menu.addAction(VariableChooser::tr("Insert Unexpanded Value"));
@@ -265,13 +262,13 @@ void VariableTreeView::currentChanged(const QModelIndex &current, const QModelIn
VariableChooserPrivate::VariableChooserPrivate(VariableChooser *parent)
: q(parent),
- m_lineEdit(0),
- m_textEdit(0),
- m_plainTextEdit(0),
- m_iconButton(0),
- m_variableFilter(0),
- m_variableTree(0),
- m_variableDescription(0)
+ m_lineEdit(nullptr),
+ m_textEdit(nullptr),
+ m_plainTextEdit(nullptr),
+ m_iconButton(nullptr),
+ m_variableFilter(nullptr),
+ m_variableTree(nullptr),
+ m_variableDescription(nullptr)
{
m_defaultDescription = VariableChooser::tr("Select a variable to insert.");
@@ -295,7 +292,7 @@ VariableChooserPrivate::VariableChooserPrivate(VariableChooser *parent)
m_variableDescription->setAttribute(Qt::WA_MacSmallSize);
m_variableDescription->setTextInteractionFlags(Qt::TextBrowserInteraction);
- QVBoxLayout *verticalLayout = new QVBoxLayout(q);
+ auto verticalLayout = new QVBoxLayout(q);
verticalLayout->setContentsMargins(3, 3, 3, 12);
verticalLayout->addWidget(m_variableFilter);
verticalLayout->addWidget(m_variableTree);
@@ -307,7 +304,7 @@ VariableChooserPrivate::VariableChooserPrivate(VariableChooser *parent)
this, &VariableChooserPrivate::handleItemActivated);
connect(qobject_cast<QApplication *>(qApp), &QApplication::focusChanged,
this, &VariableChooserPrivate::updateCurrentEditor);
- updateCurrentEditor(0, QApplication::focusWidget());
+ updateCurrentEditor(nullptr, QApplication::focusWidget());
}
void VariableGroupItem::populateGroup(MacroExpander *expander)
@@ -489,18 +486,18 @@ void VariableChooserPrivate::updateCurrentEditor(QWidget *old, QWidget *widget)
QLineEdit *previousLineEdit = m_lineEdit;
QWidget *previousWidget = currentWidget();
- m_lineEdit = 0;
- m_textEdit = 0;
- m_plainTextEdit = 0;
- QWidget *chooser = widget->property(kVariableSupportProperty).value<QWidget *>();
+ m_lineEdit = nullptr;
+ m_textEdit = nullptr;
+ m_plainTextEdit = nullptr;
+ auto chooser = widget->property(kVariableSupportProperty).value<QWidget *>();
m_currentVariableName = widget->property(kVariableNameProperty).toByteArray();
bool supportsVariables = chooser == q;
- if (QLineEdit *lineEdit = qobject_cast<QLineEdit *>(widget))
- m_lineEdit = (supportsVariables ? lineEdit : 0);
- else if (QTextEdit *textEdit = qobject_cast<QTextEdit *>(widget))
- m_textEdit = (supportsVariables ? textEdit : 0);
- else if (QPlainTextEdit *plainTextEdit = qobject_cast<QPlainTextEdit *>(widget))
- m_plainTextEdit = (supportsVariables ? plainTextEdit : 0);
+ if (auto lineEdit = qobject_cast<QLineEdit *>(widget))
+ m_lineEdit = (supportsVariables ? lineEdit : nullptr);
+ else if (auto textEdit = qobject_cast<QTextEdit *>(widget))
+ m_textEdit = (supportsVariables ? textEdit : nullptr);
+ else if (auto plainTextEdit = qobject_cast<QPlainTextEdit *>(widget))
+ m_plainTextEdit = (supportsVariables ? plainTextEdit : nullptr);
QWidget *current = currentWidget();
if (current != previousWidget) {
@@ -510,7 +507,7 @@ void VariableChooserPrivate::updateCurrentEditor(QWidget *old, QWidget *widget)
previousLineEdit->setTextMargins(0, 0, 0, 0);
if (m_iconButton) {
m_iconButton->hide();
- m_iconButton->setParent(0);
+ m_iconButton->setParent(nullptr);
}
if (current) {
current->installEventFilter(q); // escape key handling and geometry changes
@@ -608,7 +605,7 @@ static bool handleEscapePressed(QKeyEvent *ke, QWidget *widget)
bool VariableChooser::event(QEvent *ev)
{
if (ev->type() == QEvent::KeyPress || ev->type() == QEvent::ShortcutOverride) {
- QKeyEvent *ke = static_cast<QKeyEvent *>(ev);
+ auto ke = static_cast<QKeyEvent *>(ev);
if (handleEscapePressed(ke, this))
return true;
}
@@ -623,7 +620,7 @@ bool VariableChooser::eventFilter(QObject *obj, QEvent *event)
if (obj != d->currentWidget())
return false;
if ((event->type() == QEvent::KeyPress || event->type() == QEvent::ShortcutOverride) && isVisible()) {
- QKeyEvent *ke = static_cast<QKeyEvent *>(event);
+ auto ke = static_cast<QKeyEvent *>(event);
return handleEscapePressed(ke, this);
} else if (event->type() == QEvent::Resize) {
d->updateButtonGeometry();
diff --git a/src/plugins/coreplugin/vcsmanager.cpp b/src/plugins/coreplugin/vcsmanager.cpp
index e83f110ea5..fc9388aa1e 100644
--- a/src/plugins/coreplugin/vcsmanager.cpp
+++ b/src/plugins/coreplugin/vcsmanager.cpp
@@ -211,8 +211,8 @@ void VcsManager::resetVersionControlForDirectory(const QString &inputDirectory)
IVersionControl* VcsManager::findVersionControlForDirectory(const QString &inputDirectory,
QString *topLevelDirectory)
{
- typedef QPair<QString, IVersionControl *> StringVersionControlPair;
- typedef QList<StringVersionControlPair> StringVersionControlPairs;
+ using StringVersionControlPair = QPair<QString, IVersionControl *>;
+ using StringVersionControlPairs = QList<StringVersionControlPair>;
if (inputDirectory.isEmpty()) {
if (topLevelDirectory)
topLevelDirectory->clear();
@@ -441,7 +441,7 @@ void VcsManager::clearVersionControlCache()
void VcsManager::handleConfigurationChanges()
{
d->m_cachedAdditionalToolsPathsDirty = true;
- IVersionControl *vcs = qobject_cast<IVersionControl *>(sender());
+ auto vcs = qobject_cast<IVersionControl *>(sender());
if (vcs)
emit configurationChanged(vcs);
}
@@ -462,7 +462,7 @@ namespace Internal {
const char ID_VCS_A[] = "A";
const char ID_VCS_B[] = "B";
-typedef QHash<QString, QString> FileHash;
+using FileHash = QHash<QString, QString>;
static FileHash makeHash(const QStringList &list)
{
diff --git a/src/plugins/coreplugin/vcsmanager.h b/src/plugins/coreplugin/vcsmanager.h
index 2015fc0f48..9971e9ac99 100644
--- a/src/plugins/coreplugin/vcsmanager.h
+++ b/src/plugins/coreplugin/vcsmanager.h
@@ -59,7 +59,7 @@ public:
template <typename T, typename... Args>
static T *registerVersionControl(Args&&... args)
{
- T *vc = new T(std::forward<Args>(args)...);
+ auto vc = new T(std::forward<Args>(args)...);
addVersionControl(vc);
return vc;
}
diff --git a/src/plugins/coreplugin/versiondialog.cpp b/src/plugins/coreplugin/versiondialog.cpp
index 06962971ea..045bc60da3 100644
--- a/src/plugins/coreplugin/versiondialog.cpp
+++ b/src/plugins/coreplugin/versiondialog.cpp
@@ -53,7 +53,7 @@ VersionDialog::VersionDialog(QWidget *parent)
setWindowTitle(tr("About %1").arg(Core::Constants::IDE_DISPLAY_NAME));
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
- QGridLayout *layout = new QGridLayout(this);
+ auto layout = new QGridLayout(this);
layout->setSizeConstraint(QLayout::SetFixedSize);
QString ideRev;
@@ -112,7 +112,7 @@ VersionDialog::VersionDialog(QWidget *parent)
bool VersionDialog::event(QEvent *event)
{
if (event->type() == QEvent::ShortcutOverride) {
- QKeyEvent *ke = static_cast<QKeyEvent *>(event);
+ auto ke = static_cast<QKeyEvent *>(event);
if (ke->key() == Qt::Key_Escape && !ke->modifiers()) {
ke->accept();
return true;
diff --git a/src/plugins/coreplugin/versiondialog.h b/src/plugins/coreplugin/versiondialog.h
index 52efab01fe..fe7f003e88 100644
--- a/src/plugins/coreplugin/versiondialog.h
+++ b/src/plugins/coreplugin/versiondialog.h
@@ -40,7 +40,7 @@ class VersionDialog : public QDialog
public:
explicit VersionDialog(QWidget *parent);
- bool event(QEvent *event);
+ bool event(QEvent *event) override;
};
diff --git a/src/plugins/coreplugin/windowsupport.cpp b/src/plugins/coreplugin/windowsupport.cpp
index 5d2ab1c9fa..6ce31bc8a4 100644
--- a/src/plugins/coreplugin/windowsupport.cpp
+++ b/src/plugins/coreplugin/windowsupport.cpp
@@ -45,7 +45,7 @@ namespace Core {
namespace Internal {
-QMenu *WindowList::m_dockMenu = 0;
+QMenu *WindowList::m_dockMenu = nullptr;
QList<QWidget *> WindowList::m_windows;
QList<QAction *> WindowList::m_windowActions;
QList<Id> WindowList::m_windowActionIds;
diff --git a/src/plugins/coreplugin/windowsupport.h b/src/plugins/coreplugin/windowsupport.h
index 6dc13914bf..1e9d27139a 100644
--- a/src/plugins/coreplugin/windowsupport.h
+++ b/src/plugins/coreplugin/windowsupport.h
@@ -61,12 +61,12 @@ class WindowSupport : public QObject
Q_OBJECT
public:
WindowSupport(QWidget *window, const Context &context);
- ~WindowSupport();
+ ~WindowSupport() override;
void setCloseActionEnabled(bool enabled);
protected:
- bool eventFilter(QObject *obj, QEvent *event);
+ bool eventFilter(QObject *obj, QEvent *event) override;
private:
void toggleFullScreen();
diff --git a/src/plugins/cppeditor/cppincludehierarchy.cpp b/src/plugins/cppeditor/cppincludehierarchy.cpp
index 22bebf3daf..27a8cca993 100644
--- a/src/plugins/cppeditor/cppincludehierarchy.cpp
+++ b/src/plugins/cppeditor/cppincludehierarchy.cpp
@@ -42,7 +42,7 @@
#include <cplusplus/CppDocument.h>
-#include <utils/annotateditemdelegate.h>
+#include <utils/delegates.h>
#include <utils/dropsupport.h>
#include <utils/fileutils.h>
#include <utils/navigationtreeview.h>
diff --git a/src/plugins/cppeditor/cpptypehierarchy.cpp b/src/plugins/cppeditor/cpptypehierarchy.cpp
index ad581602f0..1b9d51851a 100644
--- a/src/plugins/cppeditor/cpptypehierarchy.cpp
+++ b/src/plugins/cppeditor/cpptypehierarchy.cpp
@@ -34,7 +34,7 @@
#include <coreplugin/editormanager/editormanager.h>
#include <cpptools/cppelementevaluator.h>
#include <utils/algorithm.h>
-#include <utils/annotateditemdelegate.h>
+#include <utils/delegates.h>
#include <utils/navigationtreeview.h>
#include <utils/dropsupport.h>
diff --git a/src/plugins/cppeditor/cppuseselectionsupdater.cpp b/src/plugins/cppeditor/cppuseselectionsupdater.cpp
index da7a7a1d92..fc6123b94b 100644
--- a/src/plugins/cppeditor/cppuseselectionsupdater.cpp
+++ b/src/plugins/cppeditor/cppuseselectionsupdater.cpp
@@ -43,7 +43,6 @@ namespace Internal {
CppUseSelectionsUpdater::CppUseSelectionsUpdater(TextEditor::TextEditorWidget *editorWidget)
: m_editorWidget(editorWidget)
- , m_runnerRevision(-1)
{
m_timer.setSingleShot(true);
m_timer.setInterval(updateUseSelectionsInternalInMs);
diff --git a/src/plugins/cppeditor/resourcepreviewhoverhandler.cpp b/src/plugins/cppeditor/resourcepreviewhoverhandler.cpp
index a657fcd6bc..a454361d30 100644
--- a/src/plugins/cppeditor/resourcepreviewhoverhandler.cpp
+++ b/src/plugins/cppeditor/resourcepreviewhoverhandler.cpp
@@ -200,14 +200,12 @@ QString ResourcePreviewHoverHandler::makeTooltip() const
QString ret;
const Utils::MimeType mimeType = Utils::mimeTypeForFile(m_resPath);
- if (mimeType.isValid()) {
- if (mimeType.name().startsWith("image", Qt::CaseInsensitive))
- ret += QString("<img src=\"file:///%1\" /><br/>").arg(m_resPath);
+ if (mimeType.name().startsWith("image", Qt::CaseInsensitive))
+ ret += QString("<img src=\"file:///%1\" /><br/>").arg(m_resPath);
- ret += QString("<a href=\"file:///%1\">%2</a>")
- .arg(m_resPath)
- .arg(QDir::toNativeSeparators(m_resPath));
- }
+ ret += QString("<a href=\"file:///%1\">%2</a>")
+ .arg(m_resPath)
+ .arg(QDir::toNativeSeparators(m_resPath));
return ret;
}
diff --git a/src/plugins/cpptools/builtincursorinfo.cpp b/src/plugins/cpptools/builtincursorinfo.cpp
index 17f40c7d26..4522af15a9 100644
--- a/src/plugins/cpptools/builtincursorinfo.cpp
+++ b/src/plugins/cpptools/builtincursorinfo.cpp
@@ -123,7 +123,7 @@ public:
}
protected:
- virtual bool preVisit(AST *ast)
+ bool preVisit(AST *ast) override
{
if (m_functionDefinition)
return false;
diff --git a/src/plugins/cpptools/compileroptionsbuilder.cpp b/src/plugins/cpptools/compileroptionsbuilder.cpp
index e16a424f3b..aeb60a0f28 100644
--- a/src/plugins/cpptools/compileroptionsbuilder.cpp
+++ b/src/plugins/cpptools/compileroptionsbuilder.cpp
@@ -28,8 +28,8 @@
#include <coreplugin/icore.h>
#include <coreplugin/vcsmanager.h>
-#include <projectexplorer/project.h>
#include <projectexplorer/projectexplorerconstants.h>
+#include <projectexplorer/project.h>
#include <utils/fileutils.h>
#include <utils/qtcassert.h>
@@ -39,14 +39,10 @@
namespace CppTools {
-static constexpr char SYSTEM_INCLUDE_PREFIX[] = "-isystem";
-
CompilerOptionsBuilder::CompilerOptionsBuilder(const ProjectPart &projectPart,
- const QString &clangVersion,
- const QString &clangResourceDirectory)
- : m_projectPart(projectPart)
- , m_clangVersion(clangVersion)
- , m_clangResourceDirectory(clangResourceDirectory)
+ UseSystemHeader useSystemHeader)
+ : m_projectPart(projectPart),
+ m_useSystemHeader(useSystemHeader)
{
}
@@ -59,10 +55,12 @@ QStringList CompilerOptionsBuilder::build(CppTools::ProjectFile::Kind fileKind,
return QStringList(););
}
+ add("-c");
+
addWordWidth();
addTargetTriple();
addExtraCodeModelFlags();
- addLanguageOption(fileKind);
+ updateLanguageOption(fileKind);
addOptionsForLanguage(/*checkForBorlandExtensions*/ true);
enableExceptions();
@@ -83,6 +81,67 @@ QStringList CompilerOptionsBuilder::build(CppTools::ProjectFile::Kind fileKind,
return options();
}
+static QStringList createLanguageOptionGcc(ProjectFile::Kind fileKind, bool objcExt)
+{
+ QStringList opts;
+
+ switch (fileKind) {
+ case ProjectFile::Unclassified:
+ case ProjectFile::Unsupported:
+ break;
+ case ProjectFile::CHeader:
+ if (objcExt)
+ opts += QLatin1String("objective-c-header");
+ else
+ opts += QLatin1String("c-header");
+ break;
+
+ case ProjectFile::CXXHeader:
+ default:
+ if (!objcExt) {
+ opts += QLatin1String("c++-header");
+ break;
+ }
+ Q_FALLTHROUGH();
+ case ProjectFile::ObjCHeader:
+ case ProjectFile::ObjCXXHeader:
+ opts += QLatin1String("objective-c++-header");
+ break;
+
+ case ProjectFile::CSource:
+ if (!objcExt) {
+ opts += QLatin1String("c");
+ break;
+ }
+ Q_FALLTHROUGH();
+ case ProjectFile::ObjCSource:
+ opts += QLatin1String("objective-c");
+ break;
+
+ case ProjectFile::CXXSource:
+ if (!objcExt) {
+ opts += QLatin1String("c++");
+ break;
+ }
+ Q_FALLTHROUGH();
+ case ProjectFile::ObjCXXSource:
+ opts += QLatin1String("objective-c++");
+ break;
+
+ case ProjectFile::OpenCLSource:
+ opts += QLatin1String("cl");
+ break;
+ case ProjectFile::CudaSource:
+ opts += QLatin1String("cuda");
+ break;
+ }
+
+ if (!opts.isEmpty())
+ opts.prepend(QLatin1String("-x"));
+
+ return opts;
+}
+
QStringList CompilerOptionsBuilder::options() const
{
return m_options;
@@ -132,7 +191,6 @@ void CompilerOptionsBuilder::enableExceptions()
void CompilerOptionsBuilder::addHeaderPathOptions()
{
typedef ProjectPartHeaderPath HeaderPath;
- const QString defaultPrefix = includeDirOption();
QStringList result;
@@ -152,7 +210,7 @@ void CompilerOptionsBuilder::addHeaderPathOptions()
default: // This shouldn't happen, but let's be nice..:
// intentional fall-through:
case HeaderPath::IncludePath:
- prefix = defaultPrefix;
+ prefix = includeDirOptionForPath(headerPath.path);
break;
}
@@ -203,72 +261,20 @@ void CompilerOptionsBuilder::addMacros(const ProjectExplorer::Macros &macros)
m_options.append(result);
}
-static QStringList createLanguageOptionGcc(ProjectFile::Kind fileKind, bool objcExt)
-{
- QStringList opts;
-
- switch (fileKind) {
- case ProjectFile::Unclassified:
- case ProjectFile::Unsupported:
- break;
- case ProjectFile::CHeader:
- if (objcExt)
- opts += QLatin1String("objective-c-header");
- else
- opts += QLatin1String("c-header");
- break;
-
- case ProjectFile::CXXHeader:
- default:
- if (!objcExt) {
- opts += QLatin1String("c++-header");
- break;
- }
- Q_FALLTHROUGH();
- case ProjectFile::ObjCHeader:
- case ProjectFile::ObjCXXHeader:
- opts += QLatin1String("objective-c++-header");
- break;
-
- case ProjectFile::CSource:
- if (!objcExt) {
- opts += QLatin1String("c");
- break;
- }
- Q_FALLTHROUGH();
- case ProjectFile::ObjCSource:
- opts += QLatin1String("objective-c");
- break;
-
- case ProjectFile::CXXSource:
- if (!objcExt) {
- opts += QLatin1String("c++");
- break;
- }
- Q_FALLTHROUGH();
- case ProjectFile::ObjCXXSource:
- opts += QLatin1String("objective-c++");
- break;
-
- case ProjectFile::OpenCLSource:
- opts += QLatin1String("cl");
- break;
- case ProjectFile::CudaSource:
- opts += QLatin1String("cuda");
- break;
- }
-
- if (!opts.isEmpty())
- opts.prepend(QLatin1String("-x"));
-
- return opts;
-}
-
-void CompilerOptionsBuilder::addLanguageOption(ProjectFile::Kind fileKind)
+void CompilerOptionsBuilder::updateLanguageOption(ProjectFile::Kind fileKind)
{
const bool objcExt = m_projectPart.languageExtensions & ProjectPart::ObjectiveCExtensions;
const QStringList options = createLanguageOptionGcc(fileKind, objcExt);
- m_options.append(options);
+ if (options.isEmpty())
+ return;
+
+ QTC_ASSERT(options.size() == 2, return;);
+ int langOptIndex = m_options.indexOf("-x");
+ if (langOptIndex == -1) {
+ m_options.append(options);
+ } else {
+ m_options[langOptIndex + 1] = options[1];
+ }
}
void CompilerOptionsBuilder::addOptionsForLanguage(bool checkForBorlandExtensions)
@@ -419,9 +425,14 @@ void CompilerOptionsBuilder::addDefineFunctionMacrosMsvc()
addMacros({{"__FUNCSIG__", "\"\""}, {"__FUNCTION__", "\"\""}, {"__FUNCDNAME__", "\"\""}});
}
-QString CompilerOptionsBuilder::includeDirOption() const
+QString CompilerOptionsBuilder::includeDirOptionForPath(const QString &path) const
{
- return QLatin1String("-I");
+ if (m_useSystemHeader == UseSystemHeader::No
+ || path.startsWith(m_projectPart.project->rootProjectDirectory().toString())) {
+ return QString("-I");
+ } else {
+ return QString("-isystem");
+ }
}
QByteArray CompilerOptionsBuilder::macroOption(const ProjectExplorer::Macro &macro) const
@@ -500,21 +511,9 @@ bool CompilerOptionsBuilder::excludeHeaderPath(const QString &headerPath) const
void CompilerOptionsBuilder::addPredefinedHeaderPathsOptions()
{
- add("-nostdinc");
- add("-nostdlibinc");
-
// In case of MSVC we need builtin clang defines to correctly handle clang includes
if (m_projectPart.toolchainType != ProjectExplorer::Constants::MSVC_TOOLCHAIN_TYPEID)
add("-undef");
-
- addClangIncludeFolder();
-}
-
-void CompilerOptionsBuilder::addClangIncludeFolder()
-{
- QTC_CHECK(!m_clangVersion.isEmpty());
- add(includeDirOption());
- add(clangIncludeDirectory(m_clangVersion, m_clangResourceDirectory));
}
void CompilerOptionsBuilder::addProjectConfigFileInclude()
@@ -525,32 +524,6 @@ void CompilerOptionsBuilder::addProjectConfigFileInclude()
}
}
-static QString creatorLibexecPath()
-{
-#ifndef UNIT_TESTS
- return Core::ICore::instance()->libexecPath();
-#else
- return QString();
-#endif
-}
-
-QString clangIncludeDirectory(const QString &clangVersion, const QString &clangResourceDirectory)
-{
- QDir dir(creatorLibexecPath() + "/clang" + clangIncludePath(clangVersion));
- if (!dir.exists() || !QFileInfo(dir, "stdint.h").exists())
- dir = QDir(clangResourceDirectory);
- return QDir::toNativeSeparators(dir.canonicalPath());
-}
-
-QString clangExecutable(const QString &clangBinDirectory)
-{
- const QString hostExeSuffix(QTC_HOST_EXE_SUFFIX);
- QFileInfo executable(creatorLibexecPath() + "/clang/bin/clang" + hostExeSuffix);
- if (!executable.exists())
- executable = QFileInfo(clangBinDirectory + "/clang" + hostExeSuffix);
- return QDir::toNativeSeparators(executable.canonicalFilePath());
-}
-
void CompilerOptionsBuilder::undefineClangVersionMacrosForMsvc()
{
if (m_projectPart.toolchainType == ProjectExplorer::Constants::MSVC_TOOLCHAIN_TYPEID) {
diff --git a/src/plugins/cpptools/compileroptionsbuilder.h b/src/plugins/cpptools/compileroptionsbuilder.h
index 87dc46ff26..75241dd023 100644
--- a/src/plugins/cpptools/compileroptionsbuilder.h
+++ b/src/plugins/cpptools/compileroptionsbuilder.h
@@ -31,6 +31,12 @@
namespace CppTools {
+enum class UseSystemHeader
+{
+ Yes,
+ No
+};
+
class CPPTOOLS_EXPORT CompilerOptionsBuilder
{
public:
@@ -40,16 +46,15 @@ public:
};
CompilerOptionsBuilder(const ProjectPart &projectPart,
- const QString &clangVersion = QString(),
- const QString &clangResourceDirectory = QString());
+ UseSystemHeader useSystemHeader = UseSystemHeader::No);
virtual ~CompilerOptionsBuilder() {}
virtual void addTargetTriple();
virtual void addExtraCodeModelFlags();
virtual void enableExceptions();
virtual void addPredefinedHeaderPathsOptions();
- virtual void addLanguageOption(ProjectFile::Kind fileKind);
virtual void addOptionsForLanguage(bool checkForBorlandExtensions = true);
+ virtual void updateLanguageOption(ProjectFile::Kind fileKind);
virtual void addExtraOptions() {}
@@ -82,30 +87,16 @@ protected:
virtual QString defineOption() const;
virtual QString undefineOption() const;
virtual QString includeOption() const;
- virtual QString includeDirOption() const;
-
+ QString includeDirOptionForPath(const QString &path) const;
const ProjectPart m_projectPart;
private:
QByteArray macroOption(const ProjectExplorer::Macro &macro) const;
QByteArray toDefineOption(const ProjectExplorer::Macro &macro) const;
QString defineDirectiveToDefineOption(const ProjectExplorer::Macro &marco) const;
- void addClangIncludeFolder();
QStringList m_options;
- QString m_clangVersion;
- QString m_clangResourceDirectory;
+ UseSystemHeader m_useSystemHeader;
};
-QString CPPTOOLS_EXPORT clangExecutable(const QString &clangBinDirectory);
-
-QString CPPTOOLS_EXPORT clangIncludeDirectory(const QString &clangVersion,
- const QString &clangResourceDirectory);
-
-template<class T>
-T clangIncludePath(const T &clangVersion)
-{
- return "/lib/clang/" + clangVersion + "/include";
-}
-
} // namespace CppTools
diff --git a/src/plugins/cpptools/cppchecksymbols.cpp b/src/plugins/cpptools/cppchecksymbols.cpp
index 83b6bfab9d..ab2adc104f 100644
--- a/src/plugins/cpptools/cppchecksymbols.cpp
+++ b/src/plugins/cpptools/cppchecksymbols.cpp
@@ -161,29 +161,29 @@ protected:
}
// nothing to do
- virtual bool visit(UsingNamespaceDirective *) { return true; }
- virtual bool visit(UsingDeclaration *) { return true; }
- virtual bool visit(Argument *) { return true; }
- virtual bool visit(BaseClass *) { return true; }
+ bool visit(UsingNamespaceDirective *) override { return true; }
+ bool visit(UsingDeclaration *) override { return true; }
+ bool visit(Argument *) override { return true; }
+ bool visit(BaseClass *) override { return true; }
- virtual bool visit(Function *symbol)
+ bool visit(Function *symbol) override
{
addFunction(symbol->name());
return true;
}
- virtual bool visit(Block *)
+ bool visit(Block *) override
{
return true;
}
- virtual bool visit(NamespaceAlias *symbol)
+ bool visit(NamespaceAlias *symbol) override
{
addType(symbol->name());
return true;
}
- virtual bool visit(Declaration *symbol)
+ bool visit(Declaration *symbol) override
{
if (symbol->enclosingEnum() != 0)
addStatic(symbol->name());
@@ -199,66 +199,66 @@ protected:
return true;
}
- virtual bool visit(TypenameArgument *symbol)
+ bool visit(TypenameArgument *symbol) override
{
addType(symbol->name());
return true;
}
- virtual bool visit(Enum *symbol)
+ bool visit(Enum *symbol) override
{
addType(symbol->name());
return true;
}
- virtual bool visit(Namespace *symbol)
+ bool visit(Namespace *symbol) override
{
addType(symbol->name());
return true;
}
- virtual bool visit(Template *)
+ bool visit(Template *) override
{
return true;
}
- virtual bool visit(Class *symbol)
+ bool visit(Class *symbol) override
{
addType(symbol->name());
return true;
}
- virtual bool visit(ForwardClassDeclaration *symbol)
+ bool visit(ForwardClassDeclaration *symbol) override
{
addType(symbol->name());
return true;
}
// Objective-C
- virtual bool visit(ObjCBaseClass *) { return true; }
- virtual bool visit(ObjCBaseProtocol *) { return true; }
- virtual bool visit(ObjCPropertyDeclaration *) { return true; }
- virtual bool visit(ObjCMethod *) { return true; }
+ bool visit(ObjCBaseClass *) override { return true; }
+ bool visit(ObjCBaseProtocol *) override { return true; }
+ bool visit(ObjCPropertyDeclaration *) override { return true; }
+ bool visit(ObjCMethod *) override { return true; }
- virtual bool visit(ObjCClass *symbol)
+ bool visit(ObjCClass *symbol) override
{
addType(symbol->name());
return true;
}
- virtual bool visit(ObjCForwardClassDeclaration *symbol)
+ bool visit(ObjCForwardClassDeclaration *symbol) override
{
addType(symbol->name());
return true;
}
- virtual bool visit(ObjCProtocol *symbol)
+ bool visit(ObjCProtocol *symbol) override
{
addType(symbol->name());
return true;
}
- virtual bool visit(ObjCForwardProtocolDeclaration *symbol)
+ bool visit(ObjCForwardProtocolDeclaration *symbol) override
{
addType(symbol->name());
return true;
diff --git a/src/plugins/cpptools/cppcompletionassist.cpp b/src/plugins/cpptools/cppcompletionassist.cpp
index 078d695f85..1bb445589c 100644
--- a/src/plugins/cpptools/cppcompletionassist.cpp
+++ b/src/plugins/cpptools/cppcompletionassist.cpp
@@ -1837,7 +1837,7 @@ bool InternalCppCompletionAssistProcessor::completeQtMethodClassName(
return false;
const LookupContext &context = m_model->m_typeOfExpression->context();
- const QIcon classIcon = Icons::iconForType(Icons::ClassIconType);
+ const QIcon classIcon = Utils::CodeModelIcon::iconForType(Utils::CodeModelIcon::Class);
Overview overview;
foreach (const LookupItem &lookupItem, results) {
diff --git a/src/plugins/cpptools/cpplocalsymbols.cpp b/src/plugins/cpptools/cpplocalsymbols.cpp
index 629c234886..49dd63f700 100644
--- a/src/plugins/cpptools/cpplocalsymbols.cpp
+++ b/src/plugins/cpptools/cpplocalsymbols.cpp
@@ -116,17 +116,17 @@ protected:
return true;
}
- virtual bool visit(CaptureAST *ast)
+ bool visit(CaptureAST *ast) override
{
return checkLocalUse(ast->identifier, ast->firstToken());
}
- virtual bool visit(IdExpressionAST *ast)
+ bool visit(IdExpressionAST *ast) override
{
return checkLocalUse(ast->name, ast->firstToken());
}
- virtual bool visit(SizeofExpressionAST *ast)
+ bool visit(SizeofExpressionAST *ast) override
{
if (ast->expression && ast->expression->asTypeId()) {
TypeIdAST *typeId = ast->expression->asTypeId();
@@ -141,7 +141,7 @@ protected:
return true;
}
- virtual bool visit(CastExpressionAST *ast)
+ bool visit(CastExpressionAST *ast) override
{
if (ast->expression && ast->expression->asUnaryExpression()) {
TypeIdAST *typeId = ast->type_id->asTypeId();
@@ -158,137 +158,137 @@ protected:
return true;
}
- virtual bool visit(FunctionDefinitionAST *ast)
+ bool visit(FunctionDefinitionAST *ast) override
{
if (ast->symbol)
enterScope(ast->symbol);
return true;
}
- virtual void endVisit(FunctionDefinitionAST *ast)
+ void endVisit(FunctionDefinitionAST *ast) override
{
if (ast->symbol)
_scopeStack.removeLast();
}
- virtual bool visit(LambdaExpressionAST *ast)
+ bool visit(LambdaExpressionAST *ast) override
{
if (ast->lambda_declarator && ast->lambda_declarator->symbol)
enterScope(ast->lambda_declarator->symbol);
return true;
}
- virtual void endVisit(LambdaExpressionAST *ast)
+ void endVisit(LambdaExpressionAST *ast) override
{
if (ast->lambda_declarator && ast->lambda_declarator->symbol)
_scopeStack.removeLast();
}
- virtual bool visit(CompoundStatementAST *ast)
+ bool visit(CompoundStatementAST *ast) override
{
if (ast->symbol)
enterScope(ast->symbol);
return true;
}
- virtual void endVisit(CompoundStatementAST *ast)
+ void endVisit(CompoundStatementAST *ast) override
{
if (ast->symbol)
_scopeStack.removeLast();
}
- virtual bool visit(IfStatementAST *ast)
+ bool visit(IfStatementAST *ast) override
{
if (ast->symbol)
enterScope(ast->symbol);
return true;
}
- virtual void endVisit(IfStatementAST *ast)
+ void endVisit(IfStatementAST *ast) override
{
if (ast->symbol)
_scopeStack.removeLast();
}
- virtual bool visit(WhileStatementAST *ast)
+ bool visit(WhileStatementAST *ast) override
{
if (ast->symbol)
enterScope(ast->symbol);
return true;
}
- virtual void endVisit(WhileStatementAST *ast)
+ void endVisit(WhileStatementAST *ast) override
{
if (ast->symbol)
_scopeStack.removeLast();
}
- virtual bool visit(ForStatementAST *ast)
+ bool visit(ForStatementAST *ast) override
{
if (ast->symbol)
enterScope(ast->symbol);
return true;
}
- virtual void endVisit(ForStatementAST *ast)
+ void endVisit(ForStatementAST *ast) override
{
if (ast->symbol)
_scopeStack.removeLast();
}
- virtual bool visit(ForeachStatementAST *ast)
+ bool visit(ForeachStatementAST *ast) override
{
if (ast->symbol)
enterScope(ast->symbol);
return true;
}
- virtual void endVisit(ForeachStatementAST *ast)
+ void endVisit(ForeachStatementAST *ast) override
{
if (ast->symbol)
_scopeStack.removeLast();
}
- virtual bool visit(RangeBasedForStatementAST *ast)
+ bool visit(RangeBasedForStatementAST *ast) override
{
if (ast->symbol)
enterScope(ast->symbol);
return true;
}
- virtual void endVisit(RangeBasedForStatementAST *ast)
+ void endVisit(RangeBasedForStatementAST *ast) override
{
if (ast->symbol)
_scopeStack.removeLast();
}
- virtual bool visit(SwitchStatementAST *ast)
+ bool visit(SwitchStatementAST *ast) override
{
if (ast->symbol)
enterScope(ast->symbol);
return true;
}
- virtual void endVisit(SwitchStatementAST *ast)
+ void endVisit(SwitchStatementAST *ast) override
{
if (ast->symbol)
_scopeStack.removeLast();
}
- virtual bool visit(CatchClauseAST *ast)
+ bool visit(CatchClauseAST *ast) override
{
if (ast->symbol)
enterScope(ast->symbol);
return true;
}
- virtual void endVisit(CatchClauseAST *ast)
+ void endVisit(CatchClauseAST *ast) override
{
if (ast->symbol)
_scopeStack.removeLast();
}
- virtual bool visit(ExpressionOrDeclarationStatementAST *ast)
+ bool visit(ExpressionOrDeclarationStatementAST *ast) override
{
accept(ast->declaration);
return false;
diff --git a/src/plugins/cpptools/cppmodelmanager.cpp b/src/plugins/cpptools/cppmodelmanager.cpp
index 3934837970..2eacfdef5c 100644
--- a/src/plugins/cpptools/cppmodelmanager.cpp
+++ b/src/plugins/cpptools/cppmodelmanager.cpp
@@ -986,9 +986,10 @@ void CppModelManager::watchForCanceledProjectIndexer(const QVector<QFuture<void>
continue;
QFutureWatcher<void> *watcher = new QFutureWatcher<void>();
- connect(watcher, &QFutureWatcher<void>::canceled, this, [this, project]() {
+ connect(watcher, &QFutureWatcher<void>::canceled, this, [this, project, watcher]() {
if (d->m_projectToIndexerCanceled.contains(project)) // Project not yet removed
d->m_projectToIndexerCanceled.insert(project, true);
+ watcher->deleteLater();
});
connect(watcher, &QFutureWatcher<void>::finished, this, [watcher]() {
watcher->deleteLater();
diff --git a/src/plugins/cpptools/cppprojectfile.cpp b/src/plugins/cpptools/cppprojectfile.cpp
index 2df1a287c7..e01d3726c9 100644
--- a/src/plugins/cpptools/cppprojectfile.cpp
+++ b/src/plugins/cpptools/cppprojectfile.cpp
@@ -51,8 +51,6 @@ ProjectFile::Kind ProjectFile::classify(const QString &filePath)
return AmbiguousHeader;
const Utils::MimeType mimeType = Utils::mimeTypeForFile(filePath);
- if (!mimeType.isValid())
- return Unsupported;
const QString mt = mimeType.name();
if (mt == QLatin1String(CppTools::Constants::C_SOURCE_MIMETYPE))
return CSource;
diff --git a/src/plugins/cpptools/cpprefactoringchanges.cpp b/src/plugins/cpptools/cpprefactoringchanges.cpp
index 3f11348013..c554c9d9f0 100644
--- a/src/plugins/cpptools/cpprefactoringchanges.cpp
+++ b/src/plugins/cpptools/cpprefactoringchanges.cpp
@@ -49,9 +49,9 @@ public:
, m_workingCopy(m_modelManager->workingCopy())
{}
- virtual void indentSelection(const QTextCursor &selection,
- const QString &fileName,
- const TextEditor::TextDocument *textDocument) const
+ void indentSelection(const QTextCursor &selection,
+ const QString &fileName,
+ const TextEditor::TextDocument *textDocument) const override
{
const TextEditor::TabSettings &tabSettings =
ProjectExplorer::actualTabSettings(fileName, textDocument);
@@ -60,9 +60,9 @@ public:
indenter.indent(selection.document(), selection, QChar::Null, tabSettings);
}
- virtual void reindentSelection(const QTextCursor &selection,
- const QString &fileName,
- const TextEditor::TextDocument *textDocument) const
+ void reindentSelection(const QTextCursor &selection,
+ const QString &fileName,
+ const TextEditor::TextDocument *textDocument) const override
{
const TextEditor::TabSettings &tabSettings =
ProjectExplorer::actualTabSettings(fileName, textDocument);
@@ -71,7 +71,7 @@ public:
indenter.reindent(selection.document(), selection, tabSettings);
}
- virtual void fileChanged(const QString &fileName)
+ void fileChanged(const QString &fileName) override
{
m_modelManager->updateSourceFiles(QSet<QString>() << fileName);
}
diff --git a/src/plugins/cpptools/stringtable.cpp b/src/plugins/cpptools/stringtable.cpp
index d9d806d239..25be4d035c 100644
--- a/src/plugins/cpptools/stringtable.cpp
+++ b/src/plugins/cpptools/stringtable.cpp
@@ -58,7 +58,7 @@ public:
public:
GCRunner(StringTablePrivate &stringTable): m_stringTable(stringTable) {}
- virtual void run() { m_stringTable.GC(); }
+ void run() override { m_stringTable.GC(); }
} m_gcRunner;
mutable QMutex m_lock;
diff --git a/src/plugins/cpptools/symbolfinder.cpp b/src/plugins/cpptools/symbolfinder.cpp
index b5bace9901..763fe42dcd 100644
--- a/src/plugins/cpptools/symbolfinder.cpp
+++ b/src/plugins/cpptools/symbolfinder.cpp
@@ -64,7 +64,7 @@ public:
using SymbolVisitor::visit;
- virtual bool visit(Function *fun)
+ bool visit(Function *fun) override
{
if (_oper) {
if (const Name *name = fun->unqualifiedName()) {
@@ -79,7 +79,7 @@ public:
return false;
}
- virtual bool visit(Block *)
+ bool visit(Block *) override
{
return false;
}
diff --git a/src/plugins/cpptools/typehierarchybuilder.cpp b/src/plugins/cpptools/typehierarchybuilder.cpp
index 34c09466c4..b44517e14c 100644
--- a/src/plugins/cpptools/typehierarchybuilder.cpp
+++ b/src/plugins/cpptools/typehierarchybuilder.cpp
@@ -49,7 +49,7 @@ public:
void execute(const CPlusPlus::Document::Ptr &doc, const CPlusPlus::Snapshot &snapshot);
- virtual bool visit(CPlusPlus::Class *);
+ bool visit(CPlusPlus::Class *) override;
const QList<CPlusPlus::Symbol *> &derived() { return _derived; }
const QStringList otherBases() { return _otherBases; }
diff --git a/src/plugins/debugger/analyzer/analyzermanager.h b/src/plugins/debugger/analyzer/analyzermanager.h
index cafcbf7661..20c7e741c4 100644
--- a/src/plugins/debugger/analyzer/analyzermanager.h
+++ b/src/plugins/debugger/analyzer/analyzermanager.h
@@ -62,9 +62,9 @@ DEBUGGER_EXPORT bool wantRunTool(ToolMode toolMode, const QString &toolName);
DEBUGGER_EXPORT void showCannotStartDialog(const QString &toolName);
// Register a tool for a given start mode.
-DEBUGGER_EXPORT void registerPerspective(const QByteArray &perspectiveId, const Utils::Perspective *perspective);
+DEBUGGER_EXPORT void registerPerspective(Utils::Perspective *perspective);
+DEBUGGER_EXPORT void destroyDynamicPerspective(const QByteArray &perspectiveId);
DEBUGGER_EXPORT void setPerspectiveEnabled(const QByteArray &perspectiveId, bool enable);
-DEBUGGER_EXPORT void registerToolbar(const QByteArray &perspectiveId, const Utils::ToolbarDescription &desc);
DEBUGGER_EXPORT void enableMainWindow(bool on);
DEBUGGER_EXPORT QWidget *mainWindow();
diff --git a/src/plugins/debugger/analyzer/analyzerrunconfigwidget.cpp b/src/plugins/debugger/analyzer/analyzerrunconfigwidget.cpp
index 1468b0e250..19dcc53bc2 100644
--- a/src/plugins/debugger/analyzer/analyzerrunconfigwidget.cpp
+++ b/src/plugins/debugger/analyzer/analyzerrunconfigwidget.cpp
@@ -43,8 +43,8 @@ AnalyzerRunConfigWidget::AnalyzerRunConfigWidget(ProjectExplorer::IRunConfigurat
m_aspect = aspect;
m_config = aspect->projectSettings();
- QWidget *globalSetting = new QWidget;
- QHBoxLayout *globalSettingLayout = new QHBoxLayout(globalSetting);
+ auto globalSetting = new QWidget;
+ auto globalSettingLayout = new QHBoxLayout(globalSetting);
globalSettingLayout->setContentsMargins(0, 0, 0, 0);
m_settingsCombo = new QComboBox(globalSetting);
@@ -65,7 +65,7 @@ AnalyzerRunConfigWidget::AnalyzerRunConfigWidget(ProjectExplorer::IRunConfigurat
QWidget *innerPane = new QWidget;
m_configWidget = m_config->createConfigWidget(innerPane);
- QVBoxLayout *layout = new QVBoxLayout(innerPane);
+ auto layout = new QVBoxLayout(innerPane);
layout->setContentsMargins(0, 0, 0, 0);
layout->addWidget(globalSetting);
layout->addWidget(m_configWidget);
@@ -73,7 +73,7 @@ AnalyzerRunConfigWidget::AnalyzerRunConfigWidget(ProjectExplorer::IRunConfigurat
m_details = new Utils::DetailsWidget;
m_details->setWidget(innerPane);
- QVBoxLayout *outerLayout = new QVBoxLayout(this);
+ auto outerLayout = new QVBoxLayout(this);
outerLayout->addWidget(m_details);
outerLayout->setContentsMargins(0, 0, 0, 0);
diff --git a/src/plugins/debugger/analyzer/analyzerutils.cpp b/src/plugins/debugger/analyzer/analyzerutils.cpp
index 21146372ec..96fb4ef9e5 100644
--- a/src/plugins/debugger/analyzer/analyzerutils.cpp
+++ b/src/plugins/debugger/analyzer/analyzerutils.cpp
@@ -58,7 +58,7 @@ CPlusPlus::Symbol *AnalyzerUtils::findSymbolUnderCursor()
{
TextEditor::TextEditorWidget *widget = TextEditor::TextEditorWidget::currentTextEditorWidget();
if (!widget)
- return 0;
+ return nullptr;
QTextCursor tc = widget->textCursor();
int line = 0;
@@ -68,7 +68,7 @@ CPlusPlus::Symbol *AnalyzerUtils::findSymbolUnderCursor()
const CPlusPlus::Snapshot &snapshot = CppTools::CppModelManager::instance()->snapshot();
CPlusPlus::Document::Ptr doc = snapshot.document(widget->textDocument()->filePath());
- QTC_ASSERT(doc, return 0);
+ QTC_ASSERT(doc, return nullptr);
// fetch the expression's code
CPlusPlus::ExpressionUnderCursor expressionUnderCursor(doc->languageFeatures());
@@ -80,7 +80,7 @@ CPlusPlus::Symbol *AnalyzerUtils::findSymbolUnderCursor()
typeOfExpression.init(doc, snapshot);
const QList<CPlusPlus::LookupItem> &lookupItems = typeOfExpression(expression.toUtf8(), scope);
if (lookupItems.isEmpty())
- return 0;
+ return nullptr;
const CPlusPlus::LookupItem &lookupItem = lookupItems.first(); // ### TODO: select best candidate.
return lookupItem.declaration();
diff --git a/src/plugins/debugger/analyzer/detailederrorview.cpp b/src/plugins/debugger/analyzer/detailederrorview.cpp
index 85ea430f34..0d7fdc1732 100644
--- a/src/plugins/debugger/analyzer/detailederrorview.cpp
+++ b/src/plugins/debugger/analyzer/detailederrorview.cpp
@@ -72,9 +72,7 @@ DetailedErrorView::DetailedErrorView(QWidget *parent) :
addAction(m_copyAction);
}
-DetailedErrorView::~DetailedErrorView()
-{
-}
+DetailedErrorView::~DetailedErrorView() = default;
void DetailedErrorView::contextMenuEvent(QContextMenuEvent *e)
{
diff --git a/src/plugins/debugger/analyzer/diagnosticlocation.cpp b/src/plugins/debugger/analyzer/diagnosticlocation.cpp
index e5f6c8ee49..095101d6ca 100644
--- a/src/plugins/debugger/analyzer/diagnosticlocation.cpp
+++ b/src/plugins/debugger/analyzer/diagnosticlocation.cpp
@@ -27,9 +27,7 @@
namespace Debugger {
-DiagnosticLocation::DiagnosticLocation() : line(0), column(0)
-{
-}
+DiagnosticLocation::DiagnosticLocation() = default;
DiagnosticLocation::DiagnosticLocation(const QString &filePath, int line, int column)
: filePath(filePath), line(line), column(column)
diff --git a/src/plugins/debugger/analyzer/diagnosticlocation.h b/src/plugins/debugger/analyzer/diagnosticlocation.h
index 31f9036f44..5bf95bff74 100644
--- a/src/plugins/debugger/analyzer/diagnosticlocation.h
+++ b/src/plugins/debugger/analyzer/diagnosticlocation.h
@@ -44,8 +44,8 @@ public:
QString filePath;
// Both values start at 1.
- int line;
- int column;
+ int line = 0;
+ int column = 0;
};
DEBUGGER_EXPORT bool operator==(const DiagnosticLocation &first, const DiagnosticLocation &second);
diff --git a/src/plugins/debugger/analyzer/startremotedialog.cpp b/src/plugins/debugger/analyzer/startremotedialog.cpp
index 9f2ce7f53b..efee140a95 100644
--- a/src/plugins/debugger/analyzer/startremotedialog.cpp
+++ b/src/plugins/debugger/analyzer/startremotedialog.cpp
@@ -74,14 +74,14 @@ StartRemoteDialog::StartRemoteDialog(QWidget *parent)
d->buttonBox->setOrientation(Qt::Horizontal);
d->buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok);
- QFormLayout *formLayout = new QFormLayout;
+ auto formLayout = new QFormLayout;
formLayout->setFieldGrowthPolicy(QFormLayout::ExpandingFieldsGrow);
formLayout->addRow(tr("Kit:"), d->kitChooser);
formLayout->addRow(tr("Executable:"), d->executable);
formLayout->addRow(tr("Arguments:"), d->arguments);
formLayout->addRow(tr("Working directory:"), d->workingDirectory);
- QVBoxLayout *verticalLayout = new QVBoxLayout(this);
+ auto verticalLayout = new QVBoxLayout(this);
verticalLayout->addLayout(formLayout);
verticalLayout->addWidget(d->buttonBox);
diff --git a/src/plugins/debugger/breakhandler.cpp b/src/plugins/debugger/breakhandler.cpp
index 1ee95f4ab6..d926159ff6 100644
--- a/src/plugins/debugger/breakhandler.cpp
+++ b/src/plugins/debugger/breakhandler.cpp
@@ -107,9 +107,9 @@ class BreakpointItem : public QObject, public TypedTreeItem<LocationItem>
Q_DECLARE_TR_FUNCTIONS(Debugger::Internal::BreakHandler)
public:
- ~BreakpointItem();
+ ~BreakpointItem() override;
- QVariant data(int column, int role) const;
+ QVariant data(int column, int role) const override;
QIcon icon() const;
@@ -168,28 +168,28 @@ public:
setIcon(b->icon());
}
- void removedFromEditor()
+ void removedFromEditor() override
{
if (m_bp)
m_bp->removeBreakpoint();
}
- void updateLineNumber(int lineNumber)
+ void updateLineNumber(int lineNumber) override
{
TextMark::updateLineNumber(lineNumber);
m_bp->updateLineNumberFromMarker(lineNumber);
}
- void updateFileName(const FileName &fileName)
+ void updateFileName(const FileName &fileName) override
{
TextMark::updateFileName(fileName);
m_bp->updateFileNameFromMarker(fileName.toString());
}
- bool isDraggable() const { return true; }
- void dragToLine(int line) { m_bp->changeLineNumberFromMarker(line); }
- bool isClickable() const { return true; }
- void clicked() { m_bp->removeBreakpoint(); }
+ bool isDraggable() const override { return true; }
+ void dragToLine(int line) override { m_bp->changeLineNumberFromMarker(line); }
+ bool isClickable() const override { return true; }
+ void clicked() override { m_bp->removeBreakpoint(); }
public:
BreakpointItem *m_bp;
@@ -269,7 +269,7 @@ static QString typeToString(BreakpointType type)
class LeftElideDelegate : public QStyledItemDelegate
{
public:
- LeftElideDelegate() {}
+ LeftElideDelegate() = default;
void paint(QPainter *pain, const QStyleOptionViewItem &option, const QModelIndex &index) const override
{
@@ -283,8 +283,8 @@ class SmallTextEdit : public QTextEdit
{
public:
explicit SmallTextEdit(QWidget *parent) : QTextEdit(parent) {}
- QSize sizeHint() const { return QSize(QTextEdit::sizeHint().width(), 100); }
- QSize minimumSizeHint() const { return sizeHint(); }
+ QSize sizeHint() const override { return QSize(QTextEdit::sizeHint().width(), 100); }
+ QSize minimumSizeHint() const override { return sizeHint(); }
};
///////////////////////////////////////////////////////////////////////
@@ -669,7 +669,7 @@ void BreakpointDialog::getParts(unsigned partsMask, BreakpointParameters *data)
data->functionName = m_lineEditFunction->text();
if (partsMask & AddressPart)
- data->address = m_lineEditAddress->text().toULongLong(0, 0);
+ data->address = m_lineEditAddress->text().toULongLong(nullptr, 0);
if (partsMask & ExpressionPart)
data->expression = m_lineEditExpression->text();
@@ -1064,9 +1064,9 @@ void BreakHandler::saveBreakpoints()
void BreakHandler::loadBreakpoints()
{
- QVariant value = sessionValue("Breakpoints");
- QList<QVariant> list = value.toList();
- foreach (const QVariant &var, list) {
+ const QVariant value = sessionValue("Breakpoints");
+ const QList<QVariant> list = value.toList();
+ for (const QVariant &var : list) {
const QMap<QString, QVariant> map = var.toMap();
BreakpointParameters params(BreakpointByFileAndLine);
QVariant v = map.value("filename");
@@ -1137,7 +1137,7 @@ Breakpoint BreakHandler::findBreakpointByIndex(const QModelIndex &index) const
Breakpoints BreakHandler::findBreakpointsByIndex(const QList<QModelIndex> &list) const
{
QSet<Breakpoint> ids;
- foreach (const QModelIndex &index, list) {
+ for (const QModelIndex &index : list) {
if (Breakpoint b = findBreakpointByIndex(index))
ids.insert(b);
}
@@ -1378,7 +1378,7 @@ QIcon Breakpoint::icon() const { return b ? b->icon() : QIcon(); }
DebuggerEngine *Breakpoint::engine() const
{
- return b ? b->m_engine : 0;
+ return b ? b->m_engine : nullptr;
}
const BreakpointResponse &Breakpoint::response() const
@@ -1610,7 +1610,7 @@ void Breakpoint::notifyBreakpointReleased()
b->removeChildren();
//QTC_ASSERT(b->m_state == BreakpointChangeProceeding, qDebug() << b->m_state);
b->m_state = BreakpointNew;
- b->m_engine = 0;
+ b->m_engine = nullptr;
b->m_response = BreakpointResponse();
b->destroyMarker();
b->updateMarker();
@@ -1673,7 +1673,7 @@ void BreakHandler::appendBreakpointInternal(const BreakpointParameters &params)
return;
}
- BreakpointItem *b = new BreakpointItem(this);
+ auto b = new BreakpointItem(this);
b->m_params = params;
b->updateMarker();
rootItem()->appendChild(b);
@@ -1830,19 +1830,19 @@ void BreakHandler::changeLineNumberFromMarkerHelper(BreakpointModelId id)
appendBreakpoint(params);
}
-Breakpoints BreakHandler::allBreakpoints() const
+const Breakpoints BreakHandler::allBreakpoints() const
{
Breakpoints items;
forItemsAtLevel<1>([&items](BreakpointItem *b) { items.append(Breakpoint(b)); });
return items;
}
-Breakpoints BreakHandler::unclaimedBreakpoints() const
+const Breakpoints BreakHandler::unclaimedBreakpoints() const
{
- return engineBreakpoints(0);
+ return engineBreakpoints(nullptr);
}
-Breakpoints BreakHandler::engineBreakpoints(DebuggerEngine *engine) const
+const Breakpoints BreakHandler::engineBreakpoints(DebuggerEngine *engine) const
{
Breakpoints items;
forItemsAtLevel<1>([&items, engine](BreakpointItem *b) {
@@ -1930,7 +1930,7 @@ bool BreakHandler::setData(const QModelIndex &idx, const QVariant &value, int ro
const bool isEnabled = items.isEmpty() || items.at(0).isEnabled();
setBreakpointsEnabled(items, !isEnabled);
// FIXME
-// foreach (const QModelIndex &id, selectedIds)
+// for (const QModelIndex &id : selectedIds)
// update(id);
return true;
}
@@ -2069,7 +2069,7 @@ bool BreakHandler::contextMenuEvent(const ItemViewEvent &ev)
void BreakHandler::setBreakpointsEnabled(const Breakpoints &bps, bool enabled)
{
- foreach (Breakpoint b, bps)
+ for (Breakpoint b : bps)
b.setEnabled(enabled);
}
@@ -2088,7 +2088,7 @@ void BreakHandler::deleteAllBreakpoints()
void BreakHandler::deleteBreakpoints(const Breakpoints &bps)
{
- foreach (Breakpoint bp, bps)
+ for (Breakpoint bp : bps)
bp.removeBreakpoint();
}
@@ -2141,7 +2141,7 @@ void BreakHandler::editBreakpoints(const Breakpoints &bps, QWidget *parent)
const int newIgnoreCount = dialog.ignoreCount();
const int newThreadSpec = dialog.threadSpec();
- foreach (Breakpoint bp, bps) {
+ for (Breakpoint bp : bps) {
if (bp) {
bp.setCondition(newCondition);
bp.setIgnoreCount(newIgnoreCount);
@@ -2161,7 +2161,7 @@ void BreakHandler::editBreakpoints(const Breakpoints &bps, QWidget *parent)
static int currentId = 0;
BreakpointItem::BreakpointItem(BreakHandler *handler)
- : m_handler(handler), m_id(++currentId), m_state(BreakpointNew), m_engine(0), m_marker(0)
+ : m_handler(handler), m_id(++currentId), m_state(BreakpointNew), m_engine(nullptr), m_marker(nullptr)
{}
BreakpointItem::~BreakpointItem()
@@ -2173,8 +2173,8 @@ void BreakpointItem::destroyMarker()
{
if (m_marker) {
BreakpointMarker *m = m_marker;
- m->m_bp = 0;
- m_marker = 0;
+ m->m_bp = nullptr;
+ m_marker = nullptr;
delete m;
}
}
diff --git a/src/plugins/debugger/breakhandler.h b/src/plugins/debugger/breakhandler.h
index e31fc81fa1..09461ba081 100644
--- a/src/plugins/debugger/breakhandler.h
+++ b/src/plugins/debugger/breakhandler.h
@@ -50,10 +50,10 @@ class Breakpoint
Q_DECLARE_TR_FUNCTIONS(Debugger::Internal::BreakHandler)
public:
- Breakpoint() {}
+ Breakpoint() = default;
bool isValid() const;
- operator const void *() const { return isValid() ? this : 0; }
+ operator const void *() const { return isValid() ? this : nullptr; }
bool operator!() const { return !isValid(); }
uint hash() const;
@@ -157,7 +157,7 @@ private:
inline uint qHash(const Debugger::Internal::Breakpoint &b) { return b.hash(); }
-typedef QList<Breakpoint> Breakpoints;
+using Breakpoints = QList<Breakpoint>;
using BreakModel = Utils::TreeModel<Utils::TypedTreeItem<BreakpointItem>, BreakpointItem, LocationItem>;
@@ -177,9 +177,9 @@ public:
void appendBreakpoint(const BreakpointParameters &data);
void handleAlienBreakpoint(const BreakpointResponse &response, DebuggerEngine *engine);
- Breakpoints allBreakpoints() const;
- Breakpoints engineBreakpoints(DebuggerEngine *engine) const;
- Breakpoints unclaimedBreakpoints() const;
+ const Breakpoints allBreakpoints() const;
+ const Breakpoints engineBreakpoints(DebuggerEngine *engine) const;
+ const Breakpoints unclaimedBreakpoints() const;
QStringList engineBreakpointPaths(DebuggerEngine *engine) const;
// Find a breakpoint matching approximately the data in needle.
diff --git a/src/plugins/debugger/breakpoint.cpp b/src/plugins/debugger/breakpoint.cpp
index 448cbb7df5..be1287d1d5 100644
--- a/src/plugins/debugger/breakpoint.cpp
+++ b/src/plugins/debugger/breakpoint.cpp
@@ -228,8 +228,8 @@ bool BreakpointParameters::isCppBreakpoint() const
if (qmlExtensionString.isEmpty())
qmlExtensionString = ".qml;.js";
- auto qmlFileExtensions = qmlExtensionString.splitRef(QLatin1Char(';'), QString::SkipEmptyParts);
- foreach (QStringRef extension, qmlFileExtensions) {
+ const auto qmlFileExtensions = qmlExtensionString.splitRef(';', QString::SkipEmptyParts);
+ for (QStringRef extension : qmlFileExtensions) {
if (fileName.endsWith(extension, Qt::CaseInsensitive))
return false;
}
diff --git a/src/plugins/debugger/breakpoint.h b/src/plugins/debugger/breakpoint.h
index d186b1a3b7..45c9a11205 100644
--- a/src/plugins/debugger/breakpoint.h
+++ b/src/plugins/debugger/breakpoint.h
@@ -40,13 +40,13 @@ namespace Internal {
class BreakpointIdBase
{
public:
- BreakpointIdBase() : m_majorPart(0), m_minorPart(0) {}
+ BreakpointIdBase() = default;
bool isValid() const { return m_majorPart != 0; }
bool isMajor() const { return m_majorPart != 0 && m_minorPart == 0; }
bool isMinor() const { return m_majorPart != 0 && m_minorPart != 0; }
bool operator!() const { return !isValid(); }
- operator const void*() const { return isValid() ? this : 0; }
+ operator const void*() const { return isValid() ? this : nullptr; }
quint32 toInternalId() const { return m_majorPart | (m_minorPart << 16); }
QString toString() const;
bool operator==(const BreakpointIdBase &id) const
@@ -55,8 +55,8 @@ public:
quint16 minorPart() const { return m_minorPart; }
protected:
- quint16 m_majorPart;
- quint16 m_minorPart;
+ quint16 m_majorPart = 0;
+ quint16 m_minorPart = 0;
};
class BreakpointModelId : public BreakpointIdBase
diff --git a/src/plugins/debugger/cdb/cdbengine.cpp b/src/plugins/debugger/cdb/cdbengine.cpp
index f64dd94d64..55dbc5c8fb 100644
--- a/src/plugins/debugger/cdb/cdbengine.cpp
+++ b/src/plugins/debugger/cdb/cdbengine.cpp
@@ -75,11 +75,10 @@
#include <cctype>
-enum { debug = 0 };
-enum { debugLocals = 0 };
-enum { debugSourceMapping = 0 };
-enum { debugWatches = 0 };
-enum { debugBreakpoints = 0 };
+constexpr bool debug = false;
+constexpr bool debugLocals = false;
+constexpr bool debugSourceMapping = false;
+constexpr bool debugBreakpoints = false;
#define CB(callback) [this](const DebuggerResponse &r) { callback(r); }
@@ -152,40 +151,11 @@ namespace Internal {
static const char localsPrefixC[] = "local.";
-struct MemoryViewCookie
-{
- explicit MemoryViewCookie(MemoryAgent *a = nullptr, quint64 addr = 0, quint64 l = 0)
- : agent(a), address(addr), length(l)
- {}
-
- MemoryAgent *agent;
- quint64 address;
- quint64 length;
-};
-
-struct MemoryChangeCookie
-{
- explicit MemoryChangeCookie(quint64 addr = 0, const QByteArray &d = QByteArray()) :
- address(addr), data(d) {}
-
- quint64 address;
- QByteArray data;
-};
-
-} // namespace Internal
-} // namespace Debugger
-
-Q_DECLARE_METATYPE(Debugger::Internal::MemoryViewCookie)
-Q_DECLARE_METATYPE(Debugger::Internal::MemoryChangeCookie)
-
-namespace Debugger {
-namespace Internal {
-
// Base data structure for command queue entries with callback
class CdbCommand
{
public:
- CdbCommand() {}
+ CdbCommand() = default;
CdbCommand(CdbEngine::CommandHandler h) : handler(h) {}
CdbEngine::CommandHandler handler;
@@ -243,17 +213,19 @@ CdbEngine::CdbEngine() :
this, &CdbEngine::readyReadStandardOut);
connect(action(UseDebuggingHelpers), &SavedAction::valueChanged,
this, &CdbEngine::updateLocals);
+
+ if (action(UseCodeModel)->isChecked())
+ m_codeModelSnapshot = CppTools::CppModelManager::instance()->snapshot();
}
void CdbEngine::init()
{
m_effectiveStartMode = NoStartMode;
m_accessible = false;
- m_specialStopMode = NoSpecialStop;
+ m_stopMode = NoStopRequested;
m_nextCommandToken = 0;
m_currentBuiltinResponseToken = -1;
- m_operateByInstructionPending = action(OperateByInstruction)->isChecked();
- m_operateByInstruction = true; // Default CDB setting
+ m_operateByInstruction = true;
m_hasDebuggee = false;
m_sourceStepInto = false;
m_watchPointX = m_watchPointY = 0;
@@ -268,7 +240,7 @@ void CdbEngine::init()
m_pendingBreakpointMap.clear();
m_insertSubBreakpointMap.clear();
m_pendingSubBreakpointMap.clear();
- m_customSpecialStopData.clear();
+ m_interrupCallbacks.clear();
m_symbolAddressCache.clear();
m_coreStopReason.reset();
@@ -295,25 +267,12 @@ void CdbEngine::init()
QTC_ASSERT(m_process.state() != QProcess::Running, SynchronousProcess::stopProcess(m_process));
}
-CdbEngine::~CdbEngine()
-{
-}
+CdbEngine::~CdbEngine() = default;
void CdbEngine::operateByInstructionTriggered(bool operateByInstruction)
{
- // To be set next time session becomes accessible
- m_operateByInstructionPending = operateByInstruction;
- if (state() == InferiorStopOk)
- syncOperateByInstruction(operateByInstruction);
-}
-
-void CdbEngine::syncOperateByInstruction(bool operateByInstruction)
-{
- if (debug)
- qDebug("syncOperateByInstruction current: %d new %d", m_operateByInstruction, operateByInstruction);
if (m_operateByInstruction == operateByInstruction)
return;
- QTC_ASSERT(m_accessible, return);
m_operateByInstruction = operateByInstruction;
runCommand({QLatin1String(m_operateByInstruction ? "l-t" : "l+t"), NoFlags});
runCommand({QLatin1String(m_operateByInstruction ? "l-s" : "l+s"), NoFlags});
@@ -410,7 +369,7 @@ void CdbEngine::setupEngine()
sp.inferior.commandLineArguments.clear();
sp.attachPID = ProcessHandle(terminal()->applicationPid());
sp.startMode = AttachExternal;
- sp.inferior.runMode = ApplicationLauncher::Gui; // Force no terminal.
+ sp.useTerminal = false; // Force no terminal.
showMessage(QString("Attaching to %1...").arg(sp.attachPID.pid()), LogMisc);
} else {
m_effectiveStartMode = sp.startMode;
@@ -459,7 +418,7 @@ void CdbEngine::setupEngine()
// register idle (debuggee stop) notification
<< "-c"
<< ".idle_cmd " + m_extensionCommandPrefix + "idle";
- if (sp.inferior.runMode == ApplicationLauncher::Console) // Separate console
+ if (sp.useTerminal) // Separate console
arguments << "-2";
if (boolSetting(IgnoreFirstChanceAccessViolation))
arguments << "-x";
@@ -527,8 +486,7 @@ void CdbEngine::setupEngine()
// Make sure that QTestLib uses OutputDebugString for logging.
const QString qtLoggingToConsoleKey = QStringLiteral("QT_LOGGING_TO_CONSOLE");
- if (sp.inferior.runMode != ApplicationLauncher::Console
- && !inferiorEnvironment.hasKey(qtLoggingToConsoleKey))
+ if (!sp.useTerminal && !inferiorEnvironment.hasKey(qtLoggingToConsoleKey))
inferiorEnvironment.set(qtLoggingToConsoleKey, QString(QLatin1Char('0')));
m_process.setEnvironment(mergeEnvironment(inferiorEnvironment.toStringList(),
@@ -565,6 +523,7 @@ void CdbEngine::handleInitialSessionIdle()
const DebuggerRunParameters &rp = runParameters();
if (!rp.commandsAfterConnect.isEmpty())
runCommand({rp.commandsAfterConnect, NoFlags});
+ operateByInstructionTriggered(action(OperateByInstruction)->isChecked());
// QmlCppEngine expects the QML engine to be connected before any breakpoints are hit
// (attemptBreakpointSynchronization() will be directly called then)
attemptBreakpointSynchronization();
@@ -580,10 +539,12 @@ void CdbEngine::handleInitialSessionIdle()
runCommand({"sxn 0x4000001f", NoFlags}); // Do not break on WowX86 exceptions.
runCommand({"sxn ibp", NoFlags}); // Do not break on initial breakpoints.
runCommand({".asm source_line", NoFlags}); // Source line in assembly
- runCommand({m_extensionCommandPrefix + "setparameter maxStringLength="
- + action(MaximalStringLength)->value().toString()
- + " maxStackDepth="
- + action(MaximalStackDepth)->value().toString(), NoFlags});
+ runCommand({m_extensionCommandPrefix
+ + "setparameter maxStringLength=" + action(MaximalStringLength)->value().toString()
+ + " maxStackDepth=" + action(MaximalStackDepth)->value().toString()
+ + " firstChance=" + (action(FirstChanceExceptionTaskEntry)->value().toBool() ? "1" : "0")
+ + " secondChance=" + (action(SecondChanceExceptionTaskEntry)->value().toBool() ? "1" : "0")
+ , NoFlags});
if (boolSetting(CdbUsePythonDumper))
runCommand({"print(sys.version)", ScriptCommand, CB(setupScripting)});
@@ -643,7 +604,7 @@ void CdbEngine::runEngine()
qDebug("runEngine");
const QStringList breakEvents = stringListSetting(CdbBreakEvents);
- foreach (const QString &breakEvent, breakEvents)
+ for (const QString &breakEvent : breakEvents)
runCommand({"sxe " + breakEvent, NoFlags});
// Break functions: each function must be fully qualified,
// else the debugger will slow down considerably.
@@ -863,14 +824,7 @@ void CdbEngine::interruptInferior()
notifyInferiorRunOk();
return;
}
- doInterruptInferior(NoSpecialStop);
-}
-
-void CdbEngine::doInterruptInferiorCustomSpecialStop(const QVariant &v)
-{
- if (m_specialStopMode == NoSpecialStop)
- doInterruptInferior(CustomSpecialStop);
- m_customSpecialStopData.push_back(v);
+ doInterruptInferior();
}
void CdbEngine::handleDoInterruptInferior(const QString &errorMessage)
@@ -885,11 +839,20 @@ void CdbEngine::handleDoInterruptInferior(const QString &errorMessage)
m_signalOperation.clear();
}
-void CdbEngine::doInterruptInferior(SpecialStopMode sm)
+void CdbEngine::doInterruptInferior(const InterruptCallback &callback)
{
- showMessage(QString("Interrupting process %1...").arg(inferiorPid()), LogMisc);
+ if (callback) {
+ m_interrupCallbacks.push_back(callback);
+ if (!m_initialSessionIdleHandled)
+ return;
+ if (m_stopMode == NoStopRequested)
+ m_stopMode = Callback;
+ } else {
+ m_stopMode = Interrupt;
+ }
- QTC_ASSERT(!m_signalOperation, notifyInferiorStopFailed(); return;);
+ showMessage(QString("Interrupting process %1...").arg(inferiorPid()), LogMisc);
+ QTC_ASSERT(!m_signalOperation, notifyInferiorStopFailed(); return);
if (DebuggerRunTool *rt = runTool()) {
IDevice::ConstPtr device = rt->device();
if (!device)
@@ -897,7 +860,6 @@ void CdbEngine::doInterruptInferior(SpecialStopMode sm)
if (device)
m_signalOperation = device->signalOperation();
}
- m_specialStopMode = sm;
QTC_ASSERT(m_signalOperation, notifyInferiorStopFailed(); return;);
connect(m_signalOperation.data(), &DeviceProcessSignalOperation::finished,
this, &CdbEngine::handleDoInterruptInferior);
@@ -985,7 +947,7 @@ void CdbEngine::handleJumpToLineAddressResolution(const DebuggerResponse &respon
if (apPos != -1)
answer.remove(apPos, 1);
bool ok;
- const quint64 address = answer.toLongLong(&ok, 16);
+ const quint64 address = answer.toULongLong(&ok, 16);
if (ok && address) {
jumpToAddress(address);
gotoLocation(Location(context.fileName, context.lineNumber));
@@ -994,7 +956,7 @@ void CdbEngine::handleJumpToLineAddressResolution(const DebuggerResponse &respon
static inline bool isAsciiWord(const QString &s)
{
- foreach (const QChar &c, s) {
+ for (const QChar &c : s) {
if (!c.isLetterOrNumber() || c.toLatin1() == 0)
return false;
}
@@ -1063,9 +1025,12 @@ void CdbEngine::runCommand(const DebuggerCommand &dbgCmd)
{
QString cmd = dbgCmd.function + dbgCmd.argsToString();
if (!m_accessible) {
- const QString msg = QString("Attempt to issue command \"%1\" to non-accessible session (%2)")
+ doInterruptInferior([this, dbgCmd](){
+ runCommand(dbgCmd);
+ });
+ const QString msg = QString("Attempt to issue command \"%1\" to non-accessible session (%2)... interrupting")
.arg(cmd, stateName(state()));
- showMessage(msg, LogError);
+ showMessage(msg, LogMisc);
return;
}
@@ -1106,7 +1071,7 @@ void CdbEngine::runCommand(const DebuggerCommand &dbgCmd)
elapsedLogTime(), qPrintable(dbgCmd.function), qPrintable(stateName(state())),
m_commandForToken.size());
}
- if (debug > 1) {
+ if (debug) {
qDebug("CdbEngine::postCommand: resulting command '%s'\n", qPrintable(fullCmd));
}
showMessage(cmd, LogInput);
@@ -1165,10 +1130,9 @@ void CdbEngine::doUpdateLocals(const UpdateParameters &updateParameters)
cmd.arg("displaystringlimit", action(DisplayStringLimit)->value().toString());
if (boolSetting(UseCodeModel)) {
- QStringList uninitializedVariables;
- getUninitializedVariables(Internal::cppCodeModelSnapshot(),
- frame.function, frame.file, frame.line, &uninitializedVariables);
- cmd.arg("uninitialized", uninitializedVariables);
+ QStringList variables = getUninitializedVariables(m_codeModelSnapshot,
+ frame.function, frame.file, frame.line);
+ cmd.arg("uninitialized", variables);
}
cmd.callback = [this](const DebuggerResponse &response) {
@@ -1215,7 +1179,7 @@ void CdbEngine::doUpdateLocals(const UpdateParameters &updateParameters)
if (!expanded.isEmpty()) {
str << blankSeparator << "-e ";
int i = 0;
- foreach (const QString &e, expanded) {
+ for (const QString &e : expanded) {
if (i++)
str << ',';
str << e;
@@ -1236,13 +1200,12 @@ void CdbEngine::doUpdateLocals(const UpdateParameters &updateParameters)
// Uninitialized variables if desired. Quote as safeguard against shadowed
// variables in case of errors in uninitializedVariables().
if (boolSetting(UseCodeModel)) {
- QStringList uninitializedVariables;
- getUninitializedVariables(Internal::cppCodeModelSnapshot(),
- frame.function, frame.file, frame.line, &uninitializedVariables);
- if (!uninitializedVariables.isEmpty()) {
+ const QStringList variables = getUninitializedVariables(m_codeModelSnapshot,
+ frame.function, frame.file, frame.line);
+ if (!variables.isEmpty()) {
str << blankSeparator << "-u \"";
int i = 0;
- foreach (const QString &u, uninitializedVariables) {
+ for (const QString &u : variables) {
if (i++)
str << ',';
str << localsPrefixC << u;
@@ -1493,34 +1456,26 @@ void CdbEngine::handleResolveSymbolHelper(const QList<quint64> &addresses, Disas
}
}
-void CdbEngine::fetchMemory(MemoryAgent *agent, quint64 addr, quint64 length)
+void CdbEngine::fetchMemory(MemoryAgent *agent, quint64 address, quint64 length)
{
if (debug)
- qDebug("CdbEngine::fetchMemory %llu bytes from 0x%llx", length, addr);
- const MemoryViewCookie cookie(agent, addr, length);
- if (m_accessible)
- postFetchMemory(cookie);
- else
- doInterruptInferiorCustomSpecialStop(qVariantFromValue(cookie));
-}
-
-void CdbEngine::postFetchMemory(const MemoryViewCookie &cookie)
-{
+ qDebug("CdbEngine::fetchMemory %llu bytes from 0x%llx", length, address);
DebuggerCommand cmd("memory", ExtensionCommand);
QString args;
StringInputStream str(args);
- str << cookie.address << ' ' << cookie.length;
+ str << address << ' ' << length;
cmd.args = args;
- cmd.callback = [this, cookie](const DebuggerResponse &response) {
- if (!cookie.agent)
+ cmd.callback = [this, agent = QPointer<MemoryAgent>(agent), address, length]
+ (const DebuggerResponse &response) {
+ if (!agent)
return;
if (response.resultClass == ResultDone) {
const QByteArray data = QByteArray::fromHex(response.data.data().toUtf8());
- if (unsigned(data.size()) == cookie.length)
- cookie.agent->addData(cookie.address, data);
+ if (unsigned(data.size()) == length)
+ agent->addData(address, data);
} else {
showMessage(response.data["msg"].data(), LogWarning);
- cookie.agent->addData(cookie.address, QByteArray(int(cookie.length), char()));
+ agent->addData(address, QByteArray(int(length), char()));
}
};
runCommand(cmd);
@@ -1529,12 +1484,7 @@ void CdbEngine::postFetchMemory(const MemoryViewCookie &cookie)
void CdbEngine::changeMemory(MemoryAgent *, quint64 addr, const QByteArray &data)
{
QTC_ASSERT(!data.isEmpty(), return);
- if (!m_accessible) {
- const MemoryChangeCookie cookie(addr, data);
- doInterruptInferiorCustomSpecialStop(qVariantFromValue(cookie));
- } else {
- runCommand({cdbWriteMemoryCommand(addr, data), NoFlags});
- }
+ runCommand({cdbWriteMemoryCommand(addr, data), NoFlags});
}
void CdbEngine::reloadModules()
@@ -1593,8 +1543,8 @@ void CdbEngine::handleModules(const DebuggerResponse &response)
Module module;
module.moduleName = gdbmiModule["name"].data();
module.modulePath = gdbmiModule["image"].data();
- module.startAddress = gdbmiModule["start"].data().toULongLong(0, 0);
- module.endAddress = gdbmiModule["end"].data().toULongLong(0, 0);
+ module.startAddress = gdbmiModule["start"].data().toULongLong(nullptr, 0);
+ module.endAddress = gdbmiModule["end"].data().toULongLong(nullptr, 0);
if (gdbmiModule["deferred"].type() == GdbMi::Invalid)
module.symbolsRead = Module::ReadOk;
handler->updateModule(module);
@@ -1821,6 +1771,8 @@ unsigned CdbEngine::examineStopReason(const GdbMi &stopReason,
return rc;
}
if (reason == "exception") {
+ if (m_stopMode == Callback)
+ rc |= StopIgnoreContinue;
WinException exception;
exception.fromGdbMI(stopReason);
QString description = exception.toString();
@@ -1863,6 +1815,7 @@ void CdbEngine::processStop(const GdbMi &stopReason, bool conditionalBreakPointT
ThreadId forcedThreadId;
const unsigned stopFlags = examineStopReason(stopReason, &message, &exceptionBoxMessage,
conditionalBreakPointTriggered);
+ m_stopMode = NoStopRequested;
// Do the non-blocking log reporting
if (stopFlags & StopReportLog)
showMessage(message, LogMisc);
@@ -1946,7 +1899,7 @@ void CdbEngine::handleBreakInsert(const DebuggerResponse &response, const Breakp
const QStringList reply = response.data.data().split('\n');
if (reply.isEmpty())
return;
- foreach (const QString &line, reply)
+ for (const QString &line : reply)
showMessage(line);
if (!reply.last().startsWith("Ambiguous symbol error") &&
(reply.length() < 2 || !reply.at(reply.length() - 2).startsWith("Ambiguous symbol error"))) {
@@ -1967,7 +1920,7 @@ void CdbEngine::handleBreakInsert(const DebuggerResponse &response, const Breakp
return;
Breakpoint bp = breakHandler()->breakpointById(bpId);
// add break point for every match
- int subBreakPointID = 0;
+ quint16 subBreakPointID = 0;
for (auto line = reply.constBegin(), end = reply.constEnd(); line != end; ++line) {
if (!line->startsWith("Matched: "))
continue;
@@ -2050,9 +2003,9 @@ void CdbEngine::handleSessionAccessible(unsigned long cdbExState)
return;
if (debug)
- qDebug("CdbEngine::handleSessionAccessible %dms in state '%s'/'%s', special mode %d",
+ qDebug("CdbEngine::handleSessionAccessible %dms in state '%s'/'%s'",
elapsedLogTime(), cdbStatusName(cdbExState),
- qPrintable(stateName(state())), m_specialStopMode);
+ qPrintable(stateName(state())));
switch (s) {
case EngineShutdownRequested:
@@ -2075,9 +2028,9 @@ void CdbEngine::handleSessionInaccessible(unsigned long cdbExState)
return;
if (debug)
- qDebug("CdbEngine::handleSessionInaccessible %dms in state '%s', '%s', special mode %d",
+ qDebug("CdbEngine::handleSessionInaccessible %dms in state '%s', '%s'",
elapsedLogTime(), cdbStatusName(cdbExState),
- qPrintable(stateName(state())), m_specialStopMode);
+ qPrintable(stateName(state())));
switch (state()) {
case EngineSetupRequested:
@@ -2114,37 +2067,13 @@ void CdbEngine::handleSessionIdle(const QString &message)
return;
if (debug)
- qDebug("CdbEngine::handleSessionIdle %dms '%s' in state '%s', special mode %d",
+ qDebug("CdbEngine::handleSessionIdle %dms '%s' in state '%s'",
elapsedLogTime(), qPrintable(message),
- qPrintable(stateName(state())), m_specialStopMode);
-
- // Switch source level debugging
- syncOperateByInstruction(m_operateByInstructionPending);
-
- // Engine-special stop reasons: Breakpoints and setup
- const SpecialStopMode specialStopMode = m_specialStopMode;
-
- m_specialStopMode = NoSpecialStop;
+ qPrintable(stateName(state())));
- switch (specialStopMode) {
- case SpecialStopSynchronizeBreakpoints:
- if (debug)
- qDebug("attemptBreakpointSynchronization in special stop");
- attemptBreakpointSynchronization();
- doContinueInferior();
- return;
- case SpecialStopGetWidgetAt:
- postWidgetAtCommand();
- return;
- case CustomSpecialStop:
- foreach (const QVariant &data, m_customSpecialStopData)
- handleCustomSpecialStop(data);
- m_customSpecialStopData.clear();
- doContinueInferior();
- return;
- case NoSpecialStop:
- break;
- }
+ for (const InterruptCallback &callback : m_interrupCallbacks)
+ callback();
+ m_interrupCallbacks.clear();
if (!m_initialSessionIdleHandled) { // Temporary stop at beginning
handleInitialSessionIdle();
@@ -2163,11 +2092,11 @@ void CdbEngine::handleSessionIdle(const QString &message)
void CdbEngine::handleExtensionMessage(char t, int token, const QString &what, const QString &message)
{
- if (debug > 1) {
+ if (debug) {
QDebug nospace = qDebug().nospace();
nospace << "handleExtensionMessage " << t << ' ' << token << ' ' << what
<< ' ' << stateName(state());
- if (t == 'N' || debug > 1)
+ if (t == 'N' || debug)
nospace << ' ' << message;
else
nospace << ' ' << message.size() << " bytes";
@@ -2268,12 +2197,11 @@ void CdbEngine::handleExtensionMessage(char t, int token, const QString &what, c
if (!isDebuggerWinException(exception.exceptionCode)) {
const Task::TaskType type =
isFatalWinException(exception.exceptionCode) ? Task::Error : Task::Warning;
- const FileName fileName = exception.file.isEmpty()
- ? FileName() : FileName::fromUserInput(exception.file);
+ const FileName fileName = FileName::fromUserInput(exception.file);
const QString taskEntry = tr("Debugger encountered an exception: %1").arg(
exception.toString(false).trimmed());
TaskHub::addTask(type, taskEntry,
- Debugger::Constants::TASK_CATEGORY_DEBUGGER_RUNTIME,
+ Constants::TASK_CATEGORY_DEBUGGER_RUNTIME,
fileName, exception.lineNumber);
}
return;
@@ -2331,7 +2259,7 @@ void CdbEngine::parseOutputLine(QString line)
static const QString creatorExtPrefix = "<qtcreatorcdbext>|";
if (line.startsWith(creatorExtPrefix)) {
// "<qtcreatorcdbext>|type_char|token|remainingChunks|serviceName|message"
- const char type = line.at(creatorExtPrefix.size()).unicode();
+ const char type = char(line.at(creatorExtPrefix.size()).unicode());
// integer token
const int tokenPos = creatorExtPrefix.size() + 2;
const int tokenEndPos = line.indexOf('|', tokenPos);
@@ -2360,7 +2288,7 @@ void CdbEngine::parseOutputLine(QString line)
int token = 0;
bool isStartToken = false;
const bool isCommandToken = checkCommandToken(m_tokenPrefix, line, &token, &isStartToken);
- if (debug > 1)
+ if (debug)
qDebug("Reading CDB stdout '%s',\n isCommand=%d, token=%d, isStart=%d",
qPrintable(line), isCommandToken, token, isStartToken);
@@ -2467,7 +2395,7 @@ static QByteArray multiBreakpointCommand(const char *cmdC, const Breakpoints &bp
{
QByteArray cmd(cmdC);
ByteArrayInputStream str(cmd);
- foreach (const BreakpointData *bp, bps)
+ for (const BreakpointData *bp : bps)
str << ' ' << bp->bpNumber;
return cmd;
}
@@ -2569,7 +2497,7 @@ void CdbEngine::attemptBreakpointSynchronization()
// Check if there is anything to be done at all.
BreakHandler *handler = breakHandler();
// Take ownership of the breakpoint. Requests insertion. TODO: Cpp only?
- foreach (Breakpoint bp, handler->unclaimedBreakpoints())
+ for (Breakpoint bp : handler->unclaimedBreakpoints())
if (acceptsBreakpoint(bp))
bp.setEngine(this);
@@ -2577,7 +2505,7 @@ void CdbEngine::attemptBreakpointSynchronization()
bool changed = !m_insertSubBreakpointMap.isEmpty();
const Breakpoints bps = handler->engineBreakpoints(this);
if (!changed) {
- foreach (Breakpoint bp, bps) {
+ for (Breakpoint bp : bps) {
switch (bp.state()) {
case BreakpointInsertRequested:
case BreakpointRemoveRequested:
@@ -2604,18 +2532,12 @@ void CdbEngine::attemptBreakpointSynchronization()
if (!changed)
return;
- if (!m_accessible) {
- // No nested calls.
- if (m_specialStopMode != SpecialStopSynchronizeBreakpoints)
- doInterruptInferior(SpecialStopSynchronizeBreakpoints);
- return;
- }
// Add/Change breakpoints and store pending ones in map, since
// Breakhandler::setResponse() on pending breakpoints clears the pending flag.
// handleBreakPoints will the complete that information and set it on the break handler.
bool addedChanged = false;
QScopedPointer<BreakpointCorrectionContext> lineCorrection;
- foreach (Breakpoint bp, bps) {
+ for (Breakpoint bp : bps) {
BreakpointParameters parameters = bp.parameters();
BreakpointModelId id = bp.id();
const auto handleBreakInsertCB = [this, id](const DebuggerResponse &r) { handleBreakInsert(r, id); };
@@ -2634,9 +2556,10 @@ void CdbEngine::attemptBreakpointSynchronization()
&& parameters.type == BreakpointByFileAndLine
&& boolSetting(CdbBreakPointCorrection)) {
if (lineCorrection.isNull())
- lineCorrection.reset(new BreakpointCorrectionContext(Internal::cppCodeModelSnapshot(),
+ lineCorrection.reset(new BreakpointCorrectionContext(m_codeModelSnapshot,
CppTools::CppModelManager::instance()->workingCopy()));
- response.lineNumber = lineCorrection->fixLineNumber(parameters.fileName, parameters.lineNumber);
+ response.lineNumber = int(lineCorrection->fixLineNumber(
+ parameters.fileName, unsigned(parameters.lineNumber)));
QString cmd = cdbAddBreakpointCommand(response, m_sourcePathMappings, id, false);
runCommand({cmd, BuiltinCommand, handleBreakInsertCB});
} else {
@@ -2763,7 +2686,7 @@ static StackFrames parseFrames(const GdbMi &gdbmi, bool *incomplete = nullptr)
frame.function = frameMi["function"].data();
frame.module = frameMi["from"].data();
frame.context = frameMi["context"].data();
- frame.address = frameMi["address"].data().toULongLong(0, 16);
+ frame.address = frameMi["address"].data().toULongLong(nullptr, 16);
rc.push_back(frame);
}
return rc;
@@ -2967,7 +2890,7 @@ void CdbEngine::handleWidgetAt(const DebuggerResponse &response)
break;
}
// 0x000 -> nothing found
- if (!watchExp.mid(sepPos + 1).toULongLong(0, 0)) {
+ if (!watchExp.mid(sepPos + 1).toULongLong(nullptr, 0)) {
message = QString("No widget could be found at %1, %2.").arg(m_watchPointX).arg(m_watchPointY);
break;
}
@@ -3076,44 +2999,11 @@ void CdbEngine::watchPoint(const QPoint &p)
{
m_watchPointX = p.x();
m_watchPointY = p.y();
- switch (state()) {
- case InferiorStopOk:
- postWidgetAtCommand();
- break;
- case InferiorRunOk:
- // "Select Widget to Watch" from a running application is currently not
- // supported. It could be implemented via SpecialStopGetWidgetAt-mode,
- // but requires some work as not to confuse the engine by state-change notifications
- // emitted by the debuggee function call.
- showMessage(tr("\"Select Widget to Watch\": Please stop the application first."), LogWarning);
- break;
- default:
- showMessage(tr("\"Select Widget to Watch\": Not supported in state \"%1\".").
- arg(stateName(state())), LogWarning);
- break;
- }
-}
-
-void CdbEngine::postWidgetAtCommand()
-{
DebuggerCommand cmd("widgetat", ExtensionCommand);
- cmd.args = QString("%1 %2").arg(m_watchPointX, m_watchPointY);
+ cmd.args = QString("%1 %2").arg(p.x(), p.y());
runCommand(cmd);
}
-void CdbEngine::handleCustomSpecialStop(const QVariant &v)
-{
- if (v.canConvert<MemoryChangeCookie>()) {
- const MemoryChangeCookie changeData = qvariant_cast<MemoryChangeCookie>(v);
- runCommand({cdbWriteMemoryCommand(changeData.address, changeData.data), NoFlags});
- return;
- }
- if (v.canConvert<MemoryViewCookie>()) {
- postFetchMemory(qvariant_cast<MemoryViewCookie>(v));
- return;
- }
-}
-
} // namespace Internal
} // namespace Debugger
diff --git a/src/plugins/debugger/cdb/cdbengine.h b/src/plugins/debugger/cdb/cdbengine.h
index d569dee25e..2ef4c3c876 100644
--- a/src/plugins/debugger/cdb/cdbengine.h
+++ b/src/plugins/debugger/cdb/cdbengine.h
@@ -28,6 +28,8 @@
#include <debugger/debuggerengine.h>
#include <debugger/breakhandler.h>
+#include <cplusplus/CppDocument.h>
+
#include <projectexplorer/devicesupport/idevice.h>
#include <QTime>
@@ -44,8 +46,8 @@ class CdbEngine : public DebuggerEngine
Q_OBJECT
public:
- typedef QSharedPointer<CdbCommand> CdbCommandPtr;
- typedef std::function<void(const DebuggerResponse &)> CommandHandler;
+ using CdbCommandPtr = QSharedPointer<CdbCommand>;
+ using CommandHandler = std::function<void (const DebuggerResponse &)>;
explicit CdbEngine();
~CdbEngine() override;
@@ -117,8 +119,8 @@ private:
void handleDoInterruptInferior(const QString &errorMessage);
- typedef QHash<BreakpointModelId, BreakpointResponse> PendingBreakPointMap;
- typedef QPair<QString, QString> SourcePathMapping;
+ using PendingBreakPointMap = QHash<BreakpointModelId, BreakpointResponse>;
+ using SourcePathMapping = QPair<QString, QString>;
struct NormalizedSourceFileName // Struct for caching mapped/normalized source files.
{
NormalizedSourceFileName(const QString &fn = QString(), bool e = false) : fileName(fn), exists(e) {}
@@ -127,13 +129,12 @@ private:
bool exists;
};
- enum SpecialStopMode
- {
- NoSpecialStop,
- SpecialStopSynchronizeBreakpoints,
- SpecialStopGetWidgetAt,
- CustomSpecialStop // Associated with m_specialStopData, handleCustomSpecialStop()
+ enum StopMode {
+ NoStopRequested,
+ Interrupt,
+ Callback
};
+
enum ParseStackResultFlags // Flags returned by parseStackTrace
{
ParseStackStepInto = 1, // Need to execute a step, hit on a call frame in "Step into"
@@ -158,16 +159,12 @@ private:
void handleSessionAccessible(unsigned long cdbExState);
void handleSessionInaccessible(unsigned long cdbExState);
void handleSessionIdle(const QString &message);
- void doInterruptInferior(SpecialStopMode sm);
- void doInterruptInferiorCustomSpecialStop(const QVariant &v);
+ using InterruptCallback = std::function<void()>;
+ void doInterruptInferior(const InterruptCallback &cb = InterruptCallback());
void doContinueInferior();
void parseOutputLine(QString line);
bool isCdbProcessRunning() const { return m_process.state() != QProcess::NotRunning; }
bool canInterruptInferior() const;
- void syncOperateByInstruction(bool operateByInstruction);
- void postWidgetAtCommand();
- void handleCustomSpecialStop(const QVariant &v);
- void postFetchMemory(const MemoryViewCookie &c);
inline void postDisassemblerCommand(quint64 address, DisassemblerAgent *agent);
void postDisassemblerCommand(quint64 address, quint64 endAddress,
DisassemblerAgent *agent);
@@ -213,7 +210,7 @@ private:
QByteArray m_outputBuffer;
//! Debugger accessible (expecting commands)
bool m_accessible = false;
- SpecialStopMode m_specialStopMode = NoSpecialStop;
+ StopMode m_stopMode = NoStopRequested;
ProjectExplorer::DeviceProcessSignalOperation::Ptr m_signalOperation;
int m_nextCommandToken = 0;
QHash<int, DebuggerCommand> m_commandForToken;
@@ -221,7 +218,6 @@ private:
int m_currentBuiltinResponseToken = -1;
QMap<QString, NormalizedSourceFileName> m_normalizedFileCache;
const QString m_extensionCommandPrefix; //!< Library name used as prefix
- bool m_operateByInstructionPending = true; //!< Creator operate by instruction action changed.
bool m_operateByInstruction = true; // Default CDB setting.
bool m_hasDebuggee = false;
enum Wow64State {
@@ -243,11 +239,12 @@ private:
QHash<QString, QString> m_fileNameModuleHash;
QMultiHash<QString, quint64> m_symbolAddressCache;
bool m_ignoreCdbOutput = false;
- QVariantList m_customSpecialStopData;
+ QList<InterruptCallback> m_interrupCallbacks;
QList<SourcePathMapping> m_sourcePathMappings;
QScopedPointer<GdbMi> m_coreStopReason;
int m_pythonVersion = 0; // 0xMMmmpp MM = major; mm = minor; pp = patch
bool m_initialSessionIdleHandled = false;
+ mutable CPlusPlus::Snapshot m_codeModelSnapshot;
};
} // namespace Internal
diff --git a/src/plugins/debugger/cdb/cdboptionspage.cpp b/src/plugins/debugger/cdb/cdboptionspage.cpp
index 0496d12bbb..9dacfe34ec 100644
--- a/src/plugins/debugger/cdb/cdboptionspage.cpp
+++ b/src/plugins/debugger/cdb/cdboptionspage.cpp
@@ -77,14 +77,14 @@ CdbBreakEventWidget::CdbBreakEventWidget(QWidget *parent) : QWidget(parent)
{
// 1 column with checkboxes only,
// further columns with checkbox + parameter
- QHBoxLayout *mainLayout = new QHBoxLayout;
+ auto mainLayout = new QHBoxLayout;
mainLayout->setMargin(0);
- QVBoxLayout *leftLayout = new QVBoxLayout;
+ auto leftLayout = new QVBoxLayout;
QFormLayout *parameterLayout = nullptr;
mainLayout->addLayout(leftLayout);
const size_t eventCount = sizeof(eventDescriptions) / sizeof(EventsDescription);
for (size_t e = 0; e < eventCount; e++) {
- QCheckBox *cb = new QCheckBox(tr(eventDescriptions[e].description));
+ auto cb = new QCheckBox(tr(eventDescriptions[e].description));
QLineEdit *le = nullptr;
if (eventDescriptions[e].hasParameter) {
if (!parameterLayout) {
@@ -95,7 +95,7 @@ CdbBreakEventWidget::CdbBreakEventWidget(QWidget *parent) : QWidget(parent)
le = new QLineEdit;
parameterLayout->addRow(cb, le);
if (parameterLayout->count() >= 6) // New column
- parameterLayout = 0;
+ parameterLayout = nullptr;
} else {
leftLayout->addWidget(cb);
}
@@ -119,8 +119,8 @@ void CdbBreakEventWidget::setBreakEvents(const QStringList &l)
{
clear();
// Split the list of ("eh", "out:MyOutput")
- foreach (const QString &evt, l) {
- const int colonPos = evt.indexOf(QLatin1Char(':'));
+ for (const QString &evt : l) {
+ const int colonPos = evt.indexOf(':');
const QString abbrev = colonPos != -1 ? evt.mid(0, colonPos) : evt;
const int index = indexOfEvent(abbrev);
if (index != -1)
@@ -168,7 +168,7 @@ CdbOptionsPageWidget::CdbOptionsPageWidget(QWidget *parent)
m_ui.startupFormLayout->setContentsMargins(margins);
- QVBoxLayout *eventLayout = new QVBoxLayout;
+ auto eventLayout = new QVBoxLayout;
eventLayout->setContentsMargins(margins);
eventLayout->addWidget(m_breakEventWidget);
m_ui.eventGroupBox->setLayout(eventLayout);
@@ -183,6 +183,8 @@ CdbOptionsPageWidget::CdbOptionsPageWidget(QWidget *parent)
group.insert(action(UseCdbConsole), m_ui.consoleCheckBox);
group.insert(action(CdbBreakPointCorrection), m_ui.breakpointCorrectionCheckBox);
group.insert(action(CdbUsePythonDumper), m_ui.usePythonDumper);
+ group.insert(action(FirstChanceExceptionTaskEntry), m_ui.firstChance);
+ group.insert(action(SecondChanceExceptionTaskEntry), m_ui.secondChance);
group.insert(action(IgnoreFirstChanceAccessViolation),
m_ui.ignoreFirstChanceAccessViolationCheckBox);
@@ -203,9 +205,7 @@ CdbOptionsPage::CdbOptionsPage()
setCategory(Debugger::Constants::DEBUGGER_SETTINGS_CATEGORY);
}
-CdbOptionsPage::~CdbOptionsPage()
-{
-}
+CdbOptionsPage::~CdbOptionsPage() = default;
QWidget *CdbOptionsPage::widget()
{
@@ -248,19 +248,19 @@ public:
CdbPathsPageWidget::CdbPathsPageWidget(QWidget *parent) :
QWidget(parent)
{
- QVBoxLayout *layout = new QVBoxLayout(this);
+ auto layout = new QVBoxLayout(this);
QString title = tr("Symbol Paths");
- QGroupBox* gbSymbolPath = new QGroupBox(this);
+ auto gbSymbolPath = new QGroupBox(this);
gbSymbolPath->setTitle(title);
- QVBoxLayout *gbSymbolPathLayout = new QVBoxLayout(gbSymbolPath);
+ auto gbSymbolPathLayout = new QVBoxLayout(gbSymbolPath);
m_symbolPathListEditor = new CdbSymbolPathListEditor(gbSymbolPath);
gbSymbolPathLayout->addWidget(m_symbolPathListEditor);
title = tr("Source Paths");
- QGroupBox* gbSourcePath = new QGroupBox(this);
+ auto gbSourcePath = new QGroupBox(this);
gbSourcePath->setTitle(title);
- QVBoxLayout *gbSourcePathLayout = new QVBoxLayout(gbSourcePath);
+ auto gbSourcePathLayout = new QVBoxLayout(gbSourcePath);
m_sourcePathListEditor = new Utils::PathListEditor(gbSourcePath);
gbSourcePathLayout->addWidget(m_sourcePathListEditor);
@@ -272,16 +272,14 @@ CdbPathsPageWidget::CdbPathsPageWidget(QWidget *parent) :
}
CdbPathsPage::CdbPathsPage()
- : m_widget(0)
+ : m_widget(nullptr)
{
setId("F.Debugger.Cdb");
setDisplayName(tr("CDB Paths"));
setCategory(Debugger::Constants::DEBUGGER_SETTINGS_CATEGORY);
}
-CdbPathsPage::~CdbPathsPage()
-{
-}
+CdbPathsPage::~CdbPathsPage() = default;
QWidget *CdbPathsPage::widget()
{
diff --git a/src/plugins/debugger/cdb/cdboptionspage.h b/src/plugins/debugger/cdb/cdboptionspage.h
index 8d2de5b344..9411672175 100644
--- a/src/plugins/debugger/cdb/cdboptionspage.h
+++ b/src/plugins/debugger/cdb/cdboptionspage.h
@@ -92,12 +92,12 @@ class CdbOptionsPage : public Core::IOptionsPage
public:
explicit CdbOptionsPage();
- virtual ~CdbOptionsPage();
+ ~CdbOptionsPage() override;
// IOptionsPage
- QWidget *widget();
- void apply();
- void finish();
+ QWidget *widget() override;
+ void apply() override;
+ void finish() override;
static const char *crtDbgReport;
@@ -112,14 +112,14 @@ class CdbPathsPage : public Core::IOptionsPage
public:
explicit CdbPathsPage();
- virtual ~CdbPathsPage();
+ ~CdbPathsPage() override;
static CdbPathsPage *instance();
// IOptionsPage
- QWidget *widget();
- void apply();
- void finish();
+ QWidget *widget() override;
+ void apply() override;
+ void finish() override;
private:
QPointer<CdbPathsPageWidget> m_widget;
diff --git a/src/plugins/debugger/cdb/cdboptionspagewidget.ui b/src/plugins/debugger/cdb/cdboptionspagewidget.ui
index 38f434688c..e6d5646dea 100644
--- a/src/plugins/debugger/cdb/cdboptionspagewidget.ui
+++ b/src/plugins/debugger/cdb/cdboptionspagewidget.ui
@@ -104,6 +104,35 @@
</layout>
</item>
<item>
+ <widget class="QGroupBox" name="exceptions">
+ <property name="title">
+ <string>Task Entries for Exceptions </string>
+ </property>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <widget class="QCheckBox" name="firstChance">
+ <property name="text">
+ <string>First chance exceptions</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="secondChance">
+ <property name="text">
+ <string>Second chance exceptions</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
diff --git a/src/plugins/debugger/cdb/cdbparsehelpers.cpp b/src/plugins/debugger/cdb/cdbparsehelpers.cpp
index 8c96dc6c80..fccd1c0086 100644
--- a/src/plugins/debugger/cdb/cdbparsehelpers.cpp
+++ b/src/plugins/debugger/cdb/cdbparsehelpers.cpp
@@ -55,11 +55,11 @@ QString cdbSourcePathMapping(QString fileName,
const QList<QPair<QString, QString> > &sourcePathMapping,
SourcePathMode mode)
{
- typedef QPair<QString, QString> SourcePathMapping;
+ using SourcePathMapping = QPair<QString, QString>;
if (fileName.isEmpty() || sourcePathMapping.isEmpty())
return fileName;
- foreach (const SourcePathMapping &m, sourcePathMapping) {
+ for (const SourcePathMapping &m : sourcePathMapping) {
const QString &source = mode == DebuggerToSource ? m.first : m.second;
const int sourceSize = source.size();
// Map parts of the path and ensure a slash follows.
@@ -286,7 +286,7 @@ void parseBreakPoint(const GdbMi &gdbmi, BreakpointResponse *r,
r->fileName = sourceFileName.data();
const GdbMi lineNumber = gdbmi["srcline"];
if (lineNumber.isValid())
- r->lineNumber = lineNumber.data().toULongLong(0, 0);
+ r->lineNumber = lineNumber.data().toULongLong(nullptr, 0);
}
if (expression) {
const GdbMi expressionG = gdbmi["expression"];
@@ -295,7 +295,7 @@ void parseBreakPoint(const GdbMi &gdbmi, BreakpointResponse *r,
}
const GdbMi addressG = gdbmi["address"];
if (addressG.isValid())
- r->address = addressG.data().toULongLong(0, 0);
+ r->address = addressG.data().toULongLong(nullptr, 0);
if (gdbmiChildToInt(gdbmi, "passcount", &(r->ignoreCount)))
r->ignoreCount--;
gdbmiChildToInt(gdbmi, "thread", &(r->threadSpec));
@@ -347,11 +347,7 @@ QString debugByteArray(const QByteArray &a)
return rc;
}
-WinException::WinException() :
- exceptionCode(0), exceptionFlags(0), exceptionAddress(0),
- info1(0),info2(0), firstChance(false), lineNumber(0)
-{
-}
+WinException::WinException() = default;
void WinException::fromGdbMI(const GdbMi &gdbmi)
{
@@ -448,7 +444,7 @@ bool parseCdbDisassemblerFunctionLine(const QString &l,
const int offsetPos = l.indexOf(QLatin1String("+0x"));
if (offsetPos > 0) {
*currentFunction = l.left(offsetPos);
- *functionOffset = l.mid(offsetPos + 3, functionEnd - offsetPos - 3).trimmed().toULongLong(0, 16);
+ *functionOffset = l.mid(offsetPos + 3, functionEnd - offsetPos - 3).trimmed().toULongLong(nullptr, 16);
} else { // No offset, directly at beginning.
*currentFunction = l.left(functionEnd);
*functionOffset = 0;
diff --git a/src/plugins/debugger/cdb/cdbparsehelpers.h b/src/plugins/debugger/cdb/cdbparsehelpers.h
index d9c906fa94..f9973c4de8 100644
--- a/src/plugins/debugger/cdb/cdbparsehelpers.h
+++ b/src/plugins/debugger/cdb/cdbparsehelpers.h
@@ -82,14 +82,14 @@ struct WinException
void fromGdbMI(const GdbMi &);
QString toString(bool includeLocation = false) const;
- unsigned exceptionCode;
- unsigned exceptionFlags;
- quint64 exceptionAddress;
- quint64 info1;
- quint64 info2;
- bool firstChance;
+ unsigned exceptionCode = 0;
+ unsigned exceptionFlags = 0;
+ quint64 exceptionAddress = 0;
+ quint64 info1 = 0;
+ quint64 info2 = 0;
+ bool firstChance = false;
QString file;
- int lineNumber;
+ int lineNumber = 0;
QString function;
};
diff --git a/src/plugins/debugger/cdb/stringinputstream.cpp b/src/plugins/debugger/cdb/stringinputstream.cpp
index a76f7183fc..980c9c5581 100644
--- a/src/plugins/debugger/cdb/stringinputstream.cpp
+++ b/src/plugins/debugger/cdb/stringinputstream.cpp
@@ -31,7 +31,7 @@ namespace Debugger {
namespace Internal {
StringInputStream::StringInputStream(QString &str) :
- m_target(str), m_integerBase(10), m_hexPrefix(false), m_width(0)
+ m_target(str)
{
}
diff --git a/src/plugins/debugger/cdb/stringinputstream.h b/src/plugins/debugger/cdb/stringinputstream.h
index 0ee46094b1..61c78c7a0a 100644
--- a/src/plugins/debugger/cdb/stringinputstream.h
+++ b/src/plugins/debugger/cdb/stringinputstream.h
@@ -35,7 +35,7 @@ class StringInputStream
Q_DISABLE_COPY(StringInputStream)
public:
- typedef void (ModifierFunc)(StringInputStream &s);
+ using ModifierFunc = void (StringInputStream &);
explicit StringInputStream(QString &str);
@@ -62,9 +62,9 @@ private:
template <class IntType> void appendInt(IntType i);
QString &m_target;
- int m_integerBase;
- bool m_hexPrefix;
- int m_width;
+ int m_integerBase = 10;
+ bool m_hexPrefix = false;
+ int m_width = 0;
};
template <class IntType>
diff --git a/src/plugins/debugger/commonoptionspage.cpp b/src/plugins/debugger/commonoptionspage.cpp
index 81c64118d3..2514df2c10 100644
--- a/src/plugins/debugger/commonoptionspage.cpp
+++ b/src/plugins/debugger/commonoptionspage.cpp
@@ -223,21 +223,21 @@ QWidget *CommonOptionsPage::widget()
checkBoxKeepEditorStationaryWhileStepping);
m_group.insert(action(FontSizeFollowsEditor),
checkBoxFontSizeFollowsEditor);
- m_group.insert(action(AutoDerefPointers), 0);
- m_group.insert(action(UseToolTipsInLocalsView), 0);
- m_group.insert(action(AlwaysAdjustColumnWidths), 0);
- m_group.insert(action(UseToolTipsInBreakpointsView), 0);
- m_group.insert(action(UseToolTipsInStackView), 0);
- m_group.insert(action(UseAddressInBreakpointsView), 0);
- m_group.insert(action(UseAddressInStackView), 0);
+ m_group.insert(action(AutoDerefPointers), nullptr);
+ m_group.insert(action(UseToolTipsInLocalsView), nullptr);
+ m_group.insert(action(AlwaysAdjustColumnWidths), nullptr);
+ m_group.insert(action(UseToolTipsInBreakpointsView), nullptr);
+ m_group.insert(action(UseToolTipsInStackView), nullptr);
+ m_group.insert(action(UseAddressInBreakpointsView), nullptr);
+ m_group.insert(action(UseAddressInStackView), nullptr);
m_group.insert(action(MaximalStackDepth), spinBoxMaximalStackDepth);
- m_group.insert(action(ShowStdNamespace), 0);
- m_group.insert(action(ShowQtNamespace), 0);
- m_group.insert(action(ShowQObjectNames), 0);
- m_group.insert(action(SortStructMembers), 0);
- m_group.insert(action(LogTimeStamps), 0);
- m_group.insert(action(BreakOnThrow), 0);
- m_group.insert(action(BreakOnCatch), 0);
+ m_group.insert(action(ShowStdNamespace), nullptr);
+ m_group.insert(action(ShowQtNamespace), nullptr);
+ m_group.insert(action(ShowQObjectNames), nullptr);
+ m_group.insert(action(SortStructMembers), nullptr);
+ m_group.insert(action(LogTimeStamps), nullptr);
+ m_group.insert(action(BreakOnThrow), nullptr);
+ m_group.insert(action(BreakOnCatch), nullptr);
if (HostOsInfo::isWindowsHost()) {
SavedAction *registerAction = action(RegisterForPostMortem);
m_group.insert(registerAction, checkBoxRegisterForPostMortem);
diff --git a/src/plugins/debugger/console/console.cpp b/src/plugins/debugger/console/console.cpp
index 31a16f8d73..9391d9f05f 100644
--- a/src/plugins/debugger/console/console.cpp
+++ b/src/plugins/debugger/console/console.cpp
@@ -63,7 +63,7 @@ Console::Console()
m_consoleWidget->setWindowTitle(displayName());
m_consoleWidget->setEnabled(true);
- QVBoxLayout *vbox = new QVBoxLayout(m_consoleWidget);
+ auto vbox = new QVBoxLayout(m_consoleWidget);
vbox->setMargin(0);
vbox->setSpacing(0);
@@ -92,7 +92,7 @@ Console::Console()
itemDelegate, &ConsoleItemDelegate::currentChanged);
m_consoleView->setItemDelegate(itemDelegate);
- Aggregation::Aggregate *aggregate = new Aggregation::Aggregate();
+ auto aggregate = new Aggregation::Aggregate();
aggregate->add(m_consoleView);
aggregate->add(new Core::ItemViewFind(m_consoleView));
@@ -189,7 +189,7 @@ bool Console::canFocus() const
bool Console::hasFocus() const
{
- for (QWidget *widget = m_consoleWidget->window()->focusWidget(); widget != 0;
+ for (QWidget *widget = m_consoleWidget->window()->focusWidget(); widget != nullptr;
widget = widget->parentWidget()) {
if (widget == m_consoleWidget)
return true;
diff --git a/src/plugins/debugger/console/console.h b/src/plugins/debugger/console/console.h
index d95a56601a..c46add0a86 100644
--- a/src/plugins/debugger/console/console.h
+++ b/src/plugins/debugger/console/console.h
@@ -43,7 +43,7 @@ namespace Utils { class SavedAction; }
namespace Debugger {
namespace Internal {
-typedef std::function<void(QString)> ScriptEvaluator;
+using ScriptEvaluator = std::function<void (QString)>;
class ConsoleItemModel;
class ConsoleView;
diff --git a/src/plugins/debugger/console/consoleedit.h b/src/plugins/debugger/console/consoleedit.h
index b27348f6d9..44ef4bd112 100644
--- a/src/plugins/debugger/console/consoleedit.h
+++ b/src/plugins/debugger/console/consoleedit.h
@@ -41,8 +41,8 @@ public:
QString getCurrentScript() const;
protected:
- void keyPressEvent(QKeyEvent *e);
- void focusOutEvent(QFocusEvent *e);
+ void keyPressEvent(QKeyEvent *e) override;
+ void focusOutEvent(QFocusEvent *e) override;
signals:
void editingFinished();
diff --git a/src/plugins/debugger/console/consoleitem.cpp b/src/plugins/debugger/console/consoleitem.cpp
index 4bf0253594..d22e14d6b4 100644
--- a/src/plugins/debugger/console/consoleitem.cpp
+++ b/src/plugins/debugger/console/consoleitem.cpp
@@ -44,7 +44,7 @@ ConsoleItem::ConsoleItem(ItemType itemType, const QString &expression, const QSt
ConsoleItem::ConsoleItem(ConsoleItem::ItemType itemType, const QString &expression,
std::function<void(ConsoleItem *)> doFetch) :
- m_itemType(itemType), m_text(addZeroWidthSpace(expression)), m_line(-1), m_doFetch(doFetch)
+ m_itemType(itemType), m_text(addZeroWidthSpace(expression)), m_doFetch(doFetch)
{}
ConsoleItem::ItemType ConsoleItem::itemType() const
@@ -144,7 +144,7 @@ void ConsoleItem::fetchMore()
}
for (TreeItem *child : *this) {
- ConsoleItem *item = static_cast<ConsoleItem *>(child);
+ auto item = static_cast<ConsoleItem*>(child);
if (item->m_doFetch) {
item->m_doFetch(item);
item->m_doFetch = m_doFetch;
diff --git a/src/plugins/debugger/console/consoleitem.h b/src/plugins/debugger/console/consoleitem.h
index e6402228bc..5e6b5a4d77 100644
--- a/src/plugins/debugger/console/consoleitem.h
+++ b/src/plugins/debugger/console/consoleitem.h
@@ -75,7 +75,7 @@ private:
ItemType m_itemType;
QString m_text;
QString m_file;
- int m_line;
+ int m_line = -1;
std::function<void(ConsoleItem *)> m_doFetch;
};
diff --git a/src/plugins/debugger/console/consoleitemdelegate.cpp b/src/plugins/debugger/console/consoleitemdelegate.cpp
index 4fdb01b036..5a4f0becaf 100644
--- a/src/plugins/debugger/console/consoleitemdelegate.cpp
+++ b/src/plugins/debugger/console/consoleitemdelegate.cpp
@@ -57,8 +57,7 @@ ConsoleItemDelegate::ConsoleItemDelegate(ConsoleItemModel *model, QObject *paren
m_expandIcon(Utils::Icons::EXPAND.icon()),
m_collapseIcon(Utils::Icons::COLLAPSE.icon()),
m_prompt(Utils::Icon({{QLatin1String(":/utils/images/next.png"),
- Utils::Theme::TextColorNormal}}, Utils::Icon::Tint).icon()),
- m_cachedHeight(0)
+ Utils::Theme::TextColorNormal}}, Utils::Icon::Tint).icon())
{
}
@@ -124,7 +123,7 @@ void ConsoleItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &o
bool(opt.state & QStyle::State_Selected));
// Calculate positions
- const QTreeView *view = qobject_cast<const QTreeView *>(opt.widget);
+ const auto view = qobject_cast<const QTreeView*>(opt.widget);
int level = 0;
QModelIndex idx(index);
while (idx.parent() != QModelIndex()) {
@@ -219,7 +218,7 @@ QSize ConsoleItemDelegate::sizeHint(const QStyleOptionViewItem &option,
QStyleOptionViewItem opt = option;
initStyleOption(&opt, index);
- const QTreeView *view = qobject_cast<const QTreeView *>(opt.widget);
+ const auto view = qobject_cast<const QTreeView*>(opt.widget);
int level = 0;
QModelIndex idx(index);
while (idx.parent() != QModelIndex()) {
@@ -268,7 +267,7 @@ QWidget *ConsoleItemDelegate::createEditor(QWidget *parent,
const QModelIndex &index) const
{
- ConsoleEdit *editor = new ConsoleEdit(index, parent);
+ auto editor = new ConsoleEdit(index, parent);
// Make the background transparent so that the prompt shines through
editor->setStyleSheet(QLatin1String("QTextEdit {"
"margin-left: 24px;"
@@ -286,7 +285,7 @@ QWidget *ConsoleItemDelegate::createEditor(QWidget *parent,
void ConsoleItemDelegate::setEditorData(QWidget *editor,
const QModelIndex &index) const
{
- ConsoleEdit *edtr = qobject_cast<ConsoleEdit *>(editor);
+ auto edtr = qobject_cast<ConsoleEdit*>(editor);
edtr->insertPlainText(index.data(ConsoleItem::ExpressionRole).toString());
}
@@ -294,7 +293,7 @@ void ConsoleItemDelegate::setModelData(QWidget *editor,
QAbstractItemModel *model,
const QModelIndex &index) const
{
- ConsoleEdit *edtr = qobject_cast<ConsoleEdit *>(editor);
+ auto edtr = qobject_cast<ConsoleEdit*>(editor);
model->setData(index, edtr->getCurrentScript(), ConsoleItem::ExpressionRole);
model->setData(index, ConsoleItem::InputType, ConsoleItem::TypeRole);
}
diff --git a/src/plugins/debugger/console/consoleitemdelegate.h b/src/plugins/debugger/console/consoleitemdelegate.h
index 87896a89c2..3b40666743 100644
--- a/src/plugins/debugger/console/consoleitemdelegate.h
+++ b/src/plugins/debugger/console/consoleitemdelegate.h
@@ -48,16 +48,17 @@ public:
protected:
void paint(QPainter *painter, const QStyleOptionViewItem &option,
- const QModelIndex &index) const;
+ const QModelIndex &index) const override;
QSize sizeHint(const QStyleOptionViewItem &option,
- const QModelIndex &index) const;
+ const QModelIndex &index) const override;
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option,
- const QModelIndex &index) const;
- void setEditorData(QWidget *editor, const QModelIndex &index) const;
- void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const;
+ const QModelIndex &index) const override;
+ void setEditorData(QWidget *editor, const QModelIndex &index) const override;
+ void setModelData(QWidget *editor, QAbstractItemModel *model,
+ const QModelIndex &index) const override;
void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option,
- const QModelIndex &index) const;
+ const QModelIndex &index) const override;
private:
qreal layoutText(QTextLayout &tl, int width, bool *success = nullptr) const;
@@ -70,7 +71,7 @@ private:
const QIcon m_expandIcon;
const QIcon m_collapseIcon;
const QIcon m_prompt;
- mutable int m_cachedHeight;
+ mutable int m_cachedHeight = 0;
mutable QFont m_cachedFont;
};
@@ -95,8 +96,6 @@ public:
m_width(rect.width()),
m_top(rect.top()),
m_bottom(rect.bottom()),
- m_maxFileLength(0),
- m_maxLineLength(0),
m_showTaskIconArea(showTaskIconArea),
m_showExpandableIconArea(showExpandableIconArea)
{
diff --git a/src/plugins/debugger/console/consoleitemmodel.cpp b/src/plugins/debugger/console/consoleitemmodel.cpp
index ea36932f30..383a0e7b64 100644
--- a/src/plugins/debugger/console/consoleitemmodel.cpp
+++ b/src/plugins/debugger/console/consoleitemmodel.cpp
@@ -38,8 +38,7 @@ namespace Internal {
///////////////////////////////////////////////////////////////////////
ConsoleItemModel::ConsoleItemModel(QObject *parent) :
- Utils::TreeModel<>(new ConsoleItem, parent),
- m_maxSizeOfFileName(0), m_canFetchMore(false)
+ Utils::TreeModel<>(new ConsoleItem, parent)
{
clear();
}
diff --git a/src/plugins/debugger/console/consoleitemmodel.h b/src/plugins/debugger/console/consoleitemmodel.h
index 5aaab0335c..921b5d1cc9 100644
--- a/src/plugins/debugger/console/consoleitemmodel.h
+++ b/src/plugins/debugger/console/consoleitemmodel.h
@@ -60,8 +60,8 @@ signals:
void selectEditableRow(const QModelIndex &index, QItemSelectionModel::SelectionFlags flags);
private:
- int m_maxSizeOfFileName;
- bool m_canFetchMore;
+ int m_maxSizeOfFileName = 0;
+ bool m_canFetchMore = false;
};
} // Internal
diff --git a/src/plugins/debugger/console/consoleproxymodel.h b/src/plugins/debugger/console/consoleproxymodel.h
index d75114d3e6..c97c4f10cf 100644
--- a/src/plugins/debugger/console/consoleproxymodel.h
+++ b/src/plugins/debugger/console/consoleproxymodel.h
@@ -52,7 +52,8 @@ signals:
QItemSelectionModel::SelectionFlags command);
protected:
- bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const;
+ bool filterAcceptsRow(int source_row,
+ const QModelIndex &source_parent) const override;
private:
QFlags<ConsoleItem::ItemType> m_filter;
diff --git a/src/plugins/debugger/console/consoleview.cpp b/src/plugins/debugger/console/consoleview.cpp
index 50a8a838f9..2891e1aa0b 100644
--- a/src/plugins/debugger/console/consoleview.cpp
+++ b/src/plugins/debugger/console/consoleview.cpp
@@ -110,7 +110,7 @@ ConsoleView::ConsoleView(ConsoleItemModel *model, QWidget *parent) :
baseName = QLatin1String("fusion"); // Qt5
}
}
- ConsoleViewStyle *style = new ConsoleViewStyle(baseName);
+ auto style = new ConsoleViewStyle(baseName);
setStyle(style);
style->setParent(this);
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
@@ -180,18 +180,18 @@ void ConsoleView::contextMenuEvent(QContextMenuEvent *event)
QModelIndex itemIndex = indexAt(event->pos());
QMenu menu;
- QAction *copy = new QAction(tr("&Copy"), this);
+ auto copy = new QAction(tr("&Copy"), this);
copy->setEnabled(itemIndex.isValid());
menu.addAction(copy);
- QAction *show = new QAction(tr("&Show in Editor"), this);
+ auto show = new QAction(tr("&Show in Editor"), this);
show->setEnabled(canShowItemInTextEditor(itemIndex));
menu.addAction(show);
menu.addSeparator();
- QAction *clear = new QAction(tr("C&lear"), this);
+ auto clear = new QAction(tr("C&lear"), this);
menu.addAction(clear);
QAction *a = menu.exec(event->globalPos());
- if (a == 0)
+ if (a == nullptr)
return;
if (a == copy) {
@@ -199,8 +199,8 @@ void ConsoleView::contextMenuEvent(QContextMenuEvent *event)
} else if (a == show) {
onRowActivated(itemIndex);
} else if (a == clear) {
- QAbstractProxyModel *proxyModel = qobject_cast<QAbstractProxyModel *>(model());
- ConsoleItemModel *handler = qobject_cast<ConsoleItemModel *>(
+ auto proxyModel = qobject_cast<QAbstractProxyModel*>(model());
+ auto handler = qobject_cast<ConsoleItemModel*>(
proxyModel->sourceModel());
handler->clear();
}
diff --git a/src/plugins/debugger/console/consoleview.h b/src/plugins/debugger/console/consoleview.h
index 493e65a252..9e3f2013bb 100644
--- a/src/plugins/debugger/console/consoleview.h
+++ b/src/plugins/debugger/console/consoleview.h
@@ -44,12 +44,12 @@ public:
void populateFileFinder();
protected:
- void mousePressEvent(QMouseEvent *event);
- void resizeEvent(QResizeEvent *e);
+ void mousePressEvent(QMouseEvent *event) override;
+ void resizeEvent(QResizeEvent *e) override;
void drawBranches(QPainter *painter, const QRect &rect,
- const QModelIndex &index) const;
- void contextMenuEvent(QContextMenuEvent *event);
- void focusInEvent(QFocusEvent *event);
+ const QModelIndex &index) const override;
+ void contextMenuEvent(QContextMenuEvent *event) override;
+ void focusInEvent(QFocusEvent *event) override;
private:
void onRowActivated(const QModelIndex &index);
diff --git a/src/plugins/debugger/debuggeractions.cpp b/src/plugins/debugger/debuggeractions.cpp
index 791985588c..d148fc9202 100644
--- a/src/plugins/debugger/debuggeractions.cpp
+++ b/src/plugins/debugger/debuggeractions.cpp
@@ -234,6 +234,18 @@ DebuggerSettings::DebuggerSettings()
item = new SavedAction(this);
item->setCheckable(true);
+ item->setDefaultValue(true);
+ item->setSettingsKey(cdbSettingsGroup, QLatin1String("FirstChanceExceptionTaskEntry"));
+ insertItem(FirstChanceExceptionTaskEntry, item);
+
+ item = new SavedAction(this);
+ item->setCheckable(true);
+ item->setDefaultValue(true);
+ item->setSettingsKey(cdbSettingsGroup, QLatin1String("SecondChanceExceptionTaskEntry"));
+ insertItem(SecondChanceExceptionTaskEntry, item);
+
+ item = new SavedAction(this);
+ item->setCheckable(true);
item->setDefaultValue(false);
item->setSettingsKey(cdbSettingsGroup, QLatin1String("IgnoreFirstChanceAccessViolation"));
insertItem(IgnoreFirstChanceAccessViolation, item);
@@ -677,7 +689,7 @@ void DebuggerSettings::writeSettings() const
SavedAction *DebuggerSettings::item(int code) const
{
- QTC_ASSERT(m_items.value(code, 0), qDebug() << "CODE: " << code; return 0);
+ QTC_ASSERT(m_items.value(code, 0), qDebug() << "CODE: " << code; return nullptr);
return m_items.value(code, 0);
}
diff --git a/src/plugins/debugger/debuggeractions.h b/src/plugins/debugger/debuggeractions.h
index 60ee01ff0d..15f2e73d99 100644
--- a/src/plugins/debugger/debuggeractions.h
+++ b/src/plugins/debugger/debuggeractions.h
@@ -36,8 +36,8 @@ namespace Utils { class SavedAction; }
namespace Debugger {
namespace Internal {
-typedef QMap<QString, QString> SourcePathMap;
-typedef QVector<QPair<QRegExp, QString> > SourcePathRegExpMap;
+using SourcePathMap = QMap<QString, QString>;
+using SourcePathRegExpMap = QVector<QPair<QRegExp, QString> >;
// Global debugger options that are not stored as saved action.
class GlobalDebuggerOptions
@@ -117,6 +117,8 @@ enum DebuggerActionCode
UseCdbConsole,
CdbBreakPointCorrection,
CdbUsePythonDumper,
+ FirstChanceExceptionTaskEntry,
+ SecondChanceExceptionTaskEntry,
IgnoreFirstChanceAccessViolation,
// Gdb
diff --git a/src/plugins/debugger/debuggercore.h b/src/plugins/debugger/debuggercore.h
index 57f9476bf8..c9eb7c0f7e 100644
--- a/src/plugins/debugger/debuggercore.h
+++ b/src/plugins/debugger/debuggercore.h
@@ -67,7 +67,6 @@ enum TestCases
// Some convenience.
void updateState(DebuggerRunTool *runTool);
void updateLocalsWindow(bool showReturn);
-const CPlusPlus::Snapshot &cppCodeModelSnapshot();
bool hasSnapshots();
void openTextEditor(const QString &titlePattern, const QString &contents);
@@ -77,7 +76,7 @@ void showMessage(const QString &msg, int channel, int timeout = -1);
bool isReverseDebugging();
void runControlStarted(DebuggerRunTool *runTool);
void runControlFinished(DebuggerRunTool *runTool);
-void displayDebugger(DebuggerRunTool *runTool, bool updateEngine);
+void displayDebugger(DebuggerRunTool *runTool);
void synchronizeBreakpoints();
void saveModeToRestore();
diff --git a/src/plugins/debugger/debuggerdialogs.cpp b/src/plugins/debugger/debuggerdialogs.cpp
index c7934e6839..eda3d3ce47 100644
--- a/src/plugins/debugger/debuggerdialogs.cpp
+++ b/src/plugins/debugger/debuggerdialogs.cpp
@@ -148,6 +148,7 @@ public:
QString serverAddress;
Runnable runnable;
bool breakAtMain = false;
+ bool runInTerminal = false;
QString serverStartScript;
QString debugInfoLocation;
};
@@ -159,7 +160,7 @@ bool StartApplicationParameters::equals(const StartApplicationParameters &rhs) c
&& runnable.commandLineArguments == rhs.runnable.commandLineArguments
&& runnable.workingDirectory == rhs.runnable.workingDirectory
&& breakAtMain == rhs.breakAtMain
- && runnable.runMode == rhs.runnable.runMode
+ && runInTerminal == rhs.runInTerminal
&& serverStartScript == rhs.serverStartScript
&& kitId == rhs.kitId
&& debugInfoLocation == rhs.debugInfoLocation
@@ -195,7 +196,7 @@ void StartApplicationParameters::toSettings(QSettings *settings) const
settings->setValue("LastExternalExecutableArguments", runnable.commandLineArguments);
settings->setValue("LastExternalWorkingDirectory", runnable.workingDirectory);
settings->setValue("LastExternalBreakAtMain", breakAtMain);
- settings->setValue("LastExternalRunInTerminal", runnable.runMode == ApplicationLauncher::Console);
+ settings->setValue("LastExternalRunInTerminal", runInTerminal);
settings->setValue("LastServerStartScript", serverStartScript);
settings->setValue("LastDebugInfoLocation", debugInfoLocation);
}
@@ -209,8 +210,7 @@ void StartApplicationParameters::fromSettings(const QSettings *settings)
runnable.commandLineArguments = settings->value("LastExternalExecutableArguments").toString();
runnable.workingDirectory = settings->value("LastExternalWorkingDirectory").toString();
breakAtMain = settings->value("LastExternalBreakAtMain").toBool();
- runnable.runMode = settings->value("LastExternalRunInTerminal").toBool()
- ? ApplicationLauncher::Console : ApplicationLauncher::Gui;
+ runInTerminal = settings->value("LastExternalRunInTerminal").toBool();
serverStartScript = settings->value("LastServerStartScript").toString();
debugInfoLocation = settings->value("LastDebugInfoLocation").toString();
}
@@ -469,8 +469,7 @@ StartApplicationParameters StartApplicationDialog::parameters() const
result.runnable.commandLineArguments = d->arguments->text();
result.runnable.workingDirectory = d->workingDirectory->path();
result.breakAtMain = d->breakAtMainCheckBox->isChecked();
- result.runnable.runMode = d->runInTerminalCheckBox->isChecked()
- ? ApplicationLauncher::Console : ApplicationLauncher::Gui;
+ result.runInTerminal = d->runInTerminalCheckBox->isChecked();
return result;
}
@@ -484,7 +483,7 @@ void StartApplicationDialog::setParameters(const StartApplicationParameters &p)
d->debuginfoPathChooser->setPath(p.debugInfoLocation);
d->arguments->setText(p.runnable.commandLineArguments);
d->workingDirectory->setPath(p.runnable.workingDirectory);
- d->runInTerminalCheckBox->setChecked(p.runnable.runMode == ApplicationLauncher::Console);
+ d->runInTerminalCheckBox->setChecked(p.runInTerminal);
d->breakAtMainCheckBox->setChecked(p.breakAtMain);
updateState();
}
@@ -586,7 +585,7 @@ static QString cdbRemoteHelp()
}
StartRemoteCdbDialog::StartRemoteCdbDialog(QWidget *parent) :
- QDialog(parent), m_okButton(0), m_lineEdit(new QLineEdit)
+ QDialog(parent), m_lineEdit(new QLineEdit)
{
setWindowTitle(tr("Start a CDB Remote Session"));
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
@@ -631,9 +630,7 @@ void StartRemoteCdbDialog::accept()
QDialog::accept();
}
-StartRemoteCdbDialog::~StartRemoteCdbDialog()
-{
-}
+StartRemoteCdbDialog::~StartRemoteCdbDialog() = default;
void StartRemoteCdbDialog::textChanged(const QString &t)
{
@@ -699,7 +696,7 @@ void AddressDialog::setAddress(quint64 a)
quint64 AddressDialog::address() const
{
- return m_lineEdit->text().toULongLong(0, 16);
+ return m_lineEdit->text().toULongLong(nullptr, 16);
}
void AddressDialog::accept()
@@ -821,7 +818,7 @@ public:
{
m_layout = new QGridLayout;
m_layout->setColumnStretch(0, 2);
- QVBoxLayout *vboxLayout = new QVBoxLayout;
+ auto vboxLayout = new QVBoxLayout;
vboxLayout->addLayout(m_layout);
vboxLayout->addItem(new QSpacerItem(1, 1, QSizePolicy::Ignored,
QSizePolicy::MinimumExpanding));
@@ -833,10 +830,10 @@ public:
{
const int row = m_layout->rowCount();
int column = 0;
- QButtonGroup *group = new QButtonGroup(this);
+ auto group = new QButtonGroup(this);
m_layout->addWidget(new QLabel(type), row, column++);
for (int i = -1; i != typeFormats.size(); ++i) {
- QRadioButton *choice = new QRadioButton(this);
+ auto choice = new QRadioButton(this);
choice->setText(i == -1 ? TypeFormatsDialog::tr("Reset")
: WatchHandler::nameForFormat(typeFormats.at(i)));
m_layout->addWidget(choice, row, column++);
@@ -859,7 +856,7 @@ public:
buttonBox = new QDialogButtonBox(q);
buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok);
- QVBoxLayout *layout = new QVBoxLayout(q);
+ auto layout = new QVBoxLayout(q);
layout->addWidget(tabs);
layout->addWidget(buttonBox);
q->setLayout(layout);
@@ -867,9 +864,9 @@ public:
void addPage(const QString &name)
{
- TypeFormatsDialogPage *page = new TypeFormatsDialogPage;
+ auto page = new TypeFormatsDialogPage;
pages.append(page);
- QScrollArea *scroller = new QScrollArea;
+ auto scroller = new QScrollArea;
scroller->setWidgetResizable(true);
scroller->setWidget(page);
scroller->setFrameStyle(QFrame::NoFrame);
diff --git a/src/plugins/debugger/debuggerdialogs.h b/src/plugins/debugger/debuggerdialogs.h
index ef0c2e1bc4..4cec4143a6 100644
--- a/src/plugins/debugger/debuggerdialogs.h
+++ b/src/plugins/debugger/debuggerdialogs.h
@@ -120,7 +120,7 @@ private:
void textChanged(const QString &);
void accept() override;
- QPushButton *m_okButton;
+ QPushButton *m_okButton = nullptr;
QLineEdit *m_lineEdit;
};
diff --git a/src/plugins/debugger/debuggerengine.cpp b/src/plugins/debugger/debuggerengine.cpp
index 7befc65ae2..c0618ee818 100644
--- a/src/plugins/debugger/debuggerengine.cpp
+++ b/src/plugins/debugger/debuggerengine.cpp
@@ -979,7 +979,7 @@ void DebuggerEngine::setState(DebuggerState state, bool forced)
if (state == DebuggerFinished) {
// Give up ownership on claimed breakpoints.
- foreach (Breakpoint bp, breakHandler()->engineBreakpoints(this))
+ for (Breakpoint bp : breakHandler()->engineBreakpoints(this))
bp.notifyBreakpointReleased();
DebuggerToolTipManager::deregisterEngine(this);
d->m_memoryAgents.handleDebuggerFinished();
@@ -1002,12 +1002,12 @@ void DebuggerEngine::updateViews()
bool DebuggerEngine::isSlaveEngine() const
{
- return d->m_masterEngine != 0;
+ return d->m_masterEngine != nullptr;
}
bool DebuggerEngine::isMasterEngine() const
{
- return d->m_masterEngine == 0;
+ return d->m_masterEngine == nullptr;
}
void DebuggerEngine::setMasterEngine(DebuggerEngine *masterEngine)
@@ -1160,21 +1160,6 @@ void DebuggerEngine::quitDebugger()
}
}
-void DebuggerEngine::abortDebugger()
-{
- if (!isDying()) {
- // Be friendly the first time. This will change targetState().
- showMessage("ABORTING DEBUGGER. FIRST TIME.");
- quitDebugger();
- } else {
- // We already tried. Try harder.
- showMessage("ABORTING DEBUGGER. SECOND TIME.");
- abortDebuggerProcess();
- if (d->m_runTool && d->m_runTool->runControl())
- d->m_runTool->runControl()->initiateFinish();
- }
-}
-
void DebuggerEngine::requestInterruptInferior()
{
QTC_CHECK(isMasterEngine());
@@ -1288,11 +1273,6 @@ void DebuggerEngine::addOptionPages(QList<IOptionsPage*> *) const
{
}
-bool DebuggerEngine::isSynchronous() const
-{
- return false;
-}
-
QString DebuggerEngine::qtNamespace() const
{
return d->m_qtNamespace;
@@ -1336,7 +1316,7 @@ void DebuggerEngine::attemptBreakpointSynchronization()
BreakHandler *handler = breakHandler();
- foreach (Breakpoint bp, handler->unclaimedBreakpoints()) {
+ for (Breakpoint bp : handler->unclaimedBreakpoints()) {
// Take ownership of the breakpoint. Requests insertion.
if (acceptsBreakpoint(bp)) {
showMessage(QString("TAKING OWNERSHIP OF BREAKPOINT %1 IN STATE %2")
@@ -1349,7 +1329,7 @@ void DebuggerEngine::attemptBreakpointSynchronization()
}
bool done = true;
- foreach (Breakpoint bp, handler->engineBreakpoints(this)) {
+ for (Breakpoint bp : handler->engineBreakpoints(this)) {
switch (bp.state()) {
case BreakpointNew:
// Should not happen once claimed.
@@ -1555,7 +1535,7 @@ void DebuggerEngine::updateMemoryViews()
void DebuggerEngine::openDisassemblerView(const Location &location)
{
- DisassemblerAgent *agent = new DisassemblerAgent(this);
+ auto agent = new DisassemblerAgent(this);
agent->setLocation(location);
}
@@ -1609,8 +1589,8 @@ void DebuggerRunParameters::validateExecutable()
}
Utils::ElfReader reader(symbolFile);
- Utils::ElfData elfData = reader.readHeaders();
- QString error = reader.errorString();
+ const ElfData elfData = reader.readHeaders();
+ const QString error = reader.errorString();
Internal::showMessage("EXAMINING " + symbolFile, LogDebug);
QByteArray msg = "ELF SECTIONS: ";
@@ -1629,7 +1609,7 @@ void DebuggerRunParameters::validateExecutable()
};
QSet<QByteArray> seen;
- foreach (const Utils::ElfSectionHeader &header, elfData.sectionHeaders) {
+ for (const ElfSectionHeader &header : elfData.sectionHeaders) {
msg.append(header.name);
msg.append(' ');
if (interesting.contains(header.name))
@@ -1825,9 +1805,16 @@ bool DebuggerEngine::isNativeMixedActiveFrame() const
return frame.language == QmlLanguage;
}
+bool DebuggerRunParameters::isCppDebugging() const
+{
+ return cppEngineType == CdbEngineType
+ || cppEngineType == GdbEngineType
+ || cppEngineType == LldbEngineType;
+}
+
bool DebuggerRunParameters::isNativeMixedDebugging() const
{
- return nativeMixedEnabled && isCppDebugging && isQmlDebugging;
+ return nativeMixedEnabled && isCppDebugging() && isQmlDebugging;
}
} // namespace Internal
diff --git a/src/plugins/debugger/debuggerengine.h b/src/plugins/debugger/debuggerengine.h
index 2f384ef7a6..37d4f10a10 100644
--- a/src/plugins/debugger/debuggerengine.h
+++ b/src/plugins/debugger/debuggerengine.h
@@ -129,10 +129,10 @@ public:
DebuggerEngineType cppEngineType = NoEngineType;
- bool isCppDebugging = true;
bool isQmlDebugging = false;
bool breakOnMain = false;
bool multiProcess = false; // Whether to set detach-on-fork off.
+ bool useTerminal = false;
ProjectExplorer::Runnable debugger;
QString overrideStartScript; // Used in attach to core and remote debugging
@@ -155,6 +155,7 @@ public:
bool nativeMixedEnabled = false;
+ bool isCppDebugging() const;
bool isNativeMixedDebugging() const;
void validateExecutable();
@@ -186,7 +187,7 @@ public:
class Location
{
public:
- Location() {}
+ Location() = default;
Location(quint64 address) { m_address = address; }
Location(const QString &file) { m_fileName = file; }
Location(const QString &file, int line, bool marker = true)
@@ -269,6 +270,7 @@ public:
virtual void selectWatchData(const QString &iname);
virtual void prepareForRestart() {}
+ virtual void abortDebuggerProcess() {} // second attempt
virtual void watchPoint(const QPoint &pnt);
virtual void runCommand(const DebuggerCommand &cmd);
@@ -299,7 +301,6 @@ public:
virtual bool hasCapability(unsigned cap) const = 0;
virtual void debugLastCommand() {}
- virtual bool isSynchronous() const;
virtual QString qtNamespace() const;
void setQtNamespace(const QString &ns);
@@ -360,14 +361,12 @@ public:
virtual void gotoLocation(const Internal::Location &location);
virtual void quitDebugger(); // called when pressing the stop button
- void abortDebugger(); // called from the debug menu action
-
void updateViews();
bool isSlaveEngine() const;
bool isMasterEngine() const;
DebuggerEngine *masterEngine();
virtual DebuggerEngine *activeEngine() { return this; }
- virtual DebuggerEngine *cppEngine() { return 0; }
+ virtual DebuggerEngine *cppEngine() { return nullptr; }
virtual bool canDisplayTooltip() const;
@@ -444,8 +443,6 @@ protected:
virtual void frameUp();
virtual void frameDown();
- virtual void abortDebuggerProcess() {} // second attempt
-
virtual void doUpdateLocals(const UpdateParameters &params);
void setMasterEngine(DebuggerEngine *masterEngine);
diff --git a/src/plugins/debugger/debuggeritem.cpp b/src/plugins/debugger/debuggeritem.cpp
index 2885719ee2..9d06e9e1e3 100644
--- a/src/plugins/debugger/debuggeritem.cpp
+++ b/src/plugins/debugger/debuggeritem.cpp
@@ -68,17 +68,11 @@ namespace Debugger {
// DebuggerItem
// --------------------------------------------------------------------------
-DebuggerItem::DebuggerItem()
-{
- m_engineType = NoEngineType;
- m_isAutoDetected = false;
-}
+DebuggerItem::DebuggerItem() = default;
DebuggerItem::DebuggerItem(const QVariant &id)
{
m_id = id;
- m_engineType = NoEngineType;
- m_isAutoDetected = false;
}
DebuggerItem::DebuggerItem(const QVariantMap &data)
@@ -95,7 +89,7 @@ DebuggerItem::DebuggerItem(const QVariantMap &data)
m_lastModified = data.value(QLatin1String(DEBUGGER_INFORMATION_LASTMODIFIED)).toDateTime();
foreach (const QString &a, data.value(QLatin1String(DEBUGGER_INFORMATION_ABIS)).toStringList()) {
- Abi abi(a);
+ Abi abi = Abi::fromString(a);
if (!abi.isNull())
m_abis.append(abi);
}
@@ -212,7 +206,7 @@ QString DebuggerItem::engineTypeName() const
QStringList DebuggerItem::abiNames() const
{
QStringList list;
- foreach (const Abi &abi, m_abis)
+ for (const Abi &abi : m_abis)
list.append(abi.toString());
return list;
}
@@ -368,7 +362,7 @@ static DebuggerItem::MatchLevel matchSingle(const Abi &debuggerAbi, const Abi &t
DebuggerItem::MatchLevel DebuggerItem::matchTarget(const Abi &targetAbi) const
{
MatchLevel bestMatch = DoesNotMatch;
- foreach (const Abi &debuggerAbi, m_abis) {
+ for (const Abi &debuggerAbi : m_abis) {
MatchLevel currentMatch = matchSingle(debuggerAbi, targetAbi, m_engineType);
if (currentMatch > bestMatch)
bestMatch = currentMatch;
diff --git a/src/plugins/debugger/debuggeritem.h b/src/plugins/debugger/debuggeritem.h
index 7dbdf5949d..e93d30e8b7 100644
--- a/src/plugins/debugger/debuggeritem.h
+++ b/src/plugins/debugger/debuggeritem.h
@@ -84,7 +84,7 @@ public:
QString autoDetectionSource() const { return m_autoDetectionSource; }
void setAutoDetectionSource(const QString &autoDetectionSource);
- QList<ProjectExplorer::Abi> abis() const { return m_abis; }
+ const QList<ProjectExplorer::Abi> &abis() const { return m_abis; }
void setAbis(const QList<ProjectExplorer::Abi> &abis);
void setAbi(const ProjectExplorer::Abi &abi);
@@ -111,10 +111,10 @@ private:
QVariant m_id;
QString m_unexpandedDisplayName;
- DebuggerEngineType m_engineType;
+ DebuggerEngineType m_engineType = NoEngineType;
Utils::FileName m_command;
Utils::FileName m_workingDirectory;
- bool m_isAutoDetected;
+ bool m_isAutoDetected = false;
QString m_autoDetectionSource;
QString m_version;
QList<ProjectExplorer::Abi> m_abis;
diff --git a/src/plugins/debugger/debuggeritemmanager.cpp b/src/plugins/debugger/debuggeritemmanager.cpp
index 4021f6baf3..9877ce2f92 100644
--- a/src/plugins/debugger/debuggeritemmanager.cpp
+++ b/src/plugins/debugger/debuggeritemmanager.cpp
@@ -144,7 +144,7 @@ public:
: m_item(item), m_orig(item), m_added(changed), m_changed(changed)
{}
- QVariant data(int column, int role) const
+ QVariant data(int column, int role) const override
{
switch (role) {
case Qt::DisplayRole:
@@ -327,7 +327,7 @@ DebuggerItemConfigWidget::DebuggerItemConfigWidget()
m_abis = new QLineEdit(this);
m_abis->setEnabled(false);
- QFormLayout *formLayout = new QFormLayout(this);
+ auto formLayout = new QFormLayout(this);
formLayout->setFieldGrowthPolicy(QFormLayout::AllNonFixedFieldsGrow);
formLayout->addRow(new QLabel(tr("Name:")), m_displayNameLineEdit);
formLayout->addRow(m_cdbLabel);
@@ -356,7 +356,7 @@ DebuggerItem DebuggerItemConfigWidget::item() const
foreach (const QString &a, m_abis->text().split(QRegExp(QLatin1String("[^A-Za-z0-9-_]+")))) {
if (a.isNull())
continue;
- abiList << a;
+ abiList << Abi::fromString(a);
}
item.setAbis(abiList);
item.setVersion(m_versionLabel->text());
@@ -620,7 +620,7 @@ void DebuggerOptionsPage::apply()
void DebuggerOptionsPage::finish()
{
delete m_configWidget;
- m_configWidget = 0;
+ m_configWidget = nullptr;
d->m_model->cancel();
}
@@ -968,7 +968,7 @@ DebuggerItemManager::~DebuggerItemManager()
delete d;
}
-QList<DebuggerItem> DebuggerItemManager::debuggers()
+const QList<DebuggerItem> DebuggerItemManager::debuggers()
{
QList<DebuggerItem> result;
forAllDebuggers([&result](const DebuggerItem &item) { result.append(item); });
diff --git a/src/plugins/debugger/debuggeritemmanager.h b/src/plugins/debugger/debuggeritemmanager.h
index 2b37d33485..ec2d74c928 100644
--- a/src/plugins/debugger/debuggeritemmanager.h
+++ b/src/plugins/debugger/debuggeritemmanager.h
@@ -47,7 +47,7 @@ public:
DebuggerItemManager();
~DebuggerItemManager() override;
- static QList<DebuggerItem> debuggers();
+ static const QList<DebuggerItem> debuggers();
static QVariant registerDebugger(const DebuggerItem &item);
static void deregisterDebugger(const QVariant &id);
diff --git a/src/plugins/debugger/debuggerkitconfigwidget.cpp b/src/plugins/debugger/debuggerkitconfigwidget.cpp
index 34f68fe6f1..241770c437 100644
--- a/src/plugins/debugger/debuggerkitconfigwidget.cpp
+++ b/src/plugins/debugger/debuggerkitconfigwidget.cpp
@@ -64,8 +64,7 @@ namespace Internal {
// -----------------------------------------------------------------------
DebuggerKitConfigWidget::DebuggerKitConfigWidget(Kit *workingCopy, const KitInformation *ki)
- : KitConfigWidget(workingCopy, ki),
- m_ignoreChanges(false)
+ : KitConfigWidget(workingCopy, ki)
{
m_comboBox = new QComboBox;
m_comboBox->setEnabled(true);
@@ -108,7 +107,7 @@ void DebuggerKitConfigWidget::refresh()
m_comboBox->clear();
m_comboBox->setToolTip(toolTip());
m_comboBox->addItem(tr("None"), QString());
- foreach (const DebuggerItem &item, DebuggerItemManager::debuggers())
+ for (const DebuggerItem &item : DebuggerItemManager::debuggers())
m_comboBox->addItem(item.displayName(), item.id());
const DebuggerItem *item = DebuggerKitInformation::debugger(m_kit);
diff --git a/src/plugins/debugger/debuggerkitconfigwidget.h b/src/plugins/debugger/debuggerkitconfigwidget.h
index 9fbe1f124d..e424481bef 100644
--- a/src/plugins/debugger/debuggerkitconfigwidget.h
+++ b/src/plugins/debugger/debuggerkitconfigwidget.h
@@ -72,7 +72,7 @@ private:
void updateComboBox(const QVariant &id);
bool m_isReadOnly;
- bool m_ignoreChanges;
+ bool m_ignoreChanges = false;
QComboBox *m_comboBox;
QPushButton *m_manageButton;
};
diff --git a/src/plugins/debugger/debuggerkitinformation.cpp b/src/plugins/debugger/debuggerkitinformation.cpp
index 6ac69858c4..c3b41bcd4b 100644
--- a/src/plugins/debugger/debuggerkitinformation.cpp
+++ b/src/plugins/debugger/debuggerkitinformation.cpp
@@ -61,8 +61,8 @@ QVariant DebuggerKitInformation::defaultValue(const Kit *k) const
const Abi toolChainAbi = ToolChainKitInformation::targetAbi(k);
const Utils::FileNameList paths = Environment::systemEnvironment().path();
QVariant nextBestFit;
- foreach (const DebuggerItem &item, DebuggerItemManager::debuggers()) {
- foreach (const Abi targetAbi, item.abis()) {
+ for (const DebuggerItem &item : DebuggerItemManager::debuggers()) {
+ for (const Abi &targetAbi : item.abis()) {
if (targetAbi.isCompatibleWith(toolChainAbi)) {
if (paths.contains(item.command()))
return item.id(); // prefer debuggers found in PATH over those found elsewhere
@@ -104,7 +104,7 @@ void DebuggerKitInformation::setup(Kit *k)
DebuggerItem bestItem;
DebuggerItem::MatchLevel bestLevel = DebuggerItem::DoesNotMatch;
const Environment systemEnvironment = Environment::systemEnvironment();
- foreach (const DebuggerItem &item, DebuggerItemManager::debuggers()) {
+ for (const DebuggerItem &item : DebuggerItemManager::debuggers()) {
DebuggerItem::MatchLevel level = DebuggerItem::DoesNotMatch;
if (rawId.isNull()) {
diff --git a/src/plugins/debugger/debuggermainwindow.cpp b/src/plugins/debugger/debuggermainwindow.cpp
index 0c87b00a13..c2ae3fa0dd 100644
--- a/src/plugins/debugger/debuggermainwindow.cpp
+++ b/src/plugins/debugger/debuggermainwindow.cpp
@@ -41,6 +41,7 @@
#include <projectexplorer/projectexplorericons.h>
+#include <utils/algorithm.h>
#include <utils/styledbar.h>
#include <utils/qtcassert.h>
#include <utils/proxyaction.h>
@@ -65,7 +66,6 @@ const char LAST_PERSPECTIVE_KEY[] = "LastPerspective";
DebuggerMainWindow::DebuggerMainWindow()
{
- m_controlsStackWidget = new QStackedWidget;
m_centralWidgetStack = new QStackedWidget;
m_statusLabel = new Utils::StatusLabel;
m_editorPlaceHolder = new EditorManagerPlaceHolder;
@@ -73,7 +73,9 @@ DebuggerMainWindow::DebuggerMainWindow()
m_perspectiveChooser = new QComboBox;
m_perspectiveChooser->setObjectName(QLatin1String("PerspectiveChooser"));
connect(m_perspectiveChooser, static_cast<void (QComboBox::*)(int)>(&QComboBox::activated),
- this, [this](int item) { restorePerspective(m_perspectiveChooser->itemData(item).toByteArray()); });
+ this, [this](int item) {
+ restorePerspective(findPerspective(m_perspectiveChooser->itemData(item).toByteArray()));
+ });
setDockNestingEnabled(true);
setDockActionsVisible(false);
@@ -85,8 +87,10 @@ DebuggerMainWindow::DebuggerMainWindow()
DebuggerMainWindow::~DebuggerMainWindow()
{
+ savePerspectiveHelper(m_currentPerspective);
+
delete m_editorPlaceHolder;
- m_editorPlaceHolder = 0;
+ m_editorPlaceHolder = nullptr;
// As we have to setParent(0) on dock widget that are not selected,
// we keep track of all and make sure we don't leak any
foreach (QDockWidget *dock, m_dockForDockId) {
@@ -94,17 +98,25 @@ DebuggerMainWindow::~DebuggerMainWindow()
delete dock;
}
- foreach (const Perspective *perspective, m_perspectiveForPerspectiveId)
+ foreach (const Perspective *perspective, m_perspectives)
delete perspective;
}
-void DebuggerMainWindow::registerPerspective(const QByteArray &perspectiveId, const Perspective *perspective)
+void DebuggerMainWindow::registerPerspective(Perspective *perspective)
+{
+ m_perspectives.append(perspective);
+ QByteArray parentPerspective = perspective->parentPerspective();
+ // Add "main" perspectives to the chooser.
+ if (parentPerspective.isEmpty()) {
+ m_perspectiveChooser->addItem(perspective->name(), perspective->m_id);
+ increaseChooserWidthIfNecessary(perspective->name());
+ }
+}
+
+void DebuggerMainWindow::increaseChooserWidthIfNecessary(const QString &visibleName)
{
- m_perspectiveForPerspectiveId.insert(perspectiveId, perspective);
- m_perspectiveChooser->addItem(perspective->name(), perspectiveId);
- // adjust width if necessary
const int oldWidth = m_perspectiveChooser->width();
- const int contentWidth = m_perspectiveChooser->fontMetrics().width(perspective->name());
+ const int contentWidth = m_perspectiveChooser->fontMetrics().width(visibleName);
QStyleOptionComboBox option;
option.initFrom(m_perspectiveChooser);
const QSize sz(contentWidth, 1);
@@ -114,10 +126,22 @@ void DebuggerMainWindow::registerPerspective(const QByteArray &perspectiveId, co
m_perspectiveChooser->setFixedWidth(width);
}
-void DebuggerMainWindow::registerToolbar(const QByteArray &perspectiveId, QWidget *widget)
+void DebuggerMainWindow::destroyDynamicPerspective(Perspective *perspective)
{
- m_toolbarForPerspectiveId.insert(perspectiveId, widget);
- m_controlsStackWidget->addWidget(widget);
+ QTC_ASSERT(perspective, return);
+ savePerspectiveHelper(perspective);
+
+ m_perspectives.removeAll(perspective);
+ // Dynamic perspectives are currently not visible in the chooser.
+ // This might change in the future, make sure we notice.
+ const int idx = indexInChooser(perspective);
+ QTC_ASSERT(idx == -1, m_perspectiveChooser->removeItem(idx));
+ QByteArray parentPerspective = perspective->parentPerspective();
+ delete perspective;
+ // All dynamic perspectives currently have a static parent perspective.
+ // This might change in the future, make sure we notice.
+ QTC_CHECK(!parentPerspective.isEmpty());
+ restorePerspective(findPerspective(parentPerspective));
}
void DebuggerMainWindow::showStatusMessage(const QString &message, int timeoutMS)
@@ -125,11 +149,6 @@ void DebuggerMainWindow::showStatusMessage(const QString &message, int timeoutMS
m_statusLabel->showStatusMessage(message, timeoutMS);
}
-QDockWidget *DebuggerMainWindow::dockWidget(const QByteArray &dockId) const
-{
- return m_dockForDockId.value(dockId);
-}
-
void DebuggerMainWindow::raiseDock(const QByteArray &dockId)
{
QDockWidget *dock = m_dockForDockId.value(dockId);
@@ -140,11 +159,16 @@ void DebuggerMainWindow::raiseDock(const QByteArray &dockId)
dock->raise();
}
+QByteArray DebuggerMainWindow::currentPerspective() const
+{
+ return m_currentPerspective ? m_currentPerspective->m_id : QByteArray();
+}
+
void DebuggerMainWindow::onModeChanged(Core::Id mode)
{
if (mode == Debugger::Constants::MODE_DEBUG) {
setDockActionsVisible(true);
- restorePerspective({});
+ restorePerspective(nullptr);
} else {
setDockActionsVisible(false);
@@ -158,7 +182,8 @@ void DebuggerMainWindow::onModeChanged(Core::Id mode)
void DebuggerMainWindow::setPerspectiveEnabled(const QByteArray &perspectiveId, bool enabled)
{
- const int index = m_perspectiveChooser->findData(perspectiveId);
+ Perspective *perspective = findPerspective(perspectiveId);
+ const int index = indexInChooser(perspective);
QTC_ASSERT(index != -1, return);
auto model = qobject_cast<QStandardItemModel*>(m_perspectiveChooser->model());
QTC_ASSERT(model, return);
@@ -166,18 +191,28 @@ void DebuggerMainWindow::setPerspectiveEnabled(const QByteArray &perspectiveId,
item->setFlags(enabled ? item->flags() | Qt::ItemIsEnabled : item->flags() & ~Qt::ItemIsEnabled );
}
+Perspective *DebuggerMainWindow::findPerspective(const QByteArray &perspectiveId) const
+{
+ return Utils::findOr(m_perspectives, nullptr, [&](Perspective *perspective) {
+ return perspective->m_id == perspectiveId;
+ });
+}
+
void DebuggerMainWindow::resetCurrentPerspective()
{
- loadPerspectiveHelper(m_currentPerspectiveId, false);
+ loadPerspectiveHelper(m_currentPerspective, false);
}
-void DebuggerMainWindow::restorePerspective(const QByteArray &perspectiveId)
+int DebuggerMainWindow::indexInChooser(Perspective *perspective) const
{
- loadPerspectiveHelper(perspectiveId, true);
+ return perspective ? m_perspectiveChooser->findData(perspective->m_id) : -1;
+}
- int index = m_perspectiveChooser->findData(perspectiveId);
- if (index == -1)
- index = m_perspectiveChooser->findData(m_currentPerspectiveId);
+void DebuggerMainWindow::restorePerspective(Perspective *perspective)
+{
+ loadPerspectiveHelper(perspective, true);
+
+ const int index = indexInChooser(m_currentPerspective);
if (index != -1)
m_perspectiveChooser->setCurrentIndex(index);
}
@@ -191,13 +226,19 @@ void DebuggerMainWindow::finalizeSetup()
closeButton->setIcon(Utils::Icons::CLOSE_SPLIT_BOTTOM.icon());
closeButton->setToolTip(tr("Leave Debug Mode"));
+ auto toolbuttonBox = new QWidget;
+ m_toolbuttonBoxLayout = new QHBoxLayout(toolbuttonBox);
+ m_toolbuttonBoxLayout->setMargin(0);
+ m_toolbuttonBoxLayout->setSpacing(0);
+
auto toolbar = new Utils::StyledBar;
toolbar->setProperty("topBorder", true);
auto hbox = new QHBoxLayout(toolbar);
hbox->setMargin(0);
hbox->setSpacing(0);
hbox->addWidget(m_perspectiveChooser);
- hbox->addWidget(m_controlsStackWidget);
+ hbox->addWidget(toolbuttonBox);
+ hbox->addStretch(3);
hbox->addWidget(m_statusLabel);
hbox->addStretch(1);
hbox->addWidget(new Utils::StyledSeparator);
@@ -301,68 +342,95 @@ QWidget *createModeWindow(const Core::Id &mode, DebuggerMainWindow *mainWindow)
return splitter;
}
-void DebuggerMainWindow::loadPerspectiveHelper(const QByteArray &perspectiveId, bool fromStoredSettings)
+void DebuggerMainWindow::loadPerspectiveHelper(Perspective *perspective, bool fromStoredSettings)
{
// Clean up old perspective.
- if (!m_currentPerspectiveId.isEmpty()) {
- saveCurrentPerspective();
- foreach (QDockWidget *dockWidget, m_dockForDockId) {
- QTC_ASSERT(dockWidget, continue);
- dockWidget->setFloating(false);
- removeDockWidget(dockWidget);
- dockWidget->hide();
- // Prevent saveState storing the data of the wrong children.
- dockWidget->setParent(0);
+ if (m_currentPerspective) {
+ savePerspectiveHelper(m_currentPerspective);
+ for (QDockWidget *dock : m_dockForDockId) {
+ QTC_ASSERT(dock, continue);
+ dock->setParent(nullptr);
+ dock->widget()->setParent(nullptr);
+ ActionManager::unregisterAction(dock->toggleViewAction(),
+ Id("Dock.").withSuffix(dock->objectName()));
+ delete dock;
}
+ m_dockForDockId.clear();
- ICore::removeAdditionalContext(Context(Id::fromName(m_currentPerspectiveId)));
- const Perspective *perspective = m_perspectiveForPerspectiveId.value(m_currentPerspectiveId);
- QWidget *central = perspective ? perspective->centralWidget() : nullptr;
+ ICore::removeAdditionalContext(Context(Id::fromName(m_currentPerspective->m_id)));
+ QWidget *central = m_currentPerspective->centralWidget();
m_centralWidgetStack->removeWidget(central ? central : m_editorPlaceHolder);
- }
- m_currentPerspectiveId = perspectiveId;
+ // Detach potentially re-used widgets to prevent deletion.
+ for (const Perspective::ToolbarOperation &op : m_currentPerspective->m_toolbarOperations) {
+ if (op.widget)
+ op.widget->setParent(nullptr);
+ if (op.toolbutton)
+ op.toolbutton->setParent(nullptr);
+ if (op.separator)
+ op.separator->setParent(nullptr);
+ }
+
+ while (QLayoutItem *item = m_toolbuttonBoxLayout->takeAt(0))
+ delete item;
+ }
- if (m_currentPerspectiveId.isEmpty()) {
+ if (perspective) {
+ m_currentPerspective = perspective;
+ } else {
const QSettings *settings = ICore::settings();
- m_currentPerspectiveId = settings->value(QLatin1String(LAST_PERSPECTIVE_KEY)).toByteArray();
- if (m_currentPerspectiveId.isEmpty())
- m_currentPerspectiveId = Debugger::Constants::CppPerspectiveId;
+ m_currentPerspective = findPerspective(settings->value(QLatin1String(LAST_PERSPECTIVE_KEY)).toByteArray());
+ if (!m_currentPerspective)
+ m_currentPerspective = findPerspective(Debugger::Constants::CppPerspectiveId);
+ if (!m_currentPerspective && !m_perspectives.isEmpty())
+ m_currentPerspective = m_perspectives.first();
}
+ QTC_ASSERT(m_currentPerspective, return);
+
+ ICore::addAdditionalContext(Context(Id::fromName(m_currentPerspective->m_id)));
- ICore::addAdditionalContext(Context(Id::fromName(m_currentPerspectiveId)));
+ m_currentPerspective->aboutToActivate();
- QTC_ASSERT(m_perspectiveForPerspectiveId.contains(m_currentPerspectiveId), return);
- const Perspective *perspective = m_perspectiveForPerspectiveId.value(m_currentPerspectiveId);
- perspective->aboutToActivate();
- for (const Perspective::Operation &operation : perspective->operations()) {
- QDockWidget *dock = m_dockForDockId.value(operation.dockId);
+ for (const Perspective::ToolbarOperation &op : m_currentPerspective->m_toolbarOperations) {
+ if (op.widget)
+ m_toolbuttonBoxLayout->addWidget(op.widget);
+ if (op.toolbutton)
+ m_toolbuttonBoxLayout->addWidget(op.toolbutton);
+ if (op.separator)
+ m_toolbuttonBoxLayout->addWidget(op.separator);
+ }
+
+ for (const Perspective::Operation &op : m_currentPerspective->m_operations) {
+ QTC_ASSERT(op.widget, continue);
+ const QByteArray dockId = op.widget->objectName().toUtf8();
+ QDockWidget *dock = m_dockForDockId.value(dockId);
if (!dock) {
- QTC_CHECK(!operation.widget->objectName().isEmpty());
- dock = registerDockWidget(operation.dockId, operation.widget);
+ QTC_CHECK(!dockId.isEmpty());
+ dock = addDockForWidget(op.widget);
+ m_dockForDockId[dockId] = dock;
QAction *toggleViewAction = dock->toggleViewAction();
toggleViewAction->setText(dock->windowTitle());
Command *cmd = ActionManager::registerAction(toggleViewAction,
Id("Dock.").withSuffix(dock->objectName()),
- Context(Id::fromName(m_currentPerspectiveId)));
+ Context(Id::fromName(m_currentPerspective->m_id)));
cmd->setAttribute(Command::CA_Hide);
ActionManager::actionContainer(Core::Constants::M_WINDOW_VIEWS)->addAction(cmd);
}
// Restore parent/child relation, so that the widget hierarchy is clear.
dock->setParent(this);
- if (operation.operationType == Perspective::Raise) {
+ if (op.operationType == Perspective::Raise) {
dock->raise();
continue;
}
- addDockWidget(operation.area, dock);
- QDockWidget *anchor = m_dockForDockId.value(operation.anchorDockId);
- if (!anchor && operation.area == Qt::BottomDockWidgetArea)
+ addDockWidget(op.area, dock);
+ QDockWidget *anchor = m_dockForDockId.value(op.anchorDockId);
+ if (!anchor && op.area == Qt::BottomDockWidgetArea)
anchor = m_toolbarDock;
if (anchor) {
- switch (operation.operationType) {
+ switch (op.operationType) {
case Perspective::AddToTab:
tabifyDockWidget(anchor, dock);
break;
@@ -376,7 +444,7 @@ void DebuggerMainWindow::loadPerspectiveHelper(const QByteArray &perspectiveId,
break;
}
}
- if (!operation.visibleByDefault)
+ if (!op.visibleByDefault)
dock->hide();
else
dock->show();
@@ -384,7 +452,7 @@ void DebuggerMainWindow::loadPerspectiveHelper(const QByteArray &perspectiveId,
if (fromStoredSettings) {
QSettings *settings = ICore::settings();
- settings->beginGroup(QString::fromLatin1(m_currentPerspectiveId));
+ settings->beginGroup(QString::fromLatin1(m_currentPerspective->m_id));
if (settings->value(QLatin1String("ToolSettingsSaved"), false).toBool())
restoreSettings(settings);
settings->endGroup();
@@ -393,50 +461,50 @@ void DebuggerMainWindow::loadPerspectiveHelper(const QByteArray &perspectiveId,
showCentralWidgetAction()->setChecked(true);
}
- QWidget *central = perspective->centralWidget();
+ QWidget *central = m_currentPerspective->centralWidget();
m_centralWidgetStack->addWidget(central ? central : m_editorPlaceHolder);
showCentralWidgetAction()->setText(central ? central->windowTitle() : tr("Editor"));
- QTC_CHECK(m_toolbarForPerspectiveId.contains(m_currentPerspectiveId));
- m_controlsStackWidget->setCurrentWidget(m_toolbarForPerspectiveId.value(m_currentPerspectiveId));
m_statusLabel->clear();
}
-void DebuggerMainWindow::saveCurrentPerspective()
+void DebuggerMainWindow::savePerspectiveHelper(const Perspective *perspective)
{
- if (m_currentPerspectiveId.isEmpty())
+ if (!perspective)
return;
QSettings *settings = ICore::settings();
- settings->beginGroup(QString::fromLatin1(m_currentPerspectiveId));
+ settings->beginGroup(QString::fromLatin1(perspective->m_id));
saveSettings(settings);
settings->setValue(QLatin1String("ToolSettingsSaved"), true);
settings->endGroup();
- settings->setValue(QLatin1String(LAST_PERSPECTIVE_KEY), m_currentPerspectiveId);
+ settings->setValue(QLatin1String(LAST_PERSPECTIVE_KEY), perspective->m_id);
}
-QDockWidget *DebuggerMainWindow::registerDockWidget(const QByteArray &dockId, QWidget *widget)
+// Perspective
+
+Perspective::Perspective(const QByteArray &id, const QString &name)
+ : m_id(id), m_name(name)
{
- QTC_ASSERT(!widget->objectName().isEmpty(), return 0);
- QDockWidget *dockWidget = addDockForWidget(widget);
- m_dockForDockId[dockId] = dockWidget;
- return dockWidget;
}
Perspective::~Perspective()
{
- foreach (const Operation &operation, m_operations)
- delete operation.widget;
- delete m_centralWidget;
+ for (const ToolbarOperation &op : m_toolbarOperations) {
+ // op.widget and op.actions are owned by the plugins
+ delete op.toolbutton;
+ delete op.separator;
+ }
}
-QString Perspective::name() const
+void Perspective::setCentralWidget(QWidget *centralWidget)
{
- return m_name;
+ QTC_ASSERT(m_centralWidget == nullptr, return);
+ m_centralWidget = centralWidget;
}
-void Perspective::setName(const QString &name)
+QString Perspective::name() const
{
- m_name = name;
+ return m_name;
}
void Perspective::setAboutToActivateCallback(const Perspective::Callback &cb)
@@ -450,43 +518,63 @@ void Perspective::aboutToActivate() const
m_aboutToActivateCallback();
}
-QList<QWidget *> ToolbarDescription::widgets() const
+QByteArray Perspective::parentPerspective() const
{
- return m_widgets;
+ return m_parentPerspective;
}
-void ToolbarDescription::addAction(QAction *action, const QIcon &toolbarIcon)
+void Perspective::setParentPerspective(const QByteArray &parentPerspective)
{
- auto button = new QToolButton;
- button->setDefaultAction(toolbarIcon.isNull()
- ? action : ProxyAction::proxyActionWithIcon(action, toolbarIcon));
- m_widgets.append(button);
+ m_parentPerspective = parentPerspective;
}
-void ToolbarDescription::addWidget(QWidget *widget)
+QToolButton *Perspective::addToolbarAction(QAction *action, const QIcon &toolbarIcon)
{
- m_widgets.append(widget);
+ ToolbarOperation op;
+ op.action = action;
+ op.icon = toolbarIcon;
+ op.toolbutton = new QToolButton;
+ // QStyle::polish is called before it is added to the toolbar, explicitly make it a panel widget
+ op.toolbutton->setProperty("panelwidget", true);
+ op.toolbutton->setDefaultAction(toolbarIcon.isNull()
+ ? action : ProxyAction::proxyActionWithIcon(action, toolbarIcon));
+ m_toolbarOperations.append(op);
+
+ return op.toolbutton;
}
-Perspective::Operation::Operation(const QByteArray &dockId, QWidget *widget, const QByteArray &anchorDockId,
- Perspective::OperationType splitType, bool visibleByDefault,
- Qt::DockWidgetArea area)
- : dockId(dockId), widget(widget), anchorDockId(anchorDockId),
- operationType(splitType), visibleByDefault(visibleByDefault), area(area)
-{}
+void Perspective::addToolbarWidget(QWidget *widget)
+{
+ ToolbarOperation op;
+ op.widget = widget;
+ // QStyle::polish is called before it is added to the toolbar, explicitly make it a panel widget
+ op.widget->setProperty("panelwidget", true);
+ m_toolbarOperations.append(op);
+}
+
+void Perspective::addToolbarSeparator()
+{
+ ToolbarOperation op;
+ op.separator = new StyledSeparator;
+ m_toolbarOperations.append(op);
+}
-Perspective::Perspective(const QString &name, const QVector<Operation> &splits,
- QWidget *centralWidget)
- : m_name(name), m_operations(splits), m_centralWidget(centralWidget)
+QWidget *Perspective::centralWidget() const
{
- for (const Operation &split : splits)
- m_docks.append(split.dockId);
+ return m_centralWidget;
}
-void Perspective::addOperation(const Operation &operation)
+void Perspective::addWindow(QWidget *widget, OperationType type, QWidget *anchorWidget,
+ bool visibleByDefault, Qt::DockWidgetArea area)
{
- m_docks.append(operation.dockId);
- m_operations.append(operation);
+ Operation op;
+ op.widget = widget;
+ if (anchorWidget)
+ op.anchorDockId = anchorWidget->objectName().toUtf8();
+ op.operationType = type;
+ op.visibleByDefault = visibleByDefault;
+ op.area = area;
+ m_operations.append(op);
}
} // Utils
diff --git a/src/plugins/debugger/debuggermainwindow.h b/src/plugins/debugger/debuggermainwindow.h
index 08970aaead..30e646ccea 100644
--- a/src/plugins/debugger/debuggermainwindow.h
+++ b/src/plugins/debugger/debuggermainwindow.h
@@ -30,6 +30,7 @@
#include <utils/fancymainwindow.h>
#include <utils/statuslabel.h>
+#include <QHBoxLayout>
#include <QPointer>
#include <QSet>
@@ -37,6 +38,7 @@
QT_BEGIN_NAMESPACE
class QComboBox;
+class QToolButton;
class QStackedWidget;
QT_END_NAMESPACE
@@ -49,67 +51,64 @@ class DEBUGGER_EXPORT Perspective
public:
enum OperationType { SplitVertical, SplitHorizontal, AddToTab, Raise };
- class DEBUGGER_EXPORT Operation
- {
- public:
- Operation() = default;
- Operation(const QByteArray &dockId, QWidget *widget,
- const QByteArray &anchorDockId,
- OperationType operationType,
- bool visibleByDefault = true,
- Qt::DockWidgetArea area = Qt::BottomDockWidgetArea);
-
- QByteArray dockId;
- QPointer<QWidget> widget;
- QByteArray anchorDockId;
- OperationType operationType = Raise;
- bool visibleByDefault = true;
- Qt::DockWidgetArea area = Qt::BottomDockWidgetArea;
- };
-
- Perspective() = default;
- // Takes ownership of \a centralWidget and all dock widgets in \a operations.
- Perspective(const QString &name, const QVector<Operation> &operations,
- QWidget *centralWidget = nullptr);
+ explicit Perspective(const QByteArray &id, const QString &name);
~Perspective();
- void addOperation(const Operation &operation);
+ void setCentralWidget(QWidget *centralWidget);
+ void addWindow(QWidget *widget,
+ OperationType op,
+ QWidget *anchorWidget,
+ bool visibleByDefault = true,
+ Qt::DockWidgetArea area = Qt::BottomDockWidgetArea);
- QVector<Operation> operations() const { return m_operations; }
- QVector<QByteArray> docks() const { return m_docks; }
- QWidget *centralWidget() const { return m_centralWidget; }
+ QToolButton *addToolbarAction(QAction *action, const QIcon &toolbarIcon = QIcon());
+ void addToolbarWidget(QWidget *widget);
+ void addToolbarSeparator();
+
+ QWidget *centralWidget() const;
QString name() const;
- void setName(const QString &name);
using Callback = std::function<void()>;
void setAboutToActivateCallback(const Callback &cb);
void aboutToActivate() const;
+ QByteArray parentPerspective() const;
+ void setParentPerspective(const QByteArray &parentPerspective);
+
private:
Perspective(const Perspective &) = delete;
void operator=(const Perspective &) = delete;
+ friend class DebuggerMainWindow;
+ class PerspectivePrivate *d = nullptr;
+ class Operation
+ {
+ public:
+ QPointer<QWidget> widget;
+ QByteArray anchorDockId;
+ OperationType operationType = Raise;
+ bool visibleByDefault = true;
+ Qt::DockWidgetArea area = Qt::BottomDockWidgetArea;
+ };
+
+ class ToolbarOperation
+ {
+ public:
+ QPointer<QWidget> widget; // Owned by plugin if present
+ QPointer<QAction> action; // Owned by plugin if present
+ QPointer<QToolButton> toolbutton; // Owned here in case action is used
+ QPointer<QWidget> separator;
+ QIcon icon;
+ };
+
+ const QByteArray m_id;
QString m_name;
- QVector<QByteArray> m_docks;
+ QByteArray m_parentPerspective;
QVector<Operation> m_operations;
QPointer<QWidget> m_centralWidget;
Callback m_aboutToActivateCallback;
-};
-
-class DEBUGGER_EXPORT ToolbarDescription
-{
-public:
- ToolbarDescription() = default;
- ToolbarDescription(const QList<QWidget *> &widgets) : m_widgets(widgets) {}
-
- QList<QWidget *> widgets() const;
-
- void addAction(QAction *action, const QIcon &toolbarIcon = QIcon());
- void addWidget(QWidget *widget);
-
-private:
- QList<QWidget *> m_widgets;
+ QVector<ToolbarOperation> m_toolbarOperations;
};
class DEBUGGER_EXPORT DebuggerMainWindow : public FancyMainWindow
@@ -120,42 +119,43 @@ public:
DebuggerMainWindow();
~DebuggerMainWindow() override;
- void registerPerspective(const QByteArray &perspectiveId, const Perspective *perspective);
- void registerToolbar(const QByteArray &perspectiveId, QWidget *widget);
+ void registerPerspective(Perspective *perspective);
+ void destroyDynamicPerspective(Perspective *perspective);
- void saveCurrentPerspective();
void resetCurrentPerspective();
- void restorePerspective(const QByteArray &perspectiveId);
+ void restorePerspective(Perspective *perspective);
void finalizeSetup();
void showStatusMessage(const QString &message, int timeoutMS);
- QDockWidget *dockWidget(const QByteArray &dockId) const;
void raiseDock(const QByteArray &dockId);
- QByteArray currentPerspective() const { return m_currentPerspectiveId; }
+ QByteArray currentPerspective() const;
QStackedWidget *centralWidgetStack() const { return m_centralWidgetStack; }
void onModeChanged(Core::Id mode);
void setPerspectiveEnabled(const QByteArray &perspectiveId, bool enabled);
-private:
- void closeEvent(QCloseEvent *) final { saveCurrentPerspective(); }
-
- QDockWidget *registerDockWidget(const QByteArray &dockId, QWidget *widget);
- void loadPerspectiveHelper(const QByteArray &perspectiveId, bool fromStoredSettings = true);
+ Perspective *findPerspective(const QByteArray &perspectiveId) const;
- QByteArray m_currentPerspectiveId;
- QComboBox *m_perspectiveChooser;
- QStackedWidget *m_controlsStackWidget;
- QStackedWidget *m_centralWidgetStack;
- QWidget *m_editorPlaceHolder;
- Utils::StatusLabel *m_statusLabel;
+private:
+ void closeEvent(QCloseEvent *) final { savePerspectiveHelper(m_currentPerspective); }
+
+ void loadPerspectiveHelper(Perspective *perspective, bool fromStoredSettings = true);
+ void savePerspectiveHelper(const Perspective *perspective);
+ void increaseChooserWidthIfNecessary(const QString &visibleName);
+ int indexInChooser(Perspective *perspective) const;
+
+ Perspective *m_currentPerspective = nullptr;
+ QComboBox *m_perspectiveChooser = nullptr;
+ QHBoxLayout *m_toolbuttonBoxLayout = nullptr;
+ QStackedWidget *m_centralWidgetStack = nullptr;
+ QWidget *m_editorPlaceHolder = nullptr;
+ Utils::StatusLabel *m_statusLabel = nullptr;
QDockWidget *m_toolbarDock = nullptr;
QHash<QByteArray, QDockWidget *> m_dockForDockId;
- QHash<QByteArray, QWidget *> m_toolbarForPerspectiveId;
- QHash<QByteArray, const Perspective *> m_perspectiveForPerspectiveId;
+ QList<Perspective *> m_perspectives;
};
DEBUGGER_EXPORT QWidget *createModeWindow(const Core::Id &mode, DebuggerMainWindow *mainWindow);
diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp
index 8f0c663a99..3c94e2339b 100644
--- a/src/plugins/debugger/debuggerplugin.cpp
+++ b/src/plugins/debugger/debuggerplugin.cpp
@@ -88,7 +88,6 @@
#include <cppeditor/cppeditorconstants.h>
#include <qmljseditor/qmljseditorconstants.h>
-#include <cpptools/cppmodelmanager.h>
#include <projectexplorer/buildconfiguration.h>
#include <projectexplorer/buildmanager.h>
@@ -469,8 +468,8 @@ QAction *addCheckableAction(QMenu *menu, const QString &display, bool on, bool c
class DummyEngine : public DebuggerEngine
{
public:
- DummyEngine() {}
- ~DummyEngine() override {}
+ DummyEngine() = default;
+ ~DummyEngine() override = default;
void setupEngine() override {}
void runEngine() override {}
@@ -487,7 +486,7 @@ bool DummyEngine::hasCapability(unsigned cap) const
// This can only be a first approximation of what to expect when running.
Project *project = ProjectTree::currentProject();
if (!project)
- return 0;
+ return false;
Target *target = project->activeTarget();
QTC_ASSERT(target, return 0);
RunConfiguration *activeRc = target->activeRunConfiguration();
@@ -633,7 +632,7 @@ class DebuggerPluginPrivate : public QObject
public:
explicit DebuggerPluginPrivate(DebuggerPlugin *plugin);
- ~DebuggerPluginPrivate();
+ ~DebuggerPluginPrivate() override;
bool initialize(const QStringList &arguments, QString *errorMessage);
void extensionsInitialized();
@@ -641,14 +640,14 @@ public:
void doShutdown();
void connectEngine(DebuggerRunTool *runTool);
- void disconnectEngine() { connectEngine(0); }
+ void disconnectEngine() { connectEngine(nullptr); }
DebuggerEngine *dummyEngine();
void setThreadBoxContents(const QStringList &list, int index)
{
QSignalBlocker blocker(m_threadBox);
m_threadBox->clear();
- foreach (const QString &item, list)
+ for (const QString &item : list)
m_threadBox->addItem(item);
m_threadBox->setCurrentIndex(index);
}
@@ -746,7 +745,7 @@ public:
void runControlFinished(DebuggerRunTool *runTool);
void remoteCommand(const QStringList &options);
- void displayDebugger(DebuggerRunTool *runTool, bool updateEngine = true);
+ void displayDebugger(DebuggerRunTool *runTool);
void dumpLog();
void cleanupViews();
@@ -784,8 +783,8 @@ public:
void handleAbort()
{
- currentEngine()->resetLocation();
- currentEngine()->abortDebugger();
+ if (dd->m_currentRunTool)
+ dd->m_currentRunTool->abortDebugger();
}
void handleReset()
@@ -1023,25 +1022,25 @@ public:
BaseTreeView *m_stackView = nullptr;
BaseTreeView *m_threadsView = nullptr;
- QWidget *m_breakWindow = nullptr;
BreakHandler *m_breakHandler = nullptr;
- QWidget *m_returnWindow = nullptr;
- QWidget *m_localsWindow = nullptr;
- QWidget *m_watchersWindow = nullptr;
- QWidget *m_inspectorWindow = nullptr;
- QWidget *m_registerWindow = nullptr;
- QWidget *m_modulesWindow = nullptr;
- QWidget *m_snapshotWindow = nullptr;
- QWidget *m_sourceFilesWindow = nullptr;
- QWidget *m_stackWindow = nullptr;
- QWidget *m_threadsWindow = nullptr;
- LogWindow *m_logWindow = nullptr;
- LocalsAndInspectorWindow *m_localsAndInspectorWindow = nullptr;
+
+ QPointer<QWidget> m_returnWindow;
+ QPointer<QWidget> m_localsWindow;
+ QPointer<QWidget> m_watchersWindow;
+ QPointer<QWidget> m_inspectorWindow;
+ QPointer<LocalsAndInspectorWindow> m_localsAndInspectorWindow;
+ QPointer<QWidget> m_breakWindow;
+ QPointer<QWidget> m_registerWindow;
+ QPointer<QWidget> m_modulesWindow;
+ QPointer<QWidget> m_snapshotWindow;
+ QPointer<QWidget> m_sourceFilesWindow;
+ QPointer<QWidget> m_stackWindow;
+ QPointer<QWidget> m_threadsWindow;
+ QPointer<LogWindow> m_logWindow;
bool m_busy = false;
QString m_lastPermanentStatusMessage;
- mutable CPlusPlus::Snapshot m_codeModelSnapshot;
DebuggerPlugin *m_plugin = nullptr;
SnapshotHandler *m_snapshotHandler = nullptr;
@@ -1090,6 +1089,20 @@ DebuggerPluginPrivate::~DebuggerPluginPrivate()
delete m_breakHandler;
m_breakHandler = nullptr;
+
+ delete m_returnWindow;
+ delete m_localsWindow;
+ delete m_watchersWindow;
+ delete m_inspectorWindow;
+ delete m_localsAndInspectorWindow;
+ delete m_breakWindow;
+ delete m_registerWindow;
+ delete m_modulesWindow;
+ delete m_snapshotWindow;
+ delete m_sourceFilesWindow;
+ delete m_stackWindow;
+ delete m_threadsWindow;
+ delete m_logWindow;
}
DebuggerEngine *DebuggerPluginPrivate::dummyEngine()
@@ -1157,7 +1170,7 @@ bool DebuggerPluginPrivate::parseArgument(QStringList::const_iterator &it,
bool useTerminal = false;
if (!pid) {
- foreach (const QString &arg, args) {
+ for (const QString &arg : args) {
const QString key = arg.section('=', 0, 0);
const QString val = arg.section('=', 1, 1);
if (val.isEmpty()) {
@@ -1343,8 +1356,8 @@ bool DebuggerPluginPrivate::initialize(const QStringList &arguments,
this, [this](bool on) { m_breakView->setColumnHidden(BreakpointAddressColumn, !on); });
m_breakView->setSettings(settings, "Debugger.BreakWindow");
m_breakView->setModel(m_breakHandler->model());
- m_breakWindow = addSearch(m_breakView, tr("&Breakpoints"), DOCKWIDGET_BREAK);
m_breakView->setRootIsDecorated(true);
+ m_breakWindow = addSearch(m_breakView, tr("&Breakpoints"), DOCKWIDGET_BREAK);
m_modulesView = new BaseTreeView;
m_modulesView->setSortingEnabled(true);
@@ -1488,8 +1501,8 @@ bool DebuggerPluginPrivate::initialize(const QStringList &arguments,
ActionContainer *debugMenu = ActionManager::actionContainer(PE::M_DEBUG);
- m_localsAndInspectorWindow = new LocalsAndInspectorWindow(
- m_localsWindow, m_inspectorWindow, m_returnWindow);
+ m_localsAndInspectorWindow = new LocalsAndInspectorWindow
+ (m_localsWindow, m_inspectorWindow, m_returnWindow);
m_localsAndInspectorWindow->setObjectName(DOCKWIDGET_LOCALS_AND_INSPECTOR);
m_localsAndInspectorWindow->setWindowTitle(m_localsWindow->windowTitle());
@@ -1796,35 +1809,18 @@ bool DebuggerPluginPrivate::initialize(const QStringList &arguments,
connect(action(SettingsDialog), &QAction::triggered,
[] { ICore::showOptionsDialog(DEBUGGER_COMMON_SETTINGS_ID); });
- // Toolbar
- ToolbarDescription toolbar;
- toolbar.addAction(m_visibleStartAction);
- toolbar.addAction(ActionManager::command(Constants::STOP)->action(), Icons::DEBUG_EXIT_SMALL_TOOLBAR.icon());
- toolbar.addAction(ActionManager::command(Constants::NEXT)->action(), Icons::STEP_OVER_TOOLBAR.icon());
- toolbar.addAction(ActionManager::command(Constants::STEP)->action(), Icons::STEP_INTO_TOOLBAR.icon());
- toolbar.addAction(ActionManager::command(Constants::STEPOUT)->action(), Icons::STEP_OUT_TOOLBAR.icon());
- toolbar.addAction(ActionManager::command(Constants::RESET)->action(), Icons::RESTART_TOOLBAR.icon());
- toolbar.addAction(ActionManager::command(Constants::OPERATE_BY_INSTRUCTION)->action());
-
if (isReverseDebuggingEnabled()) {
m_reverseToolButton = new QToolButton;
m_reverseToolButton->setDefaultAction(m_reverseDirectionAction);
- toolbar.addWidget(m_reverseToolButton);
}
- toolbar.addWidget(new StyledSeparator);
-
m_threadLabel = new QLabel(tr("Threads:"));
- toolbar.addWidget(m_threadLabel);
m_threadBox = new QComboBox;
m_threadBox->setSizeAdjustPolicy(QComboBox::AdjustToContents);
connect(m_threadBox, static_cast<void(QComboBox::*)(int)>(&QComboBox::activated),
this, &DebuggerPluginPrivate::selectThread);
- toolbar.addWidget(m_threadBox);
-// toolbar.addSpacerItem(new QSpacerItem(4, 0));
-
// ToolbarDescription qmlToolbar
// qmlToolbar.addAction(qmlUpdateOnSaveDummyAction);
// qmlToolbar.addAction(qmlShowAppOnTopDummyAction, Icons::APP_ON_TOP_TOOLBAR.icon());
@@ -1832,28 +1828,37 @@ bool DebuggerPluginPrivate::initialize(const QStringList &arguments,
// qmlToolbar.addAction(qmlSelectDummyAction, Icons::SELECT_TOOLBAR.icon());
// qmlToolbar.addWidget(new StyledSeparator);
- auto createBasePerspective = [this] { return new Perspective({}, {
- {DOCKWIDGET_STACK, m_stackWindow, {}, Perspective::SplitVertical},
- {DOCKWIDGET_BREAK, m_breakWindow, DOCKWIDGET_STACK, Perspective::SplitHorizontal},
- {DOCKWIDGET_THREADS, m_threadsWindow, DOCKWIDGET_BREAK, Perspective::AddToTab, false},
- {DOCKWIDGET_MODULES, m_modulesWindow, DOCKWIDGET_THREADS, Perspective::AddToTab, false},
- {DOCKWIDGET_SOURCE_FILES, m_sourceFilesWindow, DOCKWIDGET_MODULES, Perspective::AddToTab, false},
- {DOCKWIDGET_SNAPSHOTS, m_snapshotWindow, DOCKWIDGET_SOURCE_FILES, Perspective::AddToTab, false},
- {DOCKWIDGET_LOCALS_AND_INSPECTOR, m_localsAndInspectorWindow, {}, Perspective::AddToTab, true,
- Qt::RightDockWidgetArea},
- {DOCKWIDGET_WATCHERS, m_watchersWindow, DOCKWIDGET_LOCALS_AND_INSPECTOR, Perspective::AddToTab, true,
- Qt::RightDockWidgetArea},
- {DOCKWIDGET_OUTPUT, m_logWindow, {}, Perspective::AddToTab, false, Qt::TopDockWidgetArea},
- {DOCKWIDGET_BREAK, 0, {}, Perspective::Raise}
- }); };
-
- Perspective *cppPerspective = createBasePerspective();
- cppPerspective->setName(tr("Debugger"));
- cppPerspective->addOperation({DOCKWIDGET_REGISTER, m_registerWindow, DOCKWIDGET_SNAPSHOTS,
- Perspective::AddToTab, false});
-
- Debugger::registerToolbar(CppPerspectiveId, toolbar);
- Debugger::registerPerspective(CppPerspectiveId, cppPerspective);
+ auto perspective = new Perspective("Debugger", tr("Debugger"));
+ perspective->addWindow(m_stackWindow, Perspective::SplitVertical, nullptr);
+ perspective->addWindow(m_breakWindow, Perspective::SplitHorizontal, m_stackWindow);
+ perspective->addWindow(m_threadsWindow, Perspective::AddToTab, m_breakWindow, false);
+ perspective->addWindow(m_modulesWindow, Perspective::AddToTab, m_threadsWindow, false);
+ perspective->addWindow(m_sourceFilesWindow, Perspective::AddToTab, m_modulesWindow, false);
+ perspective->addWindow(m_snapshotWindow, Perspective::AddToTab, m_sourceFilesWindow, false);
+ perspective->addWindow(m_localsAndInspectorWindow, Perspective::AddToTab, nullptr, true,
+ Qt::RightDockWidgetArea);
+ perspective->addWindow(m_watchersWindow, Perspective::AddToTab, m_localsAndInspectorWindow, true,
+ Qt::RightDockWidgetArea);
+ perspective->addWindow(m_logWindow, Perspective::AddToTab, nullptr, false, Qt::TopDockWidgetArea);
+ perspective->addWindow(m_breakWindow, Perspective::Raise, nullptr);
+ perspective->addWindow(m_registerWindow, Perspective::AddToTab, m_snapshotWindow, false);
+
+ perspective->addToolbarAction(m_visibleStartAction);
+ perspective->addToolbarAction(ActionManager::command(Constants::STOP)->action(), Icons::DEBUG_EXIT_SMALL_TOOLBAR.icon());
+ perspective->addToolbarAction(ActionManager::command(Constants::NEXT)->action(), Icons::STEP_OVER_TOOLBAR.icon());
+ perspective->addToolbarAction(ActionManager::command(Constants::STEP)->action(), Icons::STEP_INTO_TOOLBAR.icon());
+ perspective->addToolbarAction(ActionManager::command(Constants::STEPOUT)->action(), Icons::STEP_OUT_TOOLBAR.icon());
+ perspective->addToolbarAction(ActionManager::command(Constants::RESET)->action(), Icons::RESTART_TOOLBAR.icon());
+ perspective->addToolbarAction(ActionManager::command(Constants::OPERATE_BY_INSTRUCTION)->action());
+
+ if (isReverseDebuggingEnabled())
+ perspective->addToolbarWidget(m_reverseToolButton);
+
+ perspective->addToolbarSeparator();
+ perspective->addToolbarWidget(m_threadLabel);
+ perspective->addToolbarWidget(m_threadBox);
+
+ Debugger::registerPerspective(perspective);
// Perspective *qmlPerspective = createBasePerspective();
// qmlPerspective->setName(tr("QML Debugger"));
@@ -1867,7 +1872,7 @@ bool DebuggerPluginPrivate::initialize(const QStringList &arguments,
this, &DebuggerPluginPrivate::enableReverseDebuggingTriggered);
setInitialState();
- connectEngine(0);
+ connectEngine(nullptr);
connect(SessionManager::instance(), &SessionManager::startupProjectChanged,
this, &DebuggerPluginPrivate::onCurrentProjectChanged);
@@ -2068,12 +2073,12 @@ void DebuggerPluginPrivate::attachToUnstartedApplicationDialog()
RunControl *DebuggerPluginPrivate::attachToRunningProcess(Kit *kit,
DeviceProcessItem process, bool contAfterAttach)
{
- QTC_ASSERT(kit, return 0);
+ QTC_ASSERT(kit, return nullptr);
IDevice::ConstPtr device = DeviceKitInformation::device(kit);
- QTC_ASSERT(device, return 0);
+ QTC_ASSERT(device, return nullptr);
if (process.pid == 0) {
AsynchronousMessageBox::warning(tr("Warning"), tr("Cannot attach to process with PID 0"));
- return 0;
+ return nullptr;
}
const Abi tcAbi = ToolChainKitInformation::targetAbi(kit);
@@ -2084,13 +2089,13 @@ RunControl *DebuggerPluginPrivate::attachToRunningProcess(Kit *kit,
tr("The process %1 is already under the control of a debugger.\n"
"%2 cannot attach to it.").arg(process.pid)
.arg(Core::Constants::IDE_DISPLAY_NAME));
- return 0;
+ return nullptr;
}
if (device->type() != PE::DESKTOP_DEVICE_TYPE) {
AsynchronousMessageBox::warning(tr("Not a Desktop Device Type"),
tr("It is only possible to attach to a locally running process."));
- return 0;
+ return nullptr;
}
auto runControl = new RunControl(nullptr, ProjectExplorer::Constants::DEBUG_RUN_MODE);
@@ -2210,8 +2215,8 @@ void DebuggerPluginPrivate::editorOpened(IEditor *editor)
void DebuggerPluginPrivate::updateBreakMenuItem(IEditor *editor)
{
- BaseTextEditor *textEditor = qobject_cast<BaseTextEditor *>(editor);
- m_breakAction->setEnabled(textEditor != 0);
+ auto textEditor = qobject_cast<BaseTextEditor *>(editor);
+ m_breakAction->setEnabled(textEditor != nullptr);
}
void DebuggerPluginPrivate::requestContextMenu(TextEditorWidget *widget,
@@ -2378,7 +2383,7 @@ void DebuggerPluginPrivate::requestMark(TextEditorWidget *widget, int lineNumber
}
// If updateEngine is set, the engine will update its threads/modules and so forth.
-void DebuggerPluginPrivate::displayDebugger(DebuggerRunTool *runTool, bool updateEngine)
+void DebuggerPluginPrivate::displayDebugger(DebuggerRunTool *runTool)
{
QTC_ASSERT(runTool, return);
DebuggerEngine *engine = runTool ? runTool->engine() : dummyEngine();
@@ -2386,8 +2391,7 @@ void DebuggerPluginPrivate::displayDebugger(DebuggerRunTool *runTool, bool updat
disconnectEngine();
connectEngine(runTool);
- if (updateEngine)
- engine->updateAll();
+ engine->updateAll();
engine->updateViews();
}
@@ -2607,7 +2611,6 @@ void DebuggerPluginPrivate::updateState(DebuggerRunTool *runTool)
m_debugWithoutDeployAction->setEnabled(canRun);
setProxyAction(m_visibleStartAction, Id(Constants::DEBUG));
m_hiddenStopAction->setAction(m_undisturbableAction);
- m_codeModelSnapshot = CPlusPlus::Snapshot();
setBusyCursor(false);
cleanupViews();
} else if (state == InferiorUnrunnable) {
@@ -2747,7 +2750,7 @@ void DebuggerPluginPrivate::dumpLog()
/*! Activates the previous mode when the current mode is the debug mode. */
void DebuggerPluginPrivate::activatePreviousMode()
{
- if (ModeManager::currentMode() == MODE_DEBUG && m_previousMode.isValid()) {
+ if (ModeManager::currentModeId() == MODE_DEBUG && m_previousMode.isValid()) {
// If stopping the application also makes Qt Creator active (as the
// "previously active application"), doing the switch synchronously
// leads to funny effects with floating dock widgets
@@ -2802,22 +2805,15 @@ void DebuggerPluginPrivate::aboutToShutdown()
m_shutdownTimer.setInterval(0);
m_shutdownTimer.setSingleShot(true);
connect(&m_shutdownTimer, &QTimer::timeout, this, &DebuggerPluginPrivate::doShutdown);
- if (DebuggerEngine *engine = currentEngine()) {
- if (engine->state() != Debugger::DebuggerNotReady) {
- engine->abortDebugger();
+ if (dd->m_currentRunTool) {
+ if (dd->m_currentRunTool->engine()->state() != Debugger::DebuggerNotReady) {
+ dd->m_currentRunTool->abortDebugger();
m_shutdownTimer.setInterval(3000);
}
}
m_shutdownTimer.start();
}
-const CPlusPlus::Snapshot &cppCodeModelSnapshot()
-{
- if (dd->m_codeModelSnapshot.isEmpty() && action(UseCodeModel)->isChecked())
- dd->m_codeModelSnapshot = CppTools::CppModelManager::instance()->snapshot();
- return dd->m_codeModelSnapshot;
-}
-
void setSessionValue(const QByteArray &key, const QVariant &value)
{
SessionManager::setValue(QString::fromUtf8(key), value);
@@ -2864,21 +2860,8 @@ void DebuggerPluginPrivate::showMessage(const QString &msg, int channel, int tim
static void createNewDock(QWidget *widget)
{
-// m_mainWindow->registerDockWidget(dockId, widget);
-
-// QDockWidget *dockWidget = qobject_cast<QDockWidget *>(widget->parentWidget());
-// //dockWidget->installEventFilter(&m_resizeEventFilter);
-
-// QAction *toggleViewAction = dockWidget->toggleViewAction();
-// Command *cmd = ActionManager::registerAction(toggleViewAction,
-// Id("Debugger.").withSuffix(widget->objectName()));
-// cmd->setAttribute(Command::CA_Hide);
-// dd->createDockWidget(Core::Id::fromString(widget->objectName()), widget);
-// QDockWidget *dockWidget = qobject_cast<QDockWidget *>(widget->parentWidget());
-// QDockWidget *dockWidget = Debugger::registerDockWidget(Id::fromString(widget->objectName()), widget);
- QDockWidget *dockWidget = new QDockWidget;
+ auto dockWidget = new QDockWidget;
dockWidget->setWidget(widget);
-
dockWidget->setWindowTitle(widget->windowTitle());
dockWidget->setFeatures(QDockWidget::DockWidgetClosable);
dockWidget->show();
@@ -2892,7 +2875,7 @@ static QString formatStartParameters(const DebuggerRunTool *debugger)
str << "Start parameters: '" << sp.displayName << "' mode: " << sp.startMode
<< "\nABI: " << sp.toolChainAbi.toString() << '\n';
str << "Languages: ";
- if (sp.isCppDebugging)
+ if (sp.isCppDebugging())
str << "c++ ";
if (sp.isQmlDebugging)
str << "qml";
@@ -3073,7 +3056,7 @@ BreakHandler *breakHandler()
void showModuleSymbols(const QString &moduleName, const Symbols &symbols)
{
- QTreeWidget *w = new QTreeWidget;
+ auto w = new QTreeWidget;
w->setUniformRowHeights(true);
w->setColumnCount(5);
w->setRootIsDecorated(false);
@@ -3088,8 +3071,8 @@ void showModuleSymbols(const QString &moduleName, const Symbols &symbols)
header.append(DebuggerPlugin::tr("Name"));
w->setHeaderLabels(header);
w->setWindowTitle(DebuggerPlugin::tr("Symbols in \"%1\"").arg(moduleName));
- foreach (const Symbol &s, symbols) {
- QTreeWidgetItem *it = new QTreeWidgetItem;
+ for (const Symbol &s : symbols) {
+ auto it = new QTreeWidgetItem;
it->setData(0, Qt::DisplayRole, s.name);
it->setData(1, Qt::DisplayRole, s.address);
it->setData(2, Qt::DisplayRole, s.state);
@@ -3102,7 +3085,7 @@ void showModuleSymbols(const QString &moduleName, const Symbols &symbols)
void showModuleSections(const QString &moduleName, const Sections &sections)
{
- QTreeWidget *w = new QTreeWidget;
+ auto w = new QTreeWidget;
w->setUniformRowHeights(true);
w->setColumnCount(5);
w->setRootIsDecorated(false);
@@ -3117,8 +3100,8 @@ void showModuleSections(const QString &moduleName, const Sections &sections)
header.append(DebuggerPlugin::tr("Flags"));
w->setHeaderLabels(header);
w->setWindowTitle(DebuggerPlugin::tr("Sections in \"%1\"").arg(moduleName));
- foreach (const Section &s, sections) {
- QTreeWidgetItem *it = new QTreeWidgetItem;
+ for (const Section &s : sections) {
+ auto it = new QTreeWidgetItem;
it->setData(0, Qt::DisplayRole, s.name);
it->setData(1, Qt::DisplayRole, s.from);
it->setData(2, Qt::DisplayRole, s.to);
@@ -3133,13 +3116,13 @@ void DebuggerPluginPrivate::doShutdown()
{
m_shutdownTimer.stop();
delete m_mainWindow;
- m_mainWindow = 0;
+ m_mainWindow = nullptr;
delete m_modeWindow;
- m_modeWindow = 0;
+ m_modeWindow = nullptr;
delete m_mode;
- m_mode = 0;
+ m_mode = nullptr;
emit m_plugin->asynchronousShutdownFinished();
}
@@ -3192,9 +3175,9 @@ void runControlFinished(DebuggerRunTool *runTool)
dd->runControlFinished(runTool);
}
-void displayDebugger(DebuggerRunTool *runTool, bool updateEngine)
+void displayDebugger(DebuggerRunTool *runTool)
{
- dd->displayDebugger(runTool, updateEngine);
+ dd->displayDebugger(runTool);
}
void synchronizeBreakpoints()
@@ -3258,7 +3241,7 @@ QSharedPointer<Internal::GlobalDebuggerOptions> globalDebuggerOptions()
is DebuggerCore, implemented in DebuggerPluginPrivate.
*/
-static DebuggerPlugin *m_instance = 0;
+static DebuggerPlugin *m_instance = nullptr;
DebuggerPlugin::DebuggerPlugin()
{
@@ -3269,8 +3252,8 @@ DebuggerPlugin::DebuggerPlugin()
DebuggerPlugin::~DebuggerPlugin()
{
delete dd;
- dd = 0;
- m_instance = 0;
+ dd = nullptr;
+ m_instance = nullptr;
}
DebuggerPlugin *DebuggerPlugin::instance()
@@ -3295,7 +3278,7 @@ bool DebuggerPlugin::initialize(const QStringList &arguments, QString *errorMess
mstart->addSeparator(Constants::G_GENERAL);
mstart->addSeparator(Constants::G_SPECIAL);
- KitManager::registerKitInformation(new DebuggerKitInformation);
+ KitManager::registerKitInformation<DebuggerKitInformation>();
// Task integration.
//: Category under which Analyzer tasks are listed in Issues view
@@ -3318,7 +3301,7 @@ QObject *DebuggerPlugin::remoteCommand(const QStringList &options,
Q_UNUSED(workingDirectory);
Q_UNUSED(list);
dd->remoteCommand(options);
- return 0;
+ return nullptr;
}
void DebuggerPlugin::extensionsInitialized()
@@ -3369,7 +3352,7 @@ void DebuggerPluginPrivate::updateActiveLanguages()
// Id perspective = (languages & QmlLanguage) && !(languages & CppLanguage)
// ? QmlPerspectiveId : CppPerspectiveId;
// m_mainWindow->restorePerspective(perspective);
- if (rp.isCppDebugging)
+ if (rp.isCppDebugging())
ICore::addAdditionalContext(Context(C_CPPDEBUGGER));
else
ICore::removeAdditionalContext(Context(C_CPPDEBUGGER));
@@ -3399,7 +3382,7 @@ void DebuggerPluginPrivate::onModeChanged(Id mode)
void saveModeToRestore()
{
- dd->m_previousMode = ModeManager::currentMode();
+ dd->m_previousMode = ModeManager::currentModeId();
}
} // namespace Internal
@@ -3429,7 +3412,7 @@ static BuildConfiguration::BuildType startupBuildType()
void showCannotStartDialog(const QString &text)
{
- QMessageBox *errorDialog = new QMessageBox(ICore::mainWindow());
+ auto errorDialog = new QMessageBox(ICore::mainWindow());
errorDialog->setAttribute(Qt::WA_DeleteOnClose);
errorDialog->setIcon(QMessageBox::Warning);
errorDialog->setWindowTitle(text);
@@ -3503,21 +3486,6 @@ bool wantRunTool(ToolMode toolMode, const QString &toolName)
return true;
}
-void registerToolbar(const QByteArray &perspectiveId, const ToolbarDescription &desc)
-{
- auto toolbar = new QWidget;
- toolbar->setObjectName(QString::fromLatin1(perspectiveId + ".Toolbar"));
- auto hbox = new QHBoxLayout(toolbar);
- hbox->setMargin(0);
- hbox->setSpacing(0);
- for (QWidget *widget : desc.widgets())
- hbox->addWidget(widget);
- hbox->addStretch();
- toolbar->setLayout(hbox);
-
- dd->m_mainWindow->registerToolbar(perspectiveId, toolbar);
-}
-
QAction *createStartAction()
{
auto action = new QAction(DebuggerMainWindow::tr("Start"), DebuggerPlugin::instance());
@@ -3534,9 +3502,9 @@ QAction *createStopAction()
return action;
}
-void registerPerspective(const QByteArray &perspectiveId, const Perspective *perspective)
+void registerPerspective(Perspective *perspective)
{
- dd->m_mainWindow->registerPerspective(perspectiveId, perspective);
+ dd->m_mainWindow->registerPerspective(perspective);
}
void setPerspectiveEnabled(const QByteArray &perspectiveId, bool enabled)
@@ -3546,7 +3514,7 @@ void setPerspectiveEnabled(const QByteArray &perspectiveId, bool enabled)
void selectPerspective(const QByteArray &perspectiveId)
{
- if (ModeManager::currentMode() == MODE_DEBUG
+ if (ModeManager::currentModeId() == MODE_DEBUG
&& dd->m_mainWindow->currentPerspective() == perspectiveId) {
return;
}
@@ -3555,7 +3523,7 @@ void selectPerspective(const QByteArray &perspectiveId)
if (perspectiveId.isEmpty())
return;
ModeManager::activateMode(MODE_DEBUG);
- dd->m_mainWindow->restorePerspective(perspectiveId);
+ dd->m_mainWindow->restorePerspective(dd->m_mainWindow->findPerspective(perspectiveId));
}
QByteArray currentPerspective()
@@ -3595,7 +3563,7 @@ class DebuggerUnitTests : public QObject
Q_OBJECT
public:
- DebuggerUnitTests() {}
+ DebuggerUnitTests() = default;
private slots:
void initTestCase();
@@ -3608,7 +3576,7 @@ private slots:
void testStateMachine();
private:
- CppTools::Tests::TemporaryCopiedDir *m_tmpDir = 0;
+ CppTools::Tests::TemporaryCopiedDir *m_tmpDir = nullptr;
};
void DebuggerUnitTests::initTestCase()
@@ -3773,16 +3741,16 @@ void DebuggerUnitTests::testDebuggerMatching()
QFETCH(QString, target);
QFETCH(int, result);
- DebuggerItem::MatchLevel expectedLevel = static_cast<DebuggerItem::MatchLevel>(result);
+ auto expectedLevel = static_cast<DebuggerItem::MatchLevel>(result);
QList<Abi> debuggerAbis;
foreach (const QString &abi, debugger)
- debuggerAbis << Abi(abi);
+ debuggerAbis << Abi::fromString(abi);
DebuggerItem item;
item.setAbis(debuggerAbis);
- DebuggerItem::MatchLevel level = item.matchTarget(Abi(target));
+ DebuggerItem::MatchLevel level = item.matchTarget(Abi::fromString(target));
if (level == DebuggerItem::MatchesPerfectly)
level = DebuggerItem::MatchesWell;
diff --git a/src/plugins/debugger/debuggerprotocol.cpp b/src/plugins/debugger/debuggerprotocol.cpp
index b0d3e3787e..b74770afa8 100644
--- a/src/plugins/debugger/debuggerprotocol.cpp
+++ b/src/plugins/debugger/debuggerprotocol.cpp
@@ -384,7 +384,7 @@ qulonglong GdbMi::toAddress() const
ba.chop(1);
if (ba.startsWith('*') || ba.startsWith('@'))
ba = ba.mid(1);
- return ba.toULongLong(0, 0);
+ return ba.toULongLong(nullptr, 0);
}
Utils::ProcessHandle GdbMi::toProcessHandle() const
@@ -448,7 +448,7 @@ void extractGdbVersion(const QString &msg,
QString build;
bool inClean = true;
bool inParenthesis = false;
- foreach (QChar c, msg) {
+ for (QChar c : msg) {
if (inClean && !cleaned.isEmpty() && c != dot && (c.isPunct() || c.isSpace()))
inClean = false;
if (ignoreParenthesisContent) {
@@ -574,13 +574,13 @@ QString decodeData(const QString &ba, const QString &encoding)
if (encoding == "empty")
return QCoreApplication::translate("Debugger::Internal::WatchHandler", "<empty>");
if (encoding == "minimumitemcount")
- return QCoreApplication::translate("Debugger::Internal::WatchHandler", "<at least %n items>", 0, ba.toInt());
+ return QCoreApplication::translate("Debugger::Internal::WatchHandler", "<at least %n items>", nullptr, ba.toInt());
if (encoding == "undefined")
return QLatin1String("Undefined");
if (encoding == "null")
return QLatin1String("Null");
if (encoding == "itemcount")
- return QCoreApplication::translate("Debugger::Internal::WatchHandler", "<%n items>", 0, ba.toInt());
+ return QCoreApplication::translate("Debugger::Internal::WatchHandler", "<%n items>", nullptr, ba.toInt());
if (encoding == "notaccessible")
return QCoreApplication::translate("Debugger::Internal::WatchHandler", "<not accessible>");
if (encoding == "optimizedout")
diff --git a/src/plugins/debugger/debuggerprotocol.h b/src/plugins/debugger/debuggerprotocol.h
index 634934ec96..68fefbacea 100644
--- a/src/plugins/debugger/debuggerprotocol.h
+++ b/src/plugins/debugger/debuggerprotocol.h
@@ -45,9 +45,9 @@ class DebuggerResponse;
class DebuggerCommand
{
public:
- typedef std::function<void(const DebuggerResponse &)> Callback;
+ using Callback = std::function<void (const DebuggerResponse &)>;
- DebuggerCommand() {}
+ DebuggerCommand() = default;
DebuggerCommand(const QString &f) : function(f) {}
DebuggerCommand(const QString &f, const QJsonValue &a) : function(f), args(a) {}
DebuggerCommand(const QString &f, int fl) : function(f), flags(fl) {}
@@ -109,7 +109,7 @@ private:
class DebuggerCommandSequence
{
public:
- DebuggerCommandSequence() {}
+ DebuggerCommandSequence() = default;
bool isEmpty() const { return m_commands.isEmpty(); }
bool wantContinue() const { return m_continue; }
const QList<DebuggerCommand> &commands() const { return m_commands; }
@@ -127,7 +127,7 @@ public:
class GdbMi
{
public:
- GdbMi() : m_type(Invalid) {}
+ GdbMi() = default;
QString m_name;
QString m_data;
@@ -135,7 +135,7 @@ public:
enum Type { Invalid, Const, Tuple, List };
- Type m_type;
+ Type m_type = Invalid;
Type type() const { return m_type; }
const QString &name() const { return m_name; }
@@ -189,12 +189,12 @@ enum ResultClass
class DebuggerResponse
{
public:
- DebuggerResponse() : token(-1), resultClass(ResultUnknown) {}
+ DebuggerResponse() = default;
QString toString() const;
static QString stringFromResultClass(ResultClass resultClass);
- int token;
- ResultClass resultClass;
+ int token = -1;
+ ResultClass resultClass = ResultUnknown;
GdbMi data;
QString logStreamOutput;
QString consoleStreamOutput;
@@ -224,7 +224,7 @@ public:
DateTimeInternal,
};
- DebuggerEncoding() {}
+ DebuggerEncoding() = default;
explicit DebuggerEncoding(const QString &data);
QString toString() const;
diff --git a/src/plugins/debugger/debuggerrunconfigurationaspect.cpp b/src/plugins/debugger/debuggerrunconfigurationaspect.cpp
index 58263c97bb..32f242814b 100644
--- a/src/plugins/debugger/debuggerrunconfigurationaspect.cpp
+++ b/src/plugins/debugger/debuggerrunconfigurationaspect.cpp
@@ -69,9 +69,9 @@ class DebuggerRunConfigWidget : public RunConfigWidget
public:
explicit DebuggerRunConfigWidget(DebuggerRunConfigurationAspect *aspect);
- QString displayName() const { return tr("Debugger Settings"); }
+ QString displayName() const override { return tr("Debugger Settings"); }
- void showEvent(QShowEvent *event);
+ void showEvent(QShowEvent *event) override;
void update();
void useCppDebuggerClicked(bool on);
diff --git a/src/plugins/debugger/debuggerruncontrol.cpp b/src/plugins/debugger/debuggerruncontrol.cpp
index cd004f9a84..6c66f7eead 100644
--- a/src/plugins/debugger/debuggerruncontrol.cpp
+++ b/src/plugins/debugger/debuggerruncontrol.cpp
@@ -264,7 +264,6 @@ void DebuggerRunTool::setStartMode(DebuggerStartMode startMode)
{
if (startMode == AttachToQmlServer) {
m_runParameters.startMode = AttachToRemoteProcess;
- m_runParameters.isCppDebugging = false;
m_runParameters.cppEngineType = NoEngineType;
m_runParameters.isQmlDebugging = true;
m_runParameters.closeMode = KillAtClose;
@@ -436,7 +435,6 @@ void DebuggerRunTool::setOverrideStartScript(const QString &script)
void DebuggerRunTool::setInferior(const Runnable &runnable)
{
m_runParameters.inferior = runnable;
- setUseTerminal(m_runParameters.inferior.runMode == ApplicationLauncher::Console);
}
void DebuggerRunTool::setInferiorExecutable(const QString &executable)
@@ -521,7 +519,7 @@ void DebuggerRunTool::start()
setQmlServer(d->portsGatherer->qmlServer());
if (d->addQmlServerInferiorCommandLineArgumentIfNeeded
&& m_runParameters.isQmlDebugging
- && m_runParameters.isCppDebugging) {
+ && m_runParameters.isCppDebugging()) {
using namespace QmlDebug;
int qmlServerPort = m_runParameters.qmlServer.port();
QTC_ASSERT(qmlServerPort > 0, reportFailure(); return);
@@ -564,7 +562,8 @@ void DebuggerRunTool::start()
DebuggerEngine *cppEngine = nullptr;
if (!m_engine) {
- switch (m_runParameters.cppEngineType) {
+ if (m_runParameters.isCppDebugging()) {
+ switch (m_runParameters.cppEngineType) {
case GdbEngineType:
cppEngine = createGdbEngine();
break;
@@ -584,11 +583,12 @@ void DebuggerRunTool::start()
default:
if (!m_runParameters.isQmlDebugging) {
reportFailure(DebuggerPlugin::tr("Unable to create a debugging engine. "
- "Please select a Debugger Setting from the Run page of the project mode."));
+ "Please select a Debugger Setting from the Run page of the project mode."));
return;
}
// Can happen for pure Qml.
break;
+ }
}
if (m_runParameters.isQmlDebugging) {
@@ -610,7 +610,7 @@ void DebuggerRunTool::start()
if (m_runParameters.startMode == StartInternal) {
QStringList unhandledIds;
- foreach (Breakpoint bp, breakHandler()->allBreakpoints()) {
+ for (const Breakpoint &bp : breakHandler()->allBreakpoints()) {
if (bp.isEnabled() && !m_engine->acceptsBreakpoint(bp))
unhandledIds.append(bp.id().toString());
}
@@ -652,7 +652,7 @@ const DebuggerRunParameters &DebuggerRunTool::runParameters() const
bool DebuggerRunTool::isCppDebugging() const
{
- return m_runParameters.isCppDebugging;
+ return m_runParameters.isCppDebugging();
}
bool DebuggerRunTool::isQmlDebugging() const
@@ -702,7 +702,18 @@ void DebuggerRunTool::quitDebugger()
void DebuggerRunTool::abortDebugger()
{
- m_engine->abortDebugger();
+ m_engine->resetLocation();
+ if (!m_isDying) {
+ // Be friendly the first time. This will change targetState().
+ showMessage("ABORTING DEBUGGER. FIRST TIME.");
+ quitDebugger();
+ } else {
+ // We already tried. Try harder.
+ showMessage("ABORTING DEBUGGER. SECOND TIME.");
+ m_engine->abortDebuggerProcess();
+ if (runControl())
+ runControl()->initiateFinish();
+ }
}
bool DebuggerRunTool::fixupParameters()
@@ -717,7 +728,7 @@ bool DebuggerRunTool::fixupParameters()
rp.debugger.environment.set(var, rp.inferior.environment.value(var));
// validate debugger if C++ debugging is enabled
- if (rp.isCppDebugging && !rp.validationErrors.isEmpty()) {
+ if (rp.isCppDebugging() && !rp.validationErrors.isEmpty()) {
reportFailure(rp.validationErrors.join('\n'));
return false;
}
@@ -753,7 +764,7 @@ bool DebuggerRunTool::fixupParameters()
if (rp.isQmlDebugging) {
QmlDebug::QmlDebugServicesPreset service;
- if (rp.isCppDebugging) {
+ if (rp.isCppDebugging()) {
if (rp.nativeMixedEnabled) {
service = QmlDebug::QmlNativeDebuggerServices;
} else {
@@ -763,7 +774,7 @@ bool DebuggerRunTool::fixupParameters()
service = QmlDebug::QmlDebuggerServices;
}
if (rp.startMode != AttachExternal && rp.startMode != AttachCrashedExternal) {
- QString qmlarg = rp.isCppDebugging && rp.nativeMixedEnabled
+ QString qmlarg = rp.isCppDebugging() && rp.nativeMixedEnabled
? QmlDebug::qmlDebugNativeArguments(service, false)
: QmlDebug::qmlDebugTcpArguments(service, Port(rp.qmlServer.port()));
QtcProcess::addArg(&rp.inferior.commandLineArguments, qmlarg);
@@ -796,7 +807,7 @@ bool DebuggerRunTool::fixupParameters()
if (rp.isNativeMixedDebugging())
rp.inferior.environment.set("QV4_FORCE_INTERPRETER", "1");
- if (rp.isCppDebugging && !rp.skipExecutableValidation)
+ if (rp.isCppDebugging() && !rp.skipExecutableValidation)
rp.validateExecutable();
return true;
@@ -829,6 +840,8 @@ DebuggerRunTool::DebuggerRunTool(RunControl *runControl, Kit *kit, bool allowTer
m_runParameters.displayName = runConfig->displayName();
if (auto symbolsAspect = runConfig->extraAspect<SymbolFileAspect>())
m_runParameters.symbolFile = symbolsAspect->value();
+ if (auto terminalAspect = runConfig->extraAspect<TerminalAspect>())
+ m_runParameters.useTerminal = terminalAspect->useTerminal();
}
if (runConfig && !kit)
@@ -843,19 +856,19 @@ DebuggerRunTool::DebuggerRunTool(RunControl *runControl, Kit *kit, bool allowTer
m_runParameters.qtPackageSourceLocation = qtVersion->qtPackageSourcePath().toString();
if (auto aspect = runConfig ? runConfig->extraAspect<DebuggerRunConfigurationAspect>() : nullptr) {
- m_runParameters.isCppDebugging = aspect->useCppDebugger();
+ if (aspect->useCppDebugger())
+ m_runParameters.cppEngineType = DebuggerKitInformation::engineType(kit);
m_runParameters.isQmlDebugging = aspect->useQmlDebugger();
m_runParameters.multiProcess = aspect->useMultiProcess();
- }
-
- if (m_runParameters.isCppDebugging)
+ } else if (m_runParameters.isCppDebugging()) {
m_runParameters.cppEngineType = DebuggerKitInformation::engineType(kit);
+ }
m_runParameters.inferior = runnable();
// Normalize to work around QTBUG-17529 (QtDeclarative fails with 'File name case mismatch'...)
m_runParameters.inferior.workingDirectory =
FileUtils::normalizePathName(m_runParameters.inferior.workingDirectory);
- setUseTerminal(allowTerminal && m_runParameters.inferior.runMode == ApplicationLauncher::Console);
+ setUseTerminal(allowTerminal && m_runParameters.useTerminal);
const QByteArray envBinary = qgetenv("QTC_DEBUGGER_PATH");
if (!envBinary.isEmpty())
@@ -921,7 +934,7 @@ DebuggerRunTool::~DebuggerRunTool()
disconnect();
if (m_engine) {
DebuggerEngine *engine = m_engine;
- m_engine = 0;
+ m_engine = nullptr;
engine->disconnect();
delete engine;
}
@@ -964,9 +977,7 @@ GdbServerPortsGatherer::GdbServerPortsGatherer(RunControl *runControl)
m_device = runControl->device();
}
-GdbServerPortsGatherer::~GdbServerPortsGatherer()
-{
-}
+GdbServerPortsGatherer::~GdbServerPortsGatherer() = default;
Port GdbServerPortsGatherer::gdbServerPort() const
{
@@ -1005,9 +1016,7 @@ GdbServerRunner::GdbServerRunner(RunControl *runControl, GdbServerPortsGatherer
addStartDependency(m_portsGatherer);
}
-GdbServerRunner::~GdbServerRunner()
-{
-}
+GdbServerRunner::~GdbServerRunner() = default;
void GdbServerRunner::setRunnable(const Runnable &runnable)
{
diff --git a/src/plugins/debugger/debuggersourcepathmappingwidget.cpp b/src/plugins/debugger/debuggersourcepathmappingwidget.cpp
index 14d0da759a..906610547c 100644
--- a/src/plugins/debugger/debuggersourcepathmappingwidget.cpp
+++ b/src/plugins/debugger/debuggersourcepathmappingwidget.cpp
@@ -50,8 +50,8 @@ enum { SourceColumn, TargetColumn, ColumnCount };
namespace Debugger {
namespace Internal {
-typedef QPair<QString, QString> Mapping;
-typedef DebuggerSourcePathMappingWidget::SourcePathMap SourcePathMap;
+using Mapping = QPair<QString, QString>;
+using SourcePathMap = DebuggerSourcePathMappingWidget::SourcePathMap;
// Qt's various build paths for unpatched versions.
QStringList qtBuildPaths()
@@ -166,9 +166,9 @@ void SourcePathMappingModel::setSourcePathMap(const SourcePathMap &m)
void SourcePathMappingModel::addRawMapping(const QString &source, const QString &target)
{
QList<QStandardItem *> items;
- QStandardItem *sourceItem = new QStandardItem(source);
+ auto sourceItem = new QStandardItem(source);
sourceItem->setFlags(Qt::ItemIsEnabled|Qt::ItemIsSelectable);
- QStandardItem *targetItem = new QStandardItem(target);
+ auto targetItem = new QStandardItem(target);
targetItem->setFlags(Qt::ItemIsEnabled|Qt::ItemIsSelectable);
items << sourceItem << targetItem;
appendRow(items);
diff --git a/src/plugins/debugger/debuggersourcepathmappingwidget.h b/src/plugins/debugger/debuggersourcepathmappingwidget.h
index 4a4cabb294..5d6624bb6d 100644
--- a/src/plugins/debugger/debuggersourcepathmappingwidget.h
+++ b/src/plugins/debugger/debuggersourcepathmappingwidget.h
@@ -50,7 +50,7 @@ class DebuggerSourcePathMappingWidget : public QGroupBox
Q_OBJECT
public:
- typedef QMap<QString, QString> SourcePathMap;
+ using SourcePathMap = QMap<QString, QString>;
explicit DebuggerSourcePathMappingWidget(QWidget *parent = nullptr);
diff --git a/src/plugins/debugger/debuggertooltipmanager.cpp b/src/plugins/debugger/debuggertooltipmanager.cpp
index 7aea2ce128..7ef8d4b8c9 100644
--- a/src/plugins/debugger/debuggertooltipmanager.cpp
+++ b/src/plugins/debugger/debuggertooltipmanager.cpp
@@ -139,9 +139,9 @@ public:
: m_target(target), m_moveStartPos(-1, -1), active(false)
{}
- void mousePressEvent(QMouseEvent *event);
- void mouseReleaseEvent(QMouseEvent *event);
- void mouseMoveEvent(QMouseEvent *event);
+ void mousePressEvent(QMouseEvent *event) override;
+ void mouseReleaseEvent(QMouseEvent *event) override;
+ void mouseMoveEvent(QMouseEvent *event) override;
public:
QWidget *m_target;
@@ -192,13 +192,13 @@ void DraggableLabel::mouseMoveEvent(QMouseEvent * event)
class ToolTipWatchItem : public TreeItem
{
public:
- ToolTipWatchItem() : expandable(false) {}
+ ToolTipWatchItem() = default;
ToolTipWatchItem(TreeItem *item);
- bool hasChildren() const { return expandable; }
- bool canFetchMore() const { return childCount() == 0 && expandable && model(); }
- void fetchMore() {}
- QVariant data(int column, int role) const;
+ bool hasChildren() const override { return expandable; }
+ bool canFetchMore() const override { return childCount() == 0 && expandable && model(); }
+ void fetchMore() override {}
+ QVariant data(int column, int role) const override;
public:
QString name;
@@ -206,7 +206,7 @@ public:
QString type;
QString expression;
QColor valueColor;
- bool expandable;
+ bool expandable = false;
QString iname;
};
@@ -257,7 +257,7 @@ public:
m_expandedINames.remove(idx.data(LocalsINameRole).toString());
}
- void fetchMore(const QModelIndex &idx)
+ void fetchMore(const QModelIndex &idx) override
{
if (!idx.isValid())
return;
@@ -379,9 +379,9 @@ public:
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
}
- QSize sizeHint() const { return m_size; }
+ QSize sizeHint() const override { return m_size; }
- int sizeHintForColumn(int column) const
+ int sizeHintForColumn(int column) const override
{
return QTreeView::sizeHintForColumn(column);
}
@@ -410,19 +410,19 @@ class DebuggerToolTipWidget : public QWidget
public:
DebuggerToolTipWidget();
- ~DebuggerToolTipWidget() { DEBUG("DESTROY DEBUGGERTOOLTIP WIDGET"); }
+ ~DebuggerToolTipWidget() override { DEBUG("DESTROY DEBUGGERTOOLTIP WIDGET"); }
- void closeEvent(QCloseEvent *)
+ void closeEvent(QCloseEvent *) override
{
DEBUG("CLOSE DEBUGGERTOOLTIP WIDGET");
}
- void enterEvent(QEvent *)
+ void enterEvent(QEvent *) override
{
DEBUG("ENTER DEBUGGERTOOLTIP WIDGET");
}
- void leaveEvent(QEvent *)
+ void leaveEvent(QEvent *) override
{
DEBUG("LEAVE DEBUGGERTOOLTIP WIDGET");
if (BaseTextEditor *editor = BaseTextEditor::currentTextEditor())
@@ -826,7 +826,7 @@ void DebuggerToolTipHolder::destroy()
{
if (widget) {
widget->close();
- widget = 0;
+ widget = nullptr;
}
}
@@ -1224,7 +1224,7 @@ static void slotTooltipOverrideRequested
static void slotEditorOpened(IEditor *e)
{
// Move tooltip along when scrolled.
- if (BaseTextEditor *textEditor = qobject_cast<BaseTextEditor *>(e)) {
+ if (auto textEditor = qobject_cast<BaseTextEditor *>(e)) {
TextEditorWidget *widget = textEditor->editorWidget();
QObject::connect(widget->verticalScrollBar(), &QScrollBar::valueChanged,
&DebuggerToolTipManager::updateVisibleToolTips);
@@ -1262,7 +1262,7 @@ void DebuggerToolTipManager::leavingDebugMode()
if (QWidget *topLevel = ICore::mainWindow()->topLevelWidget())
topLevel->removeEventFilter(this);
foreach (IEditor *e, DocumentModel::editorsForOpenedDocuments()) {
- if (BaseTextEditor *toolTipEditor = qobject_cast<BaseTextEditor *>(e)) {
+ if (auto toolTipEditor = qobject_cast<BaseTextEditor *>(e)) {
toolTipEditor->editorWidget()->verticalScrollBar()->disconnect(this);
toolTipEditor->disconnect(this);
}
@@ -1289,7 +1289,7 @@ bool DebuggerToolTipManager::eventFilter(QObject *o, QEvent *e)
return false;
switch (e->type()) {
case QEvent::Move: { // Move along with parent (toplevel)
- const QMoveEvent *me = static_cast<const QMoveEvent *>(e);
+ const auto me = static_cast<const QMoveEvent *>(e);
const QPoint dist = me->pos() - me->oldPos();
purgeClosedToolTips();
foreach (DebuggerToolTipHolder *tooltip, m_tooltips) {
@@ -1299,7 +1299,7 @@ bool DebuggerToolTipManager::eventFilter(QObject *o, QEvent *e)
break;
}
case QEvent::WindowStateChange: { // Hide/Show along with parent (toplevel)
- const QWindowStateChangeEvent *se = static_cast<const QWindowStateChangeEvent *>(e);
+ const auto se = static_cast<const QWindowStateChangeEvent *>(e);
const bool wasMinimized = se->oldState() & Qt::WindowMinimized;
const bool isMinimized = static_cast<const QWidget *>(o)->windowState() & Qt::WindowMinimized;
if (wasMinimized ^ isMinimized) {
diff --git a/src/plugins/debugger/debuggertooltipmanager.h b/src/plugins/debugger/debuggertooltipmanager.h
index 44b117f8d3..db3ec2af32 100644
--- a/src/plugins/debugger/debuggertooltipmanager.h
+++ b/src/plugins/debugger/debuggertooltipmanager.h
@@ -67,7 +67,7 @@ public:
bool isCppEditor;
};
-typedef QList<DebuggerToolTipContext> DebuggerToolTipContexts;
+using DebuggerToolTipContexts = QList<DebuggerToolTipContext>;
class DebuggerToolTipManager : public QObject
{
diff --git a/src/plugins/debugger/disassembleragent.cpp b/src/plugins/debugger/disassembleragent.cpp
index 6268d758bd..d79be06f57 100644
--- a/src/plugins/debugger/disassembleragent.cpp
+++ b/src/plugins/debugger/disassembleragent.cpp
@@ -72,8 +72,8 @@ public:
setPriority(TextMark::NormalPriority);
}
- bool isClickable() const { return true; }
- void clicked() { m_bp.removeBreakpoint(); }
+ bool isClickable() const override { return true; }
+ void clicked() override { m_bp.removeBreakpoint(); }
public:
Breakpoint m_bp;
@@ -88,13 +88,13 @@ public:
class FrameKey
{
public:
- FrameKey() : startAddress(0), endAddress(0) {}
+ FrameKey() = default;
inline bool matches(const Location &loc) const;
QString functionName;
QString fileName;
- quint64 startAddress;
- quint64 endAddress;
+ quint64 startAddress = 0;
+ quint64 endAddress = 0;
};
bool FrameKey::matches(const Location &loc) const
@@ -105,7 +105,7 @@ bool FrameKey::matches(const Location &loc) const
&& loc.functionName() == functionName;
}
-typedef QPair<FrameKey, DisassemblerLines> CacheEntry;
+using CacheEntry = QPair<FrameKey, DisassemblerLines>;
///////////////////////////////////////////////////////////////////////
@@ -134,7 +134,7 @@ public:
};
DisassemblerAgentPrivate::DisassemblerAgentPrivate(DebuggerEngine *engine)
- : document(0),
+ : document(nullptr),
engine(engine),
locationMark(engine, Utils::FileName(), 0),
mimeType("text/x-qtcreator-generic-asm"),
@@ -144,7 +144,7 @@ DisassemblerAgentPrivate::DisassemblerAgentPrivate(DebuggerEngine *engine)
DisassemblerAgentPrivate::~DisassemblerAgentPrivate()
{
EditorManager::closeDocuments(QList<IDocument *>() << document);
- document = 0;
+ document = nullptr;
qDeleteAll(breakpointMarks);
}
@@ -183,7 +183,7 @@ DisassemblerAgent::DisassemblerAgent(DebuggerEngine *engine)
DisassemblerAgent::~DisassemblerAgent()
{
delete d;
- d = 0;
+ d = nullptr;
}
int DisassemblerAgent::indexOf(const Location &loc) const
@@ -261,7 +261,7 @@ void DisassemblerAgentPrivate::configureMimeType()
Utils::MimeType mtype = Utils::mimeTypeForName(mimeType);
if (mtype.isValid()) {
foreach (IEditor *editor, DocumentModel::editorsForDocument(document))
- if (TextEditorWidget *widget = qobject_cast<TextEditorWidget *>(editor->widget()))
+ if (auto widget = qobject_cast<TextEditorWidget *>(editor->widget()))
widget->configureGenericHighlighter();
} else {
qWarning("Assembler mimetype '%s' not found.", qPrintable(mimeType));
@@ -309,7 +309,7 @@ void DisassemblerAgent::setContentsToDocument(const DisassemblerLines &contents)
Core::Constants::K_DEFAULT_TEXT_EDITOR_ID,
&titlePattern);
QTC_ASSERT(editor, return);
- if (TextEditorWidget *widget = qobject_cast<TextEditorWidget *>(editor->widget())) {
+ if (auto widget = qobject_cast<TextEditorWidget *>(editor->widget())) {
widget->setReadOnly(true);
widget->setRequestMarkEnabled(true);
}
@@ -331,8 +331,8 @@ void DisassemblerAgent::setContentsToDocument(const DisassemblerLines &contents)
d->document->setPreferredDisplayName(QString("Disassembler (%1)")
.arg(d->location.functionName()));
- Breakpoints bps = breakHandler()->engineBreakpoints(d->engine);
- foreach (Breakpoint bp, bps)
+ const Breakpoints bps = breakHandler()->engineBreakpoints(d->engine);
+ for (Breakpoint bp : bps)
updateBreakpointMarker(bp);
updateLocationMarker();
@@ -350,7 +350,7 @@ void DisassemblerAgent::updateLocationMarker()
// Center cursor.
if (EditorManager::currentDocument() == d->document)
- if (BaseTextEditor *textEditor = qobject_cast<BaseTextEditor *>(EditorManager::currentEditor()))
+ if (auto textEditor = qobject_cast<BaseTextEditor *>(EditorManager::currentEditor()))
textEditor->gotoLine(lineNumber);
}
diff --git a/src/plugins/debugger/disassemblerlines.cpp b/src/plugins/debugger/disassemblerlines.cpp
index 661d331a85..544f14f8b2 100644
--- a/src/plugins/debugger/disassemblerlines.cpp
+++ b/src/plugins/debugger/disassemblerlines.cpp
@@ -189,12 +189,12 @@ void DisassemblerLines::appendUnparsed(const QString &unparsed)
m_lastFunction = function;
}
}
- dl.address = address.left(pos1 - 1).toULongLong(0, 0);
+ dl.address = address.left(pos1 - 1).toULongLong(nullptr, 0);
dl.function = m_lastFunction;
dl.offset = address.mid(pos2).toUInt();
} else {
// Plain data like "0x0000cd64:\tadd\tlr, pc, lr\n"
- dl.address = address.toULongLong(0, 0);
+ dl.address = address.toULongLong(nullptr, 0);
dl.function = m_lastFunction;
dl.offset = 0;
}
@@ -218,9 +218,9 @@ QString DisassemblerLine::toString(int maxOp) const
if (address)
str += QString("0x%1 ").arg(address, 0, 16);
if (offset)
- str += QString("<+0x%2> ").arg(offset, 4, 16, QLatin1Char('0'));
+ str += QString("<+%1> ").arg(offset, 5);
else
- str += " ";
+ str += " ";
str += QString(" %1 ").arg(bytes);
str += QString(maxOp - bytes.size(), QLatin1Char(' '));
str += data;
diff --git a/src/plugins/debugger/disassemblerlines.h b/src/plugins/debugger/disassemblerlines.h
index ff8586d429..7cede27ac3 100644
--- a/src/plugins/debugger/disassemblerlines.h
+++ b/src/plugins/debugger/disassemblerlines.h
@@ -40,7 +40,7 @@ namespace Internal {
class DisassemblerLine
{
public:
- DisassemblerLine() : address(0), offset(0), lineNumber(0), hunk(0) {}
+ DisassemblerLine() = default;
bool isAssembler() const { return address != 0; }
bool isCode() const { return lineNumber != 0; }
bool isComment() const { return lineNumber == 0 && address == 0; }
@@ -48,21 +48,21 @@ public:
void fromString(const QString &unparsed);
public:
- quint64 address; // (ass) Address of instruction in memory/in binary.
- QString function; // (ass) Function to which current instruction belongs.
- QString fileName; // (src) Source file
- uint offset; // (ass) Offset of instruction in relation to current function.
- uint lineNumber; // (src) Line number in source.
- uint hunk; // (src) Number of hunk if source line was split
- QByteArray rawData; // (ass) Raw bytes of the instruction
- QString data; // (ass) Instruction text, (src) source text, (cmt) arbitrary.
- QString bytes; // (ass) The instruction in raw bytes
+ quint64 address = 0; // (ass) Address of instruction in memory/in binary.
+ QString function; // (ass) Function to which current instruction belongs.
+ QString fileName; // (src) Source file
+ uint offset = 0; // (ass) Offset of instruction in relation to current function.
+ uint lineNumber = 0; // (src) Line number in source.
+ uint hunk = 0; // (src) Number of hunk if source line was split
+ QByteArray rawData; // (ass) Raw bytes of the instruction
+ QString data; // (ass) Instruction text, (src) source text, (cmt) arbitrary.
+ QString bytes; // (ass) The instruction in raw bytes
};
class DisassemblerLines
{
public:
- DisassemblerLines() : m_bytesLength(0) {}
+ DisassemblerLines() = default;
bool coversAddress(quint64 address) const;
void appendUnparsed(const QString &line);
@@ -84,7 +84,7 @@ public:
private:
QString m_lastFunction;
- int m_bytesLength;
+ int m_bytesLength = 0;
QVector<DisassemblerLine> m_data;
QHash<quint64, int> m_rowCache;
};
diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp
index 81af51a3cc..d16121f22c 100644
--- a/src/plugins/debugger/gdb/gdbengine.cpp
+++ b/src/plugins/debugger/gdb/gdbengine.cpp
@@ -192,10 +192,10 @@ static QString msgWinException(const QString &data, unsigned *exCodeIn = nullptr
const int addressPos = blankPos != -1 ? data.indexOf("0x", blankPos + 1) : -1;
if (addressPos < 0)
return GdbEngine::tr("An exception was triggered.");
- const unsigned exCode = data.mid(exCodePos, blankPos - exCodePos).toUInt(0, 0);
+ const unsigned exCode = data.mid(exCodePos, blankPos - exCodePos).toUInt(nullptr, 0);
if (exCodeIn)
*exCodeIn = exCode;
- const quint64 address = data.mid(addressPos).trimmed().toULongLong(0, 0);
+ const quint64 address = data.mid(addressPos).trimmed().toULongLong(nullptr, 0);
QString rc;
QTextStream str(&rc);
str << GdbEngine::tr("An exception was triggered:") << ' ';
@@ -560,7 +560,7 @@ void GdbEngine::handleAsyncOutput(const QString &asyncClass, const GdbMi &result
BreakHandler *handler = breakHandler();
Breakpoint bp;
BreakpointResponse br;
- foreach (const GdbMi &bkpt, res.children()) {
+ for (const GdbMi &bkpt : res.children()) {
const QString nr = bkpt["number"].data();
BreakpointResponseId rid(nr);
if (nr.contains('.')) {
@@ -585,7 +585,7 @@ void GdbEngine::handleAsyncOutput(const QString &asyncClass, const GdbMi &result
// {bkpt={number="2",type="hw watchpoint",disp="keep",enabled="y",
// what="*0xbfffed48",times="0",original-location="*0xbfffed48"}}
BreakHandler *handler = breakHandler();
- foreach (const GdbMi &bkpt, result.children()) {
+ for (const GdbMi &bkpt : result.children()) {
BreakpointResponse br;
br.type = BreakpointByFileAndLine;
updateResponse(br, bkpt);
@@ -756,7 +756,7 @@ void GdbEngine::runCommand(const DebuggerCommand &command)
if (state() == InferiorRunOk) {
showStatusMessage(tr("Stopping temporarily."), 1000);
m_onStop.append(cmd, wantContinue);
- requestInterruptInferior();
+ interruptInferior();
return;
}
if (state() != InferiorStopOk)
@@ -841,7 +841,7 @@ void GdbEngine::commandTimeout()
"to a command within %n seconds. This could mean it is stuck "
"in an endless loop or taking longer than expected to perform "
"the operation.\nYou can choose between waiting "
- "longer or aborting debugging.", 0, timeOut / 1000);
+ "longer or aborting debugging.", nullptr, timeOut / 1000);
QMessageBox *mb = showMessageBox(QMessageBox::Critical,
tr("GDB Not Responding"), msg,
QMessageBox::Ok | QMessageBox::Cancel);
@@ -1008,7 +1008,7 @@ void GdbEngine::handleResultRecord(DebuggerResponse *response)
if (m_commandsDoneCallback && m_commandForToken.isEmpty()) {
showMessage("ALL COMMANDS DONE; INVOKING CALLBACK");
CommandsDoneCallback cont = m_commandsDoneCallback;
- m_commandsDoneCallback = 0;
+ m_commandsDoneCallback = nullptr;
if (response->resultClass != ResultRunning) //only start if the thing is not already running
(this->*cont)();
} else {
@@ -1059,7 +1059,7 @@ void GdbEngine::handleQuerySources(const DebuggerResponse &response)
// "^done,files=[{file="../../../../bin/dumper/dumper.cpp",
// fullname="/data5/dev/ide/main/bin/dumper/dumper.cpp"},
GdbMi files = response.data["files"];
- foreach (const GdbMi &item, files.children()) {
+ for (const GdbMi &item : files.children()) {
GdbMi fileName = item["file"];
if (fileName.data().endsWith("<built-in>"))
continue;
@@ -1408,7 +1408,7 @@ void GdbEngine::handleStop2(const GdbMi &data)
const GdbMi wpt = data["wpt"];
const BreakpointResponseId rid(wpt["number"].data());
const Breakpoint bp = breakHandler()->findBreakpointByResponseId(rid);
- const quint64 bpAddress = wpt["exp"].data().mid(1).toULongLong(0, 0);
+ const quint64 bpAddress = wpt["exp"].data().mid(1).toULongLong(nullptr, 0);
QString msg;
if (bp.type() == WatchpointAtExpression)
msg = bp.msgWatchpointByExpressionTriggered(rid.majorPart(), bp.expression());
@@ -2086,7 +2086,7 @@ void GdbEngine::updateResponse(BreakpointResponse &response, const GdbMi &bkpt)
response.enabled = true;
response.pending = false;
response.condition.clear();
- foreach (const GdbMi &child, bkpt.children()) {
+ for (const GdbMi &child : bkpt.children()) {
if (child.hasName("number")) {
response.id = BreakpointResponseId(child.data());
} else if (child.hasName("func")) {
@@ -2141,7 +2141,7 @@ void GdbEngine::updateResponse(BreakpointResponse &response, const GdbMi &bkpt)
QString what = bkpt["what"].data();
if (what.startsWith("*0x")) {
response.type = WatchpointAtAddress;
- response.address = what.mid(1).toULongLong(0, 0);
+ response.address = what.mid(1).toULongLong(nullptr, 0);
} else {
response.type = WatchpointAtExpression;
response.expression = what;
@@ -2270,7 +2270,7 @@ void GdbEngine::handleWatchInsert(const DebuggerResponse &response, Breakpoint b
br.id = BreakpointResponseId(wpt["number"].data());
QString exp = wpt["exp"].data();
if (exp.startsWith('*'))
- br.address = exp.mid(1).toULongLong(0, 0);
+ br.address = exp.mid(1).toULongLong(nullptr, 0);
bp.setResponse(br);
QTC_CHECK(!bp.needsChange());
bp.notifyBreakpointInsertOk();
@@ -2282,7 +2282,7 @@ void GdbEngine::handleWatchInsert(const DebuggerResponse &response, Breakpoint b
const QString address = ba.mid(end + 2).trimmed();
br.id = BreakpointResponseId(ba.mid(begin, end - begin));
if (address.startsWith('*'))
- br.address = address.mid(1).toULongLong(0, 0);
+ br.address = address.mid(1).toULongLong(nullptr, 0);
bp.setResponse(br);
QTC_CHECK(!bp.needsChange());
bp.notifyBreakpointInsertOk();
@@ -2319,7 +2319,7 @@ void GdbEngine::handleBkpt(const GdbMi &bkpt, Breakpoint bp)
// http://permalink.gmane.org/gmane.comp.gdb.patches/83936
const GdbMi locations = bkpt["locations"];
if (locations.isValid()) {
- foreach (const GdbMi &loc, locations.children()) {
+ for (const GdbMi &loc : locations.children()) {
// A sub-breakpoint.
const QString subnr = loc["number"].data();
const BreakpointResponseId subrid(subnr);
@@ -2357,7 +2357,7 @@ void GdbEngine::handleBreakInsert1(const DebuggerResponse &response, Breakpoint
// the "main" entry. Use the "main" entry to retrieve the
// already known data from the BreakpointManager, and then
// iterate over all items to update main- and sub-data.
- foreach (const GdbMi &bkpt, response.data.children())
+ for (const GdbMi &bkpt : response.data.children())
handleBkpt(bkpt, bp);
if (bp.needsChange()) {
bp.notifyBreakpointChangeAfterInsertNeeded();
@@ -2707,10 +2707,10 @@ void GdbEngine::loadSymbolsForStack()
{
bool needUpdate = false;
const Modules &modules = modulesHandler()->modules();
- foreach (const StackFrame &frame, stackHandler()->frames()) {
+ for (const StackFrame &frame : stackHandler()->frames()) {
if (frame.function == "??") {
//qDebug() << "LOAD FOR " << frame.address;
- foreach (const Module &module, modules) {
+ for (const Module &module : modules) {
if (module.startAddress <= frame.address
&& frame.address < module.endAddress) {
runCommand({"sharedlibrary " + dotEscape(module.modulePath)});
@@ -2903,13 +2903,13 @@ void GdbEngine::handleModulesList(const DebuggerResponse &response)
// state="Y",path="/usr/lib/dyld",description="/usr/lib/dyld",
// loaded_addr="0x8fe00000",slide="0x0",prefix="__dyld_"},
// shlib-info={...}...
- foreach (const GdbMi &item, response.data.children()) {
+ for (const GdbMi &item : response.data.children()) {
module.modulePath = item["path"].data();
module.moduleName = nameFromPath(module.modulePath);
module.symbolsRead = (item["state"].data() == "Y")
? Module::ReadOk : Module::ReadFailed;
module.startAddress =
- item["loaded_addr"].data().toULongLong(0, 0);
+ item["loaded_addr"].data().toULongLong(nullptr, 0);
module.endAddress = 0; // FIXME: End address not easily available.
handler->updateModule(module);
}
@@ -2920,7 +2920,7 @@ void GdbEngine::handleModulesList(const DebuggerResponse &response)
void GdbEngine::examineModules()
{
ModulesHandler *handler = modulesHandler();
- foreach (const Module &module, handler->modules()) {
+ for (const Module &module : handler->modules()) {
if (module.elfData.symbolsType == UnknownSymbols)
handler->updateModule(module);
}
@@ -2946,7 +2946,7 @@ void GdbEngine::reloadSourceFiles()
// "^done,files=[{file="../../../../bin/dumper/dumper.cpp",
// fullname="/data5/dev/ide/main/bin/dumper/dumper.cpp"},
GdbMi files = response.data["files"];
- foreach (const GdbMi &item, files.children()) {
+ for (const GdbMi &item : files.children()) {
GdbMi fileName = item["file"];
if (fileName.data().endsWith("<built-in>"))
continue;
@@ -3119,7 +3119,7 @@ void GdbEngine::handleThreadNames(const DebuggerResponse &response)
ThreadsHandler *handler = threadsHandler();
GdbMi names;
names.fromString(response.consoleStreamOutput);
- foreach (const GdbMi &name, names.children()) {
+ for (const GdbMi &name : names.children()) {
ThreadData thread;
thread.id = ThreadId(name["id"].toInt());
thread.name = decodeData(name["value"].data(), name["valueencoded"].data());
@@ -3286,7 +3286,7 @@ void GdbEngine::handleRegisterListNames(const DebuggerResponse &response)
GdbMi names = response.data["register-names"];
m_registers.clear();
int gdbRegisterNumber = 0;
- foreach (const GdbMi &item, names.children()) {
+ for (const GdbMi &item : names.children()) {
if (!item.data().isEmpty()) {
Register reg;
reg.name = item.data();
@@ -3332,7 +3332,7 @@ void GdbEngine::handleRegisterListValues(const DebuggerResponse &response)
RegisterHandler *handler = registerHandler();
// 24^done,register-values=[{number="0",value="0xf423f"},...]
const GdbMi values = response.data["register-values"];
- foreach (const GdbMi &item, values.children()) {
+ for (const GdbMi &item : values.children()) {
const int number = item["number"].toInt();
Register reg = m_registers[number];
QString data = item["value"].data();
@@ -3413,7 +3413,7 @@ void GdbEngine::assignValueInDebugger(WatchItem *item,
class MemoryAgentCookie
{
public:
- MemoryAgentCookie() {}
+ MemoryAgentCookie() = default;
QByteArray *accumulator = nullptr; // Shared between split request. Last one cleans up.
uint *pendingRequests = nullptr; // Shared between split request. Last one cleans up.
@@ -3429,7 +3429,7 @@ void GdbEngine::changeMemory(MemoryAgent *agent, quint64 addr, const QByteArray
{
Q_UNUSED(agent)
DebuggerCommand cmd("-data-write-memory 0x" + QString::number(addr, 16) + " d 1", NeedsTemporaryStop);
- foreach (unsigned char c, data)
+ for (unsigned char c : data)
cmd.function += ' ' + QString::number(uint(c));
cmd.callback = CB(handleVarAssign);
runCommand(cmd);
@@ -3507,7 +3507,7 @@ void GdbEngine::handleFetchMemory(const DebuggerResponse &response, MemoryAgentC
class DisassemblerAgentCookie
{
public:
- DisassemblerAgentCookie() : agent(0) {}
+ DisassemblerAgentCookie() : agent(nullptr) {}
DisassemblerAgentCookie(DisassemblerAgent *agent_) : agent(agent_) {}
public:
@@ -3524,11 +3524,11 @@ void GdbEngine::fetchDisassembler(DisassemblerAgent *agent)
fetchDisassemblerByCliPointMixed(agent);
}
-static inline QString disassemblerCommand(const Location &location, bool mixed)
+static inline QString disassemblerCommand(const Location &location, bool mixed, QChar mixedFlag)
{
QString command = "disassemble /r";
if (mixed)
- command += 'm';
+ command += mixedFlag;
command += ' ';
if (const quint64 address = location.address()) {
command += "0x";
@@ -3544,7 +3544,8 @@ static inline QString disassemblerCommand(const Location &location, bool mixed)
void GdbEngine::fetchDisassemblerByCliPointMixed(const DisassemblerAgentCookie &ac)
{
QTC_ASSERT(ac.agent, return);
- DebuggerCommand cmd(disassemblerCommand(ac.agent->location(), true), Discardable | ConsoleCommand);
+ DebuggerCommand cmd(disassemblerCommand(ac.agent->location(), true, mixedDisasmFlag()),
+ Discardable | ConsoleCommand);
cmd.callback = [this, ac](const DebuggerResponse &response) {
if (response.resultClass == ResultDone)
if (handleCliDisassemblerResult(response.consoleStreamOutput, ac.agent))
@@ -3562,7 +3563,8 @@ void GdbEngine::fetchDisassemblerByCliRangeMixed(const DisassemblerAgentCookie &
const quint64 address = ac.agent->address();
QString start = QString::number(address - 20, 16);
QString end = QString::number(address + 100, 16);
- DebuggerCommand cmd("disassemble /rm 0x" + start + ",0x" + end, Discardable | ConsoleCommand);
+ DebuggerCommand cmd("disassemble /r" + mixedDisasmFlag() + " 0x" + start + ",0x" + end,
+ Discardable | ConsoleCommand);
cmd.callback = [this, ac](const DebuggerResponse &response) {
if (response.resultClass == ResultDone)
if (handleCliDisassemblerResult(response.consoleStreamOutput, ac.agent))
@@ -3596,7 +3598,7 @@ void GdbEngine::fetchDisassemblerByCliRangePlain(const DisassemblerAgentCookie &
struct LineData
{
- LineData() {}
+ LineData() = default;
LineData(int i, int f) : index(i), function(f) {}
int index;
int function;
@@ -3613,7 +3615,7 @@ bool GdbEngine::handleCliDisassemblerResult(const QString &output, DisassemblerA
QVector<DisassemblerLine> lines = dlines.data();
- typedef QMap<quint64, LineData> LineMap;
+ using LineMap = QMap<quint64, LineData>;
LineMap lineMap;
int currentFunction = -1;
for (int i = 0, n = lines.size(); i != n; ++i) {
@@ -3801,7 +3803,7 @@ void GdbEngine::setupEngine()
}
// Spaces just will not work.
- foreach (const QString &src, rp.debugSourceLocation) {
+ for (const QString &src : rp.debugSourceLocation) {
if (QDir(src).exists())
runCommand({"directory " + src});
else
@@ -3985,7 +3987,7 @@ void GdbEngine::handleAdapterStartFailed(const QString &msg, Id settingsIdHint)
void GdbEngine::prepareForRestart()
{
m_rerunPending = false;
- m_commandsDoneCallback = 0;
+ m_commandsDoneCallback = nullptr;
m_commandForToken.clear();
m_flagsForToken.clear();
}
@@ -4005,7 +4007,7 @@ void GdbEngine::handleInferiorPrepared()
if (m_commandForToken.isEmpty()) {
finishInferiorSetup();
} else {
- QTC_CHECK(m_commandsDoneCallback == 0);
+ QTC_CHECK(m_commandsDoneCallback == nullptr);
m_commandsDoneCallback = &GdbEngine::finishInferiorSetup;
}
}
@@ -4490,6 +4492,12 @@ void GdbEngine::interruptInferior2()
}
}
+QChar GdbEngine::mixedDisasmFlag() const
+{
+ // /m is deprecated since 7.11, and was replaced by /s which works better with optimizations
+ return m_gdbVersion >= 71100 ? 's' : 'm';
+}
+
void GdbEngine::shutdownEngine()
{
if (isPlainEngine()) {
@@ -4499,7 +4507,7 @@ void GdbEngine::shutdownEngine()
CHECK_STATE(EngineShutdownRequested);
showMessage(QString("INITIATE GDBENGINE SHUTDOWN, PROC STATE: %1").arg(m_gdbProc.state()));
- m_commandsDoneCallback = 0;
+ m_commandsDoneCallback = nullptr;
switch (m_gdbProc.state()) {
case QProcess::Running: {
if (runParameters().closeMode == KillAndExitMonitorAtClose)
@@ -4524,19 +4532,14 @@ void GdbEngine::handleFileExecAndSymbols(const DebuggerResponse &response)
CHECK_STATE(EngineSetupRequested);
if (isRemoteEngine()) {
- if (response.resultClass == ResultDone) {
- callTargetRemote();
- } else {
- QString reason = response.data["msg"].data();
- QString msg = tr("Reading debug information failed:") + '\n' + reason;
- if (reason.endsWith("No such file or directory.")) {
- showMessage("INFERIOR STARTUP: BINARY NOT FOUND");
+ if (response.resultClass != ResultDone) {
+ QString msg = response.data["msg"].data();
+ if (!msg.isEmpty()) {
+ showMessage(msg);
showMessage(msg, StatusBar);
- callTargetRemote(); // Proceed nevertheless.
- } else {
- notifyInferiorSetupFailedHelper(msg);
}
}
+ callTargetRemote(); // Proceed nevertheless.
} else if (isCoreEngine()) {
diff --git a/src/plugins/debugger/gdb/gdbengine.h b/src/plugins/debugger/gdb/gdbengine.h
index d2ccfb8816..aa16c0c401 100644
--- a/src/plugins/debugger/gdb/gdbengine.h
+++ b/src/plugins/debugger/gdb/gdbengine.h
@@ -159,7 +159,7 @@ private: ////////// General Interface //////////
int m_oldestAcceptableToken = -1;
int m_nonDiscardableCount = 0;
- typedef void (GdbEngine::*CommandsDoneCallback)();
+ using CommandsDoneCallback = void (GdbEngine::*)();
// This function is called after all previous responses have been received.
CommandsDoneCallback m_commandsDoneCallback = nullptr;
@@ -176,8 +176,6 @@ private: ////////// General Interface //////////
void handleStop3();
void resetCommandQueue();
- bool isSynchronous() const final { return true; }
-
// Gdb initialization sequence
void handleShowVersion(const DebuggerResponse &response);
void handleListFeatures(const DebuggerResponse &response);
@@ -403,6 +401,7 @@ private: ////////// General Interface //////////
void shutdownEngine() final;
void interruptInferior2();
+ QChar mixedDisasmFlag() const;
// Plain
void handleExecRun(const DebuggerResponse &response);
diff --git a/src/plugins/debugger/gdb/gdboptionspage.cpp b/src/plugins/debugger/gdb/gdboptionspage.cpp
index 1c759f939b..f279f7514f 100644
--- a/src/plugins/debugger/gdb/gdboptionspage.cpp
+++ b/src/plugins/debugger/gdb/gdboptionspage.cpp
@@ -70,9 +70,9 @@ class GdbOptionsPage : public Core::IOptionsPage
public:
GdbOptionsPage();
- QWidget *widget();
- void apply();
- void finish();
+ QWidget *widget() override;
+ void apply() override;
+ void finish() override;
private:
QPointer<GdbOptionsPageWidget> m_widget;
@@ -396,9 +396,9 @@ class GdbOptionsPage2 : public Core::IOptionsPage
public:
GdbOptionsPage2();
- QWidget *widget();
- void apply();
- void finish();
+ QWidget *widget() override;
+ void apply() override;
+ void finish() override;
private:
QPointer<GdbOptionsPageWidget2> m_widget;
diff --git a/src/plugins/debugger/imageviewer.cpp b/src/plugins/debugger/imageviewer.cpp
index bd54331c81..53f7e9728d 100644
--- a/src/plugins/debugger/imageviewer.cpp
+++ b/src/plugins/debugger/imageviewer.cpp
@@ -49,7 +49,7 @@ class ImageWidget : public QWidget
{
Q_OBJECT
public:
- ImageWidget() {}
+ ImageWidget() = default;
void setImage(const QImage &image);
const QImage &image() const { return m_image; }
@@ -58,8 +58,8 @@ signals:
void clicked(const QString &message);
protected:
- void paintEvent(QPaintEvent *);
- void mousePressEvent(QMouseEvent *ev);
+ void paintEvent(QPaintEvent *) override;
+ void mousePressEvent(QMouseEvent *ev) override;
private:
QImage m_image;
diff --git a/src/plugins/debugger/imageviewer.h b/src/plugins/debugger/imageviewer.h
index 7ba8e739ee..2d11d70851 100644
--- a/src/plugins/debugger/imageviewer.h
+++ b/src/plugins/debugger/imageviewer.h
@@ -64,7 +64,7 @@ class PlotViewer : public QWidget
public:
explicit PlotViewer(QWidget *parent = nullptr);
- typedef std::vector<double> Data;
+ using Data = std::vector<double>;
void setData(const Data &data);
void setInfo(const QString &description);
diff --git a/src/plugins/debugger/lldb/lldbengine.cpp b/src/plugins/debugger/lldb/lldbengine.cpp
index 9cd2e4db0a..32f0a2cbf7 100644
--- a/src/plugins/debugger/lldb/lldbengine.cpp
+++ b/src/plugins/debugger/lldb/lldbengine.cpp
@@ -143,7 +143,7 @@ void LldbEngine::runCommand(const DebuggerCommand &command)
if (state() == InferiorRunOk) {
showStatusMessage(tr("Stopping temporarily"), 1000);
m_onStop.append(cmd, false);
- requestInterruptInferior();
+ interruptInferior();
return;
}
}
@@ -292,7 +292,7 @@ void LldbEngine::setupEngine()
cmd2.callback = [this](const DebuggerResponse &response) {
bool success = response.data["success"].toInt();
if (success) {
- foreach (Breakpoint bp, breakHandler()->unclaimedBreakpoints()) {
+ for (Breakpoint bp : breakHandler()->unclaimedBreakpoints()) {
if (acceptsBreakpoint(bp)) {
bp.setEngine(this);
insertBreakpoint(bp);
@@ -549,7 +549,7 @@ void LldbEngine::updateBreakpointData(Breakpoint bp, const GdbMi &bkpt, bool add
GdbMi locations = bkpt["locations"];
const int numChild = int(locations.children().size());
if (numChild > 1) {
- foreach (const GdbMi &location, locations.children()) {
+ for (const GdbMi &location : locations.children()) {
const int locid = location["locid"].toInt();
BreakpointResponse sub;
sub.id = BreakpointResponseId(rid.majorPart(), locid);
@@ -605,7 +605,7 @@ void LldbEngine::reloadModules()
const GdbMi &modules = response.data["modules"];
ModulesHandler *handler = modulesHandler();
handler->beginUpdateAll();
- foreach (const GdbMi &item, modules.children()) {
+ for (const GdbMi &item : modules.children()) {
Module module;
module.modulePath = item["file"].data();
module.moduleName = item["name"].data();
@@ -627,7 +627,7 @@ void LldbEngine::requestModuleSymbols(const QString &moduleName)
const GdbMi &symbols = response.data["symbols"];
QString moduleName = response.data["module"].data();
Symbols syms;
- foreach (const GdbMi &item, symbols.children()) {
+ for (const GdbMi &item : symbols.children()) {
Symbol symbol;
symbol.address = item["address"].data();
symbol.name = item["name"].data();
@@ -906,7 +906,7 @@ void LldbEngine::reloadRegisters()
cmd.callback = [this](const DebuggerResponse &response) {
RegisterHandler *handler = registerHandler();
GdbMi regs = response.data["registers"];
- foreach (const GdbMi &item, regs.children()) {
+ for (const GdbMi &item : regs.children()) {
Register reg;
reg.name = item["name"].data();
reg.value.fromString(item["value"].data(), HexadecimalFormat);
@@ -944,7 +944,7 @@ void LldbEngine::fetchDisassembler(DisassemblerAgent *agent)
DisassemblerLines result;
QPointer<DisassemblerAgent> agent = m_disassemblerAgents.key(id);
if (!agent.isNull()) {
- foreach (const GdbMi &line, response.data["lines"].children()) {
+ for (const GdbMi &line : response.data["lines"].children()) {
DisassemblerLine dl;
dl.address = line["address"].toAddress();
//dl.data = line["data"].data();
diff --git a/src/plugins/debugger/lldb/lldbengine.h b/src/plugins/debugger/lldb/lldbengine.h
index f52cf3dd99..55bd6b603f 100644
--- a/src/plugins/debugger/lldb/lldbengine.h
+++ b/src/plugins/debugger/lldb/lldbengine.h
@@ -110,7 +110,6 @@ private:
void reloadDebuggingHelpers() override;
void fetchDisassembler(Internal::DisassemblerAgent *) override;
- bool isSynchronous() const override { return true; }
void setRegisterValue(const QString &name, const QString &value) override;
void fetchMemory(MemoryAgent *, quint64 addr, quint64 length) override;
diff --git a/src/plugins/debugger/loadcoredialog.cpp b/src/plugins/debugger/loadcoredialog.cpp
index 8a969d4667..1a2fa0af1f 100644
--- a/src/plugins/debugger/loadcoredialog.cpp
+++ b/src/plugins/debugger/loadcoredialog.cpp
@@ -117,7 +117,7 @@ SelectRemoteFileDialog::SelectRemoteFileDialog(QWidget *parent)
m_buttonBox->button(QDialogButtonBox::Ok)->setDefault(true);
m_buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false);
- QVBoxLayout *layout = new QVBoxLayout(this);
+ auto layout = new QVBoxLayout(this);
layout->addWidget(m_fileSystemView);
layout->addWidget(m_textBrowser);
layout->addWidget(m_buttonBox);
@@ -234,7 +234,7 @@ public:
{
State st;
st.localCoreFile = p.useLocalCoreFile();
- st.validKit = (kitChooser->currentKit() != 0);
+ st.validKit = (kitChooser->currentKit() != nullptr);
st.validLocalExecFilename = localExecFileName->isValid();
if (st.localCoreFile)
diff --git a/src/plugins/debugger/loadcoredialog.h b/src/plugins/debugger/loadcoredialog.h
index bce0d75e41..84cfaf677e 100644
--- a/src/plugins/debugger/loadcoredialog.h
+++ b/src/plugins/debugger/loadcoredialog.h
@@ -41,9 +41,9 @@ class AttachCoreDialog : public QDialog
public:
explicit AttachCoreDialog(QWidget *parent);
- ~AttachCoreDialog();
+ ~AttachCoreDialog() override;
- int exec();
+ int exec() override;
QString localExecutableFile() const;
QString localCoreFile() const;
diff --git a/src/plugins/debugger/localsandexpressionswindow.cpp b/src/plugins/debugger/localsandexpressionswindow.cpp
index 3d78d4abb6..6aef8c4481 100644
--- a/src/plugins/debugger/localsandexpressionswindow.cpp
+++ b/src/plugins/debugger/localsandexpressionswindow.cpp
@@ -37,7 +37,6 @@ enum { LocalsIndex = 0, InspectorIndex = 1 };
LocalsAndInspectorWindow::LocalsAndInspectorWindow(QWidget *locals,
QWidget *inspector, QWidget *returnWidget)
- : m_showLocals(false)
{
auto layout = new QVBoxLayout(this);
layout->setMargin(0);
diff --git a/src/plugins/debugger/localsandexpressionswindow.h b/src/plugins/debugger/localsandexpressionswindow.h
index 45243c2b9e..7782952101 100644
--- a/src/plugins/debugger/localsandexpressionswindow.h
+++ b/src/plugins/debugger/localsandexpressionswindow.h
@@ -35,13 +35,13 @@ class LocalsAndInspectorWindow : public QWidget
{
public:
LocalsAndInspectorWindow(QWidget *locals, QWidget *inspector,
- QWidget *returnWidget);
+ QWidget *returnWidget); // TODO parent?
void setShowLocals(bool showLocals);
private:
QTimer m_timer;
- bool m_showLocals;
+ bool m_showLocals = false;
};
} // namespace Internal
diff --git a/src/plugins/debugger/logwindow.cpp b/src/plugins/debugger/logwindow.cpp
index bee5c04c93..9b309bade8 100644
--- a/src/plugins/debugger/logwindow.cpp
+++ b/src/plugins/debugger/logwindow.cpp
@@ -72,7 +72,7 @@ public:
{}
private:
- void highlightBlock(const QString &text)
+ void highlightBlock(const QString &text) override
{
using Utils::Theme;
QTextCharFormat format;
@@ -125,7 +125,7 @@ public:
{}
private:
- void highlightBlock(const QString &text)
+ void highlightBlock(const QString &text) override
{
using Utils::Theme;
Theme *theme = Utils::creatorTheme();
@@ -172,7 +172,7 @@ public:
this, &DebuggerPane::reloadDebuggingHelpers);
}
- void contextMenuEvent(QContextMenuEvent *ev)
+ void contextMenuEvent(QContextMenuEvent *ev) override
{
QMenu *menu = createStandardContextMenu();
menu->addAction(m_clearContentsAction);
@@ -254,7 +254,7 @@ signals:
void commandSelected(int);
private:
- void keyPressEvent(QKeyEvent *ev)
+ void keyPressEvent(QKeyEvent *ev) override
{
if (ev->modifiers() == Qt::ControlModifier && ev->key() == Qt::Key_Return)
emit executeLineRequested();
@@ -264,7 +264,7 @@ private:
QPlainTextEdit::keyPressEvent(ev);
}
- void mouseDoubleClickEvent(QMouseEvent *ev)
+ void mouseDoubleClickEvent(QMouseEvent *ev) override
{
QString line = cursorForPosition(ev->pos()).block().text();
int n = 0;
@@ -283,13 +283,13 @@ private:
emit commandSelected(n);
}
- void focusInEvent(QFocusEvent *ev)
+ void focusInEvent(QFocusEvent *ev) override
{
emit statusMessageRequested(tr("Type Ctrl-<Return> to execute a line."), -1);
QPlainTextEdit::focusInEvent(ev);
}
- void focusOutEvent(QFocusEvent *ev)
+ void focusOutEvent(QFocusEvent *ev) override
{
emit statusMessageRequested(QString(), -1);
QPlainTextEdit::focusOutEvent(ev);
diff --git a/src/plugins/debugger/memoryagent.h b/src/plugins/debugger/memoryagent.h
index 1767d495b2..755ef9c4bb 100644
--- a/src/plugins/debugger/memoryagent.h
+++ b/src/plugins/debugger/memoryagent.h
@@ -42,7 +42,7 @@ class DebuggerEngine;
class MemoryMarkup
{
public:
- MemoryMarkup() {}
+ MemoryMarkup() = default;
MemoryMarkup(quint64 address, quint64 length, QColor c, const QString &tt)
: address(address), length(length), color(c), toolTip(tt)
{}
@@ -56,7 +56,7 @@ public:
class MemoryViewSetupData
{
public:
- MemoryViewSetupData() {}
+ MemoryViewSetupData() = default;
quint64 startAddress = 0;
QString registerName;
diff --git a/src/plugins/debugger/moduleshandler.cpp b/src/plugins/debugger/moduleshandler.cpp
index 7f5ea6b4ce..05bfcd96db 100644
--- a/src/plugins/debugger/moduleshandler.cpp
+++ b/src/plugins/debugger/moduleshandler.cpp
@@ -281,7 +281,7 @@ void ModulesHandler::removeAll()
m_model->clear();
}
-Modules ModulesHandler::modules() const
+const Modules ModulesHandler::modules() const
{
Modules mods;
m_model->forItemsAtLevel<1>([&mods](ModuleItem *item) { mods.append(item->module); });
diff --git a/src/plugins/debugger/moduleshandler.h b/src/plugins/debugger/moduleshandler.h
index ad0ba91ae5..790d3fbe38 100644
--- a/src/plugins/debugger/moduleshandler.h
+++ b/src/plugins/debugger/moduleshandler.h
@@ -55,7 +55,7 @@ public:
QString demangled;
};
-typedef QVector<Symbol> Symbols;
+using Symbols = QVector<Symbol>;
//////////////////////////////////////////////////////////////////
//
@@ -73,7 +73,7 @@ public:
QString flags;
};
-typedef QVector<Section> Sections;
+using Sections = QVector<Section>;
//////////////////////////////////////////////////////////////////
//
@@ -84,7 +84,7 @@ typedef QVector<Section> Sections;
class Module
{
public:
- Module() : symbolsRead(UnknownReadState), startAddress(0), endAddress(0) {}
+ Module() = default;
public:
enum SymbolReadState {
@@ -95,14 +95,14 @@ public:
QString moduleName;
QString modulePath;
QString hostPath;
- SymbolReadState symbolsRead;
- quint64 startAddress;
- quint64 endAddress;
+ SymbolReadState symbolsRead = UnknownReadState;
+ quint64 startAddress = 0;
+ quint64 endAddress = 0;
Utils::ElfData elfData;
};
-typedef QVector<Module> Modules;
+using Modules = QVector<Module>;
//////////////////////////////////////////////////////////////////
//
@@ -129,7 +129,7 @@ public:
void endUpdateAll();
void removeAll();
- Modules modules() const;
+ const Modules modules() const;
private:
ModuleItem *moduleFromPath(const QString &modulePath) const;
diff --git a/src/plugins/debugger/namedemangler/globalparsestate.h b/src/plugins/debugger/namedemangler/globalparsestate.h
index 9794d57f7c..2544c78d73 100644
--- a/src/plugins/debugger/namedemangler/globalparsestate.h
+++ b/src/plugins/debugger/namedemangler/globalparsestate.h
@@ -56,7 +56,7 @@ public:
QSharedPointer<ParseTreeNode> templateParamAt(int index) const { return m_templateParams.at(index); }
void addTemplateParam(const QSharedPointer<ParseTreeNode> &node) { m_templateParams << node; }
private:
- int m_pos;
+ int m_pos = 0;
QByteArray m_mangledName;
QList<QSharedPointer<ParseTreeNode> > m_substitutions;
QList<QSharedPointer<ParseTreeNode> > m_templateParams;
diff --git a/src/plugins/debugger/namedemangler/parsetreenodes.cpp b/src/plugins/debugger/namedemangler/parsetreenodes.cpp
index d72212e607..556104718f 100644
--- a/src/plugins/debugger/namedemangler/parsetreenodes.cpp
+++ b/src/plugins/debugger/namedemangler/parsetreenodes.cpp
@@ -72,13 +72,11 @@ template<int base> static int getNonNegativeNumber(GlobalParseState *parseState)
ParseTreeNode::ParseTreeNode(const ParseTreeNode &other) : m_parseState(other.m_parseState)
{
- foreach (const ParseTreeNode::Ptr &child, other.m_children)
+ for (const ParseTreeNode::Ptr &child : other.m_children)
addChild(child->clone());
}
-ParseTreeNode::~ParseTreeNode()
-{
-}
+ParseTreeNode::~ParseTreeNode() = default;
ParseTreeNode::Ptr ParseTreeNode::childAt(int i, const QString &func, const QString &file,
int line) const
@@ -91,7 +89,7 @@ ParseTreeNode::Ptr ParseTreeNode::childAt(int i, const QString &func, const QStr
QByteArray ParseTreeNode::pasteAllChildren() const
{
QByteArray repr;
- foreach (const ParseTreeNode::Ptr &node, m_children)
+ for (const ParseTreeNode::Ptr &node : m_children)
repr += node->toByteArray();
return repr;
}
@@ -101,7 +99,7 @@ void ParseTreeNode::print(int indentation) const
for (int i = 0; i < indentation; ++i)
std::cerr << ' ';
std::cerr << description().data() << std::endl;
- foreach (const ParseTreeNode::Ptr &n, m_children)
+ for (const ParseTreeNode::Ptr &n : m_children)
n->print(indentation + 2);
}
@@ -155,7 +153,7 @@ QByteArray ArrayTypeNode::toByteArray() const
BareFunctionTypeNode::BareFunctionTypeNode(GlobalParseState *parseState)
- : ParseTreeNode(parseState), m_hasReturnType(false)
+ : ParseTreeNode(parseState)
{
}
@@ -440,12 +438,7 @@ void DiscriminatorRule::parse(GlobalParseState *parseState)
}
-CtorDtorNameNode::CtorDtorNameNode(const CtorDtorNameNode &other)
- : ParseTreeNode(other),
- m_isDestructor(other.m_isDestructor),
- m_representation(other.m_representation)
-{
-}
+CtorDtorNameNode::CtorDtorNameNode(const CtorDtorNameNode &other) = default;
bool CtorDtorNameNode::mangledRepresentationStartsWith(char c)
{
@@ -504,14 +497,11 @@ QByteArray CtorDtorNameNode::toByteArray() const
CvQualifiersNode::CvQualifiersNode(GlobalParseState *parseState)
- : ParseTreeNode(parseState), m_hasConst(false), m_hasVolatile(false)
+ : ParseTreeNode(parseState)
{
}
-CvQualifiersNode::CvQualifiersNode(const CvQualifiersNode &other)
- : ParseTreeNode(other), m_hasConst(other.m_hasConst), m_hasVolatile(other.m_hasVolatile)
-{
-}
+CvQualifiersNode::CvQualifiersNode(const CvQualifiersNode &other) = default;
bool CvQualifiersNode::mangledRepresentationStartsWith(char c)
{
@@ -601,14 +591,11 @@ QByteArray EncodingNode::toByteArray() const
ExpressionNode::ExpressionNode(GlobalParseState *parseState)
- : ParseTreeNode(parseState), m_type(OtherType), m_globalNamespace(false)
+ : ParseTreeNode(parseState), m_type(OtherType)
{
}
-ExpressionNode::ExpressionNode(const ExpressionNode &other)
- : ParseTreeNode(other), m_type(other.m_type), m_globalNamespace(other.m_globalNamespace)
-{
-}
+ExpressionNode::ExpressionNode(const ExpressionNode &other) = default;
bool ExpressionNode::mangledRepresentationStartsWith(char c)
{
@@ -1000,10 +987,7 @@ QByteArray ExpressionNode::toByteArray() const
}
-OperatorNameNode::OperatorNameNode(const OperatorNameNode &other)
- : ParseTreeNode(other), m_type(other.m_type)
-{
-}
+OperatorNameNode::OperatorNameNode(const OperatorNameNode &other) = default;
bool OperatorNameNode::mangledRepresentationStartsWith(char c)
{
@@ -1253,14 +1237,11 @@ QByteArray OperatorNameNode::toByteArray() const
ExprPrimaryNode::ExprPrimaryNode(GlobalParseState *parseState)
- : ParseTreeNode(parseState), m_isNullPtr(false)
+ : ParseTreeNode(parseState)
{
}
-ExprPrimaryNode::ExprPrimaryNode(const ExprPrimaryNode &other)
- : ParseTreeNode(other), m_suffix(other.m_suffix), m_isNullPtr(other.m_isNullPtr)
-{
-}
+ExprPrimaryNode::ExprPrimaryNode(const ExprPrimaryNode &other) = default;
bool ExprPrimaryNode::mangledRepresentationStartsWith(char c)
{
@@ -1353,7 +1334,7 @@ QByteArray ExprPrimaryNode::toByteArray() const
FunctionTypeNode::FunctionTypeNode(GlobalParseState *parseState)
- : ParseTreeNode(parseState), m_isExternC(false)
+ : ParseTreeNode(parseState)
{
}
@@ -1395,16 +1376,11 @@ QByteArray FunctionTypeNode::toByteArray() const
LocalNameNode::LocalNameNode(GlobalParseState *parseState)
- : ParseTreeNode(parseState), m_isStringLiteral(false), m_isDefaultArg(false)
+ : ParseTreeNode(parseState)
{
}
-LocalNameNode::LocalNameNode(const LocalNameNode &other)
- : ParseTreeNode(other),
- m_isStringLiteral(other.m_isStringLiteral),
- m_isDefaultArg(other.m_isDefaultArg)
-{
-}
+LocalNameNode::LocalNameNode(const LocalNameNode &other) = default;
bool LocalNameNode::mangledRepresentationStartsWith(char c)
{
@@ -1538,10 +1514,7 @@ void MangledNameRule::parse(GlobalParseState *parseState, const ParseTreeNode::P
}
-SourceNameNode::SourceNameNode(const SourceNameNode &other)
- : ParseTreeNode(other), m_name(other.m_name)
-{
-}
+SourceNameNode::SourceNameNode(const SourceNameNode &other) = default;
bool SourceNameNode::mangledRepresentationStartsWith(char c)
{
@@ -1609,14 +1582,11 @@ void UnqualifiedNameNode::parse()
UnscopedNameNode::UnscopedNameNode(GlobalParseState *parseState)
- : ParseTreeNode(parseState), m_inStdNamespace(false)
+ : ParseTreeNode(parseState)
{
}
-UnscopedNameNode::UnscopedNameNode(const UnscopedNameNode &other)
- : ParseTreeNode(other), m_inStdNamespace(other.m_inStdNamespace)
-{
-}
+UnscopedNameNode::UnscopedNameNode(const UnscopedNameNode &other) = default;
bool UnscopedNameNode::mangledRepresentationStartsWith(char c)
{
@@ -1972,10 +1942,7 @@ QByteArray TemplateArgsNode::toByteArray() const
}
-SpecialNameNode::SpecialNameNode(const SpecialNameNode &other)
- : ParseTreeNode(other), m_type(other.m_type)
-{
-}
+SpecialNameNode::SpecialNameNode(const SpecialNameNode &other) = default;
bool SpecialNameNode::mangledRepresentationStartsWith(char c)
{
@@ -2063,14 +2030,11 @@ QByteArray SpecialNameNode::toByteArray() const
NumberNode::NumberNode(GlobalParseState *parseState)
- : ParseTreeNode(parseState), m_isNegative(false)
+ : ParseTreeNode(parseState)
{
}
-NumberNode::NumberNode(const NumberNode &other)
- : ParseTreeNode(other), m_isNegative(other.m_isNegative)
-{
-}
+NumberNode::NumberNode(const NumberNode &other) = default;
bool NumberNode::mangledRepresentationStartsWith(char c)
{
@@ -2118,7 +2082,7 @@ template<int base> void NonNegativeNumberNode<base>::parse()
numberRepr += ADVANCE();
if (numberRepr.count() == 0)
throw ParseException(QString::fromLatin1("Invalid non-negative number"));
- m_number = numberRepr.toULongLong(0, base);
+ m_number = numberRepr.toULongLong(nullptr, base);
}
template<int base> QByteArray NonNegativeNumberNode<base>::description() const
@@ -2225,14 +2189,11 @@ void NameNode::parse()
TemplateArgNode::TemplateArgNode(GlobalParseState *parseState)
- : ParseTreeNode(parseState), m_isTemplateArgumentPack(false)
+ : ParseTreeNode(parseState)
{
}
-TemplateArgNode::TemplateArgNode(const TemplateArgNode &other)
- : ParseTreeNode(other), m_isTemplateArgumentPack(other.m_isTemplateArgumentPack)
-{
-}
+TemplateArgNode::TemplateArgNode(const TemplateArgNode &other) = default;
bool TemplateArgNode::mangledRepresentationStartsWith(char c)
{
@@ -2679,8 +2640,8 @@ QByteArray TypeNode::toByteArrayQualPointerRef(const TypeNode *typeNode,
QByteArray TypeNode::qualPtrRefListToByteArray(const QList<const ParseTreeNode *> &nodeList) const
{
QByteArray repr;
- foreach (const ParseTreeNode * const n, nodeList) {
- const TypeNode * const typeNode = dynamic_cast<const TypeNode *>(n);
+ for (const ParseTreeNode * const n : nodeList) {
+ const auto typeNode = dynamic_cast<const TypeNode*>(n);
if (typeNode) {
switch (typeNode->m_type) {
case PointerType:
@@ -2712,10 +2673,7 @@ QByteArray TypeNode::qualPtrRefListToByteArray(const QList<const ParseTreeNode *
}
-FloatValueNode::FloatValueNode(const FloatValueNode &other)
- : ParseTreeNode(other), m_value(other.m_value)
-{
-}
+FloatValueNode::FloatValueNode(const FloatValueNode &other) = default;
bool FloatValueNode::mangledRepresentationStartsWith(char c)
{
@@ -2975,14 +2933,11 @@ bool UnresolvedQualifierLevelRule::mangledRepresentationStartsWith(char c)
BaseUnresolvedNameNode::BaseUnresolvedNameNode(GlobalParseState *parseState)
- : ParseTreeNode(parseState), m_isOperator(false)
+ : ParseTreeNode(parseState)
{
}
-BaseUnresolvedNameNode::BaseUnresolvedNameNode(const BaseUnresolvedNameNode &other)
- : ParseTreeNode(other), m_isOperator(other.m_isOperator)
-{
-}
+BaseUnresolvedNameNode::BaseUnresolvedNameNode(const BaseUnresolvedNameNode &other) = default;
bool BaseUnresolvedNameNode::mangledRepresentationStartsWith(char c)
{
@@ -3057,10 +3012,7 @@ QByteArray InitializerNode::toByteArray() const
}
-UnresolvedNameNode::UnresolvedNameNode(const UnresolvedNameNode &other)
- : ParseTreeNode(other), m_globalNamespace(other.m_globalNamespace)
-{
-}
+UnresolvedNameNode::UnresolvedNameNode(const UnresolvedNameNode &other) = default;
bool UnresolvedNameNode::mangledRepresentationStartsWith(char c)
{
diff --git a/src/plugins/debugger/namedemangler/parsetreenodes.h b/src/plugins/debugger/namedemangler/parsetreenodes.h
index 29433bf91b..fb746fc271 100644
--- a/src/plugins/debugger/namedemangler/parsetreenodes.h
+++ b/src/plugins/debugger/namedemangler/parsetreenodes.h
@@ -33,7 +33,7 @@ namespace Internal {
class ParseTreeNode
{
public:
- typedef QSharedPointer<ParseTreeNode> Ptr;
+ using Ptr = QSharedPointer<ParseTreeNode>;
virtual ~ParseTreeNode();
virtual QByteArray toByteArray() const = 0;
@@ -76,41 +76,41 @@ public:
static bool mangledRepresentationStartsWith(char c);
- QByteArray toByteArray() const;
+ QByteArray toByteArray() const override;
private:
- ArrayTypeNode(const ArrayTypeNode &other) : ParseTreeNode(other) {}
- ParseTreeNode::Ptr clone() const { return Ptr(new ArrayTypeNode(*this)); }
+ ArrayTypeNode(const ArrayTypeNode &other) = default;
+ ParseTreeNode::Ptr clone() const override { return Ptr(new ArrayTypeNode(*this)); }
- void parse();
- QByteArray description() const { return "ArrayType"; }
+ void parse() override;
+ QByteArray description() const override { return "ArrayType"; }
};
class BareFunctionTypeNode : public ParseTreeNode
{
public:
- typedef QSharedPointer<BareFunctionTypeNode> Ptr;
+ using Ptr = QSharedPointer<BareFunctionTypeNode>;
BareFunctionTypeNode(GlobalParseState *parseState);
static bool mangledRepresentationStartsWith(char c);
bool hasReturnType() const { return m_hasReturnType; }
- QByteArray toByteArray() const;
+ QByteArray toByteArray() const override;
private:
BareFunctionTypeNode(const BareFunctionTypeNode &other);
- ParseTreeNode::Ptr clone() const { return Ptr(new BareFunctionTypeNode(*this)); }
- void parse();
- QByteArray description() const;
+ ParseTreeNode::Ptr clone() const override { return Ptr(new BareFunctionTypeNode(*this)); }
+ void parse() override;
+ QByteArray description() const override;
- bool m_hasReturnType;
+ bool m_hasReturnType = false;
};
class BuiltinTypeNode : public ParseTreeNode
{
public:
- typedef QSharedPointer<BuiltinTypeNode> Ptr;
+ using Ptr = QSharedPointer<BuiltinTypeNode>;
BuiltinTypeNode(GlobalParseState *parseState) : ParseTreeNode(parseState) {}
static bool mangledRepresentationStartsWith(char c);
- QByteArray toByteArray() const;
+ QByteArray toByteArray() const override;
enum Type {
VoidType, WCharType, BoolType,
@@ -125,11 +125,11 @@ public:
private:
BuiltinTypeNode(const BuiltinTypeNode &other);
- ParseTreeNode::Ptr clone() const { return Ptr(new BuiltinTypeNode(*this)); }
- void parse();
- QByteArray description() const;
+ ParseTreeNode::Ptr clone() const override { return Ptr(new BuiltinTypeNode(*this)); }
+ void parse() override;
+ QByteArray description() const override;
- Type m_type;
+ Type m_type; // TODO: define?
};
class CallOffsetRule
@@ -146,26 +146,26 @@ class NvOffsetNode : public ParseTreeNode
{
public:
NvOffsetNode(GlobalParseState *parseState) : ParseTreeNode(parseState) {}
- QByteArray toByteArray() const { return QByteArray(); } // TODO: How to encode this?
+ QByteArray toByteArray() const override { return QByteArray(); } // TODO: How to encode this?
private:
- NvOffsetNode(const NvOffsetNode &other) : ParseTreeNode(other) {}
- ParseTreeNode::Ptr clone() const { return Ptr(new NvOffsetNode(*this)); }
- void parse();
- QByteArray description() const { return "NvOffset"; }
+ NvOffsetNode(const NvOffsetNode &other) = default;
+ ParseTreeNode::Ptr clone() const override { return Ptr(new NvOffsetNode(*this)); }
+ void parse() override;
+ QByteArray description() const override { return "NvOffset"; }
};
class VOffsetNode : public ParseTreeNode
{
public:
VOffsetNode(GlobalParseState *parseState) : ParseTreeNode(parseState) {}
- QByteArray toByteArray() const { return QByteArray(); } // TODO: How to encode this?
+ QByteArray toByteArray() const override { return QByteArray(); } // TODO: How to encode this?
private:
- VOffsetNode(const VOffsetNode &other) : ParseTreeNode(other) {}
- ParseTreeNode::Ptr clone() const { return Ptr(new VOffsetNode(*this)); }
- void parse();
- QByteArray description() const { return "VOffset"; }
+ VOffsetNode(const VOffsetNode &other) = default;
+ ParseTreeNode::Ptr clone() const override { return Ptr(new VOffsetNode(*this)); }
+ void parse() override;
+ QByteArray description() const override { return "VOffset"; }
};
class ClassEnumTypeRule
@@ -193,34 +193,34 @@ class CtorDtorNameNode : public ParseTreeNode
public:
CtorDtorNameNode(GlobalParseState *parseState) : ParseTreeNode(parseState) {}
static bool mangledRepresentationStartsWith(char c);
- QByteArray toByteArray() const;
+ QByteArray toByteArray() const override;
private:
CtorDtorNameNode(const CtorDtorNameNode &other);
- ParseTreeNode::Ptr clone() const { return Ptr(new CtorDtorNameNode(*this)); }
- void parse();
- QByteArray description() const;
+ ParseTreeNode::Ptr clone() const override { return Ptr(new CtorDtorNameNode(*this)); }
+ void parse() override;
+ QByteArray description() const override;
- bool m_isDestructor;
+ bool m_isDestructor; // TODO: define?
QByteArray m_representation;
};
class CvQualifiersNode : public ParseTreeNode
{
public:
- typedef QSharedPointer<CvQualifiersNode> Ptr;
+ using Ptr = QSharedPointer<CvQualifiersNode>;
CvQualifiersNode(GlobalParseState *parseState);
static bool mangledRepresentationStartsWith(char c);
bool hasQualifiers() const { return m_hasConst || m_hasVolatile; }
- QByteArray toByteArray() const;
+ QByteArray toByteArray() const override;
private:
CvQualifiersNode(const CvQualifiersNode &other);
- ParseTreeNode::Ptr clone() const { return Ptr(new CvQualifiersNode(*this)); }
- void parse();
- QByteArray description() const { return "CvQualifiers[" + toByteArray() + ']'; }
+ ParseTreeNode::Ptr clone() const override { return Ptr(new CvQualifiersNode(*this)); }
+ void parse() override;
+ QByteArray description() const override { return "CvQualifiers[" + toByteArray() + ']'; }
- bool m_hasConst;
- bool m_hasVolatile;
+ bool m_hasConst = false;
+ bool m_hasVolatile = false;
};
class EncodingNode : public ParseTreeNode
@@ -228,13 +228,13 @@ class EncodingNode : public ParseTreeNode
public:
EncodingNode(GlobalParseState *parseState) : ParseTreeNode(parseState) {}
static bool mangledRepresentationStartsWith(char c);
- QByteArray toByteArray() const;
+ QByteArray toByteArray() const override;
private:
- EncodingNode(const EncodingNode &other) : ParseTreeNode(other) {}
- ParseTreeNode::Ptr clone() const { return Ptr(new EncodingNode(*this)); }
- void parse();
- QByteArray description() const { return "Encoding"; }
+ EncodingNode(const EncodingNode &other) = default;
+ ParseTreeNode::Ptr clone() const override { return Ptr(new EncodingNode(*this)); }
+ void parse() override;
+ QByteArray description() const override { return "Encoding"; }
};
class ExpressionNode : public ParseTreeNode
@@ -242,13 +242,13 @@ class ExpressionNode : public ParseTreeNode
public:
ExpressionNode(GlobalParseState *parseState);
static bool mangledRepresentationStartsWith(char c);
- QByteArray toByteArray() const;
+ QByteArray toByteArray() const override;
private:
ExpressionNode(const ExpressionNode &other);
- ParseTreeNode::Ptr clone() const { return Ptr(new ExpressionNode(*this)); }
- void parse();
- QByteArray description() const;
+ ParseTreeNode::Ptr clone() const override { return Ptr(new ExpressionNode(*this)); }
+ void parse() override;
+ QByteArray description() const override;
enum Type {
ConversionType, SizeofType, AlignofType, OperatorType, ParameterPackSizeType,
@@ -257,14 +257,14 @@ private:
StaticCastType, ConstCastType, ReinterpretCastType, MemberAccessType,
PointerMemberAccessType, MemberDerefType, PackExpansionType, ThrowType,
RethrowType, OtherType
- } m_type;
- bool m_globalNamespace;
+ } m_type; // TODO: define?
+ bool m_globalNamespace = false;
};
class OperatorNameNode : public ParseTreeNode
{
public:
- typedef QSharedPointer<OperatorNameNode> Ptr;
+ using Ptr = QSharedPointer<OperatorNameNode>;
OperatorNameNode(GlobalParseState *parseState) : ParseTreeNode(parseState) {}
static bool mangledRepresentationStartsWith(char c);
@@ -282,13 +282,13 @@ public:
};
Type type() const { return m_type; }
- QByteArray toByteArray() const;
+ QByteArray toByteArray() const override;
private:
OperatorNameNode(const OperatorNameNode &other);
- ParseTreeNode::Ptr clone() const { return Ptr(new OperatorNameNode(*this)); }
- void parse();
- QByteArray description() const;
+ ParseTreeNode::Ptr clone() const override { return Ptr(new OperatorNameNode(*this)); }
+ void parse() override;
+ QByteArray description() const override;
Type m_type = VendorType;
};
@@ -299,55 +299,55 @@ public:
ExprPrimaryNode(GlobalParseState *parseState);
static bool mangledRepresentationStartsWith(char c);
- QByteArray toByteArray() const;
+ QByteArray toByteArray() const override;
private:
ExprPrimaryNode(const ExprPrimaryNode &other);
- ParseTreeNode::Ptr clone() const { return Ptr(new ExprPrimaryNode(*this)); }
- void parse();
- QByteArray description() const;
+ ParseTreeNode::Ptr clone() const override { return Ptr(new ExprPrimaryNode(*this)); }
+ void parse() override;
+ QByteArray description() const override;
QByteArray m_suffix;
- bool m_isNullPtr;
+ bool m_isNullPtr = false;
};
class FunctionTypeNode : public ParseTreeNode
{
public:
- typedef QSharedPointer<FunctionTypeNode> Ptr;
+ using Ptr = QSharedPointer<FunctionTypeNode>;
FunctionTypeNode(GlobalParseState *parseState);
static bool mangledRepresentationStartsWith(char c);
bool isExternC() const { return m_isExternC; }
- QByteArray toByteArray() const;
+ QByteArray toByteArray() const override;
private:
FunctionTypeNode(const FunctionTypeNode &other);
- ParseTreeNode::Ptr clone() const { return Ptr(new FunctionTypeNode(*this)); }
- void parse();
- QByteArray description() const;
+ ParseTreeNode::Ptr clone() const override { return Ptr(new FunctionTypeNode(*this)); }
+ void parse() override;
+ QByteArray description() const override;
- bool m_isExternC;
+ bool m_isExternC = false;
};
class LocalNameNode : public ParseTreeNode
{
public:
- typedef QSharedPointer<LocalNameNode> Ptr;
+ using Ptr = QSharedPointer<LocalNameNode>;
LocalNameNode(GlobalParseState *parseState);
static bool mangledRepresentationStartsWith(char c);
- QByteArray toByteArray() const;
+ QByteArray toByteArray() const override;
bool isTemplate() const;
bool isConstructorOrDestructorOrConversionOperator() const;
CvQualifiersNode::Ptr cvQualifiers() const;
private:
LocalNameNode(const LocalNameNode &other);
- ParseTreeNode::Ptr clone() const { return Ptr(new LocalNameNode(*this)); }
- void parse();
- QByteArray description() const;
+ ParseTreeNode::Ptr clone() const override { return Ptr(new LocalNameNode(*this)); }
+ void parse() override;
+ QByteArray description() const override;
- bool m_isStringLiteral;
- bool m_isDefaultArg;
+ bool m_isStringLiteral = false;
+ bool m_isDefaultArg = false;
};
class MangledNameRule
@@ -365,15 +365,15 @@ class NumberNode : public ParseTreeNode
public:
NumberNode(GlobalParseState *parseState);
static bool mangledRepresentationStartsWith(char c);
- QByteArray toByteArray() const;
+ QByteArray toByteArray() const override;
private:
NumberNode(const NumberNode &other);
- ParseTreeNode::Ptr clone() const { return Ptr(new NumberNode(*this)); }
- void parse();
- QByteArray description() const;
+ ParseTreeNode::Ptr clone() const override { return Ptr(new NumberNode(*this)); }
+ void parse() override;
+ QByteArray description() const override;
- bool m_isNegative;
+ bool m_isNegative = false;
};
class SourceNameNode : public ParseTreeNode
@@ -381,13 +381,13 @@ class SourceNameNode : public ParseTreeNode
public:
SourceNameNode(GlobalParseState *parseState) : ParseTreeNode(parseState) {}
static bool mangledRepresentationStartsWith(char c);
- QByteArray toByteArray() const { return m_name; }
+ QByteArray toByteArray() const override { return m_name; }
private:
SourceNameNode(const SourceNameNode &other);
- ParseTreeNode::Ptr clone() const { return Ptr(new SourceNameNode(*this)); }
- void parse();
- QByteArray description() const;
+ ParseTreeNode::Ptr clone() const override { return Ptr(new SourceNameNode(*this)); }
+ void parse() override;
+ QByteArray description() const override;
QByteArray m_name;
};
@@ -395,17 +395,17 @@ private:
class UnqualifiedNameNode : public ParseTreeNode
{
public:
- typedef QSharedPointer<UnqualifiedNameNode> Ptr;
+ using Ptr = QSharedPointer<UnqualifiedNameNode>;
UnqualifiedNameNode(GlobalParseState *parseState) : ParseTreeNode(parseState) {}
static bool mangledRepresentationStartsWith(char c);
bool isConstructorOrDestructorOrConversionOperator() const;
- QByteArray toByteArray() const;
+ QByteArray toByteArray() const override;
private:
- UnqualifiedNameNode(const UnqualifiedNameNode &other) : ParseTreeNode(other) {}
- ParseTreeNode::Ptr clone() const { return Ptr(new UnqualifiedNameNode(*this)); }
- void parse();
- QByteArray description() const { return "UnqualifiedName"; }
+ UnqualifiedNameNode(const UnqualifiedNameNode &other) = default;
+ ParseTreeNode::Ptr clone() const override { return Ptr(new UnqualifiedNameNode(*this)); }
+ void parse() override;
+ QByteArray description() const override { return "UnqualifiedName"; }
};
class UnscopedNameNode : public ParseTreeNode
@@ -414,21 +414,21 @@ public:
UnscopedNameNode(GlobalParseState *parseState);
static bool mangledRepresentationStartsWith(char c);
bool isConstructorOrDestructorOrConversionOperator() const;
- QByteArray toByteArray() const;
+ QByteArray toByteArray() const override;
private:
UnscopedNameNode(const UnscopedNameNode &other);
- ParseTreeNode::Ptr clone() const { return Ptr(new UnscopedNameNode(*this)); }
- void parse();
- QByteArray description() const;
+ ParseTreeNode::Ptr clone() const override { return Ptr(new UnscopedNameNode(*this)); }
+ void parse() override;
+ QByteArray description() const override;
- bool m_inStdNamespace;
+ bool m_inStdNamespace = false;
};
class NestedNameNode : public ParseTreeNode
{
public:
- typedef QSharedPointer<NestedNameNode> Ptr;
+ using Ptr = QSharedPointer<NestedNameNode>;
NestedNameNode(GlobalParseState *parseState) : ParseTreeNode(parseState ){}
static bool mangledRepresentationStartsWith(char c);
@@ -437,22 +437,22 @@ public:
bool isConstructorOrDestructorOrConversionOperator() const;
CvQualifiersNode::Ptr cvQualifiers() const;
- QByteArray toByteArray() const;
+ QByteArray toByteArray() const override;
private:
- NestedNameNode(const NestedNameNode &other) : ParseTreeNode(other) {}
- ParseTreeNode::Ptr clone() const { return Ptr(new NestedNameNode(*this)); }
- void parse();
- QByteArray description() const { return "NestedName"; }
+ NestedNameNode(const NestedNameNode &other) = default;
+ ParseTreeNode::Ptr clone() const override { return Ptr(new NestedNameNode(*this)); }
+ void parse() override;
+ QByteArray description() const override { return "NestedName"; }
};
class SubstitutionNode : public ParseTreeNode
{
public:
- typedef QSharedPointer<SubstitutionNode> Ptr;
+ using Ptr = QSharedPointer<SubstitutionNode>;
SubstitutionNode(GlobalParseState *parseState) : ParseTreeNode(parseState) {}
static bool mangledRepresentationStartsWith(char c);
- QByteArray toByteArray() const;
+ QByteArray toByteArray() const override;
enum Type {
ActualSubstitutionType, StdType, StdAllocType, StdBasicStringType, FullStdBasicStringType,
@@ -462,11 +462,11 @@ public:
private:
SubstitutionNode(const SubstitutionNode &other);
- ParseTreeNode::Ptr clone() const { return Ptr(new SubstitutionNode(*this)); }
- void parse();
- QByteArray description() const;
+ ParseTreeNode::Ptr clone() const override { return Ptr(new SubstitutionNode(*this)); }
+ void parse() override;
+ QByteArray description() const override;
- Type m_type;
+ Type m_type; // TODO: define?
};
class PointerToMemberTypeNode : public ParseTreeNode
@@ -474,19 +474,19 @@ class PointerToMemberTypeNode : public ParseTreeNode
public:
PointerToMemberTypeNode(GlobalParseState *parseState) : ParseTreeNode(parseState) {}
static bool mangledRepresentationStartsWith(char c);
- QByteArray toByteArray() const;
+ QByteArray toByteArray() const override;
private:
- PointerToMemberTypeNode(const PointerToMemberTypeNode &other) : ParseTreeNode(other) {}
- ParseTreeNode::Ptr clone() const { return Ptr(new PointerToMemberTypeNode(*this)); }
- void parse();
- QByteArray description() const { return "PointerToMember"; }
+ PointerToMemberTypeNode(const PointerToMemberTypeNode &other) = default;
+ ParseTreeNode::Ptr clone() const override { return Ptr(new PointerToMemberTypeNode(*this)); }
+ void parse() override;
+ QByteArray description() const override { return "PointerToMember"; }
};
class TemplateParamNode : public ParseTreeNode
{
public:
- typedef QSharedPointer<TemplateParamNode> Ptr;
+ using Ptr = QSharedPointer<TemplateParamNode>;
TemplateParamNode(GlobalParseState *parseState) : ParseTreeNode(parseState) {}
@@ -494,15 +494,15 @@ public:
int index() const { return m_index; }
- QByteArray toByteArray() const;
+ QByteArray toByteArray() const override;
private:
TemplateParamNode(const TemplateParamNode &other);
- ParseTreeNode::Ptr clone() const { return Ptr(new TemplateParamNode(*this)); }
- void parse();
- QByteArray description() const;
+ ParseTreeNode::Ptr clone() const override { return Ptr(new TemplateParamNode(*this)); }
+ void parse() override;
+ QByteArray description() const override;
- int m_index;
+ int m_index; // TODO: define?
};
class TemplateArgsNode : public ParseTreeNode
@@ -510,13 +510,13 @@ class TemplateArgsNode : public ParseTreeNode
public:
TemplateArgsNode(GlobalParseState *parseState) : ParseTreeNode(parseState) {}
static bool mangledRepresentationStartsWith(char c);
- QByteArray toByteArray() const;
+ QByteArray toByteArray() const override;
private:
- TemplateArgsNode(const TemplateArgsNode &other) : ParseTreeNode(other) {}
- ParseTreeNode::Ptr clone() const { return Ptr(new TemplateArgsNode(*this)); }
- void parse();
- QByteArray description() const { return "TemplateArgs"; }
+ TemplateArgsNode(const TemplateArgsNode &other) = default;
+ ParseTreeNode::Ptr clone() const override { return Ptr(new TemplateArgsNode(*this)); }
+ void parse() override;
+ QByteArray description() const override { return "TemplateArgs"; }
};
class SpecialNameNode : public ParseTreeNode
@@ -524,45 +524,45 @@ class SpecialNameNode : public ParseTreeNode
public:
SpecialNameNode(GlobalParseState *parseState) : ParseTreeNode(parseState) {}
static bool mangledRepresentationStartsWith(char c);
- QByteArray toByteArray() const;
+ QByteArray toByteArray() const override;
private:
SpecialNameNode(const SpecialNameNode &other);
- ParseTreeNode::Ptr clone() const { return Ptr(new SpecialNameNode(*this)); }
- void parse();
- QByteArray description() const;
+ ParseTreeNode::Ptr clone() const override { return Ptr(new SpecialNameNode(*this)); }
+ void parse() override;
+ QByteArray description() const override;
enum Type {
VirtualTableType, VttStructType, TypeInfoType, TypeInfoNameType, GuardVarType,
SingleCallOffsetType, DoubleCallOffsetType
- } m_type;
+ } m_type; // TODO: define?
};
template<int base> class NonNegativeNumberNode : public ParseTreeNode
{
public:
- typedef QSharedPointer<NonNegativeNumberNode<base> > Ptr;
+ using Ptr = QSharedPointer<NonNegativeNumberNode<base> >;
NonNegativeNumberNode(GlobalParseState *parseState) : ParseTreeNode(parseState) {}
static bool mangledRepresentationStartsWith(char c) {
// Base can only be 10 or 36.
return (c >= '0' && c <= '9') || (base == 36 && c >= 'A' && c <= 'Z');
}
quint64 number() const { return m_number; }
- QByteArray toByteArray() const;
+ QByteArray toByteArray() const override;
private:
NonNegativeNumberNode(const NonNegativeNumberNode &other);
- ParseTreeNode::Ptr clone() const { return Ptr(new NonNegativeNumberNode<base>(*this)); }
- void parse();
- QByteArray description() const;
+ ParseTreeNode::Ptr clone() const override { return Ptr(new NonNegativeNumberNode<base>(*this)); }
+ void parse() override;
+ QByteArray description() const override;
- quint64 m_number;
+ quint64 m_number; // TODO: define?
};
class NameNode : public ParseTreeNode
{
public:
- typedef QSharedPointer<NameNode> Ptr;
+ using Ptr = QSharedPointer<NameNode>;
NameNode(GlobalParseState *parseState) : ParseTreeNode(parseState) {}
@@ -572,13 +572,13 @@ public:
bool isConstructorOrDestructorOrConversionOperator() const;
CvQualifiersNode::Ptr cvQualifiers() const;
- QByteArray toByteArray() const;
+ QByteArray toByteArray() const override;
private:
- NameNode(const NameNode &other) : ParseTreeNode(other) {}
- ParseTreeNode::Ptr clone() const { return Ptr(new NameNode(*this)); }
- void parse();
- QByteArray description() const { return "Name"; }
+ NameNode(const NameNode &other) = default;
+ ParseTreeNode::Ptr clone() const override { return Ptr(new NameNode(*this)); }
+ void parse() override;
+ QByteArray description() const override { return "Name"; }
};
class TemplateArgNode : public ParseTreeNode
@@ -586,21 +586,21 @@ class TemplateArgNode : public ParseTreeNode
public:
TemplateArgNode(GlobalParseState *parseState);
static bool mangledRepresentationStartsWith(char c);
- QByteArray toByteArray() const;
+ QByteArray toByteArray() const override;
private:
TemplateArgNode(const TemplateArgNode &other);
- ParseTreeNode::Ptr clone() const { return Ptr(new TemplateArgNode(*this)); }
- void parse();
- QByteArray description() const;
+ ParseTreeNode::Ptr clone() const override { return Ptr(new TemplateArgNode(*this)); }
+ void parse() override;
+ QByteArray description() const override;
- bool m_isTemplateArgumentPack;
+ bool m_isTemplateArgumentPack = false;
};
class PrefixNode : public ParseTreeNode
{
public:
- typedef QSharedPointer<PrefixNode> Ptr;
+ using Ptr = QSharedPointer<PrefixNode>;
PrefixNode(GlobalParseState *parseState) : ParseTreeNode(parseState) {}
static bool mangledRepresentationStartsWith(char c);
@@ -608,21 +608,21 @@ public:
bool isTemplate() const;
bool isConstructorOrDestructorOrConversionOperator() const;
- QByteArray toByteArray() const;
+ QByteArray toByteArray() const override;
private:
- PrefixNode(const PrefixNode &other) : ParseTreeNode(other) {}
- ParseTreeNode::Ptr clone() const { return Ptr(new PrefixNode(*this)); }
- void parse();
- QByteArray description() const { return "Prefix"; }
+ PrefixNode(const PrefixNode &other) = default;
+ ParseTreeNode::Ptr clone() const override { return Ptr(new PrefixNode(*this)); }
+ void parse() override;
+ QByteArray description() const override { return "Prefix"; }
};
class TypeNode : public ParseTreeNode
{
public:
- typedef QSharedPointer<TypeNode> Ptr;
+ using Ptr = QSharedPointer<TypeNode>;
- TypeNode(GlobalParseState *parseState) : ParseTreeNode(parseState), m_type(OtherType) {}
+ TypeNode(GlobalParseState *parseState) : ParseTreeNode(parseState) {}
static bool mangledRepresentationStartsWith(char c);
@@ -632,19 +632,19 @@ public:
};
Type type() const { return m_type; }
- QByteArray toByteArray() const;
+ QByteArray toByteArray() const override;
private:
TypeNode(const TypeNode &other);
- ParseTreeNode::Ptr clone() const { return Ptr(new TypeNode(*this)); }
- void parse();
- QByteArray description() const;
+ ParseTreeNode::Ptr clone() const override { return Ptr(new TypeNode(*this)); }
+ void parse() override;
+ QByteArray description() const override;
QByteArray toByteArrayQualPointerRef(const TypeNode *typeNode,
const QByteArray &qualPtrRef) const;
QByteArray qualPtrRefListToByteArray(const QList<const ParseTreeNode *> &nodeList) const;
- Type m_type;
+ Type m_type = OtherType;
};
class FloatValueNode : public ParseTreeNode
@@ -652,15 +652,15 @@ class FloatValueNode : public ParseTreeNode
public:
FloatValueNode(GlobalParseState *parseState) : ParseTreeNode(parseState) {}
static bool mangledRepresentationStartsWith(char c);
- QByteArray toByteArray() const;
+ QByteArray toByteArray() const override;
private:
FloatValueNode(const FloatValueNode &other);
- ParseTreeNode::Ptr clone() const { return Ptr(new FloatValueNode(*this)); }
- void parse();
- QByteArray description() const;
+ ParseTreeNode::Ptr clone() const override { return Ptr(new FloatValueNode(*this)); }
+ void parse() override;
+ QByteArray description() const override;
- double m_value;
+ double m_value; // TODO: define?
};
class LambdaSigNode : public ParseTreeNode
@@ -668,26 +668,26 @@ class LambdaSigNode : public ParseTreeNode
public:
LambdaSigNode(GlobalParseState *parseState) : ParseTreeNode(parseState) {}
static bool mangledRepresentationStartsWith(char c);
- QByteArray toByteArray() const;
+ QByteArray toByteArray() const override;
private:
- LambdaSigNode(const LambdaSigNode &other) : ParseTreeNode(other) {}
- ParseTreeNode::Ptr clone() const { return Ptr(new LambdaSigNode(*this)); }
- void parse();
- QByteArray description() const { return "LambdaSig"; }
+ LambdaSigNode(const LambdaSigNode &other) = default;
+ ParseTreeNode::Ptr clone() const override { return Ptr(new LambdaSigNode(*this)); }
+ void parse() override;
+ QByteArray description() const override { return "LambdaSig"; }
};
class ClosureTypeNameNode : public ParseTreeNode
{
public:
ClosureTypeNameNode(GlobalParseState *parseState) : ParseTreeNode(parseState) {}
- QByteArray toByteArray() const;
+ QByteArray toByteArray() const override;
private:
- ClosureTypeNameNode(const ClosureTypeNameNode &other) : ParseTreeNode(other) {}
- ParseTreeNode::Ptr clone() const { return Ptr(new ClosureTypeNameNode(*this)); }
- void parse();
- QByteArray description() const { return "ClosureType"; }
+ ClosureTypeNameNode(const ClosureTypeNameNode &other) = default;
+ ParseTreeNode::Ptr clone() const override { return Ptr(new ClosureTypeNameNode(*this)); }
+ void parse() override;
+ QByteArray description() const override { return "ClosureType"; }
};
class UnnamedTypeNameNode : public ParseTreeNode
@@ -695,13 +695,13 @@ class UnnamedTypeNameNode : public ParseTreeNode
public:
UnnamedTypeNameNode(GlobalParseState *parseState) : ParseTreeNode(parseState) {}
static bool mangledRepresentationStartsWith(char c);
- QByteArray toByteArray() const;
+ QByteArray toByteArray() const override;
private:
- UnnamedTypeNameNode(const UnnamedTypeNameNode &other) : ParseTreeNode(other) {}
- ParseTreeNode::Ptr clone() const { return Ptr(new UnnamedTypeNameNode(*this)); }
- void parse();
- QByteArray description() const { return "UnnnamedType"; }
+ UnnamedTypeNameNode(const UnnamedTypeNameNode &other) = default;
+ ParseTreeNode::Ptr clone() const override { return Ptr(new UnnamedTypeNameNode(*this)); }
+ void parse() override;
+ QByteArray description() const override { return "UnnnamedType"; }
};
class DeclTypeNode : public ParseTreeNode
@@ -709,13 +709,13 @@ class DeclTypeNode : public ParseTreeNode
public:
DeclTypeNode(GlobalParseState *parseState) : ParseTreeNode(parseState) {}
static bool mangledRepresentationStartsWith(char c);
- QByteArray toByteArray() const;
+ QByteArray toByteArray() const override;
private:
- DeclTypeNode(const DeclTypeNode &other) : ParseTreeNode(other) {}
- ParseTreeNode::Ptr clone() const { return Ptr(new DeclTypeNode(*this)); }
- void parse();
- QByteArray description() const { return "DeclType"; }
+ DeclTypeNode(const DeclTypeNode &other) = default;
+ ParseTreeNode::Ptr clone() const override { return Ptr(new DeclTypeNode(*this)); }
+ void parse() override;
+ QByteArray description() const override { return "DeclType"; }
};
class UnresolvedTypeRule
@@ -733,13 +733,13 @@ class SimpleIdNode : public ParseTreeNode
public:
SimpleIdNode(GlobalParseState *parseState) : ParseTreeNode(parseState) {}
static bool mangledRepresentationStartsWith(char c);
- QByteArray toByteArray() const;
+ QByteArray toByteArray() const override;
private:
- SimpleIdNode(const SimpleIdNode &other) : ParseTreeNode(other) {}
- ParseTreeNode::Ptr clone() const { return Ptr(new SimpleIdNode(*this)); }
- void parse();
- QByteArray description() const { return "SimpleId"; }
+ SimpleIdNode(const SimpleIdNode &other) = default;
+ ParseTreeNode::Ptr clone() const override { return Ptr(new SimpleIdNode(*this)); }
+ void parse() override;
+ QByteArray description() const override { return "SimpleId"; }
};
class DestructorNameNode : public ParseTreeNode
@@ -747,13 +747,13 @@ class DestructorNameNode : public ParseTreeNode
public:
DestructorNameNode(GlobalParseState *parseState) : ParseTreeNode(parseState) {}
static bool mangledRepresentationStartsWith(char c);
- QByteArray toByteArray() const;
+ QByteArray toByteArray() const override;
private:
- DestructorNameNode(const DestructorNameNode &other) : ParseTreeNode(other) {}
- ParseTreeNode::Ptr clone() const { return Ptr(new DestructorNameNode(*this)); }
- void parse();
- QByteArray description() const { return "DesctuctorName"; }
+ DestructorNameNode(const DestructorNameNode &other) = default;
+ ParseTreeNode::Ptr clone() const override { return Ptr(new DestructorNameNode(*this)); }
+ void parse() override;
+ QByteArray description() const override { return "DesctuctorName"; }
};
class UnresolvedQualifierLevelRule
@@ -771,15 +771,15 @@ class BaseUnresolvedNameNode : public ParseTreeNode
public:
BaseUnresolvedNameNode(GlobalParseState *parseState);
static bool mangledRepresentationStartsWith(char c);
- QByteArray toByteArray() const;
+ QByteArray toByteArray() const override;
private:
BaseUnresolvedNameNode(const BaseUnresolvedNameNode &other);
- ParseTreeNode::Ptr clone() const { return Ptr(new BaseUnresolvedNameNode(*this)); }
- void parse();
- QByteArray description() const;
+ ParseTreeNode::Ptr clone() const override { return Ptr(new BaseUnresolvedNameNode(*this)); }
+ void parse() override;
+ QByteArray description() const override;
- bool m_isOperator;
+ bool m_isOperator = false;
};
class InitializerNode : public ParseTreeNode
@@ -787,13 +787,13 @@ class InitializerNode : public ParseTreeNode
public:
InitializerNode(GlobalParseState *parseState) : ParseTreeNode(parseState) {}
static bool mangledRepresentationStartsWith(char c);
- QByteArray toByteArray() const;
+ QByteArray toByteArray() const override;
private:
- InitializerNode(const InitializerNode &other) : ParseTreeNode(other) {}
- ParseTreeNode::Ptr clone() const { return Ptr(new InitializerNode(*this)); }
- void parse();
- QByteArray description() const { return "Initializer"; }
+ InitializerNode(const InitializerNode &other) = default;
+ ParseTreeNode::Ptr clone() const override { return Ptr(new InitializerNode(*this)); }
+ void parse() override;
+ QByteArray description() const override { return "Initializer"; }
};
class UnresolvedNameNode : public ParseTreeNode
@@ -801,15 +801,15 @@ class UnresolvedNameNode : public ParseTreeNode
public:
UnresolvedNameNode(GlobalParseState *parseState) : ParseTreeNode(parseState) {}
static bool mangledRepresentationStartsWith(char c);
- QByteArray toByteArray() const;
+ QByteArray toByteArray() const override;
private:
UnresolvedNameNode(const UnresolvedNameNode &other);
- ParseTreeNode::Ptr clone() const { return Ptr(new UnresolvedNameNode(*this)); }
- void parse();
- QByteArray description() const;
+ ParseTreeNode::Ptr clone() const override { return Ptr(new UnresolvedNameNode(*this)); }
+ void parse() override;
+ QByteArray description() const override;
- bool m_globalNamespace;
+ bool m_globalNamespace; // TODO: define?
};
class FunctionParamNode : public ParseTreeNode
@@ -817,13 +817,13 @@ class FunctionParamNode : public ParseTreeNode
public:
FunctionParamNode(GlobalParseState *parseState) : ParseTreeNode(parseState) {}
static bool mangledRepresentationStartsWith(char c);
- QByteArray toByteArray() const;
+ QByteArray toByteArray() const override;
private:
- FunctionParamNode(const FunctionParamNode &other) : ParseTreeNode(other) {}
- ParseTreeNode::Ptr clone() const { return Ptr(new FunctionParamNode(*this)); }
- void parse();
- QByteArray description() const { return "FunctionParam"; }
+ FunctionParamNode(const FunctionParamNode &other) = default;
+ ParseTreeNode::Ptr clone() const override { return Ptr(new FunctionParamNode(*this)); }
+ void parse() override;
+ QByteArray description() const override { return "FunctionParam"; }
};
} // namespace Internal
diff --git a/src/plugins/debugger/outputcollector.h b/src/plugins/debugger/outputcollector.h
index b176414ce5..8d04e56364 100644
--- a/src/plugins/debugger/outputcollector.h
+++ b/src/plugins/debugger/outputcollector.h
@@ -47,7 +47,7 @@ class OutputCollector : public QObject
Q_OBJECT
public:
- OutputCollector() {}
+ OutputCollector() = default;
~OutputCollector() override;
bool listen();
void shutdown();
diff --git a/src/plugins/debugger/pdb/pdbengine.cpp b/src/plugins/debugger/pdb/pdbengine.cpp
index b54172d5ab..1ff061bf48 100644
--- a/src/plugins/debugger/pdb/pdbengine.cpp
+++ b/src/plugins/debugger/pdb/pdbengine.cpp
@@ -295,7 +295,7 @@ void PdbEngine::refreshModules(const GdbMi &modules)
{
ModulesHandler *handler = modulesHandler();
handler->beginUpdateAll();
- foreach (const GdbMi &item, modules.children()) {
+ for (const GdbMi &item : modules.children()) {
Module module;
module.moduleName = item["name"].data();
QString path = item["value"].data();
@@ -350,7 +350,7 @@ void PdbEngine::refreshSymbols(const GdbMi &symbols)
{
QString moduleName = symbols["module"].data();
Symbols syms;
- foreach (const GdbMi &item, symbols["symbols"].children()) {
+ for (const GdbMi &item : symbols["symbols"].children()) {
Symbol symbol;
symbol.name = item["name"].data();
syms.append(symbol);
@@ -512,7 +512,7 @@ void PdbEngine::refreshStack(const GdbMi &stack)
{
StackHandler *handler = stackHandler();
StackFrames frames;
- foreach (const GdbMi &item, stack["frames"].children()) {
+ for (const GdbMi &item : stack["frames"].children()) {
StackFrame frame;
frame.level = item["level"].data();
frame.file = item["file"].data();
diff --git a/src/plugins/debugger/pdb/pdbengine.h b/src/plugins/debugger/pdb/pdbengine.h
index b6120e3aec..ccef9d1e47 100644
--- a/src/plugins/debugger/pdb/pdbengine.h
+++ b/src/plugins/debugger/pdb/pdbengine.h
@@ -88,7 +88,6 @@ private:
void reloadFullStack() override {}
bool supportsThreads() const { return true; }
- bool isSynchronous() const override { return true; }
void updateItem(const QString &iname) override;
void runCommand(const DebuggerCommand &cmd) override;
diff --git a/src/plugins/debugger/procinterrupt.cpp b/src/plugins/debugger/procinterrupt.cpp
index ef49b429e0..bc241d9d3b 100644
--- a/src/plugins/debugger/procinterrupt.cpp
+++ b/src/plugins/debugger/procinterrupt.cpp
@@ -53,7 +53,7 @@ static inline QString msgCannotInterrupt(qint64 pid, const QString &why)
static BOOL isWow64Process(HANDLE hproc)
{
- typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);
+ using LPFN_ISWOW64PROCESS = BOOL (WINAPI*)(HANDLE, PBOOL);
BOOL ret = false;
diff --git a/src/plugins/debugger/qml/qmlcppengine.cpp b/src/plugins/debugger/qml/qmlcppengine.cpp
index 1a920f5f3e..3353712dda 100644
--- a/src/plugins/debugger/qml/qmlcppengine.cpp
+++ b/src/plugins/debugger/qml/qmlcppengine.cpp
@@ -207,11 +207,6 @@ bool QmlCppEngine::hasCapability(unsigned cap) const
return hasCap;
}
-bool QmlCppEngine::isSynchronous() const
-{
- return m_activeEngine->isSynchronous();
-}
-
QString QmlCppEngine::qtNamespace() const
{
return m_cppEngine->qtNamespace();
diff --git a/src/plugins/debugger/qml/qmlcppengine.h b/src/plugins/debugger/qml/qmlcppengine.h
index a8a0d61537..fffd08a89a 100644
--- a/src/plugins/debugger/qml/qmlcppengine.h
+++ b/src/plugins/debugger/qml/qmlcppengine.h
@@ -65,7 +65,6 @@ public:
void setRegisterValue(const QString &name, const QString &value) override;
bool hasCapability(unsigned cap) const override;
- bool isSynchronous() const override;
QString qtNamespace() const override;
void createSnapshot() override;
diff --git a/src/plugins/debugger/qml/qmlengine.cpp b/src/plugins/debugger/qml/qmlengine.cpp
index c62856be4a..62034f245f 100644
--- a/src/plugins/debugger/qml/qmlengine.cpp
+++ b/src/plugins/debugger/qml/qmlengine.cpp
@@ -127,7 +127,7 @@ struct QmlV8ObjectData
}
};
-typedef std::function<void(const QVariantMap &)> QmlCallback;
+using QmlCallback = std::function<void(const QVariantMap &)>;
struct LookupData
{
@@ -136,7 +136,7 @@ struct LookupData
QString exp;
};
-typedef QHash<int, LookupData> LookupItems; // id -> (iname, exp)
+using LookupItems = QHash<int, LookupData>; // id -> (iname, exp)
static void setWatchItemHasChildren(WatchItem *item, bool hasChildren)
{
@@ -170,6 +170,10 @@ public:
bool enabled = true,int line = 0, int column = 0,
const QString condition = QString(), int ignoreCount = -1);
void clearBreakpoint(int breakpoint);
+
+ bool canChangeBreakpoint() const;
+ void changeBreakpoint(int breakpoint, bool enabled);
+
void setExceptionBreak(Exceptions type, bool enabled = false);
void flushSendBuffer();
@@ -225,6 +229,7 @@ public:
bool automaticConnect = false;
bool unpausedEvaluate = false;
bool contextEvaluate = false;
+ bool supportChangeBreakpoint = false;
QTimer connectionTimer;
QmlDebug::QDebugMessageClient *msgClient = nullptr;
@@ -410,7 +415,7 @@ void QmlEngine::connectionStartupFailed()
return;
}
- QMessageBox *infoBox = new QMessageBox(ICore::mainWindow());
+ auto infoBox = new QMessageBox(ICore::mainWindow());
infoBox->setIcon(QMessageBox::Critical);
infoBox->setWindowTitle(Core::Constants::IDE_DISPLAY_NAME);
infoBox->setText(tr("Could not connect to the in-process QML debugger."
@@ -431,7 +436,7 @@ void QmlEngine::appStartupFailed(const QString &errorMessage)
QString error = tr("Could not connect to the in-process QML debugger. %1").arg(errorMessage);
if (isMasterEngine()) {
- QMessageBox *infoBox = new QMessageBox(ICore::mainWindow());
+ auto infoBox = new QMessageBox(ICore::mainWindow());
infoBox->setIcon(QMessageBox::Critical);
infoBox->setWindowTitle(Core::Constants::IDE_DISPLAY_NAME);
infoBox->setText(error);
@@ -755,6 +760,8 @@ void QmlEngine::changeBreakpoint(Breakpoint bp)
d->setExceptionBreak(AllExceptions, params.enabled);
} else if (params.type == BreakpointOnQmlSignalEmit) {
d->setBreakpoint(EVENT, params.functionName, params.enabled);
+ } else if (d->canChangeBreakpoint()) {
+ d->changeBreakpoint(d->breakpoints.value(bp.id()), params.enabled);
} else {
d->clearBreakpoint(d->breakpoints.take(bp.id()));
d->setBreakpoint(SCRIPTREGEXP, params.fileName,
@@ -779,13 +786,13 @@ void QmlEngine::attemptBreakpointSynchronization()
BreakHandler *handler = breakHandler();
DebuggerEngine *bpOwner = masterEngine();
- foreach (Breakpoint bp, handler->unclaimedBreakpoints()) {
+ for (Breakpoint bp : handler->unclaimedBreakpoints()) {
// Take ownership of the breakpoint. Requests insertion.
if (acceptsBreakpoint(bp))
bp.setEngine(bpOwner);
}
- foreach (Breakpoint bp, handler->engineBreakpoints(bpOwner)) {
+ for (Breakpoint bp : handler->engineBreakpoints(bpOwner)) {
switch (bp.state()) {
case BreakpointNew:
// Should not happen once claimed.
@@ -925,9 +932,9 @@ void QmlEngine::selectWatchData(const QString &iname)
bool compareConsoleItems(const ConsoleItem *a, const ConsoleItem *b)
{
- if (a == 0)
+ if (a == nullptr)
return true;
- if (b == 0)
+ if (b == nullptr)
return false;
return a->text() < b->text();
}
@@ -937,7 +944,7 @@ static ConsoleItem *constructLogItemTree(const QVariant &result,
{
bool sorted = boolSetting(SortStructMembers);
if (!result.isValid())
- return 0;
+ return nullptr;
QString text;
ConsoleItem *item = nullptr;
@@ -1136,8 +1143,8 @@ void QmlEnginePrivate::updateScriptSource(const QString &fileName, int lineOffse
}
QTC_CHECK(cursor.positionInBlock() == columnOffset);
- QStringList lines = source.split('\n');
- foreach (QString line, lines) {
+ const QStringList lines = source.split('\n');
+ for (QString line : lines) {
if (line.endsWith('\r'))
line.remove(line.size() -1, 1);
@@ -1499,6 +1506,19 @@ void QmlEnginePrivate::clearBreakpoint(int breakpoint)
runCommand(cmd);
}
+bool QmlEnginePrivate::canChangeBreakpoint() const
+{
+ return supportChangeBreakpoint;
+}
+
+void QmlEnginePrivate::changeBreakpoint(int breakpoint, bool enabled)
+{
+ DebuggerCommand cmd(CHANGEBREAKPOINT);
+ cmd.arg(BREAKPOINT, breakpoint);
+ cmd.arg(ENABLED, enabled);
+ runCommand(cmd);
+}
+
void QmlEnginePrivate::setExceptionBreak(Exceptions type, bool enabled)
{
// { "seq" : <number>,
@@ -1883,7 +1903,7 @@ void QmlEnginePrivate::messageReceived(const QByteArray &data)
QList<int> v8BreakpointIds;
{
const QVariantList v8BreakpointIdList = breakData.value("breakpoints").toList();
- foreach (const QVariant &breakpointId, v8BreakpointIdList)
+ for (const QVariant &breakpointId : v8BreakpointIdList)
v8BreakpointIds << breakpointId.toInt();
}
@@ -1897,7 +1917,7 @@ void QmlEnginePrivate::messageReceived(const QByteArray &data)
int newColumn = sourceLineText.indexOf('(') + 1;
BreakHandler *handler = engine->breakHandler();
- foreach (int v8Id, v8BreakpointIds) {
+ for (int v8Id : v8BreakpointIds) {
const BreakpointModelId id = breakpoints.key(v8Id);
Breakpoint bp = handler->breakpointById(id);
if (bp.isValid()) {
@@ -1927,7 +1947,7 @@ void QmlEnginePrivate::messageReceived(const QByteArray &data)
if (inferiorStop) {
//Update breakpoint data
BreakHandler *handler = engine->breakHandler();
- foreach (int v8Id, v8BreakpointIds) {
+ for (int v8Id : v8BreakpointIds) {
const BreakpointModelId id = breakpoints.key(v8Id);
Breakpoint bp = handler->breakpointById(id);
if (bp) {
@@ -1946,7 +1966,7 @@ void QmlEnginePrivate::messageReceived(const QByteArray &data)
}
if (engine->state() == InferiorRunOk) {
- foreach (const QVariant &breakpointId, v8BreakpointIds) {
+ for (const QVariant &breakpointId : v8BreakpointIds) {
if (breakpointsTemp.contains(breakpointId.toInt()))
clearBreakpoint(breakpointId.toInt());
}
@@ -1969,8 +1989,8 @@ void QmlEnginePrivate::messageReceived(const QByteArray &data)
const QVariantMap exception = body.value("exception").toMap();
QString errorMessage = exception.value("text").toString();
- QStringList messages = highlightExceptionCode(lineNumber, filePath, errorMessage);
- foreach (const QString msg, messages)
+ const QStringList messages = highlightExceptionCode(lineNumber, filePath, errorMessage);
+ for (const QString &msg : messages)
engine->showMessage(msg, ConsoleOutput);
if (engine->state() == InferiorRunOk) {
@@ -2030,7 +2050,7 @@ void QmlEnginePrivate::handleBacktrace(const QVariantMap &response)
StackFrames stackFrames;
int i = 0;
stackIndexLookup.clear();
- foreach (const QVariant &frame, frames) {
+ for (const QVariant &frame : frames) {
StackFrame stackFrame = extractStackFrame(frame);
if (stackFrame.level.isEmpty())
continue;
@@ -2178,7 +2198,7 @@ void QmlEnginePrivate::handleFrame(const QVariantMap &response)
currentFrameScopes.clear();
const QVariantList scopes = body.value("scopes").toList();
- foreach (const QVariant &scope, scopes) {
+ for (const QVariant &scope : scopes) {
//Do not query for global types (0)
//Showing global properties increases clutter.
if (scope.toMap().value("type").toInt() == 0)
@@ -2191,8 +2211,8 @@ void QmlEnginePrivate::handleFrame(const QVariantMap &response)
// Send watchers list
if (stackHandler->isContentsValid() && stackHandler->currentFrame().isUsable()) {
- QStringList watchers = watchHandler->watchedExpressions();
- foreach (const QString &exp, watchers) {
+ const QStringList watchers = watchHandler->watchedExpressions();
+ for (const QString &exp : watchers) {
const QString iname = watchHandler->watcherName(exp);
evaluate(exp, -1, [this, iname, exp](const QVariantMap &response) {
handleEvaluateExpression(response, iname, exp);
@@ -2231,10 +2251,10 @@ void QmlEnginePrivate::handleScope(const QVariantMap &response)
if (bodyMap.value("frameIndex").toInt() != stackHandler->currentIndex())
return;
- QmlV8ObjectData objectData = extractData(bodyMap.value("object"));
+ const QmlV8ObjectData objectData = extractData(bodyMap.value("object"));
LookupItems itemsToLookup;
- foreach (const QVariant &property, objectData.properties) {
+ for (const QVariant &property : objectData.properties) {
QmlV8ObjectData localData = extractData(property);
std::unique_ptr<WatchItem> item(new WatchItem);
item->exp = localData.name;
@@ -2281,7 +2301,7 @@ void QmlEnginePrivate::constructChildLogItems(ConsoleItem *item, const QmlV8Obje
// changes, invalidating cached indices. So we presort them before inserting.
QVarLengthArray<ConsoleItem *> children(objectData.properties.size());
auto it = children.begin();
- foreach (const QVariant &property, objectData.properties)
+ for (const QVariant &property : objectData.properties)
*(it++) = constructLogItemTree(extractData(property), seenHandles);
if (boolSetting(SortStructMembers))
@@ -2309,8 +2329,8 @@ ConsoleItem *QmlEnginePrivate::constructLogItemTree(const QmlV8ObjectData &objec
cmd.arg(HANDLES, QList<int>() << handle);
runCommand(cmd, [this, item, handle](const QVariantMap &response) {
const QVariantMap body = response.value(BODY).toMap();
- QStringList handlesList = body.keys();
- foreach (const QString &handleString, handlesList) {
+ const QStringList handlesList = body.keys();
+ for (const QString &handleString : handlesList) {
if (handle != handleString.toInt())
continue;
@@ -2370,7 +2390,7 @@ void QmlEnginePrivate::insertSubItems(WatchItem *parent, const QVariantList &pro
LookupItems itemsToLookup;
const QSet<QString> expandedINames = engine->watchHandler()->expandedINames();
- foreach (const QVariant &property, properties) {
+ for (const QVariant &property : properties) {
QmlV8ObjectData propertyData = extractData(property);
std::unique_ptr<WatchItem> item(new WatchItem);
item->name = propertyData.name;
@@ -2433,13 +2453,13 @@ void QmlEnginePrivate::handleLookup(const QVariantMap &response)
// }
const QVariantMap body = response.value(BODY).toMap();
- QStringList handlesList = body.keys();
- foreach (const QString &handleString, handlesList) {
- int handle = handleString.toInt();
- QmlV8ObjectData bodyObjectData = extractData(body.value(handleString));
- QList<LookupData> vals = currentlyLookingUp.values(handle);
+ const QStringList handlesList = body.keys();
+ for (const QString &handleString : handlesList) {
+ const int handle = handleString.toInt();
+ const QmlV8ObjectData bodyObjectData = extractData(body.value(handleString));
+ const QList<LookupData> vals = currentlyLookingUp.values(handle);
currentlyLookingUp.remove(handle);
- foreach (const LookupData &res, vals) {
+ for (const LookupData &res : vals) {
auto item = new WatchItem;
item->exp = res.exp;
item->iname = res.iname;
@@ -2475,8 +2495,10 @@ void QmlEnginePrivate::stateChanged(State state)
void QmlEnginePrivate::handleVersion(const QVariantMap &response)
{
- unpausedEvaluate = response.value(BODY).toMap().value("UnpausedEvaluate", false).toBool();
- contextEvaluate = response.value(BODY).toMap().value("ContextEvaluate", false).toBool();
+ const QVariantMap body = response.value(BODY).toMap();
+ unpausedEvaluate = body.value("UnpausedEvaluate", false).toBool();
+ contextEvaluate = body.value("ContextEvaluate", false).toBool();
+ supportChangeBreakpoint = body.value("ChangeBreakpoint", false).toBool();
}
void QmlEnginePrivate::flushSendBuffer()
diff --git a/src/plugins/debugger/qml/qmlengine.h b/src/plugins/debugger/qml/qmlengine.h
index 2f6889b62b..bdd6b2d64c 100644
--- a/src/plugins/debugger/qml/qmlengine.h
+++ b/src/plugins/debugger/qml/qmlengine.h
@@ -70,7 +70,6 @@ private:
void gotoLocation(const Internal::Location &location) override;
void insertBreakpoint(Breakpoint bp) override;
- bool isSynchronous() const override { return false; }
bool canDisplayTooltip() const override { return false; }
void resetLocation() override;
diff --git a/src/plugins/debugger/qml/qmlengineutils.cpp b/src/plugins/debugger/qml/qmlengineutils.cpp
index 455a559e31..0ef1bf07e5 100644
--- a/src/plugins/debugger/qml/qmlengineutils.cpp
+++ b/src/plugins/debugger/qml/qmlengineutils.cpp
@@ -58,7 +58,7 @@ public:
Node::accept(ast, this);
}
- bool preVisit(Node *ast)
+ bool preVisit(Node *ast) override
{
return !done && ast->lastSourceLocation().startLine >= *line;
}
@@ -73,7 +73,7 @@ public:
//Add more types when suitable.
- bool visit(UiScriptBinding *ast)
+ bool visit(UiScriptBinding *ast) override
{
if (!ast->statement)
return true;
@@ -87,7 +87,7 @@ public:
statementColumn = ast->statement->firstSourceLocation().startColumn;
} else if (ast->statement->kind == Node::Kind_Block) {
- Block *block = static_cast<Block *>(ast->statement);
+ auto block = static_cast<Block *>(ast->statement);
if (!block->statements)
return true;
statementStartLine = block->statements->firstSourceLocation().startLine;
@@ -124,7 +124,7 @@ public:
return true;
}
- bool visit(FunctionDeclaration *ast) {
+ bool visit(FunctionDeclaration *ast) override {
quint32 sourceStartLine = ast->firstSourceLocation().startLine;
quint32 sourceStartColumn = ast->firstSourceLocation().startColumn;
quint32 statementStartLine = ast->body->firstSourceLocation().startLine;
@@ -152,39 +152,39 @@ public:
return true;
}
- bool visit(EmptyStatement *ast)
+ bool visit(EmptyStatement *ast) override
{
*line = ast->lastSourceLocation().startLine + 1;
return true;
}
- bool visit(VariableStatement *ast) { test(ast); return true; }
- bool visit(VariableDeclarationList *ast) { test(ast); return true; }
- bool visit(VariableDeclaration *ast) { test(ast); return true; }
- bool visit(ExpressionStatement *ast) { test(ast); return true; }
- bool visit(IfStatement *ast) { test(ast); return true; }
- bool visit(DoWhileStatement *ast) { test(ast); return true; }
- bool visit(WhileStatement *ast) { test(ast); return true; }
- bool visit(ForStatement *ast) { test(ast); return true; }
- bool visit(LocalForStatement *ast) { test(ast); return true; }
- bool visit(ForEachStatement *ast) { test(ast); return true; }
- bool visit(LocalForEachStatement *ast) { test(ast); return true; }
- bool visit(ContinueStatement *ast) { test(ast); return true; }
- bool visit(BreakStatement *ast) { test(ast); return true; }
- bool visit(ReturnStatement *ast) { test(ast); return true; }
- bool visit(WithStatement *ast) { test(ast); return true; }
- bool visit(SwitchStatement *ast) { test(ast); return true; }
- bool visit(CaseBlock *ast) { test(ast); return true; }
- bool visit(CaseClauses *ast) { test(ast); return true; }
- bool visit(CaseClause *ast) { test(ast); return true; }
- bool visit(DefaultClause *ast) { test(ast); return true; }
- bool visit(LabelledStatement *ast) { test(ast); return true; }
- bool visit(ThrowStatement *ast) { test(ast); return true; }
- bool visit(TryStatement *ast) { test(ast); return true; }
- bool visit(Catch *ast) { test(ast); return true; }
- bool visit(Finally *ast) { test(ast); return true; }
- bool visit(FunctionExpression *ast) { test(ast); return true; }
- bool visit(DebuggerStatement *ast) { test(ast); return true; }
+ bool visit(VariableStatement *ast) override { test(ast); return true; }
+ bool visit(VariableDeclarationList *ast) override { test(ast); return true; }
+ bool visit(VariableDeclaration *ast) override { test(ast); return true; }
+ bool visit(ExpressionStatement *ast) override { test(ast); return true; }
+ bool visit(IfStatement *ast) override { test(ast); return true; }
+ bool visit(DoWhileStatement *ast) override { test(ast); return true; }
+ bool visit(WhileStatement *ast) override { test(ast); return true; }
+ bool visit(ForStatement *ast) override { test(ast); return true; }
+ bool visit(LocalForStatement *ast) override { test(ast); return true; }
+ bool visit(ForEachStatement *ast) override { test(ast); return true; }
+ bool visit(LocalForEachStatement *ast) override { test(ast); return true; }
+ bool visit(ContinueStatement *ast) override { test(ast); return true; }
+ bool visit(BreakStatement *ast) override { test(ast); return true; }
+ bool visit(ReturnStatement *ast) override { test(ast); return true; }
+ bool visit(WithStatement *ast) override { test(ast); return true; }
+ bool visit(SwitchStatement *ast) override { test(ast); return true; }
+ bool visit(CaseBlock *ast) override { test(ast); return true; }
+ bool visit(CaseClauses *ast) override { test(ast); return true; }
+ bool visit(CaseClause *ast) override { test(ast); return true; }
+ bool visit(DefaultClause *ast) override { test(ast); return true; }
+ bool visit(LabelledStatement *ast) override { test(ast); return true; }
+ bool visit(ThrowStatement *ast) override { test(ast); return true; }
+ bool visit(TryStatement *ast) override { test(ast); return true; }
+ bool visit(Catch *ast) override { test(ast); return true; }
+ bool visit(Finally *ast) override { test(ast); return true; }
+ bool visit(FunctionExpression *ast) override { test(ast); return true; }
+ bool visit(DebuggerStatement *ast) override { test(ast); return true; }
void test(Node *ast)
{
@@ -241,13 +241,13 @@ void clearExceptionSelection()
QStringList highlightExceptionCode(int lineNumber, const QString &filePath, const QString &errorMessage)
{
QStringList messages;
- QList<IEditor *> editors = DocumentModel::editorsForFilePath(filePath);
+ const QList<IEditor *> editors = DocumentModel::editorsForFilePath(filePath);
const TextEditor::FontSettings &fontSettings = TextEditor::TextEditorSettings::instance()->fontSettings();
QTextCharFormat errorFormat = fontSettings.toTextCharFormat(TextEditor::C_ERROR);
- foreach (IEditor *editor, editors) {
- TextEditorWidget *ed = qobject_cast<TextEditorWidget *>(editor->widget());
+ for (IEditor *editor : editors) {
+ auto ed = qobject_cast<TextEditorWidget *>(editor->widget());
if (!ed)
continue;
diff --git a/src/plugins/debugger/qml/qmlinspectoragent.cpp b/src/plugins/debugger/qml/qmlinspectoragent.cpp
index 72f224db51..3057a753e0 100644
--- a/src/plugins/debugger/qml/qmlinspectoragent.cpp
+++ b/src/plugins/debugger/qml/qmlinspectoragent.cpp
@@ -66,21 +66,14 @@ Q_LOGGING_CATEGORY(qmlInspectorLog, "qtc.dbg.qmlinspector")
*/
QmlInspectorAgent::QmlInspectorAgent(QmlEngine *engine, QmlDebugConnection *connection)
: m_qmlEngine(engine)
- , m_engineClient(0)
- , m_engineQueryId(0)
- , m_rootContextQueryId(0)
, m_objectToSelect(WatchItem::InvalidId)
, m_masterEngine(engine->masterEngine())
- , m_toolsClient(0)
- , m_targetToSync(NoTarget)
, m_debugIdToSelect(WatchItem::InvalidId)
, m_currentSelectedDebugId(WatchItem::InvalidId)
- , m_toolsClientConnected(false)
, m_inspectorToolsContext("Debugger.QmlInspector")
, m_selectAction(new QAction(this))
, m_zoomAction(new QAction(this))
, m_showAppOnTopAction(action(ShowAppOnTop))
- , m_engineClientConnected(false)
{
m_debugIdToIname.insert(WatchItem::InvalidId, "inspect");
connect(action(ShowQmlObjectTree),
@@ -341,8 +334,8 @@ void QmlInspectorAgent::onResult(quint32 queryId, const QVariant &value,
if (m_objectTreeQueryIds.contains(queryId)) {
m_objectTreeQueryIds.removeOne(queryId);
if (value.type() == QVariant::List) {
- QVariantList objList = value.toList();
- foreach (const QVariant &var, objList) {
+ const QVariantList objList = value.toList();
+ for (const QVariant &var : objList) {
// TODO: check which among the list is the actual
// object that needs to be selected.
verifyAndInsertObjectInTree(qvariant_cast<ObjectReference>(var));
@@ -396,7 +389,7 @@ static bool insertChildren(WatchItem *parent, const QVariant &value)
case QVariant::Map: {
const QVariantMap map = value.toMap();
for (auto it = map.begin(), end = map.end(); it != end; ++it) {
- WatchItem *child = new WatchItem;
+ auto child = new WatchItem;
child->name = it.key();
child->value = it.value().toString();
child->type = QLatin1String(it.value().typeName());
@@ -410,7 +403,7 @@ static bool insertChildren(WatchItem *parent, const QVariant &value)
case QVariant::List: {
const QVariantList list = value.toList();
for (int i = 0, end = list.size(); i != end; ++i) {
- WatchItem *child = new WatchItem;
+ auto child = new WatchItem;
const QVariant &value = list.at(i);
child->arrayIndex = i;
child->value = value.toString();
@@ -756,7 +749,7 @@ void QmlInspectorAgent::clientStateChanged(QmlDebugClient::State state)
{
QString serviceName;
float version = 0;
- if (QmlDebugClient *client = qobject_cast<QmlDebugClient*>(sender())) {
+ if (auto client = qobject_cast<QmlDebugClient*>(sender())) {
serviceName = client->name();
version = client->serviceVersion();
}
@@ -766,7 +759,7 @@ void QmlInspectorAgent::clientStateChanged(QmlDebugClient::State state)
void QmlInspectorAgent::toolsClientStateChanged(QmlDebugClient::State state)
{
- BaseToolsClient *client = qobject_cast<BaseToolsClient*>(sender());
+ auto client = qobject_cast<BaseToolsClient*>(sender());
QTC_ASSERT(client, return);
if (state == QmlDebugClient::Enabled) {
m_toolsClient = client;
@@ -820,8 +813,7 @@ void QmlInspectorAgent::toolsClientStateChanged(QmlDebugClient::State state)
void QmlInspectorAgent::engineClientStateChanged(QmlDebugClient::State state)
{
- BaseEngineDebugClient *client
- = qobject_cast<BaseEngineDebugClient*>(sender());
+ auto client = qobject_cast<BaseEngineDebugClient*>(sender());
if (state == QmlDebugClient::Enabled && !m_engineClientConnected) {
// We accept the first client that is enabled and reject the others.
diff --git a/src/plugins/debugger/qml/qmlinspectoragent.h b/src/plugins/debugger/qml/qmlinspectoragent.h
index 0f09016554..4d76c5f2a8 100644
--- a/src/plugins/debugger/qml/qmlinspectoragent.h
+++ b/src/plugins/debugger/qml/qmlinspectoragent.h
@@ -49,8 +49,8 @@ class QmlEngine;
class WatchItem;
//map <filename, editorRevision> -> <lineNumber, columnNumber> -> debugId
-typedef
-QHash<QPair<QString, int>, QHash<QPair<int, int>, QList<int> > > DebugIdHash;
+using DebugIdHash =
+ QHash<QPair<QString, int>, QHash<QPair<int, int>, QList<int> > >;
class QmlInspectorAgent : public QObject
{
@@ -118,10 +118,10 @@ private:
private:
QPointer<QmlEngine> m_qmlEngine;
- QmlDebug::BaseEngineDebugClient *m_engineClient;
+ QmlDebug::BaseEngineDebugClient *m_engineClient = nullptr;
- quint32 m_engineQueryId;
- quint32 m_rootContextQueryId;
+ quint32 m_engineQueryId = 0;
+ quint32 m_rootContextQueryId = 0;
int m_objectToSelect;
QList<quint32> m_objectTreeQueryIds;
QStack<QmlDebug::ObjectReference> m_objectStack;
@@ -136,22 +136,22 @@ private:
DebuggerEngine *m_masterEngine;
QHash<QString, QmlDebug::BaseEngineDebugClient*> m_engineClients;
- QmlDebug::BaseToolsClient *m_toolsClient;
+ QmlDebug::BaseToolsClient *m_toolsClient = nullptr;
- SelectionTarget m_targetToSync;
+ SelectionTarget m_targetToSync = NoTarget;
int m_debugIdToSelect;
int m_currentSelectedDebugId;
QString m_currentSelectedDebugName;
// toolbar
- bool m_toolsClientConnected;
+ bool m_toolsClientConnected = false;
Core::Context m_inspectorToolsContext;
QAction *m_selectAction;
QAction *m_zoomAction;
QAction *m_showAppOnTopAction;
- bool m_engineClientConnected;
+ bool m_engineClientConnected = false;
};
} // Internal
diff --git a/src/plugins/debugger/qml/qmlv8debuggerclientconstants.h b/src/plugins/debugger/qml/qmlv8debuggerclientconstants.h
index 90c585b8e3..3056dd74f9 100644
--- a/src/plugins/debugger/qml/qmlv8debuggerclientconstants.h
+++ b/src/plugins/debugger/qml/qmlv8debuggerclientconstants.h
@@ -73,6 +73,7 @@ const char SCOPE[] = "scope";
const char SCRIPTS[] = "scripts";
const char SETBREAKPOINT[] = "setbreakpoint";
const char CLEARBREAKPOINT[] = "clearbreakpoint";
+const char CHANGEBREAKPOINT[] = "changebreakpoint";
const char SETEXCEPTIONBREAK[] = "setexceptionbreak";
const char VERSION[] = "version";
const char DISCONNECT[] = "disconnect";
diff --git a/src/plugins/debugger/registerhandler.cpp b/src/plugins/debugger/registerhandler.cpp
index 5ae39c1af5..1ee023aa31 100644
--- a/src/plugins/debugger/registerhandler.cpp
+++ b/src/plugins/debugger/registerhandler.cpp
@@ -69,7 +69,7 @@ enum RegisterDataRole
class RegisterDelegate : public QItemDelegate
{
public:
- RegisterDelegate() {}
+ RegisterDelegate() = default;
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &,
const QModelIndex &index) const override
@@ -80,7 +80,7 @@ public:
lineEdit->setFrame(false);
return lineEdit;
}
- return 0;
+ return nullptr;
}
void setEditorData(QWidget *editor, const QModelIndex &index) const override
@@ -428,9 +428,9 @@ public:
appendChild(new RegisterEditItem(i, subKind, subSize, format));
}
- QVariant data(int column, int role) const;
+ QVariant data(int column, int role) const override;
- Qt::ItemFlags flags(int column) const
+ Qt::ItemFlags flags(int column) const override
{
//return column == 1 ? Qt::ItemIsSelectable|Qt::ItemIsEnabled|Qt::ItemIsEditable
// : Qt::ItemIsSelectable|Qt::ItemIsEnabled;
@@ -464,7 +464,7 @@ public:
};
RegisterItem::RegisterItem(DebuggerEngine *engine, const Register &reg)
- : m_engine(engine), m_reg(reg), m_changed(true)
+ : m_engine(engine), m_reg(reg)
{
if (m_reg.kind == UnknownRegister)
m_reg.guessMissingData();
diff --git a/src/plugins/debugger/registerhandler.h b/src/plugins/debugger/registerhandler.h
index 45675bf90d..3d9bf7bb58 100644
--- a/src/plugins/debugger/registerhandler.h
+++ b/src/plugins/debugger/registerhandler.h
@@ -103,7 +103,7 @@ class RegisterItem;
using RegisterRootItem = Utils::TypedTreeItem<RegisterItem>;
using RegisterModel = Utils::TreeModel<RegisterRootItem, RegisterItem, RegisterSubItem>;
-typedef QMap<quint64, QString> RegisterMap;
+using RegisterMap = QMap<quint64, QString>;
class RegisterHandler : public RegisterModel
{
diff --git a/src/plugins/debugger/registerpostmortemaction.cpp b/src/plugins/debugger/registerpostmortemaction.cpp
index f1c4b204e0..a4e6bb87a0 100644
--- a/src/plugins/debugger/registerpostmortemaction.cpp
+++ b/src/plugins/debugger/registerpostmortemaction.cpp
@@ -78,7 +78,7 @@ void RegisterPostMortemAction::readSettings(const QSettings *)
Q_UNUSED(debuggerRegistryValueNameC); // avoid warning from MinGW
bool registered = false;
- HKEY handle = 0;
+ HKEY handle = NULL;
QString errorMessage;
if (openRegistryKey(HKEY_LOCAL_MACHINE, debuggerRegistryKeyC, false, &handle, &errorMessage))
registered = isRegistered(handle, debuggerCall(), &errorMessage);
diff --git a/src/plugins/debugger/shared/cdbsymbolpathlisteditor.cpp b/src/plugins/debugger/shared/cdbsymbolpathlisteditor.cpp
index 668c1d4c53..63bc34193c 100644
--- a/src/plugins/debugger/shared/cdbsymbolpathlisteditor.cpp
+++ b/src/plugins/debugger/shared/cdbsymbolpathlisteditor.cpp
@@ -53,13 +53,13 @@ CacheDirectoryDialog::CacheDirectoryDialog(QWidget *parent) :
setModal(true);
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
- QFormLayout *formLayout = new QFormLayout;
+ auto formLayout = new QFormLayout;
m_chooser->setExpectedKind(Utils::PathChooser::ExistingDirectory);
m_chooser->setHistoryCompleter(QLatin1String("Debugger.CdbCacheDir.History"));
m_chooser->setMinimumWidth(400);
formLayout->addRow(tr("Path:"), m_chooser);
- QVBoxLayout *mainLayout = new QVBoxLayout;
+ auto mainLayout = new QVBoxLayout;
mainLayout->addLayout(formLayout);
mainLayout->addWidget(m_buttonBox);
diff --git a/src/plugins/debugger/shared/peutils.cpp b/src/plugins/debugger/shared/peutils.cpp
index 3d89fa77b4..1973cf3afe 100644
--- a/src/plugins/debugger/shared/peutils.cpp
+++ b/src/plugins/debugger/shared/peutils.cpp
@@ -72,21 +72,21 @@ struct CV_INFO_PDB70
// Retrieve the NT image header of an executable via the legacy DOS header.
static IMAGE_NT_HEADERS *getNtHeader(void *fileMemory, QString *errorMessage)
{
- IMAGE_DOS_HEADER *dosHeader = static_cast<PIMAGE_DOS_HEADER>(fileMemory);
+ auto dosHeader = static_cast<PIMAGE_DOS_HEADER>(fileMemory);
// Check DOS header consistency
if (IsBadReadPtr(dosHeader, sizeof(IMAGE_DOS_HEADER))
|| dosHeader->e_magic != IMAGE_DOS_SIGNATURE) {
*errorMessage = QString::fromLatin1("DOS header check failed.");
- return 0;
+ return nullptr;
}
// Retrieve NT header
- IMAGE_NT_HEADERS *ntHeaders = makePtr<IMAGE_NT_HEADERS>(dosHeader, dosHeader->e_lfanew);
+ auto ntHeaders = makePtr<IMAGE_NT_HEADERS>(dosHeader, dosHeader->e_lfanew);
// check NT header consistency
if (IsBadReadPtr(ntHeaders, sizeof(ntHeaders->Signature))
|| ntHeaders->Signature != IMAGE_NT_SIGNATURE
|| IsBadReadPtr(&ntHeaders->FileHeader, sizeof(IMAGE_FILE_HEADER))) {
*errorMessage = QString::fromLatin1("NT header check failed.");
- return 0;
+ return nullptr;
}
// Check magic
const WORD magic = ntHeaders->OptionalHeader.Magic;
@@ -100,14 +100,14 @@ static IMAGE_NT_HEADERS *getNtHeader(void *fileMemory, QString *errorMessage)
if (magic != IMAGE_NT_OPTIONAL_HDR32_MAGIC && magic != IMAGE_NT_OPTIONAL_HDR64_MAGIC) {
*errorMessage = QString::fromLatin1("NT header check failed; magic %1 is none of %2, %3.").
arg(magic).arg(IMAGE_NT_OPTIONAL_HDR32_MAGIC).arg(IMAGE_NT_OPTIONAL_HDR64_MAGIC);
- return 0;
+ return nullptr;
}
#endif
// Check section headers
IMAGE_SECTION_HEADER *sectionHeaders = IMAGE_FIRST_SECTION(ntHeaders);
if (IsBadReadPtr(sectionHeaders, ntHeaders->FileHeader.NumberOfSections * sizeof(IMAGE_SECTION_HEADER))) {
*errorMessage = QString::fromLatin1("NT header section header check failed.");
- return 0;
+ return nullptr;
}
return ntHeaders;
}
@@ -134,22 +134,22 @@ static bool getDebugDirectory(IMAGE_NT_HEADERS *ntHeaders, void *fileMemory,
{
DWORD debugDirRva = 0;
DWORD debugDirSize;
- *debugDir = 0;
+ *debugDir = nullptr;
*count = 0;
#ifdef __GNUC__ // MinGW does not have complete 64bit definitions.
- IMAGE_OPTIONAL_HEADER *optionalHeader = reinterpret_cast<IMAGE_OPTIONAL_HEADER*>(&(ntHeaders->OptionalHeader));
+ auto optionalHeader = reinterpret_cast<IMAGE_OPTIONAL_HEADER*>(&(ntHeaders->OptionalHeader));
debugDirRva = optionalHeader->DataDirectory[IMAGE_DIRECTORY_ENTRY_DEBUG].VirtualAddress;
debugDirSize = optionalHeader->DataDirectory[IMAGE_DIRECTORY_ENTRY_DEBUG].Size;
#else
// Find the virtual address
const bool is64Bit = ntHeaders->OptionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR64_MAGIC;
if (is64Bit) {
- IMAGE_OPTIONAL_HEADER64 *optionalHeader64 = reinterpret_cast<IMAGE_OPTIONAL_HEADER64*>(&(ntHeaders->OptionalHeader));
+ auto optionalHeader64 = reinterpret_cast<IMAGE_OPTIONAL_HEADER64*>(&(ntHeaders->OptionalHeader));
debugDirRva = optionalHeader64->DataDirectory[IMAGE_DIRECTORY_ENTRY_DEBUG].VirtualAddress;
debugDirSize = optionalHeader64->DataDirectory[IMAGE_DIRECTORY_ENTRY_DEBUG].Size;
} else {
- IMAGE_OPTIONAL_HEADER32 *optionalHeader32 = reinterpret_cast<IMAGE_OPTIONAL_HEADER32*>(&(ntHeaders->OptionalHeader));
+ auto optionalHeader32 = reinterpret_cast<IMAGE_OPTIONAL_HEADER32*>(&(ntHeaders->OptionalHeader));
debugDirRva = optionalHeader32->DataDirectory[IMAGE_DIRECTORY_ENTRY_DEBUG].VirtualAddress;
debugDirSize = optionalHeader32->DataDirectory[IMAGE_DIRECTORY_ENTRY_DEBUG].Size;
}
@@ -168,7 +168,7 @@ static bool getDebugDirectory(IMAGE_NT_HEADERS *ntHeaders, void *fileMemory,
// Check
if (IsBadReadPtr(*debugDir, debugDirSize) || debugDirSize < sizeof(IMAGE_DEBUG_DIRECTORY)) {
*errorMessage = QString::fromLatin1("Debug directory corrupted.");
- return 0;
+ return false;
}
*count = debugDirSize / sizeof(IMAGE_DEBUG_DIRECTORY);
@@ -185,19 +185,19 @@ static QString getPDBFileOfCodeViewSection(void *debugInfo, DWORD size)
const DWORD cvSignature = *static_cast<DWORD*>(debugInfo);
if (cvSignature == CV_SIGNATURE_NB10) {
- CV_INFO_PDB20* cvInfo = static_cast<CV_INFO_PDB20*>(debugInfo);
+ auto cvInfo = static_cast<CV_INFO_PDB20*>(debugInfo);
if (IsBadReadPtr(debugInfo, sizeof(CV_INFO_PDB20)))
return QString();
- CHAR* pdbFileName = reinterpret_cast<CHAR*>(cvInfo->PdbFileName);
+ auto pdbFileName = reinterpret_cast<CHAR*>(cvInfo->PdbFileName);
if (IsBadStringPtrA(pdbFileName, UINT_MAX))
return QString();
return QString::fromLocal8Bit(pdbFileName);
}
if (cvSignature == CV_SIGNATURE_RSDS) {
- CV_INFO_PDB70* cvInfo = static_cast<CV_INFO_PDB70*>(debugInfo);
+ auto cvInfo = static_cast<CV_INFO_PDB70*>(debugInfo);
if (IsBadReadPtr(debugInfo, sizeof(CV_INFO_PDB70)))
return QString();
- CHAR* pdbFileName = reinterpret_cast<CHAR*>(cvInfo->PdbFileName);
+ auto pdbFileName = reinterpret_cast<CHAR*>(cvInfo->PdbFileName);
if (IsBadStringPtrA(pdbFileName, UINT_MAX))
return QString();
return QString::fromLocal8Bit(pdbFileName);
diff --git a/src/plugins/debugger/shared/symbolpathsdialog.h b/src/plugins/debugger/shared/symbolpathsdialog.h
index db4c596545..c3534fbcf6 100644
--- a/src/plugins/debugger/shared/symbolpathsdialog.h
+++ b/src/plugins/debugger/shared/symbolpathsdialog.h
@@ -39,7 +39,7 @@ class SymbolPathsDialog : public QDialog
public:
explicit SymbolPathsDialog(QWidget *parent = nullptr);
- ~SymbolPathsDialog();
+ ~SymbolPathsDialog() override;
bool useSymbolCache() const;
bool useSymbolServer() const;
diff --git a/src/plugins/debugger/simplifytype.cpp b/src/plugins/debugger/simplifytype.cpp
index a8a26a9f05..ae519d70d4 100644
--- a/src/plugins/debugger/simplifytype.cpp
+++ b/src/plugins/debugger/simplifytype.cpp
@@ -44,7 +44,7 @@ namespace Internal {
static QString chopConst(QString type)
{
- while (1) {
+ while (true) {
if (type.startsWith(QLatin1String("const")))
type = type.mid(5);
else if (type.startsWith(QLatin1Char(' ')))
diff --git a/src/plugins/debugger/snapshothandler.cpp b/src/plugins/debugger/snapshothandler.cpp
index 61e5d4e181..21dcaf9d1e 100644
--- a/src/plugins/debugger/snapshothandler.cpp
+++ b/src/plugins/debugger/snapshothandler.cpp
@@ -116,10 +116,7 @@ QDebug operator<<(QDebug d, const SnapshotData &f)
A snapshot represents a debugging session.
*/
-SnapshotHandler::SnapshotHandler()
-{
- m_currentIndex = -1;
-}
+SnapshotHandler::SnapshotHandler() = default;
SnapshotHandler::~SnapshotHandler()
{
@@ -196,10 +193,10 @@ QVariant SnapshotHandler::headerData(int section, Qt::Orientation orientation, i
Qt::ItemFlags SnapshotHandler::flags(const QModelIndex &index) const
{
if (index.row() >= m_snapshots.size())
- return 0;
+ return nullptr;
if (index.row() == m_snapshots.size())
return QAbstractTableModel::flags(index);
- return true ? QAbstractTableModel::flags(index) : Qt::ItemFlags(0);
+ return true ? QAbstractTableModel::flags(index) : Qt::ItemFlags({});
}
void SnapshotHandler::activateSnapshot(int index)
@@ -207,7 +204,7 @@ void SnapshotHandler::activateSnapshot(int index)
beginResetModel();
m_currentIndex = index;
//qDebug() << "ACTIVATING INDEX: " << m_currentIndex << " OF " << size();
- Internal::displayDebugger(at(index), true);
+ Internal::displayDebugger(at(index));
endResetModel();
}
diff --git a/src/plugins/debugger/snapshothandler.h b/src/plugins/debugger/snapshothandler.h
index 5f43668d19..6b93b20e32 100644
--- a/src/plugins/debugger/snapshothandler.h
+++ b/src/plugins/debugger/snapshothandler.h
@@ -40,7 +40,7 @@ class SnapshotHandler : public QAbstractTableModel
public:
explicit SnapshotHandler();
- ~SnapshotHandler();
+ ~SnapshotHandler() override;
// Called from SnapshotHandler after a new snapshot has been added
void removeAll();
@@ -58,13 +58,13 @@ public:
private:
// QAbstractTableModel
- int rowCount(const QModelIndex &parent) const;
- int columnCount(const QModelIndex &parent) const;
- QVariant data(const QModelIndex &index, int role) const;
- QVariant headerData(int section, Qt::Orientation orientation, int role) const;
- Qt::ItemFlags flags(const QModelIndex &index) const;
+ int rowCount(const QModelIndex &parent) const override;
+ int columnCount(const QModelIndex &parent) const override;
+ QVariant data(const QModelIndex &index, int role) const override;
+ QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
+ Qt::ItemFlags flags(const QModelIndex &index) const override;
- int m_currentIndex;
+ int m_currentIndex = -1;
QList< QPointer<DebuggerRunTool> > m_snapshots;
};
diff --git a/src/plugins/debugger/snapshotwindow.h b/src/plugins/debugger/snapshotwindow.h
index dfcdaf5e6a..a80284bacd 100644
--- a/src/plugins/debugger/snapshotwindow.h
+++ b/src/plugins/debugger/snapshotwindow.h
@@ -42,8 +42,8 @@ public:
private:
void rowActivated(const QModelIndex &index);
void removeSnapshot(int i);
- void keyPressEvent(QKeyEvent *ev);
- void contextMenuEvent(QContextMenuEvent *ev);
+ void keyPressEvent(QKeyEvent *ev) override;
+ void contextMenuEvent(QContextMenuEvent *ev) override;
SnapshotHandler *m_snapshotHandler;
};
diff --git a/src/plugins/debugger/sourceagent.cpp b/src/plugins/debugger/sourceagent.cpp
index f17f7e5928..d133081b46 100644
--- a/src/plugins/debugger/sourceagent.cpp
+++ b/src/plugins/debugger/sourceagent.cpp
@@ -62,15 +62,13 @@ public:
public:
QPointer<BaseTextEditor> editor;
QPointer<DebuggerEngine> engine;
- TextMark *locationMark;
+ TextMark *locationMark = nullptr;
QString path;
QString producer;
};
SourceAgentPrivate::SourceAgentPrivate()
- : editor(0)
- , locationMark(nullptr)
- , producer(QLatin1String("remote"))
+ : producer(QLatin1String("remote"))
{
}
@@ -78,7 +76,7 @@ SourceAgentPrivate::~SourceAgentPrivate()
{
if (editor)
EditorManager::closeDocument(editor->document());
- editor = 0;
+ editor = nullptr;
delete locationMark;
}
@@ -135,7 +133,7 @@ void SourceAgent::updateLocationMarker()
if (d->locationMark)
d->editor->textDocument()->removeMark(d->locationMark);
delete d->locationMark;
- d->locationMark = 0;
+ d->locationMark = nullptr;
if (d->engine->stackHandler()->currentFrame().file == d->path) {
int lineNumber = d->engine->stackHandler()->currentFrame().line;
diff --git a/src/plugins/debugger/sourcefileshandler.cpp b/src/plugins/debugger/sourcefileshandler.cpp
index ba39fbd1b1..c7761c7b29 100644
--- a/src/plugins/debugger/sourcefileshandler.cpp
+++ b/src/plugins/debugger/sourcefileshandler.cpp
@@ -46,7 +46,7 @@ SourceFilesHandler::SourceFilesHandler(DebuggerEngine *engine)
: m_engine(engine)
{
setObjectName("SourceFilesModel");
- QSortFilterProxyModel *proxy = new QSortFilterProxyModel(this);
+ auto proxy = new QSortFilterProxyModel(this);
proxy->setObjectName("SourceFilesProxyModel");
proxy->setSourceModel(this);
m_proxyModel = proxy;
@@ -78,9 +78,9 @@ QVariant SourceFilesHandler::headerData(int section,
Qt::ItemFlags SourceFilesHandler::flags(const QModelIndex &index) const
{
if (index.row() >= m_fullNames.size())
- return 0;
+ return nullptr;
QFileInfo fi(m_fullNames.at(index.row()));
- return fi.isReadable() ? QAbstractItemModel::flags(index) : Qt::ItemFlags(0);
+ return fi.isReadable() ? QAbstractItemModel::flags(index) : Qt::ItemFlags({});
}
QVariant SourceFilesHandler::data(const QModelIndex &index, int role) const
diff --git a/src/plugins/debugger/sourceutils.cpp b/src/plugins/debugger/sourceutils.cpp
index 1184749c4e..dc42a69296 100644
--- a/src/plugins/debugger/sourceutils.cpp
+++ b/src/plugins/debugger/sourceutils.cpp
@@ -149,7 +149,7 @@ if (true) {
\endcode
*/
-typedef QHash<QString, int> SeenHash;
+using SeenHash = QHash<QString, int>;
static void blockRecursion(const Overview &overview,
const Scope *scope,
@@ -182,27 +182,24 @@ static void blockRecursion(const Overview &overview,
blockRecursion(overview, enclosingScope, line, uninitializedVariables, seenHash, level + 1);
}
-// Inline helper with integer error return codes.
-static inline
-int getUninitializedVariablesI(const Snapshot &snapshot,
- const QString &functionName,
- const QString &file,
- int line,
- QStringList *uninitializedVariables)
+QStringList getUninitializedVariables(const Snapshot &snapshot,
+ const QString &functionName,
+ const QString &file,
+ int line)
{
- uninitializedVariables->clear();
+ QStringList result;
// Find document
if (snapshot.isEmpty() || functionName.isEmpty() || file.isEmpty() || line < 1)
- return 1;
+ return result;
const Snapshot::const_iterator docIt = snapshot.find(file);
if (docIt == snapshot.end())
- return 2;
+ return result;
const Document::Ptr doc = docIt.value();
// Look at symbol at line and find its function. Either it is the
// function itself or some expression/variable.
const Symbol *symbolAtLine = doc->lastVisibleSymbolAt(line, 0);
if (!symbolAtLine)
- return 4;
+ return result;
// First figure out the function to do a safety name check
// and the innermost scope at cursor position
const Function *function = nullptr;
@@ -221,46 +218,25 @@ int getUninitializedVariablesI(const Snapshot &snapshot,
}
}
if (!function || !innerMostScope)
- return 7;
+ return result;
// Compare function names with a bit off fuzz,
// skipping modules from a CDB symbol "lib!foo" or namespaces
// that the code model does not show at this point
Overview overview;
const QString name = overview.prettyName(function->name());
if (!functionName.endsWith(name))
- return 11;
+ return result;
if (functionName.size() > name.size()) {
const char previousChar = functionName.at(functionName.size() - name.size() - 1).toLatin1();
if (previousChar != ':' && previousChar != '!' )
- return 11;
+ return result;
}
// Starting from the innermost block scope, collect declarations.
SeenHash seenHash;
- blockRecursion(overview, innerMostScope, line, uninitializedVariables, &seenHash);
- return 0;
+ blockRecursion(overview, innerMostScope, line, &result, &seenHash);
+ return result;
}
-bool getUninitializedVariables(const Snapshot &snapshot,
- const QString &function,
- const QString &file,
- int line,
- QStringList *uninitializedVariables)
-{
- const int rc = getUninitializedVariablesI(snapshot, function, file, line, uninitializedVariables);
- if (debug) {
- QString msg;
- QTextStream str(&msg);
- str << "getUninitializedVariables() " << function << ' ' << file << ':' << line
- << " returns (int) " << rc << " '"
- << uninitializedVariables->join(QLatin1Char(',')) << '\'';
- if (rc)
- str << " of " << snapshot.size() << " documents";
- qDebug() << msg;
- }
- return rc == 0;
-}
-
-
QString cppFunctionAt(const QString &fileName, int line, int column)
{
const Snapshot snapshot = CppModelManager::instance()->snapshot();
diff --git a/src/plugins/debugger/sourceutils.h b/src/plugins/debugger/sourceutils.h
index be19402844..a64c73295d 100644
--- a/src/plugins/debugger/sourceutils.h
+++ b/src/plugins/debugger/sourceutils.h
@@ -49,9 +49,8 @@ QString cppFunctionAt(const QString &fileName, int line, int column = 0);
// Get variables that are not initialized at a certain line
// of a function from the code model. Shadowed variables will
// be reported using the debugger naming conventions '<shadowed n>'
-bool getUninitializedVariables(const CPlusPlus::Snapshot &snapshot,
- const QString &function, const QString &file, int line,
- QStringList *uninitializedVariables);
+QStringList getUninitializedVariables(const CPlusPlus::Snapshot &snapshot,
+ const QString &function, const QString &file, int line);
ContextData getLocationContext(TextEditor::TextDocument *document, int lineNumber);
diff --git a/src/plugins/debugger/stackframe.cpp b/src/plugins/debugger/stackframe.cpp
index a92ea661d4..df69c284b4 100644
--- a/src/plugins/debugger/stackframe.cpp
+++ b/src/plugins/debugger/stackframe.cpp
@@ -44,9 +44,7 @@ namespace Internal {
//
////////////////////////////////////////////////////////////////////////
-StackFrame::StackFrame()
- : language(CppLanguage), line(-1), address(0), usable(false)
-{}
+StackFrame::StackFrame() = default;
void StackFrame::clear()
{
@@ -84,7 +82,7 @@ QList<StackFrame> StackFrame::parseFrames(const GdbMi &data, const DebuggerRunPa
{
StackFrames frames;
frames.reserve(data.children().size());
- foreach (const GdbMi &item, data.children())
+ for (const GdbMi &item : data.children())
frames.append(parseFrame(item, rp));
return frames;
}
diff --git a/src/plugins/debugger/stackframe.h b/src/plugins/debugger/stackframe.h
index 916d578b52..e51736b518 100644
--- a/src/plugins/debugger/stackframe.h
+++ b/src/plugins/debugger/stackframe.h
@@ -53,21 +53,21 @@ public:
void fixQrcFrame(const DebuggerRunParameters &rp);
public:
- DebuggerLanguage language;
+ DebuggerLanguage language = CppLanguage;
QString level;
QString function;
QString file; // We try to put an absolute file name in there.
QString module; // Sometimes something like "/usr/lib/libstdc++.so.6"
QString receiver; // Used in ScriptEngine only.
- qint32 line;
- quint64 address;
- bool usable;
+ qint32 line = -1;
+ quint64 address = 0;
+ bool usable = false;
QString context; // Opaque value produced and consumed by the native backends.
Q_DECLARE_TR_FUNCTIONS(Debugger::Internal::StackHandler)
};
-typedef QList<StackFrame> StackFrames;
+using StackFrames = QList<StackFrame>;
} // namespace Internal
} // namespace Debugger
diff --git a/src/plugins/debugger/stackhandler.cpp b/src/plugins/debugger/stackhandler.cpp
index a4f6c650e2..c4bb6630b0 100644
--- a/src/plugins/debugger/stackhandler.cpp
+++ b/src/plugins/debugger/stackhandler.cpp
@@ -77,9 +77,7 @@ StackHandler::StackHandler(DebuggerEngine *engine)
this, &StackHandler::reloadFullStack);
}
-StackHandler::~StackHandler()
-{
-}
+StackHandler::~StackHandler() = default;
int StackHandler::rowCount(const QModelIndex &parent) const
{
@@ -157,7 +155,7 @@ QVariant StackHandler::headerData(int section, Qt::Orientation orient, int role)
Qt::ItemFlags StackHandler::flags(const QModelIndex &index) const
{
if (index.row() >= m_stackFrames.size() + m_canExpand)
- return 0;
+ return nullptr;
if (index.row() == m_stackFrames.size())
return QAbstractTableModel::flags(index);
const StackFrame &frame = m_stackFrames.at(index.row());
@@ -361,7 +359,7 @@ void StackHandler::saveTaskFile()
}
QTextStream str(&file);
- foreach (const StackFrame &frame, frames()) {
+ for (const StackFrame &frame : frames()) {
if (frame.isUsable())
str << frame.file << '\t' << frame.line << "\tstack\tFrame #" << frame.level << '\n';
}
diff --git a/src/plugins/debugger/threaddata.h b/src/plugins/debugger/threaddata.h
index a011d88b81..e54d0f3771 100644
--- a/src/plugins/debugger/threaddata.h
+++ b/src/plugins/debugger/threaddata.h
@@ -41,7 +41,7 @@ namespace Internal {
class ThreadId
{
public:
- ThreadId() : m_id(-1) {}
+ ThreadId() = default;
explicit ThreadId(qint64 id) : m_id(id) {}
bool isValid() const { return m_id != -1; }
@@ -50,7 +50,7 @@ public:
bool operator!=(const ThreadId other) const { return m_id != other.m_id; }
private:
- qint64 m_id;
+ qint64 m_id = -1;
};
////////////////////////////////////////////////////////////////////////
@@ -62,13 +62,7 @@ private:
/*! A structure containing information about a single thread. */
struct ThreadData
{
- ThreadData()
- {
- frameLevel = -1;
- lineNumber = -1;
- address = 0;
- stopped = true;
- }
+ ThreadData() = default;
enum {
IdColumn,
@@ -92,12 +86,12 @@ struct ThreadData
QString groupId;
QString targetId;
QString core;
- bool stopped;
+ bool stopped = true;
// State information when stopped.
- qint32 frameLevel;
- qint32 lineNumber;
- quint64 address;
+ qint32 frameLevel = -1;
+ qint32 lineNumber = -1;
+ quint64 address = 0;
QString function;
QString module;
QString fileName;
@@ -106,7 +100,7 @@ struct ThreadData
QString name;
};
-typedef QVector<ThreadData> Threads;
+using Threads = QVector<ThreadData>;
} // namespace Internal
} // namespace Debugger
diff --git a/src/plugins/debugger/threadshandler.cpp b/src/plugins/debugger/threadshandler.cpp
index ef32e52df1..4ba1284fdb 100644
--- a/src/plugins/debugger/threadshandler.cpp
+++ b/src/plugins/debugger/threadshandler.cpp
@@ -62,7 +62,7 @@ public:
: threadData(data), handler(handler)
{}
- QVariant data(int column, int role) const
+ QVariant data(int column, int role) const override
{
switch (role) {
case Qt::DisplayRole:
@@ -83,9 +83,9 @@ public:
return QVariant();
}
- Qt::ItemFlags flags(int column) const
+ Qt::ItemFlags flags(int column) const override
{
- return threadData.stopped ? TreeItem::flags(column) : Qt::ItemFlags(0);
+ return threadData.stopped ? TreeItem::flags(column) : Qt::ItemFlags({});
}
QString threadToolTip() const
@@ -233,7 +233,6 @@ public:
ThreadsHandler::ThreadsHandler(DebuggerEngine *engine)
: m_engine(engine)
{
- m_resetLocationScheduled = false;
setObjectName(QLatin1String("ThreadsModel"));
setHeader({
QLatin1String(" ") + tr("ID") + QLatin1String(" "),
diff --git a/src/plugins/debugger/threadshandler.h b/src/plugins/debugger/threadshandler.h
index 3bd015fc48..8f0b662afe 100644
--- a/src/plugins/debugger/threadshandler.h
+++ b/src/plugins/debugger/threadshandler.h
@@ -87,7 +87,7 @@ private:
DebuggerEngine *m_engine;
ThreadId m_currentId;
- bool m_resetLocationScheduled;
+ bool m_resetLocationScheduled = false;
QHash<QString, QString> m_pidForGroupId;
};
diff --git a/src/plugins/debugger/unstartedappwatcherdialog.cpp b/src/plugins/debugger/unstartedappwatcherdialog.cpp
index bca9a442e6..703c1ea5ba 100644
--- a/src/plugins/debugger/unstartedappwatcherdialog.cpp
+++ b/src/plugins/debugger/unstartedappwatcherdialog.cpp
@@ -57,8 +57,8 @@ namespace Internal {
static bool isLocal(RunConfiguration *runConfiguration)
{
- Target *target = runConfiguration ? runConfiguration->target() : 0;
- Kit *kit = target ? target->kit() : 0;
+ Target *target = runConfiguration ? runConfiguration->target() : nullptr;
+ Kit *kit = target ? target->kit() : nullptr;
return DeviceTypeKitInformation::deviceTypeId(kit) == ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE;
}
@@ -94,8 +94,8 @@ UnstartedAppWatcherDialog::UnstartedAppWatcherDialog(QWidget *parent)
m_kitChooser->setVisible(true);
Project *project = ProjectTree::currentProject();
- Target *activeTarget = project ? project->activeTarget() : 0;
- Kit *kit = activeTarget ? activeTarget->kit() : 0;
+ Target *activeTarget = project ? project->activeTarget() : nullptr;
+ Kit *kit = activeTarget ? activeTarget->kit() : nullptr;
if (kit)
m_kitChooser->setCurrentKitId(kit->id());
@@ -140,14 +140,14 @@ UnstartedAppWatcherDialog::UnstartedAppWatcherDialog(QWidget *parent)
m_waitingLabel = new QLabel(QString(), this);
m_waitingLabel->setAlignment(Qt::AlignCenter);
- QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Close, this);
+ auto buttonBox = new QDialogButtonBox(QDialogButtonBox::Close, this);
m_watchingPushButton = buttonBox->addButton(tr("Start Watching"), QDialogButtonBox::ActionRole);
m_watchingPushButton->setCheckable(true);
m_watchingPushButton->setChecked(false);
m_watchingPushButton->setEnabled(false);
m_watchingPushButton->setDefault(true);
- QFormLayout *mainLayout = new QFormLayout(this);
+ auto mainLayout = new QFormLayout(this);
mainLayout->addRow(new QLabel(tr("Kit: "), this), m_kitChooser);
mainLayout->addRow(new QLabel(tr("Executable: "), this), pathLayout);
mainLayout->addRow(m_hideOnAttachCheckBox);
@@ -177,7 +177,7 @@ UnstartedAppWatcherDialog::UnstartedAppWatcherDialog(QWidget *parent)
bool UnstartedAppWatcherDialog::event(QEvent *e)
{
if (e->type() == QEvent::ShortcutOverride) {
- QKeyEvent *ke = static_cast<QKeyEvent *>(e);
+ auto ke = static_cast<QKeyEvent *>(e);
if (ke->key() == Qt::Key_Escape && !ke->modifiers()) {
ke->accept();
return true;
@@ -191,7 +191,7 @@ void UnstartedAppWatcherDialog::selectExecutable()
QString path;
Project *project = ProjectTree::currentProject();
- Target *activeTarget = project ? project->activeTarget() : 0;
+ Target *activeTarget = project ? project->activeTarget() : nullptr;
if (activeTarget) {
if (RunConfiguration *runConfig = activeTarget->activeRunConfiguration()) {
diff --git a/src/plugins/debugger/watchdata.cpp b/src/plugins/debugger/watchdata.cpp
index d6f9ca8c64..128b790f30 100644
--- a/src/plugins/debugger/watchdata.cpp
+++ b/src/plugins/debugger/watchdata.cpp
@@ -236,9 +236,9 @@ public:
void decodeArrayHelper(int childSize)
{
const QByteArray ba = QByteArray::fromHex(rawData.toUtf8());
- const T *p = (const T *) ba.data();
+ const auto p = (const T*)ba.data();
for (int i = 0, n = ba.size() / sizeof(T); i < n; ++i) {
- WatchItem *child = new WatchItem;
+ auto child = new WatchItem;
child->arrayIndex = i;
child->value = decodeItemHelper(p[i]);
child->size = childSize;
@@ -409,7 +409,7 @@ void WatchItem::parseHelper(const GdbMi &input, bool maySort)
for (int i = 0, n = int(children.children().size()); i != n; ++i) {
const GdbMi &subinput = children.children().at(i);
- WatchItem *child = new WatchItem;
+ auto child = new WatchItem;
if (childType.isValid())
child->type = childType.data();
if (childNumChild.isValid())
@@ -505,7 +505,7 @@ QString WatchItem::toToolTip() const
if (arrayIndex >= 0)
formatToolTipRow(str, tr("Array Index"), QString::number(arrayIndex));
if (size)
- formatToolTipRow(str, tr("Static Object Size"), tr("%n bytes", 0, size));
+ formatToolTipRow(str, tr("Static Object Size"), tr("%n bytes", nullptr, size));
formatToolTipRow(str, tr("Internal ID"), internalName());
str << "</table></body></html>";
return res;
diff --git a/src/plugins/debugger/watchdelegatewidgets.cpp b/src/plugins/debugger/watchdelegatewidgets.cpp
index 3bbda65996..4a6d9bbba4 100644
--- a/src/plugins/debugger/watchdelegatewidgets.cpp
+++ b/src/plugins/debugger/watchdelegatewidgets.cpp
@@ -58,7 +58,7 @@ class IntegerValidator : public QValidator
{
public:
explicit IntegerValidator(QObject *parent);
- virtual State validate(QString &, int &) const;
+ State validate(QString &, int &) const override;
int base() const { return m_base; }
void setBase(int b) { m_base = b; }
diff --git a/src/plugins/debugger/watchhandler.cpp b/src/plugins/debugger/watchhandler.cpp
index 17afe1b407..3b72e428d8 100644
--- a/src/plugins/debugger/watchhandler.cpp
+++ b/src/plugins/debugger/watchhandler.cpp
@@ -102,15 +102,15 @@ const char KeyProperty[] = "KeyProperty";
static QVariant createItemDelegate();
-typedef QList<MemoryMarkup> MemoryMarkupList;
+using MemoryMarkupList = QList<MemoryMarkup>;
// Helper functionality to indicate the area of a member variable in
// a vector representing the memory area by a unique color
// number and tooltip. Parts of it will be overwritten when recursing
// over the children.
-typedef QPair<int, QString> ColorNumberToolTip;
-typedef QVector<ColorNumberToolTip> ColorNumberToolTips;
+using ColorNumberToolTip = QPair<int, QString>;
+using ColorNumberToolTips = QVector<ColorNumberToolTip>;
struct TypeInfo
{
@@ -126,7 +126,7 @@ static const WatchModel *watchModel(const WatchItem *item)
template <class T>
void readNumericVectorHelper(std::vector<double> *v, const QByteArray &ba)
{
- const T *p = (const T *) ba.data();
+ const auto p = (const T*)ba.data();
const int n = ba.size() / sizeof(T);
v->resize(n);
// Losing precision in case of 64 bit ints is ok here, as the result
@@ -292,7 +292,7 @@ public:
setSessionValue("DebuggerSeparateWidgetGeometry", geometry());
}
- ~SeparatedView()
+ ~SeparatedView() override
{
saveGeometry();
}
@@ -332,7 +332,7 @@ public:
if (key == needle)
return w;
}
- return 0;
+ return nullptr;
}
template <class T> T *prepareObject(const WatchItem *item)
@@ -530,7 +530,7 @@ static QString parentName(const QString &iname)
static QString niceTypeHelper(const QString &typeIn)
{
- typedef QMap<QString, QString> Cache;
+ using Cache = QMap<QString, QString>;
static Cache cache;
const Cache::const_iterator it = cache.constFind(typeIn);
if (it != cache.constEnd())
@@ -651,7 +651,7 @@ static QString quoteUnprintable(const QString &str)
QString encoded;
if (theUnprintableBase == -1) {
- foreach (const QChar c, str) {
+ for (const QChar c : str) {
int u = c.unicode();
if (c.isPrint())
encoded += c;
@@ -667,7 +667,7 @@ static QString quoteUnprintable(const QString &str)
return encoded;
}
- foreach (const QChar c, str) {
+ for (const QChar c : str) {
if (c.isPrint())
encoded += c;
else if (theUnprintableBase == 8)
@@ -766,7 +766,7 @@ static inline quint64 pointerValue(QString data)
if (blankPos != -1)
data.truncate(blankPos);
data.remove('`');
- return data.toULongLong(0, 0);
+ return data.toULongLong(nullptr, 0);
}
// Return the type used for editing
@@ -1067,8 +1067,8 @@ bool WatchModel::setData(const QModelIndex &idx, const QVariant &value, int role
if (auto dev = ev.as<QDropEvent>()) {
if (dev->mimeData()->hasText()) {
QString exp;
- QString data = dev->mimeData()->text();
- foreach (const QChar c, data)
+ const QString data = dev->mimeData()->text();
+ for (const QChar c : data)
exp.append(c.isPrint() ? c : QChar(' '));
m_handler->watchVariable(exp);
//ev->acceptProposedAction();
@@ -1156,7 +1156,7 @@ bool WatchModel::setData(const QModelIndex &idx, const QVariant &value, int role
Qt::ItemFlags WatchModel::flags(const QModelIndex &idx) const
{
if (!idx.isValid())
- return 0;
+ return nullptr;
const WatchItem *item = nonRootItemForIndex(idx);
if (!item)
@@ -1783,6 +1783,12 @@ QMenu *WatchModel::createMemoryMenu(WatchItem *item, QWidget *parent)
createPointerActions,
[this, item, pos] { addVariableMemoryView(true, item, true, pos); });
+ addAction(menu, tr("Open Memory View Showing Stack Layout"),
+ true,
+ [this, pos] { addStackLayoutMemoryView(true, pos); });
+
+ menu->addSeparator();
+
addAction(menu, tr("Open Memory Editor at Object's Address (0x%1)").arg(item->address, 0, 16),
tr("Open Memory Editor at Object's Address"),
item->address,
@@ -1793,9 +1799,8 @@ QMenu *WatchModel::createMemoryMenu(WatchItem *item, QWidget *parent)
createPointerActions,
[this, item, pos] { addVariableMemoryView(false, item, true, pos); });
-
addAction(menu, tr("Open Memory Editor Showing Stack Layout"),
- item && item->isLocal(),
+ true,
[this, pos] { addStackLayoutMemoryView(false, pos); });
addAction(menu, tr("Open Memory Editor..."),
@@ -1853,7 +1858,7 @@ QMenu *WatchModel::createFormatMenu(WatchItem *item, QWidget *parent)
[this, iname] {
// FIXME: Extend to multi-selection.
//const QModelIndexList active = activeRows();
- //foreach (const QModelIndex &idx, active)
+ //for (const QModelIndex &idx : active)
// setModelData(LocalsIndividualFormatRole, AutomaticFormat, idx);
setIndividualFormat(iname, AutomaticFormat);
m_engine->updateLocals();
@@ -1873,7 +1878,7 @@ QMenu *WatchModel::createFormatMenu(WatchItem *item, QWidget *parent)
addCheckableAction(menu, spacer + tr("Automatic"), true, typeFormat == AutomaticFormat,
[this, item] {
//const QModelIndexList active = activeRows();
- //foreach (const QModelIndex &idx, active)
+ //for (const QModelIndex &idx : active)
// setModelData(LocalsTypeFormatRole, AutomaticFormat, idx);
setTypeFormat(item->type, AutomaticFormat);
m_engine->updateLocals();
@@ -1892,7 +1897,7 @@ QMenu *WatchModel::createFormatMenu(WatchItem *item, QWidget *parent)
static inline QString msgArrayFormat(int n)
{
- return WatchModel::tr("Array of %n items", 0, n);
+ return WatchModel::tr("Array of %n items", nullptr, n);
}
QString WatchModel::nameForFormat(int format)
@@ -1955,7 +1960,7 @@ WatchHandler::~WatchHandler()
// Do it manually to prevent calling back in model destructors
// after m_cache is destroyed.
delete m_model;
- m_model = 0;
+ m_model = nullptr;
}
void WatchHandler::cleanup()
@@ -1982,7 +1987,7 @@ void WatchHandler::insertItems(const GdbMi &data)
QSet<WatchItem *> itemsToSort;
const bool sortStructMembers = boolSetting(SortStructMembers);
- foreach (const GdbMi &child, data.children()) {
+ for (const GdbMi &child : data.children()) {
auto item = new WatchItem;
item->parse(child, sortStructMembers);
const TypeInfo ti = m_model->m_reportedTypeInfo.value(item->type);
@@ -2262,7 +2267,7 @@ void WatchModel::showEditValue(const WatchItem *item)
QTC_ASSERT(0 < imformat && imformat < 32, return);
QImage im(width, height, QImage::Format(imformat));
std::memcpy(im.bits(), bits, nbytes);
- ImageViewer *v = m_separatedView->prepareObject<ImageViewer>(item);
+ auto v = m_separatedView->prepareObject<ImageViewer>(item);
v->setInfo(item->address ?
tr("%1 Object at %2").arg(item->type, item->hexAddress()) :
tr("%1 Object at Unknown Address").arg(item->type) + " " +
@@ -2302,7 +2307,7 @@ void WatchModel::showEditValue(const WatchItem *item)
QTC_ASSERT(ndims == 2, qDebug() << "Display format: " << format; return);
QByteArray ba = QByteArray::fromHex(item->editvalue.toUtf8());
- void (*reader)(const char *p, QString *res, int size) = 0;
+ void (*reader)(const char *p, QString *res, int size) = nullptr;
if (innerType == "int")
reader = &readOne<qlonglong>;
else if (innerType == "uint")
@@ -2422,7 +2427,7 @@ const WatchItem *WatchHandler::findCppLocalVariable(const QString &name) const
// iname.insert(localsPrefix.size(), "this.");
// if (const WatchData *wd = findData(iname))
// return wd;
- return 0;
+ return nullptr;
}
void WatchModel::setTypeFormat(const QString &type0, int format)
@@ -2574,7 +2579,7 @@ void WatchHandler::appendWatchersAndTooltipRequests(DebuggerCommand *cmd)
void WatchHandler::addDumpers(const GdbMi &dumpers)
{
- foreach (const GdbMi &dumper, dumpers.children()) {
+ for (const GdbMi &dumper : dumpers.children()) {
DisplayFormats formats;
formats.append(RawFormat);
QString reportedFormats = dumper["formats"].data();
@@ -2641,7 +2646,7 @@ QSet<QString> WatchHandler::expandedINames() const
void WatchHandler::recordTypeInfo(const GdbMi &typeInfo)
{
if (typeInfo.type() == GdbMi::List) {
- foreach (const GdbMi &s, typeInfo.children()) {
+ for (const GdbMi &s : typeInfo.children()) {
QString typeName = fromHex(s["name"].data());
TypeInfo ti(s["size"].data().toUInt());
m_model->m_reportedTypeInfo.insert(typeName, ti);
@@ -2661,15 +2666,15 @@ public:
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &,
const QModelIndex &index) const override
{
- const WatchModelBase *model = qobject_cast<const WatchModelBase *>(index.model());
- QTC_ASSERT(model, return 0);
+ const auto model = qobject_cast<const WatchModelBase *>(index.model());
+ QTC_ASSERT(model, return nullptr);
WatchItem *item = model->nonRootItemForIndex(index);
- QTC_ASSERT(item, return 0);
+ QTC_ASSERT(item, return nullptr);
// Value column: Custom editor. Apply integer-specific settings.
if (index.column() == 1) {
- QVariant::Type editType = QVariant::Type(item->editType());
+ auto editType = QVariant::Type(item->editType());
if (editType == QVariant::Bool)
return new BooleanComboBox(parent);
diff --git a/src/plugins/debugger/watchhandler.h b/src/plugins/debugger/watchhandler.h
index ee2f9a6d62..9a289ef7c4 100644
--- a/src/plugins/debugger/watchhandler.h
+++ b/src/plugins/debugger/watchhandler.h
@@ -37,14 +37,14 @@ class DebuggerCommand;
class DebuggerEngine;
class WatchModel;
-typedef QVector<DisplayFormat> DisplayFormats;
+using DisplayFormats = QVector<DisplayFormat>;
class WatchModelBase : public Utils::TreeModel<WatchItem, WatchItem>
{
Q_OBJECT
public:
- WatchModelBase() {}
+ WatchModelBase() = default;
signals:
void currentIndexRequested(const QModelIndex &idx);
diff --git a/src/plugins/debugger/watchwindow.cpp b/src/plugins/debugger/watchwindow.cpp
index 008250f3e7..cf31ff7187 100644
--- a/src/plugins/debugger/watchwindow.cpp
+++ b/src/plugins/debugger/watchwindow.cpp
@@ -41,7 +41,7 @@ namespace Debugger {
namespace Internal {
WatchTreeView::WatchTreeView(WatchType type)
- : m_type(type), m_sliderPosition(0)
+ : m_type(type)
{
setObjectName("WatchWindow");
setWindowTitle(tr("Locals and Expressions"));
diff --git a/src/plugins/debugger/watchwindow.h b/src/plugins/debugger/watchwindow.h
index 7827b32232..bd75e00549 100644
--- a/src/plugins/debugger/watchwindow.h
+++ b/src/plugins/debugger/watchwindow.h
@@ -62,7 +62,7 @@ private:
void currentChanged(const QModelIndex &current, const QModelIndex &previous) override;
WatchType m_type;
- int m_sliderPosition;
+ int m_sliderPosition = 0;
};
} // namespace Internal
diff --git a/src/plugins/designer/codemodelhelpers.cpp b/src/plugins/designer/codemodelhelpers.cpp
index b0b575f2cb..9f376a114a 100644
--- a/src/plugins/designer/codemodelhelpers.cpp
+++ b/src/plugins/designer/codemodelhelpers.cpp
@@ -64,7 +64,7 @@ public:
explicit SearchFunction(const char *name);
FunctionList operator()(const DocumentPtr &doc);
- virtual bool visit(CPlusPlus::Function * f);
+ bool visit(CPlusPlus::Function * f) override;
private:
const size_t m_length;
diff --git a/src/plugins/designer/formeditorplugin.cpp b/src/plugins/designer/formeditorplugin.cpp
index 5198582c20..3972bd8f30 100644
--- a/src/plugins/designer/formeditorplugin.cpp
+++ b/src/plugins/designer/formeditorplugin.cpp
@@ -160,8 +160,6 @@ static QString otherFile()
if (current.isEmpty())
return QString();
const Utils::MimeType currentMimeType = Utils::mimeTypeForFile(current);
- if (!currentMimeType.isValid())
- return QString();
// Determine potential suffixes of candidate files
// 'ui' -> 'cpp', 'cpp/h' -> 'ui'.
QStringList candidateSuffixes;
diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp
index 9407684c20..bf98680f5d 100644
--- a/src/plugins/fakevim/fakevimhandler.cpp
+++ b/src/plugins/fakevim/fakevimhandler.cpp
@@ -910,7 +910,7 @@ QDebug operator<<(QDebug ts, const Range &range)
ExCommand::ExCommand(const QString &c, const QString &a, const Range &r)
- : cmd(c), hasBang(false), args(a), range(r), count(1)
+ : cmd(c), args(a), range(r)
{}
bool ExCommand::matches(const QString &min, const QString &full) const
diff --git a/src/plugins/fakevim/fakevimhandler.h b/src/plugins/fakevim/fakevimhandler.h
index 153cf83d50..25ce463554 100644
--- a/src/plugins/fakevim/fakevimhandler.h
+++ b/src/plugins/fakevim/fakevimhandler.h
@@ -158,7 +158,6 @@ public:
Signal<void(const QString &msg)> extraInformationChanged;
Signal<void(const QList<QTextEdit::ExtraSelection> &selection)> selectionChanged;
Signal<void(const QString &needle)> highlightMatches;
- Signal<void(QString *error)> writeAllRequested;
Signal<void(bool *moved, bool *forward, QTextCursor *cursor)> moveToMatchingParenthesis;
Signal<void(bool *result, QChar c)> checkForElectricCharacter;
Signal<void(int beginLine, int endLine, QChar typedChar)> indentRegion;
diff --git a/src/plugins/fakevim/fakevimplugin.cpp b/src/plugins/fakevim/fakevimplugin.cpp
index 5c267e2b8b..443b36f4d9 100644
--- a/src/plugins/fakevim/fakevimplugin.cpp
+++ b/src/plugins/fakevim/fakevimplugin.cpp
@@ -1677,13 +1677,13 @@ void FakeVimPluginPrivate::editorOpened(IEditor *editor)
triggerAction(Core::Constants::SPLIT_SIDE_BY_SIDE);
else if (key == "W" || key == "<C-W>")
triggerAction(Core::Constants::GOTO_NEXT_SPLIT);
- else if (key.contains("RIGHT") || key == "L" || key == "<S-L>")
+ else if (key.contains("RIGHT") || key == "L" || key == "<S-L>" || key == "<C-L>")
moveSomewhere(handler, &moveRightWeight, key == "<S-L>" ? -1 : count);
- else if (key.contains("LEFT") || key == "H" || key == "<S-H>")
+ else if (key.contains("LEFT") || key == "H" || key == "<S-H>" || key == "<C-H>")
moveSomewhere(handler, &moveLeftWeight, key == "<S-H>" ? -1 : count);
- else if (key.contains("UP") || key == "K" || key == "<S-K>")
+ else if (key.contains("UP") || key == "K" || key == "<S-K>" || key == "<C-K>")
moveSomewhere(handler, &moveUpWeight, key == "<S-K>" ? -1 : count);
- else if (key.contains("DOWN") || key == "J" || key == "<S-J>")
+ else if (key.contains("DOWN") || key == "J" || key == "<S-J>" || key == "<C-J>")
moveSomewhere(handler, &moveDownWeight, key == "<S-J>" ? -1 : count);
else
qDebug() << "UNKNOWN WINDOW COMMAND: <C-W>" << map;
@@ -1921,14 +1921,16 @@ void FakeVimPluginPrivate::handleExCommand(FakeVimHandler *handler, bool *handle
if (!saved)
handler->showMessage(MessageError, Tr::tr("File not saved"));
- } else if (cmd.matches("wa", "wall")) {
- // :w[all]
+ } else if (cmd.matches("wa", "wall") || cmd.matches("wqa", "wqall")) {
+ // :wa[ll] :wqa[ll]
triggerAction(Core::Constants::SAVEALL);
const QList<IDocument *> failed = DocumentManager::modifiedDocuments();
if (failed.isEmpty())
handler->showMessage(MessageInfo, Tr::tr("Saving succeeded"));
else
handler->showMessage(MessageError, Tr::tr("%n files not saved", 0, failed.size()));
+ if (cmd.matches("wqa", "wqall"))
+ emit delayedQuitAllRequested(cmd.hasBang);
} else if (cmd.matches("q", "quit")) {
// :q[uit]
emit delayedQuitRequested(cmd.hasBang, m_editorToHandler.key(handler));
diff --git a/src/plugins/genericprojectmanager/genericmakestep.cpp b/src/plugins/genericprojectmanager/genericmakestep.cpp
index 37951d0308..9753140156 100644
--- a/src/plugins/genericprojectmanager/genericmakestep.cpp
+++ b/src/plugins/genericprojectmanager/genericmakestep.cpp
@@ -25,282 +25,19 @@
#include "genericmakestep.h"
#include "genericprojectconstants.h"
-#include "genericproject.h"
-#include "ui_genericmakestep.h"
-#include "genericbuildconfiguration.h"
-#include <projectexplorer/buildsteplist.h>
-#include <projectexplorer/gnumakeparser.h>
-#include <projectexplorer/kitinformation.h>
-#include <projectexplorer/projectexplorer.h>
#include <projectexplorer/projectexplorerconstants.h>
-#include <projectexplorer/target.h>
-#include <projectexplorer/toolchain.h>
-#include <qtsupport/qtkitinformation.h>
-#include <qtsupport/qtparser.h>
-
-#include <utils/stringutils.h>
-#include <utils/qtcassert.h>
-#include <utils/qtcprocess.h>
-
-#include <QDir>
-
-using namespace Core;
using namespace ProjectExplorer;
namespace GenericProjectManager {
namespace Internal {
const char GENERIC_MS_ID[] = "GenericProjectManager.GenericMakeStep";
-const char GENERIC_MS_DISPLAY_NAME[] = QT_TRANSLATE_NOOP("GenericProjectManager::Internal::GenericMakeStep",
- "Make");
-
-const char BUILD_TARGETS_KEY[] = "GenericProjectManager.GenericMakeStep.BuildTargets";
-const char MAKE_ARGUMENTS_KEY[] = "GenericProjectManager.GenericMakeStep.MakeArguments";
-const char MAKE_COMMAND_KEY[] = "GenericProjectManager.GenericMakeStep.MakeCommand";
-const char CLEAN_KEY[] = "GenericProjectManager.GenericMakeStep.Clean";
GenericMakeStep::GenericMakeStep(BuildStepList *parent, const QString &buildTarget)
- : AbstractProcessStep(parent, GENERIC_MS_ID)
-{
- setDefaultDisplayName(QCoreApplication::translate("GenericProjectManager::Internal::GenericMakeStep",
- GENERIC_MS_DISPLAY_NAME));
- setBuildTarget(buildTarget, true);
-}
-
-bool GenericMakeStep::init(QList<const BuildStep *> &earlierSteps)
-{
- BuildConfiguration *bc = buildConfiguration();
- if (!bc)
- bc = target()->activeBuildConfiguration();
- if (!bc)
- emit addTask(Task::buildConfigurationMissingTask());
-
- ToolChain *tc = ToolChainKitInformation::toolChain(target()->kit(), ProjectExplorer::Constants::CXX_LANGUAGE_ID);
- if (!tc)
- emit addTask(Task::compilerMissingTask());
-
- if (!bc || !tc) {
- emitFaultyConfigurationMessage();
- return false;
- }
-
- ProcessParameters *pp = processParameters();
- pp->setMacroExpander(bc->macroExpander());
- pp->setWorkingDirectory(bc->buildDirectory().toString());
- Utils::Environment env = bc->environment();
- Utils::Environment::setupEnglishOutput(&env);
- pp->setEnvironment(env);
- pp->setCommand(makeCommand(bc->environment()));
- pp->setArguments(allArguments());
- pp->resolveAll();
-
- // If we are cleaning, then make can fail with an error code, but that doesn't mean
- // we should stop the clean queue
- // That is mostly so that rebuild works on an already clean project
- setIgnoreReturnValue(m_clean);
-
- setOutputParser(new GnuMakeParser());
- IOutputParser *parser = target()->kit()->createOutputParser();
- if (parser)
- appendOutputParser(parser);
- outputParser()->setWorkingDirectory(pp->effectiveWorkingDirectory());
-
- return AbstractProcessStep::init(earlierSteps);
-}
-
-void GenericMakeStep::setClean(bool clean)
-{
- m_clean = clean;
-}
-
-bool GenericMakeStep::isClean() const
-{
- return m_clean;
-}
-
-QVariantMap GenericMakeStep::toMap() const
-{
- QVariantMap map(AbstractProcessStep::toMap());
-
- map.insert(BUILD_TARGETS_KEY, m_buildTargets);
- map.insert(MAKE_ARGUMENTS_KEY, m_makeArguments);
- map.insert(MAKE_COMMAND_KEY, m_makeCommand);
- map.insert(CLEAN_KEY, m_clean);
- return map;
-}
-
-bool GenericMakeStep::fromMap(const QVariantMap &map)
-{
- m_buildTargets = map.value(BUILD_TARGETS_KEY).toStringList();
- m_makeArguments = map.value(MAKE_ARGUMENTS_KEY).toString();
- m_makeCommand = map.value(MAKE_COMMAND_KEY).toString();
- m_clean = map.value(CLEAN_KEY).toBool();
-
- return BuildStep::fromMap(map);
-}
-
-QString GenericMakeStep::allArguments() const
-{
- QString args = m_makeArguments;
- Utils::QtcProcess::addArgs(&args, m_buildTargets);
- return args;
-}
-
-QString GenericMakeStep::makeCommand(const Utils::Environment &environment) const
-{
- QString command = m_makeCommand;
- if (command.isEmpty()) {
- ToolChain *tc = ToolChainKitInformation::toolChain(target()->kit(), ProjectExplorer::Constants::CXX_LANGUAGE_ID);
- if (tc)
- command = tc->makeCommand(environment);
- else
- command = "make";
- }
- return command;
-}
-
-void GenericMakeStep::run(QFutureInterface<bool> &fi)
-{
- AbstractProcessStep::run(fi);
-}
-
-BuildStepConfigWidget *GenericMakeStep::createConfigWidget()
-{
- return new GenericMakeStepConfigWidget(this);
-}
-
-bool GenericMakeStep::immutable() const
-{
- return false;
-}
-
-bool GenericMakeStep::buildsTarget(const QString &target) const
-{
- return m_buildTargets.contains(target);
-}
-
-void GenericMakeStep::setBuildTarget(const QString &target, bool on)
-{
- QStringList old = m_buildTargets;
- if (on && !old.contains(target))
- old << target;
- else if (!on && old.contains(target))
- old.removeOne(target);
-
- m_buildTargets = old;
-}
-
-//
-// GenericMakeStepConfigWidget
-//
-
-GenericMakeStepConfigWidget::GenericMakeStepConfigWidget(GenericMakeStep *makeStep) :
- m_makeStep(makeStep)
-{
- m_ui = new Ui::GenericMakeStep;
- m_ui->setupUi(this);
-
- const auto pro = static_cast<GenericProject *>(m_makeStep->target()->project());
- const auto buildTargets = pro->buildTargets();
- for (const QString &target : buildTargets) {
- auto item = new QListWidgetItem(target, m_ui->targetsList);
- item->setFlags(item->flags() | Qt::ItemIsUserCheckable);
- item->setCheckState(m_makeStep->buildsTarget(item->text()) ? Qt::Checked : Qt::Unchecked);
- }
-
- m_ui->makeLineEdit->setText(m_makeStep->m_makeCommand);
- m_ui->makeArgumentsLineEdit->setText(m_makeStep->m_makeArguments);
- updateMakeOverrideLabel();
- updateDetails();
-
- connect(m_ui->targetsList, &QListWidget::itemChanged,
- this, &GenericMakeStepConfigWidget::itemChanged);
- connect(m_ui->makeLineEdit, &QLineEdit::textEdited,
- this, &GenericMakeStepConfigWidget::makeLineEditTextEdited);
- connect(m_ui->makeArgumentsLineEdit, &QLineEdit::textEdited,
- this, &GenericMakeStepConfigWidget::makeArgumentsLineEditTextEdited);
-
- connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::settingsChanged,
- this, &GenericMakeStepConfigWidget::updateMakeOverrideLabel);
- connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::settingsChanged,
- this, &GenericMakeStepConfigWidget::updateDetails);
-
- connect(m_makeStep->target(), &Target::kitChanged,
- this, &GenericMakeStepConfigWidget::updateMakeOverrideLabel);
-
- pro->subscribeSignal(&BuildConfiguration::environmentChanged, this, [this]() {
- if (static_cast<BuildConfiguration *>(sender())->isActive()) {
- updateMakeOverrideLabel();
- updateDetails();
- }
- });
- connect(pro, &Project::activeProjectConfigurationChanged,
- this, [this](ProjectConfiguration *pc) {
- if (pc && pc->isActive()) {
- updateMakeOverrideLabel();
- updateDetails();
- }
- });
-}
-
-GenericMakeStepConfigWidget::~GenericMakeStepConfigWidget()
-{
- delete m_ui;
-}
-
-QString GenericMakeStepConfigWidget::displayName() const
-{
- return tr("Make", "GenericMakestep display name.");
-}
-
-void GenericMakeStepConfigWidget::updateMakeOverrideLabel()
-{
- BuildConfiguration *bc = m_makeStep->buildConfiguration();
- if (!bc)
- bc = m_makeStep->target()->activeBuildConfiguration();
-
- m_ui->makeLabel->setText(tr("Override %1:").arg(QDir::toNativeSeparators(m_makeStep->makeCommand(bc->environment()))));
-}
-
-void GenericMakeStepConfigWidget::updateDetails()
-{
- BuildConfiguration *bc = m_makeStep->buildConfiguration();
- if (!bc)
- bc = m_makeStep->target()->activeBuildConfiguration();
-
- ProcessParameters param;
- param.setMacroExpander(bc->macroExpander());
- param.setWorkingDirectory(bc->buildDirectory().toString());
- param.setEnvironment(bc->environment());
- param.setCommand(m_makeStep->makeCommand(bc->environment()));
- param.setArguments(m_makeStep->allArguments());
- m_summaryText = param.summary(displayName());
- emit updateSummary();
-}
-
-QString GenericMakeStepConfigWidget::summaryText() const
-{
- return m_summaryText;
-}
-
-void GenericMakeStepConfigWidget::itemChanged(QListWidgetItem *item)
-{
- m_makeStep->setBuildTarget(item->text(), item->checkState() & Qt::Checked);
- updateDetails();
-}
-
-void GenericMakeStepConfigWidget::makeLineEditTextEdited()
-{
- m_makeStep->m_makeCommand = m_ui->makeLineEdit->text();
- updateDetails();
-}
-
-void GenericMakeStepConfigWidget::makeArgumentsLineEditTextEdited()
+ : MakeStep(parent, GENERIC_MS_ID, buildTarget, {"all", "clean"})
{
- m_makeStep->m_makeArguments = m_ui->makeArgumentsLineEdit->text();
- updateDetails();
}
//
@@ -315,8 +52,7 @@ GenericMakeAllStepFactory::GenericMakeAllStepFactory()
};
registerStep<Step>(GENERIC_MS_ID);
- setDisplayName(QCoreApplication::translate(
- "GenericProjectManager::Internal::GenericMakeStep", GENERIC_MS_DISPLAY_NAME));
+ setDisplayName(MakeStep::defaultDisplayName());
setSupportedProjectType(Constants::GENERICPROJECT_ID);
setSupportedStepLists({ProjectExplorer::Constants::BUILDSTEPS_BUILD,
ProjectExplorer::Constants::BUILDSTEPS_DEPLOY});
@@ -338,8 +74,7 @@ GenericMakeCleanStepFactory::GenericMakeCleanStepFactory()
};
registerStep<Step>(GENERIC_MS_ID);
- setDisplayName(QCoreApplication::translate(
- "GenericProjectManager::Internal::GenericMakeStep", GENERIC_MS_DISPLAY_NAME));
+ setDisplayName(MakeStep::defaultDisplayName());
setSupportedProjectType(Constants::GENERICPROJECT_ID);
setSupportedStepList(ProjectExplorer::Constants::BUILDSTEPS_CLEAN);
}
diff --git a/src/plugins/genericprojectmanager/genericmakestep.h b/src/plugins/genericprojectmanager/genericmakestep.h
index 8a5758b100..6fe6bc4798 100644
--- a/src/plugins/genericprojectmanager/genericmakestep.h
+++ b/src/plugins/genericprojectmanager/genericmakestep.h
@@ -25,70 +25,19 @@
#pragma once
-#include <projectexplorer/abstractprocessstep.h>
+#include <projectexplorer/makestep.h>
QT_FORWARD_DECLARE_CLASS(QListWidgetItem);
namespace GenericProjectManager {
namespace Internal {
-class GenericMakeStepConfigWidget;
-
-namespace Ui { class GenericMakeStep; }
-
-class GenericMakeStep : public ProjectExplorer::AbstractProcessStep
+class GenericMakeStep : public ProjectExplorer::MakeStep
{
Q_OBJECT
- friend class GenericMakeStepConfigWidget;
-
public:
explicit GenericMakeStep(ProjectExplorer::BuildStepList *parent, const QString &buildTarget = {});
-
- bool init(QList<const BuildStep *> &earlierSteps) override;
- void run(QFutureInterface<bool> &fi) override;
-
- ProjectExplorer::BuildStepConfigWidget *createConfigWidget() override;
- bool immutable() const override;
- bool buildsTarget(const QString &target) const;
- void setBuildTarget(const QString &target, bool on);
- QString allArguments() const;
- QString makeCommand(const Utils::Environment &environment) const;
-
- void setClean(bool clean);
- bool isClean() const;
-
-private:
- QVariantMap toMap() const override;
- bool fromMap(const QVariantMap &map) override;
-
- QStringList m_buildTargets;
- QString m_makeArguments;
- QString m_makeCommand;
- bool m_clean = false;
-};
-
-class GenericMakeStepConfigWidget : public ProjectExplorer::BuildStepConfigWidget
-{
- Q_OBJECT
-
-public:
- explicit GenericMakeStepConfigWidget(GenericMakeStep *makeStep);
- ~GenericMakeStepConfigWidget() override;
-
- QString displayName() const override;
- QString summaryText() const override;
-
-private:
- void itemChanged(QListWidgetItem *item);
- void makeLineEditTextEdited();
- void makeArgumentsLineEditTextEdited();
- void updateMakeOverrideLabel();
- void updateDetails();
-
- Ui::GenericMakeStep *m_ui;
- GenericMakeStep *m_makeStep;
- QString m_summaryText;
};
class GenericMakeAllStepFactory : public ProjectExplorer::BuildStepFactory
diff --git a/src/plugins/genericprojectmanager/genericmakestep.ui b/src/plugins/genericprojectmanager/genericmakestep.ui
deleted file mode 100644
index f3b7d9c8ac..0000000000
--- a/src/plugins/genericprojectmanager/genericmakestep.ui
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>GenericProjectManager::Internal::GenericMakeStep</class>
- <widget class="QWidget" name="GenericProjectManager::Internal::GenericMakeStep">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>399</width>
- <height>279</height>
- </rect>
- </property>
- <layout class="QFormLayout" name="formLayout">
- <property name="fieldGrowthPolicy">
- <enum>QFormLayout::ExpandingFieldsGrow</enum>
- </property>
- <property name="margin">
- <number>0</number>
- </property>
- <item row="0" column="0">
- <widget class="QLabel" name="makeLabel">
- <property name="text">
- <string>Override %1:</string>
- </property>
- <property name="buddy">
- <cstring>makeLineEdit</cstring>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QLineEdit" name="makeLineEdit"/>
- </item>
- <item row="1" column="0">
- <widget class="QLabel" name="makeArgumentsLabel">
- <property name="text">
- <string>Make arguments:</string>
- </property>
- <property name="buddy">
- <cstring>makeArgumentsLineEdit</cstring>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QLineEdit" name="makeArgumentsLineEdit"/>
- </item>
- <item row="2" column="0">
- <widget class="QLabel" name="targetsLabel">
- <property name="text">
- <string>Targets:</string>
- </property>
- <property name="buddy">
- <cstring>targetsList</cstring>
- </property>
- </widget>
- </item>
- <item row="2" column="1">
- <widget class="QListWidget" name="targetsList"/>
- </item>
- </layout>
- </widget>
- <resources/>
- <connections/>
-</ui>
diff --git a/src/plugins/genericprojectmanager/genericproject.cpp b/src/plugins/genericprojectmanager/genericproject.cpp
index 10d8867b7e..f1a47947eb 100644
--- a/src/plugins/genericprojectmanager/genericproject.cpp
+++ b/src/plugins/genericprojectmanager/genericproject.cpp
@@ -475,12 +475,6 @@ void GenericProject::activeBuildConfigurationWasChanged()
refresh(Everything);
}
-QStringList GenericProject::buildTargets() const
-{
- const QStringList targets = { "all", "clean" };
- return targets;
-}
-
Project::RestoreResult GenericProject::fromMap(const QVariantMap &map, QString *errorMessage)
{
const RestoreResult result = Project::fromMap(map, errorMessage);
diff --git a/src/plugins/genericprojectmanager/genericproject.h b/src/plugins/genericprojectmanager/genericproject.h
index 2a294ba917..28002743f8 100644
--- a/src/plugins/genericprojectmanager/genericproject.h
+++ b/src/plugins/genericprojectmanager/genericproject.h
@@ -40,8 +40,6 @@ public:
explicit GenericProject(const Utils::FileName &filename);
~GenericProject() override;
- QStringList buildTargets() const;
-
bool addFiles(const QStringList &filePaths);
bool removeFiles(const QStringList &filePaths);
bool setFiles(const QStringList &filePaths);
diff --git a/src/plugins/genericprojectmanager/genericprojectmanager.pro b/src/plugins/genericprojectmanager/genericprojectmanager.pro
index 110eaac850..3032f1edfc 100644
--- a/src/plugins/genericprojectmanager/genericprojectmanager.pro
+++ b/src/plugins/genericprojectmanager/genericprojectmanager.pro
@@ -17,8 +17,6 @@ SOURCES = genericproject.cpp \
genericbuildconfiguration.cpp \
filesselectionwizardpage.cpp
-FORMS += genericmakestep.ui
-
equals(TEST, 1) {
SOURCES += genericprojectplugin_test.cpp
DEFINES += SRCDIR=\\\"$$PWD\\\"
diff --git a/src/plugins/genericprojectmanager/genericprojectmanager.qbs b/src/plugins/genericprojectmanager/genericprojectmanager.qbs
index cb062d1f52..273e58e791 100644
--- a/src/plugins/genericprojectmanager/genericprojectmanager.qbs
+++ b/src/plugins/genericprojectmanager/genericprojectmanager.qbs
@@ -25,7 +25,6 @@ QtcPlugin {
"genericbuildconfiguration.h",
"genericmakestep.cpp",
"genericmakestep.h",
- "genericmakestep.ui",
"genericproject.cpp",
"genericproject.h",
"genericprojectconstants.h",
diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp
index e2fa7fe8d5..5797619b4e 100644
--- a/src/plugins/git/gitclient.cpp
+++ b/src/plugins/git/gitclient.cpp
@@ -3371,10 +3371,10 @@ GitRemote::GitRemote(const QString &url)
// Check for local remotes (refer to the root or relative path)
// On Windows, local paths typically starts with <drive>:
- if (url.startsWith('/') || url.startsWith('.')
+ if (url.startsWith("file://") || url.startsWith('/') || url.startsWith('.')
|| (HostOsInfo::isWindowsHost() && url[1] == ':')) {
protocol = "file";
- path = QDir::fromNativeSeparators(url);
+ path = QDir::fromNativeSeparators(url.startsWith("file://") ? url.mid(7) : url);
isValid = QDir(path).exists() || QDir(path + ".git").exists();
return;
}
diff --git a/src/plugins/git/mergetool.cpp b/src/plugins/git/mergetool.cpp
index 511a762acf..8a224f09a7 100644
--- a/src/plugins/git/mergetool.cpp
+++ b/src/plugins/git/mergetool.cpp
@@ -235,6 +235,13 @@ void MergeTool::readData()
prompt(tr("Unchanged File"), tr("Was the merge successful?"));
} else if (m_line.startsWith("Continue merging")) {
prompt(tr("Continue Merging"), tr("Continue merging other unresolved paths?"));
+ } else if (m_line.startsWith("Hit return")) {
+ QMessageBox::warning(
+ Core::ICore::dialogParent(), tr("Merge Tool"),
+ tr("<html><body><p>Merge tool is not configured.</p>\n"
+ "<p>Run git config --global merge.tool &lt;tool&gt; to configure it, "
+ "then try again</p></body></html>"));
+ m_process->kill();
} else if (m_line.endsWith('\n')) {
// Skip unidentified lines
m_line.clear();
diff --git a/src/plugins/glsleditor/glslcompletionassist.cpp b/src/plugins/glsleditor/glslcompletionassist.cpp
index 2effaa7fa3..4fb33ac17e 100644
--- a/src/plugins/glsleditor/glslcompletionassist.cpp
+++ b/src/plugins/glsleditor/glslcompletionassist.cpp
@@ -161,15 +161,15 @@ static QIcon glslIcon(IconTypes iconType)
switch (iconType) {
case IconTypeType:
- return Icons::iconForType(Icons::ClassIconType);
+ return Utils::CodeModelIcon::iconForType(Utils::CodeModelIcon::Class);
case IconTypeConst:
- return Icons::iconForType(Icons::EnumeratorIconType);
+ return Utils::CodeModelIcon::iconForType(Utils::CodeModelIcon::Enumerator);
case IconTypeKeyword:
- return Icons::iconForType(Icons::KeywordIconType);
+ return Utils::CodeModelIcon::iconForType(Utils::CodeModelIcon::Keyword);
case IconTypeFunction:
- return Icons::iconForType(Icons::FuncPublicIconType);
+ return Utils::CodeModelIcon::iconForType(Utils::CodeModelIcon::FuncPublic);
case IconTypeVariable:
- return Icons::iconForType(Icons::VarPublicIconType);
+ return Utils::CodeModelIcon::iconForType(Utils::CodeModelIcon::VarPublic);
case IconTypeAttribute: {
static const QIcon icon =
Icon({{member, Theme::IconsCodeModelAttributeColor}}, Icon::Tint).icon();
@@ -187,7 +187,7 @@ static QIcon glslIcon(IconTypes iconType)
}
case IconTypeOther:
default:
- return Icons::iconForType(Icons::NamespaceIconType);
+ return Utils::CodeModelIcon::iconForType(Utils::CodeModelIcon::Namespace);
}
}
diff --git a/src/plugins/glsleditor/glsleditor.cpp b/src/plugins/glsleditor/glsleditor.cpp
index 108ef83879..8280c9713e 100644
--- a/src/plugins/glsleditor/glsleditor.cpp
+++ b/src/plugins/glsleditor/glsleditor.cpp
@@ -92,7 +92,7 @@ public:
protected:
using GLSL::Visitor::visit;
- virtual void endVisit(CompoundStatementAST *ast)
+ void endVisit(CompoundStatementAST *ast) override
{
if (ast->symbol) {
QTextCursor tc(textDocument);
diff --git a/src/plugins/help/helpplugin.cpp b/src/plugins/help/helpplugin.cpp
index 84428fe97b..405d05bebc 100644
--- a/src/plugins/help/helpplugin.cpp
+++ b/src/plugins/help/helpplugin.cpp
@@ -523,7 +523,7 @@ void HelpPluginPrivate::updateSideBarSource(const QUrl &newUrl)
void HelpPluginPrivate::setupHelpEngineIfNeeded()
{
LocalHelpManager::setEngineNeedsUpdate();
- if (ModeManager::currentMode() == m_mode.id()
+ if (ModeManager::currentModeId() == m_mode.id()
|| LocalHelpManager::contextHelpOption() == HelpManager::ExternalHelpAlways)
LocalHelpManager::setupGuiHelpEngine();
}
diff --git a/src/plugins/imageviewer/imageview.cpp b/src/plugins/imageviewer/imageview.cpp
index 881dde6b9f..d377810c4e 100644
--- a/src/plugins/imageviewer/imageview.cpp
+++ b/src/plugins/imageviewer/imageview.cpp
@@ -230,7 +230,7 @@ void ImageView::exportMultiImages()
const QFileInfo origFi = m_file->filePath().toFileInfo();
const QSize size = svgSize();
const QString title =
- tr("Export a Series of Images from %1 (%2x%3")
+ tr("Export a Series of Images from %1 (%2x%3)")
.arg(origFi.fileName()).arg(size.width()).arg(size.height());
MultiExportDialog multiExportDialog;
multiExportDialog.setWindowTitle(title);
diff --git a/src/plugins/ios/iosbuildstep.cpp b/src/plugins/ios/iosbuildstep.cpp
index 61fb670c90..3c04cc7080 100644
--- a/src/plugins/ios/iosbuildstep.cpp
+++ b/src/plugins/ios/iosbuildstep.cpp
@@ -73,8 +73,6 @@ bool IosBuildStep::init(QList<const BuildStep *> &earlierSteps)
{
BuildConfiguration *bc = buildConfiguration();
if (!bc)
- bc = target()->activeBuildConfiguration();
- if (!bc)
emit addTask(Task::buildConfigurationMissingTask());
ToolChain *tc = ToolChainKitInformation::toolChain(target()->kit(), ProjectExplorer::Constants::CXX_LANGUAGE_ID);
@@ -140,7 +138,7 @@ QStringList IosBuildStep::defaultArguments() const
QStringList res;
Kit *kit = target()->kit();
ToolChain *tc = ToolChainKitInformation::toolChain(kit, ProjectExplorer::Constants::CXX_LANGUAGE_ID);
- switch (target()->activeBuildConfiguration()->buildType()) {
+ switch (buildConfiguration()->buildType()) {
case BuildConfiguration::Debug :
res << "-configuration" << "Debug";
break;
@@ -152,7 +150,7 @@ QStringList IosBuildStep::defaultArguments() const
break;
default:
qCWarning(iosLog) << "IosBuildStep had an unknown buildType "
- << target()->activeBuildConfiguration()->buildType();
+ << buildConfiguration()->buildType();
}
if (tc->typeId() == ProjectExplorer::Constants::GCC_TOOLCHAIN_TYPEID
|| tc->typeId() == ProjectExplorer::Constants::CLANG_TOOLCHAIN_TYPEID) {
@@ -161,7 +159,7 @@ QStringList IosBuildStep::defaultArguments() const
}
if (!SysRootKitInformation::sysRoot(kit).isEmpty())
res << "-sdk" << SysRootKitInformation::sysRoot(kit).toString();
- res << "SYMROOT=" + target()->activeBuildConfiguration()->buildDirectory().toString();
+ res << "SYMROOT=" + buildConfiguration()->buildDirectory().toString();
return res;
}
@@ -257,8 +255,6 @@ QString IosBuildStepConfigWidget::displayName() const
void IosBuildStepConfigWidget::updateDetails()
{
BuildConfiguration *bc = m_buildStep->buildConfiguration();
- if (!bc)
- bc = m_buildStep->target()->activeBuildConfiguration();
ProcessParameters param;
param.setMacroExpander(bc->macroExpander());
diff --git a/src/plugins/ios/iosconfigurations.cpp b/src/plugins/ios/iosconfigurations.cpp
index 4e8dd41aa2..ecddb7df50 100644
--- a/src/plugins/ios/iosconfigurations.cpp
+++ b/src/plugins/ios/iosconfigurations.cpp
@@ -63,6 +63,8 @@
#include <QStandardPaths>
#include <QTimer>
+#include <memory>
+
using namespace ProjectExplorer;
using namespace QtSupport;
using namespace Utils;
@@ -298,7 +300,8 @@ void IosConfigurations::updateAutomaticKitList()
kit->unblockNotification();
} else {
qCDebug(kitSetupLog) << " - Setting up new kit";
- kit = new Kit;
+ auto newKit = std::make_unique<Kit>();
+ kit = newKit.get();
kit->blockNotification();
kit->setAutoDetected(true);
const QString baseDisplayName = isSimulatorDeviceId(pDeviceType)
@@ -307,7 +310,7 @@ void IosConfigurations::updateAutomaticKitList()
kit->setUnexpandedDisplayName(baseDisplayName);
setupKit(kit, pDeviceType, platformToolchains, debuggerId, sdk.path, qtVersion);
kit->unblockNotification();
- KitManager::registerKit(kit);
+ KitManager::registerKit(std::move(newKit));
}
resultingKits.insert(kit);
}
@@ -330,8 +333,8 @@ IosConfigurations *IosConfigurations::instance()
void IosConfigurations::initialize()
{
- QTC_CHECK(m_instance == 0);
- m_instance = new IosConfigurations(0);
+ QTC_CHECK(m_instance == nullptr);
+ m_instance = new IosConfigurations(nullptr);
}
bool IosConfigurations::ignoreAllDevices()
@@ -596,7 +599,7 @@ QList<ToolChain *> IosToolChainFactory::autoDetect(const QList<ToolChain *> &exi
{
QList<ClangToolChain *> existingClangToolChains = clangToolChains(existingToolChains);
const QList<XcodePlatform> platforms = XcodeProbe::detectPlatforms().values();
- QList<ClangToolChain *> toolChains;
+ QList<ToolChain *> toolChains;
toolChains.reserve(platforms.size());
foreach (const XcodePlatform &platform, platforms) {
for (const XcodePlatform::ToolchainTarget &target : platform.targets) {
@@ -614,7 +617,7 @@ QList<ToolChain *> IosToolChainFactory::autoDetect(const QList<ToolChain *> &exi
createOrAdd(platformToolchains.second, ProjectExplorer::Constants::CXX_LANGUAGE_ID);
}
}
- return Utils::transform(toolChains, [](ClangToolChain *tc) -> ToolChain * { return tc; });
+ return toolChains;
}
QString DevelopmentTeam::identifier() const
diff --git a/src/plugins/ios/iosdeploystepfactory.cpp b/src/plugins/ios/iosdeploystepfactory.cpp
index b6a3506e91..cb748edd94 100644
--- a/src/plugins/ios/iosdeploystepfactory.cpp
+++ b/src/plugins/ios/iosdeploystepfactory.cpp
@@ -36,7 +36,7 @@ namespace Internal {
IosDeployStepFactory::IosDeployStepFactory()
{
registerStep<IosDeployStep>(IosDeployStep::Id);
- setDisplayName(tr("Deploy to iOS device or emulator"));
+ setDisplayName(IosDeployStep::tr("Deploy to iOS device or emulator"));
setSupportedStepList(ProjectExplorer::Constants::BUILDSTEPS_DEPLOY);
setSupportedDeviceTypes({Constants::IOS_DEVICE_TYPE, Constants::IOS_SIMULATOR_TYPE});
setRepeatable(false);
diff --git a/src/plugins/ios/iosdeploystepfactory.h b/src/plugins/ios/iosdeploystepfactory.h
index 73d01f0599..d94a79f57f 100644
--- a/src/plugins/ios/iosdeploystepfactory.h
+++ b/src/plugins/ios/iosdeploystepfactory.h
@@ -32,8 +32,6 @@ namespace Internal {
class IosDeployStepFactory : public ProjectExplorer::BuildStepFactory
{
- Q_OBJECT
-
public:
IosDeployStepFactory();
};
diff --git a/src/plugins/ios/iosdsymbuildstep.cpp b/src/plugins/ios/iosdsymbuildstep.cpp
index 2cf4834bc6..3fc3c090dc 100644
--- a/src/plugins/ios/iosdsymbuildstep.cpp
+++ b/src/plugins/ios/iosdsymbuildstep.cpp
@@ -64,8 +64,6 @@ IosDsymBuildStep::IosDsymBuildStep(BuildStepList *parent) :
bool IosDsymBuildStep::init(QList<const BuildStep *> &earlierSteps)
{
BuildConfiguration *bc = buildConfiguration();
- if (!bc)
- bc = target()->activeBuildConfiguration();
ProcessParameters *pp = processParameters();
pp->setMacroExpander(bc->macroExpander());
@@ -277,8 +275,6 @@ QString IosDsymBuildStepConfigWidget::displayName() const
void IosDsymBuildStepConfigWidget::updateDetails()
{
BuildConfiguration *bc = m_buildStep->buildConfiguration();
- if (!bc)
- bc = m_buildStep->target()->activeBuildConfiguration();
ProcessParameters param;
param.setMacroExpander(bc->macroExpander());
diff --git a/src/plugins/ios/iosdsymbuildstep.h b/src/plugins/ios/iosdsymbuildstep.h
index 39d01ef667..58200826f2 100644
--- a/src/plugins/ios/iosdsymbuildstep.h
+++ b/src/plugins/ios/iosdsymbuildstep.h
@@ -90,7 +90,6 @@ private:
class IosDsymBuildStepFactory : public ProjectExplorer::BuildStepFactory
{
- Q_OBJECT
public:
explicit IosDsymBuildStepFactory();
};
diff --git a/src/plugins/ios/iosqtversion.cpp b/src/plugins/ios/iosqtversion.cpp
index 1c18d07ffa..5c2b0e8278 100644
--- a/src/plugins/ios/iosqtversion.cpp
+++ b/src/plugins/ios/iosqtversion.cpp
@@ -85,7 +85,7 @@ QList<Abi> IosQtVersion::detectQtAbis() const
for (int i = 0; i < abis.count(); ++i) {
abis[i] = Abi(abis.at(i).architecture(),
abis.at(i).os(),
- Abi::GenericDarwinFlavor,
+ Abi::GenericFlavor,
abis.at(i).binaryFormat(),
abis.at(i).wordWidth());
}
diff --git a/src/plugins/ios/iossettingswidget.cpp b/src/plugins/ios/iossettingswidget.cpp
index 02168a79ad..4f7cd37f58 100644
--- a/src/plugins/ios/iossettingswidget.cpp
+++ b/src/plugins/ios/iossettingswidget.cpp
@@ -155,7 +155,7 @@ void IosSettingsWidget::onCreate()
.arg(name).arg(response.simUdid), Utils::StdOutFormat);
} else {
statusDialog->addMessage(tr("Simulator device (%1) creation failed.\nError: %2").
- arg(name).arg(QString::fromUtf8(response.commandOutput)),
+ arg(name).arg(response.commandOutput),
Utils::StdErrFormat);
}
};
diff --git a/src/plugins/ios/iostoolhandler.cpp b/src/plugins/ios/iostoolhandler.cpp
index 95d0ede5ec..0ca710bda9 100644
--- a/src/plugins/ios/iostoolhandler.cpp
+++ b/src/plugins/ios/iostoolhandler.cpp
@@ -926,7 +926,7 @@ void IosSimulatorToolHandlerPrivate::installAppOnSimulator()
didTransferApp(m_bundlePath, m_deviceId, IosToolHandler::Success);
} else {
errorMsg(IosToolHandler::tr("Application install on simulator failed. %1")
- .arg(QString::fromLocal8Bit(response.commandOutput)));
+ .arg(response.commandOutput));
didTransferApp(m_bundlePath, m_deviceId, IosToolHandler::Failure);
}
emit q->finished(q);
@@ -990,7 +990,7 @@ void IosSimulatorToolHandlerPrivate::launchAppOnSimulator(const QStringList &ext
} else {
m_pid = -1;
errorMsg(IosToolHandler::tr("Application launch on simulator failed. %1")
- .arg(QString::fromLocal8Bit(response.commandOutput)));
+ .arg(response.commandOutput));
didStartApp(m_bundlePath, m_deviceId, Ios::IosToolHandler::Failure);
stop(-1);
q->finished(q);
diff --git a/src/plugins/ios/simulatorcontrol.cpp b/src/plugins/ios/simulatorcontrol.cpp
index e96bbfffe4..723f17e95c 100644
--- a/src/plugins/ios/simulatorcontrol.cpp
+++ b/src/plugins/ios/simulatorcontrol.cpp
@@ -77,17 +77,17 @@ static bool checkForTimeout(const chrono::high_resolution_clock::time_point &sta
return timedOut;
}
-static bool runCommand(QString command, const QStringList &args, QByteArray *output)
+static bool runCommand(QString command, const QStringList &args, QString *output)
{
Utils::SynchronousProcess p;
p.setTimeoutS(-1);
Utils::SynchronousProcessResponse resp = p.runBlocking(command, args);
if (output)
- *output = resp.allRawOutput();
+ *output = resp.stdOut();
return resp.result == Utils::SynchronousProcessResponse::Finished;
}
-static bool runSimCtlCommand(QStringList args, QByteArray *output)
+static bool runSimCtlCommand(QStringList args, QString *output)
{
args.prepend("simctl");
return runCommand("xcrun", args, output);
@@ -100,11 +100,10 @@ static bool launchSimulator(const QString &simUdid) {
if (IosConfigurations::xcodeVersion() >= QVersionNumber(9)) {
// For XCode 9 boot the second device instead of launching simulator app twice.
- QByteArray psOutput;
+ QString psOutput;
if (runCommand("ps", {"-A", "-o", "comm"}, &psOutput)) {
- QByteArray simulatorCommand = simulatorAppPath.toLatin1();
- for (const QByteArray &comm : psOutput.split('\n')) {
- if (comm == simulatorCommand)
+ for (const QString &comm : psOutput.split('\n')) {
+ if (comm == simulatorAppPath)
return runSimCtlCommand(QStringList({"boot", simUdid}), nullptr);
}
} else {
@@ -120,9 +119,9 @@ static bool launchSimulator(const QString &simUdid) {
static QList<DeviceTypeInfo> getAvailableDeviceTypes()
{
QList<DeviceTypeInfo> deviceTypes;
- QByteArray output;
+ QString output;
runSimCtlCommand({"list", "-j", deviceTypeTag}, &output);
- QJsonDocument doc = QJsonDocument::fromJson(output);
+ QJsonDocument doc = QJsonDocument::fromJson(output.toUtf8());
if (!doc.isNull()) {
const QJsonArray runtimesArray = doc.object().value(deviceTypeTag).toArray();
foreach (const QJsonValue deviceTypeValue, runtimesArray) {
@@ -144,9 +143,9 @@ static QList<DeviceTypeInfo> getAvailableDeviceTypes()
static QList<RuntimeInfo> getAvailableRuntimes()
{
QList<RuntimeInfo> runtimes;
- QByteArray output;
+ QString output;
runSimCtlCommand({"list", "-j", runtimesTag}, &output);
- QJsonDocument doc = QJsonDocument::fromJson(output);
+ QJsonDocument doc = QJsonDocument::fromJson(output.toUtf8());
if (!doc.isNull()) {
const QJsonArray runtimesArray = doc.object().value(runtimesTag).toArray();
foreach (const QJsonValue runtimeValue, runtimesArray) {
@@ -220,9 +219,9 @@ QList<SimulatorInfo> SimulatorControl::availableSimulators()
static QList<SimulatorInfo> getAllSimulatorDevices()
{
QList<SimulatorInfo> simulatorDevices;
- QByteArray output;
+ QString output;
runSimCtlCommand({"list", "-j", devicesTag}, &output);
- QJsonDocument doc = QJsonDocument::fromJson(output);
+ QJsonDocument doc = QJsonDocument::fromJson(output.toUtf8());
if (!doc.isNull()) {
const QJsonObject runtimeObject = doc.object().value(devicesTag).toObject();
foreach (const QString &runtime, runtimeObject.keys()) {
@@ -512,7 +511,7 @@ void SimulatorControlPrivate::launchApp(QFutureInterface<SimulatorControl::Respo
}
if (runSimCtlCommand(args, &response.commandOutput)) {
- const QByteArray pIdStr = response.commandOutput.trimmed().split(' ').last().trimmed();
+ const QString pIdStr = response.commandOutput.trimmed().split(' ').last().trimmed();
bool validPid = false;
response.pID = pIdStr.toLongLong(&validPid);
response.success = validPid;
@@ -566,7 +565,7 @@ void SimulatorControlPrivate::createSimulator(QFutureInterface<SimulatorControl:
deviceType.identifier,
runtime.identifier},
&response.commandOutput);
- response.simUdid = response.success ? QString::fromLatin1(response.commandOutput.trimmed())
+ response.simUdid = response.success ? response.commandOutput.trimmed()
: QString();
}
diff --git a/src/plugins/ios/simulatorcontrol.h b/src/plugins/ios/simulatorcontrol.h
index bb46035a00..4b8e9388d4 100644
--- a/src/plugins/ios/simulatorcontrol.h
+++ b/src/plugins/ios/simulatorcontrol.h
@@ -84,7 +84,7 @@ public:
QString simUdid;
bool success = false;
qint64 pID = -1;
- QByteArray commandOutput = "";
+ QString commandOutput;
};
public:
diff --git a/src/plugins/ios/simulatoroperationdialog.cpp b/src/plugins/ios/simulatoroperationdialog.cpp
index 6e687d8437..818b588194 100644
--- a/src/plugins/ios/simulatoroperationdialog.cpp
+++ b/src/plugins/ios/simulatoroperationdialog.cpp
@@ -98,10 +98,10 @@ void SimulatorOperationDialog::addMessage(const SimulatorInfo &siminfo,
addMessage(tr("%1, %2\nOperation %3 completed successfully.").arg(siminfo.name)
.arg(siminfo.runtimeName).arg(context), Utils::StdOutFormat);
} else {
- QByteArray erroMsg = response.commandOutput.trimmed();
+ QString erroMsg = response.commandOutput.trimmed();
QString message = tr("%1, %2\nOperation %3 failed.\nUDID: %4\nError: %5").arg(siminfo.name)
.arg(siminfo.runtimeName).arg(context).arg(siminfo.identifier)
- .arg(erroMsg.isEmpty() ? tr("Unknown") : QString::fromUtf8(erroMsg));
+ .arg(erroMsg.isEmpty() ? tr("Unknown") : erroMsg);
addMessage(message, Utils::StdErrFormat);
qCDebug(iosCommon) << message;
}
diff --git a/src/plugins/nim/nimplugin.cpp b/src/plugins/nim/nimplugin.cpp
index 9421cdc1ac..248d5e99e0 100644
--- a/src/plugins/nim/nimplugin.cpp
+++ b/src/plugins/nim/nimplugin.cpp
@@ -76,9 +76,6 @@ bool NimPlugin::initialize(const QStringList &arguments, QString *errorMessage)
ToolChainManager::registerLanguage(Constants::C_NIMLANGUAGE_ID, Constants::C_NIMLANGUAGE_NAME);
- RunControl::registerWorker<NimRunConfiguration, SimpleTargetRunner>
- (ProjectExplorer::Constants::NORMAL_RUN_MODE);
-
TextEditor::SnippetProvider::registerGroup(Constants::C_NIMSNIPPETSGROUP_ID,
tr("Nim", "SnippetProvider"),
&NimEditorFactory::decorateEditor);
diff --git a/src/plugins/nim/project/nimcompilerbuildstep.cpp b/src/plugins/nim/project/nimcompilerbuildstep.cpp
index df68620a24..d193fbd745 100644
--- a/src/plugins/nim/project/nimcompilerbuildstep.cpp
+++ b/src/plugins/nim/project/nimcompilerbuildstep.cpp
@@ -292,7 +292,7 @@ void NimCompilerBuildStep::updateTargetNimFile()
NimCompilerBuildStepFactory::NimCompilerBuildStepFactory()
{
registerStep<NimCompilerBuildStep>(Constants::C_NIMCOMPILERBUILDSTEP_ID);
- setDisplayName(tr("Nim Compiler Build Step"));
+ setDisplayName(NimCompilerBuildStep::tr("Nim Compiler Build Step"));
setSupportedStepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
setSupportedConfiguration(Constants::C_NIMBUILDCONFIGURATION_ID);
setRepeatable(false);
diff --git a/src/plugins/nim/project/nimcompilercleanstep.cpp b/src/plugins/nim/project/nimcompilercleanstep.cpp
index bd9eaf4edb..f3fac15081 100644
--- a/src/plugins/nim/project/nimcompilercleanstep.cpp
+++ b/src/plugins/nim/project/nimcompilercleanstep.cpp
@@ -117,7 +117,7 @@ NimCompilerCleanStepFactory::NimCompilerCleanStepFactory()
setSupportedStepList(ProjectExplorer::Constants::BUILDSTEPS_CLEAN);
setSupportedConfiguration(Constants::C_NIMBUILDCONFIGURATION_ID);
setRepeatable(false);
- setDisplayName(tr(Nim::Constants::C_NIMCOMPILERCLEANSTEP_DISPLAY));
+ setDisplayName(NimCompilerCleanStep::tr(Nim::Constants::C_NIMCOMPILERCLEANSTEP_DISPLAY));
}
} // Nim
diff --git a/src/plugins/nim/project/nimrunconfiguration.cpp b/src/plugins/nim/project/nimrunconfiguration.cpp
index 3d84c40949..22bb972d5b 100644
--- a/src/plugins/nim/project/nimrunconfiguration.cpp
+++ b/src/plugins/nim/project/nimrunconfiguration.cpp
@@ -44,14 +44,11 @@ namespace Nim {
NimRunConfiguration::NimRunConfiguration(Target *target, Core::Id id)
: RunConfiguration(target, id)
{
- auto terminalAspect = new TerminalAspect(this, "Nim.NimRunConfiguration.TerminalAspect");
- terminalAspect->setRunMode(ApplicationLauncher::Gui);
- addExtraAspect(terminalAspect);
-
addExtraAspect(new ExecutableAspect(this));
addExtraAspect(new ArgumentsAspect(this, "Nim.NimRunConfiguration.ArgumentAspect"));
addExtraAspect(new WorkingDirectoryAspect(this, "Nim.NimRunConfiguration.WorkingDirectoryAspect"));
addExtraAspect(new LocalEnvironmentAspect(this, LocalEnvironmentAspect::BaseEnvironmentModifier()));
+ addExtraAspect(new TerminalAspect(this, "Nim.NimRunConfiguration.TerminalAspect"));
setDisplayName(tr("Current Build Target"));
setDefaultDisplayName(tr("Current Build Target"));
@@ -101,6 +98,7 @@ NimRunConfigurationFactory::NimRunConfigurationFactory() : FixedRunConfiguration
{
registerRunConfiguration<NimRunConfiguration>("Nim.NimRunConfiguration");
addSupportedProjectType(Constants::C_NIMPROJECT_ID);
+ addRunWorkerFactory<SimpleTargetRunner>(ProjectExplorer::Constants::NORMAL_RUN_MODE);
}
} // Nim
diff --git a/src/plugins/plugins.pro b/src/plugins/plugins.pro
index 5d8b676a20..a540713d7a 100644
--- a/src/plugins/plugins.pro
+++ b/src/plugins/plugins.pro
@@ -105,8 +105,8 @@ exists(../shared/qbs/qbs.pro)|!isEmpty(QBS_INSTALL_DIR): \
SUBDIRS += \
clangcodemodel
-QTC_NO_CLANG_LIBTOOLING=$$(QTC_NO_CLANG_LIBTOOLING)
-isEmpty(QTC_NO_CLANG_LIBTOOLING) {
+QTC_ENABLE_CLANG_LIBTOOLING=$$(QTC_ENABLE_CLANG_LIBTOOLING)
+!isEmpty(QTC_ENABLE_CLANG_LIBTOOLING) {
SUBDIRS += clangrefactoring
SUBDIRS += clangpchmanager
} else {
diff --git a/src/plugins/projectexplorer/abi.cpp b/src/plugins/projectexplorer/abi.cpp
index 4aff7c3a96..bc8c9efa4e 100644
--- a/src/plugins/projectexplorer/abi.cpp
+++ b/src/plugins/projectexplorer/abi.cpp
@@ -25,8 +25,11 @@
#include "abi.h"
+#include <utils/algorithm.h>
#include <utils/fileutils.h>
+#include <utils/qtcassert.h>
+
#include <QDebug>
#include <QtEndian>
#include <QFile>
@@ -50,6 +53,96 @@ namespace ProjectExplorer {
// Helpers
// --------------------------------------------------------------------------
+static std::vector<QByteArray> m_registeredOsFlavors;
+static std::map<int, QList<Abi::OSFlavor>> m_osToOsFlavorMap;
+
+static QList<Abi::OSFlavor> moveGenericAndUnknownLast(const QList<Abi::OSFlavor> &in)
+{
+ QList<Abi::OSFlavor> result = in;
+ // Move unknown and generic to the back
+ if (result.removeOne(Abi::GenericFlavor))
+ result.append(Abi::GenericFlavor);
+ if (result.removeOne(Abi::UnknownFlavor))
+ result.append(Abi::UnknownFlavor);
+
+ return result;
+}
+
+static void insertIntoOsFlavorMap(const std::vector<Abi::OS> &oses, const Abi::OSFlavor flavor)
+{
+ QTC_ASSERT(oses.size() > 0, return);
+ for (const Abi::OS &os : oses) {
+ auto it = m_osToOsFlavorMap.find(os);
+ if (it == m_osToOsFlavorMap.end()) {
+ m_osToOsFlavorMap[os] = {flavor};
+ continue;
+ }
+ QList<Abi::OSFlavor> flavors = it->second;
+ if (!flavors.contains(flavor)) {
+ flavors.append(flavor);
+ m_osToOsFlavorMap[os] = moveGenericAndUnknownLast(flavors);
+ }
+ }
+}
+
+static void registerOsFlavor(const Abi::OSFlavor &flavor, const QByteArray &flavorName,
+ const std::vector<Abi::OS> &oses)
+{
+ const auto pos = static_cast<size_t>(flavor);
+ if (m_registeredOsFlavors.size() <= pos)
+ m_registeredOsFlavors.resize(pos + 1);
+
+ m_registeredOsFlavors[pos] = flavorName;
+
+ insertIntoOsFlavorMap(oses, flavor);
+}
+
+static void setupPreregisteredOsFlavors() {
+ m_registeredOsFlavors.resize(static_cast<size_t>(Abi::UnknownFlavor));
+
+ registerOsFlavor(Abi::FreeBsdFlavor, "freebsd", {Abi::OS::BsdOS});
+ registerOsFlavor(Abi::NetBsdFlavor, "netbsd", {Abi::OS::BsdOS});
+ registerOsFlavor(Abi::OpenBsdFlavor, "openbsd", {Abi::OS::BsdOS});
+ registerOsFlavor(Abi::AndroidLinuxFlavor, "android", {Abi::OS::LinuxOS});
+ registerOsFlavor(Abi::SolarisUnixFlavor, "solaris", {Abi::OS::UnixOS});
+ registerOsFlavor(Abi::WindowsMsvc2005Flavor, "msvc2005", {Abi::OS::WindowsOS});
+ registerOsFlavor(Abi::WindowsMsvc2008Flavor, "msvc2008", {Abi::OS::WindowsOS});
+ registerOsFlavor(Abi::WindowsMsvc2010Flavor, "msvc2010", {Abi::OS::WindowsOS});
+ registerOsFlavor(Abi::WindowsMsvc2012Flavor, "msvc2012", {Abi::OS::WindowsOS});
+ registerOsFlavor(Abi::WindowsMsvc2013Flavor, "msvc2013", {Abi::OS::WindowsOS});
+ registerOsFlavor(Abi::WindowsMsvc2015Flavor, "msvc2015", {Abi::OS::WindowsOS});
+ registerOsFlavor(Abi::WindowsMsvc2017Flavor, "msvc2017", {Abi::OS::WindowsOS});
+ registerOsFlavor(Abi::WindowsMSysFlavor, "msys", {Abi::OS::WindowsOS});
+ registerOsFlavor(Abi::WindowsCEFlavor, "ce", {Abi::OS::WindowsOS});
+ registerOsFlavor(Abi::VxWorksFlavor, "vxworks", {Abi::OS::VxWorks});
+ registerOsFlavor(Abi::RtosFlavor, "rtos", {Abi::OS::WindowsOS});
+ registerOsFlavor(Abi::GenericFlavor, "generic", {Abi::OS::LinuxOS,
+ Abi::OS::DarwinOS,
+ Abi::OS::UnixOS,
+ Abi::OS::QnxOS,
+ Abi::OS::BareMetalOS});
+ registerOsFlavor(Abi::UnknownFlavor, "unknown", {Abi::OS::BsdOS,
+ Abi::OS::LinuxOS,
+ Abi::OS::DarwinOS,
+ Abi::OS::UnixOS,
+ Abi::OS::WindowsOS,
+ Abi::OS::VxWorks,
+ Abi::OS::QnxOS,
+ Abi::OS::BareMetalOS,
+ Abi::OS::UnknownOS});
+}
+
+static std::vector<QByteArray> &registeredOsFlavors() {
+ if (m_registeredOsFlavors.size() == 0)
+ setupPreregisteredOsFlavors();
+ return m_registeredOsFlavors;
+}
+
+static int indexOfFlavor(const QByteArray &flavor)
+{
+ return Utils::indexOf(registeredOsFlavors(), [flavor](const QByteArray &f) { return f == flavor; });
+}
+
static Abi::Architecture architectureFromQt()
{
const QString arch = QSysInfo::buildCpuArchitecture();
@@ -109,17 +202,17 @@ static quint32 getBEUint16(const QByteArray &ba, int pos)
static Abi macAbiForCpu(quint32 type) {
switch (type) {
case 7: // CPU_TYPE_X86, CPU_TYPE_I386
- return Abi(Abi::X86Architecture, Abi::DarwinOS, Abi::GenericDarwinFlavor, Abi::MachOFormat, 32);
+ return Abi(Abi::X86Architecture, Abi::DarwinOS, Abi::GenericFlavor, Abi::MachOFormat, 32);
case 0x01000000 + 7: // CPU_TYPE_X86_64
- return Abi(Abi::X86Architecture, Abi::DarwinOS, Abi::GenericDarwinFlavor, Abi::MachOFormat, 64);
+ return Abi(Abi::X86Architecture, Abi::DarwinOS, Abi::GenericFlavor, Abi::MachOFormat, 64);
case 18: // CPU_TYPE_POWERPC
- return Abi(Abi::PowerPCArchitecture, Abi::DarwinOS, Abi::GenericDarwinFlavor, Abi::MachOFormat, 32);
+ return Abi(Abi::PowerPCArchitecture, Abi::DarwinOS, Abi::GenericFlavor, Abi::MachOFormat, 32);
case 0x01000000 + 18: // CPU_TYPE_POWERPC64
- return Abi(Abi::PowerPCArchitecture, Abi::DarwinOS, Abi::GenericDarwinFlavor, Abi::MachOFormat, 32);
+ return Abi(Abi::PowerPCArchitecture, Abi::DarwinOS, Abi::GenericFlavor, Abi::MachOFormat, 32);
case 12: // CPU_TYPE_ARM
- return Abi(Abi::ArmArchitecture, Abi::DarwinOS, Abi::GenericDarwinFlavor, Abi::MachOFormat, 32);
+ return Abi(Abi::ArmArchitecture, Abi::DarwinOS, Abi::GenericFlavor, Abi::MachOFormat, 32);
case 0x01000000 + 12: // CPU_TYPE_ARM64
- return Abi(Abi::ArmArchitecture, Abi::DarwinOS, Abi::GenericDarwinFlavor, Abi::MachOFormat, 64);
+ return Abi(Abi::ArmArchitecture, Abi::DarwinOS, Abi::GenericFlavor, Abi::MachOFormat, 64);
default:
return Abi();
}
@@ -223,7 +316,7 @@ static QList<Abi> abiOf(const QByteArray &data)
quint8 osAbi = getUint8(data, 7);
Abi::OS os = Abi::UnixOS;
- Abi::OSFlavor flavor = Abi::GenericUnixFlavor;
+ Abi::OSFlavor flavor = Abi::GenericFlavor;
// http://www.sco.com/developers/gabi/latest/ch4.eheader.html#elfid
switch (osAbi) {
#if defined(Q_OS_NETBSD)
@@ -242,7 +335,7 @@ static QList<Abi> abiOf(const QByteArray &data)
case 3: // Linux:
case 97: // ARM, also linux most of the time.
os = Abi::LinuxOS;
- flavor = Abi::GenericLinuxFlavor;
+ flavor = Abi::GenericFlavor;
break;
case 6: // Solaris:
os = Abi::UnixOS;
@@ -342,79 +435,7 @@ Abi::Abi(const Architecture &a, const OS &o,
const OSFlavor &of, const BinaryFormat &f, unsigned char w) :
m_architecture(a), m_os(o), m_osFlavor(of), m_binaryFormat(f), m_wordWidth(w)
{
- switch (m_os) {
- case UnknownOS:
- m_osFlavor = UnknownFlavor;
- break;
- case LinuxOS:
- if (m_osFlavor < GenericLinuxFlavor || m_osFlavor > AndroidLinuxFlavor)
- m_osFlavor = UnknownFlavor;
- break;
- case BsdOS:
- if (m_osFlavor < FreeBsdFlavor || m_osFlavor > OpenBsdFlavor)
- m_osFlavor = UnknownFlavor;
- break;
- case DarwinOS:
- if (m_osFlavor < GenericDarwinFlavor || m_osFlavor > GenericDarwinFlavor)
- m_osFlavor = UnknownFlavor;
- break;
- case UnixOS:
- if (m_osFlavor < GenericUnixFlavor || m_osFlavor > SolarisUnixFlavor)
- m_osFlavor = UnknownFlavor;
- break;
- case WindowsOS:
- if (m_osFlavor < WindowsMsvc2005Flavor || m_osFlavor > WindowsCEFlavor)
- m_osFlavor = UnknownFlavor;
- break;
- case VxWorks:
- if (m_osFlavor != VxWorksFlavor)
- m_osFlavor = VxWorksFlavor;
- break;
- case QnxOS:
- if (m_osFlavor != GenericQnxFlavor)
- m_osFlavor = UnknownFlavor;
- break;
- case BareMetalOS:
- if (m_osFlavor != GenericBareMetalFlavor)
- m_osFlavor = GenericBareMetalFlavor;
- break;
- }
-}
-
-Abi::Abi(const QString &abiString) :
- m_architecture(UnknownArchitecture), m_os(UnknownOS),
- m_osFlavor(UnknownFlavor), m_binaryFormat(UnknownFormat), m_wordWidth(0)
-{
- const QVector<QStringRef> abiParts = abiString.splitRef('-');
- if (abiParts.count() >= 1) {
- m_architecture = architectureFromString(abiParts.at(0));
- if (abiParts.at(0) != toString(m_architecture))
- return;
- }
-
- if (abiParts.count() >= 2) {
- m_os = osFromString(abiParts.at(1));
- if (abiParts.at(1) != toString(m_os))
- return;
- }
-
- if (abiParts.count() >= 3) {
- m_osFlavor = osFlavorFromString(abiParts.at(2), m_os);
- if (abiParts.at(2) != toString(m_osFlavor))
- return;
- }
-
- if (abiParts.count() >= 4) {
- m_binaryFormat = binaryFormatFromString(abiParts.at(3));
- if (abiParts.at(3) != toString(m_binaryFormat))
- return;
- }
-
- if (abiParts.count() >= 5) {
- m_wordWidth = wordWidthFromString(abiParts.at(4));
- if (abiParts.at(4) != toString(m_wordWidth))
- return;
- }
+ QTC_ASSERT(osSupportsFlavor(o, of), m_osFlavor = UnknownFlavor);
}
Abi Abi::abiFromTargetTriplet(const QString &triple)
@@ -445,7 +466,7 @@ Abi Abi::abiFromTargetTriplet(const QString &triple)
} else if (p == "xtensa") {
arch = XtensaArchitecture;
os = BareMetalOS;
- flavor = GenericBareMetalFlavor;
+ flavor = GenericFlavor;
format = ElfFormat;
width = 32;
} else if (p.startsWith("arm")) {
@@ -457,7 +478,7 @@ Abi Abi::abiFromTargetTriplet(const QString &triple)
} else if (p == "avr") {
arch = AvrArchitecture;
os = BareMetalOS;
- flavor = GenericBareMetalFlavor;
+ flavor = GenericFlavor;
format = ElfFormat;
width = 16;
} else if (p.startsWith("mips")) {
@@ -475,7 +496,7 @@ Abi Abi::abiFromTargetTriplet(const QString &triple)
} else if (p == "linux" || p == "linux6e") {
os = LinuxOS;
if (flavor == UnknownFlavor)
- flavor = GenericLinuxFlavor;
+ flavor = GenericFlavor;
format = ElfFormat;
} else if (p == "android") {
flavor = AndroidLinuxFlavor;
@@ -500,7 +521,7 @@ Abi Abi::abiFromTargetTriplet(const QString &triple)
format = PEFormat;
} else if (p == "apple") {
os = DarwinOS;
- flavor = GenericDarwinFlavor;
+ flavor = GenericFlavor;
format = MachOFormat;
} else if (p == "darwin10") {
width = 64;
@@ -516,7 +537,7 @@ Abi Abi::abiFromTargetTriplet(const QString &triple)
format = ElfFormat;
} else if (p.startsWith("qnx")) {
os = QnxOS;
- flavor = GenericQnxFlavor;
+ flavor = GenericFlavor;
format = ElfFormat;
} else {
++unknownCount;
@@ -563,7 +584,7 @@ bool Abi::isCompatibleWith(const Abi &other) const
// work for them.
if (!isCompat && (architecture() == other.architecture() || other.architecture() == UnknownArchitecture)
&& ((os() == other.os()) && (os() == LinuxOS))
- && (osFlavor() == GenericLinuxFlavor || other.osFlavor() == GenericLinuxFlavor)
+ && (osFlavor() == GenericFlavor || other.osFlavor() == GenericFlavor)
&& (binaryFormat() == other.binaryFormat() || other.binaryFormat() == UnknownFormat)
&& ((wordWidth() == other.wordWidth() && wordWidth() != 0) || other.wordWidth() == 0)) {
isCompat = true;
@@ -654,49 +675,11 @@ QString Abi::toString(const OS &o)
QString Abi::toString(const OSFlavor &of)
{
- switch (of) {
- case GenericLinuxFlavor:
- case GenericDarwinFlavor:
- case GenericUnixFlavor:
- case GenericBareMetalFlavor:
- case GenericQnxFlavor:
- return QLatin1String("generic");
- case AndroidLinuxFlavor:
- return QLatin1String("android");
- case FreeBsdFlavor:
- return QLatin1String("freebsd");
- case NetBsdFlavor:
- return QLatin1String("netbsd");
- case OpenBsdFlavor:
- return QLatin1String("openbsd");
- case SolarisUnixFlavor:
- return QLatin1String("solaris");
- case WindowsMsvc2005Flavor:
- return QLatin1String("msvc2005");
- case WindowsMsvc2008Flavor:
- return QLatin1String("msvc2008");
- case WindowsMsvc2010Flavor:
- return QLatin1String("msvc2010");
- case WindowsMsvc2012Flavor:
- return QLatin1String("msvc2012");
- case WindowsMsvc2013Flavor:
- return QLatin1String("msvc2013");
- case WindowsMsvc2015Flavor:
- return QLatin1String("msvc2015");
- case WindowsMsvc2017Flavor:
- return QLatin1String("msvc2017");
- case WindowsMSysFlavor:
- return QLatin1String("msys");
- case WindowsCEFlavor:
- return QLatin1String("ce");
- case VxWorksFlavor:
- return QLatin1String("vxworks");
- case RtosFlavor:
- return QLatin1String("rtos");
- case UnknownFlavor:
- default:
- return QLatin1String("unknown");
- }
+ const auto index = static_cast<size_t>(of);
+ const std::vector<QByteArray> &flavors = registeredOsFlavors();
+ QTC_ASSERT(index < flavors.size(),
+ return QString::fromUtf8(flavors.at(int(UnknownFlavor))));
+ return QString::fromUtf8(flavors.at(index));
}
QString Abi::toString(const BinaryFormat &bf)
@@ -724,6 +707,47 @@ QString Abi::toString(int w)
return QString::fromLatin1("%1bit").arg(w);
}
+Abi Abi::fromString(const QString &abiString)
+{
+ Abi::Architecture architecture = UnknownArchitecture;
+ const QVector<QStringRef> abiParts = abiString.splitRef('-');
+ if (abiParts.count() >= 1) {
+ architecture = architectureFromString(abiParts.at(0));
+ if (abiParts.at(0) != toString(architecture))
+ return Abi();
+ }
+
+ Abi::OS os = UnknownOS;
+ if (abiParts.count() >= 2) {
+ os = osFromString(abiParts.at(1));
+ if (abiParts.at(1) != toString(os))
+ return Abi(architecture, UnknownOS, UnknownFlavor, UnknownFormat, 0);
+ }
+
+ Abi::OSFlavor flavor = UnknownFlavor;
+ if (abiParts.count() >= 3) {
+ flavor = osFlavorFromString(abiParts.at(2), os);
+ if (abiParts.at(2) != toString(flavor))
+ return Abi(architecture, os, UnknownFlavor, UnknownFormat, 0);;
+ }
+
+ Abi::BinaryFormat format = UnknownFormat;
+ if (abiParts.count() >= 4) {
+ format = binaryFormatFromString(abiParts.at(3));
+ if (abiParts.at(3) != toString(format))
+ return Abi(architecture, os, flavor, UnknownFormat, 0);;
+ }
+
+ unsigned char wordWidth = 0;
+ if (abiParts.count() >= 5) {
+ wordWidth = wordWidthFromString(abiParts.at(4));
+ if (abiParts.at(4) != toString(wordWidth))
+ return Abi(architecture, os, flavor, format, 0);;
+ }
+
+ return Abi(architecture, os, flavor, format, wordWidth);
+}
+
Abi::Architecture Abi::architectureFromString(const QStringRef &a)
{
if (a == "unknown")
@@ -775,62 +799,11 @@ Abi::OS Abi::osFromString(const QStringRef &o)
Abi::OSFlavor Abi::osFlavorFromString(const QStringRef &of, const OS os)
{
- Abi::OSFlavor result = UnknownFlavor;
- if (of == "generic") {
- switch (os) {
- case LinuxOS:
- result = GenericLinuxFlavor;
- break;
- case DarwinOS:
- result = GenericDarwinFlavor;
- break;
- case UnixOS:
- result = GenericUnixFlavor;
- break;
- case BareMetalOS:
- result = GenericBareMetalFlavor;
- break;
- case QnxOS:
- result = GenericQnxFlavor;
- break;
- default:
- result = UnknownFlavor;
- }
- } else if (of == "android") {
- result = AndroidLinuxFlavor;
- } else if (of == "freebsd") {
- result = FreeBsdFlavor;
- } else if (of == "netbsd") {
- result = NetBsdFlavor;
- } else if (of == "openbsd") {
- result = OpenBsdFlavor;
- } else if (of == "solaris") {
- result = SolarisUnixFlavor;
- } else if (of == "msvc2005") {
- result = WindowsMsvc2005Flavor;
- } else if (of == "msvc2008") {
- result = WindowsMsvc2008Flavor;
- } else if (of == "msvc2010") {
- result = WindowsMsvc2010Flavor;
- } else if (of == "msvc2012") {
- result = WindowsMsvc2012Flavor;
- } else if (of == "msvc2013") {
- result = WindowsMsvc2013Flavor;
- } else if (of == "msvc2015") {
- result = WindowsMsvc2015Flavor;
- } else if (of == "msvc2017") {
- result = WindowsMsvc2017Flavor;
- } else if (of == "msys") {
- result = WindowsMSysFlavor;
- } else if (of == "ce") {
- result = WindowsCEFlavor;
- } else if (of == "vxworks") {
- result = VxWorksFlavor;
- } else if (of == "rtos") {
- result = RtosFlavor;
- }
-
- return flavorsForOs(os).contains(result) ? result : UnknownFlavor;
+ const int index = indexOfFlavor(of.toUtf8());
+ const auto flavor = OSFlavor(index);
+ if (index >= 0 && osSupportsFlavor(os, flavor))
+ return flavor;
+ return UnknownFlavor;
}
Abi::BinaryFormat Abi::binaryFormatFromString(const QStringRef &bf)
@@ -863,31 +836,41 @@ unsigned char Abi::wordWidthFromString(const QStringRef &w)
return static_cast<unsigned char>(bitCount);
}
+Abi::OSFlavor Abi::registerOsFlavor(const std::vector<OS> &oses, const QString &flavorName)
+{
+ QTC_ASSERT(oses.size() > 0, return UnknownFlavor);
+ const QByteArray flavorBytes = flavorName.toUtf8();
+
+ int index = indexOfFlavor(flavorBytes);
+ if (index < 0)
+ index = int(registeredOsFlavors().size());
+
+ auto toRegister = OSFlavor(index);
+ ProjectExplorer::registerOsFlavor(toRegister, flavorBytes, oses);
+ return toRegister;
+}
+
QList<Abi::OSFlavor> Abi::flavorsForOs(const Abi::OS &o)
{
- switch (o) {
- case BsdOS:
- return {FreeBsdFlavor, OpenBsdFlavor, NetBsdFlavor, UnknownFlavor};
- case LinuxOS:
- return {GenericLinuxFlavor, AndroidLinuxFlavor, UnknownFlavor};
- case DarwinOS:
- return {GenericDarwinFlavor, UnknownFlavor};
- case UnixOS:
- return {GenericUnixFlavor, SolarisUnixFlavor, UnknownFlavor};
- case WindowsOS:
- return {WindowsMsvc2005Flavor, WindowsMsvc2008Flavor, WindowsMsvc2010Flavor,
- WindowsMsvc2012Flavor, WindowsMsvc2013Flavor, WindowsMsvc2015Flavor,
- WindowsMsvc2017Flavor , WindowsMSysFlavor, WindowsCEFlavor, UnknownFlavor};
- case VxWorks:
- return {VxWorksFlavor, UnknownFlavor};
- case QnxOS:
- return {GenericQnxFlavor, UnknownFlavor};
- case BareMetalOS:
- return {GenericBareMetalFlavor, RtosFlavor, UnknownFlavor};
- case UnknownOS:
- return {UnknownFlavor};
- }
- return QList<OSFlavor>();
+ registeredOsFlavors(); // Make sure m_osToOsFlavorMap is populated!
+ auto it = m_osToOsFlavorMap.find(o);
+ if (it == m_osToOsFlavorMap.end())
+ return {};
+
+ return it->second;
+}
+
+QList<Abi::OSFlavor> Abi::allOsFlavors()
+{
+ QList<OSFlavor> result;
+ for (size_t i = 0; i < registeredOsFlavors().size(); ++i)
+ result << OSFlavor(i);
+ return moveGenericAndUnknownLast(result);
+}
+
+bool Abi::osSupportsFlavor(const Abi::OS &os, const Abi::OSFlavor &flavor)
+{
+ return flavorsForOs(os).contains(flavor);
}
Abi::OSFlavor Abi::flavorForMsvcVersion(int version)
@@ -929,11 +912,11 @@ Abi Abi::hostAbi()
format = PEFormat;
#elif defined (Q_OS_LINUX)
os = LinuxOS;
- subos = GenericLinuxFlavor;
+ subos = GenericFlavor;
format = ElfFormat;
#elif defined (Q_OS_DARWIN)
os = DarwinOS;
- subos = GenericDarwinFlavor;
+ subos = GenericFlavor;
format = MachOFormat;
#elif defined (Q_OS_BSD4)
os = BsdOS;
@@ -1029,11 +1012,7 @@ QList<Abi> Abi::abisOfBinary(const Utils::FileName &path)
static bool isGenericFlavor(ProjectExplorer::Abi::OSFlavor f)
{
- return f == ProjectExplorer::Abi::GenericBareMetalFlavor
- || f == ProjectExplorer::Abi::GenericDarwinFlavor
- || f == ProjectExplorer::Abi::GenericLinuxFlavor
- || f == ProjectExplorer::Abi::GenericQnxFlavor
- || f == ProjectExplorer::Abi::GenericUnixFlavor;
+ return f == ProjectExplorer::Abi::GenericFlavor;
}
void ProjectExplorer::ProjectExplorerPlugin::testAbiRoundTrips()
@@ -1048,18 +1027,17 @@ void ProjectExplorer::ProjectExplorerPlugin::testAbiRoundTrips()
const Abi::OS os = Abi::osFromString(QStringRef(&string));
QCOMPARE(static_cast<Abi::OS>(i), os);
}
- for (int i = 0; i <= Abi::UnknownFlavor; ++i) {
- const Abi::OSFlavor flavorEnum = static_cast<Abi::OSFlavor>(i);
- const QString string = Abi::toString(flavorEnum);
+ for (const Abi::OSFlavor flavorIt : Abi::allOsFlavors()) {
+ const QString string = Abi::toString(flavorIt);
for (int os = 0; os <= Abi::UnknownOS; ++os) {
- const Abi::OS osEnum = static_cast<Abi::OS>(os);
+ const auto osEnum = static_cast<Abi::OS>(os);
const Abi::OSFlavor flavor = Abi::osFlavorFromString(QStringRef(&string), osEnum);
- if (isGenericFlavor(flavorEnum) && flavor != Abi::UnknownFlavor)
+ if (isGenericFlavor(flavorIt) && flavor != Abi::UnknownFlavor)
QVERIFY(isGenericFlavor(flavor));
- else if (flavor == Abi::UnknownFlavor && i != Abi::UnknownFlavor)
- QVERIFY(!Abi::flavorsForOs(osEnum).contains(flavorEnum));
+ else if (flavor == Abi::UnknownFlavor && flavorIt != Abi::UnknownFlavor)
+ QVERIFY(!Abi::flavorsForOs(osEnum).contains(flavorIt));
else
- QCOMPARE(flavorEnum, flavor);
+ QCOMPARE(flavorIt, flavor);
}
}
for (int i = 0; i <= Abi::UnknownFormat; ++i) {
@@ -1215,25 +1193,6 @@ void ProjectExplorer::ProjectExplorerPlugin::testAbiOfBinary()
QCOMPARE(result.at(i).toString(), abis.at(i));
}
-void ProjectExplorer::ProjectExplorerPlugin::testFlavorForOs()
-{
- QList<QList<Abi::OSFlavor> > flavorLists;
- for (int i = 0; i != static_cast<int>(Abi::UnknownOS); ++i)
- flavorLists.append(Abi::flavorsForOs(static_cast<Abi::OS>(i)));
-
- int foundCounter = 0;
- for (int i = 0; i != Abi::UnknownFlavor; ++i) {
- foundCounter = 0;
- // make sure i is in exactly on of the flavor lists!
- foreach (const QList<Abi::OSFlavor> &l, flavorLists) {
- QVERIFY(l.contains(Abi::UnknownFlavor));
- if (l.contains(static_cast<Abi::OSFlavor>(i)))
- ++foundCounter;
- }
- QCOMPARE(foundCounter, 1);
- }
-}
-
void ProjectExplorer::ProjectExplorerPlugin::testAbiFromTargetTriplet_data()
{
QTest::addColumn<int>("architecture");
@@ -1243,15 +1202,15 @@ void ProjectExplorer::ProjectExplorerPlugin::testAbiFromTargetTriplet_data()
QTest::addColumn<int>("wordWidth");
QTest::newRow("x86_64-apple-darwin") << int(Abi::X86Architecture)
- << int(Abi::DarwinOS) << int(Abi::GenericDarwinFlavor)
+ << int(Abi::DarwinOS) << int(Abi::GenericFlavor)
<< int(Abi::MachOFormat) << 64;
QTest::newRow("x86_64-apple-darwin12.5.0") << int(Abi::X86Architecture)
- << int(Abi::DarwinOS) << int(Abi::GenericDarwinFlavor)
+ << int(Abi::DarwinOS) << int(Abi::GenericFlavor)
<< int(Abi::MachOFormat) << 64;
QTest::newRow("x86_64-linux-gnu") << int(Abi::X86Architecture)
- << int(Abi::LinuxOS) << int(Abi::GenericLinuxFlavor)
+ << int(Abi::LinuxOS) << int(Abi::GenericFlavor)
<< int(Abi::ElfFormat) << 64;
QTest::newRow("x86_64-pc-mingw32msvc") << int(Abi::X86Architecture)
@@ -1263,7 +1222,7 @@ void ProjectExplorer::ProjectExplorerPlugin::testAbiFromTargetTriplet_data()
<< int(Abi::PEFormat) << 32;
QTest::newRow("i686-linux-gnu") << int(Abi::X86Architecture)
- << int(Abi::LinuxOS) << int(Abi::GenericLinuxFlavor)
+ << int(Abi::LinuxOS) << int(Abi::GenericFlavor)
<< int(Abi::ElfFormat) << 32;
QTest::newRow("i686-linux-android") << int(Abi::X86Architecture)
@@ -1307,7 +1266,7 @@ void ProjectExplorer::ProjectExplorerPlugin::testAbiFromTargetTriplet_data()
<< int(Abi::ElfFormat) << 32;
QTest::newRow("arm-none-linux-gnueabi") << int(Abi::ArmArchitecture)
- << int(Abi::LinuxOS) << int(Abi::GenericLinuxFlavor)
+ << int(Abi::LinuxOS) << int(Abi::GenericFlavor)
<< int(Abi::ElfFormat) << 32;
QTest::newRow("mipsel-linux-android") << int(Abi::MipsArchitecture)
@@ -1319,7 +1278,7 @@ void ProjectExplorer::ProjectExplorerPlugin::testAbiFromTargetTriplet_data()
<< int(Abi::ElfFormat) << 32;
QTest::newRow("mips-linux-gnu") << int(Abi::MipsArchitecture)
- << int(Abi::LinuxOS) << int(Abi::GenericLinuxFlavor)
+ << int(Abi::LinuxOS) << int(Abi::GenericFlavor)
<< int(Abi::ElfFormat) << 32;
QTest::newRow("mips64el-linux-android") << int(Abi::MipsArchitecture)
@@ -1331,11 +1290,11 @@ void ProjectExplorer::ProjectExplorerPlugin::testAbiFromTargetTriplet_data()
<< int(Abi::ElfFormat) << 64;
QTest::newRow("mips64-linux-octeon-gnu") << int(Abi::MipsArchitecture)
- << int(Abi::LinuxOS) << int(Abi::GenericLinuxFlavor)
+ << int(Abi::LinuxOS) << int(Abi::GenericFlavor)
<< int(Abi::ElfFormat) << 64;
QTest::newRow("mips64el-linux-gnuabi") << int(Abi::MipsArchitecture)
- << int(Abi::LinuxOS) << int(Abi::GenericLinuxFlavor)
+ << int(Abi::LinuxOS) << int(Abi::GenericFlavor)
<< int(Abi::ElfFormat) << 64;
QTest::newRow("arm-wrs-vxworks") << int(Abi::ArmArchitecture)
@@ -1347,15 +1306,15 @@ void ProjectExplorer::ProjectExplorerPlugin::testAbiFromTargetTriplet_data()
<< int(Abi::ElfFormat) << 64;
QTest::newRow("aarch64-unknown-linux-gnu") << int(Abi::ArmArchitecture)
- << int(Abi::LinuxOS) << int(Abi::GenericLinuxFlavor)
+ << int(Abi::LinuxOS) << int(Abi::GenericFlavor)
<< int(Abi::ElfFormat) << 64;
QTest::newRow("xtensa-lx106-elf") << int(Abi::XtensaArchitecture)
- << int(Abi::BareMetalOS) << int(Abi::GenericBareMetalFlavor)
+ << int(Abi::BareMetalOS) << int(Abi::GenericFlavor)
<< int(Abi::ElfFormat) << 32;
// Yes, that's the entire triplet
QTest::newRow("avr") << int(Abi::AvrArchitecture)
- << int(Abi::BareMetalOS) << int(Abi::GenericBareMetalFlavor)
+ << int(Abi::BareMetalOS) << int(Abi::GenericFlavor)
<< int(Abi::ElfFormat) << 16;
}
@@ -1375,4 +1334,65 @@ void ProjectExplorer::ProjectExplorerPlugin::testAbiFromTargetTriplet()
QCOMPARE(Abi::abiFromTargetTriplet(QLatin1String(QTest::currentDataTag())), expectedAbi);
}
+void ProjectExplorer::ProjectExplorerPlugin::testAbiUserOsFlavor_data()
+{
+ QTest::addColumn<int>("os");
+ QTest::addColumn<QString>("osFlavorName");
+ QTest::addColumn<int>("expectedFlavor");
+
+ QTest::newRow("linux-generic flavor")
+ << int(Abi::LinuxOS) << "generic" << int(Abi::GenericFlavor);
+ QTest::newRow("linux-unknown flavor")
+ << int(Abi::LinuxOS) << "unknown" << int(Abi::UnknownFlavor);
+ QTest::newRow("windows-msvc2010 flavor")
+ << int(Abi::WindowsOS) << "msvc2010" << int(Abi::WindowsMsvc2010Flavor);
+ QTest::newRow("windows-unknown flavor")
+ << int(Abi::WindowsOS) << "unknown" << int(Abi::UnknownFlavor);
+
+ QTest::newRow("windows-msvc2100 flavor")
+ << int(Abi::WindowsOS) << "msvc2100" << int(Abi::UnknownFlavor) + 1;
+ QTest::newRow("linux-msvc2100 flavor")
+ << int(Abi::LinuxOS) << "msvc2100" << int(Abi::UnknownFlavor) + 1;
+
+ QTest::newRow("windows-msvc2100 flavor reregister")
+ << int(Abi::WindowsOS) << "msvc2100" << int(Abi::UnknownFlavor) + 1;
+ QTest::newRow("linux-msvc2100 flavor reregister")
+ << int(Abi::LinuxOS) << "msvc2100" << int(Abi::UnknownFlavor) + 1;
+ QTest::newRow("unix-msvc2100 flavor register")
+ << int(Abi::UnixOS) << "msvc2100" << int(Abi::UnknownFlavor) + 1;
+}
+
+void ProjectExplorer::ProjectExplorerPlugin::testAbiUserOsFlavor()
+{
+ QFETCH(int, os);
+ QFETCH(QString, osFlavorName);
+ QFETCH(int, expectedFlavor);
+
+ QMap<int, QList<Abi::OSFlavor>> osFlavorMap;
+ for (int i = 0; i <= Abi::UnknownOS; ++i)
+ osFlavorMap.insert(i, Abi::flavorsForOs(static_cast<ProjectExplorer::Abi::OS>(i)));
+
+ Abi::OSFlavor osFlavor = Abi::registerOsFlavor({static_cast<Abi::OS>(os)}, osFlavorName);
+ QCOMPARE(osFlavor, static_cast<Abi::OSFlavor>(expectedFlavor));
+
+ for (int i = 0; i <= Abi::UnknownOS; ++i) {
+ const QList<Abi::OSFlavor> flavors = Abi::flavorsForOs(static_cast<Abi::OS>(i));
+ const QList<Abi::OSFlavor> previousFlavors = osFlavorMap.value(static_cast<Abi::OS>(i));
+ const int previousCount = previousFlavors.count();
+
+ if (i == os && previousCount != flavors.count()) {
+ QVERIFY(flavors.count() == previousCount + 1);
+ QVERIFY(flavors.contains(osFlavor));
+ for (const Abi::OSFlavor &f : previousFlavors) {
+ if (f == osFlavor)
+ continue;
+ QVERIFY(previousFlavors.contains(f));
+ }
+ } else {
+ QCOMPARE(flavors, previousFlavors);
+ }
+ }
+}
+
+
#endif
diff --git a/src/plugins/projectexplorer/abi.h b/src/plugins/projectexplorer/abi.h
index 45702b0054..09cc284a5c 100644
--- a/src/plugins/projectexplorer/abi.h
+++ b/src/plugins/projectexplorer/abi.h
@@ -72,14 +72,9 @@ public:
OpenBsdFlavor,
// Linux
- GenericLinuxFlavor,
AndroidLinuxFlavor,
- // Darwin
- GenericDarwinFlavor,
-
// Unix
- GenericUnixFlavor,
SolarisUnixFlavor,
// Windows
@@ -95,13 +90,12 @@ public:
// Embedded
VxWorksFlavor,
- GenericQnxFlavor,
- GenericBareMetalFlavor,
// Generic:
RtosFlavor,
+ GenericFlavor,
- UnknownFlavor
+ UnknownFlavor // keep last in this enum!
};
enum BinaryFormat {
@@ -112,14 +106,9 @@ public:
UnknownFormat
};
- Abi() :
- m_architecture(UnknownArchitecture), m_os(UnknownOS),
- m_osFlavor(UnknownFlavor), m_binaryFormat(UnknownFormat), m_wordWidth(0)
- { }
-
- Abi(const Architecture &a, const OS &o,
- const OSFlavor &so, const BinaryFormat &f, unsigned char w);
- Abi(const QString &abiString);
+ Abi(const Architecture &a = UnknownArchitecture, const OS &o = UnknownOS,
+ const OSFlavor &so = UnknownFlavor, const BinaryFormat &f = UnknownFormat,
+ unsigned char w = 0);
static Abi abiFromTargetTriplet(const QString &machineTriple);
@@ -150,12 +139,17 @@ public:
static BinaryFormat binaryFormatFromString(const QStringRef &bf);
static unsigned char wordWidthFromString(const QStringRef &w);
+ static OSFlavor registerOsFlavor(const std::vector<OS> &oses, const QString &flavorName);
static QList<OSFlavor> flavorsForOs(const OS &o);
+ static QList<OSFlavor> allOsFlavors();
+ static bool osSupportsFlavor(const OS &os, const OSFlavor &flavor);
static OSFlavor flavorForMsvcVersion(int version);
+ static Abi fromString(const QString &abiString);
static Abi hostAbi();
static QList<Abi> abisOfBinary(const Utils::FileName &path);
+
private:
Architecture m_architecture;
OS m_os;
diff --git a/src/plugins/projectexplorer/abiwidget.cpp b/src/plugins/projectexplorer/abiwidget.cpp
index efff460634..d4a3070d69 100644
--- a/src/plugins/projectexplorer/abiwidget.cpp
+++ b/src/plugins/projectexplorer/abiwidget.cpp
@@ -75,9 +75,9 @@ public:
// --------------------------------------------------------------------------
AbiWidget::AbiWidget(QWidget *parent) : QWidget(parent),
- d(new Internal::AbiWidgetPrivate)
+ d(std::make_unique<Internal::AbiWidgetPrivate>())
{
- QHBoxLayout *layout = new QHBoxLayout(this);
+ auto *layout = new QHBoxLayout(this);
layout->setMargin(0);
layout->setSpacing(2);
@@ -152,10 +152,7 @@ AbiWidget::AbiWidget(QWidget *parent) : QWidget(parent),
setAbis(QList<Abi>(), Abi::hostAbi());
}
-AbiWidget::~AbiWidget()
-{
- delete d;
-}
+AbiWidget::~AbiWidget() = default;
static Abi selectAbi(const Abi &current, const QList<Abi> &abiList)
{
@@ -197,7 +194,7 @@ QList<Abi> AbiWidget::supportedAbis() const
QList<Abi> result;
result.reserve(d->m_abi->count());
for (int i = 1; i < d->m_abi->count(); ++i)
- result << Abi(d->m_abi->itemData(i).toString());
+ result << Abi::fromString(d->m_abi->itemData(i).toString());
return result;
}
@@ -240,7 +237,7 @@ void AbiWidget::mainComboBoxChanged()
if (d->m_ignoreChanges.isLocked())
return;
- const Abi newAbi = d->m_abi->currentData().toString();
+ const Abi newAbi = Abi::fromString(d->m_abi->currentData().toString());
const bool customMode = d->isCustom();
d->m_architectureComboBox->setEnabled(customMode);
@@ -254,7 +251,7 @@ void AbiWidget::mainComboBoxChanged()
if (customMode)
customComboBoxesChanged();
else
- emitAbiChanged(Abi(d->m_abi->currentData().toString()));
+ emitAbiChanged(Abi::fromString(d->m_abi->currentData().toString()));
}
void AbiWidget::customComboBoxesChanged()
diff --git a/src/plugins/projectexplorer/abiwidget.h b/src/plugins/projectexplorer/abiwidget.h
index 569840bc1f..b8a64dd05c 100644
--- a/src/plugins/projectexplorer/abiwidget.h
+++ b/src/plugins/projectexplorer/abiwidget.h
@@ -29,6 +29,8 @@
#include <QWidget>
+#include <memory>
+
namespace ProjectExplorer {
class Abi;
@@ -64,7 +66,7 @@ private:
void emitAbiChanged(const Abi &current);
- Internal::AbiWidgetPrivate *const d;
+ const std::unique_ptr<Internal::AbiWidgetPrivate> d;
};
} // namespace ProjectExplorer
diff --git a/src/plugins/projectexplorer/abstractmsvctoolchain.cpp b/src/plugins/projectexplorer/abstractmsvctoolchain.cpp
index 195f430d70..a0755b38c2 100644
--- a/src/plugins/projectexplorer/abstractmsvctoolchain.cpp
+++ b/src/plugins/projectexplorer/abstractmsvctoolchain.cpp
@@ -53,10 +53,6 @@ AbstractMsvcToolChain::AbstractMsvcToolChain(Core::Id typeId, Core::Id l, Detect
m_abi(abi),
m_vcvarsBat(vcvarsBat)
{
- Q_ASSERT(abi.os() == Abi::WindowsOS);
- Q_ASSERT(abi.binaryFormat() == Abi::PEFormat);
- Q_ASSERT(abi.osFlavor() != Abi::WindowsMSysFlavor);
- Q_ASSERT(!m_vcvarsBat.isEmpty());
setLanguage(l);
}
@@ -437,15 +433,14 @@ bool AbstractMsvcToolChain::operator ==(const ToolChain &other) const
if (!ToolChain::operator ==(other))
return false;
- const AbstractMsvcToolChain *msvcTc = static_cast<const AbstractMsvcToolChain *>(&other);
+ const auto *msvcTc = static_cast<const AbstractMsvcToolChain *>(&other);
return targetAbi() == msvcTc->targetAbi()
&& m_vcvarsBat == msvcTc->m_vcvarsBat;
}
AbstractMsvcToolChain::WarningFlagAdder::WarningFlagAdder(const QString &flag,
WarningFlags &flags) :
- m_flags(flags),
- m_triggered(false)
+ m_flags(flags)
{
if (flag.startsWith(QLatin1String("-wd"))) {
m_doesEnable = false;
diff --git a/src/plugins/projectexplorer/abstractmsvctoolchain.h b/src/plugins/projectexplorer/abstractmsvctoolchain.h
index 7bfdf3ac46..7feee8561c 100644
--- a/src/plugins/projectexplorer/abstractmsvctoolchain.h
+++ b/src/plugins/projectexplorer/abstractmsvctoolchain.h
@@ -107,7 +107,7 @@ protected:
mutable QList<HeaderPath> m_headerPaths;
Abi m_abi;
- QString m_vcvarsBat;
+ QString m_vcvarsBat;
};
} // namespace Internal
diff --git a/src/plugins/projectexplorer/applicationlauncher.cpp b/src/plugins/projectexplorer/applicationlauncher.cpp
index 804954d14e..8cb71a9bec 100644
--- a/src/plugins/projectexplorer/applicationlauncher.cpp
+++ b/src/plugins/projectexplorer/applicationlauncher.cpp
@@ -69,7 +69,7 @@ class ApplicationLauncherPrivate : public QObject
public:
enum State { Inactive, Run };
explicit ApplicationLauncherPrivate(ApplicationLauncher *parent);
- ~ApplicationLauncherPrivate() { setFinished(); }
+ ~ApplicationLauncherPrivate() override { setFinished(); }
void start(const Runnable &runnable, const IDevice::ConstPtr &device, bool local);
void stop();
@@ -104,7 +104,7 @@ public:
// Local
QtcProcess m_guiProcess;
ConsoleProcess m_consoleProcess;
- ApplicationLauncher::Mode m_currentMode = ApplicationLauncher::Gui;
+ bool m_useTerminal = false;
// Keep track whether we need to emit a finished signal
bool m_processRunning = false;
@@ -165,20 +165,21 @@ ApplicationLauncherPrivate::ApplicationLauncherPrivate(ApplicationLauncher *pare
}
ApplicationLauncher::ApplicationLauncher(QObject *parent) : QObject(parent),
- d(new ApplicationLauncherPrivate(this))
-{
-}
+ d(std::make_unique<ApplicationLauncherPrivate>(this))
+{ }
-ApplicationLauncher::~ApplicationLauncher()
-{
- delete d;
-}
+ApplicationLauncher::~ApplicationLauncher() = default;
void ApplicationLauncher::setProcessChannelMode(QProcess::ProcessChannelMode mode)
{
d->m_guiProcess.setProcessChannelMode(mode);
}
+void ApplicationLauncher::setUseTerminal(bool on)
+{
+ d->m_useTerminal = on;
+}
+
void ApplicationLauncher::stop()
{
d->stop();
@@ -189,15 +190,15 @@ void ApplicationLauncherPrivate::stop()
if (m_isLocal) {
if (!isRunning())
return;
- if (m_currentMode == ApplicationLauncher::Gui) {
+ if (m_useTerminal) {
+ m_consoleProcess.stop();
+ localProcessDone(0, QProcess::CrashExit);
+ } else {
m_guiProcess.terminate();
if (!m_guiProcess.waitForFinished(1000) && m_guiProcess.state() == QProcess::Running) { // This is blocking, so be fast.
m_guiProcess.kill();
m_guiProcess.waitForFinished();
}
- } else {
- m_consoleProcess.stop();
- localProcessDone(0, QProcess::CrashExit);
}
} else {
if (m_stopRequested)
@@ -227,9 +228,9 @@ bool ApplicationLauncher::isRemoteRunning() const
bool ApplicationLauncherPrivate::isRunning() const
{
- if (m_currentMode == ApplicationLauncher::Gui)
- return m_guiProcess.state() != QProcess::NotRunning;
- return m_consoleProcess.isRunning();
+ if (m_useTerminal)
+ return m_consoleProcess.isRunning();
+ return m_guiProcess.state() != QProcess::NotRunning;
}
bool ApplicationLauncherPrivate::isRemoteRunning() const
@@ -247,7 +248,7 @@ qint64 ApplicationLauncherPrivate::applicationPID() const
if (!isRunning())
return 0;
- if (m_currentMode == ApplicationLauncher::Console)
+ if (m_useTerminal)
return m_consoleProcess.applicationPID();
return m_guiProcess.processId();
@@ -255,18 +256,18 @@ qint64 ApplicationLauncherPrivate::applicationPID() const
QString ApplicationLauncher::errorString() const
{
- if (d->m_currentMode == Gui)
- return d->m_guiProcess.errorString();
- else
+ if (d->m_useTerminal)
return d->m_consoleProcess.errorString();
+ else
+ return d->m_guiProcess.errorString();
}
QProcess::ProcessError ApplicationLauncher::processError() const
{
- if (d->m_currentMode == Gui)
- return d->m_guiProcess.error();
- else
+ if (d->m_useTerminal)
return d->m_consoleProcess.error();
+ else
+ return d->m_guiProcess.error();
}
void ApplicationLauncherPrivate::localGuiProcessError()
@@ -319,7 +320,7 @@ void ApplicationLauncherPrivate::readLocalStandardError()
void ApplicationLauncherPrivate::cannotRetrieveLocalDebugOutput()
{
#ifdef Q_OS_WIN
- disconnect(WinDebugInterface::instance(), 0, this, 0);
+ disconnect(WinDebugInterface::instance(), nullptr, this, nullptr);
emit q->appendMessage(ApplicationLauncher::msgWinCannotRetrieveDebuggingOutput(), ErrorMessageFormat);
#endif
}
@@ -377,8 +378,7 @@ void ApplicationLauncherPrivate::start(const Runnable &runnable, const IDevice::
WinDebugInterface::instance()->start(); // Try to start listener again...
#endif
- m_currentMode = runnable.runMode;
- if (m_currentMode == ApplicationLauncher::Gui) {
+ if (!m_useTerminal) {
m_guiProcess.setCommand(runnable.executable, runnable.commandLineArguments);
m_guiProcess.closeWriteChannel();
m_guiProcess.start();
@@ -442,7 +442,7 @@ void ApplicationLauncherPrivate::setFinished()
if (m_deviceProcess) {
m_deviceProcess->disconnect(this);
m_deviceProcess->deleteLater();
- m_deviceProcess = 0;
+ m_deviceProcess = nullptr;
}
m_state = Inactive;
diff --git a/src/plugins/projectexplorer/applicationlauncher.h b/src/plugins/projectexplorer/applicationlauncher.h
index a321c2214d..68376fece0 100644
--- a/src/plugins/projectexplorer/applicationlauncher.h
+++ b/src/plugins/projectexplorer/applicationlauncher.h
@@ -34,6 +34,8 @@
#include <QProcess>
+#include <memory>
+
namespace Utils { class ProcessHandle; }
namespace ProjectExplorer {
@@ -47,15 +49,11 @@ class PROJECTEXPLORER_EXPORT ApplicationLauncher : public QObject
Q_OBJECT
public:
- enum Mode {
- Console,
- Gui
- };
-
explicit ApplicationLauncher(QObject *parent = nullptr);
~ApplicationLauncher() override;
void setProcessChannelMode(QProcess::ProcessChannelMode mode);
+ void setUseTerminal(bool on);
void start(const Runnable &runnable);
void start(const Runnable &runnable, const IDevice::ConstPtr &device);
void stop();
@@ -83,7 +81,7 @@ signals:
void finished(bool success);
private:
- Internal::ApplicationLauncherPrivate *d;
+ std::unique_ptr<Internal::ApplicationLauncherPrivate> d;
};
} // namespace ProjectExplorer
diff --git a/src/plugins/projectexplorer/appoutputpane.cpp b/src/plugins/projectexplorer/appoutputpane.cpp
index de0151e02d..b3e200dfb3 100644
--- a/src/plugins/projectexplorer/appoutputpane.cpp
+++ b/src/plugins/projectexplorer/appoutputpane.cpp
@@ -121,14 +121,14 @@ bool TabWidget::eventFilter(QObject *object, QEvent *event)
{
if (object == tabBar()) {
if (event->type() == QEvent::MouseButtonPress) {
- QMouseEvent *me = static_cast<QMouseEvent *>(event);
+ auto *me = static_cast<QMouseEvent *>(event);
if (me->button() == Qt::MiddleButton) {
m_tabIndexForMiddleClick = tabBar()->tabAt(me->pos());
event->accept();
return true;
}
} else if (event->type() == QEvent::MouseButtonRelease) {
- QMouseEvent *me = static_cast<QMouseEvent *>(event);
+ auto *me = static_cast<QMouseEvent *>(event);
if (me->button() == Qt::MiddleButton) {
int tab = tabBar()->tabAt(me->pos());
if (tab != -1 && tab == m_tabIndexForMiddleClick)
@@ -221,7 +221,7 @@ AppOutputPane::AppOutputPane() :
// Spacer (?)
- QVBoxLayout *layout = new QVBoxLayout;
+ auto *layout = new QVBoxLayout;
layout->setMargin(0);
m_tabWidget->setDocumentMode(true);
m_tabWidget->setTabsClosable(true);
@@ -353,7 +353,7 @@ int AppOutputPane::priorityInStatusBar() const
void AppOutputPane::clearContents()
{
- Core::OutputWindow *currentWindow = qobject_cast<Core::OutputWindow *>(m_tabWidget->currentWidget());
+ auto *currentWindow = qobject_cast<Core::OutputWindow *>(m_tabWidget->currentWidget());
if (currentWindow)
currentWindow->clear();
}
@@ -411,8 +411,15 @@ void AppOutputPane::createNewOutputWindow(RunControl *rc)
this, &AppOutputPane::appendMessage);
// First look if we can reuse a tab
- const int tabIndex = Utils::indexOf(m_runControlTabs, [rc](const RunControlTab &tab) {
- return rc->canReUseOutputPane(tab.runControl);
+ const Runnable thisRunnable = rc->runnable();
+ const int tabIndex = Utils::indexOf(m_runControlTabs, [&](const RunControlTab &tab) {
+ if (!tab.runControl || tab.runControl->isRunning())
+ return false;
+ const Runnable otherRunnable = tab.runControl->runnable();
+ return thisRunnable.executable == otherRunnable.executable
+ && thisRunnable.commandLineArguments == otherRunnable.commandLineArguments
+ && thisRunnable.workingDirectory == otherRunnable.workingDirectory
+ && thisRunnable.environment == otherRunnable.environment;
});
if (tabIndex != -1) {
RunControlTab &tab = m_runControlTabs[tabIndex];
@@ -451,7 +458,7 @@ void AppOutputPane::createNewOutputWindow(RunControl *rc)
tab.window->setFontZoom(m_zoom);
});
- Aggregation::Aggregate *agg = new Aggregation::Aggregate;
+ auto *agg = new Aggregation::Aggregate;
agg->add(ow);
agg->add(new Core::BaseTextFind(ow));
m_runControlTabs.push_back(RunControlTab(rc, ow));
@@ -682,7 +689,7 @@ void AppOutputPane::tabChanged(int i)
void AppOutputPane::contextMenuRequested(const QPoint &pos, int index)
{
QList<QAction *> actions = QList<QAction *>() << m_closeCurrentTabAction << m_closeAllTabsAction << m_closeOtherTabsAction;
- QAction *action = QMenu::exec(actions, m_tabWidget->mapToGlobal(pos), 0, m_tabWidget);
+ QAction *action = QMenu::exec(actions, m_tabWidget->mapToGlobal(pos), nullptr, m_tabWidget);
const int currentIdx = index != -1 ? index : currentIndex();
if (action == m_closeCurrentTabAction) {
if (currentIdx >= 0)
@@ -705,7 +712,7 @@ void AppOutputPane::slotRunControlChanged()
void AppOutputPane::slotRunControlFinished()
{
- RunControl *rc = qobject_cast<RunControl *>(sender());
+ auto *rc = qobject_cast<RunControl *>(sender());
QTimer::singleShot(0, this, [this, rc]() { slotRunControlFinished2(rc); });
if (rc->outputFormatter())
rc->outputFormatter()->flush();
diff --git a/src/plugins/projectexplorer/baseprojectwizarddialog.cpp b/src/plugins/projectexplorer/baseprojectwizarddialog.cpp
index 61a66a1206..cb0734f226 100644
--- a/src/plugins/projectexplorer/baseprojectwizarddialog.cpp
+++ b/src/plugins/projectexplorer/baseprojectwizarddialog.cpp
@@ -64,7 +64,7 @@ BaseProjectWizardDialog::BaseProjectWizardDialog(const Core::BaseFileWizardFacto
QWidget *parent,
const Core::WizardDialogParameters &parameters) :
Core::BaseFileWizard(factory, parameters.extraValues(), parent),
- d(new BaseProjectWizardDialogPrivate(new Utils::ProjectIntroPage))
+ d(std::make_unique<BaseProjectWizardDialogPrivate>(new Utils::ProjectIntroPage))
{
setPath(parameters.defaultPath());
setSelectedPlatform(parameters.selectedPlatform());
@@ -77,7 +77,7 @@ BaseProjectWizardDialog::BaseProjectWizardDialog(const Core::BaseFileWizardFacto
QWidget *parent,
const Core::WizardDialogParameters &parameters) :
Core::BaseFileWizard(factory, parameters.extraValues(), parent),
- d(new BaseProjectWizardDialogPrivate(introPage, introId))
+ d(std::make_unique<BaseProjectWizardDialogPrivate>(introPage, introId))
{
setPath(parameters.defaultPath());
setSelectedPlatform(parameters.selectedPlatform());
@@ -96,10 +96,7 @@ void BaseProjectWizardDialog::init()
connect(this, &QDialog::accepted, this, &BaseProjectWizardDialog::slotAccepted);
}
-BaseProjectWizardDialog::~BaseProjectWizardDialog()
-{
- delete d;
-}
+BaseProjectWizardDialog::~BaseProjectWizardDialog() = default;
QString BaseProjectWizardDialog::projectName() const
{
diff --git a/src/plugins/projectexplorer/baseprojectwizarddialog.h b/src/plugins/projectexplorer/baseprojectwizarddialog.h
index 3cd414e338..98db214c96 100644
--- a/src/plugins/projectexplorer/baseprojectwizarddialog.h
+++ b/src/plugins/projectexplorer/baseprojectwizarddialog.h
@@ -30,6 +30,8 @@
#include <coreplugin/basefilewizard.h>
#include <coreplugin/basefilewizardfactory.h>
+#include <memory>
+
namespace Utils { class ProjectIntroPage; }
namespace ProjectExplorer {
@@ -82,7 +84,7 @@ private:
void slotAccepted();
bool validateCurrentPage() override;
- BaseProjectWizardDialogPrivate *d;
+ std::unique_ptr<BaseProjectWizardDialogPrivate> d;
};
} // namespace ProjectExplorer
diff --git a/src/plugins/projectexplorer/buildconfiguration.cpp b/src/plugins/projectexplorer/buildconfiguration.cpp
index b58bea1e5c..202e6cb463 100644
--- a/src/plugins/projectexplorer/buildconfiguration.cpp
+++ b/src/plugins/projectexplorer/buildconfiguration.cpp
@@ -25,19 +25,18 @@
#include "buildconfiguration.h"
+#include "buildenvironmentwidget.h"
#include "buildinfo.h"
#include "buildsteplist.h"
-#include "projectexplorer.h"
+#include "kit.h"
+#include "kitinformation.h"
#include "kitmanager.h"
-#include "target.h"
#include "project.h"
-#include "kit.h"
-
-#include <projectexplorer/buildenvironmentwidget.h>
-#include <projectexplorer/kitinformation.h>
-#include <projectexplorer/projectexplorerconstants.h>
-#include <projectexplorer/projectmacroexpander.h>
-#include <projectexplorer/target.h>
+#include "projectexplorer.h"
+#include "projectexplorerconstants.h"
+#include "projectmacroexpander.h"
+#include "projecttree.h"
+#include "target.h"
#include <coreplugin/idocument.h>
@@ -77,9 +76,12 @@ BuildConfiguration::BuildConfiguration(Target *target, Core::Id id)
updateCacheAndEmitEnvironmentChanged();
connect(target, &Target::kitChanged,
- this, &BuildConfiguration::handleKitUpdate);
+ this, &BuildConfiguration::updateCacheAndEmitEnvironmentChanged);
connect(this, &BuildConfiguration::environmentChanged,
this, &BuildConfiguration::emitBuildDirectoryChanged);
+ // Many macroexpanders are based on the current project, so they may change the environment:
+ connect(ProjectTree::instance(), &ProjectTree::currentProjectChanged,
+ this, &BuildConfiguration::updateCacheAndEmitEnvironmentChanged);
}
Utils::FileName BuildConfiguration::buildDirectory() const
@@ -184,11 +186,6 @@ void BuildConfiguration::updateCacheAndEmitEnvironmentChanged()
emit environmentChanged(); // might trigger buildDirectoryChanged signal!
}
-void BuildConfiguration::handleKitUpdate()
-{
- updateCacheAndEmitEnvironmentChanged();
-}
-
void BuildConfiguration::emitBuildDirectoryChanged()
{
if (buildDirectory() != m_lastEmmitedBuildDirectory) {
@@ -271,6 +268,12 @@ QString BuildConfiguration::disabledReason() const
return QString();
}
+bool BuildConfiguration::regenerateBuildFiles(Node *node)
+{
+ Q_UNUSED(node);
+ return false;
+}
+
QString BuildConfiguration::buildTypeName(BuildConfiguration::BuildType type)
{
switch (type) {
@@ -355,7 +358,7 @@ int IBuildConfigurationFactory::priority(const Kit *k, const QString &projectPat
// setup
IBuildConfigurationFactory *IBuildConfigurationFactory::find(const Kit *k, const QString &projectPath)
{
- IBuildConfigurationFactory *factory = 0;
+ IBuildConfigurationFactory *factory = nullptr;
int priority = -1;
for (IBuildConfigurationFactory *i : g_buildConfigurationFactories) {
int iPriority = i->priority(k, projectPath);
@@ -370,7 +373,7 @@ IBuildConfigurationFactory *IBuildConfigurationFactory::find(const Kit *k, const
// create
IBuildConfigurationFactory * IBuildConfigurationFactory::find(Target *parent)
{
- IBuildConfigurationFactory *factory = 0;
+ IBuildConfigurationFactory *factory = nullptr;
int priority = -1;
for (IBuildConfigurationFactory *i : g_buildConfigurationFactories) {
int iPriority = i->priority(parent);
diff --git a/src/plugins/projectexplorer/buildconfiguration.h b/src/plugins/projectexplorer/buildconfiguration.h
index 7535409a67..a368fe4909 100644
--- a/src/plugins/projectexplorer/buildconfiguration.h
+++ b/src/plugins/projectexplorer/buildconfiguration.h
@@ -36,6 +36,7 @@ namespace ProjectExplorer {
class BuildInfo;
class NamedWidget;
class BuildStepList;
+class Node;
class Kit;
class Target;
class IOutputParser;
@@ -79,6 +80,8 @@ public:
virtual bool isEnabled() const;
virtual QString disabledReason() const;
+ virtual bool regenerateBuildFiles(Node *node);
+
enum BuildType {
Unknown,
Debug,
@@ -93,6 +96,7 @@ public:
void prependCompilerPathToEnvironment(Utils::Environment &env) const;
static void prependCompilerPathToEnvironment(Kit *k, Utils::Environment &env);
+ void updateCacheAndEmitEnvironmentChanged();
signals:
void environmentChanged();
@@ -102,10 +106,8 @@ signals:
protected:
virtual void initialize(const BuildInfo *info);
- void updateCacheAndEmitEnvironmentChanged();
private:
- void handleKitUpdate();
void emitBuildDirectoryChanged();
bool m_clearSystemEnvironment = false;
diff --git a/src/plugins/projectexplorer/buildinfo.cpp b/src/plugins/projectexplorer/buildinfo.cpp
index d8b9d6987c..67dca0e280 100644
--- a/src/plugins/projectexplorer/buildinfo.cpp
+++ b/src/plugins/projectexplorer/buildinfo.cpp
@@ -27,5 +27,4 @@
using namespace ProjectExplorer;
-BuildInfo::~BuildInfo()
-{ }
+BuildInfo::~BuildInfo() = default;
diff --git a/src/plugins/projectexplorer/buildmanager.cpp b/src/plugins/projectexplorer/buildmanager.cpp
index ac23d7f3e7..10c60357fe 100644
--- a/src/plugins/projectexplorer/buildmanager.cpp
+++ b/src/plugins/projectexplorer/buildmanager.cpp
@@ -61,7 +61,7 @@ namespace ProjectExplorer {
static QString msgProgress(int progress, int total)
{
- return BuildManager::tr("Finished %1 of %n steps", 0, total).arg(progress);
+ return BuildManager::tr("Finished %1 of %n steps", nullptr, total).arg(progress);
}
class BuildManagerPrivate
@@ -103,6 +103,7 @@ static BuildManager *m_instance = nullptr;
BuildManager::BuildManager(QObject *parent, QAction *cancelBuildAction)
: QObject(parent)
{
+ QTC_CHECK(!m_instance);
m_instance = this;
d = new BuildManagerPrivate;
@@ -166,6 +167,7 @@ BuildManager::~BuildManager()
delete d->m_outputWindow;
delete d;
+ d = nullptr;
}
void BuildManager::aboutToRemoveProject(Project *p)
@@ -642,8 +644,8 @@ void BuildManager::decrementActiveBuildSteps(BuildStep *bs)
void BuildManager::disconnectOutput(BuildStep *bs)
{
- disconnect(bs, &BuildStep::addTask, m_instance, 0);
- disconnect(bs, &BuildStep::addOutput, m_instance, 0);
+ disconnect(bs, &BuildStep::addTask, m_instance, nullptr);
+ disconnect(bs, &BuildStep::addOutput, m_instance, nullptr);
}
} // namespace ProjectExplorer
diff --git a/src/plugins/projectexplorer/buildstep.cpp b/src/plugins/projectexplorer/buildstep.cpp
index 232a95483a..864fdbf6b3 100644
--- a/src/plugins/projectexplorer/buildstep.cpp
+++ b/src/plugins/projectexplorer/buildstep.cpp
@@ -140,12 +140,20 @@ QVariantMap BuildStep::toMap() const
BuildConfiguration *BuildStep::buildConfiguration() const
{
- return qobject_cast<BuildConfiguration *>(parent()->parent());
+ auto config = qobject_cast<BuildConfiguration *>(parent()->parent());
+ if (config)
+ return config;
+ // step is not part of a build configuration, use active build configuration of step's target
+ return target()->activeBuildConfiguration();
}
DeployConfiguration *BuildStep::deployConfiguration() const
{
- return qobject_cast<DeployConfiguration *>(parent()->parent());
+ auto config = qobject_cast<DeployConfiguration *>(parent()->parent());
+ if (config)
+ return config;
+ // step is not part of a deploy configuration, use active deploy configuration of step's target
+ return target()->activeDeployConfiguration();
}
ProjectConfiguration *BuildStep::projectConfiguration() const
diff --git a/src/plugins/projectexplorer/buildstep.h b/src/plugins/projectexplorer/buildstep.h
index dd68e52216..d6e685735b 100644
--- a/src/plugins/projectexplorer/buildstep.h
+++ b/src/plugins/projectexplorer/buildstep.h
@@ -118,13 +118,11 @@ public:
BuildStepCreator creator;
};
-class PROJECTEXPLORER_EXPORT BuildStepFactory : public QObject
+class PROJECTEXPLORER_EXPORT BuildStepFactory
{
- Q_OBJECT
-
public:
BuildStepFactory();
- ~BuildStepFactory() override;
+ virtual ~BuildStepFactory();
static const QList<BuildStepFactory *> allBuildStepFactories();
@@ -133,9 +131,12 @@ public:
BuildStep *create(BuildStepList *parent, Core::Id id);
BuildStep *restore(BuildStepList *parent, const QVariantMap &map);
- virtual bool canHandle(BuildStepList *bsl) const;
+ bool canHandle(BuildStepList *bsl) const;
protected:
+ BuildStepFactory(const BuildStepFactory &) = delete;
+ BuildStepFactory &operator=(const BuildStepFactory &) = delete;
+
using BuildStepCreator = std::function<BuildStep *(BuildStepList *)>;
template <class BuildStepType>
diff --git a/src/plugins/projectexplorer/buildsteplist.cpp b/src/plugins/projectexplorer/buildsteplist.cpp
index 6ae0cd6319..f961d9f4ef 100644
--- a/src/plugins/projectexplorer/buildsteplist.cpp
+++ b/src/plugins/projectexplorer/buildsteplist.cpp
@@ -184,7 +184,7 @@ Target *BuildStepList::target() const
auto dc = qobject_cast<DeployConfiguration *>(parent());
if (dc)
return dc->target();
- return 0;
+ return nullptr;
}
Project *BuildStepList::project() const
diff --git a/src/plugins/projectexplorer/buildstepspage.cpp b/src/plugins/projectexplorer/buildstepspage.cpp
index 6b6b6af6bb..2465ef002d 100644
--- a/src/plugins/projectexplorer/buildstepspage.cpp
+++ b/src/plugins/projectexplorer/buildstepspage.cpp
@@ -50,8 +50,7 @@ using namespace ProjectExplorer;
using namespace ProjectExplorer::Internal;
using namespace Utils;
-ToolWidget::ToolWidget(QWidget *parent) : FadingPanel(parent),
- m_targetOpacity(.999)
+ToolWidget::ToolWidget(QWidget *parent) : FadingPanel(parent)
{
auto layout = new QHBoxLayout;
layout->setMargin(4);
@@ -169,7 +168,7 @@ void ToolWidget::setDownVisible(bool b)
}
BuildStepsWidgetData::BuildStepsWidgetData(BuildStep *s) :
- step(s), widget(0), detailsWidget(0)
+ step(s), widget(nullptr), detailsWidget(nullptr)
{
widget = s->createConfigWidget();
Q_ASSERT(widget);
diff --git a/src/plugins/projectexplorer/buildstepspage.h b/src/plugins/projectexplorer/buildstepspage.h
index 81fd9a4c3d..17b2879376 100644
--- a/src/plugins/projectexplorer/buildstepspage.h
+++ b/src/plugins/projectexplorer/buildstepspage.h
@@ -52,8 +52,8 @@ class ToolWidget : public Utils::FadingPanel
public:
explicit ToolWidget(QWidget *parent = nullptr);
- void fadeTo(qreal value);
- void setOpacity(qreal value);
+ void fadeTo(qreal value) override;
+ void setOpacity(qreal value) override;
void setBuildStepEnabled(bool b);
void setUpEnabled(bool b);
@@ -77,7 +77,7 @@ private:
bool m_buildStepEnabled = true;
Utils::FadingWidget *m_firstWidget;
Utils::FadingWidget *m_secondWidget;
- qreal m_targetOpacity;
+ qreal m_targetOpacity = .999;
};
class BuildStepsWidgetData
@@ -98,7 +98,7 @@ class BuildStepListWidget : public NamedWidget
public:
BuildStepListWidget(QWidget *parent = nullptr);
- virtual ~BuildStepListWidget();
+ ~BuildStepListWidget() override;
void init(BuildStepList *bsl);
diff --git a/src/plugins/projectexplorer/compileoutputwindow.cpp b/src/plugins/projectexplorer/compileoutputwindow.cpp
index 2f1e4f75a0..ffdd9c24fb 100644
--- a/src/plugins/projectexplorer/compileoutputwindow.cpp
+++ b/src/plugins/projectexplorer/compileoutputwindow.cpp
@@ -108,7 +108,7 @@ private:
}
protected:
- void mouseMoveEvent(QMouseEvent *ev)
+ void mouseMoveEvent(QMouseEvent *ev) override
{
const int line = cursorForPosition(ev->pos()).block().blockNumber();
if (m_taskids.contains(line) && m_mousePressButton == Qt::NoButton)
@@ -118,14 +118,14 @@ protected:
QPlainTextEdit::mouseMoveEvent(ev);
}
- void mousePressEvent(QMouseEvent *ev)
+ void mousePressEvent(QMouseEvent *ev) override
{
m_mousePressPosition = ev->pos();
m_mousePressButton = ev->button();
QPlainTextEdit::mousePressEvent(ev);
}
- void mouseReleaseEvent(QMouseEvent *ev)
+ void mouseReleaseEvent(QMouseEvent *ev) override
{
if ((m_mousePressPosition - ev->pos()).manhattanLength() < 4
&& m_mousePressButton == Qt::LeftButton) {
diff --git a/src/plugins/projectexplorer/currentprojectfind.cpp b/src/plugins/projectexplorer/currentprojectfind.cpp
index 79a418afc8..578e0bdba7 100644
--- a/src/plugins/projectexplorer/currentprojectfind.cpp
+++ b/src/plugins/projectexplorer/currentprojectfind.cpp
@@ -66,7 +66,7 @@ QString CurrentProjectFind::displayName() const
bool CurrentProjectFind::isEnabled() const
{
- return ProjectTree::currentProject() != 0 && BaseFileFind::isEnabled();
+ return ProjectTree::currentProject() != nullptr && BaseFileFind::isEnabled();
}
QVariant CurrentProjectFind::additionalParameters() const
diff --git a/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp b/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp
index 4d248bd43d..b26591ca81 100644
--- a/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp
+++ b/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp
@@ -152,7 +152,7 @@ void CustomExecutableDialog::accept()
bool CustomExecutableDialog::event(QEvent *event)
{
if (event->type() == QEvent::ShortcutOverride) {
- QKeyEvent *ke = static_cast<QKeyEvent *>(event);
+ auto *ke = static_cast<QKeyEvent *>(event);
if (ke->key() == Qt::Key_Escape && !ke->modifiers()) {
ke->accept();
return true;
@@ -254,7 +254,6 @@ Runnable CustomExecutableRunConfiguration::runnable() const
r.executable = extraAspect<ExecutableAspect>()->executable().toString();
r.commandLineArguments = extraAspect<ArgumentsAspect>()->arguments();
r.environment = extraAspect<EnvironmentAspect>()->environment();
- r.runMode = extraAspect<TerminalAspect>()->runMode();
r.workingDirectory = workingDirectory.toString();
r.device = DeviceManager::instance()->defaultDevice(Constants::DESKTOP_DEVICE_TYPE);
@@ -285,6 +284,8 @@ CustomExecutableRunConfigurationFactory::CustomExecutableRunConfigurationFactory
FixedRunConfigurationFactory(CustomExecutableRunConfiguration::tr("Custom Executable"))
{
registerRunConfiguration<CustomExecutableRunConfiguration>(CUSTOM_EXECUTABLE_ID);
+
+ addRunWorkerFactory<SimpleTargetRunner>(ProjectExplorer::Constants::NORMAL_RUN_MODE);
}
} // namespace ProjectExplorer
diff --git a/src/plugins/projectexplorer/customparser.cpp b/src/plugins/projectexplorer/customparser.cpp
index 34a9833b1d..8c0b287ce4 100644
--- a/src/plugins/projectexplorer/customparser.cpp
+++ b/src/plugins/projectexplorer/customparser.cpp
@@ -113,7 +113,7 @@ bool CustomParserSettings::operator ==(const CustomParserSettings &other) const
CustomParser::CustomParser(const CustomParserSettings &settings)
{
- setObjectName(QLatin1String("CustomParser"));
+ setObjectName("CustomParser");
setSettings(settings);
}
@@ -134,6 +134,11 @@ void CustomParser::stdOutput(const QString &line)
IOutputParser::stdOutput(line);
}
+void CustomParser::setWorkingDirectory(const QString &workingDirectory)
+{
+ m_workingDirectory = workingDirectory;
+}
+
void CustomParser::setSettings(const CustomParserSettings &settings)
{
m_error = settings.error;
@@ -145,6 +150,14 @@ Core::Id CustomParser::id()
return Core::Id("ProjectExplorer.OutputParser.Custom");
}
+FileName CustomParser::absoluteFilePath(const QString &filePath) const
+{
+ if (m_workingDirectory.isEmpty())
+ return FileName::fromUserInput(filePath);
+
+ return FileName::fromString(FileUtils::resolvePath(m_workingDirectory, filePath));
+}
+
bool CustomParser::hasMatch(const QString &line, CustomParserExpression::CustomParserChannel channel,
const CustomParserExpression &expression, Task::TaskType taskType)
{
@@ -158,7 +171,7 @@ bool CustomParser::hasMatch(const QString &line, CustomParserExpression::CustomP
if (!match.hasMatch())
return false;
- const FileName fileName = FileName::fromUserInput(match.captured(expression.fileNameCap()));
+ const FileName fileName = absoluteFilePath(match.captured(expression.fileNameCap()));
const int lineNumber = match.captured(expression.lineNumberCap()).toInt();
const QString message = match.captured(expression.messageCap());
@@ -188,6 +201,7 @@ bool CustomParser::parseLine(const QString &rawLine, CustomParserExpression::Cus
void ProjectExplorerPlugin::testCustomOutputParsers_data()
{
QTest::addColumn<QString>("input");
+ QTest::addColumn<QString>("workDir");
QTest::addColumn<OutputParserTester::Channel>("inputChannel");
QTest::addColumn<CustomParserExpression::CustomParserChannel>("filterErrorChannel");
QTest::addColumn<CustomParserExpression::CustomParserChannel>("filterWarningChannel");
@@ -205,11 +219,12 @@ void ProjectExplorerPlugin::testCustomOutputParsers_data()
QTest::addColumn<QString>("outputLines");
const Core::Id categoryCompile = Constants::TASK_CATEGORY_COMPILE;
- const QString simplePattern = QLatin1String("^([a-z]+\\.[a-z]+):(\\d+): error: ([^\\s].+)$");
- const FileName fileName = FileName::fromUserInput(QLatin1String("main.c"));
+ const QString simplePattern = "^([a-z]+\\.[a-z]+):(\\d+): error: ([^\\s].+)$";
+ const FileName fileName = FileName::fromUserInput("main.c");
QTest::newRow("empty patterns")
<< QString::fromLatin1("Sometext")
+ << QString()
<< OutputParserTester::STDOUT
<< CustomParserExpression::ParseBothChannels << CustomParserExpression::ParseBothChannels
<< QString() << 1 << 2 << 3
@@ -220,6 +235,7 @@ void ProjectExplorerPlugin::testCustomOutputParsers_data()
QTest::newRow("pass-through stdout")
<< QString::fromLatin1("Sometext")
+ << QString()
<< OutputParserTester::STDOUT
<< CustomParserExpression::ParseBothChannels << CustomParserExpression::ParseBothChannels
<< simplePattern << 1 << 2 << 3
@@ -230,6 +246,7 @@ void ProjectExplorerPlugin::testCustomOutputParsers_data()
QTest::newRow("pass-through stderr")
<< QString::fromLatin1("Sometext")
+ << QString()
<< OutputParserTester::STDERR
<< CustomParserExpression::ParseBothChannels << CustomParserExpression::ParseBothChannels
<< simplePattern << 1 << 2 << 3
@@ -238,24 +255,63 @@ void ProjectExplorerPlugin::testCustomOutputParsers_data()
<< QList<Task>()
<< QString();
- const QString simpleError = QLatin1String("main.c:9: error: `sfasdf' undeclared (first use this function)");
- const QString simpleErrorPassThrough = simpleError + QLatin1Char('\n');
- const QString message = QLatin1String("`sfasdf' undeclared (first use this function)");
+ const QString simpleError = "main.c:9: error: `sfasdf' undeclared (first use this function)";
+ const QString simpleErrorPassThrough = simpleError + '\n';
+ const QString message = "`sfasdf' undeclared (first use this function)";
QTest::newRow("simple error")
<< simpleError
+ << QString()
<< OutputParserTester::STDERR
<< CustomParserExpression::ParseBothChannels << CustomParserExpression::ParseBothChannels
<< simplePattern << 1 << 2 << 3
<< QString() << 0 << 0 << 0
<< QString() << QString()
- << (QList<Task>()
- << Task(Task::Error, message, fileName, 9, categoryCompile)
- )
+ << QList<Task>{Task(Task::Error, message, fileName, 9, categoryCompile)}
+ << QString();
+
+ const QString pathPattern = "^([a-z\\./]+):(\\d+): error: ([^\\s].+)$";
+ QString workingDir = "/home/src/project";
+ FileName expandedFileName = FileName::fromString("/home/src/project/main.c");
+
+ QTest::newRow("simple error with expanded path")
+ << "main.c:9: error: `sfasdf' undeclared (first use this function)"
+ << workingDir
+ << OutputParserTester::STDERR
+ << CustomParserExpression::ParseBothChannels << CustomParserExpression::ParseBothChannels
+ << pathPattern << 1 << 2 << 3
+ << QString() << 0 << 0 << 0
+ << QString() << QString()
+ << QList<Task>{Task(Task::Error, message, expandedFileName, 9, categoryCompile)}
+ << QString();
+
+ expandedFileName = FileName::fromString("/home/src/project/subdir/main.c");
+ QTest::newRow("simple error with subdir path")
+ << "subdir/main.c:9: error: `sfasdf' undeclared (first use this function)"
+ << workingDir
+ << OutputParserTester::STDERR
+ << CustomParserExpression::ParseBothChannels << CustomParserExpression::ParseBothChannels
+ << pathPattern << 1 << 2 << 3
+ << QString() << 0 << 0 << 0
+ << QString() << QString()
+ << QList<Task>{Task(Task::Error, message, expandedFileName, 9, categoryCompile)}
+ << QString();
+
+ workingDir = "/home/src/build-project";
+ QTest::newRow("simple error with buildir path")
+ << "../project/subdir/main.c:9: error: `sfasdf' undeclared (first use this function)"
+ << workingDir
+ << OutputParserTester::STDERR
+ << CustomParserExpression::ParseBothChannels << CustomParserExpression::ParseBothChannels
+ << pathPattern << 1 << 2 << 3
+ << QString() << 0 << 0 << 0
+ << QString() << QString()
+ << QList<Task>{Task(Task::Error, message, expandedFileName, 9, categoryCompile)}
<< QString();
QTest::newRow("simple error on wrong channel")
<< simpleError
+ << QString()
<< OutputParserTester::STDOUT
<< CustomParserExpression::ParseStdErrChannel << CustomParserExpression::ParseBothChannels
<< simplePattern << 1 << 2 << 3
@@ -266,6 +322,7 @@ void ProjectExplorerPlugin::testCustomOutputParsers_data()
QTest::newRow("simple error on other wrong channel")
<< simpleError
+ << QString()
<< OutputParserTester::STDERR
<< CustomParserExpression::ParseStdOutChannel << CustomParserExpression::ParseBothChannels
<< simplePattern << 1 << 2 << 3
@@ -274,68 +331,65 @@ void ProjectExplorerPlugin::testCustomOutputParsers_data()
<< QList<Task>()
<< QString();
- const QString simpleError2 = QLatin1String("Error: Line 19 in main.c: `sfasdf' undeclared (first use this function)");
- const QString simplePattern2 = QLatin1String("^Error: Line (\\d+) in ([a-z]+\\.[a-z]+): ([^\\s].+)$");
+ const QString simpleError2 = "Error: Line 19 in main.c: `sfasdf' undeclared (first use this function)";
+ const QString simplePattern2 = "^Error: Line (\\d+) in ([a-z]+\\.[a-z]+): ([^\\s].+)$";
const int lineNumber2 = 19;
QTest::newRow("another simple error on stderr")
<< simpleError2
+ << QString()
<< OutputParserTester::STDERR
<< CustomParserExpression::ParseBothChannels << CustomParserExpression::ParseBothChannels
<< simplePattern2 << 2 << 1 << 3
<< QString() << 1 << 2 << 3
<< QString() << QString()
- << (QList<Task>()
- << Task(Task::Error, message, fileName, lineNumber2, categoryCompile)
- )
+ << QList<Task>{Task(Task::Error, message, fileName, lineNumber2, categoryCompile)}
<< QString();
QTest::newRow("another simple error on stdout")
<< simpleError2
+ << QString()
<< OutputParserTester::STDOUT
<< CustomParserExpression::ParseBothChannels << CustomParserExpression::ParseBothChannels
<< simplePattern2 << 2 << 1 << 3
<< QString() << 1 << 2 << 3
<< QString() << QString()
- << (QList<Task>()
- << Task(Task::Error, message, fileName, lineNumber2, categoryCompile)
- )
+ << QList<Task>{Task(Task::Error, message, fileName, lineNumber2, categoryCompile)}
<< QString();
- const QString simpleWarningPattern = QLatin1String("^([a-z]+\\.[a-z]+):(\\d+): warning: ([^\\s].+)$");
- const QString simpleWarning = QLatin1String("main.c:1234: warning: `helloWorld' declared but not used");
- const QString warningMessage = QLatin1String("`helloWorld' declared but not used");
+ const QString simpleWarningPattern = "^([a-z]+\\.[a-z]+):(\\d+): warning: ([^\\s].+)$";
+ const QString simpleWarning = "main.c:1234: warning: `helloWorld' declared but not used";
+ const QString warningMessage = "`helloWorld' declared but not used";
QTest::newRow("simple warning")
<< simpleWarning
+ << QString()
<< OutputParserTester::STDERR
<< CustomParserExpression::ParseBothChannels << CustomParserExpression::ParseBothChannels
<< QString() << 1 << 2 << 3
<< simpleWarningPattern << 1 << 2 << 3
<< QString() << QString()
- << (QList<Task>()
- << Task(Task::Warning, warningMessage, fileName, 1234, categoryCompile)
- )
+ << QList<Task>{Task(Task::Warning, warningMessage, fileName, 1234, categoryCompile)}
<< QString();
- const QString simpleWarning2 = QLatin1String("Warning: `helloWorld' declared but not used (main.c:19)");
- const QString simpleWarningPassThrough2 = simpleWarning2 + QLatin1Char('\n');
- const QString simpleWarningPattern2 = QLatin1String("^Warning: (.*) \\(([a-z]+\\.[a-z]+):(\\d+)\\)$");
+ const QString simpleWarning2 = "Warning: `helloWorld' declared but not used (main.c:19)";
+ const QString simpleWarningPassThrough2 = simpleWarning2 + '\n';
+ const QString simpleWarningPattern2 = "^Warning: (.*) \\(([a-z]+\\.[a-z]+):(\\d+)\\)$";
QTest::newRow("another simple warning on stdout")
<< simpleWarning2
+ << QString()
<< OutputParserTester::STDOUT
<< CustomParserExpression::ParseBothChannels << CustomParserExpression::ParseStdOutChannel
<< simplePattern2 << 1 << 2 << 3
<< simpleWarningPattern2 << 2 << 3 << 1
<< QString() << QString()
- << (QList<Task>()
- << Task(Task::Warning, warningMessage, fileName, lineNumber2, categoryCompile)
- )
+ << QList<Task>{Task(Task::Warning, warningMessage, fileName, lineNumber2, categoryCompile)}
<< QString();
QTest::newRow("warning on wrong channel")
<< simpleWarning2
+ << QString()
<< OutputParserTester::STDOUT
<< CustomParserExpression::ParseBothChannels << CustomParserExpression::ParseStdErrChannel
<< QString() << 1 << 2 << 3
@@ -346,6 +400,7 @@ void ProjectExplorerPlugin::testCustomOutputParsers_data()
QTest::newRow("warning on other wrong channel")
<< simpleWarning2
+ << QString()
<< OutputParserTester::STDERR
<< CustomParserExpression::ParseBothChannels << CustomParserExpression::ParseStdOutChannel
<< QString() << 1 << 2 << 3
@@ -356,50 +411,48 @@ void ProjectExplorerPlugin::testCustomOutputParsers_data()
QTest::newRow("error and *warning*")
<< simpleWarning
+ << QString()
<< OutputParserTester::STDERR
<< CustomParserExpression::ParseBothChannels << CustomParserExpression::ParseBothChannels
<< simplePattern << 1 << 2 << 3
<< simpleWarningPattern << 1 << 2 << 3
<< QString() << QString()
- << (QList<Task>()
- << Task(Task::Warning, warningMessage, fileName, 1234, categoryCompile)
- )
+ << QList<Task>{Task(Task::Warning, warningMessage, fileName, 1234, categoryCompile)}
<< QString();
QTest::newRow("*error* when equal pattern")
<< simpleError
+ << QString()
<< OutputParserTester::STDERR
<< CustomParserExpression::ParseBothChannels << CustomParserExpression::ParseBothChannels
<< simplePattern << 1 << 2 << 3
<< simplePattern << 1 << 2 << 3
<< QString() << QString()
- << (QList<Task>()
- << Task(Task::Error, message, fileName, 9, categoryCompile)
- )
+ << QList<Task>{Task(Task::Error, message, fileName, 9, categoryCompile)}
<< QString();
- const QString unitTestError = QLatin1String("../LedDriver/LedDriverTest.c:63: FAIL: Expected 0x0080 Was 0xffff");
- const FileName unitTestFileName = FileName::fromUserInput(QLatin1String("../LedDriver/LedDriverTest.c"));
- const QString unitTestMessage = QLatin1String("Expected 0x0080 Was 0xffff");
- const QString unitTestPattern = QLatin1String("^([^:]+):(\\d+): FAIL: ([^\\s].+)$");
+ const QString unitTestError = "../LedDriver/LedDriverTest.c:63: FAIL: Expected 0x0080 Was 0xffff";
+ const FileName unitTestFileName = FileName::fromUserInput("../LedDriver/LedDriverTest.c");
+ const QString unitTestMessage = "Expected 0x0080 Was 0xffff";
+ const QString unitTestPattern = "^([^:]+):(\\d+): FAIL: ([^\\s].+)$";
const int unitTestLineNumber = 63;
QTest::newRow("unit test error")
<< unitTestError
+ << QString()
<< OutputParserTester::STDOUT
<< CustomParserExpression::ParseBothChannels << CustomParserExpression::ParseBothChannels
<< unitTestPattern << 1 << 2 << 3
<< QString() << 1 << 2 << 3
<< QString() << QString()
- << (QList<Task>()
- << Task(Task::Error, unitTestMessage, unitTestFileName, unitTestLineNumber, categoryCompile)
- )
+ << QList<Task>{Task(Task::Error, unitTestMessage, unitTestFileName, unitTestLineNumber, categoryCompile)}
<< QString();
}
void ProjectExplorerPlugin::testCustomOutputParsers()
{
QFETCH(QString, input);
+ QFETCH(QString, workDir);
QFETCH(OutputParserTester::Channel, inputChannel);
QFETCH(CustomParserExpression::CustomParserChannel, filterErrorChannel);
QFETCH(CustomParserExpression::CustomParserChannel, filterWarningChannel);
@@ -430,6 +483,7 @@ void ProjectExplorerPlugin::testCustomOutputParsers()
CustomParser *parser = new CustomParser;
parser->setSettings(settings);
+ parser->setWorkingDirectory(workDir);
OutputParserTester testbench;
testbench.appendOutputParser(parser);
diff --git a/src/plugins/projectexplorer/customparser.h b/src/plugins/projectexplorer/customparser.h
index e1490baeab..b7c70d4759 100644
--- a/src/plugins/projectexplorer/customparser.h
+++ b/src/plugins/projectexplorer/customparser.h
@@ -89,17 +89,22 @@ public:
void stdError(const QString &line) override;
void stdOutput(const QString &line) override;
+ void setWorkingDirectory(const QString &workingDirectory) override;
+
void setSettings(const CustomParserSettings &settings);
static Core::Id id();
private:
+ Utils::FileName absoluteFilePath(const QString &filePath) const;
bool hasMatch(const QString &line, CustomParserExpression::CustomParserChannel channel,
const CustomParserExpression &expression, Task::TaskType taskType);
bool parseLine(const QString &rawLine, CustomParserExpression::CustomParserChannel channel);
CustomParserExpression m_error;
CustomParserExpression m_warning;
+
+ QString m_workingDirectory;
};
} // namespace ProjectExplorer
diff --git a/src/plugins/projectexplorer/customtoolchain.cpp b/src/plugins/projectexplorer/customtoolchain.cpp
index a5b9a74302..68c663bbc9 100644
--- a/src/plugins/projectexplorer/customtoolchain.cpp
+++ b/src/plugins/projectexplorer/customtoolchain.cpp
@@ -336,7 +336,7 @@ bool CustomToolChain::fromMap(const QVariantMap &data)
m_compilerCommand = FileName::fromString(data.value(QLatin1String(compilerCommandKeyC)).toString());
m_makeCommand = FileName::fromString(data.value(QLatin1String(makeCommandKeyC)).toString());
- m_targetAbi = Abi(data.value(QLatin1String(targetAbiKeyC)).toString());
+ m_targetAbi = Abi::fromString(data.value(QLatin1String(targetAbiKeyC)).toString());
const QStringList macros = data.value(QLatin1String(predefinedMacrosKeyC)).toStringList();
m_predefinedMacros = Macro::toMacros(macros.join('\n').toUtf8());
setHeaderPaths(data.value(QLatin1String(headerPathsKeyC)).toStringList());
@@ -379,43 +379,8 @@ Core::Id CustomToolChain::outputParserId() const
return m_outputParserId;
}
-static Core::Id convertLegacySettings(Core::Id parserId)
-{
- enum OutputParser
- {
- Gcc = 0,
- Clang = 1,
- LinuxIcc = 2,
- Msvc = 3,
- Custom = 4,
- OutputParserCount
- };
-
- bool ok;
- const OutputParser index = static_cast<OutputParser>(parserId.toString().toInt(&ok));
- if (!ok)
- return parserId;
-
- switch (index) {
- case Gcc:
- return GccParser::id();
- case Clang:
- return ClangParser::id();
- case LinuxIcc:
- return LinuxIccParser::id();
- case Msvc:
- return HostOsInfo::isWindowsHost() ? MsvcParser::id() : CustomParser::id();
- case Custom:
- return CustomParser::id();
- default:
- return parserId;
- }
-}
-
void CustomToolChain::setOutputParserId(Core::Id parserId)
{
- parserId = convertLegacySettings(parserId);
-
if (m_outputParserId == parserId)
return;
m_outputParserId = parserId;
diff --git a/src/plugins/projectexplorer/customwizard/customwizard.cpp b/src/plugins/projectexplorer/customwizard/customwizard.cpp
index c9a84889d1..9a3ea42a4e 100644
--- a/src/plugins/projectexplorer/customwizard/customwizard.cpp
+++ b/src/plugins/projectexplorer/customwizard/customwizard.cpp
@@ -160,7 +160,7 @@ void CustomWizard::setParameters(const CustomWizardParametersPtr &p)
Core::BaseFileWizard *CustomWizard::create(QWidget *parent, const Core::WizardDialogParameters &p) const
{
- QTC_ASSERT(!d->m_parameters.isNull(), return 0);
+ QTC_ASSERT(!d->m_parameters.isNull(), return nullptr);
auto wizard = new Core::BaseFileWizard(this, p.extraValues(), parent);
d->m_context->reset();
@@ -213,7 +213,7 @@ static inline bool createFile(CustomWizardFile cwFile,
generatedFile.setContents(CustomWizardContext::processFile(fm, contentsIn));
}
- Core::GeneratedFile::Attributes attributes = 0;
+ Core::GeneratedFile::Attributes attributes = {};
if (cwFile.openEditor)
attributes |= Core::GeneratedFile::OpenEditorAttribute;
if (cwFile.openProject)
@@ -230,7 +230,7 @@ template <class WizardPage>
foreach (int pageId, w->pageIds())
if (auto wp = qobject_cast<WizardPage *>(w->page(pageId)))
return wp;
- return 0;
+ return nullptr;
}
// Determine where to run the generator script. The user may specify
@@ -362,7 +362,7 @@ CustomWizard *CustomWizard::createWizard(const CustomProjectWizard::CustomWizard
if (!rc) {
qWarning("Unable to create custom wizard for class %s.", qPrintable(p->klass));
- return 0;
+ return nullptr;
}
rc->setParameters(p);
@@ -487,9 +487,7 @@ QList<Core::IWizardFactory *> CustomWizard::createWizards()
for QLineEdit-type fields' default text.
*/
-CustomProjectWizard::CustomProjectWizard()
-{
-}
+CustomProjectWizard::CustomProjectWizard() = default;
/*!
Can be reimplemented to create custom project wizards.
@@ -540,7 +538,7 @@ void CustomProjectWizard::initProjectWizardDialog(BaseProjectWizardDialog *w,
Core::GeneratedFiles CustomProjectWizard::generateFiles(const QWizard *w, QString *errorMessage) const
{
- const BaseProjectWizardDialog *dialog = qobject_cast<const BaseProjectWizardDialog *>(w);
+ const auto *dialog = qobject_cast<const BaseProjectWizardDialog *>(w);
QTC_ASSERT(dialog, return Core::GeneratedFiles());
// Add project name as macro. Path is here under project directory
CustomWizardContextPtr ctx = context();
diff --git a/src/plugins/projectexplorer/customwizard/customwizardpage.cpp b/src/plugins/projectexplorer/customwizard/customwizardpage.cpp
index 3cdfe71bbd..2f5f9923f6 100644
--- a/src/plugins/projectexplorer/customwizard/customwizardpage.cpp
+++ b/src/plugins/projectexplorer/customwizard/customwizardpage.cpp
@@ -163,7 +163,7 @@ void CustomWizardFieldPage::addField(const CustomWizardField &field)\
static void comboChoices(const CustomWizardField::ControlAttributeMap &controlAttributes,
QStringList *values, QStringList *displayTexts)
{
- typedef CustomWizardField::ControlAttributeMap::ConstIterator AttribMapConstIt;
+ using AttribMapConstIt = CustomWizardField::ControlAttributeMap::ConstIterator;
values->clear();
displayTexts->clear();
@@ -260,7 +260,7 @@ QWidget *CustomWizardFieldPage::registerCheckBox(const QString &fieldName,
const QString &fieldDescription,
const CustomWizardField &field)
{
- typedef CustomWizardField::ControlAttributeMap::const_iterator AttributeMapConstIt;
+ using AttributeMapConstIt = CustomWizardField::ControlAttributeMap::const_iterator;
auto checkBox = new TextFieldCheckBox(fieldDescription);
const bool defaultValue = field.controlAttributes.value(QLatin1String("defaultvalue")) == QLatin1String("true");
diff --git a/src/plugins/projectexplorer/customwizard/customwizardparameters.cpp b/src/plugins/projectexplorer/customwizard/customwizardparameters.cpp
index 14fd113138..827edbedb3 100644
--- a/src/plugins/projectexplorer/customwizard/customwizardparameters.cpp
+++ b/src/plugins/projectexplorer/customwizard/customwizardparameters.cpp
@@ -835,8 +835,8 @@ bool CustomWizardContext::replaceFields(const FieldReplacementMap &fm, QString *
// used for the arguments of a generator script.
class TemporaryFileTransform {
public:
- typedef CustomWizardContext::TemporaryFilePtr TemporaryFilePtr;
- typedef CustomWizardContext::TemporaryFilePtrList TemporaryFilePtrList;
+ using TemporaryFilePtr = CustomWizardContext::TemporaryFilePtr;
+ using TemporaryFilePtrList = CustomWizardContext::TemporaryFilePtrList;
explicit TemporaryFileTransform(TemporaryFilePtrList *f);
diff --git a/src/plugins/projectexplorer/customwizard/customwizardscriptgenerator.cpp b/src/plugins/projectexplorer/customwizard/customwizardscriptgenerator.cpp
index 80c5866248..71c43b01c1 100644
--- a/src/plugins/projectexplorer/customwizard/customwizardscriptgenerator.cpp
+++ b/src/plugins/projectexplorer/customwizard/customwizardscriptgenerator.cpp
@@ -230,7 +230,7 @@ bool runCustomWizardGeneratorScript(const QString &targetPath,
{
return runGenerationScriptHelper(targetPath, script, arguments,
false, fieldMap,
- 0, errorMessage);
+ nullptr, errorMessage);
}
} // namespace Internal
diff --git a/src/plugins/projectexplorer/deploymentdataview.cpp b/src/plugins/projectexplorer/deploymentdataview.cpp
index 40f4ad3fb4..bce3bff0b4 100644
--- a/src/plugins/projectexplorer/deploymentdataview.cpp
+++ b/src/plugins/projectexplorer/deploymentdataview.cpp
@@ -45,7 +45,7 @@ public:
using namespace Internal;
DeploymentDataView::DeploymentDataView(Target *target, QWidget *parent) : NamedWidget(parent),
- d(new DeploymentDataViewPrivate)
+ d(std::make_unique<DeploymentDataViewPrivate>())
{
d->ui.setupUi(this);
d->ui.deploymentDataView->setTextElideMode(Qt::ElideMiddle);
@@ -60,10 +60,7 @@ DeploymentDataView::DeploymentDataView(Target *target, QWidget *parent) : NamedW
updateDeploymentDataModel();
}
-DeploymentDataView::~DeploymentDataView()
-{
- delete d;
-}
+DeploymentDataView::~DeploymentDataView() = default;
void DeploymentDataView::updateDeploymentDataModel()
{
diff --git a/src/plugins/projectexplorer/deploymentdataview.h b/src/plugins/projectexplorer/deploymentdataview.h
index f8d3b11698..9cc49eaa8f 100644
--- a/src/plugins/projectexplorer/deploymentdataview.h
+++ b/src/plugins/projectexplorer/deploymentdataview.h
@@ -28,6 +28,8 @@
#include "namedwidget.h"
#include "projectexplorer_export.h"
+#include <memory>
+
namespace ProjectExplorer {
class Target;
@@ -44,7 +46,7 @@ public:
private:
void updateDeploymentDataModel();
- Internal::DeploymentDataViewPrivate * const d;
+ const std::unique_ptr<Internal::DeploymentDataViewPrivate> d;
};
} // namespace ProjectExplorer
diff --git a/src/plugins/projectexplorer/devicesupport/desktopdevice.cpp b/src/plugins/projectexplorer/devicesupport/desktopdevice.cpp
index f779d1eba4..eef4931904 100644
--- a/src/plugins/projectexplorer/devicesupport/desktopdevice.cpp
+++ b/src/plugins/projectexplorer/devicesupport/desktopdevice.cpp
@@ -60,9 +60,7 @@ DesktopDevice::DesktopDevice() : IDevice(Core::Id(DESKTOP_DEVICE_TYPE),
setFreePorts(Utils::PortList::fromString(portRange));
}
-DesktopDevice::DesktopDevice(const DesktopDevice &other) :
- IDevice(other)
-{ }
+DesktopDevice::DesktopDevice(const DesktopDevice &other) = default;
IDevice::DeviceInfo DesktopDevice::deviceInformation() const
{
@@ -76,7 +74,7 @@ QString DesktopDevice::displayType() const
IDeviceWidget *DesktopDevice::createWidget()
{
- return 0;
+ return nullptr;
// DesktopDeviceConfigurationWidget currently has just one editable field viz. free ports.
// Querying for an available port is quite straightforward. Having a field for the port
// range can be confusing to the user. Hence, disabling the widget for now.
@@ -127,7 +125,7 @@ DeviceProcessSignalOperation::Ptr DesktopDevice::signalOperation() const
class DesktopDeviceEnvironmentFetcher : public DeviceEnvironmentFetcher
{
public:
- DesktopDeviceEnvironmentFetcher() {}
+ DesktopDeviceEnvironmentFetcher() = default;
void start() override
{
diff --git a/src/plugins/projectexplorer/devicesupport/devicemanager.cpp b/src/plugins/projectexplorer/devicesupport/devicemanager.cpp
index 585478a611..e6d78e4651 100644
--- a/src/plugins/projectexplorer/devicesupport/devicemanager.cpp
+++ b/src/plugins/projectexplorer/devicesupport/devicemanager.cpp
@@ -46,6 +46,7 @@
#include <QVariantList>
#include <limits>
+#include <memory>
namespace ProjectExplorer {
namespace Internal {
@@ -57,8 +58,7 @@ const char DefaultDevicesKey[] = "DefaultDevices";
class DeviceManagerPrivate
{
public:
- DeviceManagerPrivate() : writer(0)
- { }
+ DeviceManagerPrivate() = default;
int indexForId(Core::Id id) const
{
@@ -74,15 +74,15 @@ public:
QHash<Core::Id, Core::Id> defaultDevices;
QSsh::SshHostKeyDatabasePtr hostKeyDatabase;
- Utils::PersistentSettingsWriter *writer;
+ Utils::PersistentSettingsWriter *writer = nullptr;
};
-DeviceManager *DeviceManagerPrivate::clonedInstance = 0;
+DeviceManager *DeviceManagerPrivate::clonedInstance = nullptr;
} // namespace Internal
using namespace Internal;
-DeviceManager *DeviceManager::m_instance = 0;
+DeviceManager *DeviceManager::m_instance = nullptr;
DeviceManager *DeviceManager::instance()
{
@@ -104,12 +104,12 @@ void DeviceManager::replaceInstance()
void DeviceManager::removeClonedInstance()
{
delete DeviceManagerPrivate::clonedInstance;
- DeviceManagerPrivate::clonedInstance = 0;
+ DeviceManagerPrivate::clonedInstance = nullptr;
}
DeviceManager *DeviceManager::cloneInstance()
{
- QTC_ASSERT(!DeviceManagerPrivate::clonedInstance, return 0);
+ QTC_ASSERT(!DeviceManagerPrivate::clonedInstance, return nullptr);
DeviceManagerPrivate::clonedInstance = new DeviceManager(false);
copy(instance(), DeviceManagerPrivate::clonedInstance, true);
@@ -210,7 +210,7 @@ QVariantMap DeviceManager::toMap() const
{
QVariantMap map;
QVariantMap defaultDeviceMap;
- typedef QHash<Core::Id, Core::Id> TypeIdHash;
+ using TypeIdHash = QHash<Core::Id, Core::Id>;
for (TypeIdHash::ConstIterator it = d->defaultDevices.constBegin();
it != d->defaultDevices.constEnd(); ++it) {
defaultDeviceMap.insert(it.key().toString(), it.value().toSetting());
@@ -349,7 +349,7 @@ const IDeviceFactory *DeviceManager::restoreFactory(const QVariantMap &map)
return factory;
}
-DeviceManager::DeviceManager(bool isInstance) : d(new DeviceManagerPrivate)
+DeviceManager::DeviceManager(bool isInstance) : d(std::make_unique<DeviceManagerPrivate>())
{
if (isInstance) {
QTC_ASSERT(!m_instance, return);
@@ -370,8 +370,7 @@ DeviceManager::~DeviceManager()
if (d->clonedInstance != this)
delete d->writer;
if (m_instance == this)
- m_instance = 0;
- delete d;
+ m_instance = nullptr;
}
IDevice::ConstPtr DeviceManager::deviceAt(int idx) const
@@ -429,9 +428,9 @@ public:
static Core::Id testTypeId() { return "TestType"; }
private:
- TestDevice(const TestDevice &other) : IDevice(other) {}
+ TestDevice(const TestDevice &other) = default;
QString displayType() const override { return QLatin1String("blubb"); }
- IDeviceWidget *createWidget() override { return 0; }
+ IDeviceWidget *createWidget() override { return nullptr; }
QList<Core::Id> actionIds() const override { return QList<Core::Id>(); }
QString displayNameForActionId(Core::Id) const override { return QString(); }
void executeAction(Core::Id, QWidget *) override { }
diff --git a/src/plugins/projectexplorer/devicesupport/devicemanager.h b/src/plugins/projectexplorer/devicesupport/devicemanager.h
index 964e10ff81..2b086f0683 100644
--- a/src/plugins/projectexplorer/devicesupport/devicemanager.h
+++ b/src/plugins/projectexplorer/devicesupport/devicemanager.h
@@ -31,6 +31,8 @@
#include <QObject>
+#include <memory>
+
namespace QSsh { class SshHostKeyDatabase; }
namespace Utils { class FileName; }
@@ -101,7 +103,7 @@ private:
static Utils::FileName systemSettingsFilePath(const QString &deviceFileRelativePath);
static void copy(const DeviceManager *source, DeviceManager *target, bool deep);
- Internal::DeviceManagerPrivate * const d;
+ const std::unique_ptr<Internal::DeviceManagerPrivate> d;
static DeviceManager *m_instance;
diff --git a/src/plugins/projectexplorer/devicesupport/devicemanagermodel.cpp b/src/plugins/projectexplorer/devicesupport/devicemanagermodel.cpp
index e1cfb0dfc5..0aa0ac12d6 100644
--- a/src/plugins/projectexplorer/devicesupport/devicemanagermodel.cpp
+++ b/src/plugins/projectexplorer/devicesupport/devicemanagermodel.cpp
@@ -44,7 +44,7 @@ public:
} // namespace Internal
DeviceManagerModel::DeviceManagerModel(const DeviceManager *deviceManager, QObject *parent) :
- QAbstractListModel(parent), d(new Internal::DeviceManagerModelPrivate)
+ QAbstractListModel(parent), d(std::make_unique<Internal::DeviceManagerModelPrivate>())
{
d->deviceManager = deviceManager;
handleDeviceListChanged();
@@ -58,10 +58,7 @@ DeviceManagerModel::DeviceManagerModel(const DeviceManager *deviceManager, QObje
this, &DeviceManagerModel::handleDeviceListChanged);
}
-DeviceManagerModel::~DeviceManagerModel()
-{
- delete d;
-}
+DeviceManagerModel::~DeviceManagerModel() = default;
void DeviceManagerModel::setFilter(const QList<Core::Id> &filter)
{
diff --git a/src/plugins/projectexplorer/devicesupport/devicemanagermodel.h b/src/plugins/projectexplorer/devicesupport/devicemanagermodel.h
index 5851699478..da2fee8e46 100644
--- a/src/plugins/projectexplorer/devicesupport/devicemanagermodel.h
+++ b/src/plugins/projectexplorer/devicesupport/devicemanagermodel.h
@@ -30,6 +30,8 @@
#include <QAbstractListModel>
+#include <memory>
+
namespace ProjectExplorer {
namespace Internal { class DeviceManagerModelPrivate; }
class IDevice;
@@ -62,7 +64,7 @@ private:
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
bool matchesTypeFilter(const IDevice::ConstPtr &dev) const;
- Internal::DeviceManagerModelPrivate * const d;
+ const std::unique_ptr<Internal::DeviceManagerModelPrivate> d;
};
} // namespace ProjectExplorer
diff --git a/src/plugins/projectexplorer/devicesupport/deviceprocessesdialog.cpp b/src/plugins/projectexplorer/devicesupport/deviceprocessesdialog.cpp
index 1e5ea1bade..dd6a851929 100644
--- a/src/plugins/projectexplorer/devicesupport/deviceprocessesdialog.cpp
+++ b/src/plugins/projectexplorer/devicesupport/deviceprocessesdialog.cpp
@@ -58,7 +58,7 @@ class ProcessListFilterModel : public QSortFilterProxyModel
{
public:
ProcessListFilterModel();
- bool lessThan(const QModelIndex &left, const QModelIndex &right) const;
+ bool lessThan(const QModelIndex &left, const QModelIndex &right) const override;
};
ProcessListFilterModel::ProcessListFilterModel()
@@ -120,14 +120,14 @@ DeviceProcessesDialogPrivate::DeviceProcessesDialogPrivate(KitChooser *chooser,
: q(parent)
, kitLabel(new QLabel(DeviceProcessesDialog::tr("Kit:"), parent))
, kitChooser(chooser)
- , acceptButton(0)
+ , acceptButton(nullptr)
, buttonBox(new QDialogButtonBox(parent))
{
q->setWindowTitle(DeviceProcessesDialog::tr("List of Processes"));
q->setWindowFlags(q->windowFlags() & ~Qt::WindowContextHelpButtonHint);
q->setMinimumHeight(500);
- processList = 0;
+ processList = nullptr;
processFilterLineEdit = new FancyLineEdit(q);
processFilterLineEdit->setPlaceholderText(DeviceProcessesDialog::tr("Filter"));
@@ -159,7 +159,7 @@ DeviceProcessesDialogPrivate::DeviceProcessesDialogPrivate(KitChooser *chooser,
buttonBox->addButton(updateListButton, QDialogButtonBox::ActionRole);
buttonBox->addButton(killProcessButton, QDialogButtonBox::ActionRole);
- QFormLayout *leftColumn = new QFormLayout();
+ auto *leftColumn = new QFormLayout();
leftColumn->setFieldGrowthPolicy(QFormLayout::ExpandingFieldsGrow);
leftColumn->addRow(kitLabel, kitChooser);
leftColumn->addRow(DeviceProcessesDialog::tr("&Filter:"), processFilterLineEdit);
@@ -173,7 +173,7 @@ DeviceProcessesDialogPrivate::DeviceProcessesDialogPrivate(KitChooser *chooser,
// horizontalLayout->addLayout(leftColumn);
// horizontalLayout->addLayout(rightColumn);
- QVBoxLayout *mainLayout = new QVBoxLayout(q);
+ auto *mainLayout = new QVBoxLayout(q);
mainLayout->addLayout(leftColumn);
mainLayout->addWidget(procView);
mainLayout->addWidget(errorText);
@@ -212,8 +212,8 @@ DeviceProcessesDialogPrivate::DeviceProcessesDialogPrivate(KitChooser *chooser,
void DeviceProcessesDialogPrivate::setDevice(const IDevice::ConstPtr &device)
{
delete processList;
- processList = 0;
- proxyModel.setSourceModel(0);
+ processList = nullptr;
+ proxyModel.setSourceModel(nullptr);
if (!device)
return;
@@ -316,19 +316,14 @@ DeviceProcessItem DeviceProcessesDialogPrivate::selectedProcess() const
*/
DeviceProcessesDialog::DeviceProcessesDialog(QWidget *parent)
- : QDialog(parent), d(new Internal::DeviceProcessesDialogPrivate(new KitChooser(this), this))
-{
-}
+ : QDialog(parent), d(std::make_unique<Internal::DeviceProcessesDialogPrivate>(new KitChooser(this), this))
+{ }
DeviceProcessesDialog::DeviceProcessesDialog(KitChooser *chooser, QWidget *parent)
- : QDialog(parent), d(new Internal::DeviceProcessesDialogPrivate(chooser, this))
-{
-}
+ : QDialog(parent), d(std::make_unique<Internal::DeviceProcessesDialogPrivate>(chooser, this))
+{ }
-DeviceProcessesDialog::~DeviceProcessesDialog()
-{
- delete d;
-}
+DeviceProcessesDialog::~DeviceProcessesDialog() = default;
void DeviceProcessesDialog::addAcceptButton(const QString &label)
{
diff --git a/src/plugins/projectexplorer/devicesupport/deviceprocessesdialog.h b/src/plugins/projectexplorer/devicesupport/deviceprocessesdialog.h
index 0f5fcace6b..7876bf6edd 100644
--- a/src/plugins/projectexplorer/devicesupport/deviceprocessesdialog.h
+++ b/src/plugins/projectexplorer/devicesupport/deviceprocessesdialog.h
@@ -31,6 +31,8 @@
#include <QDialog>
+#include <memory>
+
namespace ProjectExplorer {
class DeviceProcessItem;
@@ -58,7 +60,7 @@ public:
private:
void setKitVisible(bool);
- Internal::DeviceProcessesDialogPrivate * const d;
+ const std::unique_ptr<Internal::DeviceProcessesDialogPrivate> d;
};
} // namespace ProjectExplorer
diff --git a/src/plugins/projectexplorer/devicesupport/deviceprocesslist.cpp b/src/plugins/projectexplorer/devicesupport/deviceprocesslist.cpp
index 9cdd2d4cb1..e6075da516 100644
--- a/src/plugins/projectexplorer/devicesupport/deviceprocesslist.cpp
+++ b/src/plugins/projectexplorer/devicesupport/deviceprocesslist.cpp
@@ -51,14 +51,10 @@ public:
using namespace Internal;
DeviceProcessList::DeviceProcessList(const IDevice::ConstPtr &device, QObject *parent)
- : QAbstractItemModel(parent), d(new DeviceProcessListPrivate(device))
-{
-}
+ : QAbstractItemModel(parent), d(std::make_unique<DeviceProcessListPrivate>(device))
+{ }
-DeviceProcessList::~DeviceProcessList()
-{
- delete d;
-}
+DeviceProcessList::~DeviceProcessList() = default;
QModelIndex DeviceProcessList::parent(const QModelIndex &) const
{
diff --git a/src/plugins/projectexplorer/devicesupport/deviceprocesslist.h b/src/plugins/projectexplorer/devicesupport/deviceprocesslist.h
index 77f71351ff..6e965b0450 100644
--- a/src/plugins/projectexplorer/devicesupport/deviceprocesslist.h
+++ b/src/plugins/projectexplorer/devicesupport/deviceprocesslist.h
@@ -30,6 +30,8 @@
#include <QAbstractItemModel>
#include <QList>
+#include <memory>
+
namespace ProjectExplorer {
namespace Internal { class DeviceProcessListPrivate; }
@@ -86,7 +88,7 @@ private:
void setFinished();
- Internal::DeviceProcessListPrivate * const d;
+ const std::unique_ptr<Internal::DeviceProcessListPrivate> d;
};
} // namespace ProjectExplorer
diff --git a/src/plugins/projectexplorer/devicesupport/devicesettingswidget.cpp b/src/plugins/projectexplorer/devicesupport/devicesettingswidget.cpp
index 98a841122e..117ba78043 100644
--- a/src/plugins/projectexplorer/devicesupport/devicesettingswidget.cpp
+++ b/src/plugins/projectexplorer/devicesupport/devicesettingswidget.cpp
@@ -58,14 +58,14 @@ const char LastDeviceIndexKey[] = "LastDisplayedMaemoDeviceConfig";
class NameValidator : public QValidator
{
public:
- NameValidator(const DeviceManager *deviceManager, QWidget *parent = 0)
+ NameValidator(const DeviceManager *deviceManager, QWidget *parent = nullptr)
: QValidator(parent), m_deviceManager(deviceManager)
{
}
void setDisplayName(const QString &name) { m_oldName = name; }
- virtual State validate(QString &input, int & /* pos */) const
+ State validate(QString &input, int & /* pos */) const override
{
if (input.trimmed().isEmpty()
|| (input != m_oldName && m_deviceManager->hasDevice(input)))
@@ -73,7 +73,7 @@ public:
return Acceptable;
}
- virtual void fixup(QString &input) const
+ void fixup(QString &input) const override
{
int dummy = 0;
if (validate(input, dummy) != Acceptable)
@@ -91,7 +91,7 @@ DeviceSettingsWidget::DeviceSettingsWidget(QWidget *parent)
m_deviceManager(DeviceManager::cloneInstance()),
m_deviceManagerModel(new DeviceManagerModel(m_deviceManager, this)),
m_nameValidator(new NameValidator(m_deviceManager, this)),
- m_configWidget(0)
+ m_configWidget(nullptr)
{
initGui();
connect(m_deviceManager, &DeviceManager::deviceUpdated,
@@ -270,7 +270,7 @@ void DeviceSettingsWidget::currentDeviceChanged(int index)
{
qDeleteAll(m_additionalActionButtons);
delete m_configWidget;
- m_configWidget = 0;
+ m_configWidget = nullptr;
m_additionalActionButtons.clear();
const IDevice::ConstPtr device = m_deviceManagerModel->device(index);
if (device.isNull()) {
diff --git a/src/plugins/projectexplorer/devicesupport/devicetestdialog.cpp b/src/plugins/projectexplorer/devicesupport/devicetestdialog.cpp
index 8557292aed..e308b76f46 100644
--- a/src/plugins/projectexplorer/devicesupport/devicetestdialog.cpp
+++ b/src/plugins/projectexplorer/devicesupport/devicetestdialog.cpp
@@ -50,7 +50,8 @@ public:
DeviceTestDialog::DeviceTestDialog(const IDevice::ConstPtr &deviceConfiguration,
QWidget *parent)
- : QDialog(parent), d(new DeviceTestDialogPrivate(deviceConfiguration->createDeviceTester()))
+ : QDialog(parent)
+ , d(std::make_unique<DeviceTestDialogPrivate>(deviceConfiguration->createDeviceTester()))
{
d->ui.setupUi(this);
@@ -64,10 +65,7 @@ DeviceTestDialog::DeviceTestDialog(const IDevice::ConstPtr &deviceConfiguration,
d->deviceTester->testDevice(deviceConfiguration);
}
-DeviceTestDialog::~DeviceTestDialog()
-{
- delete d;
-}
+DeviceTestDialog::~DeviceTestDialog() = default;
void DeviceTestDialog::reject()
{
diff --git a/src/plugins/projectexplorer/devicesupport/devicetestdialog.h b/src/plugins/projectexplorer/devicesupport/devicetestdialog.h
index 69e7c3c9b5..7263234fbe 100644
--- a/src/plugins/projectexplorer/devicesupport/devicetestdialog.h
+++ b/src/plugins/projectexplorer/devicesupport/devicetestdialog.h
@@ -29,6 +29,8 @@
#include <QDialog>
+#include <memory>
+
namespace ProjectExplorer {
namespace Internal {
@@ -37,7 +39,7 @@ class DeviceTestDialog : public QDialog
Q_OBJECT
public:
- DeviceTestDialog(const IDevice::ConstPtr &deviceConfiguration, QWidget *parent = 0);
+ DeviceTestDialog(const IDevice::ConstPtr &deviceConfiguration, QWidget *parent = nullptr);
~DeviceTestDialog() override;
void reject() override;
@@ -50,7 +52,7 @@ private:
void addText(const QString &text, const QString &color, bool bold);
class DeviceTestDialogPrivate;
- DeviceTestDialogPrivate * const d;
+ const std::unique_ptr<DeviceTestDialogPrivate> d;
};
} // namespace Internal
diff --git a/src/plugins/projectexplorer/devicesupport/deviceusedportsgatherer.cpp b/src/plugins/projectexplorer/devicesupport/deviceusedportsgatherer.cpp
index 83a36ccbe7..975ca59217 100644
--- a/src/plugins/projectexplorer/devicesupport/deviceusedportsgatherer.cpp
+++ b/src/plugins/projectexplorer/devicesupport/deviceusedportsgatherer.cpp
@@ -93,7 +93,7 @@ void DeviceUsedPortsGatherer::stop()
d->remoteStdout.clear();
d->remoteStderr.clear();
if (d->process)
- disconnect(d->process.data(), 0, this, 0);
+ disconnect(d->process.data(), nullptr, this, nullptr);
d->process.clear();
}
@@ -187,9 +187,7 @@ PortsGatherer::PortsGatherer(RunControl *runControl)
});
}
-PortsGatherer::~PortsGatherer()
-{
-}
+PortsGatherer::~PortsGatherer() = default;
void PortsGatherer::start()
{
@@ -353,9 +351,7 @@ ChannelProvider::ChannelProvider(RunControl *runControl, int requiredChannels)
}
}
-ChannelProvider::~ChannelProvider()
-{
-}
+ChannelProvider::~ChannelProvider() = default;
QUrl ChannelProvider::channel(int i) const
{
diff --git a/src/plugins/projectexplorer/devicesupport/idevice.cpp b/src/plugins/projectexplorer/devicesupport/idevice.cpp
index f46095c1f9..2ff4090ffd 100644
--- a/src/plugins/projectexplorer/devicesupport/idevice.cpp
+++ b/src/plugins/projectexplorer/devicesupport/idevice.cpp
@@ -128,7 +128,7 @@ const char SshOptionsKey[] = "SshOptions";
const char DebugServerKey[] = "DebugServerKey";
const char QmlsceneKey[] = "QmlsceneKey";
-typedef QSsh::SshConnectionParameters::AuthenticationType AuthType;
+using AuthType = QSsh::SshConnectionParameters::AuthenticationType;
const AuthType DefaultAuthType = QSsh::SshConnectionParameters::AuthenticationTypePublicKey;
const IDevice::MachineType DefaultMachineType = IDevice::Hardware;
@@ -138,20 +138,15 @@ namespace Internal {
class IDevicePrivate
{
public:
- IDevicePrivate() :
- origin(IDevice::AutoDetected),
- deviceState(IDevice::DeviceStateUnknown),
- machineType(IDevice::Hardware),
- version(0)
- { }
+ IDevicePrivate() = default;
QString displayName;
Core::Id type;
- IDevice::Origin origin;
+ IDevice::Origin origin = IDevice::AutoDetected;
Core::Id id;
- IDevice::DeviceState deviceState;
- IDevice::MachineType machineType;
- int version; // This is used by devices that have been added by the SDK.
+ IDevice::DeviceState deviceState = IDevice::DeviceStateUnknown;
+ IDevice::MachineType machineType = IDevice::Hardware;
+ int version = 0; // This is used by devices that have been added by the SDK.
QSsh::SshConnectionParameters sshParameters;
Utils::PortList freePorts;
@@ -170,7 +165,7 @@ IDevice::IDevice() : d(new Internal::IDevicePrivate)
}
IDevice::IDevice(Core::Id type, Origin origin, MachineType machineType, Core::Id id)
- : d(new Internal::IDevicePrivate)
+ : d(std::make_unique<Internal::IDevicePrivate>())
{
d->type = type;
d->origin = origin;
@@ -182,15 +177,12 @@ IDevice::IDevice(Core::Id type, Origin origin, MachineType machineType, Core::Id
IDevice::IDevice(const IDevice &other)
: QEnableSharedFromThis<IDevice>(other)
- , d(new Internal::IDevicePrivate)
+ , d(std::make_unique<Internal::IDevicePrivate>())
{
*d = *other.d;
}
-IDevice::~IDevice()
-{
- delete d;
-}
+IDevice::~IDevice() = default;
/*!
Specifies a free-text name for the device to be displayed in GUI elements.
@@ -270,14 +262,14 @@ PortsGatheringMethod::Ptr IDevice::portsGatheringMethod() const
DeviceProcessList *IDevice::createProcessListModel(QObject *parent) const
{
Q_UNUSED(parent);
- QTC_ASSERT(false, qDebug("This should not have been called..."); return 0);
- return 0;
+ QTC_ASSERT(false, qDebug("This should not have been called..."); return nullptr);
+ return nullptr;
}
DeviceTester *IDevice::createDeviceTester() const
{
QTC_ASSERT(false, qDebug("This should not have been called..."));
- return 0;
+ return nullptr;
}
Utils::OsType IDevice::osType() const
@@ -288,7 +280,7 @@ Utils::OsType IDevice::osType() const
DeviceProcess *IDevice::createProcess(QObject * /* parent */) const
{
QTC_CHECK(false);
- return 0;
+ return nullptr;
}
DeviceEnvironmentFetcher::Ptr IDevice::environmentFetcher() const
@@ -479,12 +471,8 @@ void DeviceProcessSignalOperation::setDebuggerCommand(const QString &cmd)
m_debuggerCommand = cmd;
}
-DeviceProcessSignalOperation::DeviceProcessSignalOperation()
-{
-}
+DeviceProcessSignalOperation::DeviceProcessSignalOperation() = default;
-DeviceEnvironmentFetcher::DeviceEnvironmentFetcher()
-{
-}
+DeviceEnvironmentFetcher::DeviceEnvironmentFetcher() = default;
} // namespace ProjectExplorer
diff --git a/src/plugins/projectexplorer/devicesupport/idevice.h b/src/plugins/projectexplorer/devicesupport/idevice.h
index c040fab334..493b7b306e 100644
--- a/src/plugins/projectexplorer/devicesupport/idevice.h
+++ b/src/plugins/projectexplorer/devicesupport/idevice.h
@@ -38,6 +38,7 @@
#include <QVariantMap>
#include <functional>
+#include <memory>
QT_BEGIN_NAMESPACE
class QWidget;
@@ -214,7 +215,7 @@ private:
int version() const;
- Internal::IDevicePrivate *d;
+ const std::unique_ptr<Internal::IDevicePrivate> d;
friend class DeviceManager;
};
diff --git a/src/plugins/projectexplorer/devicesupport/sshdeviceprocess.cpp b/src/plugins/projectexplorer/devicesupport/sshdeviceprocess.cpp
index b34e0ce805..0a4ac513bc 100644
--- a/src/plugins/projectexplorer/devicesupport/sshdeviceprocess.cpp
+++ b/src/plugins/projectexplorer/devicesupport/sshdeviceprocess.cpp
@@ -63,7 +63,7 @@ public:
};
SshDeviceProcess::SshDeviceProcess(const IDevice::ConstPtr &device, QObject *parent)
- : DeviceProcess(device, parent), d(new SshDeviceProcessPrivate(this))
+ : DeviceProcess(device, parent), d(std::make_unique<SshDeviceProcessPrivate>(this))
{
connect(&d->killTimer, &QTimer::timeout, this, &SshDeviceProcess::handleKillOperationTimeout);
}
@@ -71,7 +71,6 @@ SshDeviceProcess::SshDeviceProcess(const IDevice::ConstPtr &device, QObject *par
SshDeviceProcess::~SshDeviceProcess()
{
d->setState(SshDeviceProcessPrivate::Inactive);
- delete d;
}
void SshDeviceProcess::start(const Runnable &runnable)
@@ -342,7 +341,7 @@ void SshDeviceProcess::SshDeviceProcessPrivate::setState(SshDeviceProcess::SshDe
if (connection) {
connection->disconnect(q);
QSsh::releaseConnection(connection);
- connection = 0;
+ connection = nullptr;
}
}
diff --git a/src/plugins/projectexplorer/devicesupport/sshdeviceprocess.h b/src/plugins/projectexplorer/devicesupport/sshdeviceprocess.h
index a6de321f3b..19acc31769 100644
--- a/src/plugins/projectexplorer/devicesupport/sshdeviceprocess.h
+++ b/src/plugins/projectexplorer/devicesupport/sshdeviceprocess.h
@@ -27,6 +27,8 @@
#include "deviceprocess.h"
+#include <memory>
+
namespace ProjectExplorer {
class Runnable;
@@ -72,7 +74,7 @@ private:
class SshDeviceProcessPrivate;
friend class SshDeviceProcessPrivate;
- SshDeviceProcessPrivate * const d;
+ const std::unique_ptr<SshDeviceProcessPrivate> d;
};
} // namespace ProjectExplorer
diff --git a/src/plugins/projectexplorer/devicesupport/sshdeviceprocesslist.cpp b/src/plugins/projectexplorer/devicesupport/sshdeviceprocesslist.cpp
index a25d56c380..589b3d1721 100644
--- a/src/plugins/projectexplorer/devicesupport/sshdeviceprocesslist.cpp
+++ b/src/plugins/projectexplorer/devicesupport/sshdeviceprocesslist.cpp
@@ -42,14 +42,11 @@ public:
};
SshDeviceProcessList::SshDeviceProcessList(const IDevice::ConstPtr &device, QObject *parent) :
- DeviceProcessList(device, parent), d(new SshDeviceProcessListPrivate)
+ DeviceProcessList(device, parent), d(std::make_unique<SshDeviceProcessListPrivate>())
{
}
-SshDeviceProcessList::~SshDeviceProcessList()
-{
- delete d;
-}
+SshDeviceProcessList::~SshDeviceProcessList() = default;
void SshDeviceProcessList::doUpdate()
{
diff --git a/src/plugins/projectexplorer/devicesupport/sshdeviceprocesslist.h b/src/plugins/projectexplorer/devicesupport/sshdeviceprocesslist.h
index 9c97ce04ff..8ecefce9b9 100644
--- a/src/plugins/projectexplorer/devicesupport/sshdeviceprocesslist.h
+++ b/src/plugins/projectexplorer/devicesupport/sshdeviceprocesslist.h
@@ -27,6 +27,8 @@
#include "deviceprocesslist.h"
+#include <memory>
+
namespace ProjectExplorer {
class PROJECTEXPLORER_EXPORT SshDeviceProcessList : public DeviceProcessList
@@ -51,7 +53,7 @@ private:
void setFinished();
class SshDeviceProcessListPrivate;
- SshDeviceProcessListPrivate * const d;
+ const std::unique_ptr<SshDeviceProcessListPrivate> d;
};
} // namespace ProjectExplorer
diff --git a/src/plugins/projectexplorer/editorconfiguration.cpp b/src/plugins/projectexplorer/editorconfiguration.cpp
index f011eb3a7e..43f7b79c69 100644
--- a/src/plugins/projectexplorer/editorconfiguration.cpp
+++ b/src/plugins/projectexplorer/editorconfiguration.cpp
@@ -83,7 +83,7 @@ struct EditorConfigurationPrivate
QList<BaseTextEditor *> m_editors;
};
-EditorConfiguration::EditorConfiguration() : d(new EditorConfigurationPrivate)
+EditorConfiguration::EditorConfiguration() : d(std::make_unique<EditorConfigurationPrivate>())
{
const QMap<Core::Id, ICodeStylePreferences *> languageCodeStylePreferences = TextEditorSettings::codeStyles();
QMapIterator<Core::Id, ICodeStylePreferences *> itCodeStyle(languageCodeStylePreferences);
@@ -119,7 +119,6 @@ EditorConfiguration::EditorConfiguration() : d(new EditorConfigurationPrivate)
EditorConfiguration::~EditorConfiguration()
{
qDeleteAll(d->m_languageCodeStylePreferences);
- delete d;
}
bool EditorConfiguration::useGlobalSettings() const
@@ -273,7 +272,7 @@ void EditorConfiguration::deconfigureEditor(BaseTextEditor *textEditor) const
void EditorConfiguration::setUseGlobalSettings(bool use)
{
d->m_useGlobal = use;
- d->m_defaultCodeStyle->setCurrentDelegate(use ? TextEditorSettings::codeStyle() : 0);
+ d->m_defaultCodeStyle->setCurrentDelegate(use ? TextEditorSettings::codeStyle() : nullptr);
foreach (Core::IEditor *editor, Core::DocumentModel::editorsForOpenedDocuments()) {
if (auto widget = qobject_cast<TextEditorWidget *>(editor->widget())) {
Project *project = SessionManager::projectForFile(editor->document()->filePath());
diff --git a/src/plugins/projectexplorer/editorconfiguration.h b/src/plugins/projectexplorer/editorconfiguration.h
index 9f410d6a1e..e9c6138648 100644
--- a/src/plugins/projectexplorer/editorconfiguration.h
+++ b/src/plugins/projectexplorer/editorconfiguration.h
@@ -30,6 +30,8 @@
#include <QObject>
#include <QVariantMap>
+#include <memory>
+
namespace Core {
class IEditor;
class Id;
@@ -107,7 +109,7 @@ signals:
private:
void switchSettings(TextEditor::TextEditorWidget *baseTextEditor) const;
- EditorConfigurationPrivate *d;
+ const std::unique_ptr<EditorConfigurationPrivate> d;
};
// Return the editor settings in the case it's not null. Otherwise, try to find the project
diff --git a/src/plugins/projectexplorer/environmentaspect.cpp b/src/plugins/projectexplorer/environmentaspect.cpp
index 21fc6adb27..555a12db16 100644
--- a/src/plugins/projectexplorer/environmentaspect.cpp
+++ b/src/plugins/projectexplorer/environmentaspect.cpp
@@ -93,13 +93,13 @@ void EnvironmentAspect::addSupportedBaseEnvironment(int base, const QString &dis
{
m_displayNames[base] = displayName;
if (m_base == -1)
- m_base = base;
+ setBaseEnvironmentBase(base);
}
void EnvironmentAspect::addPreferredBaseEnvironment(int base, const QString &displayName)
{
m_displayNames[base] = displayName;
- m_base = base;
+ setBaseEnvironmentBase(base);
}
void EnvironmentAspect::fromMap(const QVariantMap &map)
diff --git a/src/plugins/projectexplorer/environmentwidget.cpp b/src/plugins/projectexplorer/environmentwidget.cpp
index 726352bf0f..e39f21532b 100644
--- a/src/plugins/projectexplorer/environmentwidget.cpp
+++ b/src/plugins/projectexplorer/environmentwidget.cpp
@@ -96,7 +96,7 @@ public:
: QStyledItemDelegate(view), m_model(model), m_view(view)
{}
- QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
+ QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override
{
QWidget *w = QStyledItemDelegate::createEditor(parent, option, index);
if (index.column() != 0)
@@ -132,7 +132,7 @@ public:
};
EnvironmentWidget::EnvironmentWidget(QWidget *parent, QWidget *additionalDetailsWidget)
- : QWidget(parent), d(new EnvironmentWidgetPrivate)
+ : QWidget(parent), d(std::make_unique<EnvironmentWidgetPrivate>())
{
d->m_model = new Utils::EnvironmentModel();
connect(d->m_model, &Utils::EnvironmentModel::userChangesChanged,
@@ -235,7 +235,6 @@ EnvironmentWidget::~EnvironmentWidget()
{
delete d->m_model;
d->m_model = nullptr;
- delete d;
}
void EnvironmentWidget::focusIndex(const QModelIndex &index)
diff --git a/src/plugins/projectexplorer/environmentwidget.h b/src/plugins/projectexplorer/environmentwidget.h
index 380a68917e..004f1cb1e6 100644
--- a/src/plugins/projectexplorer/environmentwidget.h
+++ b/src/plugins/projectexplorer/environmentwidget.h
@@ -29,6 +29,8 @@
#include <QWidget>
+#include <memory>
+
QT_FORWARD_DECLARE_CLASS(QModelIndex)
namespace Utils {
@@ -71,7 +73,7 @@ private:
void updateButtons();
void linkActivated(const QString &link);
- EnvironmentWidgetPrivate *d;
+ const std::unique_ptr<EnvironmentWidgetPrivate> d;
};
} // namespace ProjectExplorer
diff --git a/src/plugins/projectexplorer/extraabi.cpp b/src/plugins/projectexplorer/extraabi.cpp
new file mode 100644
index 0000000000..a1da2193fd
--- /dev/null
+++ b/src/plugins/projectexplorer/extraabi.cpp
@@ -0,0 +1,101 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+#include "extraabi.h"
+
+#include "abi.h"
+
+#include <coreplugin/icore.h>
+
+#include <utils/algorithm.h>
+#include <utils/fileutils.h>
+#include <utils/settingsaccessor.h>
+
+#include <app/app_version.h>
+
+#include <QDebug>
+
+using namespace Utils;
+
+namespace ProjectExplorer {
+namespace Internal {
+
+// --------------------------------------------------------------------
+// Helpers:
+// --------------------------------------------------------------------
+
+class AbiFlavorUpgraderV0 : public VersionUpgrader
+{
+public:
+ AbiFlavorUpgraderV0() : VersionUpgrader(0, "") { }
+
+ QVariantMap upgrade(const QVariantMap &data) override { return data; }
+};
+
+class AbiFlavorAccessor : public UpgradingSettingsAccessor
+{
+public:
+ AbiFlavorAccessor();
+};
+
+AbiFlavorAccessor::AbiFlavorAccessor() :
+ UpgradingSettingsAccessor("QtCreatorExtraAbi",
+ QCoreApplication::translate("ProjectExplorer::ToolChainManager", "ABI"),
+ Core::Constants::IDE_DISPLAY_NAME)
+{
+ setBaseFilePath(FileName::fromString(Core::ICore::installerResourcePath() + "/abi.xml"));
+
+ addVersionUpgrader(std::make_unique<AbiFlavorUpgraderV0>());
+}
+
+// --------------------------------------------------------------------
+// ExtraAbi:
+// --------------------------------------------------------------------
+
+void ExtraAbi::load()
+{
+ AbiFlavorAccessor accessor;
+ const QVariantMap data = accessor.restoreSettings(Core::ICore::dialogParent()).value("Flavors").toMap();
+ for (auto it = data.constBegin(); it != data.constEnd(); ++it) {
+ const QString flavor = it.key();
+ if (flavor.isEmpty())
+ continue;
+
+ const QStringList osNames = it.value().toStringList();
+ std::vector<Abi::OS> oses;
+ for (const QString &osName : osNames) {
+ Abi::OS os = Abi::osFromString(&osName);
+ if (Abi::toString(os) != osName)
+ qWarning() << "Invalid OS found when registering extra abi flavor" << it.key();
+ else
+ oses.push_back(os);
+ }
+
+ Abi::registerOsFlavor(oses, flavor);
+ }
+}
+
+} // namespace Internal
+} // namespace ProjectExplorer
diff --git a/src/plugins/resourceeditor/qrceditor/test/main.cpp b/src/plugins/projectexplorer/extraabi.h
index a89072898f..fe1b049d69 100644
--- a/src/plugins/resourceeditor/qrceditor/test/main.cpp
+++ b/src/plugins/projectexplorer/extraabi.h
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2018 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
@@ -23,14 +23,16 @@
**
****************************************************************************/
-#include "mainwindow.h"
+#pragma once
-#include <resourceeditor/qrceditor/qrceditor.h>
+namespace ProjectExplorer {
+namespace Internal {
-int main(int argc, char *argv[])
+class ExtraAbi
{
- QApplication app(argc, argv);
- MainWindow mw;
- mw.show();
- return app.exec();
-}
+public:
+ static void load();
+};
+
+} // namespace Internal
+} // namespace ProjectExplorer
diff --git a/src/plugins/projectexplorer/extracompiler.cpp b/src/plugins/projectexplorer/extracompiler.cpp
index 1d5e97add9..e73b44cb90 100644
--- a/src/plugins/projectexplorer/extracompiler.cpp
+++ b/src/plugins/projectexplorer/extracompiler.cpp
@@ -72,7 +72,7 @@ public:
ExtraCompiler::ExtraCompiler(const Project *project, const Utils::FileName &source,
const Utils::FileNameList &targets, QObject *parent) :
- QObject(parent), d(new ExtraCompilerPrivate)
+ QObject(parent), d(std::make_unique<ExtraCompilerPrivate>())
{
d->project = project;
d->source = source;
@@ -129,10 +129,7 @@ ExtraCompiler::ExtraCompiler(const Project *project, const Utils::FileName &sour
}
}
-ExtraCompiler::~ExtraCompiler()
-{
- delete d;
-}
+ExtraCompiler::~ExtraCompiler() = default;
const Project *ExtraCompiler::project() const
{
diff --git a/src/plugins/projectexplorer/extracompiler.h b/src/plugins/projectexplorer/extracompiler.h
index d4ef5326ac..c93830b10c 100644
--- a/src/plugins/projectexplorer/extracompiler.h
+++ b/src/plugins/projectexplorer/extracompiler.h
@@ -39,6 +39,7 @@
#include <QList>
#include <functional>
+#include <memory>
QT_FORWARD_DECLARE_CLASS(QProcess);
QT_FORWARD_DECLARE_CLASS(QThreadPool);
@@ -89,7 +90,7 @@ private:
virtual void run(const QByteArray &sourceContent) = 0;
virtual void run(const Utils::FileName &file) = 0;
- ExtraCompilerPrivate *const d;
+ const std::unique_ptr<ExtraCompilerPrivate> d;
};
class PROJECTEXPLORER_EXPORT ProcessExtraCompiler : public ExtraCompiler
diff --git a/src/plugins/projectexplorer/foldernavigationwidget.cpp b/src/plugins/projectexplorer/foldernavigationwidget.cpp
index d4c91d32b9..07ff03be6a 100644
--- a/src/plugins/projectexplorer/foldernavigationwidget.cpp
+++ b/src/plugins/projectexplorer/foldernavigationwidget.cpp
@@ -147,7 +147,7 @@ public:
FolderSortProxyModel(QObject *parent = nullptr);
protected:
- bool lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const;
+ bool lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const override;
};
FolderSortProxyModel::FolderSortProxyModel(QObject *parent)
diff --git a/src/plugins/projectexplorer/gcctoolchain.cpp b/src/plugins/projectexplorer/gcctoolchain.cpp
index 98b7825d5b..27413c22ea 100644
--- a/src/plugins/projectexplorer/gcctoolchain.cpp
+++ b/src/plugins/projectexplorer/gcctoolchain.cpp
@@ -32,6 +32,8 @@
#include "projectexplorerconstants.h"
#include "toolchainmanager.h"
+#include <coreplugin/icore.h>
+
#include <utils/algorithm.h>
#include <utils/environment.h>
#include <utils/hostosinfo.h>
@@ -73,7 +75,7 @@ static const char compilerPlatformLinkerFlagsKeyC[] = "ProjectExplorer.GccToolCh
static const char targetAbiKeyC[] = "ProjectExplorer.GccToolChain.TargetAbi";
static const char originalTargetTripleKeyC[] = "ProjectExplorer.GccToolChain.OriginalTargetTriple";
static const char supportedAbisKeyC[] = "ProjectExplorer.GccToolChain.SupportedAbis";
-static const char binaryRegexp[] = "(?:^|-|\\b)(?:gcc|g\\+\\+)(?:-([\\d.]+))?$";
+static const char binaryRegexp[] = "(?:^|-|\\b)(?:gcc|g\\+\\+|clang(?:\\+\\+)?)(?:-([\\d.]+))?$";
static QByteArray runGcc(const FileName &gcc, const QStringList &arguments, const QStringList &env)
{
@@ -707,7 +709,7 @@ FileNameList GccToolChain::suggestedMkspecList() const
}
if (abi.os() == Abi::LinuxOS) {
- if (abi.osFlavor() != Abi::GenericLinuxFlavor)
+ if (abi.osFlavor() != Abi::GenericFlavor)
return FileNameList(); // most likely not a desktop, so leave the mkspec alone.
if (abi.wordWidth() == host.wordWidth()) {
// no need to explicitly set the word width, but provide that mkspec anyway to make sure
@@ -831,12 +833,12 @@ bool GccToolChain::fromMap(const QVariantMap &data)
m_compilerCommand = FileName::fromString(data.value(compilerCommandKeyC).toString());
m_platformCodeGenFlags = data.value(compilerPlatformCodeGenFlagsKeyC).toStringList();
m_platformLinkerFlags = data.value(compilerPlatformLinkerFlagsKeyC).toStringList();
- m_targetAbi = Abi(data.value(targetAbiKeyC).toString());
+ m_targetAbi = Abi::fromString(data.value(targetAbiKeyC).toString());
m_originalTargetTriple = data.value(originalTargetTripleKeyC).toString();
const QStringList abiList = data.value(supportedAbisKeyC).toStringList();
m_supportedAbis.clear();
for (const QString &a : abiList) {
- Abi abi(a);
+ Abi abi = Abi::fromString(a);
if (!abi.isValid())
continue;
m_supportedAbis.append(abi);
@@ -922,40 +924,47 @@ ToolChain *GccToolChainFactory::create(Core::Id language)
return tc;
}
+void GccToolChainFactory::versionProbe(const QString &name, Core::Id language, Core::Id type,
+ QList<ToolChain *> &tcs, QList<ToolChain *> &known,
+ const QSet<QString> &filteredNames)
+{
+ if (!HostOsInfo::isLinuxHost())
+ return;
+ const QRegularExpression regexp(binaryRegexp);
+ for (const QString &dir : QStringList({ "/usr/bin", "/usr/local/bin" })) {
+ QDir binDir(dir);
+ for (const QString &entry : binDir.entryList(
+ {"*-" + name, name + "-*", "*-" + name + "-*"},
+ QDir::Files | QDir::Executable)) {
+ const QString fileName = FileName::fromString(entry).fileName();
+ if (filteredNames.contains(fileName))
+ continue;
+ const QRegularExpressionMatch match = regexp.match(fileName);
+ if (!match.hasMatch())
+ continue;
+ const bool isNative = fileName.startsWith(name);
+ const Abi abi = isNative ? Abi::hostAbi() : Abi();
+ tcs.append(autoDetectToolchains(compilerPathFromEnvironment(entry), abi, language, type,
+ known));
+ known.append(tcs);
+ }
+ }
+}
+
QList<ToolChain *> GccToolChainFactory::autoDetect(const QList<ToolChain *> &alreadyKnown)
{
QList<ToolChain *> tcs;
QList<ToolChain *> known = alreadyKnown;
- tcs.append(autoDetectToolchains("g++", Abi::hostAbi(), Constants::CXX_LANGUAGE_ID,
- Constants::GCC_TOOLCHAIN_TYPEID, alreadyKnown));
- tcs.append(autoDetectToolchains("gcc", Abi::hostAbi(), Constants::C_LANGUAGE_ID,
- Constants::GCC_TOOLCHAIN_TYPEID, alreadyKnown));
+ tcs.append(autoDetectToolchains(compilerPathFromEnvironment("g++"), Abi::hostAbi(),
+ Constants::CXX_LANGUAGE_ID, Constants::GCC_TOOLCHAIN_TYPEID,
+ alreadyKnown));
+ tcs.append(autoDetectToolchains(compilerPathFromEnvironment("gcc"), Abi::hostAbi(),
+ Constants::C_LANGUAGE_ID, Constants::GCC_TOOLCHAIN_TYPEID,
+ alreadyKnown));
known.append(tcs);
- if (HostOsInfo::isLinuxHost()) {
- const QRegularExpression regexp(binaryRegexp);
- for (const QString &dir : QStringList({ "/usr/bin", "/usr/local/bin" })) {
- QDir binDir(dir);
- auto gccProbe = [&](const QString &name, Core::Id language) {
- for (const QString &entry : binDir.entryList(
- {"*-" + name, name + "-*", "*-" + name + "-*"},
- QDir::Files | QDir::Executable)) {
- const QString fileName = FileName::fromString(entry).fileName();
- if (fileName == "c89-gcc" || fileName == "c99-gcc")
- continue;
- const QRegularExpressionMatch match = regexp.match(fileName);
- if (!match.hasMatch())
- continue;
- const bool isNative = fileName.startsWith(name);
- const Abi abi = isNative ? Abi::hostAbi() : Abi();
- tcs.append(autoDetectToolchains(entry, abi, language,
- Constants::GCC_TOOLCHAIN_TYPEID, known));
- known.append(tcs);
- }
- };
- gccProbe("g++", Constants::CXX_LANGUAGE_ID);
- gccProbe("gcc", Constants::C_LANGUAGE_ID);
- }
- }
+ versionProbe("g++", Constants::CXX_LANGUAGE_ID, Constants::GCC_TOOLCHAIN_TYPEID, tcs, known);
+ versionProbe("gcc", Constants::C_LANGUAGE_ID, Constants::GCC_TOOLCHAIN_TYPEID, tcs, known,
+ {"c89-gcc", "c99-gcc"});
return tcs;
}
@@ -992,7 +1001,13 @@ GccToolChain *GccToolChainFactory::createToolChain(bool autoDetect)
return new GccToolChain(autoDetect ? ToolChain::AutoDetection : ToolChain::ManualDetection);
}
-QList<ToolChain *> GccToolChainFactory::autoDetectToolchains(const QString &compiler,
+Utils::FileName GccToolChainFactory::compilerPathFromEnvironment(const QString &compilerName)
+{
+ Environment systemEnvironment = Environment::systemEnvironment();
+ return systemEnvironment.searchInPath(compilerName);
+}
+
+QList<ToolChain *> GccToolChainFactory::autoDetectToolchains(const FileName &compilerPath,
const Abi &requiredAbi,
Core::Id language,
const Core::Id requiredTypeId,
@@ -1000,11 +1015,8 @@ QList<ToolChain *> GccToolChainFactory::autoDetectToolchains(const QString &comp
{
QList<ToolChain *> result;
- Environment systemEnvironment = Environment::systemEnvironment();
- const FileName compilerPath = systemEnvironment.searchInPath(compiler);
if (compilerPath.isEmpty())
return result;
- const FileName canonicalPath = FileUtils::canonicalPath(compilerPath);
result = Utils::filtered(alreadyKnown, [requiredTypeId, compilerPath](ToolChain *tc) {
return tc->typeId() == requiredTypeId && tc->compilerCommand() == compilerPath;
@@ -1019,19 +1031,6 @@ QList<ToolChain *> GccToolChainFactory::autoDetectToolchains(const QString &comp
result = autoDetectToolChain(compilerPath, language, requiredAbi);
- if (!requiredAbi.isNull()) {
- const Abi alternateAbi = Abi(requiredAbi.architecture(), requiredAbi.os(),
- requiredAbi.osFlavor(), requiredAbi.binaryFormat(), 32);
- ToolChain *abiTc = Utils::findOrDefault(result, [&requiredAbi, &alternateAbi](const ToolChain *tc) {
- return requiredAbi == tc->targetAbi()
- || (requiredAbi.wordWidth() == 64 && tc->targetAbi() == alternateAbi);
- });
- if (!abiTc) {
- qDeleteAll(result);
- result.clear();
- }
- }
-
return result;
}
@@ -1055,8 +1054,9 @@ QList<ToolChain *> GccToolChainFactory::autoDetectToolChain(const FileName &comp
if (!requiredAbi.isNull() && !abiList.contains(requiredAbi)) {
if (requiredAbi.wordWidth() != 64
|| !abiList.contains(Abi(requiredAbi.architecture(), requiredAbi.os(), requiredAbi.osFlavor(),
- requiredAbi.binaryFormat(), 32)))
+ requiredAbi.binaryFormat(), 32))) {
return result;
+ }
}
for (const Abi &abi : abiList) {
@@ -1345,12 +1345,32 @@ QSet<Core::Id> ClangToolChainFactory::supportedLanguages() const
QList<ToolChain *> ClangToolChainFactory::autoDetect(const QList<ToolChain *> &alreadyKnown)
{
- QList<ToolChain *> result
- = autoDetectToolchains("clang++", Abi::hostAbi(), Constants::CXX_LANGUAGE_ID,
- Constants::CLANG_TOOLCHAIN_TYPEID, alreadyKnown);
- result += autoDetectToolchains("clang", Abi::hostAbi(), Constants::C_LANGUAGE_ID,
- Constants::CLANG_TOOLCHAIN_TYPEID, alreadyKnown);
- return result;
+ QList<ToolChain *> tcs;
+ QList<ToolChain *> known = alreadyKnown;
+
+ const Abi hostAbi = Abi::hostAbi();
+ tcs.append(autoDetectToolchains(compilerPathFromEnvironment("clang++"), hostAbi,
+ Constants::CXX_LANGUAGE_ID, Constants::CLANG_TOOLCHAIN_TYPEID,
+ alreadyKnown));
+ tcs.append(autoDetectToolchains(compilerPathFromEnvironment("clang"), hostAbi,
+ Constants::C_LANGUAGE_ID, Constants::CLANG_TOOLCHAIN_TYPEID,
+ alreadyKnown));
+ known.append(tcs);
+ versionProbe("clang++", Constants::CXX_LANGUAGE_ID, Constants::CLANG_TOOLCHAIN_TYPEID, tcs, known);
+ versionProbe("clang", Constants::C_LANGUAGE_ID, Constants::CLANG_TOOLCHAIN_TYPEID, tcs, known);
+
+ const FileName compilerPath = FileName::fromString(Core::ICore::clangExecutable(CLANG_BINDIR));
+ if (!compilerPath.isEmpty()) {
+ tcs.append(autoDetectToolchains(compilerPath.parentDir().appendPath(
+ HostOsInfo::withExecutableSuffix("clang++")),
+ hostAbi, Constants::CXX_LANGUAGE_ID,
+ Constants::CLANG_TOOLCHAIN_TYPEID, alreadyKnown));
+ tcs.append(autoDetectToolchains(compilerPath.parentDir().appendPath(
+ HostOsInfo::withExecutableSuffix("clang")),
+ hostAbi, Constants::C_LANGUAGE_ID,
+ Constants::CLANG_TOOLCHAIN_TYPEID, alreadyKnown));
+ }
+ return tcs;
}
QList<ToolChain *> ClangToolChainFactory::autoDetect(const FileName &compilerPath, const Core::Id &language)
@@ -1440,10 +1460,12 @@ QList<ToolChain *> MingwToolChainFactory::autoDetect(const QList<ToolChain *> &a
{
Abi ha = Abi::hostAbi();
ha = Abi(ha.architecture(), Abi::WindowsOS, Abi::WindowsMSysFlavor, Abi::PEFormat, ha.wordWidth());
- QList<ToolChain *> result = autoDetectToolchains("g++", ha, Constants::CXX_LANGUAGE_ID,
- Constants::MINGW_TOOLCHAIN_TYPEID, alreadyKnown);
- result += autoDetectToolchains("gcc", ha, Constants::C_LANGUAGE_ID,
- Constants::MINGW_TOOLCHAIN_TYPEID, alreadyKnown);
+ QList<ToolChain *> result = autoDetectToolchains(
+ compilerPathFromEnvironment("g++"), ha, Constants::CXX_LANGUAGE_ID,
+ Constants::MINGW_TOOLCHAIN_TYPEID, alreadyKnown);
+ result += autoDetectToolchains(
+ compilerPathFromEnvironment("gcc"), ha, Constants::C_LANGUAGE_ID,
+ Constants::MINGW_TOOLCHAIN_TYPEID, alreadyKnown);
return result;
}
@@ -1537,8 +1559,9 @@ QSet<Core::Id> LinuxIccToolChainFactory::supportedLanguages() const
QList<ToolChain *> LinuxIccToolChainFactory::autoDetect(const QList<ToolChain *> &alreadyKnown)
{
- return autoDetectToolchains("icpc", Abi::hostAbi(), Constants::CXX_LANGUAGE_ID,
- Constants::LINUXICC_TOOLCHAIN_TYPEID, alreadyKnown);
+ return autoDetectToolchains(compilerPathFromEnvironment("icpc"), Abi::hostAbi(),
+ Constants::CXX_LANGUAGE_ID, Constants::LINUXICC_TOOLCHAIN_TYPEID,
+ alreadyKnown);
}
QList<ToolChain *> LinuxIccToolChainFactory::autoDetect(const FileName &compilerPath, const Core::Id &language)
diff --git a/src/plugins/projectexplorer/gcctoolchainfactories.h b/src/plugins/projectexplorer/gcctoolchainfactories.h
index e4c0a583e9..54d4f41782 100644
--- a/src/plugins/projectexplorer/gcctoolchainfactories.h
+++ b/src/plugins/projectexplorer/gcctoolchainfactories.h
@@ -31,6 +31,7 @@
#include "abiwidget.h"
#include <QList>
+#include <QSet>
QT_BEGIN_NAMESPACE
class QComboBox;
@@ -62,9 +63,18 @@ public:
protected:
virtual GccToolChain *createToolChain(bool autoDetect);
- QList<ToolChain *> autoDetectToolchains(const QString &compiler, const Abi &requiredAbi,
- Core::Id language, const Core::Id requiredTypeId,
- const QList<ToolChain *> &alreadyKnown);
+ void versionProbe(const QString &name,
+ Core::Id language,
+ Core::Id type,
+ QList<ToolChain *> &tcs,
+ QList<ToolChain *> &known,
+ const QSet<QString> &filteredNames = {});
+
+ Utils::FileName compilerPathFromEnvironment(const QString &compilerName);
+
+ QList<ToolChain *> autoDetectToolchains(
+ const Utils::FileName &compilerPath, const Abi &requiredAbi, Core::Id language,
+ const Core::Id requiredTypeId, const QList<ToolChain *> &alreadyKnown);
QList<ToolChain *> autoDetectToolChain(const Utils::FileName &compilerPath, const Core::Id language,
const Abi &requiredAbi = Abi());
};
diff --git a/src/plugins/projectexplorer/gnumakeparser.cpp b/src/plugins/projectexplorer/gnumakeparser.cpp
index 736833cacd..92c49a020a 100644
--- a/src/plugins/projectexplorer/gnumakeparser.cpp
+++ b/src/plugins/projectexplorer/gnumakeparser.cpp
@@ -83,11 +83,11 @@ void GnuMakeParser::stdOutput(const QString &line)
class Result {
public:
- Result() : isFatal(false), type(Task::Error) { }
+ Result() = default;
QString description;
- bool isFatal;
- Task::TaskType type;
+ bool isFatal = false;
+ Task::TaskType type = Task::Error;
};
static Result parseDescription(const QString &description)
@@ -401,8 +401,8 @@ void ProjectExplorerPlugin::testGnuMakeParserParsing_data()
void ProjectExplorerPlugin::testGnuMakeParserParsing()
{
OutputParserTester testbench;
- GnuMakeParser *childParser = new GnuMakeParser;
- GnuMakeParserTester *tester = new GnuMakeParserTester(childParser);
+ auto *childParser = new GnuMakeParser;
+ auto *tester = new GnuMakeParserTester(childParser);
connect(&testbench, &OutputParserTester::aboutToDeleteParser,
tester, &GnuMakeParserTester::parserIsAboutToBeDeleted);
@@ -494,7 +494,7 @@ void ProjectExplorerPlugin::testGnuMakeParserTaskMangling_data()
void ProjectExplorerPlugin::testGnuMakeParserTaskMangling()
{
OutputParserTester testbench;
- GnuMakeParser *childParser = new GnuMakeParser;
+ auto *childParser = new GnuMakeParser;
testbench.appendOutputParser(childParser);
QFETCH(QStringList, files);
diff --git a/src/plugins/projectexplorer/ioutputparser.cpp b/src/plugins/projectexplorer/ioutputparser.cpp
index bf772e576c..0da7005948 100644
--- a/src/plugins/projectexplorer/ioutputparser.cpp
+++ b/src/plugins/projectexplorer/ioutputparser.cpp
@@ -149,7 +149,7 @@ IOutputParser *IOutputParser::takeOutputParserChain()
IOutputParser *parser = m_parser;
disconnect(parser, &IOutputParser::addOutput, this, &IOutputParser::outputAdded);
disconnect(parser, &IOutputParser::addTask, this, &IOutputParser::taskAdded);
- m_parser = 0;
+ m_parser = nullptr;
return parser;
}
diff --git a/src/plugins/projectexplorer/ioutputparser.h b/src/plugins/projectexplorer/ioutputparser.h
index 7590ce2f7e..47c8f4f1c0 100644
--- a/src/plugins/projectexplorer/ioutputparser.h
+++ b/src/plugins/projectexplorer/ioutputparser.h
@@ -52,7 +52,6 @@ public:
virtual void stdError(const QString &line);
virtual bool hasFatalErrors() const;
- // For GnuMakeParser
virtual void setWorkingDirectory(const QString &workingDirectory);
void flush(); // flush out pending tasks
diff --git a/src/plugins/projectexplorer/jsonwizard/jsonfieldpage.cpp b/src/plugins/projectexplorer/jsonwizard/jsonfieldpage.cpp
index 578023972f..c4e3477596 100644
--- a/src/plugins/projectexplorer/jsonwizard/jsonfieldpage.cpp
+++ b/src/plugins/projectexplorer/jsonwizard/jsonfieldpage.cpp
@@ -114,13 +114,13 @@ public:
m_fixupExpando = expando;
}
- QValidator::State validate(QString &input, int &pos) const
+ QValidator::State validate(QString &input, int &pos) const override
{
fixup(input);
return QRegularExpressionValidator::validate(input, pos);
}
- void fixup(QString &fixup) const
+ void fixup(QString &fixup) const override
{
if (m_fixupExpando.isEmpty())
return;
@@ -139,14 +139,13 @@ private:
// JsonFieldPage::FieldData:
// --------------------------------------------------------------------
-JsonFieldPage::Field::Field() : d(new FieldPrivate)
+JsonFieldPage::Field::Field() : d(std::make_unique<FieldPrivate>())
{ }
JsonFieldPage::Field::~Field()
{
delete d->m_widget;
delete d->m_label;
- delete d;
}
QString JsonFieldPage::Field::type()
@@ -159,7 +158,7 @@ JsonFieldPage::Field *JsonFieldPage::Field::parse(const QVariant &input, QString
if (input.type() != QVariant::Map) {
*errorMessage = QCoreApplication::translate("ProjectExplorer::JsonFieldPage",
"Field is not an object.");
- return 0;
+ return nullptr;
}
QVariantMap tmp = input.toMap();
@@ -167,13 +166,13 @@ JsonFieldPage::Field *JsonFieldPage::Field::parse(const QVariant &input, QString
if (name.isEmpty()) {
*errorMessage = QCoreApplication::translate("ProjectExplorer::JsonFieldPage",
"Field has no name.");
- return 0;
+ return nullptr;
}
const QString type = consumeValue(tmp, TYPE_KEY).toString();
if (type.isEmpty()) {
*errorMessage = QCoreApplication::translate("ProjectExplorer::JsonFieldPage",
"Field \"%1\" has no type.").arg(name);
- return 0;
+ return nullptr;
}
Field *data = createFieldData(type);
@@ -181,7 +180,7 @@ JsonFieldPage::Field *JsonFieldPage::Field::parse(const QVariant &input, QString
*errorMessage = QCoreApplication::translate("ProjectExplorer::JsonFieldPage",
"Field \"%1\" has unsupported type \"%2\".")
.arg(name).arg(type);
- return 0;
+ return nullptr;
}
data->setTexts(name,
JsonWizardFactory::localizedString(consumeValue(tmp, DISPLAY_NAME_KEY).toString()),
@@ -200,7 +199,7 @@ JsonFieldPage::Field *JsonFieldPage::Field::parse(const QVariant &input, QString
"When parsing Field \"%1\": %2")
.arg(name).arg(*errorMessage);
delete data;
- return 0;
+ return nullptr;
}
warnAboutUnsupportedKeys(tmp, name);
@@ -927,7 +926,7 @@ void ListField::initializeData(MacroExpander *expander)
QString iconPath = expandedValuesItem->data(IconStringRole).toString();
if (!iconPath.isEmpty()) {
- if (JsonFieldPage *page = qobject_cast<JsonFieldPage*>(widget()->parentWidget())) {
+ if (auto *page = qobject_cast<JsonFieldPage*>(widget()->parentWidget())) {
const QString wizardDirectory = page->value("WizardDir").toString();
iconPath = QDir::cleanPath(QDir(wizardDirectory).absoluteFilePath(iconPath));
if (QFileInfo::exists(iconPath)) {
diff --git a/src/plugins/projectexplorer/jsonwizard/jsonfieldpage.h b/src/plugins/projectexplorer/jsonwizard/jsonfieldpage.h
index 7cdb50c544..e1ddc7b559 100644
--- a/src/plugins/projectexplorer/jsonwizard/jsonfieldpage.h
+++ b/src/plugins/projectexplorer/jsonwizard/jsonfieldpage.h
@@ -33,6 +33,8 @@
#include <QRegularExpression>
#include <QVariant>
+#include <memory>
+
QT_BEGIN_NAMESPACE
class QFormLayout;
class QLabel;
@@ -105,7 +107,7 @@ public:
friend class JsonFieldPage;
- FieldPrivate *const d;
+ const std::unique_ptr<FieldPrivate> d;
};
JsonFieldPage(Utils::MacroExpander *expander, QWidget *parent = 0);
diff --git a/src/plugins/projectexplorer/jsonwizard/jsonwizardfactory.cpp b/src/plugins/projectexplorer/jsonwizard/jsonwizardfactory.cpp
index d8d781908c..1ef81e7d45 100644
--- a/src/plugins/projectexplorer/jsonwizard/jsonwizardfactory.cpp
+++ b/src/plugins/projectexplorer/jsonwizard/jsonwizardfactory.cpp
@@ -127,7 +127,7 @@ static JsonWizardFactory::Generator parseGenerator(const QVariant &value, QStrin
}
Core::Id typeId = Core::Id::fromString(QLatin1String(Constants::GENERATOR_ID_PREFIX) + strVal);
JsonWizardGeneratorFactory *factory
- = Utils::findOr(s_generatorFactories, 0, [typeId](JsonWizardGeneratorFactory *f) { return f->canCreate(typeId); });
+ = Utils::findOr(s_generatorFactories, nullptr, [typeId](JsonWizardGeneratorFactory *f) { return f->canCreate(typeId); });
if (!factory) {
*errorMessage = QCoreApplication::translate("ProjectExplorer::JsonWizardFactory",
"TypeId \"%1\" of generator is unknown. Supported typeIds are: \"%2\".")
@@ -164,7 +164,7 @@ static JsonWizardFactory::Page parsePage(const QVariant &value, QString *errorMe
Core::Id typeId = Core::Id::fromString(QLatin1String(Constants::PAGE_ID_PREFIX) + strVal);
JsonWizardPageFactory *factory
- = Utils::findOr(s_pageFactories, 0, [typeId](JsonWizardPageFactory *f) { return f->canCreate(typeId); });
+ = Utils::findOr(s_pageFactories, nullptr, [typeId](JsonWizardPageFactory *f) { return f->canCreate(typeId); });
if (!factory) {
*errorMessage = QCoreApplication::translate("ProjectExplorer::JsonWizardFactory",
"TypeId \"%1\" of page is unknown. Supported typeIds are: \"%2\".")
@@ -306,7 +306,7 @@ QList<Core::IWizardFactory *> JsonWizardFactory::createWizardFactories()
JsonWizardFactory *JsonWizardFactory::createWizardFactory(const QVariantMap &data, const QDir &baseDir,
QString *errorMessage)
{
- JsonWizardFactory *factory = new JsonWizardFactory;
+ auto *factory = new JsonWizardFactory;
if (!factory->initialize(data, baseDir, errorMessage)) {
delete factory;
factory = nullptr;
@@ -404,7 +404,7 @@ Utils::Wizard *JsonWizardFactory::runWizardImpl(const QString &path, QWidget *pa
continue;
havePage = true;
- JsonWizardPageFactory *factory = Utils::findOr(s_pageFactories, 0,
+ JsonWizardPageFactory *factory = Utils::findOr(s_pageFactories, nullptr,
[&data](JsonWizardPageFactory *f) {
return f->canCreate(data.typeId);
});
@@ -427,7 +427,7 @@ Utils::Wizard *JsonWizardFactory::runWizardImpl(const QString &path, QWidget *pa
foreach (const Generator &data, m_generators) {
QTC_ASSERT(data.isValid(), continue);
- JsonWizardGeneratorFactory *factory = Utils::findOr(s_generatorFactories, 0,
+ JsonWizardGeneratorFactory *factory = Utils::findOr(s_generatorFactories, nullptr,
[&data](JsonWizardGeneratorFactory *f) {
return f->canCreate(data.typeId);
});
@@ -441,7 +441,7 @@ Utils::Wizard *JsonWizardFactory::runWizardImpl(const QString &path, QWidget *pa
if (!havePage) {
wizard->accept();
wizard->deleteLater();
- return 0;
+ return nullptr;
}
wizard->show();
@@ -629,7 +629,7 @@ bool JsonWizardFactory::initialize(const QVariantMap &data, const QDir &baseDir,
return false;
}
- WizardFlags flags = 0;
+ WizardFlags flags = {};
if (data.value(QLatin1String(PLATFORM_INDEPENDENT_KEY), false).toBool())
flags |= PlatformIndependent;
setFlags(flags);
diff --git a/src/plugins/projectexplorer/jsonwizard/jsonwizardfilegenerator.cpp b/src/plugins/projectexplorer/jsonwizard/jsonwizardfilegenerator.cpp
index 5e599c39de..ee7da5b419 100644
--- a/src/plugins/projectexplorer/jsonwizard/jsonwizardfilegenerator.cpp
+++ b/src/plugins/projectexplorer/jsonwizard/jsonwizardfilegenerator.cpp
@@ -139,7 +139,7 @@ Core::GeneratedFile JsonWizardFileGenerator::generateFile(const File &file,
}
}
- Core::GeneratedFile::Attributes attributes = 0;
+ Core::GeneratedFile::Attributes attributes = {};
if (JsonWizard::boolFromVariant(file.openInEditor, expander))
attributes |= Core::GeneratedFile::OpenEditorAttribute;
if (JsonWizard::boolFromVariant(file.openAsProject, expander))
diff --git a/src/plugins/projectexplorer/jsonwizard/jsonwizardgeneratorfactory.cpp b/src/plugins/projectexplorer/jsonwizard/jsonwizardgeneratorfactory.cpp
index 6d96f67114..013de06c0a 100644
--- a/src/plugins/projectexplorer/jsonwizard/jsonwizardgeneratorfactory.cpp
+++ b/src/plugins/projectexplorer/jsonwizard/jsonwizardgeneratorfactory.cpp
@@ -67,7 +67,7 @@ namespace ProjectExplorer {
static ICodeStylePreferences *codeStylePreferences(Project *project, Id languageId)
{
if (!languageId.isValid())
- return 0;
+ return nullptr;
if (project)
return project->editorConfiguration()->codeStyle(languageId);
@@ -310,7 +310,7 @@ JsonWizardGenerator *FileGeneratorFactory::create(Id typeId, const QVariant &dat
Q_UNUSED(platform);
Q_UNUSED(variables);
- QTC_ASSERT(canCreate(typeId), return 0);
+ QTC_ASSERT(canCreate(typeId), return nullptr);
auto gen = new JsonWizardFileGenerator;
QString errorMessage;
@@ -319,7 +319,7 @@ JsonWizardGenerator *FileGeneratorFactory::create(Id typeId, const QVariant &dat
if (!errorMessage.isEmpty()) {
qWarning() << "FileGeneratorFactory setup error:" << errorMessage;
delete gen;
- return 0;
+ return nullptr;
}
return gen;
@@ -350,7 +350,7 @@ JsonWizardGenerator *ScannerGeneratorFactory::create(Id typeId, const QVariant &
Q_UNUSED(platform);
Q_UNUSED(variables);
- QTC_ASSERT(canCreate(typeId), return 0);
+ QTC_ASSERT(canCreate(typeId), return nullptr);
auto gen = new JsonWizardScannerGenerator;
QString errorMessage;
@@ -359,7 +359,7 @@ JsonWizardGenerator *ScannerGeneratorFactory::create(Id typeId, const QVariant &
if (!errorMessage.isEmpty()) {
qWarning() << "ScannerGeneratorFactory setup error:" << errorMessage;
delete gen;
- return 0;
+ return nullptr;
}
return gen;
diff --git a/src/plugins/projectexplorer/jsonwizard/jsonwizardpagefactory.cpp b/src/plugins/projectexplorer/jsonwizard/jsonwizardpagefactory.cpp
index 3e6f12a15e..c2c49b61ed 100644
--- a/src/plugins/projectexplorer/jsonwizard/jsonwizardpagefactory.cpp
+++ b/src/plugins/projectexplorer/jsonwizard/jsonwizardpagefactory.cpp
@@ -35,8 +35,7 @@ namespace ProjectExplorer {
// JsonWizardPageFactory:
// --------------------------------------------------------------------
-JsonWizardPageFactory::~JsonWizardPageFactory()
-{ }
+JsonWizardPageFactory::~JsonWizardPageFactory() = default;
void JsonWizardPageFactory::setTypeIdsSuffixes(const QStringList &suffixes)
{
diff --git a/src/plugins/projectexplorer/kit.cpp b/src/plugins/projectexplorer/kit.cpp
index 17f067abe9..37d71a2aff 100644
--- a/src/plugins/projectexplorer/kit.cpp
+++ b/src/plugins/projectexplorer/kit.cpp
@@ -132,14 +132,14 @@ public:
// -------------------------------------------------------------------------
Kit::Kit(Id id) :
- d(new Internal::KitPrivate(id, this))
+ d(std::make_unique<Internal::KitPrivate>(id, this))
{
foreach (KitInformation *sti, KitManager::kitInformation())
d->m_data.insert(sti->id(), sti->defaultValue(this));
}
Kit::Kit(const QVariantMap &data) :
- d(new Internal::KitPrivate(Id(), this))
+ d(std::make_unique<Internal::KitPrivate>(Id(), this))
{
d->m_id = Id::fromSetting(data.value(QLatin1String(ID_KEY)));
@@ -174,10 +174,7 @@ Kit::Kit(const QVariantMap &data) :
d->m_sticky.insert(Id::fromString(stickyInfo));
}
-Kit::~Kit()
-{
- delete d;
-}
+Kit::~Kit() = default;
void Kit::blockNotification()
{
@@ -472,7 +469,7 @@ bool Kit::isEqual(const Kit *other) const
QVariantMap Kit::toMap() const
{
- typedef QHash<Id, QVariant>::ConstIterator IdVariantConstIt;
+ using IdVariantConstIt = QHash<Id, QVariant>::ConstIterator;
QVariantMap data;
data.insert(QLatin1String(ID_KEY), QString::fromLatin1(d->m_id.name()));
diff --git a/src/plugins/projectexplorer/kit.h b/src/plugins/projectexplorer/kit.h
index 9c5551d8c6..ab9b1681f6 100644
--- a/src/plugins/projectexplorer/kit.h
+++ b/src/plugins/projectexplorer/kit.h
@@ -33,6 +33,8 @@
#include <QSet>
#include <QVariant>
+#include <memory>
+
namespace Utils {
class Environment;
class MacroExpander;
@@ -59,6 +61,8 @@ public:
using Predicate = std::function<bool(const Kit *)>;
explicit Kit(Core::Id id = Core::Id());
+ explicit Kit(const QVariantMap &data);
+ ~Kit();
// Do not trigger evaluations
void blockNotification();
@@ -127,9 +131,6 @@ public:
private:
void setSdkProvided(bool sdkProvided);
- ~Kit();
- Kit(const QVariantMap &data);
-
// Unimplemented.
Kit(const Kit &other);
void operator=(const Kit &other);
@@ -139,7 +140,7 @@ private:
QVariantMap toMap() const;
- Internal::KitPrivate *const d;
+ const std::unique_ptr<Internal::KitPrivate> d;
friend class KitInformation;
friend class KitManager;
diff --git a/src/plugins/projectexplorer/kitinformationconfigwidget.cpp b/src/plugins/projectexplorer/kitinformationconfigwidget.cpp
index 5f6ddec6ad..c6fafe7469 100644
--- a/src/plugins/projectexplorer/kitinformationconfigwidget.cpp
+++ b/src/plugins/projectexplorer/kitinformationconfigwidget.cpp
@@ -417,6 +417,7 @@ KitEnvironmentConfigWidget::KitEnvironmentConfigWidget(Kit *workingCopy, const K
m_mainWidget(new QWidget)
{
auto *layout = new QVBoxLayout;
+ layout->setContentsMargins(0, 0, 0, 0);
layout->addWidget(m_summaryLabel);
if (Utils::HostOsInfo::isWindowsHost())
initMSVCOutputSwitch(layout);
diff --git a/src/plugins/projectexplorer/kitmanager.cpp b/src/plugins/projectexplorer/kitmanager.cpp
index 8e9b3653ce..9ed48df0bd 100644
--- a/src/plugins/projectexplorer/kitmanager.cpp
+++ b/src/plugins/projectexplorer/kitmanager.cpp
@@ -34,11 +34,11 @@
#include <coreplugin/icore.h>
+#include <utils/environment.h>
#include <utils/persistentsettings.h>
+#include <utils/pointeralgorithm.h>
#include <utils/qtcassert.h>
#include <utils/stringutils.h>
-#include <utils/environment.h>
-#include <utils/algorithm.h>
#include <QSettings>
@@ -67,23 +67,13 @@ static FileName settingsFileName()
class KitManagerPrivate
{
public:
- ~KitManagerPrivate();
-
Kit *m_defaultKit = nullptr;
bool m_initialized = false;
- QList<KitInformation *> m_informationList;
- QList<Kit *> m_kitList;
- PersistentSettingsWriter *m_writer = nullptr;
+ std::vector<std::unique_ptr<KitInformation>> m_informationList;
+ std::vector<std::unique_ptr<Kit>> m_kitList;
+ std::unique_ptr<PersistentSettingsWriter> m_writer;
};
-KitManagerPrivate::~KitManagerPrivate()
-{
- foreach (Kit *k, m_kitList)
- delete k;
- qDeleteAll(m_informationList);
- delete m_writer;
-}
-
} // namespace Internal
// --------------------------------------------------------------------------
@@ -98,15 +88,14 @@ KitManager *KitManager::instance()
return m_instance;
}
-KitManager::KitManager(QObject *parent) :
- QObject(parent)
+KitManager::KitManager(QObject *parent)
+ : QObject(parent)
{
d = new KitManagerPrivate;
QTC_CHECK(!m_instance);
m_instance = this;
- connect(ICore::instance(), &ICore::saveSettingsRequested,
- this, &KitManager::saveKits);
+ connect(ICore::instance(), &ICore::saveSettingsRequested, this, &KitManager::saveKits);
connect(this, &KitManager::kitAdded, this, &KitManager::kitsChanged);
connect(this, &KitManager::kitRemoved, this, &KitManager::kitsChanged);
@@ -115,106 +104,90 @@ KitManager::KitManager(QObject *parent) :
void KitManager::restoreKits()
{
- QTC_ASSERT(!d->m_initialized, return);
- static bool initializing = false;
-
- if (initializing) // kits will call kits() to check their display names, which will trigger another
- // call to restoreKits, which ...
- return;
+ QTC_ASSERT(!d->m_initialized, return );
- initializing = true;
-
- QList<Kit *> kitsToRegister;
- QList<Kit *> kitsToValidate;
- QList<Kit *> kitsToCheck;
- QList<Kit *> sdkKits;
-
- // read all kits from SDK
- QFileInfo kitFile(ICore::installerResourcePath() + KIT_FILENAME);
- if (kitFile.exists()) {
- KitList system = restoreKits(FileName(kitFile));
- // make sure we mark these as autodetected and run additional setup logic
- foreach (Kit *k, system.kits) {
- k->setAutoDetected(true);
- k->setSdkProvided(true);
- k->makeSticky();
- }
-
- // SDK kits are always considered to be up for validation since they might have been
- // extended with additional information by creator in the meantime:
- kitsToValidate = system.kits;
- }
+ std::vector<std::unique_ptr<Kit>> resultList;
// read all kits from user file
- KitList userKits;
- FileName userSettingsFile(settingsFileName());
- if (userSettingsFile.exists())
- userKits = restoreKits(userSettingsFile);
- foreach (Kit *k, userKits.kits) {
- if (k->isSdkProvided())
- kitsToCheck.append(k);
- else
- kitsToRegister.append(k);
+ Core::Id defaultUserKit;
+ std::vector<std::unique_ptr<Kit>> kitsToCheck;
+ {
+ KitList userKits = restoreKits(settingsFileName());
+ defaultUserKit = userKits.defaultKit;
+
+ for (auto &k : userKits.kits) {
+ if (k->isSdkProvided()) {
+ kitsToCheck.emplace_back(std::move(k));
+ } else {
+ completeKit(k.get()); // Store manual kits
+ resultList.emplace_back(std::move(k));
+ }
+ }
}
- Kit *toStore = 0;
- foreach (Kit *current, kitsToValidate) {
- toStore = current;
- toStore->upgrade();
- toStore->setup(); // Make sure all kitinformation are properly set up before merging them
- // with the information from the user settings file
-
- // Check whether we had this kit stored and prefer the stored one:
- for (int i = 0; i < kitsToCheck.count(); ++i) {
- if (kitsToCheck.at(i)->id() == current->id()) {
- toStore = kitsToCheck.at(i);
- kitsToCheck.removeAt(i);
+ // read all kits from SDK
+ {
+ KitList system
+ = restoreKits(FileName::fromString(ICore::installerResourcePath() + KIT_FILENAME));
+
+ // SDK kits need to get updated with the user-provided extra settings:
+ for (auto &current : system.kits) {
+ // make sure we mark these as autodetected and run additional setup logic
+ current->setAutoDetected(true);
+ current->setSdkProvided(true);
+ current->makeSticky();
+
+ // Process:
+ auto toStore = std::move(current);
+ toStore->upgrade();
+ toStore->setup(); // Make sure all kitinformation are properly set up before merging them
+ // with the information from the user settings file
+
+ // Check whether we had this kit stored and prefer the stored one:
+ const auto i = std::find_if(std::begin(kitsToCheck),
+ std::end(kitsToCheck),
+ Utils::equal(&Kit::id, toStore->id()));
+ if (i != std::end(kitsToCheck)) {
+ Kit *ptr = i->get();
// Overwrite settings that the SDK sets to those values:
- foreach (const KitInformation *ki, kitInformation()) {
+ foreach (const KitInformation *ki, KitManager::kitInformation()) {
// Copy sticky settings over:
- if (current->isSticky(ki->id())) {
- toStore->setValue(ki->id(), current->value(ki->id()));
- toStore->setSticky(ki->id(), true);
+ if (ptr->isSticky(ki->id())) {
+ ptr->setValue(ki->id(), toStore->value(ki->id()));
+ ptr->setSticky(ki->id(), true);
}
}
-
- delete current;
- break;
+ toStore = std::move(*i);
+ kitsToCheck.erase(i);
}
+ completeKit(toStore.get()); // Store manual kits
+ resultList.emplace_back(std::move(toStore));
}
- addKit(toStore);
- sdkKits << toStore;
}
// Delete all loaded autodetected kits that were not rediscovered:
- foreach (Kit *k, kitsToCheck)
- delete k;
kitsToCheck.clear();
- // Store manual kits
- foreach (Kit *k, kitsToRegister)
- addKit(k);
-
- if (kits().isEmpty()) {
- Kit *defaultKit = new Kit; // One kit using default values
+ if (resultList.size() == 0) {
+ auto defaultKit = std::make_unique<Kit>(); // One kit using default values
defaultKit->setUnexpandedDisplayName(tr("Desktop"));
defaultKit->setSdkProvided(false);
defaultKit->setAutoDetected(false);
defaultKit->setup();
- addKit(defaultKit);
- setDefaultKit(defaultKit);
+ completeKit(defaultKit.get()); // Store manual kits
+ resultList.emplace_back(std::move(defaultKit));
}
- Kit *k = kit(userKits.defaultKit);
- if (!k && !defaultKit())
- k = Utils::findOrDefault(kitsToRegister + sdkKits, &Kit::isValid);
- if (k)
- setDefaultKit(k);
+ Kit *k = Utils::findOrDefault(resultList, Utils::equal(&Kit::id, defaultUserKit));
+ if (!k)
+ k = Utils::findOrDefault(resultList, &Kit::isValid);
+ std::swap(resultList, d->m_kitList);
+ setDefaultKit(k);
- d->m_writer = new PersistentSettingsWriter(settingsFileName(), QLatin1String("QtCreatorProfiles"));
+ d->m_writer = std::make_unique<PersistentSettingsWriter>(settingsFileName(), "QtCreatorProfiles");
d->m_initialized = true;
emit kitsLoaded();
emit kitsChanged();
@@ -254,22 +227,19 @@ bool KitManager::isLoaded()
return d->m_initialized;
}
-static bool greaterPriority(KitInformation *a, KitInformation *b)
+void KitManager::registerKitInformation(std::unique_ptr<KitInformation> &&ki)
{
- return a->priority() > b->priority();
-}
-
-void KitManager::registerKitInformation(KitInformation *ki)
-{
- QTC_CHECK(!isLoaded());
- QTC_ASSERT(!d->m_informationList.contains(ki), return);
-
- auto it = std::lower_bound(d->m_informationList.begin(), d->m_informationList.end(),
- ki, greaterPriority);
- d->m_informationList.insert(it, ki);
+ QTC_ASSERT(ki->id().isValid(), return );
+ QTC_ASSERT(!Utils::contains(d->m_informationList, ki.get()), return );
- if (!isLoaded())
- return;
+ auto it = std::lower_bound(std::begin(d->m_informationList),
+ std::end(d->m_informationList),
+ ki,
+ [](const std::unique_ptr<KitInformation> &a,
+ const std::unique_ptr<KitInformation> &b) {
+ return a->priority() > b->priority();
+ });
+ d->m_informationList.insert(it, std::move(ki));
foreach (Kit *k, kits()) {
if (!k->hasValue(ki->id()))
@@ -281,13 +251,6 @@ void KitManager::registerKitInformation(KitInformation *ki)
return;
}
-void KitManager::deregisterKitInformation(KitInformation *ki)
-{
- QTC_CHECK(d->m_informationList.contains(ki));
- d->m_informationList.removeOne(ki);
- delete ki;
-}
-
QSet<Id> KitManager::supportedPlatforms()
{
QSet<Id> platforms;
@@ -314,13 +277,15 @@ QList<Kit *> KitManager::sortKits(const QList<Kit *> kits)
// calling executables to find version information, etc.) to call that
// method!
// Avoid lots of potentially expensive calls to Kit::displayName():
- QList<QPair<QString, Kit *> > sortList
- = Utils::transform(kits, [](Kit *k) { return qMakePair(k->displayName(), k); });
- Utils::sort(sortList, [](const QPair<QString, Kit *> &a, const QPair<QString, Kit *> &b) -> bool {
- if (a.first == b.first)
- return a.second < b.second;
- return a. first < b.first;
+ QList<QPair<QString, Kit *>> sortList = Utils::transform(kits, [](Kit *k) {
+ return qMakePair(k->displayName(), k);
});
+ Utils::sort(sortList,
+ [](const QPair<QString, Kit *> &a, const QPair<QString, Kit *> &b) -> bool {
+ if (a.first == b.first)
+ return a.second < b.second;
+ return a.first < b.first;
+ });
return Utils::transform(sortList, &QPair<QString, Kit *>::second);
}
@@ -328,9 +293,13 @@ KitManager::KitList KitManager::restoreKits(const FileName &fileName)
{
KitList result;
+ if (!fileName.exists())
+ return result;
+
PersistentSettingsReader reader;
if (!reader.load(fileName)) {
- qWarning("Warning: Failed to read \"%s\", cannot restore kits!", qPrintable(fileName.toUserOutput()));
+ qWarning("Warning: Failed to read \"%s\", cannot restore kits!",
+ qPrintable(fileName.toUserOutput()));
return result;
}
QVariantMap data = reader.restoreValues();
@@ -350,47 +319,44 @@ KitManager::KitList KitManager::restoreKits(const FileName &fileName)
const QVariantMap stMap = data.value(key).toMap();
- Kit *k = new Kit(stMap);
+ auto k = std::make_unique<Kit>(stMap);
if (k->id().isValid()) {
- result.kits.append(k);
+ result.kits.emplace_back(std::move(k));
} else {
- // If the Id is broken, then do not trust the rest of the data either.
- delete k;
qWarning("Warning: Unable to restore kits stored in %s at position %d.",
- qPrintable(fileName.toUserOutput()), i);
+ qPrintable(fileName.toUserOutput()),
+ i);
}
}
const Id id = Id::fromSetting(data.value(QLatin1String(KIT_DEFAULT_KEY)));
if (!id.isValid())
return result;
- foreach (Kit *k, result.kits) {
- if (k->id() == id) {
- result.defaultKit = id;
- break;
- }
- }
+ if (Utils::contains(result.kits, [id](const std::unique_ptr<Kit> &k) { return k->id() == id; }))
+ result.defaultKit = id;
+
return result;
}
QList<Kit *> KitManager::kits(const Kit::Predicate &predicate)
{
+ const QList<Kit *> result = Utils::toRawPointer<QList>(d->m_kitList);
if (predicate)
- return Utils::filtered(d->m_kitList, predicate);
- return d->m_kitList;
-}
+ return Utils::filtered(result, predicate);
+ return result;
+ }
Kit *KitManager::kit(Id id)
{
if (!id.isValid())
- return 0;
+ return nullptr;
- return Utils::findOrDefault(kits(), Utils::equal(&Kit::id, id));
+ return Utils::findOrDefault(d->m_kitList, Utils::equal(&Kit::id, id));
}
Kit *KitManager::kit(const Kit::Predicate &predicate)
{
- return Utils::findOrDefault(d->m_kitList, predicate);
+ return Utils::findOrDefault(kits(), predicate);
}
Kit *KitManager::defaultKit()
@@ -400,12 +366,12 @@ Kit *KitManager::defaultKit()
QList<KitInformation *> KitManager::kitInformation()
{
- return d->m_informationList;
+ return Utils::toRawPointer<QList>(d->m_informationList);
}
KitManagerConfigWidget *KitManager::createConfigWidget(Kit *k)
{
- KitManagerConfigWidget *result = new KitManagerConfigWidget(k);
+ auto *result = new KitManagerConfigWidget(k);
foreach (KitInformation *ki, kitInformation())
result->addConfigWidget(ki->createConfigWidget(result->workingCopy()));
@@ -414,24 +380,18 @@ KitManagerConfigWidget *KitManager::createConfigWidget(Kit *k)
return result;
}
-void KitManager::deleteKit(Kit *k)
-{
- QTC_ASSERT(!KitManager::kits().contains(k), return);
- delete k;
-}
-
void KitManager::notifyAboutUpdate(Kit *k)
{
if (!k || !isLoaded())
return;
- if (d->m_kitList.contains(k))
+ if (Utils::contains(d->m_kitList, k))
emit m_instance->kitUpdated(k);
else
emit m_instance->unmanagedKitUpdated(k);
}
-bool KitManager::registerKit(Kit *k)
+bool KitManager::registerKit(std::unique_ptr<Kit> &&k)
{
QTC_ASSERT(isLoaded(), return false);
@@ -440,62 +400,61 @@ bool KitManager::registerKit(Kit *k)
QTC_ASSERT(k->id().isValid(), return false);
- if (kits().contains(k))
+ Kit *kptr = k.get();
+ if (Utils::contains(d->m_kitList, kptr))
return false;
// make sure we have all the information in our kits:
- m_instance->addKit(k);
+ completeKit(kptr);
- if (!d->m_defaultKit ||
- (!d->m_defaultKit->isValid() && k->isValid()))
- setDefaultKit(k);
+ d->m_kitList.emplace_back(std::move(k));
- emit m_instance->kitAdded(k);
+ if (!d->m_defaultKit || (!d->m_defaultKit->isValid() && kptr->isValid()))
+ setDefaultKit(kptr);
+
+ emit m_instance->kitAdded(kptr);
return true;
}
void KitManager::deregisterKit(Kit *k)
{
- if (!k || !kits().contains(k))
+ if (!k || !Utils::contains(d->m_kitList, k))
return;
- d->m_kitList.removeOne(k);
+ auto taken = Utils::take(d->m_kitList, k);
if (defaultKit() == k) {
Kit *newDefault = Utils::findOrDefault(kits(), [](Kit *k) { return k->isValid(); });
setDefaultKit(newDefault);
}
emit m_instance->kitRemoved(k);
- delete k;
}
void KitManager::setDefaultKit(Kit *k)
{
if (defaultKit() == k)
return;
- if (k && !kits().contains(k))
+ if (k && !Utils::contains(d->m_kitList, k))
return;
d->m_defaultKit = k;
emit m_instance->defaultkitChanged();
}
-void KitManager::addKit(Kit *k)
+void KitManager::completeKit(Kit *k)
{
- if (!k)
- return;
-
- {
- KitGuard g(k);
- foreach (KitInformation *ki, d->m_informationList) {
- ki->upgrade(k);
- if (!k->hasValue(ki->id()))
- k->setValue(ki->id(), ki->defaultValue(k));
- else
- ki->fix(k);
- }
+ QTC_ASSERT(k, return);
+ KitGuard g(k);
+ for (const std::unique_ptr<KitInformation> &ki : d->m_informationList) {
+ ki->upgrade(k);
+ if (!k->hasValue(ki->id()))
+ k->setValue(ki->id(), ki->defaultValue(k));
+ else
+ ki->fix(k);
}
-
- d->m_kitList.append(k);
}
+// --------------------------------------------------------------------
+// KitInformation:
+// --------------------------------------------------------------------
+
void KitInformation::addToEnvironment(const Kit *k, Environment &env) const
{
Q_UNUSED(k);
@@ -505,7 +464,7 @@ void KitInformation::addToEnvironment(const Kit *k, Environment &env) const
IOutputParser *KitInformation::createOutputParser(const Kit *k) const
{
Q_UNUSED(k);
- return 0;
+ return nullptr;
}
QString KitInformation::displayNamePostfix(const Kit *k) const
diff --git a/src/plugins/projectexplorer/kitmanager.h b/src/plugins/projectexplorer/kitmanager.h
index db5bb28304..a576a1d360 100644
--- a/src/plugins/projectexplorer/kitmanager.h
+++ b/src/plugins/projectexplorer/kitmanager.h
@@ -29,8 +29,8 @@
#include "kit.h"
-#include <coreplugin/id.h>
#include <coreplugin/featureprovider.h>
+#include <coreplugin/id.h>
#include <QObject>
#include <QPair>
@@ -41,7 +41,7 @@ namespace Utils {
class Environment;
class FileName;
class MacroExpander;
-}
+} // namespace Utils
namespace ProjectExplorer {
class Task;
@@ -124,14 +124,14 @@ public:
static Internal::KitManagerConfigWidget *createConfigWidget(Kit *k);
- static void deleteKit(Kit *k);
-
- static bool registerKit(Kit *k);
+ static bool registerKit(std::unique_ptr<Kit> &&k);
static void deregisterKit(Kit *k);
static void setDefaultKit(Kit *k);
- static void registerKitInformation(KitInformation *ki);
- static void deregisterKitInformation(KitInformation *ki);
+ template<typename KI, typename... Args>
+ static void registerKitInformation(Args&&... args) {
+ registerKitInformation(std::make_unique<KI>(std::forward<Args>(args)...));
+ }
static QSet<Core::Id> supportedPlatforms();
static QSet<Core::Id> availableFeatures(Core::Id platformId);
@@ -159,20 +159,22 @@ signals:
private:
explicit KitManager(QObject *parent = nullptr);
+ static void registerKitInformation(std::unique_ptr<KitInformation> &&ki);
+
// Make sure the this is only called after all
// KitInformation are registered!
void restoreKits();
class KitList
{
public:
- KitList() { }
+ KitList() {}
Core::Id defaultKit;
- QList<Kit *> kits;
+ std::vector<std::unique_ptr<Kit>> kits;
};
KitList restoreKits(const Utils::FileName &fileName);
static void notifyAboutUpdate(Kit *k);
- void addKit(Kit *k);
+ static void completeKit(Kit *k);
friend class ProjectExplorerPlugin; // for constructor
friend class Kit;
diff --git a/src/plugins/projectexplorer/kitmanagerconfigwidget.cpp b/src/plugins/projectexplorer/kitmanagerconfigwidget.cpp
index a7e19ff9e9..c9b8391bd9 100644
--- a/src/plugins/projectexplorer/kitmanagerconfigwidget.cpp
+++ b/src/plugins/projectexplorer/kitmanagerconfigwidget.cpp
@@ -32,6 +32,7 @@
#include <coreplugin/variablechooser.h>
+#include <utils/algorithm.h>
#include <utils/detailswidget.h>
#include <utils/qtcassert.h>
#include <utils/macroexpander.h>
@@ -60,7 +61,7 @@ KitManagerConfigWidget::KitManagerConfigWidget(Kit *k) :
m_nameEdit(new QLineEdit),
m_fileSystemFriendlyNameLineEdit(new QLineEdit),
m_kit(k),
- m_modifiedKit(new Kit(Core::Id(WORKING_COPY_KIT_ID)))
+ m_modifiedKit(std::make_unique<Kit>(Core::Id(WORKING_COPY_KIT_ID)))
{
static auto alignment
= static_cast<const Qt::Alignment>(style()->styleHint(QStyle::SH_FormLayoutLabelAlignment));
@@ -129,10 +130,9 @@ KitManagerConfigWidget::~KitManagerConfigWidget()
qDeleteAll(m_actions);
m_actions.clear();
- KitManager::deleteKit(m_modifiedKit);
// Make sure our workingCopy did not get registered somehow:
- foreach (const Kit *k, KitManager::kits())
- QTC_CHECK(k->id() != Core::Id(WORKING_COPY_KIT_ID));
+ QTC_CHECK(!Utils::contains(KitManager::kits(),
+ Utils::equal(&Kit::id, Core::Id(WORKING_COPY_KIT_ID))));
}
QString KitManagerConfigWidget::displayName() const
@@ -151,13 +151,14 @@ void KitManagerConfigWidget::apply()
{
bool mustSetDefault = m_isDefaultKit;
bool mustRegister = false;
+ auto toRegister = std::make_unique<Kit>();
if (!m_kit) {
mustRegister = true;
- m_kit = new Kit;
+ m_kit = toRegister.get();
}
- m_kit->copyFrom(m_modifiedKit); //m_isDefaultKit is reset in discard() here.
+ m_kit->copyFrom(m_modifiedKit.get()); //m_isDefaultKit is reset in discard() here.
if (mustRegister)
- KitManager::registerKit(m_kit);
+ KitManager::registerKit(std::move(toRegister));
if (mustSetDefault)
KitManager::setDefaultKit(m_kit);
@@ -186,7 +187,7 @@ void KitManagerConfigWidget::discard()
bool KitManagerConfigWidget::isDirty() const
{
return !m_kit
- || !m_kit->isEqual(m_modifiedKit)
+ || !m_kit->isEqual(m_modifiedKit.get())
|| m_isDefaultKit != (KitManager::defaultKit() == m_kit);
}
@@ -218,7 +219,7 @@ void KitManagerConfigWidget::addConfigWidget(KitConfigWidget *widget)
QString name = widget->displayName();
QString toolTip = widget->toolTip();
- auto action = new QAction(tr("Mark as Mutable"), 0);
+ auto action = new QAction(tr("Mark as Mutable"), nullptr);
action->setCheckable(true);
action->setChecked(widget->isMutable());
action->setEnabled(!widget->isSticky());
@@ -272,7 +273,7 @@ void KitManagerConfigWidget::makeStickySubWidgetsReadOnly()
Kit *KitManagerConfigWidget::workingCopy() const
{
- return m_modifiedKit;
+ return m_modifiedKit.get();
}
bool KitManagerConfigWidget::configures(Kit *k) const
@@ -340,7 +341,7 @@ void KitManagerConfigWidget::setFileSystemFriendlyName()
void KitManagerConfigWidget::workingCopyWasUpdated(Kit *k)
{
- if (k != m_modifiedKit || m_fixingKit)
+ if (k != m_modifiedKit.get() || m_fixingKit)
return;
m_fixingKit = true;
diff --git a/src/plugins/projectexplorer/kitmanagerconfigwidget.h b/src/plugins/projectexplorer/kitmanagerconfigwidget.h
index 81745e4f9f..026a8e25b4 100644
--- a/src/plugins/projectexplorer/kitmanagerconfigwidget.h
+++ b/src/plugins/projectexplorer/kitmanagerconfigwidget.h
@@ -29,6 +29,8 @@
#include <QWidget>
+#include <memory>
+
QT_BEGIN_NAMESPACE
class QGridLayout;
class QLabel;
@@ -98,7 +100,7 @@ private:
QList<KitConfigWidget *> m_widgets;
QList<QLabel *> m_labels;
Kit *m_kit;
- Kit *m_modifiedKit;
+ std::unique_ptr<Kit> m_modifiedKit;
bool m_isDefaultKit = false;
bool m_fixingKit = false;
bool m_hasUniqueName = true;
diff --git a/src/plugins/projectexplorer/kitmodel.cpp b/src/plugins/projectexplorer/kitmodel.cpp
index 43205858c9..cc35e243ef 100644
--- a/src/plugins/projectexplorer/kitmodel.cpp
+++ b/src/plugins/projectexplorer/kitmodel.cpp
@@ -54,12 +54,12 @@ public:
}
}
- ~KitNode()
+ ~KitNode() override
{
delete widget;
}
- QVariant data(int, int role) const
+ QVariant data(int, int role) const override
{
if (widget) {
if (role == Qt::FontRole) {
@@ -132,7 +132,7 @@ KitModel::KitModel(QBoxLayout *parentLayout, QObject *parent)
Kit *KitModel::kit(const QModelIndex &index)
{
KitNode *n = kitNode(index);
- return n ? n->widget->workingCopy() : 0;
+ return n ? n->widget->workingCopy() : nullptr;
}
KitNode *KitModel::kitNode(const QModelIndex &index)
@@ -161,7 +161,7 @@ bool KitModel::isDefaultKit(Kit *k) const
KitManagerConfigWidget *KitModel::widget(const QModelIndex &index)
{
KitNode *n = kitNode(index);
- return n ? n->widget : 0;
+ return n ? n->widget : nullptr;
}
void KitModel::isAutoDetectedChanged()
@@ -244,7 +244,7 @@ void KitModel::markForRemoval(Kit *k)
setDefaultNode(findItemAtLevel<2>([node](KitNode *kn) { return kn != node; }));
takeItem(node);
- if (node->widget->configures(0))
+ if (node->widget->configures(nullptr))
delete node;
else
m_toRemoveList.append(node);
@@ -252,7 +252,7 @@ void KitModel::markForRemoval(Kit *k)
Kit *KitModel::markForAddition(Kit *baseKit)
{
- KitNode *node = createNode(0);
+ KitNode *node = createNode(nullptr);
m_manualRoot->appendChild(node);
Kit *k = node->widget->workingCopy();
KitGuard g(k);
@@ -331,7 +331,7 @@ void KitModel::removeKit(Kit *k)
if (n->widget->configures(k)) {
m_toRemoveList.removeOne(n);
if (m_defaultNode == n)
- m_defaultNode = 0;
+ m_defaultNode = nullptr;
delete n;
return;
}
diff --git a/src/plugins/projectexplorer/kitoptionspage.cpp b/src/plugins/projectexplorer/kitoptionspage.cpp
index 24535eb57c..262d6c2706 100644
--- a/src/plugins/projectexplorer/kitoptionspage.cpp
+++ b/src/plugins/projectexplorer/kitoptionspage.cpp
@@ -157,7 +157,7 @@ void KitOptionsPageWidget::kitSelectionChanged()
void KitOptionsPageWidget::addNewKit()
{
- Kit *k = m_model->markForAddition(0);
+ Kit *k = m_model->markForAddition(nullptr);
QModelIndex newIdx = m_model->indexOf(k);
m_selectionModel->select(newIdx,
diff --git a/src/plugins/projectexplorer/makestep.cpp b/src/plugins/projectexplorer/makestep.cpp
new file mode 100644
index 0000000000..4473c1b5e8
--- /dev/null
+++ b/src/plugins/projectexplorer/makestep.cpp
@@ -0,0 +1,492 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+#include "makestep.h"
+#include "ui_makestep.h"
+
+#include "buildconfiguration.h"
+#include "gnumakeparser.h"
+#include "kitinformation.h"
+#include "project.h"
+#include "projectexplorer.h"
+#include "projectexplorerconstants.h"
+#include "target.h"
+#include "toolchain.h"
+
+#include <coreplugin/id.h>
+#include <coreplugin/variablechooser.h>
+#include <utils/hostosinfo.h>
+#include <utils/qtcprocess.h>
+#include <utils/utilsicons.h>
+
+#include <QThread>
+
+using namespace Core;
+
+const char BUILD_TARGETS_SUFFIX[] = ".BuildTargets";
+const char MAKE_ARGUMENTS_SUFFIX[] = ".MakeArguments";
+const char MAKE_COMMAND_SUFFIX[] = ".MakeCommand";
+const char CLEAN_SUFFIX[] = ".Clean";
+const char OVERRIDE_MAKEFLAGS_SUFFIX[] = ".OverrideMakeflags";
+const char JOBCOUNT_SUFFIX[] = ".JobCount";
+
+const char MAKEFLAGS[] = "MAKEFLAGS";
+
+namespace ProjectExplorer {
+
+MakeStep::MakeStep(BuildStepList *parent,
+ Core::Id id,
+ const QString &buildTarget,
+ const QStringList &availableTargets)
+ : AbstractProcessStep(parent, id),
+ m_availableTargets(availableTargets),
+ m_userJobCount(defaultJobCount())
+{
+ setDefaultDisplayName(defaultDisplayName());
+ if (!buildTarget.isEmpty())
+ setBuildTarget(buildTarget, true);
+}
+
+bool MakeStep::init(QList<const BuildStep *> &earlierSteps)
+{
+ BuildConfiguration *bc = buildConfiguration();
+ if (!bc)
+ emit addTask(Task::buildConfigurationMissingTask());
+
+ const QString make = effectiveMakeCommand();
+ if (make.isEmpty())
+ emit addTask(makeCommandMissingTask());
+
+ if (!bc || make.isEmpty()) {
+ emitFaultyConfigurationMessage();
+ return false;
+ }
+
+ ProcessParameters *pp = processParameters();
+ pp->setMacroExpander(bc->macroExpander());
+ pp->setWorkingDirectory(bc->buildDirectory().toString());
+ pp->setEnvironment(environment(bc));
+ pp->setCommand(make);
+ pp->setArguments(allArguments());
+ pp->resolveAll();
+
+ // If we are cleaning, then make can fail with an error code, but that doesn't mean
+ // we should stop the clean queue
+ // That is mostly so that rebuild works on an already clean project
+ setIgnoreReturnValue(isClean());
+
+ setOutputParser(new GnuMakeParser());
+ IOutputParser *parser = target()->kit()->createOutputParser();
+ if (parser)
+ appendOutputParser(parser);
+ outputParser()->setWorkingDirectory(pp->effectiveWorkingDirectory());
+
+ return AbstractProcessStep::init(earlierSteps);
+}
+
+void MakeStep::setClean(bool clean)
+{
+ m_clean = clean;
+}
+
+bool MakeStep::isClean() const
+{
+ return m_clean;
+}
+
+QString MakeStep::defaultDisplayName()
+{
+ return tr("Make");
+}
+
+static const QList<ToolChain *> preferredToolChains(const Kit *kit)
+{
+ QList<ToolChain *> tcs = ToolChainKitInformation::toolChains(kit);
+ // prefer CXX, then C, then others
+ Utils::sort(tcs, [](ToolChain *tcA, ToolChain *tcB) {
+ if (tcA->language() == tcB->language())
+ return false;
+ if (tcA->language() == Constants::CXX_LANGUAGE_ID)
+ return true;
+ if (tcB->language() == Constants::CXX_LANGUAGE_ID)
+ return false;
+ if (tcA->language() == Constants::C_LANGUAGE_ID)
+ return true;
+ return false;
+ });
+ return tcs;
+}
+
+QString MakeStep::defaultMakeCommand() const
+{
+ BuildConfiguration *bc = buildConfiguration();
+ if (!bc)
+ return QString();
+ const Utils::Environment env = environment(bc);
+ for (const ToolChain *tc : preferredToolChains(target()->kit())) {
+ const QString make = tc->makeCommand(env);
+ if (!make.isEmpty())
+ return make;
+ }
+ return QString();
+}
+
+QString MakeStep::msgNoMakeCommand()
+{
+ return tr("Make command missing. Specify Make command in step configuration.");
+}
+
+Task MakeStep::makeCommandMissingTask()
+{
+ return Task(Task::Error,
+ msgNoMakeCommand(),
+ Utils::FileName(),
+ -1,
+ Constants::TASK_CATEGORY_BUILDSYSTEM);
+}
+
+bool MakeStep::isJobCountSupported() const
+{
+ const QList<ToolChain *> tcs = preferredToolChains(target()->kit());
+ const ToolChain *tc = tcs.isEmpty() ? nullptr : tcs.constFirst();
+ return tc
+ && (tc->targetAbi().os() != Abi::WindowsOS
+ || tc->targetAbi().osFlavor() == Abi::WindowsMSysFlavor);
+}
+
+int MakeStep::jobCount() const
+{
+ return m_userJobCount;
+}
+
+void MakeStep::setJobCount(int count)
+{
+ m_userJobCount = count;
+}
+
+bool MakeStep::jobCountOverridesMakeflags() const
+{
+ return m_overrideMakeflags;
+}
+
+void MakeStep::setJobCountOverrideMakeflags(bool override)
+{
+ m_overrideMakeflags = override;
+}
+
+bool MakeStep::makeflagsContainsJobCount() const
+{
+ const Utils::Environment env = environment(buildConfiguration());
+ if (!env.hasKey(MAKEFLAGS))
+ return false;
+ const QStringList args = Utils::QtcProcess::splitArgs(env.value(MAKEFLAGS),
+ Utils::HostOsInfo::hostOs());
+ return Utils::anyOf(args, [](const QString &arg) { return arg.startsWith("-j"); });
+}
+
+Utils::Environment MakeStep::environment(BuildConfiguration *bc) const
+{
+ Utils::Environment env = bc ? bc->environment() : Utils::Environment::systemEnvironment();
+ Utils::Environment::setupEnglishOutput(&env);
+ if (makeCommand().isEmpty()) {
+ // We also prepend "L" to the MAKEFLAGS, so that nmake / jom are less verbose
+ const QList<ToolChain *> tcs = preferredToolChains(target()->kit());
+ const ToolChain *tc = tcs.isEmpty() ? nullptr : tcs.constFirst();
+ if (tc && tc->targetAbi().os() == Abi::WindowsOS
+ && tc->targetAbi().osFlavor() != Abi::WindowsMSysFlavor) {
+ env.set(MAKEFLAGS, 'L' + env.value(MAKEFLAGS));
+ }
+ }
+ return env;
+}
+
+void MakeStep::setMakeCommand(const QString &command)
+{
+ m_makeCommand = command;
+}
+
+QVariantMap MakeStep::toMap() const
+{
+ QVariantMap map(AbstractProcessStep::toMap());
+
+ map.insert(id().withSuffix(BUILD_TARGETS_SUFFIX).toString(), m_buildTargets);
+ map.insert(id().withSuffix(MAKE_ARGUMENTS_SUFFIX).toString(), m_makeArguments);
+ map.insert(id().withSuffix(MAKE_COMMAND_SUFFIX).toString(), m_makeCommand);
+ map.insert(id().withSuffix(CLEAN_SUFFIX).toString(), m_clean);
+ const QString jobCountKey = id().withSuffix(JOBCOUNT_SUFFIX).toString();
+ if (m_userJobCount != defaultJobCount())
+ map.insert(jobCountKey, m_userJobCount);
+ else
+ map.remove(jobCountKey);
+ map.insert(id().withSuffix(OVERRIDE_MAKEFLAGS_SUFFIX).toString(), m_overrideMakeflags);
+ return map;
+}
+
+bool MakeStep::fromMap(const QVariantMap &map)
+{
+ m_buildTargets = map.value(id().withSuffix(BUILD_TARGETS_SUFFIX).toString()).toStringList();
+ m_makeArguments = map.value(id().withSuffix(MAKE_ARGUMENTS_SUFFIX).toString()).toString();
+ m_makeCommand = map.value(id().withSuffix(MAKE_COMMAND_SUFFIX).toString()).toString();
+ m_clean = map.value(id().withSuffix(CLEAN_SUFFIX).toString()).toBool();
+ m_overrideMakeflags = map.value(id().withSuffix(OVERRIDE_MAKEFLAGS_SUFFIX).toString(), false).toBool();
+ m_userJobCount = map.value(id().withSuffix(JOBCOUNT_SUFFIX).toString(), defaultJobCount()).toInt();
+ return BuildStep::fromMap(map);
+}
+
+int MakeStep::defaultJobCount()
+{
+ return QThread::idealThreadCount();
+}
+
+QStringList MakeStep::jobArguments() const
+{
+ if (!isJobCountSupported() || (makeflagsContainsJobCount() && !jobCountOverridesMakeflags()))
+ return {};
+ return {"-j" + QString::number(m_userJobCount)};
+}
+
+QString MakeStep::allArguments() const
+{
+ QString args = m_makeArguments;
+ Utils::QtcProcess::addArgs(&args, jobArguments() + m_buildTargets);
+ return args;
+}
+
+QString MakeStep::userArguments() const
+{
+ return m_makeArguments;
+}
+
+void MakeStep::setUserArguments(const QString &args)
+{
+ m_makeArguments = args;
+}
+
+QString MakeStep::makeCommand() const
+{
+ return m_makeCommand;
+}
+
+QString MakeStep::effectiveMakeCommand() const
+{
+ if (!m_makeCommand.isEmpty())
+ return m_makeCommand;
+ return defaultMakeCommand();
+}
+
+BuildStepConfigWidget *MakeStep::createConfigWidget()
+{
+ return new MakeStepConfigWidget(this);
+}
+
+bool MakeStep::immutable() const
+{
+ return false;
+}
+
+bool MakeStep::buildsTarget(const QString &target) const
+{
+ return m_buildTargets.contains(target);
+}
+
+void MakeStep::setBuildTarget(const QString &target, bool on)
+{
+ QStringList old = m_buildTargets;
+ if (on && !old.contains(target))
+ old << target;
+ else if (!on && old.contains(target))
+ old.removeOne(target);
+
+ m_buildTargets = old;
+}
+
+QStringList MakeStep::availableTargets() const
+{
+ return m_availableTargets;
+}
+
+//
+// GenericMakeStepConfigWidget
+//
+
+MakeStepConfigWidget::MakeStepConfigWidget(MakeStep *makeStep) :
+ m_makeStep(makeStep)
+{
+ m_ui = new Internal::Ui::MakeStep;
+ m_ui->setupUi(this);
+
+ const auto availableTargets = makeStep->availableTargets();
+ for (const QString &target : availableTargets) {
+ auto item = new QListWidgetItem(target, m_ui->targetsList);
+ item->setFlags(item->flags() | Qt::ItemIsUserCheckable);
+ item->setCheckState(m_makeStep->buildsTarget(item->text()) ? Qt::Checked : Qt::Unchecked);
+ }
+ if (availableTargets.isEmpty()) {
+ m_ui->targetsLabel->hide();
+ m_ui->targetsList->hide();
+ }
+
+ m_ui->makeLineEdit->setExpectedKind(Utils::PathChooser::ExistingCommand);
+ m_ui->makeLineEdit->setBaseDirectory(Utils::PathChooser::homePath());
+ m_ui->makeLineEdit->setHistoryCompleter("PE.MakeCommand.History");
+ m_ui->makeLineEdit->setPath(m_makeStep->makeCommand());
+ m_ui->makeArgumentsLineEdit->setText(m_makeStep->userArguments());
+ m_ui->nonOverrideWarning->setToolTip("<html><body><p>" +
+ tr("<code>MAKEFLAGS</code> specifies parallel jobs. Check \"%1\" to override.")
+ .arg(m_ui->overrideMakeflags->text()) + "</p></body></html>");
+ m_ui->nonOverrideWarning->setPixmap(Utils::Icons::WARNING.pixmap());
+ updateDetails();
+
+ connect(m_ui->targetsList, &QListWidget::itemChanged,
+ this, &MakeStepConfigWidget::itemChanged);
+ connect(m_ui->makeLineEdit, &Utils::PathChooser::rawPathChanged,
+ this, &MakeStepConfigWidget::makeLineEditTextEdited);
+ connect(m_ui->makeArgumentsLineEdit, &QLineEdit::textEdited,
+ this, &MakeStepConfigWidget::makeArgumentsLineEditTextEdited);
+ connect(m_ui->userJobCount, QOverload<int>::of(&QSpinBox::valueChanged), this, [this](int value) {
+ m_makeStep->setJobCount(value);
+ updateDetails();
+ });
+ connect(m_ui->overrideMakeflags, &QCheckBox::stateChanged, this, [this](int state) {
+ m_makeStep->setJobCountOverrideMakeflags(state == Qt::Checked);
+ updateDetails();
+ });
+
+ connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::settingsChanged,
+ this, &MakeStepConfigWidget::updateDetails);
+
+ connect(m_makeStep->target(), &Target::kitChanged,
+ this, &MakeStepConfigWidget::updateDetails);
+
+ const auto pro = m_makeStep->target()->project();
+ pro->subscribeSignal(&BuildConfiguration::environmentChanged, this, [this]() {
+ if (static_cast<BuildConfiguration *>(sender())->isActive()) {
+ updateDetails();
+ }
+ });
+ pro->subscribeSignal(&BuildConfiguration::buildDirectoryChanged, this, [this]() {
+ if (static_cast<BuildConfiguration *>(sender())->isActive()) {
+ updateDetails();
+ }
+ });
+ connect(pro, &Project::activeProjectConfigurationChanged,
+ this, [this](ProjectConfiguration *pc) {
+ if (pc && pc->isActive()) {
+ updateDetails();
+ }
+ });
+
+ Core::VariableChooser::addSupportForChildWidgets(this, m_makeStep->macroExpander());
+}
+
+MakeStepConfigWidget::~MakeStepConfigWidget()
+{
+ delete m_ui;
+}
+
+QString MakeStepConfigWidget::displayName() const
+{
+ return m_makeStep->displayName();
+}
+
+void MakeStepConfigWidget::setSummaryText(const QString &text)
+{
+ if (text == m_summaryText)
+ return;
+ m_summaryText = text;
+ emit updateSummary();
+}
+
+void MakeStepConfigWidget::setUserJobCountVisible(bool visible)
+{
+ m_ui->jobsLabel->setVisible(visible);
+ m_ui->userJobCount->setVisible(visible);
+ m_ui->overrideMakeflags->setVisible(visible);
+}
+
+void MakeStepConfigWidget::updateDetails()
+{
+ BuildConfiguration *bc = m_makeStep->buildConfiguration();
+
+ const QString defaultMake = m_makeStep->defaultMakeCommand();
+ if (defaultMake.isEmpty())
+ m_ui->makeLabel->setText(tr("Make:"));
+ else
+ m_ui->makeLabel->setText(tr("Override %1:").arg(QDir::toNativeSeparators(defaultMake)));
+
+ if (m_makeStep->effectiveMakeCommand().isEmpty()) {
+ setSummaryText(tr("<b>Make:</b> %1").arg(MakeStep::msgNoMakeCommand()));
+ return;
+ }
+ if (!bc) {
+ setSummaryText(tr("<b>Make:</b> No build configuration."));
+ return;
+ }
+
+ setUserJobCountVisible(m_makeStep->isJobCountSupported());
+ m_ui->userJobCount->setValue(m_makeStep->jobCount());
+ m_ui->overrideMakeflags->setCheckState(
+ m_makeStep->jobCountOverridesMakeflags() ? Qt::Checked : Qt::Unchecked);
+ m_ui->nonOverrideWarning->setVisible(m_makeStep->makeflagsContainsJobCount()
+ && !m_makeStep->jobCountOverridesMakeflags());
+
+ ProcessParameters param;
+ param.setMacroExpander(bc->macroExpander());
+ param.setWorkingDirectory(bc->buildDirectory().toString());
+ param.setCommand(m_makeStep->effectiveMakeCommand());
+
+ param.setArguments(m_makeStep->allArguments());
+ param.setEnvironment(m_makeStep->environment(bc));
+
+ if (param.commandMissing())
+ setSummaryText(tr("<b>Make:</b> %1 not found in the environment.").arg(param.command())); // Override display text
+ else
+ setSummaryText(param.summaryInWorkdir(displayName()));
+}
+
+QString MakeStepConfigWidget::summaryText() const
+{
+ return m_summaryText;
+}
+
+void MakeStepConfigWidget::itemChanged(QListWidgetItem *item)
+{
+ m_makeStep->setBuildTarget(item->text(), item->checkState() & Qt::Checked);
+ updateDetails();
+}
+
+void MakeStepConfigWidget::makeLineEditTextEdited()
+{
+ m_makeStep->setMakeCommand(m_ui->makeLineEdit->rawPath());
+ updateDetails();
+}
+
+void MakeStepConfigWidget::makeArgumentsLineEditTextEdited()
+{
+ m_makeStep->setUserArguments(m_ui->makeArgumentsLineEdit->text());
+ updateDetails();
+}
+
+} // namespace GenericProjectManager
diff --git a/src/plugins/projectexplorer/makestep.h b/src/plugins/projectexplorer/makestep.h
new file mode 100644
index 0000000000..8bc1e3f9fb
--- /dev/null
+++ b/src/plugins/projectexplorer/makestep.h
@@ -0,0 +1,119 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+#pragma once
+
+#include "abstractprocessstep.h"
+#include "projectexplorer_global.h"
+
+QT_FORWARD_DECLARE_CLASS(QListWidgetItem);
+
+namespace ProjectExplorer {
+
+namespace Internal {
+namespace Ui { class MakeStep; }
+} // namespace Internal
+
+class PROJECTEXPLORER_EXPORT MakeStep : public ProjectExplorer::AbstractProcessStep
+{
+ Q_OBJECT
+
+public:
+ explicit MakeStep(ProjectExplorer::BuildStepList *parent,
+ Core::Id id,
+ const QString &buildTarget = QString(),
+ const QStringList &availableTargets = {});
+
+ bool init(QList<const BuildStep *> &earlierSteps) override;
+ ProjectExplorer::BuildStepConfigWidget *createConfigWidget() override;
+ bool immutable() const override;
+ bool buildsTarget(const QString &target) const;
+ void setBuildTarget(const QString &target, bool on);
+ QStringList availableTargets() const;
+ QString allArguments() const;
+ QString userArguments() const;
+ void setUserArguments(const QString &args);
+ QString makeCommand() const;
+ void setMakeCommand(const QString &command);
+ QString effectiveMakeCommand() const;
+
+ void setClean(bool clean);
+ bool isClean() const;
+
+ static QString defaultDisplayName();
+
+ QString defaultMakeCommand() const;
+ static QString msgNoMakeCommand();
+ static Task makeCommandMissingTask();
+
+ bool isJobCountSupported() const;
+ int jobCount() const;
+ void setJobCount(int count);
+ bool jobCountOverridesMakeflags() const;
+ void setJobCountOverrideMakeflags(bool override);
+ bool makeflagsContainsJobCount() const;
+
+ Utils::Environment environment(BuildConfiguration *bc) const;
+
+private:
+ QVariantMap toMap() const override;
+ bool fromMap(const QVariantMap &map) override;
+ static int defaultJobCount();
+ QStringList jobArguments() const;
+
+ QStringList m_buildTargets;
+ QStringList m_availableTargets;
+ QString m_makeArguments;
+ QString m_makeCommand;
+ int m_userJobCount = 4;
+ bool m_overrideMakeflags = false;
+ bool m_clean = false;
+};
+
+class PROJECTEXPLORER_EXPORT MakeStepConfigWidget : public ProjectExplorer::BuildStepConfigWidget
+{
+ Q_OBJECT
+
+public:
+ explicit MakeStepConfigWidget(MakeStep *makeStep);
+ ~MakeStepConfigWidget() override;
+
+ QString displayName() const override;
+ QString summaryText() const override;
+
+private:
+ void itemChanged(QListWidgetItem *item);
+ void makeLineEditTextEdited();
+ void makeArgumentsLineEditTextEdited();
+ void updateDetails();
+ void setSummaryText(const QString &text);
+ void setUserJobCountVisible(bool visible);
+
+ Internal::Ui::MakeStep *m_ui;
+ MakeStep *m_makeStep;
+ QString m_summaryText;
+};
+
+} // namespace GenericProjectManager
diff --git a/src/plugins/projectexplorer/makestep.ui b/src/plugins/projectexplorer/makestep.ui
new file mode 100644
index 0000000000..e4caaae994
--- /dev/null
+++ b/src/plugins/projectexplorer/makestep.ui
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>ProjectExplorer::Internal::MakeStep</class>
+ <widget class="QWidget" name="ProjectExplorer::Internal::MakeStep">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>399</width>
+ <height>279</height>
+ </rect>
+ </property>
+ <layout class="QFormLayout" name="formLayout">
+ <property name="fieldGrowthPolicy">
+ <enum>QFormLayout::ExpandingFieldsGrow</enum>
+ </property>
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
+ <number>0</number>
+ </property>
+ <item row="0" column="0">
+ <widget class="QLabel" name="makeLabel">
+ <property name="text">
+ <string>Override %1:</string>
+ </property>
+ <property name="buddy">
+ <cstring>makeLineEdit</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="Utils::PathChooser" name="makeLineEdit" native="true"/>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="makeArgumentsLabel">
+ <property name="text">
+ <string>Make arguments:</string>
+ </property>
+ <property name="buddy">
+ <cstring>makeArgumentsLineEdit</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QLineEdit" name="makeArgumentsLineEdit"/>
+ </item>
+ <item row="2" column="0">
+ <widget class="QLabel" name="jobsLabel">
+ <property name="text">
+ <string>Parallel jobs:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="0">
+ <widget class="QLabel" name="targetsLabel">
+ <property name="text">
+ <string>Targets:</string>
+ </property>
+ <property name="buddy">
+ <cstring>targetsList</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="1">
+ <widget class="QListWidget" name="targetsList"/>
+ </item>
+ <item row="2" column="1">
+ <layout class="QHBoxLayout" name="jobLayout">
+ <item>
+ <widget class="QSpinBox" name="userJobCount">
+ <property name="minimum">
+ <number>1</number>
+ </property>
+ <property name="value">
+ <number>4</number>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="overrideMakeflags">
+ <property name="text">
+ <string>Override MAKEFLAGS</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="nonOverrideWarning">
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ <customwidgets>
+ <customwidget>
+ <class>Utils::PathChooser</class>
+ <extends>QWidget</extends>
+ <header location="global">utils/pathchooser.h</header>
+ <container>1</container>
+ <slots>
+ <signal>editingFinished()</signal>
+ <signal>browsingFinished()</signal>
+ </slots>
+ </customwidget>
+ </customwidgets>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/src/plugins/projectexplorer/miniprojecttargetselector.cpp b/src/plugins/projectexplorer/miniprojecttargetselector.cpp
index 438fed2834..adc7ad7125 100644
--- a/src/plugins/projectexplorer/miniprojecttargetselector.cpp
+++ b/src/plugins/projectexplorer/miniprojecttargetselector.cpp
@@ -66,7 +66,7 @@ static QIcon createCenteredIcon(const QIcon &icon, const QIcon &overlay)
{
QPixmap targetPixmap;
const qreal appDevicePixelRatio = qApp->devicePixelRatio();
- const int deviceSpaceIconSize = static_cast<int>(Core::Constants::MODEBAR_ICON_SIZE * appDevicePixelRatio);
+ const auto deviceSpaceIconSize = static_cast<int>(Core::Constants::MODEBAR_ICON_SIZE * appDevicePixelRatio);
targetPixmap = QPixmap(deviceSpaceIconSize, deviceSpaceIconSize);
targetPixmap.setDevicePixelRatio(appDevicePixelRatio);
targetPixmap.fill(Qt::transparent);
@@ -107,10 +107,10 @@ class TargetSelectorDelegate : public QItemDelegate
public:
TargetSelectorDelegate(ListWidget *parent) : QItemDelegate(parent), m_listWidget(parent) { }
private:
- QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const;
+ QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override;
void paint(QPainter *painter,
const QStyleOptionViewItem &option,
- const QModelIndex &index) const;
+ const QModelIndex &index) const override;
ListWidget *m_listWidget;
};
@@ -227,8 +227,8 @@ void ListWidget::setOptimalWidth(int width)
int ListWidget::padding()
{
// there needs to be enough extra pixels to show a scrollbar
- return 2 * style()->pixelMetric(QStyle::PM_FocusFrameHMargin, 0, this)
- + style()->pixelMetric(QStyle::PM_ScrollBarExtent, 0, this)
+ return 2 * style()->pixelMetric(QStyle::PM_FocusFrameHMargin, nullptr, this)
+ + style()->pixelMetric(QStyle::PM_ScrollBarExtent, nullptr, this)
+ 10;
}
@@ -272,7 +272,7 @@ void ProjectListWidget::addProject(Project *project)
int pos = count();
for (int i = 0; i < count(); ++i) {
- Project *p = item(i)->data(Qt::UserRole).value<Project*>();
+ auto *p = item(i)->data(Qt::UserRole).value<Project*>();
if (projectLesserThan(project, p)) {
pos = i;
break;
@@ -281,7 +281,7 @@ void ProjectListWidget::addProject(Project *project)
bool useFullName = false;
for (int i = 0; i < count(); ++i) {
- Project *p = item(i)->data(Qt::UserRole).value<Project*>();
+ auto *p = item(i)->data(Qt::UserRole).value<Project*>();
if (p->displayName() == project->displayName()) {
useFullName = true;
item(i)->setText(fullName(p));
@@ -289,7 +289,7 @@ void ProjectListWidget::addProject(Project *project)
}
QString displayName = useFullName ? fullName(project) : project->displayName();
- QListWidgetItem *item = new QListWidgetItem();
+ auto *item = new QListWidgetItem();
item->setData(Qt::UserRole, QVariant::fromValue(project));
item->setText(displayName);
insertItem(pos, item);
@@ -317,14 +317,14 @@ void ProjectListWidget::removeProject(Project *project)
int countDisplayName = 0;
int otherIndex = -1;
for (int i = 0; i < count(); ++i) {
- Project *p = item(i)->data(Qt::UserRole).value<Project *>();
+ auto *p = item(i)->data(Qt::UserRole).value<Project *>();
if (p->displayName() == name) {
++countDisplayName;
otherIndex = i;
}
}
if (countDisplayName == 1) {
- Project *p = item(otherIndex)->data(Qt::UserRole).value<Project *>();
+ auto *p = item(otherIndex)->data(Qt::UserRole).value<Project *>();
item(otherIndex)->setText(p->displayName());
}
@@ -346,7 +346,7 @@ void ProjectListWidget::projectDisplayNameChanged(Project *project)
int oldPos = 0;
bool useFullName = false;
for (int i = 0; i < count(); ++i) {
- Project *p = item(i)->data(Qt::UserRole).value<Project*>();
+ auto *p = item(i)->data(Qt::UserRole).value<Project*>();
if (p == project) {
oldPos = i;
} else if (p->displayName() == project->displayName()) {
@@ -360,7 +360,7 @@ void ProjectListWidget::projectDisplayNameChanged(Project *project)
int pos = count();
for (int i = 0; i < count(); ++i) {
- Project *p = item(i)->data(Qt::UserRole).value<Project*>();
+ auto *p = item(i)->data(Qt::UserRole).value<Project*>();
if (projectLesserThan(project, p)) {
pos = i;
break;
@@ -389,7 +389,7 @@ void ProjectListWidget::setProject(int index)
return;
if (index < 0)
return;
- Project *p = item(index)->data(Qt::UserRole).value<Project *>();
+ auto *p = item(index)->data(Qt::UserRole).value<Project *>();
SessionManager::setStartupProject(p);
}
@@ -415,7 +415,7 @@ void GenericListWidget::setProjectConfigurations(const QList<ProjectConfiguratio
clear();
for (int i = 0; i < count(); ++i) {
- ProjectConfiguration *p = item(i)->data(Qt::UserRole).value<ProjectConfiguration *>();
+ auto *p = item(i)->data(Qt::UserRole).value<ProjectConfiguration *>();
disconnect(p, &ProjectConfiguration::displayNameChanged,
this, &GenericListWidget::displayNameChanged);
}
@@ -450,7 +450,7 @@ void GenericListWidget::addProjectConfiguration(ProjectConfiguration *pc)
// Figure out pos
int pos = count();
for (int i = 0; i < count(); ++i) {
- ProjectConfiguration *p = item(i)->data(Qt::UserRole).value<ProjectConfiguration *>();
+ auto *p = item(i)->data(Qt::UserRole).value<ProjectConfiguration *>();
if (caseFriendlyCompare(pc->displayName(), p->displayName()) < 0) {
pos = i;
break;
@@ -480,7 +480,7 @@ void GenericListWidget::removeProjectConfiguration(ProjectConfiguration *pc)
QFontMetrics fn(font());
int width = 0;
for (int i = 0; i < count(); ++i) {
- ProjectConfiguration *p = item(i)->data(Qt::UserRole).value<ProjectConfiguration *>();
+ auto *p = item(i)->data(Qt::UserRole).value<ProjectConfiguration *>();
width = qMax(width, fn.width(p->displayName()) + padding());
}
setOptimalWidth(width);
@@ -504,7 +504,7 @@ void GenericListWidget::displayNameChanged()
if (currentItem())
activeProjectConfiguration = currentItem()->data(Qt::UserRole).value<ProjectConfiguration *>();
- ProjectConfiguration *pc = qobject_cast<ProjectConfiguration *>(sender());
+ auto *pc = qobject_cast<ProjectConfiguration *>(sender());
int index = -1;
int i = 0;
for (; i < count(); ++i) {
@@ -520,7 +520,7 @@ void GenericListWidget::displayNameChanged()
lwi->setText(pc->displayName());
int pos = count();
for (int i = 0; i < count(); ++i) {
- ProjectConfiguration *p = item(i)->data(Qt::UserRole).value<ProjectConfiguration *>();
+ auto *p = item(i)->data(Qt::UserRole).value<ProjectConfiguration *>();
if (caseFriendlyCompare(pc->displayName(), p->displayName()) < 0) {
pos = i;
break;
@@ -533,7 +533,7 @@ void GenericListWidget::displayNameChanged()
QFontMetrics fn(font());
int width = 0;
for (int i = 0; i < count(); ++i) {
- ProjectConfiguration *p = item(i)->data(Qt::UserRole).value<ProjectConfiguration *>();
+ auto *p = item(i)->data(Qt::UserRole).value<ProjectConfiguration *>();
width = qMax(width, fn.width(p->displayName()) + padding());
}
setOptimalWidth(width);
@@ -543,7 +543,7 @@ void GenericListWidget::displayNameChanged()
void GenericListWidget::toolTipChanged()
{
- ProjectConfiguration *pc = qobject_cast<ProjectConfiguration *>(sender());
+ auto *pc = qobject_cast<ProjectConfiguration *>(sender());
if (QListWidgetItem *lwi = itemForProjectConfiguration(pc)) {
lwi->setData(Qt::ToolTipRole, pc->toolTip());
lwi->setData(Qt::UserRole + 1, pc->toolTip());
@@ -646,9 +646,9 @@ void KitAreaWidget::updateKit(Kit *k)
QWidget *MiniProjectTargetSelector::createTitleLabel(const QString &text)
{
- StyledBar *bar = new StyledBar(this);
+ auto *bar = new StyledBar(this);
bar->setSingleRow(true);
- QVBoxLayout *toolLayout = new QVBoxLayout(bar);
+ auto *toolLayout = new QVBoxLayout(bar);
toolLayout->setContentsMargins(6, 0, 6, 0);
toolLayout->setSpacing(0);
@@ -864,7 +864,7 @@ void MiniProjectTargetSelector::doLayout(bool keepSize)
// if there's a configured project in the seesion
// that could be improved
static QStatusBar *statusBar = Core::ICore::statusBar();
- static QWidget *actionBar = Core::ICore::mainWindow()->findChild<QWidget*>(QLatin1String("actionbar"));
+ static auto *actionBar = Core::ICore::mainWindow()->findChild<QWidget*>(QLatin1String("actionbar"));
Q_ASSERT(actionBar);
m_kitAreaWidget->move(0, 0);
@@ -1407,7 +1407,7 @@ void MiniProjectTargetSelector::nextOrShow()
} else {
m_hideOnRelease = true;
m_earliestHidetime = QDateTime::currentDateTime().addMSecs(800);
- if (ListWidget *lw = qobject_cast<ListWidget *>(focusWidget())) {
+ if (auto *lw = qobject_cast<ListWidget *>(focusWidget())) {
if (lw->currentRow() < lw->count() -1)
lw->setCurrentRow(lw->currentRow() + 1);
else
diff --git a/src/plugins/projectexplorer/msvctoolchain.cpp b/src/plugins/projectexplorer/msvctoolchain.cpp
index 8ed356a324..9a68a59689 100644
--- a/src/plugins/projectexplorer/msvctoolchain.cpp
+++ b/src/plugins/projectexplorer/msvctoolchain.cpp
@@ -31,6 +31,8 @@
#include "taskhub.h"
#include "toolchainmanager.h"
+#include <coreplugin/icore.h>
+
#include <utils/algorithm.h>
#include <utils/hostosinfo.h>
#include <utils/optional.h>
@@ -38,6 +40,7 @@
#include <utils/synchronousprocess.h>
#include <utils/runextensions.h>
#include <utils/temporarydirectory.h>
+#include <utils/pathchooser.h>
#include <utils/winutils.h>
#include <QDir>
@@ -96,6 +99,8 @@ const MsvcPlatform platforms[] =
{MsvcToolChain::amd64_x86, "amd64_x86", "/bin/amd64_x86", "vcvarsamd64_x86.bat"}
};
+static QList<const MsvcToolChain *> g_availableMsvcToolchains;
+
static const MsvcPlatform *platformEntry(MsvcToolChain::Platform t)
{
for (const MsvcPlatform &p : platforms) {
@@ -397,10 +402,10 @@ static QByteArray msvcCompilationFile()
"_WIN64",
"_WINRT_DLL",
"_Wp64",
- 0
+ nullptr
};
QByteArray file = "#define __PPOUT__(x) V##x=x\n\n";
- for (int i = 0; macros[i] != 0; ++i)
+ for (int i = 0; macros[i] != nullptr; ++i)
file += msvcCompilationDefine(macros[i]);
file += "\nvoid main(){}\n\n";
return file;
@@ -747,7 +752,7 @@ bool MsvcToolChain::fromMap(const QVariantMap &data)
m_vcvarsBat = QDir::fromNativeSeparators(data.value(QLatin1String(varsBatKeyC)).toString());
m_varsBatArg = data.value(QLatin1String(varsBatArgKeyC)).toString();
const QString abiString = data.value(QLatin1String(supportedAbiKeyC)).toString();
- m_abi = Abi(abiString);
+ m_abi = Abi::fromString(abiString);
m_environmentModifications = Utils::EnvironmentItem::itemsFromVariantList(
data.value(QLatin1String(environModsKeyC)).toList());
@@ -788,7 +793,7 @@ MsvcBasedToolChainConfigWidget::MsvcBasedToolChainConfigWidget(ToolChain *tc) :
void MsvcBasedToolChainConfigWidget::setFromMsvcToolChain()
{
- const MsvcToolChain *tc = static_cast<const MsvcToolChain *>(toolChain());
+ const auto *tc = static_cast<const MsvcToolChain *>(toolChain());
QTC_ASSERT(tc, return);
m_nameDisplayLabel->setText(tc->displayName());
QString varsBatDisplay = QDir::toNativeSeparators(tc->varsBat());
@@ -816,57 +821,188 @@ MsvcToolChainConfigWidget::MsvcToolChainConfigWidget(ToolChain *tc) :
ClangClToolChainConfigWidget::ClangClToolChainConfigWidget(ToolChain *tc)
: MsvcBasedToolChainConfigWidget(tc)
- , m_llvmDirLabel(new QLabel(this))
{
- m_llvmDirLabel->setTextInteractionFlags(Qt::TextBrowserInteraction);
- m_mainLayout->addRow(tr("LLVM:"), m_llvmDirLabel);
+ if (tc->isAutoDetected()) {
+ m_llvmDirLabel = new QLabel(this);
+ m_llvmDirLabel->setTextInteractionFlags(Qt::TextBrowserInteraction);
+ m_mainLayout->addRow(tr("&Compiler path:"), m_llvmDirLabel);
+ } else {
+ const QStringList gnuVersionArgs = QStringList("--version");
+ m_compilerCommand = new Utils::PathChooser(this);
+ m_compilerCommand->setExpectedKind(Utils::PathChooser::ExistingCommand);
+ m_compilerCommand->setCommandVersionArguments(gnuVersionArgs);
+ m_compilerCommand->setHistoryCompleter("PE.Clang.Command.History");
+ m_mainLayout->addRow(tr("&Compiler path:"), m_compilerCommand);
+ }
addErrorLabel();
setFromClangClToolChain();
+
+ if (m_compilerCommand) {
+ connect(m_compilerCommand, &Utils::PathChooser::rawPathChanged,
+ this, &ClangClToolChainConfigWidget::dirty);
+ }
}
void ClangClToolChainConfigWidget::setFromClangClToolChain()
{
setFromMsvcToolChain();
- const ClangClToolChain *tc = static_cast<const ClangClToolChain *>(toolChain());
- QTC_ASSERT(tc, return);
- m_llvmDirLabel->setText(QDir::toNativeSeparators(tc-> llvmDir()));
+ const auto *clangClToolChain = static_cast<const ClangClToolChain *>(toolChain());
+ if (clangClToolChain->isAutoDetected())
+ m_llvmDirLabel->setText(QDir::toNativeSeparators(clangClToolChain->clangPath()));
+ else
+ m_compilerCommand->setFileName(Utils::FileName::fromString(clangClToolChain->clangPath()));
}
-// --------------------------------------------------------------------------
-// ClangClToolChain, piggy-backing on MSVC2015 and providing the compiler
-// clang-cl.exe as a [to some extent] compatible drop-in replacement for cl.
-// --------------------------------------------------------------------------
+static const MsvcToolChain *findMsvcToolChain(unsigned char wordWidth, Abi::OSFlavor flavor)
+{
+ return Utils::findOrDefault(g_availableMsvcToolchains,
+ [wordWidth, flavor] (const MsvcToolChain *tc)
+ { const Abi abi = tc->targetAbi();
+ return abi.osFlavor() == flavor
+ && wordWidth == abi.wordWidth();} );
+}
+
+static QVersionNumber clangClVersion(const QString& clangClPath)
+{
+ Utils::SynchronousProcess clangClProcess;
+ const Utils::SynchronousProcessResponse response = clangClProcess.runBlocking(
+ clangClPath, {QStringLiteral("--version")});
+ if (response.result != Utils::SynchronousProcessResponse::Finished || response.exitCode != 0)
+ return {};
+ const QRegularExpressionMatch match = QRegularExpression(
+ QStringLiteral("clang version (\\d+(\\.\\d+)+)")).match(response.stdOut());
+ if (!match.hasMatch())
+ return {};
+ return QVersionNumber::fromString(match.captured(1));
+}
+
+static const MsvcToolChain *selectMsvcToolChain(const QString &clangClPath,
+ unsigned char wordWidth)
+{
+ const MsvcToolChain *toolChain = nullptr;
+ const QVersionNumber version = clangClVersion(clangClPath);
+ if (version.majorVersion() >= 6)
+ toolChain = findMsvcToolChain(wordWidth, Abi::WindowsMsvc2017Flavor);
+ if (!toolChain) {
+ toolChain = findMsvcToolChain(wordWidth, Abi::WindowsMsvc2015Flavor);
+ if (!toolChain)
+ toolChain = findMsvcToolChain(wordWidth, Abi::WindowsMsvc2013Flavor);
+ }
+ return toolChain;
+}
+
+static QList<ToolChain *> detectClangClToolChainInPath(
+ const QString &clangClPath, const QList<ToolChain *> &alreadyKnown, bool isDefault = false)
+{
+ QList<ToolChain *> res;
+ const unsigned char wordWidth = Utils::is64BitWindowsBinary(clangClPath) ? 64 : 32;
+ const MsvcToolChain *toolChain = selectMsvcToolChain(clangClPath, wordWidth);
+
+ if (!toolChain) {
+ qWarning("Unable to find a suitable MSVC version for \"%s\".",
+ qPrintable(QDir::toNativeSeparators(clangClPath)));
+ return res;
+ }
+
+ Utils::Environment systemEnvironment = Utils::Environment::systemEnvironment();
+ const Abi targetAbi = toolChain->targetAbi();
+ const QString name = QString("%1LLVM %2 bit based on %3")
+ .arg(QLatin1String(isDefault ? "Default " : ""))
+ .arg(wordWidth)
+ .arg(Abi::toString(targetAbi.osFlavor()).toUpper());
+ for (auto language: {Constants::C_LANGUAGE_ID, Constants::CXX_LANGUAGE_ID}) {
+ ClangClToolChain *tc = static_cast<ClangClToolChain *>(
+ Utils::findOrDefault(
+ alreadyKnown,
+ [&targetAbi, &language, &clangClPath, &systemEnvironment](ToolChain *tc) -> bool {
+ if (tc->typeId() != Constants::CLANG_CL_TOOLCHAIN_TYPEID)
+ return false;
+ if (tc->targetAbi() != targetAbi)
+ return false;
+ if (tc->language() != language)
+ return false;
+ return systemEnvironment.isSameExecutable(tc->compilerCommand().toString(), clangClPath);
+ }));
+ if (!tc) {
+ tc = new ClangClToolChain(name, clangClPath, language, ToolChain::AutoDetection);
+ tc->resetMsvcToolChain(toolChain);
+ }
+ res << tc;
+ }
+ return res;
+}
static QString compilerFromPath(const QString &path)
{
return path + "/bin/clang-cl.exe";
}
-ClangClToolChain::ClangClToolChain(const QString &name, const QString &llvmDir,
- const Abi &abi,
- const QString &varsBat, const QString &varsBatArg, Core::Id language,
+void ClangClToolChainConfigWidget::applyImpl()
+{
+ Utils::FileName clangClPath = m_compilerCommand->fileName();
+ auto clangClToolChain = static_cast<ClangClToolChain *>(toolChain());
+ clangClToolChain->setClangPath(clangClPath.toString());
+
+ if (clangClPath.fileName() != "clang-cl.exe") {
+ clangClToolChain->resetMsvcToolChain();
+ setFromClangClToolChain();
+ return;
+ }
+
+ QList<ToolChain *> results = detectClangClToolChainInPath(clangClPath.toString(), {});
+
+ if (results.isEmpty()) {
+ clangClToolChain->resetMsvcToolChain();
+ } else {
+ for (const ToolChain *toolchain : results) {
+ if (toolchain->language() == clangClToolChain->language()) {
+ clangClToolChain->resetMsvcToolChain(static_cast<const MsvcToolChain *>(toolchain));
+ break;
+ }
+ }
+
+ qDeleteAll(results);
+ }
+ setFromClangClToolChain();
+}
+
+void ClangClToolChainConfigWidget::discardImpl()
+{
+ setFromClangClToolChain();
+}
+
+// --------------------------------------------------------------------------
+// ClangClToolChain, piggy-backing on MSVC2015 and providing the compiler
+// clang-cl.exe as a [to some extent] compatible drop-in replacement for cl.
+// --------------------------------------------------------------------------
+
+ClangClToolChain::ClangClToolChain(const QString &name, const QString &clangPath,
+ Core::Id language,
Detection d)
- : MsvcToolChain(Constants::CLANG_CL_TOOLCHAIN_TYPEID, name, abi, varsBat, varsBatArg, language, d)
- , m_llvmDir(llvmDir)
-{ }
+ : MsvcToolChain(Constants::CLANG_CL_TOOLCHAIN_TYPEID, name, Abi(), "", "", language, d)
+ , m_clangPath(clangPath)
+{
+}
ClangClToolChain::ClangClToolChain() : MsvcToolChain(Constants::CLANG_CL_TOOLCHAIN_TYPEID)
{ }
bool ClangClToolChain::isValid() const
{
- return MsvcToolChain::isValid() && compilerCommand().exists();
+ return MsvcToolChain::isValid() && compilerCommand().exists()
+ && compilerCommand().fileName() == "clang-cl.exe";
}
void ClangClToolChain::addToEnvironment(Utils::Environment &env) const
{
MsvcToolChain::addToEnvironment(env);
- env.prependOrSetPath(m_llvmDir + QStringLiteral("/bin"));
+ QDir path = QFileInfo(m_clangPath).absoluteDir(); // bin folder
+ env.prependOrSetPath(path.canonicalPath());
}
Utils::FileName ClangClToolChain::compilerCommand() const
{
- return Utils::FileName::fromString(compilerFromPath(m_llvmDir));
+ return Utils::FileName::fromString(m_clangPath);
}
QString ClangClToolChain::typeDisplayName() const
@@ -896,7 +1032,7 @@ static inline QString llvmDirKey() { return QStringLiteral("ProjectExplorer.Clan
QVariantMap ClangClToolChain::toMap() const
{
QVariantMap result = MsvcToolChain::toMap();
- result.insert(llvmDirKey(), m_llvmDir);
+ result.insert(llvmDirKey(), m_clangPath);
return result;
}
@@ -904,10 +1040,11 @@ bool ClangClToolChain::fromMap(const QVariantMap &data)
{
if (!MsvcToolChain::fromMap(data))
return false;
- const QString llvmDir = data.value(llvmDirKey()).toString();
- if (llvmDir.isEmpty())
+ const QString clangPath = data.value(llvmDirKey()).toString();
+ if (clangPath.isEmpty())
return false;
- m_llvmDir = llvmDir;
+ m_clangPath = clangPath;
+
return true;
}
@@ -916,6 +1053,28 @@ ToolChainConfigWidget *ClangClToolChain::configurationWidget()
return new ClangClToolChainConfigWidget(this);
}
+void ClangClToolChain::resetMsvcToolChain(const MsvcToolChain *base)
+{
+ if (!base) {
+ m_abi = Abi();
+ m_vcvarsBat.clear();
+ setVarsBatArg("");
+ return;
+ }
+ m_abi = base->targetAbi();
+ m_vcvarsBat = base->varsBat();
+ setVarsBatArg(base->varsBatArg());
+}
+
+bool ClangClToolChain::operator ==(const ToolChain &other) const
+{
+ if (!MsvcToolChain::operator ==(other))
+ return false;
+
+ const auto *clangClTc = static_cast<const ClangClToolChain *>(&other);
+ return m_clangPath == clangClTc->m_clangPath;
+}
+
// --------------------------------------------------------------------------
// MsvcToolChainFactory
// --------------------------------------------------------------------------
@@ -1009,96 +1168,6 @@ static void detectCppBuildTools2015(QList<ToolChain *> *list)
}
}
-static ToolChain *findMsvcToolChain(const QList<ToolChain *> &list,
- unsigned char wordWidth, Abi::OSFlavor flavor)
-{
- return Utils::findOrDefault(list, [wordWidth, flavor] (const ToolChain *tc)
- { const Abi abi = tc->targetAbi();
- return abi.osFlavor() == flavor
- && wordWidth == abi.wordWidth();} );
-}
-
-static QVersionNumber clangClVersion(const QString& clangClPath)
-{
- Utils::SynchronousProcess clangClProcess;
- const Utils::SynchronousProcessResponse response = clangClProcess.runBlocking(
- clangClPath, {QStringLiteral("--version")});
- if (response.result != Utils::SynchronousProcessResponse::Finished || response.exitCode != 0)
- return {};
- const QRegularExpressionMatch match = QRegularExpression(
- QStringLiteral("clang version (\\d+(\\.\\d+)+)")).match(response.stdOut());
- if (!match.hasMatch())
- return {};
- return QVersionNumber::fromString(match.captured(1));
-}
-
-static const ToolChain *selectMsvcToolChain(const QString &clangClPath,
- const QList<ToolChain *> &list,
- unsigned char wordWidth)
-{
- const ToolChain *toolChain = nullptr;
- const QVersionNumber version = clangClVersion(clangClPath);
- if (version.majorVersion() >= 6)
- toolChain = findMsvcToolChain(list, wordWidth, Abi::WindowsMsvc2017Flavor);
- if (!toolChain) {
- toolChain = findMsvcToolChain(list, wordWidth, Abi::WindowsMsvc2015Flavor);
- if (!toolChain)
- toolChain = findMsvcToolChain(list, wordWidth, Abi::WindowsMsvc2013Flavor);
- }
- return toolChain;
-}
-
-static void detectClangClToolChainInPath(const QString &clangClPath, QList<ToolChain *> *list)
-{
- const unsigned char wordWidth = Utils::is64BitWindowsBinary(clangClPath) ? 64 : 32;
- const ToolChain *toolChain = selectMsvcToolChain(clangClPath, *list, wordWidth);
-
- QDir path = QFileInfo(clangClPath).absoluteDir(); // bin folder
- path.cdUp(); // cd to LLVM root
- const QString rootPath = path.canonicalPath();
-
- if (!toolChain) {
- qWarning("Unable to find a suitable MSVC version for \"%s\".",
- qPrintable(QDir::toNativeSeparators(rootPath)));
- return;
- }
- const MsvcToolChain *msvcToolChain = static_cast<const MsvcToolChain *>(toolChain);
- const Abi targetAbi = msvcToolChain->targetAbi();
- const QString name = QStringLiteral("LLVM ") + QString::number(wordWidth)
- + QStringLiteral("bit based on ")
- + Abi::toString(targetAbi.osFlavor()).toUpper();
- for (auto language: {Constants::C_LANGUAGE_ID, Constants::CXX_LANGUAGE_ID}) {
- list->append(new ClangClToolChain(name, rootPath, targetAbi,
- msvcToolChain->varsBat(), msvcToolChain->varsBatArg(),
- language, ToolChain::AutoDetection));
- }
-}
-
-// Detect Clang-cl on top of MSVC2017, MSVC2015 or MSVC2013.
-static void detectClangClToolChain(QList<ToolChain *> *list)
-{
-#ifdef Q_OS_WIN64
- const char registryNode[] = "HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\LLVM\\LLVM";
-#else
- const char registryNode[] = "HKEY_LOCAL_MACHINE\\SOFTWARE\\LLVM\\LLVM";
-#endif
-
- const QSettings registry(QLatin1String(registryNode), QSettings::NativeFormat);
- if (registry.status() == QSettings::NoError) {
- const QString path = QDir::cleanPath(registry.value(QStringLiteral(".")).toString());
- const QString clangClPath = compilerFromPath(path);
- if (!path.isEmpty()) {
- detectClangClToolChainInPath(path, list);
- return;
- }
- }
-
- const Utils::Environment systemEnvironment = Utils::Environment::systemEnvironment();
- const Utils::FileName clangClPath = systemEnvironment.searchInPath("clang-cl");
- if (!clangClPath.isEmpty())
- detectClangClToolChainInPath(clangClPath.toString(), list);
-}
-
QList<ToolChain *> MsvcToolChainFactory::autoDetect(const QList<ToolChain *> &alreadyKnown)
{
QList<ToolChain *> results;
@@ -1171,23 +1240,78 @@ QList<ToolChain *> MsvcToolChainFactory::autoDetect(const QList<ToolChain *> &al
detectCppBuildTools2015(&results);
- detectClangClToolChain(&results);
+ for (const ToolChain *toolchain : results)
+ g_availableMsvcToolchains.append(static_cast<const MsvcToolChain *>(toolchain));
+
+ return results;
+}
+
+ClangClToolChainFactory::ClangClToolChainFactory()
+{
+ setDisplayName(tr("clang-cl"));
+}
+
+bool ClangClToolChainFactory::canCreate()
+{
+ return !g_availableMsvcToolchains.isEmpty();
+}
+
+QList<ToolChain *> ClangClToolChainFactory::autoDetect(const QList<ToolChain *> &alreadyKnown)
+{
+ Q_UNUSED(alreadyKnown)
+
+#ifdef Q_OS_WIN64
+ const char registryNode[] = "HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\LLVM\\LLVM";
+#else
+ const char registryNode[] = "HKEY_LOCAL_MACHINE\\SOFTWARE\\LLVM\\LLVM";
+#endif
+
+ QList<ToolChain *> results;
+ QList<ToolChain *> known = alreadyKnown;
+
+ QString qtCreatorsClang = Core::ICore::clangExecutable(CLANG_BINDIR);
+ if (!qtCreatorsClang.isEmpty()) {
+ qtCreatorsClang = Utils::FileName::fromString(qtCreatorsClang).parentDir()
+ .appendPath("clang-cl.exe").toString();
+ results.append(detectClangClToolChainInPath(qtCreatorsClang, alreadyKnown, true));
+ known.append(results);
+ }
+
+ const QSettings registry(QLatin1String(registryNode), QSettings::NativeFormat);
+ if (registry.status() == QSettings::NoError) {
+ const QString path = QDir::cleanPath(registry.value(QStringLiteral(".")).toString());
+ const QString clangClPath = compilerFromPath(path);
+ if (!path.isEmpty()) {
+ results.append(detectClangClToolChainInPath(clangClPath, known));
+ known.append(results);
+ }
+ }
+
+ const Utils::Environment systemEnvironment = Utils::Environment::systemEnvironment();
+ const Utils::FileName clangClPath = systemEnvironment.searchInPath("clang-cl");
+ if (!clangClPath.isEmpty())
+ results.append(detectClangClToolChainInPath(clangClPath.toString(), known));
return results;
}
+ToolChain *ClangClToolChainFactory::create(Core::Id l)
+{
+ return new ClangClToolChain("clang-cl", "", l, ToolChain::ManualDetection);
+}
+
bool MsvcToolChain::operator ==(const ToolChain &other) const
{
if (!AbstractMsvcToolChain::operator ==(other))
return false;
- const MsvcToolChain *msvcTc = static_cast<const MsvcToolChain *>(&other);
+ const auto *msvcTc = static_cast<const MsvcToolChain *>(&other);
return m_varsBatArg == msvcTc->m_varsBatArg;
}
bool MsvcToolChainFactory::canRestore(const QVariantMap &data)
{
const Core::Id id = typeIdFromMap(data);
- return id == Constants::MSVC_TOOLCHAIN_TYPEID || id == Constants::CLANG_CL_TOOLCHAIN_TYPEID;
+ return id == Constants::MSVC_TOOLCHAIN_TYPEID;
}
template <class ToolChainType>
@@ -1202,11 +1326,19 @@ ToolChainType *readFromMap(const QVariantMap &data)
ToolChain *MsvcToolChainFactory::restore(const QVariantMap &data)
{
- const Core::Id id = typeIdFromMap(data);
- if (id == Constants::CLANG_CL_TOOLCHAIN_TYPEID)
- return readFromMap<ClangClToolChain>(data);
return readFromMap<MsvcToolChain>(data);
}
+bool ClangClToolChainFactory::canRestore(const QVariantMap &data)
+{
+ const Core::Id id = typeIdFromMap(data);
+ return id == Constants::CLANG_CL_TOOLCHAIN_TYPEID;
+}
+
+ToolChain *ClangClToolChainFactory::restore(const QVariantMap &data)
+{
+ return readFromMap<ClangClToolChain>(data);
+}
+
} // namespace Internal
} // namespace ProjectExplorer
diff --git a/src/plugins/projectexplorer/msvctoolchain.h b/src/plugins/projectexplorer/msvctoolchain.h
index 8cd39af2dc..8510cece09 100644
--- a/src/plugins/projectexplorer/msvctoolchain.h
+++ b/src/plugins/projectexplorer/msvctoolchain.h
@@ -36,6 +36,8 @@
QT_FORWARD_DECLARE_CLASS(QLabel)
QT_FORWARD_DECLARE_CLASS(QVersionNumber)
+namespace Utils { class PathChooser; }
+
namespace ProjectExplorer {
namespace Internal {
@@ -76,6 +78,7 @@ public:
ToolChain *clone() const override;
QString varsBatArg() const { return m_varsBatArg; }
+ void setVarsBatArg(const QString &varsBA) { m_varsBatArg = varsBA; }
bool operator == (const ToolChain &) const override;
@@ -110,11 +113,9 @@ private:
class ClangClToolChain : public MsvcToolChain
{
public:
- explicit ClangClToolChain(const QString &name, const QString &llvmDir,
- const Abi &abi,
- const QString &varsBat, const QString &varsBatArg,
- Core::Id language,
- Detection d = ManualDetection);
+ ClangClToolChain(const QString &name, const QString &llvmDir,
+ Core::Id language,
+ Detection d);
ClangClToolChain();
bool isValid() const override;
@@ -128,10 +129,15 @@ public:
bool fromMap(const QVariantMap &data) override;
ToolChainConfigWidget *configurationWidget() override;
- QString llvmDir() const { return m_llvmDir; }
+ const QList<MsvcToolChain *> &msvcToolchains() const;
+ QString clangPath() const { return m_clangPath; }
+ void setClangPath(const QString &path) { m_clangPath = path; }
+
+ void resetMsvcToolChain(const MsvcToolChain *base = nullptr);
+ bool operator ==(const ToolChain &) const override;
private:
- QString m_llvmDir;
+ QString m_clangPath;
};
// --------------------------------------------------------------------------
@@ -151,11 +157,27 @@ public:
bool canRestore(const QVariantMap &data) override;
ToolChain *restore(const QVariantMap &data) override;
- ToolChainConfigWidget *configurationWidget(ToolChain *);
static QString vcVarsBatFor(const QString &basePath, MsvcToolChain::Platform platform,
const QVersionNumber &v);
};
+class ClangClToolChainFactory : public MsvcToolChainFactory
+{
+ Q_OBJECT
+
+public:
+ ClangClToolChainFactory();
+
+ QList<ToolChain *> autoDetect(const QList<ToolChain *> &alreadyKnown) override;
+
+ bool canRestore(const QVariantMap &data) override;
+ ToolChain *restore(const QVariantMap &data) override;
+
+ bool canCreate() override;
+ ToolChain *create(Core::Id l) override;
+};
+
+
// --------------------------------------------------------------------------
// MsvcBasedToolChainConfigWidget
// --------------------------------------------------------------------------
@@ -204,12 +226,14 @@ public:
explicit ClangClToolChainConfigWidget(ToolChain *);
protected:
- void discardImpl() override { setFromClangClToolChain(); }
+ void applyImpl() override;
+ void discardImpl() override;
private:
void setFromClangClToolChain();
- QLabel *m_llvmDirLabel;
+ QLabel *m_llvmDirLabel = nullptr;
+ Utils::PathChooser *m_compilerCommand = nullptr;
};
} // namespace Internal
diff --git a/src/plugins/projectexplorer/outputparser_test.cpp b/src/plugins/projectexplorer/outputparser_test.cpp
index 4b84a080a9..cb2a9772c3 100644
--- a/src/plugins/projectexplorer/outputparser_test.cpp
+++ b/src/plugins/projectexplorer/outputparser_test.cpp
@@ -34,14 +34,11 @@ namespace ProjectExplorer {
static inline QByteArray msgFileComparisonFail(const Utils::FileName &f1, const Utils::FileName &f2)
{
- const QString result = QLatin1Char('"') + f1.toUserOutput()
- + QLatin1String("\" != \"") + f2.toUserOutput() + QLatin1Char('"');
+ const QString result = '"' + f1.toUserOutput() + "\" != \"" + f2.toUserOutput() + '"';
return result.toLocal8Bit();
}
-OutputParserTester::OutputParserTester() :
- m_debug(false)
-{ }
+OutputParserTester::OutputParserTester() = default;
// test functions:
void OutputParserTester::testParsing(const QString &lines,
@@ -54,28 +51,28 @@ void OutputParserTester::testParsing(const QString &lines,
reset();
Q_ASSERT(childParser());
- QStringList inputLines = lines.split(QLatin1Char('\n'));
- foreach (const QString &input, inputLines) {
+ const QStringList inputLines = lines.split('\n');
+ for (const QString &input : inputLines) {
if (inputChannel == STDOUT)
- childParser()->stdOutput(input + QLatin1Char('\n'));
+ childParser()->stdOutput(input + '\n');
else
- childParser()->stdError(input + QLatin1Char('\n'));
+ childParser()->stdError(input + '\n');
}
childParser()->flush();
// first disconnect ourselves from the end of the parser chain again
- IOutputParser * parser = this;
+ IOutputParser *parser = this;
while ( (parser = parser->childParser()) ) {
if (parser->childParser() == this) {
childParser()->takeOutputParserChain();
break;
}
}
- parser = 0;
+ parser = nullptr;
emit aboutToDeleteParser();
// then delete the parser(s) to test
- setChildParser(0);
+ setChildParser(nullptr);
QCOMPARE(m_receivedOutput, outputLines);
QCOMPARE(m_receivedStdErrChildLine, childStdErrLines);
@@ -142,7 +139,7 @@ void OutputParserTester::outputAdded(const QString &line, BuildStep::OutputForma
{
Q_UNUSED(format);
if (!m_receivedOutput.isEmpty())
- m_receivedOutput.append(QLatin1Char('\n'));
+ m_receivedOutput.append('\n');
m_receivedOutput.append(line);
}
@@ -167,13 +164,13 @@ TestTerminator::TestTerminator(OutputParserTester *t) :
void TestTerminator::stdOutput(const QString &line)
{
- QVERIFY(line.endsWith(QLatin1Char('\n')));
+ QVERIFY(line.endsWith('\n'));
m_tester->m_receivedStdOutChildLine.append(line);
}
void TestTerminator::stdError(const QString &line)
{
- QVERIFY(line.endsWith(QLatin1Char('\n')));
+ QVERIFY(line.endsWith('\n'));
m_tester->m_receivedStdErrChildLine.append(line);
}
diff --git a/src/plugins/projectexplorer/outputparser_test.h b/src/plugins/projectexplorer/outputparser_test.h
index f071da6bb3..7836331632 100644
--- a/src/plugins/projectexplorer/outputparser_test.h
+++ b/src/plugins/projectexplorer/outputparser_test.h
@@ -72,7 +72,7 @@ private:
void reset();
- bool m_debug;
+ bool m_debug = false;
QString m_receivedStdErrChildLine;
QString m_receivedStdOutChildLine;
@@ -93,7 +93,7 @@ public:
void stdError(const QString &line) override;
private:
- OutputParserTester *m_tester;
+ OutputParserTester *m_tester = nullptr;
};
} // namespace ProjectExplorer
diff --git a/src/plugins/projectexplorer/panelswidget.cpp b/src/plugins/projectexplorer/panelswidget.cpp
index 2ba2e5c583..882f4d0f44 100644
--- a/src/plugins/projectexplorer/panelswidget.cpp
+++ b/src/plugins/projectexplorer/panelswidget.cpp
@@ -62,7 +62,7 @@ public:
setMinimumHeight(1);
setMaximumHeight(1);
}
- void paintEvent(QPaintEvent *e)
+ void paintEvent(QPaintEvent *e) override
{
Q_UNUSED(e);
QPainter p(this);
@@ -77,7 +77,7 @@ public:
RootWidget(QWidget *parent) : QWidget(parent) {
setFocusPolicy(Qt::NoFocus);
}
- void paintEvent(QPaintEvent *);
+ void paintEvent(QPaintEvent *) override;
};
void RootWidget::paintEvent(QPaintEvent *e)
@@ -153,9 +153,7 @@ PanelsWidget::PanelsWidget(const QString &displayName, const QIcon &icon, QWidge
addPropertiesPanel(displayName, icon, widget);
}
-PanelsWidget::~PanelsWidget()
-{
-}
+PanelsWidget::~PanelsWidget() = default;
/*
* Add a widget with heading information into the grid
diff --git a/src/plugins/projectexplorer/processstep.cpp b/src/plugins/projectexplorer/processstep.cpp
index 82805fa3ee..81e463eb10 100644
--- a/src/plugins/projectexplorer/processstep.cpp
+++ b/src/plugins/projectexplorer/processstep.cpp
@@ -58,8 +58,6 @@ ProcessStep::ProcessStep(BuildStepList *bsl)
bool ProcessStep::init(QList<const BuildStep *> &earlierSteps)
{
BuildConfiguration *bc = buildConfiguration();
- if (!bc)
- bc = target()->activeBuildConfiguration();
ProcessParameters *pp = processParameters();
pp->setMacroExpander(bc ? bc->macroExpander() : Utils::globalMacroExpander());
pp->setEnvironment(bc ? bc->environment() : Utils::Environment::systemEnvironment());
@@ -115,7 +113,7 @@ void ProcessStep::setArguments(const QString &arguments)
void ProcessStep::setWorkingDirectory(const QString &workingDirectory)
{
if (workingDirectory.isEmpty())
- if (target()->activeBuildConfiguration())
+ if (buildConfiguration())
m_workingDirectory = Constants::DEFAULT_WORKING_DIR;
else
m_workingDirectory = Constants::DEFAULT_WORKING_DIR_ALTERNATE;
@@ -163,8 +161,6 @@ ProcessStepConfigWidget::ProcessStepConfigWidget(ProcessStep *step) :
m_ui.workingDirectory->setExpectedKind(Utils::PathChooser::Directory);
BuildConfiguration *bc = m_step->buildConfiguration();
- if (!bc)
- bc = m_step->target()->activeBuildConfiguration();
Utils::Environment env = bc ? bc->environment() : Utils::Environment::systemEnvironment();
m_ui.command->setEnvironment(env);
m_ui.command->setPath(m_step->command());
@@ -193,8 +189,6 @@ void ProcessStepConfigWidget::updateDetails()
displayName = tr("Custom Process Step");
ProcessParameters param;
BuildConfiguration *bc = m_step->buildConfiguration();
- if (!bc) // iff the step is actually in the deploy list
- bc = m_step->target()->activeBuildConfiguration();
param.setMacroExpander(bc ? bc->macroExpander() : Utils::globalMacroExpander());
param.setEnvironment(bc ? bc->environment() : Utils::Environment::systemEnvironment());
diff --git a/src/plugins/projectexplorer/processstep.h b/src/plugins/projectexplorer/processstep.h
index 7da9f4ec09..4b61b2f51a 100644
--- a/src/plugins/projectexplorer/processstep.h
+++ b/src/plugins/projectexplorer/processstep.h
@@ -33,8 +33,6 @@ namespace Internal {
class ProcessStepFactory : public BuildStepFactory
{
- Q_OBJECT
-
public:
ProcessStepFactory();
};
diff --git a/src/plugins/projectexplorer/project.cpp b/src/plugins/projectexplorer/project.cpp
index 9c25e8d3b5..43188661df 100644
--- a/src/plugins/projectexplorer/project.cpp
+++ b/src/plugins/projectexplorer/project.cpp
@@ -47,7 +47,7 @@
#include <projectexplorer/kitmanager.h>
#include <projectexplorer/projecttree.h>
-#include <utils/algorithm.h>
+#include <utils/pointeralgorithm.h>
#include <utils/macroexpander.h>
#include <utils/qtcassert.h>
@@ -163,7 +163,7 @@ public:
std::unique_ptr<Core::IDocument> m_document;
std::unique_ptr<ProjectNode> m_rootProjectNode;
std::unique_ptr<ContainerNode> m_containerNode;
- QList<Target *> m_targets;
+ std::vector<std::unique_ptr<Target>> m_targets;
Target *m_activeTarget = nullptr;
EditorConfiguration m_editorConfiguration;
Core::Context m_projectLanguages;
@@ -181,8 +181,6 @@ public:
ProjectPrivate::~ProjectPrivate()
{
- qDeleteAll(m_targets);
-
// Make sure our root node is null when deleting the actual node
std::unique_ptr<ProjectNode> oldNode = std::move(m_rootProjectNode);
}
@@ -241,57 +239,52 @@ bool Project::hasActiveBuildSettings() const
return activeTarget() && IBuildConfigurationFactory::find(activeTarget());
}
-void Project::addTarget(Target *t)
+void Project::addTarget(std::unique_ptr<Target> &&t)
{
- QTC_ASSERT(t && !d->m_targets.contains(t), return);
+ auto pointer = t.get();
+ QTC_ASSERT(t && !Utils::contains(d->m_targets, pointer), return);
QTC_ASSERT(!target(t->kit()), return);
Q_ASSERT(t->project() == this);
t->setDefaultDisplayName(t->displayName());
// add it
- d->m_targets.push_back(t);
- connect(t, &Target::addedProjectConfiguration, this, &Project::addedProjectConfiguration);
- connect(t, &Target::aboutToRemoveProjectConfiguration, this, &Project::aboutToRemoveProjectConfiguration);
- connect(t, &Target::removedProjectConfiguration, this, &Project::removedProjectConfiguration);
- connect(t, &Target::activeProjectConfigurationChanged, this, &Project::activeProjectConfigurationChanged);
- emit addedProjectConfiguration(t);
- emit addedTarget(t);
+ d->m_targets.emplace_back(std::move(t));
+ connect(pointer, &Target::addedProjectConfiguration, this, &Project::addedProjectConfiguration);
+ connect(pointer, &Target::aboutToRemoveProjectConfiguration, this, &Project::aboutToRemoveProjectConfiguration);
+ connect(pointer, &Target::removedProjectConfiguration, this, &Project::removedProjectConfiguration);
+ connect(pointer, &Target::activeProjectConfigurationChanged, this, &Project::activeProjectConfigurationChanged);
+ emit addedProjectConfiguration(pointer);
+ emit addedTarget(pointer);
// check activeTarget:
if (!activeTarget())
- setActiveTarget(t);
+ SessionManager::setActiveTarget(this, pointer, SetActive::Cascade);
}
bool Project::removeTarget(Target *target)
{
- QTC_ASSERT(target && d->m_targets.contains(target), return false);
+ QTC_ASSERT(target && Utils::contains(d->m_targets, target), return false);
if (BuildManager::isBuilding(target))
return false;
- if (target == activeTarget()) {
- if (d->m_targets.size() == 1)
- SessionManager::setActiveTarget(this, nullptr, SetActive::Cascade);
- else if (d->m_targets.first() == target)
- SessionManager::setActiveTarget(this, d->m_targets.at(1), SetActive::Cascade);
- else
- SessionManager::setActiveTarget(this, d->m_targets.at(0), SetActive::Cascade);
- }
-
emit aboutToRemoveProjectConfiguration(target);
emit aboutToRemoveTarget(target);
- d->m_targets.removeOne(target);
+ auto keep = Utils::take(d->m_targets, target);
+ if (target == d->m_activeTarget) {
+ Target *newActiveTarget = (d->m_targets.size() == 0 ? nullptr : d->m_targets.at(0).get());
+ SessionManager::setActiveTarget(this, newActiveTarget, SetActive::Cascade);
+ }
emit removedTarget(target);
emit removedProjectConfiguration(target);
- delete target;
return true;
}
QList<Target *> Project::targets() const
{
- return d->m_targets;
+ return Utils::toRawPointer<QList>(d->m_targets);
}
Target *Project::activeTarget() const
@@ -301,8 +294,12 @@ Target *Project::activeTarget() const
void Project::setActiveTarget(Target *target)
{
- if ((!target && !d->m_targets.isEmpty()) ||
- (target && d->m_targets.contains(target) && d->m_activeTarget != target)) {
+ if (d->m_activeTarget == target)
+ return;
+
+ // Allow to set nullptr just before the last target is removed or when no target exists.
+ if ((!target && d->m_targets.size() == 0) ||
+ (target && Utils::contains(d->m_targets, target))) {
d->m_activeTarget = target;
emit activeProjectConfigurationChanged(d->m_activeTarget);
emit activeTargetChanged(d->m_activeTarget);
@@ -327,16 +324,14 @@ QList<Task> Project::projectIssues(const Kit *k) const
return {};
}
-Target *Project::createTarget(Kit *k)
+std::unique_ptr<Target> Project::createTarget(Kit *k)
{
if (!k || target(k))
return nullptr;
- auto t = new Target(this, k);
- if (!setupTarget(t)) {
- delete t;
- return nullptr;
- }
+ auto t = std::make_unique<Target>(this, k, Target::_constructor_tag{});
+ if (!setupTarget(t.get()))
+ return {};
return t;
}
@@ -529,7 +524,7 @@ void Project::handleSubTreeChanged(FolderNode *node)
emit fileListChanged();
}
-Target *Project::restoreTarget(const QVariantMap &data)
+std::unique_ptr<Target> Project::restoreTarget(const QVariantMap &data)
{
Core::Id id = idFromMap(data);
if (target(id)) {
@@ -544,11 +539,9 @@ Target *Project::restoreTarget(const QVariantMap &data)
return nullptr;
}
- auto t = new Target(this, k);
- if (!t->fromMap(data)) {
- delete t;
- return nullptr;
- }
+ auto t = std::make_unique<Target>(this, k, Target::_constructor_tag{});
+ if (!t->fromMap(data))
+ return {};
return t;
}
@@ -649,6 +642,15 @@ Utils::FileName Project::projectDirectory(const Utils::FileName &top)
return Utils::FileName::fromString(top.toFileInfo().absoluteDir().path());
}
+/*!
+ Returns the common root directory that contains all files which belongs to a project.
+*/
+
+Utils::FileName Project::rootProjectDirectory() const
+{
+ return projectDirectory(); // TODO parse all files and find the common path
+}
+
ProjectNode *Project::rootProjectNode() const
{
return d->m_rootProjectNode.get();
@@ -698,16 +700,11 @@ void Project::createTargetFromMap(const QVariantMap &map, int index)
return;
QVariantMap targetMap = map.value(key).toMap();
- Target *t = restoreTarget(targetMap);
- if (!t)
+ std::unique_ptr<Target> t = restoreTarget(targetMap);
+ if (!t || (t->runConfigurations().isEmpty() && t->buildConfigurations().isEmpty()))
return;
- if (t->runConfigurations().isEmpty() && t->buildConfigurations().isEmpty()) {
- delete t;
- return;
- }
-
- addTarget(t);
+ addTarget(std::move(t));
}
EditorConfiguration *Project::editorConfiguration() const
@@ -799,7 +796,7 @@ void Project::setNamedSettings(const QString &name, const QVariant &value)
bool Project::needsConfiguration() const
{
- return d->m_targets.isEmpty();
+ return d->m_targets.size() == 0;
}
bool Project::needsBuildConfigurations() const
@@ -822,20 +819,20 @@ bool Project::knowsAllBuildExecutables() const
return true;
}
-void Project::setup(QList<const BuildInfo *> infoList)
+void Project::setup(const QList<const BuildInfo *> &infoList)
{
- QList<Target *> toRegister;
- foreach (const BuildInfo *info, infoList) {
+ std::vector<std::unique_ptr<Target>> toRegister;
+ for (const BuildInfo *info : infoList) {
Kit *k = KitManager::kit(info->kitId);
if (!k)
continue;
Target *t = target(k);
- if (!t) {
+ if (!t)
t = Utils::findOrDefault(toRegister, Utils::equal(&Target::kit, k));
- }
if (!t) {
- t = new Target(this, k);
- toRegister << t;
+ auto newTarget = std::make_unique<Target>(this, k, Target::_constructor_tag{});
+ t = newTarget.get();
+ toRegister.emplace_back(std::move(newTarget));
}
if (!info->factory())
@@ -846,10 +843,10 @@ void Project::setup(QList<const BuildInfo *> infoList)
continue;
t->addBuildConfiguration(bc);
}
- foreach (Target *t, toRegister) {
+ for (std::unique_ptr<Target> &t : toRegister) {
t->updateDefaultDeployConfigurations();
t->updateDefaultRunConfigurations();
- addTarget(t);
+ addTarget(std::move(t));
}
}
diff --git a/src/plugins/projectexplorer/project.h b/src/plugins/projectexplorer/project.h
index 29e6d7fb2d..e6df98372f 100644
--- a/src/plugins/projectexplorer/project.h
+++ b/src/plugins/projectexplorer/project.h
@@ -55,7 +55,6 @@ class ProjectConfiguration;
class ProjectImporter;
class ProjectNode;
class ProjectPrivate;
-class Session;
class Target;
// Auto-registers with the DocumentManager if a callback is set!
@@ -103,6 +102,7 @@ public:
Core::IDocument *document() const;
Utils::FileName projectFilePath() const;
Utils::FileName projectDirectory() const;
+ Utils::FileName rootProjectDirectory() const;
static Utils::FileName projectDirectory(const Utils::FileName &top);
virtual ProjectNode *rootProjectNode() const;
@@ -114,7 +114,7 @@ public:
EditorConfiguration *editorConfiguration() const;
// Target:
- void addTarget(Target *target);
+ void addTarget(std::unique_ptr<Target> &&target);
bool removeTarget(Target *target);
QList<Target *> targets() const;
@@ -124,9 +124,9 @@ public:
Target *target(Kit *k) const;
virtual QList<Task> projectIssues(const Kit *k) const;
- Target *createTarget(Kit *k);
+ std::unique_ptr<Target> createTarget(Kit *k);
static bool copySteps(Target *sourceTarget, Target *newTarget);
- Target *restoreTarget(const QVariantMap &data);
+ std::unique_ptr<Target> restoreTarget(const QVariantMap &data);
void saveSettings();
enum class RestoreResult { Ok, Error, UserAbort };
@@ -163,7 +163,7 @@ public:
// of configuration.
virtual bool knowsAllBuildExecutables() const;
- void setup(QList<const BuildInfo *> infoList);
+ void setup(const QList<const BuildInfo *> &infoList);
Utils::MacroExpander *macroExpander() const;
bool isParsing() const;
@@ -250,7 +250,6 @@ private:
void setActiveTarget(Target *target);
ProjectPrivate *d;
- friend class Session;
friend class ContainerNode;
};
diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp
index 56b30b3a99..37d57d18c7 100644
--- a/src/plugins/projectexplorer/projectexplorer.cpp
+++ b/src/plugins/projectexplorer/projectexplorer.cpp
@@ -31,6 +31,7 @@
#include "customwizard/customwizard.h"
#include "deployablefile.h"
#include "deployconfiguration.h"
+#include "extraabi.h"
#include "gcctoolchainfactories.h"
#ifdef WITH_JOURNALD
#include "journaldwatcher.h"
@@ -446,6 +447,7 @@ public:
#ifdef Q_OS_WIN
WinDebugInterface m_winDebugInterface;
MsvcToolChainFactory m_mscvToolChainFactory;
+ ClangClToolChainFactory m_clangClToolChainFactory;
#else
LinuxIccToolChainFactory m_linuxToolChainFactory;
#endif
@@ -524,6 +526,10 @@ ProjectExplorerPlugin::~ProjectExplorerPlugin()
delete dd->m_toolChainManager;
ProjectPanelFactory::destroyFactories();
delete dd;
+ dd = nullptr;
+ m_instance = nullptr;
+
+ RunWorkerFactory::destroyRemainingRunWorkerFactories();
}
ProjectExplorerPlugin *ProjectExplorerPlugin::instance()
@@ -553,11 +559,11 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
IWizardFactory::registerFeatureProvider(new KitFeatureProvider);
// Register KitInformation:
- KitManager::registerKitInformation(new DeviceTypeKitInformation);
- KitManager::registerKitInformation(new DeviceKitInformation);
- KitManager::registerKitInformation(new ToolChainKitInformation);
- KitManager::registerKitInformation(new SysRootKitInformation);
- KitManager::registerKitInformation(new EnvironmentKitInformation);
+ KitManager::registerKitInformation<DeviceTypeKitInformation>();
+ KitManager::registerKitInformation<DeviceKitInformation>();
+ KitManager::registerKitInformation<ToolChainKitInformation>();
+ KitManager::registerKitInformation<SysRootKitInformation>();
+ KitManager::registerKitInformation<EnvironmentKitInformation>();
IWizardFactory::registerFactoryCreator([]() -> QList<IWizardFactory *> {
QList<IWizardFactory *> result;
@@ -647,17 +653,6 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
panelFactory->setCreateWidgetFunction([](Project *project) { return new DependenciesWidget(project); });
ProjectPanelFactory::registerFactory(panelFactory);
- auto constraint = [](RunConfiguration *runConfiguration) {
- const Runnable runnable = runConfiguration->runnable();
- const IDevice::ConstPtr device = runnable.device;
- if (device && device->type() == ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE)
- return true;
- Target *target = runConfiguration->target();
- Kit *kit = target ? target->kit() : nullptr;
- return DeviceTypeKitInformation::deviceTypeId(kit) == ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE;
- };
- RunControl::registerWorker<SimpleTargetRunner>(Constants::NORMAL_RUN_MODE, constraint);
-
// context menus
ActionContainer *msessionContextMenu =
ActionManager::createMenu(Constants::M_SESSIONCONTEXT);
@@ -1640,6 +1635,7 @@ void ProjectExplorerPlugin::extensionsInitialized()
bool ProjectExplorerPlugin::delayedInitialize()
{
dd->determineSessionToRestoreAtStartup();
+ ExtraAbi::load(); // Load this before Toolchains!
DeviceManager::instance()->load();
ToolChainManager::restoreToolChains();
dd->m_kitManager->restoreKits();
@@ -1693,7 +1689,7 @@ void ProjectExplorerPluginPrivate::showSessionManager()
updateActions();
- if (ModeManager::currentMode() == Core::Constants::MODE_WELCOME)
+ if (ModeManager::currentModeId() == Core::Constants::MODE_WELCOME)
updateWelcomePage();
}
@@ -1835,36 +1831,31 @@ ProjectExplorerPlugin::OpenProjectResult ProjectExplorerPlugin::openProjects(con
}
Utils::MimeType mt = Utils::mimeTypeForFile(fileName);
- if (mt.isValid()) {
- if (ProjectManager::canOpenProjectForMimeType(mt)) {
- if (!QFileInfo(filePath).isFile()) {
- appendError(errorString,
- tr("Failed opening project \"%1\": Project is not a file.").arg(fileName));
- } else if (Project *pro = ProjectManager::openProject(mt, Utils::FileName::fromString(filePath))) {
- QObject::connect(pro, &Project::parsingFinished, [pro]() {
- emit SessionManager::instance()->projectFinishedParsing(pro);
- });
- QString restoreError;
- Project::RestoreResult restoreResult = pro->restoreSettings(&restoreError);
- if (restoreResult == Project::RestoreResult::Ok) {
- connect(pro, &Project::fileListChanged,
- m_instance, &ProjectExplorerPlugin::fileListChanged);
- SessionManager::addProject(pro);
- openedPro += pro;
- } else {
- if (restoreResult == Project::RestoreResult::Error)
- appendError(errorString, restoreError);
- delete pro;
- }
+ if (ProjectManager::canOpenProjectForMimeType(mt)) {
+ if (!QFileInfo(filePath).isFile()) {
+ appendError(errorString,
+ tr("Failed opening project \"%1\": Project is not a file.").arg(fileName));
+ } else if (Project *pro = ProjectManager::openProject(mt, Utils::FileName::fromString(filePath))) {
+ QObject::connect(pro, &Project::parsingFinished, [pro]() {
+ emit SessionManager::instance()->projectFinishedParsing(pro);
+ });
+ QString restoreError;
+ Project::RestoreResult restoreResult = pro->restoreSettings(&restoreError);
+ if (restoreResult == Project::RestoreResult::Ok) {
+ connect(pro, &Project::fileListChanged,
+ m_instance, &ProjectExplorerPlugin::fileListChanged);
+ SessionManager::addProject(pro);
+ openedPro += pro;
+ } else {
+ if (restoreResult == Project::RestoreResult::Error)
+ appendError(errorString, restoreError);
+ delete pro;
}
- } else {
- appendError(errorString, tr("Failed opening project \"%1\": No plugin can open project type \"%2\".")
- .arg(QDir::toNativeSeparators(fileName))
- .arg(mt.name()));
}
} else {
- appendError(errorString, tr("Failed opening project \"%1\": Unknown project type.")
- .arg(QDir::toNativeSeparators(fileName)));
+ appendError(errorString, tr("Failed opening project \"%1\": No plugin can open project type \"%2\".")
+ .arg(QDir::toNativeSeparators(fileName))
+ .arg(mt.name()));
}
if (fileNames.size() > 1)
SessionManager::reportProjectLoadingProgress();
@@ -2458,7 +2449,7 @@ void ProjectExplorerPluginPrivate::runProjectContextMenu()
auto act = qobject_cast<QAction *>(sender());
if (!act)
return;
- RunConfiguration *rc = act->data().value<RunConfiguration *>();
+ auto *rc = act->data().value<RunConfiguration *>();
if (!rc)
return;
m_instance->runRunConfiguration(rc, Constants::NORMAL_RUN_MODE);
@@ -2888,7 +2879,7 @@ void ProjectExplorerPluginPrivate::updateUnloadProjectMenu()
void ProjectExplorerPluginPrivate::updateRecentProjectMenu()
{
- typedef QList<QPair<QString, QString> >::const_iterator StringPairListConstIterator;
+ using StringPairListConstIterator = QList<QPair<QString, QString> >::const_iterator;
ActionContainer *aci = ActionManager::actionContainer(Constants::M_RECENTPROJECTS);
QMenu *menu = aci->menu();
menu->clear();
@@ -3005,7 +2996,7 @@ void ProjectExplorerPluginPrivate::updateContextMenuActions()
} else if (runConfigs.count() > 1) {
runMenu->menu()->menuAction()->setVisible(true);
foreach (RunConfiguration *rc, runConfigs) {
- QAction *act = new QAction(runMenu->menu());
+ auto *act = new QAction(runMenu->menu());
act->setData(QVariant::fromValue(rc));
act->setText(tr("Run %1").arg(rc->displayName()));
runMenu->menu()->addAction(act);
@@ -3110,7 +3101,7 @@ void ProjectExplorerPluginPrivate::updateLocationSubMenus()
for (const FolderNode::LocationInfo &li : locations) {
const int line = li.line;
const Utils::FileName path = li.path;
- QAction *action = new QAction(li.displayName, nullptr);
+ auto *action = new QAction(li.displayName, nullptr);
connect(action, &QAction::triggered, this, [line, path]() {
Core::EditorManager::openEditorAt(path.toString(), line);
});
@@ -3453,7 +3444,7 @@ void ProjectExplorerPluginPrivate::updateSessionMenu()
m_sessionMenu->clear();
dd->m_sessionMenu->addAction(dd->m_sessionManagerAction);
dd->m_sessionMenu->addSeparator();
- QActionGroup *ag = new QActionGroup(m_sessionMenu);
+ auto *ag = new QActionGroup(m_sessionMenu);
connect(ag, &QActionGroup::triggered, this, &ProjectExplorerPluginPrivate::setSession);
const QString activeSession = SessionManager::activeSession();
diff --git a/src/plugins/projectexplorer/projectexplorer.h b/src/plugins/projectexplorer/projectexplorer.h
index b4d71451d0..48281d2581 100644
--- a/src/plugins/projectexplorer/projectexplorer.h
+++ b/src/plugins/projectexplorer/projectexplorer.h
@@ -225,9 +225,10 @@ private slots:
void testAbiRoundTrips();
void testAbiOfBinary_data();
void testAbiOfBinary();
- void testFlavorForOs();
void testAbiFromTargetTriplet_data();
void testAbiFromTargetTriplet();
+ void testAbiUserOsFlavor_data();
+ void testAbiUserOsFlavor();
void testDeviceManager();
diff --git a/src/plugins/projectexplorer/projectexplorer.pro b/src/plugins/projectexplorer/projectexplorer.pro
index eecc3f0870..598e8ceddb 100644
--- a/src/plugins/projectexplorer/projectexplorer.pro
+++ b/src/plugins/projectexplorer/projectexplorer.pro
@@ -3,6 +3,10 @@ QT += qml
include(../../qtcreatorplugin.pri)
include(customwizard/customwizard.pri)
include(jsonwizard/jsonwizard.pri)
+
+include(../../shared/clang/clang_installation.pri)
+include(../../shared/clang/clang_defines.pri)
+
HEADERS += projectexplorer.h \
abi.h \
abiwidget.h \
@@ -12,6 +16,7 @@ HEADERS += projectexplorer.h \
configtaskhandler.h \
environmentaspect.h \
environmentaspectwidget.h \
+ extraabi.h \
gcctoolchain.h \
importwidget.h \
userfileaccessor.h \
@@ -149,7 +154,8 @@ HEADERS += projectexplorer.h \
projectexplorer_global.h \
extracompiler.h \
customexecutablerunconfiguration.h \
- projectmacro.h
+ projectmacro.h \
+ makestep.h
SOURCES += projectexplorer.cpp \
abi.cpp \
@@ -160,6 +166,7 @@ SOURCES += projectexplorer.cpp \
configtaskhandler.cpp \
environmentaspect.cpp \
environmentaspectwidget.cpp \
+ extraabi.cpp \
gcctoolchain.cpp \
importwidget.cpp \
projectconfigurationmodel.cpp \
@@ -284,7 +291,8 @@ SOURCES += projectexplorer.cpp \
projectexplorericons.cpp \
extracompiler.cpp \
customexecutablerunconfiguration.cpp \
- projectmacro.cpp
+ projectmacro.cpp \
+ makestep.cpp
FORMS += processstep.ui \
editorsettingspropertiespage.ui \
@@ -297,7 +305,8 @@ FORMS += processstep.ui \
devicesupport/devicesettingswidget.ui \
devicesupport/devicetestdialog.ui \
devicesupport/desktopdeviceconfigurationwidget.ui \
- customparserconfigdialog.ui
+ customparserconfigdialog.ui \
+ makestep.ui
WINSOURCES += \
windebuginterface.cpp \
diff --git a/src/plugins/projectexplorer/projectexplorer.qbs b/src/plugins/projectexplorer/projectexplorer.qbs
index 973423e149..67f07840ac 100644
--- a/src/plugins/projectexplorer/projectexplorer.qbs
+++ b/src/plugins/projectexplorer/projectexplorer.qbs
@@ -15,6 +15,9 @@ Project {
Depends { name: "TextEditor" }
Depends { name: "app_version_header" }
+ Depends { name: "libclang"; required: false }
+ Depends { name: "clang_defines" }
+
Group {
name: "General"
files: [
@@ -63,6 +66,7 @@ Project {
"environmentaspectwidget.cpp", "environmentaspectwidget.h",
"environmentwidget.cpp", "environmentwidget.h",
"expanddata.cpp", "expanddata.h",
+ "extraabi.cpp", "extraabi.h",
"extracompiler.cpp", "extracompiler.h",
"foldernavigationwidget.cpp", "foldernavigationwidget.h",
"gccparser.cpp", "gccparser.h",
@@ -87,6 +91,7 @@ Project {
"ldparser.cpp", "ldparser.h",
"linuxiccparser.cpp", "linuxiccparser.h",
"localenvironmentaspect.cpp", "localenvironmentaspect.h",
+ "makestep.cpp", "makestep.h", "makestep.ui",
"miniprojecttargetselector.cpp", "miniprojecttargetselector.h",
"msvcparser.cpp", "msvcparser.h",
"namedwidget.cpp", "namedwidget.h",
diff --git a/src/plugins/projectexplorer/projectimporter.cpp b/src/plugins/projectexplorer/projectimporter.cpp
index 25565015d8..d766f7965a 100644
--- a/src/plugins/projectexplorer/projectimporter.cpp
+++ b/src/plugins/projectexplorer/projectimporter.cpp
@@ -286,26 +286,27 @@ bool ProjectImporter::isTemporaryKit(Kit *k) const
Kit *ProjectImporter::createTemporaryKit(const KitSetupFunction &setup) const
{
- Kit *k = new Kit;
+ auto k = std::make_unique<Kit>();
+ Kit *kptr = k.get();
UpdateGuard guard(*this);
{
- KitGuard kitGuard(k);
+ KitGuard kitGuard(kptr);
k->setUnexpandedDisplayName(QCoreApplication::translate("ProjectExplorer::ProjectImporter", "Imported Kit"));;
// Set up values:
foreach (KitInformation *ki, KitManager::kitInformation())
- ki->setup(k);
+ ki->setup(kptr);
- setup(k);
+ setup(kptr);
foreach (KitInformation *ki, KitManager::kitInformation())
- ki->fix(k);
+ ki->fix(kptr);
- markKitAsTemporary(k);
- addProject(k);
+ markKitAsTemporary(kptr);
+ addProject(kptr);
} // ~KitGuard, sending kitUpdated
- KitManager::registerKit(k); // potentially adds kits to other targetsetuppages
- return k;
+ KitManager::registerKit(std::move(k)); // potentially adds kits to other targetsetuppages
+ return kptr;
}
bool ProjectImporter::findTemporaryHandler(Core::Id id) const
diff --git a/src/plugins/projectexplorer/projectmodels.cpp b/src/plugins/projectexplorer/projectmodels.cpp
index cbb375da61..a4d9e39d9b 100644
--- a/src/plugins/projectexplorer/projectmodels.cpp
+++ b/src/plugins/projectexplorer/projectmodels.cpp
@@ -178,7 +178,7 @@ QVariant FlatModel::data(const QModelIndex &index, int role) const
Qt::ItemFlags FlatModel::flags(const QModelIndex &index) const
{
if (!index.isValid())
- return 0;
+ return nullptr;
// We claim that everything is editable
// That's slightly wrong
// We control the only view, and that one does the checks
diff --git a/src/plugins/projectexplorer/projecttree.cpp b/src/plugins/projectexplorer/projecttree.cpp
index 206f158f22..fc3175a1bc 100644
--- a/src/plugins/projectexplorer/projecttree.cpp
+++ b/src/plugins/projectexplorer/projecttree.cpp
@@ -158,7 +158,10 @@ void ProjectTree::updateFromProjectTreeWidget(ProjectTreeWidget *widget)
Node *currentNode = widget->currentNode();
Project *project = projectForNode(currentNode);
- setCurrent(currentNode, project);
+ if (!project)
+ updateFromNode(nullptr); // Project was removed!
+ else
+ setCurrent(currentNode, project);
}
void ProjectTree::updateFromDocumentManager()
@@ -227,12 +230,14 @@ void ProjectTree::setCurrent(Node *node, Project *project)
void ProjectTree::sessionChanged()
{
- if (m_currentProject)
+ if (m_currentProject) {
Core::DocumentManager::setDefaultLocationForNewFiles(m_currentProject->projectDirectory().toString());
- else if (SessionManager::startupProject())
- Core::DocumentManager::setDefaultLocationForNewFiles(SessionManager::startupProject()->projectDirectory().toString());
- else
+ } else if (Project *project = SessionManager::startupProject()) {
+ Core::DocumentManager::setDefaultLocationForNewFiles(project->projectDirectory().toString());
+ updateFromNode(nullptr); // Make startup project current if there is no other current
+ } else {
Core::DocumentManager::setDefaultLocationForNewFiles(QString());
+ }
update();
}
diff --git a/src/plugins/projectexplorer/projecttreewidget.cpp b/src/plugins/projectexplorer/projecttreewidget.cpp
index 688c7b245c..f2f94d9880 100644
--- a/src/plugins/projectexplorer/projecttreewidget.cpp
+++ b/src/plugins/projectexplorer/projecttreewidget.cpp
@@ -202,7 +202,7 @@ public:
NavigationTreeView::setModel(newModel);
}
- ~ProjectTreeView()
+ ~ProjectTreeView() override
{
ICore::removeContextObject(m_context);
delete m_context;
@@ -423,7 +423,7 @@ void ProjectTreeWidget::editCurrentItem()
const Node *node = m_model->nodeForIndex(currentIndex);
if (!node)
return;
- QLineEdit *editor = qobject_cast<QLineEdit*>(m_view->indexWidget(currentIndex));
+ auto *editor = qobject_cast<QLineEdit*>(m_view->indexWidget(currentIndex));
if (!editor)
return;
diff --git a/src/plugins/projectexplorer/projectwindow.cpp b/src/plugins/projectexplorer/projectwindow.cpp
index 51e17e5610..85917bcdda 100644
--- a/src/plugins/projectexplorer/projectwindow.cpp
+++ b/src/plugins/projectexplorer/projectwindow.cpp
@@ -78,7 +78,7 @@ public:
: m_factory(factory), m_project(project)
{}
- ~MiscSettingsPanelItem() { delete m_widget; }
+ ~MiscSettingsPanelItem() override { delete m_widget; }
QVariant data(int column, int role) const override;
Qt::ItemFlags flags(int column) const override;
@@ -174,7 +174,7 @@ public:
Q_UNUSED(column)
if (role == ItemActivatedFromBelowRole) {
- TreeItem *item = data.value<TreeItem *>();
+ auto *item = data.value<TreeItem *>();
QTC_ASSERT(item, return false);
m_currentPanelIndex = indexOf(item);
QTC_ASSERT(m_currentPanelIndex != -1, return false);
@@ -198,7 +198,7 @@ private:
class ProjectItem : public TreeItem
{
public:
- ProjectItem() {}
+ ProjectItem() = default;
ProjectItem(Project *project, const std::function<void()> &changeListener)
: m_project(project), m_changeListener(changeListener)
@@ -279,7 +279,7 @@ public:
QModelIndex activeIndex() const
{
- TreeItem *activeItem = data(0, ActiveItemRole).value<TreeItem *>();
+ auto *activeItem = data(0, ActiveItemRole).value<TreeItem *>();
return activeItem ? activeItem->index() : QModelIndex();
}
@@ -295,7 +295,7 @@ private:
class SelectorDelegate : public QStyledItemDelegate
{
public:
- SelectorDelegate() {}
+ SelectorDelegate() = default;
QSize sizeHint(const QStyleOptionViewItem &option,
const QModelIndex &index) const final;
@@ -538,8 +538,8 @@ public:
void handleImportBuild()
{
ProjectItem *projectItem = m_projectsModel.rootItem()->childAt(0);
- Project *project = projectItem ? projectItem->project() : 0;
- ProjectImporter *projectImporter = project ? project->projectImporter() : 0;
+ Project *project = projectItem ? projectItem->project() : nullptr;
+ ProjectImporter *projectImporter = project ? project->projectImporter() : nullptr;
QTC_ASSERT(projectImporter, return);
QString dir = project->projectDirectory().toString();
@@ -554,9 +554,10 @@ public:
for (BuildInfo *info : toImport) {
Target *target = project->target(info->kitId);
if (!target) {
- target = project->createTarget(KitManager::kit(info->kitId));
- if (target)
- project->addTarget(target);
+ std::unique_ptr<Target> newTarget = project->createTarget(KitManager::kit(info->kitId));
+ target = newTarget.get();
+ if (newTarget)
+ project->addTarget(std::move(newTarget));
}
if (target) {
projectImporter->makePersistent(target->kit());
@@ -605,7 +606,7 @@ public:
//
ProjectWindow::ProjectWindow()
- : d(new ProjectWindowPrivate(this))
+ : d(std::make_unique<ProjectWindowPrivate>(this))
{
setBackgroundRole(QPalette::Base);
@@ -614,10 +615,7 @@ ProjectWindow::ProjectWindow()
setContextMenuPolicy(Qt::CustomContextMenu);
}
-ProjectWindow::~ProjectWindow()
-{
- delete d;
-}
+ProjectWindow::~ProjectWindow() = default;
QSize SelectorDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
{
diff --git a/src/plugins/projectexplorer/projectwindow.h b/src/plugins/projectexplorer/projectwindow.h
index c50e018620..1aeeb882f9 100644
--- a/src/plugins/projectexplorer/projectwindow.h
+++ b/src/plugins/projectexplorer/projectwindow.h
@@ -29,6 +29,8 @@
#include <utils/fancymainwindow.h>
+#include <memory>
+
namespace ProjectExplorer {
namespace Internal {
@@ -59,7 +61,7 @@ public:
~ProjectWindow() override;
private:
- ProjectWindowPrivate *d;
+ const std::unique_ptr<ProjectWindowPrivate> d;
};
} // namespace Internal
diff --git a/src/plugins/projectexplorer/projectwizardpage.cpp b/src/plugins/projectexplorer/projectwizardpage.cpp
index 062439db64..ee86abe895 100644
--- a/src/plugins/projectexplorer/projectwizardpage.cpp
+++ b/src/plugins/projectexplorer/projectwizardpage.cpp
@@ -68,8 +68,8 @@ public:
AddNewTree(FolderNode *node, QList<AddNewTree *> children, const QString &displayName);
AddNewTree(FolderNode *node, QList<AddNewTree *> children, const FolderNode::AddNewInformation &info);
- QVariant data(int column, int role) const;
- Qt::ItemFlags flags(int column) const;
+ QVariant data(int column, int role) const override;
+ Qt::ItemFlags flags(int column) const override;
QString displayName() const { return m_displayName; }
FolderNode *node() const { return m_node; }
@@ -202,7 +202,7 @@ void BestNodeSelector::inspect(AddNewTree *tree, bool isContextNode)
AddNewTree *BestNodeSelector::bestChoice() const
{
if (m_deploys)
- return 0;
+ return nullptr;
return m_bestChoice;
}
diff --git a/src/plugins/projectexplorer/runconfiguration.cpp b/src/plugins/projectexplorer/runconfiguration.cpp
index 438d631c78..52cd91751e 100644
--- a/src/plugins/projectexplorer/runconfiguration.cpp
+++ b/src/plugins/projectexplorer/runconfiguration.cpp
@@ -466,8 +466,6 @@ Runnable RunConfiguration::runnable() const
r.workingDirectory = aspect->workingDirectory().toString();
if (auto aspect = extraAspect<EnvironmentAspect>())
r.environment = aspect->environment();
- if (auto aspect = extraAspect<TerminalAspect>())
- r.runMode = aspect->runMode();
return r;
}
@@ -520,6 +518,8 @@ RunConfigurationFactory::RunConfigurationFactory()
RunConfigurationFactory::~RunConfigurationFactory()
{
g_runConfigurationFactories.removeOne(this);
+ qDeleteAll(m_ownedRunWorkerFactories);
+ m_ownedRunWorkerFactories.clear();
}
QString RunConfigurationFactory::decoratedTargetName(const QString targetName, Target *target)
@@ -586,6 +586,16 @@ void RunConfigurationFactory::setDecorateDisplayNames(bool on)
m_decorateDisplayNames = on;
}
+RunWorkerFactory *RunConfigurationFactory::addRunWorkerFactoryHelper
+ (Core::Id runMode, const std::function<RunWorker *(RunControl *)> &creator)
+{
+ auto factory = new RunWorkerFactory;
+ factory->addConstraint(m_ownTypeChecker);
+ factory->addSupportedRunMode(runMode);
+ factory->setProducer(creator);
+ return factory;
+}
+
void RunConfigurationFactory::addSupportedProjectType(Core::Id id)
{
m_supportedProjectTypes.append(id);
@@ -682,28 +692,60 @@ FixedRunConfigurationFactory::availableCreators(Target *parent) const
// RunWorkerFactory
-using RunWorkerFactories = std::vector<RunWorkerFactory>;
+static QList<RunWorkerFactory *> g_runWorkerFactories;
-static RunWorkerFactories &theWorkerFactories()
+RunWorkerFactory::RunWorkerFactory()
{
- static RunWorkerFactories factories;
- return factories;
+ g_runWorkerFactories.append(this);
}
-RunWorkerFactory::RunWorkerFactory(Core::Id mode, Constraint constr, const WorkerCreator &prod, int prio)
- : m_runMode(mode), m_constraint(constr), m_producer(prod), m_priority(prio)
-{}
+RunWorkerFactory::~RunWorkerFactory()
+{
+ g_runWorkerFactories.removeOne(this);
+}
bool RunWorkerFactory::canRun(RunConfiguration *runConfiguration, Core::Id runMode) const
{
- if (runMode != this->m_runMode)
+ if (!m_supportedRunModes.contains(runMode))
return false;
- if (!m_constraint)
- return true;
- return m_constraint(runConfiguration);
+
+ for (const Constraint &constraint : m_constraints) {
+ if (!constraint(runConfiguration))
+ return false;
+ }
+
+ return true;
+}
+
+void RunWorkerFactory::setPriority(int priority)
+{
+ m_priority = priority;
+}
+
+void RunWorkerFactory::setProducer(const WorkerCreator &producer)
+{
+ m_producer = producer;
+}
+
+void RunWorkerFactory::addConstraint(const Constraint &constraint)
+{
+ // Default constructed Constraints are not worth keeping.
+ // FIXME: Make it a QTC_ASSERT once there is no code path
+ // using this "feature" anymore.
+ if (!constraint)
+ return;
+ m_constraints.append(constraint);
}
+void RunWorkerFactory::addSupportedRunMode(Core::Id runMode)
+{
+ m_supportedRunModes.append(runMode);
+}
+void RunWorkerFactory::destroyRemainingRunWorkerFactories()
+{
+ qDeleteAll(g_runWorkerFactories);
+}
/*!
\class ProjectExplorer::RunControl
@@ -848,7 +890,7 @@ public:
}
}
- ~RunControlPrivate()
+ ~RunControlPrivate() override
{
QTC_CHECK(state == RunControlState::Finished || state == RunControlState::Initialized);
disconnect();
@@ -907,7 +949,7 @@ public:
using namespace Internal;
RunControl::RunControl(RunConfiguration *runConfiguration, Core::Id mode) :
- d(new RunControlPrivate(this, runConfiguration, mode))
+ d(std::make_unique<RunControlPrivate>(this, runConfiguration, mode))
{
#ifdef WITH_JOURNALD
JournaldWatcher::instance()->subscribe(this, [this](const JournaldWatcher::LogEntry &entry) {
@@ -939,8 +981,6 @@ RunControl::~RunControl()
#ifdef WITH_JOURNALD
JournaldWatcher::instance()->unsubscribe(this);
#endif
- delete d;
- d = nullptr;
}
void RunControl::initiateStart()
@@ -967,7 +1007,7 @@ void RunControl::forceStop()
void RunControl::initiateFinish()
{
- QTimer::singleShot(0, d, &RunControlPrivate::initiateFinish);
+ QTimer::singleShot(0, d.get(), &RunControlPrivate::initiateFinish);
}
using WorkerCreators = QHash<Core::Id, RunControl::WorkerCreator>;
@@ -1001,22 +1041,17 @@ RunWorker *RunControl::createWorker(Core::Id id)
RunWorkerFactory::WorkerCreator RunControl::producer(RunConfiguration *runConfig, Core::Id runMode)
{
const auto canRun = std::bind(&RunWorkerFactory::canRun, std::placeholders::_1, runConfig, runMode);
- const RunWorkerFactories candidates = Utils::filtered(theWorkerFactories(), canRun);
+ const QList<RunWorkerFactory *> candidates = Utils::filtered(g_runWorkerFactories, canRun);
if (candidates.empty())
return {};
- const auto higherPriority = std::bind(std::greater<int>(),
+ const auto higherPriority = std::bind(std::greater<>(),
std::bind(&RunWorkerFactory::priority, std::placeholders::_1),
std::bind(&RunWorkerFactory::priority, std::placeholders::_2));
const auto bestFactory = std::max_element(candidates.begin(), candidates.end(), higherPriority);
- return bestFactory->producer();
-}
-
-void RunControl::addWorkerFactory(const RunWorkerFactory &workerFactory)
-{
- theWorkerFactories().push_back(workerFactory);
+ return (*bestFactory)->producer();
}
void RunControlPrivate::initiateStart()
@@ -1406,17 +1441,6 @@ Project *RunControl::project() const
return d->project.data();
}
-bool RunControl::canReUseOutputPane(const RunControl *other) const
-{
- if (!other || other->isRunning())
- return false;
-
- return d->runnable.executable == other->d->runnable.executable
- && d->runnable.commandLineArguments == other->d->runnable.commandLineArguments
- && d->runnable.workingDirectory == other->d->runnable.workingDirectory
- && d->runnable.environment == other->d->runnable.environment;
-}
-
/*!
A handle to the application process.
@@ -1616,12 +1640,17 @@ SimpleTargetRunner::SimpleTargetRunner(RunControl *runControl)
setDisplayName("SimpleTargetRunner");
m_runnable = runControl->runnable(); // Default value. Can be overridden using setRunnable.
m_device = runControl->device(); // Default value. Can be overridden using setDevice.
+ if (auto runConfig = runControl->runConfiguration()) {
+ if (auto terminalAspect = runConfig->extraAspect<TerminalAspect>())
+ m_useTerminal = terminalAspect->useTerminal();
+ }
}
void SimpleTargetRunner::start()
{
m_stopReported = false;
m_launcher.disconnect(this);
+ m_launcher.setUseTerminal(m_useTerminal);
const bool isDesktop = m_device.isNull()
|| m_device->type() == ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE;
@@ -1847,14 +1876,10 @@ void RunWorkerPrivate::timerEvent(QTimerEvent *ev)
*/
RunWorker::RunWorker(RunControl *runControl)
- : d(new RunWorkerPrivate(this, runControl))
-{
-}
+ : d(std::make_unique<RunWorkerPrivate>(this, runControl))
+{ }
-RunWorker::~RunWorker()
-{
- delete d;
-}
+RunWorker::~RunWorker() = default;
/*!
* This function is called by the RunControl once all dependencies
diff --git a/src/plugins/projectexplorer/runconfiguration.h b/src/plugins/projectexplorer/runconfiguration.h
index d26a54cc19..08797804c0 100644
--- a/src/plugins/projectexplorer/runconfiguration.h
+++ b/src/plugins/projectexplorer/runconfiguration.h
@@ -59,6 +59,7 @@ class RunConfiguration;
class RunConfigurationCreationInfo;
class RunConfigWidget;
class RunControl;
+class RunWorkerFactory;
class Target;
namespace Internal {
@@ -165,7 +166,6 @@ public:
QString commandLineArguments;
QString workingDirectory;
Utils::Environment environment;
- ApplicationLauncher::Mode runMode = ApplicationLauncher::Gui;
IDevice::ConstPtr device; // Override the kit's device. Keep unset by default.
// FIXME: Not necessarily a display name
@@ -301,13 +301,25 @@ protected:
return new RunConfig(t, runConfigBaseId);
};
m_runConfigBaseId = runConfigBaseId;
+ m_ownTypeChecker = [](RunConfiguration *runConfig) {
+ return qobject_cast<RunConfig *>(runConfig) != nullptr;
+ };
}
void addSupportedProjectType(Core::Id id);
void addSupportedTargetDeviceType(Core::Id id);
void setDecorateDisplayNames(bool on);
+ template<class Worker>
+ RunWorkerFactory *addRunWorkerFactory(Core::Id runMode)
+ {
+ return addRunWorkerFactoryHelper(runMode, [](RunControl *rc) { return new Worker(rc); });
+ }
+
private:
+ RunWorkerFactory *addRunWorkerFactoryHelper
+ (Core::Id runMode, const std::function<RunWorker *(RunControl *)> &creator);
+
RunConfigurationFactory(const RunConfigurationFactory &) = delete;
RunConfigurationFactory operator=(const RunConfigurationFactory &) = delete;
@@ -319,6 +331,8 @@ private:
QList<Core::Id> m_supportedProjectTypes;
QList<Core::Id> m_supportedTargetDeviceTypes;
bool m_decorateDisplayNames = false;
+ QList<RunWorkerFactory *> m_ownedRunWorkerFactories;
+ std::function<bool(RunConfiguration *)> m_ownTypeChecker;
};
class PROJECTEXPLORER_EXPORT FixedRunConfigurationFactory : public RunConfigurationFactory
@@ -403,7 +417,7 @@ protected:
private:
friend class Internal::RunControlPrivate;
friend class Internal::RunWorkerPrivate;
- Internal::RunWorkerPrivate *d;
+ const std::unique_ptr<Internal::RunWorkerPrivate> d;
};
class PROJECTEXPLORER_EXPORT RunWorkerFactory
@@ -412,17 +426,27 @@ public:
using WorkerCreator = std::function<RunWorker *(RunControl *)>;
using Constraint = std::function<bool(RunConfiguration *)>;
- RunWorkerFactory(Core::Id mode, Constraint constr, const WorkerCreator &prod,
- int prio = 0);
+ RunWorkerFactory();
+ virtual ~RunWorkerFactory();
- bool canRun(RunConfiguration *runConfiguration, Core::Id m_runMode) const;
+ bool canRun(RunConfiguration *runConfiguration, Core::Id runMode) const;
+
+ void setPriority(int priority);
+ void setProducer(const WorkerCreator &producer);
+ void addConstraint(const Constraint &constraint);
+ void addSupportedRunMode(Core::Id runMode);
int priority() const { return m_priority; }
WorkerCreator producer() const { return m_producer; }
private:
- Core::Id m_runMode;
- Constraint m_constraint;
+ // FIXME: That's temporary until ownership has been transferred to
+ // the individual plugins.
+ friend class ProjectExplorerPlugin;
+ static void destroyRemainingRunWorkerFactories();
+
+ QList<Core::Id> m_supportedRunModes;
+ QList<Constraint> m_constraints;
WorkerCreator m_producer;
int m_priority = 0;
};
@@ -473,7 +497,6 @@ public:
RunConfiguration *runConfiguration() const;
Project *project() const;
- bool canReUseOutputPane(const RunControl *other) const;
Utils::OutputFormatter *outputFormatter() const;
Core::Id runMode() const;
@@ -498,20 +521,19 @@ public:
static void registerWorker(Core::Id runMode, const WorkerCreator &producer,
const Constraint &constraint = {})
{
- addWorkerFactory({runMode, constraint, producer});
+ auto factory = new RunWorkerFactory;
+ factory->setProducer(producer);
+ factory->addSupportedRunMode(runMode);
+ factory->addConstraint(constraint);
}
template <class Worker>
static void registerWorker(Core::Id runMode, const Constraint &constraint, int priority = 0)
{
- auto producer = [](RunControl *rc) { return new Worker(rc); };
- addWorkerFactory({runMode, constraint, producer, priority});
- }
- template <class Config, class Worker>
- static void registerWorker(Core::Id runMode, int priority = 0)
- {
- auto constraint = [](RunConfiguration *runConfig) { return qobject_cast<Config *>(runConfig) != nullptr; };
- auto producer = [](RunControl *rc) { return new Worker(rc); };
- addWorkerFactory({runMode, constraint, producer, priority});
+ auto factory = new RunWorkerFactory;
+ factory->setProducer([](RunControl *rc) { return new Worker(rc); });
+ factory->addSupportedRunMode(runMode);
+ factory->addConstraint(constraint);
+ factory->setPriority(priority);
}
static WorkerCreator producer(RunConfiguration *runConfiguration, Core::Id runMode);
@@ -529,8 +551,7 @@ private:
friend class RunWorker;
friend class Internal::RunWorkerPrivate;
- static void addWorkerFactory(const RunWorkerFactory &workerFactory);
- Internal::RunControlPrivate *d;
+ const std::unique_ptr<Internal::RunControlPrivate> d;
};
@@ -564,6 +585,7 @@ private:
Runnable m_runnable;
IDevice::ConstPtr m_device;
bool m_stopReported = false;
+ bool m_useTerminal = false;
};
} // namespace ProjectExplorer
diff --git a/src/plugins/projectexplorer/runconfigurationaspects.cpp b/src/plugins/projectexplorer/runconfigurationaspects.cpp
index f2f71a9ba6..6d9d51f48e 100644
--- a/src/plugins/projectexplorer/runconfigurationaspects.cpp
+++ b/src/plugins/projectexplorer/runconfigurationaspects.cpp
@@ -111,16 +111,6 @@ bool TerminalAspect::isUserSet() const
return m_userSet;
}
-ApplicationLauncher::Mode TerminalAspect::runMode() const
-{
- return m_useTerminal ? ApplicationLauncher::Console : ApplicationLauncher::Gui;
-}
-
-void TerminalAspect::setRunMode(ApplicationLauncher::Mode runMode)
-{
- setUseTerminal(runMode == ApplicationLauncher::Console);
-}
-
/*!
\class ProjectExplorer::WorkingDirectoryAspect
*/
diff --git a/src/plugins/projectexplorer/runconfigurationaspects.h b/src/plugins/projectexplorer/runconfigurationaspects.h
index 8a393e4063..26d56b4080 100644
--- a/src/plugins/projectexplorer/runconfigurationaspects.h
+++ b/src/plugins/projectexplorer/runconfigurationaspects.h
@@ -55,9 +55,6 @@ public:
bool useTerminal() const;
void setUseTerminal(bool useTerminal);
- ApplicationLauncher::Mode runMode() const;
- void setRunMode(ApplicationLauncher::Mode runMode);
-
bool isUserSet() const;
private:
diff --git a/src/plugins/projectexplorer/selectablefilesmodel.cpp b/src/plugins/projectexplorer/selectablefilesmodel.cpp
index a8fce7aee4..6895a6457e 100644
--- a/src/plugins/projectexplorer/selectablefilesmodel.cpp
+++ b/src/plugins/projectexplorer/selectablefilesmodel.cpp
@@ -700,7 +700,7 @@ void SelectableFilesWidget::parsingFinished()
const Utils::FileNameList preservedFiles = m_model->preservedFiles();
m_preservedFilesLabel->setText(tr("Not showing %n files that are outside of the base directory.\n"
- "These files are preserved.", 0, preservedFiles.count()));
+ "These files are preserved.", nullptr, preservedFiles.count()));
enableWidgets(true);
}
diff --git a/src/plugins/projectexplorer/session.cpp b/src/plugins/projectexplorer/session.cpp
index 3f446f282e..29d5e2f945 100644
--- a/src/plugins/projectexplorer/session.cpp
+++ b/src/plugins/projectexplorer/session.cpp
@@ -140,9 +140,9 @@ SessionManager::SessionManager(QObject *parent) : QObject(parent)
connect(this, &SessionManager::projectDisplayNameChanged,
EditorManager::instance(), &EditorManager::updateWindowTitles);
connect(EditorManager::instance(), &EditorManager::editorOpened,
- this, [] { markSessionFileDirty(); });
+ this, &SessionManager::markSessionFileDirty);
connect(EditorManager::instance(), &EditorManager::editorsClosed,
- this, [] { markSessionFileDirty(); });
+ this, &SessionManager::markSessionFileDirty);
EditorManager::setWindowTitleAdditionHandler(&SessionManagerPrivate::windowTitleAddition);
EditorManager::setSessionTitleHandler(&SessionManagerPrivate::sessionTitle);
@@ -153,6 +153,7 @@ SessionManager::~SessionManager()
emit m_instance->aboutToUnloadSession(d->m_sessionName);
delete d->m_writer;
delete d;
+ d = nullptr;
}
SessionManager *SessionManager::instance()
@@ -719,7 +720,6 @@ void SessionManager::setValue(const QString &name, const QVariant &value)
if (d->m_values.value(name) == value)
return;
d->m_values.insert(name, value);
- markSessionFileDirty(false);
}
QVariant SessionManager::value(const QString &name)
@@ -1052,10 +1052,9 @@ void SessionManager::reportProjectLoadingProgress()
d->sessionLoadingProgress();
}
-void SessionManager::markSessionFileDirty(bool makeDefaultVirginDirty)
+void SessionManager::markSessionFileDirty()
{
- if (makeDefaultVirginDirty)
- d->m_virginSession = false;
+ d->m_virginSession = false;
}
void SessionManagerPrivate::sessionLoadingProgress()
diff --git a/src/plugins/projectexplorer/session.h b/src/plugins/projectexplorer/session.h
index 938a7bc5fe..489536cf75 100644
--- a/src/plugins/projectexplorer/session.h
+++ b/src/plugins/projectexplorer/session.h
@@ -136,7 +136,7 @@ signals: // for tests only
private:
static void saveActiveMode(Core::Id mode);
static void configureEditor(Core::IEditor *editor, const QString &fileName);
- static void markSessionFileDirty(bool makeDefaultVirginDirty = true);
+ static void markSessionFileDirty();
static void configureEditors(Project *project);
};
diff --git a/src/plugins/projectexplorer/sessiondialog.cpp b/src/plugins/projectexplorer/sessiondialog.cpp
index 5145bd0c7e..2dfb944a35 100644
--- a/src/plugins/projectexplorer/sessiondialog.cpp
+++ b/src/plugins/projectexplorer/sessiondialog.cpp
@@ -39,8 +39,8 @@ class SessionValidator : public QValidator
{
public:
SessionValidator(QObject *parent, const QStringList &sessions);
- void fixup(QString & input) const;
- QValidator::State validate(QString & input, int & pos) const;
+ void fixup(QString & input) const override;
+ QValidator::State validate(QString & input, int & pos) const override;
private:
QStringList m_sessions;
};
diff --git a/src/plugins/projectexplorer/sessionview.cpp b/src/plugins/projectexplorer/sessionview.cpp
index 3f99aa6794..4e3bda6510 100644
--- a/src/plugins/projectexplorer/sessionview.cpp
+++ b/src/plugins/projectexplorer/sessionview.cpp
@@ -42,7 +42,7 @@ public:
}
protected:
- void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const;
+ void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const override;
};
void RemoveItemFocusDelegate::paint(QPainter* painter, const QStyleOptionViewItem & option, const QModelIndex &index) const
diff --git a/src/plugins/projectexplorer/subscription.cpp b/src/plugins/projectexplorer/subscription.cpp
index 891a60adcb..3a84235132 100644
--- a/src/plugins/projectexplorer/subscription.cpp
+++ b/src/plugins/projectexplorer/subscription.cpp
@@ -27,6 +27,7 @@
#include "project.h"
#include "projectconfiguration.h"
+#include "session.h"
#include "target.h"
#include <utils/qtcassert.h>
@@ -37,13 +38,8 @@ namespace Internal {
Subscription::Subscription(const Subscription::Connector &s, const QObject *receiver, QObject *parent) :
QObject(parent), m_subscriber(s)
{
- if (receiver != parent) {
- connect(receiver, &QObject::destroyed, this, [this]() {
- unsubscribeAll();
- m_subscriber = Connector(); // Reset subscriber
- deleteLater();
- });
- }
+ if (receiver != parent)
+ connect(receiver, &QObject::destroyed, this, &Subscription::destroy);
}
Subscription::~Subscription()
@@ -58,12 +54,7 @@ void Subscription::subscribe(ProjectConfiguration *pc)
connectTo(pc);
- if (auto p = qobject_cast<Project *>(pc)) {
- for (Target *t : p->targets()) {
- for (ProjectConfiguration *pc : t->projectConfigurations())
- connectTo(pc);
- }
- } else if (auto t = qobject_cast<Target *>(pc)) {
+ if (auto t = qobject_cast<Target *>(pc)) {
for (ProjectConfiguration *pc : t->projectConfigurations())
connectTo(pc);
}
@@ -73,14 +64,9 @@ void Subscription::unsubscribe(ProjectConfiguration *pc)
{
disconnectFrom(pc);
- if (auto p = qobject_cast<Project *>(pc)) {
- for (Target *t : p->targets()) {
- for (ProjectConfiguration *pc : t->projectConfigurations())
- unsubscribe(pc);
- }
- } else if (auto t = qobject_cast<Target *>(pc)) {
+ if (auto t = qobject_cast<Target *>(pc)) {
for (ProjectConfiguration *pc : t->projectConfigurations())
- unsubscribe(pc);
+ disconnectFrom(pc);
}
}
@@ -93,6 +79,9 @@ void Subscription::unsubscribeAll()
void Subscription::connectTo(ProjectConfiguration *pc)
{
+ if (!m_subscriber)
+ return; // May happen during shutdown of a subscription
+
QTC_ASSERT(!m_connections.contains(pc), return);
QMetaObject::Connection conn = m_subscriber(pc);
@@ -110,18 +99,27 @@ void Subscription::disconnectFrom(ProjectConfiguration *pc)
m_connections.remove(pc);
}
+void Subscription::destroy()
+{
+ unsubscribeAll();
+ m_subscriber = Connector(); // Reset subscriber
+ deleteLater();
+}
+
ProjectSubscription::ProjectSubscription(const Subscription::Connector &s, const QObject *r,
Project *p) :
Subscription(s, r, p)
{
- if (m_subscriber) {
- for (const Target *t : p->targets()) {
- for (ProjectConfiguration *pc : t->projectConfigurations())
- m_subscriber(pc);
- }
- connect(p, &Project::addedProjectConfiguration, this, &ProjectSubscription::subscribe);
- connect(p, &Project::removedProjectConfiguration, this, &ProjectSubscription::unsubscribe);
- }
+ QTC_ASSERT(m_subscriber, return);
+
+ for (Target *t : p->targets())
+ subscribe(t);
+
+ // Disconnect on removal of a project, to make it save to remove/add a project:
+ connect(SessionManager::instance(), &SessionManager::projectRemoved,
+ this, [this, p](Project *reported) { if (p == reported) { destroy(); } });
+ connect(p, &Project::addedProjectConfiguration, this, &ProjectSubscription::subscribe);
+ connect(p, &Project::removedProjectConfiguration, this, &ProjectSubscription::unsubscribe);
}
ProjectSubscription::~ProjectSubscription() = default;
@@ -130,8 +128,13 @@ TargetSubscription::TargetSubscription(const Subscription::Connector &s, const Q
Target *t) :
Subscription(s, r, t)
{
- for (ProjectConfiguration *pc : t->projectConfigurations())
- m_subscriber(pc);
+ QTC_ASSERT(m_subscriber, return);
+
+ subscribe(t);
+
+ // Disconnect on removal of a target, to make it save to remove/add a target:
+ connect(t->project(), &Project::removedTarget, this,
+ [t, this](const Target *reportedTarget) { if (t == reportedTarget) { destroy(); } });
connect(t, &Target::addedProjectConfiguration, this, &TargetSubscription::subscribe);
connect(t, &Target::removedProjectConfiguration, this, &TargetSubscription::unsubscribe);
}
diff --git a/src/plugins/projectexplorer/subscription.h b/src/plugins/projectexplorer/subscription.h
index 819a11d1f1..71aa3596f3 100644
--- a/src/plugins/projectexplorer/subscription.h
+++ b/src/plugins/projectexplorer/subscription.h
@@ -57,6 +57,8 @@ protected:
void connectTo(ProjectConfiguration *pc);
void disconnectFrom(ProjectConfiguration *pc);
+ void destroy();
+
Connector m_subscriber;
QHash<ProjectConfiguration *, QMetaObject::Connection> m_connections;
};
diff --git a/src/plugins/projectexplorer/target.cpp b/src/plugins/projectexplorer/target.cpp
index 52afed0347..452fcce1b4 100644
--- a/src/plugins/projectexplorer/target.cpp
+++ b/src/plugins/projectexplorer/target.cpp
@@ -92,11 +92,11 @@ public:
QIcon m_overlayIcon;
QList<BuildConfiguration *> m_buildConfigurations;
- BuildConfiguration *m_activeBuildConfiguration = 0;
+ BuildConfiguration *m_activeBuildConfiguration = nullptr;
QList<DeployConfiguration *> m_deployConfigurations;
- DeployConfiguration *m_activeDeployConfiguration = 0;
+ DeployConfiguration *m_activeDeployConfiguration = nullptr;
QList<RunConfiguration *> m_runConfigurations;
- RunConfiguration* m_activeRunConfiguration = 0;
+ RunConfiguration* m_activeRunConfiguration = nullptr;
DeploymentData m_deploymentData;
BuildTargetInfoList m_appTargets;
QVariantMap m_pluginSettings;
@@ -108,9 +108,9 @@ TargetPrivate::TargetPrivate(Kit *k) :
m_kit(k)
{ }
-Target::Target(Project *project, Kit *k) :
+Target::Target(Project *project, Kit *k, _constructor_tag) :
ProjectConfiguration(project, k->id()),
- d(new TargetPrivate(k))
+ d(std::make_unique<TargetPrivate>(k))
{
QTC_CHECK(d->m_kit);
connect(DeviceManager::instance(), &DeviceManager::updated, this, &Target::updateDeviceState);
@@ -144,7 +144,6 @@ Target::~Target()
qDeleteAll(d->m_buildConfigurations);
qDeleteAll(d->m_deployConfigurations);
qDeleteAll(d->m_runConfigurations);
- delete d;
}
void Target::handleKitUpdates(Kit *k)
@@ -358,9 +357,9 @@ BuildTargetInfoList Target::applicationTargets() const
QList<ProjectConfiguration *> Target::projectConfigurations() const
{
QList<ProjectConfiguration *> result;
- result.append(Utils::qobject_container_cast<ProjectConfiguration *>(buildConfigurations()));
- result.append(Utils::qobject_container_cast<ProjectConfiguration *>(deployConfigurations()));
- result.append(Utils::qobject_container_cast<ProjectConfiguration *>(runConfigurations()));
+ result.append(Utils::static_container_cast<ProjectConfiguration *>(buildConfigurations()));
+ result.append(Utils::static_container_cast<ProjectConfiguration *>(deployConfigurations()));
+ result.append(Utils::static_container_cast<ProjectConfiguration *>(runConfigurations()));
return result;
}
diff --git a/src/plugins/projectexplorer/target.h b/src/plugins/projectexplorer/target.h
index 8f4e544db2..233fc40b54 100644
--- a/src/plugins/projectexplorer/target.h
+++ b/src/plugins/projectexplorer/target.h
@@ -30,6 +30,8 @@
#include "subscription.h"
+#include <memory>
+
QT_FORWARD_DECLARE_CLASS(QIcon)
namespace Utils { class Environment; }
@@ -54,7 +56,10 @@ class PROJECTEXPLORER_EXPORT Target : public ProjectConfiguration
friend class SessionManager; // for setActiveBuild and setActiveDeployConfiguration
Q_OBJECT
+ struct _constructor_tag { explicit _constructor_tag() = default; };
+
public:
+ Target(Project *parent, Kit *k, _constructor_tag);
~Target() override;
Project *project() const override;
@@ -164,7 +169,6 @@ signals:
void applicationTargetsChanged();
private:
- Target(Project *parent, Kit *k);
void setEnabled(bool);
bool fromMap(const QVariantMap &map) override;
@@ -178,7 +182,7 @@ private:
void setActiveBuildConfiguration(BuildConfiguration *configuration);
void setActiveDeployConfiguration(DeployConfiguration *configuration);
- TargetPrivate *d;
+ const std::unique_ptr<TargetPrivate> d;
friend class Project;
};
diff --git a/src/plugins/projectexplorer/targetsettingspanel.cpp b/src/plugins/projectexplorer/targetsettingspanel.cpp
index b6789293df..78d7daabc8 100644
--- a/src/plugins/projectexplorer/targetsettingspanel.cpp
+++ b/src/plugins/projectexplorer/targetsettingspanel.cpp
@@ -208,7 +208,7 @@ class TargetGroupItemPrivate : public QObject
public:
TargetGroupItemPrivate(TargetGroupItem *q, Project *project);
- ~TargetGroupItemPrivate();
+ ~TargetGroupItemPrivate() override;
void handleRemovedKit(Kit *kit);
void handleAddedKit(Kit *kit);
@@ -302,7 +302,7 @@ public:
Qt::ItemFlags flags(int column) const override
{
Q_UNUSED(column)
- return m_kitErrorsForProject ? Qt::ItemFlags(0)
+ return m_kitErrorsForProject ? Qt::ItemFlags({})
: Qt::ItemFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
}
@@ -375,7 +375,7 @@ public:
Q_UNUSED(column)
if (role == ContextMenuItemAdderRole) {
- QMenu *menu = data.value<QMenu *>();
+ auto *menu = data.value<QMenu *>();
addToContextMenu(menu);
return true;
}
@@ -663,7 +663,7 @@ public:
{
Q_UNUSED(column)
if (role == ContextMenuItemAdderRole) {
- QMenu *menu = data.value<QMenu *>();
+ auto *menu = data.value<QMenu *>();
auto enableAction = menu->addAction(tr("Enable Kit"));
enableAction->setEnabled(!isEnabled());
QObject::connect(enableAction, &QAction::triggered, [this] {
@@ -690,22 +690,19 @@ public:
};
TargetGroupItem::TargetGroupItem(const QString &displayName, Project *project)
- : d(new TargetGroupItemPrivate(this, project))
+ : d(std::make_unique<TargetGroupItemPrivate>(this, project))
{
d->m_displayName = displayName;
QObject::connect(project, &Project::addedTarget,
- d, &TargetGroupItemPrivate::handleTargetAdded,
+ d.get(), &TargetGroupItemPrivate::handleTargetAdded,
Qt::QueuedConnection);
QObject::connect(project, &Project::removedTarget,
- d, &TargetGroupItemPrivate::handleTargetRemoved);
+ d.get(), &TargetGroupItemPrivate::handleTargetRemoved);
QObject::connect(project, &Project::activeTargetChanged,
- d, &TargetGroupItemPrivate::handleTargetChanged, Qt::QueuedConnection);
+ d.get(), &TargetGroupItemPrivate::handleTargetChanged, Qt::QueuedConnection);
}
-TargetGroupItem::~TargetGroupItem()
-{
- delete d;
-}
+TargetGroupItem::~TargetGroupItem() = default;
TargetGroupItemPrivate::TargetGroupItemPrivate(TargetGroupItem *q, Project *project)
: q(q), m_project(project)
@@ -805,7 +802,7 @@ void TargetItem::updateSubItems()
if (childCount() == 0 && isEnabled())
m_currentChild = DefaultPage; // We will add children below.
removeChildren();
- if (isEnabled()) {
+ if (isEnabled() && !m_kitErrorsForProject) {
if (m_project->needsBuildConfigurations())
appendChild(new BuildOrRunItem(m_project, m_kitId, BuildOrRunItem::BuildPage));
appendChild(new BuildOrRunItem(m_project, m_kitId, BuildOrRunItem::RunPage));
diff --git a/src/plugins/projectexplorer/targetsettingspanel.h b/src/plugins/projectexplorer/targetsettingspanel.h
index 120f112a09..2a6cb04461 100644
--- a/src/plugins/projectexplorer/targetsettingspanel.h
+++ b/src/plugins/projectexplorer/targetsettingspanel.h
@@ -31,6 +31,8 @@
#include <QCoreApplication>
+#include <memory>
+
namespace ProjectExplorer {
class Target;
@@ -57,7 +59,7 @@ public:
TargetItem *targetItem(Target *target) const;
private:
- TargetGroupItemPrivate *d;
+ const std::unique_ptr<TargetGroupItemPrivate> d;
};
} // namespace Internal
diff --git a/src/plugins/projectexplorer/targetsetuppage.cpp b/src/plugins/projectexplorer/targetsetuppage.cpp
index bc99334c93..94185f7c8f 100644
--- a/src/plugins/projectexplorer/targetsetuppage.cpp
+++ b/src/plugins/projectexplorer/targetsetuppage.cpp
@@ -529,13 +529,13 @@ TargetSetupWidget *TargetSetupPage::addWidget(Kit *k)
if (factory)
return factory->availableSetups(k, m_projectPath);
- BuildInfo *info = new BuildInfo(nullptr);
+ auto *info = new BuildInfo(nullptr);
info->kitId = k->id();
return QList<BuildInfo *>({info});
}();
// Not all projects have BuildConfigurations, that is perfectly fine.
- TargetSetupWidget *widget = new TargetSetupWidget(k, m_projectPath);
+ auto *widget = new TargetSetupWidget(k, m_projectPath);
m_baseLayout->removeWidget(m_importWidget);
foreach (QWidget *potentialWidget, m_potentialWidgets)
diff --git a/src/plugins/projectexplorer/targetsetupwidget.cpp b/src/plugins/projectexplorer/targetsetupwidget.cpp
index b59f3dbb56..9635128415 100644
--- a/src/plugins/projectexplorer/targetsetupwidget.cpp
+++ b/src/plugins/projectexplorer/targetsetupwidget.cpp
@@ -149,7 +149,7 @@ void TargetSetupWidget::addBuildInfo(BuildInfo *info, bool isImport)
m_haveImported = true;
}
- const int pos = static_cast<int>(m_infoStore.size());
+ const auto pos = static_cast<int>(m_infoStore.size());
BuildInfoStore store;
store.buildInfo = info;
@@ -233,7 +233,7 @@ QList<BuildInfo *> TargetSetupWidget::buildInfoList(const Kit *k, const QString
if (factory)
return factory->availableSetups(k, projectPath);
- BuildInfo *info = new BuildInfo(nullptr);
+ auto *info = new BuildInfo(nullptr);
info->kitId = k->id();
return QList<BuildInfo *>({info});
}
@@ -303,7 +303,7 @@ void TargetSetupWidget::pathChanged()
void TargetSetupWidget::reportIssues(int index)
{
- const int size = static_cast<int>(m_infoStore.size());
+ const auto size = static_cast<int>(m_infoStore.size());
QTC_ASSERT(index >= 0 && index < size, return);
BuildInfoStore &store = m_infoStore[static_cast<size_t>(index)];
diff --git a/src/plugins/projectexplorer/taskhub.cpp b/src/plugins/projectexplorer/taskhub.cpp
index 726034f066..5ed8aa9677 100644
--- a/src/plugins/projectexplorer/taskhub.cpp
+++ b/src/plugins/projectexplorer/taskhub.cpp
@@ -76,12 +76,12 @@ public:
setVisible(!task.icon.isNull());
}
- bool isClickable() const;
- void clicked();
+ bool isClickable() const override;
+ void clicked() override;
- void updateFileName(const FileName &fileName);
- void updateLineNumber(int lineNumber);
- void removedFromEditor();
+ void updateFileName(const FileName &fileName) override;
+ void updateLineNumber(int lineNumber) override;
+ void removedFromEditor() override;
private:
unsigned int m_id;
};
diff --git a/src/plugins/projectexplorer/taskmodel.cpp b/src/plugins/projectexplorer/taskmodel.cpp
index 0b3381fadc..a7ac388487 100644
--- a/src/plugins/projectexplorer/taskmodel.cpp
+++ b/src/plugins/projectexplorer/taskmodel.cpp
@@ -161,7 +161,7 @@ void TaskModel::updateTaskLineNumber(unsigned int id, int line)
void TaskModel::clearTasks(Core::Id categoryId)
{
- typedef QHash<Core::Id,CategoryData>::ConstIterator IdCategoryConstIt;
+ using IdCategoryConstIt = QHash<Core::Id,CategoryData>::ConstIterator;
if (!categoryId.isValid()) {
if (m_tasks.isEmpty())
diff --git a/src/plugins/projectexplorer/taskwindow.cpp b/src/plugins/projectexplorer/taskwindow.cpp
index 79255cd367..9c9ca6e832 100644
--- a/src/plugins/projectexplorer/taskwindow.cpp
+++ b/src/plugins/projectexplorer/taskwindow.cpp
@@ -74,9 +74,9 @@ namespace Internal {
class TaskView : public Utils::ListView
{
public:
- TaskView(QWidget *parent = 0);
- ~TaskView();
- void resizeEvent(QResizeEvent *e);
+ TaskView(QWidget *parent = nullptr);
+ ~TaskView() override;
+ void resizeEvent(QResizeEvent *e) override;
};
class TaskWindowContext : public Core::IContext
@@ -92,10 +92,10 @@ class TaskDelegate : public QStyledItemDelegate
friend class TaskView; // for using Positions::minimumSize()
public:
- TaskDelegate(QObject * parent = 0);
- ~TaskDelegate();
- void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;
- QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const;
+ TaskDelegate(QObject * parent = nullptr);
+ ~TaskDelegate() override;
+ void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
+ QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override;
// TaskView uses this method if the size of the taskview changes
void emitSizeHintChanged(const QModelIndex &index);
@@ -105,7 +105,7 @@ public:
private:
void generateGradientPixmap(int width, int height, QColor color, bool selected) const;
- mutable int m_cachedHeight;
+ mutable int m_cachedHeight = 0;
mutable QFont m_cachedFont;
/*
@@ -194,8 +194,7 @@ TaskView::TaskView(QWidget *parent)
verticalScrollBar()->setSingleStep(vStepSize);
}
-TaskView::~TaskView()
-{ }
+TaskView::~TaskView() = default;
void TaskView::resizeEvent(QResizeEvent *e)
{
@@ -243,7 +242,7 @@ static QToolButton *createFilterButton(const QIcon &icon, const QString &toolTip
return button;
}
-TaskWindow::TaskWindow() : d(new TaskWindowPrivate)
+TaskWindow::TaskWindow() : d(std::make_unique<TaskWindowPrivate>())
{
d->m_model = new Internal::TaskModel(this);
d->m_filter = new Internal::TaskFilterModel(d->m_model);
@@ -253,7 +252,7 @@ TaskWindow::TaskWindow() : d(new TaskWindowPrivate)
d->m_listview->setFrameStyle(QFrame::NoFrame);
d->m_listview->setWindowTitle(displayName());
d->m_listview->setSelectionMode(QAbstractItemView::SingleSelection);
- Internal::TaskDelegate *tld = new Internal::TaskDelegate(this);
+ auto *tld = new Internal::TaskDelegate(this);
d->m_listview->setItemDelegate(tld);
d->m_listview->setWindowIcon(Icons::WINDOW.icon());
d->m_listview->setContextMenuPolicy(Qt::ActionsContextMenu);
@@ -322,7 +321,6 @@ TaskWindow::~TaskWindow()
delete d->m_listview;
delete d->m_filter;
delete d->m_model;
- delete d;
}
void TaskWindow::delayedInitialization()
@@ -533,7 +531,7 @@ void TaskWindow::setShowWarnings(bool show)
void TaskWindow::updateCategoriesMenu()
{
- typedef QMap<QString, Core::Id>::ConstIterator NameToIdsConstIt;
+ using NameToIdsConstIt = QMap<QString, Core::Id>::ConstIterator;
d->m_categoriesMenu->clear();
@@ -670,13 +668,10 @@ bool TaskWindow::canNavigate() const
/////
TaskDelegate::TaskDelegate(QObject *parent) :
- QStyledItemDelegate(parent),
- m_cachedHeight(0)
+ QStyledItemDelegate(parent)
{ }
-TaskDelegate::~TaskDelegate()
-{
-}
+TaskDelegate::~TaskDelegate() = default;
QSize TaskDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
{
diff --git a/src/plugins/projectexplorer/taskwindow.h b/src/plugins/projectexplorer/taskwindow.h
index 267402ad1b..290927b47b 100644
--- a/src/plugins/projectexplorer/taskwindow.h
+++ b/src/plugins/projectexplorer/taskwindow.h
@@ -28,6 +28,8 @@
#include <coreplugin/id.h>
#include <coreplugin/ioutputpane.h>
+#include <memory>
+
QT_BEGIN_NAMESPACE
class QAction;
class QModelIndex;
@@ -100,7 +102,7 @@ private:
int sizeHintForColumn(int column) const;
- TaskWindowPrivate *d;
+ const std::unique_ptr<TaskWindowPrivate> d;
};
} // namespace Internal
diff --git a/src/plugins/projectexplorer/toolchain.cpp b/src/plugins/projectexplorer/toolchain.cpp
index 4cc3ee120d..e0c1b113a8 100644
--- a/src/plugins/projectexplorer/toolchain.cpp
+++ b/src/plugins/projectexplorer/toolchain.cpp
@@ -53,7 +53,7 @@ namespace Internal {
class ToolChainPrivate
{
public:
- typedef ToolChain::Detection Detection;
+ using Detection = ToolChain::Detection;
explicit ToolChainPrivate(Core::Id typeId, Detection d) :
m_id(QUuid::createUuid().toByteArray()),
@@ -117,12 +117,11 @@ QString languageId(Language l)
// --------------------------------------------------------------------------
ToolChain::ToolChain(Core::Id typeId, Detection d) :
- d(new Internal::ToolChainPrivate(typeId, d))
+ d(std::make_unique<Internal::ToolChainPrivate>(typeId, d))
{
}
-ToolChain::ToolChain(const ToolChain &other) :
- d(new Internal::ToolChainPrivate(other.d->m_typeId, ManualDetection))
+ToolChain::ToolChain(const ToolChain &other) : ToolChain(other.d->m_typeId, ManualDetection)
{
d->m_language = other.d->m_language;
@@ -140,10 +139,7 @@ void ToolChain::setLanguage(Core::Id language)
d->m_language = language;
}
-ToolChain::~ToolChain()
-{
- delete d;
-}
+ToolChain::~ToolChain() = default;
QString ToolChain::displayName() const
{
diff --git a/src/plugins/projectexplorer/toolchain.h b/src/plugins/projectexplorer/toolchain.h
index 59f3b7a402..0f463bf801 100644
--- a/src/plugins/projectexplorer/toolchain.h
+++ b/src/plugins/projectexplorer/toolchain.h
@@ -39,6 +39,7 @@
#include <QVariantMap>
#include <functional>
+#include <memory>
namespace Utils { class Environment; }
@@ -168,7 +169,7 @@ protected:
private:
void setDetection(Detection d);
- Internal::ToolChainPrivate *const d;
+ const std::unique_ptr<Internal::ToolChainPrivate> d;
friend class Internal::ToolChainSettingsAccessor;
friend class ToolChainFactory;
diff --git a/src/plugins/projectexplorer/toolchainmanager.cpp b/src/plugins/projectexplorer/toolchainmanager.cpp
index acaeb8b7d7..2a5c899570 100644
--- a/src/plugins/projectexplorer/toolchainmanager.cpp
+++ b/src/plugins/projectexplorer/toolchainmanager.cpp
@@ -76,7 +76,7 @@ ToolChainManagerPrivate::~ToolChainManagerPrivate()
}
static ToolChainManager *m_instance = nullptr;
-static ToolChainManagerPrivate *d;
+static ToolChainManagerPrivate *d = nullptr;
} // namespace Internal
@@ -103,8 +103,9 @@ ToolChainManager::ToolChainManager(QObject *parent) :
ToolChainManager::~ToolChainManager()
{
- delete d;
m_instance = nullptr;
+ delete d;
+ d = nullptr;
}
ToolChainManager *ToolChainManager::instance()
diff --git a/src/plugins/projectexplorer/toolchainoptionspage.cpp b/src/plugins/projectexplorer/toolchainoptionspage.cpp
index 15ebda4998..562c7c6d62 100644
--- a/src/plugins/projectexplorer/toolchainoptionspage.cpp
+++ b/src/plugins/projectexplorer/toolchainoptionspage.cpp
@@ -75,7 +75,7 @@ public:
}
}
- QVariant data(int column, int role) const
+ QVariant data(int column, int role) const override
{
switch (role) {
case Qt::DisplayRole:
diff --git a/src/plugins/projectexplorer/toolchainsettingsaccessor.cpp b/src/plugins/projectexplorer/toolchainsettingsaccessor.cpp
index 301ab75071..39b465bea4 100644
--- a/src/plugins/projectexplorer/toolchainsettingsaccessor.cpp
+++ b/src/plugins/projectexplorer/toolchainsettingsaccessor.cpp
@@ -287,7 +287,7 @@ QList<ToolChain *> ToolChainSettingsAccessor::toolChains(const QVariantMap &data
namespace ProjectExplorer {
-typedef QList<ToolChain *> TCList;
+using TCList = QList<ToolChain *>;
class TTC : public ToolChain
{
diff --git a/src/plugins/projectexplorer/userfileaccessor.cpp b/src/plugins/projectexplorer/userfileaccessor.cpp
index 8b40e798c3..84080445c4 100644
--- a/src/plugins/projectexplorer/userfileaccessor.cpp
+++ b/src/plugins/projectexplorer/userfileaccessor.cpp
@@ -52,159 +52,6 @@ const char OBSOLETE_VERSION_KEY[] = "ProjectExplorer.Project.Updater.FileVersion
const char SHARED_SETTINGS[] = "SharedSettings";
const char USER_STICKY_KEYS_KEY[] = "UserStickyKeys";
-// Version 1 is used in master post Qt Creator 1.3.x.
-// It was never used in any official release but is required for the
-// transition to later versions (which introduce support for targets).
-class UserFileVersion1Upgrader : public VersionUpgrader
-{
-public:
- UserFileVersion1Upgrader(UserFileAccessor *a) : VersionUpgrader(1, "1.3+git"), m_accessor(a) { }
- QVariantMap upgrade(const QVariantMap &map);
-
-private:
- struct TargetDescription
- {
- TargetDescription(const QString &tid, const QString &dn) :
- id(tid),
- displayName(dn)
- { }
-
- QString id;
- QString displayName;
- };
-
- UserFileAccessor *m_accessor;
-};
-
-// Version 2 is used in master post Qt Creator 2.0 alpha.
-class UserFileVersion2Upgrader : public VersionUpgrader
-{
-public:
- UserFileVersion2Upgrader() : VersionUpgrader(2, "2.0-alpha+git") { }
- QVariantMap upgrade(const QVariantMap &map) final;
-};
-
-// Version 3 reflect the move of symbian signing from run to build step.
-class UserFileVersion3Upgrader : public VersionUpgrader
-{
-public:
- UserFileVersion3Upgrader() : VersionUpgrader(3, "2.0-alpha2+git") { }
- QVariantMap upgrade(const QVariantMap &map) final;
-};
-
-// Version 4 reflects the introduction of deploy steps
-class UserFileVersion4Upgrader : public VersionUpgrader
-{
-public:
- UserFileVersion4Upgrader() : VersionUpgrader(4, "2.1pre1") { }
- QVariantMap upgrade(const QVariantMap &map) final;
-};
-
-// Version 5 reflects the introduction of new deploy steps for Symbian/Maemo
-class UserFileVersion5Upgrader : public VersionUpgrader
-{
-public:
- UserFileVersion5Upgrader() : VersionUpgrader(5, "2.1pre2") { }
- QVariantMap upgrade(const QVariantMap &map) final;
-};
-
-// Version 6 reflects the introduction of new deploy steps for Symbian/Maemo
-class UserFileVersion6Upgrader : public VersionUpgrader
-{
-public:
- UserFileVersion6Upgrader() : VersionUpgrader(6, "2.1pre3") { }
- QVariantMap upgrade(const QVariantMap &map) final;
-};
-
-// Version 7 reflects the introduction of new deploy configuration for Symbian
-class UserFileVersion7Upgrader : public VersionUpgrader
-{
-public:
- UserFileVersion7Upgrader() : VersionUpgrader(7, "2.1pre4") { }
- QVariantMap upgrade(const QVariantMap &map) final;
-};
-
-// Version 8 reflects the change of environment variable expansion rules,
-// turning some env variables into expandos, the change of argument quoting rules,
-// and the change of VariableManager's expansion syntax.
-class UserFileVersion8Upgrader : public VersionUpgrader
-{
-public:
- // pre5 because we renamed 2.2 to 2.1 later, so people already have 2.2pre4 files
- UserFileVersion8Upgrader() : VersionUpgrader(8, "2.2pre5") { }
- QVariantMap upgrade(const QVariantMap &map) final;
-};
-
-// Version 9 reflects the refactoring of the Maemo deploy step.
-class UserFileVersion9Upgrader : public VersionUpgrader
-{
-public:
- UserFileVersion9Upgrader() : VersionUpgrader(9, "2.3pre1") { }
- QVariantMap upgrade(const QVariantMap &map) final;
-};
-
-// Version 10 introduces disabling buildsteps, and handles upgrading custom process steps
-class UserFileVersion10Upgrader : public VersionUpgrader
-{
-public:
- UserFileVersion10Upgrader() : VersionUpgrader(10, "2.5pre1") { }
- QVariantMap upgrade(const QVariantMap &map) final;
-};
-
-// Version 11 introduces kits
-class UserFileVersion11Upgrader : public VersionUpgrader
-{
-public:
- UserFileVersion11Upgrader(UserFileAccessor *a) : VersionUpgrader(11, "2.6pre1"), m_accessor(a) { }
- ~UserFileVersion11Upgrader() final;
-
- QVariantMap upgrade(const QVariantMap &map) final;
-
-private:
- Kit *uniqueKit(Kit *k);
- void addBuildConfiguration(Kit *k, const QVariantMap &bc, int bcPos, int bcCount);
- void addDeployConfiguration(Kit *k, const QVariantMap &dc, int dcPos, int dcActive);
- void addRunConfigurations(Kit *k,
- const QMap<int, QVariantMap> &rcs, int activeRc, const QString &projectDir);
-
- void parseQtversionFile();
- void parseToolChainFile();
-
- class ToolChainExtraData {
- public:
- explicit ToolChainExtraData(const QString &mks = QString(), const QString &d = QString()) :
- m_mkspec(mks), m_debugger(d)
- { }
-
- QString m_mkspec;
- QString m_debugger;
- };
-
- QHash<QString, ToolChainExtraData> m_toolChainExtras;
- QHash<int, QString> m_qtVersionExtras;
-
- QHash<Kit *, QVariantMap> m_targets;
- UserFileAccessor *m_accessor;
-};
-
-// Version 12 reflects the move of environment settings from CMake/Qt4/Custom into
-// LocalApplicationRunConfiguration
-class UserFileVersion12Upgrader : public VersionUpgrader
-{
-public:
- UserFileVersion12Upgrader() : VersionUpgrader(12, "2.7pre1") { }
- QVariantMap upgrade(const QVariantMap &map) final;
-};
-
-// Version 13 reflects the move of environment settings from LocalApplicationRunConfiguration
-// into the EnvironmentAspect
-class UserFileVersion13Upgrader : public VersionUpgrader
-{
-public:
- UserFileVersion13Upgrader() : VersionUpgrader(13, "2.8") { }
- QVariantMap upgrade(const QVariantMap &map) final;
-};
-
// Version 14 Move builddir into BuildConfiguration
class UserFileVersion14Upgrader : public VersionUpgrader
{
@@ -263,6 +110,18 @@ private:
QVariantList m_sticky;
};
+// Version 18 renames "AutotoolsProjectManager.MakeStep.AdditionalArguments" to
+// "AutotoolsProjectManager.MakeStep.MakeArguments" to account for
+// sharing the MakeStep implementation
+class UserFileVersion18Upgrader : public VersionUpgrader
+{
+public:
+ UserFileVersion18Upgrader() : VersionUpgrader(18, "4.8-pre1") { }
+ QVariantMap upgrade(const QVariantMap &map) final;
+
+ static QVariant process(const QVariant &entry);
+};
+
} // namespace
//
@@ -421,7 +280,7 @@ public:
FileNameList UserFileBackUpStrategy::readFileCandidates(const FileName &baseFileName) const
{
- const UserFileAccessor *const ac = static_cast<const UserFileAccessor *>(accessor());
+ const auto *const ac = static_cast<const UserFileAccessor *>(accessor());
const FileName externalUser = ac->externalUserFile();
const FileName projectUser = ac->projectUserFile();
QTC_CHECK(!baseFileName.isEmpty());
@@ -458,23 +317,11 @@ UserFileAccessor::UserFileAccessor(Project *project) :
setSettingsId(ProjectExplorerPlugin::projectExplorerSettings().environmentId.toByteArray());
// Register Upgraders:
- addVersionUpgrader(std::make_unique<UserFileVersion1Upgrader>(this));
- addVersionUpgrader(std::make_unique<UserFileVersion2Upgrader>());
- addVersionUpgrader(std::make_unique<UserFileVersion3Upgrader>());
- addVersionUpgrader(std::make_unique<UserFileVersion4Upgrader>());
- addVersionUpgrader(std::make_unique<UserFileVersion5Upgrader>());
- addVersionUpgrader(std::make_unique<UserFileVersion6Upgrader>());
- addVersionUpgrader(std::make_unique<UserFileVersion7Upgrader>());
- addVersionUpgrader(std::make_unique<UserFileVersion8Upgrader>());
- addVersionUpgrader(std::make_unique<UserFileVersion9Upgrader>());
- addVersionUpgrader(std::make_unique<UserFileVersion10Upgrader>());
- addVersionUpgrader(std::make_unique<UserFileVersion11Upgrader>(this));
- addVersionUpgrader(std::make_unique<UserFileVersion12Upgrader>());
- addVersionUpgrader(std::make_unique<UserFileVersion13Upgrader>());
addVersionUpgrader(std::make_unique<UserFileVersion14Upgrader>());
addVersionUpgrader(std::make_unique<UserFileVersion15Upgrader>());
addVersionUpgrader(std::make_unique<UserFileVersion16Upgrader>());
addVersionUpgrader(std::make_unique<UserFileVersion17Upgrader>());
+ addVersionUpgrader(std::make_unique<UserFileVersion18Upgrader>());
}
Project *UserFileAccessor::project() const
@@ -611,1291 +458,6 @@ QVariantMap UserFileAccessor::prepareToWriteSettings(const QVariantMap &data) co
return result;
}
-// -------------------------------------------------------------------------
-// UserFileVersion1Upgrader:
-// -------------------------------------------------------------------------
-
-QVariantMap UserFileVersion1Upgrader::upgrade(const QVariantMap &map)
-{
- QVariantMap result;
-
- // The only difference between version 1 and 2 of the user file is that
- // we need to add targets.
-
- // Generate a list of all possible targets for the project:
- Project *project = m_accessor->project();
- QList<TargetDescription> targets;
- if (project->id() == "GenericProjectManager.GenericProject")
- targets << TargetDescription(QString::fromLatin1("GenericProjectManager.GenericTarget"),
- QCoreApplication::translate("GenericProjectManager::GenericTarget",
- "Desktop",
- "Generic desktop target display name"));
- else if (project->id() == "CMakeProjectManager.CMakeProject")
- targets << TargetDescription(QString::fromLatin1("CMakeProjectManager.DefaultCMakeTarget"),
- QCoreApplication::translate("CMakeProjectManager::Internal::CMakeTarget",
- "Desktop",
- "CMake Default target display name"));
- else if (project->id() == "Qt4ProjectManager.Qt4Project")
- targets << TargetDescription(QString::fromLatin1("Qt4ProjectManager.Target.DesktopTarget"),
- QCoreApplication::translate("QmakeProjectManager::Internal::Qt4Target",
- "Desktop",
- "Qt4 Desktop target display name"))
- << TargetDescription(QString::fromLatin1("Qt4ProjectManager.Target.MaemoEmulatorTarget"),
- QCoreApplication::translate("QmakeProjectManager::Internal::Qt4Target",
- "Maemo Emulator",
- "Qt4 Maemo Emulator target display name"))
- << TargetDescription(QString::fromLatin1("Qt4ProjectManager.Target.MaemoDeviceTarget"),
- QCoreApplication::translate("QmakeProjectManager::Internal::Qt4Target",
- "Maemo Device",
- "Qt4 Maemo Device target display name"));
- else if (project->id() == "QmlProjectManager.QmlProject")
- targets << TargetDescription(QString::fromLatin1("QmlProjectManager.QmlTarget"),
- QCoreApplication::translate("QmlProjectManager::QmlTarget",
- "QML Viewer",
- "QML Viewer target display name"));
- else
- return QVariantMap(); // We do not know how to handle this.
-
- result.insert("ProjectExplorer.Project.ActiveTarget", 0);
- result.insert("ProjectExplorer.Project.TargetCount", targets.count());
- int pos(0);
- foreach (const TargetDescription &td, targets) {
- QVariantMap targetMap;
- // Do not set displayName or icon!
- targetMap.insert("ProjectExplorer.ProjectConfiguration.Id", td.id);
-
- int count = map.value("ProjectExplorer.Project.BuildConfigurationCount").toInt();
- targetMap.insert("ProjectExplorer.Target.BuildConfigurationCount", count);
- for (int i = 0; i < count; ++i) {
- QString key(QString::fromLatin1("ProjectExplorer.Project.BuildConfiguration.") + QString::number(i));
- if (map.contains(key)) {
- QVariantMap bcMap = map.value(key).toMap();
- if (!bcMap.contains("Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild"))
- bcMap.insert("Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild", false);
- targetMap.insert(QString::fromLatin1("ProjectExplorer.Target.BuildConfiguration.") + QString::number(i),
- bcMap);
- }
- }
-
- count = map.value("ProjectExplorer.Project.RunConfigurationCount").toInt();
- for (int i = 0; i < count; ++i) {
- QString key(QString::fromLatin1("ProjectExplorer.Project.RunConfiguration.") + QString::number(i));
- if (map.contains(key))
- targetMap.insert(QString::fromLatin1("ProjectExplorer.Target.RunConfiguration.") + QString::number(i),
- map.value(key));
- }
-
- if (map.contains("ProjectExplorer.Project.ActiveBuildConfiguration"))
- targetMap.insert("ProjectExplorer.Target.ActiveBuildConfiguration",
- map.value("ProjectExplorer.Project.ActiveBuildConfiguration"));
- if (map.contains("ProjectExplorer.Project.ActiveRunConfiguration"))
- targetMap.insert("ProjectExplorer.Target.ActiveRunConfiguration",
- map.value("ProjectExplorer.Project.ActiveRunConfiguration"));
- if (map.contains("ProjectExplorer.Project.RunConfigurationCount"))
- targetMap.insert("ProjectExplorer.Target.RunConfigurationCount",
- map.value("ProjectExplorer.Project.RunConfigurationCount"));
-
- result.insert(QString::fromLatin1("ProjectExplorer.Project.Target.") + QString::number(pos), targetMap);
- ++pos;
- }
-
- // copy everything else:
- for (QVariantMap::const_iterator i = map.constBegin(); i != map.constEnd(); ++i) {
- if (i.key() == "ProjectExplorer.Project.ActiveBuildConfiguration" ||
- i.key() == "ProjectExplorer.Project.BuildConfigurationCount" ||
- i.key() == "ProjectExplorer.Project.ActiveRunConfiguration" ||
- i.key() == "ProjectExplorer.Project.RunConfigurationCount" ||
- i.key().startsWith("ProjectExplorer.Project.BuildConfiguration.") ||
- i.key().startsWith("ProjectExplorer.Project.RunConfiguration."))
- continue;
- result.insert(i.key(), i.value());
- }
-
- return result;
-}
-
-// -------------------------------------------------------------------------
-// UserFileVersion2Upgrader:
-// -------------------------------------------------------------------------
-
-QVariantMap UserFileVersion2Upgrader::upgrade(const QVariantMap &map)
-{
- QList<Change> changes;
- changes.append(qMakePair(QLatin1String("CMakeProjectManager.CMakeBuildConfiguration.UserEnvironmentChanges"),
- QLatin1String("ProjectExplorer.BuildConfiguration.UserEnvironmentChanges")));
- changes.append(qMakePair(QLatin1String("CMakeProjectManager.CMakeBuildConfiguration.ClearSystemEnvironment"),
- QLatin1String("ProjectExplorer.BuildConfiguration.ClearSystemEnvironment")));
- changes.append(qMakePair(QLatin1String("Qt4ProjectManager.Qt4BuildConfiguration.UserEnvironmentChanges"),
- QLatin1String("ProjectExplorer.BuildConfiguration.UserEnvironmentChanges")));
- changes.append(qMakePair(QLatin1String("Qt4ProjectManager.Qt4BuildConfiguration.ClearSystemEnvironment"),
- QLatin1String("ProjectExplorer.BuildConfiguration.ClearSystemEnvironment")));
-
- return renameKeys(changes, QVariantMap(map));
-}
-
-// -------------------------------------------------------------------------
-// UserFileVersion3Upgrader:
-// -------------------------------------------------------------------------
-
-// insert the additional build step:
-//<valuemap key="ProjectExplorer.BuildConfiguration.BuildStep.2" type="QVariantMap">
-// <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString">Create sis Package</value>
-// <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">Qt4ProjectManager.S60SignBuildStep</value>
-// <value key="Qt4ProjectManager.MakeStep.Clean" type="bool">false</value>
-// <valuelist key="Qt4ProjectManager.MakeStep.MakeArguments" type="QVariantList"/>
-// <value key="Qt4ProjectManager.MakeStep.MakeCommand" type="QString"></value>
-// <value key="Qt4ProjectManager.S60CreatePackageStep.Certificate" type="QString"></value>
-// <value key="Qt4ProjectManager.S60CreatePackageStep.Keyfile" type="QString"></value>
-// <value key="Qt4ProjectManager.S60CreatePackageStep.SignMode" type="int">0</value>
-//</valuemap>
-
-// remove the deprecated sign run settings from
-//<valuemap key="ProjectExplorer.Target.RunConfiguration.0" type="QVariantMap">
-// <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString">untitled1 on Symbian Device</value>
-// <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">Qt4ProjectManager.S60DeviceRunConfiguration</value>
-// <valuelist key="Qt4ProjectManager.S60DeviceRunConfiguration.CommandLineArguments" type="QVariantList"/>
-// <value key="Qt4ProjectManager.S60DeviceRunConfiguration.CustomKeyPath" type="QString"></value>
-// <value key="Qt4ProjectManager.S60DeviceRunConfiguration.CustomSignaturePath" type="QString"></value>
-// <value key="Qt4ProjectManager.S60DeviceRunConfiguration.ProFile" type="QString">untitled1.pro</value>
-// <value key="Qt4ProjectManager.S60DeviceRunConfiguration.SerialPortName" type="QString">COM3</value>
-// <value key="Qt4ProjectManager.S60DeviceRunConfiguration.SigningMode" type="int">0</value>
-//</valuemap>
-
-QVariantMap UserFileVersion3Upgrader::upgrade(const QVariantMap &map)
-{
- QVariantMap result;
- QMapIterator<QString, QVariant> it(map);
- while (it.hasNext()) {
- it.next();
- const QString &targetKey = it.key();
- // check for target info
- if (!targetKey.startsWith("ProjectExplorer.Project.Target.")) {
- result.insert(targetKey, it.value());
- continue;
- }
- const QVariantMap &originalTarget = it.value().toMap();
- result.insert(targetKey, originalTarget);
- }
- return result;
-}
-
-// -------------------------------------------------------------------------
-// UserFileVersion4Upgrader:
-// -------------------------------------------------------------------------
-
-// Move packaging steps from build steps into deploy steps
-QVariantMap UserFileVersion4Upgrader::upgrade(const QVariantMap &map)
-{
- QVariantMap result;
- QMapIterator<QString, QVariant> it(map);
- while (it.hasNext()) {
- it.next();
- const QString &globalKey = it.key();
- // check for target info
- if (!globalKey.startsWith("ProjectExplorer.Project.Target.")) {
- result.insert(globalKey, it.value());
- continue;
- }
- const QVariantMap &originalTarget = it.value().toMap();
- // check for maemo device target
- if (originalTarget.value("ProjectExplorer.ProjectConfiguration.Id")
- != "Qt4ProjectManager.Target.MaemoDeviceTarget")
- {
- result.insert(globalKey, originalTarget);
- continue;
- }
-
- QVariantMap newTarget;
- QMapIterator<QString, QVariant> targetIt(originalTarget);
- while (targetIt.hasNext()) {
- targetIt.next();
- const QString &targetKey = targetIt.key();
-
- if (targetKey.startsWith("ProjectExplorer.Target.RunConfiguration.")) {
- const QVariantMap &runConfigMap = targetIt.value().toMap();
- const QLatin1String maemoRcId("Qt4ProjectManager.MaemoRunConfiguration");
- if (runConfigMap.value("ProjectExplorer.ProjectConfiguration.Id").toString()
- == maemoRcId) {
- QVariantMap newRunConfigMap;
- for (QVariantMap::ConstIterator rcMapIt = runConfigMap.constBegin();
- rcMapIt != runConfigMap.constEnd(); ++rcMapIt) {
- const QLatin1String oldProFileKey(".ProFile");
- if (rcMapIt.key() == oldProFileKey) {
- newRunConfigMap.insert(maemoRcId + oldProFileKey,
- rcMapIt.value());
- } else {
- newRunConfigMap.insert(rcMapIt.key(),
- rcMapIt.value());
- }
- }
- newTarget.insert(targetKey, newRunConfigMap);
- continue;
- }
- }
-
- if (!targetKey.startsWith("ProjectExplorer.Target.BuildConfiguration.")) {
- newTarget.insert(targetKey, targetIt.value());
- continue;
- }
-
- bool movedBs = false;
- const QVariantMap &originalBc = targetIt.value().toMap();
- QVariantMap newBc;
- QMapIterator<QString, QVariant> bcIt(originalBc);
- while (bcIt.hasNext()) {
- bcIt.next();
- const QString &bcKey = bcIt.key();
- if (!bcKey.startsWith("ProjectExplorer.BuildConfiguration.BuildStep.")) {
- newBc.insert(bcKey, bcIt.value());
- continue;
- }
-
- const QVariantMap &buildStep = bcIt.value().toMap();
- if ((buildStep.value("ProjectExplorer.ProjectConfiguration.Id").toString() ==
- "Qt4ProjectManager.S60SignBuildStep")
- || (buildStep.value("ProjectExplorer.ProjectConfiguration.Id").toString() ==
- "Qt4ProjectManager.MaemoPackageCreationStep")) {
- movedBs = true;
- newBc.insert("ProjectExplorer.BuildConfiguration.DeployStep.0", buildStep);
- } else {
- newBc.insert(bcKey, buildStep);
- }
- }
- if (movedBs) {
- // adjust counts:
- newBc.insert("ProjectExplorer.BuildConfiguration.DeployStepsCount", 1);
- newBc.insert("ProjectExplorer.BuildConfiguration.BuildStepsCount",
- newBc.value("ProjectExplorer.BuildConfiguration.BuildStepsCount").toInt() - 1);
- }
- newTarget.insert(targetKey, newBc);
- }
- result.insert(globalKey, newTarget);
- }
- return result;
-}
-
-// -------------------------------------------------------------------------
-// UserFileVersion5Upgrader:
-// -------------------------------------------------------------------------
-
-// Move packaging steps from build steps into deploy steps
-QVariantMap UserFileVersion5Upgrader::upgrade(const QVariantMap &map)
-{
- QVariantMap result;
- QMapIterator<QString, QVariant> it(map);
- while (it.hasNext()) {
- it.next();
- const QString &globalKey = it.key();
- // check for target info
- if (!globalKey.startsWith("ProjectExplorer.Project.Target.")) {
- result.insert(globalKey, it.value());
- continue;
- }
- const QVariantMap &originalTarget = it.value().toMap();
- // check for maemo device target
- if (originalTarget.value("ProjectExplorer.ProjectConfiguration.Id")
- != "Qt4ProjectManager.Target.MaemoDeviceTarget") {
- result.insert(globalKey, originalTarget);
- continue;
- }
-
- QVariantMap newTarget;
- QMapIterator<QString, QVariant> targetIt(originalTarget);
- while (targetIt.hasNext()) {
- targetIt.next();
- const QString &targetKey = targetIt.key();
- if (!targetKey.startsWith("ProjectExplorer.Target.BuildConfiguration.")) {
- newTarget.insert(targetKey, targetIt.value());
- continue;
- }
-
- const QVariantMap &originalBc = targetIt.value().toMap();
- QVariantMap newBc = originalBc;
- QVariantMap newDeployStep;
-
- if (originalTarget.value("ProjectExplorer.ProjectConfiguration.Id")
- == "Qt4ProjectManager.Target.S60DeviceTarget") {
- newDeployStep.insert("ProjectExplorer.ProjectConfiguration.Id",
- "Qt4ProjectManager.S60DeployStep");
- } else {
- newDeployStep.insert("ProjectExplorer.ProjectConfiguration.Id",
- "Qt4ProjectManager.MaemoDeployStep");
- }
-
- int deployCount = newBc.value("ProjectExplorer.BuildConfiguration.DeployStepsCount", 0).toInt();
- newBc.insert(QString::fromLatin1("ProjectExplorer.BuildConfiguration.DeployStep.") + QString::number(deployCount),
- newDeployStep);
- newBc.insert("ProjectExplorer.BuildConfiguration.DeployStepsCount", deployCount + 1);
-
- newTarget.insert(targetKey, newBc);
- }
- result.insert(globalKey, newTarget);
- }
- return result;
-}
-
-// -------------------------------------------------------------------------
-// UserFileVersion6Upgrader:
-// -------------------------------------------------------------------------
-
-// Introduce DeployConfiguration and BuildStepLists
-QVariantMap UserFileVersion6Upgrader::upgrade(const QVariantMap &map)
-{
- QVariantMap result;
- QMapIterator<QString, QVariant> it(map);
- while (it.hasNext()) {
- it.next();
- const QString &globalKey = it.key();
- // check for target info
- if (!globalKey.startsWith("ProjectExplorer.Project.Target.")) {
- result.insert(globalKey, it.value());
- continue;
- }
-
- QVariantMap newDc;
- const QVariantMap &originalTarget = it.value().toMap();
- QVariantMap newTarget;
- QVariantMap deploySteps;
- QString deploymentName = QCoreApplication::translate("ProjectExplorer::UserFileHandler", "No deployment");
-
- QMapIterator<QString, QVariant> targetIt(originalTarget);
- while (targetIt.hasNext()) {
- targetIt.next();
- const QString &targetKey = targetIt.key();
-
- if (targetKey == "ProjectExplorer.ProjectConfiguration.Id") {
- if (targetIt.value().toString() == "Qt4ProjectManager.Target.MaemoDeviceTarget")
- deploymentName = QCoreApplication::translate("ProjectExplorer::UserFileHandler", "Deploy to Maemo device");
- }
-
- if (!targetKey.startsWith("ProjectExplorer.Target.BuildConfiguration.")) {
- newTarget.insert(targetKey, targetIt.value());
- continue;
- }
-
- QVariantMap buildSteps;
- QVariantMap cleanSteps;
- const QVariantMap &originalBc = targetIt.value().toMap();
- QVariantMap newBc;
-
- QMapIterator<QString, QVariant> bcIt(originalBc);
- while (bcIt.hasNext())
- {
- bcIt.next();
- const QString &bcKey = bcIt.key();
- if (bcKey.startsWith("ProjectExplorer.BuildConfiguration.BuildStep.")) {
- QString position = bcKey.mid(45);
- buildSteps.insert(QString::fromLatin1("ProjectExplorer.BuildStepList.Step.") + position, bcIt.value());
- continue;
- }
- if (bcKey.startsWith("ProjectExplorer.BuildConfiguration.BuildStepsCount")) {
- buildSteps.insert("ProjectExplorer.BuildStepList.StepsCount", bcIt.value());
- continue;
- }
- if (bcKey.startsWith("ProjectExplorer.BuildConfiguration.CleanStep.")) {
- QString position = bcKey.mid(45);
- cleanSteps.insert(QString::fromLatin1("ProjectExplorer.BuildStepList.Step.") + position, bcIt.value());
- continue;
- }
- if (bcKey.startsWith("ProjectExplorer.BuildConfiguration.CleanStepsCount")) {
- cleanSteps.insert("ProjectExplorer.BuildStepList.StepsCount", bcIt.value());
- continue;
- }
- if (bcKey.startsWith("ProjectExplorer.BuildConfiguration.DeployStep.")) {
- QString position = bcKey.mid(46);
- deploySteps.insert(QString::fromLatin1("ProjectExplorer.BuildStepList.Step.") + position, bcIt.value());
- continue;
- }
- if (bcKey.startsWith("ProjectExplorer.BuildConfiguration.DeployStepsCount")) {
- deploySteps.insert("ProjectExplorer.BuildStepList.StepsCount", bcIt.value());
- continue;
- }
- newBc.insert(bcKey, bcIt.value());
- }
- buildSteps.insert("ProjectExplorer.ProjectConfiguration.DisplayName", "Build");
- buildSteps.insert("ProjectExplorer.ProjectConfiguration.Id", "ProjectExplorer.BuildSteps.Build");
- cleanSteps.insert("ProjectExplorer.ProjectConfiguration.DisplayName", "Clean");
- cleanSteps.insert("ProjectExplorer.ProjectConfiguration.Id", "ProjectExplorer.BuildSteps.Clean");
- newBc.insert("ProjectExplorer.BuildConfiguration.BuildStepList.0", buildSteps);
- newBc.insert("ProjectExplorer.BuildConfiguration.BuildStepList.1", cleanSteps);
- newBc.insert("ProjectExplorer.BuildConfiguration.BuildStepListCount", 2);
- newTarget.insert(targetKey, newBc);
- }
-
- // Only insert one deploy configuration:
- deploySteps.insert("ProjectExplorer.ProjectConfiguration.DisplayName", "Deploy");
- deploySteps.insert("ProjectExplorer.ProjectConfiguration.Id", "ProjectExplorer.BuildSteps.Deploy");
- newDc.insert("ProjectExplorer.BuildConfiguration.BuildStepList.0", deploySteps);
- newDc.insert("ProjectExplorer.BuildConfiguration.BuildStepListCount", 1);
- newDc.insert("ProjectExplorer.ProjectConfiguration.DisplayName", deploymentName);
- newDc.insert("ProjectExplorer.ProjectConfiguration.Id", "ProjectExplorer.DefaultDeployConfiguration");
-
- newTarget.insert("ProjectExplorer.Target.DeployConfigurationCount", 1);
- newTarget.insert("ProjectExplorer.Target.ActiveDeployConfiguration", 0);
- newTarget.insert("ProjectExplorer.Target.DeployConfiguration.0", newDc);
- result.insert(globalKey, newTarget);
- }
- return result;
-}
-
-// -------------------------------------------------------------------------
-// UserFileVersion7Upgrader:
-// -------------------------------------------------------------------------
-
-// new implementation of DeployConfiguration
-QVariantMap UserFileVersion7Upgrader::upgrade(const QVariantMap &map)
-{
- QVariantMap result;
- QMapIterator<QString, QVariant> it(map);
- while (it.hasNext()) {
- it.next();
- const QString &globalKey = it.key();
- // check for target info
- if (!globalKey.startsWith("ProjectExplorer.Project.Target.")) {
- result.insert(globalKey, it.value());
- continue;
- }
- const QVariantMap &originalTarget = it.value().toMap();
- result.insert(globalKey, originalTarget);
- }
- return result;
-}
-
-// -------------------------------------------------------------------------
-// UserFileVersion8Upgrader:
-// -------------------------------------------------------------------------
-
-// Argument list reinterpretation
-
-static const char * const argListKeys[] = {
- "ProjectExplorer.Project.Target.",
- "ProjectExplorer.Target.BuildConfiguration.|ProjectExplorer.Target.DeployConfiguration.",
- "ProjectExplorer.BuildConfiguration.BuildStepList.",
- "ProjectExplorer.BuildStepList.Step.",
- "GenericProjectManager.GenericMakeStep.MakeArguments",
- "QtProjectManager.QMakeBuildStep.QMakeArguments",
- "Qt4ProjectManager.MakeStep.MakeArguments",
- "CMakeProjectManager.MakeStep.AdditionalArguments",
- nullptr,
- nullptr,
- nullptr,
- "ProjectExplorer.Target.RunConfiguration.",
- "ProjectExplorer.CustomExecutableRunConfiguration.Arguments",
- "Qt4ProjectManager.Qt4RunConfiguration.CommandLineArguments",
- "CMakeProjectManager.CMakeRunConfiguration.Arguments",
- nullptr,
- nullptr,
- nullptr
-};
-
-static const char * const lameArgListKeys[] = {
- "ProjectExplorer.Project.Target.",
- "ProjectExplorer.Target.BuildConfiguration.|ProjectExplorer.Target.DeployConfiguration.",
- "ProjectExplorer.BuildConfiguration.BuildStepList.",
- "ProjectExplorer.BuildStepList.Step.",
- "ProjectExplorer.ProcessStep.Arguments",
- nullptr,
- nullptr,
- nullptr,
- "ProjectExplorer.Target.RunConfiguration.",
- "Qt4ProjectManager.MaemoRunConfiguration.Arguments",
- "Qt4ProjectManager.S60DeviceRunConfiguration.CommandLineArguments",
- "QmlProjectManager.QmlRunConfiguration.QDeclarativeViewerArguments",
- nullptr,
- nullptr,
- nullptr
-};
-
-inline static bool isSpecialChar(ushort c)
-{
- // Chars that should be quoted (TM). This includes:
- static const uchar iqm[] = {
- 0xff, 0xff, 0xff, 0xff, 0xdf, 0x07, 0x00, 0xd8,
- 0x00, 0x00, 0x00, 0x38, 0x01, 0x00, 0x00, 0x78
- }; // 0-32 \'"$`<>|;&(){}*?#!~[]
-
- return (c < sizeof(iqm) * 8) && (iqm[c / 8] & (1 << (c & 7)));
-}
-
-inline static bool hasSpecialChars(const QString &arg)
-{
- for (int x = arg.length() - 1; x >= 0; --x)
- if (isSpecialChar(arg.unicode()[x].unicode()))
- return true;
- return false;
-}
-
-// These were split according to sane (even if a bit arcane) rules
-static QVariant version8ArgNodeHandler(const QVariant &var)
-{
- QString ret;
- foreach (const QVariant &svar, var.toList()) {
- if (HostOsInfo::isAnyUnixHost()) {
- // We don't just addArg, so we don't disarm existing env expansions.
- // This is a bit fuzzy logic ...
- QString s = svar.toString();
- s.replace('\\', "\\\\");
- s.replace('"', "\\\"");
- s.replace('`', "\\`");
- if (s != svar.toString() || hasSpecialChars(s))
- s.prepend('"').append('"');
- QtcProcess::addArgs(&ret, s);
- } else {
- // Under windows, env expansions cannot be quoted anyway.
- QtcProcess::addArg(&ret, svar.toString());
- }
- }
- return QVariant(ret);
-}
-
-// These were just split on whitespace
-static QVariant version8LameArgNodeHandler(const QVariant &var)
-{
- QString ret;
- foreach (const QVariant &svar, var.toList())
- QtcProcess::addArgs(&ret, svar.toString());
- return QVariant(ret);
-}
-
-// Environment variable reinterpretation
-
-static const char * const envExpandedKeys[] = {
- "ProjectExplorer.Project.Target.",
- "ProjectExplorer.Target.BuildConfiguration."
- "|ProjectExplorer.Target.DeployConfiguration.",
- "ProjectExplorer.BuildConfiguration.BuildStepList.",
- "ProjectExplorer.BuildStepList.Step.",
- "ProjectExplorer.ProcessStep.WorkingDirectory",
- "ProjectExplorer.ProcessStep.Command",
- "ProjectExplorer.ProcessStep.Arguments",
- "GenericProjectManager.GenericMakeStep.MakeCommand",
- "GenericProjectManager.GenericMakeStep.MakeArguments",
- "GenericProjectManager.GenericMakeStep.BuildTargets",
- "QtProjectManager.QMakeBuildStep.QMakeArguments",
- "Qt4ProjectManager.MakeStep.MakeCommand",
- "Qt4ProjectManager.MakeStep.MakeArguments",
- "CMakeProjectManager.MakeStep.AdditionalArguments",
- "CMakeProjectManager.MakeStep.BuildTargets",
- nullptr,
- nullptr,
- "Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory",
- nullptr,
- "ProjectExplorer.Target.RunConfiguration.",
- "ProjectExplorer.CustomExecutableRunConfiguration.WorkingDirectory",
- "ProjectExplorer.CustomExecutableRunConfiguration.Executable",
- "ProjectExplorer.CustomExecutableRunConfiguration.Arguments",
- "Qt4ProjectManager.Qt4RunConfiguration.UserWorkingDirectory",
- "Qt4ProjectManager.Qt4RunConfiguration.CommandLineArguments",
- "Qt4ProjectManager.MaemoRunConfiguration.Arguments",
- "Qt4ProjectManager.S60DeviceRunConfiguration.CommandLineArguments",
- "CMakeProjectManager.CMakeRunConfiguration.UserWorkingDirectory",
- "CMakeProjectManager.CMakeRunConfiguration.Arguments",
- 0,
- 0,
- 0
-};
-
-static QString version8NewVar(const QString &old)
-{
- QString ret = old;
- if (HostOsInfo::isAnyUnixHost()) {
- ret.prepend("${");
- ret.append('}');
- } else {
- ret.prepend('%');
- ret.append('%');
- }
- return ret;
-}
-
-// Translate DOS-like env var expansions into Unix-like ones and vice versa.
-// On the way, change {SOURCE,BUILD}DIR env expansions to %{}-expandos
-static QVariant version8EnvNodeTransform(const QVariant &var)
-{
- QString result = var.toString();
-
- result.replace(QRegExp("%SOURCEDIR%|\\$(SOURCEDIR\\b|\\{SOURCEDIR\\})"), "%{sourceDir}");
- result.replace(QRegExp("%BUILDDIR%|\\$(BUILDDIR\\b|\\{BUILDDIR\\})"), "%{buildDir}");
- if (HostOsInfo::isAnyUnixHost()) {
- for (int vStart = -1, i = 0; i < result.length(); ) {
- QChar c = result.at(i++);
- if (c == '%') {
- if (vStart > 0 && vStart < i - 1) {
- QString nv = version8NewVar(result.mid(vStart, i - 1 - vStart));
- result.replace(vStart - 1, i - vStart + 1, nv);
- i = vStart - 1 + nv.length();
- vStart = -1;
- } else {
- vStart = i;
- }
- } else if (vStart > 0) {
- // Sanity check so we don't catch too much garbage
- if (!c.isLetterOrNumber() && c != '_')
- vStart = -1;
- }
- }
- } else {
- enum { BASE, OPTIONALVARIABLEBRACE, VARIABLE, BRACEDVARIABLE } state = BASE;
- int vStart = -1;
-
- for (int i = 0; i < result.length();) {
- QChar c = result.at(i++);
- if (state == BASE) {
- if (c == '$')
- state = OPTIONALVARIABLEBRACE;
- } else if (state == OPTIONALVARIABLEBRACE) {
- if (c == '{') {
- state = BRACEDVARIABLE;
- vStart = i;
- } else if (c.isLetterOrNumber() || c == '_') {
- state = VARIABLE;
- vStart = i - 1;
- } else {
- state = BASE;
- }
- } else if (state == BRACEDVARIABLE) {
- if (c == '}') {
- QString nv = version8NewVar(result.mid(vStart, i - 1 - vStart));
- result.replace(vStart - 2, i - vStart + 2, nv);
- i = vStart + nv.length();
- state = BASE;
- }
- } else if (state == VARIABLE) {
- if (!c.isLetterOrNumber() && c != '_') {
- QString nv = version8NewVar(result.mid(vStart, i - 1 - vStart));
- result.replace(vStart - 1, i - vStart, nv);
- i = vStart - 1 + nv.length(); // On the same char - could be next expansion.
- state = BASE;
- }
- }
- }
- if (state == VARIABLE) {
- QString nv = version8NewVar(result.mid(vStart));
- result.truncate(vStart - 1);
- result += nv;
- }
- }
-
- return QVariant(result);
-}
-
-static QVariant version8EnvNodeHandler(const QVariant &var)
-{
- if (var.type() != QVariant::List)
- return version8EnvNodeTransform(var);
-
- QVariantList vl;
- foreach (const QVariant &svar, var.toList())
- vl << version8EnvNodeTransform(svar);
- return vl;
-}
-
-// VariableManager expando reinterpretation
-
-static const char * const varExpandedKeys[] = {
- "ProjectExplorer.Project.Target.",
- "ProjectExplorer.Target.BuildConfiguration."
- "|ProjectExplorer.Target.DeployConfiguration.",
- "ProjectExplorer.BuildConfiguration.BuildStepList.",
- "ProjectExplorer.BuildStepList.Step.",
- "GenericProjectManager.GenericMakeStep.MakeCommand",
- "GenericProjectManager.GenericMakeStep.MakeArguments",
- "GenericProjectManager.GenericMakeStep.BuildTargets",
- 0,
- 0,
- 0,
- 0,
- 0
-};
-
-// Translate old-style ${} var expansions into new-style %{} ones
-static QVariant version8VarNodeTransform(const QVariant &var)
-{
- static const QSet<QString> map({
- "CURRENT_DOCUMENT:absoluteFilePath",
- "CURRENT_DOCUMENT:absolutePath",
- "CURRENT_DOCUMENT:baseName",
- "CURRENT_DOCUMENT:canonicalPath",
- "CURRENT_DOCUMENT:canonicalFilePath",
- "CURRENT_DOCUMENT:completeBaseName",
- "CURRENT_DOCUMENT:completeSuffix",
- "CURRENT_DOCUMENT:fileName",
- "CURRENT_DOCUMENT:filePath",
- "CURRENT_DOCUMENT:path",
- "CURRENT_DOCUMENT:suffix"
- });
-
- QString str = var.toString();
- int pos = 0;
- forever {
- int openPos = str.indexOf("${", pos);
- if (openPos < 0)
- break;
- int varPos = openPos + 2;
- int closePos = str.indexOf('}', varPos);
- if (closePos < 0)
- break;
- if (map.contains(str.mid(varPos, closePos - varPos)))
- str[openPos] = '%';
- pos = closePos + 1;
- }
- return QVariant(str);
-}
-
-static QVariant version8VarNodeHandler(const QVariant &var)
-{
- if (var.type() != QVariant::List)
- return version8VarNodeTransform(var);
-
- QVariantList vl;
- foreach (const QVariant &svar, var.toList())
- vl << version8VarNodeTransform(svar);
- return vl;
-}
-
-QVariantMap UserFileVersion8Upgrader::upgrade(const QVariantMap &map)
-{
- const char * const *p1 = argListKeys;
- QVariantMap rmap1 = processHandlerNodes(buildHandlerNodes(&p1), map, version8ArgNodeHandler);
- const char * const *p2 = lameArgListKeys;
- QVariantMap rmap2 = processHandlerNodes(buildHandlerNodes(&p2), rmap1, version8LameArgNodeHandler);
- const char * const *p3 = envExpandedKeys;
- QVariantMap rmap3 = processHandlerNodes(buildHandlerNodes(&p3), rmap2, version8EnvNodeHandler);
- const char * const *p4 = varExpandedKeys;
- return processHandlerNodes(buildHandlerNodes(&p4), rmap3, version8VarNodeHandler);
-}
-
-// --------------------------------------------------------------------
-// UserFileVersion9Upgrader:
-// --------------------------------------------------------------------
-
-QVariantMap UserFileVersion9Upgrader::upgrade(const QVariantMap &map)
-{
- QVariantMap result;
- QMapIterator<QString, QVariant> globalIt(map);
- while (globalIt.hasNext()) {
- globalIt.next();
- const QString &globalKey = globalIt.key();
- // check for target info
- if (!globalKey.startsWith("ProjectExplorer.Project.Target.")) {
- result.insert(globalKey, globalIt.value());
- continue;
- }
-
- const QVariantMap &origTargetMap = globalIt.value().toMap();
- const QString targetIdKey = "ProjectExplorer.ProjectConfiguration.Id";
- // check for maemo device target
- if (origTargetMap.value(targetIdKey) != "Qt4ProjectManager.Target.MaemoDeviceTarget"
- && origTargetMap.value(targetIdKey) != "Qt4ProjectManager.Target.HarmattanDeviceTarget"
- && origTargetMap.value(targetIdKey) != "Qt4ProjectManager.Target.MeegoDeviceTarget")
- {
- result.insert(globalKey, origTargetMap);
- continue;
- }
-
- QVariantMap newTargetMap;
- QMapIterator<QString, QVariant> targetIt(origTargetMap);
- while (targetIt.hasNext()) {
- targetIt.next();
- if (!targetIt.key().startsWith("ProjectExplorer.Target.DeployConfiguration.")) {
- newTargetMap.insert(targetIt.key(), targetIt.value());
- continue;
- }
-
- QVariantMap deployConfMap = targetIt.value().toMap();
- deployConfMap.insert("ProjectExplorer.ProjectConfiguration.Id", "2.2MaemoDeployConfig");
- newTargetMap.insert(targetIt.key(), deployConfMap);
- }
- result.insert(globalKey, newTargetMap);
- }
- return result;
-}
-
-// --------------------------------------------------------------------
-// UserFileVersion10Upgrader:
-// --------------------------------------------------------------------
-
-QVariantMap UserFileVersion10Upgrader::upgrade(const QVariantMap &map)
-{
- QList<Change> changes;
- changes.append(qMakePair(QLatin1String("ProjectExplorer.ProcessStep.Enabled"),
- QLatin1String("ProjectExplorer.BuildStep.Enabled")));
- return renameKeys(changes, QVariantMap(map));
-}
-
-// --------------------------------------------------------------------
-// UserFileVersion11Upgrader:
-// --------------------------------------------------------------------
-
-UserFileVersion11Upgrader::~UserFileVersion11Upgrader()
-{
- QList<Kit *> knownKits = KitManager::kits();
- foreach (Kit *k, m_targets.keys()) {
- if (!knownKits.contains(k))
- KitManager::deleteKit(k);
- }
- m_targets.clear();
-}
-
-static inline int targetId(const QString &targetKey)
-{
- return targetKey.midRef(targetKey.lastIndexOf('.') + 1).toInt();
-}
-
-QVariantMap UserFileVersion11Upgrader::upgrade(const QVariantMap &map)
-{
- // Read in old data to help with the transition:
- parseQtversionFile();
- parseToolChainFile();
-
- QVariantMap result;
- foreach (Kit *k, KitManager::kits())
- m_targets.insert(k, QVariantMap());
-
- QMapIterator<QString, QVariant> globalIt(map);
- int activeTarget = map.value("ProjectExplorer.Project.ActiveTarget", 0).toInt();
-
- while (globalIt.hasNext()) {
- globalIt.next();
- const QString &globalKey = globalIt.key();
- // Keep everything but targets:
- if (globalKey == "ProjectExplorer.Project.ActiveTarget")
- continue;
- if (!globalKey.startsWith("ProjectExplorer.Project.Target.")) {
- result.insert(globalKey, globalIt.value());
- continue;
- }
-
- // Update Targets:
- const QVariantMap &target = globalIt.value().toMap();
- int targetPos = targetId(globalKey);
-
- QVariantMap extraTargetData;
- QMap<int, QVariantMap> bcs;
- int activeBc = -1;
- QMap<int, QVariantMap> dcs;
- int activeDc = -1;
- QMap<int, QVariantMap> rcs;
- int activeRc = -1;
-
- // Read old target:
- QMapIterator<QString, QVariant> targetIt(target);
- while (targetIt.hasNext()) {
- targetIt.next();
- const QString &targetKey = targetIt.key();
-
- // BuildConfigurations:
- if (targetKey == "ProjectExplorer.Target.ActiveBuildConfiguration")
- activeBc = targetIt.value().toInt();
- else if (targetKey == "ProjectExplorer.Target.BuildConfigurationCount")
- continue;
- else if (targetKey.startsWith("ProjectExplorer.Target.BuildConfiguration."))
- bcs.insert(targetId(targetKey), targetIt.value().toMap());
- else
-
- // DeployConfigurations:
- if (targetKey == "ProjectExplorer.Target.ActiveDeployConfiguration")
- activeDc = targetIt.value().toInt();
- else if (targetKey == "ProjectExplorer.Target.DeployConfigurationCount")
- continue;
- else if (targetKey.startsWith("ProjectExplorer.Target.DeployConfiguration."))
- dcs.insert(targetId(targetKey), targetIt.value().toMap());
- else
-
- // RunConfigurations:
- if (targetKey == "ProjectExplorer.Target.ActiveRunConfiguration")
- activeRc = targetIt.value().toInt();
- else if (targetKey == "ProjectExplorer.Target.RunConfigurationCount")
- continue;
- else if (targetKey.startsWith("ProjectExplorer.Target.RunConfiguration."))
- rcs.insert(targetId(targetKey), targetIt.value().toMap());
-
- // Rest (the target's ProjectConfiguration settings only as there is nothing else):
- else
- extraTargetData.insert(targetKey, targetIt.value());
- }
- const QString oldTargetId = extraTargetData.value("ProjectExplorer.ProjectConfiguration.Id").toString();
-
- // Check each BCs/DCs and create profiles as needed
- auto rawKit = new Kit; // Do not needlessly use Core::Ids
- QMapIterator<int, QVariantMap> buildIt(bcs);
- while (buildIt.hasNext()) {
- buildIt.next();
- int bcPos = buildIt.key();
- const QVariantMap &bc = buildIt.value();
- Kit *tmpKit = rawKit;
-
- const auto desktopDeviceIcon = FileName::fromLatin1(":///DESKTOP///");
-
- if (oldTargetId == "Qt4ProjectManager.Target.AndroidDeviceTarget") {
- tmpKit->setIconPath(FileName::fromLatin1(":/android/images/QtAndroid.png"));
- tmpKit->setValue("PE.Profile.DeviceType", QString::fromLatin1("Desktop"));
- tmpKit->setValue("PE.Profile.Device", QString());
- } else if (oldTargetId == "RemoteLinux.EmbeddedLinuxTarget") {
- tmpKit->setIconPath(desktopDeviceIcon);
- tmpKit->setValue("PE.Profile.DeviceType", QString::fromLatin1("GenericLinuxOsType"));
- tmpKit->setValue("PE.Profile.Device", QString());
- } else if (oldTargetId == "Qt4ProjectManager.Target.HarmattanDeviceTarget") {
- tmpKit->setIconPath(FileName::fromLatin1(":/projectexplorer/images/MaemoDevice.png"));
- tmpKit->setValue("PE.Profile.DeviceType", QString::fromLatin1("HarmattanOsType"));
- tmpKit->setValue("PE.Profile.Device", QString());
- } else if (oldTargetId == "Qt4ProjectManager.Target.MaemoDeviceTarget") {
- tmpKit->setIconPath(FileName::fromLatin1(":/projectexplorer/images/MaemoDevice.png"));
- tmpKit->setValue("PE.Profile.DeviceType", QString::fromLatin1("Maemo5OsType"));
- tmpKit->setValue("PE.Profile.Device", QString());
- } else if (oldTargetId == "Qt4ProjectManager.Target.MeegoDeviceTarget") {
- tmpKit->setIconPath(FileName::fromLatin1(":/projectexplorer/images/MaemoDevice.png"));
- tmpKit->setValue("PE.Profile.DeviceType", QString::fromLatin1("MeegoOsType"));
- tmpKit->setValue("PE.Profile.Device", QString());
- } else if (oldTargetId == "Qt4ProjectManager.Target.S60DeviceTarget") {
- tmpKit->setIconPath(FileName::fromLatin1(":/projectexplorer/images/SymbianDevice.png"));
- tmpKit->setValue("PE.Profile.DeviceType", QString::fromLatin1("Qt4ProjectManager.SymbianDevice"));
- tmpKit->setValue("PE.Profile.Device", QString::fromLatin1("Symbian Device"));
- } else if (oldTargetId == "Qt4ProjectManager.Target.QtSimulatorTarget") {
- tmpKit->setIconPath(FileName::fromLatin1(":/projectexplorer/images/Simulator.png"));
- tmpKit->setValue("PE.Profile.DeviceType", QString::fromLatin1("Desktop"));
- tmpKit->setValue("PE.Profile.Device", QString::fromLatin1("Desktop Device"));
- } else {
- tmpKit->setIconPath(desktopDeviceIcon);
- tmpKit->setValue("PE.Profile.DeviceType", QString::fromLatin1("Desktop"));
- tmpKit->setValue("PE.Profile.Device", QString::fromLatin1("Desktop Device"));
- }
-
- // Tool chain
- QString tcId = bc.value("CMakeProjectManager.CMakeBuildConfiguration.ToolChain").toString();
- if (tcId.isEmpty())
- tcId = bc.value("ProjectExplorer.BuildCOnfiguration.ToolChain").toString();
- const QString origTcId = tcId;
- tcId.replace("Qt4ProjectManager.ToolChain.Maemo:", "ProjectExplorer.ToolChain.Gcc:"); // convert Maemo to GCC
- QString data = tcId.mid(tcId.indexOf(':') + 1);
- QStringList split = data.split('.', QString::KeepEmptyParts);
- QString compilerPath;
- QString debuggerPath;
- Abi compilerAbi;
- int debuggerEngine = 1; // GDB
- for (int i = 1; i < split.count() - 1; ++i) {
- compilerAbi = Abi(split.at(i));
- if (!compilerAbi.isValid())
- continue;
- if (compilerAbi.os() == Abi::WindowsOS
- && compilerAbi.osFlavor() != Abi::WindowsMSysFlavor)
- debuggerEngine = 4; // CDB
- compilerPath = split.at(0);
- for (int j = 1; j < i; ++j)
- compilerPath = compilerPath + '.' + split.at(j);
- debuggerPath = split.at(i + 1);
- for (int j = i + 2; j < split.count(); ++j)
- debuggerPath = debuggerPath + '.' + split.at(j);
-
- ToolChain *tc = ToolChainManager::toolChain([cp = FileName::fromString(compilerPath),
- compilerAbi](const ToolChain *t) {
- return t->compilerCommand() == cp && t->targetAbi() == compilerAbi;
- });
- if (tc)
- tcId = QString::fromUtf8(tc->id());
- }
- tmpKit->setValue("PE.Profile.ToolChain", tcId);
-
- // QtVersion
- int qtVersionId = bc.value("Qt4ProjectManager.Qt4BuildConfiguration.QtVersionId", -1).toInt();
- tmpKit->setValue("QtSupport.QtInformation", qtVersionId);
-
- // Debugger + mkspec
- QVariantMap debugger;
- QString mkspec;
- if (m_toolChainExtras.contains(origTcId)) {
- debuggerPath = m_toolChainExtras.value(origTcId).m_debugger;
- if (!debuggerPath.isEmpty() && !QFileInfo(debuggerPath).isAbsolute())
- debuggerPath = Environment::systemEnvironment().searchInPath(debuggerPath).toString();
- if (debuggerPath.contains("cdb"))
- debuggerEngine = 4; // CDB
- mkspec = m_toolChainExtras.value(origTcId).m_mkspec;
- }
- debugger.insert("EngineType", debuggerEngine);
- debugger.insert("Binary", debuggerPath);
- tmpKit->setValue("Debugger.Information", debugger);
- tmpKit->setValue("QtPM4.mkSpecInformation", mkspec);
-
- // SysRoot
- tmpKit->setValue("PE.Profile.SysRoot", m_qtVersionExtras.value(qtVersionId));
-
- QMapIterator<int, QVariantMap> deployIt(dcs);
- while (deployIt.hasNext()) {
- deployIt.next();
- int dcPos = deployIt.key();
- const QVariantMap &dc = deployIt.value();
- // Device
- QByteArray devId = dc.value("Qt4ProjectManager.MaemoRunConfiguration.DeviceId").toByteArray();
- if (devId.isEmpty())
- devId = QByteArray("Desktop Device");
- if (!devId.isEmpty() && !DeviceManager::instance()->find(Core::Id::fromName(devId))) // We do not know that device
- devId.clear();
- tmpKit->setValue("PE.Profile.Device", devId);
-
- // Set display name last:
- tmpKit->setUnexpandedDisplayName(extraTargetData.value("ProjectExplorer.ProjectConfiguration.DisplayName").toString());
-
- Kit *k = uniqueKit(tmpKit);
-
- addBuildConfiguration(k, bc, bcPos, activeBc);
- addDeployConfiguration(k, dc, dcPos, activeDc);
- addRunConfigurations(k, rcs, activeRc, m_accessor->project()->projectDirectory().toString());
- if (targetPos == activeTarget && bcPos == activeBc && dcPos == activeDc)
- m_targets[k].insert("Update.IsActive", true);
- } // dcs
- } // bcs
- KitManager::deleteKit(rawKit);
- } // read in map data
-
- int newPos = 0;
- // Generate new target data:
- foreach (Kit *k, m_targets.keys()) {
- QVariantMap data = m_targets.value(k);
- if (data.isEmpty())
- continue;
-
- KitManager::registerKit(k);
-
- data.insert("ProjectExplorer.ProjectConfiguration.Id", k->id().name());
- data.insert("ProjectExplorer.Target.Profile", k->id().name());
- data.insert("ProjectExplorer.ProjectConfiguration.DisplayName", k->displayName());
- data.insert("ProjectExplorer.ProjectConfiguration.DefaultDisplayName", k->displayName());
-
- result.insert(QString::fromLatin1("ProjectExplorer.Project.Target.") + QString::number(newPos), data);
- if (data.value("Update.IsActive", false).toBool())
- result.insert("ProjectExplorer.Project.ActiveTarget", newPos);
- ++newPos;
- }
- result.insert("ProjectExplorer.Project.TargetCount", newPos);
-
- return result;
-}
-
-Kit *UserFileVersion11Upgrader::uniqueKit(Kit *k)
-{
- const QString tc = k->value("PE.Profile.ToolChain").toString();
- const int qt = k->value("QtSupport.QtInformation").toInt();
- const QString debugger = k->value("Debugger.Information").toString();
- const QString mkspec = k->value("QtPM4.mkSpecInformation").toString();
- const QString deviceType = k->value("PE.Profile.DeviceType").toString();
- const QString device = k->value("PE.Profile.Device").toString();
- const QString sysroot = k->value("PE.Profile.SysRoot").toString();
-
- foreach (Kit *i, m_targets.keys()) {
- const QString currentTc = i->value("PE.Profile.ToolChain").toString();
- const int currentQt = i->value("QtSupport.QtInformation").toInt();
- const QString currentDebugger = i->value("Debugger.Information").toString();
- const QString currentMkspec = i->value("QtPM4.mkSpecInformation").toString();
- const QString currentDeviceType = i->value("PE.Profile.DeviceType").toString();
- const QString currentDevice = i->value("PE.Profile.Device").toString();
- const QString currentSysroot = i->value("PE.Profile.SysRoot").toString();
-
- bool deviceTypeOk = deviceType == currentDeviceType;
- bool deviceOk = device.isEmpty() || currentDevice == device;
- bool tcOk = tc.isEmpty() || currentTc.isEmpty() || currentTc == tc;
- bool qtOk = qt == -1 || currentQt == qt;
- bool debuggerOk = debugger.isEmpty() || currentDebugger.isEmpty() || currentDebugger == debugger;
- bool mkspecOk = mkspec.isEmpty() || currentMkspec.isEmpty() || currentMkspec == mkspec;
- bool sysrootOk = sysroot.isEmpty() || currentSysroot == sysroot;
-
- if (deviceTypeOk && deviceOk && tcOk && qtOk && debuggerOk && mkspecOk && sysrootOk)
- return i;
- }
- return k->clone(true);
-}
-
-void UserFileVersion11Upgrader::addBuildConfiguration(Kit *k, const QVariantMap &bc, int bcPos, int bcActive)
-{
- QVariantMap merged = m_targets.value(k);
- int internalCount = merged.value("ProjectExplorer.Target.BuildConfigurationCount", 0).toInt();
-
- for (int i = 0; i < internalCount; ++i) {
- QVariantMap bcData = merged.value(QString::fromLatin1("ProjectExplorer.Target.BuildConfiguration.") + QString::number(i)).toMap();
- if (bcData.value("Update.BCPos", -1).toInt() == bcPos)
- return;
- }
- QVariantMap data = bc;
- data.insert("Update.BCPos", bcPos);
-
- merged.insert(QString::fromLatin1("ProjectExplorer.Target.BuildConfiguration.") + QString::number(internalCount), data);
- if (bcPos == bcActive)
- merged.insert("ProjectExplorer.Target.ActiveBuildConfiguration", internalCount);
- merged.insert("ProjectExplorer.Target.BuildConfigurationCount", internalCount + 1);
-
- m_targets.insert(k, merged);
-}
-
-void UserFileVersion11Upgrader::addDeployConfiguration(Kit *k, const QVariantMap &dc, int dcPos, int dcActive)
-{
- QVariantMap merged = m_targets.value(k);
- int internalCount = merged.value("ProjectExplorer.Target.DeployConfigurationCount", 0).toInt();
-
- for (int i = 0; i < internalCount; ++i) {
- QVariantMap dcData = merged.value(QString::fromLatin1("ProjectExplorer.Target.DeployConfiguration.") + QString::number(i)).toMap();
- if (dcData.value("Update.DCPos", -1).toInt() == dcPos)
- return;
- }
- QVariantMap data = dc;
- data.insert("Update.DCPos", dcPos);
-
- merged.insert(QString::fromLatin1("ProjectExplorer.Target.DeployConfiguration.") + QString::number(internalCount), data);
- if (dcPos == dcActive)
- merged.insert("ProjectExplorer.Target.ActiveDeployConfiguration", internalCount);
- merged.insert("ProjectExplorer.Target.DeployConfigurationCount", internalCount + 1);
-
- m_targets.insert(k, merged);
-}
-
-void UserFileVersion11Upgrader::addRunConfigurations(Kit *k,
- const QMap<int, QVariantMap> &rcs, int activeRc,
- const QString &projectDir)
-{
- QVariantMap data = m_targets.value(k);
- data.insert("ProjectExplorer.Target.RunConfigurationCount", rcs.count());
- QMapIterator<int, QVariantMap> runIt(rcs);
- while (runIt.hasNext()) {
- runIt.next();
- QVariantMap rcData = runIt.value();
- QString proFile = rcData.value("Qt4ProjectManager.MaemoRunConfiguration.ProFile").toString();
- if (proFile.isEmpty())
- proFile = rcData.value("Qt4ProjectManager.Qt4RunConfiguration.ProFile").toString();
- if (!proFile.isEmpty()) {
- QString newId = rcData.value("ProjectExplorer.ProjectConfiguration.Id").toString();
- newId.append(':');
- FileName fn = FileName::fromString(projectDir);
- fn.appendPath(proFile);
- newId.append(fn.toString());
- rcData.insert("ProjectExplorer.ProjectConfiguration.Id", newId);
- }
- data.insert(QString::fromLatin1("ProjectExplorer.Target.RunConfiguration.") + QString::number(runIt.key()), rcData);
- }
- data.insert("ProjectExplorer.Target.ActiveRunConfiguration", activeRc);
-
- m_targets.insert(k, data);
-}
-
-static QString targetRoot(const QString &qmakePath)
-{
- return QDir::cleanPath(qmakePath).remove("/bin/qmake" QTC_HOST_EXE_SUFFIX,
- HostOsInfo::fileNameCaseSensitivity());
-}
-
-static QString maddeRoot(const QString &qmakePath)
-{
- QDir dir(targetRoot(qmakePath));
- dir.cdUp(); dir.cdUp();
- return dir.absolutePath();
-}
-
-void UserFileVersion11Upgrader::parseQtversionFile()
-{
- PersistentSettingsReader reader;
- reader.load(FileName::fromString(Core::ICore::userResourcePath() + "/../qtversion.xml"));
- QVariantMap data = reader.restoreValues();
-
- int count = data.value("QtVersion.Count", 0).toInt();
- for (int i = 0; i < count; ++i) {
- const QString key = QString::fromLatin1("QtVersion.") + QString::number(i);
- if (!data.contains(key))
- continue;
- const QVariantMap qtversionMap = data.value(key).toMap();
-
- QString sysRoot = qtversionMap.value("SystemRoot").toString();
- const QString type = qtversionMap.value("QtVersion.Type").toString();
- const QString qmake = qtversionMap.value("QMakePath").toString();
-
- if (type == "Qt4ProjectManager.QtVersion.Maemo") {
- QFile file(QDir::cleanPath(targetRoot(qmake)) + "/information");
- if (file.exists() && file.open(QIODevice::ReadOnly | QIODevice::Text)) {
- QTextStream stream(&file);
- while (!stream.atEnd()) {
- const QString &line = stream.readLine().trimmed();
- const QStringList &list = line.split(' ');
- if (list.count() <= 1)
- continue;
- if (list.at(0) == "sysroot")
- sysRoot = maddeRoot(qmake) + "/sysroots/" + list.at(1);
- }
- }
- }
-
- int id = qtversionMap.value("Id").toInt();
- if (id > -1 && !sysRoot.isEmpty())
- m_qtVersionExtras.insert(id, sysRoot);
- }
-}
-
-void UserFileVersion11Upgrader::parseToolChainFile()
-{
- PersistentSettingsReader reader;
- reader.load(FileName::fromString(Core::ICore::userResourcePath() + "/../toolChains.xml"));
- QVariantMap data = reader.restoreValues();
- int count = data.value("ToolChain.Count", 0).toInt();
- for (int i = 0; i < count; ++i) {
- const QString key = QString::fromLatin1("ToolChain.") + QString::number(i);
- if (!data.contains(key))
- continue;
-
- const QVariantMap tcMap = data.value(key).toMap();
- QString id = tcMap.value("ProjectExplorer.ToolChain.Id").toString();
- if (id.isEmpty())
- continue;
- QString mkspec = tcMap.value("ProjectExplorer.ToolChain.MkSpecOverride").toString();
- QString debugger = tcMap.value("ProjectExplorer.GccToolChain.Debugger").toString();
-
- m_toolChainExtras.insert(id, ToolChainExtraData(mkspec, debugger));
- }
-}
-
-// --------------------------------------------------------------------
-// UserFileVersion12Upgrader:
-// --------------------------------------------------------------------
-
-QVariantMap UserFileVersion12Upgrader::upgrade(const QVariantMap &map)
-{
- QVariantMap result;
- QMapIterator<QString, QVariant> it(map);
- while (it.hasNext()) {
- it.next();
- if (it.value().type() == QVariant::Map)
- result.insert(it.key(), upgrade(it.value().toMap()));
- else if (it.key() == "CMakeProjectManager.CMakeRunConfiguration.UserEnvironmentChanges"
- || it.key() == "ProjectExplorer.CustomExecutableRunConfiguration.UserEnvironmentChanges"
- || it.key() == "Qt4ProjectManager.Qt4RunConfiguration.UserEnvironmentChanges"
- || it.key() == "Qt4ProjectManager.MaemoRunConfiguration.UserEnvironmentChanges")
- result.insert("PE.UserEnvironmentChanges", it.value());
- else if (it.key() == "CMakeProjectManager.BaseEnvironmentBase"
- || it.key() == "ProjectExplorer.CustomExecutableRunConfiguration.BaseEnvironmentBase"
- || it.key() == "Qt4ProjectManager.MaemoRunConfiguration.BaseEnvironmentBase")
- result.insert("PE.BaseEnvironmentBase", it.value());
- else
- result.insert(it.key(), it.value());
- }
- return result;
-}
-
-// --------------------------------------------------------------------
-// UserFileVersion13Upgrader:
-// --------------------------------------------------------------------
-
-QVariantMap UserFileVersion13Upgrader::upgrade(const QVariantMap &map)
-{
- QVariantMap result;
- QMapIterator<QString, QVariant> it(map);
- while (it.hasNext()) {
- it.next();
- if (it.value().type() == QVariant::Map)
- result.insert(it.key(), upgrade(it.value().toMap()));
- else if (it.key() == "PE.UserEnvironmentChanges")
- result.insert("PE.EnvironmentAspect.Changes", it.value());
- else if (it.key() == "PE.BaseEnvironmentBase")
- result.insert("PE.EnvironmentAspect.Base", it.value());
- else
- result.insert(it.key(), it.value());
- }
- return result;
-}
-
// --------------------------------------------------------------------
// UserFileVersion14Upgrader:
// --------------------------------------------------------------------
@@ -2187,6 +749,30 @@ QVariant UserFileVersion17Upgrader::process(const QVariant &entry)
}
}
+QVariantMap UserFileVersion18Upgrader::upgrade(const QVariantMap &map)
+{
+ return process(map).toMap();
+}
+
+QVariant UserFileVersion18Upgrader::process(const QVariant &entry)
+{
+ switch (entry.type()) {
+ case QVariant::List:
+ return Utils::transform(entry.toList(), &UserFileVersion18Upgrader::process);
+ case QVariant::Map:
+ return Utils::transform<QMap<QString, QVariant>>(
+ entry.toMap().toStdMap(), [](const std::pair<const QString, QVariant> &item) {
+ const QString key = (item.first
+ == "AutotoolsProjectManager.MakeStep.AdditionalArguments"
+ ? QString("AutotoolsProjectManager.MakeStep.MakeArguments")
+ : item.first);
+ return qMakePair(key, UserFileVersion18Upgrader::process(item.second));
+ });
+ default:
+ return entry;
+ }
+}
+
#if defined(WITH_TESTS)
#include <QTest>
@@ -2201,7 +787,7 @@ public:
TestUserFileAccessor(Project *project) : UserFileAccessor(project) { }
void storeSharedSettings(const QVariantMap &data) const { m_storedSettings = data; }
- QVariant retrieveSharedSettings() const { return m_storedSettings; }
+ QVariant retrieveSharedSettings() const override { return m_storedSettings; }
using UserFileAccessor::preprocessReadSettings;
using UserFileAccessor::prepareToWriteSettings;
diff --git a/src/plugins/projectexplorer/windebuginterface.cpp b/src/plugins/projectexplorer/windebuginterface.cpp
index 985fec933f..ce3950acb9 100644
--- a/src/plugins/projectexplorer/windebuginterface.cpp
+++ b/src/plugins/projectexplorer/windebuginterface.cpp
@@ -81,31 +81,31 @@ WinDebugInterface::~WinDebugInterface()
void WinDebugInterface::run()
{
- m_waitHandles[DataReadyEventHandle] = m_waitHandles[TerminateEventHandle] = 0;
- m_bufferReadyEvent = 0;
- m_sharedFile = 0;
- m_sharedMem = 0;
+ m_waitHandles[DataReadyEventHandle] = m_waitHandles[TerminateEventHandle] = nullptr;
+ m_bufferReadyEvent = nullptr;
+ m_sharedFile = nullptr;
+ m_sharedMem = nullptr;
if (!runLoop())
emit cannotRetrieveDebugOutput();
if (m_sharedMem) {
UnmapViewOfFile(m_sharedMem);
- m_sharedMem = 0;
+ m_sharedMem = nullptr;
}
if (m_sharedFile) {
CloseHandle(m_sharedFile);
- m_sharedFile = 0;
+ m_sharedFile = nullptr;
}
if (m_waitHandles[TerminateEventHandle]) {
CloseHandle(m_waitHandles[TerminateEventHandle]);
- m_waitHandles[TerminateEventHandle] = 0;
+ m_waitHandles[TerminateEventHandle] = nullptr;
}
if (m_waitHandles[DataReadyEventHandle]) {
CloseHandle(m_waitHandles[DataReadyEventHandle]);
- m_waitHandles[DataReadyEventHandle] = 0;
+ m_waitHandles[DataReadyEventHandle] = nullptr;
}
if (m_bufferReadyEvent) {
CloseHandle(m_bufferReadyEvent);
- m_bufferReadyEvent = 0;
+ m_bufferReadyEvent = nullptr;
}
}
@@ -130,7 +130,7 @@ bool WinDebugInterface::runLoop()
return false;
LPSTR message = reinterpret_cast<LPSTR>(m_sharedMem) + sizeof(DWORD);
- LPDWORD processId = reinterpret_cast<LPDWORD>(m_sharedMem);
+ auto processId = reinterpret_cast<LPDWORD>(m_sharedMem);
SetEvent(m_bufferReadyEvent);
diff --git a/src/plugins/projectexplorer/xcodebuildparser.cpp b/src/plugins/projectexplorer/xcodebuildparser.cpp
index 470cb7fcae..a96d4bb097 100644
--- a/src/plugins/projectexplorer/xcodebuildparser.cpp
+++ b/src/plugins/projectexplorer/xcodebuildparser.cpp
@@ -270,8 +270,8 @@ void ProjectExplorerPlugin::testXcodebuildParserParsing_data()
void ProjectExplorerPlugin::testXcodebuildParserParsing()
{
OutputParserTester testbench;
- XcodebuildParser *childParser = new XcodebuildParser;
- XcodebuildParserTester *tester = new XcodebuildParserTester(childParser);
+ auto *childParser = new XcodebuildParser;
+ auto *tester = new XcodebuildParserTester(childParser);
connect(&testbench, &OutputParserTester::aboutToDeleteParser,
tester, &XcodebuildParserTester::onAboutToDeleteParser);
diff --git a/src/plugins/pythoneditor/pythoneditorplugin.cpp b/src/plugins/pythoneditor/pythoneditorplugin.cpp
index f3375a67c9..ee20e088c9 100644
--- a/src/plugins/pythoneditor/pythoneditorplugin.cpp
+++ b/src/plugins/pythoneditor/pythoneditorplugin.cpp
@@ -299,7 +299,6 @@ Runnable PythonRunConfiguration::runnable() const
QtcProcess::addArg(&r.commandLineArguments, mainScript());
QtcProcess::addArgs(&r.commandLineArguments, extraAspect<ArgumentsAspect>()->arguments());
r.executable = extraAspect<InterpreterAspect>()->value();
- r.runMode = extraAspect<TerminalAspect>()->runMode();
r.environment = extraAspect<EnvironmentAspect>()->environment();
return r;
}
@@ -311,6 +310,7 @@ public:
{
registerRunConfiguration<PythonRunConfiguration>("PythonEditor.RunConfiguration.");
addSupportedProjectType(PythonProjectId);
+ addRunWorkerFactory<SimpleTargetRunner>(ProjectExplorer::Constants::NORMAL_RUN_MODE);
}
};
@@ -623,12 +623,6 @@ bool PythonEditorPlugin::initialize(const QStringList &arguments, QString *error
ProjectManager::registerProjectType<PythonProject>(PythonMimeType);
- auto constraint = [](RunConfiguration *runConfiguration) {
- auto aspect = runConfiguration->extraAspect<InterpreterAspect>();
- return aspect && !aspect->value().isEmpty();
- };
- RunControl::registerWorker<SimpleTargetRunner>(ProjectExplorer::Constants::NORMAL_RUN_MODE, constraint);
-
return true;
}
diff --git a/src/plugins/qbsprojectmanager/customqbspropertiesdialog.cpp b/src/plugins/qbsprojectmanager/customqbspropertiesdialog.cpp
index e78308514c..ab88086fd5 100644
--- a/src/plugins/qbsprojectmanager/customqbspropertiesdialog.cpp
+++ b/src/plugins/qbsprojectmanager/customqbspropertiesdialog.cpp
@@ -45,10 +45,10 @@ CustomQbsPropertiesDialog::CustomQbsPropertiesDialog(const QVariantMap &properti
int currentRow = 0;
for (QVariantMap::ConstIterator it = properties.constBegin(); it != properties.constEnd();
++it) {
- QTableWidgetItem * const nameItem = new QTableWidgetItem;
+ auto * const nameItem = new QTableWidgetItem;
nameItem->setData(Qt::DisplayRole, it.key());
m_ui->propertiesTable->setItem(currentRow, 0, nameItem);
- QTableWidgetItem * const valueItem = new QTableWidgetItem;
+ auto * const valueItem = new QTableWidgetItem;
valueItem->setData(Qt::DisplayRole, qbs::settingsValueToRepresentation(it.value()));
m_ui->propertiesTable->setItem(currentRow, 1, valueItem);
++currentRow;
diff --git a/src/plugins/qbsprojectmanager/customqbspropertiesdialog.h b/src/plugins/qbsprojectmanager/customqbspropertiesdialog.h
index cbbc757945..dccfd28609 100644
--- a/src/plugins/qbsprojectmanager/customqbspropertiesdialog.h
+++ b/src/plugins/qbsprojectmanager/customqbspropertiesdialog.h
@@ -37,10 +37,10 @@ class CustomQbsPropertiesDialog : public QDialog
Q_OBJECT
public:
- explicit CustomQbsPropertiesDialog(const QVariantMap &properties, QWidget *parent = 0);
+ explicit CustomQbsPropertiesDialog(const QVariantMap &properties, QWidget *parent = nullptr);
QVariantMap properties() const;
- ~CustomQbsPropertiesDialog();
+ ~CustomQbsPropertiesDialog() override;
private:
void addProperty();
diff --git a/src/plugins/qbsprojectmanager/defaultpropertyprovider.cpp b/src/plugins/qbsprojectmanager/defaultpropertyprovider.cpp
index 5ff0cece06..2bc05d1335 100644
--- a/src/plugins/qbsprojectmanager/defaultpropertyprovider.cpp
+++ b/src/plugins/qbsprojectmanager/defaultpropertyprovider.cpp
@@ -296,7 +296,7 @@ QVariantMap DefaultPropertyProvider::autoGeneratedProperties(const ProjectExplor
}
data.insert(QLatin1String(CPP_TOOLCHAINPATH), mainFileInfo.absolutePath());
- if (ProjectExplorer::GccToolChain *gcc = dynamic_cast<ProjectExplorer::GccToolChain *>(mainTc)) {
+ if (auto gcc = dynamic_cast<ProjectExplorer::GccToolChain *>(mainTc)) {
QStringList compilerFlags = gcc->platformCodeGenFlags();
filterCompilerLinkerFlags(targetAbi, compilerFlags);
data.insert(QLatin1String(CPP_PLATFORMCOMMONCOMPILERFLAGS), compilerFlags);
diff --git a/src/plugins/qbsprojectmanager/defaultpropertyprovider.h b/src/plugins/qbsprojectmanager/defaultpropertyprovider.h
index 9e7d36f628..03c3ddaa6b 100644
--- a/src/plugins/qbsprojectmanager/defaultpropertyprovider.h
+++ b/src/plugins/qbsprojectmanager/defaultpropertyprovider.h
@@ -35,8 +35,9 @@ class DefaultPropertyProvider : public PropertyProvider
Q_OBJECT
public:
- bool canHandle(const ProjectExplorer::Kit *k) const { return k; }
- QVariantMap properties(const ProjectExplorer::Kit *k, const QVariantMap &defaultData) const;
+ bool canHandle(const ProjectExplorer::Kit *k) const override { return k; }
+ QVariantMap properties(const ProjectExplorer::Kit *k,
+ const QVariantMap &defaultData) const override;
private:
QVariantMap autoGeneratedProperties(const ProjectExplorer::Kit *k,
diff --git a/src/plugins/qbsprojectmanager/propertyprovider.h b/src/plugins/qbsprojectmanager/propertyprovider.h
index 7d6e94f897..fe27f751b7 100644
--- a/src/plugins/qbsprojectmanager/propertyprovider.h
+++ b/src/plugins/qbsprojectmanager/propertyprovider.h
@@ -40,7 +40,7 @@ class QBSPROJECTMANAGER_EXPORT PropertyProvider : public QObject
public:
PropertyProvider();
- ~PropertyProvider();
+ ~PropertyProvider() override;
virtual bool canHandle(const ProjectExplorer::Kit *k) const = 0;
virtual QVariantMap properties(const ProjectExplorer::Kit *k, const QVariantMap &defaultData) const = 0;
diff --git a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp
index d80a64fb4b..af4d0bf0e1 100644
--- a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp
+++ b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp
@@ -85,7 +85,7 @@ void QbsBuildConfiguration::initialize(const BuildInfo *info)
{
BuildConfiguration::initialize(info);
- const QbsBuildInfo * const bi = static_cast<const QbsBuildInfo *>(info);
+ const auto * const bi = static_cast<const QbsBuildInfo *>(info);
QVariantMap configData = bi->config;
configData.insert(QLatin1String(Constants::QBS_CONFIG_VARIANT_KEY),
(info->buildType == BuildConfiguration::Debug)
@@ -136,7 +136,7 @@ bool QbsBuildConfiguration::fromMap(const QVariantMap &map)
BuildStepList *bsl = stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
// Fix up the existing build steps:
for (int i = 0; i < bsl->count(); ++i) {
- QbsBuildStep *bs = qobject_cast<QbsBuildStep *>(bsl->at(i));
+ auto bs = qobject_cast<QbsBuildStep *>(bsl->at(i));
if (bs)
connect(bs, &QbsBuildStep::qbsConfigurationChanged, this, &QbsBuildConfiguration::qbsConfigurationChanged);
}
@@ -178,7 +178,7 @@ Internal::QbsProject *QbsBuildConfiguration::project() const
IOutputParser *QbsBuildConfiguration::createOutputParser() const
{
ToolChain *tc = ToolChainKitInformation::toolChain(target()->kit(), ProjectExplorer::Constants::CXX_LANGUAGE_ID);
- return tc ? tc->outputParser() : 0;
+ return tc ? tc->outputParser() : nullptr;
}
bool QbsBuildConfiguration::isEnabled() const
diff --git a/src/plugins/qbsprojectmanager/qbsbuildconfigurationwidget.cpp b/src/plugins/qbsprojectmanager/qbsbuildconfigurationwidget.cpp
index e87e18752f..057280a21a 100644
--- a/src/plugins/qbsprojectmanager/qbsbuildconfigurationwidget.cpp
+++ b/src/plugins/qbsprojectmanager/qbsbuildconfigurationwidget.cpp
@@ -49,16 +49,16 @@ QbsBuildConfigurationWidget::QbsBuildConfigurationWidget(QbsProjectManager::Inte
connect(bc, &ProjectExplorer::BuildConfiguration::environmentChanged,
this, &QbsBuildConfigurationWidget::environmentHasChanged);
- QVBoxLayout *vbox = new QVBoxLayout(this);
+ auto vbox = new QVBoxLayout(this);
vbox->setMargin(0);
- Utils::DetailsWidget *container = new Utils::DetailsWidget(this);
+ auto container = new Utils::DetailsWidget(this);
container->setState(Utils::DetailsWidget::NoSummary);
vbox->addWidget(container);
QWidget *details = new QWidget(container);
container->setWidget(details);
- QGridLayout *layout = new QGridLayout(details);
+ auto layout = new QGridLayout(details);
layout->setMargin(0);
layout->addWidget(new QLabel(tr("Build directory:")), 0, 0);
diff --git a/src/plugins/qbsprojectmanager/qbsbuildstep.cpp b/src/plugins/qbsprojectmanager/qbsbuildstep.cpp
index c01db641e3..e5ddbc42f7 100644
--- a/src/plugins/qbsprojectmanager/qbsbuildstep.cpp
+++ b/src/plugins/qbsprojectmanager/qbsbuildstep.cpp
@@ -67,9 +67,9 @@ class QbsBuildStepConfigWidget : public ProjectExplorer::BuildStepConfigWidget
Q_OBJECT
public:
QbsBuildStepConfigWidget(QbsBuildStep *step);
- ~QbsBuildStepConfigWidget();
- QString summaryText() const;
- QString displayName() const;
+ ~QbsBuildStepConfigWidget() override;
+ QString summaryText() const override;
+ QString displayName() const override;
private:
void updateState();
@@ -137,7 +137,7 @@ QbsBuildStep::~QbsBuildStep()
cancel();
if (m_job) {
m_job->deleteLater();
- m_job = 0;
+ m_job = nullptr;
}
delete m_parser;
}
@@ -148,9 +148,7 @@ bool QbsBuildStep::init(QList<const BuildStep *> &earlierSteps)
if (project()->isParsing() || m_job)
return false;
- QbsBuildConfiguration *bc = static_cast<QbsBuildConfiguration *>(buildConfiguration());
- if (!bc)
- bc = static_cast<QbsBuildConfiguration *>(target()->activeBuildConfiguration());
+ auto bc = static_cast<QbsBuildConfiguration *>(buildConfiguration());
if (!bc)
return false;
@@ -222,7 +220,7 @@ QVariantMap QbsBuildStep::qbsConfiguration(VariableHandling variableHandling) co
void QbsBuildStep::setQbsConfiguration(const QVariantMap &config)
{
- QbsProject *pro = static_cast<QbsProject *>(project());
+ auto pro = static_cast<QbsProject *>(project());
QVariantMap tmp = config;
tmp.insert(Constants::QBS_CONFIG_PROFILE_KEY, pro->profileForTarget(target()));
@@ -233,7 +231,7 @@ void QbsBuildStep::setQbsConfiguration(const QVariantMap &config)
if (tmp == m_qbsConfiguration)
return;
m_qbsConfiguration = tmp;
- QbsBuildConfiguration *bc = static_cast<QbsBuildConfiguration *>(buildConfiguration());
+ auto bc = static_cast<QbsBuildConfiguration *>(buildConfiguration());
if (bc)
bc->emitBuildTypeChanged();
emit qbsConfigurationChanged();
@@ -332,7 +330,7 @@ void QbsBuildStep::buildingDone(bool success)
createTaskAndOutput(ProjectExplorer::Task::Error, item.description(),
item.codeLocation().filePath(), item.codeLocation().line());
- QbsProject *pro = static_cast<QbsProject *>(project());
+ auto pro = static_cast<QbsProject *>(project());
// Building can uncover additional target artifacts.
pro->updateAfterBuild();
@@ -426,7 +424,7 @@ void QbsBuildStep::setBuildVariant(const QString &variant)
return;
m_qbsConfiguration.insert(Constants::QBS_CONFIG_VARIANT_KEY, variant);
emit qbsConfigurationChanged();
- QbsBuildConfiguration *bc = static_cast<QbsBuildConfiguration *>(buildConfiguration());
+ auto bc = static_cast<QbsBuildConfiguration *>(buildConfiguration());
if (bc)
bc->emitBuildTypeChanged();
}
@@ -519,10 +517,10 @@ void QbsBuildStep::finish()
{
QTC_ASSERT(m_fi, return);
reportRunResult(*m_fi, m_lastWasSuccess);
- m_fi = 0; // do not delete, it is not ours
+ m_fi = nullptr; // do not delete, it is not ours
if (m_job) {
m_job->deleteLater();
- m_job = 0;
+ m_job = nullptr;
}
}
@@ -549,7 +547,7 @@ QbsBuildStepConfigWidget::QbsBuildStepConfigWidget(QbsBuildStep *step) :
this, &QbsBuildStepConfigWidget::updateState);
step->target()->subscribeSignal(&ProjectExplorer::BuildConfiguration::buildDirectoryChanged,
this, [this]() {
- if (m_step->target()->activeBuildConfiguration() == sender())
+ if (m_step->buildConfiguration() == sender())
updateState();
});
@@ -834,7 +832,7 @@ bool QbsBuildStepConfigWidget::validateProperties(Utils::FancyLineEdit *edit, QS
QbsBuildStepFactory::QbsBuildStepFactory()
{
registerStep<QbsBuildStep>(Constants::QBS_BUILDSTEP_ID);
- setDisplayName(tr("Qbs Build"));
+ setDisplayName(QbsBuildStep::tr("Qbs Build"));
setSupportedStepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
setSupportedConfiguration(Constants::QBS_BC_ID);
setSupportedProjectType(Constants::PROJECT_ID);
diff --git a/src/plugins/qbsprojectmanager/qbsbuildstep.h b/src/plugins/qbsprojectmanager/qbsbuildstep.h
index f104152627..07076439b6 100644
--- a/src/plugins/qbsprojectmanager/qbsbuildstep.h
+++ b/src/plugins/qbsprojectmanager/qbsbuildstep.h
@@ -143,8 +143,6 @@ private:
class QbsBuildStepFactory : public ProjectExplorer::BuildStepFactory
{
- Q_OBJECT
-
public:
QbsBuildStepFactory();
};
diff --git a/src/plugins/qbsprojectmanager/qbscleanstep.cpp b/src/plugins/qbsprojectmanager/qbscleanstep.cpp
index b47610a446..9ddf533395 100644
--- a/src/plugins/qbsprojectmanager/qbscleanstep.cpp
+++ b/src/plugins/qbsprojectmanager/qbscleanstep.cpp
@@ -59,7 +59,7 @@ QbsCleanStep::~QbsCleanStep()
cancel();
if (m_job) {
m_job->deleteLater();
- m_job = 0;
+ m_job = nullptr;
}
}
@@ -69,9 +69,7 @@ bool QbsCleanStep::init(QList<const BuildStep *> &earlierSteps)
if (project()->isParsing() || m_job)
return false;
- QbsBuildConfiguration *bc = static_cast<QbsBuildConfiguration *>(buildConfiguration());
- if (!bc)
- bc = static_cast<QbsBuildConfiguration *>(target()->activeBuildConfiguration());
+ auto bc = static_cast<QbsBuildConfiguration *>(buildConfiguration());
if (!bc)
return false;
@@ -84,7 +82,7 @@ void QbsCleanStep::run(QFutureInterface<bool> &fi)
{
m_fi = &fi;
- QbsProject *pro = static_cast<QbsProject *>(project());
+ auto pro = static_cast<QbsProject *>(project());
qbs::CleanOptions options(m_qbsCleanOptions);
QString error;
@@ -166,9 +164,9 @@ void QbsCleanStep::cleaningDone(bool success)
QTC_ASSERT(m_fi, return);
reportRunResult(*m_fi, success);
- m_fi = 0; // do not delete, it is not ours
+ m_fi = nullptr; // do not delete, it is not ours
m_job->deleteLater();
- m_job = 0;
+ m_job = nullptr;
}
void QbsCleanStep::handleTaskStarted(const QString &desciption, int max)
@@ -297,7 +295,7 @@ QbsCleanStepFactory::QbsCleanStepFactory()
registerStep<QbsCleanStep>(Constants::QBS_CLEANSTEP_ID);
setSupportedStepList(ProjectExplorer::Constants::BUILDSTEPS_CLEAN);
setSupportedConfiguration(Constants::QBS_BC_ID);
- setDisplayName(tr("Qbs Clean"));
+ setDisplayName(QbsCleanStep::tr("Qbs Clean"));
}
} // namespace Internal
diff --git a/src/plugins/qbsprojectmanager/qbscleanstep.h b/src/plugins/qbsprojectmanager/qbscleanstep.h
index b7f84a1d5b..04d557aba4 100644
--- a/src/plugins/qbsprojectmanager/qbscleanstep.h
+++ b/src/plugins/qbsprojectmanager/qbscleanstep.h
@@ -95,9 +95,9 @@ class QbsCleanStepConfigWidget : public ProjectExplorer::BuildStepConfigWidget
Q_OBJECT
public:
QbsCleanStepConfigWidget(QbsCleanStep *step);
- ~QbsCleanStepConfigWidget();
- QString summaryText() const;
- QString displayName() const;
+ ~QbsCleanStepConfigWidget() override;
+ QString summaryText() const override;
+ QString displayName() const override;
private:
void updateState();
@@ -114,8 +114,6 @@ private:
class QbsCleanStepFactory : public ProjectExplorer::BuildStepFactory
{
- Q_OBJECT
-
public:
QbsCleanStepFactory();
};
diff --git a/src/plugins/qbsprojectmanager/qbsinstallstep.cpp b/src/plugins/qbsprojectmanager/qbsinstallstep.cpp
index fdd3af1dfe..a5a8430c0c 100644
--- a/src/plugins/qbsprojectmanager/qbsinstallstep.cpp
+++ b/src/plugins/qbsprojectmanager/qbsinstallstep.cpp
@@ -76,7 +76,7 @@ QbsInstallStep::~QbsInstallStep()
cancel();
if (m_job)
m_job->deleteLater();
- m_job = 0;
+ m_job = nullptr;
}
bool QbsInstallStep::init(QList<const BuildStep *> &earlierSteps)
@@ -90,7 +90,7 @@ void QbsInstallStep::run(QFutureInterface<bool> &fi)
{
m_fi = &fi;
- QbsProject *pro = static_cast<QbsProject *>(project());
+ auto pro = static_cast<QbsProject *>(project());
m_job = pro->install(m_qbsInstallOptions);
if (!m_job) {
@@ -146,8 +146,7 @@ bool QbsInstallStep::keepGoing() const
const QbsBuildConfiguration *QbsInstallStep::buildConfig() const
{
- return static_cast<QbsBuildConfiguration *>(
- deployConfiguration()->target()->activeBuildConfiguration());
+ return static_cast<QbsBuildConfiguration *>(buildConfiguration());
}
bool QbsInstallStep::fromMap(const QVariantMap &map)
@@ -188,9 +187,9 @@ void QbsInstallStep::installDone(bool success)
QTC_ASSERT(m_fi, return);
reportRunResult(*m_fi, success);
- m_fi = 0; // do not delete, it is not ours
+ m_fi = nullptr; // do not delete, it is not ours
m_job->deleteLater();
- m_job = 0;
+ m_job = nullptr;
}
void QbsInstallStep::handleTaskStarted(const QString &desciption, int max)
@@ -261,7 +260,7 @@ QbsInstallStepConfigWidget::QbsInstallStepConfigWidget(QbsInstallStep *step) :
setContentsMargins(0, 0, 0, 0);
- QbsProject *project = static_cast<QbsProject *>(m_step->project());
+ auto project = static_cast<QbsProject *>(m_step->project());
m_ui = new Ui::QbsInstallStepConfigWidget;
m_ui->setupUi(this);
@@ -339,7 +338,7 @@ QbsInstallStepFactory::QbsInstallStepFactory()
setSupportedStepList(ProjectExplorer::Constants::BUILDSTEPS_DEPLOY);
setSupportedDeviceType(ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE);
setSupportedProjectType(Constants::PROJECT_ID);
- setDisplayName(tr("Qbs Install"));
+ setDisplayName(QbsInstallStep::tr("Qbs Install"));
}
} // namespace Internal
diff --git a/src/plugins/qbsprojectmanager/qbsinstallstep.h b/src/plugins/qbsprojectmanager/qbsinstallstep.h
index 74e930570a..e76763b2a7 100644
--- a/src/plugins/qbsprojectmanager/qbsinstallstep.h
+++ b/src/plugins/qbsprojectmanager/qbsinstallstep.h
@@ -98,9 +98,9 @@ class QbsInstallStepConfigWidget : public ProjectExplorer::BuildStepConfigWidget
Q_OBJECT
public:
QbsInstallStepConfigWidget(QbsInstallStep *step);
- ~QbsInstallStepConfigWidget();
- QString summaryText() const;
- QString displayName() const;
+ ~QbsInstallStepConfigWidget() override;
+ QString summaryText() const override;
+ QString displayName() const override;
private:
void updateState();
@@ -119,8 +119,6 @@ private:
class QbsInstallStepFactory : public ProjectExplorer::BuildStepFactory
{
- Q_OBJECT
-
public:
QbsInstallStepFactory();
};
diff --git a/src/plugins/qbsprojectmanager/qbslogsink.h b/src/plugins/qbsprojectmanager/qbslogsink.h
index f3f07f6513..e6c7403ad9 100644
--- a/src/plugins/qbsprojectmanager/qbslogsink.h
+++ b/src/plugins/qbsprojectmanager/qbslogsink.h
@@ -40,7 +40,7 @@ class QbsLogSink : public QObject, public qbs::ILogSink
{
Q_OBJECT
public:
- QbsLogSink(QObject *parent = 0);
+ QbsLogSink(QObject *parent = nullptr);
signals:
void newTask(const ProjectExplorer::Task &task);
@@ -48,8 +48,9 @@ signals:
private:
Q_INVOKABLE void sendMessages();
- void doPrintWarning(const qbs::ErrorInfo &warning);
- void doPrintMessage(qbs::LoggerLevel level, const QString &message, const QString &tag);
+ void doPrintWarning(const qbs::ErrorInfo &warning) override;
+ void doPrintMessage(qbs::LoggerLevel level, const QString &message,
+ const QString &tag) override;
QStringList m_messages;
QMutex m_mutex;
diff --git a/src/plugins/qbsprojectmanager/qbsnodes.cpp b/src/plugins/qbsprojectmanager/qbsnodes.cpp
index 9a0091cf88..847cec3782 100644
--- a/src/plugins/qbsprojectmanager/qbsnodes.cpp
+++ b/src/plugins/qbsprojectmanager/qbsnodes.cpp
@@ -56,21 +56,21 @@ namespace Internal {
static const QbsProjectNode *parentQbsProjectNode(const ProjectExplorer::Node *node)
{
for (const ProjectExplorer::FolderNode *pn = node->managingProject(); pn; pn = pn->parentProjectNode()) {
- const QbsProjectNode *prjNode = dynamic_cast<const QbsProjectNode *>(pn);
+ const auto prjNode = dynamic_cast<const QbsProjectNode *>(pn);
if (prjNode)
return prjNode;
}
- return 0;
+ return nullptr;
}
static const QbsProductNode *parentQbsProductNode(const ProjectExplorer::Node *node)
{
for (; node; node = node->parentFolderNode()) {
- const QbsProductNode *prdNode = dynamic_cast<const QbsProductNode *>(node);
+ const auto prdNode = dynamic_cast<const QbsProductNode *>(node);
if (prdNode)
return prdNode;
}
- return 0;
+ return nullptr;
}
static qbs::GroupData findMainQbsGroup(const qbs::ProductData &productData)
@@ -84,7 +84,7 @@ static qbs::GroupData findMainQbsGroup(const qbs::ProductData &productData)
class FileTreeNode {
public:
- explicit FileTreeNode(const QString &n = QString(), FileTreeNode *p = 0, bool f = false) :
+ explicit FileTreeNode(const QString &n = QString(), FileTreeNode *p = nullptr, bool f = false) :
parent(p), name(n), m_isFile(f)
{
if (p)
@@ -109,14 +109,14 @@ public:
static FileTreeNode *moveChildrenUp(FileTreeNode *node)
{
- QTC_ASSERT(node, return 0);
+ QTC_ASSERT(node, return nullptr);
FileTreeNode *newParent = node->parent;
if (!newParent)
- return 0;
+ return nullptr;
// disconnect node and parent:
- node->parent = 0;
+ node->parent = nullptr;
newParent->children.removeOne(node);
foreach (FileTreeNode *c, node->children) {
@@ -163,7 +163,7 @@ public:
// Clean up node:
node->children.clear();
node->parent->children.removeOne(node);
- node->parent = 0;
+ node->parent = nullptr;
delete node;
return;
@@ -184,7 +184,7 @@ public:
if (node->children.isEmpty() && !node->isFile()) {
// Clean up empty folder nodes:
node->parent->children.removeOne(node);
- node->parent = 0;
+ node->parent = nullptr;
delete node;
} else if (node->children.count() == 1 && !node->children.at(0)->isFile()) {
// Compact folder nodes with one child only:
diff --git a/src/plugins/qbsprojectmanager/qbsnodes.h b/src/plugins/qbsprojectmanager/qbsnodes.h
index 16987a875b..8d57c8cf60 100644
--- a/src/plugins/qbsprojectmanager/qbsnodes.h
+++ b/src/plugins/qbsprojectmanager/qbsnodes.h
@@ -82,8 +82,8 @@ public:
QbsGroupNode(const qbs::GroupData &grp, const QString &productPath);
bool supportsAction(ProjectExplorer::ProjectAction action, const Node *node) const final;
- bool addFiles(const QStringList &filePaths, QStringList *notAdded = 0) override;
- bool removeFiles(const QStringList &filePaths, QStringList *notRemoved = 0) override;
+ bool addFiles(const QStringList &filePaths, QStringList *notAdded = nullptr) override;
+ bool removeFiles(const QStringList &filePaths, QStringList *notRemoved = nullptr) override;
bool renameFile(const QString &filePath, const QString &newFilePath) override;
qbs::GroupData qbsGroupData() const { return m_qbsGroupData; }
@@ -106,8 +106,8 @@ public:
bool showInSimpleTree() const override;
bool supportsAction(ProjectExplorer::ProjectAction action, const Node *node) const final;
- bool addFiles(const QStringList &filePaths, QStringList *notAdded = 0) override;
- bool removeFiles(const QStringList &filePaths, QStringList *notRemoved = 0) override;
+ bool addFiles(const QStringList &filePaths, QStringList *notAdded = nullptr) override;
+ bool removeFiles(const QStringList &filePaths, QStringList *notRemoved = nullptr) override;
bool renameFile(const QString &filePath, const QString &newFilePath) override;
const qbs::ProductData qbsProductData() const { return m_qbsProductData; }
diff --git a/src/plugins/qbsprojectmanager/qbsparser.h b/src/plugins/qbsprojectmanager/qbsparser.h
index 22b3fd1f32..44bfb133ba 100644
--- a/src/plugins/qbsprojectmanager/qbsparser.h
+++ b/src/plugins/qbsprojectmanager/qbsparser.h
@@ -42,8 +42,8 @@ public:
explicit QbsParser();
private:
- void setWorkingDirectory(const QString &workingDirectory);
- void taskAdded(const ProjectExplorer::Task &task, int linkedLines, int skipLines);
+ void setWorkingDirectory(const QString &workingDirectory) override;
+ void taskAdded(const ProjectExplorer::Task &task, int linkedLines, int skipLines) override;
QDir m_workingDirectory;
};
diff --git a/src/plugins/qbsprojectmanager/qbsprofilessettingspage.cpp b/src/plugins/qbsprojectmanager/qbsprofilessettingspage.cpp
index 4b7387039f..418f30e211 100644
--- a/src/plugins/qbsprojectmanager/qbsprofilessettingspage.cpp
+++ b/src/plugins/qbsprojectmanager/qbsprofilessettingspage.cpp
@@ -52,7 +52,7 @@ class QbsProfilesSettingsWidget : public QWidget
{
Q_OBJECT
public:
- QbsProfilesSettingsWidget(QWidget *parent = 0);
+ QbsProfilesSettingsWidget(QWidget *parent = nullptr);
void apply();
@@ -66,7 +66,6 @@ private:
QbsProfilesSettingsPage::QbsProfilesSettingsPage(QObject *parent)
: Core::IOptionsPage(parent)
- , m_widget(0)
, m_useQtcSettingsDirPersistent(QbsProjectManagerSettings::useCreatorSettingsDirForQbs())
{
@@ -92,7 +91,7 @@ void QbsProfilesSettingsPage::apply()
void QbsProfilesSettingsPage::finish()
{
delete m_widget;
- m_widget = 0;
+ m_widget = nullptr;
QbsProjectManagerSettings::setUseCreatorSettingsDirForQbs(m_useQtcSettingsDirPersistent);
QbsProjectManagerSettings::writeSettings();
}
@@ -131,7 +130,7 @@ void QbsProfilesSettingsWidget::apply()
void QbsProfilesSettingsWidget::refreshKitsList()
{
m_ui.kitsComboBox->disconnect(this);
- m_ui.propertiesView->setModel(0);
+ m_ui.propertiesView->setModel(nullptr);
m_model.reload();
m_ui.profileValueLabel->clear();
Core::Id currentId;
@@ -159,7 +158,7 @@ void QbsProfilesSettingsWidget::refreshKitsList()
void QbsProfilesSettingsWidget::displayCurrentProfile()
{
- m_ui.propertiesView->setModel(0);
+ m_ui.propertiesView->setModel(nullptr);
if (m_ui.kitsComboBox->currentIndex() == -1)
return;
const Core::Id kitId = Core::Id::fromSetting(m_ui.kitsComboBox->currentData());
diff --git a/src/plugins/qbsprojectmanager/qbsprofilessettingspage.h b/src/plugins/qbsprojectmanager/qbsprofilessettingspage.h
index 9c851daa0d..f146b92c72 100644
--- a/src/plugins/qbsprojectmanager/qbsprofilessettingspage.h
+++ b/src/plugins/qbsprojectmanager/qbsprofilessettingspage.h
@@ -34,14 +34,14 @@ class QbsProfilesSettingsWidget;
class QbsProfilesSettingsPage : public Core::IOptionsPage
{
public:
- QbsProfilesSettingsPage(QObject *parent = 0);
+ QbsProfilesSettingsPage(QObject *parent = nullptr);
private:
QWidget *widget() override;
void apply() override;
void finish() override;
- QbsProfilesSettingsWidget *m_widget;
+ QbsProfilesSettingsWidget *m_widget = nullptr;
bool m_useQtcSettingsDirPersistent;
};
diff --git a/src/plugins/qbsprojectmanager/qbsproject.cpp b/src/plugins/qbsprojectmanager/qbsproject.cpp
index fe94dedb16..22fcfc9dfa 100644
--- a/src/plugins/qbsprojectmanager/qbsproject.cpp
+++ b/src/plugins/qbsprojectmanager/qbsproject.cpp
@@ -120,13 +120,8 @@ private:
// --------------------------------------------------------------------
QbsProject::QbsProject(const FileName &fileName) :
- Project(Constants::MIME_TYPE, fileName, [this]() { delayParsing(); }),
- m_qbsProjectParser(0),
- m_qbsUpdateFutureInterface(0),
- m_parsingScheduled(false),
- m_cancelStatus(CancelStatusNone),
- m_cppCodeModelUpdater(new CppTools::CppProjectUpdater(this)),
- m_extraCompilersPending(false)
+ Project(Constants::MIME_TYPE, fileName, [this] { delayParsing(); }),
+ m_cppCodeModelUpdater(new CppTools::CppProjectUpdater(this))
{
m_parsingDelay.setInterval(1000); // delay parsing by 1s.
@@ -174,7 +169,7 @@ QbsProject::~QbsProject()
m_qbsUpdateFutureInterface->reportCanceled();
m_qbsUpdateFutureInterface->reportFinished();
delete m_qbsUpdateFutureInterface;
- m_qbsUpdateFutureInterface = 0;
+ m_qbsUpdateFutureInterface = nullptr;
}
qDeleteAll(m_extraCompilers);
std::for_each(m_qbsDocuments.cbegin(), m_qbsDocuments.cend(),
@@ -210,7 +205,7 @@ class ChangeExpector
{
public:
ChangeExpector(const QString &filePath, const QSet<IDocument *> &documents)
- : m_document(0)
+ : m_document(nullptr)
{
foreach (IDocument * const doc, documents) {
if (doc->filePath().toString() == filePath) {
@@ -362,8 +357,8 @@ template<typename Options>
qbs::AbstractJob *QbsProject::buildOrClean(const Options &opts, const QStringList &productNames,
QString &error)
{
- QTC_ASSERT(qbsProject().isValid(), return 0);
- QTC_ASSERT(!isParsing(), return 0);
+ QTC_ASSERT(qbsProject().isValid(), return nullptr);
+ QTC_ASSERT(!isParsing(), return nullptr);
QList<qbs::ProductData> products;
foreach (const QString &productName, productNames) {
@@ -400,7 +395,7 @@ qbs::CleanJob *QbsProject::clean(const qbs::CleanOptions &opts, const QStringLis
qbs::InstallJob *QbsProject::install(const qbs::InstallOptions &opts)
{
if (!qbsProject().isValid())
- return 0;
+ return nullptr;
return qbsProject().installAllProducts(opts);
}
@@ -437,7 +432,7 @@ bool QbsProject::checkCancelStatus()
return false;
qCDebug(qbsPmLog) << "Cancel request while parsing, starting re-parse";
m_qbsProjectParser->deleteLater();
- m_qbsProjectParser = 0;
+ m_qbsProjectParser = nullptr;
emitParsingFinished(false);
parseCurrentBuildConfiguration();
return true;
@@ -514,10 +509,10 @@ void QbsProject::handleQbsParsingDone(bool success)
}
m_qbsProjectParser->deleteLater();
- m_qbsProjectParser = 0;
+ m_qbsProjectParser = nullptr;
m_qbsUpdateFutureInterface->reportFinished();
delete m_qbsUpdateFutureInterface;
- m_qbsUpdateFutureInterface = 0;
+ m_qbsUpdateFutureInterface = nullptr;
if (dataChanged)
updateAfterParse();
@@ -539,10 +534,10 @@ void QbsProject::handleRuleExecutionDone()
return;
m_qbsProjectParser->deleteLater();
- m_qbsProjectParser = 0;
+ m_qbsProjectParser = nullptr;
m_qbsUpdateFutureInterface->reportFinished();
delete m_qbsUpdateFutureInterface;
- m_qbsUpdateFutureInterface = 0;
+ m_qbsUpdateFutureInterface = nullptr;
QTC_ASSERT(m_qbsProject.isValid(), return);
m_projectData = m_qbsProject.projectData();
@@ -588,7 +583,7 @@ void QbsProject::parseCurrentBuildConfiguration()
if (!activeTarget())
return;
- QbsBuildConfiguration *bc = qobject_cast<QbsBuildConfiguration *>(activeTarget()->activeBuildConfiguration());
+ auto bc = qobject_cast<QbsBuildConfiguration *>(activeTarget()->activeBuildConfiguration());
if (!bc)
return;
@@ -719,7 +714,7 @@ void QbsProject::prepareForParsing()
m_qbsUpdateFutureInterface->reportFinished();
}
delete m_qbsUpdateFutureInterface;
- m_qbsUpdateFutureInterface = 0;
+ m_qbsUpdateFutureInterface = nullptr;
m_qbsUpdateFutureInterface = new QFutureInterface<bool>();
m_qbsUpdateFutureInterface->setProgressRange(0, 0);
diff --git a/src/plugins/qbsprojectmanager/qbsproject.h b/src/plugins/qbsprojectmanager/qbsproject.h
index c373ee8b0f..5d8c057a9c 100644
--- a/src/plugins/qbsprojectmanager/qbsproject.h
+++ b/src/plugins/qbsprojectmanager/qbsproject.h
@@ -146,16 +146,16 @@ private:
qbs::ProjectData m_projectData; // Cached m_qbsProject.projectData()
QSet<Core::IDocument *> m_qbsDocuments;
- QbsProjectParser *m_qbsProjectParser;
+ QbsProjectParser *m_qbsProjectParser = nullptr;
- QFutureInterface<bool> *m_qbsUpdateFutureInterface;
- bool m_parsingScheduled;
+ QFutureInterface<bool> *m_qbsUpdateFutureInterface = nullptr;
+ bool m_parsingScheduled = false;
enum CancelStatus {
CancelStatusNone,
CancelStatusCancelingForReparse,
CancelStatusCancelingAltoghether
- } m_cancelStatus;
+ } m_cancelStatus = CancelStatusNone;
CppTools::CppProjectUpdater *m_cppCodeModelUpdater = nullptr;
CppTools::ProjectInfo m_cppCodeModelProjectInfo;
@@ -164,7 +164,7 @@ private:
QTimer m_parsingDelay;
QList<ProjectExplorer::ExtraCompiler *> m_extraCompilers;
- bool m_extraCompilersPending;
+ bool m_extraCompilersPending = false;
};
} // namespace Internal
diff --git a/src/plugins/qbsprojectmanager/qbsprojectimporter.cpp b/src/plugins/qbsprojectmanager/qbsprojectimporter.cpp
index f483000395..8978631d6c 100644
--- a/src/plugins/qbsprojectmanager/qbsprojectimporter.cpp
+++ b/src/plugins/qbsprojectmanager/qbsprojectimporter.cpp
@@ -231,7 +231,7 @@ QList<BuildInfo *> QbsProjectImporter::buildInfoListForKit(const Kit *k, void *d
return result;
}
const auto * const bgData = static_cast<BuildGraphData *>(directoryData);
- QbsBuildInfo * const buildInfo = new QbsBuildInfo(factory);
+ auto * const buildInfo = new QbsBuildInfo(factory);
buildInfo->displayName = bgData->bgFilePath.toFileInfo().completeBaseName();
buildInfo->buildType = bgData->buildVariant == "debug"
? BuildConfiguration::Debug : BuildConfiguration::Release;
diff --git a/src/plugins/qbsprojectmanager/qbsprojectmanager.h b/src/plugins/qbsprojectmanager/qbsprojectmanager.h
index 7dae3ed297..c16aedb7a3 100644
--- a/src/plugins/qbsprojectmanager/qbsprojectmanager.h
+++ b/src/plugins/qbsprojectmanager/qbsprojectmanager.h
@@ -46,7 +46,7 @@ class QbsManager : public QObject
public:
QbsManager();
- ~QbsManager();
+ ~QbsManager() override;
// QBS profiles management:
static QString profileForKit(const ProjectExplorer::Kit *k);
diff --git a/src/plugins/qbsprojectmanager/qbsprojectmanagerplugin.cpp b/src/plugins/qbsprojectmanager/qbsprojectmanagerplugin.cpp
index d75efe0186..b235d7e359 100644
--- a/src/plugins/qbsprojectmanager/qbsprojectmanagerplugin.cpp
+++ b/src/plugins/qbsprojectmanager/qbsprojectmanagerplugin.cpp
@@ -114,7 +114,7 @@ bool QbsProjectManagerPlugin::initialize(const QStringList &arguments, QString *
Core::HelpManager::registerDocumentation({Core::ICore::documentationPath() + "/qbs.qch"});
ProjectManager::registerProjectType<QbsProject>(QmlJSTools::Constants::QBS_MIMETYPE);
- KitManager::registerKitInformation(new QbsKitInformation);
+ KitManager::registerKitInformation<QbsKitInformation>();
//menus
// Build Menu:
@@ -301,7 +301,7 @@ void QbsProjectManagerPlugin::extensionsInitialized()
void QbsProjectManagerPlugin::projectWasAdded(Project *project)
{
- QbsProject *qbsProject = qobject_cast<QbsProject *>(project);
+ auto qbsProject = qobject_cast<QbsProject *>(project);
if (!qbsProject)
return;
@@ -314,7 +314,7 @@ void QbsProjectManagerPlugin::projectWasAdded(Project *project)
void QbsProjectManagerPlugin::updateContextActions()
{
- QbsProject *project = qobject_cast<Internal::QbsProject *>(ProjectTree::currentProject());
+ auto project = qobject_cast<Internal::QbsProject *>(ProjectTree::currentProject());
const Node *node = ProjectTree::findCurrentNode();
bool isEnabled = !BuildManager::isBuilding(project)
&& project && !project->isParsing()
@@ -322,7 +322,7 @@ void QbsProjectManagerPlugin::updateContextActions()
bool isFile = project && node && (node->nodeType() == NodeType::File);
const bool isProduct = project && node && dynamic_cast<const QbsProductNode *>(node);
- const QbsProjectNode *subproject = dynamic_cast<const QbsProjectNode *>(node);
+ const auto subproject = dynamic_cast<const QbsProjectNode *>(node);
bool isSubproject = project && subproject && subproject != project->rootProjectNode();
m_reparseQbsCtx->setEnabled(isEnabled);
@@ -337,7 +337,7 @@ void QbsProjectManagerPlugin::updateContextActions()
void QbsProjectManagerPlugin::updateReparseQbsAction()
{
- QbsProject *project = qobject_cast<QbsProject *>(SessionManager::startupProject());
+ auto project = qobject_cast<QbsProject *>(SessionManager::startupProject());
m_reparseQbs->setEnabled(project
&& !BuildManager::isBuilding(project)
&& !project->isParsing());
@@ -363,14 +363,14 @@ void QbsProjectManagerPlugin::updateBuildActions()
fileName = editorNode->filePath().fileName();
fileVisible = editorProject && editorNode && dynamic_cast<QbsBaseProjectNode *>(editorNode->parentProjectNode());
- QbsProductNode *productNode =
- dynamic_cast<QbsProductNode *>(editorNode ? editorNode->parentProjectNode() : 0);
+ auto productNode =
+ dynamic_cast<QbsProductNode *>(editorNode ? editorNode->parentProjectNode() : nullptr);
if (productNode) {
productVisible = true;
productName = productNode->displayName();
}
- QbsProjectNode *subprojectNode =
- dynamic_cast<QbsProjectNode *>(productNode ? productNode->parentFolderNode() : 0);
+ auto subprojectNode =
+ dynamic_cast<QbsProjectNode *>(productNode ? productNode->parentFolderNode() : nullptr);
if (subprojectNode && editorProject && subprojectNode != editorProject->rootProjectNode()) {
subprojectVisible = true;
subprojectName = subprojectNode->displayName();
@@ -404,7 +404,7 @@ void QbsProjectManagerPlugin::updateBuildActions()
void QbsProjectManagerPlugin::projectChanged()
{
- QbsProject *project = qobject_cast<QbsProject *>(sender());
+ auto project = qobject_cast<QbsProject *>(sender());
if (!project || project == SessionManager::startupProject())
updateReparseQbsAction();
@@ -420,7 +420,7 @@ void QbsProjectManagerPlugin::buildFileContextMenu()
{
const Node *node = ProjectTree::findCurrentNode();
QTC_ASSERT(node, return);
- QbsProject *project = dynamic_cast<QbsProject *>(ProjectTree::currentProject());
+ auto project = dynamic_cast<QbsProject *>(ProjectTree::currentProject());
QTC_ASSERT(project, return);
buildSingleFile(project, node->filePath().toString());
}
@@ -457,10 +457,10 @@ void QbsProjectManagerPlugin::runStepsForProductContextMenu(const QList<Core::Id
{
const Node *node = ProjectTree::findCurrentNode();
QTC_ASSERT(node, return);
- QbsProject *project = dynamic_cast<QbsProject *>(ProjectTree::currentProject());
+ auto project = dynamic_cast<QbsProject *>(ProjectTree::currentProject());
QTC_ASSERT(project, return);
- const QbsProductNode * const productNode = dynamic_cast<const QbsProductNode *>(node);
+ const auto * const productNode = dynamic_cast<const QbsProductNode *>(node);
QTC_ASSERT(productNode, return);
runStepsForProducts(project, {QbsProject::uniqueProductName(productNode->qbsProductData())},
@@ -490,7 +490,7 @@ void QbsProjectManagerPlugin::runStepsForProduct(const QList<Core::Id> &stepType
Node *node = currentEditorNode();
if (!node)
return;
- QbsProductNode *product = dynamic_cast<QbsProductNode *>(node->parentProjectNode());
+ auto product = dynamic_cast<QbsProductNode *>(node->parentProjectNode());
if (!product)
return;
QbsProject *project = currentEditorProject();
@@ -522,10 +522,10 @@ void QbsProjectManagerPlugin::runStepsForSubprojectContextMenu(const QList<Core:
{
const Node *node = ProjectTree::findCurrentNode();
QTC_ASSERT(node, return);
- QbsProject *project = dynamic_cast<QbsProject *>(ProjectTree::currentProject());
+ auto project = dynamic_cast<QbsProject *>(ProjectTree::currentProject());
QTC_ASSERT(project, return);
- const QbsProjectNode *subProject = dynamic_cast<const QbsProjectNode *>(node);
+ const auto subProject = dynamic_cast<const QbsProjectNode *>(node);
QTC_ASSERT(subProject, return);
QStringList toBuild;
@@ -560,10 +560,10 @@ void QbsProjectManagerPlugin::runStepsForSubproject(const QList<Core::Id> &stepT
if (!editorNode || !editorProject)
return;
- QbsProjectNode *subproject = 0;
- QbsBaseProjectNode *start = dynamic_cast<QbsBaseProjectNode *>(editorNode->parentProjectNode());
+ QbsProjectNode *subproject = nullptr;
+ auto start = dynamic_cast<QbsBaseProjectNode *>(editorNode->parentProjectNode());
while (start && start != editorProject->rootProjectNode()) {
- QbsProjectNode *tmp = dynamic_cast<QbsProjectNode *>(start);
+ auto tmp = dynamic_cast<QbsProjectNode *>(start);
if (tmp) {
subproject = tmp;
break;
@@ -590,7 +590,7 @@ void QbsProjectManagerPlugin::buildFiles(QbsProject *project, const QStringList
Target *t = project->activeTarget();
if (!t)
return;
- QbsBuildConfiguration *bc = qobject_cast<QbsBuildConfiguration *>(t->activeBuildConfiguration());
+ auto bc = qobject_cast<QbsBuildConfiguration *>(t->activeBuildConfiguration());
if (!bc)
return;
@@ -623,7 +623,7 @@ void QbsProjectManagerPlugin::runStepsForProducts(QbsProject *project,
Target *t = project->activeTarget();
if (!t)
return;
- QbsBuildConfiguration *bc = qobject_cast<QbsBuildConfiguration *>(t->activeBuildConfiguration());
+ auto bc = qobject_cast<QbsBuildConfiguration *>(t->activeBuildConfiguration());
if (!bc)
return;
diff --git a/src/plugins/qbsprojectmanager/qbsprojectparser.cpp b/src/plugins/qbsprojectmanager/qbsprojectparser.cpp
index f823175d3d..3d67a087e3 100644
--- a/src/plugins/qbsprojectmanager/qbsprojectparser.cpp
+++ b/src/plugins/qbsprojectmanager/qbsprojectparser.cpp
@@ -49,10 +49,7 @@ namespace Internal {
// --------------------------------------------------------------------
QbsProjectParser::QbsProjectParser(QbsProject *project, QFutureInterface<bool> *fi) :
- m_qbsSetupProjectJob(0),
- m_ruleExecutionJob(0),
- m_fi(fi),
- m_currentProgressBase(0)
+ m_fi(fi)
{
m_project = project->qbsProject();
m_projectFilePath = project->projectFilePath().toString();
@@ -75,7 +72,7 @@ QbsProjectParser::~QbsProjectParser()
};
deleteJob(m_qbsSetupProjectJob);
deleteJob(m_ruleExecutionJob);
- m_fi = 0; // we do not own m_fi, do not delete
+ m_fi = nullptr; // we do not own m_fi, do not delete
}
void QbsProjectParser::parse(const QVariantMap &config, const Environment &env, const QString &dir,
@@ -114,7 +111,7 @@ void QbsProjectParser::parse(const QVariantMap &config, const Environment &env,
params.setPropertyCheckingMode(qbs::ErrorHandlingMode::Relaxed);
params.setLogElapsedTime(!qEnvironmentVariableIsEmpty(Constants::QBS_PROFILING_ENV));
- m_qbsSetupProjectJob = m_project.setupProject(params, QbsManager::logSink(), 0);
+ m_qbsSetupProjectJob = m_project.setupProject(params, QbsManager::logSink(), nullptr);
connect(m_qbsSetupProjectJob, &qbs::AbstractJob::finished,
this, &QbsProjectParser::handleQbsParsingDone);
diff --git a/src/plugins/qbsprojectmanager/qbsprojectparser.h b/src/plugins/qbsprojectmanager/qbsprojectparser.h
index 2ae45c8f9c..4c54d08b3b 100644
--- a/src/plugins/qbsprojectmanager/qbsprojectparser.h
+++ b/src/plugins/qbsprojectmanager/qbsprojectparser.h
@@ -44,7 +44,7 @@ class QbsProjectParser : public QObject
public:
QbsProjectParser(QbsProjectManager::Internal::QbsProject *project,
QFutureInterface<bool> *fi);
- ~QbsProjectParser();
+ ~QbsProjectParser() override;
void parse(const QVariantMap &config, const Utils::Environment &env, const QString &dir,
const QString &configName);
@@ -70,14 +70,14 @@ private:
void handleRuleExecutionDone();
QString m_projectFilePath;
- qbs::SetupProjectJob *m_qbsSetupProjectJob;
- qbs::BuildJob *m_ruleExecutionJob;
+ qbs::SetupProjectJob *m_qbsSetupProjectJob = nullptr;
+ qbs::BuildJob *m_ruleExecutionJob = nullptr;
qbs::ErrorInfo m_error;
qbs::Project m_project;
bool m_dryRun;
- QFutureInterface<bool> *m_fi;
- int m_currentProgressBase;
+ QFutureInterface<bool> *m_fi = nullptr;
+ int m_currentProgressBase = 0;
};
} // namespace Internal
diff --git a/src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp b/src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp
index 83c6ea4a6e..e2d2f56d35 100644
--- a/src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp
+++ b/src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp
@@ -69,6 +69,12 @@ QbsRunConfiguration::QbsRunConfiguration(Target *target, Core::Id id)
addExtraAspect(libAspect);
connect(libAspect, &UseLibraryPathsAspect::changed,
envAspect, &EnvironmentAspect::environmentChanged);
+ if (HostOsInfo::isMacHost()) {
+ auto dyldAspect = new UseDyldSuffixAspect(this, "Qbs.RunConfiguration.UseDyldImageSuffix");
+ addExtraAspect(dyldAspect);
+ connect(dyldAspect, &UseDyldSuffixAspect::changed,
+ envAspect, &EnvironmentAspect::environmentChanged);
+ }
connect(project(), &Project::parsingFinished, this,
[envAspect]() { envAspect->buildEnvironmentHasChanged(); });
@@ -81,7 +87,7 @@ QbsRunConfiguration::QbsRunConfiguration(Target *target, Core::Id id)
connect(target, &Target::kitChanged,
this, &QbsRunConfiguration::updateTargetInformation);
- QbsProject *qbsProject = static_cast<QbsProject *>(target->project());
+ auto qbsProject = static_cast<QbsProject *>(target->project());
connect(qbsProject, &QbsProject::dataChanged, this, [this] { m_envCache.clear(); });
connect(qbsProject, &Project::parsingFinished,
this, &QbsRunConfiguration::updateTargetInformation);
@@ -109,6 +115,10 @@ void QbsRunConfiguration::doAdditionalSetup(const RunConfigurationCreationInfo &
void QbsRunConfiguration::addToBaseEnvironment(Utils::Environment &env) const
{
+ if (auto dyldAspect = extraAspect<UseDyldSuffixAspect>()) {
+ if (dyldAspect->value())
+ env.set("DYLD_IMAGE_SUFFIX", "_debug");
+ }
bool usingLibraryPaths = extraAspect<UseLibraryPathsAspect>()->value();
const auto key = qMakePair(env.toStringList(), usingLibraryPaths);
@@ -177,6 +187,8 @@ QbsRunConfigurationFactory::QbsRunConfigurationFactory()
registerRunConfiguration<QbsRunConfiguration>("Qbs.RunConfiguration:");
addSupportedProjectType(Constants::PROJECT_ID);
addSupportedTargetDeviceType(ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE);
+
+ addRunWorkerFactory<SimpleTargetRunner>(ProjectExplorer::Constants::NORMAL_RUN_MODE);
}
} // namespace Internal
diff --git a/src/plugins/qmakeandroidsupport/androidqmakebuildconfigurationfactory.cpp b/src/plugins/qmakeandroidsupport/androidqmakebuildconfigurationfactory.cpp
index 1100a7e7e4..308caa4719 100644
--- a/src/plugins/qmakeandroidsupport/androidqmakebuildconfigurationfactory.cpp
+++ b/src/plugins/qmakeandroidsupport/androidqmakebuildconfigurationfactory.cpp
@@ -24,26 +24,22 @@
****************************************************************************/
#include "androidqmakebuildconfigurationfactory.h"
-#include "qmakeandroidbuildapkstep.h"
+#include <android/androidbuildapkstep.h>
#include <android/androidconfigurations.h>
#include <android/androidconstants.h>
#include <android/androidmanager.h>
#include <android/androidpackageinstallationstep.h>
-#include <projectexplorer/buildmanager.h>
#include <projectexplorer/buildsteplist.h>
-#include <projectexplorer/projectexplorer.h>
+#include <projectexplorer/project.h>
#include <projectexplorer/projectexplorerconstants.h>
#include <projectexplorer/target.h>
-#include <qmakeprojectmanager/qmakebuildinfo.h>
-#include <qmakeprojectmanager/qmakeproject.h>
#include <qmakeprojectmanager/qmakeprojectmanagerconstants.h>
using namespace Android;
using namespace ProjectExplorer;
-using namespace QmakeProjectManager;
namespace QmakeAndroidSupport {
namespace Internal {
@@ -74,34 +70,15 @@ void AndroidQmakeBuildConfiguration::initialize(const BuildInfo *info)
BuildStepList *buildSteps = stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
buildSteps->appendStep(new AndroidPackageInstallationStep(buildSteps));
- buildSteps->appendStep(new QmakeAndroidBuildApkStep(buildSteps));
+ buildSteps->appendStep(new Android::AndroidBuildApkStep(buildSteps));
updateCacheAndEmitEnvironmentChanged();
}
void AndroidQmakeBuildConfiguration::addToEnvironment(Utils::Environment &env) const
{
- m_androidNdkPlatform = AndroidConfigurations::currentConfig().bestNdkPlatformMatch(AndroidManager::minimumSDK(target()));
- env.set(QLatin1String("ANDROID_NDK_PLATFORM"), m_androidNdkPlatform);
-}
-
-void AndroidQmakeBuildConfiguration::manifestSaved()
-{
QString androidNdkPlatform = AndroidConfigurations::currentConfig().bestNdkPlatformMatch(AndroidManager::minimumSDK(target()));
- if (m_androidNdkPlatform == androidNdkPlatform)
- return;
-
- updateCacheAndEmitEnvironmentChanged();
-
- QMakeStep *qs = qmakeStep();
- if (!qs)
- return;
-
- qs->setForced(true);
-
- BuildManager::buildList(stepList(ProjectExplorer::Constants::BUILDSTEPS_CLEAN));
- BuildManager::appendStep(qs, ProjectExplorerPlugin::displayNameForStepId(ProjectExplorer::Constants::BUILDSTEPS_CLEAN));
- setSubNodeBuild(0);
+ env.set(QLatin1String("ANDROID_NDK_PLATFORM"), androidNdkPlatform);
}
} // namespace Internal
diff --git a/src/plugins/qmakeandroidsupport/androidqmakebuildconfigurationfactory.h b/src/plugins/qmakeandroidsupport/androidqmakebuildconfigurationfactory.h
index 71d727adb9..361cf9b80d 100644
--- a/src/plugins/qmakeandroidsupport/androidqmakebuildconfigurationfactory.h
+++ b/src/plugins/qmakeandroidsupport/androidqmakebuildconfigurationfactory.h
@@ -45,10 +45,6 @@ public:
void initialize(const ProjectExplorer::BuildInfo *info) override;
void addToEnvironment(Utils::Environment &env) const override;
- void manifestSaved();
-
-private:
- mutable QString m_androidNdkPlatform;
};
} // namespace Internal
diff --git a/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkstep.cpp b/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkstep.cpp
deleted file mode 100644
index 1f409ebd3a..0000000000
--- a/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkstep.cpp
+++ /dev/null
@@ -1,213 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 BogDan Vatra <bog_dan_ro@yahoo.com>
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of Qt Creator.
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-****************************************************************************/
-
-#include "qmakeandroidbuildapkstep.h"
-#include "qmakeandroidbuildapkwidget.h"
-
-#include <android/androidconfigurations.h>
-#include <android/androidconstants.h>
-#include <android/androidmanager.h>
-#include <android/androidqtsupport.h>
-
-#include <projectexplorer/buildconfiguration.h>
-#include <projectexplorer/buildsteplist.h>
-#include <projectexplorer/project.h>
-#include <projectexplorer/projectexplorer.h>
-#include <projectexplorer/target.h>
-#include <qtsupport/qtkitinformation.h>
-
-#include <qmakeprojectmanager/qmakeprojectmanagerconstants.h>
-
-#include <utils/qtcprocess.h>
-
-using namespace Android;
-
-namespace QmakeAndroidSupport {
-namespace Internal {
-
-const Core::Id ANDROID_BUILD_APK_ID("QmakeProjectManager.AndroidBuildApkStep");
-
-
-// QmakeAndroidBuildApkStepFactory
-
-QmakeAndroidBuildApkStepFactory::QmakeAndroidBuildApkStepFactory()
-{
- registerStep<QmakeAndroidBuildApkStep>(ANDROID_BUILD_APK_ID);
- setSupportedProjectType(QmakeProjectManager::Constants::QMAKEPROJECT_ID);
- setSupportedDeviceType(Constants::ANDROID_DEVICE_TYPE);
- setSupportedStepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
- setDisplayName(tr("Build Android APK"));
- setRepeatable(false);
-}
-
-// QmakeAndroidBuildApkStep
-
-QmakeAndroidBuildApkStep::QmakeAndroidBuildApkStep(ProjectExplorer::BuildStepList *bc)
- : AndroidBuildApkStep(bc, ANDROID_BUILD_APK_ID)
-{
-}
-
-Utils::FileName QmakeAndroidBuildApkStep::proFilePathForInputFile() const
-{
- ProjectExplorer::RunConfiguration *rc = target()->activeRunConfiguration();
- if (rc)
- return Utils::FileName::fromString(rc->buildKey());
- return Utils::FileName();
-}
-
-bool QmakeAndroidBuildApkStep::init(QList<const BuildStep *> &earlierSteps)
-{
- if (AndroidManager::checkForQt51Files(project()->projectDirectory()))
- emit addOutput(tr("Found old folder \"android\" in source directory. Qt 5.2 does not use that folder by default."), OutputFormat::Stderr);
-
- if (!AndroidBuildApkStep::init(earlierSteps))
- return false;
-
- QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(target()->kit());
- if (!version)
- return false;
-
- QString command = version->qmakeProperty("QT_HOST_BINS");
- if (!command.endsWith('/'))
- command += '/';
- command += "androiddeployqt";
- if (Utils::HostOsInfo::isWindowsHost())
- command += ".exe";
-
- ProjectExplorer::BuildConfiguration *bc = buildConfiguration();
- QString outputDir = bc->buildDirectory().appendPath(Constants::ANDROID_BUILDDIRECTORY).toString();
-
- QString inputFile = AndroidManager::androidQtSupport(target())->deploySettingsFile(target());
- if (inputFile.isEmpty()) {
- m_skipBuilding = true;
- return true;
- }
-
- QString buildTargetSdk = AndroidManager::buildTargetSDK(target());
- if (buildTargetSdk.isEmpty()) {
- emit addOutput(tr("Android build SDK not defined. Check Android settings."),
- OutputFormat::Stderr);
- return false;
- }
-
- QStringList arguments = {"--input", inputFile,
- "--output", outputDir,
- "--android-platform", AndroidManager::buildTargetSDK(target()),
- "--jdk", AndroidConfigurations::currentConfig().openJDKLocation().toString()};
-
- if (m_verbose)
- arguments << "--verbose";
-
- arguments << "--gradle";
-
- if (m_useMinistro)
- arguments << "--deployment" << "ministro";
-
- QStringList argumentsPasswordConcealed = arguments;
-
- if (m_signPackage) {
- arguments << "--sign" << m_keystorePath.toString() << m_certificateAlias
- << "--storepass" << m_keystorePasswd;
- argumentsPasswordConcealed << "--sign" << "******"
- << "--storepass" << "******";
- if (!m_certificatePasswd.isEmpty()) {
- arguments << "--keypass" << m_certificatePasswd;
- argumentsPasswordConcealed << "--keypass" << "******";
- }
-
- }
-
- // Must be the last option, otherwise androiddeployqt might use the other
- // params (e.g. --sign) to choose not to add gdbserver
- if (version->qtVersion() >= QtSupport::QtVersionNumber(5, 6, 0)) {
- if (m_addDebugger || bc->buildType() == ProjectExplorer::BuildConfiguration::Debug)
- arguments << "--gdbserver";
- else
- arguments << "--no-gdbserver";
- }
-
- ProjectExplorer::ProcessParameters *pp = processParameters();
- setupProcessParameters(pp, bc, arguments, command);
-
- // Generate arguments with keystore password concealed
- ProjectExplorer::ProcessParameters pp2;
- setupProcessParameters(&pp2, bc, argumentsPasswordConcealed, command);
- m_command = pp2.effectiveCommand();
- m_argumentsPasswordConcealed = pp2.prettyArguments();
-
- return true;
-}
-
-void QmakeAndroidBuildApkStep::run(QFutureInterface<bool> &fi)
-{
- if (m_skipBuilding) {
- emit addOutput(tr("No application .pro file found, not building an APK."), BuildStep::OutputFormat::ErrorMessage);
- reportRunResult(fi, true);
- return;
- }
- AndroidBuildApkStep::run(fi);
-}
-
-void QmakeAndroidBuildApkStep::setupProcessParameters(ProjectExplorer::ProcessParameters *pp,
- ProjectExplorer::BuildConfiguration *bc,
- const QStringList &arguments,
- const QString &command)
-{
- pp->setMacroExpander(bc->macroExpander());
- pp->setWorkingDirectory(bc->buildDirectory().toString());
- Utils::Environment env = bc->environment();
- pp->setEnvironment(env);
- pp->setCommand(command);
- pp->setArguments(Utils::QtcProcess::joinArgs(arguments));
- pp->resolveAll();
-}
-
-void QmakeAndroidBuildApkStep::processStarted()
-{
- emit addOutput(tr("Starting: \"%1\" %2")
- .arg(QDir::toNativeSeparators(m_command),
- m_argumentsPasswordConcealed),
- BuildStep::OutputFormat::NormalMessage);
-}
-
-ProjectExplorer::BuildStepConfigWidget *QmakeAndroidBuildApkStep::createConfigWidget()
-{
- return new QmakeAndroidBuildApkWidget(this);
-}
-
-bool QmakeAndroidBuildApkStep::fromMap(const QVariantMap &map)
-{
- return AndroidBuildApkStep::fromMap(map);
-}
-
-QVariantMap QmakeAndroidBuildApkStep::toMap() const
-{
- QVariantMap map = AndroidBuildApkStep::toMap();
- return map;
-}
-
-} // namespace Internal
-} // namespace QmakeAndroidSupport
diff --git a/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkstep.h b/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkstep.h
deleted file mode 100644
index 6435a8486a..0000000000
--- a/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkstep.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 BogDan Vatra <bog_dan_ro@yahoo.com>
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of Qt Creator.
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-****************************************************************************/
-
-#pragma once
-
-#include <android/androidbuildapkstep.h>
-
-namespace QmakeAndroidSupport {
-namespace Internal {
-
-class QmakeAndroidBuildApkStepFactory : public ProjectExplorer::BuildStepFactory
-{
- Q_OBJECT
-
-public:
- QmakeAndroidBuildApkStepFactory();
-};
-
-class QmakeAndroidBuildApkStep : public Android::AndroidBuildApkStep
-{
- Q_OBJECT
-public:
- QmakeAndroidBuildApkStep(ProjectExplorer::BuildStepList *bc);
- Utils::FileName proFilePathForInputFile() const;
-
-protected:
- bool init(QList<const BuildStep *> &earlierSteps) override;
- void run(QFutureInterface<bool> &fi) override;
- void processStarted() override;
- ProjectExplorer::BuildStepConfigWidget *createConfigWidget() override;
- bool fromMap(const QVariantMap &map) override;
- QVariantMap toMap() const override;
-
-private:
- void setupProcessParameters(ProjectExplorer::ProcessParameters *pp,
- ProjectExplorer::BuildConfiguration *bc,
- const QStringList &arguments, const QString &command);
- QString m_command;
- QString m_argumentsPasswordConcealed;
- bool m_skipBuilding = false;
-};
-
-} // namespace Internal
-} // namespace QmakeAndroidSupport
diff --git a/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkwidget.cpp b/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkwidget.cpp
deleted file mode 100644
index 2ab00a54f1..0000000000
--- a/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkwidget.cpp
+++ /dev/null
@@ -1,145 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 BogDan Vatra <bog_dan_ro@yahoo.com>
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of Qt Creator.
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-****************************************************************************/
-
-#include "createandroidmanifestwizard.h"
-#include "qmakeandroidbuildapkstep.h"
-#include "qmakeandroidbuildapkwidget.h"
-#include "ui_qmakeandroidbuildapkwidget.h"
-
-#include <android/androidbuildapkwidget.h>
-#include <android/androidmanager.h>
-
-#include <projectexplorer/project.h>
-
-#include <utils/utilsicons.h>
-
-#include <QFileDialog>
-#include <QLabel>
-
-namespace QmakeAndroidSupport {
-namespace Internal {
-
-QmakeAndroidBuildApkWidget::QmakeAndroidBuildApkWidget(Android::AndroidBuildApkStep *step) :
- m_ui(new Ui::QmakeAndroidBuildApkWidget),
- m_step(step)
-{
- QVBoxLayout *topLayout = new QVBoxLayout;
-
- QHBoxLayout *qt51WarningLayout = new QHBoxLayout();
- QLabel *oldFilesWarningIcon = new QLabel(this);
- oldFilesWarningIcon->setObjectName(QStringLiteral("oldFilesWarningIcon"));
- QSizePolicy sizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred);
- sizePolicy.setHorizontalStretch(0);
- sizePolicy.setVerticalStretch(0);
- sizePolicy.setHeightForWidth(oldFilesWarningIcon->sizePolicy().hasHeightForWidth());
- oldFilesWarningIcon->setSizePolicy(sizePolicy);
- oldFilesWarningIcon->setPixmap(Utils::Icons::WARNING.pixmap());
- oldFilesWarningIcon->setAlignment(Qt::Alignment(Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop));
- qt51WarningLayout->addWidget(oldFilesWarningIcon);
-
- QLabel *oldFilesWarningLabel = new QLabel(this);
- oldFilesWarningLabel->setObjectName(QStringLiteral("oldFilesWarningLabel"));
- oldFilesWarningLabel->setWordWrap(true);
- qt51WarningLayout->addWidget(oldFilesWarningLabel);
-
- topLayout->addWidget(new Android::AndroidBuildApkWidget(step));
-
- QWidget *widget = new QWidget(this);
- m_ui->setupUi(widget);
- topLayout->addWidget(widget);
- setLayout(topLayout);
-
- bool oldFiles = Android::AndroidManager::checkForQt51Files(m_step->project()->projectDirectory());
- oldFilesWarningIcon->setVisible(oldFiles);
- oldFilesWarningLabel->setVisible(oldFiles);
-
- m_extraLibraryListModel = new AndroidExtraLibraryListModel(m_step->target(), this);
- m_ui->androidExtraLibsListView->setModel(m_extraLibraryListModel);
-
- connect(m_ui->createAndroidTemplatesButton, &QAbstractButton::clicked,
- this, &QmakeAndroidBuildApkWidget::createAndroidTemplatesButton);
-
- connect(m_ui->addAndroidExtraLibButton, &QAbstractButton::clicked,
- this, &QmakeAndroidBuildApkWidget::addAndroidExtraLib);
-
- connect(m_ui->removeAndroidExtraLibButton, &QAbstractButton::clicked,
- this, &QmakeAndroidBuildApkWidget::removeAndroidExtraLib);
-
- connect(m_ui->androidExtraLibsListView->selectionModel(), &QItemSelectionModel::selectionChanged,
- this, &QmakeAndroidBuildApkWidget::checkEnableRemoveButton);
-
- connect(m_extraLibraryListModel, &AndroidExtraLibraryListModel::enabledChanged,
- m_ui->additionalLibrariesGroupBox, &QWidget::setEnabled);
-
- m_ui->additionalLibrariesGroupBox->setEnabled(m_extraLibraryListModel->isEnabled());
-}
-
-QmakeAndroidBuildApkWidget::~QmakeAndroidBuildApkWidget()
-{
- delete m_ui;
-}
-
-void QmakeAndroidBuildApkWidget::createAndroidTemplatesButton()
-{
- CreateAndroidManifestWizard wizard(m_step->target());
- wizard.exec();
-}
-
-void QmakeAndroidBuildApkWidget::addAndroidExtraLib()
-{
- QStringList fileNames = QFileDialog::getOpenFileNames(this,
- tr("Select additional libraries"),
- QDir::homePath(),
- tr("Libraries (*.so)"));
-
- if (!fileNames.isEmpty())
- m_extraLibraryListModel->addEntries(fileNames);
-}
-
-void QmakeAndroidBuildApkWidget::removeAndroidExtraLib()
-{
- QModelIndexList removeList = m_ui->androidExtraLibsListView->selectionModel()->selectedIndexes();
- m_extraLibraryListModel->removeEntries(removeList);
-}
-
-void QmakeAndroidBuildApkWidget::checkEnableRemoveButton()
-{
- m_ui->removeAndroidExtraLibButton->setEnabled(m_ui->androidExtraLibsListView->selectionModel()->hasSelection());
-}
-
-QString QmakeAndroidBuildApkWidget::summaryText() const
-{
- return tr("<b>Build Android APK</b>");
-}
-
-QString QmakeAndroidBuildApkWidget::displayName() const
-{
- return summaryText();
-}
-
-} // namespace Internal
-} // namespace QmakeAndroidSupport
-
-
diff --git a/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkwidget.h b/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkwidget.h
deleted file mode 100644
index d61d6a8c26..0000000000
--- a/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkwidget.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 BogDan Vatra <bog_dan_ro@yahoo.com>
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of Qt Creator.
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-****************************************************************************/
-
-#pragma once
-
-#include "androidextralibrarylistmodel.h"
-
-#include <projectexplorer/buildstep.h>
-#include <android/androidbuildapkstep.h>
-
-#include <QWidget>
-
-namespace QmakeAndroidSupport {
-namespace Internal {
-
-namespace Ui { class QmakeAndroidBuildApkWidget; }
-
-class QmakeAndroidBuildApkWidget : public ProjectExplorer::BuildStepConfigWidget
-{
- Q_OBJECT
-
-public:
- explicit QmakeAndroidBuildApkWidget(Android::AndroidBuildApkStep *step);
- ~QmakeAndroidBuildApkWidget();
-
-private:
- void createAndroidTemplatesButton();
- void addAndroidExtraLib();
- void removeAndroidExtraLib();
- void checkEnableRemoveButton();
-
-private:
- Ui::QmakeAndroidBuildApkWidget *m_ui = nullptr;
- Android::AndroidBuildApkStep *m_step = nullptr;
- AndroidExtraLibraryListModel *m_extraLibraryListModel = nullptr;
- bool m_ignoreChange = false;
-
- // BuildStepConfigWidget interface
- QString summaryText() const final;
- QString displayName() const final;
-};
-
-} // namespace Internal
-} // namespace QmakeAndroidSupport
diff --git a/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkwidget.ui b/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkwidget.ui
deleted file mode 100644
index 894a4bb689..0000000000
--- a/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkwidget.ui
+++ /dev/null
@@ -1,135 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>QmakeAndroidSupport::Internal::QmakeAndroidBuildApkWidget</class>
- <widget class="QWidget" name="QmakeAndroidSupport::Internal::QmakeAndroidBuildApkWidget">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>680</width>
- <height>435</height>
- </rect>
- </property>
- <property name="windowTitle">
- <string/>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout_2">
- <item>
- <widget class="QGroupBox" name="additionalLibrariesGroupBox_2">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Minimum">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="title">
- <string>Android</string>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout">
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout">
- <item>
- <widget class="QPushButton" name="createAndroidTemplatesButton">
- <property name="text">
- <string>Create Templates</string>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="horizontalSpacer">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </item>
- </layout>
- </widget>
- </item>
- <item>
- <widget class="QGroupBox" name="additionalLibrariesGroupBox">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Expanding">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="title">
- <string>Additional Libraries</string>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout_3">
- <item>
- <layout class="QHBoxLayout" name="androidExtraLibsLayout">
- <item>
- <widget class="QListView" name="androidExtraLibsListView">
- <property name="toolTip">
- <string>List of extra libraries to include in Android package and load on startup.</string>
- </property>
- <property name="selectionMode">
- <enum>QAbstractItemView::ExtendedSelection</enum>
- </property>
- </widget>
- </item>
- <item>
- <layout class="QVBoxLayout" name="androidExtraLibsButtonLayout">
- <item>
- <widget class="QToolButton" name="addAndroidExtraLibButton">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="toolTip">
- <string>Select library to include in package.</string>
- </property>
- <property name="text">
- <string>Add...</string>
- </property>
- <property name="toolButtonStyle">
- <enum>Qt::ToolButtonTextOnly</enum>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="removeAndroidExtraLibButton">
- <property name="toolTip">
- <string>Remove currently selected library from list.</string>
- </property>
- <property name="text">
- <string>Remove</string>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="verticalSpacer_2">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>40</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </item>
- </layout>
- </item>
- </layout>
- </widget>
- </item>
- </layout>
- </widget>
- <resources/>
- <connections/>
-</ui>
diff --git a/src/plugins/qmakeandroidsupport/qmakeandroidsupport.cpp b/src/plugins/qmakeandroidsupport/qmakeandroidsupport.cpp
index 63d7d50fd5..ffd1ef7243 100644
--- a/src/plugins/qmakeandroidsupport/qmakeandroidsupport.cpp
+++ b/src/plugins/qmakeandroidsupport/qmakeandroidsupport.cpp
@@ -23,10 +23,10 @@
**
****************************************************************************/
-#include "qmakeandroidbuildapkstep.h"
#include "qmakeandroidsupport.h"
#include "androidqmakebuildconfigurationfactory.h"
+#include <android/androidbuildapkstep.h>
#include <android/androidconstants.h>
#include <android/androidglobal.h>
@@ -36,6 +36,8 @@
#include <qtsupport/qtkitinformation.h>
#include <qmakeprojectmanager/qmakeproject.h>
+#include <utils/qtcassert.h>
+
#include <QJsonDocument>
#include <QJsonObject>
#include <QRegularExpression>
@@ -52,6 +54,84 @@ bool QmakeAndroidSupport::canHandle(const ProjectExplorer::Target *target) const
return qobject_cast<QmakeProject*>(target->project());
}
+QVariant QmakeAndroidSupport::targetData(Core::Id role, const Target *target) const
+{
+ RunConfiguration *rc = target->activeRunConfiguration();
+ if (!rc)
+ return {};
+
+ const FileName projectFilePath = FileName::fromString(rc->buildKey());
+ const QmakeProject *pro = qobject_cast<QmakeProject *>(target->project());
+ QTC_ASSERT(pro, return {});
+ QTC_ASSERT(pro->rootProjectNode(), return {});
+ const QmakeProFileNode *profileNode = pro->rootProjectNode()->findProFileFor(projectFilePath);
+ QTC_ASSERT(profileNode, return {});
+
+ if (role == Android::Constants::AndroidPackageSourceDir)
+ return profileNode->singleVariableValue(Variable::AndroidPackageSourceDir);
+ if (role == Android::Constants::AndroidDeploySettingsFile)
+ return profileNode->singleVariableValue(Variable::AndroidDeploySettingsFile);
+ if (role == Android::Constants::AndroidExtraLibs)
+ return profileNode->variableValue(Variable::AndroidExtraLibs);
+ if (role == Android::Constants::AndroidArch)
+ return profileNode->singleVariableValue(Variable::AndroidArch);
+
+ QTC_CHECK(false);
+ return {};
+}
+
+static QmakeProFile *applicationProFile(const Target *target)
+{
+ ProjectExplorer::RunConfiguration *rc = target->activeRunConfiguration();
+ if (!rc)
+ return nullptr;
+ auto project = static_cast<QmakeProject *>(target->project());
+ return project->rootProFile()->findProFile(FileName::fromString(rc->buildKey()));
+}
+
+bool QmakeAndroidSupport::parseInProgress(const Target *target) const
+{
+ QmakeProjectManager::QmakeProFile *pro = applicationProFile(target);
+ return !pro || pro->parseInProgress();
+}
+
+bool QmakeAndroidSupport::validParse(const Target *target) const
+{
+ QmakeProjectManager::QmakeProFile *pro = applicationProFile(target);
+ return pro->validParse() && pro->projectType() == ProjectType::ApplicationTemplate;
+}
+
+bool QmakeAndroidSupport::extraLibraryEnabled(const Target *target) const
+{
+ QmakeProFile *pro = applicationProFile(target);
+ return pro && !pro->parseInProgress();
+}
+
+FileName QmakeAndroidSupport::projectFilePath(const Target *target) const
+{
+ QmakeProFile *pro = applicationProFile(target);
+ return pro ? pro->filePath() : FileName();
+}
+
+bool QmakeAndroidSupport::setTargetData(Core::Id role, const QVariant &value, const Target *target) const
+{
+ QmakeProFile *pro = applicationProFile(target);
+ if (!pro)
+ return false;
+
+ const QString arch = pro->singleVariableValue(Variable::AndroidArch);
+ const QString scope = "contains(ANDROID_TARGET_ARCH," + arch + ')';
+ auto flags = QmakeProjectManager::Internal::ProWriter::ReplaceValues
+ | QmakeProjectManager::Internal::ProWriter::MultiLine;
+
+ if (role == Android::Constants::AndroidExtraLibs)
+ return pro->setProVariable("ANDROID_EXTRA_LIBS", value.toStringList(), scope, flags);
+ if (role == Android::Constants::AndroidPackageSourceDir)
+ return pro->setProVariable("ANDROID_PACKAGE_SOURCE_DIR", {value.toString()}, scope, flags);
+
+ return false;
+}
+
QStringList QmakeAndroidSupport::soLibSearchPath(const ProjectExplorer::Target *target) const
{
QSet<QString> res;
@@ -70,7 +150,9 @@ QStringList QmakeAndroidSupport::soLibSearchPath(const ProjectExplorer::Target *
+ '/' + destDir.toString()));
res.insert(destDir.toString());
}
- QFile deploymentSettings(androiddeployJsonPath(target).toString());
+
+ const QString jsonFile = targetData(Android::Constants::AndroidDeploySettingsFile, target).toString();
+ QFile deploymentSettings(jsonFile);
if (deploymentSettings.open(QIODevice::ReadOnly)) {
QJsonParseError error;
QJsonDocument doc = QJsonDocument::fromJson(deploymentSettings.readAll(), &error);
@@ -86,17 +168,6 @@ QStringList QmakeAndroidSupport::soLibSearchPath(const ProjectExplorer::Target *
return res.toList();
}
-QStringList QmakeAndroidSupport::androidExtraLibs(const ProjectExplorer::Target *target) const
-{
- ProjectExplorer::RunConfiguration *rc = target->activeRunConfiguration();
- if (!rc)
- return QStringList();
- auto project = static_cast<QmakeProject *>(target->project());
- QmakeProFileNode *node =
- project->rootProjectNode()->findProFileFor(Utils::FileName::fromString(rc->buildKey()));
- return node->variableValue(QmakeProjectManager::Variable::AndroidExtraLibs);
-}
-
QStringList QmakeAndroidSupport::projectTargetApplications(const ProjectExplorer::Target *target) const
{
QStringList apps;
@@ -116,91 +187,14 @@ QStringList QmakeAndroidSupport::projectTargetApplications(const ProjectExplorer
return apps;
}
-Utils::FileName QmakeAndroidSupport::androiddeployqtPath(const ProjectExplorer::Target *target) const
-{
- QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(target->kit());
- if (!version)
- return Utils::FileName();
-
- QString command = version->qmakeProperty("QT_HOST_BINS");
- if (!command.endsWith(QLatin1Char('/')))
- command += QLatin1Char('/');
- command += Utils::HostOsInfo::withExecutableSuffix(QLatin1String("androiddeployqt"));
- return Utils::FileName::fromString(command);
-}
-
-Utils::FileName QmakeAndroidSupport::androiddeployJsonPath(const ProjectExplorer::Target *target) const
-{
- const auto *pro = static_cast<QmakeProject *>(target->project());
- QmakeAndroidBuildApkStep *buildApkStep
- = Android::AndroidGlobal::buildStep<QmakeAndroidBuildApkStep>(target->activeBuildConfiguration());
-
- if (!buildApkStep) // should never happen
- return Utils::FileName();
-
- const QmakeProFileNode *node =
- pro->rootProjectNode()->findProFileFor(buildApkStep->proFilePathForInputFile());
- if (!node) // should never happen
- return Utils::FileName();
-
- QString inputFile = node->singleVariableValue(Variable::AndroidDeploySettingsFile);
- if (inputFile.isEmpty()) // should never happen
- return Utils::FileName();
-
- return Utils::FileName::fromString(inputFile);
-}
-
-void QmakeAndroidSupport::manifestSaved(const ProjectExplorer::Target *target)
+void QmakeAndroidSupport::addFiles(const ProjectExplorer::Target *target,
+ const QString &buildKey,
+ const QStringList &addedFiles) const
{
- ProjectExplorer::BuildConfiguration *bc = target->activeBuildConfiguration();
- if (auto qbc = qobject_cast<AndroidQmakeBuildConfiguration *>(bc))
- qbc->manifestSaved();
-}
-
-Utils::FileName QmakeAndroidSupport::manifestSourcePath(const ProjectExplorer::Target *target)
-{
- if (ProjectExplorer::RunConfiguration *rc = target->activeRunConfiguration()) {
- const auto project = static_cast<QmakeProjectManager::QmakeProject *>(target->project());
- if (project->rootProjectNode()) {
- const QmakeProFileNode *node =
- project->rootProjectNode()->findProFileFor(Utils::FileName::fromString(rc->buildKey()));
- if (node) {
- QString packageSource = node->singleVariableValue(Variable::AndroidPackageSourceDir);
- if (!packageSource.isEmpty()) {
- const auto manifest = Utils::FileName::fromUserInput(packageSource +
- "/AndroidManifest.xml");
- if (manifest.exists())
- return manifest;
- }
- }
- }
- }
- return Utils::FileName();
-}
-
-static QmakeProFileNode *activeNodeForTarget(const Target *target)
-{
- FileName proFilePathForInputFile;
- if (RunConfiguration *rc = target->activeRunConfiguration())
- proFilePathForInputFile = FileName::fromString(rc->buildKey());
- const auto pro = static_cast<QmakeProject *>(target->project());
- return pro->rootProjectNode()->findProFileFor(proFilePathForInputFile);
-}
-
-QString QmakeAndroidSupport::deploySettingsFile(const Target *target) const
-{
- if (QmakeProFileNode *node = activeNodeForTarget(target))
- return node->singleVariableValue(Variable::AndroidDeploySettingsFile);
- return QString();
-}
-
-FileName QmakeAndroidSupport::packageSourceDir(const Target *target) const
-{
- if (QmakeProFileNode *node = activeNodeForTarget(target)) {
- QFileInfo sourceDirInfo(node->singleVariableValue(Variable::AndroidPackageSourceDir));
- return FileName::fromString(sourceDirInfo.canonicalFilePath());
- }
- return FileName();
+ QmakeProject *project = static_cast<QmakeProject *>(target->project());
+ QmakeProFile *currentRunNode = project->rootProFile()->findProFile(FileName::fromString(buildKey));
+ QTC_ASSERT(currentRunNode, return);
+ currentRunNode->addFiles(addedFiles);
}
} // namespace Internal
diff --git a/src/plugins/qmakeandroidsupport/qmakeandroidsupport.h b/src/plugins/qmakeandroidsupport/qmakeandroidsupport.h
index 51ac390702..21d10a8153 100644
--- a/src/plugins/qmakeandroidsupport/qmakeandroidsupport.h
+++ b/src/plugins/qmakeandroidsupport/qmakeandroidsupport.h
@@ -37,15 +37,19 @@ class QmakeAndroidSupport : public Android::AndroidQtSupport
public:
bool canHandle(const ProjectExplorer::Target *target) const override;
QStringList soLibSearchPath(const ProjectExplorer::Target *target) const override;
- QStringList androidExtraLibs(const ProjectExplorer::Target *target) const override;
QStringList projectTargetApplications(const ProjectExplorer::Target *target) const override;
- Utils::FileName androiddeployqtPath(const ProjectExplorer::Target *target) const override;
- Utils::FileName androiddeployJsonPath(const ProjectExplorer::Target *target) const override;
- void manifestSaved(const ProjectExplorer::Target *target) override;
- Utils::FileName manifestSourcePath(const ProjectExplorer::Target *target) override;
- Utils::FileName packageSourceDir(const ProjectExplorer::Target *target) const override;
- QString deploySettingsFile(const ProjectExplorer::Target *target) const override;
+ QVariant targetData(Core::Id role, const ProjectExplorer::Target *target) const override;
+ bool setTargetData(Core::Id role, const QVariant &value,
+ const ProjectExplorer::Target *target) const override;
+
+ bool parseInProgress(const ProjectExplorer::Target *target) const override;
+ bool validParse(const ProjectExplorer::Target *target) const override;
+ bool extraLibraryEnabled(const ProjectExplorer::Target *target) const override;
+ Utils::FileName projectFilePath(const ProjectExplorer::Target *target) const override;
+
+ void addFiles(const ProjectExplorer::Target *target, const QString &buildKey,
+ const QStringList &addedFiles) const override;
};
} // namespace Internal
diff --git a/src/plugins/qmakeandroidsupport/qmakeandroidsupport.pro b/src/plugins/qmakeandroidsupport/qmakeandroidsupport.pro
index 36c2699c02..a98219e66e 100644
--- a/src/plugins/qmakeandroidsupport/qmakeandroidsupport.pro
+++ b/src/plugins/qmakeandroidsupport/qmakeandroidsupport.pro
@@ -5,21 +5,11 @@ DEFINES += \
QMAKEANDROID_LIBRARY
HEADERS += \
- androidextralibrarylistmodel.h \
- createandroidmanifestwizard.h \
qmakeandroidsupport.h \
- qmakeandroidbuildapkstep.h \
- qmakeandroidbuildapkwidget.h \
androidqmakebuildconfigurationfactory.h \
qmakeandroidsupportplugin.h
SOURCES += \
- androidextralibrarylistmodel.cpp \
- createandroidmanifestwizard.cpp \
qmakeandroidsupport.cpp \
- qmakeandroidbuildapkstep.cpp \
- qmakeandroidbuildapkwidget.cpp \
androidqmakebuildconfigurationfactory.cpp \
qmakeandroidsupportplugin.cpp
-
-FORMS += qmakeandroidbuildapkwidget.ui
diff --git a/src/plugins/qmakeandroidsupport/qmakeandroidsupport.qbs b/src/plugins/qmakeandroidsupport/qmakeandroidsupport.qbs
index 81f1fbd09d..8a0af145d1 100644
--- a/src/plugins/qmakeandroidsupport/qmakeandroidsupport.qbs
+++ b/src/plugins/qmakeandroidsupport/qmakeandroidsupport.qbs
@@ -16,15 +16,6 @@ QtcPlugin {
Depends { name: "Qt.widgets" }
files: [
- "androidextralibrarylistmodel.cpp",
- "androidextralibrarylistmodel.h",
- "createandroidmanifestwizard.cpp",
- "createandroidmanifestwizard.h",
- "qmakeandroidbuildapkstep.cpp",
- "qmakeandroidbuildapkstep.h",
- "qmakeandroidbuildapkwidget.cpp",
- "qmakeandroidbuildapkwidget.h",
- "qmakeandroidbuildapkwidget.ui",
"androidqmakebuildconfigurationfactory.cpp",
"androidqmakebuildconfigurationfactory.h",
"qmakeandroidsupport.cpp",
diff --git a/src/plugins/qmakeandroidsupport/qmakeandroidsupportplugin.cpp b/src/plugins/qmakeandroidsupport/qmakeandroidsupportplugin.cpp
index e532ef5632..28d486dda3 100644
--- a/src/plugins/qmakeandroidsupport/qmakeandroidsupportplugin.cpp
+++ b/src/plugins/qmakeandroidsupport/qmakeandroidsupportplugin.cpp
@@ -26,7 +26,6 @@
#include "qmakeandroidsupportplugin.h"
#include "androidqmakebuildconfigurationfactory.h"
-#include "qmakeandroidbuildapkstep.h"
#include "qmakeandroidsupport.h"
using namespace ProjectExplorer;
@@ -38,7 +37,6 @@ class QmakeAndroidSupportPluginPrivate
{
public:
AndroidQmakeBuildConfigurationFactory buildConfigFactory;
- QmakeAndroidBuildApkStepFactory buildApkStepFactory;
QmakeAndroidSupport androidSupport;
};
diff --git a/src/plugins/qmakeprojectmanager/addlibrarywizard.cpp b/src/plugins/qmakeprojectmanager/addlibrarywizard.cpp
index aa0806705b..94f7d7b70d 100644
--- a/src/plugins/qmakeprojectmanager/addlibrarywizard.cpp
+++ b/src/plugins/qmakeprojectmanager/addlibrarywizard.cpp
@@ -87,9 +87,7 @@ AddLibraryWizard::AddLibraryWizard(const QString &fileName, QWidget *parent) :
addPage(m_summaryPage);
}
-AddLibraryWizard::~AddLibraryWizard()
-{
-}
+AddLibraryWizard::~AddLibraryWizard() = default;
QString AddLibraryWizard::proFile() const
{
@@ -114,7 +112,7 @@ LibraryTypePage::LibraryTypePage(AddLibraryWizard *parent)
setTitle(tr("Library Type"));
setSubTitle(tr("Choose the type of the library to link to"));
- QVBoxLayout *layout = new QVBoxLayout(this);
+ auto *layout = new QVBoxLayout(this);
m_internalRadio = new QRadioButton(tr("Internal library"), this);
layout->addWidget(m_internalRadio);
@@ -221,7 +219,7 @@ void DetailsPage::initializePage()
{
if (m_libraryDetailsController) {
delete m_libraryDetailsController;
- m_libraryDetailsController = 0;
+ m_libraryDetailsController = nullptr;
}
QString title;
QString subTitle;
@@ -269,7 +267,7 @@ SummaryPage::SummaryPage(AddLibraryWizard *parent)
setTitle(tr("Summary"));
setFinalPage(true);
- QVBoxLayout *layout = new QVBoxLayout(this);
+ auto *layout = new QVBoxLayout(this);
m_summaryLabel = new QLabel(this);
m_snippetLabel = new QLabel(this);
m_snippetLabel->setWordWrap(true);
diff --git a/src/plugins/qmakeprojectmanager/addlibrarywizard.h b/src/plugins/qmakeprojectmanager/addlibrarywizard.h
index 0c4cb4b760..196d31885c 100644
--- a/src/plugins/qmakeprojectmanager/addlibrarywizard.h
+++ b/src/plugins/qmakeprojectmanager/addlibrarywizard.h
@@ -76,8 +76,8 @@ public:
Q_DECLARE_FLAGS(Platforms, Platform)
- explicit AddLibraryWizard(const QString &fileName, QWidget *parent = 0);
- ~AddLibraryWizard();
+ explicit AddLibraryWizard(const QString &fileName, QWidget *parent = nullptr);
+ ~AddLibraryWizard() override;
LibraryKind libraryKind() const;
QString proFile() const;
@@ -113,8 +113,8 @@ class DetailsPage : public QWizardPage
Q_OBJECT
public:
DetailsPage(AddLibraryWizard *parent);
- virtual void initializePage();
- virtual bool isComplete() const;
+ void initializePage() override;
+ bool isComplete() const override;
QString snippet() const;
private:
@@ -128,7 +128,7 @@ class SummaryPage : public QWizardPage
Q_OBJECT
public:
SummaryPage(AddLibraryWizard *parent);
- virtual void initializePage();
+ void initializePage() override;
QString snippet() const;
private:
AddLibraryWizard *m_libraryWizard = nullptr;
diff --git a/src/plugins/qmakeprojectmanager/customwidgetwizard/classlist.cpp b/src/plugins/qmakeprojectmanager/customwidgetwizard/classlist.cpp
index 2adb36d3a6..6c6a3ad7c6 100644
--- a/src/plugins/qmakeprojectmanager/customwidgetwizard/classlist.cpp
+++ b/src/plugins/qmakeprojectmanager/customwidgetwizard/classlist.cpp
@@ -42,8 +42,8 @@ namespace Internal {
// refuses placeholders and invalid characters.
class ClassModel : public QStandardItemModel {
public:
- explicit ClassModel(QObject *parent = 0);
- virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
+ explicit ClassModel(QObject *parent = nullptr);
+ bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override;
void appendPlaceHolder() { appendClass(m_newClassPlaceHolder); }
@@ -68,7 +68,7 @@ ClassModel::ClassModel(QObject *parent) :
void ClassModel::appendClass(const QString &c)
{
- QStandardItem *item = new QStandardItem(c);
+ auto *item = new QStandardItem(c);
item->setFlags(Qt::ItemIsEnabled|Qt::ItemIsEditable);
appendRow(item);
}
diff --git a/src/plugins/qmakeprojectmanager/customwidgetwizard/customwidgetwidgetswizardpage.cpp b/src/plugins/qmakeprojectmanager/customwidgetwizard/customwidgetwidgetswizardpage.cpp
index 3a39af6a18..c41c7fc22d 100644
--- a/src/plugins/qmakeprojectmanager/customwidgetwizard/customwidgetwidgetswizardpage.cpp
+++ b/src/plugins/qmakeprojectmanager/customwidgetwizard/customwidgetwidgetswizardpage.cpp
@@ -53,7 +53,7 @@ CustomWidgetWidgetsWizardPage::CustomWidgetWidgetsWizardPage(QWidget *parent) :
m_ui->deleteButton->setEnabled(false);
// Disabled dummy for <new class> column>.
- ClassDefinition *dummy = new ClassDefinition;
+ auto *dummy = new ClassDefinition;
dummy->setFileNamingParameters(m_fileNamingParameters);
dummy->setEnabled(false);
m_tabStackLayout->addWidget(dummy);
@@ -89,7 +89,7 @@ void CustomWidgetWidgetsWizardPage::slotCurrentRowChanged(int row)
void CustomWidgetWidgetsWizardPage::on_classList_classAdded(const QString &name)
{
- ClassDefinition *cdef = new ClassDefinition;
+ auto *cdef = new ClassDefinition;
cdef->setFileNamingParameters(m_fileNamingParameters);
const int index = m_uiClassDefs.count();
m_tabStackLayout->insertWidget(index, cdef);
diff --git a/src/plugins/qmakeprojectmanager/customwidgetwizard/customwidgetwizard.cpp b/src/plugins/qmakeprojectmanager/customwidgetwizard/customwidgetwizard.cpp
index 436866146a..30007d802a 100644
--- a/src/plugins/qmakeprojectmanager/customwidgetwizard/customwidgetwizard.cpp
+++ b/src/plugins/qmakeprojectmanager/customwidgetwizard/customwidgetwizard.cpp
@@ -62,7 +62,7 @@ Core::BaseFileWizard *CustomWidgetWizard::create(QWidget *parent, const Core::Wi
Core::GeneratedFiles CustomWidgetWizard::generateFiles(const QWizard *w,
QString *errorMessage) const
{
- const CustomWidgetWizardDialog *cw = qobject_cast<const CustomWidgetWizardDialog *>(w);
+ const auto *cw = qobject_cast<const CustomWidgetWizardDialog *>(w);
Q_ASSERT(w);
GenerationParameters p;
p.fileName = cw->projectName();
diff --git a/src/plugins/qmakeprojectmanager/customwidgetwizard/plugingenerator.h b/src/plugins/qmakeprojectmanager/customwidgetwizard/plugingenerator.h
index a2ed5ef749..9e49c43712 100644
--- a/src/plugins/qmakeprojectmanager/customwidgetwizard/plugingenerator.h
+++ b/src/plugins/qmakeprojectmanager/customwidgetwizard/plugingenerator.h
@@ -56,7 +56,7 @@ public:
QString *errorMessage);
private:
- typedef QMap<QString,QString> SubstitutionMap;
+ using SubstitutionMap = QMap<QString, QString>;
static QString processTemplate(const QString &tmpl, const SubstitutionMap &substMap, QString *errorMessage);
static QString cStringQuote(QString s);
};
diff --git a/src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.cpp b/src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.cpp
index 57830403ca..2bb5febf0d 100644
--- a/src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.cpp
+++ b/src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.cpp
@@ -173,6 +173,8 @@ DesktopQmakeRunConfigurationFactory::DesktopQmakeRunConfigurationFactory()
registerRunConfiguration<DesktopQmakeRunConfiguration>("Qt4ProjectManager.Qt4RunConfiguration:");
addSupportedProjectType(QmakeProjectManager::Constants::QMAKEPROJECT_ID);
addSupportedTargetDeviceType(ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE);
+
+ addRunWorkerFactory<SimpleTargetRunner>(ProjectExplorer::Constants::NORMAL_RUN_MODE);
}
} // namespace Internal
diff --git a/src/plugins/qmakeprojectmanager/externaleditors.h b/src/plugins/qmakeprojectmanager/externaleditors.h
index b7441501c4..422b0ca31d 100644
--- a/src/plugins/qmakeprojectmanager/externaleditors.h
+++ b/src/plugins/qmakeprojectmanager/externaleditors.h
@@ -110,7 +110,7 @@ private:
void processTerminated(const QString &binary);
// A per-binary entry containing the socket
- typedef QMap<QString, QTcpSocket*> ProcessCache;
+ using ProcessCache = QMap<QString, QTcpSocket*>;
ProcessCache m_processCache;
};
diff --git a/src/plugins/qmakeprojectmanager/librarydetailscontroller.cpp b/src/plugins/qmakeprojectmanager/librarydetailscontroller.cpp
index d4b6226e53..12bc0e69fc 100644
--- a/src/plugins/qmakeprojectmanager/librarydetailscontroller.cpp
+++ b/src/plugins/qmakeprojectmanager/librarydetailscontroller.cpp
@@ -98,7 +98,7 @@ AddLibraryWizard::MacLibraryType LibraryDetailsController::macLibraryType() cons
void LibraryDetailsController::updateGui()
{
// read values from gui
- m_platforms = 0;
+ m_platforms = nullptr;
if (libraryDetailsWidget()->linCheckBox->isChecked())
m_platforms |= AddLibraryWizard::LinuxPlatform;
if (libraryDetailsWidget()->macCheckBox->isChecked())
@@ -424,7 +424,7 @@ static QString generateLibsSnippet(AddLibraryWizard::Platforms platforms,
| AddLibraryWizard::WindowsMSVCPlatform);
AddLibraryWizard::Platforms diffPlatforms = platforms ^ commonPlatforms;
- AddLibraryWizard::Platforms generatedPlatforms = 0;
+ AddLibraryWizard::Platforms generatedPlatforms = nullptr;
QString snippetMessage;
QTextStream str(&snippetMessage);
@@ -510,7 +510,7 @@ static QString generatePreTargetDepsSnippet(AddLibraryWizard::Platforms platform
QString snippetMessage;
QTextStream str(&snippetMessage);
str << "\n";
- AddLibraryWizard::Platforms generatedPlatforms = 0;
+ AddLibraryWizard::Platforms generatedPlatforms = nullptr;
AddLibraryWizard::Platforms windowsPlatforms = platforms
& (AddLibraryWizard::WindowsMinGWPlatform | AddLibraryWizard::WindowsMSVCPlatform);
AddLibraryWizard::Platforms commonPlatforms = platforms;
@@ -843,7 +843,7 @@ bool PackageLibraryDetailsController::isLinkPackageGenerated() const
if (!project)
return false;
- const QmakeProFileNode *rootProject = dynamic_cast<const QmakeProFileNode *>(project->rootProjectNode());
+ const auto *rootProject = dynamic_cast<const QmakeProFileNode *>(project->rootProjectNode());
if (!rootProject)
return false;
diff --git a/src/plugins/qmakeprojectmanager/librarydetailscontroller.h b/src/plugins/qmakeprojectmanager/librarydetailscontroller.h
index 91505a3e13..7aab3b0cc5 100644
--- a/src/plugins/qmakeprojectmanager/librarydetailscontroller.h
+++ b/src/plugins/qmakeprojectmanager/librarydetailscontroller.h
@@ -39,7 +39,7 @@ class LibraryDetailsController : public QObject
public:
explicit LibraryDetailsController(Ui::LibraryDetailsWidget *libraryDetails,
const QString &proFile,
- QObject *parent = 0);
+ QObject *parent = nullptr);
virtual bool isComplete() const = 0;
virtual QString snippet() const = 0;
@@ -116,14 +116,14 @@ class NonInternalLibraryDetailsController : public LibraryDetailsController
public:
explicit NonInternalLibraryDetailsController(Ui::LibraryDetailsWidget *libraryDetails,
const QString &proFile,
- QObject *parent = 0);
- virtual bool isComplete() const;
- virtual QString snippet() const;
+ QObject *parent = nullptr);
+ bool isComplete() const override;
+ QString snippet() const override;
protected:
- virtual AddLibraryWizard::LinkageType suggestedLinkageType() const;
- virtual AddLibraryWizard::MacLibraryType suggestedMacLibraryType() const;
- virtual QString suggestedIncludePath() const;
- virtual void updateWindowsOptionsEnablement();
+ AddLibraryWizard::LinkageType suggestedLinkageType() const override;
+ AddLibraryWizard::MacLibraryType suggestedMacLibraryType() const override;
+ QString suggestedIncludePath() const override;
+ void updateWindowsOptionsEnablement() override;
private:
void slotLinkageTypeChanged();
void slotRemoveSuffixChanged(bool ena);
@@ -135,10 +135,10 @@ class PackageLibraryDetailsController : public NonInternalLibraryDetailsControll
Q_OBJECT
public:
explicit PackageLibraryDetailsController(Ui::LibraryDetailsWidget *libraryDetails,
- const QString &proFile,
- QObject *parent = 0);
- virtual bool isComplete() const;
- virtual QString snippet() const;
+ const QString &proFile,
+ QObject *parent = nullptr);
+ bool isComplete() const override;
+ QString snippet() const override;
private:
bool isLinkPackageGenerated() const;
};
@@ -149,7 +149,7 @@ class SystemLibraryDetailsController : public NonInternalLibraryDetailsControlle
public:
explicit SystemLibraryDetailsController(Ui::LibraryDetailsWidget *libraryDetails,
const QString &proFile,
- QObject *parent = 0);
+ QObject *parent = nullptr);
};
class ExternalLibraryDetailsController : public NonInternalLibraryDetailsController
@@ -158,9 +158,9 @@ class ExternalLibraryDetailsController : public NonInternalLibraryDetailsControl
public:
explicit ExternalLibraryDetailsController(Ui::LibraryDetailsWidget *libraryDetails,
const QString &proFile,
- QObject *parent = 0);
+ QObject *parent = nullptr);
protected:
- virtual void updateWindowsOptionsEnablement();
+ void updateWindowsOptionsEnablement() override;
};
class InternalLibraryDetailsController : public LibraryDetailsController
@@ -169,14 +169,14 @@ class InternalLibraryDetailsController : public LibraryDetailsController
public:
explicit InternalLibraryDetailsController(Ui::LibraryDetailsWidget *libraryDetails,
const QString &proFile,
- QObject *parent = 0);
- virtual bool isComplete() const;
- virtual QString snippet() const;
+ QObject *parent = nullptr);
+ bool isComplete() const override;
+ QString snippet() const override;
protected:
- virtual AddLibraryWizard::LinkageType suggestedLinkageType() const;
- virtual AddLibraryWizard::MacLibraryType suggestedMacLibraryType() const;
- virtual QString suggestedIncludePath() const;
- virtual void updateWindowsOptionsEnablement();
+ AddLibraryWizard::LinkageType suggestedLinkageType() const override;
+ AddLibraryWizard::MacLibraryType suggestedMacLibraryType() const override;
+ QString suggestedIncludePath() const override;
+ void updateWindowsOptionsEnablement() override;
private:
void slotCurrentLibraryChanged();
void updateProFile();
diff --git a/src/plugins/qmakeprojectmanager/makefileparse.cpp b/src/plugins/qmakeprojectmanager/makefileparse.cpp
index 358fb05bc9..6eda5cbfdb 100644
--- a/src/plugins/qmakeprojectmanager/makefileparse.cpp
+++ b/src/plugins/qmakeprojectmanager/makefileparse.cpp
@@ -516,7 +516,7 @@ void QmakeProjectManagerPlugin::testMakefileParser()
QCOMPARE(Utils::QtcProcess::splitArgs(parser.unparsedArguments()),
Utils::QtcProcess::splitArgs(unparsedArguments));
- QCOMPARE(parser.effectiveBuildConfig(0), effectiveBuildConfig);
+ QCOMPARE(parser.effectiveBuildConfig(nullptr), effectiveBuildConfig);
const QMakeStepConfig qmsc = parser.config();
QCOMPARE(qmsc.archConfig, static_cast<QMakeStepConfig::TargetArchConfig>(archConfig));
diff --git a/src/plugins/qmakeprojectmanager/makestep.cpp b/src/plugins/qmakeprojectmanager/makestep.cpp
deleted file mode 100644
index 5195bba0a0..0000000000
--- a/src/plugins/qmakeprojectmanager/makestep.cpp
+++ /dev/null
@@ -1,464 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of Qt Creator.
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-****************************************************************************/
-
-#include "makestep.h"
-#include "ui_makestep.h"
-
-#include "qmakeparser.h"
-#include "qmakeproject.h"
-#include "qmakenodes.h"
-#include "qmakebuildconfiguration.h"
-#include "qmakeprojectmanagerconstants.h"
-
-#include <coreplugin/variablechooser.h>
-#include <projectexplorer/target.h>
-#include <projectexplorer/toolchain.h>
-#include <projectexplorer/buildsteplist.h>
-#include <projectexplorer/gnumakeparser.h>
-#include <projectexplorer/projectexplorer.h>
-#include <projectexplorer/kitinformation.h>
-#include <projectexplorer/xcodebuildparser.h>
-#include <utils/qtcprocess.h>
-
-#include <QDir>
-#include <QFileInfo>
-
-using ExtensionSystem::PluginManager;
-using namespace ProjectExplorer;
-using namespace QmakeProjectManager;
-using namespace QmakeProjectManager::Internal;
-
-namespace {
-const char MAKESTEP_BS_ID[] = "Qt4ProjectManager.MakeStep";
-const char MAKE_ARGUMENTS_KEY[] = "Qt4ProjectManager.MakeStep.MakeArguments";
-const char AUTOMATICLY_ADDED_MAKE_ARGUMENTS_KEY[] = "Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments";
-const char MAKE_COMMAND_KEY[] = "Qt4ProjectManager.MakeStep.MakeCommand";
-const char CLEAN_KEY[] = "Qt4ProjectManager.MakeStep.Clean";
-}
-
-MakeStep::MakeStep(BuildStepList *bsl)
- : AbstractProcessStep(bsl, MAKESTEP_BS_ID)
-{
- setDefaultDisplayName(tr("Make", "Qt MakeStep display name."));
- m_clean = bsl->id() == ProjectExplorer::Constants::BUILDSTEPS_CLEAN;
- if (m_clean)
- m_userArgs = "clean";
-}
-
-void MakeStep::setMakeCommand(const QString &make)
-{
- m_makeCmd = make;
-}
-
-QmakeBuildConfiguration *MakeStep::qmakeBuildConfiguration() const
-{
- return static_cast<QmakeBuildConfiguration *>(buildConfiguration());
-}
-
-QString MakeStep::makeCommand() const
-{
- return m_makeCmd;
-}
-
-QString MakeStep::effectiveMakeCommand() const
-{
- QString makeCmd = m_makeCmd;
- if (makeCmd.isEmpty()) {
- QmakeBuildConfiguration *bc = qmakeBuildConfiguration();
- if (!bc)
- bc = qobject_cast<QmakeBuildConfiguration *>(target()->activeBuildConfiguration());
- ToolChain *tc = ToolChainKitInformation::toolChain(target()->kit(), ProjectExplorer::Constants::CXX_LANGUAGE_ID);
-
- if (bc && tc)
- makeCmd = tc->makeCommand(bc->environment());
- }
- return makeCmd;
-}
-
-QVariantMap MakeStep::toMap() const
-{
- QVariantMap map(AbstractProcessStep::toMap());
- map.insert(MAKE_ARGUMENTS_KEY, m_userArgs);
- map.insert(MAKE_COMMAND_KEY, m_makeCmd);
- map.insert(CLEAN_KEY, m_clean);
- map.insert(AUTOMATICLY_ADDED_MAKE_ARGUMENTS_KEY, automaticallyAddedArguments());
- return map;
-}
-
-QStringList MakeStep::automaticallyAddedArguments() const
-{
- ToolChain *tc = ToolChainKitInformation::toolChain(target()->kit(), ProjectExplorer::Constants::CXX_LANGUAGE_ID);
- if (!tc || tc->targetAbi().binaryFormat() == Abi::PEFormat)
- return QStringList();
- return QStringList() << "-w" << "-r";
-}
-
-bool MakeStep::fromMap(const QVariantMap &map)
-{
- m_makeCmd = map.value(MAKE_COMMAND_KEY).toString();
- m_userArgs = map.value(MAKE_ARGUMENTS_KEY).toString();
- m_clean = map.value(CLEAN_KEY).toBool();
- QStringList oldAddedArgs
- = map.value(AUTOMATICLY_ADDED_MAKE_ARGUMENTS_KEY).toStringList();
- foreach (const QString &newArg, automaticallyAddedArguments()) {
- if (oldAddedArgs.contains(newArg))
- continue;
- m_userArgs.prepend(newArg + ' ');
- }
-
- return AbstractProcessStep::fromMap(map);
-}
-
-bool MakeStep::init(QList<const BuildStep *> &earlierSteps)
-{
- QmakeBuildConfiguration *bc = qmakeBuildConfiguration();
- if (!bc)
- bc = qobject_cast<QmakeBuildConfiguration *>(target()->activeBuildConfiguration());
- if (!bc)
- emit addTask(Task::buildConfigurationMissingTask());
-
- ToolChain *tc = ToolChainKitInformation::toolChain(target()->kit(), ProjectExplorer::Constants::CXX_LANGUAGE_ID);
- if (!tc)
- emit addTask(Task::compilerMissingTask());
-
- if (!bc || !tc) {
- emitFaultyConfigurationMessage();
- return false;
- }
-
- ProcessParameters *pp = processParameters();
- pp->setMacroExpander(bc->macroExpander());
-
- QString workingDirectory;
- if (bc->subNodeBuild())
- workingDirectory = bc->subNodeBuild()->buildDir();
- else
- workingDirectory = bc->buildDirectory().toString();
- pp->setWorkingDirectory(workingDirectory);
-
- pp->setCommand(effectiveMakeCommand());
-
- // If we are cleaning, then make can fail with a error code, but that doesn't mean
- // we should stop the clean queue
- // That is mostly so that rebuild works on a already clean project
- setIgnoreReturnValue(m_clean);
-
- QString args;
-
- QmakeProjectManager::QmakeProFileNode *subNode = bc->subNodeBuild();
- QmakeProjectManager::QmakeProFile *subProFile = subNode ? subNode->proFile() : nullptr;
- if (subProFile) {
- QString makefile = subProFile->makefile();
- if (makefile.isEmpty())
- makefile = "Makefile";
- // Use Makefile.Debug and Makefile.Release
- // for file builds, since the rules for that are
- // only in those files.
- if (subProFile->isDebugAndRelease() && bc->fileNodeBuild()) {
- if (bc->buildType() == QmakeBuildConfiguration::Debug)
- makefile += ".Debug";
- else
- makefile += ".Release";
- }
- if (makefile != "Makefile") {
- Utils::QtcProcess::addArg(&args, "-f");
- Utils::QtcProcess::addArg(&args, makefile);
- }
- m_makeFileToCheck = QDir(workingDirectory).filePath(makefile);
- } else {
- if (!bc->makefile().isEmpty()) {
- Utils::QtcProcess::addArg(&args, "-f");
- Utils::QtcProcess::addArg(&args, bc->makefile());
- m_makeFileToCheck = QDir(workingDirectory).filePath(bc->makefile());
- } else {
- m_makeFileToCheck = QDir(workingDirectory).filePath("Makefile");
- }
- }
-
- Utils::QtcProcess::addArgs(&args, m_userArgs);
- if (bc->fileNodeBuild() && subProFile) {
- QString objectsDir = subProFile->objectsDirectory();
- if (objectsDir.isEmpty()) {
- objectsDir = subProFile->buildDir(bc).toString();
- if (subProFile->isDebugAndRelease()) {
- if (bc->buildType() == QmakeBuildConfiguration::Debug)
- objectsDir += "/debug";
- else
- objectsDir += "/release";
- }
- }
- QString relObjectsDir = QDir(pp->workingDirectory()).relativeFilePath(objectsDir);
- if (relObjectsDir == ".")
- relObjectsDir.clear();
- if (!relObjectsDir.isEmpty())
- relObjectsDir += '/';
- QString objectFile = relObjectsDir +
- bc->fileNodeBuild()->filePath().toFileInfo().baseName() +
- subProFile->objectExtension();
- Utils::QtcProcess::addArg(&args, objectFile);
- }
- Utils::Environment env = bc->environment();
- Utils::Environment::setupEnglishOutput(&env);
- // We also prepend "L" to the MAKEFLAGS, so that nmake / jom are less verbose
- if (tc && makeCommand().isEmpty()) {
- if (tc->targetAbi().os() == Abi::WindowsOS
- && tc->targetAbi().osFlavor() != Abi::WindowsMSysFlavor) {
- const QString makeFlags = "MAKEFLAGS";
- env.set(makeFlags, 'L' + env.value(makeFlags));
- }
- }
-
- pp->setEnvironment(env);
- pp->setArguments(args);
- pp->resolveAll();
-
- setOutputParser(new ProjectExplorer::GnuMakeParser());
- if (tc && tc->targetAbi().os() == Abi::DarwinOS)
- appendOutputParser(new XcodebuildParser);
- IOutputParser *parser = target()->kit()->createOutputParser();
- if (parser)
- appendOutputParser(parser);
- outputParser()->setWorkingDirectory(pp->effectiveWorkingDirectory());
- appendOutputParser(new QMakeParser); // make may cause qmake to be run, add last to make sure
- // it has a low priority.
-
- m_scriptTarget = (static_cast<QmakeProject *>(bc->target()->project())->rootProjectNode()->projectType() == ProjectType::ScriptTemplate);
-
- return AbstractProcessStep::init(earlierSteps);
-}
-
-void MakeStep::run(QFutureInterface<bool> & fi)
-{
- if (m_scriptTarget) {
- reportRunResult(fi, true);
- return;
- }
-
- if (!QFileInfo::exists(m_makeFileToCheck)) {
- if (!ignoreReturnValue())
- emit addOutput(tr("Cannot find Makefile. Check your build settings."), BuildStep::OutputFormat::NormalMessage);
- const bool success = ignoreReturnValue();
- reportRunResult(fi, success);
- return;
- }
-
- AbstractProcessStep::run(fi);
-}
-
-bool MakeStep::immutable() const
-{
- return false;
-}
-
-BuildStepConfigWidget *MakeStep::createConfigWidget()
-{
- return new MakeStepConfigWidget(this);
-}
-
-QString MakeStep::userArguments()
-{
- return m_userArgs;
-}
-
-void MakeStep::setUserArguments(const QString &arguments)
-{
- m_userArgs = arguments;
- emit userArgumentsChanged();
-}
-
-MakeStepConfigWidget::MakeStepConfigWidget(MakeStep *makeStep)
- : BuildStepConfigWidget(), m_ui(new Internal::Ui::MakeStep), m_makeStep(makeStep)
-{
- m_ui->setupUi(this);
-
- m_ui->makePathChooser->setExpectedKind(Utils::PathChooser::ExistingCommand);
- m_ui->makePathChooser->setBaseDirectory(Utils::PathChooser::homePath());
- m_ui->makePathChooser->setHistoryCompleter("PE.MakeCommand.History");
-
- const QString &makeCmd = m_makeStep->makeCommand();
- m_ui->makePathChooser->setPath(makeCmd);
- m_ui->makeArgumentsLineEdit->setText(m_makeStep->userArguments());
-
- updateDetails();
-
- connect(m_ui->makePathChooser, &Utils::PathChooser::rawPathChanged,
- this, &MakeStepConfigWidget::makeEdited);
- connect(m_ui->makeArgumentsLineEdit, &QLineEdit::textEdited,
- this, &MakeStepConfigWidget::makeArgumentsLineEdited);
-
- connect(makeStep, &MakeStep::userArgumentsChanged,
- this, &MakeStepConfigWidget::userArgumentsChanged);
-
- BuildConfiguration *bc = makeStep->buildConfiguration();
- if (!bc) {
- // That means the step is in the deploylist, so we listen to the active build config
- // changed signal and react to the buildDirectoryChanged() signal of the buildconfiguration
- bc = makeStep->target()->activeBuildConfiguration();
- m_bc = bc;
- connect (makeStep->target(), &Target::activeBuildConfigurationChanged,
- this, &MakeStepConfigWidget::activeBuildConfigurationChanged);
- }
-
- if (bc) {
- connect(bc, &BuildConfiguration::buildDirectoryChanged,
- this, &MakeStepConfigWidget::updateDetails);
- connect(bc, &BuildConfiguration::environmentChanged,
- this, &MakeStepConfigWidget::updateDetails);
- }
-
- connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::settingsChanged,
- this, &MakeStepConfigWidget::updateDetails);
- connect(m_makeStep->target(), &Target::kitChanged, this, &MakeStepConfigWidget::updateDetails);
-
- Core::VariableChooser::addSupportForChildWidgets(this, m_makeStep->macroExpander());
-}
-
-void MakeStepConfigWidget::activeBuildConfigurationChanged()
-{
- if (m_bc) {
- disconnect(m_bc, &BuildConfiguration::buildDirectoryChanged,
- this, &MakeStepConfigWidget::updateDetails);
- disconnect(m_bc, &BuildConfiguration::environmentChanged,
- this, &MakeStepConfigWidget::updateDetails);
- }
-
- m_bc = m_makeStep->target()->activeBuildConfiguration();
- updateDetails();
-
- if (m_bc) {
- connect(m_bc, &BuildConfiguration::buildDirectoryChanged,
- this, &MakeStepConfigWidget::updateDetails);
- connect(m_bc, &BuildConfiguration::environmentChanged,
- this, &MakeStepConfigWidget::updateDetails);
- }
-}
-
-void MakeStepConfigWidget::setSummaryText(const QString &text)
-{
- if (text == m_summaryText)
- return;
- m_summaryText = text;
- emit updateSummary();
-}
-
-MakeStepConfigWidget::~MakeStepConfigWidget()
-{
- delete m_ui;
-}
-
-void MakeStepConfigWidget::updateDetails()
-{
- ToolChain *tc
- = ToolChainKitInformation::toolChain(m_makeStep->target()->kit(), ProjectExplorer::Constants::CXX_LANGUAGE_ID);
- QmakeBuildConfiguration *bc = m_makeStep->qmakeBuildConfiguration();
- if (!bc)
- bc = qobject_cast<QmakeBuildConfiguration *>(m_makeStep->target()->activeBuildConfiguration());
-
- if (tc && bc)
- m_ui->makeLabel->setText(tr("Override %1:").arg(QDir::toNativeSeparators(tc->makeCommand(bc->environment()))));
- else
- m_ui->makeLabel->setText(tr("Make:"));
-
- if (!tc) {
- setSummaryText(tr("<b>Make:</b> %1").arg(ProjectExplorer::ToolChainKitInformation::msgNoToolChainInTarget()));
- return;
- }
- if (!bc) {
- setSummaryText(tr("<b>Make:</b> No Qt build configuration."));
- return;
- }
-
- ProcessParameters param;
- param.setMacroExpander(bc->macroExpander());
- param.setWorkingDirectory(bc->buildDirectory().toString());
- QString makeCmd = tc->makeCommand(bc->environment());
- if (!m_makeStep->makeCommand().isEmpty())
- makeCmd = m_makeStep->makeCommand();
- param.setCommand(makeCmd);
-
- QString args = m_makeStep->userArguments();
-
- Utils::Environment env = bc->environment();
- Utils::Environment::setupEnglishOutput(&env);
- // We prepend "L" to the MAKEFLAGS, so that nmake / jom are less verbose
- // FIXME doing this without the user having a way to override this is rather bad
- if (tc && m_makeStep->makeCommand().isEmpty()) {
- if (tc->targetAbi().os() == Abi::WindowsOS
- && tc->targetAbi().osFlavor() != Abi::WindowsMSysFlavor) {
- const QString makeFlags = "MAKEFLAGS";
- env.set(makeFlags, 'L' + env.value(makeFlags));
- }
- }
- param.setArguments(args);
- param.setEnvironment(env);
-
- if (param.commandMissing())
- setSummaryText(tr("<b>Make:</b> %1 not found in the environment.").arg(makeCmd)); // Override display text
- else
- setSummaryText(param.summaryInWorkdir(displayName()));
-}
-
-QString MakeStepConfigWidget::summaryText() const
-{
- return m_summaryText;
-}
-
-QString MakeStepConfigWidget::displayName() const
-{
- return m_makeStep->displayName();
-}
-
-void MakeStepConfigWidget::userArgumentsChanged()
-{
- if (m_ignoreChange)
- return;
- m_ui->makeArgumentsLineEdit->setText(m_makeStep->userArguments());
- updateDetails();
-}
-
-void MakeStepConfigWidget::makeEdited()
-{
- m_makeStep->setMakeCommand(m_ui->makePathChooser->rawPath());
- updateDetails();
-}
-
-void MakeStepConfigWidget::makeArgumentsLineEdited()
-{
- m_ignoreChange = true;
- m_makeStep->setUserArguments(m_ui->makeArgumentsLineEdit->text());
- m_ignoreChange = false;
- updateDetails();
-}
-
-///
-// MakeStepFactory
-///
-
-MakeStepFactory::MakeStepFactory()
-{
- registerStep<MakeStep>(MAKESTEP_BS_ID);
- setSupportedProjectType(Constants::QMAKEPROJECT_ID);
- setDisplayName(tr("Make"));
-}
diff --git a/src/plugins/qmakeprojectmanager/makestep.h b/src/plugins/qmakeprojectmanager/makestep.h
deleted file mode 100644
index 075b50e1b7..0000000000
--- a/src/plugins/qmakeprojectmanager/makestep.h
+++ /dev/null
@@ -1,119 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of Qt Creator.
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-****************************************************************************/
-
-#pragma once
-
-#include "qmakeprojectmanager_global.h"
-
-#include <projectexplorer/abstractprocessstep.h>
-
-namespace QmakeProjectManager {
-
-class QmakeBuildConfiguration;
-class MakeStepConfigWidget;
-
-namespace Internal {
-
-namespace Ui { class MakeStep; }
-
-class MakeStepFactory : public ProjectExplorer::BuildStepFactory
-{
- Q_OBJECT
-
-public:
- MakeStepFactory();
-};
-
-} //namespace Internal
-
-class QmakeProject;
-
-class QMAKEPROJECTMANAGER_EXPORT MakeStep : public ProjectExplorer::AbstractProcessStep
-{
- Q_OBJECT
- friend class Internal::MakeStepFactory;
- friend class MakeStepConfigWidget;
-
-public:
- explicit MakeStep(ProjectExplorer::BuildStepList *bsl);
-
- QmakeBuildConfiguration *qmakeBuildConfiguration() const;
-
- bool init(QList<const BuildStep *> &earlierSteps) override;
- void run(QFutureInterface<bool> &) override;
-
- ProjectExplorer::BuildStepConfigWidget *createConfigWidget() override;
- bool immutable() const override;
- QString userArguments();
- void setUserArguments(const QString &arguments);
- bool isClean() const;
- QString makeCommand() const;
-
- QString effectiveMakeCommand() const;
-
- QVariantMap toMap() const override;
-
-signals:
- void userArgumentsChanged();
-
-private:
- bool fromMap(const QVariantMap &map) override;
-
- void setMakeCommand(const QString &make);
- QStringList automaticallyAddedArguments() const;
- bool m_clean = false;
- bool m_scriptTarget = false;
- QString m_makeFileToCheck;
- QString m_userArgs;
- QString m_makeCmd;
-};
-
-class MakeStepConfigWidget : public ProjectExplorer::BuildStepConfigWidget
-{
- Q_OBJECT
-public:
- explicit MakeStepConfigWidget(MakeStep *makeStep);
- virtual ~MakeStepConfigWidget();
-
- QString displayName() const;
- QString summaryText() const;
-private:
- // User changes to our widgets
- void makeEdited();
- void makeArgumentsLineEdited();
-
- void updateDetails();
- void userArgumentsChanged();
- void activeBuildConfigurationChanged();
- void setSummaryText(const QString &text);
-
- Internal::Ui::MakeStep *m_ui = nullptr;
- MakeStep *m_makeStep = nullptr;
- QString m_summaryText;
- ProjectExplorer::BuildConfiguration *m_bc = nullptr;
- bool m_ignoreChange = false;
-};
-
-} // QmakeProjectManager
diff --git a/src/plugins/qmakeprojectmanager/makestep.ui b/src/plugins/qmakeprojectmanager/makestep.ui
deleted file mode 100644
index 7c706054a8..0000000000
--- a/src/plugins/qmakeprojectmanager/makestep.ui
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>QmakeProjectManager::Internal::MakeStep</class>
- <widget class="QWidget" name="QmakeProjectManager::Internal::MakeStep">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>220</width>
- <height>62</height>
- </rect>
- </property>
- <layout class="QGridLayout" name="gridLayout">
- <item row="0" column="0">
- <widget class="QLabel" name="makeLabel">
- <property name="text">
- <string>Override %1:</string>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="Utils::PathChooser" name="makePathChooser" native="true"/>
- </item>
- <item row="1" column="0">
- <widget class="QLabel" name="makeArgumentsLabel">
- <property name="text">
- <string>Make arguments:</string>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QLineEdit" name="makeArgumentsLineEdit"/>
- </item>
- </layout>
- </widget>
- <customwidgets>
- <customwidget>
- <class>Utils::PathChooser</class>
- <extends>QWidget</extends>
- <header location="global">utils/pathchooser.h</header>
- <container>1</container>
- <slots>
- <signal>editingFinished()</signal>
- <signal>browsingFinished()</signal>
- </slots>
- </customwidget>
- </customwidgets>
- <resources/>
- <connections/>
-</ui>
diff --git a/src/plugins/qmakeprojectmanager/profilehighlighter.h b/src/plugins/qmakeprojectmanager/profilehighlighter.h
index 9d85861af8..d76852435a 100644
--- a/src/plugins/qmakeprojectmanager/profilehighlighter.h
+++ b/src/plugins/qmakeprojectmanager/profilehighlighter.h
@@ -43,7 +43,7 @@ public:
};
ProFileHighlighter();
- void highlightBlock(const QString &text);
+ void highlightBlock(const QString &text) override;
private:
const TextEditor::Keywords m_keywords;
diff --git a/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp b/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp
index b5f51bc46f..e2b3c5cbf1 100644
--- a/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp
+++ b/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp
@@ -32,26 +32,29 @@
#include "qmakeprojectmanagerconstants.h"
#include "qmakenodes.h"
#include "qmakestep.h"
-#include "makestep.h"
+#include "qmakemakestep.h"
#include "makefileparse.h"
#include <coreplugin/documentmanager.h>
#include <coreplugin/icore.h>
+#include <projectexplorer/buildmanager.h>
#include <projectexplorer/buildsteplist.h>
#include <projectexplorer/kit.h>
+#include <projectexplorer/projectexplorer.h>
#include <projectexplorer/projectexplorerconstants.h>
#include <projectexplorer/projectmacroexpander.h>
#include <projectexplorer/target.h>
#include <projectexplorer/toolchain.h>
#include <projectexplorer/toolchainmanager.h>
+
#include <qtsupport/qtkitinformation.h>
#include <qtsupport/qtversionmanager.h>
+
#include <utils/mimetypes/mimedatabase.h>
#include <utils/qtcassert.h>
#include <utils/qtcprocess.h>
#include <utils/qtcassert.h>
-#include <android/androidmanager.h>
#include <QDebug>
#include <QInputDialog>
@@ -127,12 +130,12 @@ void QmakeBuildConfiguration::initialize(const BuildInfo *info)
BuildStepList *buildSteps = stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
auto qmakeStep = new QMakeStep(buildSteps);
buildSteps->appendStep(qmakeStep);
- buildSteps->appendStep(new MakeStep(buildSteps));
+ buildSteps->appendStep(new QmakeMakeStep(buildSteps));
BuildStepList *cleanSteps = stepList(ProjectExplorer::Constants::BUILDSTEPS_CLEAN);
- cleanSteps->appendStep(new MakeStep(cleanSteps));
+ cleanSteps->appendStep(new QmakeMakeStep(cleanSteps));
- const QmakeBuildInfo *qmakeInfo = static_cast<const QmakeBuildInfo *>(info);
+ const auto *qmakeInfo = static_cast<const QmakeBuildInfo *>(info);
BaseQtVersion *version = QtKitInformation::qtVersion(target()->kit());
BaseQtVersion::QmakeBuildConfigs config = version->defaultBuildConfig();
@@ -160,9 +163,7 @@ void QmakeBuildConfiguration::initialize(const BuildInfo *info)
updateCacheAndEmitEnvironmentChanged();
}
-QmakeBuildConfiguration::~QmakeBuildConfiguration()
-{
-}
+QmakeBuildConfiguration::~QmakeBuildConfiguration() = default;
QVariantMap QmakeBuildConfiguration::toMap() const
{
@@ -306,24 +307,24 @@ QStringList QmakeBuildConfiguration::configCommandLineArguments() const
QMakeStep *QmakeBuildConfiguration::qmakeStep() const
{
- QMakeStep *qs = 0;
+ QMakeStep *qs = nullptr;
BuildStepList *bsl = stepList(Core::Id(ProjectExplorer::Constants::BUILDSTEPS_BUILD));
Q_ASSERT(bsl);
for (int i = 0; i < bsl->count(); ++i)
- if ((qs = qobject_cast<QMakeStep *>(bsl->at(i))) != 0)
+ if ((qs = qobject_cast<QMakeStep *>(bsl->at(i))) != nullptr)
return qs;
- return 0;
+ return nullptr;
}
-MakeStep *QmakeBuildConfiguration::makeStep() const
+QmakeMakeStep *QmakeBuildConfiguration::makeStep() const
{
- MakeStep *ms = 0;
+ QmakeMakeStep *ms = nullptr;
BuildStepList *bsl = stepList(Core::Id(ProjectExplorer::Constants::BUILDSTEPS_BUILD));
Q_ASSERT(bsl);
for (int i = 0; i < bsl->count(); ++i)
- if ((ms = qobject_cast<MakeStep *>(bsl->at(i))) != 0)
+ if ((ms = qobject_cast<QmakeMakeStep *>(bsl->at(i))) != nullptr)
return ms;
- return 0;
+ return nullptr;
}
// Returns true if both are equal.
@@ -560,7 +561,7 @@ QmakeBuildInfo *QmakeBuildConfigurationFactory::createBuildInfo(const Kit *k,
BuildConfiguration::BuildType type) const
{
BaseQtVersion *version = QtKitInformation::qtVersion(k);
- QmakeBuildInfo *info = new QmakeBuildInfo(this);
+ auto *info = new QmakeBuildInfo(this);
QString suffix;
if (type == BuildConfiguration::Release) {
//: The name of the release build configuration created by default for a qmake project.
@@ -672,7 +673,7 @@ void QmakeBuildConfiguration::setupBuildEnvironment(Kit *k, Environment &env)
env.prependOrSetPath(qt->binPath().toString());
}
-QmakeBuildConfiguration::LastKitState::LastKitState() { }
+QmakeBuildConfiguration::LastKitState::LastKitState() = default;
QmakeBuildConfiguration::LastKitState::LastKitState(Kit *k)
: m_qtVersion(QtKitInformation::qtVersionId(k)),
@@ -696,4 +697,24 @@ bool QmakeBuildConfiguration::LastKitState::operator !=(const LastKitState &othe
return !operator ==(other);
}
+bool QmakeBuildConfiguration::regenerateBuildFiles(Node *node)
+{
+ QMakeStep *qs = qmakeStep();
+ if (!qs)
+ return false;
+
+ qs->setForced(true);
+
+ BuildManager::buildList(stepList(ProjectExplorer::Constants::BUILDSTEPS_CLEAN));
+ BuildManager::appendStep(qs, ProjectExplorerPlugin::displayNameForStepId(ProjectExplorer::Constants::BUILDSTEPS_CLEAN));
+
+ QmakeProFileNode *proFile = nullptr;
+ if (node && node != target()->project()->rootProjectNode())
+ proFile = dynamic_cast<QmakeProFileNode *>(node);
+
+ setSubNodeBuild(proFile);
+
+ return true;
+}
+
} // namespace QmakeProjectManager
diff --git a/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.h b/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.h
index b772123771..d7a0996a44 100644
--- a/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.h
+++ b/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.h
@@ -36,7 +36,7 @@ namespace QmakeProjectManager {
class QmakeBuildInfo;
class QMakeStep;
-class MakeStep;
+class QmakeMakeStep;
class QmakeBuildConfigurationFactory;
class QmakeProFileNode;
@@ -81,7 +81,7 @@ public:
// QmakeProject *
// So that we can later enable people to build qmake the way they would like
QMakeStep *qmakeStep() const;
- MakeStep *makeStep() const;
+ QmakeMakeStep *makeStep() const;
QString makefile() const;
@@ -113,6 +113,7 @@ signals:
protected:
bool fromMap(const QVariantMap &map) override;
+ bool regenerateBuildFiles(ProjectExplorer::Node *node = nullptr) override;
private:
void kitChanged();
diff --git a/src/plugins/qmakeprojectmanager/qmakemakestep.cpp b/src/plugins/qmakeprojectmanager/qmakemakestep.cpp
new file mode 100644
index 0000000000..4cf4d12327
--- /dev/null
+++ b/src/plugins/qmakeprojectmanager/qmakemakestep.cpp
@@ -0,0 +1,202 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+#include "qmakemakestep.h"
+
+#include "qmakeparser.h"
+#include "qmakeproject.h"
+#include "qmakenodes.h"
+#include "qmakebuildconfiguration.h"
+#include "qmakeprojectmanagerconstants.h"
+
+#include <coreplugin/variablechooser.h>
+#include <projectexplorer/target.h>
+#include <projectexplorer/toolchain.h>
+#include <projectexplorer/buildsteplist.h>
+#include <projectexplorer/gnumakeparser.h>
+#include <projectexplorer/projectexplorer.h>
+#include <projectexplorer/kitinformation.h>
+#include <projectexplorer/xcodebuildparser.h>
+#include <utils/qtcprocess.h>
+
+#include <QDir>
+#include <QFileInfo>
+
+using ExtensionSystem::PluginManager;
+using namespace ProjectExplorer;
+using namespace QmakeProjectManager;
+using namespace QmakeProjectManager::Internal;
+
+const char MAKESTEP_BS_ID[] = "Qt4ProjectManager.MakeStep";
+
+QmakeMakeStep::QmakeMakeStep(BuildStepList *bsl)
+ : MakeStep(bsl, MAKESTEP_BS_ID)
+{
+ if (bsl->id() == ProjectExplorer::Constants::BUILDSTEPS_CLEAN) {
+ setClean(true);
+ setUserArguments("clean");
+ }
+}
+
+QmakeBuildConfiguration *QmakeMakeStep::qmakeBuildConfiguration() const
+{
+ return static_cast<QmakeBuildConfiguration *>(buildConfiguration());
+}
+
+bool QmakeMakeStep::init(QList<const BuildStep *> &earlierSteps)
+{
+ QmakeBuildConfiguration *bc = qmakeBuildConfiguration();
+ if (!bc)
+ emit addTask(Task::buildConfigurationMissingTask());
+
+ const QString make = effectiveMakeCommand();
+ if (make.isEmpty())
+ emit addTask(makeCommandMissingTask());
+
+ if (!bc || make.isEmpty()) {
+ emitFaultyConfigurationMessage();
+ return false;
+ }
+
+ ProcessParameters *pp = processParameters();
+ pp->setMacroExpander(bc->macroExpander());
+
+ QString workingDirectory;
+ if (bc->subNodeBuild())
+ workingDirectory = bc->subNodeBuild()->buildDir();
+ else
+ workingDirectory = bc->buildDirectory().toString();
+ pp->setWorkingDirectory(workingDirectory);
+
+ pp->setCommand(make);
+
+ // If we are cleaning, then make can fail with a error code, but that doesn't mean
+ // we should stop the clean queue
+ // That is mostly so that rebuild works on a already clean project
+ setIgnoreReturnValue(isClean());
+
+ QString args;
+
+ QmakeProjectManager::QmakeProFileNode *subNode = bc->subNodeBuild();
+ QmakeProjectManager::QmakeProFile *subProFile = subNode ? subNode->proFile() : nullptr;
+ if (subProFile) {
+ QString makefile = subProFile->makefile();
+ if (makefile.isEmpty())
+ makefile = "Makefile";
+ // Use Makefile.Debug and Makefile.Release
+ // for file builds, since the rules for that are
+ // only in those files.
+ if (subProFile->isDebugAndRelease() && bc->fileNodeBuild()) {
+ if (bc->buildType() == QmakeBuildConfiguration::Debug)
+ makefile += ".Debug";
+ else
+ makefile += ".Release";
+ }
+ if (makefile != "Makefile") {
+ Utils::QtcProcess::addArg(&args, "-f");
+ Utils::QtcProcess::addArg(&args, makefile);
+ }
+ m_makeFileToCheck = QDir(workingDirectory).filePath(makefile);
+ } else {
+ if (!bc->makefile().isEmpty()) {
+ Utils::QtcProcess::addArg(&args, "-f");
+ Utils::QtcProcess::addArg(&args, bc->makefile());
+ m_makeFileToCheck = QDir(workingDirectory).filePath(bc->makefile());
+ } else {
+ m_makeFileToCheck = QDir(workingDirectory).filePath("Makefile");
+ }
+ }
+
+ Utils::QtcProcess::addArgs(&args, userArguments());
+ if (bc->fileNodeBuild() && subProFile) {
+ QString objectsDir = subProFile->objectsDirectory();
+ if (objectsDir.isEmpty()) {
+ objectsDir = subProFile->buildDir(bc).toString();
+ if (subProFile->isDebugAndRelease()) {
+ if (bc->buildType() == QmakeBuildConfiguration::Debug)
+ objectsDir += "/debug";
+ else
+ objectsDir += "/release";
+ }
+ }
+ QString relObjectsDir = QDir(pp->workingDirectory()).relativeFilePath(objectsDir);
+ if (relObjectsDir == ".")
+ relObjectsDir.clear();
+ if (!relObjectsDir.isEmpty())
+ relObjectsDir += '/';
+ QString objectFile = relObjectsDir +
+ bc->fileNodeBuild()->filePath().toFileInfo().baseName() +
+ subProFile->objectExtension();
+ Utils::QtcProcess::addArg(&args, objectFile);
+ }
+ pp->setEnvironment(environment(bc));
+ pp->setArguments(args);
+ pp->resolveAll();
+
+ setOutputParser(new ProjectExplorer::GnuMakeParser());
+ ToolChain *tc = ToolChainKitInformation::toolChain(target()->kit(),
+ ProjectExplorer::Constants::CXX_LANGUAGE_ID);
+ if (tc && tc->targetAbi().os() == Abi::DarwinOS)
+ appendOutputParser(new XcodebuildParser);
+ IOutputParser *parser = target()->kit()->createOutputParser();
+ if (parser)
+ appendOutputParser(parser);
+ outputParser()->setWorkingDirectory(pp->effectiveWorkingDirectory());
+ appendOutputParser(new QMakeParser); // make may cause qmake to be run, add last to make sure
+ // it has a low priority.
+
+ m_scriptTarget = (static_cast<QmakeProject *>(bc->target()->project())->rootProjectNode()->projectType() == ProjectType::ScriptTemplate);
+
+ return AbstractProcessStep::init(earlierSteps);
+}
+
+void QmakeMakeStep::run(QFutureInterface<bool> & fi)
+{
+ if (m_scriptTarget) {
+ reportRunResult(fi, true);
+ return;
+ }
+
+ if (!QFileInfo::exists(m_makeFileToCheck)) {
+ if (!ignoreReturnValue())
+ emit addOutput(tr("Cannot find Makefile. Check your build settings."), BuildStep::OutputFormat::NormalMessage);
+ const bool success = ignoreReturnValue();
+ reportRunResult(fi, success);
+ return;
+ }
+
+ AbstractProcessStep::run(fi);
+}
+
+///
+// QmakeMakeStepFactory
+///
+
+QmakeMakeStepFactory::QmakeMakeStepFactory()
+{
+ registerStep<QmakeMakeStep>(MAKESTEP_BS_ID);
+ setSupportedProjectType(Constants::QMAKEPROJECT_ID);
+ setDisplayName(MakeStep::defaultDisplayName());
+}
diff --git a/src/plugins/qmakeprojectmanager/qmakemakestep.h b/src/plugins/qmakeprojectmanager/qmakemakestep.h
new file mode 100644
index 0000000000..a61806eb51
--- /dev/null
+++ b/src/plugins/qmakeprojectmanager/qmakemakestep.h
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+#pragma once
+
+#include "qmakeprojectmanager_global.h"
+
+#include <projectexplorer/makestep.h>
+
+namespace QmakeProjectManager {
+
+class QmakeBuildConfiguration;
+
+namespace Internal {
+
+class QmakeMakeStepFactory : public ProjectExplorer::BuildStepFactory
+{
+public:
+ QmakeMakeStepFactory();
+};
+
+} //namespace Internal
+
+class QmakeProject;
+
+class QMAKEPROJECTMANAGER_EXPORT QmakeMakeStep : public ProjectExplorer::MakeStep
+{
+ Q_OBJECT
+
+public:
+ explicit QmakeMakeStep(ProjectExplorer::BuildStepList *bsl);
+
+ QmakeBuildConfiguration *qmakeBuildConfiguration() const;
+
+ bool init(QList<const BuildStep *> &earlierSteps) override;
+ void run(QFutureInterface<bool> &) override;
+
+private:
+ bool m_scriptTarget = false;
+ QString m_makeFileToCheck;
+};
+
+} // QmakeProjectManager
diff --git a/src/plugins/qmakeprojectmanager/qmakenodes.cpp b/src/plugins/qmakeprojectmanager/qmakenodes.cpp
index 72d5ba53cf..002c39cae4 100644
--- a/src/plugins/qmakeprojectmanager/qmakenodes.cpp
+++ b/src/plugins/qmakeprojectmanager/qmakenodes.cpp
@@ -203,7 +203,7 @@ QmakeProFileNode *QmakeProFileNode::findProFileFor(const FileName &fileName) con
if (fileName == filePath())
return const_cast<QmakeProFileNode *>(this);
for (Node *node : nodes()) {
- if (QmakeProFileNode *qmakeProFileNode = dynamic_cast<QmakeProFileNode *>(node))
+ if (auto *qmakeProFileNode = dynamic_cast<QmakeProFileNode *>(node))
if (QmakeProFileNode *result = qmakeProFileNode->findProFileFor(fileName))
return result;
}
diff --git a/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp b/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp
index 66448835cf..cc26d880e2 100644
--- a/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp
+++ b/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp
@@ -340,7 +340,7 @@ void QmakePriFile::processValues(QmakePriFileEvalResult &result)
}
for (int i = 0; i < static_cast<int>(FileType::FileTypeSize); ++i) {
- FileType type = static_cast<FileType>(i);
+ auto type = static_cast<FileType>(i);
QSet<FileName> &foundFiles = result.foundFiles[type];
result.recursiveEnumerateFiles.subtract(foundFiles);
QSet<FileName> newFilePaths = filterFilesProVariables(type, foundFiles);
@@ -355,7 +355,7 @@ void QmakePriFile::update(const Internal::QmakePriFileEvalResult &result)
watchFolders(result.folders);
for (int i = 0; i < static_cast<int>(FileType::FileTypeSize); ++i) {
- const FileType type = static_cast<FileType>(i);
+ const auto type = static_cast<FileType>(i);
m_files[type] = result.foundFiles.value(type);
}
}
@@ -403,7 +403,7 @@ bool QmakePriFile::folderChanged(const QString &changedFolder, const QSet<FileNa
// Apply the differences per file type
for (int i = 0; i < static_cast<int>(FileType::FileTypeSize); ++i) {
- FileType type = static_cast<FileType>(i);
+ auto type = static_cast<FileType>(i);
QSet<FileName> add = filterFilesRecursiveEnumerata(type, addedFiles);
QSet<FileName> remove = filterFilesRecursiveEnumerata(type, removedFiles);
@@ -508,7 +508,7 @@ bool QmakePriFile::addFiles(const QStringList &filePaths, QStringList *notAdded)
// So it's obviously a bit limited, but in those cases you need to edit the
// project files manually anyway.
- typedef QMap<QString, QStringList> TypeFileMap;
+ using TypeFileMap = QMap<QString, QStringList>;
// Split into lists by file type and bulk-add them.
TypeFileMap typeFileMap;
foreach (const QString &file, filePaths) {
@@ -555,7 +555,7 @@ bool QmakePriFile::removeFiles(const QStringList &filePaths,
QStringList *notRemoved)
{
QStringList failedFiles;
- typedef QMap<QString, QStringList> TypeFileMap;
+ using TypeFileMap = QMap<QString, QStringList>;
// Split into lists by file type and bulk-add them.
TypeFileMap typeFileMap;
foreach (const QString &file, filePaths) {
@@ -1176,7 +1176,7 @@ void QmakeProFile::setValidParseRecursive(bool b)
{
m_validParse = b;
foreach (QmakePriFile *c, children()) {
- if (QmakeProFile *node = dynamic_cast<QmakeProFile *>(c))
+ if (auto *node = dynamic_cast<QmakeProFile *>(c))
node->setValidParseRecursive(b);
}
}
@@ -1275,7 +1275,7 @@ static bool evaluateOne(const QmakeEvalInput &input, ProFile *pro,
QmakeEvalResult *QmakeProFile::evaluate(const QmakeEvalInput &input)
{
- QmakeEvalResult *result = new QmakeEvalResult;
+ auto *result = new QmakeEvalResult;
QtSupport::ProFileReader *exactBuildPassReader = nullptr;
QtSupport::ProFileReader *cumulativeBuildPassReader = nullptr;
ProFile *pro;
@@ -1387,7 +1387,7 @@ QmakeEvalResult *QmakeProFile::evaluate(const QmakeEvalInput &input)
= baseVPaths(cumulativeReader, input.projectDir, input.buildDirectory.toString());
for (int i = 0; i < static_cast<int>(FileType::FileTypeSize); ++i) {
- const FileType type = static_cast<FileType>(i);
+ const auto type = static_cast<FileType>(i);
const QStringList qmakeVariables = varNames(type, exactReader);
foreach (const QString &qmakeVariable, qmakeVariables) {
QHash<ProString, bool> handled;
@@ -1587,14 +1587,14 @@ void QmakeProFile::applyEvaluate(QmakeEvalResult *evalResult)
continue; // Do nothing
if (priFile->proFile) {
- QmakePriFile *qmakePriFileNode = new QmakePriFile(m_project, this, priFile->name);
+ auto *qmakePriFileNode = new QmakePriFile(m_project, this, priFile->name);
pn->addChild(qmakePriFileNode);
qmakePriFileNode->setIncludedInExactParse(
(result->state == QmakeEvalResult::EvalOk) && pn->includedInExactParse());
qmakePriFileNode->update(priFile->result);
toCompare.append(qMakePair(qmakePriFileNode, priFile));
} else {
- QmakeProFile *qmakeProFileNode = new QmakeProFile(m_project, priFile->name);
+ auto *qmakeProFileNode = new QmakeProFile(m_project, priFile->name);
pn->addChild(qmakeProFileNode);
qmakeProFileNode->setIncludedInExactParse(
result->exactSubdirs.contains(qmakeProFileNode->filePath())
diff --git a/src/plugins/qmakeprojectmanager/qmakeproject.cpp b/src/plugins/qmakeprojectmanager/qmakeproject.cpp
index 26e6217bbd..f368b09e28 100644
--- a/src/plugins/qmakeprojectmanager/qmakeproject.cpp
+++ b/src/plugins/qmakeprojectmanager/qmakeproject.cpp
@@ -624,7 +624,7 @@ static FolderNode *folderOf(FolderNode *in, const FileName &fileName)
static FileNode *fileNodeOf(FolderNode *in, const FileName &fileName)
{
for (FolderNode *folder = folderOf(in, fileName); folder; folder = folder->parentFolderNode()) {
- if (QmakeProFileNode *proFile = dynamic_cast<QmakeProFileNode *>(folder)) {
+ if (auto *proFile = dynamic_cast<QmakeProFileNode *>(folder)) {
foreach (FileNode *fileNode, proFile->fileNodes()) {
if (fileNode->filePath() == fileName)
return fileNode;
@@ -1062,15 +1062,11 @@ void QmakeProject::updateBuildSystemData()
else
workingDir = destDir;
} else {
- destDir = ti.buildDir.toString();
workingDir = ti.buildDir.toString();
}
- if (HostOsInfo::isMacHost() && config.contains("app_bundle")) {
- const QString infix = '/' + ti.target + ".app/Contents/MacOS";
- workingDir += infix;
- destDir += infix;
- }
+ if (HostOsInfo::isMacHost() && config.contains("app_bundle"))
+ workingDir += '/' + ti.target + ".app/Contents/MacOS";
BuildTargetInfo bti;
bti.targetFilePath = FileName::fromString(executableFor(proFile));
@@ -1292,30 +1288,38 @@ void QmakeProject::testToolChain(ToolChain *tc, const Utils::FileName &path) con
const Utils::FileName expected = tc->compilerCommand();
Environment env = Environment::systemEnvironment();
+ Kit *k = nullptr;
if (Target *t = activeTarget()) {
+ k = t->kit();
if (BuildConfiguration *bc = t->activeBuildConfiguration())
env = bc->environment();
else
- t->kit()->addToEnvironment(env);
+ k->addToEnvironment(env);
}
+ QTC_ASSERT(k, return);
- if (!env.isSameExecutable(path.toString(), expected.toString())) {
- const QPair<Utils::FileName, Utils::FileName> pair = qMakePair(expected, path);
- if (!m_toolChainWarnings.contains(pair)) {
- // Suppress warnings on Apple machines where compilers in /usr/bin point into Xcode.
- // This will suppress some valid warnings, but avoids annoying Apple users with
- // spurious warnings all the time!
- if (!pair.first.toString().startsWith("/usr/bin/")
- || !pair.second.toString().contains("/Contents/Developer/Toolchains/")) {
- TaskHub::addTask(Task(Task::Warning,
- QCoreApplication::translate("QmakeProjectManager", "\"%1\" is used by qmake, but \"%2\" is configured in the kit.\n"
- "Please update your kit or choose a mkspec for qmake that matches your target environment better.").
- arg(path.toUserOutput()).arg(expected.toUserOutput()),
- Utils::FileName(), -1, ProjectExplorer::Constants::TASK_CATEGORY_BUILDSYSTEM));
- m_toolChainWarnings.insert(pair);
- }
- }
+ if (env.isSameExecutable(path.toString(), expected.toString()))
+ return;
+ const QPair<Utils::FileName, Utils::FileName> pair = qMakePair(expected, path);
+ if (m_toolChainWarnings.contains(pair))
+ return;
+ // Suppress warnings on Apple machines where compilers in /usr/bin point into Xcode.
+ // This will suppress some valid warnings, but avoids annoying Apple users with
+ // spurious warnings all the time!
+ if (pair.first.toString().startsWith("/usr/bin/")
+ && pair.second.toString().contains("/Contents/Developer/Toolchains/")) {
+ return;
}
+ TaskHub::addTask(
+ Task(Task::Warning,
+ QCoreApplication::translate(
+ "QmakeProjectManager",
+ "\"%1\" is used by qmake, but \"%2\" is configured in the kit.\n"
+ "Please update your kit (%3) or choose a mkspec for qmake that matches "
+ "your target environment better.")
+ .arg(path.toUserOutput()).arg(expected.toUserOutput()).arg(k->displayName()),
+ Utils::FileName(), -1, ProjectExplorer::Constants::TASK_CATEGORY_BUILDSYSTEM));
+ m_toolChainWarnings.insert(pair);
}
void QmakeProject::warnOnToolChainMismatch(const QmakeProFile *pro) const
diff --git a/src/plugins/qmakeprojectmanager/qmakeprojectconfigwidget.cpp b/src/plugins/qmakeprojectmanager/qmakeprojectconfigwidget.cpp
index e9c04ae2bd..241bd5a4f5 100644
--- a/src/plugins/qmakeprojectmanager/qmakeprojectconfigwidget.cpp
+++ b/src/plugins/qmakeprojectmanager/qmakeprojectconfigwidget.cpp
@@ -53,7 +53,7 @@ QmakeProjectConfigWidget::QmakeProjectConfigWidget(QmakeBuildConfiguration *bc)
Utils::FileUtils::qmakeFriendlyName(bc->displayName()),
bc->buildType());
- QVBoxLayout *vbox = new QVBoxLayout(this);
+ auto *vbox = new QVBoxLayout(this);
vbox->setMargin(0);
m_detailsContainer = new Utils::DetailsWidget(this);
m_detailsContainer->setState(Utils::DetailsWidget::NoSummary);
@@ -97,7 +97,7 @@ QmakeProjectConfigWidget::QmakeProjectConfigWidget(QmakeBuildConfiguration *bc)
connect(m_ui->shadowBuildDirEdit, &Utils::PathChooser::rawPathChanged,
this, &QmakeProjectConfigWidget::shadowBuildEdited);
- QmakeProject *project = static_cast<QmakeProject *>(bc->target()->project());
+ auto *project = static_cast<QmakeProject *>(bc->target()->project());
project->subscribeSignal(&BuildConfiguration::environmentChanged, this, [this]() {
if (static_cast<BuildConfiguration *>(sender())->isActive())
environmentChanged();
@@ -216,7 +216,7 @@ void QmakeProjectConfigWidget::updateProblemLabel()
return;
}
- QmakeProject *p = static_cast<QmakeProject *>(m_buildConfiguration->target()->project());
+ auto *p = static_cast<QmakeProject *>(m_buildConfiguration->target()->project());
if (p->rootProFile()->parseInProgress() || !p->rootProFile()->validParse()) {
setProblemLabel(QString());
return;
diff --git a/src/plugins/qmakeprojectmanager/qmakeprojectconfigwidget.h b/src/plugins/qmakeprojectmanager/qmakeprojectconfigwidget.h
index a698653d7e..0c5c0ef6fd 100644
--- a/src/plugins/qmakeprojectmanager/qmakeprojectconfigwidget.h
+++ b/src/plugins/qmakeprojectmanager/qmakeprojectconfigwidget.h
@@ -44,7 +44,7 @@ class QmakeProjectConfigWidget : public ProjectExplorer::NamedWidget
Q_OBJECT
public:
QmakeProjectConfigWidget(QmakeBuildConfiguration *bc);
- ~QmakeProjectConfigWidget();
+ ~QmakeProjectConfigWidget() override;
private:
// User changes in our widgets
diff --git a/src/plugins/qmakeprojectmanager/qmakeprojectimporter.cpp b/src/plugins/qmakeprojectmanager/qmakeprojectimporter.cpp
index f76953d179..bc4a340827 100644
--- a/src/plugins/qmakeprojectmanager/qmakeprojectimporter.cpp
+++ b/src/plugins/qmakeprojectmanager/qmakeprojectimporter.cpp
@@ -198,7 +198,7 @@ QList<void *> QmakeProjectImporter::examineDirectory(const FileName &importPath)
bool QmakeProjectImporter::matchKit(void *directoryData, const Kit *k) const
{
- DirectoryData *data = static_cast<DirectoryData *>(directoryData);
+ auto *data = static_cast<DirectoryData *>(directoryData);
const QLoggingCategory &logs = MakeFileParse::logging();
BaseQtVersion *kitVersion = QtKitInformation::qtVersion(k);
@@ -225,14 +225,14 @@ bool QmakeProjectImporter::matchKit(void *directoryData, const Kit *k) const
Kit *QmakeProjectImporter::createKit(void *directoryData) const
{
- DirectoryData *data = static_cast<DirectoryData *>(directoryData);
+ auto *data = static_cast<DirectoryData *>(directoryData);
return createTemporaryKit(data->qtVersionData, data->parsedSpec, data->archConfig, data->osType);
}
QList<BuildInfo *> QmakeProjectImporter::buildInfoListForKit(const Kit *k, void *directoryData) const
{
QList<BuildInfo *> result;
- DirectoryData *data = static_cast<DirectoryData *>(directoryData);
+ auto *data = static_cast<DirectoryData *>(directoryData);
auto factory = qobject_cast<QmakeBuildConfigurationFactory *>(
IBuildConfigurationFactory::find(k, projectFilePath().toString()));
if (!factory)
diff --git a/src/plugins/qmakeprojectmanager/qmakeprojectmanager.cpp b/src/plugins/qmakeprojectmanager/qmakeprojectmanager.cpp
index bfb7402bbb..6e3a3e43ad 100644
--- a/src/plugins/qmakeprojectmanager/qmakeprojectmanager.cpp
+++ b/src/plugins/qmakeprojectmanager/qmakeprojectmanager.cpp
@@ -148,13 +148,13 @@ void QmakeManager::runQMakeImpl(ProjectExplorer::Project *p, ProjectExplorer::No
{
if (!ProjectExplorerPlugin::saveModifiedFiles())
return;
- QmakeProject *qmakeProject = qobject_cast<QmakeProject *>(p);
+ auto *qmakeProject = qobject_cast<QmakeProject *>(p);
QTC_ASSERT(qmakeProject, return);
if (!qmakeProject->activeTarget() || !qmakeProject->activeTarget()->activeBuildConfiguration())
return;
- QmakeBuildConfiguration *bc = static_cast<QmakeBuildConfiguration *>(qmakeProject->activeTarget()->activeBuildConfiguration());
+ auto *bc = static_cast<QmakeBuildConfiguration *>(qmakeProject->activeTarget()->activeBuildConfiguration());
QMakeStep *qs = bc->qmakeStep();
if (!qs)
return;
@@ -163,11 +163,11 @@ void QmakeManager::runQMakeImpl(ProjectExplorer::Project *p, ProjectExplorer::No
qs->setForced(true);
if (node && node != qmakeProject->rootProjectNode())
- if (QmakeProFileNode *profile = dynamic_cast<QmakeProFileNode *>(node))
+ if (auto *profile = dynamic_cast<QmakeProFileNode *>(node))
bc->setSubNodeBuild(profile);
BuildManager::appendStep(qs, tr("QMake"));
- bc->setSubNodeBuild(0);
+ bc->setSubNodeBuild(nullptr);
}
void QmakeManager::buildSubDirContextMenu()
@@ -218,14 +218,14 @@ void QmakeManager::handleSubDirContextMenu(QmakeManager::Action action, bool isF
if (!target)
return;
- QmakeBuildConfiguration *bc = qobject_cast<QmakeBuildConfiguration *>(target->activeBuildConfiguration());
+ auto *bc = qobject_cast<QmakeBuildConfiguration *>(target->activeBuildConfiguration());
if (!bc)
return;
if (!contextNode || !buildableFile)
isFileBuild = false;
- if (QmakePriFileNode *prifile = dynamic_cast<QmakePriFileNode *>(contextNode)) {
+ if (auto *prifile = dynamic_cast<QmakePriFileNode *>(contextNode)) {
if (QmakeProFileNode *profile = prifile->proFileNode()) {
if (profile != contextProject->rootProjectNode() || isFileBuild)
bc->setSubNodeBuild(profile->proFileNode());
@@ -252,8 +252,8 @@ void QmakeManager::handleSubDirContextMenu(QmakeManager::Action action, bool isF
}
}
- bc->setSubNodeBuild(0);
- bc->setFileNodeBuild(0);
+ bc->setSubNodeBuild(nullptr);
+ bc->setFileNodeBuild(nullptr);
}
} // namespace QmakeProjectManager
diff --git a/src/plugins/qmakeprojectmanager/qmakeprojectmanager.pro b/src/plugins/qmakeprojectmanager/qmakeprojectmanager.pro
index d2da5d86b9..b831a594d0 100644
--- a/src/plugins/qmakeprojectmanager/qmakeprojectmanager.pro
+++ b/src/plugins/qmakeprojectmanager/qmakeprojectmanager.pro
@@ -31,7 +31,6 @@ HEADERS += \
wizards/subdirsprojectwizarddialog.h \
wizards/simpleprojectwizard.h \
qmakeprojectmanagerconstants.h \
- makestep.h \
qmakestep.h \
qtmodulesinfo.h \
qmakeprojectconfigwidget.h \
@@ -43,7 +42,8 @@ HEADERS += \
qmakeprojectmanager_global.h \
desktopqmakerunconfiguration.h \
profilecompletionassist.h \
- makefileparse.h
+ makefileparse.h \
+ qmakemakestep.h
SOURCES += \
qmakekitconfigwidget.cpp \
@@ -70,7 +70,6 @@ SOURCES += \
wizards/subdirsprojectwizard.cpp \
wizards/subdirsprojectwizarddialog.cpp \
wizards/simpleprojectwizard.cpp \
- makestep.cpp \
qmakestep.cpp \
qtmodulesinfo.cpp \
qmakeprojectconfigwidget.cpp \
@@ -81,9 +80,10 @@ SOURCES += \
librarydetailscontroller.cpp \
desktopqmakerunconfiguration.cpp \
profilecompletionassist.cpp \
- makefileparse.cpp
+ makefileparse.cpp \
+ qmakemakestep.cpp
-FORMS += makestep.ui \
+FORMS += \
qmakestep.ui \
qmakeprojectconfigwidget.ui \
librarydetailswidget.ui
diff --git a/src/plugins/qmakeprojectmanager/qmakeprojectmanager.qbs b/src/plugins/qmakeprojectmanager/qmakeprojectmanager.qbs
index ddeeb8c53a..2b0e99f353 100644
--- a/src/plugins/qmakeprojectmanager/qmakeprojectmanager.qbs
+++ b/src/plugins/qmakeprojectmanager/qmakeprojectmanager.qbs
@@ -30,7 +30,6 @@ Project {
"externaleditors.cpp", "externaleditors.h",
"librarydetailscontroller.cpp", "librarydetailscontroller.h",
"librarydetailswidget.ui",
- "makestep.cpp", "makestep.h", "makestep.ui",
"makefileparse.cpp", "makefileparse.h",
"profilecompletionassist.cpp", "profilecompletionassist.h",
"profileeditor.cpp", "profileeditor.h",
@@ -39,6 +38,7 @@ Project {
"qmakebuildinfo.h",
"qmakekitconfigwidget.cpp", "qmakekitconfigwidget.h",
"qmakekitinformation.cpp", "qmakekitinformation.h",
+ "qmakemakestep.cpp", "qmakemakestep.h",
"qmakeparser.cpp", "qmakeparser.h",
"qmakeparsernodes.cpp", "qmakeparsernodes.h",
"qmakeprojectimporter.cpp", "qmakeprojectimporter.h",
diff --git a/src/plugins/qmakeprojectmanager/qmakeprojectmanagerplugin.cpp b/src/plugins/qmakeprojectmanager/qmakeprojectmanagerplugin.cpp
index f52917ab20..46ffcec047 100644
--- a/src/plugins/qmakeprojectmanager/qmakeprojectmanagerplugin.cpp
+++ b/src/plugins/qmakeprojectmanager/qmakeprojectmanagerplugin.cpp
@@ -29,7 +29,7 @@
#include "qmakeprojectmanager.h"
#include "qmakenodes.h"
#include "qmakestep.h"
-#include "makestep.h"
+#include "qmakemakestep.h"
#include "qmakebuildconfiguration.h"
#include "desktopqmakerunconfiguration.h"
#include "wizards/guiappwizard.h"
@@ -76,7 +76,7 @@ namespace Internal {
class QmakeProjectManagerPluginPrivate : public QObject
{
public:
- ~QmakeProjectManagerPluginPrivate();
+ ~QmakeProjectManagerPluginPrivate() override;
void projectChanged();
void activeTargetChanged();
@@ -95,7 +95,7 @@ public:
qmakeProjectWizard{"qmakeproject", IWizardFactory::ProjectWizard};
QMakeStepFactory qmakeStepFactory;
- MakeStepFactory makeStepFactory;
+ QmakeMakeStepFactory makeStepFactory;
QmakeBuildConfigurationFactory buildConfigFactory;
DesktopQmakeRunConfigurationFactory runConfigFactory;
@@ -140,7 +140,7 @@ bool QmakeProjectManagerPlugin::initialize(const QStringList &arguments, QString
//create and register objects
ProjectManager::registerProjectType<QmakeProject>(QmakeProjectManager::Constants::PROFILE_MIMETYPE);
- ProjectExplorer::KitManager::registerKitInformation(new QmakeKitInformation);
+ ProjectExplorer::KitManager::registerKitInformation<QmakeKitInformation>();
IWizardFactory::registerFactoryCreator([] {
return QList<IWizardFactory *> {
@@ -371,10 +371,10 @@ void QmakeProjectManagerPluginPrivate::updateContextActions()
Project *project = ProjectTree::currentProject();
const ContainerNode *containerNode = node ? node->asContainerNode() : nullptr;
- const QmakeProFileNode *proFileNode = dynamic_cast<const QmakeProFileNode *>(containerNode ? containerNode->rootProjectNode() : node);
+ const auto *proFileNode = dynamic_cast<const QmakeProFileNode *>(containerNode ? containerNode->rootProjectNode() : node);
m_addLibraryActionContextMenu->setEnabled(proFileNode);
- QmakeProject *qmakeProject = qobject_cast<QmakeProject *>(QmakeManager::contextProject());
+ auto *qmakeProject = qobject_cast<QmakeProject *>(QmakeManager::contextProject());
QmakeProFileNode *subProjectNode = nullptr;
disableBuildFileMenus();
if (node) {
diff --git a/src/plugins/qmakeprojectmanager/qmakestep.cpp b/src/plugins/qmakeprojectmanager/qmakestep.cpp
index 129535de92..aa4c6ba267 100644
--- a/src/plugins/qmakeprojectmanager/qmakestep.cpp
+++ b/src/plugins/qmakeprojectmanager/qmakestep.cpp
@@ -26,7 +26,7 @@
#include "qmakestep.h"
#include "ui_qmakestep.h"
-#include "makestep.h"
+#include "qmakemakestep.h"
#include "qmakebuildconfiguration.h"
#include "qmakekitinformation.h"
#include "qmakenodes.h"
@@ -187,19 +187,6 @@ bool QMakeStep::init(QList<const BuildStep *> &earlierSteps)
m_qmakeExecutable = qtVersion->qmakeCommand().toString();
m_qmakeArguments = allArguments(qtVersion);
m_runMakeQmake = (qtVersion->qtVersion() >= QtVersionNumber(5, 0 ,0));
- if (m_runMakeQmake) {
- m_makeExecutable = makeCommand();
- if (m_makeExecutable.isEmpty()) {
- emit addOutput(tr("Could not determine which \"make\" command to run. "
- "Check the \"make\" step in the build configuration."),
- BuildStep::OutputFormat::ErrorMessage);
- return false;
- }
- m_makeArguments = makeArguments();
- } else {
- m_makeExecutable.clear();
- m_makeArguments.clear();
- }
QString makefile = workingDirectory + '/';
@@ -215,6 +202,20 @@ bool QMakeStep::init(QList<const BuildStep *> &earlierSteps)
makefile.append("Makefile");
}
+ if (m_runMakeQmake) {
+ m_makeExecutable = makeCommand();
+ if (m_makeExecutable.isEmpty()) {
+ emit addOutput(tr("Could not determine which \"make\" command to run. "
+ "Check the \"make\" step in the build configuration."),
+ BuildStep::OutputFormat::ErrorMessage);
+ return false;
+ }
+ m_makeArguments = makeArguments(makefile);
+ } else {
+ m_makeExecutable.clear();
+ m_makeArguments.clear();
+ }
+
// Check whether we need to run qmake
bool makefileOutDated = (qmakeBc->compareToImportFrom(makefile) != QmakeBuildConfiguration::MakefileMatches);
if (m_forced || makefileOutDated)
@@ -305,7 +306,7 @@ bool QMakeStep::processSucceeded(int exitCode, QProcess::ExitStatus status)
bool result = AbstractProcessStep::processSucceeded(exitCode, status);
if (!result)
m_needToRunQMake = true;
- QmakeProject *project = static_cast<QmakeProject *>(qmakeBuildConfiguration()->target()->project());
+ auto *project = static_cast<QmakeProject *>(qmakeBuildConfiguration()->target()->project());
project->emitBuildDirectoryInitialized();
return result;
}
@@ -353,7 +354,7 @@ void QMakeStep::runNextCommand()
return;
case State::RUN_MAKE_QMAKE_ALL:
{
- GnuMakeParser *parser = new GnuMakeParser;
+ auto *parser = new GnuMakeParser;
parser->setWorkingDirectory(processParameters()->workingDirectory());
setOutputParser(parser);
m_nextState = State::POST_PROCESS;
@@ -450,19 +451,16 @@ void QMakeStep::setSeparateDebugInfo(bool enable)
QString QMakeStep::makeCommand() const
{
- MakeStep *ms = qobject_cast<BuildStepList *>(parent())->firstOfType<MakeStep>();
+ auto *ms = qobject_cast<BuildStepList *>(parent())->firstOfType<MakeStep>();
return ms ? ms->effectiveMakeCommand() : QString();
}
-QString QMakeStep::makeArguments() const
+QString QMakeStep::makeArguments(const QString &makefile) const
{
QString args;
- if (QmakeBuildConfiguration *qmakeBc = qmakeBuildConfiguration()) {
- const QString makefile = qmakeBc->makefile();
- if (!makefile.isEmpty()) {
- Utils::QtcProcess::addArg(&args, "-f");
- Utils::QtcProcess::addArg(&args, makefile);
- }
+ if (!makefile.isEmpty()) {
+ Utils::QtcProcess::addArg(&args, "-f");
+ Utils::QtcProcess::addArg(&args, makefile);
}
Utils::QtcProcess::addArg(&args, "qmake_all");
return args;
@@ -480,9 +478,11 @@ QString QMakeStep::effectiveQMakeCall() const
QString result = qmake;
if (qtVersion) {
+ QmakeBuildConfiguration *qmakeBc = qmakeBuildConfiguration();
+ const QString makefile = qmakeBc ? qmakeBc->makefile() : QString();
result += ' ' + allArguments(qtVersion, ArgumentFlag::Expand);
if (qtVersion->qtVersion() >= QtVersionNumber(5, 0, 0))
- result.append(QString::fromLatin1(" && %1 %2").arg(make).arg(makeArguments()));
+ result.append(QString::fromLatin1(" && %1 %2").arg(make).arg(makeArguments(makefile)));
}
return result;
}
@@ -735,7 +735,7 @@ void QMakeStepConfigWidget::linkQmlDebuggingLibraryChecked(bool checked)
void QMakeStepConfigWidget::askForRebuild(const QString &title)
{
- QMessageBox *question = new QMessageBox(Core::ICore::mainWindow());
+ auto *question = new QMessageBox(Core::ICore::mainWindow());
question->setWindowTitle(title);
question->setText(tr("The option will only take effect if the project is recompiled. Do you want to recompile now?"));
question->setStandardButtons(QMessageBox::Yes | QMessageBox::No);
@@ -860,7 +860,7 @@ QMakeStepFactory::QMakeStepFactory()
registerStep<QMakeStep>(QMAKE_BS_ID);
setSupportedConfiguration(Constants::QMAKE_BC_ID);
setSupportedStepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
- setDisplayName(tr("qmake"));
+ setDisplayName(QMakeStep::tr("qmake"));
setFlags(BuildStepInfo::UniqueStep);
}
diff --git a/src/plugins/qmakeprojectmanager/qmakestep.h b/src/plugins/qmakeprojectmanager/qmakestep.h
index b4b9c42ae0..c83f453dae 100644
--- a/src/plugins/qmakeprojectmanager/qmakestep.h
+++ b/src/plugins/qmakeprojectmanager/qmakestep.h
@@ -44,7 +44,6 @@ namespace QtSupport { class BaseQtVersion; }
namespace QmakeProjectManager {
class QmakeBuildConfiguration;
-class QmakeProject;
namespace Internal {
@@ -52,8 +51,6 @@ namespace Ui { class QMakeStep; }
class QMakeStepFactory : public ProjectExplorer::BuildStepFactory
{
- Q_OBJECT
-
public:
QMakeStepFactory();
};
@@ -147,7 +144,7 @@ public:
void setSeparateDebugInfo(bool enable);
QString makeCommand() const;
- QString makeArguments() const;
+ QString makeArguments(const QString &makefile) const;
QString effectiveQMakeCall() const;
QVariantMap toMap() const override;
diff --git a/src/plugins/qmakeprojectmanager/qtmodulesinfo.cpp b/src/plugins/qmakeprojectmanager/qtmodulesinfo.cpp
index a10899a2a3..202261bd7f 100644
--- a/src/plugins/qmakeprojectmanager/qtmodulesinfo.cpp
+++ b/src/plugins/qmakeprojectmanager/qtmodulesinfo.cpp
@@ -169,7 +169,7 @@ static inline const item *itemForModule(const QString &module)
foreach (const item *i, staticQtModuleInfo()->items)
if (QLatin1String(i->config) == module)
return i;
- return 0;
+ return nullptr;
}
QString QtModulesInfo::moduleName(const QString &module)
diff --git a/src/plugins/qmakeprojectmanager/wizards/filespage.cpp b/src/plugins/qmakeprojectmanager/wizards/filespage.cpp
index 5de4eeb625..520f2d03b2 100644
--- a/src/plugins/qmakeprojectmanager/wizards/filespage.cpp
+++ b/src/plugins/qmakeprojectmanager/wizards/filespage.cpp
@@ -46,7 +46,7 @@ FilesPage::FilesPage(QWidget *parent) :
"for which you want to generate skeleton source code files."));
label->setWordWrap(true);
- QVBoxLayout *vlayout = new QVBoxLayout;
+ auto *vlayout = new QVBoxLayout;
vlayout->addWidget(label);
vlayout->addItem(new QSpacerItem(0, 20));
diff --git a/src/plugins/qmakeprojectmanager/wizards/filespage.h b/src/plugins/qmakeprojectmanager/wizards/filespage.h
index 96d7145ace..dbfefb3927 100644
--- a/src/plugins/qmakeprojectmanager/wizards/filespage.h
+++ b/src/plugins/qmakeprojectmanager/wizards/filespage.h
@@ -41,8 +41,8 @@ class FilesPage : public QWizardPage
Q_OBJECT
public:
- explicit FilesPage(QWidget *parent = 0);
- virtual bool isComplete() const;
+ explicit FilesPage(QWidget *parent = nullptr);
+ bool isComplete() const override;
QString className() const;
void setClassName(const QString &suggestedClassName);
diff --git a/src/plugins/qmakeprojectmanager/wizards/guiappwizard.cpp b/src/plugins/qmakeprojectmanager/wizards/guiappwizard.cpp
index fd6cbc475e..907964b6fe 100644
--- a/src/plugins/qmakeprojectmanager/wizards/guiappwizard.cpp
+++ b/src/plugins/qmakeprojectmanager/wizards/guiappwizard.cpp
@@ -132,7 +132,7 @@ static inline bool generateFormClass(const GuiAppParameters &params,
Core::GeneratedFiles GuiAppWizard::generateFiles(const QWizard *w,
QString *errorMessage) const
{
- const GuiAppWizardDialog *dialog = qobject_cast<const GuiAppWizardDialog *>(w);
+ const auto *dialog = qobject_cast<const GuiAppWizardDialog *>(w);
const QtProjectParameters projectParams = dialog->projectParameters();
const QString projectPath = projectParams.projectPath();
const GuiAppParameters params = dialog->parameters();
diff --git a/src/plugins/qmakeprojectmanager/wizards/guiappwizard.h b/src/plugins/qmakeprojectmanager/wizards/guiappwizard.h
index 82369889e9..31eb5b7ce9 100644
--- a/src/plugins/qmakeprojectmanager/wizards/guiappwizard.h
+++ b/src/plugins/qmakeprojectmanager/wizards/guiappwizard.h
@@ -40,9 +40,9 @@ public:
GuiAppWizard();
private:
- Core::BaseFileWizard *create(QWidget *parent, const Core::WizardDialogParameters &parameters) const;
+ Core::BaseFileWizard *create(QWidget *parent, const Core::WizardDialogParameters &parameters) const override;
- Core::GeneratedFiles generateFiles(const QWizard *w, QString *errorMessage) const;
+ Core::GeneratedFiles generateFiles(const QWizard *w, QString *errorMessage) const override;
private:
static bool parametrizeTemplate(const QString &templatePath, const QString &templateName,
diff --git a/src/plugins/qmakeprojectmanager/wizards/librarywizard.cpp b/src/plugins/qmakeprojectmanager/wizards/librarywizard.cpp
index e420502a45..20b2c669a7 100644
--- a/src/plugins/qmakeprojectmanager/wizards/librarywizard.cpp
+++ b/src/plugins/qmakeprojectmanager/wizards/librarywizard.cpp
@@ -76,7 +76,7 @@ Core::GeneratedFiles LibraryWizard::generateFiles(const QWizard *w,
QString *errorMessage) const
{
Q_UNUSED(errorMessage)
- const LibraryWizardDialog *dialog = qobject_cast<const LibraryWizardDialog *>(w);
+ const auto *dialog = qobject_cast<const LibraryWizardDialog *>(w);
const QtProjectParameters projectParams = dialog->parameters();
const QString projectPath = projectParams.projectPath();
const LibraryParameters params = dialog->libraryParameters();
diff --git a/src/plugins/qmakeprojectmanager/wizards/librarywizard.h b/src/plugins/qmakeprojectmanager/wizards/librarywizard.h
index d96df97df6..f7edeb5330 100644
--- a/src/plugins/qmakeprojectmanager/wizards/librarywizard.h
+++ b/src/plugins/qmakeprojectmanager/wizards/librarywizard.h
@@ -39,9 +39,9 @@ public:
LibraryWizard();
protected:
- Core::BaseFileWizard *create(QWidget *parent, const Core::WizardDialogParameters &parameters) const;
+ Core::BaseFileWizard *create(QWidget *parent, const Core::WizardDialogParameters &parameters) const override;
- Core::GeneratedFiles generateFiles(const QWizard *w, QString *errorMessage) const;
+ Core::GeneratedFiles generateFiles(const QWizard *w, QString *errorMessage) const override;
};
} // namespace Internal
diff --git a/src/plugins/qmakeprojectmanager/wizards/librarywizarddialog.cpp b/src/plugins/qmakeprojectmanager/wizards/librarywizarddialog.cpp
index ef0bd79ed0..96941d8862 100644
--- a/src/plugins/qmakeprojectmanager/wizards/librarywizarddialog.cpp
+++ b/src/plugins/qmakeprojectmanager/wizards/librarywizarddialog.cpp
@@ -53,15 +53,15 @@ struct PluginBaseClasses {
static const PluginBaseClasses pluginBaseClasses[] =
{
{"QAccessiblePlugin", "QtGui", "QtCore", "accessible", "QAccessibleFactoryInterface"},
- {"QDecorationPlugin", "QtGui", "QtCore", 0, 0}, // Qt 4 only.
+ {"QDecorationPlugin", "QtGui", "QtCore", nullptr, nullptr}, // Qt 4 only.
{"QGenericPlugin", "QtGui", "QtCore", "generic", "QGenericPluginFactoryInterface"},
- {"QIconEnginePluginV2", "QtGui", "QtCore", "imageformats", 0}, // Qt 4 only.
+ {"QIconEnginePluginV2", "QtGui", "QtCore", "imageformats", nullptr}, // Qt 4 only.
{"QIconEnginePlugin", "QtGui", "QtCore", "imageformats", "QIconEngineFactoryInterface"},
{"QImageIOPlugin", "QtGui", "QtCore", "imageformats", "QImageIOHandlerFactoryInterface"},
- {"QScriptExtensionPlugin", "QtScript", "QtCore", 0, "QScriptExtensionInterface"},
+ {"QScriptExtensionPlugin", "QtScript", "QtCore", nullptr, "QScriptExtensionInterface"},
{"QSqlDriverPlugin", "QtSql", "QtCore", "sqldrivers", "QSqlDriverFactoryInterface"},
{"QStylePlugin", "QtGui", "QtCore", "styles", "QStyleFactoryInterface"},
- {"QTextCodecPlugin", "QtCore", 0, "codecs", 0} // Qt 4 only.
+ {"QTextCodecPlugin", "QtCore", nullptr, "codecs", nullptr} // Qt 4 only.
};
enum { defaultPluginBaseClass = 2 };
@@ -72,7 +72,7 @@ static const PluginBaseClasses *findPluginBaseClass(const QString &name)
for (int i = 0; i < pluginBaseClassCount; i++)
if (name == QLatin1String(pluginBaseClasses[i].name))
return pluginBaseClasses + i;
- return 0;
+ return nullptr;
}
// return dependencies of a plugin as a line ready for the 'QT=' line in a pro
@@ -96,7 +96,7 @@ static QStringList pluginDependencies(const PluginBaseClasses *plb)
class LibraryIntroPage : public Utils::ProjectIntroPage
{
public:
- explicit LibraryIntroPage(QWidget *parent = 0);
+ explicit LibraryIntroPage(QWidget *parent = nullptr);
QtProjectParameters::Type type() const;
@@ -154,7 +154,7 @@ LibraryWizardDialog::LibraryWizardDialog(const Core::BaseFileWizardFactory *fact
m_filesPageId = addPage(m_filesPage);
Utils::WizardProgressItem *introItem = wizardProgress()->item(startId());
- Utils::WizardProgressItem *targetItem = 0;
+ Utils::WizardProgressItem *targetItem = nullptr;
if (m_targetPageId != -1)
targetItem = wizardProgress()->item(m_targetPageId);
Utils::WizardProgressItem *modulesItem = wizardProgress()->item(m_modulesPageId);
@@ -165,11 +165,11 @@ LibraryWizardDialog::LibraryWizardDialog(const Core::BaseFileWizardFactory *fact
if (m_targetPageId != -1) {
targetItem->setNextItems(QList<Utils::WizardProgressItem *>()
<< modulesItem << filesItem);
- targetItem->setNextShownItem(0);
+ targetItem->setNextShownItem(nullptr);
} else {
introItem->setNextItems(QList<Utils::WizardProgressItem *>()
<< modulesItem << filesItem);
- introItem->setNextShownItem(0);
+ introItem->setNextShownItem(nullptr);
}
}
@@ -238,7 +238,7 @@ void LibraryWizardDialog::cleanupPage(int id)
{
if (m_targetPageId != -1 && id == m_targetPageId) {
Utils::WizardProgressItem *targetsItem = wizardProgress()->item(m_targetPageId);
- targetsItem->setNextShownItem(0);
+ targetsItem->setNextShownItem(nullptr);
}
BaseQmakeProjectWizardDialog::cleanupPage(id);
}
diff --git a/src/plugins/qmakeprojectmanager/wizards/modulespage.cpp b/src/plugins/qmakeprojectmanager/wizards/modulespage.cpp
index a26485a2e6..a9b5e1bb31 100644
--- a/src/plugins/qmakeprojectmanager/wizards/modulespage.cpp
+++ b/src/plugins/qmakeprojectmanager/wizards/modulespage.cpp
@@ -48,11 +48,11 @@ ModulesPage::ModulesPage(QWidget *parent)
"project. The recommended modules for this project are selected by default."));
label->setWordWrap(true);
- QVBoxLayout *vlayout = new QVBoxLayout();
+ auto *vlayout = new QVBoxLayout();
vlayout->addWidget(label);
vlayout->addItem(new QSpacerItem(0, 20));
- QGridLayout *layout = new QGridLayout;
+ auto *layout = new QGridLayout;
const QStringList &modulesList = QtModulesInfo::modules();
int moduleId = 0;
diff --git a/src/plugins/qmakeprojectmanager/wizards/modulespage.h b/src/plugins/qmakeprojectmanager/wizards/modulespage.h
index 394326d1df..b867a434a4 100644
--- a/src/plugins/qmakeprojectmanager/wizards/modulespage.h
+++ b/src/plugins/qmakeprojectmanager/wizards/modulespage.h
@@ -41,7 +41,7 @@ class ModulesPage : public QWizardPage
Q_OBJECT
public:
- explicit ModulesPage(QWidget* parent = 0);
+ explicit ModulesPage(QWidget* parent = nullptr);
QStringList selectedModulesList() const;
QStringList deselectedModulesList() const;
diff --git a/src/plugins/qmakeprojectmanager/wizards/qtprojectparameters.cpp b/src/plugins/qmakeprojectmanager/wizards/qtprojectparameters.cpp
index 1c87994374..c11ce81d1d 100644
--- a/src/plugins/qmakeprojectmanager/wizards/qtprojectparameters.cpp
+++ b/src/plugins/qmakeprojectmanager/wizards/qtprojectparameters.cpp
@@ -36,10 +36,7 @@ namespace QmakeProjectManager {
namespace Internal {
// ----------- QtProjectParameters
-QtProjectParameters::QtProjectParameters()
- : type(ConsoleApp), flags(0), qtVersionSupport(SupportQt4And5)
-{
-}
+QtProjectParameters::QtProjectParameters() = default;
QString QtProjectParameters::projectPath() const
{
diff --git a/src/plugins/qmakeprojectmanager/wizards/qtprojectparameters.h b/src/plugins/qmakeprojectmanager/wizards/qtprojectparameters.h
index e82e2fb3ed..eb678d1311 100644
--- a/src/plugins/qmakeprojectmanager/wizards/qtprojectparameters.h
+++ b/src/plugins/qmakeprojectmanager/wizards/qtprojectparameters.h
@@ -57,9 +57,9 @@ struct QtProjectParameters {
// Shared library: name of #define indicating compilation within library
static QString libraryMacro(const QString &projectName);
- Type type;
- unsigned flags;
- QtVersionSupport qtVersionSupport;
+ Type type = ConsoleApp;
+ unsigned flags = 0;
+ QtVersionSupport qtVersionSupport = SupportQt4And5;
QString fileName;
QString target;
QString path;
diff --git a/src/plugins/qmakeprojectmanager/wizards/qtwizard.cpp b/src/plugins/qmakeprojectmanager/wizards/qtwizard.cpp
index f740378580..9ed1939f1a 100644
--- a/src/plugins/qmakeprojectmanager/wizards/qtwizard.cpp
+++ b/src/plugins/qmakeprojectmanager/wizards/qtwizard.cpp
@@ -88,7 +88,7 @@ bool QtWizard::qt4ProjectPostGenerateFiles(const QWizard *w,
const Core::GeneratedFiles &generatedFiles,
QString *errorMessage)
{
- const BaseQmakeProjectWizardDialog *dialog = qobject_cast<const BaseQmakeProjectWizardDialog *>(w);
+ const auto *dialog = qobject_cast<const BaseQmakeProjectWizardDialog *>(w);
// Generate user settings
foreach (const Core::GeneratedFile &file, generatedFiles)
@@ -118,14 +118,12 @@ bool QtWizard::lowerCaseFiles()
}
// ------------ CustomQmakeProjectWizard
-CustomQmakeProjectWizard::CustomQmakeProjectWizard()
-{
-}
+CustomQmakeProjectWizard::CustomQmakeProjectWizard() = default;
Core::BaseFileWizard *CustomQmakeProjectWizard::create(QWidget *parent,
const Core::WizardDialogParameters &parameters) const
{
- BaseQmakeProjectWizardDialog *wizard = new BaseQmakeProjectWizardDialog(this, false, parent,
+ auto *wizard = new BaseQmakeProjectWizardDialog(this, false, parent,
parameters);
if (!parameters.extraValues().contains(QLatin1String(ProjectExplorer::Constants::PROJECT_KIT_IDS)))
@@ -146,8 +144,6 @@ BaseQmakeProjectWizardDialog::BaseQmakeProjectWizardDialog(const Core::BaseFileW
bool showModulesPage, QWidget *parent,
const Core::WizardDialogParameters &parameters) :
ProjectExplorer::BaseProjectWizardDialog(factory, parent, parameters),
- m_modulesPage(0),
- m_targetSetupPage(0),
m_profileIds(parameters.extraValues().value(QLatin1String(ProjectExplorer::Constants::PROJECT_KIT_IDS))
.value<QList<Core::Id> >())
{
@@ -160,8 +156,6 @@ BaseQmakeProjectWizardDialog::BaseQmakeProjectWizardDialog(const Core::BaseFileW
int introId, QWidget *parent,
const Core::WizardDialogParameters &parameters) :
ProjectExplorer::BaseProjectWizardDialog(factory, introPage, introId, parent, parameters),
- m_modulesPage(0),
- m_targetSetupPage(0),
m_profileIds(parameters.extraValues().value(QLatin1String(ProjectExplorer::Constants::PROJECT_KIT_IDS))
.value<QList<Core::Id> >())
{
diff --git a/src/plugins/qmakeprojectmanager/wizards/qtwizard.h b/src/plugins/qmakeprojectmanager/wizards/qtwizard.h
index a6469cf7bc..1196c92a2a 100644
--- a/src/plugins/qmakeprojectmanager/wizards/qtwizard.h
+++ b/src/plugins/qmakeprojectmanager/wizards/qtwizard.h
@@ -134,8 +134,8 @@ private:
inline void init(bool showModulesPage);
- ModulesPage *m_modulesPage;
- ProjectExplorer::TargetSetupPage *m_targetSetupPage;
+ ModulesPage *m_modulesPage = nullptr;
+ ProjectExplorer::TargetSetupPage *m_targetSetupPage = nullptr;
QStringList m_selectedModules;
QStringList m_deselectedModules;
QList<Core::Id> m_profileIds;
diff --git a/src/plugins/qmakeprojectmanager/wizards/subdirsprojectwizard.cpp b/src/plugins/qmakeprojectmanager/wizards/subdirsprojectwizard.cpp
index b85254fd46..306a2438a4 100644
--- a/src/plugins/qmakeprojectmanager/wizards/subdirsprojectwizard.cpp
+++ b/src/plugins/qmakeprojectmanager/wizards/subdirsprojectwizard.cpp
@@ -68,7 +68,7 @@ Core::BaseFileWizard *SubdirsProjectWizard::create(QWidget *parent,
Core::GeneratedFiles SubdirsProjectWizard::generateFiles(const QWizard *w,
QString * /*errorMessage*/) const
{
- const SubdirsProjectWizardDialog *wizard = qobject_cast< const SubdirsProjectWizardDialog *>(w);
+ const auto *wizard = qobject_cast< const SubdirsProjectWizardDialog *>(w);
const QtProjectParameters params = wizard->parameters();
const QString projectPath = params.projectPath();
const QString profileName = Core::BaseFileWizardFactory::buildFileName(projectPath, params.fileName, profileSuffix());
@@ -82,7 +82,7 @@ Core::GeneratedFiles SubdirsProjectWizard::generateFiles(const QWizard *w,
bool SubdirsProjectWizard::postGenerateFiles(const QWizard *w, const Core::GeneratedFiles &files,
QString *errorMessage) const
{
- const SubdirsProjectWizardDialog *wizard = qobject_cast< const SubdirsProjectWizardDialog *>(w);
+ const auto *wizard = qobject_cast< const SubdirsProjectWizardDialog *>(w);
if (QtWizard::qt4ProjectPostGenerateFiles(wizard, files, errorMessage)) {
const QtProjectParameters params = wizard->parameters();
const QString projectPath = params.projectPath();
diff --git a/src/plugins/qmldesigner/components/componentcore/abstractaction.cpp b/src/plugins/qmldesigner/components/componentcore/abstractaction.cpp
index 05e33a2ce7..e4546b5230 100644
--- a/src/plugins/qmldesigner/components/componentcore/abstractaction.cpp
+++ b/src/plugins/qmldesigner/components/componentcore/abstractaction.cpp
@@ -74,7 +74,7 @@ SelectionContext AbstractAction::selectionContext() const
}
DefaultAction::DefaultAction(const QString &description)
- : QAction(description, 0)
+ : QAction(description, nullptr)
{
connect(this, &QAction::triggered, this, &DefaultAction::actionTriggered);
}
diff --git a/src/plugins/qmldesigner/components/componentcore/actioninterface.h b/src/plugins/qmldesigner/components/componentcore/actioninterface.h
index ff6ddadb95..ee120131f7 100644
--- a/src/plugins/qmldesigner/components/componentcore/actioninterface.h
+++ b/src/plugins/qmldesigner/components/componentcore/actioninterface.h
@@ -52,7 +52,7 @@ public:
LowestPriority = ComponentCoreConstants::priorityLast
};
- virtual ~ActionInterface() {}
+ virtual ~ActionInterface() = default;
virtual QAction *action() const = 0;
virtual QByteArray category() const = 0;
diff --git a/src/plugins/qmldesigner/components/componentcore/addimagesdialog.cpp b/src/plugins/qmldesigner/components/componentcore/addimagesdialog.cpp
index 5f69750e8a..10a992ae1b 100644
--- a/src/plugins/qmldesigner/components/componentcore/addimagesdialog.cpp
+++ b/src/plugins/qmldesigner/components/componentcore/addimagesdialog.cpp
@@ -39,7 +39,7 @@
static QTableWidget* createFilesTable(const QStringList &fileNames)
{
- QTableWidget *table = new QTableWidget(0, 2);
+ auto table = new QTableWidget(0, 2);
table->setSelectionMode(QAbstractItemView::NoSelection);
QStringList labels({
@@ -55,7 +55,7 @@ static QTableWidget* createFilesTable(const QStringList &fileNames)
const QString toolTip = QDir::toNativeSeparators(filePath);
const QString fileName = QFileInfo(filePath).fileName();
const qint64 size = QFileInfo(filePath).size() / 1024;
- QTableWidgetItem *fileNameItem = new QTableWidgetItem(fileName);
+ auto fileNameItem = new QTableWidgetItem(fileName);
fileNameItem->setToolTip(toolTip);
fileNameItem->setFlags(fileNameItem->flags() ^ Qt::ItemIsEditable);
QTableWidgetItem *sizeItem = new QTableWidgetItem(QString::number(size) + " KB");
@@ -74,7 +74,7 @@ static QTableWidget* createFilesTable(const QStringList &fileNames)
QComboBox *createDirectoryComboBox(const QString &defaultDirectory)
{
- QComboBox *comboBox = new QComboBox;
+ auto comboBox = new QComboBox;
comboBox->addItem(defaultDirectory);
comboBox->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
@@ -99,7 +99,7 @@ QString AddImagesDialog::getDirectory(const QStringList &fileNames, const QStrin
dialog->setWindowTitle(QCoreApplication::translate("AddImageToResources","Add Resources"));
QTableWidget *table = createFilesTable(fileNames);
table->setParent(dialog);
- QGridLayout *mainLayout = new QGridLayout(dialog);
+ auto mainLayout = new QGridLayout(dialog);
mainLayout->addWidget(table, 0, 0, 1, 4);
QComboBox *directoryComboBox = createDirectoryComboBox(defaultDirectory);
diff --git a/src/plugins/qmldesigner/components/componentcore/changestyleaction.cpp b/src/plugins/qmldesigner/components/componentcore/changestyleaction.cpp
index 41901e6e9d..fa77acccb9 100644
--- a/src/plugins/qmldesigner/components/componentcore/changestyleaction.cpp
+++ b/src/plugins/qmldesigner/components/componentcore/changestyleaction.cpp
@@ -61,7 +61,7 @@ const char disbledTooltip[] = QT_TRANSLATE_NOOP("ChangeStyleWidgetAction",
QWidget *ChangeStyleWidgetAction::createWidget(QWidget *parent)
{
- QComboBox *comboBox = new QComboBox(parent);
+ auto comboBox = new QComboBox(parent);
comboBox->setToolTip(tr(enabledTooltip));
comboBox->addItem("Default");
comboBox->addItem("Fusion");
diff --git a/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp b/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp
index 3fd96d7bd5..6bc247d143 100644
--- a/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp
+++ b/src/plugins/qmldesigner/components/componentcore/designeractionmanager.cpp
@@ -71,7 +71,7 @@ DesignerActionManagerView *DesignerActionManager::view()
DesignerActionToolBar *DesignerActionManager::createToolBar(QWidget *parent) const
{
- DesignerActionToolBar *toolBar = new DesignerActionToolBar(parent);
+ auto toolBar = new DesignerActionToolBar(parent);
QList<ActionInterface* > categories = Utils::filtered(designerActions(), [](ActionInterface *action) {
return action->type() == ActionInterface::ContextMenu;
@@ -149,13 +149,13 @@ QGraphicsWidget *DesignerActionManager::createFormEditorToolBar(QGraphicsItem *p
QGraphicsWidget *toolbar = new QGraphicsWidget(parent);
- QGraphicsLinearLayout *layout = new QGraphicsLinearLayout;
+ auto layout = new QGraphicsLinearLayout;
layout->setContentsMargins(0, 0, 0, 0);
layout->setSpacing(0);
toolbar->setLayout(layout);
for (ActionInterface *action : actions) {
- FormEditorToolButton *button = new FormEditorToolButton(action->action(), toolbar);
+ auto button = new FormEditorToolButton(action->action(), toolbar);
layout->addItem(button);
}
@@ -199,7 +199,7 @@ public:
ModelNodeContextMenuAction(id, description, category, key, priority, action, enabled, visibility)
{}
- virtual void updateContext()
+ void updateContext() override
{
defaultAction()->setSelectionContext(selectionContext());
if (selectionContext().isValid()) {
@@ -225,7 +225,7 @@ public:
SelectionContextPredicate visibility = &SelectionContextFunctors::always) :
ModelNodeContextMenuAction(id, description, category, key, priority, action, enabled, visibility)
{}
- virtual void updateContext()
+ void updateContext() override
{
defaultAction()->setSelectionContext(selectionContext());
if (selectionContext().isValid()) {
@@ -285,7 +285,7 @@ public:
{}
- virtual void updateContext()
+ void updateContext() override
{
menu()->clear();
if (selectionContext().isValid()) {
@@ -1036,9 +1036,7 @@ DesignerActionManager::DesignerActionManager(DesignerActionManagerView *designer
{
}
-DesignerActionManager::~DesignerActionManager()
-{
-}
+DesignerActionManager::~DesignerActionManager() = default;
DesignerActionToolBar::DesignerActionToolBar(QWidget *parentWidget) : Utils::StyledBar(parentWidget),
m_toolBar(new QToolBar("ActionToolBar", this))
@@ -1048,7 +1046,7 @@ DesignerActionToolBar::DesignerActionToolBar(QWidget *parentWidget) : Utils::Sty
m_toolBar->setMovable(true);
m_toolBar->setOrientation(Qt::Horizontal);
- QHBoxLayout *horizontalLayout = new QHBoxLayout(this);
+ auto horizontalLayout = new QHBoxLayout(this);
horizontalLayout->setMargin(0);
horizontalLayout->setSpacing(0);
@@ -1066,7 +1064,7 @@ void DesignerActionToolBar::registerAction(ActionInterface *action)
void DesignerActionToolBar::addSeparator()
{
- QAction *separatorAction = new QAction(m_toolBar);
+ auto separatorAction = new QAction(m_toolBar);
separatorAction->setSeparator(true);
m_toolBar->addAction(separatorAction);
}
diff --git a/src/plugins/qmldesigner/components/componentcore/designeractionmanager.h b/src/plugins/qmldesigner/components/componentcore/designeractionmanager.h
index b84bbb71af..7997ef07e2 100644
--- a/src/plugins/qmldesigner/components/componentcore/designeractionmanager.h
+++ b/src/plugins/qmldesigner/components/componentcore/designeractionmanager.h
@@ -42,7 +42,7 @@ namespace QmlDesigner {
class DesignerActionManagerView;
-typedef std::function<bool (const QStringList &filenames, const QString &defaulTargetDirectory)> AddResourceOperation;
+using AddResourceOperation = std::function<bool (const QStringList&, const QString&)>;
struct AddResourceHandler
{
diff --git a/src/plugins/qmldesigner/components/componentcore/designeractionmanagerview.cpp b/src/plugins/qmldesigner/components/componentcore/designeractionmanagerview.cpp
index 4e97cb75ca..dcdf960cf4 100644
--- a/src/plugins/qmldesigner/components/componentcore/designeractionmanagerview.cpp
+++ b/src/plugins/qmldesigner/components/componentcore/designeractionmanagerview.cpp
@@ -32,7 +32,7 @@
namespace QmlDesigner {
DesignerActionManagerView::DesignerActionManagerView()
- : AbstractView(0),
+ : AbstractView(nullptr),
m_designerActionManager(this),
m_isInRewriterTransaction(false),
m_setupContextDirty(false)
diff --git a/src/plugins/qmldesigner/components/componentcore/findimplementation.cpp b/src/plugins/qmldesigner/components/componentcore/findimplementation.cpp
index a22a72498f..a3a33f0140 100644
--- a/src/plugins/qmldesigner/components/componentcore/findimplementation.cpp
+++ b/src/plugins/qmldesigner/components/componentcore/findimplementation.cpp
@@ -42,9 +42,9 @@ using namespace QmlJS;
class FindImplementationVisitor: protected AST::Visitor
{
public:
- typedef QList<AST::SourceLocation> Results;
+ using Results = QList<AST::SourceLocation>;
- FindImplementationVisitor(Document::Ptr doc, const ContextPtr &context)
+ FindImplementationVisitor(const Document::Ptr &doc, const ContextPtr &context)
: m_document(doc)
, m_context(context)
, m_scopeChain(doc, context)
@@ -82,7 +82,7 @@ protected:
using AST::Visitor::visit;
- virtual bool visit(AST::UiPublicMember *node)
+ bool visit(AST::UiPublicMember *node) override
{
if (node->memberTypeName() == m_typeName){
const ObjectValue * objectValue = m_context->lookupType(m_document.data(), QStringList(m_typeName));
@@ -98,7 +98,7 @@ protected:
return true;
}
- virtual bool visit(AST::UiObjectDefinition *node)
+ bool visit(AST::UiObjectDefinition *node) override
{
bool oldInside = m_insideObject;
if (checkTypeName(node->qualifiedTypeNameId))
@@ -111,7 +111,7 @@ protected:
return false;
}
- virtual bool visit(AST::UiObjectBinding *node)
+ bool visit(AST::UiObjectBinding *node) override
{
bool oldInside = m_insideObject;
if (checkTypeName(node->qualifiedTypeNameId))
@@ -125,7 +125,7 @@ protected:
return false;
}
- virtual bool visit(AST::UiScriptBinding *node)
+ bool visit(AST::UiScriptBinding *node) override
{
if (m_insideObject) {
QStringList stringList = textAt(node->qualifiedId->firstSourceLocation(),
@@ -147,7 +147,7 @@ protected:
return true;
}
- virtual bool visit(AST::IdentifierExpression *node)
+ bool visit(AST::IdentifierExpression *node) override
{
if (node->name != m_typeName)
return false;
@@ -159,7 +159,7 @@ protected:
return false;
}
- virtual bool visit(AST::FieldMemberExpression *node)
+ bool visit(AST::FieldMemberExpression *node) override
{
if (node->name != m_typeName)
return true;
@@ -173,12 +173,12 @@ protected:
return true;
}
- virtual bool visit(AST::FunctionDeclaration *node)
+ bool visit(AST::FunctionDeclaration *node) override
{
return visit(static_cast<AST::FunctionExpression *>(node));
}
- virtual bool visit(AST::FunctionExpression *node)
+ bool visit(AST::FunctionExpression *node) override
{
AST::Node::accept(node->formals, this);
m_scopeBuilder.push(node);
@@ -187,13 +187,13 @@ protected:
return false;
}
- virtual bool visit(AST::VariableDeclaration *node)
+ bool visit(AST::VariableDeclaration *node) override
{
AST::Node::accept(node->expression, this);
return false;
}
- virtual bool visit(AST::UiImport *ast)
+ bool visit(AST::UiImport *ast) override
{
if (ast && ast->importId == m_typeName) {
const Imports *imp = m_context->imports(m_document.data());
@@ -248,9 +248,7 @@ QString matchingLine(unsigned position, const QString &source)
} //namespace
-FindImplementation::FindImplementation()
-{
-}
+FindImplementation::FindImplementation() = default;
QList<QmlJSEditor::FindReferences::Usage> FindImplementation::run(const QString &fileName,
const QString &typeName,
@@ -263,7 +261,7 @@ QList<QmlJSEditor::FindReferences::Usage> FindImplementation::run(const QString
//Parse always the latest version of document
QmlJS::Dialect dialect = QmlJS::ModelManagerInterface::guessLanguageOfFile(fileName);
QmlJS::Document::MutablePtr documentUpdate = QmlJS::Document::create(fileName, dialect);
- documentUpdate->setSource(modelManager->workingCopy().source(fileName));
+ documentUpdate->setSource(QmlJS::ModelManagerInterface::workingCopy().source(fileName));
if (documentUpdate->parseQml())
modelManager->updateDocument(documentUpdate);
diff --git a/src/plugins/qmldesigner/components/componentcore/layoutingridlayout.cpp b/src/plugins/qmldesigner/components/componentcore/layoutingridlayout.cpp
index ed05faba12..5ec3ea557b 100644
--- a/src/plugins/qmldesigner/components/componentcore/layoutingridlayout.cpp
+++ b/src/plugins/qmldesigner/components/componentcore/layoutingridlayout.cpp
@@ -119,7 +119,7 @@ static void setUpperLeftPostionToNode(const ModelNode &layoutNode, const QList<M
{
QPointF upperLeftPosition = getUpperLeftPosition(modelNodeList);
layoutNode.variantProperty("x").setValue(qRound(upperLeftPosition.x()));
- layoutNode.variantProperty("y") .setValue(qRound(upperLeftPosition.y()));
+ layoutNode.variantProperty("y").setValue(qRound(upperLeftPosition.y()));
}
void LayoutInGridLayout::reparentToNodeAndRemovePositionForModelNodes(const ModelNode &parentModelNode,
diff --git a/src/plugins/qmldesigner/components/componentcore/layoutingridlayout.h b/src/plugins/qmldesigner/components/componentcore/layoutingridlayout.h
index 4acc4291a6..ba7d5991e9 100644
--- a/src/plugins/qmldesigner/components/componentcore/layoutingridlayout.h
+++ b/src/plugins/qmldesigner/components/componentcore/layoutingridlayout.h
@@ -46,7 +46,7 @@ public:
const QList<ModelNode> &modelNodeList);
static void setSizeAsPreferredSize(const QList<ModelNode> &modelNodeList);
private:
- typedef std::function<bool(const ModelNode &node1, const ModelNode &node2)> LessThan;
+ using LessThan = std::function<bool (const ModelNode&, const ModelNode&)>;
LayoutInGridLayout(const SelectionContext &selectionContext);
void doIt();
diff --git a/src/plugins/qmldesigner/components/componentcore/modelnodecontextmenu.cpp b/src/plugins/qmldesigner/components/componentcore/modelnodecontextmenu.cpp
index de2733893a..415127cb52 100644
--- a/src/plugins/qmldesigner/components/componentcore/modelnodecontextmenu.cpp
+++ b/src/plugins/qmldesigner/components/componentcore/modelnodecontextmenu.cpp
@@ -91,7 +91,7 @@ void populateMenu(QSet<ActionInterface* > &actionInterfaces,
void ModelNodeContextMenu::execute(const QPoint &position, bool selectionMenuBool)
{
- QMenu* mainMenu = new QMenu();
+ auto mainMenu = new QMenu();
m_selectionContext.setShowSelectionTools(selectionMenuBool);
m_selectionContext.setScenePosition(m_scenePos);
diff --git a/src/plugins/qmldesigner/components/componentcore/modelnodecontextmenu_helper.h b/src/plugins/qmldesigner/components/componentcore/modelnodecontextmenu_helper.h
index 79f344d9b5..6d9f904149 100644
--- a/src/plugins/qmldesigner/components/componentcore/modelnodecontextmenu_helper.h
+++ b/src/plugins/qmldesigner/components/componentcore/modelnodecontextmenu_helper.h
@@ -41,8 +41,8 @@
namespace QmlDesigner {
-typedef std::function<bool (const SelectionContext &context)> SelectionContextPredicate;
-typedef std::function<void (const SelectionContext &context)> SelectionContextOperation;
+using SelectionContextPredicate = std::function<bool (const SelectionContext&)>;
+using SelectionContextOperation = std::function<void (const SelectionContext&)>;
namespace SelectionContextFunctors {
diff --git a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp
index bc43ca6515..f5b701e44d 100644
--- a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp
+++ b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp
@@ -379,7 +379,7 @@ void resetZ(const SelectionContext &selectionState)
}
}
-static inline void backupPropertyAndRemove(ModelNode node, const PropertyName &propertyName)
+static inline void backupPropertyAndRemove(const ModelNode &node, const PropertyName &propertyName)
{
if (node.hasVariantProperty(propertyName)) {
node.setAuxiliaryData(auxDataString + propertyName, node.variantProperty(propertyName).value());
@@ -444,7 +444,7 @@ void anchorsReset(const SelectionContext &selectionState)
}
}
-typedef std::function<bool(const ModelNode &node1, const ModelNode &node2)> LessThan;
+using LessThan = std::function<bool (const ModelNode &, const ModelNode&)>;
bool compareByX(const ModelNode &node1, const ModelNode &node2)
{
@@ -480,7 +480,7 @@ bool compareByGrid(const ModelNode &node1, const ModelNode &node2)
static void layoutHelperFunction(const SelectionContext &selectionContext,
- TypeName layoutType,
+ const TypeName &layoutType,
LessThan lessThan)
{
if (!selectionContext.view()
@@ -578,7 +578,7 @@ static PropertyNameList sortedPropertyNameList(const PropertyNameList &nameList)
return sortedPropertyNameList;
}
-static QString toUpper(const QString signal)
+static QString toUpper(const QString &signal)
{
QString ret = signal;
ret[0] = signal.at(0).toUpper();
@@ -588,9 +588,9 @@ static QString toUpper(const QString signal)
static void addSignal(const QString &typeName, const QString &itemId, const QString &signalName, bool isRootModelNode)
{
QScopedPointer<Model> model(Model::create("Item", 2, 0));
- RewriterView rewriterView(RewriterView::Amend, 0);
+ RewriterView rewriterView(RewriterView::Amend, nullptr);
- TextEditor::TextEditorWidget *textEdit = qobject_cast<TextEditor::TextEditorWidget*>
+ auto textEdit = qobject_cast<TextEditor::TextEditorWidget*>
(Core::EditorManager::currentEditor()->widget());
BaseTextEditModifier modifier(textEdit);
@@ -699,7 +699,7 @@ void addSignalHandlerOrGotoImplementation(const SelectionContext &selectionState
Core::EditorManager::openEditorAt(usages.constFirst().path, usages.constFirst().line, usages.constFirst().col);
if (!signalNames.isEmpty()) {
- AddSignalHandlerDialog *dialog = new AddSignalHandlerDialog(Core::ICore::dialogParent());
+ auto dialog = new AddSignalHandlerDialog(Core::ICore::dialogParent());
dialog->setSignals(signalNames);
AddSignalHandlerDialog::connect(dialog, &AddSignalHandlerDialog::signalSelected, [=] {
diff --git a/src/plugins/qmldesigner/components/componentcore/theme.cpp b/src/plugins/qmldesigner/components/componentcore/theme.cpp
index 586419910e..d7eba033ca 100644
--- a/src/plugins/qmldesigner/components/componentcore/theme.cpp
+++ b/src/plugins/qmldesigner/components/componentcore/theme.cpp
@@ -53,7 +53,7 @@ QColor Theme::evaluateColorAtThemeInstance(const QString &themeColorName)
}
qWarning() << Q_FUNC_INFO << "error while evaluating" << themeColorName;
- return QColor();
+ return {};
}
Theme *Theme::instance()
diff --git a/src/plugins/qmldesigner/components/componentcore/zoomaction.cpp b/src/plugins/qmldesigner/components/componentcore/zoomaction.cpp
index b0aae5d911..e18a472241 100644
--- a/src/plugins/qmldesigner/components/componentcore/zoomaction.cpp
+++ b/src/plugins/qmldesigner/components/componentcore/zoomaction.cpp
@@ -71,7 +71,7 @@ void ZoomAction::setZoomLevel(double zoomLevel)
QWidget *ZoomAction::createWidget(QWidget *parent)
{
- QComboBox *comboBox = new QComboBox(parent);
+ auto comboBox = new QComboBox(parent);
if (m_comboBoxModel.isNull()) {
m_comboBoxModel = comboBox->model();
diff --git a/src/plugins/qmldesigner/components/debugview/debugview.cpp b/src/plugins/qmldesigner/components/debugview/debugview.cpp
index 59afd1172f..60f4fc6283 100644
--- a/src/plugins/qmldesigner/components/debugview/debugview.cpp
+++ b/src/plugins/qmldesigner/components/debugview/debugview.cpp
@@ -298,7 +298,7 @@ void DebugView::rewriterEndTransaction()
WidgetInfo DebugView::widgetInfo()
{
- return createWidgetInfo(m_debugViewWidget.data(), 0, QStringLiteral("DebugView"), WidgetInfo::LeftPane, 0, tr("Debug View"));
+ return createWidgetInfo(m_debugViewWidget.data(), nullptr, QStringLiteral("DebugView"), WidgetInfo::LeftPane, 0, tr("Debug View"));
}
bool DebugView::hasWidget() const
@@ -316,7 +316,7 @@ void DebugView::instancePropertyChanged(const QList<QPair<ModelNode, PropertyNam
QString string;
message.setString(&string);
- typedef QPair<ModelNode, PropertyName> Pair;
+ using Pair = QPair<ModelNode, PropertyName>;
foreach (const Pair &pair, propertyList) {
message << pair.first;
diff --git a/src/plugins/qmldesigner/components/formeditor/abstractcustomtool.cpp b/src/plugins/qmldesigner/components/formeditor/abstractcustomtool.cpp
index 05741879d8..61f15a88f5 100644
--- a/src/plugins/qmldesigner/components/formeditor/abstractcustomtool.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/abstractcustomtool.cpp
@@ -30,7 +30,7 @@
namespace QmlDesigner {
AbstractCustomTool::AbstractCustomTool()
- : AbstractFormEditorTool(0)
+ : AbstractFormEditorTool(nullptr)
{
}
diff --git a/src/plugins/qmldesigner/components/formeditor/abstractformeditortool.cpp b/src/plugins/qmldesigner/components/formeditor/abstractformeditortool.cpp
index e4f76d5858..a76406dd31 100644
--- a/src/plugins/qmldesigner/components/formeditor/abstractformeditortool.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/abstractformeditortool.cpp
@@ -42,11 +42,7 @@ AbstractFormEditorTool::AbstractFormEditorTool(FormEditorView *editorView) : m_v
{
}
-
-AbstractFormEditorTool::~AbstractFormEditorTool()
-{
-
-}
+AbstractFormEditorTool::~AbstractFormEditorTool() = default;
FormEditorView* AbstractFormEditorTool::view() const
{
@@ -79,7 +75,7 @@ QList<FormEditorItem *> AbstractFormEditorTool::toFormEditorItemList(const QList
QList<FormEditorItem *> formEditorItemList;
foreach (QGraphicsItem *graphicsItem, itemList) {
- FormEditorItem *formEditorItem = qgraphicsitem_cast<FormEditorItem*>(graphicsItem);
+ auto formEditorItem = qgraphicsitem_cast<FormEditorItem*>(graphicsItem);
if (formEditorItem)
formEditorItemList.append(formEditorItem);
}
@@ -90,13 +86,13 @@ QList<FormEditorItem *> AbstractFormEditorTool::toFormEditorItemList(const QList
bool AbstractFormEditorTool::topItemIsMovable(const QList<QGraphicsItem*> & itemList)
{
QGraphicsItem *firstSelectableItem = topMovableGraphicsItem(itemList);
- if (firstSelectableItem == 0)
+ if (firstSelectableItem == nullptr)
return false;
FormEditorItem *formEditorItem = FormEditorItem::fromQGraphicsItem(firstSelectableItem);
QList<ModelNode> selectedNodes = view()->selectedModelNodes();
- if (formEditorItem != 0
+ if (formEditorItem != nullptr
&& selectedNodes.contains(formEditorItem->qmlItemNode()))
return true;
@@ -170,7 +166,7 @@ QGraphicsItem *AbstractFormEditorTool::topMovableGraphicsItem(const QList<QGraph
return item;
}
- return 0;
+ return nullptr;
}
FormEditorItem *AbstractFormEditorTool::topMovableFormEditorItem(const QList<QGraphicsItem*> &itemList, bool selectOnlyContentItems)
@@ -186,12 +182,12 @@ FormEditorItem *AbstractFormEditorTool::topMovableFormEditorItem(const QList<QGr
return formEditorItem;
}
- return 0;
+ return nullptr;
}
FormEditorItem* AbstractFormEditorTool::nearestFormEditorItem(const QPointF &point, const QList<QGraphicsItem*> & itemList)
{
- FormEditorItem* nearestItem = 0;
+ FormEditorItem* nearestItem = nullptr;
foreach (QGraphicsItem *item, itemList) {
FormEditorItem *formEditorItem = FormEditorItem::fromQGraphicsItem(item);
@@ -345,7 +341,7 @@ FormEditorItem *AbstractFormEditorTool::containerFormEditorItem(const QList<QGra
return formEditorItem;
}
- return 0;
+ return nullptr;
}
void AbstractFormEditorTool::clear()
diff --git a/src/plugins/qmldesigner/components/formeditor/anchorindicator.cpp b/src/plugins/qmldesigner/components/formeditor/anchorindicator.cpp
index 6cd4be56f8..81bd86e1f6 100644
--- a/src/plugins/qmldesigner/components/formeditor/anchorindicator.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/anchorindicator.cpp
@@ -37,9 +37,7 @@ AnchorIndicator::AnchorIndicator(LayerItem *layerItem)
{
}
-AnchorIndicator::AnchorIndicator()
-{
-}
+AnchorIndicator::AnchorIndicator() = default;
AnchorIndicator::~AnchorIndicator()
{
diff --git a/src/plugins/qmldesigner/components/formeditor/backgroundaction.cpp b/src/plugins/qmldesigner/components/formeditor/backgroundaction.cpp
index f763aa9b5a..356fbf4f32 100644
--- a/src/plugins/qmldesigner/components/formeditor/backgroundaction.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/backgroundaction.cpp
@@ -55,7 +55,7 @@ QIcon iconForColor(const QColor &color) {
QWidget *BackgroundAction::createWidget(QWidget *parent)
{
- QComboBox *comboBox = new QComboBox(parent);
+ auto comboBox = new QComboBox(parent);
comboBox->setFixedWidth(42);
for (int i = 0; i < colors().count(); ++i) {
diff --git a/src/plugins/qmldesigner/components/formeditor/bindingindicator.cpp b/src/plugins/qmldesigner/components/formeditor/bindingindicator.cpp
index 766458ec59..709f197d5b 100644
--- a/src/plugins/qmldesigner/components/formeditor/bindingindicator.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/bindingindicator.cpp
@@ -36,9 +36,7 @@ BindingIndicator::BindingIndicator(LayerItem *layerItem)
{
}
-BindingIndicator::BindingIndicator()
-{
-}
+BindingIndicator::BindingIndicator() = default;
BindingIndicator::~BindingIndicator()
{
diff --git a/src/plugins/qmldesigner/components/formeditor/bindingindicatorgraphicsitem.cpp b/src/plugins/qmldesigner/components/formeditor/bindingindicatorgraphicsitem.cpp
index c6b4ca6fd0..8a863d1931 100644
--- a/src/plugins/qmldesigner/components/formeditor/bindingindicatorgraphicsitem.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/bindingindicatorgraphicsitem.cpp
@@ -46,10 +46,10 @@ void BindingIndicatorGraphicsItem::paint(QPainter *painter, const QStyleOptionGr
QRectF BindingIndicatorGraphicsItem::boundingRect() const
{
- return QRectF(m_bindingLine.x1(),
+ return {m_bindingLine.x1(),
m_bindingLine.y1(),
m_bindingLine.x2() - m_bindingLine.x1() + 3,
- m_bindingLine.y2() - m_bindingLine.y1() + 3);
+ m_bindingLine.y2() - m_bindingLine.y1() + 3};
}
void BindingIndicatorGraphicsItem::updateBindingIndicator(const QLineF &bindingLine)
diff --git a/src/plugins/qmldesigner/components/formeditor/contentnoteditableindicator.cpp b/src/plugins/qmldesigner/components/formeditor/contentnoteditableindicator.cpp
index ef24dea8a3..26c1390217 100644
--- a/src/plugins/qmldesigner/components/formeditor/contentnoteditableindicator.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/contentnoteditableindicator.cpp
@@ -37,9 +37,7 @@ ContentNotEditableIndicator::ContentNotEditableIndicator(LayerItem *layerItem)
}
-ContentNotEditableIndicator::ContentNotEditableIndicator()
-{
-}
+ContentNotEditableIndicator::ContentNotEditableIndicator() = default;
ContentNotEditableIndicator::~ContentNotEditableIndicator()
{
@@ -92,7 +90,7 @@ void ContentNotEditableIndicator::addAddiationEntries(const QList<FormEditorItem
if (modelNode.metaInfo().isValid() && modelNode.metaInfo().isSubclassOf("QtQuick.Loader")) {
if (!m_entryList.contains(EntryPair(formEditorItem, 0))) {
- QGraphicsRectItem *indicatorShape = new QGraphicsRectItem(m_layerItem);
+ auto indicatorShape = new QGraphicsRectItem(m_layerItem);
QPen linePen;
linePen.setCosmetic(true);
linePen.setColor(QColor(0xa0, 0xa0, 0xa0));
diff --git a/src/plugins/qmldesigner/components/formeditor/contentnoteditableindicator.h b/src/plugins/qmldesigner/components/formeditor/contentnoteditableindicator.h
index beb57fae4d..c07f86b625 100644
--- a/src/plugins/qmldesigner/components/formeditor/contentnoteditableindicator.h
+++ b/src/plugins/qmldesigner/components/formeditor/contentnoteditableindicator.h
@@ -35,7 +35,7 @@ namespace QmlDesigner {
class ContentNotEditableIndicator
{
public:
- typedef QPair<FormEditorItem*, QGraphicsRectItem *> EntryPair;
+ using EntryPair = QPair<FormEditorItem*, QGraphicsRectItem *>;
ContentNotEditableIndicator(LayerItem *layerItem);
ContentNotEditableIndicator();
diff --git a/src/plugins/qmldesigner/components/formeditor/dragtool.cpp b/src/plugins/qmldesigner/components/formeditor/dragtool.cpp
index 64c10e06a3..2629250ee7 100644
--- a/src/plugins/qmldesigner/components/formeditor/dragtool.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/dragtool.cpp
@@ -52,10 +52,7 @@ DragTool::DragTool(FormEditorView *editorView)
{
}
-
-DragTool::~DragTool()
-{
-}
+DragTool::~DragTool() = default;
void DragTool::clear()
{
diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorgraphicsview.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorgraphicsview.cpp
index c51918047e..dfb5cdd956 100644
--- a/src/plugins/qmldesigner/components/formeditor/formeditorgraphicsview.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/formeditorgraphicsview.cpp
@@ -67,7 +67,7 @@ bool FormEditorGraphicsView::eventFilter(QObject *watched, QEvent *event)
stopPanning(event);
}
if (event->type() == QEvent::MouseMove) {
- QMouseEvent* mouseEvent = static_cast<QMouseEvent*>(event);
+ auto mouseEvent = static_cast<QMouseEvent*>(event);
if (!m_panningStartPosition.isNull()) {
horizontalScrollBar()->setValue(horizontalScrollBar()->value() -
(mouseEvent->x() - m_panningStartPosition.x()));
@@ -112,8 +112,8 @@ void FormEditorGraphicsView::mouseReleaseEvent(QMouseEvent *event)
bool isTextInputItem(QGraphicsItem* item)
{
if (item && item->isWidget()) {
- QGraphicsWidget *graphicsWidget = static_cast<QGraphicsWidget *>(item);
- QGraphicsProxyWidget * textInputProxyWidget = qobject_cast<QGraphicsProxyWidget *>(graphicsWidget);
+ auto graphicsWidget = static_cast<QGraphicsWidget *>(item);
+ auto textInputProxyWidget = qobject_cast<QGraphicsProxyWidget *>(graphicsWidget);
if (textInputProxyWidget && textInputProxyWidget->widget() && (
strcmp(textInputProxyWidget->widget()->metaObject()->className(), "QLineEdit") == 0 ||
strcmp(textInputProxyWidget->widget()->metaObject()->className(), "QTextEdit") == 0)) {
diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorscene.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorscene.cpp
index c8e7ed1fa2..045aec9007 100644
--- a/src/plugins/qmldesigner/components/formeditor/formeditorscene.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/formeditorscene.cpp
@@ -86,7 +86,7 @@ void FormEditorScene::resetScene()
FormEditorItem* FormEditorScene::itemForQmlItemNode(const QmlItemNode &qmlItemNode) const
{
- QTC_ASSERT(qmlItemNode.isValid(), return 0);
+ QTC_ASSERT(qmlItemNode.isValid(), return nullptr);
return m_qmlItemNodeItemHash.value(qmlItemNode);
}
@@ -140,7 +140,7 @@ FormEditorItem* FormEditorScene::calulateNewParent(FormEditorItem *formEditorIte
}
}
- return 0;
+ return nullptr;
}
void FormEditorScene::synchronizeTransformation(FormEditorItem *item)
@@ -182,7 +182,7 @@ void FormEditorScene::synchronizeOtherProperty(FormEditorItem *item, const QByte
FormEditorItem *FormEditorScene::addFormEditorItem(const QmlItemNode &qmlItemNode)
{
- FormEditorItem *formEditorItem = new FormEditorItem(qmlItemNode, this);
+ auto formEditorItem = new FormEditorItem(qmlItemNode, this);
Q_ASSERT(!m_qmlItemNodeItemHash.contains(qmlItemNode));
m_qmlItemNodeItemHash.insert(qmlItemNode, formEditorItem);
@@ -382,7 +382,7 @@ void FormEditorScene::hoverLeaveEvent(QGraphicsSceneHoverEvent * /*event*/)
void FormEditorScene::reparentItem(const QmlItemNode &node, const QmlItemNode &newParent)
{
if (FormEditorItem *item = itemForQmlItemNode(node)) {
- item->setParentItem(0);
+ item->setParentItem(nullptr);
if (newParent.isValid()) {
if (FormEditorItem *parentItem = itemForQmlItemNode(newParent))
item->setParentItem(parentItem);
@@ -407,7 +407,7 @@ void FormEditorScene::clearFormEditorItems()
const QList<FormEditorItem*> formEditorItems = Utils::filtered(formEditorItemsTransformed,
[](FormEditorItem *item) { return item; });
foreach (FormEditorItem *item, formEditorItems)
- item->setParentItem(0);
+ item->setParentItem(nullptr);
foreach (FormEditorItem *item, formEditorItems)
delete item;
diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp
index cd19255683..f964b80458 100644
--- a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp
@@ -50,6 +50,7 @@
#include <QPair>
#include <QString>
#include <QTimer>
+#include <memory>
namespace QmlDesigner {
@@ -148,14 +149,14 @@ void FormEditorView::createFormEditorWidget()
m_formEditorWidget = QPointer<FormEditorWidget>(new FormEditorWidget(this));
m_scene = QPointer<FormEditorScene>(new FormEditorScene(m_formEditorWidget.data(), this));
- m_moveTool.reset(new MoveTool(this));
- m_selectionTool.reset(new SelectionTool(this));
- m_resizeTool.reset(new ResizeTool(this));
- m_dragTool.reset(new DragTool(this));
+ m_moveTool = std::make_unique<MoveTool>(this);
+ m_selectionTool = std::make_unique<SelectionTool>(this);
+ m_resizeTool = std::make_unique<ResizeTool>(this);
+ m_dragTool = std::make_unique<DragTool>(this);
m_currentTool = m_selectionTool.get();
- Internal::FormEditorContext *formEditorContext = new Internal::FormEditorContext(m_formEditorWidget.data());
+ auto formEditorContext = new Internal::FormEditorContext(m_formEditorWidget.data());
Core::ICore::addContextObject(formEditorContext);
connect(formEditorWidget()->zoomAction(), &ZoomAction::zoomLevelChanged, [this]() {
@@ -168,7 +169,7 @@ void FormEditorView::createFormEditorWidget()
void FormEditorView::temporaryBlockView()
{
formEditorWidget()->graphicsView()->setUpdatesEnabled(false);
- static QTimer *timer = new QTimer(qApp);
+ static auto timer = new QTimer(qApp);
timer->setSingleShot(true);
timer->start(1000);
@@ -277,7 +278,7 @@ WidgetInfo FormEditorView::widgetInfo()
if (!m_formEditorWidget)
createFormEditorWidget();
- return createWidgetInfo(m_formEditorWidget.data(), 0, "FormEditor", WidgetInfo::CentralPane, 0, tr("Form Editor"), DesignerWidgetFlags::IgnoreErrors);
+ return createWidgetInfo(m_formEditorWidget.data(), nullptr, "FormEditor", WidgetInfo::CentralPane, 0, tr("Form Editor"), DesignerWidgetFlags::IgnoreErrors);
}
FormEditorWidget *FormEditorView::formEditorWidget()
@@ -395,7 +396,7 @@ void FormEditorView::changeToCustomTool()
{
if (hasSelectedModelNodes()) {
int handlingRank = 0;
- AbstractCustomTool *selectedCustomTool = 0;
+ AbstractCustomTool *selectedCustomTool = nullptr;
const ModelNode selectedModelNode = selectedModelNodes().constFirst();
diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorwidget.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorwidget.cpp
index 059261c3a2..954f8fee66 100644
--- a/src/plugins/qmldesigner/components/formeditor/formeditorwidget.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/formeditorwidget.cpp
@@ -55,13 +55,12 @@
namespace QmlDesigner {
-FormEditorWidget::FormEditorWidget(FormEditorView *view)
- : QWidget(),
+FormEditorWidget::FormEditorWidget(FormEditorView *view) :
m_formEditorView(view)
{
setStyleSheet(Theme::replaceCssColors(QString::fromUtf8(Utils::FileReader::fetchQrc(QLatin1String(":/qmldesigner/formeditorstylesheet.css")))));
- QVBoxLayout *fillLayout = new QVBoxLayout(this);
+ auto fillLayout = new QVBoxLayout(this);
fillLayout->setMargin(0);
fillLayout->setSpacing(0);
setLayout(fillLayout);
@@ -70,7 +69,7 @@ FormEditorWidget::FormEditorWidget(FormEditorView *view)
m_toolActionGroup = new QActionGroup(this);
- QActionGroup *layoutActionGroup = new QActionGroup(this);
+ auto layoutActionGroup = new QActionGroup(this);
layoutActionGroup->setExclusive(true);
m_noSnappingAction = layoutActionGroup->addAction(tr("No snapping (T)."));
@@ -98,7 +97,7 @@ FormEditorWidget::FormEditorWidget(FormEditorView *view)
addActions(layoutActionGroup->actions());
upperActions.append(layoutActionGroup->actions());
- QAction *separatorAction = new QAction(this);
+ auto separatorAction = new QAction(this);
separatorAction->setSeparator(true);
addAction(separatorAction);
upperActions.append(separatorAction);
diff --git a/src/plugins/qmldesigner/components/formeditor/layeritem.cpp b/src/plugins/qmldesigner/components/formeditor/layeritem.cpp
index 77b6b37a5a..993e6c382c 100644
--- a/src/plugins/qmldesigner/components/formeditor/layeritem.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/layeritem.cpp
@@ -31,7 +31,6 @@
namespace QmlDesigner {
LayerItem::LayerItem(FormEditorScene* scene)
- : QGraphicsObject()
{
scene->addItem(this);
setZValue(1);
@@ -39,9 +38,7 @@ LayerItem::LayerItem(FormEditorScene* scene)
setAcceptedMouseButtons(Qt::NoButton);
}
-LayerItem::~LayerItem()
-{
-}
+LayerItem::~LayerItem() = default;
void LayerItem::paint(QPainter * /*painter*/, const QStyleOptionGraphicsItem * /*option*/, QWidget * /*widget*/)
{
diff --git a/src/plugins/qmldesigner/components/formeditor/lineeditaction.cpp b/src/plugins/qmldesigner/components/formeditor/lineeditaction.cpp
index 4e07f3519e..5f9e7f571b 100644
--- a/src/plugins/qmldesigner/components/formeditor/lineeditaction.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/lineeditaction.cpp
@@ -48,7 +48,7 @@ void LineEditAction::clearLineEditText()
QWidget *LineEditAction::createWidget(QWidget *parent)
{
- QLineEdit *lineEdit = new QLineEdit(parent);
+ auto lineEdit = new QLineEdit(parent);
lineEdit->setPlaceholderText(m_placeHolderText);
lineEdit->setFixedWidth(100);
diff --git a/src/plugins/qmldesigner/components/formeditor/movetool.cpp b/src/plugins/qmldesigner/components/formeditor/movetool.cpp
index 4b6a21694b..75bce105a4 100644
--- a/src/plugins/qmldesigner/components/formeditor/movetool.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/movetool.cpp
@@ -51,10 +51,7 @@ MoveTool::MoveTool(FormEditorView *editorView)
m_selectionIndicator.setCursor(Qt::SizeAllCursor);
}
-MoveTool::~MoveTool()
-{
-
-}
+MoveTool::~MoveTool() = default;
void MoveTool::clear()
{
@@ -316,7 +313,7 @@ bool MoveTool::isAncestorOfAllItems(FormEditorItem* maybeAncestorItem,
FormEditorItem* MoveTool::ancestorIfOtherItemsAreChild(const QList<FormEditorItem*> &itemList)
{
if (itemList.isEmpty())
- return 0;
+ return nullptr;
foreach (FormEditorItem* item, itemList)
@@ -325,7 +322,7 @@ FormEditorItem* MoveTool::ancestorIfOtherItemsAreChild(const QList<FormEditorIte
return item;
}
- return 0;
+ return nullptr;
}
void MoveTool::updateMoveManipulator()
@@ -369,13 +366,13 @@ QList<FormEditorItem*> MoveTool::movingItems(const QList<FormEditorItem*> &selec
FormEditorItem* ancestorItem = ancestorIfOtherItemsAreChild(filteredItemList);
- if (ancestorItem != 0 && ancestorItem->qmlItemNode().isRootNode()) {
+ if (ancestorItem != nullptr && ancestorItem->qmlItemNode().isRootNode()) {
// view()->changeToSelectionTool();
return QList<FormEditorItem*>();
}
- if (ancestorItem != 0 && ancestorItem->parentItem() != 0) {
+ if (ancestorItem != nullptr && ancestorItem->parentItem() != nullptr) {
QList<FormEditorItem*> ancestorItemList;
ancestorItemList.append(ancestorItem);
return ancestorItemList;
diff --git a/src/plugins/qmldesigner/components/formeditor/numberseriesaction.cpp b/src/plugins/qmldesigner/components/formeditor/numberseriesaction.cpp
index ae651f99f1..0ce0a995ba 100644
--- a/src/plugins/qmldesigner/components/formeditor/numberseriesaction.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/numberseriesaction.cpp
@@ -42,7 +42,7 @@ void NumberSeriesAction::addEntry(const QString &text, const QVariant &value)
if (m_comboBoxModel.isNull())
m_comboBoxModel = new QStandardItemModel(this);
- QStandardItem *newItem = new QStandardItem(text);
+ auto newItem = new QStandardItem(text);
newItem->setData(value);
m_comboBoxModel->appendRow(newItem);
}
@@ -54,7 +54,7 @@ QVariant NumberSeriesAction::currentValue() const
QWidget *NumberSeriesAction::createWidget(QWidget *parent)
{
- QComboBox *comboBox = new QComboBox(parent);
+ auto comboBox = new QComboBox(parent);
comboBox->setModel(m_comboBoxModel.data());
diff --git a/src/plugins/qmldesigner/components/formeditor/resizecontroller.cpp b/src/plugins/qmldesigner/components/formeditor/resizecontroller.cpp
index 63930defed..e7f9d0b6c4 100644
--- a/src/plugins/qmldesigner/components/formeditor/resizecontroller.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/resizecontroller.cpp
@@ -58,30 +58,19 @@ public:
ResizeControllerData::ResizeControllerData(LayerItem *layerItem, FormEditorItem *formEditorItem)
: layerItem(layerItem),
formEditorItem(formEditorItem),
- topLeftItem(0),
- topRightItem(0),
- bottomLeftItem(0),
- bottomRightItem(0),
- topItem(0),
- leftItem(0),
- rightItem(0),
- bottomItem(0)
+ topLeftItem(nullptr),
+ topRightItem(nullptr),
+ bottomLeftItem(nullptr),
+ bottomRightItem(nullptr),
+ topItem(nullptr),
+ leftItem(nullptr),
+ rightItem(nullptr),
+ bottomItem(nullptr)
{
}
-ResizeControllerData::ResizeControllerData(const ResizeControllerData &other)
- : layerItem(other.layerItem),
- formEditorItem(other.formEditorItem),
- topLeftItem(other.topLeftItem),
- topRightItem(other.topRightItem),
- bottomLeftItem(other.bottomLeftItem),
- bottomRightItem(other.bottomRightItem),
- topItem(other.topItem),
- leftItem(other.leftItem),
- rightItem(other.rightItem),
- bottomItem(other.bottomItem)
-{}
+ResizeControllerData::ResizeControllerData(const ResizeControllerData &other) = default;
ResizeControllerData::~ResizeControllerData()
{
@@ -100,7 +89,7 @@ ResizeControllerData::~ResizeControllerData()
ResizeController::ResizeController()
- : m_data(new ResizeControllerData(0, 0))
+ : m_data(new ResizeControllerData(nullptr, nullptr))
{
}
@@ -149,20 +138,14 @@ ResizeController::ResizeController(LayerItem *layerItem, FormEditorItem *formEdi
updatePosition();
}
-ResizeController::ResizeController(const ResizeController &other)
- : m_data(other.m_data)
-{
-
-}
+ResizeController::ResizeController(const ResizeController &other) = default;
ResizeController::ResizeController(const WeakResizeController &resizeController)
: m_data(resizeController.m_data.toStrongRef())
{
}
-ResizeController::~ResizeController()
-{
-}
+ResizeController::~ResizeController() = default;
ResizeController &ResizeController::operator =(const ResizeController &other)
{
@@ -203,22 +186,22 @@ void ResizeController::hide()
static QPointF topCenter(const QRectF &rect)
{
- return QPointF(rect.center().x(), rect.top());
+ return {rect.center().x(), rect.top()};
}
static QPointF leftCenter(const QRectF &rect)
{
- return QPointF(rect.left(), rect.center().y());
+ return {rect.left(), rect.center().y()};
}
static QPointF rightCenter(const QRectF &rect)
{
- return QPointF(rect.right(), rect.center().y());
+ return {rect.right(), rect.center().y()};
}
static QPointF bottomCenter(const QRectF &rect)
{
- return QPointF(rect.center().x(), rect.bottom());
+ return {rect.center().x(), rect.bottom()};
}
@@ -310,24 +293,16 @@ WeakResizeController ResizeController::toWeakResizeController() const
return WeakResizeController(*this);
}
-WeakResizeController::WeakResizeController()
-{
-
-}
+WeakResizeController::WeakResizeController() = default;
-WeakResizeController::WeakResizeController(const WeakResizeController &resizeController)
- : m_data(resizeController.m_data)
-{
-}
+WeakResizeController::WeakResizeController(const WeakResizeController &resizeController) = default;
WeakResizeController::WeakResizeController(const ResizeController &resizeController)
: m_data(resizeController.m_data.toWeakRef())
{
}
-WeakResizeController::~WeakResizeController()
-{
-}
+WeakResizeController::~WeakResizeController() = default;
WeakResizeController &WeakResizeController::operator =(const WeakResizeController &other)
{
diff --git a/src/plugins/qmldesigner/components/formeditor/resizehandleitem.cpp b/src/plugins/qmldesigner/components/formeditor/resizehandleitem.cpp
index d40e4067f9..a44bbadcda 100644
--- a/src/plugins/qmldesigner/components/formeditor/resizehandleitem.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/resizehandleitem.cpp
@@ -38,9 +38,7 @@ ResizeHandleItem::ResizeHandleItem(QGraphicsItem *parent, const ResizeController
setAcceptedMouseButtons(Qt::NoButton);
}
-ResizeHandleItem::~ResizeHandleItem()
-{
-}
+ResizeHandleItem::~ResizeHandleItem() = default;
void ResizeHandleItem::setHandlePosition(const QPointF & globalPosition, const QPointF & itemSpacePosition)
{
@@ -50,7 +48,7 @@ void ResizeHandleItem::setHandlePosition(const QPointF & globalPosition, const Q
QRectF ResizeHandleItem::boundingRect() const
{
- return QRectF(- 5., - 5., 9., 9.);
+ return {- 5., - 5., 9., 9.};
}
void ResizeHandleItem::paint(QPainter *painter, const QStyleOptionGraphicsItem * /* option */, QWidget * /* widget */)
diff --git a/src/plugins/qmldesigner/components/formeditor/resizemanipulator.cpp b/src/plugins/qmldesigner/components/formeditor/resizemanipulator.cpp
index d5f197997f..2c21e1952c 100644
--- a/src/plugins/qmldesigner/components/formeditor/resizemanipulator.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/resizemanipulator.cpp
@@ -42,7 +42,7 @@ ResizeManipulator::ResizeManipulator(LayerItem *layerItem, FormEditorView *view)
m_beginRightMargin(0.0),
m_beginBottomMargin(0.0),
m_layerItem(layerItem),
- m_resizeHandle(0),
+ m_resizeHandle(nullptr),
m_isActive(false)
{
}
@@ -65,7 +65,7 @@ void ResizeManipulator::setHandle(ResizeHandleItem *resizeHandle)
void ResizeManipulator::removeHandle()
{
m_resizeController = ResizeController();
- m_resizeHandle = 0;
+ m_resizeHandle = nullptr;
}
void ResizeManipulator::begin(const QPointF &/*beginPoint*/)
diff --git a/src/plugins/qmldesigner/components/formeditor/resizetool.cpp b/src/plugins/qmldesigner/components/formeditor/resizetool.cpp
index 96b960867c..8b4e5c552a 100644
--- a/src/plugins/qmldesigner/components/formeditor/resizetool.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/resizetool.cpp
@@ -46,10 +46,7 @@ ResizeTool::ResizeTool(FormEditorView *editorView)
{
}
-
-ResizeTool::~ResizeTool()
-{
-}
+ResizeTool::~ResizeTool() = default;
void ResizeTool::mousePressEvent(const QList<QGraphicsItem*> &itemList,
QGraphicsSceneMouseEvent *event)
diff --git a/src/plugins/qmldesigner/components/formeditor/rubberbandselectionmanipulator.cpp b/src/plugins/qmldesigner/components/formeditor/rubberbandselectionmanipulator.cpp
index b2969ed810..05d13e29e7 100644
--- a/src/plugins/qmldesigner/components/formeditor/rubberbandselectionmanipulator.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/rubberbandselectionmanipulator.cpp
@@ -32,7 +32,7 @@ namespace QmlDesigner {
RubberBandSelectionManipulator::RubberBandSelectionManipulator(LayerItem *layerItem, FormEditorView *editorView)
: m_selectionRectangleElement(layerItem),
m_editorView(editorView),
- m_beginFormEditorItem(0),
+ m_beginFormEditorItem(nullptr),
m_isActive(false)
{
m_selectionRectangleElement.hide();
diff --git a/src/plugins/qmldesigner/components/formeditor/scalemanipulator.cpp b/src/plugins/qmldesigner/components/formeditor/scalemanipulator.cpp
index 7dd8077c92..4cfd9ca35b 100644
--- a/src/plugins/qmldesigner/components/formeditor/scalemanipulator.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/scalemanipulator.cpp
@@ -34,8 +34,6 @@ ScaleManipulator::ScaleManipulator(LayerItem *layerItem, FormEditorItem *formEdi
{
}
-ScaleManipulator::~ScaleManipulator()
-{
-}
+ScaleManipulator::~ScaleManipulator() = default;
}
diff --git a/src/plugins/qmldesigner/components/formeditor/selectionindicator.cpp b/src/plugins/qmldesigner/components/formeditor/selectionindicator.cpp
index d76e51977c..aea970df1b 100644
--- a/src/plugins/qmldesigner/components/formeditor/selectionindicator.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/selectionindicator.cpp
@@ -30,6 +30,7 @@
#include <QPen>
#include <QGraphicsScene>
#include <QGraphicsTextItem>
+#include <memory>
#include <abstractview.h>
@@ -98,7 +99,7 @@ void SelectionIndicator::setItems(const QList<FormEditorItem*> &itemList)
if (!item->qmlItemNode().isValid())
continue;
- QGraphicsPolygonItem *newSelectionIndicatorGraphicsItem = new QGraphicsPolygonItem(m_layerItem.data());
+ auto newSelectionIndicatorGraphicsItem = new QGraphicsPolygonItem(m_layerItem.data());
m_indicatorShapeHash.insert(item, newSelectionIndicatorGraphicsItem);
newSelectionIndicatorGraphicsItem->setPolygon(boundingRectInLayerItemSpaceForItem(item, m_layerItem.data()));
newSelectionIndicatorGraphicsItem->setFlag(QGraphicsItem::ItemIsSelectable, false);
@@ -113,7 +114,7 @@ void SelectionIndicator::setItems(const QList<FormEditorItem*> &itemList)
if (checkSingleSelection(itemList)) {
FormEditorItem *selectedItem = itemList.constFirst();
- m_labelItem.reset(new QGraphicsPolygonItem(m_layerItem.data()));
+ m_labelItem = std::make_unique<QGraphicsPolygonItem>(m_layerItem.data());
QGraphicsWidget *toolbar = DesignerActionManager::instance().createFormEditorToolBar(m_labelItem.get());
toolbar->setPos(1, -1);
diff --git a/src/plugins/qmldesigner/components/formeditor/selectionrectangle.cpp b/src/plugins/qmldesigner/components/formeditor/selectionrectangle.cpp
index 9aa2aaea3f..e74f43c4f7 100644
--- a/src/plugins/qmldesigner/components/formeditor/selectionrectangle.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/selectionrectangle.cpp
@@ -64,7 +64,7 @@ void SelectionRectangle::show()
void SelectionRectangle::hide()
{
- m_controlShape->setParentItem(0);
+ m_controlShape->setParentItem(nullptr);
m_controlShape->hide();
}
diff --git a/src/plugins/qmldesigner/components/formeditor/selectiontool.cpp b/src/plugins/qmldesigner/components/formeditor/selectiontool.cpp
index 52bcae4ff5..c9dd841157 100644
--- a/src/plugins/qmldesigner/components/formeditor/selectiontool.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/selectiontool.cpp
@@ -54,10 +54,7 @@ SelectionTool::SelectionTool(FormEditorView *editorView)
m_selectionIndicator.setCursor(Qt::ArrowCursor);
}
-
-SelectionTool::~SelectionTool()
-{
-}
+SelectionTool::~SelectionTool() = default;
void SelectionTool::mousePressEvent(const QList<QGraphicsItem*> &itemList,
QGraphicsSceneMouseEvent *event)
diff --git a/src/plugins/qmldesigner/components/formeditor/snapper.cpp b/src/plugins/qmldesigner/components/formeditor/snapper.cpp
index 4cf2209774..eec5c3ab1e 100644
--- a/src/plugins/qmldesigner/components/formeditor/snapper.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/snapper.cpp
@@ -38,8 +38,8 @@
namespace QmlDesigner {
Snapper::Snapper()
- : m_containerFormEditorItem(0),
- m_transformtionSpaceFormEditorItem(0),
+ : m_containerFormEditorItem(nullptr),
+ m_transformtionSpaceFormEditorItem(nullptr),
m_snappingDistance(5.0)
{
}
@@ -289,7 +289,7 @@ QLineF Snapper::createSnapLine(Qt::Orientation orientation,
if (orientation == Qt::Horizontal) {
double lowerX(qMin(lowerLimit, double(itemRect.left())));
double upperX(qMax(upperLimit, double(itemRect.right())));
- return QLineF(lowerX, snapLine, upperX, snapLine);
+ return {lowerX, snapLine, upperX, snapLine};
} else {
double lowerY(qMin(lowerLimit, double(itemRect.top())));
double upperY(qMax(upperLimit, double(itemRect.bottom())));
@@ -321,7 +321,7 @@ QList<QLineF> Snapper::findSnappingLines(const SnapLineMap &snappingLineMap,
lowerLimit,
upperLimit,
snappingLineIterator.value().first);
- if (boundingRects != 0)
+ if (boundingRects != nullptr)
boundingRects->append(snappingLineIterator.value().first);
}
}
@@ -363,7 +363,7 @@ QList<QLineF> Snapper::findSnappingOffsetLines(const SnapLineMap &snappingOffset
lowerLimit,
upperLimit,
formEditorItemRect);
- if (boundingRects != 0)
+ if (boundingRects != nullptr)
boundingRects->append(snappingOffsetIterator.value().first);
}
}
@@ -461,7 +461,7 @@ static QLineF mergedHorizontalLine(const QList<QLineF> &lineList)
}
double y(lineList.constFirst().y1());
- return QLineF(minimumX, y, maximumX, y);
+ return {minimumX, y, maximumX, y};
}
static QLineF mergedVerticalLine(const QList<QLineF> &lineList)
@@ -479,7 +479,7 @@ static QLineF mergedVerticalLine(const QList<QLineF> &lineList)
}
double x(lineList.constFirst().x1());
- return QLineF(x, minimumY, x, maximumY);
+ return {x, minimumY, x, maximumY};
}
static QList<QLineF> mergedHorizontalLines(const QList<QLineF> &lineList)
@@ -715,7 +715,7 @@ QList<QGraphicsItem*> Snapper::generateSnappingLines(const QList<QRectF> &boundi
foreach (const QLineF &line, lineList) {
QLineF lineInTransformationSpace = transform.map(line);
- QGraphicsLineItem * lineItem = new QGraphicsLineItem(lineInTransformationSpace, layerItem);
+ auto lineItem = new QGraphicsLineItem(lineInTransformationSpace, layerItem);
lineItem->setZValue(40);
QPen linePen;
linePen.setCosmetic(true);
diff --git a/src/plugins/qmldesigner/components/formeditor/snappinglinecreator.h b/src/plugins/qmldesigner/components/formeditor/snappinglinecreator.h
index fb7d43e26c..aba0a52444 100644
--- a/src/plugins/qmldesigner/components/formeditor/snappinglinecreator.h
+++ b/src/plugins/qmldesigner/components/formeditor/snappinglinecreator.h
@@ -31,8 +31,8 @@ namespace QmlDesigner {
class FormEditorItem;
-typedef QMultiMap<double, QPair<QRectF, FormEditorItem*> > SnapLineMap;
-typedef QMapIterator<double, QPair<QRectF, FormEditorItem*> > SnapLineMapIterator;
+using SnapLineMap = QMultiMap<double, QPair<QRectF, FormEditorItem*> >;
+using SnapLineMapIterator = QMapIterator<double, QPair<QRectF, FormEditorItem*> >;
class FormEditorItem;
diff --git a/src/plugins/qmldesigner/components/formeditor/toolbox.cpp b/src/plugins/qmldesigner/components/formeditor/toolbox.cpp
index 9b343ec7d7..3c64139748 100644
--- a/src/plugins/qmldesigner/components/formeditor/toolbox.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/toolbox.cpp
@@ -42,11 +42,11 @@ ToolBox::ToolBox(QWidget *parentWidget)
m_leftToolBar->setMovable(true);
m_leftToolBar->setOrientation(Qt::Horizontal);
- QHBoxLayout *horizontalLayout = new QHBoxLayout(this);
+ auto horizontalLayout = new QHBoxLayout(this);
horizontalLayout->setMargin(0);
horizontalLayout->setSpacing(0);
- QToolBar *stretchToolbar = new QToolBar(this);
+ auto stretchToolbar = new QToolBar(this);
m_leftToolBar->setProperty("panelwidget", true);
m_leftToolBar->setProperty("panelwidget_singlerow", false);
diff --git a/src/plugins/qmldesigner/components/importmanager/importlabel.cpp b/src/plugins/qmldesigner/components/importmanager/importlabel.cpp
index d0e61d3702..cd19246009 100644
--- a/src/plugins/qmldesigner/components/importmanager/importlabel.cpp
+++ b/src/plugins/qmldesigner/components/importmanager/importlabel.cpp
@@ -35,7 +35,7 @@ namespace QmlDesigner {
ImportLabel::ImportLabel(QWidget *parent) :
QWidget(parent)
{
- QHBoxLayout *layout = new QHBoxLayout(this);
+ auto layout = new QHBoxLayout(this);
layout->setContentsMargins(0, 0, 0, 0);
diff --git a/src/plugins/qmldesigner/components/importmanager/importmanagerview.cpp b/src/plugins/qmldesigner/components/importmanager/importmanagerview.cpp
index 94b1277a1c..6e1c6a5015 100644
--- a/src/plugins/qmldesigner/components/importmanager/importmanagerview.cpp
+++ b/src/plugins/qmldesigner/components/importmanager/importmanagerview.cpp
@@ -33,15 +33,12 @@ namespace QmlDesigner {
ImportManagerView::ImportManagerView(QObject *parent) :
AbstractView(parent),
- m_importsWidget(0)
+ m_importsWidget(nullptr)
{
}
-ImportManagerView::~ImportManagerView()
-{
-
-}
+ImportManagerView::~ImportManagerView() = default;
bool ImportManagerView::hasWidget() const
{
@@ -50,7 +47,7 @@ bool ImportManagerView::hasWidget() const
WidgetInfo ImportManagerView::widgetInfo()
{
- if (m_importsWidget == 0) {
+ if (m_importsWidget == nullptr) {
m_importsWidget = new ImportsWidget;
connect(m_importsWidget.data(), &ImportsWidget::removeImport, this, &ImportManagerView::removeImport);
connect(m_importsWidget.data(), &ImportsWidget::addImport, this, &ImportManagerView::addImport);
@@ -59,7 +56,7 @@ WidgetInfo ImportManagerView::widgetInfo()
m_importsWidget->setImports(model()->imports());
}
- return createWidgetInfo(m_importsWidget, 0, QLatin1String("ImportManager"), WidgetInfo::LeftPane, 1);
+ return createWidgetInfo(m_importsWidget, nullptr, QLatin1String("ImportManager"), WidgetInfo::LeftPane, 1);
}
void ImportManagerView::modelAttached(Model *model)
diff --git a/src/plugins/qmldesigner/components/importmanager/importswidget.cpp b/src/plugins/qmldesigner/components/importmanager/importswidget.cpp
index f9fe8540a1..0d2218a42b 100644
--- a/src/plugins/qmldesigner/components/importmanager/importswidget.cpp
+++ b/src/plugins/qmldesigner/components/importmanager/importswidget.cpp
@@ -124,7 +124,7 @@ void ImportsWidget::setImports(const QList<Import> &imports)
Utils::sort(sortedImports, importLess);
foreach (const Import &import, sortedImports) {
- ImportLabel *importLabel = new ImportLabel(this);
+ auto importLabel = new ImportLabel(this);
importLabel->setImport(import);
m_importLabels.append(importLabel);
connect(importLabel, &ImportLabel::removeImport, this, &ImportsWidget::removeImport);
@@ -138,7 +138,7 @@ void ImportsWidget::updateLayout()
{
delete layout();
- QVBoxLayout *layout = new QVBoxLayout(this);
+ auto layout = new QVBoxLayout(this);
layout->setSpacing(0);
layout->addWidget(m_addImportComboBox);
diff --git a/src/plugins/qmldesigner/components/integration/componentaction.cpp b/src/plugins/qmldesigner/components/integration/componentaction.cpp
index 59226d78d3..daedbe8d7d 100644
--- a/src/plugins/qmldesigner/components/integration/componentaction.cpp
+++ b/src/plugins/qmldesigner/components/integration/componentaction.cpp
@@ -48,7 +48,7 @@ void ComponentAction::setCurrentIndex(int index)
QWidget *ComponentAction::createWidget(QWidget *parent)
{
- QComboBox *comboBox = new QComboBox(parent);
+ auto comboBox = new QComboBox(parent);
comboBox->setMinimumWidth(120);
comboBox->setToolTip(tr("Edit sub components defined in this file."));
comboBox->setModel(m_componentView->standardItemModel());
diff --git a/src/plugins/qmldesigner/components/integration/componentview.cpp b/src/plugins/qmldesigner/components/integration/componentview.cpp
index e31b59d911..06aa47c7a5 100644
--- a/src/plugins/qmldesigner/components/integration/componentview.cpp
+++ b/src/plugins/qmldesigner/components/integration/componentview.cpp
@@ -203,7 +203,7 @@ void ComponentView::searchForComponentAndAddToList(const ModelNode &node)
if (!hasEntryForNode(node)) {
QString description = descriptionForNode(node);
- QStandardItem *item = new QStandardItem(description);
+ auto item = new QStandardItem(description);
item->setData(QVariant::fromValue(node.internalId()), ModelNodeRole);
item->setEditable(false);
removeSingleNodeFromList(node); //remove node if already present
diff --git a/src/plugins/qmldesigner/components/integration/designdocument.cpp b/src/plugins/qmldesigner/components/integration/designdocument.cpp
index d4fd3b0147..01ede20d09 100644
--- a/src/plugins/qmldesigner/components/integration/designdocument.cpp
+++ b/src/plugins/qmldesigner/components/integration/designdocument.cpp
@@ -77,13 +77,11 @@ DesignDocument::DesignDocument(QObject *parent) :
m_subComponentManager(new SubComponentManager(m_documentModel.data(), this)),
m_rewriterView (new RewriterView(RewriterView::Amend, m_documentModel.data())),
m_documentLoaded(false),
- m_currentKit(0)
+ m_currentKit(nullptr)
{
}
-DesignDocument::~DesignDocument()
-{
-}
+DesignDocument::~DesignDocument() = default;
Model *DesignDocument::currentModel() const
{
@@ -590,7 +588,7 @@ QPlainTextEdit *DesignDocument::plainTextEdit() const
if (editor())
return qobject_cast<QPlainTextEdit*>(editor()->widget());
- return 0;
+ return nullptr;
}
ModelNode DesignDocument::rootModelNode() const
@@ -622,7 +620,7 @@ static inline Kit *getActiveKit(DesignDocument *designDocument)
currentProject = ProjectExplorer::ProjectTree::currentProject();
if (!currentProject)
- return 0;
+ return nullptr;
QObject::connect(ProjectTree::instance(), &ProjectTree::currentProjectChanged,
@@ -641,10 +639,10 @@ static inline Kit *getActiveKit(DesignDocument *designDocument)
Target *target = currentProject->activeTarget();
if (!target)
- return 0;
+ return nullptr;
if (!target->kit() || !target->kit()->isValid())
- return 0;
+ return nullptr;
QObject::connect(target, &Target::kitChanged,
designDocument, &DesignDocument::updateActiveQtVersion, Qt::UniqueConnection);
diff --git a/src/plugins/qmldesigner/components/integration/designdocumentview.cpp b/src/plugins/qmldesigner/components/integration/designdocumentview.cpp
index ef4e900d0f..4b7c5772d8 100644
--- a/src/plugins/qmldesigner/components/integration/designdocumentview.cpp
+++ b/src/plugins/qmldesigner/components/integration/designdocumentview.cpp
@@ -49,9 +49,7 @@ DesignDocumentView::DesignDocumentView(QObject *parent)
{
}
-DesignDocumentView::~DesignDocumentView()
-{
-}
+DesignDocumentView::~DesignDocumentView() = default;
ModelNode DesignDocumentView::insertModel(const ModelNode &modelNode)
{
@@ -81,7 +79,7 @@ void DesignDocumentView::toClipboard() const
{
QClipboard *clipboard = QApplication::clipboard();
- QMimeData *data = new QMimeData;
+ auto data = new QMimeData;
data->setText(toText());
QStringList imports;
@@ -121,7 +119,7 @@ QString DesignDocumentView::toText() const
textEdit.setPlainText(imports + QStringLiteral("Item {\n}\n"));
NotIndentingTextEditModifier modifier(&textEdit);
- QScopedPointer<RewriterView> rewriterView(new RewriterView(RewriterView::Amend, 0));
+ QScopedPointer<RewriterView> rewriterView(new RewriterView(RewriterView::Amend, nullptr));
rewriterView->setCheckSemanticErrors(false);
rewriterView->setTextModifier(&modifier);
outputModel->setRewriterView(rewriterView.data());
@@ -137,7 +135,7 @@ QString DesignDocumentView::toText() const
//get the text of the root item without imports
}
-void DesignDocumentView::fromText(QString text)
+void DesignDocumentView::fromText(const QString &text)
{
QScopedPointer<Model> inputModel(Model::create("QtQuick.Rectangle", 1, 0, model()));
inputModel->setFileUrl(model()->fileUrl());
@@ -149,7 +147,7 @@ void DesignDocumentView::fromText(QString text)
textEdit.setPlainText(imports + text);
NotIndentingTextEditModifier modifier(&textEdit);
- QScopedPointer<RewriterView> rewriterView(new RewriterView(RewriterView::Amend, 0));
+ QScopedPointer<RewriterView> rewriterView(new RewriterView(RewriterView::Amend, nullptr));
rewriterView->setCheckSemanticErrors(false);
rewriterView->setTextModifier(&modifier);
inputModel->setRewriterView(rewriterView.data());
@@ -172,7 +170,7 @@ static Model *currentModel()
if (document)
return document->currentModel();
- return 0;
+ return nullptr;
}
Model *DesignDocumentView::pasteToModel()
diff --git a/src/plugins/qmldesigner/components/integration/designdocumentview.h b/src/plugins/qmldesigner/components/integration/designdocumentview.h
index 9e841c743a..7c008e222c 100644
--- a/src/plugins/qmldesigner/components/integration/designdocumentview.h
+++ b/src/plugins/qmldesigner/components/integration/designdocumentview.h
@@ -47,7 +47,7 @@ public:
void fromClipboard();
QString toText() const;
- void fromText(QString text);
+ void fromText(const QString &text);
static Model *pasteToModel();
static void copyModelNodes(const QList<ModelNode> &nodesToCopy);
diff --git a/src/plugins/qmldesigner/components/integration/utilitypanelcontroller.cpp b/src/plugins/qmldesigner/components/integration/utilitypanelcontroller.cpp
index d74aeaebbb..a1921f493d 100644
--- a/src/plugins/qmldesigner/components/integration/utilitypanelcontroller.cpp
+++ b/src/plugins/qmldesigner/components/integration/utilitypanelcontroller.cpp
@@ -35,9 +35,7 @@ UtilityPanelController::UtilityPanelController(QObject* parent):
{
}
-UtilityPanelController::~UtilityPanelController()
-{
-}
+UtilityPanelController::~UtilityPanelController() = default;
QWidget* UtilityPanelController::widget()
{
diff --git a/src/plugins/qmldesigner/components/itemlibrary/customfilesystemmodel.cpp b/src/plugins/qmldesigner/components/itemlibrary/customfilesystemmodel.cpp
index 45ff279512..4a9147ae4e 100644
--- a/src/plugins/qmldesigner/components/itemlibrary/customfilesystemmodel.cpp
+++ b/src/plugins/qmldesigner/components/itemlibrary/customfilesystemmodel.cpp
@@ -41,11 +41,9 @@ namespace QmlDesigner {
class ItemLibraryFileIconProvider : public QFileIconProvider
{
public:
- ItemLibraryFileIconProvider()
- {
- }
+ ItemLibraryFileIconProvider() = default;
- QIcon icon( const QFileInfo & info ) const
+ QIcon icon( const QFileInfo & info ) const override
{
QIcon icon;
@@ -90,7 +88,7 @@ void CustomFileSystemModel::setFilter(QDir::Filters)
}
-QString filterMetaIcons(const QString fileName)
+QString filterMetaIcons(const QString &fileName)
{
QFileInfo info(fileName);
diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryitem.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryitem.cpp
index 827c07e8f4..d67631531c 100644
--- a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryitem.cpp
+++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryitem.cpp
@@ -33,9 +33,7 @@ ItemLibraryItem::ItemLibraryItem(QObject *parent)
{
}
-ItemLibraryItem::~ItemLibraryItem()
-{
-}
+ItemLibraryItem::~ItemLibraryItem() = default;
QString ItemLibraryItem::itemName() const
{
diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp
index 15dec3a6e9..ed36dd4a04 100644
--- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp
+++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp
@@ -88,11 +88,11 @@ QVariant ItemLibraryModel::data(const QModelIndex &index, int role) const
if (m_roleNames.contains(role)) {
QVariant value = m_sections.at(index.row())->property(m_roleNames.value(role));
- ItemLibrarySectionModel* model = qobject_cast<ItemLibrarySectionModel *>(value.value<QObject*>());
+ auto model = qobject_cast<ItemLibrarySectionModel *>(value.value<QObject*>());
if (model)
return QVariant::fromValue(model);
- ItemLibraryModel* model2 = qobject_cast<ItemLibraryModel *>(value.value<QObject*>());
+ auto model2 = qobject_cast<ItemLibraryModel *>(value.value<QObject*>());
if (model2)
return QVariant::fromValue(model2);
@@ -192,13 +192,13 @@ void ItemLibraryModel::update(ItemLibraryInfo *itemLibraryInfo, Model *model)
qCInfo(itemlibraryPopulate) << "Adding:" << entry.typeName() << "to:" << entry.category();
ItemLibrarySection *sectionModel = sectionByName(itemSectionName);
- if (sectionModel == 0) {
+ if (sectionModel == nullptr) {
sectionModel = new ItemLibrarySection(itemSectionName, this);
m_sections.append(sectionModel);
sectionModel->setSectionExpanded(sectionExapanded(itemSectionName));
}
- ItemLibraryItem *item = new ItemLibraryItem(sectionModel);
+ auto item = new ItemLibraryItem(sectionModel);
item->setItemLibraryEntry(entry);
sectionModel->addSectionEntry(item);
}
@@ -212,7 +212,7 @@ void ItemLibraryModel::update(ItemLibraryInfo *itemLibraryInfo, Model *model)
QMimeData *ItemLibraryModel::getMimeData(const ItemLibraryEntry &itemLibraryEntry)
{
- QMimeData *mimeData = new QMimeData();
+ auto mimeData = new QMimeData();
QByteArray data;
QDataStream stream(&data, QIODevice::WriteOnly);
@@ -248,7 +248,7 @@ ItemLibrarySection *ItemLibraryModel::sectionByName(const QString &sectionName)
return itemLibrarySection;
}
- return 0;
+ return nullptr;
}
void ItemLibraryModel::updateVisibility(bool *changed)
diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryresourceview.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryresourceview.cpp
index 2296d30851..abc70621c9 100644
--- a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryresourceview.cpp
+++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryresourceview.cpp
@@ -46,7 +46,7 @@ namespace QmlDesigner {
void ItemLibraryResourceView::addSizeAction(QActionGroup *group, const QString &text, int gridSize, int iconSize)
{
- QAction *action = new QAction(text, group);
+ auto action = new QAction(text, group);
group->addAction(action);
action->setCheckable(true);
QAction::connect(action, &QAction::triggered, this, [this, gridSize, iconSize]() {
@@ -80,7 +80,7 @@ ItemLibraryResourceView::ItemLibraryResourceView(QWidget *parent) :
setContextMenuPolicy(Qt::ActionsContextMenu);
- QActionGroup *actionGroup = new QActionGroup(this);
+ auto actionGroup = new QActionGroup(this);
actionGroup->setExclusive(true);
addSizeAction(actionGroup, tr("Large Icons"), 256, 192);
@@ -113,14 +113,14 @@ void ItemLibraryResourceView::startDrag(Qt::DropActions /* supportedActions */)
if (!mimeData)
return;
- CustomFileSystemModel *fileSystemModel = qobject_cast<CustomFileSystemModel*>(model());
+ auto fileSystemModel = qobject_cast<CustomFileSystemModel*>(model());
Q_ASSERT(fileSystemModel);
QFileInfo fileInfo = fileSystemModel->fileInfo(selectedIndexes().front());
QPixmap pixmap(fileInfo.absoluteFilePath());
if (!pixmap.isNull()) {
- QDrag *drag = new QDrag(this);
+ auto drag = new QDrag(this);
drag->setPixmap(QIcon(pixmap).pixmap(128, 128));
- QMimeData *mimeData = new QMimeData;
+ auto mimeData = new QMimeData;
mimeData->setData(QLatin1String("application/vnd.bauhaus.libraryresource"), fileInfo.absoluteFilePath().toUtf8());
drag->setMimeData(mimeData);
drag->exec();
diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysectionmodel.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysectionmodel.cpp
index 1ed8d16e1e..c18a486fda 100644
--- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysectionmodel.cpp
+++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysectionmodel.cpp
@@ -57,7 +57,7 @@ QVariant ItemLibrarySectionModel::data(const QModelIndex &index, int role) const
if (m_roleNames.contains(role)) {
QVariant value = m_itemList.at(index.row())->property(m_roleNames.value(role));
- if (ItemLibrarySectionModel* model = qobject_cast<ItemLibrarySectionModel *>(value.value<QObject*>()))
+ if (auto model = qobject_cast<ItemLibrarySectionModel *>(value.value<QObject*>()))
return QVariant::fromValue(model);
return m_itemList.at(index.row())->property(m_roleNames.value(role));
diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.cpp
index 02b76df176..34955acd87 100644
--- a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.cpp
+++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.cpp
@@ -39,10 +39,7 @@ ItemLibraryView::ItemLibraryView(QObject* parent)
}
-ItemLibraryView::~ItemLibraryView()
-{
-
-}
+ItemLibraryView::~ItemLibraryView() = default;
bool ItemLibraryView::hasWidget() const
{
@@ -79,7 +76,7 @@ void ItemLibraryView::modelAboutToBeDetached(Model *model)
AbstractView::modelAboutToBeDetached(model);
- m_widget->setModel(0);
+ m_widget->setModel(nullptr);
}
void ItemLibraryView::importsChanged(const QList<Import> &/*addedImports*/, const QList<Import> &/*removedImports*/)
diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp
index 5414554186..889aaa6a36 100644
--- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp
+++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp
@@ -111,7 +111,7 @@ ItemLibraryWidget::ItemLibraryWidget(QWidget *parent) :
Theme::setupTheme(m_itemViewQuickWidget->engine());
/* other widgets */
- QTabBar *tabBar = new QTabBar(this);
+ auto tabBar = new QTabBar(this);
tabBar->addTab(tr("QML Types", "Title of library QML types view"));
tabBar->addTab(tr("Resources", "Title of library resources view"));
tabBar->addTab(tr("Imports", "Title of library imports view"));
@@ -128,7 +128,7 @@ ItemLibraryWidget::ItemLibraryWidget(QWidget *parent) :
m_filterLineEdit->setFiltering(true);
QWidget *lineEditFrame = new QWidget(this);
lineEditFrame->setObjectName(QStringLiteral("itemLibrarySearchInputFrame"));
- QGridLayout *lineEditLayout = new QGridLayout(lineEditFrame);
+ auto lineEditLayout = new QGridLayout(lineEditFrame);
lineEditLayout->setMargin(2);
lineEditLayout->setSpacing(0);
lineEditLayout->addItem(new QSpacerItem(5, 3, QSizePolicy::Fixed, QSizePolicy::Fixed), 0, 0, 1, 3);
@@ -145,7 +145,7 @@ ItemLibraryWidget::ItemLibraryWidget(QWidget *parent) :
spacer->setObjectName(QStringLiteral("itemLibrarySearchInputSpacer"));
spacer->setFixedHeight(4);
- QGridLayout *layout = new QGridLayout(this);
+ auto layout = new QGridLayout(this);
layout->setContentsMargins(0, 0, 0, 0);
layout->setSpacing(0);
layout->addWidget(tabBar, 0, 0, 1, 1);
@@ -166,7 +166,7 @@ ItemLibraryWidget::ItemLibraryWidget(QWidget *parent) :
connect(&m_compressionTimer, &QTimer::timeout, this, &ItemLibraryWidget::updateModel);
- auto *flowLayout = new Utils::FlowLayout(m_importTagsWidget.data());
+ auto flowLayout = new Utils::FlowLayout(m_importTagsWidget.data());
flowLayout->setMargin(4);
m_addResourcesWidget->setVisible(false);
@@ -291,7 +291,7 @@ void ItemLibraryWidget::setupImportTagWidget()
qDeleteAll(m_importTagsWidget->findChildren<QWidget*>("", Qt::FindDirectChildrenOnly));
- auto *flowLayout = m_importTagsWidget->layout();
+ auto flowLayout = m_importTagsWidget->layout();
auto createButton = [this](const QString &import) {
auto button = new QToolButton(m_importTagsWidget.data());
@@ -342,7 +342,7 @@ void ItemLibraryWidget::startDragAndDrop(QQuickItem *mouseArea, QVariant itemLib
m_currentitemLibraryEntry = itemLibraryId.value<ItemLibraryEntry>();
QMimeData *mimeData = m_itemLibraryModel->getMimeData(m_currentitemLibraryEntry);
- QDrag *drag = new QDrag(this);
+ auto drag = new QDrag(this);
drag->setPixmap(Utils::StyleHelper::dpiSpecificImageFile(
m_currentitemLibraryEntry.libraryEntryIconPath()));
diff --git a/src/plugins/qmldesigner/components/navigator/iconcheckboxitemdelegate.cpp b/src/plugins/qmldesigner/components/navigator/iconcheckboxitemdelegate.cpp
index a6e5314343..0371d0f1bb 100644
--- a/src/plugins/qmldesigner/components/navigator/iconcheckboxitemdelegate.cpp
+++ b/src/plugins/qmldesigner/components/navigator/iconcheckboxitemdelegate.cpp
@@ -55,7 +55,7 @@ IconCheckboxItemDelegate::IconCheckboxItemDelegate(QObject *parent,
QSize IconCheckboxItemDelegate::sizeHint(const QStyleOptionViewItem & /*option*/,
const QModelIndex & /*modelIndex*/) const
{
- return QSize(15, 20);
+ return {15, 20};
}
static bool isChecked(const QModelIndex &modelIndex)
diff --git a/src/plugins/qmldesigner/components/navigator/nameitemdelegate.cpp b/src/plugins/qmldesigner/components/navigator/nameitemdelegate.cpp
index 14a0109d85..089a540b8f 100644
--- a/src/plugins/qmldesigner/components/navigator/nameitemdelegate.cpp
+++ b/src/plugins/qmldesigner/components/navigator/nameitemdelegate.cpp
@@ -205,7 +205,7 @@ static void openContextMenu(const QModelIndex &index, const QPoint &pos)
bool NameItemDelegate::editorEvent(QEvent *event, QAbstractItemModel *, const QStyleOptionViewItem &, const QModelIndex &index)
{
if (event->type() == QEvent::MouseButtonRelease) {
- QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event);
+ auto mouseEvent = static_cast<QMouseEvent *>(event);
if (mouseEvent->button() == Qt::RightButton) {
openContextMenu(index, mouseEvent->globalPos());
mouseEvent->accept();
@@ -220,7 +220,7 @@ QWidget *NameItemDelegate::createEditor(QWidget *parent,
const QModelIndex &index) const
{
if (!getModelNode(index).isValid())
- return 0;
+ return nullptr;
return new QLineEdit(parent);
}
@@ -230,7 +230,7 @@ void NameItemDelegate::setEditorData(QWidget *editor, const QModelIndex &index)
const ModelNode node = getModelNode(index);
const QString value = node.id();
- QLineEdit *lineEdit = static_cast<QLineEdit*>(editor);
+ auto lineEdit = static_cast<QLineEdit*>(editor);
lineEdit->setText(value);
}
@@ -259,7 +259,7 @@ static void setId(const QModelIndex &index, const QString &newId)
void NameItemDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
{
Q_UNUSED(model);
- QLineEdit *lineEdit = static_cast<QLineEdit*>(editor);
+ auto lineEdit = static_cast<QLineEdit*>(editor);
setId(index,lineEdit->text());
lineEdit->clearFocus();
}
@@ -268,7 +268,7 @@ void NameItemDelegate::updateEditorGeometry(QWidget *editor,
const QStyleOptionViewItem &option,
const QModelIndex & /*index*/) const
{
- QLineEdit *lineEdit = static_cast<QLineEdit*>(editor);
+ auto lineEdit = static_cast<QLineEdit*>(editor);
lineEdit->setGeometry(option.rect);
}
diff --git a/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp b/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp
index 14776d40d6..38be04f5dc 100644
--- a/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp
+++ b/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp
@@ -176,9 +176,7 @@ NavigatorTreeModel::NavigatorTreeModel(QObject *parent) : QAbstractItemModel(par
{
}
-NavigatorTreeModel::~NavigatorTreeModel()
-{
-}
+NavigatorTreeModel::~NavigatorTreeModel() = default;
QVariant NavigatorTreeModel::data(const QModelIndex &index, int role) const
{
@@ -262,7 +260,7 @@ QModelIndex NavigatorTreeModel::index(int row, int column,
const QModelIndex &parent) const
{
if (!m_view->model())
- return QModelIndex();
+ return {};
if (!hasIndex(row, column, parent))
return QModelIndex();
@@ -290,7 +288,7 @@ QVariant NavigatorTreeModel::headerData(int, Qt::Orientation, int) const
QModelIndex NavigatorTreeModel::parent(const QModelIndex &index) const
{
if (!index.isValid())
- return QModelIndex();
+ return {};
const ModelNode modelNode = modelNodeForIndex(index);
@@ -373,7 +371,7 @@ QStringList NavigatorTreeModel::mimeTypes() const
QMimeData *NavigatorTreeModel::mimeData(const QModelIndexList &modelIndexList) const
{
- QMimeData *mimeData = new QMimeData();
+ auto mimeData = new QMimeData();
QByteArray encodedModelNodeData;
QDataStream encodedModelNodeDataStream(&encodedModelNodeData, QIODevice::WriteOnly);
diff --git a/src/plugins/qmldesigner/components/navigator/navigatortreeview.cpp b/src/plugins/qmldesigner/components/navigator/navigatortreeview.cpp
index 0e36908964..6b617eaaf5 100644
--- a/src/plugins/qmldesigner/components/navigator/navigatortreeview.cpp
+++ b/src/plugins/qmldesigner/components/navigator/navigatortreeview.cpp
@@ -60,7 +60,7 @@ public:
baseStyle()->setParent(parent);
}
- void drawPrimitive(PrimitiveElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget = 0) const
+ void drawPrimitive(PrimitiveElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget = nullptr) const override
{
static QRect mouseOverStateSavedFrameRectangle;
if (element == QStyle::PE_PanelItemViewRow) {
@@ -98,7 +98,7 @@ public:
}
}
- int styleHint(StyleHint hint, const QStyleOption *option = 0, const QWidget *widget = 0, QStyleHintReturn *returnData = 0) const {
+ int styleHint(StyleHint hint, const QStyleOption *option = nullptr, const QWidget *widget = nullptr, QStyleHintReturn *returnData = nullptr) const override {
if (hint == SH_ItemView_ShowDecorationSelected)
return 0;
else
diff --git a/src/plugins/qmldesigner/components/navigator/navigatorview.cpp b/src/plugins/qmldesigner/components/navigator/navigatorview.cpp
index e94135d0e8..c8fc4e5b54 100644
--- a/src/plugins/qmldesigner/components/navigator/navigatorview.cpp
+++ b/src/plugins/qmldesigner/components/navigator/navigatorview.cpp
@@ -75,7 +75,7 @@ NavigatorView::NavigatorView(QObject* parent) :
m_treeModel(new NavigatorTreeModel(this))
{
#ifndef QMLDESIGNER_TEST
- Internal::NavigatorContext *navigatorContext = new Internal::NavigatorContext(m_widget.data());
+ auto navigatorContext = new Internal::NavigatorContext(m_widget.data());
Core::ICore::addContextObject(navigatorContext);
#endif
@@ -92,7 +92,7 @@ NavigatorView::NavigatorView(QObject* parent) :
connect(m_widget.data(), &NavigatorWidget::filterToggled, this, &NavigatorView::filterToggled);
#ifndef QMLDESIGNER_TEST
- NameItemDelegate *idDelegate = new NameItemDelegate(this);
+ auto idDelegate = new NameItemDelegate(this);
IconCheckboxItemDelegate *showDelegate =
new IconCheckboxItemDelegate(this,
Utils::Icons::EYE_OPEN_TOOLBAR.icon(),
@@ -479,7 +479,7 @@ QTreeView *NavigatorView::treeWidget() const
{
if (m_widget)
return m_widget->treeView();
- return 0;
+ return nullptr;
}
NavigatorTreeModel *NavigatorView::treeModel()
diff --git a/src/plugins/qmldesigner/components/navigator/navigatorwidget.cpp b/src/plugins/qmldesigner/components/navigator/navigatorwidget.cpp
index 43f13c2bf3..17f8650950 100644
--- a/src/plugins/qmldesigner/components/navigator/navigatorwidget.cpp
+++ b/src/plugins/qmldesigner/components/navigator/navigatorwidget.cpp
@@ -45,10 +45,9 @@
namespace QmlDesigner {
-NavigatorWidget::NavigatorWidget(NavigatorView *view) :
- QFrame(),
- m_treeView(new NavigatorTreeView),
- m_navigatorView(view)
+NavigatorWidget::NavigatorWidget(NavigatorView *view)
+ : m_treeView(new NavigatorTreeView),
+ m_navigatorView(view)
{
m_treeView->setDragEnabled(true);
m_treeView->setAcceptDrops(true);
diff --git a/src/plugins/qmldesigner/components/propertyeditor/fileresourcesmodel.cpp b/src/plugins/qmldesigner/components/propertyeditor/fileresourcesmodel.cpp
index 6201fec182..5d7b1aeaaf 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/fileresourcesmodel.cpp
+++ b/src/plugins/qmldesigner/components/propertyeditor/fileresourcesmodel.cpp
@@ -43,9 +43,9 @@ FileResourcesModel::FileResourcesModel(QObject *parent) :
void FileResourcesModel::setModelNodeBackend(const QVariant &modelNodeBackend)
{
- QObject* modelNodeBackendObject = modelNodeBackend.value<QObject*>();
+ auto modelNodeBackendObject = modelNodeBackend.value<QObject*>();
- const QmlDesigner::QmlModelNodeProxy *backendObjectCasted =
+ const auto backendObjectCasted =
qobject_cast<const QmlDesigner::QmlModelNodeProxy *>(modelNodeBackendObject);
if (backendObjectCasted)
diff --git a/src/plugins/qmldesigner/components/propertyeditor/gradientmodel.cpp b/src/plugins/qmldesigner/components/propertyeditor/gradientmodel.cpp
index c1aff9dabd..aa7cfe1bb0 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/gradientmodel.cpp
+++ b/src/plugins/qmldesigner/components/propertyeditor/gradientmodel.cpp
@@ -213,7 +213,7 @@ QColor GradientModel::getColor(int index) const
return stop.modelValue("color").value<QColor>();
}
qWarning() << Q_FUNC_INFO << "invalid color index";
- return QColor();
+ return {};
}
qreal GradientModel::getPosition(int index) const
@@ -291,9 +291,9 @@ void GradientModel::setupModel()
void GradientModel::setAnchorBackend(const QVariant &anchorBackend)
{
- QObject* anchorBackendObject = anchorBackend.value<QObject*>();
+ auto anchorBackendObject = anchorBackend.value<QObject*>();
- const QmlDesigner::Internal::QmlAnchorBindingProxy *backendCasted =
+ const auto backendCasted =
qobject_cast<const QmlDesigner::Internal::QmlAnchorBindingProxy *>(anchorBackendObject);
if (backendCasted)
@@ -330,7 +330,7 @@ bool GradientModel::locked() const
if (m_locked)
return true;
- QmlDesigner::PropertyEditorView *view = qobject_cast<QmlDesigner::PropertyEditorView*>(m_itemNode.view());
+ auto view = qobject_cast<QmlDesigner::PropertyEditorView*>(m_itemNode.view());
if (view && view->locked())
return true;
diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorcontextobject.cpp b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorcontextobject.cpp
index 67183e1555..dc8243e1c8 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorcontextobject.cpp
+++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorcontextobject.cpp
@@ -71,7 +71,7 @@ QColor convertColorFromString(const QString &s)
uchar r = fromHex(s, 3);
uchar g = fromHex(s, 5);
uchar b = fromHex(s, 7);
- return QColor(r, g, b, a);
+ return {r, g, b, a};
} else {
QColor rv(s);
return rv;
@@ -84,9 +84,9 @@ PropertyEditorContextObject::PropertyEditorContextObject(QObject *parent) :
QObject(parent),
m_isBaseState(false),
m_selectionChanged(false),
- m_backendValues(0),
- m_qmlComponent(0),
- m_qmlContext(0)
+ m_backendValues(nullptr),
+ m_qmlComponent(nullptr),
+ m_qmlContext(nullptr)
{
}
@@ -342,7 +342,7 @@ void PropertyEditorContextObject::setSpecificQmlData(const QString &newSpecificQ
m_specificQmlData = newSpecificQmlData;
delete m_qmlComponent;
- m_qmlComponent = 0;
+ m_qmlComponent = nullptr;
emit specificQmlComponentChanged();
emit specificQmlDataChanged();
diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorqmlbackend.cpp b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorqmlbackend.cpp
index 16c2e5f1b2..86b3ac9165 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorqmlbackend.cpp
+++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorqmlbackend.cpp
@@ -86,7 +86,7 @@ static QObject *variantToQObject(const QVariant &value)
if (value.userType() == QMetaType::QObjectStar || value.userType() > QMetaType::User)
return *(QObject **)value.constData();
- return 0;
+ return nullptr;
}
namespace QmlDesigner {
@@ -109,15 +109,13 @@ PropertyEditorQmlBackend::PropertyEditorQmlBackend(PropertyEditorView *propertyE
propertyEditor, &PropertyEditorView::changeValue);
}
-PropertyEditorQmlBackend::~PropertyEditorQmlBackend()
-{
-}
+PropertyEditorQmlBackend::~PropertyEditorQmlBackend() = default;
void PropertyEditorQmlBackend::setupPropertyEditorValue(const PropertyName &name, PropertyEditorView *propertyEditor, const QString &type)
{
QmlDesigner::PropertyName propertyName(name);
propertyName.replace('.', '_');
- PropertyEditorValue *valueObject = qobject_cast<PropertyEditorValue*>(variantToQObject(backendValuesPropertyMap().value(QString::fromUtf8(propertyName))));
+ auto valueObject = qobject_cast<PropertyEditorValue*>(variantToQObject(backendValuesPropertyMap().value(QString::fromUtf8(propertyName))));
if (!valueObject) {
valueObject = new PropertyEditorValue(&backendValuesPropertyMap());
QObject::connect(valueObject, &PropertyEditorValue::valueChanged, &backendValuesPropertyMap(), &DesignerPropertyMap::valueChanged);
@@ -186,7 +184,7 @@ void PropertyEditorQmlBackend::createPropertyEditorValue(const QmlObjectNode &qm
{
PropertyName propertyName(name);
propertyName.replace('.', '_');
- PropertyEditorValue *valueObject = qobject_cast<PropertyEditorValue*>(variantToQObject(backendValuesPropertyMap().value(QString::fromUtf8(propertyName))));
+ auto valueObject = qobject_cast<PropertyEditorValue*>(variantToQObject(backendValuesPropertyMap().value(QString::fromUtf8(propertyName))));
if (!valueObject) {
valueObject = new PropertyEditorValue(&backendValuesPropertyMap());
QObject::connect(valueObject, &PropertyEditorValue::valueChanged, &backendValuesPropertyMap(), &DesignerPropertyMap::valueChanged);
@@ -220,7 +218,7 @@ void PropertyEditorQmlBackend::setValue(const QmlObjectNode & qmlObjectNode, con
{
PropertyName propertyName = name;
propertyName.replace('.', '_');
- PropertyEditorValue *propertyValue = qobject_cast<PropertyEditorValue*>(variantToQObject(m_backendValuesPropertyMap.value(QString::fromUtf8(propertyName))));
+ auto propertyValue = qobject_cast<PropertyEditorValue*>(variantToQObject(m_backendValuesPropertyMap.value(QString::fromUtf8(propertyName))));
if (propertyValue) {
propertyValue->setValue(value);
@@ -285,7 +283,7 @@ void PropertyEditorQmlBackend::setup(const QmlObjectNode &qmlObjectNode, const Q
setupLayoutAttachedProperties(qmlObjectNode, propertyEditor);
// className
- PropertyEditorValue *valueObject = qobject_cast<PropertyEditorValue*>(variantToQObject(m_backendValuesPropertyMap.value(QLatin1String("className"))));
+ auto valueObject = qobject_cast<PropertyEditorValue*>(variantToQObject(m_backendValuesPropertyMap.value(QLatin1String("className"))));
if (!valueObject)
valueObject = new PropertyEditorValue(&m_backendValuesPropertyMap);
valueObject->setName("className");
@@ -366,7 +364,7 @@ void PropertyEditorQmlBackend::initialSetup(const TypeName &typeName, const QUrl
foreach (const PropertyName &propertyName, metaInfo.propertyNames())
setupPropertyEditorValue(propertyName, propertyEditor, QString::fromUtf8(metaInfo.propertyTypeName(propertyName)));
- PropertyEditorValue *valueObject = qobject_cast<PropertyEditorValue*>(variantToQObject(m_backendValuesPropertyMap.value(QLatin1String("className"))));
+ auto valueObject = qobject_cast<PropertyEditorValue*>(variantToQObject(m_backendValuesPropertyMap.value(QLatin1String("className"))));
if (!valueObject)
valueObject = new PropertyEditorValue(&m_backendValuesPropertyMap);
valueObject->setName("className");
@@ -403,8 +401,8 @@ QString PropertyEditorQmlBackend::propertyEditorResourcesPath() {
return Core::ICore::resourcePath() + QStringLiteral("/qmldesigner/propertyEditorQmlSources");
}
-QString PropertyEditorQmlBackend::templateGeneration(NodeMetaInfo type,
- NodeMetaInfo superType,
+QString PropertyEditorQmlBackend::templateGeneration(const NodeMetaInfo &type,
+ const NodeMetaInfo &superType,
const QmlObjectNode &objectNode)
{
if (!templateConfiguration() || !templateConfiguration()->isValid())
diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorqmlbackend.h b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorqmlbackend.h
index a272b35aef..a0012a1cc1 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorqmlbackend.h
+++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorqmlbackend.h
@@ -68,7 +68,7 @@ public:
PropertyEditorValue *propertyValueForName(const QString &propertyName);
static QString propertyEditorResourcesPath();
- static QString templateGeneration(NodeMetaInfo type, NodeMetaInfo superType,
+ static QString templateGeneration(const NodeMetaInfo &type, const NodeMetaInfo &superType,
const QmlObjectNode &objectNode);
static QUrl getQmlFileUrl(const TypeName &relativeTypeName, const NodeMetaInfo &info = NodeMetaInfo());
diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorvalue.cpp b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorvalue.cpp
index f4cc31f56e..df58f309ec 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorvalue.cpp
+++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorvalue.cpp
@@ -358,7 +358,7 @@ PropertyEditorNodeWrapper::PropertyEditorNodeWrapper(PropertyEditorValue* parent
connect(m_editorValue, &PropertyEditorValue::modelNodeChanged, this, &PropertyEditorNodeWrapper::update);
}
-PropertyEditorNodeWrapper::PropertyEditorNodeWrapper(QObject *parent) : QObject(parent), m_editorValue(NULL)
+PropertyEditorNodeWrapper::PropertyEditorNodeWrapper(QObject *parent) : QObject(parent), m_editorValue(nullptr)
{
}
@@ -441,7 +441,7 @@ void PropertyEditorNodeWrapper::changeValue(const QString &propertyName)
if (m_modelNode.isValid()) {
QmlDesigner::QmlObjectNode qmlObjectNode(m_modelNode);
- PropertyEditorValue *valueObject = qvariant_cast<PropertyEditorValue *>(m_valuesPropertyMap.value(QString::fromLatin1(name)));
+ auto valueObject = qvariant_cast<PropertyEditorValue *>(m_valuesPropertyMap.value(QString::fromLatin1(name)));
if (valueObject->value().isValid())
qmlObjectNode.setVariantProperty(name, valueObject->value());
@@ -463,7 +463,7 @@ void PropertyEditorNodeWrapper::setup()
foreach (const QmlDesigner::PropertyName &propertyName, m_modelNode.metaInfo().propertyNames()) {
if (qmlObjectNode.isValid()) {
- PropertyEditorValue *valueObject = new PropertyEditorValue(&m_valuesPropertyMap);
+ auto valueObject = new PropertyEditorValue(&m_valuesPropertyMap);
valueObject->setName(propertyName);
valueObject->setValue(qmlObjectNode.instanceValue(propertyName));
connect(valueObject, &PropertyEditorValue::valueChanged, &m_valuesPropertyMap, &QQmlPropertyMap::valueChanged);
diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorview.cpp b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorview.cpp
index dc88f342b7..e046eceb64 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorview.cpp
+++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorview.cpp
@@ -70,10 +70,10 @@ static bool propertyIsAttachedLayoutProperty(const PropertyName &propertyName)
PropertyEditorView::PropertyEditorView(QWidget *parent) :
AbstractView(parent),
m_parent(parent),
- m_updateShortcut(0),
+ m_updateShortcut(nullptr),
m_timerId(0),
m_stackedWidget(new PropertyEditorWidget(parent)),
- m_qmlBackEndForCurrentType(0),
+ m_qmlBackEndForCurrentType(nullptr),
m_locked(false),
m_setupCompleted(false),
m_singleShotTimer(new QTimer(this))
@@ -152,13 +152,13 @@ void PropertyEditorView::changeValue(const QString &name)
if (newId == m_selectedNode.id())
return;
- if (m_selectedNode.isValidId(newId) && !hasId(newId)) {
+ if (QmlDesigner::ModelNode::isValidId(newId) && !hasId(newId)) {
m_selectedNode.setIdWithRefactoring(newId);
} else {
m_locked = true;
value->setValue(m_selectedNode.id());
m_locked = false;
- if (!m_selectedNode.isValidId(newId))
+ if (!QmlDesigner::ModelNode::isValidId(newId))
Core::AsynchronousMessageBox::warning(tr("Invalid Id"), tr("%1 is an invalid id.").arg(newId));
else
Core::AsynchronousMessageBox::warning(tr("Invalid Id"), tr("%1 already exists.").arg(newId));
@@ -170,7 +170,7 @@ void PropertyEditorView::changeValue(const QString &name)
underscoreName.replace('.', '_');
PropertyEditorValue *value = m_qmlBackEndForCurrentType->propertyValueForName(QString::fromLatin1(underscoreName));
- if (value ==0)
+ if (value ==nullptr)
return;
QmlObjectNode qmlObjectNode(m_selectedNode);
@@ -381,7 +381,7 @@ void PropertyEditorView::updateSize()
{
if (!m_qmlBackEndForCurrentType)
return;
- QWidget* frame = m_qmlBackEndForCurrentType->widget()->findChild<QWidget*>("propertyEditorFrame");
+ auto frame = m_qmlBackEndForCurrentType->widget()->findChild<QWidget*>("propertyEditorFrame");
if (frame)
frame->resize(m_stackedWidget->size());
}
@@ -412,7 +412,7 @@ void PropertyEditorView::timerEvent(QTimerEvent *timerEvent)
void PropertyEditorView::resetView()
{
- if (model() == 0)
+ if (model() == nullptr)
return;
m_locked = true;
@@ -688,7 +688,7 @@ bool PropertyEditorView::hasWidget() const
WidgetInfo PropertyEditorView::widgetInfo()
{
- return createWidgetInfo(m_stackedWidget, 0, QStringLiteral("Properties"), WidgetInfo::RightPane, 0);
+ return createWidgetInfo(m_stackedWidget, nullptr, QStringLiteral("Properties"), WidgetInfo::RightPane, 0);
}
void PropertyEditorView::currentStateChanged(const ModelNode &node)
@@ -706,7 +706,7 @@ void PropertyEditorView::instancePropertyChanged(const QList<QPair<ModelNode, Pr
return;
m_locked = true;
- typedef QPair<ModelNode, PropertyName> ModelNodePropertyPair;
+ using ModelNodePropertyPair = QPair<ModelNode, PropertyName>;
foreach (const ModelNodePropertyPair &propertyPair, propertyList) {
const ModelNode modelNode = propertyPair.first;
const QmlObjectNode qmlObjectNode(modelNode);
@@ -762,7 +762,7 @@ void PropertyEditorView::reloadQml()
m_stackedWidget->removeWidget(widget);
delete widget;
}
- m_qmlBackEndForCurrentType = 0;
+ m_qmlBackEndForCurrentType = nullptr;
delayedResetView();
}
diff --git a/src/plugins/qmldesigner/components/propertyeditor/qmlanchorbindingproxy.cpp b/src/plugins/qmldesigner/components/propertyeditor/qmlanchorbindingproxy.cpp
index 31b16e2e2d..afc7c49715 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/qmlanchorbindingproxy.cpp
+++ b/src/plugins/qmldesigner/components/propertyeditor/qmlanchorbindingproxy.cpp
@@ -39,7 +39,7 @@ class NodeState;
const PropertyName auxDataString("anchors_");
-static inline void backupPropertyAndRemove(ModelNode node, const PropertyName &propertyName)
+static inline void backupPropertyAndRemove(const ModelNode &node, const PropertyName &propertyName)
{
if (node.hasVariantProperty(propertyName)) {
node.setAuxiliaryData(auxDataString + propertyName, node.variantProperty(propertyName).value());
@@ -70,9 +70,7 @@ QmlAnchorBindingProxy::QmlAnchorBindingProxy(QObject *parent) :
{
}
-QmlAnchorBindingProxy::~QmlAnchorBindingProxy()
-{
-}
+QmlAnchorBindingProxy::~QmlAnchorBindingProxy() = default;
void QmlAnchorBindingProxy::setup(const QmlItemNode &fxItemNode)
{
diff --git a/src/plugins/qmldesigner/components/stateseditor/stateseditormodel.cpp b/src/plugins/qmldesigner/components/stateseditor/stateseditormodel.cpp
index 45999b0fe0..07e758b35a 100644
--- a/src/plugins/qmldesigner/components/stateseditor/stateseditormodel.cpp
+++ b/src/plugins/qmldesigner/components/stateseditor/stateseditormodel.cpp
@@ -60,7 +60,7 @@ int StatesEditorModel::count() const
QModelIndex StatesEditorModel::index(int row, int column, const QModelIndex &parent) const
{
if (m_statesEditorView.isNull())
- return QModelIndex();
+ return {};
int internalNodeId = 0;
diff --git a/src/plugins/qmldesigner/components/stateseditor/stateseditorview.cpp b/src/plugins/qmldesigner/components/stateseditor/stateseditorview.cpp
index 995372bcbe..3e2bc91e7d 100644
--- a/src/plugins/qmldesigner/components/stateseditor/stateseditorview.cpp
+++ b/src/plugins/qmldesigner/components/stateseditor/stateseditorview.cpp
@@ -30,7 +30,7 @@
#include <QDebug>
#include <QRegExp>
-#include <math.h>
+#include <cmath>
#include <nodemetainfo.h>
@@ -67,7 +67,7 @@ WidgetInfo StatesEditorView::widgetInfo()
if (!m_statesEditorWidget)
m_statesEditorWidget = new StatesEditorWidget(this, m_statesEditorModel.data());
- return createWidgetInfo(m_statesEditorWidget.data(), 0, QLatin1String("StatesEditor"), WidgetInfo::BottomPane, 0, tr("States"));
+ return createWidgetInfo(m_statesEditorWidget.data(), nullptr, QLatin1String("StatesEditor"), WidgetInfo::BottomPane, 0, tr("States"));
}
void StatesEditorView::rootNodeTypeChanged(const QString &/*type*/, int /*majorVersion*/, int /*minorVersion*/)
diff --git a/src/plugins/qmldesigner/components/stateseditor/stateseditorwidget.cpp b/src/plugins/qmldesigner/components/stateseditor/stateseditorwidget.cpp
index 83d22c307d..956b0d32a6 100644
--- a/src/plugins/qmldesigner/components/stateseditor/stateseditorwidget.cpp
+++ b/src/plugins/qmldesigner/components/stateseditor/stateseditorwidget.cpp
@@ -85,10 +85,9 @@ void StatesEditorWidget::showAddNewStatesButton(bool showAddNewStatesButton)
}
StatesEditorWidget::StatesEditorWidget(StatesEditorView *statesEditorView, StatesEditorModel *statesEditorModel)
- : QQuickWidget(),
- m_statesEditorView(statesEditorView),
- m_imageProvider(0),
- m_qmlSourceUpdateShortcut(0)
+ : m_statesEditorView(statesEditorView),
+ m_imageProvider(nullptr),
+ m_qmlSourceUpdateShortcut(nullptr)
{
m_imageProvider = new Internal::StatesEditorImageProvider;
m_imageProvider->setNodeInstanceView(statesEditorView->nodeInstanceView());
@@ -115,9 +114,7 @@ StatesEditorWidget::StatesEditorWidget(StatesEditorView *statesEditorView, State
reloadQmlSource();
}
-StatesEditorWidget::~StatesEditorWidget()
-{
-}
+StatesEditorWidget::~StatesEditorWidget() = default;
QString StatesEditorWidget::qmlSourcesPath() {
return Core::ICore::resourcePath() + QStringLiteral("/qmldesigner/statesEditorQmlSources");
diff --git a/src/plugins/qmldesigner/components/texteditor/texteditorview.cpp b/src/plugins/qmldesigner/components/texteditor/texteditorview.cpp
index 85e42b7d80..462a51dbe7 100644
--- a/src/plugins/qmldesigner/components/texteditor/texteditorview.cpp
+++ b/src/plugins/qmldesigner/components/texteditor/texteditorview.cpp
@@ -99,7 +99,7 @@ void TextEditorView::modelAttached(Model *model)
AbstractView::modelAttached(model);
- TextEditor::BaseTextEditor* textEditor = qobject_cast<TextEditor::BaseTextEditor*>(
+ auto textEditor = qobject_cast<TextEditor::BaseTextEditor*>(
QmlDesignerPlugin::instance()->currentDesignDocument()->textEditor()->duplicate());
Core::Context context = textEditor->context();
@@ -118,7 +118,7 @@ void TextEditorView::modelAboutToBeDetached(Model *model)
{
AbstractView::modelAboutToBeDetached(model);
- m_widget->setTextEditor(0);
+ m_widget->setTextEditor(nullptr);
// in case the user closed it explicit we do not want to do anything with the editor
if (TextEditor::BaseTextEditor *textEditor =
@@ -149,7 +149,7 @@ void TextEditorView::nodeReparented(const ModelNode &/*node*/, const NodeAbstrac
WidgetInfo TextEditorView::widgetInfo()
{
- return createWidgetInfo(m_widget, 0, "TextEditor", WidgetInfo::CentralPane, 0, tr("Text Editor"), DesignerWidgetFlags::IgnoreErrors);
+ return createWidgetInfo(m_widget, nullptr, "TextEditor", WidgetInfo::CentralPane, 0, tr("Text Editor"), DesignerWidgetFlags::IgnoreErrors);
}
void TextEditorView::contextHelpId(const Core::IContext::HelpIdCallback &callback) const
diff --git a/src/plugins/qmldesigner/components/texteditor/texteditorwidget.cpp b/src/plugins/qmldesigner/components/texteditor/texteditorwidget.cpp
index 4cf464d4e7..8bf98d79c9 100644
--- a/src/plugins/qmldesigner/components/texteditor/texteditorwidget.cpp
+++ b/src/plugins/qmldesigner/components/texteditor/texteditorwidget.cpp
@@ -186,7 +186,7 @@ bool TextEditorWidget::eventFilter( QObject *, QEvent *event)
QKeySequence(Qt::Key_Down + Qt::CTRL)
};
if (event->type() == QEvent::ShortcutOverride) {
- QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
+ auto keyEvent = static_cast<QKeyEvent *>(event);
if (std::find(overrideKeys.begin(), overrideKeys.end(), keyEvent->key()) != overrideKeys.end()) {
keyEvent->accept();
@@ -199,7 +199,7 @@ bool TextEditorWidget::eventFilter( QObject *, QEvent *event)
| Qt::MetaModifier;
QKeySequence keySqeuence(keyEvent->key() | (keyEvent->modifiers() & relevantModifiers));
- for (QKeySequence overrideSequence : overrideSequences)
+ for (const QKeySequence &overrideSequence : overrideSequences)
if (keySqeuence.matches(overrideSequence)) {
keyEvent->accept();
return true;
diff --git a/src/plugins/qmldesigner/componentsplugin/addtabdesigneraction.h b/src/plugins/qmldesigner/componentsplugin/addtabdesigneraction.h
index 93eae8153f..fa57709b99 100644
--- a/src/plugins/qmldesigner/componentsplugin/addtabdesigneraction.h
+++ b/src/plugins/qmldesigner/componentsplugin/addtabdesigneraction.h
@@ -35,14 +35,14 @@ class AddTabDesignerAction : public QObject, public AbstractAction
public:
AddTabDesignerAction();
- QByteArray category() const;
- QByteArray menuId() const;
- int priority() const;
- Type type() const;
+ QByteArray category() const override;
+ QByteArray menuId() const override;
+ int priority() const override;
+ Type type() const override;
protected:
- bool isVisible(const SelectionContext &selectionContext) const;
- bool isEnabled(const SelectionContext &selectionContext) const;
+ bool isVisible(const SelectionContext &selectionContext) const override;
+ bool isEnabled(const SelectionContext &selectionContext) const override;
private:
void addNewTab();
diff --git a/src/plugins/qmldesigner/componentsplugin/addtabtotabviewdialog.h b/src/plugins/qmldesigner/componentsplugin/addtabtotabviewdialog.h
index 8128985d64..c30e8fccf9 100644
--- a/src/plugins/qmldesigner/componentsplugin/addtabtotabviewdialog.h
+++ b/src/plugins/qmldesigner/componentsplugin/addtabtotabviewdialog.h
@@ -35,8 +35,8 @@ class AddTabToTabViewDialog : public QDialog
Q_OBJECT
public:
- explicit AddTabToTabViewDialog(QWidget *parent = 0);
- ~AddTabToTabViewDialog();
+ explicit AddTabToTabViewDialog(QWidget *parent = nullptr);
+ ~AddTabToTabViewDialog() override;
static QString create(const QString &tabName, QWidget *parent);
diff --git a/src/plugins/qmldesigner/componentsplugin/componentsplugin.h b/src/plugins/qmldesigner/componentsplugin/componentsplugin.h
index 30e0cc5aa1..14892065ae 100644
--- a/src/plugins/qmldesigner/componentsplugin/componentsplugin.h
+++ b/src/plugins/qmldesigner/componentsplugin/componentsplugin.h
@@ -40,10 +40,10 @@ class ComponentsPlugin : public QObject, QmlDesigner::IWidgetPlugin
Q_INTERFACES(QmlDesigner::IWidgetPlugin)
public:
ComponentsPlugin();
- ~ComponentsPlugin() {}
+ ~ComponentsPlugin() override = default;
- QString metaInfo() const;
- QString pluginName() const;
+ QString metaInfo() const override;
+ QString pluginName() const override;
};
diff --git a/src/plugins/qmldesigner/componentsplugin/entertabdesigneraction.cpp b/src/plugins/qmldesigner/componentsplugin/entertabdesigneraction.cpp
index 956f26c453..7973bf565c 100644
--- a/src/plugins/qmldesigner/componentsplugin/entertabdesigneraction.cpp
+++ b/src/plugins/qmldesigner/componentsplugin/entertabdesigneraction.cpp
@@ -124,7 +124,7 @@ void EnterTabDesignerAction::createActionForTab(const ModelNode &modelNode)
if (itemNode.isValid()) {
QString what = tr("Step into: %1").
arg(itemNode.instanceValue("title").toString());
- EnterTabAction *selectionAction = new EnterTabAction(what);
+ auto selectionAction = new EnterTabAction(what);
SelectionContext nodeSelectionContext = selectionContext();
nodeSelectionContext.setTargetNode(modelNode);
diff --git a/src/plugins/qmldesigner/componentsplugin/tabviewindexmodel.cpp b/src/plugins/qmldesigner/componentsplugin/tabviewindexmodel.cpp
index 751ec18235..ab5c831bae 100644
--- a/src/plugins/qmldesigner/componentsplugin/tabviewindexmodel.cpp
+++ b/src/plugins/qmldesigner/componentsplugin/tabviewindexmodel.cpp
@@ -36,7 +36,7 @@ TabViewIndexModel::TabViewIndexModel(QObject *parent) :
void TabViewIndexModel::setModelNodeBackend(const QVariant &modelNodeBackend)
{
- QObject* modelNodeBackendObject = modelNodeBackend.value<QObject*>();
+ auto modelNodeBackendObject = modelNodeBackend.value<QObject*>();
if (modelNodeBackendObject)
setModelNode(modelNodeBackendObject->property("modelNode").value<QmlDesigner::ModelNode>());
diff --git a/src/plugins/qmldesigner/componentsplugin/tabviewindexmodel.h b/src/plugins/qmldesigner/componentsplugin/tabviewindexmodel.h
index e10f46a085..9443f09d55 100644
--- a/src/plugins/qmldesigner/componentsplugin/tabviewindexmodel.h
+++ b/src/plugins/qmldesigner/componentsplugin/tabviewindexmodel.h
@@ -37,7 +37,7 @@ class TabViewIndexModel : public QObject
Q_PROPERTY(QStringList tabViewIndexModel READ tabViewIndexModel NOTIFY modelNodeBackendChanged)
public:
- explicit TabViewIndexModel(QObject *parent = 0);
+ explicit TabViewIndexModel(QObject *parent = nullptr);
void setModelNodeBackend(const QVariant &modelNodeBackend);
void setModelNode(const QmlDesigner::ModelNode &modelNode);
diff --git a/src/plugins/qmldesigner/designercore/exceptions/exception.cpp b/src/plugins/qmldesigner/designercore/exceptions/exception.cpp
index e106c2fe93..b0482ddc97 100644
--- a/src/plugins/qmldesigner/designercore/exceptions/exception.cpp
+++ b/src/plugins/qmldesigner/designercore/exceptions/exception.cpp
@@ -126,9 +126,7 @@ if (s_shouldAssert)
Q_ASSERT_X(false, _function, QString(QStringLiteral("%1:%2 - %3")).arg(m_file).arg(m_line).arg(m_function).toUtf8());
}
-Exception::~Exception()
-{
-}
+Exception::~Exception() = default;
/*!
Returns the unmangled backtrace of this exception as a string.
diff --git a/src/plugins/qmldesigner/designercore/filemanager/addarraymembervisitor.cpp b/src/plugins/qmldesigner/designercore/filemanager/addarraymembervisitor.cpp
index 898ce22bcb..94e1cbaa0f 100644
--- a/src/plugins/qmldesigner/designercore/filemanager/addarraymembervisitor.cpp
+++ b/src/plugins/qmldesigner/designercore/filemanager/addarraymembervisitor.cpp
@@ -45,10 +45,10 @@ AddArrayMemberVisitor::AddArrayMemberVisitor(TextModifier &modifier,
void AddArrayMemberVisitor::findArrayBindingAndInsert(const QString &propertyName, QmlJS::AST::UiObjectMemberList *ast)
{
for (QmlJS::AST::UiObjectMemberList *iter = ast; iter; iter = iter->next) {
- if (QmlJS::AST::UiArrayBinding *arrayBinding = QmlJS::AST::cast<QmlJS::AST::UiArrayBinding*>(iter->member)) {
+ if (auto arrayBinding = QmlJS::AST::cast<QmlJS::AST::UiArrayBinding*>(iter->member)) {
if (toString(arrayBinding->qualifiedId) == propertyName)
insertInto(arrayBinding);
- } else if (QmlJS::AST::UiObjectBinding *objectBinding = QmlJS::AST::cast<QmlJS::AST::UiObjectBinding*>(iter->member)) {
+ } else if (auto objectBinding = QmlJS::AST::cast<QmlJS::AST::UiObjectBinding*>(iter->member)) {
if (toString(objectBinding->qualifiedId) == propertyName && willConvertObjectBindingIntoArrayBinding())
convertAndAdd(objectBinding);
}
@@ -80,7 +80,7 @@ bool AddArrayMemberVisitor::visit(QmlJS::AST::UiObjectDefinition *ast)
// FIXME: duplicate code in the QmlJS::Rewriter class, remove this
void AddArrayMemberVisitor::insertInto(QmlJS::AST::UiArrayBinding *arrayBinding)
{
- QmlJS::AST::UiObjectMember *lastMember = 0;
+ QmlJS::AST::UiObjectMember *lastMember = nullptr;
for (QmlJS::AST::UiArrayMemberList *iter = arrayBinding->members; iter; iter = iter->next)
if (iter->member)
lastMember = iter->member;
diff --git a/src/plugins/qmldesigner/designercore/filemanager/addarraymembervisitor.h b/src/plugins/qmldesigner/designercore/filemanager/addarraymembervisitor.h
index d414e24664..3498068fbc 100644
--- a/src/plugins/qmldesigner/designercore/filemanager/addarraymembervisitor.h
+++ b/src/plugins/qmldesigner/designercore/filemanager/addarraymembervisitor.h
@@ -45,8 +45,8 @@ public:
{ m_convertObjectBindingIntoArrayBinding = convertObjectBindingIntoArrayBinding; }
protected:
- virtual bool visit(QmlJS::AST::UiObjectBinding *ast);
- virtual bool visit(QmlJS::AST::UiObjectDefinition *ast);
+ bool visit(QmlJS::AST::UiObjectBinding *ast) override;
+ bool visit(QmlJS::AST::UiObjectDefinition *ast) override;
private:
void findArrayBindingAndInsert(const QString &propertyName, QmlJS::AST::UiObjectMemberList *ast);
diff --git a/src/plugins/qmldesigner/designercore/filemanager/addobjectvisitor.h b/src/plugins/qmldesigner/designercore/filemanager/addobjectvisitor.h
index 2b869cbc50..dc1dd66e36 100644
--- a/src/plugins/qmldesigner/designercore/filemanager/addobjectvisitor.h
+++ b/src/plugins/qmldesigner/designercore/filemanager/addobjectvisitor.h
@@ -39,8 +39,8 @@ public:
const PropertyNameList &propertyOrder);
protected:
- virtual bool visit(QmlJS::AST::UiObjectBinding *ast);
- virtual bool visit(QmlJS::AST::UiObjectDefinition *ast);
+ bool visit(QmlJS::AST::UiObjectBinding *ast) override;
+ bool visit(QmlJS::AST::UiObjectDefinition *ast) override;
private:
void insertInto(QmlJS::AST::UiObjectInitializer *ast);
diff --git a/src/plugins/qmldesigner/designercore/filemanager/addpropertyvisitor.cpp b/src/plugins/qmldesigner/designercore/filemanager/addpropertyvisitor.cpp
index 7628c6b828..70e2f8463e 100644
--- a/src/plugins/qmldesigner/designercore/filemanager/addpropertyvisitor.cpp
+++ b/src/plugins/qmldesigner/designercore/filemanager/addpropertyvisitor.cpp
@@ -83,7 +83,7 @@ void AddPropertyVisitor::addInMembers(QmlJS::AST::UiObjectInitializer *initializ
QmlJS::AST::SourceLocation startOfNextMember;
unsigned depth;
- if (insertAfter == 0 || insertAfter->member == 0) {
+ if (insertAfter == nullptr || insertAfter->member == nullptr) {
// insert as first member
endOfPreviousMember = initializer->lbraceToken;
@@ -108,7 +108,7 @@ void AddPropertyVisitor::addInMembers(QmlJS::AST::UiObjectInitializer *initializ
bool needsTrailingSemicolon = false;
if (isOneLiner) {
- if (insertAfter == 0) { // we're inserting after an lbrace
+ if (insertAfter == nullptr) { // we're inserting after an lbrace
if (initializer->members) { // we're inserting before a member (and not the rbrace)
needsTrailingSemicolon = m_propertyType == QmlRefactoring::ScriptBinding;
}
diff --git a/src/plugins/qmldesigner/designercore/filemanager/addpropertyvisitor.h b/src/plugins/qmldesigner/designercore/filemanager/addpropertyvisitor.h
index 9da136d82c..f6f92de125 100644
--- a/src/plugins/qmldesigner/designercore/filemanager/addpropertyvisitor.h
+++ b/src/plugins/qmldesigner/designercore/filemanager/addpropertyvisitor.h
@@ -44,8 +44,8 @@ public:
const TypeName &dynamicTypeName);
protected:
- virtual bool visit(QmlJS::AST::UiObjectDefinition *ast);
- virtual bool visit(QmlJS::AST::UiObjectBinding *ast);
+ bool visit(QmlJS::AST::UiObjectDefinition *ast) override;
+ bool visit(QmlJS::AST::UiObjectBinding *ast) override;
private:
void addInMembers(QmlJS::AST::UiObjectInitializer *initializer);
diff --git a/src/plugins/qmldesigner/designercore/filemanager/changeimportsvisitor.cpp b/src/plugins/qmldesigner/designercore/filemanager/changeimportsvisitor.cpp
index f5b5a42e30..a35ff98ef4 100644
--- a/src/plugins/qmldesigner/designercore/filemanager/changeimportsvisitor.cpp
+++ b/src/plugins/qmldesigner/designercore/filemanager/changeimportsvisitor.cpp
@@ -70,7 +70,7 @@ bool ChangeImportsVisitor::remove(QmlJS::AST::UiProgram *ast, const Import &impo
return false;
for (QmlJS::AST::UiHeaderItemList *iter = ast->headers; iter; iter = iter->next) {
- QmlJS::AST::UiImport *iterImport = QmlJS::AST::cast<QmlJS::AST::UiImport *>(iter->headerItem);
+ auto iterImport = QmlJS::AST::cast<QmlJS::AST::UiImport *>(iter->headerItem);
if (equals(iterImport, import)) {
int start = iterImport->firstSourceLocation().begin();
int end = iterImport->lastSourceLocation().end();
diff --git a/src/plugins/qmldesigner/designercore/filemanager/changeobjecttypevisitor.h b/src/plugins/qmldesigner/designercore/filemanager/changeobjecttypevisitor.h
index 474f83b944..9c25c35c5c 100644
--- a/src/plugins/qmldesigner/designercore/filemanager/changeobjecttypevisitor.h
+++ b/src/plugins/qmldesigner/designercore/filemanager/changeobjecttypevisitor.h
@@ -38,8 +38,8 @@ public:
const QString &newType);
protected:
- virtual bool visit(QmlJS::AST::UiObjectDefinition *ast);
- virtual bool visit(QmlJS::AST::UiObjectBinding *ast);
+ bool visit(QmlJS::AST::UiObjectDefinition *ast) override;
+ bool visit(QmlJS::AST::UiObjectBinding *ast) override;
private:
void replaceType(QmlJS::AST::UiQualifiedId *typeId);
diff --git a/src/plugins/qmldesigner/designercore/filemanager/changepropertyvisitor.cpp b/src/plugins/qmldesigner/designercore/filemanager/changepropertyvisitor.cpp
index eadd48dc7f..b6ed184f9d 100644
--- a/src/plugins/qmldesigner/designercore/filemanager/changepropertyvisitor.cpp
+++ b/src/plugins/qmldesigner/designercore/filemanager/changepropertyvisitor.cpp
@@ -113,7 +113,7 @@ void ChangePropertyVisitor::replaceInMembers(UiObjectInitializer *initializer,
break;
// for grouped properties:
} else if (!prefix.isEmpty()) {
- if (UiObjectDefinition *def = cast<UiObjectDefinition *>(member)) {
+ if (auto def = cast<UiObjectDefinition *>(member)) {
if (toString(def->qualifiedTypeNameId) == prefix)
replaceInMembers(def->initializer, suffix);
}
@@ -127,16 +127,16 @@ void ChangePropertyVisitor::replaceMemberValue(UiObjectMember *propertyMember, b
QString replacement = m_value;
int startOffset = -1;
int endOffset = -1;
- if (UiObjectBinding *objectBinding = AST::cast<UiObjectBinding *>(propertyMember)) {
+ if (auto objectBinding = AST::cast<UiObjectBinding *>(propertyMember)) {
startOffset = objectBinding->qualifiedTypeNameId->identifierToken.offset;
endOffset = objectBinding->initializer->rbraceToken.end();
- } else if (UiScriptBinding *scriptBinding = AST::cast<UiScriptBinding *>(propertyMember)) {
+ } else if (auto scriptBinding = AST::cast<UiScriptBinding *>(propertyMember)) {
startOffset = scriptBinding->statement->firstSourceLocation().offset;
endOffset = scriptBinding->statement->lastSourceLocation().end();
- } else if (UiArrayBinding *arrayBinding = AST::cast<UiArrayBinding *>(propertyMember)) {
+ } else if (auto arrayBinding = AST::cast<UiArrayBinding *>(propertyMember)) {
startOffset = arrayBinding->lbracketToken.offset;
endOffset = arrayBinding->rbracketToken.end();
- } else if (UiPublicMember *publicMember = AST::cast<UiPublicMember*>(propertyMember)) {
+ } else if (auto publicMember = AST::cast<UiPublicMember*>(propertyMember)) {
if (publicMember->statement) {
startOffset = publicMember->statement->firstSourceLocation().offset;
if (publicMember->semicolonToken.isValid())
@@ -165,13 +165,13 @@ void ChangePropertyVisitor::replaceMemberValue(UiObjectMember *propertyMember, b
bool ChangePropertyVisitor::isMatchingPropertyMember(const QString &propName,
UiObjectMember *member)
{
- if (UiObjectBinding *objectBinding = AST::cast<UiObjectBinding *>(member))
+ if (auto objectBinding = AST::cast<UiObjectBinding *>(member))
return propName == toString(objectBinding->qualifiedId);
- else if (UiScriptBinding *scriptBinding = AST::cast<UiScriptBinding *>(member))
+ else if (auto scriptBinding = AST::cast<UiScriptBinding *>(member))
return propName == toString(scriptBinding->qualifiedId);
- else if (UiArrayBinding *arrayBinding = AST::cast<UiArrayBinding *>(member))
+ else if (auto arrayBinding = AST::cast<UiArrayBinding *>(member))
return propName == toString(arrayBinding->qualifiedId);
- else if (UiPublicMember *publicMember = AST::cast<UiPublicMember *>(member))
+ else if (auto publicMember = AST::cast<UiPublicMember *>(member))
return propName == publicMember->name;
else
return false;
@@ -192,7 +192,7 @@ void ChangePropertyVisitor::insertIntoArray(QmlJS::AST::UiArrayBinding *ast)
if (!ast)
return;
- UiObjectMember *lastMember = 0;
+ UiObjectMember *lastMember = nullptr;
for (UiArrayMemberList *iter = ast->members; iter; iter = iter->next) {
lastMember = iter->member;
}
diff --git a/src/plugins/qmldesigner/designercore/filemanager/changepropertyvisitor.h b/src/plugins/qmldesigner/designercore/filemanager/changepropertyvisitor.h
index f97eea0a37..d4a9c50a9a 100644
--- a/src/plugins/qmldesigner/designercore/filemanager/changepropertyvisitor.h
+++ b/src/plugins/qmldesigner/designercore/filemanager/changepropertyvisitor.h
@@ -41,8 +41,8 @@ public:
QmlRefactoring::PropertyType propertyType);
protected:
- virtual bool visit(QmlJS::AST::UiObjectDefinition *ast);
- virtual bool visit(QmlJS::AST::UiObjectBinding *ast);
+ bool visit(QmlJS::AST::UiObjectDefinition *ast) override;
+ bool visit(QmlJS::AST::UiObjectBinding *ast) override;
private:
void replaceInMembers(QmlJS::AST::UiObjectInitializer *initializer,
diff --git a/src/plugins/qmldesigner/designercore/filemanager/firstdefinitionfinder.cpp b/src/plugins/qmldesigner/designercore/filemanager/firstdefinitionfinder.cpp
index dec17c5e1b..76ecb59f30 100644
--- a/src/plugins/qmldesigner/designercore/filemanager/firstdefinitionfinder.cpp
+++ b/src/plugins/qmldesigner/designercore/filemanager/firstdefinitionfinder.cpp
@@ -54,7 +54,7 @@ FirstDefinitionFinder::FirstDefinitionFinder(const QString &text):
qint32 FirstDefinitionFinder::operator()(quint32 offset)
{
m_offset = offset;
- m_firstObjectDefinition = 0;
+ m_firstObjectDefinition = nullptr;
QmlJS::AST::Node::accept(m_doc->qmlProgram(), this);
@@ -70,7 +70,7 @@ void FirstDefinitionFinder::extractFirstObjectDefinition(QmlJS::AST::UiObjectIni
return;
for (QmlJS::AST::UiObjectMemberList *iter = ast->members; iter; iter = iter->next) {
- if (QmlJS::AST::UiObjectDefinition *def = QmlJS::AST::cast<QmlJS::AST::UiObjectDefinition*>(iter->member))
+ if (auto def = QmlJS::AST::cast<QmlJS::AST::UiObjectDefinition*>(iter->member))
m_firstObjectDefinition = def;
}
}
diff --git a/src/plugins/qmldesigner/designercore/filemanager/moveobjectbeforeobjectvisitor.cpp b/src/plugins/qmldesigner/designercore/filemanager/moveobjectbeforeobjectvisitor.cpp
index 0ec53a7452..3be5de5bc9 100644
--- a/src/plugins/qmldesigner/designercore/filemanager/moveobjectbeforeobjectvisitor.cpp
+++ b/src/plugins/qmldesigner/designercore/filemanager/moveobjectbeforeobjectvisitor.cpp
@@ -53,8 +53,8 @@ MoveObjectBeforeObjectVisitor::MoveObjectBeforeObjectVisitor(TextModifier &modif
bool MoveObjectBeforeObjectVisitor::operator ()(QmlJS::AST::UiProgram *ast)
{
- movingObject = 0;
- beforeObject = 0;
+ movingObject = nullptr;
+ beforeObject = nullptr;
movingObjectParents.clear();
QMLRewriter::operator ()(ast);
@@ -102,14 +102,14 @@ void MoveObjectBeforeObjectVisitor::doMove()
TextModifier::MoveInfo moveInfo;
QmlJS::AST::Node *parent = movingObjectParent();
- QmlJS::AST::UiArrayMemberList *arrayMember = 0, *otherArrayMember = 0;
+ QmlJS::AST::UiArrayMemberList *arrayMember = nullptr, *otherArrayMember = nullptr;
QString separator;
if (!inDefaultProperty) {
- QmlJS::AST::UiArrayBinding *initializer = QmlJS::AST::cast<QmlJS::AST::UiArrayBinding*>(parent);
+ auto initializer = QmlJS::AST::cast<QmlJS::AST::UiArrayBinding*>(parent);
Q_ASSERT(initializer);
- otherArrayMember = 0;
+ otherArrayMember = nullptr;
for (QmlJS::AST::UiArrayMemberList *cur = initializer->members; cur; cur = cur->next) {
if (cur->member == movingObject) {
arrayMember = cur;
@@ -166,7 +166,7 @@ QmlJS::AST::Node *MoveObjectBeforeObjectVisitor::movingObjectParent() const
if (movingObjectParents.size() > 1)
return movingObjectParents.at(movingObjectParents.size() - 2);
else
- return 0;
+ return nullptr;
}
QmlJS::AST::SourceLocation MoveObjectBeforeObjectVisitor::lastParentLocation() const
@@ -174,9 +174,9 @@ QmlJS::AST::SourceLocation MoveObjectBeforeObjectVisitor::lastParentLocation() c
dump(movingObjectParents);
QmlJS::AST::Node *parent = movingObjectParent();
- if (QmlJS::AST::UiObjectInitializer *initializer = QmlJS::AST::cast<QmlJS::AST::UiObjectInitializer*>(parent))
+ if (auto initializer = QmlJS::AST::cast<QmlJS::AST::UiObjectInitializer*>(parent))
return initializer->rbraceToken;
- else if (QmlJS::AST::UiArrayBinding *initializer = QmlJS::AST::cast<QmlJS::AST::UiArrayBinding*>(parent))
+ else if (auto initializer = QmlJS::AST::cast<QmlJS::AST::UiArrayBinding*>(parent))
return initializer->rbracketToken;
else
return QmlJS::AST::SourceLocation();
diff --git a/src/plugins/qmldesigner/designercore/filemanager/moveobjectbeforeobjectvisitor.h b/src/plugins/qmldesigner/designercore/filemanager/moveobjectbeforeobjectvisitor.h
index 7b5f39d175..922d9fe40a 100644
--- a/src/plugins/qmldesigner/designercore/filemanager/moveobjectbeforeobjectvisitor.h
+++ b/src/plugins/qmldesigner/designercore/filemanager/moveobjectbeforeobjectvisitor.h
@@ -43,17 +43,17 @@ public:
quint32 beforeObjectLocation,
bool inDefaultProperty);
- bool operator ()(QmlJS::AST::UiProgram *ast);
+ bool operator ()(QmlJS::AST::UiProgram *ast) override;
protected:
- virtual bool preVisit(QmlJS::AST::Node *ast);
- virtual void postVisit(QmlJS::AST::Node *ast);
+ bool preVisit(QmlJS::AST::Node *ast) override;
+ void postVisit(QmlJS::AST::Node *ast) override;
- virtual bool visit(QmlJS::AST::UiObjectDefinition *ast);
+ bool visit(QmlJS::AST::UiObjectDefinition *ast) override;
private:
bool foundEverything() const
- { return movingObject != 0 && !movingObjectParents.isEmpty() && (toEnd || beforeObject != 0); }
+ { return movingObject != nullptr && !movingObjectParents.isEmpty() && (toEnd || beforeObject != nullptr); }
void doMove();
diff --git a/src/plugins/qmldesigner/designercore/filemanager/moveobjectvisitor.cpp b/src/plugins/qmldesigner/designercore/filemanager/moveobjectvisitor.cpp
index b0fe35fc90..e0e820ac8f 100644
--- a/src/plugins/qmldesigner/designercore/filemanager/moveobjectvisitor.cpp
+++ b/src/plugins/qmldesigner/designercore/filemanager/moveobjectvisitor.cpp
@@ -53,7 +53,7 @@ public:
{}
protected:
- virtual bool visit(UiObjectBinding *ast)
+ bool visit(UiObjectBinding *ast) override
{
if (didRewriting())
return false;
@@ -64,7 +64,7 @@ protected:
return !didRewriting();
}
- virtual bool visit(UiObjectDefinition *ast)
+ bool visit(UiObjectDefinition *ast) override
{
if (didRewriting())
return false;
@@ -100,7 +100,7 @@ private:
for (UiObjectMemberList *iter = ast->members; iter; iter = iter->next) {
UiObjectMember *member = iter->member;
- if (UiArrayBinding *arrayBinding = cast<UiArrayBinding*>(member)) {
+ if (auto arrayBinding = cast<UiArrayBinding*>(member)) {
if (toString(arrayBinding->qualifiedId) == QString::fromUtf8(targetPropertyName)) {
appendToArray(arrayBinding);
@@ -128,7 +128,7 @@ private:
void appendToArray(UiArrayBinding *ast)
{
- UiObjectMember *lastMember = 0;
+ UiObjectMember *lastMember = nullptr;
for (UiArrayMemberList *iter = ast->members; iter; iter = iter->next) {
if (iter->member)
@@ -179,7 +179,7 @@ bool MoveObjectVisitor::visit(UiArrayBinding *ast)
if (didRewriting())
return false;
- UiArrayMemberList *currentMember = 0;
+ UiArrayMemberList *currentMember = nullptr;
for (UiArrayMemberList *it = ast->members; it; it = it->next) {
if (it->member->firstSourceLocation().offset == objectLocation) {
diff --git a/src/plugins/qmldesigner/designercore/filemanager/moveobjectvisitor.h b/src/plugins/qmldesigner/designercore/filemanager/moveobjectvisitor.h
index cc6d44825d..b3b8b1ab1c 100644
--- a/src/plugins/qmldesigner/designercore/filemanager/moveobjectvisitor.h
+++ b/src/plugins/qmldesigner/designercore/filemanager/moveobjectvisitor.h
@@ -40,12 +40,12 @@ public:
quint32 targetParentObjectLocation,
const PropertyNameList &propertyOrder);
- bool operator ()(QmlJS::AST::UiProgram *ast);
+ bool operator ()(QmlJS::AST::UiProgram *ast) override;
protected:
- virtual bool visit(QmlJS::AST::UiArrayBinding *ast);
- virtual bool visit(QmlJS::AST::UiObjectBinding *ast);
- virtual bool visit(QmlJS::AST::UiObjectDefinition *ast);
+ bool visit(QmlJS::AST::UiArrayBinding *ast) override;
+ bool visit(QmlJS::AST::UiObjectBinding *ast) override;
+ bool visit(QmlJS::AST::UiObjectDefinition *ast) override;
private:
void doMove(const TextModifier::MoveInfo &moveInfo);
diff --git a/src/plugins/qmldesigner/designercore/filemanager/qmlrewriter.cpp b/src/plugins/qmldesigner/designercore/filemanager/qmlrewriter.cpp
index 6247f98697..b5388afc59 100644
--- a/src/plugins/qmldesigner/designercore/filemanager/qmlrewriter.cpp
+++ b/src/plugins/qmldesigner/designercore/filemanager/qmlrewriter.cpp
@@ -153,7 +153,7 @@ QString QMLRewriter::removeIndentation(const QString &text, unsigned depth)
QmlJS::AST::SourceLocation QMLRewriter::calculateLocation(QmlJS::AST::UiQualifiedId *id)
{
- Q_ASSERT(id != 0);
+ Q_ASSERT(id != nullptr);
const QmlJS::AST::SourceLocation startLocation = id->identifierToken;
@@ -169,7 +169,7 @@ QmlJS::AST::SourceLocation QMLRewriter::calculateLocation(QmlJS::AST::UiQualifie
bool QMLRewriter::isMissingSemicolon(QmlJS::AST::UiObjectMember *member)
{
- QmlJS::AST::UiScriptBinding *binding = QmlJS::AST::cast<QmlJS::AST::UiScriptBinding *>(member);
+ auto binding = QmlJS::AST::cast<QmlJS::AST::UiScriptBinding *>(member);
if (binding)
return isMissingSemicolon(binding->statement);
else
@@ -178,14 +178,14 @@ bool QMLRewriter::isMissingSemicolon(QmlJS::AST::UiObjectMember *member)
bool QMLRewriter::isMissingSemicolon(QmlJS::AST::Statement *stmt)
{
- if (QmlJS::AST::ExpressionStatement *eStmt = QmlJS::AST::cast<QmlJS::AST::ExpressionStatement *>(stmt)) {
+ if (auto eStmt = QmlJS::AST::cast<QmlJS::AST::ExpressionStatement *>(stmt)) {
return !eStmt->semicolonToken.isValid();
- } else if (QmlJS::AST::IfStatement *iStmt = QmlJS::AST::cast<QmlJS::AST::IfStatement *>(stmt)) {
+ } else if (auto iStmt = QmlJS::AST::cast<QmlJS::AST::IfStatement *>(stmt)) {
if (iStmt->elseToken.isValid())
return isMissingSemicolon(iStmt->ko);
else
return isMissingSemicolon(iStmt->ok);
- } else if (QmlJS::AST::DebuggerStatement *dStmt = QmlJS::AST::cast<QmlJS::AST::DebuggerStatement *>(stmt)) {
+ } else if (auto dStmt = QmlJS::AST::cast<QmlJS::AST::DebuggerStatement *>(stmt)) {
return !dStmt->semicolonToken.isValid();
} else {
return false;
@@ -263,8 +263,8 @@ QmlJS::AST::UiObjectMemberList *QMLRewriter::searchMemberToInsertAfter(QmlJS::AS
{
const int objectDefinitionInsertionPoint = propertyOrder.indexOf(PropertyName()); // XXX ????
- QmlJS::AST::UiObjectMemberList *lastObjectDef = 0;
- QmlJS::AST::UiObjectMemberList *lastNonObjectDef = 0;
+ QmlJS::AST::UiObjectMemberList *lastObjectDef = nullptr;
+ QmlJS::AST::UiObjectMemberList *lastNonObjectDef = nullptr;
for (QmlJS::AST::UiObjectMemberList *iter = members; iter; iter = iter->next) {
QmlJS::AST::UiObjectMember *member = iter->member;
@@ -272,11 +272,11 @@ QmlJS::AST::UiObjectMemberList *QMLRewriter::searchMemberToInsertAfter(QmlJS::AS
if (QmlJS::AST::cast<QmlJS::AST::UiObjectDefinition*>(member))
lastObjectDef = iter;
- else if (QmlJS::AST::UiArrayBinding *arrayBinding = QmlJS::AST::cast<QmlJS::AST::UiArrayBinding*>(member))
+ else if (auto arrayBinding = QmlJS::AST::cast<QmlJS::AST::UiArrayBinding*>(member))
idx = propertyOrder.indexOf(toString(arrayBinding->qualifiedId).toUtf8());
- else if (QmlJS::AST::UiObjectBinding *objectBinding = QmlJS::AST::cast<QmlJS::AST::UiObjectBinding*>(member))
+ else if (auto objectBinding = QmlJS::AST::cast<QmlJS::AST::UiObjectBinding*>(member))
idx = propertyOrder.indexOf(toString(objectBinding->qualifiedId).toUtf8());
- else if (QmlJS::AST::UiScriptBinding *scriptBinding = QmlJS::AST::cast<QmlJS::AST::UiScriptBinding*>(member))
+ else if (auto scriptBinding = QmlJS::AST::cast<QmlJS::AST::UiScriptBinding*>(member))
idx = propertyOrder.indexOf(toString(scriptBinding->qualifiedId).toUtf8());
else if (QmlJS::AST::cast<QmlJS::AST::UiPublicMember*>(member))
idx = propertyOrder.indexOf("property");
@@ -297,20 +297,20 @@ QmlJS::AST::UiObjectMemberList *QMLRewriter::searchMemberToInsertAfter(QmlJS::AS
const QmlDesigner::PropertyNameList &propertyOrder)
{
if (!members)
- return 0; // empty members
+ return nullptr; // empty members
QHash<QString, QmlJS::AST::UiObjectMemberList *> orderedMembers;
for (QmlJS::AST::UiObjectMemberList *iter = members; iter; iter = iter->next) {
QmlJS::AST::UiObjectMember *member = iter->member;
- if (QmlJS::AST::UiArrayBinding *arrayBinding = QmlJS::AST::cast<QmlJS::AST::UiArrayBinding*>(member))
+ if (auto arrayBinding = QmlJS::AST::cast<QmlJS::AST::UiArrayBinding*>(member))
orderedMembers[toString(arrayBinding->qualifiedId)] = iter;
- else if (QmlJS::AST::UiObjectBinding *objectBinding = QmlJS::AST::cast<QmlJS::AST::UiObjectBinding*>(member))
+ else if (auto objectBinding = QmlJS::AST::cast<QmlJS::AST::UiObjectBinding*>(member))
orderedMembers[toString(objectBinding->qualifiedId)] = iter;
else if (QmlJS::AST::cast<QmlJS::AST::UiObjectDefinition*>(member))
orderedMembers[QString::null] = iter;
- else if (QmlJS::AST::UiScriptBinding *scriptBinding = QmlJS::AST::cast<QmlJS::AST::UiScriptBinding*>(member))
+ else if (auto scriptBinding = QmlJS::AST::cast<QmlJS::AST::UiScriptBinding*>(member))
orderedMembers[toString(scriptBinding->qualifiedId)] = iter;
else if (QmlJS::AST::cast<QmlJS::AST::UiPublicMember*>(member))
orderedMembers[QStringLiteral("property")] = iter;
@@ -325,11 +325,11 @@ QmlJS::AST::UiObjectMemberList *QMLRewriter::searchMemberToInsertAfter(QmlJS::AS
for (; idx > 0; --idx) {
const QString prop = QString::fromLatin1(propertyOrder.at(idx - 1));
QmlJS::AST::UiObjectMemberList *candidate = orderedMembers.value(prop, 0);
- if (candidate != 0)
+ if (candidate != nullptr)
return candidate;
}
- return 0;
+ return nullptr;
}
void QMLRewriter::dump(const ASTPath &path)
diff --git a/src/plugins/qmldesigner/designercore/filemanager/qmlrewriter.h b/src/plugins/qmldesigner/designercore/filemanager/qmlrewriter.h
index af54ba8c13..062710ef4c 100644
--- a/src/plugins/qmldesigner/designercore/filemanager/qmlrewriter.h
+++ b/src/plugins/qmldesigner/designercore/filemanager/qmlrewriter.h
@@ -39,7 +39,7 @@ namespace Internal {
class QMLRewriter: protected QmlJS::AST::Visitor
{
public:
- typedef QStack<QmlJS::AST::Node *> ASTPath;
+ using ASTPath = QStack<QmlJS::AST::Node *>;
public:
QMLRewriter(QmlDesigner::TextModifier &textModifier);
diff --git a/src/plugins/qmldesigner/designercore/filemanager/removepropertyvisitor.cpp b/src/plugins/qmldesigner/designercore/filemanager/removepropertyvisitor.cpp
index 20b0e4342b..a61acd0254 100644
--- a/src/plugins/qmldesigner/designercore/filemanager/removepropertyvisitor.cpp
+++ b/src/plugins/qmldesigner/designercore/filemanager/removepropertyvisitor.cpp
@@ -81,7 +81,7 @@ void RemovePropertyVisitor::removeFrom(QmlJS::AST::UiObjectInitializer *ast)
removeMember(member);
// check for grouped properties:
} else if (!prefix.isEmpty()) {
- if (QmlJS::AST::UiObjectDefinition *def = QmlJS::AST::cast<QmlJS::AST::UiObjectDefinition *>(member)) {
+ if (auto def = QmlJS::AST::cast<QmlJS::AST::UiObjectDefinition *>(member)) {
if (toString(def->qualifiedTypeNameId) == prefix)
removeGroupedProperty(def);
}
@@ -98,7 +98,7 @@ void RemovePropertyVisitor::removeGroupedProperty(QmlJS::AST::UiObjectDefinition
const QString propName = propertyName.mid(dotIdx + 1);
- QmlJS::AST::UiObjectMember *wanted = 0;
+ QmlJS::AST::UiObjectMember *wanted = nullptr;
unsigned memberCount = 0;
for (QmlJS::AST::UiObjectMemberList *it = ast->initializer->members; it; it = it->next) {
++memberCount;
@@ -131,13 +131,13 @@ void RemovePropertyVisitor::removeMember(QmlJS::AST::UiObjectMember *member)
// FIXME: duplicate code in the QmlJS::Rewriter class, remove this
bool RemovePropertyVisitor::memberNameMatchesPropertyName(const QString &propertyName, QmlJS::AST::UiObjectMember *ast)
{
- if (QmlJS::AST::UiPublicMember *publicMember = QmlJS::AST::cast<QmlJS::AST::UiPublicMember*>(ast))
+ if (auto publicMember = QmlJS::AST::cast<QmlJS::AST::UiPublicMember*>(ast))
return publicMember->name == propertyName;
- else if (QmlJS::AST::UiObjectBinding *objectBinding = QmlJS::AST::cast<QmlJS::AST::UiObjectBinding*>(ast))
+ else if (auto objectBinding = QmlJS::AST::cast<QmlJS::AST::UiObjectBinding*>(ast))
return toString(objectBinding->qualifiedId) == propertyName;
- else if (QmlJS::AST::UiScriptBinding *scriptBinding = QmlJS::AST::cast<QmlJS::AST::UiScriptBinding*>(ast))
+ else if (auto scriptBinding = QmlJS::AST::cast<QmlJS::AST::UiScriptBinding*>(ast))
return toString(scriptBinding->qualifiedId) == propertyName;
- else if (QmlJS::AST::UiArrayBinding *arrayBinding = QmlJS::AST::cast<QmlJS::AST::UiArrayBinding*>(ast))
+ else if (auto arrayBinding = QmlJS::AST::cast<QmlJS::AST::UiArrayBinding*>(ast))
return toString(arrayBinding->qualifiedId) == propertyName;
else
return false;
diff --git a/src/plugins/qmldesigner/designercore/filemanager/removepropertyvisitor.h b/src/plugins/qmldesigner/designercore/filemanager/removepropertyvisitor.h
index 7eb8b53fd9..61d5f86241 100644
--- a/src/plugins/qmldesigner/designercore/filemanager/removepropertyvisitor.h
+++ b/src/plugins/qmldesigner/designercore/filemanager/removepropertyvisitor.h
@@ -40,8 +40,8 @@ public:
const QString &name);
protected:
- virtual bool visit(QmlJS::AST::UiObjectBinding *ast);
- virtual bool visit(QmlJS::AST::UiObjectDefinition *ast);
+ bool visit(QmlJS::AST::UiObjectBinding *ast) override;
+ bool visit(QmlJS::AST::UiObjectDefinition *ast) override;
private:
void removeFrom(QmlJS::AST::UiObjectInitializer *ast);
diff --git a/src/plugins/qmldesigner/designercore/filemanager/removeuiobjectmembervisitor.cpp b/src/plugins/qmldesigner/designercore/filemanager/removeuiobjectmembervisitor.cpp
index 06fb1b3087..a7036b25c7 100644
--- a/src/plugins/qmldesigner/designercore/filemanager/removeuiobjectmembervisitor.cpp
+++ b/src/plugins/qmldesigner/designercore/filemanager/removeuiobjectmembervisitor.cpp
@@ -95,7 +95,7 @@ QmlJS::AST::UiArrayBinding *RemoveUIObjectMemberVisitor::containingArray() const
return QmlJS::AST::cast<QmlJS::AST::UiArrayBinding*>(parents[parents.size() - 3]);
}
- return 0;
+ return nullptr;
}
// FIXME: duplicate code in the QmlJS::Rewriter class, remove this
@@ -104,7 +104,7 @@ void RemoveUIObjectMemberVisitor::extendToLeadingOrTrailingComma(QmlJS::AST::UiA
int &start,
int &end) const
{
- QmlJS::AST::UiArrayMemberList *currentMember = 0;
+ QmlJS::AST::UiArrayMemberList *currentMember = nullptr;
for (QmlJS::AST::UiArrayMemberList *it = parentArray->members; it; it = it->next) {
if (it->member == ast) {
currentMember = it;
diff --git a/src/plugins/qmldesigner/designercore/filemanager/removeuiobjectmembervisitor.h b/src/plugins/qmldesigner/designercore/filemanager/removeuiobjectmembervisitor.h
index 6fc4d1d0b3..6f92e927ce 100644
--- a/src/plugins/qmldesigner/designercore/filemanager/removeuiobjectmembervisitor.h
+++ b/src/plugins/qmldesigner/designercore/filemanager/removeuiobjectmembervisitor.h
@@ -39,15 +39,15 @@ public:
quint32 objectLocation);
protected:
- virtual bool preVisit(QmlJS::AST::Node *ast);
- virtual void postVisit(QmlJS::AST::Node *);
+ bool preVisit(QmlJS::AST::Node *ast) override;
+ void postVisit(QmlJS::AST::Node *) override;
- virtual bool visit(QmlJS::AST::UiPublicMember *ast);
- virtual bool visit(QmlJS::AST::UiObjectDefinition *ast);
- virtual bool visit(QmlJS::AST::UiSourceElement *ast);
- virtual bool visit(QmlJS::AST::UiObjectBinding *ast);
- virtual bool visit(QmlJS::AST::UiScriptBinding *ast);
- virtual bool visit(QmlJS::AST::UiArrayBinding *ast);
+ bool visit(QmlJS::AST::UiPublicMember *ast) override;
+ bool visit(QmlJS::AST::UiObjectDefinition *ast) override;
+ bool visit(QmlJS::AST::UiSourceElement *ast) override;
+ bool visit(QmlJS::AST::UiObjectBinding *ast) override;
+ bool visit(QmlJS::AST::UiScriptBinding *ast) override;
+ bool visit(QmlJS::AST::UiArrayBinding *ast) override;
private:
bool visitObjectMember(QmlJS::AST::UiObjectMember *ast);
diff --git a/src/plugins/qmldesigner/designercore/include/abstractproperty.h b/src/plugins/qmldesigner/designercore/include/abstractproperty.h
index 65f3f666be..75cb024ccd 100644
--- a/src/plugins/qmldesigner/designercore/include/abstractproperty.h
+++ b/src/plugins/qmldesigner/designercore/include/abstractproperty.h
@@ -38,9 +38,9 @@ namespace QmlDesigner {
class InternalNode;
class InternalProperty;
- typedef QSharedPointer<InternalNode> InternalNodePointer;
- typedef QSharedPointer<InternalProperty> InternalPropertyPointer;
- typedef QWeakPointer<InternalNode> InternalNodeWeakPointer;
+ using InternalNodePointer = QSharedPointer<InternalNode>;
+ using InternalPropertyPointer = QSharedPointer<InternalProperty>;
+ using InternalNodeWeakPointer = QWeakPointer<InternalNode>;
}
class Model;
diff --git a/src/plugins/qmldesigner/designercore/include/abstractview.h b/src/plugins/qmldesigner/designercore/include/abstractview.h
index 610d137acc..4eb4f05666 100644
--- a/src/plugins/qmldesigner/designercore/include/abstractview.h
+++ b/src/plugins/qmldesigner/designercore/include/abstractview.h
@@ -47,8 +47,8 @@ QT_END_NAMESPACE
namespace QmlDesigner {
namespace Internal {
class InternalNode;
- typedef QSharedPointer<InternalNode> InternalNodePointer;
- typedef QWeakPointer<InternalNode> InternalNodeWeakPointer;
+ using InternalNodePointer = QSharedPointer<InternalNode>;
+ using InternalNodeWeakPointer = QWeakPointer<InternalNode>;
}
}
@@ -69,13 +69,11 @@ class WidgetInfo {
public:
class ToolBarWidgetFactoryInterface {
public:
- ToolBarWidgetFactoryInterface()
- {}
+ ToolBarWidgetFactoryInterface() = default;
virtual QList<QToolButton*> createToolBarWidgets() = 0;
- virtual ~ToolBarWidgetFactoryInterface()
- {}
+ virtual ~ToolBarWidgetFactoryInterface() = default;
};
template <class T>
diff --git a/src/plugins/qmldesigner/designercore/include/forwardview.h b/src/plugins/qmldesigner/designercore/include/forwardview.h
index d317bec793..8d4406b6d2 100644
--- a/src/plugins/qmldesigner/designercore/include/forwardview.h
+++ b/src/plugins/qmldesigner/designercore/include/forwardview.h
@@ -40,37 +40,37 @@ template <class ViewType>
class ForwardView : public AbstractView
{
public:
- typedef QPointer<ForwardView> Pointer;
- typedef typename ViewType::Pointer ViewTypePointer;
+ using Pointer = QPointer<ForwardView<ViewType> >;
+ using ViewTypePointer = typename ViewType::Pointer;
ForwardView(QObject *parent);
- void modelAttached(Model *model);
- void modelAboutToBeDetached(Model *model);
-
- void nodeCreated(const ModelNode &createdNode);
- void nodeAboutToBeRemoved(const ModelNode &removedNode);
- void nodeRemoved(const ModelNode &removedNode, const NodeAbstractProperty &parentProperty, PropertyChangeFlags propertyChange);
- void nodeReparented(const ModelNode &node, const NodeAbstractProperty &newPropertyParent, const NodeAbstractProperty &oldPropertyParent, AbstractView::PropertyChangeFlags propertyChange);
- void nodeIdChanged(const ModelNode& node, const QString& newId, const QString& oldId);
- void propertiesAboutToBeRemoved(const QList<AbstractProperty>& propertyList);
- void propertiesRemoved(const QList<AbstractProperty>& propertyList);
- void variantPropertiesChanged(const QList<VariantProperty>& propertyList, PropertyChangeFlags propertyChange);
- void bindingPropertiesChanged(const QList<BindingProperty>& propertyList, PropertyChangeFlags propertyChange);
- void signalHandlerPropertiesChanged(const QVector<SignalHandlerProperty>& propertyList,PropertyChangeFlags propertyChange);
- void rootNodeTypeChanged(const QString &type, int majorVersion, int minorVersion);
+ void modelAttached(Model *model) override;
+ void modelAboutToBeDetached(Model *model) override;
+
+ void nodeCreated(const ModelNode &createdNode) override;
+ void nodeAboutToBeRemoved(const ModelNode &removedNode) override;
+ void nodeRemoved(const ModelNode &removedNode, const NodeAbstractProperty &parentProperty, PropertyChangeFlags propertyChange) override;
+ void nodeReparented(const ModelNode &node, const NodeAbstractProperty &newPropertyParent, const NodeAbstractProperty &oldPropertyParent, AbstractView::PropertyChangeFlags propertyChange) override;
+ void nodeIdChanged(const ModelNode& node, const QString& newId, const QString& oldId) override;
+ void propertiesAboutToBeRemoved(const QList<AbstractProperty>& propertyList) override;
+ void propertiesRemoved(const QList<AbstractProperty>& propertyList) override;
+ void variantPropertiesChanged(const QList<VariantProperty>& propertyList, PropertyChangeFlags propertyChange) override;
+ void bindingPropertiesChanged(const QList<BindingProperty>& propertyList, PropertyChangeFlags propertyChange) override;
+ void signalHandlerPropertiesChanged(const QVector<SignalHandlerProperty>& propertyList,PropertyChangeFlags propertyChange) override;
+ void rootNodeTypeChanged(const QString &type, int majorVersion, int minorVersion) override;
void selectedNodesChanged(const QList<ModelNode> &selectedNodeList,
- const QList<ModelNode> &lastSelectedNodeList);
+ const QList<ModelNode> &lastSelectedNodeList) override;
- void fileUrlChanged(const QUrl &oldUrl, const QUrl &newUrl);
+ void fileUrlChanged(const QUrl &oldUrl, const QUrl &newUrl) override;
- void nodeOrderChanged(const NodeListProperty &listProperty, const ModelNode &movedNode, int oldIndex);
- void importsChanged(const QList<Import> &addedImports, const QList<Import> &removedImports);
+ void nodeOrderChanged(const NodeListProperty &listProperty, const ModelNode &movedNode, int oldIndex) override;
+ void importsChanged(const QList<Import> &addedImports, const QList<Import> &removedImports) override;
- void auxiliaryDataChanged(const ModelNode &node, const PropertyName &name, const QVariant &data);
+ void auxiliaryDataChanged(const ModelNode &node, const PropertyName &name, const QVariant &data) override;
- void scriptFunctionsChanged(const ModelNode &node, const QStringList &scriptFunctionList);
+ void scriptFunctionsChanged(const ModelNode &node, const QStringList &scriptFunctionList) override;
protected:
void appendView(ViewType *view);
diff --git a/src/plugins/qmldesigner/designercore/include/itemlibraryinfo.h b/src/plugins/qmldesigner/designercore/include/itemlibraryinfo.h
index 9cca2ceb7e..aed724e50f 100644
--- a/src/plugins/qmldesigner/designercore/include/itemlibraryinfo.h
+++ b/src/plugins/qmldesigner/designercore/include/itemlibraryinfo.h
@@ -71,7 +71,7 @@ public:
ItemLibraryEntry(const ItemLibraryEntry &other);
ItemLibraryEntry& operator=(const ItemLibraryEntry &other);
- typedef QmlDesigner::PropertyContainer Property;
+ using Property = QmlDesigner::PropertyContainer;
QList<Property> properties() const;
QHash<QString, QString> hints() const;
diff --git a/src/plugins/qmldesigner/designercore/include/iwidgetplugin.h b/src/plugins/qmldesigner/designercore/include/iwidgetplugin.h
index f85ad1e144..4b27e104af 100644
--- a/src/plugins/qmldesigner/designercore/include/iwidgetplugin.h
+++ b/src/plugins/qmldesigner/designercore/include/iwidgetplugin.h
@@ -34,7 +34,7 @@ namespace QmlDesigner {
class IWidgetPlugin
{
public:
- virtual ~IWidgetPlugin() {}
+ virtual ~IWidgetPlugin() = default;
virtual QString metaInfo() const = 0;
virtual QString pluginName() const = 0;
diff --git a/src/plugins/qmldesigner/designercore/include/metainfo.h b/src/plugins/qmldesigner/designercore/include/metainfo.h
index 90d94c324a..cc4e8c1ed0 100644
--- a/src/plugins/qmldesigner/designercore/include/metainfo.h
+++ b/src/plugins/qmldesigner/designercore/include/metainfo.h
@@ -43,7 +43,7 @@ namespace Internal {
class MetaInfoPrivate;
class ModelPrivate;
class SubComponentManagerPrivate;
- typedef QSharedPointer<MetaInfoPrivate> MetaInfoPrivatePointer;
+ using MetaInfoPrivatePointer = QSharedPointer<MetaInfoPrivate>;
}
QMLDESIGNERCORE_EXPORT bool operator==(const MetaInfo &first, const MetaInfo &second);
diff --git a/src/plugins/qmldesigner/designercore/include/model.h b/src/plugins/qmldesigner/designercore/include/model.h
index 2f07c2a3d3..efa6731d85 100644
--- a/src/plugins/qmldesigner/designercore/include/model.h
+++ b/src/plugins/qmldesigner/designercore/include/model.h
@@ -59,7 +59,7 @@ class RewriterView;
class NodeInstanceView;
class TextModifier;
-typedef QList<QPair<PropertyName, QVariant> > PropertyListType;
+using PropertyListType = QList<QPair<PropertyName, QVariant> >;
class QMLDESIGNERCORE_EXPORT Model : public QObject
{
diff --git a/src/plugins/qmldesigner/designercore/include/modelnode.h b/src/plugins/qmldesigner/designercore/include/modelnode.h
index 0f07221fab..c48f079204 100644
--- a/src/plugins/qmldesigner/designercore/include/modelnode.h
+++ b/src/plugins/qmldesigner/designercore/include/modelnode.h
@@ -42,9 +42,9 @@ namespace Internal {
class InternalNode;
class InternalProperty;
- typedef QSharedPointer<InternalNode> InternalNodePointer;
- typedef QSharedPointer<InternalProperty> InternalPropertyPointer;
- typedef QWeakPointer<InternalNode> InternalNodeWeakPointer;
+ using InternalNodePointer = QSharedPointer<InternalNode>;
+ using InternalPropertyPointer = QSharedPointer<InternalProperty>;
+ using InternalNodeWeakPointer = QWeakPointer<InternalNode>;
}
class NodeMetaInfo;
class AbstractProperty;
@@ -60,7 +60,7 @@ class ModelNode;
QMLDESIGNERCORE_EXPORT QList<Internal::InternalNodePointer> toInternalNodeList(const QList<ModelNode> &nodeList);
-typedef QList<QPair<PropertyName, QVariant> > PropertyListType;
+using PropertyListType = QList<QPair<PropertyName, QVariant> >;
class QMLDESIGNERCORE_EXPORT ModelNode
{
diff --git a/src/plugins/qmldesigner/designercore/include/nodeabstractproperty.h b/src/plugins/qmldesigner/designercore/include/nodeabstractproperty.h
index fa0460f771..1386b4265e 100644
--- a/src/plugins/qmldesigner/designercore/include/nodeabstractproperty.h
+++ b/src/plugins/qmldesigner/designercore/include/nodeabstractproperty.h
@@ -31,7 +31,7 @@ namespace QmlDesigner {
namespace Internal {
class InternalNodeAbstractProperty;
- typedef QSharedPointer<InternalNodeAbstractProperty> InternalNodeAbstractPropertyPointer;
+ using InternalNodeAbstractPropertyPointer = QSharedPointer<InternalNodeAbstractProperty>;
}
class QMLDESIGNERCORE_EXPORT NodeAbstractProperty : public AbstractProperty
diff --git a/src/plugins/qmldesigner/designercore/include/nodeanchors.h b/src/plugins/qmldesigner/designercore/include/nodeanchors.h
index efa20cc1a3..cb791f76c3 100644
--- a/src/plugins/qmldesigner/designercore/include/nodeanchors.h
+++ b/src/plugins/qmldesigner/designercore/include/nodeanchors.h
@@ -38,11 +38,11 @@ namespace QmlDesigner {
namespace Internal {
class InternalNode;
- typedef QSharedPointer<InternalNode> InternalNodePointer;
- typedef QWeakPointer<InternalNode> InternalNodeWeakPointer;
+ using InternalNodePointer = QSharedPointer<InternalNode>;
+ using InternalNodeWeakPointer = QWeakPointer<InternalNode>;
class InternalNodeState;
- typedef QSharedPointer<InternalNodeState> InternalNodeStatePointer;
+ using InternalNodeStatePointer = QSharedPointer<InternalNodeState>;
class TextToModelMerger;
}
diff --git a/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h b/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h
index 12f5430cd6..c0e0b41537 100644
--- a/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h
+++ b/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h
@@ -75,7 +75,7 @@ class QMLDESIGNERCORE_EXPORT NodeInstanceView : public AbstractView, public Node
friend class NodeInstance;
public:
- typedef QWeakPointer<NodeInstanceView> Pointer;
+ using Pointer = QWeakPointer<NodeInstanceView>;
explicit NodeInstanceView(QObject *parent = nullptr, NodeInstanceServerInterface::RunModus runModus = NodeInstanceServerInterface::NormalModus);
~NodeInstanceView() override;
diff --git a/src/plugins/qmldesigner/designercore/include/nodelistproperty.h b/src/plugins/qmldesigner/designercore/include/nodelistproperty.h
index 94af238bef..dc1967efec 100644
--- a/src/plugins/qmldesigner/designercore/include/nodelistproperty.h
+++ b/src/plugins/qmldesigner/designercore/include/nodelistproperty.h
@@ -36,7 +36,7 @@ namespace QmlDesigner {
namespace Internal {
class ModelPrivate;
class InternalNodeListProperty;
- typedef QSharedPointer<InternalNodeListProperty> InternalNodeListPropertyPointer;
+ using InternalNodeListPropertyPointer = QSharedPointer<InternalNodeListProperty>;
}
diff --git a/src/plugins/qmldesigner/designercore/include/nodemetainfo.h b/src/plugins/qmldesigner/designercore/include/nodemetainfo.h
index 89b62939a3..5d2d171ae7 100644
--- a/src/plugins/qmldesigner/designercore/include/nodemetainfo.h
+++ b/src/plugins/qmldesigner/designercore/include/nodemetainfo.h
@@ -54,7 +54,7 @@ class QMLDESIGNERCORE_EXPORT NodeMetaInfo
{
public:
NodeMetaInfo();
- NodeMetaInfo(Model *model, TypeName type, int maj, int min);
+ NodeMetaInfo(Model *model, const TypeName &type, int maj, int min);
~NodeMetaInfo();
diff --git a/src/plugins/qmldesigner/designercore/include/qmldesignercorelib_global.h b/src/plugins/qmldesigner/designercore/include/qmldesignercorelib_global.h
index 8362c39d44..0872c547c8 100644
--- a/src/plugins/qmldesigner/designercore/include/qmldesignercorelib_global.h
+++ b/src/plugins/qmldesigner/designercore/include/qmldesignercorelib_global.h
@@ -36,11 +36,11 @@
# define QMLDESIGNERCORE_EXPORT Q_DECL_IMPORT
#endif
namespace QmlDesigner {
-typedef QByteArray PropertyName;
-typedef QList<PropertyName> PropertyNameList;
-typedef QByteArray TypeName;
-typedef QList<PropertyName> PropertyTypeList;
-typedef QByteArray IdName;
+using PropertyName = QByteArray;
+using PropertyNameList = QList<PropertyName>;
+using TypeName = QByteArray;
+using PropertyTypeList = QList<PropertyName>;
+using IdName = QByteArray;
enum AnchorLineType {
AnchorLineInvalid = 0x0,
diff --git a/src/plugins/qmldesigner/designercore/include/textmodifier.h b/src/plugins/qmldesigner/designercore/include/textmodifier.h
index 150545e7e8..617d0b9b7b 100644
--- a/src/plugins/qmldesigner/designercore/include/textmodifier.h
+++ b/src/plugins/qmldesigner/designercore/include/textmodifier.h
@@ -58,7 +58,7 @@ public:
};
public:
- TextModifier() {}
+ TextModifier() = default;
~TextModifier() override = 0;
virtual void replace(int offset, int length, const QString& replacement) = 0;
diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstance.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstance.cpp
index 6589ceb875..15d09e4516 100644
--- a/src/plugins/qmldesigner/designercore/instances/nodeinstance.cpp
+++ b/src/plugins/qmldesigner/designercore/instances/nodeinstance.cpp
@@ -43,18 +43,9 @@ class ProxyNodeInstanceData
{
public:
ProxyNodeInstanceData()
- : parentInstanceId(-1),
- penWidth(1),
- isAnchoredBySibling(false),
- isAnchoredByChildren(false),
- hasContent(false),
- isMovable(false),
- isResizable(false),
- isInLayoutable(false),
- directUpdates(false)
{}
- qint32 parentInstanceId;
+ qint32 parentInstanceId{-1};
ModelNode modelNode;
QRectF boundingRect;
QRectF contentItemBoundingRect;
@@ -64,14 +55,14 @@ public:
QTransform contentTransform;
QTransform contentItemTransform;
QTransform sceneTransform;
- int penWidth;
- bool isAnchoredBySibling;
- bool isAnchoredByChildren;
- bool hasContent;
- bool isMovable;
- bool isResizable;
- bool isInLayoutable;
- bool directUpdates;
+ int penWidth{1};
+ bool isAnchoredBySibling{false};
+ bool isAnchoredByChildren{false};
+ bool hasContent{false};
+ bool isMovable{false};
+ bool isResizable{false};
+ bool isInLayoutable{false};
+ bool directUpdates{false};
QHash<PropertyName, QVariant> propertyValues;
@@ -87,9 +78,7 @@ public:
QHash<PropertyName, QPair<PropertyName, qint32> > anchors;
};
-NodeInstance::NodeInstance()
-{
-}
+NodeInstance::NodeInstance() = default;
NodeInstance::NodeInstance(ProxyNodeInstanceData *dPointer)
: d(dPointer)
@@ -98,27 +87,18 @@ NodeInstance::NodeInstance(ProxyNodeInstanceData *dPointer)
NodeInstance NodeInstance::create(const ModelNode &node)
{
- ProxyNodeInstanceData *d = new ProxyNodeInstanceData;
+ auto d = new ProxyNodeInstanceData;
d->modelNode = node;
return NodeInstance(d);
}
-NodeInstance::~NodeInstance()
-{
-}
+NodeInstance::~NodeInstance() = default;
-NodeInstance::NodeInstance(const NodeInstance &other)
- : d(other.d)
-{
-}
+NodeInstance::NodeInstance(const NodeInstance &other) = default;
-NodeInstance &NodeInstance::operator=(const NodeInstance &other)
-{
- d = other.d;
- return *this;
-}
+NodeInstance &NodeInstance::operator=(const NodeInstance &other) = default;
ModelNode NodeInstance::modelNode() const
{
diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.cpp
index cadd15c47c..c75c8a6401 100644
--- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.cpp
+++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.cpp
@@ -337,7 +337,7 @@ QString NodeInstanceServerProxy::qrcMappingString() const
if (rewriterView) {
QString mappingString;
- typedef QPair<QString, QString> StringPair;
+ using StringPair = QPair<QString, QString>;
foreach (const StringPair &pair, rewriterView->qrcMapping()) {
if (!mappingString.isEmpty())
@@ -406,7 +406,7 @@ void NodeInstanceServerProxy::writeCommand(const QVariant &command)
void NodeInstanceServerProxy::processFinished(int exitCode, QProcess::ExitStatus exitStatus)
{
- QProcess* finishedProcess = qobject_cast<QProcess*>(sender());
+ auto finishedProcess = qobject_cast<QProcess*>(sender());
if (finishedProcess)
qWarning() << "Process" << (exitStatus == QProcess::CrashExit ? "crashed:" : "finished:") << finishedProcess->arguments() << "exitCode:" << exitCode;
else
diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp
index 6c3becde43..9a8527e659 100644
--- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp
+++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp
@@ -121,7 +121,7 @@ NodeInstanceView::~NodeInstanceView()
{
removeAllInstanceNodeRelationships();
delete nodeInstanceServer();
- m_currentKit = 0;
+ m_currentKit = nullptr;
}
//\{
@@ -778,7 +778,7 @@ QRectF NodeInstanceView::sceneRect() const
if (rootNodeInstance().isValid())
return rootNodeInstance().boundingRect();
- return QRectF();
+ return {};
}
QList<ModelNode> filterNodesForSkipItems(const QList<ModelNode> &nodeList)
@@ -945,7 +945,7 @@ CreateSceneCommand NodeInstanceView::createCreateSceneCommand()
ClearSceneCommand NodeInstanceView::createClearSceneCommand() const
{
- return ClearSceneCommand();
+ return {};
}
CompleteComponentCommand NodeInstanceView::createComponentCompleteCommand(const QList<NodeInstance> &instanceList) const
diff --git a/src/plugins/qmldesigner/designercore/instances/puppetcreator.cpp b/src/plugins/qmldesigner/designercore/instances/puppetcreator.cpp
index 91533db5c8..8962310ffb 100644
--- a/src/plugins/qmldesigner/designercore/instances/puppetcreator.cpp
+++ b/src/plugins/qmldesigner/designercore/instances/puppetcreator.cpp
@@ -144,7 +144,7 @@ bool PuppetCreator::useOnlyFallbackPuppet() const
if (!m_kit || !m_kit->isValid())
qWarning() << "Invalid kit for QML puppet";
return m_designerSettings.value(DesignerSettingsKey::USE_ONLY_FALLBACK_PUPPET
- ).toBool() || m_kit == 0 || !m_kit->isValid();
+ ).toBool() || m_kit == nullptr || !m_kit->isValid();
#else
return true;
#endif
diff --git a/src/plugins/qmldesigner/designercore/metainfo/itemlibraryinfo.cpp b/src/plugins/qmldesigner/designercore/metainfo/itemlibraryinfo.cpp
index 4183af4b1f..7c5ee2f7aa 100644
--- a/src/plugins/qmldesigner/designercore/metainfo/itemlibraryinfo.cpp
+++ b/src/plugins/qmldesigner/designercore/metainfo/itemlibraryinfo.cpp
@@ -37,13 +37,13 @@ namespace Internal {
class ItemLibraryEntryData : public QSharedData
{
public:
- ItemLibraryEntryData() : majorVersion(-1), minorVersion(-1)
- { }
+ ItemLibraryEntryData()
+ {}
QString name;
TypeName typeName;
QString category;
- int majorVersion;
- int minorVersion;
+ int majorVersion{-1};
+ int minorVersion{-1};
QString libraryEntryIconPath;
QIcon typeIcon;
QList<PropertyContainer> properties;
@@ -59,10 +59,7 @@ public:
// ItemLibraryEntry
//
-ItemLibraryEntry::ItemLibraryEntry(const ItemLibraryEntry &other)
- : m_data(other.m_data)
-{
-}
+ItemLibraryEntry::ItemLibraryEntry(const ItemLibraryEntry &other) = default;
ItemLibraryEntry& ItemLibraryEntry::operator=(const ItemLibraryEntry &other)
{
@@ -97,9 +94,7 @@ ItemLibraryEntry::ItemLibraryEntry() : m_data(new Internal::ItemLibraryEntryData
m_data->name.clear();
}
-ItemLibraryEntry::~ItemLibraryEntry()
-{
-}
+ItemLibraryEntry::~ItemLibraryEntry() = default;
QString ItemLibraryEntry::name() const
{
diff --git a/src/plugins/qmldesigner/designercore/metainfo/metainfo.cpp b/src/plugins/qmldesigner/designercore/metainfo/metainfo.cpp
index aca9535055..14f1982b72 100644
--- a/src/plugins/qmldesigner/designercore/metainfo/metainfo.cpp
+++ b/src/plugins/qmldesigner/designercore/metainfo/metainfo.cpp
@@ -120,10 +120,7 @@ properties.
/*!
Constructs a copy of \a metaInfo.
*/
-MetaInfo::MetaInfo(const MetaInfo &metaInfo) :
- m_p(metaInfo.m_p)
-{
-}
+MetaInfo::MetaInfo(const MetaInfo &metaInfo) = default;
/*!
Creates a meta information object with just the QML types registered statically.
@@ -138,19 +135,13 @@ MetaInfo::MetaInfo() :
{
}
-MetaInfo::~MetaInfo()
-{
-}
+MetaInfo::~MetaInfo() = default;
/*!
Assigns \a other to this meta information and returns a reference to this
meta information.
*/
-MetaInfo& MetaInfo::operator=(const MetaInfo &other)
-{
- m_p = other.m_p;
- return *this;
-}
+MetaInfo& MetaInfo::operator=(const MetaInfo &other) = default;
ItemLibraryInfo *MetaInfo::itemLibraryInfo() const
{
diff --git a/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp b/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp
index 94c192b34f..f92358efc9 100644
--- a/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp
+++ b/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp
@@ -50,8 +50,8 @@ namespace Internal {
struct TypeDescription
{
QString className;
- int minorVersion;
- int majorVersion;
+ int minorVersion{};
+ int majorVersion{};
};
} //Internal
@@ -77,7 +77,7 @@ namespace Internal {
using namespace QmlJS;
-typedef QPair<PropertyName, TypeName> PropertyInfo;
+using PropertyInfo = QPair<PropertyName, TypeName>;
QVector<PropertyInfo> getObjectTypes(const ObjectValue *ov, const ContextPtr &context, bool local = false, int rec = 0);
@@ -350,7 +350,7 @@ static inline bool isValueType(const QString &type)
const CppComponentValue *findQmlPrototype(const ObjectValue *ov, const ContextPtr &context)
{
if (!ov)
- return 0;
+ return nullptr;
const CppComponentValue * qmlValue = value_cast<CppComponentValue>(ov);
if (qmlValue)
@@ -517,9 +517,9 @@ QVector<PropertyInfo> getObjectTypes(const ObjectValue *objectValue, const Conte
class NodeMetaInfoPrivate
{
public:
- typedef QSharedPointer<NodeMetaInfoPrivate> Pointer;
- NodeMetaInfoPrivate();
- ~NodeMetaInfoPrivate() {}
+ using Pointer = QSharedPointer<NodeMetaInfoPrivate>;
+ NodeMetaInfoPrivate() = default;
+ ~NodeMetaInfoPrivate() = default;
bool isValid() const;
bool isFileComponent() const;
@@ -669,11 +669,6 @@ NodeMetaInfoPrivate::Pointer NodeMetaInfoPrivate::create(Model *model, const Typ
return newData;
}
-NodeMetaInfoPrivate::NodeMetaInfoPrivate() : m_isValid(false)
-{
-
-}
-
NodeMetaInfoPrivate::NodeMetaInfoPrivate(Model *model, TypeName type, int maj, int min)
: m_qualfiedTypeName(type)
, m_majorVersion(maj)
@@ -728,7 +723,7 @@ const CppComponentValue *NodeMetaInfoPrivate::getCppComponentValue() const
{
const QList<TypeName> nameComponents = m_qualfiedTypeName.split('.');
if (nameComponents.size() < 2)
- return 0;
+ return nullptr;
const TypeName &type = nameComponents.constLast();
TypeName module;
@@ -741,7 +736,7 @@ const CppComponentValue *NodeMetaInfoPrivate::getCppComponentValue() const
// get the qml object value that's available in the document
const QmlJS::Imports *importsPtr = context()->imports(document());
if (importsPtr) {
- const QList<QmlJS::Import> imports = importsPtr->all();
+ const QList<QmlJS::Import> &imports = importsPtr->all();
foreach (const QmlJS::Import &import, imports) {
if (import.info.path() != QString::fromUtf8(module))
continue;
@@ -789,14 +784,14 @@ ContextPtr NodeMetaInfoPrivate::context() const
{
if (m_model && m_model->rewriterView() && m_model->rewriterView()->scopeChain())
return m_model->rewriterView()->scopeChain()->context();
- return ContextPtr(0);
+ return ContextPtr(nullptr);
}
const Document *NodeMetaInfoPrivate::document() const
{
if (m_model && m_model->rewriterView())
return m_model->rewriterView()->document();
- return 0;
+ return nullptr;
}
void NodeMetaInfoPrivate::setupLocalPropertyInfo(const QVector<PropertyInfo> &localPropertyInfos)
@@ -968,7 +963,7 @@ QString NodeMetaInfoPrivate::propertyEnumScope(const PropertyName &propertyName)
const CppComponentValue *qmlObjectValue = getNearestCppComponentValue();
if (!qmlObjectValue)
return QString();
- const CppComponentValue *definedIn = 0;
+ const CppComponentValue *definedIn = nullptr;
qmlObjectValue->getEnum(QString::fromUtf8(propertyType(propertyName)), &definedIn);
if (definedIn) {
QString nonCppPackage;
@@ -1322,19 +1317,14 @@ NodeMetaInfo::NodeMetaInfo() : m_privateData(new Internal::NodeMetaInfoPrivate()
}
-NodeMetaInfo::NodeMetaInfo(Model *model, TypeName type, int maj, int min) : m_privateData(Internal::NodeMetaInfoPrivate::create(model, type, maj, min))
+NodeMetaInfo::NodeMetaInfo(Model *model, const TypeName &type, int maj, int min) : m_privateData(Internal::NodeMetaInfoPrivate::create(model, type, maj, min))
{
}
-NodeMetaInfo::~NodeMetaInfo()
-{
-}
+NodeMetaInfo::~NodeMetaInfo() = default;
-NodeMetaInfo::NodeMetaInfo(const NodeMetaInfo &other)
- : m_privateData(other.m_privateData)
-{
-}
+NodeMetaInfo::NodeMetaInfo(const NodeMetaInfo &other) = default;
NodeMetaInfo &NodeMetaInfo::operator=(const NodeMetaInfo &other)
{
diff --git a/src/plugins/qmldesigner/designercore/model/abstractproperty.cpp b/src/plugins/qmldesigner/designercore/model/abstractproperty.cpp
index 40a9d75776..c6602a3bc7 100644
--- a/src/plugins/qmldesigner/designercore/model/abstractproperty.cpp
+++ b/src/plugins/qmldesigner/designercore/model/abstractproperty.cpp
@@ -79,27 +79,11 @@ AbstractProperty::AbstractProperty(const AbstractProperty &property, AbstractVie
}
-AbstractProperty::~AbstractProperty()
-{
-}
+AbstractProperty::~AbstractProperty() = default;
-AbstractProperty::AbstractProperty(const AbstractProperty &other)
- : m_propertyName(other.m_propertyName),
- m_internalNode(other.m_internalNode),
- m_model(other.m_model),
- m_view(other.m_view)
-{
-}
+AbstractProperty::AbstractProperty(const AbstractProperty &other) = default;
-AbstractProperty& AbstractProperty::operator=(const AbstractProperty &other)
-{
- m_propertyName = other.m_propertyName;
- m_internalNode = other.m_internalNode;
- m_model = other.m_model;
- m_view = other.m_view;
-
- return *this;
-}
+AbstractProperty& AbstractProperty::operator=(const AbstractProperty &other) = default;
Internal::InternalNodePointer AbstractProperty::internalNode() const
{
diff --git a/src/plugins/qmldesigner/designercore/model/abstractview.cpp b/src/plugins/qmldesigner/designercore/model/abstractview.cpp
index ab7195a940..9c4b768535 100644
--- a/src/plugins/qmldesigner/designercore/model/abstractview.cpp
+++ b/src/plugins/qmldesigner/designercore/model/abstractview.cpp
@@ -68,7 +68,7 @@ AbstractView::~AbstractView()
*/
void AbstractView::setModel(Model *model)
{
- Q_ASSERT(model != 0);
+ Q_ASSERT(model != nullptr);
if (model == m_model.data())
return;
@@ -525,7 +525,7 @@ NodeInstanceView *AbstractView::nodeInstanceView() const
if (model())
return model()->d->nodeInstanceView();
else
- return 0;
+ return nullptr;
}
RewriterView *AbstractView::rewriterView() const
@@ -533,7 +533,7 @@ RewriterView *AbstractView::rewriterView() const
if (model())
return model()->d->rewriterView();
else
- return 0;
+ return nullptr;
}
void AbstractView::resetView()
diff --git a/src/plugins/qmldesigner/designercore/model/basetexteditmodifier.cpp b/src/plugins/qmldesigner/designercore/model/basetexteditmodifier.cpp
index 6204d670b5..612f3003e5 100644
--- a/src/plugins/qmldesigner/designercore/model/basetexteditmodifier.cpp
+++ b/src/plugins/qmldesigner/designercore/model/basetexteditmodifier.cpp
@@ -47,7 +47,7 @@ void BaseTextEditModifier::indentLines(int startLine, int endLine)
{
if (startLine < 0)
return;
- TextEditor::TextEditorWidget *baseTextEditorWidget = qobject_cast<TextEditor::TextEditorWidget*>(plainTextEdit());
+ auto baseTextEditorWidget = qobject_cast<TextEditor::TextEditorWidget*>(plainTextEdit());
if (!baseTextEditorWidget)
return;
@@ -82,7 +82,7 @@ void BaseTextEditModifier::indent(int offset, int length)
int BaseTextEditModifier::indentDepth() const
{
- if (TextEditor::TextEditorWidget *bte = qobject_cast<TextEditor::TextEditorWidget*>(plainTextEdit()))
+ if (auto bte = qobject_cast<TextEditor::TextEditorWidget*>(plainTextEdit()))
return bte->textDocument()->tabSettings().m_indentSize;
else
return 0;
@@ -90,9 +90,8 @@ int BaseTextEditModifier::indentDepth() const
bool BaseTextEditModifier::renameId(const QString &oldId, const QString &newId)
{
- if (TextEditor::TextEditorWidget *bte = qobject_cast<TextEditor::TextEditorWidget*>(plainTextEdit())) {
- if (QmlJSEditor::QmlJSEditorDocument *document
- = qobject_cast<QmlJSEditor::QmlJSEditorDocument *>(bte->textDocument())) {
+ if (auto bte = qobject_cast<TextEditor::TextEditorWidget*>(plainTextEdit())) {
+ if (auto document = qobject_cast<QmlJSEditor::QmlJSEditorDocument *>(bte->textDocument())) {
Utils::ChangeSet changeSet;
foreach (const QmlJS::AST::SourceLocation &loc,
document->semanticInfo().idLocations.value(oldId)) {
@@ -106,9 +105,9 @@ bool BaseTextEditModifier::renameId(const QString &oldId, const QString &newId)
return false;
}
-static QmlJS::AST::UiObjectDefinition *getObjectDefinition(QList<QmlJS::AST::Node *> path, QmlJS::AST::UiQualifiedId *qualifiedId)
+static QmlJS::AST::UiObjectDefinition *getObjectDefinition(const QList<QmlJS::AST::Node *> &path, QmlJS::AST::UiQualifiedId *qualifiedId)
{
- QmlJS::AST::UiObjectDefinition *object = 0;
+ QmlJS::AST::UiObjectDefinition *object = nullptr;
for (int i = path.size() - 1; i >= 0; --i) {
auto node = path.at(i);
if (auto objDef = QmlJS::AST::cast<QmlJS::AST::UiObjectDefinition *>(node)) {
@@ -121,11 +120,11 @@ static QmlJS::AST::UiObjectDefinition *getObjectDefinition(QList<QmlJS::AST::Nod
bool BaseTextEditModifier::moveToComponent(int nodeOffset)
{
- if (TextEditor::TextEditorWidget *bte = qobject_cast<TextEditor::TextEditorWidget*>(plainTextEdit())) {
- if (QmlJSEditor::QmlJSEditorDocument *document
+ if (auto bte = qobject_cast<TextEditor::TextEditorWidget*>(plainTextEdit())) {
+ if (auto document
= qobject_cast<QmlJSEditor::QmlJSEditorDocument *>(bte->textDocument())) {
- auto *qualifiedId = QmlJS::AST::cast<QmlJS::AST::UiQualifiedId *>(document->semanticInfo().astNodeAt(nodeOffset));
+ auto qualifiedId = QmlJS::AST::cast<QmlJS::AST::UiQualifiedId *>(document->semanticInfo().astNodeAt(nodeOffset));
QList<QmlJS::AST::Node *> path = document->semanticInfo().rangePath(nodeOffset);
QmlJS::AST::UiObjectDefinition *object = getObjectDefinition(path, qualifiedId);
@@ -141,8 +140,8 @@ bool BaseTextEditModifier::moveToComponent(int nodeOffset)
QStringList BaseTextEditModifier::autoComplete(QTextDocument *textDocument, int position, bool explicitComplete)
{
- if (TextEditor::TextEditorWidget *bte = qobject_cast<TextEditor::TextEditorWidget*>(plainTextEdit()))
- if (QmlJSEditor::QmlJSEditorDocument *document
+ if (auto bte = qobject_cast<TextEditor::TextEditorWidget*>(plainTextEdit()))
+ if (auto document
= qobject_cast<QmlJSEditor::QmlJSEditorDocument *>(bte->textDocument()))
return QmlJSEditor::qmlJSAutoComplete(textDocument,
position,
diff --git a/src/plugins/qmldesigner/designercore/model/bindingproperty.cpp b/src/plugins/qmldesigner/designercore/model/bindingproperty.cpp
index fe8ebe1729..ebd3c7c709 100644
--- a/src/plugins/qmldesigner/designercore/model/bindingproperty.cpp
+++ b/src/plugins/qmldesigner/designercore/model/bindingproperty.cpp
@@ -43,9 +43,7 @@ bool compareBindingProperties(const QmlDesigner::BindingProperty &bindingPropert
return true;
}
-BindingProperty::BindingProperty()
-{
-}
+BindingProperty::BindingProperty() = default;
BindingProperty::BindingProperty(const BindingProperty &property, AbstractView *view)
: AbstractProperty(property.name(), property.internalNode(), property.model(), view)
diff --git a/src/plugins/qmldesigner/designercore/model/componenttextmodifier.cpp b/src/plugins/qmldesigner/designercore/model/componenttextmodifier.cpp
index f104842995..1d500b8496 100644
--- a/src/plugins/qmldesigner/designercore/model/componenttextmodifier.cpp
+++ b/src/plugins/qmldesigner/designercore/model/componenttextmodifier.cpp
@@ -39,9 +39,7 @@ ComponentTextModifier::ComponentTextModifier(TextModifier *originalModifier, int
connect(m_originalModifier, &TextModifier::moved, this, &TextModifier::moved);
}
-ComponentTextModifier::~ComponentTextModifier()
-{
-}
+ComponentTextModifier::~ComponentTextModifier() = default;
void ComponentTextModifier::replace(int offset, int length, const QString& replacement)
{
diff --git a/src/plugins/qmldesigner/designercore/model/import.cpp b/src/plugins/qmldesigner/designercore/model/import.cpp
index 0ea54ef983..7b9c2c56c4 100644
--- a/src/plugins/qmldesigner/designercore/model/import.cpp
+++ b/src/plugins/qmldesigner/designercore/model/import.cpp
@@ -29,9 +29,7 @@
namespace QmlDesigner {
-Import::Import()
-{
-}
+Import::Import() = default;
Import Import::createLibraryImport(const QString &url, const QString &version, const QString &alias, const QStringList &importPaths)
{
diff --git a/src/plugins/qmldesigner/designercore/model/internalbindingproperty.cpp b/src/plugins/qmldesigner/designercore/model/internalbindingproperty.cpp
index df054b152f..4853c8a626 100644
--- a/src/plugins/qmldesigner/designercore/model/internalbindingproperty.cpp
+++ b/src/plugins/qmldesigner/designercore/model/internalbindingproperty.cpp
@@ -36,7 +36,7 @@ InternalBindingProperty::InternalBindingProperty(const PropertyName &name, const
InternalBindingProperty::Pointer InternalBindingProperty::create(const PropertyName &name, const InternalNodePointer &propertyOwner)
{
- InternalBindingProperty *newPointer(new InternalBindingProperty(name, propertyOwner));
+ auto newPointer(new InternalBindingProperty(name, propertyOwner));
InternalBindingProperty::Pointer smartPointer(newPointer);
newPointer->setInternalWeakPointer(smartPointer);
diff --git a/src/plugins/qmldesigner/designercore/model/internalbindingproperty.h b/src/plugins/qmldesigner/designercore/model/internalbindingproperty.h
index 5cb82205fa..c1d772b9ac 100644
--- a/src/plugins/qmldesigner/designercore/model/internalbindingproperty.h
+++ b/src/plugins/qmldesigner/designercore/model/internalbindingproperty.h
@@ -33,11 +33,11 @@ namespace Internal {
class InternalBindingProperty : public InternalProperty
{
public:
- typedef QSharedPointer<InternalBindingProperty> Pointer;
+ using Pointer = QSharedPointer<InternalBindingProperty>;
static Pointer create(const PropertyName &name, const InternalNodePointer &propertyOwner);
- bool isValid() const;
+ bool isValid() const override;
QString expression() const;
void setExpression(const QString &expression);
@@ -45,7 +45,7 @@ public:
void setDynamicExpression(const TypeName &type, const QString &expression);
- bool isBindingProperty() const;
+ bool isBindingProperty() const override;
protected:
InternalBindingProperty(const PropertyName &name, const InternalNodePointer &propertyOwner);
diff --git a/src/plugins/qmldesigner/designercore/model/internalnode.cpp b/src/plugins/qmldesigner/designercore/model/internalnode.cpp
index 7e11ab6c3f..1f8b622765 100644
--- a/src/plugins/qmldesigner/designercore/model/internalnode.cpp
+++ b/src/plugins/qmldesigner/designercore/model/internalnode.cpp
@@ -61,7 +61,7 @@ InternalNode::InternalNode(const TypeName &typeName,int majorVersion, int minorV
InternalNode::Pointer InternalNode::create(const TypeName &type,int majorVersion, int minorVersion, qint32 internalId)
{
- InternalNode *newPointer(new InternalNode(type, majorVersion, minorVersion, internalId));
+ auto newPointer(new InternalNode(type, majorVersion, minorVersion, internalId));
InternalNode::Pointer smartPointer(newPointer);
newPointer->setInternalWeakPointer(smartPointer);
diff --git a/src/plugins/qmldesigner/designercore/model/internalnode_p.h b/src/plugins/qmldesigner/designercore/model/internalnode_p.h
index 0997c5a4ff..f31039ffc2 100644
--- a/src/plugins/qmldesigner/designercore/model/internalnode_p.h
+++ b/src/plugins/qmldesigner/designercore/model/internalnode_p.h
@@ -45,16 +45,16 @@ namespace Internal {
class InternalProperty;
class InternalNode;
-typedef QSharedPointer<InternalNode> InternalNodePointer;
-typedef QSharedPointer<InternalProperty> InternalPropertyPointer;
-typedef QWeakPointer<InternalNode> InternalNodeWeakPointer;
+using InternalNodePointer = QSharedPointer<InternalNode>;
+using InternalPropertyPointer = QSharedPointer<InternalProperty>;
+using InternalNodeWeakPointer = QWeakPointer<InternalNode>;
class InternalNode
{
friend class InternalProperty;
public:
- typedef QSharedPointer<InternalNode> Pointer;
- typedef QWeakPointer<InternalNode> WeakPointer;
+ using Pointer = QSharedPointer<InternalNode>;
+ using WeakPointer = QWeakPointer<InternalNode>;
explicit InternalNode();
diff --git a/src/plugins/qmldesigner/designercore/model/internalnodeabstractproperty.h b/src/plugins/qmldesigner/designercore/model/internalnodeabstractproperty.h
index 0ea7d49eff..ee80cc42da 100644
--- a/src/plugins/qmldesigner/designercore/model/internalnodeabstractproperty.h
+++ b/src/plugins/qmldesigner/designercore/model/internalnodeabstractproperty.h
@@ -36,10 +36,10 @@ class InternalNodeAbstractProperty : public InternalProperty
friend class InternalNode;
public:
- typedef QSharedPointer<InternalNodeAbstractProperty> Pointer;
- typedef QWeakPointer<InternalNodeAbstractProperty> WeakPointer;
+ using Pointer = QSharedPointer<InternalNodeAbstractProperty>;
+ using WeakPointer = QWeakPointer<InternalNodeAbstractProperty>;
- bool isNodeAbstractProperty() const;
+ bool isNodeAbstractProperty() const override;
virtual QList<InternalNodePointer> allSubNodes() const = 0;
virtual QList<InternalNodePointer> directSubNodes() const = 0;
@@ -48,7 +48,7 @@ public:
virtual int count() const = 0;
virtual int indexOf(const InternalNodePointer &node) const = 0;
- virtual bool isValid() const;
+ bool isValid() const override;
using InternalProperty::remove; // keep the virtual remove(...) function around
diff --git a/src/plugins/qmldesigner/designercore/model/internalnodelistproperty.cpp b/src/plugins/qmldesigner/designercore/model/internalnodelistproperty.cpp
index 5d4103b5d8..51f6b3421b 100644
--- a/src/plugins/qmldesigner/designercore/model/internalnodelistproperty.cpp
+++ b/src/plugins/qmldesigner/designercore/model/internalnodelistproperty.cpp
@@ -37,7 +37,7 @@ InternalNodeListProperty::InternalNodeListProperty(const PropertyName &name, con
InternalNodeListProperty::Pointer InternalNodeListProperty::create(const PropertyName &name, const InternalNodePointer &propertyOwner)
{
- InternalNodeListProperty *newPointer(new InternalNodeListProperty(name, propertyOwner));
+ auto newPointer(new InternalNodeListProperty(name, propertyOwner));
InternalProperty::Pointer smartPointer(newPointer);
newPointer->setInternalWeakPointer(smartPointer.toWeakRef());
diff --git a/src/plugins/qmldesigner/designercore/model/internalnodelistproperty.h b/src/plugins/qmldesigner/designercore/model/internalnodelistproperty.h
index d58e44d08c..b50a144491 100644
--- a/src/plugins/qmldesigner/designercore/model/internalnodelistproperty.h
+++ b/src/plugins/qmldesigner/designercore/model/internalnodelistproperty.h
@@ -36,28 +36,28 @@ namespace Internal {
class InternalNodeListProperty : public InternalNodeAbstractProperty
{
public:
- typedef QSharedPointer<InternalNodeListProperty> Pointer;
+ using Pointer = QSharedPointer<InternalNodeListProperty>;
static Pointer create(const PropertyName &name, const InternalNodePointer &propertyOwner);
- bool isValid() const;
+ bool isValid() const override;
- bool isEmpty() const;
- int count() const;
- int indexOf(const InternalNodePointer &node) const;
+ bool isEmpty() const override;
+ int count() const override;
+ int indexOf(const InternalNodePointer &node) const override;
InternalNodePointer at(int index) const;
- bool isNodeListProperty() const;
+ bool isNodeListProperty() const override;
- QList<InternalNodePointer> allSubNodes() const;
- QList<InternalNodePointer> directSubNodes() const;
+ QList<InternalNodePointer> allSubNodes() const override;
+ QList<InternalNodePointer> directSubNodes() const override;
const QList<InternalNodePointer> &nodeList() const;
void slide(int from, int to);
protected:
InternalNodeListProperty(const PropertyName &name, const InternalNodePointer &propertyOwner);
- void add(const InternalNodePointer &node);
- void remove(const InternalNodePointer &node);
+ void add(const InternalNodePointer &node) override;
+ void remove(const InternalNodePointer &node) override;
private:
QList<InternalNodePointer> m_nodeList;
diff --git a/src/plugins/qmldesigner/designercore/model/internalnodeproperty.cpp b/src/plugins/qmldesigner/designercore/model/internalnodeproperty.cpp
index c2daf83680..7965561344 100644
--- a/src/plugins/qmldesigner/designercore/model/internalnodeproperty.cpp
+++ b/src/plugins/qmldesigner/designercore/model/internalnodeproperty.cpp
@@ -36,7 +36,7 @@ InternalNodeProperty::InternalNodeProperty(const PropertyName &name, const Inter
InternalNodeProperty::Pointer InternalNodeProperty::create(const PropertyName &name, const InternalNode::Pointer &propertyOwner)
{
- InternalNodeProperty *newPointer = new InternalNodeProperty(name, propertyOwner);
+ auto newPointer = new InternalNodeProperty(name, propertyOwner);
InternalNodeProperty::Pointer smartPointer(newPointer);
newPointer->setInternalWeakPointer(smartPointer);
diff --git a/src/plugins/qmldesigner/designercore/model/internalnodeproperty.h b/src/plugins/qmldesigner/designercore/model/internalnodeproperty.h
index 7da520b011..a7bfe58300 100644
--- a/src/plugins/qmldesigner/designercore/model/internalnodeproperty.h
+++ b/src/plugins/qmldesigner/designercore/model/internalnodeproperty.h
@@ -33,26 +33,26 @@ namespace Internal {
class InternalNodeProperty : public InternalNodeAbstractProperty
{
public:
- typedef QSharedPointer<InternalNodeProperty> Pointer;
+ using Pointer = QSharedPointer<InternalNodeProperty>;
static Pointer create(const PropertyName &name, const InternalNodePointer &propertyOwner);
- bool isValid() const;
- bool isEmpty() const;
- int count() const;
- int indexOf(const InternalNodePointer &node) const;
- bool isNodeProperty() const;
+ bool isValid() const override;
+ bool isEmpty() const override;
+ int count() const override;
+ int indexOf(const InternalNodePointer &node) const override;
+ bool isNodeProperty() const override;
- QList<InternalNodePointer> allSubNodes() const;
- QList<InternalNodePointer> directSubNodes() const;
+ QList<InternalNodePointer> allSubNodes() const override;
+ QList<InternalNodePointer> directSubNodes() const override;
InternalNodePointer node() const;
protected:
InternalNodeProperty(const PropertyName &name, const InternalNodePointer &node);
- void add(const InternalNodePointer &node);
- void remove(const InternalNodePointer &node);
+ void add(const InternalNodePointer &node) override;
+ void remove(const InternalNodePointer &node) override;
private:
InternalNodePointer m_node;
diff --git a/src/plugins/qmldesigner/designercore/model/internalproperty.cpp b/src/plugins/qmldesigner/designercore/model/internalproperty.cpp
index e439435fde..df2e2a2275 100644
--- a/src/plugins/qmldesigner/designercore/model/internalproperty.cpp
+++ b/src/plugins/qmldesigner/designercore/model/internalproperty.cpp
@@ -36,13 +36,9 @@ namespace QmlDesigner {
namespace Internal {
// Creates invalid InternalProperty
-InternalProperty::InternalProperty()
-{
-}
+InternalProperty::InternalProperty() = default;
-InternalProperty::~InternalProperty()
-{
-}
+InternalProperty::~InternalProperty() = default;
InternalProperty::InternalProperty(const PropertyName &name, const InternalNode::Pointer &propertyOwner)
: m_name(name),
diff --git a/src/plugins/qmldesigner/designercore/model/internalproperty.h b/src/plugins/qmldesigner/designercore/model/internalproperty.h
index df6896bf9a..a8eb5b940c 100644
--- a/src/plugins/qmldesigner/designercore/model/internalproperty.h
+++ b/src/plugins/qmldesigner/designercore/model/internalproperty.h
@@ -42,15 +42,14 @@ class InternalNodeProperty;
class InternalNodeAbstractProperty;
class InternalNode;
-typedef QSharedPointer<InternalNode> InternalNodePointer;
-typedef QWeakPointer<InternalNode> InternalNodeWeakPointer;
+using InternalNodePointer = QSharedPointer<InternalNode>;
+using InternalNodeWeakPointer = QWeakPointer<InternalNode>;
class QMLDESIGNERCORE_EXPORT InternalProperty
{
public:
- typedef QSharedPointer<InternalProperty> Pointer;
- typedef QWeakPointer<InternalProperty> WeakPointer;
-
+ using Pointer = QSharedPointer<InternalProperty>;
+ using WeakPointer = QWeakPointer<InternalProperty>;
InternalProperty();
virtual ~InternalProperty();
diff --git a/src/plugins/qmldesigner/designercore/model/internalsignalhandlerproperty.cpp b/src/plugins/qmldesigner/designercore/model/internalsignalhandlerproperty.cpp
index c4c7e91131..08ce26a4c8 100644
--- a/src/plugins/qmldesigner/designercore/model/internalsignalhandlerproperty.cpp
+++ b/src/plugins/qmldesigner/designercore/model/internalsignalhandlerproperty.cpp
@@ -36,7 +36,7 @@ InternalSignalHandlerProperty::InternalSignalHandlerProperty(const PropertyName
InternalSignalHandlerProperty::Pointer InternalSignalHandlerProperty::create(const PropertyName &name, const InternalNodePointer &propertyOwner)
{
- InternalSignalHandlerProperty *newPointer(new InternalSignalHandlerProperty(name, propertyOwner));
+ auto newPointer(new InternalSignalHandlerProperty(name, propertyOwner));
InternalSignalHandlerProperty::Pointer smartPointer(newPointer);
newPointer->setInternalWeakPointer(smartPointer);
diff --git a/src/plugins/qmldesigner/designercore/model/internalsignalhandlerproperty.h b/src/plugins/qmldesigner/designercore/model/internalsignalhandlerproperty.h
index c0875f7e5b..9ecf424a54 100644
--- a/src/plugins/qmldesigner/designercore/model/internalsignalhandlerproperty.h
+++ b/src/plugins/qmldesigner/designercore/model/internalsignalhandlerproperty.h
@@ -33,16 +33,16 @@ namespace Internal {
class InternalSignalHandlerProperty : public InternalProperty
{
public:
- typedef QSharedPointer<InternalSignalHandlerProperty> Pointer;
+ using Pointer = QSharedPointer<InternalSignalHandlerProperty>;
static Pointer create(const PropertyName &name, const InternalNodePointer &propertyOwner);
- bool isValid() const;
+ bool isValid() const override;
QString source() const;
void setSource(const QString &source);
- bool isSignalHandlerProperty() const;
+ bool isSignalHandlerProperty() const override;
protected:
InternalSignalHandlerProperty(const PropertyName &name, const InternalNodePointer &propertyOwner);
diff --git a/src/plugins/qmldesigner/designercore/model/internalvariantproperty.cpp b/src/plugins/qmldesigner/designercore/model/internalvariantproperty.cpp
index ac02030b50..3354a6312d 100644
--- a/src/plugins/qmldesigner/designercore/model/internalvariantproperty.cpp
+++ b/src/plugins/qmldesigner/designercore/model/internalvariantproperty.cpp
@@ -35,7 +35,7 @@ InternalVariantProperty::InternalVariantProperty(const PropertyName &name, const
InternalVariantProperty::Pointer InternalVariantProperty::create(const PropertyName &name, const InternalNodePointer &propertyOwner)
{
- InternalVariantProperty *newPointer(new InternalVariantProperty(name, propertyOwner));
+ auto newPointer(new InternalVariantProperty(name, propertyOwner));
InternalVariantProperty::Pointer smartPointer(newPointer);
newPointer->setInternalWeakPointer(smartPointer);
diff --git a/src/plugins/qmldesigner/designercore/model/internalvariantproperty.h b/src/plugins/qmldesigner/designercore/model/internalvariantproperty.h
index 6edfe7a492..481770d15e 100644
--- a/src/plugins/qmldesigner/designercore/model/internalvariantproperty.h
+++ b/src/plugins/qmldesigner/designercore/model/internalvariantproperty.h
@@ -33,18 +33,18 @@ namespace Internal {
class InternalVariantProperty : public InternalProperty
{
public:
- typedef QSharedPointer<InternalVariantProperty> Pointer;
+ using Pointer = QSharedPointer<InternalVariantProperty>;
static Pointer create(const PropertyName &name, const InternalNodePointer &propertyOwner);
- bool isValid() const;
+ bool isValid() const override;
QVariant value() const;
void setValue(const QVariant &value);
void setDynamicValue(const TypeName &type, const QVariant &value);
- bool isVariantProperty() const;
+ bool isVariantProperty() const override;
protected:
InternalVariantProperty(const PropertyName &name, const InternalNodePointer &propertyOwner);
diff --git a/src/plugins/qmldesigner/designercore/model/model.cpp b/src/plugins/qmldesigner/designercore/model/model.cpp
index 5f5798b01e..f8cb347ba6 100644
--- a/src/plugins/qmldesigner/designercore/model/model.cpp
+++ b/src/plugins/qmldesigner/designercore/model/model.cpp
@@ -113,7 +113,7 @@ void ModelPrivate::detachAllViews()
Model *ModelPrivate::create(const TypeName &type, int major, int minor, Model *metaInfoPropxyModel)
{
- Model *model = new Model;
+ auto model = new Model;
model->d->m_metaInfoProxyModel = metaInfoPropxyModel;
model->d->rootNode()->setType(type);
@@ -229,7 +229,7 @@ InternalNode::Pointer ModelPrivate::createNode(const TypeName &typeName,
InternalNode::Pointer newInternalNodePointer = InternalNode::create(typeName, majorVersion, minorVersion, internalId);
newInternalNodePointer->setNodeSourceType(nodeSourceType);
- typedef QPair<PropertyName, QVariant> PropertyPair;
+ using PropertyPair = QPair<PropertyName, QVariant>;
foreach (const PropertyPair &propertyPair, propertyList) {
newInternalNodePointer->addVariantProperty(propertyPair.first);
@@ -368,7 +368,7 @@ void ModelPrivate::notifyAuxiliaryDataChanged(const InternalNodePointer &interna
}
foreach (const QPointer<AbstractView> &view, m_viewList) {
- Q_ASSERT(view != 0);
+ Q_ASSERT(view != nullptr);
ModelNode node(internalNode, model(), view.data());
view->auxiliaryDataChanged(node, name, data);
@@ -399,7 +399,7 @@ void ModelPrivate::notifyNodeSourceChanged(const InternalNodePointer &internalNo
}
foreach (const QPointer<AbstractView> &view, m_viewList) {
- Q_ASSERT(view != 0);
+ Q_ASSERT(view != nullptr);
ModelNode node(internalNode, model(), view.data());
view->nodeSourceChanged(node, newNodeSource);
@@ -431,7 +431,7 @@ void ModelPrivate::notifyRootNodeTypeChanged(const QString &type, int majorVersi
nodeInstanceView()->rootNodeTypeChanged(type, majorVersion, minorVersion);
foreach (const QPointer<AbstractView> &view, m_viewList) {
- Q_ASSERT(view != 0);
+ Q_ASSERT(view != nullptr);
view->rootNodeTypeChanged(type, majorVersion, minorVersion);
}
@@ -444,9 +444,9 @@ void ModelPrivate::notifyInstancePropertyChange(const QList<QPair<ModelNode, Pro
{
// no need to notify the rewriter or the instance view
- typedef QPair<ModelNode, PropertyName> ModelNodePropertyPair;
+ using ModelNodePropertyPair = QPair<ModelNode, PropertyName>;
foreach (const QPointer<AbstractView> &view, m_viewList) {
- Q_ASSERT(view != 0);
+ Q_ASSERT(view != nullptr);
QList<QPair<ModelNode, PropertyName> > adaptedPropertyList;
foreach (const ModelNodePropertyPair &propertyPair, propertyPairList) {
@@ -464,7 +464,7 @@ void ModelPrivate::notifyInstanceErrorChange(const QVector<qint32> &instanceIds)
QVector<ModelNode> errorNodeList;
foreach (const QPointer<AbstractView> &view, m_viewList) {
- Q_ASSERT(view != 0);
+ Q_ASSERT(view != nullptr);
foreach (qint32 instanceId, instanceIds)
errorNodeList.append(ModelNode(model()->d->nodeForInternalId(instanceId), model(), view));
view->instanceErrorChanged(errorNodeList);
@@ -487,7 +487,7 @@ void ModelPrivate::notifyInstancesCompleted(const QVector<ModelNode> &nodeVector
}
foreach (const QPointer<AbstractView> &view, m_viewList) {
- Q_ASSERT(view != 0);
+ Q_ASSERT(view != nullptr);
view->instancesCompleted(toModelNodeVector(internalVector, view.data()));
}
@@ -525,7 +525,7 @@ void ModelPrivate::notifyInstancesInformationsChange(const QMultiHash<ModelNode,
}
foreach (const QPointer<AbstractView> &view, m_viewList) {
- Q_ASSERT(view != 0);
+ Q_ASSERT(view != nullptr);
view->instanceInformationsChanged(convertModelNodeInformationHash(informationChangeHash, view.data()));
}
@@ -552,7 +552,7 @@ void ModelPrivate::notifyInstancesRenderImageChanged(const QVector<ModelNode> &n
}
foreach (const QPointer<AbstractView> &view, m_viewList) {
- Q_ASSERT(view != 0);
+ Q_ASSERT(view != nullptr);
view->instancesRenderImageChanged(toModelNodeVector(internalVector, view.data()));
}
@@ -579,7 +579,7 @@ void ModelPrivate::notifyInstancesPreviewImageChanged(const QVector<ModelNode> &
}
foreach (const QPointer<AbstractView> &view, m_viewList) {
- Q_ASSERT(view != 0);
+ Q_ASSERT(view != nullptr);
view->instancesPreviewImageChanged(toModelNodeVector(internalVector, view.data()));
}
@@ -606,7 +606,7 @@ void ModelPrivate::notifyInstancesChildrenChanged(const QVector<ModelNode> &node
}
foreach (const QPointer<AbstractView> &view, m_viewList) {
- Q_ASSERT(view != 0);
+ Q_ASSERT(view != nullptr);
view->instancesChildrenChanged(toModelNodeVector(internalVector, view.data()));
}
@@ -633,7 +633,7 @@ void ModelPrivate::notifyCurrentStateChanged(const ModelNode &node)
}
foreach (const QPointer<AbstractView> &view, m_viewList) {
- Q_ASSERT(view != 0);
+ Q_ASSERT(view != nullptr);
view->currentStateChanged(ModelNode(node.internalNode(), model(), view.data()));
}
@@ -660,7 +660,7 @@ void ModelPrivate::notifyCurrentTimelineChanged(const ModelNode &node)
}
for (const QPointer<AbstractView> &view : m_viewList) {
- Q_ASSERT(view != 0);
+ Q_ASSERT(view != nullptr);
view->currentTimelineChanged(ModelNode(node.internalNode(), model(), view.data()));
}
@@ -685,7 +685,7 @@ void ModelPrivate::notifyRewriterBeginTransaction()
}
foreach (const QPointer<AbstractView> &view, m_viewList) {
- Q_ASSERT(view != 0);
+ Q_ASSERT(view != nullptr);
view->rewriterBeginTransaction();
}
@@ -710,7 +710,7 @@ void ModelPrivate::notifyRewriterEndTransaction()
}
foreach (const QPointer<AbstractView> &view, m_viewList) {
- Q_ASSERT(view != 0);
+ Q_ASSERT(view != nullptr);
view->rewriterEndTransaction();
}
@@ -738,7 +738,7 @@ void ModelPrivate::notifyInstanceToken(const QString &token, int number, const Q
}
foreach (const QPointer<AbstractView> &view, m_viewList) {
- Q_ASSERT(view != 0);
+ Q_ASSERT(view != nullptr);
view->instancesToken(token, number, toModelNodeVector(internalVector, view.data()));
}
@@ -765,7 +765,7 @@ void ModelPrivate::notifyCustomNotification(const AbstractView *senderView, cons
}
foreach (const QPointer<AbstractView> &view, m_viewList) {
- Q_ASSERT(view != 0);
+ Q_ASSERT(view != nullptr);
view->customNotification(senderView, identifier, toModelNodeList(internalList, view.data()), data);
}
@@ -809,7 +809,7 @@ void ModelPrivate::notifyPropertiesRemoved(const QList<PropertyPair> &propertyPa
foreach (const QPointer<AbstractView> &view, m_viewList) {
QList<AbstractProperty> propertyList;
- Q_ASSERT(view != 0);
+ Q_ASSERT(view != nullptr);
foreach (const PropertyPair &propertyPair, propertyPairList) {
AbstractProperty newProperty(propertyPair.second, propertyPair.first, model(), view.data());
propertyList.append(newProperty);
@@ -844,7 +844,7 @@ void ModelPrivate::notifyPropertiesAboutToBeRemoved(const QList<InternalProperty
foreach (const QPointer<AbstractView> &view, m_viewList) {
QList<AbstractProperty> propertyList;
- Q_ASSERT(view != 0);
+ Q_ASSERT(view != nullptr);
foreach (const InternalProperty::Pointer &property, internalPropertyList) {
AbstractProperty newProperty(property->name(), property->propertyOwner(), model(), view.data());
propertyList.append(newProperty);
@@ -932,7 +932,7 @@ void ModelPrivate::notifyNodeCreated(const InternalNode::Pointer &newInternalNod
}
foreach (const QPointer<AbstractView> &view, m_viewList) {
- Q_ASSERT(view != 0);
+ Q_ASSERT(view != nullptr);
ModelNode createdNode(newInternalNodePointer, model(), view.data());
view->nodeCreated(createdNode);
}
@@ -957,7 +957,7 @@ void ModelPrivate::notifyNodeAboutToBeRemoved(const InternalNode::Pointer &inter
}
foreach (const QPointer<AbstractView> &view, m_viewList) {
- Q_ASSERT(view != 0);
+ Q_ASSERT(view != nullptr);
ModelNode modelNode(internalNodePointer, model(), view.data());
view->nodeAboutToBeRemoved(modelNode);
}
@@ -997,7 +997,7 @@ void ModelPrivate::notifyNodeRemoved(const InternalNodePointer &internalNodePoin
}
foreach (const QPointer<AbstractView> &view, m_viewList) {
- Q_ASSERT(view != 0);
+ Q_ASSERT(view != nullptr);
ModelNode modelNode(internalNodePointer, model(), view.data());
NodeAbstractProperty parentProperty(parentPropertyName, parentNodePointer, model(), view.data());
view->nodeRemoved(modelNode, parentProperty, propertyChange);
@@ -1024,7 +1024,7 @@ void ModelPrivate::notifyNodeTypeChanged(const InternalNodePointer &internalNode
}
foreach (const QPointer<AbstractView> &view, m_viewList) {
- Q_ASSERT(view != 0);
+ Q_ASSERT(view != nullptr);
ModelNode modelNode(internalNodePointer, model(), view.data());
view->nodeTypeChanged(modelNode, type, majorVersion, minorVersion);
}
@@ -1055,7 +1055,7 @@ void ModelPrivate::notifyNodeIdChanged(const InternalNode::Pointer& internalNode
}
foreach (const QPointer<AbstractView> &view, m_viewList) {
- Q_ASSERT(view != 0);
+ Q_ASSERT(view != nullptr);
ModelNode modelNode(internalNodePointer, model(), view.data());
view->nodeIdChanged(modelNode, newId, oldId);
}
@@ -1089,7 +1089,7 @@ void ModelPrivate::notifyBindingPropertiesChanged(const QList<InternalBindingPro
}
foreach (const QPointer<AbstractView> &view, m_viewList) {
- Q_ASSERT(view != 0);
+ Q_ASSERT(view != nullptr);
QList<BindingProperty> propertyList;
foreach (const InternalBindingPropertyPointer &bindingProperty, internalPropertyList) {
propertyList.append(BindingProperty(bindingProperty->name(), bindingProperty->propertyOwner(), model(), view.data()));
@@ -1130,7 +1130,7 @@ void ModelPrivate::notifySignalHandlerPropertiesChanged(const QVector<InternalSi
}
foreach (const QPointer<AbstractView> &view, m_viewList) {
- Q_ASSERT(view != 0);
+ Q_ASSERT(view != nullptr);
QVector<SignalHandlerProperty> propertyList;
foreach (const InternalSignalHandlerPropertyPointer &signalHandlerProperty, internalPropertyList) {
propertyList.append(SignalHandlerProperty(signalHandlerProperty->name(), signalHandlerProperty->propertyOwner(), model(), view.data()));
@@ -1172,7 +1172,7 @@ void ModelPrivate::notifyScriptFunctionsChanged(const InternalNodePointer &inter
}
foreach (const QPointer<AbstractView> &view, m_viewList) {
- Q_ASSERT(view != 0);
+ Q_ASSERT(view != nullptr);
ModelNode node(internalNodePointer, model(), view.data());
view->scriptFunctionsChanged(node, scriptFunctionList);
@@ -1210,7 +1210,7 @@ void ModelPrivate::notifyVariantPropertiesChanged(const InternalNodePointer &int
foreach (const QPointer<AbstractView> &view, m_viewList) {
QList<VariantProperty> propertyList;
- Q_ASSERT(view != 0);
+ Q_ASSERT(view != nullptr);
foreach (const PropertyName &propertyName, propertyNameList) {
VariantProperty property(propertyName, internalNodePointer, model(), view.data());
propertyList.append(property);
@@ -1470,7 +1470,7 @@ void ModelPrivate::changeSelectedNodes(const QList<InternalNode::Pointer> &newSe
const QList<InternalNode::Pointer> &oldSelectedNodeList)
{
foreach (const QPointer<AbstractView> &view, m_viewList) {
- Q_ASSERT(view != 0);
+ Q_ASSERT(view != nullptr);
view->selectedNodesChanged(toModelNodeList(newSelectedNodeList, view.data()), toModelNodeList(oldSelectedNodeList, view.data()));
}
}
@@ -2094,7 +2094,7 @@ The view is informed that it has been registered within the model by a call to A
void Model::attachView(AbstractView *view)
{
// Internal::WriteLocker locker(d);
- RewriterView *castedRewriterView = qobject_cast<RewriterView*>(view);
+ auto castedRewriterView = qobject_cast<RewriterView*>(view);
if (castedRewriterView) {
if (rewriterView() == castedRewriterView)
return;
@@ -2103,7 +2103,7 @@ void Model::attachView(AbstractView *view)
return;
}
- NodeInstanceView *nodeInstanceView = qobject_cast<NodeInstanceView*>(view);
+ auto nodeInstanceView = qobject_cast<NodeInstanceView*>(view);
if (nodeInstanceView)
return;
@@ -2123,11 +2123,11 @@ void Model::detachView(AbstractView *view, ViewNotification emitDetachNotify)
// Internal::WriteLocker locker(d);
bool emitNotify = (emitDetachNotify == NotifyView);
- RewriterView *rewriterView = qobject_cast<RewriterView*>(view);
+ auto rewriterView = qobject_cast<RewriterView*>(view);
if (rewriterView)
return;
- NodeInstanceView *nodeInstanceView = qobject_cast<NodeInstanceView*>(view);
+ auto nodeInstanceView = qobject_cast<NodeInstanceView*>(view);
if (nodeInstanceView)
return;
diff --git a/src/plugins/qmldesigner/designercore/model/model_p.h b/src/plugins/qmldesigner/designercore/model/model_p.h
index 08c6507630..dd29d25e51 100644
--- a/src/plugins/qmldesigner/designercore/model/model_p.h
+++ b/src/plugins/qmldesigner/designercore/model/model_p.h
@@ -56,15 +56,14 @@ class InternalVariantProperty;
class InternalNodeAbstractProperty;
class InternalNodeListProperty;
-typedef QSharedPointer<InternalNode> InternalNodePointer;
-typedef QSharedPointer<InternalProperty> InternalPropertyPointer;
-typedef QSharedPointer<InternalBindingProperty> InternalBindingPropertyPointer;
-typedef QSharedPointer<InternalSignalHandlerProperty> InternalSignalHandlerPropertyPointer;
-typedef QSharedPointer<InternalVariantProperty> InternalVariantPropertyPointer;
-typedef QSharedPointer<InternalNodeAbstractProperty> InternalNodeAbstractPropertyPointer;
-typedef QSharedPointer<InternalNodeListProperty> InternalNodeListPropertyPointer;
-typedef QPair<InternalNodePointer, PropertyName> PropertyPair;
-
+using InternalNodePointer = QSharedPointer<InternalNode>;
+using InternalPropertyPointer = QSharedPointer<InternalProperty>;
+using InternalBindingPropertyPointer = QSharedPointer<InternalBindingProperty>;
+using InternalSignalHandlerPropertyPointer = QSharedPointer<InternalSignalHandlerProperty>;
+using InternalVariantPropertyPointer = QSharedPointer<InternalVariantProperty>;
+using InternalNodeAbstractPropertyPointer = QSharedPointer<InternalNodeAbstractProperty>;
+using InternalNodeListPropertyPointer = QSharedPointer<InternalNodeListProperty>;
+using PropertyPair = QPair<InternalNodePointer, PropertyName>;
class ModelPrivate;
@@ -88,7 +87,7 @@ class ModelPrivate : public QObject {
public:
ModelPrivate(Model *model);
- ~ModelPrivate();
+ ~ModelPrivate() override;
static Model *create(const TypeName &type, int major, int minor, Model *metaInfoPropxyModel);
diff --git a/src/plugins/qmldesigner/designercore/model/modelnode.cpp b/src/plugins/qmldesigner/designercore/model/modelnode.cpp
index 7a80390d85..e6610102b7 100644
--- a/src/plugins/qmldesigner/designercore/model/modelnode.cpp
+++ b/src/plugins/qmldesigner/designercore/model/modelnode.cpp
@@ -103,27 +103,13 @@ ModelNode::ModelNode():
}
-ModelNode::ModelNode(const ModelNode &other):
- m_internalNode(other.m_internalNode),
- m_model(other.m_model),
- m_view(other.m_view)
-{
-}
+ModelNode::ModelNode(const ModelNode &other) = default;
-ModelNode& ModelNode::operator=(const ModelNode &other)
-{
- this->m_model = other.m_model;
- this->m_internalNode = other.m_internalNode;
- this->m_view = other.m_view;
-
- return *this;
-}
+ModelNode& ModelNode::operator=(const ModelNode &other) = default;
/*! \brief does nothing
*/
-ModelNode::~ModelNode()
-{
-}
+ModelNode::~ModelNode() = default;
/*! \brief returns the name of node which is a short cut to a property like objectName
\return name of the node
diff --git a/src/plugins/qmldesigner/designercore/model/modeltotextmerger.cpp b/src/plugins/qmldesigner/designercore/model/modeltotextmerger.cpp
index 39d99accdf..323e40c9f0 100644
--- a/src/plugins/qmldesigner/designercore/model/modeltotextmerger.cpp
+++ b/src/plugins/qmldesigner/designercore/model/modeltotextmerger.cpp
@@ -248,8 +248,7 @@ void ModelToTextMerger::applyChanges()
textModifier->deactivateChangeSignals();
textModifier->startGroup();
- for (int i = 0; i < m_rewriteActions.size(); ++i) {
- RewriteAction* action = m_rewriteActions.at(i);
+ for (auto action : m_rewriteActions) {
if (DebugRewriteActions)
qDebug() << "Next rewrite action:" << qPrintable(action->info());
diff --git a/src/plugins/qmldesigner/designercore/model/modeltotextmerger.h b/src/plugins/qmldesigner/designercore/model/modeltotextmerger.h
index 582a78542f..98dd7c7a90 100644
--- a/src/plugins/qmldesigner/designercore/model/modeltotextmerger.h
+++ b/src/plugins/qmldesigner/designercore/model/modeltotextmerger.h
@@ -36,7 +36,7 @@ namespace Internal {
class ModelToTextMerger
{
- typedef AbstractView::PropertyChangeFlags PropertyChangeFlags;
+ using PropertyChangeFlags = AbstractView::PropertyChangeFlags;
public:
ModelToTextMerger(RewriterView *reWriterView);
diff --git a/src/plugins/qmldesigner/designercore/model/nodeabstractproperty.cpp b/src/plugins/qmldesigner/designercore/model/nodeabstractproperty.cpp
index 27b5a5c746..b9c1fb7075 100644
--- a/src/plugins/qmldesigner/designercore/model/nodeabstractproperty.cpp
+++ b/src/plugins/qmldesigner/designercore/model/nodeabstractproperty.cpp
@@ -35,9 +35,7 @@
namespace QmlDesigner {
-NodeAbstractProperty::NodeAbstractProperty()
-{
-}
+NodeAbstractProperty::NodeAbstractProperty() = default;
NodeAbstractProperty::NodeAbstractProperty(const NodeAbstractProperty &property, AbstractView *view)
: AbstractProperty(property.name(), property.internalNode(), property.model(), view)
diff --git a/src/plugins/qmldesigner/designercore/model/nodelistproperty.cpp b/src/plugins/qmldesigner/designercore/model/nodelistproperty.cpp
index d4735160c5..84864e5e51 100644
--- a/src/plugins/qmldesigner/designercore/model/nodelistproperty.cpp
+++ b/src/plugins/qmldesigner/designercore/model/nodelistproperty.cpp
@@ -36,8 +36,7 @@
namespace QmlDesigner {
-NodeListProperty::NodeListProperty()
-{}
+NodeListProperty::NodeListProperty() = default;
NodeListProperty::NodeListProperty(const NodeListProperty &property, AbstractView *view)
: NodeAbstractProperty(property.name(), property.internalNode(), property.model(), view)
diff --git a/src/plugins/qmldesigner/designercore/model/nodeproperty.cpp b/src/plugins/qmldesigner/designercore/model/nodeproperty.cpp
index 2d262c2ab6..d33af251d1 100644
--- a/src/plugins/qmldesigner/designercore/model/nodeproperty.cpp
+++ b/src/plugins/qmldesigner/designercore/model/nodeproperty.cpp
@@ -33,9 +33,7 @@
namespace QmlDesigner {
-NodeProperty::NodeProperty()
-{
-}
+NodeProperty::NodeProperty() = default;
NodeProperty::NodeProperty(const PropertyName &propertyName, const Internal::InternalNodePointer &internalNode, Model* model, AbstractView *view)
: NodeAbstractProperty(propertyName, internalNode, model, view)
diff --git a/src/plugins/qmldesigner/designercore/model/plaintexteditmodifier.cpp b/src/plugins/qmldesigner/designercore/model/plaintexteditmodifier.cpp
index f6aa4caf1c..f87dc73a2c 100644
--- a/src/plugins/qmldesigner/designercore/model/plaintexteditmodifier.cpp
+++ b/src/plugins/qmldesigner/designercore/model/plaintexteditmodifier.cpp
@@ -36,7 +36,7 @@ using namespace Utils;
using namespace QmlDesigner;
PlainTextEditModifier::PlainTextEditModifier(QPlainTextEdit *textEdit):
- m_changeSet(0),
+ m_changeSet(nullptr),
m_textEdit(textEdit),
m_changeSignalsEnabled(true),
m_pendingChangeSignal(false),
@@ -48,9 +48,7 @@ PlainTextEditModifier::PlainTextEditModifier(QPlainTextEdit *textEdit):
this, &PlainTextEditModifier::textEditChanged);
}
-PlainTextEditModifier::~PlainTextEditModifier()
-{
-}
+PlainTextEditModifier::~PlainTextEditModifier() = default;
void PlainTextEditModifier::replace(int offset, int length, const QString &replacement)
{
@@ -135,7 +133,7 @@ void PlainTextEditModifier::commitGroup()
if (m_changeSet) {
runRewriting(m_changeSet);
delete m_changeSet;
- m_changeSet = 0;
+ m_changeSet = nullptr;
}
textCursor().endEditBlock();
diff --git a/src/plugins/qmldesigner/designercore/model/propertycontainer.cpp b/src/plugins/qmldesigner/designercore/model/propertycontainer.cpp
index e2b80bae0f..ae62b4d0e6 100644
--- a/src/plugins/qmldesigner/designercore/model/propertycontainer.cpp
+++ b/src/plugins/qmldesigner/designercore/model/propertycontainer.cpp
@@ -35,9 +35,7 @@ using namespace QmlDesigner::Internal;
// Creates invalid PropertyContainer
-PropertyContainer::PropertyContainer()
-{
-}
+PropertyContainer::PropertyContainer() = default;
PropertyContainer::PropertyContainer(const PropertyName &name, const QString &type, const QVariant &value)
: m_name(name), m_type(type), m_value(value)
diff --git a/src/plugins/qmldesigner/designercore/model/propertynode.cpp b/src/plugins/qmldesigner/designercore/model/propertynode.cpp
index 5d1f502c24..d616c0ac70 100644
--- a/src/plugins/qmldesigner/designercore/model/propertynode.cpp
+++ b/src/plugins/qmldesigner/designercore/model/propertynode.cpp
@@ -27,8 +27,6 @@
namespace QmlDesigner {
-PropertyNode::PropertyNode()
-{
-}
+PropertyNode::PropertyNode() = default;
} // namespace QmlDesigner
diff --git a/src/plugins/qmldesigner/designercore/model/propertyparser.cpp b/src/plugins/qmldesigner/designercore/model/propertyparser.cpp
index 943294d345..a39f2b221b 100644
--- a/src/plugins/qmldesigner/designercore/model/propertyparser.cpp
+++ b/src/plugins/qmldesigner/designercore/model/propertyparser.cpp
@@ -34,7 +34,7 @@
namespace {
-static uchar fromHex(const uchar c, const uchar c2)
+uchar fromHex(const uchar c, const uchar c2)
{
uchar rv = 0;
if (c >= '0' && c <= '9')
@@ -54,7 +54,7 @@ static uchar fromHex(const uchar c, const uchar c2)
return rv;
}
-static uchar fromHex(const QString &s, int idx)
+uchar fromHex(const QString &s, int idx)
{
uchar c = s.at(idx).toLatin1();
uchar c2 = s.at(idx + 1).toLatin1();
@@ -69,7 +69,7 @@ QColor colorFromString(const QString &s, bool *ok)
uchar g = fromHex(s, 5);
uchar b = fromHex(s, 7);
if (ok) *ok = true;
- return QColor(r, g, b, a);
+ return {r, g, b, a};
} else {
QColor rv(s);
if (ok) *ok = rv.isValid();
@@ -82,13 +82,13 @@ QPointF pointFFromString(const QString &s, bool *ok)
if (s.count(QLatin1Char(',')) != 1) {
if (ok)
*ok = false;
- return QPointF();
+ return {};
}
bool xGood, yGood;
int index = s.indexOf(QLatin1Char(','));
- qreal xCoord = s.left(index).toDouble(&xGood);
- qreal yCoord = s.mid(index+1).toDouble(&yGood);
+ qreal xCoord = s.leftRef(index).toDouble(&xGood);
+ qreal yCoord = s.midRef(index+1).toDouble(&yGood);
if (!xGood || !yGood) {
if (ok)
*ok = false;
@@ -105,17 +105,17 @@ QRectF rectFFromString(const QString &s, bool *ok)
if (s.count(QLatin1Char(',')) != 2 || s.count(QLatin1Char('x')) != 1) {
if (ok)
*ok = false;
- return QRectF();
+ return {};
}
bool xGood, yGood, wGood, hGood;
int index = s.indexOf(QLatin1Char(','));
- qreal x = s.left(index).toDouble(&xGood);
+ qreal x = s.leftRef(index).toDouble(&xGood);
int index2 = s.indexOf(QLatin1Char(','), index+1);
- qreal y = s.mid(index+1, index2-index-1).toDouble(&yGood);
+ qreal y = s.midRef(index+1, index2-index-1).toDouble(&yGood);
index = s.indexOf(QLatin1Char('x'), index2+1);
- qreal width = s.mid(index2+1, index-index2-1).toDouble(&wGood);
- qreal height = s.mid(index+1).toDouble(&hGood);
+ qreal width = s.midRef(index2+1, index-index2-1).toDouble(&wGood);
+ qreal height = s.midRef(index+1).toDouble(&hGood);
if (!xGood || !yGood || !wGood || !hGood) {
if (ok)
*ok = false;
@@ -132,13 +132,13 @@ QSizeF sizeFFromString(const QString &s, bool *ok)
if (s.count(QLatin1Char('x')) != 1) {
if (ok)
*ok = false;
- return QSizeF();
+ return {};
}
bool wGood, hGood;
int index = s.indexOf(QLatin1Char('x'));
- qreal width = s.left(index).toDouble(&wGood);
- qreal height = s.mid(index+1).toDouble(&hGood);
+ qreal width = s.leftRef(index).toDouble(&wGood);
+ qreal height = s.midRef(index+1).toDouble(&hGood);
if (!wGood || !hGood) {
if (ok)
*ok = false;
@@ -155,15 +155,15 @@ QVector3D vector3DFromString(const QString &s, bool *ok)
if (s.count(QLatin1Char(',')) != 2) {
if (ok)
*ok = false;
- return QVector3D();
+ return {};
}
bool xGood, yGood, zGood;
int index = s.indexOf(QLatin1Char(','));
int index2 = s.indexOf(QLatin1Char(','), index+1);
- qreal xCoord = s.left(index).toDouble(&xGood);
- qreal yCoord = s.mid(index+1, index2-index-1).toDouble(&yGood);
- qreal zCoord = s.mid(index2+1).toDouble(&zGood);
+ qreal xCoord = s.leftRef(index).toDouble(&xGood);
+ qreal yCoord = s.midRef(index+1, index2-index-1).toDouble(&yGood);
+ qreal zCoord = s.midRef(index2+1).toDouble(&zGood);
if (!xGood || !yGood || !zGood) {
if (ok)
*ok = false;
diff --git a/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp b/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp
index f05826945c..fb695723a8 100644
--- a/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp
+++ b/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp
@@ -69,7 +69,7 @@ static QmlItemNode createQmlItemNodeFromSource(AbstractView *view, const QString
textEdit.setPlainText(source);
NotIndentingTextEditModifier modifier(&textEdit);
- QScopedPointer<RewriterView> rewriterView(new RewriterView(RewriterView::Amend, 0));
+ QScopedPointer<RewriterView> rewriterView(new RewriterView(RewriterView::Amend, nullptr));
rewriterView->setCheckSemanticErrors(false);
rewriterView->setTextModifier(&modifier);
inputModel->setRewriterView(rewriterView.data());
@@ -113,7 +113,7 @@ QmlItemNode QmlItemNode::createQmlItemNode(AbstractView *view, const ItemLibrary
int minorVersion = metaInfo.minorVersion();
int majorVersion = metaInfo.majorVersion();
- typedef QPair<PropertyName, QString> PropertyBindingEntry;
+ using PropertyBindingEntry = QPair<PropertyName, QString>;
QList<PropertyBindingEntry> propertyBindingList;
if (itemLibraryEntry.qmlSource().isEmpty()) {
QList<QPair<PropertyName, QVariant> > propertyPairList;
@@ -455,7 +455,7 @@ QPointF QmlItemNode::instanceScenePosition() const
else if (modelNode().hasParentProperty() && QmlItemNode::isValidQmlItemNode(modelNode().parentProperty().parentModelNode()))
return QmlItemNode(modelNode().parentProperty().parentModelNode()).instanceSceneTransform().map(nodeInstance().position());
- return QPointF();
+ return {};
}
QPointF QmlItemNode::instancePosition() const
diff --git a/src/plugins/qmldesigner/designercore/model/qmlmodelnodefacade.cpp b/src/plugins/qmldesigner/designercore/model/qmlmodelnodefacade.cpp
index c63e56a22d..5c02c94676 100644
--- a/src/plugins/qmldesigner/designercore/model/qmlmodelnodefacade.cpp
+++ b/src/plugins/qmldesigner/designercore/model/qmlmodelnodefacade.cpp
@@ -36,7 +36,7 @@ AbstractView *QmlModelNodeFacade::view() const
if (modelNode().isValid())
return modelNode().view();
else
- return 0;
+ return nullptr;
}
NodeInstanceView *QmlModelNodeFacade::nodeInstanceView(const ModelNode &modelNode)
@@ -53,8 +53,7 @@ NodeInstanceView *QmlModelNodeFacade::nodeInstanceView() const
QmlModelNodeFacade::QmlModelNodeFacade(const ModelNode &modelNode) : m_modelNode(modelNode)
{}
-QmlModelNodeFacade::~QmlModelNodeFacade()
-{}
+QmlModelNodeFacade::~QmlModelNodeFacade() = default;
QmlModelNodeFacade::operator ModelNode() const
{
diff --git a/src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp b/src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp
index 6d598350f7..650d1e7305 100644
--- a/src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp
+++ b/src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp
@@ -568,7 +568,6 @@ QmlItemNode QmlObjectNode::itemForInstance(const NodeInstance &instance) const
}
QmlObjectNode::QmlObjectNode()
- : QmlModelNodeFacade()
{
}
diff --git a/src/plugins/qmldesigner/designercore/model/qmlstate.cpp b/src/plugins/qmldesigner/designercore/model/qmlstate.cpp
index c937d446d6..adb56076eb 100644
--- a/src/plugins/qmldesigner/designercore/model/qmlstate.cpp
+++ b/src/plugins/qmldesigner/designercore/model/qmlstate.cpp
@@ -38,7 +38,6 @@
namespace QmlDesigner {
QmlModelState::QmlModelState()
- : QmlModelNodeFacade()
{
}
diff --git a/src/plugins/qmldesigner/designercore/model/qmltimeline.cpp b/src/plugins/qmldesigner/designercore/model/qmltimeline.cpp
index 462604e82d..14f18327fe 100644
--- a/src/plugins/qmldesigner/designercore/model/qmltimeline.cpp
+++ b/src/plugins/qmldesigner/designercore/model/qmltimeline.cpp
@@ -40,10 +40,7 @@
namespace QmlDesigner {
-QmlTimeline::QmlTimeline()
-{
-
-}
+QmlTimeline::QmlTimeline() = default;
QmlTimeline::QmlTimeline(const ModelNode &modelNode) : QmlModelNodeFacade(modelNode)
{
diff --git a/src/plugins/qmldesigner/designercore/model/qmltimelinekeyframegroup.cpp b/src/plugins/qmldesigner/designercore/model/qmltimelinekeyframegroup.cpp
index 86f3815014..e457e5cdaa 100644
--- a/src/plugins/qmldesigner/designercore/model/qmltimelinekeyframegroup.cpp
+++ b/src/plugins/qmldesigner/designercore/model/qmltimelinekeyframegroup.cpp
@@ -38,10 +38,7 @@
namespace QmlDesigner {
-QmlTimelineKeyframeGroup::QmlTimelineKeyframeGroup()
-{
-
-}
+QmlTimelineKeyframeGroup::QmlTimelineKeyframeGroup() = default;
QmlTimelineKeyframeGroup::QmlTimelineKeyframeGroup(const ModelNode &modelNode) : QmlModelNodeFacade(modelNode)
{
@@ -93,7 +90,7 @@ int QmlTimelineKeyframeGroup::getSupposedTargetIndex(qreal newFrame) const
{
const NodeListProperty nodeListProperty = modelNode().defaultNodeListProperty();
int i = 0;
- for (auto node : nodeListProperty.toModelNodeList()) {
+ for (const auto &node : nodeListProperty.toModelNodeList()) {
if (node.hasVariantProperty("frame")) {
const qreal currentFrame = node.variantProperty("frame").value().toReal();
if (!qFuzzyCompare(currentFrame, newFrame)) { //Ignore the frame itself
diff --git a/src/plugins/qmldesigner/designercore/model/rewriteaction.cpp b/src/plugins/qmldesigner/designercore/model/rewriteaction.cpp
index 154a80f760..106341043d 100644
--- a/src/plugins/qmldesigner/designercore/model/rewriteaction.cpp
+++ b/src/plugins/qmldesigner/designercore/model/rewriteaction.cpp
@@ -36,7 +36,7 @@ using namespace QmlDesigner;
namespace { // anonymous
-static inline QString toInfo(const Import &import)
+QString toInfo(const Import &import)
{
QString txt;
@@ -65,7 +65,7 @@ static inline QString toInfo(const Import &import)
return txt;
}
-static inline QString toString(QmlRefactoring::PropertyType type)
+QString toString(QmlRefactoring::PropertyType type)
{
switch (type) {
case QmlRefactoring::ArrayBinding: return QStringLiteral("array binding");
diff --git a/src/plugins/qmldesigner/designercore/model/rewriteaction.h b/src/plugins/qmldesigner/designercore/model/rewriteaction.h
index 4c461e8aea..a4a6a82adc 100644
--- a/src/plugins/qmldesigner/designercore/model/rewriteaction.h
+++ b/src/plugins/qmldesigner/designercore/model/rewriteaction.h
@@ -50,25 +50,24 @@ public:
virtual bool execute(QmlDesigner::QmlRefactoring &refactoring, ModelNodePositionStorage &positionStore) = 0;
virtual QString info() const = 0;
- virtual AddImportRewriteAction *asAddImportRewriteAction() { return 0; }
- virtual AddPropertyRewriteAction *asAddPropertyRewriteAction() { return 0; }
- virtual ChangeIdRewriteAction *asChangeIdRewriteAction() { return 0; }
- virtual ChangePropertyRewriteAction *asChangePropertyRewriteAction() { return 0; }
- virtual ChangeTypeRewriteAction *asChangeTypeRewriteAction() { return 0; }
- virtual RemoveImportRewriteAction * asRemoveImportRewriteAction() { return 0; }
- virtual RemoveNodeRewriteAction *asRemoveNodeRewriteAction() { return 0; }
- virtual RemovePropertyRewriteAction *asRemovePropertyRewriteAction() { return 0; }
- virtual ReparentNodeRewriteAction *asReparentNodeRewriteAction() { return 0; }
- virtual MoveNodeRewriteAction *asMoveNodeRewriteAction() { return 0; }
- virtual ~RewriteAction() {}
+ virtual AddImportRewriteAction *asAddImportRewriteAction() { return nullptr; }
+ virtual AddPropertyRewriteAction *asAddPropertyRewriteAction() { return nullptr; }
+ virtual ChangeIdRewriteAction *asChangeIdRewriteAction() { return nullptr; }
+ virtual ChangePropertyRewriteAction *asChangePropertyRewriteAction() { return nullptr; }
+ virtual ChangeTypeRewriteAction *asChangeTypeRewriteAction() { return nullptr; }
+ virtual RemoveImportRewriteAction *asRemoveImportRewriteAction() { return nullptr; }
+ virtual RemoveNodeRewriteAction *asRemoveNodeRewriteAction() { return nullptr; }
+ virtual RemovePropertyRewriteAction *asRemovePropertyRewriteAction() { return nullptr; }
+ virtual ReparentNodeRewriteAction *asReparentNodeRewriteAction() { return nullptr; }
+ virtual MoveNodeRewriteAction *asMoveNodeRewriteAction() { return nullptr; }
+ virtual ~RewriteAction() = default;
protected:
- RewriteAction()
- {}
+ RewriteAction() = default;
-private:
- RewriteAction(const RewriteAction &);
- RewriteAction &operator=(const RewriteAction&);
+public:
+ RewriteAction(const RewriteAction&) = delete;
+ RewriteAction &operator=(const RewriteAction&) = delete;
};
class AddPropertyRewriteAction: public RewriteAction
@@ -79,10 +78,10 @@ public:
m_sheduledInHierarchy(property.isValid() && property.parentModelNode().isInHierarchy())
{}
- virtual bool execute(QmlDesigner::QmlRefactoring &refactoring, ModelNodePositionStorage &positionStore);
- virtual QString info() const;
+ bool execute(QmlDesigner::QmlRefactoring &refactoring, ModelNodePositionStorage &positionStore) override;
+ QString info() const override;
- virtual AddPropertyRewriteAction *asAddPropertyRewriteAction() { return this; }
+ AddPropertyRewriteAction *asAddPropertyRewriteAction() override { return this; }
AbstractProperty property() const
{ return m_property; }
@@ -111,10 +110,10 @@ public:
m_node(node), m_oldId(oldId), m_newId(newId)
{}
- virtual bool execute(QmlDesigner::QmlRefactoring &refactoring, ModelNodePositionStorage &positionStore);
- virtual QString info() const;
+ bool execute(QmlDesigner::QmlRefactoring &refactoring, ModelNodePositionStorage &positionStore) override;
+ QString info() const override;
- virtual ChangeIdRewriteAction *asChangeIdRewriteAction() { return this; }
+ ChangeIdRewriteAction *asChangeIdRewriteAction() override { return this; }
ModelNode node() const
{ return m_node; }
@@ -133,10 +132,10 @@ public:
m_sheduledInHierarchy(property.isValid() && property.parentModelNode().isInHierarchy())
{}
- virtual bool execute(QmlDesigner::QmlRefactoring &refactoring, ModelNodePositionStorage &positionStore);
- virtual QString info() const;
+ bool execute(QmlDesigner::QmlRefactoring &refactoring, ModelNodePositionStorage &positionStore) override;
+ QString info() const override;
- virtual ChangePropertyRewriteAction *asChangePropertyRewriteAction() { return this; }
+ ChangePropertyRewriteAction *asChangePropertyRewriteAction() override { return this; }
AbstractProperty property() const
{ return m_property; }
@@ -165,10 +164,10 @@ public:
m_node(node)
{}
- virtual bool execute(QmlDesigner::QmlRefactoring &refactoring, ModelNodePositionStorage &positionStore);
- virtual QString info() const;
+ bool execute(QmlDesigner::QmlRefactoring &refactoring, ModelNodePositionStorage &positionStore) override;
+ QString info() const override;
- virtual ChangeTypeRewriteAction *asChangeTypeRewriteAction() { return this; }
+ ChangeTypeRewriteAction *asChangeTypeRewriteAction() override { return this; }
ModelNode node() const
{ return m_node; }
@@ -184,10 +183,10 @@ public:
m_node(node)
{}
- virtual bool execute(QmlDesigner::QmlRefactoring &refactoring, ModelNodePositionStorage &positionStore);
- virtual QString info() const;
+ bool execute(QmlDesigner::QmlRefactoring &refactoring, ModelNodePositionStorage &positionStore) override;
+ QString info() const override;
- virtual RemoveNodeRewriteAction *asRemoveNodeRewriteAction() { return this; }
+ RemoveNodeRewriteAction *asRemoveNodeRewriteAction() override { return this; }
ModelNode node() const
{ return m_node; }
@@ -203,10 +202,10 @@ public:
m_property(property)
{}
- virtual bool execute(QmlDesigner::QmlRefactoring &refactoring, ModelNodePositionStorage &positionStore);
- virtual QString info() const;
+ bool execute(QmlDesigner::QmlRefactoring &refactoring, ModelNodePositionStorage &positionStore) override;
+ QString info() const override;
- virtual RemovePropertyRewriteAction *asRemovePropertyRewriteAction() { return this; }
+ RemovePropertyRewriteAction *asRemovePropertyRewriteAction() override { return this; }
AbstractProperty property() const
{ return m_property; }
@@ -222,10 +221,10 @@ public:
m_node(node), m_oldParentProperty(oldParentProperty), m_targetProperty(targetProperty), m_propertyType(propertyType)
{}
- virtual bool execute(QmlDesigner::QmlRefactoring &refactoring, ModelNodePositionStorage &positionStore);
- virtual QString info() const;
+ bool execute(QmlDesigner::QmlRefactoring &refactoring, ModelNodePositionStorage &positionStore) override;
+ QString info() const override;
- virtual ReparentNodeRewriteAction *asReparentNodeRewriteAction() { return this; }
+ ReparentNodeRewriteAction *asReparentNodeRewriteAction() override { return this; }
ModelNode reparentedNode() const
{ return m_node; }
@@ -256,10 +255,10 @@ public:
m_movingNode(movingNode), m_newTrailingNode(newTrailingNode)
{}
- virtual bool execute(QmlDesigner::QmlRefactoring &refactoring, ModelNodePositionStorage &positionStore);
- virtual QString info() const;
+ bool execute(QmlDesigner::QmlRefactoring &refactoring, ModelNodePositionStorage &positionStore) override;
+ QString info() const override;
- virtual MoveNodeRewriteAction *asMoveNodeRewriteAction() { return this; }
+ MoveNodeRewriteAction *asMoveNodeRewriteAction() override { return this; }
private:
ModelNode m_movingNode;
@@ -273,10 +272,10 @@ public:
m_import(import)
{}
- virtual bool execute(QmlDesigner::QmlRefactoring &refactoring, ModelNodePositionStorage &positionStore);
- virtual QString info() const;
+ bool execute(QmlDesigner::QmlRefactoring &refactoring, ModelNodePositionStorage &positionStore) override;
+ QString info() const override;
- virtual AddImportRewriteAction *asAddImportRewriteAction() { return this; }
+ AddImportRewriteAction *asAddImportRewriteAction() override { return this; }
Import import() const { return m_import; }
@@ -291,10 +290,10 @@ public:
m_import(import)
{}
- virtual bool execute(QmlDesigner::QmlRefactoring &refactoring, ModelNodePositionStorage &positionStore);
- virtual QString info() const;
+ bool execute(QmlDesigner::QmlRefactoring &refactoring, ModelNodePositionStorage &positionStore) override;
+ QString info() const override;
- virtual RemoveImportRewriteAction *asRemoveImportRewriteAction() { return this; }
+ RemoveImportRewriteAction *asRemoveImportRewriteAction() override { return this; }
Import import() const { return m_import; }
diff --git a/src/plugins/qmldesigner/designercore/model/rewriteactioncompressor.cpp b/src/plugins/qmldesigner/designercore/model/rewriteactioncompressor.cpp
index fef81225f4..6dac375ff7 100644
--- a/src/plugins/qmldesigner/designercore/model/rewriteactioncompressor.cpp
+++ b/src/plugins/qmldesigner/designercore/model/rewriteactioncompressor.cpp
@@ -317,7 +317,7 @@ void RewriteActionCompressor::compressAddEditActions(QList<RewriteAction *> &act
QmlTextGenerator gen(m_propertyOrder);
foreach (RewriteAction *action, dirtyActions) {
- RewriteAction *newAction = 0;
+ RewriteAction *newAction = nullptr;
if (AddPropertyRewriteAction *addAction = action->asAddPropertyRewriteAction()) {
newAction = new AddPropertyRewriteAction(addAction->property(),
gen(addAction->containedModelNode()),
@@ -364,7 +364,7 @@ void RewriteActionCompressor::compressAddReparentActions(QList<RewriteAction *>
RewriteAction *previousAction = addedNodes[reparentAction->reparentedNode()];
actionsToRemove.append(previousAction);
- RewriteAction *replacementAction = 0;
+ RewriteAction *replacementAction = nullptr;
if (AddPropertyRewriteAction *addAction = previousAction->asAddPropertyRewriteAction()) {
replacementAction = new AddPropertyRewriteAction(reparentAction->targetProperty(),
addAction->valueText(),
diff --git a/src/plugins/qmldesigner/designercore/model/rewriterview.cpp b/src/plugins/qmldesigner/designercore/model/rewriterview.cpp
index ab4dba68df..f42a125555 100644
--- a/src/plugins/qmldesigner/designercore/model/rewriterview.cpp
+++ b/src/plugins/qmldesigner/designercore/model/rewriterview.cpp
@@ -70,9 +70,7 @@ RewriterView::RewriterView(DifferenceHandling differenceHandling, QObject *paren
connect(&m_amendTimer, &QTimer::timeout, this, &RewriterView::amendQmlText);
}
-RewriterView::~RewriterView()
-{
-}
+RewriterView::~RewriterView() = default;
Internal::ModelToTextMerger *RewriterView::modelToTextMerger() const
{
@@ -470,7 +468,7 @@ QString RewriterView::auxiliaryDataAsQML() const
QString str = "Designer {\n ";
int columnCount = 0;
- for (const auto node : allModelNodes()) {
+ for (const auto &node : allModelNodes()) {
QHash<PropertyName, QVariant> data = node.auxiliaryData();
if (!data.isEmpty()) {
hasAuxData = true;
@@ -920,13 +918,11 @@ QString RewriterView::getRawAuxiliaryData() const
const QString oldText = m_textModifier->text();
- QString newText = oldText;
-
- int startIndex = newText.indexOf(annotationsStart());
- int endIndex = newText.indexOf(annotationsEnd());
+ int startIndex = oldText.indexOf(annotationsStart());
+ int endIndex = oldText.indexOf(annotationsEnd());
if (startIndex > 0 && endIndex > 0)
- return newText.mid(startIndex, endIndex - startIndex + annotationsEnd().length());
+ return oldText.mid(startIndex, endIndex - startIndex + annotationsEnd().length());
return {};
}
@@ -959,14 +955,14 @@ void RewriterView::writeAuxiliaryData()
changeSet.apply(&tc);
}
-static void checkNode(QmlJS::SimpleReaderNode::Ptr node, RewriterView *view);
+static void checkNode(const QmlJS::SimpleReaderNode::Ptr &node, RewriterView *view);
-static void checkChildNodes(QmlJS::SimpleReaderNode::Ptr node, RewriterView *view)
+static void checkChildNodes(const QmlJS::SimpleReaderNode::Ptr &node, RewriterView *view)
{
if (!node)
return;
- for (auto child : node->children())
+ for (const auto &child : node->children())
checkNode(child, view);
}
@@ -977,7 +973,7 @@ static QString fixUpIllegalChars(const QString &str)
return ret;
}
-static void checkNode(QmlJS::SimpleReaderNode::Ptr node, RewriterView *view)
+static void checkNode(const QmlJS::SimpleReaderNode::Ptr &node, RewriterView *view)
{
if (!node)
return;
diff --git a/src/plugins/qmldesigner/designercore/model/signalhandlerproperty.cpp b/src/plugins/qmldesigner/designercore/model/signalhandlerproperty.cpp
index 3ad9280e7a..e1701a0b71 100644
--- a/src/plugins/qmldesigner/designercore/model/signalhandlerproperty.cpp
+++ b/src/plugins/qmldesigner/designercore/model/signalhandlerproperty.cpp
@@ -33,9 +33,7 @@
#include "model_p.h"
namespace QmlDesigner {
-SignalHandlerProperty::SignalHandlerProperty()
-{
-}
+SignalHandlerProperty::SignalHandlerProperty() = default;
SignalHandlerProperty::SignalHandlerProperty(const SignalHandlerProperty &property, AbstractView *view)
: AbstractProperty(property.name(), property.internalNode(), property.model(), view)
diff --git a/src/plugins/qmldesigner/designercore/model/textmodifier.cpp b/src/plugins/qmldesigner/designercore/model/textmodifier.cpp
index 9016619f6d..8653f5efd9 100644
--- a/src/plugins/qmldesigner/designercore/model/textmodifier.cpp
+++ b/src/plugins/qmldesigner/designercore/model/textmodifier.cpp
@@ -31,9 +31,7 @@
using namespace QmlDesigner;
-TextModifier::~TextModifier()
-{
-}
+TextModifier::~TextModifier() = default;
int TextModifier::getLineInDocument(QTextDocument *document, int offset)
{
diff --git a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp
index 9066a65d7e..df9fbb0b94 100644
--- a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp
+++ b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp
@@ -68,12 +68,12 @@ static Q_LOGGING_CATEGORY(rewriterBenchmark, "qtc.rewriter.load")
namespace {
-static inline bool isSupportedAttachedProperties(const QString &propertyName)
+bool isSupportedAttachedProperties(const QString &propertyName)
{
return propertyName.startsWith(QLatin1String("Layout."));
}
-static inline QStringList supportedVersionsList()
+QStringList supportedVersionsList()
{
static const QStringList list = {
"2.0", "2.1", "2.2", "2.3", "2.4", "2.5", "2.6", "2.7", "2.8", "2.9", "2.10", "2.11"
@@ -81,7 +81,7 @@ static inline QStringList supportedVersionsList()
return list;
}
-static inline QStringList globalQtEnums()
+QStringList globalQtEnums()
{
static const QStringList list = {
"Horizontal", "Vertical", "AlignVCenter", "AlignLeft", "LeftToRight", "RightToLeft",
@@ -93,7 +93,7 @@ static inline QStringList globalQtEnums()
return list;
}
-static inline QStringList knownEnumScopes()
+QStringList knownEnumScopes()
{
static const QStringList list = {
"TextInput", "TextEdit", "Material", "Universal", "Font", "Shape", "ShapePath", "AbstractButton"
@@ -101,12 +101,12 @@ static inline QStringList knownEnumScopes()
return list;
}
-static inline bool supportedQtQuickVersion(const QString &version)
+bool supportedQtQuickVersion(const QString &version)
{
return supportedVersionsList().contains(version);
}
-static inline QString stripQuotes(const QString &str)
+QString stripQuotes(const QString &str)
{
if ((str.startsWith(QLatin1Char('"')) && str.endsWith(QLatin1Char('"')))
|| (str.startsWith(QLatin1Char('\'')) && str.endsWith(QLatin1Char('\''))))
@@ -115,7 +115,7 @@ static inline QString stripQuotes(const QString &str)
return str;
}
-static inline QString deEscape(const QString &value)
+inline QString deEscape(const QString &value)
{
QString result = value;
@@ -128,7 +128,7 @@ static inline QString deEscape(const QString &value)
return result;
}
-static inline unsigned char convertHex(ushort c)
+unsigned char convertHex(ushort c)
{
if (c >= '0' && c <= '9')
return (c - '0');
@@ -145,7 +145,7 @@ QChar convertUnicode(ushort c1, ushort c2,
(convertHex(c1) << 4) + convertHex(c2));
}
-static inline bool isHexDigit(ushort c)
+bool isHexDigit(ushort c)
{
return ((c >= '0' && c <= '9')
|| (c >= 'a' && c <= 'f')
@@ -153,7 +153,7 @@ static inline bool isHexDigit(ushort c)
}
-static inline QString fixEscapedUnicodeChar(const QString &value) //convert "\u2939"
+QString fixEscapedUnicodeChar(const QString &value) //convert "\u2939"
{
if (value.count() == 6 && value.at(0) == QLatin1Char('\\') && value.at(1) == QLatin1Char('u') &&
isHexDigit(value.at(2).unicode()) && isHexDigit(value.at(3).unicode()) &&
@@ -163,7 +163,7 @@ static inline QString fixEscapedUnicodeChar(const QString &value) //convert "\u2
return value;
}
-static inline bool isSignalPropertyName(const QString &signalName)
+bool isSignalPropertyName(const QString &signalName)
{
if (signalName.isEmpty())
return false;
@@ -175,7 +175,7 @@ static inline bool isSignalPropertyName(const QString &signalName)
pureSignalName.at(2).isLetter();
}
-static inline QVariant cleverConvert(const QString &value)
+QVariant cleverConvert(const QString &value)
{
if (value == QLatin1String("true"))
return QVariant(true);
@@ -191,15 +191,15 @@ static inline QVariant cleverConvert(const QString &value)
return QVariant(value);
}
-static bool isLiteralValue(AST::ExpressionNode *expr)
+bool isLiteralValue(AST::ExpressionNode *expr)
{
if (AST::cast<AST::NumericLiteral*>(expr))
return true;
- else if (AST::cast<AST::StringLiteral*>(expr))
+ if (AST::cast<AST::StringLiteral*>(expr))
return true;
- else if (AST::UnaryPlusExpression *plusExpr = AST::cast<AST::UnaryPlusExpression*>(expr))
+ else if (auto plusExpr = AST::cast<AST::UnaryPlusExpression*>(expr))
return isLiteralValue(plusExpr->expression);
- else if (AST::UnaryMinusExpression *minusExpr = AST::cast<AST::UnaryMinusExpression*>(expr))
+ else if (auto minusExpr = AST::cast<AST::UnaryMinusExpression*>(expr))
return isLiteralValue(minusExpr->expression);
else if (AST::cast<AST::TrueLiteral*>(expr))
return true;
@@ -209,16 +209,16 @@ static bool isLiteralValue(AST::ExpressionNode *expr)
return false;
}
-static bool isLiteralValue(AST::Statement *stmt)
+bool isLiteralValue(AST::Statement *stmt)
{
- AST::ExpressionStatement *exprStmt = AST::cast<AST::ExpressionStatement *>(stmt);
+ auto exprStmt = AST::cast<AST::ExpressionStatement *>(stmt);
if (exprStmt)
return isLiteralValue(exprStmt->expression);
else
return false;
}
-static inline bool isLiteralValue(AST::UiScriptBinding *script)
+bool isLiteralValue(AST::UiScriptBinding *script)
{
if (!script || !script->statement)
return false;
@@ -226,7 +226,7 @@ static inline bool isLiteralValue(AST::UiScriptBinding *script)
return isLiteralValue(script->statement);
}
-static inline int propertyType(const QString &typeName)
+int propertyType(const QString &typeName)
{
if (typeName == QStringLiteral("bool"))
return QMetaType::type("bool");
@@ -250,7 +250,7 @@ static inline int propertyType(const QString &typeName)
return -1;
}
-static inline QVariant convertDynamicPropertyValueToVariant(const QString &astValue,
+QVariant convertDynamicPropertyValueToVariant(const QString &astValue,
const QString &astType)
{
const QString cleanedValue = fixEscapedUnicodeChar(deEscape(stripQuotes(astValue.trimmed())));
@@ -271,12 +271,12 @@ static inline QVariant convertDynamicPropertyValueToVariant(const QString &astVa
}
}
-static bool isListElementType(const QmlDesigner::TypeName &type)
+bool isListElementType(const QmlDesigner::TypeName &type)
{
return type == "ListElement" || type == "QtQuick.ListElement" || type == "Qt.ListElement";
}
-static bool isComponentType(const QmlDesigner::TypeName &type)
+bool isComponentType(const QmlDesigner::TypeName &type)
{
return type == "Component"
|| type == "Qt.Component"
@@ -285,7 +285,7 @@ static bool isComponentType(const QmlDesigner::TypeName &type)
|| type == "QQmlComponent";
}
-static bool isCustomParserType(const QmlDesigner::TypeName &type)
+bool isCustomParserType(const QmlDesigner::TypeName &type)
{
return type == "QtQuick.VisualItemModel" || type == "Qt.VisualItemModel" ||
type == "QtQuick.VisualDataModel" || type == "Qt.VisualDataModel" ||
@@ -294,17 +294,17 @@ static bool isCustomParserType(const QmlDesigner::TypeName &type)
}
-static bool isPropertyChangesType(const QmlDesigner::TypeName &type)
+bool isPropertyChangesType(const QmlDesigner::TypeName &type)
{
return type == "PropertyChanges" || type == "QtQuick.PropertyChanges" || type == "Qt.PropertyChanges";
}
-static bool isConnectionsType(const QmlDesigner::TypeName &type)
+bool isConnectionsType(const QmlDesigner::TypeName &type)
{
return type == "Connections" || type == "QtQuick.Connections" || type == "Qt.Connections";
}
-static bool propertyIsComponentType(const QmlDesigner::NodeAbstractProperty &property, const QmlDesigner::TypeName &type, QmlDesigner::Model *model)
+bool propertyIsComponentType(const QmlDesigner::NodeAbstractProperty &property, const QmlDesigner::TypeName &type, QmlDesigner::Model *model)
{
if (model->metaInfo(type).isSubclassOf("QtQuick.Component") && !isComponentType(type))
return false; //If the type is already a subclass of Component keep it
@@ -313,7 +313,7 @@ static bool propertyIsComponentType(const QmlDesigner::NodeAbstractProperty &pro
isComponentType(property.parentModelNode().metaInfo().propertyTypeName(property.name()));
}
-static inline QString extractComponentFromQml(const QString &source)
+QString extractComponentFromQml(const QString &source)
{
if (source.isEmpty())
return QString();
@@ -336,7 +336,7 @@ static inline QString extractComponentFromQml(const QString &source)
return result;
}
-static QString normalizeJavaScriptExpression(const QString &expression)
+QString normalizeJavaScriptExpression(const QString &expression)
{
static const QRegularExpression regExp("\\n(\\s)+");
@@ -344,11 +344,44 @@ static QString normalizeJavaScriptExpression(const QString &expression)
return result.replace(regExp, "\n");
}
-static bool compareJavaScriptExpression(const QString &expression1, const QString &expression2)
+bool compareJavaScriptExpression(const QString &expression1, const QString &expression2)
{
return normalizeJavaScriptExpression(expression1) == normalizeJavaScriptExpression(expression2);
}
+bool smartVeryFuzzyCompare(const QVariant &value1, const QVariant &value2)
+{ //we ignore slight changes on doubles and only check three digits
+ if ((value1.type() == QVariant::Double) || (value2.type() == QVariant::Double)) {
+ bool ok1, ok2;
+ qreal a = value1.toDouble(&ok1);
+ qreal b = value2.toDouble(&ok2);
+
+ if (!ok1 || !ok2)
+ return false;
+
+ if (qFuzzyCompare(a, b))
+ return true;
+
+ int ai = qRound(a * 1000);
+ int bi = qRound(b * 1000);
+
+ if (qFuzzyCompare((qreal(ai) / 1000), (qreal(bi) / 1000)))
+ return true;
+ }
+ return false;
+}
+
+bool equals(const QVariant &a, const QVariant &b)
+{
+ if (a.canConvert<QmlDesigner::Enumeration>() && b.canConvert<QmlDesigner::Enumeration>())
+ return a.value<QmlDesigner::Enumeration>().toString() == b.value<QmlDesigner::Enumeration>().toString();
+ if (a == b)
+ return true;
+ if (smartVeryFuzzyCompare(a, b))
+ return true;
+ return false;
+}
+
} // anonymous namespace
namespace QmlDesigner {
@@ -368,8 +401,7 @@ public:
{
}
- ~ReadingContext()
- {}
+ ~ReadingContext() = default;
Document::Ptr doc() const
{ return m_doc; }
@@ -436,7 +468,8 @@ public:
/// When something is changed here, also change Check::checkScopeObjectMember in
/// qmljscheck.cpp
/// ### Maybe put this into the context as a helper function.
- bool lookupProperty(const QString &prefix, const AST::UiQualifiedId *id, const Value **property = 0, const ObjectValue **parentObject = 0, QString *name = 0)
+ bool lookupProperty(const QString &prefix, const AST::UiQualifiedId *id, const Value **property = nullptr,
+ const ObjectValue **parentObject = nullptr, QString *name = nullptr)
{
QList<const ObjectValue *> scopeObjects = m_scopeChain.qmlScopeObjects();
if (scopeObjects.isEmpty())
@@ -472,8 +505,8 @@ public:
return false;
// global lookup for first part of id
- const ObjectValue *objectValue = 0;
- const Value *value = 0;
+ const ObjectValue *objectValue = nullptr;
+ const Value *value = nullptr;
for (int i = scopeObjects.size() - 1; i >= 0; --i) {
objectValue = scopeObjects[i];
value = objectValue->lookupMember(propertyName, m_context);
@@ -560,8 +593,8 @@ public:
{
const bool hasQuotes = astValue.trimmed().left(1) == QStringLiteral("\"") && astValue.trimmed().right(1) == QStringLiteral("\"");
const QString cleanedValue = fixEscapedUnicodeChar(deEscape(stripQuotes(astValue.trimmed())));
- const Value *property = 0;
- const ObjectValue *containingObject = 0;
+ const Value *property = nullptr;
+ const ObjectValue *containingObject = nullptr;
QString name;
if (!lookupProperty(propertyPrefix, propertyId, &property, &containingObject, &name)) {
qWarning() << Q_FUNC_INFO << "Unknown property" << propertyPrefix + QLatin1Char('.') + toString(propertyId)
@@ -623,13 +656,13 @@ public:
return QVariant::fromValue(Enumeration(astValue));
}
- AST::ExpressionStatement *eStmt = AST::cast<AST::ExpressionStatement *>(rhs);
+ auto eStmt = AST::cast<AST::ExpressionStatement *>(rhs);
if (!eStmt || !eStmt->expression)
return QVariant();
- const ObjectValue *containingObject = 0;
+ const ObjectValue *containingObject = nullptr;
QString name;
- if (!lookupProperty(propertyPrefix, propertyId, 0, &containingObject, &name))
+ if (!lookupProperty(propertyPrefix, propertyId, nullptr, &containingObject, &name))
return QVariant();
if (containingObject)
@@ -639,14 +672,14 @@ public:
return QVariant();
const QString lhsPropertyTypeName = lhsCppComponent->propertyType(name);
- const ObjectValue *rhsValueObject = 0;
+ const ObjectValue *rhsValueObject = nullptr;
QString rhsValueName;
- if (AST::IdentifierExpression *idExp = AST::cast<AST::IdentifierExpression *>(eStmt->expression)) {
+ if (auto idExp = AST::cast<AST::IdentifierExpression *>(eStmt->expression)) {
if (!m_scopeChain.qmlScopeObjects().isEmpty())
rhsValueObject = m_scopeChain.qmlScopeObjects().constLast();
if (!idExp->name.isEmpty())
rhsValueName = idExp->name.toString();
- } else if (AST::FieldMemberExpression *memberExp = AST::cast<AST::FieldMemberExpression *>(eStmt->expression)) {
+ } else if (auto memberExp = AST::cast<AST::FieldMemberExpression *>(eStmt->expression)) {
Evaluate evaluate(&m_scopeChain);
const Value *result = evaluate(memberExp->base);
rhsValueObject = result->asObjectValue();
@@ -689,40 +722,6 @@ private:
using namespace QmlDesigner;
using namespace QmlDesigner::Internal;
-
-static inline bool smartVeryFuzzyCompare(QVariant value1, QVariant value2)
-{ //we ignore slight changes on doubles and only check three digits
- if ((value1.type() == QVariant::Double) || (value2.type() == QVariant::Double)) {
- bool ok1, ok2;
- qreal a = value1.toDouble(&ok1);
- qreal b = value2.toDouble(&ok2);
-
- if (!ok1 || !ok2)
- return false;
-
- if (qFuzzyCompare(a, b))
- return true;
-
- int ai = qRound(a * 1000);
- int bi = qRound(b * 1000);
-
- if (qFuzzyCompare((qreal(ai) / 1000), (qreal(bi) / 1000)))
- return true;
- }
- return false;
-}
-
-static inline bool equals(const QVariant &a, const QVariant &b)
-{
- if (a.canConvert<Enumeration>() && b.canConvert<Enumeration>())
- return a.value<Enumeration>().toString() == b.value<Enumeration>().toString();
- if (a == b)
- return true;
- if (smartVeryFuzzyCompare(a, b))
- return true;
- return false;
-}
-
TextToModelMerger::TextToModelMerger(RewriterView *reWriterView) :
m_rewriterView(reWriterView),
m_isActive(false)
@@ -748,7 +747,7 @@ void TextToModelMerger::setupImports(const Document::Ptr &doc,
QList<Import> existingImports = m_rewriterView->model()->imports();
for (AST::UiHeaderItemList *iter = doc->qmlProgram()->headers; iter; iter = iter->next) {
- AST::UiImport *import = AST::cast<AST::UiImport *>(iter->headerItem);
+ auto import = AST::cast<AST::UiImport *>(iter->headerItem);
if (!import)
continue;
@@ -1022,7 +1021,7 @@ bool TextToModelMerger::load(const QString &data, DifferenceHandler &differenceH
}
setupUsedImports();
- AST::UiObjectMember *astRootNode = 0;
+ AST::UiObjectMember *astRootNode = nullptr;
if (AST::UiProgram *program = m_document->qmlProgram())
if (program->members)
astRootNode = program->members->member;
@@ -1081,7 +1080,7 @@ void TextToModelMerger::syncNode(ModelNode &modelNode,
if (modelNode.isRootNode() && isComponentType(typeName)) {
for (AST::UiObjectMemberList *iter = astInitializer->members; iter; iter = iter->next) {
- if (AST::UiObjectDefinition *def = AST::cast<AST::UiObjectDefinition *>(iter->member)) {
+ if (auto def = AST::cast<AST::UiObjectDefinition *>(iter->member)) {
syncNode(modelNode, def, context, differenceHandler);
return;
}
@@ -1120,7 +1119,7 @@ void TextToModelMerger::syncNode(ModelNode &modelNode,
if (!member)
continue;
- if (AST::UiArrayBinding *array = AST::cast<AST::UiArrayBinding *>(member)) {
+ if (auto array = AST::cast<AST::UiArrayBinding *>(member)) {
const QString astPropertyName = toString(array->qualifiedId);
if (isPropertyChangesType(typeName) || isConnectionsType(typeName) || context->lookupProperty(QString(), array->qualifiedId)) {
AbstractProperty modelProperty = modelNode.property(astPropertyName.toUtf8());
@@ -1135,7 +1134,7 @@ void TextToModelMerger::syncNode(ModelNode &modelNode,
qWarning() << "Skipping invalid array property" << astPropertyName
<< "for node type" << modelNode.type();
}
- } else if (AST::UiObjectDefinition *def = AST::cast<AST::UiObjectDefinition *>(member)) {
+ } else if (auto def = AST::cast<AST::UiObjectDefinition *>(member)) {
const QString &name = def->qualifiedTypeNameId->name.toString();
if (name.isEmpty() || !name.at(0).isUpper()) {
QStringList props = syncGroupedProperties(modelNode,
@@ -1148,13 +1147,13 @@ void TextToModelMerger::syncNode(ModelNode &modelNode,
} else {
defaultPropertyItems.append(member);
}
- } else if (AST::UiObjectBinding *binding = AST::cast<AST::UiObjectBinding *>(member)) {
+ } else if (auto binding = AST::cast<AST::UiObjectBinding *>(member)) {
const QString astPropertyName = toString(binding->qualifiedId);
if (binding->hasOnToken) {
// skip value sources
} else {
- const Value *propertyType = 0;
- const ObjectValue *containingObject = 0;
+ const Value *propertyType = nullptr;
+ const ObjectValue *containingObject = nullptr;
QString name;
if (context->lookupProperty(QString(), binding->qualifiedId, &propertyType, &containingObject, &name)
|| isPropertyChangesType(typeName)
@@ -1173,9 +1172,9 @@ void TextToModelMerger::syncNode(ModelNode &modelNode,
modelPropertyNames.remove(astPropertyName.toUtf8());
}
}
- } else if (AST::UiScriptBinding *script = AST::cast<AST::UiScriptBinding *>(member)) {
+ } else if (auto script = AST::cast<AST::UiScriptBinding *>(member)) {
modelPropertyNames.remove(syncScriptBinding(modelNode, QString(), script, context, differenceHandler));
- } else if (AST::UiPublicMember *property = AST::cast<AST::UiPublicMember *>(member)) {
+ } else if (auto property = AST::cast<AST::UiPublicMember *>(member)) {
if (property->type == AST::UiPublicMember::Signal)
continue; // QML designer doesn't support this yet.
@@ -1198,7 +1197,7 @@ void TextToModelMerger::syncNode(ModelNode &modelNode,
AbstractProperty modelProperty = modelNode.property(astName.toUtf8());
if (property->binding) {
- if (AST::UiObjectBinding *binding = AST::cast<AST::UiObjectBinding *>(property->binding))
+ if (auto binding = AST::cast<AST::UiObjectBinding *>(property->binding))
syncNodeProperty(modelProperty, binding, context, astType, differenceHandler);
else
qWarning() << "Arrays are not yet supported";
@@ -1251,7 +1250,7 @@ static QVariant parsePropertyExpression(AST::ExpressionNode *expressionNode)
{
Q_ASSERT(expressionNode);
- AST::ArrayLiteral *arrayLiteral = AST::cast<AST::ArrayLiteral *>(expressionNode);
+ auto arrayLiteral = AST::cast<AST::ArrayLiteral *>(expressionNode);
if (arrayLiteral) {
QList<QVariant> variantList;
@@ -1260,19 +1259,19 @@ static QVariant parsePropertyExpression(AST::ExpressionNode *expressionNode)
return variantList;
}
- AST::StringLiteral *stringLiteral = AST::cast<AST::StringLiteral *>(expressionNode);
+ auto stringLiteral = AST::cast<AST::StringLiteral *>(expressionNode);
if (stringLiteral)
return stringLiteral->value.toString();
- AST::TrueLiteral *trueLiteral = AST::cast<AST::TrueLiteral *>(expressionNode);
+ auto trueLiteral = AST::cast<AST::TrueLiteral *>(expressionNode);
if (trueLiteral)
return true;
- AST::FalseLiteral *falseLiteral = AST::cast<AST::FalseLiteral *>(expressionNode);
+ auto falseLiteral = AST::cast<AST::FalseLiteral *>(expressionNode);
if (falseLiteral)
return false;
- AST::NumericLiteral *numericLiteral = AST::cast<AST::NumericLiteral *>(expressionNode);
+ auto numericLiteral = AST::cast<AST::NumericLiteral *>(expressionNode);
if (numericLiteral)
return numericLiteral->value;
@@ -1284,7 +1283,7 @@ QVariant parsePropertyScriptBinding(AST::UiScriptBinding *uiScriptBinding)
{
Q_ASSERT(uiScriptBinding);
- AST::ExpressionStatement *expStmt = AST::cast<AST::ExpressionStatement *>(uiScriptBinding->statement);
+ auto expStmt = AST::cast<AST::ExpressionStatement *>(uiScriptBinding->statement);
if (!expStmt)
return QVariant();
@@ -1596,7 +1595,7 @@ QStringList TextToModelMerger::syncGroupedProperties(ModelNode &modelNode,
for (AST::UiObjectMemberList *iter = members; iter; iter = iter->next) {
AST::UiObjectMember *member = iter->member;
- if (AST::UiScriptBinding *script = AST::cast<AST::UiScriptBinding *>(member)) {
+ if (auto script = AST::cast<AST::UiScriptBinding *>(member)) {
const QString prop = QString::fromLatin1(syncScriptBinding(modelNode, name, script, context, differenceHandler));
if (!prop.isEmpty())
props.append(prop);
@@ -1881,12 +1880,12 @@ ModelNode ModelAmender::listPropertyMissingModelNode(NodeListProperty &modelProp
ReadingContext *context,
AST::UiObjectMember *arrayMember)
{
- AST::UiQualifiedId *astObjectType = 0;
- AST::UiObjectInitializer *astInitializer = 0;
- if (AST::UiObjectDefinition *def = AST::cast<AST::UiObjectDefinition *>(arrayMember)) {
+ AST::UiQualifiedId *astObjectType = nullptr;
+ AST::UiObjectInitializer *astInitializer = nullptr;
+ if (auto def = AST::cast<AST::UiObjectDefinition *>(arrayMember)) {
astObjectType = def->qualifiedTypeNameId;
astInitializer = def->initializer;
- } else if (AST::UiObjectBinding *bin = AST::cast<AST::UiObjectBinding *>(arrayMember)) {
+ } else if (auto bin = AST::cast<AST::UiObjectBinding *>(arrayMember)) {
astObjectType = bin->qualifiedTypeNameId;
astInitializer = bin->initializer;
}
diff --git a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.h b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.h
index 4eebae3b85..82def3927f 100644
--- a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.h
+++ b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.h
@@ -167,8 +167,7 @@ public:
DifferenceHandler(TextToModelMerger *textToModelMerger):
m_merger(textToModelMerger)
{}
- virtual ~DifferenceHandler()
- {}
+ virtual ~DifferenceHandler() = default;
virtual void modelMissesImport(const QmlDesigner::Import &import) = 0;
virtual void importAbsentInQMl(const QmlDesigner::Import &import) = 0;
@@ -219,48 +218,47 @@ public:
ModelValidator(TextToModelMerger *textToModelMerger):
DifferenceHandler(textToModelMerger)
{}
- ~ModelValidator()
- {}
-
- virtual void modelMissesImport(const QmlDesigner::Import &import);
- virtual void importAbsentInQMl(const QmlDesigner::Import &import);
- virtual void bindingExpressionsDiffer(BindingProperty &modelProperty,
- const QString &javascript,
- const TypeName &astType);
- virtual void shouldBeBindingProperty(AbstractProperty &modelProperty,
- const QString &javascript,
- const TypeName &astType);
- virtual void signalHandlerSourceDiffer(SignalHandlerProperty &modelProperty,
- const QString &javascript);
- virtual void shouldBeSignalHandlerProperty(AbstractProperty &modelProperty,
- const QString &javascript);
- virtual void shouldBeNodeListProperty(AbstractProperty &modelProperty,
- const QList<QmlJS::AST::UiObjectMember *> arrayMembers,
- ReadingContext *context);
- virtual void variantValuesDiffer(VariantProperty &modelProperty, const QVariant &qmlVariantValue, const TypeName &dynamicTypeName);
- virtual void shouldBeVariantProperty(AbstractProperty &modelProperty, const QVariant &qmlVariantValue, const TypeName &dynamicTypeName);
- virtual void shouldBeNodeProperty(AbstractProperty &modelProperty,
- const TypeName &typeName,
- int majorVersion,
- int minorVersion,
- QmlJS::AST::UiObjectMember *astNode,
- const TypeName &dynamicPropertyType,
- ReadingContext *context);
-
- virtual void modelNodeAbsentFromQml(ModelNode &modelNode);
- virtual ModelNode listPropertyMissingModelNode(NodeListProperty &modelProperty,
- ReadingContext *context,
- QmlJS::AST::UiObjectMember *arrayMember);
- virtual void typeDiffers(bool isRootNode,
- ModelNode &modelNode,
- const TypeName &typeName,
- int majorVersion,
- int minorVersion,
- QmlJS::AST::UiObjectMember *astNode,
- ReadingContext *context);
- virtual void propertyAbsentFromQml(AbstractProperty &modelProperty);
- virtual void idsDiffer(ModelNode &modelNode, const QString &qmlId);
- virtual bool isValidator() const {return false; }
+ ~ModelValidator() override = default;
+
+ void modelMissesImport(const QmlDesigner::Import &import) override;
+ void importAbsentInQMl(const QmlDesigner::Import &import) override;
+ void bindingExpressionsDiffer(BindingProperty &modelProperty,
+ const QString &javascript,
+ const TypeName &astType) override;
+ void shouldBeBindingProperty(AbstractProperty &modelProperty,
+ const QString &javascript,
+ const TypeName &astType) override;
+ void signalHandlerSourceDiffer(SignalHandlerProperty &modelProperty,
+ const QString &javascript) override;
+ void shouldBeSignalHandlerProperty(AbstractProperty &modelProperty,
+ const QString &javascript) override;
+ void shouldBeNodeListProperty(AbstractProperty &modelProperty,
+ const QList<QmlJS::AST::UiObjectMember *> arrayMembers,
+ ReadingContext *context) override;
+ void variantValuesDiffer(VariantProperty &modelProperty, const QVariant &qmlVariantValue, const TypeName &dynamicTypeName) override;
+ void shouldBeVariantProperty(AbstractProperty &modelProperty, const QVariant &qmlVariantValue, const TypeName &dynamicTypeName) override;
+ void shouldBeNodeProperty(AbstractProperty &modelProperty,
+ const TypeName &typeName,
+ int majorVersion,
+ int minorVersion,
+ QmlJS::AST::UiObjectMember *astNode,
+ const TypeName &dynamicPropertyType,
+ ReadingContext *context) override;
+
+ void modelNodeAbsentFromQml(ModelNode &modelNode) override;
+ ModelNode listPropertyMissingModelNode(NodeListProperty &modelProperty,
+ ReadingContext *context,
+ QmlJS::AST::UiObjectMember *arrayMember) override;
+ void typeDiffers(bool isRootNode,
+ ModelNode &modelNode,
+ const TypeName &typeName,
+ int majorVersion,
+ int minorVersion,
+ QmlJS::AST::UiObjectMember *astNode,
+ ReadingContext *context) override;
+ void propertyAbsentFromQml(AbstractProperty &modelProperty) override;
+ void idsDiffer(ModelNode &modelNode, const QString &qmlId) override;
+ bool isValidator() const override {return false; }
};
class ModelAmender: public DifferenceHandler
@@ -269,48 +267,47 @@ public:
ModelAmender(TextToModelMerger *textToModelMerger):
DifferenceHandler(textToModelMerger)
{}
- ~ModelAmender()
- {}
-
- virtual void modelMissesImport(const QmlDesigner::Import &import);
- virtual void importAbsentInQMl(const QmlDesigner::Import &import);
- virtual void bindingExpressionsDiffer(BindingProperty &modelProperty,
- const QString &javascript,
- const TypeName &astType);
- virtual void shouldBeBindingProperty(AbstractProperty &modelProperty,
- const QString &javascript,
- const TypeName &astType);
- virtual void signalHandlerSourceDiffer(SignalHandlerProperty &modelProperty,
- const QString &javascript);
- virtual void shouldBeSignalHandlerProperty(AbstractProperty &modelProperty,
- const QString &javascript);
- virtual void shouldBeNodeListProperty(AbstractProperty &modelProperty,
- const QList<QmlJS::AST::UiObjectMember *> arrayMembers,
- ReadingContext *context);
- virtual void variantValuesDiffer(VariantProperty &modelProperty, const QVariant &qmlVariantValue, const TypeName &dynamicType);
- virtual void shouldBeVariantProperty(AbstractProperty &modelProperty, const QVariant &qmlVariantValue, const TypeName &dynamicTypeName);
- virtual void shouldBeNodeProperty(AbstractProperty &modelProperty,
- const TypeName &typeName,
- int majorVersion,
- int minorVersion,
- QmlJS::AST::UiObjectMember *astNode,
- const TypeName &dynamicPropertyType,
- ReadingContext *context);
-
- virtual void modelNodeAbsentFromQml(ModelNode &modelNode);
- virtual ModelNode listPropertyMissingModelNode(NodeListProperty &modelProperty,
- ReadingContext *context,
- QmlJS::AST::UiObjectMember *arrayMember);
- virtual void typeDiffers(bool isRootNode,
- ModelNode &modelNode,
- const TypeName &typeName,
- int majorVersion,
- int minorVersion,
- QmlJS::AST::UiObjectMember *astNode,
- ReadingContext *context);
- virtual void propertyAbsentFromQml(AbstractProperty &modelProperty);
- virtual void idsDiffer(ModelNode &modelNode, const QString &qmlId);
- virtual bool isValidator() const {return true; }
+ ~ModelAmender() override = default;
+
+ void modelMissesImport(const QmlDesigner::Import &import) override;
+ void importAbsentInQMl(const QmlDesigner::Import &import) override;
+ void bindingExpressionsDiffer(BindingProperty &modelProperty,
+ const QString &javascript,
+ const TypeName &astType) override;
+ void shouldBeBindingProperty(AbstractProperty &modelProperty,
+ const QString &javascript,
+ const TypeName &astType) override;
+ void signalHandlerSourceDiffer(SignalHandlerProperty &modelProperty,
+ const QString &javascript) override;
+ void shouldBeSignalHandlerProperty(AbstractProperty &modelProperty,
+ const QString &javascript) override;
+ void shouldBeNodeListProperty(AbstractProperty &modelProperty,
+ const QList<QmlJS::AST::UiObjectMember *> arrayMembers,
+ ReadingContext *context) override;
+ void variantValuesDiffer(VariantProperty &modelProperty, const QVariant &qmlVariantValue, const TypeName &dynamicType) override;
+ void shouldBeVariantProperty(AbstractProperty &modelProperty, const QVariant &qmlVariantValue, const TypeName &dynamicTypeName) override;
+ void shouldBeNodeProperty(AbstractProperty &modelProperty,
+ const TypeName &typeName,
+ int majorVersion,
+ int minorVersion,
+ QmlJS::AST::UiObjectMember *astNode,
+ const TypeName &dynamicPropertyType,
+ ReadingContext *context) override;
+
+ void modelNodeAbsentFromQml(ModelNode &modelNode) override;
+ ModelNode listPropertyMissingModelNode(NodeListProperty &modelProperty,
+ ReadingContext *context,
+ QmlJS::AST::UiObjectMember *arrayMember) override;
+ void typeDiffers(bool isRootNode,
+ ModelNode &modelNode,
+ const TypeName &typeName,
+ int majorVersion,
+ int minorVersion,
+ QmlJS::AST::UiObjectMember *astNode,
+ ReadingContext *context) override;
+ void propertyAbsentFromQml(AbstractProperty &modelProperty) override;
+ void idsDiffer(ModelNode &modelNode, const QString &qmlId) override;
+ bool isValidator() const override {return true; }
};
} //Internal
diff --git a/src/plugins/qmldesigner/designercore/model/variantproperty.cpp b/src/plugins/qmldesigner/designercore/model/variantproperty.cpp
index dbdf1bb74e..03c4f5acbf 100644
--- a/src/plugins/qmldesigner/designercore/model/variantproperty.cpp
+++ b/src/plugins/qmldesigner/designercore/model/variantproperty.cpp
@@ -35,8 +35,7 @@
namespace QmlDesigner {
-VariantProperty::VariantProperty()
-{}
+VariantProperty::VariantProperty() = default;
VariantProperty::VariantProperty(const VariantProperty &property, AbstractView *view)
: AbstractProperty(property.name(), property.internalNode(), property.model(), view)
diff --git a/src/plugins/qmldesigner/designercore/model/viewmanager.cpp b/src/plugins/qmldesigner/designercore/model/viewmanager.cpp
index 9fca067862..3c35c36f84 100644
--- a/src/plugins/qmldesigner/designercore/model/viewmanager.cpp
+++ b/src/plugins/qmldesigner/designercore/model/viewmanager.cpp
@@ -143,7 +143,7 @@ void ViewManager::detachRewriterView()
{
if (RewriterView *view = currentDesignDocument()->rewriterView()) {
view->deactivateTextMofifierChangeSignals();
- currentModel()->setRewriterView(0);
+ currentModel()->setRewriterView(nullptr);
}
}
@@ -205,7 +205,7 @@ void ViewManager::detachViewsExceptRewriterAndComponetView()
if (d->debugView.isAttached())
currentModel()->detachView(&d->debugView);
- currentModel()->setNodeInstanceView(0);
+ currentModel()->setNodeInstanceView(nullptr);
}
void ViewManager::attachItemLibraryView()
@@ -374,13 +374,13 @@ QWidget *ViewManager::widget(const QString &uniqueId) const
void ViewManager::disableWidgets()
{
- for (auto view : views())
+ for (const auto &view : views())
view->disableWidget();
}
void ViewManager::enableWidgets()
{
- for (auto view : views())
+ for (const auto &view : views())
view->enableWidget();
}
diff --git a/src/plugins/qmldesigner/designercore/pluginmanager/widgetpluginmanager.cpp b/src/plugins/qmldesigner/designercore/pluginmanager/widgetpluginmanager.cpp
index cae792a456..2b3b5c81c5 100644
--- a/src/plugins/qmldesigner/designercore/pluginmanager/widgetpluginmanager.cpp
+++ b/src/plugins/qmldesigner/designercore/pluginmanager/widgetpluginmanager.cpp
@@ -37,9 +37,7 @@ namespace QmlDesigner {
namespace Internal {
-WidgetPluginManager::WidgetPluginManager()
-{
-}
+WidgetPluginManager::WidgetPluginManager() = default;
WidgetPluginManager::IWidgetPluginList WidgetPluginManager::instances()
{
@@ -63,7 +61,7 @@ bool WidgetPluginManager::addPath(const QString &path)
QAbstractItemModel *WidgetPluginManager::createModel(QObject *parent)
{
- QStandardItemModel *model = new QStandardItemModel(parent);
+ auto model = new QStandardItemModel(parent);
const auto end = m_paths.end();
for (auto it = m_paths.begin(); it != end; ++it)
model->appendRow(it->createModelItem());
diff --git a/src/plugins/qmldesigner/designercore/pluginmanager/widgetpluginmanager.h b/src/plugins/qmldesigner/designercore/pluginmanager/widgetpluginmanager.h
index 2955ef9bfd..854da511c3 100644
--- a/src/plugins/qmldesigner/designercore/pluginmanager/widgetpluginmanager.h
+++ b/src/plugins/qmldesigner/designercore/pluginmanager/widgetpluginmanager.h
@@ -49,9 +49,9 @@ namespace Internal {
class WidgetPluginManager
{
Q_DISABLE_COPY(WidgetPluginManager)
- typedef QList<WidgetPluginPath> PluginPathList;
+ using PluginPathList = QList<WidgetPluginPath>;
public:
- typedef QList<IWidgetPlugin *> IWidgetPluginList;
+ using IWidgetPluginList = QList<IWidgetPlugin *>;
WidgetPluginManager();
diff --git a/src/plugins/qmldesigner/designercore/pluginmanager/widgetpluginpath.cpp b/src/plugins/qmldesigner/designercore/pluginmanager/widgetpluginpath.cpp
index 6904417759..968a2e8bc3 100644
--- a/src/plugins/qmldesigner/designercore/pluginmanager/widgetpluginpath.cpp
+++ b/src/plugins/qmldesigner/designercore/pluginmanager/widgetpluginpath.cpp
@@ -52,11 +52,11 @@ static IWidgetPlugin *instance(WidgetPluginData &p)
// Go stale once something fails
if (p.failed)
- return 0;
+ return nullptr;
// Pull up the plugin, retrieve IPlugin instance.
if (!p.instanceGuard) {
- p.instance = 0;
+ p.instance = nullptr;
QPluginLoader loader(p.path);
if (debug)
@@ -68,7 +68,7 @@ static IWidgetPlugin *instance(WidgetPluginData &p)
"Failed to create instance of file "
"\"%1\": %2").arg(p.path).arg(p.errorMessage);
qWarning() << p.errorMessage;
- return 0;
+ return nullptr;
}
QObject *object = loader.instance();
if (!object) {
@@ -77,7 +77,7 @@ static IWidgetPlugin *instance(WidgetPluginData &p)
"Failed to create instance of file \"%1\"."
).arg(p.path);
qWarning() << p.errorMessage;
- return 0;
+ return nullptr;
}
IWidgetPlugin *iplugin = qobject_cast<IWidgetPlugin *>(object);
if (!iplugin) {
@@ -87,7 +87,7 @@ static IWidgetPlugin *instance(WidgetPluginData &p)
).arg(p.path);
qWarning() << p.errorMessage;
delete object;
- return 0;
+ return nullptr;
}
p.instanceGuard = object;
p.instance = iplugin;
@@ -110,7 +110,7 @@ static IWidgetPlugin *instance(WidgetPluginData &p)
WidgetPluginData::WidgetPluginData(const QString &p) :
path(p),
failed(false),
- instance(0)
+ instance(nullptr)
{
}
@@ -187,7 +187,7 @@ QStandardItem *WidgetPluginPath::createModelItem()
// If there are failed ones, create a separate "Failed"
// category at the end
QStandardItem *pathItem = new QStandardItem(m_path.absolutePath());
- QStandardItem *failedCategory = 0;
+ QStandardItem *failedCategory = nullptr;
const auto end = m_plugins.end();
for (auto it = m_plugins.begin(); it != end; ++it) {
QStandardItem *pluginItem = new QStandardItem(Utils::FileName::fromString(it->path).fileName());
diff --git a/src/plugins/qmldesigner/designercore/pluginmanager/widgetpluginpath.h b/src/plugins/qmldesigner/designercore/pluginmanager/widgetpluginpath.h
index 391fe86fe9..13ad38fcd3 100644
--- a/src/plugins/qmldesigner/designercore/pluginmanager/widgetpluginpath.h
+++ b/src/plugins/qmldesigner/designercore/pluginmanager/widgetpluginpath.h
@@ -66,7 +66,7 @@ struct WidgetPluginData {
// IPlugins.
class WidgetPluginPath {
- typedef QList<IWidgetPlugin *> IWidgetPluginList;
+ using IWidgetPluginList = QList<IWidgetPlugin *>;
public:
explicit WidgetPluginPath(const QDir &path);
@@ -80,7 +80,7 @@ public:
QStandardItem *createModelItem();
private:
- typedef QList<WidgetPluginData> PluginDataList;
+ using PluginDataList = QList<WidgetPluginData>;
static QStringList libraryFilePaths(const QDir &dir);
void clear();
diff --git a/src/plugins/qmldesigner/designersettings.cpp b/src/plugins/qmldesigner/designersettings.cpp
index 7520296c26..d1e8a3a569 100644
--- a/src/plugins/qmldesigner/designersettings.cpp
+++ b/src/plugins/qmldesigner/designersettings.cpp
@@ -36,9 +36,7 @@ namespace DesignerSettingsGroupKey {
const char QML_DESIGNER_SETTINGS_GROUP[] = "Designer";
}
-DesignerSettings::DesignerSettings()
-{
-}
+DesignerSettings::DesignerSettings() = default;
void DesignerSettings::restoreValue(QSettings *settings, const QByteArray &key, const QVariant &defaultValue)
{
diff --git a/src/plugins/qmldesigner/designmodewidget.cpp b/src/plugins/qmldesigner/designmodewidget.cpp
index 52020a55ee..49f484583b 100644
--- a/src/plugins/qmldesigner/designmodewidget.cpp
+++ b/src/plugins/qmldesigner/designmodewidget.cpp
@@ -84,17 +84,14 @@ class ItemLibrarySideBarItem : public Core::SideBarItem
{
public:
explicit ItemLibrarySideBarItem(QWidget *widget, const QString &id);
- virtual ~ItemLibrarySideBarItem();
+ ~ItemLibrarySideBarItem() override;
- virtual QList<QToolButton *> createToolBarWidgets();
+ QList<QToolButton *> createToolBarWidgets() override;
};
ItemLibrarySideBarItem::ItemLibrarySideBarItem(QWidget *widget, const QString &id) : Core::SideBarItem(widget, id) {}
-ItemLibrarySideBarItem::~ItemLibrarySideBarItem()
-{
-
-}
+ItemLibrarySideBarItem::~ItemLibrarySideBarItem() = default;
QList<QToolButton *> ItemLibrarySideBarItem::createToolBarWidgets()
{
@@ -105,9 +102,9 @@ class DesignerSideBarItem : public Core::SideBarItem
{
public:
explicit DesignerSideBarItem(QWidget *widget, WidgetInfo::ToolBarWidgetFactoryInterface *createToolBarWidgets, const QString &id);
- virtual ~DesignerSideBarItem();
+ ~DesignerSideBarItem() override;
- virtual QList<QToolButton *> createToolBarWidgets();
+ QList<QToolButton *> createToolBarWidgets() override;
private:
WidgetInfo::ToolBarWidgetFactoryInterface *m_toolBarWidgetFactory;
@@ -267,7 +264,7 @@ void DesignModeWidget::setup()
foreach (Core::INavigationWidgetFactory *factory, factories) {
Core::NavigationView navigationView;
- navigationView.widget = 0;
+ navigationView.widget = nullptr;
if (factory->id() == "Projects") {
navigationView = factory->createWidget();
projectsExplorer = navigationView.widget;
@@ -293,7 +290,7 @@ void DesignModeWidget::setup()
}
}
- QToolBar *toolBar = new QToolBar;
+ auto toolBar = new QToolBar;
toolBar->addAction(viewManager().componentViewAction());
toolBar->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
DesignerActionToolBar *designerToolBar = QmlDesignerPlugin::instance()->viewManager().designerActionManager().createToolBar(m_toolBar);
@@ -450,7 +447,7 @@ void DesignModeWidget::addNavigatorHistoryEntry(const Utils::FileName &fileName)
static QTabWidget *createWidgetsInTabWidget(const QList<WidgetInfo> &widgetInfos)
{
- QTabWidget *tabWidget = new QTabWidget;
+ auto tabWidget = new QTabWidget;
foreach (const WidgetInfo &widgetInfo, widgetInfos)
tabWidget->addTab(widgetInfo.widget, widgetInfo.tabName);
@@ -488,10 +485,10 @@ static QWidget *createbottomSideBarWidget(const QList<WidgetInfo> &widgetInfos)
static Core::MiniSplitter *createCentralSplitter(const QList<WidgetInfo> &widgetInfos)
{
// editor and output panes
- Core::MiniSplitter *outputPlaceholderSplitter = new Core::MiniSplitter;
+ auto outputPlaceholderSplitter = new Core::MiniSplitter;
outputPlaceholderSplitter->setOrientation(Qt::Vertical);
- SwitchSplitTabWidget *switchSplitTabWidget = new SwitchSplitTabWidget();
+ auto switchSplitTabWidget = new SwitchSplitTabWidget();
foreach (const WidgetInfo &widgetInfo, widgetInfos) {
if (widgetInfo.placementHint == widgetInfo.CentralPane)
@@ -516,7 +513,7 @@ QWidget *DesignModeWidget::createCenterWidget()
{
QWidget *centerWidget = new QWidget;
- QVBoxLayout *horizontalLayout = new QVBoxLayout(centerWidget);
+ auto horizontalLayout = new QVBoxLayout(centerWidget);
horizontalLayout->setMargin(0);
horizontalLayout->setSpacing(0);
@@ -537,9 +534,9 @@ QWidget *DesignModeWidget::createCenterWidget()
QWidget *DesignModeWidget::createCrumbleBarFrame()
{
- auto *frame = new Utils::StyledBar(this);
+ auto frame = new Utils::StyledBar(this);
frame->setSingleRow(false);
- QHBoxLayout *layout = new QHBoxLayout(frame);
+ auto layout = new QHBoxLayout(frame);
layout->setMargin(0);
layout->setSpacing(0);
layout->addWidget(m_crumbleBar->crumblePath());
diff --git a/src/plugins/qmldesigner/documentmanager.cpp b/src/plugins/qmldesigner/documentmanager.cpp
index 97b475a0f9..423281b6fd 100644
--- a/src/plugins/qmldesigner/documentmanager.cpp
+++ b/src/plugins/qmldesigner/documentmanager.cpp
@@ -358,7 +358,7 @@ QStringList DocumentManager::isoIconsQmakeVariableValue(const QString &proPath)
return QStringList();
}
- QmakeProjectManager::QmakeProFileNode *proNode = dynamic_cast<QmakeProjectManager::QmakeProFileNode*>(parentNode);
+ auto proNode = dynamic_cast<QmakeProjectManager::QmakeProFileNode*>(parentNode);
if (!proNode) {
qCWarning(documentManagerLog) << "Parent node for node at" << proPath << "could not be converted to a QmakeProFileNode";
return QStringList();
@@ -381,7 +381,7 @@ bool DocumentManager::setIsoIconsQmakeVariableValue(const QString &proPath, cons
return false;
}
- QmakeProjectManager::QmakeProFileNode *proNode = dynamic_cast<QmakeProjectManager::QmakeProFileNode*>(parentNode);
+ auto proNode = dynamic_cast<QmakeProjectManager::QmakeProFileNode*>(parentNode);
if (!proNode) {
qCWarning(documentManagerLog) << "Node for" << proPath << "could not be converted to a QmakeProFileNode";
return false;
@@ -407,7 +407,7 @@ void DocumentManager::findPathToIsoProFile(bool *iconResourceFileAlreadyExists,
<< "(" << node << static_cast<int>(node->nodeType()) << ")";
if (node->nodeType() == ProjectExplorer::NodeType::VirtualFolder && node->displayName() == "Resources") {
- ProjectExplorer::VirtualFolderNode *virtualFolderNode = dynamic_cast<ProjectExplorer::VirtualFolderNode*>(node);
+ auto virtualFolderNode = dynamic_cast<ProjectExplorer::VirtualFolderNode*>(node);
for (int subFolderIndex = 0; subFolderIndex < virtualFolderNode->folderNodes().size() && !iconQrcFileNode; ++subFolderIndex) {
ProjectExplorer::FolderNode *subFolderNode = virtualFolderNode->folderNodes().at(subFolderIndex);
@@ -446,7 +446,7 @@ void DocumentManager::findPathToIsoProFile(bool *iconResourceFileAlreadyExists,
*resourceFilePath = projectDirectory + "/" + isoIconsQrcFile;
}
- *iconResourceFileAlreadyExists = iconQrcFileNode != 0;
+ *iconResourceFileAlreadyExists = iconQrcFileNode != nullptr;
}
bool DocumentManager::isoProFileSupportsAddingExistingFiles(const QString &resourceFileProPath)
@@ -494,7 +494,7 @@ bool DocumentManager::belongsToQmakeProject()
return false;
ProjectExplorer::Node *rootNode = project->rootProjectNode();
- QmakeProjectManager::QmakeProFileNode *proNode = dynamic_cast<QmakeProjectManager::QmakeProFileNode*>(rootNode);
+ auto proNode = dynamic_cast<QmakeProjectManager::QmakeProFileNode*>(rootNode);
return proNode;
}
diff --git a/src/plugins/qmldesigner/documentwarningwidget.cpp b/src/plugins/qmldesigner/documentwarningwidget.cpp
index 6afe9b2714..a159e12f86 100644
--- a/src/plugins/qmldesigner/documentwarningwidget.cpp
+++ b/src/plugins/qmldesigner/documentwarningwidget.cpp
@@ -87,16 +87,16 @@ DocumentWarningWidget::DocumentWarningWidget(QWidget *parent)
connect(m_ignoreWarningsCheckBox, &QCheckBox::toggled, this, &DocumentWarningWidget::ignoreCheckBoxToggled);
- QVBoxLayout *layout = new QVBoxLayout(this);
+ auto layout = new QVBoxLayout(this);
layout->addWidget(m_headerLabel);
- QVBoxLayout *messageLayout = new QVBoxLayout;
+ auto messageLayout = new QVBoxLayout;
messageLayout->setMargin(20);
messageLayout->setSpacing(5);
messageLayout->addWidget(m_navigateLabel);
messageLayout->addWidget(m_messageLabel);
layout->addLayout(messageLayout);
layout->addWidget(m_ignoreWarningsCheckBox);
- QHBoxLayout *buttonLayout = new QHBoxLayout();
+ auto buttonLayout = new QHBoxLayout();
buttonLayout->addStretch();
buttonLayout->addWidget(m_continueButton);
layout->addLayout(buttonLayout);
diff --git a/src/plugins/qmldesigner/qmldesignerextension/colortool/colortool.cpp b/src/plugins/qmldesigner/qmldesignerextension/colortool/colortool.cpp
index 7f03543c2c..32a5742f9f 100644
--- a/src/plugins/qmldesigner/qmldesignerextension/colortool/colortool.cpp
+++ b/src/plugins/qmldesigner/qmldesignerextension/colortool/colortool.cpp
@@ -53,28 +53,28 @@ class ColorToolAction : public AbstractAction
public:
ColorToolAction() : AbstractAction(QCoreApplication::translate("ColorToolAction","Edit Color")) {}
- QByteArray category() const
+ QByteArray category() const override
{
return QByteArray();
}
- QByteArray menuId() const
+ QByteArray menuId() const override
{
return "ColorTool";
}
- int priority() const
+ int priority() const override
{
return CustomActionsPriority;
}
- Type type() const
+ Type type() const override
{
return FormEditorAction;
}
protected:
- bool isVisible(const SelectionContext &selectionContext) const
+ bool isVisible(const SelectionContext &selectionContext) const override
{
if (selectionContext.singleNodeIsSelected())
return selectionContext.currentSingleSelectedNode().metaInfo().hasProperty("color");
@@ -82,25 +82,22 @@ protected:
return false;
}
- bool isEnabled(const SelectionContext &selectionContext) const
+ bool isEnabled(const SelectionContext &selectionContext) const override
{
return isVisible(selectionContext);
}
};
ColorTool::ColorTool()
- : QObject(), AbstractCustomTool()
{
- ColorToolAction *colorToolAction = new ColorToolAction;
+ auto colorToolAction = new ColorToolAction;
QmlDesignerPlugin::instance()->designerActionManager().addDesignerAction(colorToolAction);
connect(colorToolAction->action(), &QAction::triggered, [=]() {
view()->changeCurrentToolTo(this);
});
}
-ColorTool::~ColorTool()
-{
-}
+ColorTool::~ColorTool() = default;
void ColorTool::clear()
{
diff --git a/src/plugins/qmldesigner/qmldesignerextension/connectioneditor/backendmodel.cpp b/src/plugins/qmldesigner/qmldesignerextension/connectioneditor/backendmodel.cpp
index 0d86c4696a..f356788a55 100644
--- a/src/plugins/qmldesigner/qmldesignerextension/connectioneditor/backendmodel.cpp
+++ b/src/plugins/qmldesigner/qmldesignerextension/connectioneditor/backendmodel.cpp
@@ -79,12 +79,12 @@ void BackendModel::resetModel()
if (cppTypeData.isSingleton) {
NodeMetaInfo metaInfo = m_connectionView->model()->metaInfo(cppTypeData.typeName.toUtf8());
if (metaInfo.isValid() && !metaInfo.isSubclassOf("QtQuick.Item")) {
- QStandardItem *type = new QStandardItem(cppTypeData.typeName);
+ auto type = new QStandardItem(cppTypeData.typeName);
type->setData(cppTypeData.typeName, Qt::UserRole + 1);
type->setData(true, Qt::UserRole + 2);
type->setEditable(false);
- QStandardItem *name = new QStandardItem(cppTypeData.typeName);
+ auto name = new QStandardItem(cppTypeData.typeName);
name->setEditable(false);
QStandardItem *singletonItem = new QStandardItem("");
diff --git a/src/plugins/qmldesigner/qmldesignerextension/connectioneditor/bindingmodel.cpp b/src/plugins/qmldesigner/qmldesignerextension/connectioneditor/bindingmodel.cpp
index 9b08e5179c..cd8c92b82c 100644
--- a/src/plugins/qmldesigner/qmldesignerextension/connectioneditor/bindingmodel.cpp
+++ b/src/plugins/qmldesigner/qmldesignerextension/connectioneditor/bindingmodel.cpp
@@ -444,7 +444,7 @@ void BindingModel::handleDataChanged(const QModelIndex &topLeft, const QModelInd
void BindingModel::handleException()
{
- QMessageBox::warning(0, tr("Error"), m_exceptionError);
+ QMessageBox::warning(nullptr, tr("Error"), m_exceptionError);
resetModel();
}
diff --git a/src/plugins/qmldesigner/qmldesignerextension/connectioneditor/connectionmodel.cpp b/src/plugins/qmldesigner/qmldesignerextension/connectioneditor/connectionmodel.cpp
index 7c79334ea2..8cd297890e 100644
--- a/src/plugins/qmldesigner/qmldesignerextension/connectioneditor/connectionmodel.cpp
+++ b/src/plugins/qmldesigner/qmldesignerextension/connectioneditor/connectionmodel.cpp
@@ -195,7 +195,7 @@ void ConnectionModel::updateSignalName(int rowNumber)
connectionNode.removeProperty(signalHandlerProperty.name());
transaction.commit(); //committing in the try block
} catch (Exception &e) { //better save then sorry
- QMessageBox::warning(0, tr("Error"), e.description());
+ QMessageBox::warning(nullptr, tr("Error"), e.description());
}
QStandardItem* idItem = item(rowNumber, 0);
@@ -220,7 +220,7 @@ void ConnectionModel::updateTargetNode(int rowNumber)
connectionNode.bindingProperty("target").setExpression(newTarget);
transaction.commit(); //committing in the try block
} catch (Exception &e) { //better save then sorry
- QMessageBox::warning(0, tr("Error"), e.description());
+ QMessageBox::warning(nullptr, tr("Error"), e.description());
}
QStandardItem* idItem = item(rowNumber, 0);
@@ -278,7 +278,7 @@ void ConnectionModel::addConnection()
}
transaction.commit();
} catch (Exception &e) { //better save then sorry
- QMessageBox::warning(0, tr("Error"), e.description());
+ QMessageBox::warning(nullptr, tr("Error"), e.description());
}
}
}
@@ -303,7 +303,7 @@ void ConnectionModel::deleteConnectionByRow(int currentRow)
void ConnectionModel::handleException()
{
- QMessageBox::warning(0, tr("Error"), m_exceptionError);
+ QMessageBox::warning(nullptr, tr("Error"), m_exceptionError);
resetModel();
}
diff --git a/src/plugins/qmldesigner/qmldesignerextension/connectioneditor/connectionview.cpp b/src/plugins/qmldesigner/qmldesignerextension/connectioneditor/connectionview.cpp
index 2e7c9d4f54..2c3d5fb534 100644
--- a/src/plugins/qmldesigner/qmldesignerextension/connectioneditor/connectionview.cpp
+++ b/src/plugins/qmldesigner/qmldesignerextension/connectioneditor/connectionview.cpp
@@ -52,9 +52,7 @@ ConnectionView::ConnectionView(QObject *parent) : AbstractView(parent),
connectionViewWidget()->setBackendModel(m_backendModel);
}
-ConnectionView::~ConnectionView()
-{
-}
+ConnectionView::~ConnectionView() = default;
void ConnectionView::modelAttached(Model *model)
{
diff --git a/src/plugins/qmldesigner/qmldesignerextension/connectioneditor/connectionviewwidget.cpp b/src/plugins/qmldesigner/qmldesignerextension/connectioneditor/connectionviewwidget.cpp
index 9a92bb0852..1c62cec81b 100644
--- a/src/plugins/qmldesigner/qmldesignerextension/connectioneditor/connectionviewwidget.cpp
+++ b/src/plugins/qmldesigner/qmldesignerextension/connectioneditor/connectionviewwidget.cpp
@@ -196,13 +196,13 @@ void ConnectionViewWidget::invalidateButtonStatus()
setEnabledAddButton(true);
} else if (currentTab() == BindingTab) {
emit setEnabledRemoveButton(ui->bindingView->selectionModel()->hasSelection());
- BindingModel *bindingModel = qobject_cast<BindingModel*>(ui->bindingView->model());
+ auto bindingModel = qobject_cast<BindingModel*>(ui->bindingView->model());
setEnabledAddButton(bindingModel->connectionView()->model() &&
bindingModel->connectionView()->selectedModelNodes().count() == 1);
} else if (currentTab() == DynamicPropertiesTab) {
emit setEnabledRemoveButton(ui->dynamicPropertiesView->selectionModel()->hasSelection());
- DynamicPropertiesModel *dynamicPropertiesModel = qobject_cast<DynamicPropertiesModel*>(ui->dynamicPropertiesView->model());
+ auto dynamicPropertiesModel = qobject_cast<DynamicPropertiesModel*>(ui->dynamicPropertiesView->model());
setEnabledAddButton(dynamicPropertiesModel->connectionView()->model() &&
dynamicPropertiesModel->connectionView()->selectedModelNodes().count() == 1);
} else if (currentTab() == BackendTab) {
@@ -242,7 +242,7 @@ void ConnectionViewWidget::removeButtonClicked()
if (ui->connectionView->selectionModel()->selectedRows().isEmpty())
return;
int currentRow = ui->connectionView->selectionModel()->selectedRows().constFirst().row();
- ConnectionModel *connectionModel = qobject_cast<ConnectionModel*>(ui->connectionView->model());
+ auto connectionModel = qobject_cast<ConnectionModel*>(ui->connectionView->model());
if (connectionModel) {
connectionModel->deleteConnectionByRow(currentRow);
}
@@ -250,7 +250,7 @@ void ConnectionViewWidget::removeButtonClicked()
if (ui->bindingView->selectionModel()->selectedRows().isEmpty())
return;
int currentRow = ui->bindingView->selectionModel()->selectedRows().constFirst().row();
- BindingModel *bindingModel = qobject_cast<BindingModel*>(ui->bindingView->model());
+ auto bindingModel = qobject_cast<BindingModel*>(ui->bindingView->model());
if (bindingModel) {
bindingModel->deleteBindindByRow(currentRow);
}
@@ -258,12 +258,12 @@ void ConnectionViewWidget::removeButtonClicked()
if (ui->dynamicPropertiesView->selectionModel()->selectedRows().isEmpty())
return;
int currentRow = ui->dynamicPropertiesView->selectionModel()->selectedRows().constFirst().row();
- DynamicPropertiesModel *dynamicPropertiesModel = qobject_cast<DynamicPropertiesModel*>(ui->dynamicPropertiesView->model());
+ auto dynamicPropertiesModel = qobject_cast<DynamicPropertiesModel*>(ui->dynamicPropertiesView->model());
if (dynamicPropertiesModel)
dynamicPropertiesModel->deleteDynamicPropertyByRow(currentRow);
} else if (currentTab() == BackendTab) {
int currentRow = ui->backendView->selectionModel()->selectedRows().constFirst().row();
- BackendModel *backendModel = qobject_cast<BackendModel*>(ui->backendView->model());
+ auto backendModel = qobject_cast<BackendModel*>(ui->backendView->model());
if (backendModel)
backendModel->deletePropertyByRow(currentRow);
}
@@ -275,22 +275,22 @@ void ConnectionViewWidget::addButtonClicked()
{
if (currentTab() == ConnectionTab) {
- ConnectionModel *connectionModel = qobject_cast<ConnectionModel*>(ui->connectionView->model());
+ auto connectionModel = qobject_cast<ConnectionModel*>(ui->connectionView->model());
if (connectionModel) {
connectionModel->addConnection();
}
} else if (currentTab() == BindingTab) {
- BindingModel *bindingModel = qobject_cast<BindingModel*>(ui->bindingView->model());
+ auto bindingModel = qobject_cast<BindingModel*>(ui->bindingView->model());
if (bindingModel) {
bindingModel->addBindingForCurrentNode();
}
} else if (currentTab() == DynamicPropertiesTab) {
- DynamicPropertiesModel *dynamicPropertiesModel = qobject_cast<DynamicPropertiesModel*>(ui->dynamicPropertiesView->model());
+ auto dynamicPropertiesModel = qobject_cast<DynamicPropertiesModel*>(ui->dynamicPropertiesView->model());
if (dynamicPropertiesModel)
dynamicPropertiesModel->addDynamicPropertyForCurrentNode();
} else if (currentTab() == BackendTab) {
- BackendModel *backendModel = qobject_cast<BackendModel*>(ui->backendView->model());
+ auto backendModel = qobject_cast<BackendModel*>(ui->backendView->model());
if (backendModel)
backendModel->addNewBackend();
}
diff --git a/src/plugins/qmldesigner/qmldesignerextension/connectioneditor/delegates.cpp b/src/plugins/qmldesigner/qmldesignerextension/connectioneditor/delegates.cpp
index cf9c5b6f7e..1a9958f916 100644
--- a/src/plugins/qmldesigner/qmldesignerextension/connectioneditor/delegates.cpp
+++ b/src/plugins/qmldesigner/qmldesignerextension/connectioneditor/delegates.cpp
@@ -76,7 +76,7 @@ void PropertiesComboBox::setText(const QString &text)
void PropertiesComboBox::disableValidator()
{
- setValidator(0);
+ setValidator(nullptr);
}
ConnectionComboBox::ConnectionComboBox(QWidget *parent) : PropertiesComboBox(parent)
@@ -110,8 +110,8 @@ void ConnectionEditorDelegate::paint(QPainter *painter,
BindingDelegate::BindingDelegate(QWidget *parent) : ConnectionEditorDelegate(parent)
{
- static QItemEditorFactory *factory = 0;
- if (factory == 0) {
+ static QItemEditorFactory *factory = nullptr;
+ if (factory == nullptr) {
factory = new QItemEditorFactory;
QItemEditorCreatorBase *creator
= new QItemEditorCreator<PropertiesComboBox>("text");
@@ -125,7 +125,7 @@ QWidget *BindingDelegate::createEditor(QWidget *parent, const QStyleOptionViewIt
{
QWidget *widget = QStyledItemDelegate::createEditor(parent, option, index);
- const BindingModel *model = qobject_cast<const BindingModel*>(index.model());
+ const auto model = qobject_cast<const BindingModel*>(index.model());
if (!model) {
qWarning() << "BindingDelegate::createEditor no model";
return widget;
@@ -137,7 +137,7 @@ QWidget *BindingDelegate::createEditor(QWidget *parent, const QStyleOptionViewIt
model->connectionView()->allModelNodes();
- PropertiesComboBox *bindingComboBox = qobject_cast<PropertiesComboBox*>(widget);
+ auto bindingComboBox = qobject_cast<PropertiesComboBox*>(widget);
if (!bindingComboBox) {
qWarning() << "BindingDelegate::createEditor no bindingComboBox";
return widget;
@@ -192,7 +192,7 @@ QWidget *DynamicPropertiesDelegate::createEditor(QWidget *parent, const QStyleOp
{
QWidget *widget = QStyledItemDelegate::createEditor(parent, option, index);
- const DynamicPropertiesModel *model = qobject_cast<const DynamicPropertiesModel*>(index.model());
+ const auto model = qobject_cast<const DynamicPropertiesModel*>(index.model());
if (!model) {
qWarning() << "BindingDelegate::createEditor no model";
return widget;
@@ -206,14 +206,14 @@ QWidget *DynamicPropertiesDelegate::createEditor(QWidget *parent, const QStyleOp
switch (index.column()) {
case DynamicPropertiesModel::TargetModelNodeRow: {
- return 0; //no editor
+ return nullptr; //no editor
};
case DynamicPropertiesModel::PropertyNameRow: {
return QStyledItemDelegate::createEditor(parent, option, index);
};
case DynamicPropertiesModel::PropertyTypeRow: {
- PropertiesComboBox *dynamicPropertiesComboBox = new PropertiesComboBox(parent);
+ auto dynamicPropertiesComboBox = new PropertiesComboBox(parent);
connect(dynamicPropertiesComboBox, static_cast<void (QComboBox::*)(int)>(&QComboBox::activated), this, [=]() {
auto delegate = const_cast<DynamicPropertiesDelegate*>(this);
emit delegate->commitData(dynamicPropertiesComboBox);
@@ -236,13 +236,13 @@ QWidget *DynamicPropertiesDelegate::createEditor(QWidget *parent, const QStyleOp
default: qWarning() << "BindingDelegate::createEditor column" << index.column();
}
- return 0;
+ return nullptr;
}
ConnectionDelegate::ConnectionDelegate(QWidget *parent) : ConnectionEditorDelegate(parent)
{
- static QItemEditorFactory *factory = 0;
- if (factory == 0) {
+ static QItemEditorFactory *factory = nullptr;
+ if (factory == nullptr) {
factory = new QItemEditorFactory;
QItemEditorCreatorBase *creator
= new QItemEditorCreator<ConnectionComboBox>("text");
@@ -257,9 +257,9 @@ QWidget *ConnectionDelegate::createEditor(QWidget *parent, const QStyleOptionVie
QWidget *widget = QStyledItemDelegate::createEditor(parent, option, index);
- const ConnectionModel *connectionModel = qobject_cast<const ConnectionModel*>(index.model());
+ const auto connectionModel = qobject_cast<const ConnectionModel*>(index.model());
- ConnectionComboBox *connectionComboBox = qobject_cast<ConnectionComboBox*>(widget);
+ auto connectionComboBox = qobject_cast<ConnectionComboBox*>(widget);
if (!connectionModel) {
qWarning() << "ConnectionDelegate::createEditor no model";
@@ -322,7 +322,7 @@ BackendDelegate::BackendDelegate(QWidget *parent) : ConnectionEditorDelegate(par
QWidget *BackendDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
- const BackendModel *model = qobject_cast<const BackendModel*>(index.model());
+ const auto model = qobject_cast<const BackendModel*>(index.model());
model->connectionView()->allModelNodes();
@@ -333,7 +333,7 @@ QWidget *BackendDelegate::createEditor(QWidget *parent, const QStyleOptionViewIt
switch (index.column()) {
case BackendModel::TypeNameColumn: {
- PropertiesComboBox *backendComboBox = new PropertiesComboBox(parent);
+ auto backendComboBox = new PropertiesComboBox(parent);
backendComboBox->addItems(model->possibleCppTypes());
connect(backendComboBox, static_cast<void (QComboBox::*)(int)>(&QComboBox::activated), this, [=]() {
auto delegate = const_cast<BackendDelegate*>(this);
@@ -345,10 +345,10 @@ QWidget *BackendDelegate::createEditor(QWidget *parent, const QStyleOptionViewIt
return widget;
};
case BackendModel::IsSingletonColumn: {
- return 0; //no editor
+ return nullptr; //no editor
};
case BackendModel::IsLocalColumn: {
- return 0; //no editor
+ return nullptr; //no editor
};
default: qWarning() << "BackendDelegate::createEditor column" << index.column();
}
diff --git a/src/plugins/qmldesigner/qmldesignerextension/connectioneditor/dynamicpropertiesmodel.cpp b/src/plugins/qmldesigner/qmldesignerextension/connectioneditor/dynamicpropertiesmodel.cpp
index 620cd9bf0f..8d4186a5b5 100644
--- a/src/plugins/qmldesigner/qmldesignerextension/connectioneditor/dynamicpropertiesmodel.cpp
+++ b/src/plugins/qmldesigner/qmldesignerextension/connectioneditor/dynamicpropertiesmodel.cpp
@@ -475,7 +475,7 @@ void DynamicPropertiesModel::updatePropertyName(int rowNumber)
targetNode.removeProperty(bindingProperty.name());
transaction.commit(); //committing in the try block
} catch (Exception &e) { //better save then sorry
- QMessageBox::warning(0, tr("Error"), e.description());
+ QMessageBox::warning(nullptr, tr("Error"), e.description());
}
updateCustomData(rowNumber, targetNode.bindingProperty(newName));
@@ -495,7 +495,7 @@ void DynamicPropertiesModel::updatePropertyName(int rowNumber)
targetNode.removeProperty(variantProperty.name());
transaction.commit(); //committing in the try block
} catch (Exception &e) { //better save then sorry
- QMessageBox::warning(0, tr("Error"), e.description());
+ QMessageBox::warning(nullptr, tr("Error"), e.description());
}
updateCustomData(rowNumber, targetNode.variantProperty(newName));
@@ -525,7 +525,7 @@ void DynamicPropertiesModel::updatePropertyType(int rowNumber)
targetNode.bindingProperty(propertyName).setDynamicTypeNameAndExpression(newType, expression);
transaction.commit(); //committing in the try block
} catch (Exception &e) { //better save then sorry
- QMessageBox::warning(0, tr("Error"), e.description());
+ QMessageBox::warning(nullptr, tr("Error"), e.description());
}
updateCustomData(rowNumber, targetNode.bindingProperty(propertyName));
@@ -549,7 +549,7 @@ void DynamicPropertiesModel::updatePropertyType(int rowNumber)
}
transaction.commit(); //committing in the try block
} catch (Exception &e) { //better save then sorry
- QMessageBox::warning(0, tr("Error"), e.description());
+ QMessageBox::warning(nullptr, tr("Error"), e.description());
}
updateCustomData(rowNumber, targetNode.variantProperty(propertyName));
@@ -683,7 +683,7 @@ void DynamicPropertiesModel::handleDataChanged(const QModelIndex &topLeft, const
void DynamicPropertiesModel::handleException()
{
- QMessageBox::warning(0, tr("Error"), m_exceptionError);
+ QMessageBox::warning(nullptr, tr("Error"), m_exceptionError);
resetModel();
}
diff --git a/src/plugins/qmldesigner/qmldesignerextension/pathtool/controlpoint.cpp b/src/plugins/qmldesigner/qmldesignerextension/pathtool/controlpoint.cpp
index 0032b237f9..d2a8bf75c3 100644
--- a/src/plugins/qmldesigner/qmldesignerextension/pathtool/controlpoint.cpp
+++ b/src/plugins/qmldesigner/qmldesignerextension/pathtool/controlpoint.cpp
@@ -33,14 +33,9 @@
namespace QmlDesigner {
-ControlPoint::ControlPoint()
-{
-}
+ControlPoint::ControlPoint() = default;
-ControlPoint::ControlPoint(const ControlPoint &other)
- : d(other.d)
-{
-}
+ControlPoint::ControlPoint(const ControlPoint &other) = default;
ControlPoint::ControlPoint(const QPointF &coordinate)
: d(new ControlPointData)
@@ -54,9 +49,7 @@ ControlPoint::ControlPoint(double x, double y)
d->coordinate = QPointF(x, y);
}
-ControlPoint::~ControlPoint()
-{
-}
+ControlPoint::~ControlPoint() = default;
ControlPoint &ControlPoint::operator =(const ControlPoint &other)
{
diff --git a/src/plugins/qmldesigner/qmldesignerextension/pathtool/cubicsegment.cpp b/src/plugins/qmldesigner/qmldesignerextension/pathtool/cubicsegment.cpp
index be72a33ee1..0005514339 100644
--- a/src/plugins/qmldesigner/qmldesignerextension/pathtool/cubicsegment.cpp
+++ b/src/plugins/qmldesigner/qmldesignerextension/pathtool/cubicsegment.cpp
@@ -31,9 +31,7 @@
namespace QmlDesigner {
-CubicSegment::CubicSegment()
-{
-}
+CubicSegment::CubicSegment() = default;
CubicSegment CubicSegment::create()
{
diff --git a/src/plugins/qmldesigner/qmldesignerextension/pathtool/pathitem.cpp b/src/plugins/qmldesigner/qmldesignerextension/pathtool/pathitem.cpp
index e6fb45b4b1..0d5b380747 100644
--- a/src/plugins/qmldesigner/qmldesignerextension/pathtool/pathitem.cpp
+++ b/src/plugins/qmldesigner/qmldesignerextension/pathtool/pathitem.cpp
@@ -42,11 +42,10 @@
namespace QmlDesigner {
PathItem::PathItem(FormEditorScene* scene)
- : QGraphicsObject(),
- m_selectionManipulator(this),
- m_lastPercent(-1.),
- m_formEditorItem(0),
- m_dontUpdatePath(false)
+ : m_selectionManipulator(this),
+ m_lastPercent(-1.),
+ m_formEditorItem(nullptr),
+ m_dontUpdatePath(false)
{
scene->addItem(this);
setFlag(QGraphicsItem::ItemIsMovable, false);
@@ -54,7 +53,7 @@ PathItem::PathItem(FormEditorScene* scene)
PathItem::~PathItem()
{
- m_formEditorItem = 0;
+ m_formEditorItem = nullptr;
}
static ModelNode pathModelNode(FormEditorItem *formEditorItem)
@@ -64,9 +63,9 @@ static ModelNode pathModelNode(FormEditorItem *formEditorItem)
return modelNode.nodeProperty("path").modelNode();
}
-typedef QPair<PropertyName, QVariant> PropertyPair;
+using PropertyPair = QPair<PropertyName, QVariant>;
-void PathItem::writeLinePath(ModelNode pathNode, const CubicSegment &cubicSegment)
+void PathItem::writeLinePath(const ModelNode &pathNode, const CubicSegment &cubicSegment)
{
QList<PropertyPair> propertyList;
propertyList.append(PropertyPair("x", cubicSegment.fourthControlX()));
@@ -76,7 +75,7 @@ void PathItem::writeLinePath(ModelNode pathNode, const CubicSegment &cubicSegmen
pathNode.nodeListProperty("pathElements").reparentHere(lineNode);
}
-void PathItem::writeQuadPath(ModelNode pathNode, const CubicSegment &cubicSegment)
+void PathItem::writeQuadPath(const ModelNode &pathNode, const CubicSegment &cubicSegment)
{
QList<QPair<PropertyName, QVariant> > propertyList;
propertyList.append(PropertyPair("controlX", cubicSegment.quadraticControlX()));
@@ -88,7 +87,7 @@ void PathItem::writeQuadPath(ModelNode pathNode, const CubicSegment &cubicSegmen
pathNode.nodeListProperty("pathElements").reparentHere(lineNode);
}
-void PathItem::writeCubicPath(ModelNode pathNode, const CubicSegment &cubicSegment)
+void PathItem::writeCubicPath(const ModelNode &pathNode, const CubicSegment &cubicSegment)
{
QList<QPair<PropertyName, QVariant> > propertyList;
propertyList.append(PropertyPair("control1X", cubicSegment.secondControlX()));
@@ -102,7 +101,7 @@ void PathItem::writeCubicPath(ModelNode pathNode, const CubicSegment &cubicSegme
pathNode.nodeListProperty("pathElements").reparentHere(lineNode);
}
-void PathItem::writePathAttributes(ModelNode pathNode, const QMap<QString, QVariant> &attributes)
+void PathItem::writePathAttributes(const ModelNode &pathNode, const QMap<QString, QVariant> &attributes)
{
QMapIterator<QString, QVariant> attributesIterator(attributes);
while (attributesIterator.hasNext()) {
@@ -116,7 +115,7 @@ void PathItem::writePathAttributes(ModelNode pathNode, const QMap<QString, QVari
}
}
-void PathItem::writePathPercent(ModelNode pathNode, double percent)
+void PathItem::writePathPercent(const ModelNode& pathNode, double percent)
{
if (percent >= 0.0) {
QList<QPair<PropertyName, QVariant> > propertyList;
@@ -498,7 +497,7 @@ QRectF PathItem::instanceBoundingRect() const
if (formEditorItem())
return formEditorItem()->qmlItemNode().instanceBoundingRect();
- return QRectF();
+ return {};
}
void PathItem::readControlPoints()
@@ -557,7 +556,7 @@ void PathItem::readControlPoints()
}
}
-static CubicSegment getMinimumDistanceSegment(const QPointF &pickPoint, const QList<CubicSegment> &cubicSegments, double maximumDistance, double *t = 0)
+static CubicSegment getMinimumDistanceSegment(const QPointF &pickPoint, const QList<CubicSegment> &cubicSegments, double maximumDistance, double *t = nullptr)
{
CubicSegment minimumDistanceSegment;
double actualMinimumDistance = maximumDistance;
@@ -610,7 +609,7 @@ void PathItem::openPath()
QAction *PathItem::createClosedPathAction(QMenu *contextMenu) const
{
- QAction *closedPathAction = new QAction(contextMenu);
+ auto closedPathAction = new QAction(contextMenu);
closedPathAction->setCheckable(true);
closedPathAction->setChecked(isClosedPath());
closedPathAction->setText(tr("Closed Path"));
@@ -638,11 +637,11 @@ void PathItem::createCubicSegmentContextMenu(CubicSegment &cubicSegment, const Q
{
QMenu contextMenu;
- QAction *splitSegmentAction = new QAction(&contextMenu);
+ auto splitSegmentAction = new QAction(&contextMenu);
splitSegmentAction->setText(tr("Split Segment"));
contextMenu.addAction(splitSegmentAction);
- QAction *straightLinePointAction = new QAction(&contextMenu);
+ auto straightLinePointAction = new QAction(&contextMenu);
straightLinePointAction->setText(tr("Make Curve Segment Straight"));
contextMenu.addAction(straightLinePointAction);
@@ -672,7 +671,7 @@ void PathItem::createCubicSegmentContextMenu(CubicSegment &cubicSegment, const Q
void PathItem::createEditPointContextMenu(const ControlPoint &controlPoint, const QPoint &menuPosition)
{
QMenu contextMenu;
- QAction *removeEditPointAction = new QAction(&contextMenu);
+ auto removeEditPointAction = new QAction(&contextMenu);
removeEditPointAction->setText(tr("Remove Edit Point"));
contextMenu.addAction(removeEditPointAction);
@@ -943,8 +942,8 @@ void PathItem::removeEditPoint(const ControlPoint &controlPoint)
m_cubicSegments.removeOne(cubicSegments.constFirst());
} else if (cubicSegments.count() == 2){
CubicSegment mergedCubicSegment = CubicSegment::create();
- CubicSegment firstCubicSegment = cubicSegments.at(0);
- CubicSegment secondCubicSegment = cubicSegments.at(1);
+ const CubicSegment &firstCubicSegment = cubicSegments.at(0);
+ const CubicSegment &secondCubicSegment = cubicSegments.at(1);
mergedCubicSegment.setFirstControlPoint(firstCubicSegment.firstControlPoint());
mergedCubicSegment.setSecondControlPoint(firstCubicSegment.secondControlPoint());
mergedCubicSegment.setThirdControlPoint(secondCubicSegment.thirdControlPoint());
diff --git a/src/plugins/qmldesigner/qmldesignerextension/pathtool/pathitem.h b/src/plugins/qmldesigner/qmldesignerextension/pathtool/pathitem.h
index d431262b39..17981283a6 100644
--- a/src/plugins/qmldesigner/qmldesignerextension/pathtool/pathitem.h
+++ b/src/plugins/qmldesigner/qmldesignerextension/pathtool/pathitem.h
@@ -72,7 +72,7 @@ public:
Type = 0xEAAC
};
PathItem(FormEditorScene* scene);
- ~PathItem();
+ ~PathItem() override;
int type() const override;
void setFormEditorItem(FormEditorItem *formEditorItem);
@@ -99,11 +99,11 @@ public:
protected:
void updateBoundingRect();
QRectF instanceBoundingRect() const;
- void writeLinePath(ModelNode pathNode, const CubicSegment &cubicSegment);
- void writeQuadPath(ModelNode pathNode, const CubicSegment &cubicSegment);
- void writeCubicPath(ModelNode pathNode, const CubicSegment &cubicSegment);
- void writePathAttributes(ModelNode pathNode, const QMap<QString, QVariant> &attributes);
- void writePathPercent(ModelNode pathNode, double percent);
+ void writeLinePath(const ModelNode &pathNode, const CubicSegment &cubicSegment);
+ void writeQuadPath(const ModelNode &pathNode, const CubicSegment &cubicSegment);
+ void writeCubicPath(const ModelNode &pathNode, const CubicSegment &cubicSegment);
+ void writePathAttributes(const ModelNode &pathNode, const QMap<QString, QVariant> &attributes);
+ void writePathPercent(const ModelNode &pathNode, double percent);
void readControlPoints();
void splitCubicSegment(CubicSegment &cubicSegment, double t);
void closePath();
diff --git a/src/plugins/qmldesigner/qmldesignerextension/pathtool/pathselectionmanipulator.cpp b/src/plugins/qmldesigner/qmldesignerextension/pathtool/pathselectionmanipulator.cpp
index 510181258e..6df6976233 100644
--- a/src/plugins/qmldesigner/qmldesignerextension/pathtool/pathselectionmanipulator.cpp
+++ b/src/plugins/qmldesigner/qmldesignerextension/pathtool/pathselectionmanipulator.cpp
@@ -166,9 +166,7 @@ void PathSelectionManipulator::endMultiSelection()
m_isMultiSelecting = false;
}
-SelectionPoint::SelectionPoint()
-{
-}
+SelectionPoint::SelectionPoint() = default;
SelectionPoint::SelectionPoint(const ControlPoint &controlPoint)
: controlPoint(controlPoint)
diff --git a/src/plugins/qmldesigner/qmldesignerextension/pathtool/pathtool.cpp b/src/plugins/qmldesigner/qmldesignerextension/pathtool/pathtool.cpp
index 66582f017d..a01ae050ac 100644
--- a/src/plugins/qmldesigner/qmldesignerextension/pathtool/pathtool.cpp
+++ b/src/plugins/qmldesigner/qmldesignerextension/pathtool/pathtool.cpp
@@ -101,28 +101,28 @@ class PathToolAction : public AbstractAction
public:
PathToolAction() : AbstractAction(QCoreApplication::translate("PathToolAction","Edit Path")) {}
- QByteArray category() const
+ QByteArray category() const override
{
return QByteArray();
}
- QByteArray menuId() const
+ QByteArray menuId() const override
{
return "PathTool";
}
- int priority() const
+ int priority() const override
{
return CustomActionsPriority;
}
- Type type() const
+ Type type() const override
{
return ContextMenuAction;
}
protected:
- bool isVisible(const SelectionContext &selectionContext) const
+ bool isVisible(const SelectionContext &selectionContext) const override
{
if (selectionContext.scenePosition().isNull())
return false;
@@ -133,18 +133,16 @@ protected:
return false;
}
- bool isEnabled(const SelectionContext &selectionContext) const
+ bool isEnabled(const SelectionContext &selectionContext) const override
{
return isVisible(selectionContext);
}
};
PathTool::PathTool()
- : QObject(),
- AbstractCustomTool(),
- m_pathToolView(this)
+ : m_pathToolView(this)
{
- PathToolAction *textToolAction = new PathToolAction;
+ auto textToolAction = new PathToolAction;
QmlDesignerPlugin::instance()->designerActionManager().addDesignerAction(textToolAction);
connect(textToolAction->action(), &QAction::triggered, [=]() {
if (m_pathToolView.model())
@@ -155,9 +153,7 @@ PathTool::PathTool()
}
-PathTool::~PathTool()
-{
-}
+PathTool::~PathTool() = default;
void PathTool::clear()
{
@@ -239,7 +235,7 @@ void PathTool::mouseDoubleClickEvent(const QList<QGraphicsItem*> & /*itemList*/,
void PathTool::itemsAboutToRemoved(const QList<FormEditorItem*> &removedItemList)
{
- if (m_pathItem == 0)
+ if (m_pathItem == nullptr)
return;
if (removedItemList.contains(m_pathItem->formEditorItem()))
@@ -280,7 +276,7 @@ void PathTool::instancesParentChanged(const QList<FormEditorItem *> & /*itemLis
void PathTool::instancePropertyChange(const QList<QPair<ModelNode, PropertyName> > &propertyList)
{
- typedef QPair<ModelNode, PropertyName> ModelNodePropertyNamePair;
+ using ModelNodePropertyNamePair = QPair<ModelNode, PropertyName>;
foreach (const ModelNodePropertyNamePair &propertyPair, propertyList) {
if (propertyPair.first == m_pathItem->formEditorItem()->qmlItemNode().modelNode()
&& propertyPair.second == "path")
diff --git a/src/plugins/qmldesigner/qmldesignerextension/pathtool/pathtoolview.cpp b/src/plugins/qmldesigner/qmldesignerextension/pathtool/pathtoolview.cpp
index a15abf569e..ea1e28832a 100644
--- a/src/plugins/qmldesigner/qmldesignerextension/pathtool/pathtoolview.cpp
+++ b/src/plugins/qmldesigner/qmldesignerextension/pathtool/pathtoolview.cpp
@@ -37,8 +37,7 @@
namespace QmlDesigner {
PathToolView::PathToolView(PathTool *pathTool)
- : AbstractView(),
- m_pathTool(pathTool)
+ : m_pathTool(pathTool)
{
}
diff --git a/src/plugins/qmldesigner/qmldesignerextension/sourcetool/sourcetool.cpp b/src/plugins/qmldesigner/qmldesignerextension/sourcetool/sourcetool.cpp
index 9c7f32c1bb..d121e60c73 100644
--- a/src/plugins/qmldesigner/qmldesignerextension/sourcetool/sourcetool.cpp
+++ b/src/plugins/qmldesigner/qmldesignerextension/sourcetool/sourcetool.cpp
@@ -79,35 +79,35 @@ public:
action()->setIcon(prevIcon.icon());
}
- QByteArray category() const
+ QByteArray category() const override
{
return QByteArray();
}
- QByteArray menuId() const
+ QByteArray menuId() const override
{
return "SourceTool";
}
- int priority() const
+ int priority() const override
{
return CustomActionsPriority;
}
- Type type() const
+ Type type() const override
{
return FormEditorAction;
}
protected:
- bool isVisible(const SelectionContext &selectionContext) const
+ bool isVisible(const SelectionContext &selectionContext) const override
{
if (selectionContext.singleNodeIsSelected())
return modelNodeHasUrlSource(selectionContext.currentSingleSelectedNode());
return false;
}
- bool isEnabled(const SelectionContext &selectionContext) const
+ bool isEnabled(const SelectionContext &selectionContext) const override
{
return isVisible(selectionContext);
}
@@ -115,18 +115,15 @@ protected:
SourceTool::SourceTool()
- : QObject(), AbstractCustomTool()
{
- SourceToolAction *sourceToolAction = new SourceToolAction;
+ auto sourceToolAction = new SourceToolAction;
QmlDesignerPlugin::instance()->designerActionManager().addDesignerAction(sourceToolAction);
connect(sourceToolAction->action(), &QAction::triggered, [=]() {
view()->changeCurrentToolTo(this);
});
}
-SourceTool::~SourceTool()
-{
-}
+SourceTool::~SourceTool() = default;
void SourceTool::clear()
{
@@ -171,7 +168,6 @@ void SourceTool::mouseReleaseEvent(const QList<QGraphicsItem*> &itemList,
AbstractFormEditorTool::mouseReleaseEvent(itemList, event);
}
-
void SourceTool::mouseDoubleClickEvent(const QList<QGraphicsItem*> &itemList, QGraphicsSceneMouseEvent *event)
{
AbstractFormEditorTool::mouseDoubleClickEvent(itemList, event);
@@ -199,7 +195,7 @@ void SourceTool::selectedItemsChanged(const QList<FormEditorItem*> &itemList)
if (openDirectory.isEmpty())
openDirectory = baseDirectory(view()->model()->fileUrl());
- QString fileName = QFileDialog::getOpenFileName(0,
+ QString fileName = QFileDialog::getOpenFileName(nullptr,
tr("Open File"),
openDirectory);
fileSelected(fileName);
diff --git a/src/plugins/qmldesigner/qmldesignerextension/texttool/textedititem.cpp b/src/plugins/qmldesigner/qmldesignerextension/texttool/textedititem.cpp
index 0728c8128b..1ce3244cbc 100644
--- a/src/plugins/qmldesigner/qmldesignerextension/texttool/textedititem.cpp
+++ b/src/plugins/qmldesigner/qmldesignerextension/texttool/textedititem.cpp
@@ -36,14 +36,14 @@ namespace QmlDesigner {
TextEditItem::TextEditItem(FormEditorScene* scene)
: TextEditItemWidget(scene)
- , m_formEditorItem(0)
+ , m_formEditorItem(nullptr)
{
connect(lineEdit(), &QLineEdit::returnPressed, this, &TextEditItem::returnPressed);
}
TextEditItem::~TextEditItem()
{
- m_formEditorItem = 0;
+ m_formEditorItem = nullptr;
}
void TextEditItem::writeTextToProperty()
diff --git a/src/plugins/qmldesigner/qmldesignerextension/texttool/textedititem.h b/src/plugins/qmldesigner/qmldesignerextension/texttool/textedititem.h
index 4213de9822..5497dadbe1 100644
--- a/src/plugins/qmldesigner/qmldesignerextension/texttool/textedititem.h
+++ b/src/plugins/qmldesigner/qmldesignerextension/texttool/textedititem.h
@@ -36,8 +36,8 @@ class TextEditItem : public TextEditItemWidget
Q_OBJECT
public:
TextEditItem(FormEditorScene* scene);
- ~TextEditItem();
- int type() const;
+ ~TextEditItem() override;
+ int type() const override;
void setFormEditorItem(FormEditorItem *formEditorItem);
FormEditorItem *formEditorItem() const;
diff --git a/src/plugins/qmldesigner/qmldesignerextension/texttool/textedititemwidget.cpp b/src/plugins/qmldesigner/qmldesignerextension/texttool/textedititemwidget.cpp
index e9380a6c71..40efb67e77 100644
--- a/src/plugins/qmldesigner/qmldesignerextension/texttool/textedititemwidget.cpp
+++ b/src/plugins/qmldesigner/qmldesignerextension/texttool/textedititemwidget.cpp
@@ -34,7 +34,6 @@
namespace QmlDesigner {
TextEditItemWidget::TextEditItemWidget(QGraphicsScene* scene)
- : QGraphicsProxyWidget()
{
scene->addItem(this);
setFlag(QGraphicsItem::ItemIsMovable, false);
@@ -43,7 +42,7 @@ TextEditItemWidget::TextEditItemWidget(QGraphicsScene* scene)
TextEditItemWidget::~TextEditItemWidget()
{
- setWidget(0);
+ setWidget(nullptr);
}
void TextEditItemWidget::paint(QPainter *painter, const QStyleOptionGraphicsItem * /*option*/, QWidget * /*widget*/)
diff --git a/src/plugins/qmldesigner/qmldesignerextension/texttool/textedititemwidget.h b/src/plugins/qmldesigner/qmldesignerextension/texttool/textedititemwidget.h
index d0caf3a265..7ff2909919 100644
--- a/src/plugins/qmldesigner/qmldesignerextension/texttool/textedititemwidget.h
+++ b/src/plugins/qmldesigner/qmldesignerextension/texttool/textedititemwidget.h
@@ -40,7 +40,7 @@ class TextEditItemWidget : public QGraphicsProxyWidget
Q_OBJECT
public:
TextEditItemWidget(QGraphicsScene *scene);
- ~TextEditItemWidget();
+ ~TextEditItemWidget() override;
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;
diff --git a/src/plugins/qmldesigner/qmldesignerextension/texttool/texttool.cpp b/src/plugins/qmldesigner/qmldesignerextension/texttool/texttool.cpp
index fcaaba72ce..76dc414c03 100644
--- a/src/plugins/qmldesigner/qmldesignerextension/texttool/texttool.cpp
+++ b/src/plugins/qmldesigner/qmldesignerextension/texttool/texttool.cpp
@@ -54,28 +54,28 @@ class TextToolAction : public AbstractAction
public:
TextToolAction() : AbstractAction(QCoreApplication::translate("TextToolAction","Edit Text")) {}
- QByteArray category() const
+ QByteArray category() const override
{
return QByteArray();
}
- QByteArray menuId() const
+ QByteArray menuId() const override
{
return "TextTool";
}
- int priority() const
+ int priority() const override
{
return CustomActionsPriority;
}
- Type type() const
+ Type type() const override
{
return ContextMenuAction;
}
protected:
- bool isVisible(const SelectionContext &selectionContext) const
+ bool isVisible(const SelectionContext &selectionContext) const override
{
if (selectionContext.scenePosition().isNull())
return false;
@@ -86,25 +86,22 @@ protected:
return false;
}
- bool isEnabled(const SelectionContext &selectionContext) const
+ bool isEnabled(const SelectionContext &selectionContext) const override
{
return isVisible(selectionContext);
}
};
TextTool::TextTool()
- : QObject() , AbstractCustomTool()
{
- TextToolAction *textToolAction = new TextToolAction;
+ auto textToolAction = new TextToolAction;
QmlDesignerPlugin::instance()->designerActionManager().addDesignerAction(textToolAction);
connect(textToolAction->action(), &QAction::triggered, [=]() {
view()->changeCurrentToolTo(this);
});
}
-TextTool::~TextTool()
-{
-}
+TextTool::~TextTool() = default;
void TextTool::clear()
{
@@ -195,7 +192,7 @@ void TextTool::mouseDoubleClickEvent(const QList<QGraphicsItem*> & /*itemList*/,
void TextTool::itemsAboutToRemoved(const QList<FormEditorItem*> &removedItemList)
{
- if (textItem() == 0)
+ if (textItem() == nullptr)
return;
if (removedItemList.contains(textItem()->formEditorItem()))
@@ -232,7 +229,7 @@ void TextTool::instancesParentChanged(const QList<FormEditorItem *> & /*itemLis
void TextTool::instancePropertyChange(const QList<QPair<ModelNode, PropertyName> > &propertyList)
{
- typedef QPair<ModelNode, PropertyName> ModelNodePropertyNamePair;
+ using ModelNodePropertyNamePair = QPair<ModelNode, PropertyName>;
foreach (const ModelNodePropertyNamePair &propertyPair, propertyList) {
if (propertyPair.first == textItem()->formEditorItem()->qmlItemNode().modelNode()
&& propertyPair.second == "text")
diff --git a/src/plugins/qmldesigner/qmldesignerplugin.cpp b/src/plugins/qmldesigner/qmldesignerplugin.cpp
index 140c2ef937..2c745b2ce8 100644
--- a/src/plugins/qmldesigner/qmldesignerplugin.cpp
+++ b/src/plugins/qmldesigner/qmldesignerplugin.cpp
@@ -93,7 +93,7 @@ QmlDesignerPlugin *QmlDesignerPlugin::m_instance = nullptr;
static bool isInDesignerMode()
{
- return Core::ModeManager::currentMode() == Core::Constants::MODE_DESIGN;
+ return Core::ModeManager::currentModeId() == Core::Constants::MODE_DESIGN;
}
static bool checkIfEditorIsQtQuick(Core::IEditor *editor)
@@ -106,7 +106,7 @@ static bool checkIfEditorIsQtQuick(Core::IEditor *editor)
|| document->language() == QmlJS::Dialect::QmlQtQuick2Ui
|| document->language() == QmlJS::Dialect::Qml;
- if (Core::ModeManager::currentMode() == Core::Constants::MODE_DESIGN) {
+ if (Core::ModeManager::currentModeId() == Core::Constants::MODE_DESIGN) {
Core::AsynchronousMessageBox::warning(QmlDesignerPlugin::tr("Cannot Open Design Mode"),
QmlDesignerPlugin::tr("The QML file is not currently opened in a QML Editor."));
Core::ModeManager::activateMode(Core::Constants::MODE_EDIT);
diff --git a/src/plugins/qmldesigner/qtquickplugin/qtquickplugin.cpp b/src/plugins/qmldesigner/qtquickplugin/qtquickplugin.cpp
index 2536b0091c..3c3692d8ad 100644
--- a/src/plugins/qmldesigner/qtquickplugin/qtquickplugin.cpp
+++ b/src/plugins/qmldesigner/qtquickplugin/qtquickplugin.cpp
@@ -28,11 +28,7 @@
namespace QmlDesigner {
-
-QtQuickPlugin::QtQuickPlugin()
-{
-
-}
+QtQuickPlugin::QtQuickPlugin() = default;
QString QtQuickPlugin::pluginName() const
{
diff --git a/src/plugins/qmldesigner/qtquickplugin/qtquickplugin.h b/src/plugins/qmldesigner/qtquickplugin/qtquickplugin.h
index 831c8f65e7..eff352a14d 100644
--- a/src/plugins/qmldesigner/qtquickplugin/qtquickplugin.h
+++ b/src/plugins/qmldesigner/qtquickplugin/qtquickplugin.h
@@ -40,10 +40,10 @@ class QtQuickPlugin : public QObject, QmlDesigner::IWidgetPlugin
Q_INTERFACES(QmlDesigner::IWidgetPlugin)
public:
QtQuickPlugin();
- ~QtQuickPlugin() {}
+ ~QtQuickPlugin() override = default;
- QString metaInfo() const;
- QString pluginName() const;
+ QString metaInfo() const override;
+ QString pluginName() const override;
};
diff --git a/src/plugins/qmldesigner/settingspage.cpp b/src/plugins/qmldesigner/settingspage.cpp
index 882e48eb1e..6fb88e5f21 100644
--- a/src/plugins/qmldesigner/settingspage.cpp
+++ b/src/plugins/qmldesigner/settingspage.cpp
@@ -228,7 +228,7 @@ void SettingsPageWidget::setSettings(const DesignerSettings &settings)
}
SettingsPage::SettingsPage() :
- m_widget(0)
+ m_widget(nullptr)
{
setId("B.QmlDesigner");
setDisplayName(tr("Qt Quick Designer"));
diff --git a/src/plugins/qmldesigner/shortcutmanager.cpp b/src/plugins/qmldesigner/shortcutmanager.cpp
index 9bb8574b28..0000adfd68 100644
--- a/src/plugins/qmldesigner/shortcutmanager.cpp
+++ b/src/plugins/qmldesigner/shortcutmanager.cpp
@@ -133,9 +133,9 @@ void ShortCutManager::registerActions(const Core::Context &qmlDesignerMainContex
//Save
Core::ActionManager::registerAction(&m_saveAction, Core::Constants::SAVE, qmlDesignerMainContext);
- connect(&m_saveAction, &QAction::triggered, em, [em] {
+ connect(&m_saveAction, &QAction::triggered, em, [] {
QmlDesignerPlugin::instance()->viewManager().reformatFileUsingTextEditorView();
- em->saveDocument();
+ Core::EditorManager::saveDocument();
});
Core::Command *command = nullptr;
@@ -365,7 +365,7 @@ DesignDocument *ShortCutManager::currentDesignDocument() const
void ShortCutManager::undoAvailable(bool isAvailable)
{
- DesignDocument *documentController = qobject_cast<DesignDocument*>(sender());
+ auto documentController = qobject_cast<DesignDocument*>(sender());
if (currentDesignDocument() &&
currentDesignDocument() == documentController) {
m_undoAction.setEnabled(isAvailable);
@@ -374,7 +374,7 @@ void ShortCutManager::undoAvailable(bool isAvailable)
void ShortCutManager::redoAvailable(bool isAvailable)
{
- DesignDocument *documentController = qobject_cast<DesignDocument*>(sender());
+ auto documentController = qobject_cast<DesignDocument*>(sender());
if (currentDesignDocument() &&
currentDesignDocument() == documentController) {
m_redoAction.setEnabled(isAvailable);
diff --git a/src/plugins/qmldesigner/switchsplittabwidget.cpp b/src/plugins/qmldesigner/switchsplittabwidget.cpp
index 7a1c14187c..9d81f3564d 100644
--- a/src/plugins/qmldesigner/switchsplittabwidget.cpp
+++ b/src/plugins/qmldesigner/switchsplittabwidget.cpp
@@ -77,7 +77,7 @@ SwitchSplitTabWidget::SwitchSplitTabWidget(QWidget *parent)
m_tabBarBackground->layout()->addItem(new QSpacerItem(0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding));
m_tabBarBackground->layout()->addWidget(m_tabBar);
- QToolButton *horizontalButton = new QToolButton;
+ auto horizontalButton = new QToolButton;
horizontalButton->setObjectName("centralTabBar");
horizontalButton->setIcon(Utils::Icon({{QLatin1String(":/qmldesigner/images/spliteditorvertically.png"),
Utils::Theme::IconsBaseColor}}).icon());
@@ -87,7 +87,7 @@ SwitchSplitTabWidget::SwitchSplitTabWidget(QWidget *parent)
updateSplitterSizes();
selectFakeTab();
});
- QToolButton *verticalButton = new QToolButton;
+ auto verticalButton = new QToolButton;
verticalButton->setObjectName("centralTabBar");
verticalButton->setIcon(Utils::Icon({{QLatin1String(":/qmldesigner/images/spliteditorhorizontally.png"),
Utils::Theme::IconsBaseColor}}).icon());
diff --git a/src/plugins/qmljseditor/qmljscomponentfromobjectdef.cpp b/src/plugins/qmljseditor/qmljscomponentfromobjectdef.cpp
index 456853633f..2da26d1bf7 100644
--- a/src/plugins/qmljseditor/qmljscomponentfromobjectdef.cpp
+++ b/src/plugins/qmljseditor/qmljscomponentfromobjectdef.cpp
@@ -99,8 +99,8 @@ public:
init();
}
- virtual void performChanges(QmlJSRefactoringFilePtr currentFile,
- const QmlJSRefactoringChanges &refactoring)
+ void performChanges(QmlJSRefactoringFilePtr currentFile,
+ const QmlJSRefactoringChanges &refactoring) override
{
QString componentName = m_componentName;
diff --git a/src/plugins/qmljseditor/qmljseditor.cpp b/src/plugins/qmljseditor/qmljseditor.cpp
index a9e063245e..bb9c70f768 100644
--- a/src/plugins/qmljseditor/qmljseditor.cpp
+++ b/src/plugins/qmljseditor/qmljseditor.cpp
@@ -70,7 +70,7 @@
#include <texteditor/texteditoractionhandler.h>
#include <texteditor/textmark.h>
-#include <utils/annotateditemdelegate.h>
+#include <utils/delegates.h>
#include <utils/changeset.h>
#include <utils/qtcassert.h>
#include <utils/uncommentselection.h>
@@ -1031,7 +1031,7 @@ bool QmlJSEditor::isDesignModePreferred() const
alwaysPreferDesignMode = true;
// stay in design mode if we are there
- Id mode = ModeManager::currentMode();
+ Id mode = ModeManager::currentModeId();
return alwaysPreferDesignMode || mode == Core::Constants::MODE_DESIGN;
}
diff --git a/src/plugins/qmljseditor/qmljseditor.pro b/src/plugins/qmljseditor/qmljseditor.pro
index a4f7916611..549b174c49 100644
--- a/src/plugins/qmljseditor/qmljseditor.pro
+++ b/src/plugins/qmljseditor/qmljseditor.pro
@@ -11,7 +11,6 @@ HEADERS += \
qmlexpressionundercursor.h \
qmljshighlighter.h \
qmljshoverhandler.h \
- qmljspreviewrunner.h \
qmljscomponentfromobjectdef.h \
qmljsoutline.h \
qmloutlinemodel.h \
@@ -39,7 +38,6 @@ SOURCES += \
qmlexpressionundercursor.cpp \
qmljshighlighter.cpp \
qmljshoverhandler.cpp \
- qmljspreviewrunner.cpp \
qmljscomponentfromobjectdef.cpp \
qmljsoutline.cpp \
qmloutlinemodel.cpp \
diff --git a/src/plugins/qmljseditor/qmljseditor.qbs b/src/plugins/qmljseditor/qmljseditor.qbs
index 9459876c9f..a9d16c778c 100644
--- a/src/plugins/qmljseditor/qmljseditor.qbs
+++ b/src/plugins/qmljseditor/qmljseditor.qbs
@@ -48,8 +48,6 @@ QtcPlugin {
"qmljsoutline.h",
"qmljsoutlinetreeview.cpp",
"qmljsoutlinetreeview.h",
- "qmljspreviewrunner.cpp",
- "qmljspreviewrunner.h",
"qmljsquickfix.cpp",
"qmljsquickfix.h",
"qmljsquickfixassist.cpp",
diff --git a/src/plugins/qmljseditor/qmljseditordocument.cpp b/src/plugins/qmljseditor/qmljseditordocument.cpp
index 9345042c11..f8662774c0 100644
--- a/src/plugins/qmljseditor/qmljseditordocument.cpp
+++ b/src/plugins/qmljseditor/qmljseditordocument.cpp
@@ -108,7 +108,7 @@ protected:
using Visitor::visit;
using Visitor::endVisit;
- virtual bool visit(AST::UiScriptBinding *node)
+ bool visit(AST::UiScriptBinding *node) override
{
if (asString(node->qualifiedId) == QLatin1String("id")) {
if (AST::ExpressionStatement *stmt = AST::cast<AST::ExpressionStatement*>(node->statement)) {
@@ -130,7 +130,7 @@ protected:
return false;
}
- virtual bool visit(AST::IdentifierExpression *node)
+ bool visit(AST::IdentifierExpression *node) override
{
if (!node->name.isEmpty()) {
const QString &name = node->name.toString();
@@ -205,7 +205,7 @@ protected:
decl->endColumn = last.startColumn + last.length;
}
- virtual bool visit(AST::UiObjectDefinition *node)
+ bool visit(AST::UiObjectDefinition *node) override
{
++_depth;
@@ -223,12 +223,12 @@ protected:
return true; // search for more bindings
}
- virtual void endVisit(AST::UiObjectDefinition *)
+ void endVisit(AST::UiObjectDefinition *) override
{
--_depth;
}
- virtual bool visit(AST::UiObjectBinding *node)
+ bool visit(AST::UiObjectBinding *node) override
{
++_depth;
@@ -250,12 +250,12 @@ protected:
return true; // search for more bindings
}
- virtual void endVisit(AST::UiObjectBinding *)
+ void endVisit(AST::UiObjectBinding *) override
{
--_depth;
}
- virtual bool visit(AST::UiScriptBinding *)
+ bool visit(AST::UiScriptBinding *) override
{
++_depth;
@@ -272,17 +272,17 @@ protected:
return false; // more more bindings in this subtree.
}
- virtual void endVisit(AST::UiScriptBinding *)
+ void endVisit(AST::UiScriptBinding *) override
{
--_depth;
}
- virtual bool visit(AST::FunctionExpression *)
+ bool visit(AST::FunctionExpression *) override
{
return false;
}
- virtual bool visit(AST::FunctionDeclaration *ast)
+ bool visit(AST::FunctionDeclaration *ast) override
{
if (ast->name.isEmpty())
return false;
@@ -309,7 +309,7 @@ protected:
return false;
}
- virtual bool visit(AST::VariableDeclaration *ast)
+ bool visit(AST::VariableDeclaration *ast) override
{
if (ast->name.isEmpty())
return false;
@@ -376,27 +376,27 @@ public:
protected:
using AST::Visitor::visit;
- virtual bool visit(AST::UiObjectBinding *ast)
+ bool visit(AST::UiObjectBinding *ast) override
{
if (ast->initializer && ast->initializer->lbraceToken.length)
_ranges.append(createRange(ast, ast->initializer));
return true;
}
- virtual bool visit(AST::UiObjectDefinition *ast)
+ bool visit(AST::UiObjectDefinition *ast) override
{
if (ast->initializer && ast->initializer->lbraceToken.length)
_ranges.append(createRange(ast, ast->initializer));
return true;
}
- virtual bool visit(AST::FunctionExpression *ast)
+ bool visit(AST::FunctionExpression *ast) override
{
_ranges.append(createRange(ast));
return true;
}
- virtual bool visit(AST::FunctionDeclaration *ast)
+ bool visit(AST::FunctionDeclaration *ast) override
{
_ranges.append(createRange(ast));
return true;
@@ -412,7 +412,7 @@ protected:
return true;
}
- virtual bool visit(AST::UiScriptBinding *ast)
+ bool visit(AST::UiScriptBinding *ast) override
{
if (AST::Block *block = AST::cast<AST::Block *>(ast->statement))
_ranges.append(createRange(ast, block));
diff --git a/src/plugins/qmljseditor/qmljseditorplugin.cpp b/src/plugins/qmljseditor/qmljseditorplugin.cpp
index 129b21f1c7..474e2642ff 100644
--- a/src/plugins/qmljseditor/qmljseditorplugin.cpp
+++ b/src/plugins/qmljseditor/qmljseditorplugin.cpp
@@ -30,7 +30,6 @@
#include "qmljseditorplugin.h"
#include "qmljshighlighter.h"
#include "qmljsoutline.h"
-#include "qmljspreviewrunner.h"
#include "qmljsquickfixassist.h"
#include "qmltaskmanager.h"
#include "quicktoolbar.h"
diff --git a/src/plugins/qmljseditor/qmljsfindreferences.cpp b/src/plugins/qmljseditor/qmljsfindreferences.cpp
index af2750de0c..6c8d2f4f98 100644
--- a/src/plugins/qmljseditor/qmljsfindreferences.cpp
+++ b/src/plugins/qmljseditor/qmljsfindreferences.cpp
@@ -95,7 +95,7 @@ protected:
using Visitor::visit;
- virtual bool visit(AST::UiPublicMember *node)
+ bool visit(AST::UiPublicMember *node) override
{
if (node->name == _name
&& _scopeChain.qmlScopeObjects().contains(_scope)) {
@@ -110,7 +110,7 @@ protected:
return true;
}
- virtual bool visit(AST::UiObjectDefinition *node)
+ bool visit(AST::UiObjectDefinition *node) override
{
_builder.push(node);
Node::accept(node->initializer, this);
@@ -118,7 +118,7 @@ protected:
return false;
}
- virtual bool visit(AST::UiObjectBinding *node)
+ bool visit(AST::UiObjectBinding *node) override
{
if (node->qualifiedId
&& !node->qualifiedId->next
@@ -133,7 +133,7 @@ protected:
return false;
}
- virtual bool visit(AST::UiScriptBinding *node)
+ bool visit(AST::UiScriptBinding *node) override
{
if (node->qualifiedId
&& !node->qualifiedId->next
@@ -151,7 +151,7 @@ protected:
return true;
}
- virtual bool visit(AST::UiArrayBinding *node)
+ bool visit(AST::UiArrayBinding *node) override
{
if (node->qualifiedId
&& !node->qualifiedId->next
@@ -162,7 +162,7 @@ protected:
return true;
}
- virtual bool visit(AST::IdentifierExpression *node)
+ bool visit(AST::IdentifierExpression *node) override
{
if (node->name.isEmpty() || node->name != _name)
return false;
@@ -193,7 +193,7 @@ protected:
return false;
}
- virtual bool visit(AST::FieldMemberExpression *node)
+ bool visit(AST::FieldMemberExpression *node) override
{
if (node->name != _name)
return true;
@@ -209,12 +209,12 @@ protected:
return true;
}
- virtual bool visit(AST::FunctionDeclaration *node)
+ bool visit(AST::FunctionDeclaration *node) override
{
return visit(static_cast<FunctionExpression *>(node));
}
- virtual bool visit(AST::FunctionExpression *node)
+ bool visit(AST::FunctionExpression *node) override
{
if (node->name == _name) {
if (checkLookup())
@@ -227,7 +227,7 @@ protected:
return false;
}
- virtual bool visit(AST::VariableDeclaration *node)
+ bool visit(AST::VariableDeclaration *node) override
{
if (node->name == _name) {
if (checkLookup())
@@ -320,7 +320,7 @@ protected:
using Visitor::visit;
- virtual bool visit(AST::UiPublicMember *node)
+ bool visit(AST::UiPublicMember *node) override
{
if (node->memberTypeName() == _name){
const ObjectValue * tVal = _context->lookupType(_doc.data(), QStringList(_name));
@@ -336,7 +336,7 @@ protected:
return true;
}
- virtual bool visit(AST::UiObjectDefinition *node)
+ bool visit(AST::UiObjectDefinition *node) override
{
checkTypeName(node->qualifiedTypeNameId);
_builder.push(node);
@@ -345,7 +345,7 @@ protected:
return false;
}
- virtual bool visit(AST::UiObjectBinding *node)
+ bool visit(AST::UiObjectBinding *node) override
{
checkTypeName(node->qualifiedTypeNameId);
_builder.push(node);
@@ -354,7 +354,7 @@ protected:
return false;
}
- virtual bool visit(AST::UiScriptBinding *node)
+ bool visit(AST::UiScriptBinding *node) override
{
if (AST::cast<Block *>(node->statement)) {
Node::accept(node->qualifiedId, this);
@@ -366,7 +366,7 @@ protected:
return true;
}
- virtual bool visit(AST::IdentifierExpression *node)
+ bool visit(AST::IdentifierExpression *node) override
{
if (node->name != _name)
return false;
@@ -378,7 +378,7 @@ protected:
return false;
}
- virtual bool visit(AST::FieldMemberExpression *node)
+ bool visit(AST::FieldMemberExpression *node) override
{
if (node->name != _name)
return true;
@@ -392,12 +392,12 @@ protected:
return true;
}
- virtual bool visit(AST::FunctionDeclaration *node)
+ bool visit(AST::FunctionDeclaration *node) override
{
return visit(static_cast<FunctionExpression *>(node));
}
- virtual bool visit(AST::FunctionExpression *node)
+ bool visit(AST::FunctionExpression *node) override
{
Node::accept(node->formals, this);
_builder.push(node);
@@ -406,13 +406,13 @@ protected:
return false;
}
- virtual bool visit(AST::VariableDeclaration *node)
+ bool visit(AST::VariableDeclaration *node) override
{
Node::accept(node->expression, this);
return false;
}
- virtual bool visit(UiImport *ast)
+ bool visit(UiImport *ast) override
{
if (ast && ast->importId == _name) {
const Imports *imp = _context->imports(_doc.data());
@@ -499,7 +499,7 @@ protected:
using Visitor::visit;
- virtual bool preVisit(Node *node)
+ bool preVisit(Node *node) override
{
if (Statement *stmt = node->statementCast())
return containsOffset(stmt->firstSourceLocation(), stmt->lastSourceLocation());
@@ -510,7 +510,7 @@ protected:
return true;
}
- virtual bool visit(IdentifierExpression *node)
+ bool visit(IdentifierExpression *node) override
{
if (containsOffset(node->identifierToken)) {
_name = node->name.toString();
@@ -524,7 +524,7 @@ protected:
return true;
}
- virtual bool visit(FieldMemberExpression *node)
+ bool visit(FieldMemberExpression *node) override
{
if (containsOffset(node->identifierToken)) {
setScope(node->base);
@@ -547,17 +547,17 @@ protected:
return true;
}
- virtual bool visit(UiScriptBinding *node)
+ bool visit(UiScriptBinding *node) override
{
return !checkBindingName(node->qualifiedId);
}
- virtual bool visit(UiArrayBinding *node)
+ bool visit(UiArrayBinding *node) override
{
return !checkBindingName(node->qualifiedId);
}
- virtual bool visit(UiObjectBinding *node)
+ bool visit(UiObjectBinding *node) override
{
if ((!checkTypeName(node->qualifiedTypeNameId)) &&
(!checkBindingName(node->qualifiedId))) {
@@ -569,7 +569,7 @@ protected:
return false;
}
- virtual bool visit(UiObjectDefinition *node)
+ bool visit(UiObjectDefinition *node) override
{
if (!checkTypeName(node->qualifiedTypeNameId)) {
Node *oldObjectNode = _objectNode;
@@ -580,7 +580,7 @@ protected:
return false;
}
- virtual bool visit(UiPublicMember *node)
+ bool visit(UiPublicMember *node) override
{
if (containsOffset(node->typeToken)){
if (node->isValid()) {
@@ -598,12 +598,12 @@ protected:
return true;
}
- virtual bool visit(FunctionDeclaration *node)
+ bool visit(FunctionDeclaration *node) override
{
return visit(static_cast<FunctionExpression *>(node));
}
- virtual bool visit(FunctionExpression *node)
+ bool visit(FunctionExpression *node) override
{
if (containsOffset(node->identifierToken)) {
_name = node->name.toString();
@@ -612,7 +612,7 @@ protected:
return true;
}
- virtual bool visit(VariableDeclaration *node)
+ bool visit(VariableDeclaration *node) override
{
if (containsOffset(node->identifierToken)) {
_name = node->name.toString();
diff --git a/src/plugins/qmljseditor/qmljshighlighter.cpp b/src/plugins/qmljseditor/qmljshighlighter.cpp
index 06d65a3971..5777c6c3e2 100644
--- a/src/plugins/qmljseditor/qmljshighlighter.cpp
+++ b/src/plugins/qmljseditor/qmljshighlighter.cpp
@@ -131,13 +131,28 @@ void QmlJSHighlighter::highlightBlock(const QString &text)
break;
}
}
+ if (text.midRef(token.offset, token.length) == QLatin1String("enum")) {
+ setFormat(token.offset, token.length, formatForCategory(C_KEYWORD));
+ break;
+ }
} else if (index > 0 && maybeQmlBuiltinType(spell)) {
const Token &previousToken = tokens.at(index - 1);
- if (previousToken.is(Token::Identifier) && text.at(previousToken.offset) == QLatin1Char('p')
- && text.midRef(previousToken.offset, previousToken.length) == QLatin1String("property")) {
+ if (previousToken.is(Token::Identifier)
+ && text.at(previousToken.offset) == QLatin1Char('p')
+ && text.midRef(previousToken.offset, previousToken.length)
+ == QLatin1String("property")) {
setFormat(token.offset, token.length, formatForCategory(C_KEYWORD));
break;
}
+ } else if (index == 1) {
+ const Token &previousToken = tokens.at(0);
+ if (previousToken.is(Token::Identifier)
+ && text.at(previousToken.offset) == QLatin1Char('e')
+ && text.midRef(previousToken.offset, previousToken.length)
+ == QLatin1String("enum")) {
+ setFormat(token.offset, token.length, formatForCategory(C_ENUMERATION));
+ break;
+ }
}
} break;
@@ -206,6 +221,8 @@ bool QmlJSHighlighter::maybeQmlKeyword(const QStringRef &text) const
return true;
else if (ch == QLatin1Char('o') && text == QLatin1String("on"))
return true;
+ else if (ch == QLatin1Char('e') && text == QLatin1String("enum"))
+ return true;
else
return false;
}
diff --git a/src/plugins/qmljseditor/qmljsoutlinetreeview.cpp b/src/plugins/qmljseditor/qmljsoutlinetreeview.cpp
index d89b84a3b5..9e7efe7efd 100644
--- a/src/plugins/qmljseditor/qmljsoutlinetreeview.cpp
+++ b/src/plugins/qmljseditor/qmljsoutlinetreeview.cpp
@@ -26,7 +26,7 @@
#include "qmljsoutlinetreeview.h"
#include "qmloutlinemodel.h"
-#include <utils/annotateditemdelegate.h>
+#include <utils/delegates.h>
#include <QMenu>
namespace QmlJSEditor {
diff --git a/src/plugins/qmljseditor/qmljspreviewrunner.cpp b/src/plugins/qmljseditor/qmljspreviewrunner.cpp
deleted file mode 100644
index 5d829098ec..0000000000
--- a/src/plugins/qmljseditor/qmljspreviewrunner.cpp
+++ /dev/null
@@ -1,79 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of Qt Creator.
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-****************************************************************************/
-
-#include "qmljspreviewrunner.h"
-
-#include <coreplugin/icore.h>
-
-#include <projectexplorer/runconfiguration.h>
-
-#include <utils/environment.h>
-#include <utils/hostosinfo.h>
-#include <utils/qtcprocess.h>
-#include <utils/synchronousprocess.h>
-
-#include <QMessageBox>
-#include <QApplication>
-
-namespace QmlJSEditor {
-namespace Internal {
-
-QmlJSPreviewRunner::QmlJSPreviewRunner(QObject *parent) :
- QObject(parent)
-{
- // prepend creator/bin dir to search path (only useful for special creator-qml package)
- const QString searchPath = QCoreApplication::applicationDirPath()
- + Utils::HostOsInfo::pathListSeparator()
- + QString::fromLocal8Bit(qgetenv("PATH"));
- m_qmlViewerDefaultPath = Utils::SynchronousProcess::locateBinary(searchPath, QLatin1String("qmlviewer"));
-}
-
-bool QmlJSPreviewRunner::isReady() const
-{
- return !m_qmlViewerDefaultPath.isEmpty();
-}
-
-void QmlJSPreviewRunner::run(const QString &filename)
-{
- QString errorMessage;
- if (!filename.isEmpty()) {
- ProjectExplorer::Runnable r;
- r.environment = Utils::Environment::systemEnvironment();
- r.runMode = ProjectExplorer::ApplicationLauncher::Gui;
- r.executable = m_qmlViewerDefaultPath;
- r.commandLineArguments = Utils::QtcProcess::quoteArg(filename);
- m_applicationLauncher.start(r);
- } else {
- errorMessage = tr("No file specified.");
- }
-
- if (!errorMessage.isEmpty())
- QMessageBox::warning(Core::ICore::dialogParent(), tr("Failed to preview Qt Quick file"),
- tr("Could not preview Qt Quick (QML) file. Reason:\n%1").arg(errorMessage));
-}
-
-
-} // namespace Internal
-} // namespace QmlJSEditor
diff --git a/src/plugins/qmljseditor/qmljsquickfixes.cpp b/src/plugins/qmljseditor/qmljsquickfixes.cpp
index 49a15a3e68..e1afb05275 100644
--- a/src/plugins/qmljseditor/qmljsquickfixes.cpp
+++ b/src/plugins/qmljseditor/qmljsquickfixes.cpp
@@ -138,8 +138,8 @@ public:
setDescription(tr("Add a Comment to Suppress This Message"));
}
- virtual void performChanges(QmlJSRefactoringFilePtr currentFile,
- const QmlJSRefactoringChanges &)
+ void performChanges(QmlJSRefactoringFilePtr currentFile,
+ const QmlJSRefactoringChanges &) override
{
Utils::ChangeSet changes;
const int insertLoc = _message.location.begin() - _message.location.startColumn + 1;
diff --git a/src/plugins/qmljseditor/qmljswrapinloader.cpp b/src/plugins/qmljseditor/qmljswrapinloader.cpp
index fca146e3d7..509a1daf9d 100644
--- a/src/plugins/qmljseditor/qmljswrapinloader.cpp
+++ b/src/plugins/qmljseditor/qmljswrapinloader.cpp
@@ -62,7 +62,7 @@ public:
}
protected:
- virtual bool visit(UiObjectInitializer *ast)
+ bool visit(UiObjectInitializer *ast) override
{
UiScriptBinding *idBinding;
QString id = idOfObject(ast, &idBinding);
@@ -107,8 +107,8 @@ public:
return tryName;
}
- virtual void performChanges(QmlJSRefactoringFilePtr currentFile,
- const QmlJSRefactoringChanges &)
+ void performChanges(QmlJSRefactoringFilePtr currentFile,
+ const QmlJSRefactoringChanges &) override
{
UiScriptBinding *idBinding;
const QString id = idOfObject(m_objDef, &idBinding);
diff --git a/src/plugins/qmljstools/qmljslocatordata.cpp b/src/plugins/qmljstools/qmljslocatordata.cpp
index d7ee5e6154..36aa5c4010 100644
--- a/src/plugins/qmljstools/qmljslocatordata.cpp
+++ b/src/plugins/qmljstools/qmljslocatordata.cpp
@@ -25,6 +25,9 @@
#include "qmljslocatordata.h"
+#include <projectexplorer/project.h>
+#include <projectexplorer/session.h>
+
#include <qmljs/qmljsmodelmanagerinterface.h>
#include <qmljs/qmljsutils.h>
//#include <qmljs/qmljsinterpreter.h>
@@ -40,10 +43,25 @@ LocatorData::LocatorData()
{
ModelManagerInterface *manager = ModelManagerInterface::instance();
+ // Force the updating of source file when updating a project (they could be cached, in such
+ // case LocatorData::onDocumentUpdated will not be called.
+ connect(manager, &ModelManagerInterface::projectInfoUpdated,
+ [manager](const ModelManagerInterface::ProjectInfo &info) {
+ QStringList files;
+ for (const Utils::FileName &f: info.project->files(ProjectExplorer::Project::SourceFiles))
+ files << f.toString();
+ manager->updateSourceFiles(files, true);
+ });
+
connect(manager, &ModelManagerInterface::documentUpdated,
this, &LocatorData::onDocumentUpdated);
connect(manager, &ModelManagerInterface::aboutToRemoveFiles,
this, &LocatorData::onAboutToRemoveFiles);
+
+ ProjectExplorer::SessionManager *session = ProjectExplorer::SessionManager::instance();
+ if (session)
+ connect(session, &ProjectExplorer::SessionManager::projectRemoved,
+ [this] (ProjectExplorer::Project*) { m_entries.clear(); });
}
LocatorData::~LocatorData()
@@ -233,4 +251,3 @@ void LocatorData::onAboutToRemoveFiles(const QStringList &files)
m_entries.remove(file);
}
}
-
diff --git a/src/plugins/qmljstools/qmljsrefactoringchanges.cpp b/src/plugins/qmljstools/qmljsrefactoringchanges.cpp
index 12b5c4d7a2..b27631c2d0 100644
--- a/src/plugins/qmljstools/qmljsrefactoringchanges.cpp
+++ b/src/plugins/qmljstools/qmljsrefactoringchanges.cpp
@@ -46,9 +46,9 @@ public:
, m_snapshot(snapshot)
{}
- virtual void indentSelection(const QTextCursor &selection,
- const QString &fileName,
- const TextEditor::TextDocument *textDocument) const
+ void indentSelection(const QTextCursor &selection,
+ const QString &fileName,
+ const TextEditor::TextDocument *textDocument) const override
{
// ### shares code with QmlJSTextEditor::indent
QTextDocument *doc = selection.document();
@@ -70,9 +70,9 @@ public:
} while (block.isValid() && block != end);
}
- virtual void reindentSelection(const QTextCursor &selection,
- const QString &fileName,
- const TextEditor::TextDocument *textDocument) const
+ void reindentSelection(const QTextCursor &selection,
+ const QString &fileName,
+ const TextEditor::TextDocument *textDocument) const override
{
const TextEditor::TabSettings &tabSettings =
ProjectExplorer::actualTabSettings(fileName, textDocument);
@@ -81,7 +81,7 @@ public:
indenter.reindent(selection.document(), selection, tabSettings);
}
- virtual void fileChanged(const QString &fileName)
+ void fileChanged(const QString &fileName) override
{
m_modelManager->updateSourceFiles(QStringList(fileName), true);
}
diff --git a/src/plugins/qmljstools/qmljssemanticinfo.cpp b/src/plugins/qmljstools/qmljssemanticinfo.cpp
index c2aa71dc3e..b72aa2f58e 100644
--- a/src/plugins/qmljstools/qmljssemanticinfo.cpp
+++ b/src/plugins/qmljstools/qmljssemanticinfo.cpp
@@ -86,7 +86,7 @@ protected:
return handle(ast, ast->firstSourceLocation(), ast->lastSourceLocation(), addToPath);
}
- virtual bool preVisit(AST::Node *node)
+ bool preVisit(AST::Node *node) override
{
if (Statement *stmt = node->statementCast())
return handleLocationAst(stmt);
@@ -97,7 +97,7 @@ protected:
return true;
}
- virtual bool visit(AST::UiQualifiedId *ast)
+ bool visit(AST::UiQualifiedId *ast) override
{
AST::SourceLocation first = ast->identifierToken;
AST::SourceLocation last;
@@ -108,19 +108,19 @@ protected:
return false;
}
- virtual bool visit(AST::UiProgram *ast)
+ bool visit(AST::UiProgram *ast) override
{
_path.append(ast);
return true;
}
- virtual bool visit(AST::Program *ast)
+ bool visit(AST::Program *ast) override
{
_path.append(ast);
return true;
}
- virtual bool visit(AST::UiImport *ast)
+ bool visit(AST::UiImport *ast) override
{
return handleLocationAst(ast);
}
diff --git a/src/plugins/qmlprofiler/memoryusagemodel.cpp b/src/plugins/qmlprofiler/memoryusagemodel.cpp
index fa7c258b00..1fcfc4631f 100644
--- a/src/plugins/qmlprofiler/memoryusagemodel.cpp
+++ b/src/plugins/qmlprofiler/memoryusagemodel.cpp
@@ -116,16 +116,14 @@ QVariantMap MemoryUsageModel::details(int index) const
else
result.insert(QLatin1String("displayName"), tr("Memory Freed"));
- result.insert(tr("Total"), tr("%1 byte(s)", nullptr, toSameSignedInt(ev->size)).arg(ev->size));
+ result.insert(tr("Total"), tr("%n byte(s)", nullptr, toSameSignedInt(ev->size)));
if (ev->allocations > 0) {
- result.insert(tr("Allocated"), tr("%1 byte(s)", nullptr, toSameSignedInt(ev->allocated))
- .arg(ev->allocated));
+ result.insert(tr("Allocated"), tr("%n byte(s)", nullptr, toSameSignedInt(ev->allocated)));
result.insert(tr("Allocations"), ev->allocations);
}
if (ev->deallocations > 0) {
result.insert(tr("Deallocated"),
- tr("%1 byte(s)", nullptr, toSameSignedInt(-ev->deallocated))
- .arg(-ev->deallocated));
+ tr("%n byte(s)", nullptr, toSameSignedInt(-ev->deallocated)));
result.insert(tr("Deallocations"), ev->deallocations);
}
QString memoryTypeName;
diff --git a/src/plugins/qmlprofiler/qmlevent.h b/src/plugins/qmlprofiler/qmlevent.h
index 23a62cb643..3f999d419e 100644
--- a/src/plugins/qmlprofiler/qmlevent.h
+++ b/src/plugins/qmlprofiler/qmlevent.h
@@ -39,24 +39,26 @@
namespace QmlProfiler {
struct QmlEvent : public Timeline::TraceEvent {
- QmlEvent() : m_dataType(Inline8Bit), m_dataLength(0) {}
+ static const qint32 staticClassId = 0x716d6c65; // 'qmle';
+
+ QmlEvent() : TraceEvent(staticClassId), m_dataType(Inline8Bit), m_dataLength(0) {}
template<typename Number>
QmlEvent(qint64 timestamp, int typeIndex, std::initializer_list<Number> list)
- : TraceEvent(timestamp, typeIndex)
+ : TraceEvent(staticClassId, timestamp, typeIndex)
{
assignNumbers<std::initializer_list<Number>, Number>(list);
}
QmlEvent(qint64 timestamp, int typeIndex, const QString &data)
- : TraceEvent(timestamp, typeIndex)
+ : TraceEvent(staticClassId, timestamp, typeIndex)
{
assignNumbers<QByteArray, qint8>(data.toUtf8());
}
template<typename Number>
QmlEvent(qint64 timestamp, int typeIndex, const QVector<Number> &data)
- : TraceEvent(timestamp, typeIndex)
+ : TraceEvent(staticClassId, timestamp, typeIndex)
{
assignNumbers<QVector<Number>, Number>(data);
}
diff --git a/src/plugins/qmlprofiler/qmleventtype.cpp b/src/plugins/qmlprofiler/qmleventtype.cpp
index 9cb99c0081..88a3d6dd47 100644
--- a/src/plugins/qmlprofiler/qmleventtype.cpp
+++ b/src/plugins/qmlprofiler/qmleventtype.cpp
@@ -79,7 +79,7 @@ QDataStream &operator<<(QDataStream &stream, const QmlEventType &type)
QmlEventType::QmlEventType(Message message, RangeType rangeType, int detailType,
const QmlEventLocation &location, const QString &data,
const QString displayName) :
- TraceEventType(qmlFeatureFromType(message, rangeType, detailType)),
+ TraceEventType(staticClassId, qmlFeatureFromType(message, rangeType, detailType)),
m_data(data), m_location(location), m_message(message),
m_rangeType(rangeType), m_detailType(detailType)
{
diff --git a/src/plugins/qmlprofiler/qmleventtype.h b/src/plugins/qmlprofiler/qmleventtype.h
index 6c3fc53e06..1e038e634e 100644
--- a/src/plugins/qmlprofiler/qmleventtype.h
+++ b/src/plugins/qmlprofiler/qmleventtype.h
@@ -37,6 +37,8 @@ namespace QmlProfiler {
class QmlEventType : public Timeline::TraceEventType {
public:
+ static const qint32 staticClassId = 0x716d6c74; // 'qmlt';
+
QmlEventType(Message message = MaximumMessage, RangeType rangeType = MaximumRangeType,
int detailType = -1, const QmlEventLocation &location = QmlEventLocation(),
const QString &data = QString(), const QString displayName = QString());
diff --git a/src/plugins/qmlprofiler/qmlprofilerbindingloopsrenderpass.cpp b/src/plugins/qmlprofiler/qmlprofilerbindingloopsrenderpass.cpp
index c41ecffb83..767696613b 100644
--- a/src/plugins/qmlprofiler/qmlprofilerbindingloopsrenderpass.cpp
+++ b/src/plugins/qmlprofiler/qmlprofilerbindingloopsrenderpass.cpp
@@ -295,12 +295,12 @@ class BindingLoopMaterialShader : public QSGMaterialShader
public:
BindingLoopMaterialShader();
- virtual void updateState(const RenderState &state, QSGMaterial *newEffect,
- QSGMaterial *oldEffect);
- virtual char const *const *attributeNames() const;
+ void updateState(const RenderState &state, QSGMaterial *newEffect,
+ QSGMaterial *oldEffect) override;
+ char const *const *attributeNames() const override;
private:
- virtual void initialize();
+ void initialize() override;
int m_matrix_id = 0;
int m_z_range_id = 0;
diff --git a/src/plugins/qmlprofiler/qmlprofilerdetailsrewriter.cpp b/src/plugins/qmlprofiler/qmlprofilerdetailsrewriter.cpp
index b3083ebe54..e96a92623f 100644
--- a/src/plugins/qmlprofiler/qmlprofilerdetailsrewriter.cpp
+++ b/src/plugins/qmlprofiler/qmlprofilerdetailsrewriter.cpp
@@ -112,14 +112,8 @@ void QmlProfilerDetailsRewriter::requestDetailsForLocation(int typeId,
QString QmlProfilerDetailsRewriter::getLocalFile(const QString &remoteFile)
{
- QString localFile;
- if (!m_filesCache.contains(remoteFile)) {
- localFile = m_projectFinder.findFile(remoteFile);
- m_filesCache[remoteFile] = localFile;
- } else {
- localFile = m_filesCache[remoteFile];
- }
- QFileInfo fileInfo(localFile);
+ const QString localFile = m_projectFinder.findFile(remoteFile);
+ const QFileInfo fileInfo(localFile);
if (!fileInfo.exists() || !fileInfo.isReadable())
return QString();
if (!QmlJS::ModelManagerInterface::guessLanguageOfFile(localFile).isQmlLikeOrJsLanguage())
@@ -176,7 +170,6 @@ void QmlProfilerDetailsRewriter::disconnectQmlModel()
void QmlProfilerDetailsRewriter::clear()
{
- m_filesCache.clear();
m_pendingEvents.clear();
disconnectQmlModel();
}
@@ -203,14 +196,12 @@ void QmlProfilerDetailsRewriter::documentReady(QmlJS::Document::Ptr doc)
if (m_pendingEvents.isEmpty()) {
disconnectQmlModel();
emit eventDetailsChanged();
- m_filesCache.clear();
}
}
void QmlProfilerDetailsRewriter::populateFileFinder(const ProjectExplorer::Target *target)
{
QtSupport::BaseQtVersion::populateQmlFileFinder(&m_projectFinder, target);
- m_filesCache.clear();
}
} // namespace Internal
diff --git a/src/plugins/qmlprofiler/qmlprofilerdetailsrewriter.h b/src/plugins/qmlprofiler/qmlprofilerdetailsrewriter.h
index e58c336cfd..c0a69eaaa4 100644
--- a/src/plugins/qmlprofiler/qmlprofilerdetailsrewriter.h
+++ b/src/plugins/qmlprofiler/qmlprofilerdetailsrewriter.h
@@ -60,7 +60,6 @@ private:
QMultiHash<QString, PendingEvent> m_pendingEvents;
Utils::FileInProjectFinder m_projectFinder;
- QHash<QString, QString> m_filesCache;
void rewriteDetailsForLocation(const QString &source, QmlJS::Document::Ptr doc, int typeId,
const QmlEventLocation &location);
diff --git a/src/plugins/qmlprofiler/qmlprofilermodelmanager.cpp b/src/plugins/qmlprofiler/qmlprofilermodelmanager.cpp
index c54c7f0981..2d02c10afd 100644
--- a/src/plugins/qmlprofiler/qmlprofilermodelmanager.cpp
+++ b/src/plugins/qmlprofiler/qmlprofilermodelmanager.cpp
@@ -148,8 +148,9 @@ void QmlProfilerModelManager::registerFeatures(quint64 features, QmlEventLoader
{
const TraceEventLoader traceEventLoader = eventLoader ? [eventLoader](
const Timeline::TraceEvent &event, const Timeline::TraceEventType &type) {
- return eventLoader(static_cast<const QmlEvent &>(event),
- static_cast<const QmlEventType &>(type));
+ QTC_ASSERT(event.is<QmlEvent>(), return);
+ QTC_ASSERT(type.is<QmlEventType>(), return);
+ eventLoader(event.asConstRef<QmlEvent>(), type.asConstRef<QmlEventType>());
} : TraceEventLoader();
Timeline::TimelineTraceManager::registerFeatures(features, traceEventLoader, initializer,
@@ -158,7 +159,10 @@ void QmlProfilerModelManager::registerFeatures(quint64 features, QmlEventLoader
const QmlEventType &QmlProfilerModelManager::eventType(int typeId) const
{
- return static_cast<const QmlEventType &>(TimelineTraceManager::eventType(typeId));
+ static const QmlEventType invalid;
+ const Timeline::TraceEventType &type = TimelineTraceManager::eventType(typeId);
+ QTC_ASSERT(type.is<QmlEventType>(), return invalid);
+ return type.asConstRef<QmlEventType>();
}
void QmlProfilerModelManager::replayEvents(TraceEventLoader loader, Initializer initializer,
@@ -190,7 +194,8 @@ void QmlProfilerModelManager::replayQmlEvents(QmlEventLoader loader,
if (future.isCanceled())
return false;
- loader(static_cast<QmlEvent &&>(event), eventType(event.typeIndex()));
+ QTC_ASSERT(event.is<QmlEvent>(), return false);
+ loader(event.asRvalueRef<QmlEvent>(), eventType(event.typeIndex()));
return true;
});
@@ -462,13 +467,19 @@ void QmlProfilerEventTypeStorage::set(int typeId, Timeline::TraceEventType &&typ
const size_t index = static_cast<size_t>(typeId);
if (m_types.size() <= index)
m_types.resize(index + 1);
- m_types[index] = std::move(static_cast<QmlEventType &&>(type));
+ QTC_ASSERT(type.is<QmlEventType>(), return);
+ m_types[index] = std::move(type.asRvalueRef<QmlEventType>());
}
int QmlProfilerEventTypeStorage::append(Timeline::TraceEventType &&type)
{
const size_t index = m_types.size();
- m_types.push_back(std::move(static_cast<QmlEventType &&>(type)));
+ if (type.is<QmlEventType>()) {
+ m_types.push_back(std::move(type.asRvalueRef<QmlEventType>()));
+ } else {
+ QTC_CHECK(false);
+ m_types.push_back(QmlEventType());
+ }
QTC_ASSERT(index <= std::numeric_limits<int>::max(), return std::numeric_limits<int>::max());
return static_cast<int>(index);
}
@@ -495,7 +506,8 @@ QmlProfilerEventStorage::QmlProfilerEventStorage(
int QmlProfilerEventStorage::append(Timeline::TraceEvent &&event)
{
- m_file.append(std::move(static_cast<QmlEvent &&>(event)));
+ QTC_ASSERT(event.is<QmlEvent>(), return m_size);
+ m_file.append(std::move(event.asRvalueRef<QmlEvent>()));
return m_size++;
}
diff --git a/src/plugins/qmlprofiler/qmlprofilerruncontrol.cpp b/src/plugins/qmlprofiler/qmlprofilerruncontrol.cpp
index 18688ce367..d2ee9434d1 100644
--- a/src/plugins/qmlprofiler/qmlprofilerruncontrol.cpp
+++ b/src/plugins/qmlprofiler/qmlprofilerruncontrol.cpp
@@ -260,7 +260,6 @@ LocalQmlProfilerSupport::LocalQmlProfilerSupport(QmlProfilerTool *profilerTool,
arguments += ' ' + debuggee.commandLineArguments;
debuggee.commandLineArguments = arguments;
- debuggee.runMode = ApplicationLauncher::Gui;
setRunnable(debuggee);
}
diff --git a/src/plugins/qmlprofiler/qmlprofilertool.cpp b/src/plugins/qmlprofiler/qmlprofilertool.cpp
index e78858f2bd..8003788d90 100644
--- a/src/plugins/qmlprofiler/qmlprofilertool.cpp
+++ b/src/plugins/qmlprofiler/qmlprofilertool.cpp
@@ -41,6 +41,7 @@
#include <app/app_version.h>
#include <debugger/debuggericons.h>
+#include <debugger/debuggermainwindow.h>
#include <debugger/analyzer/analyzermanager.h>
#include <utils/fancymainwindow.h>
@@ -228,15 +229,14 @@ QmlProfilerTool::QmlProfilerTool()
QObject::connect(d->m_startAction, &QAction::triggered, this, &QmlProfilerTool::profileStartupProject);
- Utils::ToolbarDescription toolbar;
- toolbar.addAction(d->m_startAction);
- toolbar.addAction(d->m_stopAction);
- toolbar.addWidget(d->m_recordButton);
- toolbar.addWidget(d->m_clearButton);
- toolbar.addWidget(d->m_searchButton);
- toolbar.addWidget(d->m_displayFeaturesButton);
- toolbar.addWidget(d->m_timeLabel);
- Debugger::registerToolbar(Constants::QmlProfilerPerspectiveId, toolbar);
+ Utils::Perspective *perspective = d->m_viewContainer->perspective();
+ perspective->addToolbarAction(d->m_startAction);
+ perspective->addToolbarAction(d->m_stopAction);
+ perspective->addToolbarWidget(d->m_recordButton);
+ perspective->addToolbarWidget(d->m_clearButton);
+ perspective->addToolbarWidget(d->m_searchButton);
+ perspective->addToolbarWidget(d->m_displayFeaturesButton);
+ perspective->addToolbarWidget(d->m_timeLabel);
connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::updateRunActions,
this, &QmlProfilerTool::updateRunActions);
diff --git a/src/plugins/qmlprofiler/qmlprofilertracefile.cpp b/src/plugins/qmlprofiler/qmlprofilertracefile.cpp
index 38ac383f36..075c518e77 100644
--- a/src/plugins/qmlprofiler/qmlprofilertracefile.cpp
+++ b/src/plugins/qmlprofiler/qmlprofilertracefile.cpp
@@ -789,7 +789,7 @@ void QmlProfilerTraceFile::saveQtd(QIODevice *device)
if (stream.hasError())
fail(tr("Error writing trace file."));
}, [this](const QString &message) {
- fail(tr("Could not re-read events from temporary trace file: %s\nSaving failed.")
+ fail(tr("Could not re-read events from temporary trace file: %1\nSaving failed.")
.arg(message));
}, future());
}
@@ -857,7 +857,7 @@ void QmlProfilerTraceFile::saveQzt(QIODevice *device)
addEventsProgress(traceEnd() - lastProgressTimestamp);
}
}, [this](const QString &message) {
- fail(tr("Could not re-read events from temporary trace file: %s\nSaving failed.")
+ fail(tr("Could not re-read events from temporary trace file: %1\nSaving failed.")
.arg(message));
}, future());
}
diff --git a/src/plugins/qmlprofiler/qmlprofilerviewmanager.cpp b/src/plugins/qmlprofiler/qmlprofilerviewmanager.cpp
index a18ffa8a8e..2dabf61858 100644
--- a/src/plugins/qmlprofiler/qmlprofilerviewmanager.cpp
+++ b/src/plugins/qmlprofiler/qmlprofilerviewmanager.cpp
@@ -61,8 +61,7 @@ QmlProfilerViewManager::QmlProfilerViewManager(QObject *parent,
new QmlProfilerStateWidget(m_profilerState, m_profilerModelManager, m_traceView);
- auto perspective = new Utils::Perspective;
- perspective->setName(tr("QML Profiler"));
+ m_perspective = new Utils::Perspective(Constants::QmlProfilerPerspectiveId, tr("QML Profiler"));
auto prepareEventsView = [this](QmlProfilerEventsView *view) {
connect(view, &QmlProfilerEventsView::typeSelected,
@@ -83,22 +82,26 @@ QmlProfilerViewManager::QmlProfilerViewManager(QObject *parent,
m_flameGraphView = new FlameGraphView(m_profilerModelManager);
prepareEventsView(m_flameGraphView);
- QByteArray anchorDockId;
+ QWidget *anchor = nullptr;
if (m_traceView->isUsable()) {
- anchorDockId = m_traceView->objectName().toLatin1();
- perspective->addOperation({anchorDockId, m_traceView, {}, Perspective::SplitVertical});
- perspective->addOperation({m_flameGraphView->objectName().toLatin1(), m_flameGraphView,
- anchorDockId, Perspective::AddToTab});
+ anchor = m_traceView;
+ m_perspective->addWindow(m_traceView, Perspective::SplitVertical, nullptr);
+ m_perspective->addWindow(m_flameGraphView, Perspective::AddToTab, anchor);
} else {
- anchorDockId = m_flameGraphView->objectName().toLatin1();
- perspective->addOperation({anchorDockId, m_flameGraphView, {},
- Perspective::SplitVertical});
+ anchor = m_flameGraphView;
+ m_perspective->addWindow(m_flameGraphView, Perspective::SplitVertical, nullptr);
}
- perspective->addOperation({m_statisticsView->objectName().toLatin1(), m_statisticsView,
- anchorDockId, Perspective::AddToTab});
- perspective->addOperation({anchorDockId, nullptr, {}, Perspective::Raise});
+ m_perspective->addWindow(m_statisticsView, Perspective::AddToTab, anchor);
+ m_perspective->addWindow(anchor, Perspective::Raise, nullptr);
- Debugger::registerPerspective(Constants::QmlProfilerPerspectiveId, perspective);
+ Debugger::registerPerspective(m_perspective);
+}
+
+QmlProfilerViewManager::~QmlProfilerViewManager()
+{
+ delete m_traceView;
+ delete m_flameGraphView;
+ delete m_statisticsView;
}
void QmlProfilerViewManager::clear()
diff --git a/src/plugins/qmlprofiler/qmlprofilerviewmanager.h b/src/plugins/qmlprofiler/qmlprofilerviewmanager.h
index 655c1933eb..e106afb4cc 100644
--- a/src/plugins/qmlprofiler/qmlprofilerviewmanager.h
+++ b/src/plugins/qmlprofiler/qmlprofilerviewmanager.h
@@ -31,6 +31,8 @@
#include <QObject>
+namespace Utils { class Perspective; }
+
namespace QmlProfiler {
namespace Internal {
@@ -44,10 +46,12 @@ public:
QmlProfilerViewManager(QObject *parent,
QmlProfilerModelManager *modelManager,
QmlProfilerStateManager *profilerState);
+ ~QmlProfilerViewManager();
QmlProfilerTraceView *traceView() const { return m_traceView; }
QmlProfilerStatisticsView *statisticsView() const { return m_statisticsView; }
FlameGraphView *flameGraphView() const { return m_flameGraphView; }
+ Utils::Perspective *perspective() const { return m_perspective; }
void clear();
@@ -61,6 +65,7 @@ private:
FlameGraphView *m_flameGraphView = nullptr;
QmlProfilerStateManager *m_profilerState = nullptr;
QmlProfilerModelManager *m_profilerModelManager = nullptr;
+ Utils::Perspective *m_perspective = nullptr;
};
diff --git a/src/plugins/qmlprofiler/tests/memoryusagemodel_test.cpp b/src/plugins/qmlprofiler/tests/memoryusagemodel_test.cpp
index faa0dd1e89..804c6d8fb1 100644
--- a/src/plugins/qmlprofiler/tests/memoryusagemodel_test.cpp
+++ b/src/plugins/qmlprofiler/tests/memoryusagemodel_test.cpp
@@ -150,9 +150,9 @@ void MemoryUsageModelTest::testDetails()
const QVariantMap allocated = model.details(0);
QCOMPARE(allocated[QString("displayName")].toString(), model.tr("Memory Allocated"));
QCOMPARE(allocated[model.tr("Total")].toString(),
- model.tr("%1 byte(s)", nullptr, 4096).arg(4096));
+ model.tr("%n byte(s)", nullptr, 4096));
QCOMPARE(allocated[model.tr("Allocated")].toString(),
- model.tr("%1 byte(s)", nullptr, 4096).arg(4096));
+ model.tr("%n byte(s)", nullptr, 4096));
QCOMPARE(allocated[model.tr("Allocations")].toString(), QString::number(2));
QCOMPARE(allocated[model.tr("Type")].toString(), model.tr("Heap Allocation"));
QCOMPARE(allocated[model.tr("Location")].toString(), QmlProfilerModelManager::tr("<bytecode>"));
@@ -163,9 +163,9 @@ void MemoryUsageModelTest::testDetails()
const QVariantMap large = model.details(2);
QCOMPARE(large[QString("displayName")].toString(), model.tr("Memory Allocated"));
QCOMPARE(large[model.tr("Total")].toString(),
- model.tr("%1 byte(s)", nullptr, 5120).arg(5120));
+ model.tr("%n byte(s)", nullptr, 5120));
QCOMPARE(large[model.tr("Allocated")].toString(),
- model.tr("%1 byte(s)", nullptr, 1024).arg(1024));
+ model.tr("%n byte(s)", nullptr, 1024));
QCOMPARE(large[model.tr("Allocations")].toString(), QString::number(1));
QCOMPARE(large[model.tr("Type")].toString(), model.tr("Large Item Allocation"));
QCOMPARE(large[model.tr("Location")].toString(), QmlProfilerModelManager::tr("<bytecode>"));
@@ -175,10 +175,8 @@ void MemoryUsageModelTest::testDetails()
const QVariantMap freed = model.details(9);
QCOMPARE(freed[QString("displayName")].toString(), model.tr("Memory Freed"));
- QCOMPARE(freed[model.tr("Total")].toString(),
- model.tr("%1 byte(s)", nullptr, 2048).arg(2048));
- QCOMPARE(freed[model.tr("Deallocated")].toString(),
- model.tr("%1 byte(s)", nullptr, 1024).arg(1024));
+ QCOMPARE(freed[model.tr("Total")].toString(), model.tr("%n byte(s)", nullptr, 2048));
+ QCOMPARE(freed[model.tr("Deallocated")].toString(), model.tr("%n byte(s)", nullptr, 1024));
QCOMPARE(freed[model.tr("Deallocations")].toString(), QString::number(1));
QCOMPARE(freed[model.tr("Type")].toString(), model.tr("Heap Usage"));
QCOMPARE(freed[model.tr("Location")].toString(), QmlProfilerModelManager::tr("<bytecode>"));
diff --git a/src/plugins/qmlprofiler/tests/qmlprofilerattachdialog_test.cpp b/src/plugins/qmlprofiler/tests/qmlprofilerattachdialog_test.cpp
index cf2020f2d8..e37a9f0ec0 100644
--- a/src/plugins/qmlprofiler/tests/qmlprofilerattachdialog_test.cpp
+++ b/src/plugins/qmlprofiler/tests/qmlprofilerattachdialog_test.cpp
@@ -46,15 +46,16 @@ void QmlProfilerAttachDialogTest::testAccessors()
dialog.setPort(4444);
QCOMPARE(dialog.port(), 4444);
- ProjectExplorer::Kit *newKit = new ProjectExplorer::Kit("dings");
+ auto newKit = std::make_unique<ProjectExplorer::Kit>("dings");
+ ProjectExplorer::Kit *newKitPtr = newKit.get();
ProjectExplorer::KitManager *kitManager = ProjectExplorer::KitManager::instance();
QVERIFY(kitManager);
- QVERIFY(kitManager->registerKit(newKit));
+ QVERIFY(kitManager->registerKit(std::move(newKit)));
dialog.setKitId("dings");
- QCOMPARE(dialog.kit(), newKit);
+ QCOMPARE(dialog.kit(), newKitPtr);
- kitManager->deregisterKit(newKit);
+ kitManager->deregisterKit(newKitPtr);
}
} // namespace Internal
diff --git a/src/plugins/qmlprofiler/tests/qmlprofilerdetailsrewriter_test.cpp b/src/plugins/qmlprofiler/tests/qmlprofilerdetailsrewriter_test.cpp
index 830f1a1e61..0aa74983ae 100644
--- a/src/plugins/qmlprofiler/tests/qmlprofilerdetailsrewriter_test.cpp
+++ b/src/plugins/qmlprofiler/tests/qmlprofilerdetailsrewriter_test.cpp
@@ -213,8 +213,9 @@ void QmlProfilerDetailsRewriterTest::seedRewriter()
QFutureInterface<void> result;
QmlJS::PathsAndLanguages lPaths;
- for (auto p : QLibraryInfo::location(QLibraryInfo::Qml2ImportsPath))
- lPaths.maybeInsert(Utils::FileName::fromString(p), QmlJS::Dialect::Qml);
+ lPaths.maybeInsert(
+ Utils::FileName::fromString(QLibraryInfo::location(QLibraryInfo::Qml2ImportsPath)),
+ QmlJS::Dialect::Qml);
QmlJS::ModelManagerInterface::importScan(result, QmlJS::ModelManagerInterface::workingCopy(),
lPaths, m_modelManager, false);
@@ -228,17 +229,22 @@ void QmlProfilerDetailsRewriterTest::seedRewriter()
doc->parse();
QVERIFY(!doc->source().isEmpty());
- ProjectExplorer::Kit *kit = new ProjectExplorer::Kit;
+ auto kit = std::make_unique<ProjectExplorer::Kit>();
ProjectExplorer::SysRootKitInformation::setSysRoot(
- kit, Utils::FileName::fromLatin1("/nowhere"));
+ kit.get(), Utils::FileName::fromLatin1("/nowhere"));
DummyProject *project = new DummyProject(Utils::FileName::fromString(filename));
ProjectExplorer::SessionManager::addProject(project);
- ProjectExplorer::Target *target = project->createTarget(kit);
- m_rewriter.populateFileFinder(target);
+ {
+ // Make sure the uniqe_ptr gets deleted before the project.
+ // Otherwise we'll get a double free because the target is also parented to the project
+ // and unique_ptr doesn't know anything about QObject parent/child relationships.
+ std::unique_ptr<ProjectExplorer::Target> target = project->createTarget(kit.get());
+ m_rewriter.populateFileFinder(target.get());
+ }
+
ProjectExplorer::SessionManager::removeProject(project);
- ProjectExplorer::KitManager::deleteKit(kit);
}
} // namespace Internal
diff --git a/src/plugins/qmlprofiler/tests/qmlprofilertool_test.cpp b/src/plugins/qmlprofiler/tests/qmlprofilertool_test.cpp
index fdba15f03d..60ffc383e0 100644
--- a/src/plugins/qmlprofiler/tests/qmlprofilertool_test.cpp
+++ b/src/plugins/qmlprofiler/tests/qmlprofilertool_test.cpp
@@ -44,13 +44,14 @@ namespace Internal {
void QmlProfilerToolTest::testAttachToWaitingApplication()
{
- ProjectExplorer::Kit *newKit = new ProjectExplorer::Kit("fookit");
+ auto newKit = std::make_unique<ProjectExplorer::Kit>("fookit");
+ ProjectExplorer::Kit * newKitPtr = newKit.get();
ProjectExplorer::KitManager *kitManager = ProjectExplorer::KitManager::instance();
QVERIFY(kitManager);
- QVERIFY(kitManager->registerKit(newKit));
+ QVERIFY(kitManager->registerKit(std::move(newKit)));
QSettings *settings = Core::ICore::settings();
QVERIFY(settings);
- settings->setValue(QLatin1String("AnalyzerQmlAttachDialog/kitId"), newKit->id().toSetting());
+ settings->setValue(QLatin1String("AnalyzerQmlAttachDialog/kitId"), newKitPtr->id().toSetting());
QmlProfilerTool profilerTool;
QTcpServer server;
diff --git a/src/plugins/qmlprojectmanager/qmlproject.cpp b/src/plugins/qmlprojectmanager/qmlproject.cpp
index 09ad0017b5..a9a883d63f 100644
--- a/src/plugins/qmlprojectmanager/qmlproject.cpp
+++ b/src/plugins/qmlprojectmanager/qmlproject.cpp
@@ -76,10 +76,6 @@ QmlProject::~QmlProject()
void QmlProject::addedTarget(Target *target)
{
- connect(target, &Target::addedRunConfiguration,
- this, &QmlProject::addedRunConfiguration);
- foreach (RunConfiguration *rc, target->runConfigurations())
- addedRunConfiguration(rc);
updateDeploymentData(target);
}
@@ -101,15 +97,6 @@ void QmlProject::onKitChanged()
refresh(Configuration);
}
-void QmlProject::addedRunConfiguration(RunConfiguration *rc)
-{
- // The enabled state of qml runconfigurations can only be decided after
- // they have been added to a project
- QmlProjectRunConfiguration *qmlrc = qobject_cast<QmlProjectRunConfiguration *>(rc);
- if (qmlrc)
- qmlrc->updateEnabledState();
-}
-
Utils::FileName QmlProject::canonicalProjectDir() const
{
return m_canonicalProjectDir;
diff --git a/src/plugins/qmlprojectmanager/qmlproject.h b/src/plugins/qmlprojectmanager/qmlproject.h
index c65b4803ac..f3be29287c 100644
--- a/src/plugins/qmlprojectmanager/qmlproject.h
+++ b/src/plugins/qmlprojectmanager/qmlproject.h
@@ -89,7 +89,6 @@ private:
void addedTarget(ProjectExplorer::Target *target);
void onActiveTargetChanged(ProjectExplorer::Target *target);
void onKitChanged();
- void addedRunConfiguration(ProjectExplorer::RunConfiguration *);
// plain format
void parseProject(RefreshOptions options);
diff --git a/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp b/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp
index cc9fdb2168..0fd9f17f95 100644
--- a/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp
+++ b/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp
@@ -77,7 +77,6 @@ Runnable QmlProjectRunConfiguration::runnable() const
Runnable r;
r.executable = executable();
r.commandLineArguments = commandLineArguments();
- r.runMode = ApplicationLauncher::Gui;
r.environment = extraAspect<QmlProjectEnvironmentAspect>()->environment();
r.workingDirectory = static_cast<QmlProject *>(project())->targetDirectory(target()).toString();
return r;
@@ -299,6 +298,8 @@ QmlProjectRunConfigurationFactory::QmlProjectRunConfigurationFactory()
registerRunConfiguration<QmlProjectRunConfiguration>
("QmlProjectManager.QmlRunConfiguration.QmlScene");
addSupportedProjectType(QmlProjectManager::Constants::QML_PROJECT_ID);
+
+ addRunWorkerFactory<SimpleTargetRunner>(ProjectExplorer::Constants::NORMAL_RUN_MODE);
}
} // namespace Internal
diff --git a/src/plugins/qnx/pathchooserdelegate.cpp b/src/plugins/qnx/pathchooserdelegate.cpp
deleted file mode 100644
index 2b37c0d9b7..0000000000
--- a/src/plugins/qnx/pathchooserdelegate.cpp
+++ /dev/null
@@ -1,103 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 BlackBerry Limited. All rights reserved.
-** Contact: KDAB (info@kdab.com)
-**
-** This file is part of Qt Creator.
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-****************************************************************************/
-
-#include "pathchooserdelegate.h"
-
-#include <utils/pathchooser.h>
-#include <utils/fancylineedit.h>
-
-namespace Qnx {
-namespace Internal {
-
-PathChooserDelegate::PathChooserDelegate(QObject *parent)
- : QStyledItemDelegate(parent)
- , m_kind(Utils::PathChooser::ExistingDirectory)
-{
-}
-
-void PathChooserDelegate::setExpectedKind(Utils::PathChooser::Kind kind)
-{
- m_kind = kind;
-}
-
-void PathChooserDelegate::setPromptDialogFilter(const QString &filter)
-{
- m_filter = filter;
-}
-
-QWidget *PathChooserDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
-{
- Q_UNUSED(option);
- Q_UNUSED(index);
-
- Utils::PathChooser *editor = new Utils::PathChooser(parent);
-
- editor->setHistoryCompleter(m_historyKey);
- editor->setAutoFillBackground(true); // To hide the text beneath the editor widget
- editor->lineEdit()->setMinimumWidth(0);
-
- connect(editor, &Utils::PathChooser::browsingFinished, this, [this, editor]() {
- emit const_cast<PathChooserDelegate*>(this)->commitData(editor);
- });
-
- return editor;
-}
-
-void PathChooserDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
-{
- QString value = index.model()->data(index, Qt::EditRole).toString();
-
- Utils::PathChooser *pathChooser = qobject_cast<Utils::PathChooser *>(editor);
- if (!pathChooser)
- return;
-
- pathChooser->setExpectedKind(m_kind);
- pathChooser->setPromptDialogFilter(m_filter);
- pathChooser->setPath(value);
-}
-
-void PathChooserDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
-{
- Utils::PathChooser *pathChooser = qobject_cast<Utils::PathChooser *>(editor);
- if (!pathChooser)
- return;
-
- model->setData(index, pathChooser->path(), Qt::EditRole);
-}
-
-void PathChooserDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const
-{
- Q_UNUSED(index);
-
- editor->setGeometry(option.rect);
-}
-
-void PathChooserDelegate::setHistoryCompleter(const QString &key)
-{
- m_historyKey = key;
-}
-
-} // namespace Internal
-} // namespace Qnx
diff --git a/src/plugins/qnx/pathchooserdelegate.h b/src/plugins/qnx/pathchooserdelegate.h
deleted file mode 100644
index c8158b423f..0000000000
--- a/src/plugins/qnx/pathchooserdelegate.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 BlackBerry Limited. All rights reserved.
-** Contact: KDAB (info@kdab.com)
-**
-** This file is part of Qt Creator.
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-****************************************************************************/
-
-#pragma once
-
-#include <QStyledItemDelegate>
-
-#include <utils/pathchooser.h>
-
-namespace Qnx {
-namespace Internal {
-
-// TODO: This whole class should probably go into utils
-
-class PathChooserDelegate : public QStyledItemDelegate
-{
- Q_OBJECT
-public:
- explicit PathChooserDelegate(QObject *parent = 0);
-
- void setExpectedKind(Utils::PathChooser::Kind kind);
- void setPromptDialogFilter(const QString &filter);
-
- QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option,
- const QModelIndex &index) const;
-
- void setEditorData(QWidget *editor, const QModelIndex &index) const;
- void setModelData(QWidget *editor, QAbstractItemModel *model,
- const QModelIndex &index) const;
-
- void updateEditorGeometry(QWidget *editor,
- const QStyleOptionViewItem &option, const QModelIndex &index) const;
-
- void setHistoryCompleter(const QString &key);
-
-private:
- Utils::PathChooser::Kind m_kind;
- QString m_filter;
- QString m_historyKey;
-};
-
-} // namespace Internal
-} // namespace Qnx
diff --git a/src/plugins/qnx/qnx.pro b/src/plugins/qnx/qnx.pro
index 49f9d55b77..50a35847d8 100644
--- a/src/plugins/qnx/qnx.pro
+++ b/src/plugins/qnx/qnx.pro
@@ -14,7 +14,6 @@ SOURCES += qnxplugin.cpp \
qnxqtversion.cpp \
qnxdeployconfiguration.cpp \
qnxdevice.cpp \
- pathchooserdelegate.cpp \
qnxdevicetester.cpp \
qnxdeviceprocesssignaloperation.cpp \
qnxdeviceprocesslist.cpp \
@@ -41,7 +40,6 @@ HEADERS += qnxplugin.h\
qnxqtversion.h \
qnxdeployconfiguration.h \
qnxdevice.h \
- pathchooserdelegate.h \
qnxdevicetester.h \
qnxdeviceprocesssignaloperation.h \
qnxdeviceprocesslist.h \
diff --git a/src/plugins/qnx/qnx.qbs b/src/plugins/qnx/qnx.qbs
index 8740daf0ce..6965b5eb16 100644
--- a/src/plugins/qnx/qnx.qbs
+++ b/src/plugins/qnx/qnx.qbs
@@ -18,8 +18,6 @@ QtcPlugin {
"qnxdeployqtlibrariesdialog.cpp",
"qnxdeployqtlibrariesdialog.h",
"qnxdeployqtlibrariesdialog.ui",
- "pathchooserdelegate.cpp",
- "pathchooserdelegate.h",
"qnxtoolchain.cpp",
"qnxtoolchain.h",
"qnx.qrc",
diff --git a/src/plugins/qnx/qnxconfiguration.cpp b/src/plugins/qnx/qnxconfiguration.cpp
index 0f15f9fcfe..6032da6fe4 100644
--- a/src/plugins/qnx/qnxconfiguration.cpp
+++ b/src/plugins/qnx/qnxconfiguration.cpp
@@ -300,18 +300,19 @@ ProjectExplorer::Kit *QnxConfiguration::createKit(
QnxQtVersion *qnxQt = qnxQtVersion(target);
// Do not create incomplete kits if no qt qnx version found
if (!qnxQt)
- return 0;
+ return nullptr;
- Kit *kit = new Kit;
+ auto kit = std::make_unique<Kit>();
+ Kit *kptr = kit.get();
- QtKitInformation::setQtVersion(kit, qnxQt);
- ToolChainKitInformation::setToolChain(kit, toolChain);
- ToolChainKitInformation::clearToolChain(kit, ProjectExplorer::Constants::C_LANGUAGE_ID);
+ QtKitInformation::setQtVersion(kptr, qnxQt);
+ ToolChainKitInformation::setToolChain(kptr, toolChain);
+ ToolChainKitInformation::clearToolChain(kptr, ProjectExplorer::Constants::C_LANGUAGE_ID);
if (debugger.isValid())
- DebuggerKitInformation::setDebugger(kit, debugger);
+ DebuggerKitInformation::setDebugger(kptr, debugger);
- DeviceTypeKitInformation::setDeviceTypeId(kit, Constants::QNX_QNX_OS_TYPE);
+ DeviceTypeKitInformation::setDeviceTypeId(kptr, Constants::QNX_QNX_OS_TYPE);
// TODO: Add sysroot?
kit->setUnexpandedDisplayName(
@@ -332,8 +333,8 @@ ProjectExplorer::Kit *QnxConfiguration::createKit(
kit->setSticky(QmakeProjectManager::Constants::KIT_INFORMATION_ID, true);
// add kit with device and qt version not sticky
- KitManager::registerKit(kit);
- return kit;
+ KitManager::registerKit(std::move(kit));
+ return kptr;
}
QStringList QnxConfiguration::validationErrors() const
diff --git a/src/plugins/qnx/qnxdevicetester.cpp b/src/plugins/qnx/qnxdevicetester.cpp
index 41e3de5a0b..e89aa337c0 100644
--- a/src/plugins/qnx/qnxdevicetester.cpp
+++ b/src/plugins/qnx/qnxdevicetester.cpp
@@ -53,6 +53,7 @@ QnxDeviceTester::QnxDeviceTester(QObject *parent)
this, &QnxDeviceTester::handleProcessFinished);
m_commandsToTest << QLatin1String("awk")
+ << QLatin1String("cat")
<< QLatin1String("grep")
<< QLatin1String("kill")
<< QLatin1String("netstat")
diff --git a/src/plugins/qnx/qnxutils.cpp b/src/plugins/qnx/qnxutils.cpp
index 37351cd92d..8178c33f09 100644
--- a/src/plugins/qnx/qnxutils.cpp
+++ b/src/plugins/qnx/qnxutils.cpp
@@ -241,15 +241,14 @@ QList<QnxTarget> QnxUtils::findTargets(const Utils::FileName &basePath)
Abi QnxUtils::convertAbi(const Abi &abi)
{
- if (abi.os() == Abi::LinuxOS && abi.osFlavor() == Abi::GenericLinuxFlavor) {
+ if (abi.os() == Abi::LinuxOS && abi.osFlavor() == Abi::GenericFlavor) {
return Abi(abi.architecture(),
Abi::QnxOS,
- Abi::GenericQnxFlavor,
+ Abi::GenericFlavor,
abi.binaryFormat(),
abi.wordWidth());
- } else {
- return abi;
}
+ return abi;
}
QList<Abi> QnxUtils::convertAbis(const QList<Abi> &abis)
diff --git a/src/plugins/qtsupport/baseqtversion.cpp b/src/plugins/qtsupport/baseqtversion.cpp
index af6cdcb44a..d0e892eaed 100644
--- a/src/plugins/qtsupport/baseqtversion.cpp
+++ b/src/plugins/qtsupport/baseqtversion.cpp
@@ -74,6 +74,8 @@ static const char QTVERSION_OVERRIDE_FEATURES[] = "overrideFeatures";
static const char QTVERSIONQMAKEPATH[] = "QMakePath";
static const char QTVERSIONSOURCEPATH[] = "SourcePath";
+static const char QTVERSION_ABIS[] = "Abis";
+
static const char MKSPEC_VALUE_LIBINFIX[] = "QT_LIBINFIX";
static const char MKSPEC_VALUE_NAMESPACE[] = "QT_NAMESPACE";
@@ -102,12 +104,21 @@ static QSet<Id> versionedIds(const QByteArray &prefix, int major, int minor)
}
///////////////
+// MacroExpanderWrapper
+///////////////
+MacroExpander *MacroExpanderWrapper::macroExpander(const BaseQtVersion *qtversion) const
+{
+ if (!m_expander)
+ m_expander = BaseQtVersion::createMacroExpander([qtversion]() { return qtversion; });
+ return m_expander.get();
+}
+
+///////////////
// QtVersionNumber
///////////////
QtVersionNumber::QtVersionNumber(int ma, int mi, int p)
: majorVersion(ma), minorVersion(mi), patchVersion(p)
-{
-}
+{ }
QtVersionNumber::QtVersionNumber(const QString &versionString)
{
@@ -116,11 +127,6 @@ QtVersionNumber::QtVersionNumber(const QString &versionString)
majorVersion = minorVersion = patchVersion = -1;
}
-QtVersionNumber::QtVersionNumber()
-{
- majorVersion = minorVersion = patchVersion = -1;
-}
-
QSet<Id> QtVersionNumber::features() const
{
return versionedIds(Constants::FEATURE_QT_PREFIX, majorVersion, minorVersion);
@@ -182,112 +188,17 @@ bool QtVersionNumber::operator >=(const QtVersionNumber &b) const
///////////////
// BaseQtVersion
///////////////
-int BaseQtVersion::getUniqueId()
-{
- return QtVersionManager::getUniqueId();
-}
BaseQtVersion::BaseQtVersion(const FileName &qmakeCommand, bool isAutodetected, const QString &autodetectionSource)
- : m_id(getUniqueId()),
+ : m_id(QtVersionManager::getUniqueId()),
m_isAutodetected(isAutodetected),
- m_hasQmlDump(false),
- m_mkspecUpToDate(false),
- m_mkspecReadUpToDate(false),
- m_defaultConfigIsDebug(true),
- m_defaultConfigIsDebugAndRelease(true),
- m_frameworkBuild(false),
- m_versionInfoUpToDate(false),
- m_installed(true),
- m_hasExamples(false),
- m_hasDemos(false),
- m_hasDocumentation(false),
- m_qmakeIsExecutable(true),
- m_hasQtAbis(false),
- m_autodetectionSource(autodetectionSource)
-{
- ctor(qmakeCommand);
-}
-
-BaseQtVersion::BaseQtVersion(const BaseQtVersion &other) :
- m_id(other.m_id),
- m_isAutodetected(other.m_isAutodetected),
- m_hasQmlDump(other.m_hasQmlDump),
- m_mkspecUpToDate(other.m_mkspecUpToDate),
- m_mkspecReadUpToDate(other.m_mkspecReadUpToDate),
- m_defaultConfigIsDebug(other.m_defaultConfigIsDebug),
- m_defaultConfigIsDebugAndRelease(other.m_defaultConfigIsDebugAndRelease),
- m_frameworkBuild(other.m_frameworkBuild),
- m_versionInfoUpToDate(other.m_versionInfoUpToDate),
- m_installed(other.m_installed),
- m_hasExamples(other.m_hasExamples),
- m_hasDemos(other.m_hasDemos),
- m_hasDocumentation(other.m_hasDocumentation),
- m_qmakeIsExecutable(other.m_qmakeIsExecutable),
- m_hasQtAbis(other.m_hasQtAbis),
- m_configValues(other.m_configValues),
- m_qtConfigValues(other.m_qtConfigValues),
- m_unexpandedDisplayName(other.m_unexpandedDisplayName),
- m_autodetectionSource(other.m_autodetectionSource),
- m_overrideFeatures(other.m_overrideFeatures),
- m_sourcePath(other.m_sourcePath),
- m_mkspec(other.m_mkspec),
- m_mkspecFullPath(other.m_mkspecFullPath),
- m_mkspecValues(other.m_mkspecValues),
- m_versionInfo(other.m_versionInfo),
- m_qmakeCommand(other.m_qmakeCommand),
- m_qtVersionString(other.m_qtVersionString),
- m_uicCommand(other.m_uicCommand),
- m_designerCommand(other.m_designerCommand),
- m_linguistCommand(other.m_linguistCommand),
- m_qscxmlcCommand(other.m_qscxmlcCommand),
- m_qtAbis(other.m_qtAbis)
-{
- setupExpander();
-}
-
-BaseQtVersion::BaseQtVersion()
- : m_id(-1), m_isAutodetected(false),
- m_hasQmlDump(false),
- m_mkspecUpToDate(false),
- m_mkspecReadUpToDate(false),
- m_defaultConfigIsDebug(true),
- m_defaultConfigIsDebugAndRelease(true),
- m_frameworkBuild(false),
- m_versionInfoUpToDate(false),
- m_installed(true),
- m_hasExamples(false),
- m_hasDemos(false),
- m_hasDocumentation(false),
- m_qmakeIsExecutable(true),
- m_hasQtAbis(false)
-{
- ctor(FileName());
-}
-
-void BaseQtVersion::ctor(const FileName &qmakePath)
-{
- m_qmakeCommand = qmakePath;
- m_designerCommand.clear();
- m_linguistCommand.clear();
- m_uicCommand.clear();
- m_qscxmlcCommand.clear();
- m_mkspecUpToDate = false;
- m_mkspecReadUpToDate = false;
- m_versionInfoUpToDate = false;
- m_hasQtAbis = false;
- m_qtVersionString.clear();
- m_sourcePath.clear();
- setupExpander();
-}
+ m_autodetectionSource(autodetectionSource),
+ m_qmakeCommand(qmakeCommand)
+{ }
+BaseQtVersion::BaseQtVersion(const BaseQtVersion &other) = default;
+BaseQtVersion::BaseQtVersion() = default;
-void BaseQtVersion::setupExpander()
-{
- m_expander = createMacroExpander([this]{ return this; });
-}
-
-BaseQtVersion::~BaseQtVersion()
-{
-}
+BaseQtVersion::~BaseQtVersion() = default;
QString BaseQtVersion::defaultUnexpandedDisplayName(const FileName &qmakePath, bool fromPath)
{
@@ -594,6 +505,12 @@ void BaseQtVersion::fromMap(const QVariantMap &map)
m_qtSources = Utils::FileName::fromUserInput(
map.value(QTVERSIONSOURCEPATH).toString());
+ // Handle ABIs provided by the SDKTool:
+ // Note: Creator does not write these settings itself, so it has to come from the SDKTool!
+ m_qtAbis = Utils::transform(map.value(QTVERSION_ABIS, QStringList()).toStringList(), &Abi::fromString);
+ m_qtAbis = Utils::filtered(m_qtAbis, &Abi::isValid);
+ m_hasQtAbis = !m_qtAbis.isEmpty();
+
QFileInfo fi(string);
if (BuildableHelperLibrary::isQtChooser(fi)) {
// we don't want to treat qtchooser as a normal qmake
@@ -602,7 +519,7 @@ void BaseQtVersion::fromMap(const QVariantMap &map)
string = BuildableHelperLibrary::qtChooserToQmakePath(fi.symLinkTarget());
}
- ctor(FileName::fromString(string));
+ m_qmakeCommand = Utils::FileName::fromString(string);
}
QVariantMap BaseQtVersion::toMap() const
@@ -723,7 +640,7 @@ void BaseQtVersion::setAutoDetectionSource(const QString &autodetectionSource)
QString BaseQtVersion::displayName() const
{
- return m_expander->expand(m_unexpandedDisplayName);
+ return macroExpander()->expand(m_unexpandedDisplayName);
}
QString BaseQtVersion::unexpandedDisplayName() const
@@ -1234,15 +1151,16 @@ QStringList BaseQtVersion::qtConfigValues() const
MacroExpander *BaseQtVersion::macroExpander() const
{
- return m_expander.get();
+ return m_expander.macroExpander(this);
}
-std::unique_ptr<MacroExpander> BaseQtVersion::createMacroExpander(const std::function<BaseQtVersion *()> &qtVersion)
+std::unique_ptr<MacroExpander>
+BaseQtVersion::createMacroExpander(const std::function<const BaseQtVersion *()> &qtVersion)
{
const auto versionProperty =
- [qtVersion](const std::function<QString(BaseQtVersion *)> &property) {
+ [qtVersion](const std::function<QString(const BaseQtVersion *)> &property) {
return [property, qtVersion]() -> QString {
- BaseQtVersion *version = qtVersion();
+ const BaseQtVersion *version = qtVersion();
return version ? property(version) : QString();
};
};
@@ -1252,140 +1170,140 @@ std::unique_ptr<MacroExpander> BaseQtVersion::createMacroExpander(const std::fun
expander->registerVariable(
"Qt:Version",
QtKitInformation::tr("The version string of the current Qt version."),
- versionProperty([](BaseQtVersion *version) {
+ versionProperty([](const BaseQtVersion *version) {
return version->qtVersionString();
}));
expander->registerVariable(
"Qt:Type",
QtKitInformation::tr("The type of the current Qt version."),
- versionProperty([](BaseQtVersion *version) {
+ versionProperty([](const BaseQtVersion *version) {
return version->type();
}));
expander->registerVariable(
"Qt:Mkspec",
QtKitInformation::tr("The mkspec of the current Qt version."),
- versionProperty([](BaseQtVersion *version) {
+ versionProperty([](const BaseQtVersion *version) {
return version->mkspec().toUserOutput();
}));
expander->registerVariable(
"Qt:QT_INSTALL_PREFIX",
QtKitInformation::tr("The installation prefix of the current Qt version."),
- versionProperty([](BaseQtVersion *version) {
+ versionProperty([](const BaseQtVersion *version) {
return version->qmakeProperty(version->m_versionInfo, "QT_INSTALL_PREFIX");
}));
expander->registerVariable(
"Qt:QT_INSTALL_DATA",
QtKitInformation::tr("The installation location of the current Qt version's data."),
- versionProperty([](BaseQtVersion *version) {
+ versionProperty([](const BaseQtVersion *version) {
return version->qmakeProperty(version->m_versionInfo, "QT_INSTALL_DATA");
}));
expander->registerVariable(
"Qt:QT_INSTALL_HEADERS",
QtKitInformation::tr("The installation location of the current Qt version's header files."),
- versionProperty([](BaseQtVersion *version) {
+ versionProperty([](const BaseQtVersion *version) {
return version->qmakeProperty(version->m_versionInfo, "QT_INSTALL_HEADERS");
}));
expander->registerVariable(
"Qt:QT_INSTALL_LIBS",
QtKitInformation::tr("The installation location of the current Qt version's library files."),
- versionProperty([](BaseQtVersion *version) {
+ versionProperty([](const BaseQtVersion *version) {
return version->qmakeProperty(version->m_versionInfo, "QT_INSTALL_LIBS");
}));
expander->registerVariable(
"Qt:QT_INSTALL_DOCS",
QtKitInformation::tr("The installation location of the current Qt version's documentation files."),
- versionProperty([](BaseQtVersion *version) {
+ versionProperty([](const BaseQtVersion *version) {
return version->qmakeProperty(version->m_versionInfo, "QT_INSTALL_DOCS");
}));
expander->registerVariable(
"Qt:QT_INSTALL_BINS",
QtKitInformation::tr("The installation location of the current Qt version's executable files."),
- versionProperty([](BaseQtVersion *version) {
+ versionProperty([](const BaseQtVersion *version) {
return version->qmakeProperty(version->m_versionInfo, "QT_INSTALL_BINS");
}));
expander->registerVariable(
"Qt:QT_INSTALL_PLUGINS",
QtKitInformation::tr("The installation location of the current Qt version's plugins."),
- versionProperty([](BaseQtVersion *version) {
+ versionProperty([](const BaseQtVersion *version) {
return version->qmakeProperty(version->m_versionInfo, "QT_INSTALL_PLUGINS");
}));
expander->registerVariable(
"Qt:QT_INSTALL_QML",
QtKitInformation::tr("The installation location of the current Qt version's QML files."),
- versionProperty([](BaseQtVersion *version) {
+ versionProperty([](const BaseQtVersion *version) {
return version->qmakeProperty(version->m_versionInfo, "QT_INSTALL_QML");
}));
expander->registerVariable(
"Qt:QT_INSTALL_IMPORTS",
QtKitInformation::tr("The installation location of the current Qt version's imports."),
- versionProperty([](BaseQtVersion *version) {
+ versionProperty([](const BaseQtVersion *version) {
return version->qmakeProperty(version->m_versionInfo, "QT_INSTALL_IMPORTS");
}));
expander->registerVariable(
"Qt:QT_INSTALL_TRANSLATIONS",
QtKitInformation::tr("The installation location of the current Qt version's translation files."),
- versionProperty([](BaseQtVersion *version) {
+ versionProperty([](const BaseQtVersion *version) {
return version->qmakeProperty(version->m_versionInfo, "QT_INSTALL_TRANSLATIONS");
}));
expander->registerVariable(
"Qt:QT_INSTALL_CONFIGURATION",
QtKitInformation::tr("The installation location of the current Qt version's translation files."),
- versionProperty([](BaseQtVersion *version) {
+ versionProperty([](const BaseQtVersion *version) {
return version->qmakeProperty(version->m_versionInfo, "QT_INSTALL_CONFIGURATION");
}));
expander->registerVariable(
"Qt:QT_INSTALL_EXAMPLES",
QtKitInformation::tr("The installation location of the current Qt version's examples."),
- versionProperty([](BaseQtVersion *version) {
+ versionProperty([](const BaseQtVersion *version) {
return version->qmakeProperty(version->m_versionInfo, "QT_INSTALL_EXAMPLES");
}));
expander->registerVariable(
"Qt:QT_INSTALL_DEMOS",
QtKitInformation::tr("The installation location of the current Qt version's demos."),
- versionProperty([](BaseQtVersion *version) {
+ versionProperty([](const BaseQtVersion *version) {
return version->qmakeProperty(version->m_versionInfo, "QT_INSTALL_DEMOS");
}));
expander->registerVariable(
"Qt:QMAKE_MKSPECS",
QtKitInformation::tr("The current Qt version's default mkspecs (Qt 4)."),
- versionProperty([](BaseQtVersion *version) {
+ versionProperty([](const BaseQtVersion *version) {
return version->qmakeProperty(version->m_versionInfo, "QMAKE_MKSPECS");
}));
expander->registerVariable(
"Qt:QMAKE_SPEC",
QtKitInformation::tr("The current Qt version's default mkspec (Qt 5; host system)."),
- versionProperty([](BaseQtVersion *version) {
+ versionProperty([](const BaseQtVersion *version) {
return version->qmakeProperty(version->m_versionInfo, "QMAKE_SPEC");
}));
expander->registerVariable(
"Qt:QMAKE_XSPEC",
QtKitInformation::tr("The current Qt version's default mkspec (Qt 5; target system)."),
- versionProperty([](BaseQtVersion *version) {
+ versionProperty([](const BaseQtVersion *version) {
return version->qmakeProperty(version->m_versionInfo, "QMAKE_XSPEC");
}));
expander->registerVariable(
"Qt:QMAKE_VERSION",
QtKitInformation::tr("The current Qt's qmake version."),
- versionProperty([](BaseQtVersion *version) {
+ versionProperty([](const BaseQtVersion *version) {
return version->qmakeProperty(version->m_versionInfo, "QMAKE_VERSION");
}));
diff --git a/src/plugins/qtsupport/baseqtversion.h b/src/plugins/qtsupport/baseqtversion.h
index ca7deba612..34627bfb62 100644
--- a/src/plugins/qtsupport/baseqtversion.h
+++ b/src/plugins/qtsupport/baseqtversion.h
@@ -63,12 +63,26 @@ namespace QtSupport
{
class QtConfigWidget;
+class BaseQtVersion;
+
+// Wrapper to make the std::unique_ptr<Utils::MacroExpander> "copyable":
+class MacroExpanderWrapper
+{
+public:
+ MacroExpanderWrapper() = default;
+ MacroExpanderWrapper(const MacroExpanderWrapper &other) { Q_UNUSED(other); }
+ MacroExpanderWrapper(MacroExpanderWrapper &&other) = default;
+
+ Utils::MacroExpander *macroExpander(const BaseQtVersion *qtversion) const;
+private:
+ mutable std::unique_ptr<Utils::MacroExpander> m_expander;
+};
+
class QTSUPPORT_EXPORT QtVersionNumber
{
public:
- QtVersionNumber(int ma, int mi, int p);
+ QtVersionNumber(int ma = -1, int mi = -1, int p = -1);
QtVersionNumber(const QString &versionString);
- QtVersionNumber();
QSet<Core::Id> features() const;
@@ -232,8 +246,8 @@ public:
QStringList qtConfigValues() const;
Utils::MacroExpander *macroExpander() const; // owned by the Qt version
- static std::unique_ptr<Utils::MacroExpander> createMacroExpander(
- const std::function<BaseQtVersion *()> &qtVersion);
+ static std::unique_ptr<Utils::MacroExpander>
+ createMacroExpander(const std::function<const BaseQtVersion *()> &qtVersion);
static void populateQmlFileFinder(Utils::FileInProjectFinder *finder,
const ProjectExplorer::Target *target);
@@ -256,9 +270,6 @@ protected:
private:
void setAutoDetectionSource(const QString &autodetectionSource);
- static int getUniqueId();
- void ctor(const Utils::FileName &qmakePath);
- void setupExpander();
void updateSourcePath() const;
void updateVersionInfo() const;
enum HostBinaries { Designer, Linguist, Uic, QScxmlc };
@@ -278,22 +289,22 @@ private:
void setId(int id); // used by the qtversionmanager for legacy restore
// and by the qtoptionspage to replace Qt versions
- int m_id;
-
- bool m_isAutodetected;
- mutable bool m_hasQmlDump; // controlled by m_versionInfoUpToDate
- mutable bool m_mkspecUpToDate;
- mutable bool m_mkspecReadUpToDate;
- mutable bool m_defaultConfigIsDebug;
- mutable bool m_defaultConfigIsDebugAndRelease;
- mutable bool m_frameworkBuild;
- mutable bool m_versionInfoUpToDate;
- mutable bool m_installed;
- mutable bool m_hasExamples;
- mutable bool m_hasDemos;
- mutable bool m_hasDocumentation;
- mutable bool m_qmakeIsExecutable;
- mutable bool m_hasQtAbis;
+ int m_id = -1;
+
+ bool m_isAutodetected = false;
+ mutable bool m_hasQmlDump = false; // controlled by m_versionInfoUpToDate
+ mutable bool m_mkspecUpToDate = false;
+ mutable bool m_mkspecReadUpToDate = false;
+ mutable bool m_defaultConfigIsDebug = true;
+ mutable bool m_defaultConfigIsDebugAndRelease = true;
+ mutable bool m_frameworkBuild = false;
+ mutable bool m_versionInfoUpToDate = false;
+ mutable bool m_installed = true;
+ mutable bool m_hasExamples = false;
+ mutable bool m_hasDemos = false;
+ mutable bool m_hasDocumentation = false;
+ mutable bool m_qmakeIsExecutable = true;
+ mutable bool m_hasQtAbis = false;
mutable QStringList m_configValues;
mutable QStringList m_qtConfigValues;
@@ -320,7 +331,7 @@ private:
mutable QList<ProjectExplorer::Abi> m_qtAbis;
- std::unique_ptr<Utils::MacroExpander> m_expander;
+ MacroExpanderWrapper m_expander;
};
}
diff --git a/src/plugins/qtsupport/qtprojectimporter.cpp b/src/plugins/qtsupport/qtprojectimporter.cpp
index cee4b38057..af32e4a459 100644
--- a/src/plugins/qtsupport/qtprojectimporter.cpp
+++ b/src/plugins/qtsupport/qtprojectimporter.cpp
@@ -589,7 +589,7 @@ void QtSupportPlugin::testQtProjectImporter_oneProject()
}
if (templateKit != defaultKit)
- KitManager::deleteKit(templateKit);
+ delete templateKit;
}
// --------------------------------------------------------------------
@@ -603,8 +603,7 @@ void QtSupportPlugin::testQtProjectImporter_oneProject()
KitManager::deregisterKit(k);
// Delete kit templates:
- for (int i = 1; i < kitTemplates.count(); ++i)
- KitManager::deleteKit(kitTemplates.at(i));
+ qDeleteAll(kitTemplates);
}
} // namespace Internal
diff --git a/src/plugins/qtsupport/qtsupportplugin.cpp b/src/plugins/qtsupport/qtsupportplugin.cpp
index 30ac0e21e8..2d99d01e38 100644
--- a/src/plugins/qtsupport/qtsupportplugin.cpp
+++ b/src/plugins/qtsupport/qtsupportplugin.cpp
@@ -84,7 +84,7 @@ bool QtSupportPlugin::initialize(const QStringList &arguments, QString *errorMes
d = new QtSupportPluginPrivate;
- ProjectExplorer::KitManager::registerKitInformation(new QtKitInformation);
+ ProjectExplorer::KitManager::registerKitInformation<QtKitInformation>();
(void) new UicGeneratorFactory(this);
(void) new QScxmlcGeneratorFactory(this);
diff --git a/src/plugins/remotelinux/abstractpackagingstep.cpp b/src/plugins/remotelinux/abstractpackagingstep.cpp
index 72df1a7fc7..5ee20c341f 100644
--- a/src/plugins/remotelinux/abstractpackagingstep.cpp
+++ b/src/plugins/remotelinux/abstractpackagingstep.cpp
@@ -75,7 +75,7 @@ void AbstractPackagingStep::handleBuildConfigurationChanged()
{
if (d->currentBuildConfiguration)
disconnect(d->currentBuildConfiguration, 0, this, 0);
- d->currentBuildConfiguration = target()->activeBuildConfiguration();
+ d->currentBuildConfiguration = buildConfiguration();
if (d->currentBuildConfiguration) {
connect(d->currentBuildConfiguration, &BuildConfiguration::buildDirectoryChanged,
this, &AbstractPackagingStep::packageFilePathChanged);
diff --git a/src/plugins/resourceeditor/qrceditor/test/mainwindow.cpp b/src/plugins/resourceeditor/qrceditor/test/mainwindow.cpp
deleted file mode 100644
index 5de60a50d6..0000000000
--- a/src/plugins/resourceeditor/qrceditor/test/mainwindow.cpp
+++ /dev/null
@@ -1,94 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of Qt Creator.
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-****************************************************************************/
-
-#include "mainwindow.h"
-#include <resourceeditor/qrceditor/qrceditor.h>
-
-#include <QAction>
-#include <QDebug>
-#include <QFileDialog>
-#include <QMenuBar>
-#include <QStatusBar>
-#include <QVBoxLayout>
-
-MainWindow::MainWindow() :
- m_qrcEditor(new SharedTools::QrcEditor())
-{
- m_qrcEditor->setResourceDragEnabled(true);
- setWindowTitle(QLatin1String("Test resource editor"));
- QMenu* fMenu = menuBar()->addMenu(QLatin1String("File"));
-
- QAction* oa = fMenu->addAction(QLatin1String("Open..."));
- connect(oa, &QAction::triggered, this, &MainWindow::slotOpen);
-
- QAction* sa = fMenu->addAction(QLatin1String("Save"));
- connect(sa, &QAction::triggered, this, &MainWindow::slotSave);
-
- QAction* xa = fMenu->addAction(QLatin1String("Exit!"));
- connect(xa, &QAction::triggered, this, &QWidget::close);
-
-
- QWidget *cw = new QWidget();
- setCentralWidget(cw);
- QVBoxLayout *lt = new QVBoxLayout(cw);
- lt->addWidget(m_qrcEditor);
- setMinimumSize(QSize(500, 500));
-}
-
-void MainWindow::slotOpen()
-{
- const QString fileName = QFileDialog::getOpenFileName(this, QLatin1String("Choose resource file"),
- QString(),
- QLatin1String("Resource files (*.qrc)"));
- if (fileName.isEmpty())
- return;
-
- if (m_qrcEditor->load(fileName))
- statusBar()->showMessage(QString::fromLatin1("%1 opened").arg(fileName));
- else
- statusBar()->showMessage(QString::fromLatin1("Unable to open %1!").arg(fileName));
-}
-
-void MainWindow::slotSave()
-{
- const QString oldFileName = m_qrcEditor->fileName();
- QString fileName = oldFileName;
-
- if (fileName.isEmpty()) {
- fileName = QFileDialog::getSaveFileName(this, QLatin1String("Save resource file"),
- QString(),
- QLatin1String("Resource files (*.qrc)"));
- if (fileName.isEmpty())
- return;
- }
-
- m_qrcEditor->setFileName(fileName);
- if (m_qrcEditor->save())
- statusBar()->showMessage(QString::fromLatin1("%1 written").arg(fileName));
- else {
- statusBar()->showMessage(QString::fromLatin1("Unable to write %1!").arg(fileName));
- m_qrcEditor->setFileName(oldFileName);
- }
-}
diff --git a/src/plugins/resourceeditor/qrceditor/test/test.pro b/src/plugins/resourceeditor/qrceditor/test/test.pro
deleted file mode 100644
index 6931488fce..0000000000
--- a/src/plugins/resourceeditor/qrceditor/test/test.pro
+++ /dev/null
@@ -1,7 +0,0 @@
-TEMPLATE = app
-
-QT += gui
-
-include(../qrceditor.pri)
-SOURCES += main.cpp mainwindow.cpp
-HEADERS += mainwindow.h
diff --git a/src/plugins/texteditor/codeassist/assistproposaliteminterface.h b/src/plugins/texteditor/codeassist/assistproposaliteminterface.h
index a4f925f4d9..12b925ebf5 100644
--- a/src/plugins/texteditor/codeassist/assistproposaliteminterface.h
+++ b/src/plugins/texteditor/codeassist/assistproposaliteminterface.h
@@ -65,6 +65,7 @@ public:
virtual bool isSnippet() const = 0;
virtual bool isValid() const = 0;
virtual quint64 hash() const = 0; // it is only for removing duplicates
+ virtual bool requiresFixIts() const { return false; }
inline int order() const { return m_order; }
inline void setOrder(int order) { m_order = order; }
diff --git a/src/plugins/texteditor/codeassist/codeassistant.cpp b/src/plugins/texteditor/codeassist/codeassistant.cpp
index 3cbd99b517..e94cb5e8d6 100644
--- a/src/plugins/texteditor/codeassist/codeassistant.cpp
+++ b/src/plugins/texteditor/codeassist/codeassistant.cpp
@@ -84,7 +84,7 @@ public:
void clearAbortedPosition();
void updateFromCompletionSettings(const TextEditor::CompletionSettings &settings);
- virtual bool eventFilter(QObject *o, QEvent *e);
+ bool eventFilter(QObject *o, QEvent *e) override;
private:
void processProposalItem(AssistProposalItemInterface *proposalItem);
diff --git a/src/plugins/valgrind/callgrind/callgrindcontroller.cpp b/src/plugins/valgrind/callgrind/callgrindcontroller.cpp
index 33b3797e97..d0633caa83 100644
--- a/src/plugins/valgrind/callgrind/callgrindcontroller.cpp
+++ b/src/plugins/valgrind/callgrind/callgrindcontroller.cpp
@@ -128,7 +128,6 @@ void CallgrindController::run(Option option)
Runnable controller = m_valgrindRunnable;
controller.executable = CALLGRIND_CONTROL_BINARY;
- controller.runMode = ApplicationLauncher::Gui;
controller.commandLineArguments = QString("%1 %2").arg(toOptionString(option)).arg(m_pid);
if (!m_valgrindRunnable.device
diff --git a/src/plugins/valgrind/callgrindengine.cpp b/src/plugins/valgrind/callgrindengine.cpp
index 9a0781e72d..4557a8a02c 100644
--- a/src/plugins/valgrind/callgrindengine.cpp
+++ b/src/plugins/valgrind/callgrindengine.cpp
@@ -42,6 +42,8 @@ using namespace Valgrind::Callgrind;
namespace Valgrind {
namespace Internal {
+void setupCallgrindRunner(CallgrindToolRunner *);
+
CallgrindToolRunner::CallgrindToolRunner(RunControl *runControl)
: ValgrindToolRunner(runControl)
{
@@ -67,6 +69,8 @@ CallgrindToolRunner::CallgrindToolRunner(RunControl *runControl)
});
m_controller.setValgrindRunnable(runnable());
+
+ setupCallgrindRunner(this);
}
QStringList CallgrindToolRunner::toolArguments() const
diff --git a/src/plugins/valgrind/callgrindtool.cpp b/src/plugins/valgrind/callgrindtool.cpp
index 2903b3cae5..faa08371e7 100644
--- a/src/plugins/valgrind/callgrindtool.cpp
+++ b/src/plugins/valgrind/callgrindtool.cpp
@@ -98,7 +98,6 @@ using namespace Valgrind::Callgrind;
using namespace TextEditor;
using namespace ProjectExplorer;
using namespace Utils;
-using namespace std::placeholders;
namespace Valgrind {
namespace Internal {
@@ -106,11 +105,6 @@ namespace Internal {
const char CallgrindPerspectiveId[] = "Callgrind.Perspective";
const char CallgrindLocalActionId[] = "Callgrind.Local.Action";
const char CallgrindRemoteActionId[] = "Callgrind.Remote.Action";
-const char CallgrindCallersDockId[] = "Callgrind.Callers.Dock";
-const char CallgrindCalleesDockId[] = "Callgrind.Callees.Dock";
-const char CallgrindFlatDockId[] = "Callgrind.Flat.Dock";
-const char CallgrindVisualizationDockId[] = "Callgrind.Visualization.Dock";
-
const char CALLGRIND_RUN_MODE[] = "CallgrindTool.CallgrindRunMode";
class CallgrindTool : public QObject
@@ -121,7 +115,7 @@ public:
CallgrindTool();
~CallgrindTool();
- ValgrindToolRunner *createRunTool(RunControl *runControl);
+ void setupRunner(CallgrindToolRunner *runner);
void setParseData(ParseData *data);
CostDelegate::CostFormat costFormat() const;
@@ -188,10 +182,10 @@ public:
QSortFilterProxyModel m_calleesProxy;
// Callgrind widgets
- CostView *m_flatView = nullptr;
- CostView *m_callersView = nullptr;
- CostView *m_calleesView = nullptr;
- Visualisation *m_visualization = nullptr;
+ QPointer<CostView> m_flatView;
+ QPointer<CostView> m_callersView;
+ QPointer<CostView> m_calleesView;
+ QPointer<Visualization> m_visualization;
// Navigation
QAction *m_goBack = nullptr;
@@ -272,7 +266,7 @@ CallgrindTool::CallgrindTool()
action->setToolTip(toolTip);
menu->addAction(ActionManager::registerAction(action, CallgrindRemoteActionId),
Debugger::Constants::G_ANALYZER_REMOTE_TOOLS);
- QObject::connect(action, &QAction::triggered, this, [this, action] {
+ QObject::connect(action, &QAction::triggered, this, [action] {
auto runConfig = RunConfiguration::startupRunConfiguration();
if (!runConfig) {
showCannotStartDialog(action->text());
@@ -283,10 +277,11 @@ CallgrindTool::CallgrindTool()
return;
Debugger::selectPerspective(CallgrindPerspectiveId);
auto runControl = new RunControl(runConfig, CALLGRIND_RUN_MODE);
+ if (auto creator = RunControl::producer(runConfig, CALLGRIND_RUN_MODE))
+ creator(runControl);
const auto runnable = dlg.runnable();
runControl->setRunnable(runnable);
runControl->setDisplayName(runnable.executable);
- createRunTool(runControl);
ProjectExplorerPlugin::startRunControl(runControl);
});
@@ -312,12 +307,12 @@ CallgrindTool::CallgrindTool()
//
// DockWidgets
//
- m_visualization = new Visualisation;
+ m_visualization = new Visualization;
m_visualization->setFrameStyle(QFrame::NoFrame);
m_visualization->setObjectName(QLatin1String("Valgrind.CallgrindTool.Visualisation"));
m_visualization->setWindowTitle(tr("Visualization"));
m_visualization->setModel(&m_dataModel);
- connect(m_visualization, &Visualisation::functionActivated,
+ connect(m_visualization, &Visualization::functionActivated,
this, &CallgrindTool::visualisationFunctionSelected);
m_callersView = new CostView;
@@ -424,18 +419,18 @@ CallgrindTool::CallgrindTool()
this, &CallgrindTool::setCostEvent);
updateEventCombo();
- ToolbarDescription toolbar;
- toolbar.addAction(m_startAction);
- toolbar.addAction(m_stopAction);
- toolbar.addAction(m_loadExternalLogFile);
- toolbar.addAction(m_dumpAction);
- toolbar.addAction(m_resetAction);
- toolbar.addAction(m_pauseAction);
- toolbar.addAction(m_discardAction);
- toolbar.addAction(m_goBack);
- toolbar.addAction(m_goNext);
- toolbar.addWidget(new Utils::StyledSeparator);
- toolbar.addWidget(m_eventCombo);
+ auto perspective = new Perspective(CallgrindPerspectiveId, tr("Callgrind"));
+ perspective->addToolbarAction(m_startAction);
+ perspective->addToolbarAction(m_stopAction);
+ perspective->addToolbarAction(m_loadExternalLogFile);
+ perspective->addToolbarAction(m_dumpAction);
+ perspective->addToolbarAction(m_resetAction);
+ perspective->addToolbarAction(m_pauseAction);
+ perspective->addToolbarAction(m_discardAction);
+ perspective->addToolbarAction(m_goBack);
+ perspective->addToolbarAction(m_goNext);
+ perspective->addToolbarSeparator();
+ perspective->addToolbarWidget(m_eventCombo);
// Cost formatting
{
@@ -468,7 +463,7 @@ CallgrindTool::CallgrindTool()
button->setPopupMode(QToolButton::InstantPopup);
button->setText(QLatin1String("$"));
button->setToolTip(tr("Cost Format"));
- toolbar.addWidget(button);
+ perspective->addToolbarWidget(button);
}
ValgrindGlobalSettings *settings = ValgrindPlugin::globalSettings();
@@ -505,19 +500,17 @@ CallgrindTool::CallgrindTool()
setCostFormat(settings->costFormat());
enableCycleDetection(settings->detectCycles());
- toolbar.addAction(m_cycleDetection);
- toolbar.addAction(m_shortenTemplates);
- toolbar.addAction(m_filterProjectCosts);
- toolbar.addWidget(m_searchFilter);
- Debugger::registerToolbar(CallgrindPerspectiveId, toolbar);
+ perspective->addToolbarAction(m_cycleDetection);
+ perspective->addToolbarAction(m_shortenTemplates);
+ perspective->addToolbarAction(m_filterProjectCosts);
+ perspective->addToolbarWidget(m_searchFilter);
- Debugger::registerPerspective(CallgrindPerspectiveId, new Perspective(tr("Callgrind"), {
- {CallgrindFlatDockId, m_flatView, {}, Perspective::SplitVertical},
- {CallgrindCalleesDockId, m_calleesView, {}, Perspective::SplitVertical},
- {CallgrindCallersDockId, m_callersView, CallgrindCalleesDockId, Perspective::SplitHorizontal},
- {CallgrindVisualizationDockId, m_visualization, {}, Perspective::SplitVertical,
- false, Qt::RightDockWidgetArea}
- }));
+ perspective->addWindow(m_flatView, Perspective::SplitVertical, nullptr);
+ perspective->addWindow(m_calleesView, Perspective::SplitVertical, nullptr);
+ perspective->addWindow(m_callersView, Perspective::SplitHorizontal, m_calleesView);
+ perspective->addWindow(m_visualization, Perspective::SplitVertical, nullptr,
+ false, Qt::RightDockWidgetArea);
+ Debugger::registerPerspective(perspective);
connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::updateRunActions,
this, &CallgrindTool::updateRunActions);
@@ -526,6 +519,10 @@ CallgrindTool::CallgrindTool()
CallgrindTool::~CallgrindTool()
{
qDeleteAll(m_textMarks);
+ delete m_flatView;
+ delete m_callersView;
+ delete m_calleesView;
+ delete m_visualization;
}
void CallgrindTool::doClear(bool clearParseData)
@@ -747,9 +744,9 @@ void CallgrindTool::updateEventCombo()
m_eventCombo->addItem(ParseData::prettyStringForEvent(event));
}
-ValgrindToolRunner *CallgrindTool::createRunTool(RunControl *runControl)
+void CallgrindTool::setupRunner(CallgrindToolRunner *toolRunner)
{
- auto toolRunner = new CallgrindToolRunner(runControl);
+ RunControl *runControl = toolRunner->runControl();
connect(toolRunner, &CallgrindToolRunner::parserDataReady, this, &CallgrindTool::takeParserDataFromRunControl);
connect(runControl, &RunControl::stopped, this, &CallgrindTool::engineFinished);
@@ -767,7 +764,7 @@ ValgrindToolRunner *CallgrindTool::createRunTool(RunControl *runControl)
toolRunner->setToggleCollectFunction(m_toggleCollectFunction);
m_toggleCollectFunction.clear();
- QTC_ASSERT(m_visualization, return toolRunner);
+ QTC_ASSERT(m_visualization, return);
// apply project settings
if (IRunConfigurationAspect *analyzerAspect = runControl->runConfiguration()->extraAspect(ANALYZER_VALGRIND_SETTINGS)) {
@@ -787,8 +784,6 @@ ValgrindToolRunner *CallgrindTool::createRunTool(RunControl *runControl)
m_loadExternalLogFile->setEnabled(false);
clearTextMarks();
doClear(true);
-
- return toolRunner;
}
void CallgrindTool::updateRunActions()
@@ -974,12 +969,16 @@ void CallgrindTool::createTextMarks()
static CallgrindTool *theCallgrindTool;
+void setupCallgrindRunner(CallgrindToolRunner *toolRunner)
+{
+ theCallgrindTool->setupRunner(toolRunner);
+}
+
void initCallgrindTool()
{
theCallgrindTool = new CallgrindTool;
- auto producer = std::bind(&CallgrindTool::createRunTool, theCallgrindTool, _1);
- RunControl::registerWorker(CALLGRIND_RUN_MODE, producer);
+ RunControl::registerWorker<CallgrindToolRunner>(CALLGRIND_RUN_MODE, {});
}
void destroyCallgrindTool()
diff --git a/src/plugins/valgrind/callgrindvisualisation.cpp b/src/plugins/valgrind/callgrindvisualisation.cpp
index 7dbf781081..a653489e36 100644
--- a/src/plugins/valgrind/callgrindvisualisation.cpp
+++ b/src/plugins/valgrind/callgrindvisualisation.cpp
@@ -62,9 +62,9 @@ class FunctionGraphicsTextItem : public QAbstractGraphicsShapeItem
public:
FunctionGraphicsTextItem(const QString &text, QGraphicsItem *parent);
- virtual void paint(QPainter *painter,
- const QStyleOptionGraphicsItem *option, QWidget *widget);
- virtual QRectF boundingRect() const;
+ void paint(QPainter *painter,
+ const QStyleOptionGraphicsItem *option, QWidget *widget) override;
+ QRectF boundingRect() const override;
private:
QString m_text;
@@ -82,8 +82,8 @@ public:
FunctionGraphicsItem(const QString &text, qreal x, qreal y,
qreal width, qreal height, QGraphicsItem *parent = 0);
- virtual void paint(QPainter *painter,
- const QStyleOptionGraphicsItem *option, QWidget *widget);
+ void paint(QPainter *painter,
+ const QStyleOptionGraphicsItem *option, QWidget *widget) override;
FunctionGraphicsTextItem *textItem() const;
private:
@@ -204,21 +204,21 @@ void FunctionGraphicsItem::paint(QPainter *painter,
painter->restore();
}
-class Visualisation::Private
+class Visualization::Private
{
public:
- Private(Visualisation *qq);
+ Private(Visualization *qq);
void handleMousePressEvent(QMouseEvent *event, bool doubleClicked);
qreal sceneHeight() const;
qreal sceneWidth() const;
- Visualisation *q;
+ Visualization *q;
DataProxyModel *m_model;
QGraphicsScene m_scene;
};
-Visualisation::Private::Private(Visualisation *qq)
+Visualization::Private::Private(Visualization *qq)
: q(qq)
, m_model(new DataProxyModel(qq))
{
@@ -230,10 +230,10 @@ Visualisation::Private::Private(Visualisation *qq)
// setup model
m_model->setMinimumInclusiveCostRatio(0.1);
connect(m_model, &DataProxyModel::filterFunctionChanged,
- qq, &Visualisation::populateScene);
+ qq, &Visualization::populateScene);
}
-void Visualisation::Private::handleMousePressEvent(QMouseEvent *event,
+void Visualization::Private::handleMousePressEvent(QMouseEvent *event,
bool doubleClicked)
{
// find the first item that accepts mouse presses under the cursor position
@@ -261,18 +261,18 @@ void Visualisation::Private::handleMousePressEvent(QMouseEvent *event,
}
-qreal Visualisation::Private::sceneHeight() const
+qreal Visualization::Private::sceneHeight() const
{
return m_scene.height() - FIT_IN_VIEW_MARGIN;
}
-qreal Visualisation::Private::sceneWidth() const
+qreal Visualization::Private::sceneWidth() const
{
// Magic number to improve margins appearance
return m_scene.width() + 1;
}
-Visualisation::Visualisation(QWidget *parent)
+Visualization::Visualization(QWidget *parent)
: QGraphicsView(parent)
, d(new Private(this))
{
@@ -281,17 +281,17 @@ Visualisation::Visualisation(QWidget *parent)
setRenderHint(QPainter::Antialiasing);
}
-Visualisation::~Visualisation()
+Visualization::~Visualization()
{
delete d;
}
-const Function *Visualisation::functionForItem(QGraphicsItem *item) const
+const Function *Visualization::functionForItem(QGraphicsItem *item) const
{
return item->data(FunctionGraphicsItem::FunctionCallKey).value<const Function *>();
}
-QGraphicsItem *Visualisation::itemForFunction(const Function *function) const
+QGraphicsItem *Visualization::itemForFunction(const Function *function) const
{
foreach (QGraphicsItem *item, items()) {
if (functionForItem(item) == function)
@@ -300,49 +300,49 @@ QGraphicsItem *Visualisation::itemForFunction(const Function *function) const
return 0;
}
-void Visualisation::setFunction(const Function *function)
+void Visualization::setFunction(const Function *function)
{
d->m_model->setFilterFunction(function);
}
-const Function *Visualisation::function() const
+const Function *Visualization::function() const
{
return d->m_model->filterFunction();
}
-void Visualisation::setMinimumInclusiveCostRatio(double ratio)
+void Visualization::setMinimumInclusiveCostRatio(double ratio)
{
d->m_model->setMinimumInclusiveCostRatio(ratio);
}
-void Visualisation::setModel(QAbstractItemModel *model)
+void Visualization::setModel(QAbstractItemModel *model)
{
QTC_ASSERT(!d->m_model->sourceModel() && model, return); // only set once!
d->m_model->setSourceModel(model);
connect(model, &QAbstractItemModel::columnsInserted,
- this, &Visualisation::populateScene);
+ this, &Visualization::populateScene);
connect(model, &QAbstractItemModel::columnsMoved,
- this, &Visualisation::populateScene);
+ this, &Visualization::populateScene);
connect(model, &QAbstractItemModel::columnsRemoved,
- this, &Visualisation::populateScene);
+ this, &Visualization::populateScene);
connect(model, &QAbstractItemModel::dataChanged,
- this, &Visualisation::populateScene);
+ this, &Visualization::populateScene);
connect(model, &QAbstractItemModel::headerDataChanged,
- this, &Visualisation::populateScene);
- connect(model, &QAbstractItemModel::layoutChanged, this, &Visualisation::populateScene);
- connect(model, &QAbstractItemModel::modelReset, this, &Visualisation::populateScene);
+ this, &Visualization::populateScene);
+ connect(model, &QAbstractItemModel::layoutChanged, this, &Visualization::populateScene);
+ connect(model, &QAbstractItemModel::modelReset, this, &Visualization::populateScene);
connect(model, &QAbstractItemModel::rowsInserted,
- this, &Visualisation::populateScene);
+ this, &Visualization::populateScene);
connect(model, &QAbstractItemModel::rowsMoved,
- this, &Visualisation::populateScene);
+ this, &Visualization::populateScene);
connect(model, &QAbstractItemModel::rowsRemoved,
- this, &Visualisation::populateScene);
+ this, &Visualization::populateScene);
populateScene();
}
-void Visualisation::setText(const QString &message)
+void Visualization::setText(const QString &message)
{
d->m_scene.clear();
@@ -353,7 +353,7 @@ void Visualisation::setText(const QString &message)
textItem->setFlag(QGraphicsItem::ItemIgnoresTransformations);
}
-void Visualisation::populateScene()
+void Visualization::populateScene()
{
// reset scene first
d->m_scene.clear();
@@ -419,21 +419,21 @@ void Visualisation::populateScene()
}
}
-void Visualisation::mousePressEvent(QMouseEvent *event)
+void Visualization::mousePressEvent(QMouseEvent *event)
{
d->handleMousePressEvent(event, false);
QGraphicsView::mousePressEvent(event);
}
-void Visualisation::mouseDoubleClickEvent(QMouseEvent *event)
+void Visualization::mouseDoubleClickEvent(QMouseEvent *event)
{
d->handleMousePressEvent(event, true);
QGraphicsView::mouseDoubleClickEvent(event);
}
-void Visualisation::resizeEvent(QResizeEvent *event)
+void Visualization::resizeEvent(QResizeEvent *event)
{
fitInView(sceneRect());
diff --git a/src/plugins/valgrind/callgrindvisualisation.h b/src/plugins/valgrind/callgrindvisualisation.h
index f03b4775b5..c6d0d85958 100644
--- a/src/plugins/valgrind/callgrindvisualisation.h
+++ b/src/plugins/valgrind/callgrindvisualisation.h
@@ -38,13 +38,13 @@ namespace Callgrind { class Function; }
namespace Valgrind {
namespace Internal {
-class Visualisation : public QGraphicsView
+class Visualization : public QGraphicsView
{
Q_OBJECT
public:
- explicit Visualisation(QWidget *parent = 0);
- virtual ~Visualisation();
+ explicit Visualization(QWidget *parent = 0);
+ virtual ~Visualization();
void setModel(QAbstractItemModel *model);
diff --git a/src/plugins/valgrind/memchecktool.cpp b/src/plugins/valgrind/memchecktool.cpp
index 6078cd240c..534de63d3d 100644
--- a/src/plugins/valgrind/memchecktool.cpp
+++ b/src/plugins/valgrind/memchecktool.cpp
@@ -111,8 +111,6 @@ using namespace ProjectExplorer;
using namespace Utils;
using namespace Valgrind::XmlProtocol;
-using namespace std::placeholders;
-
namespace Valgrind {
namespace Internal {
@@ -120,7 +118,6 @@ const char MEMCHECK_RUN_MODE[] = "MemcheckTool.MemcheckRunMode";
const char MEMCHECK_WITH_GDB_RUN_MODE[] = "MemcheckTool.MemcheckWithGdbRunMode";
const char MemcheckPerspectiveId[] = "Memcheck.Perspective";
-const char MemcheckErrorDockId[] = "Memcheck.Dock.Error";
class MemcheckToolRunner : public ValgrindToolRunner
@@ -128,8 +125,7 @@ class MemcheckToolRunner : public ValgrindToolRunner
Q_OBJECT
public:
- explicit MemcheckToolRunner(ProjectExplorer::RunControl *runControl,
- bool withGdb = false);
+ explicit MemcheckToolRunner(ProjectExplorer::RunControl *runControl);
void start() override;
void stop() override;
@@ -175,33 +171,6 @@ public:
QSsh::SshConnection connection;
};
-MemcheckToolRunner::MemcheckToolRunner(RunControl *runControl, bool withGdb)
- : ValgrindToolRunner(runControl),
- m_withGdb(withGdb),
- m_localServerAddress(QHostAddress::LocalHost)
-{
- setDisplayName("MemcheckToolRunner");
- connect(m_runner.parser(), &XmlProtocol::ThreadedParser::error,
- this, &MemcheckToolRunner::parserError);
- connect(m_runner.parser(), &XmlProtocol::ThreadedParser::suppressionCount,
- this, &MemcheckToolRunner::suppressionCount);
-
- if (withGdb) {
- connect(&m_runner, &ValgrindRunner::valgrindStarted,
- this, &MemcheckToolRunner::startDebugger);
- connect(&m_runner, &ValgrindRunner::logMessageReceived,
- this, &MemcheckToolRunner::appendLog);
-// m_runner.disableXml();
- } else {
- connect(m_runner.parser(), &XmlProtocol::ThreadedParser::internalError,
- this, &MemcheckToolRunner::internalParserError);
- }
-
- // We need a real address to connect to from the outside.
- if (device()->type() != ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE)
- addStartDependency(new LocalAddressFinder(runControl, &m_localServerAddress));
-}
-
QString MemcheckToolRunner::progressTitle() const
{
return tr("Analyzing Memory");
@@ -422,9 +391,9 @@ class MemcheckTool : public QObject
public:
MemcheckTool();
+ ~MemcheckTool();
- RunWorker *createRunWorker(RunControl *runControl);
-
+ void setupRunner(MemcheckToolRunner *runTool);
void loadShowXmlLogFile(const QString &filePath, const QString &exitMsg);
private:
@@ -456,7 +425,7 @@ private:
Valgrind::XmlProtocol::ErrorListModel m_errorModel;
MemcheckErrorFilterProxyModel m_errorProxyModel;
- MemcheckErrorView *m_errorView = 0;
+ QPointer<MemcheckErrorView> m_errorView;
QList<QAction *> m_errorFilterActions;
QAction *m_filterProjectAction;
@@ -587,9 +556,8 @@ MemcheckTool::MemcheckTool()
m_errorView->setObjectName(QLatin1String("Valgrind.MemcheckTool.ErrorView"));
m_errorView->setWindowTitle(tr("Memory Issues"));
- Debugger::registerPerspective(MemcheckPerspectiveId, new Perspective (tr("Memcheck"), {
- {MemcheckErrorDockId, m_errorView, {}, Perspective::SplitVertical}
- }));
+ auto perspective = new Perspective(MemcheckPerspectiveId, tr("Memcheck"));
+ perspective->addWindow(m_errorView, Perspective::SplitVertical, nullptr);
connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::updateRunActions,
this, &MemcheckTool::maybeActiveRunConfigurationChanged);
@@ -707,27 +675,32 @@ MemcheckTool::MemcheckTool()
TaskHub::clearTasks(Debugger::Constants::ANALYZERTASK_ID);
Debugger::selectPerspective(MemcheckPerspectiveId);
RunControl *rc = new RunControl(runConfig, MEMCHECK_RUN_MODE);
- rc->createWorker(MEMCHECK_RUN_MODE);
+ if (auto creator = RunControl::producer(runConfig, MEMCHECK_RUN_MODE))
+ creator(rc);
const auto runnable = dlg.runnable();
rc->setRunnable(runnable);
rc->setDisplayName(runnable.executable);
ProjectExplorerPlugin::startRunControl(rc);
});
- ToolbarDescription toolbar;
- toolbar.addAction(m_startAction);
+ perspective->addToolbarAction(m_startAction);
//toolbar.addAction(m_startWithGdbAction);
- toolbar.addAction(m_stopAction);
- toolbar.addAction(m_loadExternalLogFile);
- toolbar.addAction(m_goBack);
- toolbar.addAction(m_goNext);
- toolbar.addWidget(filterButton);
- Debugger::registerToolbar(MemcheckPerspectiveId, toolbar);
+ perspective->addToolbarAction(m_stopAction);
+ perspective->addToolbarAction(m_loadExternalLogFile);
+ perspective->addToolbarAction(m_goBack);
+ perspective->addToolbarAction(m_goNext);
+ perspective->addToolbarWidget(filterButton);
+ Debugger::registerPerspective(perspective);
updateFromSettings();
maybeActiveRunConfigurationChanged();
}
+MemcheckTool::~MemcheckTool()
+{
+ delete m_errorView;
+}
+
void MemcheckTool::heobAction()
{
#ifdef Q_OS_WIN
@@ -968,13 +941,12 @@ void MemcheckTool::maybeActiveRunConfigurationChanged()
updateFromSettings();
}
-RunWorker *MemcheckTool::createRunWorker(RunControl *runControl)
+void MemcheckTool::setupRunner(MemcheckToolRunner *runTool)
{
+ RunControl *runControl = runTool->runControl();
m_errorModel.setRelevantFrameFinder(makeFrameFinder(transform(runControl->project()->files(Project::AllFiles),
&FileName::toString)));
- auto runTool = new MemcheckToolRunner(runControl, runControl->runMode() == MEMCHECK_WITH_GDB_RUN_MODE);
-
connect(runTool, &MemcheckToolRunner::parserError, this, &MemcheckTool::parserError);
connect(runTool, &MemcheckToolRunner::internalParserError, this, &MemcheckTool::internalParserError);
connect(runTool, &MemcheckToolRunner::stopped, this, &MemcheckTool::engineFinished);
@@ -1002,8 +974,6 @@ RunWorker *MemcheckTool::createRunWorker(RunControl *runControl)
});
m_suppressionActions.append(action);
}
-
- return runTool;
}
void MemcheckTool::loadShowXmlLogFile(const QString &filePath, const QString &exitMsg)
@@ -1145,13 +1115,41 @@ void MemcheckTool::setBusyCursor(bool busy)
static MemcheckTool *theMemcheckTool;
+MemcheckToolRunner::MemcheckToolRunner(RunControl *runControl)
+ : ValgrindToolRunner(runControl),
+ m_withGdb(runControl->runMode() == MEMCHECK_WITH_GDB_RUN_MODE),
+ m_localServerAddress(QHostAddress::LocalHost)
+{
+ setDisplayName("MemcheckToolRunner");
+ connect(m_runner.parser(), &XmlProtocol::ThreadedParser::error,
+ this, &MemcheckToolRunner::parserError);
+ connect(m_runner.parser(), &XmlProtocol::ThreadedParser::suppressionCount,
+ this, &MemcheckToolRunner::suppressionCount);
+
+ if (m_withGdb) {
+ connect(&m_runner, &ValgrindRunner::valgrindStarted,
+ this, &MemcheckToolRunner::startDebugger);
+ connect(&m_runner, &ValgrindRunner::logMessageReceived,
+ this, &MemcheckToolRunner::appendLog);
+// m_runner.disableXml();
+ } else {
+ connect(m_runner.parser(), &XmlProtocol::ThreadedParser::internalError,
+ this, &MemcheckToolRunner::internalParserError);
+ }
+
+ // We need a real address to connect to from the outside.
+ if (device()->type() != ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE)
+ addStartDependency(new LocalAddressFinder(runControl, &m_localServerAddress));
+
+ theMemcheckTool->setupRunner(this);
+}
+
void initMemcheckTool()
{
theMemcheckTool = new MemcheckTool;
- auto producer = std::bind(&MemcheckTool::createRunWorker, theMemcheckTool, _1);
- RunControl::registerWorker(MEMCHECK_RUN_MODE, producer);
- RunControl::registerWorker(MEMCHECK_WITH_GDB_RUN_MODE, producer);
+ RunControl::registerWorker<MemcheckToolRunner>(MEMCHECK_RUN_MODE, {});
+ RunControl::registerWorker<MemcheckToolRunner>(MEMCHECK_WITH_GDB_RUN_MODE, {});
}
void destroyMemcheckTool()
diff --git a/src/plugins/valgrind/valgrindengine.cpp b/src/plugins/valgrind/valgrindengine.cpp
index 82ed9cc0f9..b286fd138d 100644
--- a/src/plugins/valgrind/valgrindengine.cpp
+++ b/src/plugins/valgrind/valgrindengine.cpp
@@ -38,6 +38,7 @@
#include <projectexplorer/projectexplorericons.h>
#include <projectexplorer/runconfiguration.h>
+#include <projectexplorer/runconfigurationaspects.h>
#include <QApplication>
@@ -85,6 +86,9 @@ void ValgrindToolRunner::start()
m_runner.setDevice(device());
m_runner.setDebuggee(runnable());
+ if (auto aspect = runControl()->runConfiguration()->extraAspect<TerminalAspect>())
+ m_runner.setUseTerminal(aspect->useTerminal());
+
connect(&m_runner, &ValgrindRunner::processOutputReceived,
this, &ValgrindToolRunner::receiveProcessOutput);
connect(&m_runner, &ValgrindRunner::valgrindExecuted,
diff --git a/src/plugins/valgrind/valgrindrunner.cpp b/src/plugins/valgrind/valgrindrunner.cpp
index 86f8c8b4e4..f37d641d39 100644
--- a/src/plugins/valgrind/valgrindrunner.cpp
+++ b/src/plugins/valgrind/valgrindrunner.cpp
@@ -110,7 +110,6 @@ void ValgrindRunner::Private::run()
valgrind.executable = m_valgrindExecutable;
valgrind.workingDirectory = m_debuggee.workingDirectory;
valgrind.environment = m_debuggee.environment;
- valgrind.runMode = m_debuggee.runMode;
valgrind.device = m_device;
valgrind.commandLineArguments = QtcProcess::joinArgs(fullArgs, m_device->osType());
Utils::QtcProcess::addArgs(&valgrind.commandLineArguments, m_debuggee.commandLineArguments);
@@ -258,6 +257,11 @@ void ValgrindRunner::setDevice(const IDevice::ConstPtr &device)
d->m_device = device;
}
+void ValgrindRunner::setUseTerminal(bool on)
+{
+ d->m_valgrindProcess.setUseTerminal(on);
+}
+
void ValgrindRunner::waitForFinished() const
{
if (d->m_finished)
diff --git a/src/plugins/valgrind/valgrindrunner.h b/src/plugins/valgrind/valgrindrunner.h
index aaad50c008..faeafd3a6c 100644
--- a/src/plugins/valgrind/valgrindrunner.h
+++ b/src/plugins/valgrind/valgrindrunner.h
@@ -50,6 +50,7 @@ public:
void setProcessChannelMode(QProcess::ProcessChannelMode mode);
void setLocalServerAddress(const QHostAddress &localServerAddress);
void setDevice(const ProjectExplorer::IDevice::ConstPtr &device);
+ void setUseTerminal(bool on);
void waitForFinished() const;
diff --git a/src/plugins/vcsbase/commonsettingspage.cpp b/src/plugins/vcsbase/commonsettingspage.cpp
index 12f374bcbb..ab907437bd 100644
--- a/src/plugins/vcsbase/commonsettingspage.cpp
+++ b/src/plugins/vcsbase/commonsettingspage.cpp
@@ -37,6 +37,8 @@
#include <QCoreApplication>
+using namespace Utils;
+
namespace VcsBase {
namespace Internal {
@@ -47,13 +49,13 @@ CommonSettingsWidget::CommonSettingsWidget(QWidget *parent) :
m_ui(new Ui::CommonSettingsPage)
{
m_ui->setupUi(this);
- m_ui->submitMessageCheckScriptChooser->setExpectedKind(Utils::PathChooser::ExistingCommand);
+ m_ui->submitMessageCheckScriptChooser->setExpectedKind(PathChooser::ExistingCommand);
m_ui->submitMessageCheckScriptChooser->setHistoryCompleter(QLatin1String("Vcs.MessageCheckScript.History"));
- m_ui->nickNameFieldsFileChooser->setExpectedKind(Utils::PathChooser::File);
+ m_ui->nickNameFieldsFileChooser->setExpectedKind(PathChooser::File);
m_ui->nickNameFieldsFileChooser->setHistoryCompleter(QLatin1String("Vcs.NickFields.History"));
- m_ui->nickNameMailMapChooser->setExpectedKind(Utils::PathChooser::File);
+ m_ui->nickNameMailMapChooser->setExpectedKind(PathChooser::File);
m_ui->nickNameMailMapChooser->setHistoryCompleter(QLatin1String("Vcs.NickMap.History"));
- m_ui->sshPromptChooser->setExpectedKind(Utils::PathChooser::ExistingCommand);
+ m_ui->sshPromptChooser->setExpectedKind(PathChooser::ExistingCommand);
m_ui->sshPromptChooser->setHistoryCompleter(QLatin1String("Vcs.SshPrompt.History"));
updatePath();
@@ -93,9 +95,9 @@ void CommonSettingsWidget::setSettings(const CommonVcsSettings &s)
void CommonSettingsWidget::updatePath()
{
- Utils::Environment env = Utils::Environment::systemEnvironment();
+ Environment env = Environment::systemEnvironment();
QStringList toAdd = Core::VcsManager::additionalToolsPath();
- env.appendOrSetPath(toAdd.join(Utils::HostOsInfo::pathListSeparator()));
+ env.appendOrSetPath(toAdd.join(HostOsInfo::pathListSeparator()));
m_ui->sshPromptChooser->setEnvironment(env);
}
diff --git a/src/plugins/vcsbase/nicknamedialog.cpp b/src/plugins/vcsbase/nicknamedialog.cpp
index f2e6729046..11737ec08b 100644
--- a/src/plugins/vcsbase/nicknamedialog.cpp
+++ b/src/plugins/vcsbase/nicknamedialog.cpp
@@ -34,6 +34,8 @@
#include <QStandardItemModel>
#include <QSortFilterProxyModel>
+using namespace Utils;
+
enum { NickNameRole = Qt::UserRole + 1 };
/*!
@@ -175,7 +177,7 @@ NickNameDialog::NickNameDialog(QStandardItemModel *model, QWidget *parent) :
m_filterModel->setSourceModel(model);
m_filterModel->setFilterCaseSensitivity(Qt::CaseInsensitive);
m_ui->filterTreeView->setModel(m_filterModel);
- m_ui->filterTreeView->setActivationMode(Utils::DoubleClickActivation);
+ m_ui->filterTreeView->setActivationMode(DoubleClickActivation);
const int columnCount = m_filterModel->columnCount();
int treeWidth = 0;
for (int c = 0; c < columnCount; c++) {
@@ -188,7 +190,7 @@ NickNameDialog::NickNameDialog(QStandardItemModel *model, QWidget *parent) :
&NickNameDialog::slotActivated);
connect(m_ui->filterTreeView->selectionModel(), &QItemSelectionModel::currentRowChanged,
this, &NickNameDialog::slotCurrentItemChanged);
- connect(m_ui->filterLineEdit, &Utils::FancyLineEdit::filterChanged,
+ connect(m_ui->filterLineEdit, &FancyLineEdit::filterChanged,
m_filterModel, &QSortFilterProxyModel::setFilterFixedString);
}
@@ -242,7 +244,7 @@ bool NickNameDialog::populateModelFromMailCapFile(const QString &fileName,
model->removeRows(0, rowCount);
if (fileName.isEmpty())
return true;
- Utils::FileReader reader;
+ FileReader reader;
if (!reader.fetch(fileName, QIODevice::Text, errorMessage))
return false;
// Split into lines and read
diff --git a/src/plugins/vcsbase/submiteditorwidget.cpp b/src/plugins/vcsbase/submiteditorwidget.cpp
index f13d1979c2..d9b7125e77 100644
--- a/src/plugins/vcsbase/submiteditorwidget.cpp
+++ b/src/plugins/vcsbase/submiteditorwidget.cpp
@@ -42,6 +42,8 @@
#include <QSpacerItem>
#include <QShortcut>
+using namespace Utils;
+
enum { debug = 0 };
enum { defaultLineWidth = 72 };
@@ -252,16 +254,16 @@ void SubmitEditorWidget::unregisterActions(QAction *editorUndoAction, QAction *
QAction *submitAction, QAction *diffAction)
{
if (editorUndoAction) {
- disconnect(d->m_ui.description, &Utils::CompletingTextEdit::undoAvailable,
+ disconnect(d->m_ui.description, &CompletingTextEdit::undoAvailable,
editorUndoAction, &QAction::setEnabled);
disconnect(editorUndoAction, &QAction::triggered,
- d->m_ui.description, &Utils::CompletingTextEdit::undo);
+ d->m_ui.description, &CompletingTextEdit::undo);
}
if (editorRedoAction) {
- disconnect(d->m_ui.description, &Utils::CompletingTextEdit::redoAvailable,
+ disconnect(d->m_ui.description, &CompletingTextEdit::redoAvailable,
editorRedoAction, &QAction::setEnabled);
disconnect(editorRedoAction, &QAction::triggered,
- d->m_ui.description, &Utils::CompletingTextEdit::redo);
+ d->m_ui.description, &CompletingTextEdit::redo);
}
if (submitAction) {
@@ -446,7 +448,7 @@ QStringList SubmitEditorWidget::checkedFiles() const
return rc;
}
-Utils::CompletingTextEdit *SubmitEditorWidget::descriptionEdit() const
+CompletingTextEdit *SubmitEditorWidget::descriptionEdit() const
{
return d->m_ui.description;
}
diff --git a/src/plugins/vcsbase/vcsbaseclient.cpp b/src/plugins/vcsbase/vcsbaseclient.cpp
index 7060294a97..af80c664f5 100644
--- a/src/plugins/vcsbase/vcsbaseclient.cpp
+++ b/src/plugins/vcsbase/vcsbaseclient.cpp
@@ -50,6 +50,8 @@
#include <QVariant>
#include <QProcessEnvironment>
+using namespace Utils;
+
/*!
\class VcsBase::VcsBaseClient
@@ -108,7 +110,7 @@ VcsBaseClientSettings &VcsBaseClientImpl::settings() const
return *d->m_clientSettings;
}
-Utils::FileName VcsBaseClientImpl::vcsBinary() const
+FileName VcsBaseClientImpl::vcsBinary() const
{
return settings().binaryPath();
}
@@ -134,7 +136,7 @@ VcsCommand *VcsBaseClientImpl::createCommand(const QString &workingDirectory,
void VcsBaseClientImpl::enqueueJob(VcsCommand *cmd, const QStringList &args,
const QString &workingDirectory,
- const Utils::ExitCodeInterpreter &interpreter) const
+ const ExitCodeInterpreter &interpreter) const
{
cmd->addJob(vcsBinary(), args, vcsTimeoutS(), workingDirectory, interpreter);
cmd->execute();
@@ -149,7 +151,7 @@ QProcessEnvironment VcsBaseClientImpl::processEnvironment() const
QString VcsBaseClientImpl::commandOutputFromLocal8Bit(const QByteArray &a)
{
- return Utils::SynchronousProcess::normalizeNewlines(QString::fromLocal8Bit(a));
+ return SynchronousProcess::normalizeNewlines(QString::fromLocal8Bit(a));
}
QStringList VcsBaseClientImpl::commandOutputLinesFromLocal8Bit(const QByteArray &a)
@@ -175,8 +177,8 @@ QString VcsBaseClientImpl::stripLastNewline(const QString &in)
return in;
}
-Utils::SynchronousProcessResponse
-VcsBaseClientImpl::vcsFullySynchronousExec(const QString &workingDir, const Utils::FileName &binary,
+SynchronousProcessResponse
+VcsBaseClientImpl::vcsFullySynchronousExec(const QString &workingDir, const FileName &binary,
const QStringList &args, unsigned flags,
int timeoutS, QTextCodec *codec) const
{
@@ -205,7 +207,7 @@ void VcsBaseClientImpl::annotateRevisionRequested(const QString &workingDirector
annotate(workingDirectory, file, changeCopy, line);
}
-Utils::SynchronousProcessResponse
+SynchronousProcessResponse
VcsBaseClientImpl::vcsFullySynchronousExec(const QString &workingDir, const QStringList &args,
unsigned flags, int timeoutS, QTextCodec *codec) const
{
@@ -226,10 +228,10 @@ VcsCommand *VcsBaseClientImpl::vcsExec(const QString &workingDirectory, const QS
return command;
}
-Utils::SynchronousProcessResponse VcsBaseClientImpl::vcsSynchronousExec(const QString &workingDir,
- const QStringList &args,
- unsigned flags,
- QTextCodec *outputCodec) const
+SynchronousProcessResponse VcsBaseClientImpl::vcsSynchronousExec(const QString &workingDir,
+ const QStringList &args,
+ unsigned flags,
+ QTextCodec *outputCodec) const
{
return VcsBasePlugin::runVcs(workingDir, vcsBinary(), args, vcsTimeoutS(), flags,
outputCodec, processEnvironment());
@@ -316,8 +318,8 @@ bool VcsBaseClient::synchronousCreateRepository(const QString &workingDirectory,
{
QStringList args(vcsCommandString(CreateRepositoryCommand));
args << extraOptions;
- Utils::SynchronousProcessResponse result = vcsFullySynchronousExec(workingDirectory, args);
- if (result.result != Utils::SynchronousProcessResponse::Finished)
+ SynchronousProcessResponse result = vcsFullySynchronousExec(workingDirectory, args);
+ if (result.result != SynchronousProcessResponse::Finished)
return false;
VcsOutputWindow::append(result.stdOut());
@@ -335,9 +337,9 @@ bool VcsBaseClient::synchronousClone(const QString &workingDir,
args << vcsCommandString(CloneCommand)
<< extraOptions << srcLocation << dstLocation;
- Utils::SynchronousProcessResponse result = vcsFullySynchronousExec(workingDir, args);
+ SynchronousProcessResponse result = vcsFullySynchronousExec(workingDir, args);
resetCachedVcsInfo(workingDir);
- return result.result == Utils::SynchronousProcessResponse::Finished;
+ return result.result == SynchronousProcessResponse::Finished;
}
bool VcsBaseClient::synchronousAdd(const QString &workingDir, const QString &filename,
@@ -345,7 +347,7 @@ bool VcsBaseClient::synchronousAdd(const QString &workingDir, const QString &fil
{
QStringList args;
args << vcsCommandString(AddCommand) << extraOptions << filename;
- return vcsFullySynchronousExec(workingDir, args).result == Utils::SynchronousProcessResponse::Finished;
+ return vcsFullySynchronousExec(workingDir, args).result == SynchronousProcessResponse::Finished;
}
bool VcsBaseClient::synchronousRemove(const QString &workingDir, const QString &filename,
@@ -353,7 +355,7 @@ bool VcsBaseClient::synchronousRemove(const QString &workingDir, const QString &
{
QStringList args;
args << vcsCommandString(RemoveCommand) << extraOptions << filename;
- return vcsFullySynchronousExec(workingDir, args).result == Utils::SynchronousProcessResponse::Finished;
+ return vcsFullySynchronousExec(workingDir, args).result == SynchronousProcessResponse::Finished;
}
bool VcsBaseClient::synchronousMove(const QString &workingDir,
@@ -362,7 +364,7 @@ bool VcsBaseClient::synchronousMove(const QString &workingDir,
{
QStringList args;
args << vcsCommandString(MoveCommand) << extraOptions << from << to;
- return vcsFullySynchronousExec(workingDir, args).result == Utils::SynchronousProcessResponse::Finished;
+ return vcsFullySynchronousExec(workingDir, args).result == SynchronousProcessResponse::Finished;
}
bool VcsBaseClient::synchronousPull(const QString &workingDir,
@@ -376,8 +378,8 @@ bool VcsBaseClient::synchronousPull(const QString &workingDir,
VcsCommand::SshPasswordPrompt
| VcsCommand::ShowStdOut
| VcsCommand::ShowSuccessMessage;
- const Utils::SynchronousProcessResponse resp = vcsSynchronousExec(workingDir, args, flags);
- const bool ok = resp.result == Utils::SynchronousProcessResponse::Finished;
+ const SynchronousProcessResponse resp = vcsSynchronousExec(workingDir, args, flags);
+ const bool ok = resp.result == SynchronousProcessResponse::Finished;
if (ok)
emit changed(QVariant(workingDir));
return ok;
@@ -394,8 +396,8 @@ bool VcsBaseClient::synchronousPush(const QString &workingDir,
VcsCommand::SshPasswordPrompt
| VcsCommand::ShowStdOut
| VcsCommand::ShowSuccessMessage;
- const Utils::SynchronousProcessResponse resp = vcsSynchronousExec(workingDir, args, flags);
- return resp.result == Utils::SynchronousProcessResponse::Finished;
+ const SynchronousProcessResponse resp = vcsSynchronousExec(workingDir, args, flags);
+ return resp.result == SynchronousProcessResponse::Finished;
}
VcsBaseEditorWidget *VcsBaseClient::annotate(
@@ -564,7 +566,7 @@ QString VcsBaseClient::vcsCommandString(VcsCommandTag cmd) const
return QString();
}
-Utils::ExitCodeInterpreter VcsBaseClient::exitCodeInterpreter(VcsCommandTag cmd) const
+ExitCodeInterpreter VcsBaseClient::exitCodeInterpreter(VcsCommandTag cmd) const
{
Q_UNUSED(cmd)
return Utils::defaultExitCodeInterpreter;
@@ -640,7 +642,7 @@ QString VcsBaseClient::vcsEditorTitle(const QString &vcsCmd, const QString &sour
{
return vcsBinary().toFileInfo().baseName() +
QLatin1Char(' ') + vcsCmd + QLatin1Char(' ') +
- Utils::FileName::fromString(sourceId).fileName();
+ FileName::fromString(sourceId).fileName();
}
void VcsBaseClient::statusParser(const QString &text)
diff --git a/src/plugins/vcsbase/vcsbaseclientsettings.cpp b/src/plugins/vcsbase/vcsbaseclientsettings.cpp
index 6ddb4a4b00..5fdd9f9b04 100644
--- a/src/plugins/vcsbase/vcsbaseclientsettings.cpp
+++ b/src/plugins/vcsbase/vcsbaseclientsettings.cpp
@@ -34,6 +34,8 @@
#include <QSettings>
#include <QVariant>
+using namespace Utils;
+
namespace {
class SettingValue
@@ -176,7 +178,7 @@ public:
QHash<QString, SettingValue> m_valueHash;
QVariantHash m_defaultValueHash;
QString m_settingsGroup;
- mutable Utils::FileName m_binaryFullPath;
+ mutable FileName m_binaryFullPath;
};
} // namespace Internal
@@ -352,12 +354,12 @@ QVariant::Type VcsBaseClientSettings::valueType(const QString &key) const
return QVariant::Invalid;
}
-Utils::FileName VcsBaseClientSettings::binaryPath() const
+FileName VcsBaseClientSettings::binaryPath() const
{
if (d->m_binaryFullPath.isEmpty()) {
- const Utils::FileNameList searchPaths
- = Utils::transform(searchPathList(), [](const QString &s) { return Utils::FileName::fromString(s); });
- d->m_binaryFullPath = Utils::Environment::systemEnvironment().searchInPath(
+ const FileNameList searchPaths
+ = Utils::transform(searchPathList(), [](const QString &s) { return FileName::fromString(s); });
+ d->m_binaryFullPath = Environment::systemEnvironment().searchInPath(
stringValue(binaryPathKey), searchPaths);
}
return d->m_binaryFullPath;
@@ -365,7 +367,7 @@ Utils::FileName VcsBaseClientSettings::binaryPath() const
QStringList VcsBaseClientSettings::searchPathList() const
{
- return stringValue(pathKey).split(Utils::HostOsInfo::pathListSeparator(), QString::SkipEmptyParts);
+ return stringValue(pathKey).split(HostOsInfo::pathListSeparator(), QString::SkipEmptyParts);
}
QString VcsBaseClientSettings::settingsGroup() const
diff --git a/src/plugins/vcsbase/vcsbaseeditor.cpp b/src/plugins/vcsbase/vcsbaseeditor.cpp
index c79776a8e3..c4382728a7 100644
--- a/src/plugins/vcsbase/vcsbaseeditor.cpp
+++ b/src/plugins/vcsbase/vcsbaseeditor.cpp
@@ -90,6 +90,7 @@
*/
using namespace TextEditor;
+using namespace Utils;
namespace VcsBase {
@@ -563,7 +564,7 @@ public:
QList<AbstractTextCursorHandler *> m_textCursorHandlers;
QPointer<VcsCommand> m_command;
VcsBaseEditorWidget::DescribeFunc m_describeFunc = nullptr;
- Utils::ProgressIndicator *m_progressIndicator = nullptr;
+ ProgressIndicator *m_progressIndicator = nullptr;
bool m_fileLogAnnotateEnabled = false;
bool m_mouseDragging = false;
@@ -867,7 +868,7 @@ void VcsBaseEditorWidget::slotPopulateDiffBrowser()
lastFileName = file;
// ignore any headers
d->m_entrySections.push_back(d->m_entrySections.empty() ? 0 : lineNumber);
- entriesComboBox->addItem(Utils::FileName::fromString(file).fileName());
+ entriesComboBox->addItem(FileName::fromString(file).fileName());
}
}
}
@@ -1397,7 +1398,7 @@ void VcsBaseEditorWidget::setCommand(VcsCommand *command)
}
d->m_command = command;
if (command) {
- d->m_progressIndicator = new Utils::ProgressIndicator(Utils::ProgressIndicatorSize::Large);
+ d->m_progressIndicator = new ProgressIndicator(ProgressIndicatorSize::Large);
d->m_progressIndicator->attachToWidget(this);
connect(command, &VcsCommand::finished, this, &VcsBaseEditorWidget::reportCommandFinished);
QTimer::singleShot(100, this, &VcsBaseEditorWidget::showProgressIndicator);
diff --git a/src/plugins/vcsbase/vcscommand.cpp b/src/plugins/vcsbase/vcscommand.cpp
index 26db328083..af1eac8f32 100644
--- a/src/plugins/vcsbase/vcscommand.cpp
+++ b/src/plugins/vcsbase/vcscommand.cpp
@@ -33,6 +33,8 @@
#include <QProcessEnvironment>
+using namespace Utils;
+
namespace VcsBase {
VcsCommand::VcsCommand(const QString &workingDirectory,
@@ -40,19 +42,19 @@ VcsCommand::VcsCommand(const QString &workingDirectory,
Core::ShellCommand(workingDirectory, environment),
m_preventRepositoryChanged(false)
{
- setOutputProxyFactory([this]() -> Utils::OutputProxy * {
- auto proxy = new Utils::OutputProxy;
+ setOutputProxyFactory([this]() -> OutputProxy * {
+ auto proxy = new OutputProxy;
VcsOutputWindow *outputWindow = VcsOutputWindow::instance();
- connect(proxy, &Utils::OutputProxy::append,
+ connect(proxy, &OutputProxy::append,
outputWindow, [](const QString &txt) { VcsOutputWindow::append(txt); });
- connect(proxy, &Utils::OutputProxy::appendSilently,
+ connect(proxy, &OutputProxy::appendSilently,
outputWindow, &VcsOutputWindow::appendSilently);
- connect(proxy, &Utils::OutputProxy::appendError,
+ connect(proxy, &OutputProxy::appendError,
outputWindow, &VcsOutputWindow::appendError);
- connect(proxy, &Utils::OutputProxy::appendCommand,
+ connect(proxy, &OutputProxy::appendCommand,
outputWindow, &VcsOutputWindow::appendCommand);
- connect(proxy, &Utils::OutputProxy::appendMessage,
+ connect(proxy, &OutputProxy::appendMessage,
outputWindow, &VcsOutputWindow::appendMessage);
return proxy;
@@ -74,12 +76,12 @@ const QProcessEnvironment VcsCommand::processEnvironment() const
return env;
}
-Utils::SynchronousProcessResponse VcsCommand::runCommand(const Utils::FileName &binary,
+SynchronousProcessResponse VcsCommand::runCommand(const FileName &binary,
const QStringList &arguments, int timeoutS,
const QString &workingDirectory,
- const Utils::ExitCodeInterpreter &interpreter)
+ const ExitCodeInterpreter &interpreter)
{
- Utils::SynchronousProcessResponse response
+ SynchronousProcessResponse response
= Core::ShellCommand::runCommand(binary, arguments, timeoutS, workingDirectory,
interpreter);
emitRepositoryChanged(workingDirectory);
@@ -99,7 +101,7 @@ unsigned VcsCommand::processFlags() const
{
unsigned processFlags = 0;
if (!VcsBasePlugin::sshPrompt().isEmpty() && (flags() & SshPasswordPrompt))
- processFlags |= Utils::SynchronousProcess::UnixTerminalDisabled;
+ processFlags |= SynchronousProcess::UnixTerminalDisabled;
return processFlags;
}
diff --git a/src/plugins/vcsbase/vcsoutputwindow.cpp b/src/plugins/vcsbase/vcsoutputwindow.cpp
index 5afe3e2051..5e3e4c1b7c 100644
--- a/src/plugins/vcsbase/vcsoutputwindow.cpp
+++ b/src/plugins/vcsbase/vcsoutputwindow.cpp
@@ -52,6 +52,8 @@
#include <QPoint>
#include <QFileInfo>
+using namespace Utils;
+
/*!
\class VcsBase::VcsBaseOutputWindow
@@ -96,7 +98,7 @@ public:
void appendLinesWithStyle(QString const& s, enum VcsOutputWindow::MessageStyle style, const QString &repository = QString());
protected:
- virtual void contextMenuEvent(QContextMenuEvent *event);
+ void contextMenuEvent(QContextMenuEvent *event) override;
private:
void setFormat(enum VcsOutputWindow::MessageStyle style);
@@ -107,7 +109,7 @@ private:
QTextCharFormat m_warningFormat;
QTextCharFormat m_commandFormat;
QTextCharFormat m_messageFormat;
- Utils::OutputFormatter *m_formatter;
+ OutputFormatter *m_formatter;
};
OutputWindowPlainTextEdit::OutputWindowPlainTextEdit(QWidget *parent) :
@@ -118,7 +120,6 @@ OutputWindowPlainTextEdit::OutputWindowPlainTextEdit(QWidget *parent) :
m_commandFormat(m_defaultFormat),
m_messageFormat(m_defaultFormat)
{
- using Utils::Theme;
setReadOnly(true);
setUndoRedoEnabled(false);
setFrameStyle(QFrame::NoFrame);
@@ -126,7 +127,7 @@ OutputWindowPlainTextEdit::OutputWindowPlainTextEdit(QWidget *parent) :
m_warningFormat.setForeground(Utils::creatorTheme()->color(Theme::OutputPanes_WarningMessageTextColor));
m_commandFormat.setFontWeight(QFont::Bold);
m_messageFormat.setForeground(Utils::creatorTheme()->color(Theme::OutputPanes_MessageOutput));
- m_formatter = new Utils::OutputFormatter;
+ m_formatter = new OutputFormatter;
m_formatter->setPlainTextEdit(this);
Aggregation::Aggregate *agg = new Aggregation::Aggregate;
agg->add(this);
@@ -435,12 +436,12 @@ static inline QString formatArguments(const QStringList &args)
if (i)
str << ' ';
if (arg.startsWith(QString::fromLatin1(passwordOptionC) + QLatin1Char('='))) {
- str << Utils::QtcProcess::quoteArg("--password=********");
+ str << QtcProcess::quoteArg("--password=********");
continue;
}
- str << Utils::QtcProcess::quoteArg(arg);
+ str << QtcProcess::quoteArg(arg);
if (arg == QLatin1String(passwordOptionC)) {
- str << ' ' << Utils::QtcProcess::quoteArg("********");
+ str << ' ' << QtcProcess::quoteArg("********");
i++;
}
}
@@ -448,11 +449,11 @@ static inline QString formatArguments(const QStringList &args)
}
QString VcsOutputWindow::msgExecutionLogEntry(const QString &workingDir,
- const Utils::FileName &executable,
- const QStringList &arguments)
+ const FileName &executable,
+ const QStringList &arguments)
{
const QString args = formatArguments(arguments);
- const QString nativeExecutable = Utils::QtcProcess::quoteArg(executable.toUserOutput());
+ const QString nativeExecutable = QtcProcess::quoteArg(executable.toUserOutput());
if (workingDir.isEmpty())
return tr("Running: %1 %2").arg(nativeExecutable, args) + QLatin1Char('\n');
return tr("Running in %1: %2 %3").
@@ -465,7 +466,7 @@ void VcsOutputWindow::appendShellCommandLine(const QString &text)
}
void VcsOutputWindow::appendCommand(const QString &workingDirectory,
- const Utils::FileName &binary,
+ const FileName &binary,
const QStringList &args)
{
appendShellCommandLine(msgExecutionLogEntry(workingDirectory, binary, args));
diff --git a/src/plugins/vcsbase/vcsprojectcache.cpp b/src/plugins/vcsbase/vcsprojectcache.cpp
index a2ca3987a6..f65c676c63 100644
--- a/src/plugins/vcsbase/vcsprojectcache.cpp
+++ b/src/plugins/vcsbase/vcsprojectcache.cpp
@@ -35,6 +35,8 @@
#include <limits>
+using namespace Utils;
+
namespace {
class PathMatcher
@@ -44,7 +46,7 @@ public:
ProjectExplorer::Project *project() { return m_project; }
void match(ProjectExplorer::Project *project,
- const Utils::FileName &base, const Utils::FileName &child) {
+ const FileName &base, const FileName &child) {
int count = std::numeric_limits<int>::max();
if (child.isChildOf(base)) {
const QString relative = child.toString().mid(base.count() + 1);
@@ -98,7 +100,7 @@ ProjectExplorer::Project *VcsProjectCache::projectFor(const QString &repo)
return m_instance->m_cache.at(0).project;
}
- project = projectForToplevel(Utils::FileName::fromString(repo));
+ project = projectForToplevel(FileName::fromString(repo));
m_instance->m_cache.prepend(CacheNode(repo, project));
while (m_instance->m_cache.count() > 10)
m_instance->m_cache.removeLast();
@@ -121,12 +123,12 @@ void VcsProjectCache::destroy()
delete m_instance;
}
-ProjectExplorer::Project *VcsProjectCache::projectForToplevel(const Utils::FileName &vcsTopLevel)
+ProjectExplorer::Project *VcsProjectCache::projectForToplevel(const FileName &vcsTopLevel)
{
PathMatcher parentMatcher;
PathMatcher childMatcher;
for (ProjectExplorer::Project *project : ProjectExplorer::SessionManager::projects()) {
- const Utils::FileName projectDir = project->projectDirectory();
+ const FileName projectDir = project->projectDirectory();
if (projectDir == vcsTopLevel)
return project;
parentMatcher.match(project, vcsTopLevel, projectDir);
diff --git a/src/plugins/vcsbase/wizard/vcscommandpage.cpp b/src/plugins/vcsbase/wizard/vcscommandpage.cpp
index 6ab67b24f7..6ad605f586 100644
--- a/src/plugins/vcsbase/wizard/vcscommandpage.cpp
+++ b/src/plugins/vcsbase/wizard/vcscommandpage.cpp
@@ -40,6 +40,7 @@
using namespace Core;
using namespace ProjectExplorer;
+using namespace Utils;
namespace VcsBase {
namespace Internal {
@@ -68,8 +69,7 @@ VcsCommandPageFactory::VcsCommandPageFactory()
setTypeIdsSuffix(QLatin1String("VcsCommand"));
}
-Utils::WizardPage *VcsCommandPageFactory::create(JsonWizard *wizard, Id typeId,
- const QVariant &data)
+WizardPage *VcsCommandPageFactory::create(JsonWizard *wizard, Id typeId, const QVariant &data)
{
Q_UNUSED(wizard);
@@ -286,8 +286,8 @@ void VcsCommandPage::delayedInitialize()
extraArgs << tmp;
}
- ShellCommand *command
- = vc->createInitialCheckoutCommand(repo, Utils::FileName::fromString(base),
+ Core::ShellCommand *command
+ = vc->createInitialCheckoutCommand(repo, FileName::fromString(base),
name, extraArgs);
foreach (const JobData &job, m_additionalJobs) {
@@ -310,7 +310,7 @@ void VcsCommandPage::delayedInitialize()
const QString dir = wiz->expander()->expand(job.workDirectory);
const int timeoutS = command->defaultTimeoutS() * job.timeOutFactor;
- command->addJob(Utils::FileName::fromUserInput(commandString), args, timeoutS, dir);
+ command->addJob(FileName::fromUserInput(commandString), args, timeoutS, dir);
}
start(command);
diff --git a/src/plugins/winrt/winrtpackagedeploymentstep.cpp b/src/plugins/winrt/winrtpackagedeploymentstep.cpp
index 9d2710192d..050941e042 100644
--- a/src/plugins/winrt/winrtpackagedeploymentstep.cpp
+++ b/src/plugins/winrt/winrtpackagedeploymentstep.cpp
@@ -95,7 +95,7 @@ bool WinRtPackageDeploymentStep::init(QList<const BuildStep *> &earlierSteps)
ProcessParameters *params = processParameters();
params->setCommand(QLatin1String("windeployqt.exe"));
params->setArguments(args);
- params->setEnvironment(target()->activeBuildConfiguration()->environment());
+ params->setEnvironment(buildConfiguration()->environment());
return AbstractProcessStep::init(earlierSteps);
}
diff --git a/src/shared/clang/clang_installation.pri b/src/shared/clang/clang_installation.pri
index 2d1be60748..4baed36668 100644
--- a/src/shared/clang/clang_installation.pri
+++ b/src/shared/clang/clang_installation.pri
@@ -89,10 +89,20 @@ BIN_EXTENSION =
win32: BIN_EXTENSION = .exe
isEmpty(LLVM_INSTALL_DIR) {
- llvm_config = llvm-config
+ unix {
+ llvm_config = $$system(which llvm-config-6.0)
+ }
+
+ isEmpty(llvm_config) {
+ llvm_config = llvm-config
+ }
} else {
- llvm_config = $$system_quote($$LLVM_INSTALL_DIR/bin/llvm-config)
- requires(exists($$llvm_config$$BIN_EXTENSION))
+ exists($$LLVM_INSTALL_DIR/bin/llvm-config-6.0$$BIN_EXTENSION) {
+ llvm_config = $$system_quote($$LLVM_INSTALL_DIR/bin/llvm-config-6.0)
+ } else {
+ llvm_config = $$system_quote($$LLVM_INSTALL_DIR/bin/llvm-config)
+ requires(exists($$llvm_config$$BIN_EXTENSION))
+ }
}
output = $$system($$llvm_config --version, lines)
@@ -150,17 +160,12 @@ isEmpty(LLVM_VERSION) {
!contains(QMAKE_DEFAULT_LIBDIRS, $$LLVM_LIBDIR): LIBCLANG_LIBS = -L$${LLVM_LIBDIR}
LIBCLANG_LIBS += $${CLANG_LIB}
- QTC_NO_CLANG_LIBTOOLING=$$(QTC_NO_CLANG_LIBTOOLING)
- isEmpty(QTC_NO_CLANG_LIBTOOLING) {
- QTC_FORCE_CLANG_LIBTOOLING = $$(QTC_FORCE_CLANG_LIBTOOLING)
- versionIsEqual($$LLVM_VERSION, 6, 0)|!isEmpty(QTC_FORCE_CLANG_LIBTOOLING) {
- !contains(QMAKE_DEFAULT_LIBDIRS, $$LLVM_LIBDIR): LIBTOOLING_LIBS = -L$${LLVM_LIBDIR}
- LIBTOOLING_LIBS += $$CLANGTOOLING_LIBS $$LLVM_STATIC_LIBS
- } else {
- warning("Clang LibTooling is disabled because only version 6.0 is supported.")
- }
+ QTC_ENABLE_CLANG_LIBTOOLING=$$(QTC_ENABLE_CLANG_LIBTOOLING)
+ !isEmpty(QTC_ENABLE_CLANG_LIBTOOLING) {
+ !contains(QMAKE_DEFAULT_LIBDIRS, $$LLVM_LIBDIR): LIBTOOLING_LIBS = -L$${LLVM_LIBDIR}
+ LIBTOOLING_LIBS += $$CLANGTOOLING_LIBS $$LLVM_STATIC_LIBS
} else {
- warning("Clang LibTooling is disabled.")
+ warning("Clang LibTooling is disabled. Set QTC_ENABLE_CLANG_LIBTOOLING to enable it.")
}
contains(QMAKE_DEFAULT_INCDIRS, $$LLVM_INCLUDEPATH): LLVM_INCLUDEPATH =
diff --git a/src/shared/help/topicchooser.cpp b/src/shared/help/topicchooser.cpp
index 6b24ab5f38..b7e5db7f3f 100644
--- a/src/shared/help/topicchooser.cpp
+++ b/src/shared/help/topicchooser.cpp
@@ -64,9 +64,9 @@ TopicChooser::TopicChooser(QWidget *parent, const QString &keyword,
if (m_filterModel->rowCount() != 0)
ui.listWidget->setCurrentIndex(m_filterModel->index(0, 0));
- connect(ui.buttonDisplay, &QPushButton::clicked,
+ connect(ui.buttonBox, &QDialogButtonBox::accepted,
this, &TopicChooser::acceptDialog);
- connect(ui.buttonCancel, &QPushButton::clicked,
+ connect(ui.buttonBox, &QDialogButtonBox::rejected,
this, &TopicChooser::reject);
connect(ui.listWidget, &QListView::activated,
this, &TopicChooser::activated);
diff --git a/src/shared/help/topicchooser.ui b/src/shared/help/topicchooser.ui
index 57ab39b394..b288f8334c 100644
--- a/src/shared/help/topicchooser.ui
+++ b/src/shared/help/topicchooser.ui
@@ -34,53 +34,11 @@
<widget class="QListView" name="listWidget"/>
</item>
<item>
- <layout class="QHBoxLayout" name="unnamed">
- <property name="spacing">
- <number>6</number>
+ <widget class="QDialogButtonBox" name="buttonBox">
+ <property name="standardButtons">
+ <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
- <property name="margin">
- <number>0</number>
- </property>
- <item>
- <spacer name="Horizontal Spacing2">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Expanding</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QPushButton" name="buttonDisplay">
- <property name="text">
- <string>&amp;Display</string>
- </property>
- <property name="autoDefault">
- <bool>true</bool>
- </property>
- <property name="default">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="buttonCancel">
- <property name="text">
- <string>&amp;Close</string>
- </property>
- <property name="autoDefault">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- </layout>
+ </widget>
</item>
</layout>
</widget>
diff --git a/src/shared/modeltest/modeltest.cpp b/src/shared/modeltest/modeltest.cpp
index 4af993fd57..2dfb296b46 100644
--- a/src/shared/modeltest/modeltest.cpp
+++ b/src/shared/modeltest/modeltest.cpp
@@ -33,7 +33,7 @@
Connect to all of the models signals. Whenever anything happens
recheck everything.
*/
-ModelTest::ModelTest(QAbstractItemModel *_model, QObject *parent) : QObject(parent), model(_model), fetchingMore(false)
+ModelTest::ModelTest(QAbstractItemModel *_model, QObject *parent) : QObject(parent), model(_model)
{
Q_ASSERT(model);
diff --git a/src/shared/modeltest/modeltest.h b/src/shared/modeltest/modeltest.h
index e3f3c8aa34..5bdc24f598 100644
--- a/src/shared/modeltest/modeltest.h
+++ b/src/shared/modeltest/modeltest.h
@@ -34,7 +34,7 @@ class ModelTest : public QObject
Q_OBJECT
public:
- ModelTest(QAbstractItemModel *model, QObject *parent = 0);
+ ModelTest(QAbstractItemModel *model, QObject *parent = nullptr);
private Q_SLOTS:
void nonDestructiveBasicTest();
@@ -69,7 +69,7 @@ private:
QStack<Changing> insert;
QStack<Changing> remove;
- bool fetchingMore;
+ bool fetchingMore = false;
QList<QPersistentModelIndex> changing;
};
diff --git a/src/shared/registryaccess/registryaccess.cpp b/src/shared/registryaccess/registryaccess.cpp
index e37185e507..728aa41d7e 100644
--- a/src/shared/registryaccess/registryaccess.cpp
+++ b/src/shared/registryaccess/registryaccess.cpp
@@ -39,7 +39,7 @@ static QString winErrorMessage(unsigned long error)
const int len = FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
- NULL, error, 0, (LPTSTR)&lpMsgBuf, 0, NULL);
+ nullptr, error, 0, (LPTSTR)&lpMsgBuf, 0, nullptr);
if (len) {
rc = QString::fromUtf16(lpMsgBuf, len);
LocalFree(lpMsgBuf);
@@ -63,14 +63,14 @@ static bool registryReadBinaryKey(HKEY handle, // HKEY_LOCAL_MACHINE, etc.
DWORD type;
DWORD size;
// get size and retrieve
- LONG rc = RegQueryValueEx(handle, valueName, 0, &type, 0, &size);
+ LONG rc = RegQueryValueEx(handle, valueName, nullptr, &type, nullptr, &size);
if (rc != ERROR_SUCCESS) {
*errorMessage = msgRegistryOperationFailed("read", valueName, msgFunctionFailed("RegQueryValueEx1", rc));
return false;
}
- BYTE *dataC = new BYTE[size + 1];
+ auto dataC = new BYTE[size + 1];
// Will be Utf16 in case of a string
- rc = RegQueryValueEx(handle, valueName, 0, &type, dataC, &size);
+ rc = RegQueryValueEx(handle, valueName, nullptr, &type, dataC, &size);
if (rc != ERROR_SUCCESS) {
*errorMessage = msgRegistryOperationFailed("read", valueName, msgFunctionFailed("RegQueryValueEx2", rc));
return false;
diff --git a/src/shared/registryaccess/registryaccess.h b/src/shared/registryaccess/registryaccess.h
index 26c5032767..2880aa6677 100644
--- a/src/shared/registryaccess/registryaccess.h
+++ b/src/shared/registryaccess/registryaccess.h
@@ -81,6 +81,6 @@ inline bool openRegistryKey(HKEY category, const WCHAR *key, bool readWrite, HKE
QString debuggerCall(const QString &additionalOption = QString());
-bool isRegistered(HKEY handle, const QString &call, QString *errorMessage, QString *oldDebugger = 0);
+bool isRegistered(HKEY handle, const QString &call, QString *errorMessage, QString *oldDebugger = nullptr);
} // namespace RegistryAccess
diff --git a/src/tools/buildoutputparser/buildoutputparser.pro b/src/tools/buildoutputparser/buildoutputparser.pro
index 53cb6b4434..3a0bce085f 100644
--- a/src/tools/buildoutputparser/buildoutputparser.pro
+++ b/src/tools/buildoutputparser/buildoutputparser.pro
@@ -6,8 +6,6 @@ include(../../qtcreatortool.pri)
TARGET = buildoutputparser
-win32|equals(TEST, 1):DEFINES += HAS_MSVC_PARSER
-
SOURCES = \
main.cpp \
outputprocessor.cpp
diff --git a/src/tools/buildoutputparser/buildoutputparser.qbs b/src/tools/buildoutputparser/buildoutputparser.qbs
index ad021e2a38..7c92954569 100644
--- a/src/tools/buildoutputparser/buildoutputparser.qbs
+++ b/src/tools/buildoutputparser/buildoutputparser.qbs
@@ -15,6 +15,4 @@ QtcTool {
condition: qbs.targetOS.contains("unix") && !qbs.targetOS.contains("darwin")
cpp.rpaths: base.concat(["$ORIGIN/../" + qtc.ide_plugin_path])
}
- cpp.defines: base.concat(qbs.targetOS.contains("windows") || qtc.testsEnabled
- ? ["HAS_MSVC_PARSER"] : [])
}
diff --git a/src/tools/buildoutputparser/main.cpp b/src/tools/buildoutputparser/main.cpp
index 78556f9f29..6fe0255702 100644
--- a/src/tools/buildoutputparser/main.cpp
+++ b/src/tools/buildoutputparser/main.cpp
@@ -52,13 +52,7 @@ static void printUsage()
{
fprintf(stderr, "Usage: %s [--type <compiler type>] <file>\n",
qPrintable(QFileInfo(QCoreApplication::applicationFilePath()).fileName()));
- fprintf(stderr, "Possible compiler types: gcc, clang%s. Default is gcc.\n",
-#ifdef HAS_MSVC_PARSER
- ", msvc"
-#else
- ""
-#endif
- );
+ fprintf(stderr, "Possible compiler types: gcc, clang, msvc. Default is gcc.\n");
}
int main(int argc, char *argv[])
@@ -83,10 +77,8 @@ int main(int argc, char *argv[])
compilerType = CompilerTypeGcc;
} else if (typeString == QLatin1String("clang")) {
compilerType = CompilerTypeClang;
-#ifdef HAS_MSVC_PARSER
} else if (typeString == QLatin1String("msvc")) {
compilerType = CompilerTypeMsvc;
-#endif
} else {
fprintf(stderr, "Invalid compiler type '%s'.\n", qPrintable(typeString));
printUsage();
diff --git a/src/tools/buildoutputparser/outputprocessor.cpp b/src/tools/buildoutputparser/outputprocessor.cpp
index 103a2d6b1f..3922d0fc0b 100644
--- a/src/tools/buildoutputparser/outputprocessor.cpp
+++ b/src/tools/buildoutputparser/outputprocessor.cpp
@@ -28,14 +28,12 @@
#include <projectexplorer/clangparser.h>
#include <projectexplorer/gccparser.h>
#include <projectexplorer/gnumakeparser.h>
+#include <projectexplorer/msvcparser.h>
#include <projectexplorer/osparser.h>
#include <qmakeprojectmanager/qmakeparser.h>
#include <qtsupport/qtparser.h>
#include <utils/fileutils.h>
-#ifdef HAS_MSVC_PARSER
-#include <projectexplorer/msvcparser.h>
-#endif
#include <QIODevice>
#include <QTextStream>
@@ -67,11 +65,9 @@ void CompilerOutputProcessor::start()
case CompilerTypeClang:
parser.appendOutputParser(new ProjectExplorer::ClangParser);
break;
-#ifdef HAS_MSVC_PARSER
case CompilerTypeMsvc:
parser.appendOutputParser(new ProjectExplorer::MsvcParser);
break;
-#endif
}
connect(&parser, &ProjectExplorer::IOutputParser::addTask,
diff --git a/src/tools/buildoutputparser/outputprocessor.h b/src/tools/buildoutputparser/outputprocessor.h
index 3dc1c25df9..5595c39004 100644
--- a/src/tools/buildoutputparser/outputprocessor.h
+++ b/src/tools/buildoutputparser/outputprocessor.h
@@ -34,10 +34,8 @@ namespace ProjectExplorer { class Task; }
enum CompilerType {
CompilerTypeGcc,
- CompilerTypeClang
-#ifdef HAS_MSVC_PARSER
- , CompilerTypeMsvc
-#endif
+ CompilerTypeClang,
+ CompilerTypeMsvc
};
class CompilerOutputProcessor : public QObject
diff --git a/src/tools/clangbackend/source/clangbackend_global.h b/src/tools/clangbackend/source/clangbackend_global.h
index ff25ddeb81..658e2e8fb1 100644
--- a/src/tools/clangbackend/source/clangbackend_global.h
+++ b/src/tools/clangbackend/source/clangbackend_global.h
@@ -56,4 +56,9 @@ enum class PreferredTranslationUnit
# define IS_SKIPWARNINGSFROMINCLUDEDFILES_SUPPORTED
#endif
+// CLANG-UPGRADE-CHECK: Remove IS_COMPLETION_FIXITS_BACKPORTED once we require clang >= 7.0
+#if defined(CINDEX_VERSION_HAS_COMPLETION_FIXITS_BACKPORTED) || CINDEX_VERSION_MINOR >= 49
+# define IS_COMPLETION_FIXITS_BACKPORTED
+#endif
+
} // namespace ClangBackEnd
diff --git a/src/tools/clangbackend/source/clangcodecompleteresults.cpp b/src/tools/clangbackend/source/clangcodecompleteresults.cpp
index af80d739bf..818aa9360e 100644
--- a/src/tools/clangbackend/source/clangcodecompleteresults.cpp
+++ b/src/tools/clangbackend/source/clangcodecompleteresults.cpp
@@ -56,24 +56,12 @@ bool ClangCodeCompleteResults::hasResults() const
return !isNull() && !isEmpty();
}
-bool ClangCodeCompleteResults::hasNoResultsForDotCompletion() const
-{
- return !hasResults() && isDotCompletion();
-}
-
bool ClangCodeCompleteResults::hasUnknownContext() const
{
const unsigned long long contexts = clang_codeCompleteGetContexts(cxCodeCompleteResults);
return contexts == CXCompletionContext_Unknown;
}
-bool ClangCodeCompleteResults::isDotCompletion() const
-{
- const unsigned long long contexts = clang_codeCompleteGetContexts(cxCodeCompleteResults);
-
- return contexts & CXCompletionContext_DotMemberAccess;
-}
-
CXCodeCompleteResults *ClangCodeCompleteResults::data() const
{
return cxCodeCompleteResults;
diff --git a/src/tools/clangbackend/source/clangcodecompleteresults.h b/src/tools/clangbackend/source/clangcodecompleteresults.h
index 0b1ae11df8..000c424b33 100644
--- a/src/tools/clangbackend/source/clangcodecompleteresults.h
+++ b/src/tools/clangbackend/source/clangcodecompleteresults.h
@@ -49,10 +49,8 @@ public:
bool isEmpty() const;
bool hasResults() const;
- bool hasNoResultsForDotCompletion() const;
bool hasUnknownContext() const;
- bool isDotCompletion() const;
CXCodeCompleteResults *data() const;
diff --git a/src/tools/clangbackend/source/clangcompletecodejob.cpp b/src/tools/clangbackend/source/clangcompletecodejob.cpp
index 50635a6f0d..ad033a9ea5 100644
--- a/src/tools/clangbackend/source/clangcompletecodejob.cpp
+++ b/src/tools/clangbackend/source/clangcompletecodejob.cpp
@@ -50,13 +50,9 @@ IAsyncJob::AsyncPrepareResult CompleteCodeJob::prepareAsyncRun()
TIME_SCOPE_DURATION("CompleteCodeJobRunner");
UnsavedFiles theUnsavedFiles = unsavedFiles;
- const TranslationUnit::CodeCompletionResult results
- = translationUnit.complete(theUnsavedFiles, line, column,
- funcNameStartLine, funcNameStartColumn);
-
CompleteCodeJob::AsyncResult asyncResult;
- asyncResult.completions = results.completions;
- asyncResult.correction = results.correction;
+ asyncResult = translationUnit.complete(theUnsavedFiles, line, column,
+ funcNameStartLine, funcNameStartColumn);
return asyncResult;
});
@@ -69,9 +65,7 @@ void CompleteCodeJob::finalizeAsyncRun()
if (context().isDocumentOpen()) {
const AsyncResult result = asyncResult();
- const CompletionsMessage message(result.completions,
- result.correction,
- context().jobRequest.ticketNumber);
+ const CompletionsMessage message(result, context().jobRequest.ticketNumber);
context().client->completions(message);
}
}
diff --git a/src/tools/clangbackend/source/clangcompletecodejob.h b/src/tools/clangbackend/source/clangcompletecodejob.h
index 4e9c274faf..0d62ce8b94 100644
--- a/src/tools/clangbackend/source/clangcompletecodejob.h
+++ b/src/tools/clangbackend/source/clangcompletecodejob.h
@@ -31,16 +31,10 @@
namespace ClangBackEnd {
-struct CompleteCodeJobResult
-{
- CodeCompletions completions;
- CompletionCorrection correction = CompletionCorrection::NoCorrection;
-};
-
-class CompleteCodeJob : public DocumentJob<CompleteCodeJobResult>
+class CompleteCodeJob : public DocumentJob<CodeCompletions>
{
public:
- using AsyncResult = CompleteCodeJobResult;
+ using AsyncResult = CodeCompletions;
AsyncPrepareResult prepareAsyncRun() override;
void finalizeAsyncRun() override;
diff --git a/src/tools/clangbackend/source/clangjobrequest.cpp b/src/tools/clangbackend/source/clangjobrequest.cpp
index 6d73e82996..adaa320123 100644
--- a/src/tools/clangbackend/source/clangjobrequest.cpp
+++ b/src/tools/clangbackend/source/clangjobrequest.cpp
@@ -268,8 +268,7 @@ void JobRequest::cancelJob(ClangCodeModelClientInterface &client) const
client.tooltip(ToolTipMessage(FileContainer(), ToolTipInfo(), ticketNumber));
break;
case JobRequest::Type::RequestCompletions:
- client.completions(
- CompletionsMessage(CodeCompletions(), CompletionCorrection::NoCorrection, ticketNumber));
+ client.completions(CompletionsMessage(CodeCompletions(), ticketNumber));
break;
case JobRequest::Type::RequestFollowSymbol:
client.followSymbol(
diff --git a/src/tools/clangbackend/source/clangtooltipinfocollector.cpp b/src/tools/clangbackend/source/clangtooltipinfocollector.cpp
index ba0ce0ffd1..201f6fc340 100644
--- a/src/tools/clangbackend/source/clangtooltipinfocollector.cpp
+++ b/src/tools/clangbackend/source/clangtooltipinfocollector.cpp
@@ -44,33 +44,33 @@
namespace ClangBackEnd {
-namespace {
-
-Utf8StringVector qualificationPrefixAsVector(const Cursor &cursor)
+Utf8String qualificationPrefix(const Cursor &cursor)
{
- Utf8StringVector result;
+ // TODO: Implement with qualificationPrefixAsVector()
+ Utf8String qualifiedName;
for (Cursor parent = cursor.semanticParent();
- parent.isValid() && (parent.kind() == CXCursor_Namespace || parent.isCompoundType());
+ parent.isValid() && (parent.kind() == CXCursor_Namespace);
parent = parent.semanticParent()) {
- result.prepend(parent.spelling());
+ qualifiedName = parent.spelling() + Utf8StringLiteral("::") + qualifiedName;
}
- return result;
+ return qualifiedName;
}
-Utf8String qualificationPrefix(const Cursor &cursor)
+namespace {
+
+Utf8StringVector qualificationPrefixAsVector(const Cursor &cursor)
{
- // TODO: Implement with qualificationPrefixAsVector()
- Utf8String qualifiedName;
+ Utf8StringVector result;
for (Cursor parent = cursor.semanticParent();
- parent.isValid() && (parent.kind() == CXCursor_Namespace);
+ parent.isValid() && (parent.kind() == CXCursor_Namespace || parent.isCompoundType());
parent = parent.semanticParent()) {
- qualifiedName = parent.spelling() + Utf8StringLiteral("::") + qualifiedName;
+ result.prepend(parent.spelling());
}
- return qualifiedName;
+ return result;
}
Utf8String displayName(const Cursor &cursor)
diff --git a/src/tools/clangbackend/source/clangtooltipinfocollector.h b/src/tools/clangbackend/source/clangtooltipinfocollector.h
index 8009aa8bf4..ae1609c276 100644
--- a/src/tools/clangbackend/source/clangtooltipinfocollector.h
+++ b/src/tools/clangbackend/source/clangtooltipinfocollector.h
@@ -33,6 +33,7 @@
namespace ClangBackEnd {
+class Cursor;
class UnsavedFiles;
ToolTipInfo collectToolTipInfo(UnsavedFiles &unsavedFiles,
@@ -42,4 +43,6 @@ ToolTipInfo collectToolTipInfo(UnsavedFiles &unsavedFiles,
uint line,
uint column);
+Utf8String qualificationPrefix(const Cursor &cursor);
+
} // namespace ClangBackEnd
diff --git a/src/tools/clangbackend/source/clangtranslationunit.cpp b/src/tools/clangbackend/source/clangtranslationunit.cpp
index 017abdd98f..ad242c7be8 100644
--- a/src/tools/clangbackend/source/clangtranslationunit.cpp
+++ b/src/tools/clangbackend/source/clangtranslationunit.cpp
@@ -111,21 +111,11 @@ bool TranslationUnit::suspend() const
return clang_suspendTranslationUnit(cxTranslationUnit());
}
-TranslationUnit::CodeCompletionResult TranslationUnit::complete(
- UnsavedFiles &unsavedFiles,
- uint line,
- uint column,
- int funcNameStartLine,
- int funcNameStartColumn) const
+CodeCompletions TranslationUnit::complete(UnsavedFiles &unsavedFiles, uint line, uint column,
+ int funcNameStartLine, int funcNameStartColumn) const
{
- CodeCompleter codeCompleter(*this, unsavedFiles);
-
- const CodeCompletions completions = codeCompleter.complete(line, column,
- funcNameStartLine,
- funcNameStartColumn);
- const CompletionCorrection correction = codeCompleter.neededCorrection();
-
- return CodeCompletionResult{completions, correction};
+ return CodeCompleter(*this, unsavedFiles).complete(line, column, funcNameStartLine,
+ funcNameStartColumn);
}
void TranslationUnit::extractAnnotations(
diff --git a/src/tools/clangbackend/source/clangtranslationunit.h b/src/tools/clangbackend/source/clangtranslationunit.h
index ae8741a989..83c8d196a6 100644
--- a/src/tools/clangbackend/source/clangtranslationunit.h
+++ b/src/tools/clangbackend/source/clangtranslationunit.h
@@ -52,12 +52,6 @@ class CommandLineArguments;
class TranslationUnit
{
public:
- struct CodeCompletionResult {
- CodeCompletions completions;
- CompletionCorrection correction;
- };
-
-public:
TranslationUnit(const Utf8String &id,
const Utf8String &filePath,
CXIndex &cxIndex,
@@ -77,8 +71,8 @@ public:
TranslationUnitUpdateResult parse(const TranslationUnitUpdateInput &parseInput) const;
TranslationUnitUpdateResult reparse(const TranslationUnitUpdateInput &parseInput) const;
- CodeCompletionResult complete(UnsavedFiles &unsavedFiles, uint line, uint column,
- int funcNameStartLine, int funcNameStartColumn) const;
+ CodeCompletions complete(UnsavedFiles &unsavedFiles, uint line, uint column,
+ int funcNameStartLine, int funcNameStartColumn) const;
void extractDiagnostics(DiagnosticContainer &firstHeaderErrorDiagnostic,
QVector<DiagnosticContainer> &mainFileDiagnostics) const;
diff --git a/src/tools/clangbackend/source/codecompleter.cpp b/src/tools/clangbackend/source/codecompleter.cpp
index 8fa5c9cce2..a764d2ae5a 100644
--- a/src/tools/clangbackend/source/codecompleter.cpp
+++ b/src/tools/clangbackend/source/codecompleter.cpp
@@ -25,19 +25,20 @@
#include "codecompleter.h"
-#include "clangfilepath.h"
+#include "clangbackend_global.h"
#include "clangcodecompleteresults.h"
-#include "clangstring.h"
-#include "cursor.h"
+#include "clangdocument.h"
#include "clangexceptions.h"
+#include "clangfilepath.h"
+#include "clangstring.h"
+#include "clangtranslationunitupdater.h"
+#include "clangunsavedfilesshallowarguments.h"
#include "codecompletionsextractor.h"
+#include "cursor.h"
#include "sourcelocation.h"
+#include "sourcerange.h"
#include "unsavedfile.h"
#include "unsavedfiles.h"
-#include "clangdocument.h"
-#include "sourcerange.h"
-#include "clangunsavedfilesshallowarguments.h"
-#include "clangtranslationunitupdater.h"
#include <clang-c/Index.h>
@@ -45,12 +46,13 @@ namespace ClangBackEnd {
namespace {
-CodeCompletions toCodeCompletions(const ClangCodeCompleteResults &results)
+CodeCompletions toCodeCompletions(const TranslationUnit &translationUnit,
+ const ClangCodeCompleteResults &results)
{
if (results.isNull())
return CodeCompletions();
- CodeCompletionsExtractor extractor(results.data());
+ CodeCompletionsExtractor extractor(translationUnit.cxTranslationUnit(), results.data());
CodeCompletions codeCompletions = extractor.extractAll();
return codeCompletions;
@@ -85,8 +87,6 @@ CodeCompletions CodeCompleter::complete(uint line, uint column,
int funcNameStartLine,
int funcNameStartColumn)
{
- neededCorrection_ = CompletionCorrection::NoCorrection;
-
// Check if we have a smart pointer completion and get proper constructor signatures in results.
// Results are empty when it's not a smart pointer or this completion failed.
ClangCodeCompleteResults results = completeSmartPointerCreation(line,
@@ -98,14 +98,8 @@ CodeCompletions CodeCompleter::complete(uint line, uint column,
results = completeHelper(line, column);
filterUnknownContextResults(results, unsavedFile(), line, column);
- tryDotArrowCorrectionIfNoResults(results, line, column);
- return toCodeCompletions(results);
-}
-
-CompletionCorrection CodeCompleter::neededCorrection() const
-{
- return neededCorrection_;
+ return toCodeCompletions(translationUnit, results);
}
// For given "make_unique<T>" / "make_shared<T>" / "QSharedPointer<T>::create" return "new T("
@@ -181,7 +175,10 @@ ClangCodeCompleteResults CodeCompleter::completeHelper(uint line, uint column)
uint CodeCompleter::defaultOptions() const
{
uint options = CXCodeComplete_IncludeMacros
- | CXCodeComplete_IncludeCodePatterns;
+ #ifdef IS_COMPLETION_FIXITS_BACKPORTED
+ | CXCodeComplete_IncludeCompletionsWithFixIts
+ #endif
+ | CXCodeComplete_IncludeCodePatterns;
if (TranslationUnitUpdater::defaultParseOptions()
& CXTranslationUnit_IncludeBriefCommentsInCodeCompletion) {
@@ -196,37 +193,5 @@ UnsavedFile &CodeCompleter::unsavedFile()
return unsavedFiles.unsavedFile(translationUnit.filePath());
}
-void CodeCompleter::tryDotArrowCorrectionIfNoResults(ClangCodeCompleteResults &results,
- uint line,
- uint column)
-{
- if (results.hasNoResultsForDotCompletion()) {
- const UnsavedFile &theUnsavedFile = unsavedFile();
- bool positionIsOk = false;
- const uint dotPosition = theUnsavedFile.toUtf8Position(line, column - 1, &positionIsOk);
- if (positionIsOk && theUnsavedFile.hasCharacterAt(dotPosition, '.'))
- results = completeWithArrowInsteadOfDot(line, column, dotPosition);
- }
-}
-
-ClangCodeCompleteResults CodeCompleter::completeWithArrowInsteadOfDot(uint line,
- uint column,
- uint dotPosition)
-{
- ClangCodeCompleteResults results;
- const bool replaced = unsavedFile().replaceAt(dotPosition,
- 1,
- Utf8StringLiteral("->"));
-
- if (replaced) {
- results = completeHelper(line, column + 1);
- if (results.hasResults())
- neededCorrection_ = CompletionCorrection::DotToArrowCorrection;
- filterUnknownContextResults(results, unsavedFile(), line, column+1);
- }
-
- return results;
-}
-
} // namespace ClangBackEnd
diff --git a/src/tools/clangbackend/source/codecompleter.h b/src/tools/clangbackend/source/codecompleter.h
index 2026e9ba2c..6bfe77c09d 100644
--- a/src/tools/clangbackend/source/codecompleter.h
+++ b/src/tools/clangbackend/source/codecompleter.h
@@ -47,29 +47,19 @@ public:
int funcNameStartLine = -1,
int funcNameStartColumn = -1);
- CompletionCorrection neededCorrection() const;
-
private:
uint defaultOptions() const;
UnsavedFile &unsavedFile();
- void tryDotArrowCorrectionIfNoResults(ClangCodeCompleteResults &results,
- uint line,
- uint column);
-
ClangCodeCompleteResults completeHelper(uint line, uint column);
ClangCodeCompleteResults completeSmartPointerCreation(uint line,
uint column,
int funcNameStartLine,
int funcNameStartColumn);
- ClangCodeCompleteResults completeWithArrowInsteadOfDot(uint line,
- uint column,
- uint dotPosition);
private:
TranslationUnit translationUnit;
UnsavedFiles unsavedFiles;
- CompletionCorrection neededCorrection_ = CompletionCorrection::NoCorrection;
};
} // namespace ClangBackEnd
diff --git a/src/tools/clangbackend/source/codecompletionsextractor.cpp b/src/tools/clangbackend/source/codecompletionsextractor.cpp
index c1e0fdeb71..bd961dc4aa 100644
--- a/src/tools/clangbackend/source/codecompletionsextractor.cpp
+++ b/src/tools/clangbackend/source/codecompletionsextractor.cpp
@@ -25,15 +25,19 @@
#include "codecompletionsextractor.h"
+#include "clangbackend_global.h"
#include "clangstring.h"
#include "codecompletionchunkconverter.h"
+#include "sourcerange.h"
#include <QDebug>
namespace ClangBackEnd {
-CodeCompletionsExtractor::CodeCompletionsExtractor(CXCodeCompleteResults *cxCodeCompleteResults)
- : cxCodeCompleteResults(cxCodeCompleteResults)
+CodeCompletionsExtractor::CodeCompletionsExtractor(CXTranslationUnit cxTranslationUnit,
+ CXCodeCompleteResults *cxCodeCompleteResults)
+ : cxTranslationUnit(cxTranslationUnit)
+ , cxCodeCompleteResults(cxCodeCompleteResults)
{
}
@@ -55,6 +59,7 @@ bool CodeCompletionsExtractor::next()
extractBriefComment();
extractCompletionChunks();
adaptPriority();
+ extractRequiredFixIts();
++cxCodeCompleteResultIndex;
@@ -171,6 +176,9 @@ void CodeCompletionsExtractor::extractText()
void CodeCompletionsExtractor::extractMethodCompletionKind()
{
CXCompletionString cxCompletionString = cxCodeCompleteResults->Results[cxCodeCompleteResultIndex].CompletionString;
+
+ const unsigned long long contexts = clang_codeCompleteGetContexts(cxCodeCompleteResults);
+
const uint annotationCount = clang_getCompletionNumAnnotations(cxCompletionString);
for (uint annotationIndex = 0; annotationIndex < annotationCount; ++annotationIndex) {
@@ -187,7 +195,11 @@ void CodeCompletionsExtractor::extractMethodCompletionKind()
}
}
- currentCodeCompletion_.completionKind = CodeCompletion::FunctionCompletionKind;
+ currentCodeCompletion_.completionKind = CodeCompletion::FunctionDefinitionCompletionKind;
+ if ((contexts & CXCompletionContext_DotMemberAccess)
+ || (contexts & CXCompletionContext_ArrowMemberAccess)) {
+ currentCodeCompletion_.completionKind = CodeCompletion::FunctionCompletionKind;
+ }
}
void CodeCompletionsExtractor::extractMacroCompletionKind()
@@ -260,6 +272,27 @@ void CodeCompletionsExtractor::extractCompletionChunks()
currentCodeCompletion_.chunks = CodeCompletionChunkConverter::extract(currentCxCodeCompleteResult.CompletionString);
}
+void CodeCompletionsExtractor::extractRequiredFixIts()
+{
+#ifdef IS_COMPLETION_FIXITS_BACKPORTED
+ unsigned fixItsNumber = clang_getCompletionNumFixIts(cxCodeCompleteResults,
+ cxCodeCompleteResultIndex);
+
+ if (!fixItsNumber)
+ return;
+
+ CXSourceRange range;
+ for (unsigned i = 0; i < fixItsNumber; ++i) {
+ ClangString fixIt = clang_getCompletionFixIt(cxCodeCompleteResults,
+ cxCodeCompleteResultIndex,
+ i,
+ &range);
+ currentCodeCompletion_.requiredFixIts.push_back(
+ FixItContainer(Utf8String(fixIt), SourceRange(cxTranslationUnit, range)));
+ }
+#endif
+}
+
void CodeCompletionsExtractor::adaptPriority()
{
decreasePriorityForDestructors();
diff --git a/src/tools/clangbackend/source/codecompletionsextractor.h b/src/tools/clangbackend/source/codecompletionsextractor.h
index bbb3611bf6..1c5f963c14 100644
--- a/src/tools/clangbackend/source/codecompletionsextractor.h
+++ b/src/tools/clangbackend/source/codecompletionsextractor.h
@@ -38,7 +38,8 @@ namespace ClangBackEnd {
class CodeCompletionsExtractor
{
public:
- CodeCompletionsExtractor(CXCodeCompleteResults *cxCodeCompleteResults);
+ CodeCompletionsExtractor(CXTranslationUnit cxTranslationUnit,
+ CXCodeCompleteResults *cxCodeCompleteResults);
CodeCompletionsExtractor(CodeCompletionsExtractor&) = delete;
CodeCompletionsExtractor &operator=(CodeCompletionsExtractor&) = delete;
@@ -63,6 +64,7 @@ private:
void extractHasParameters();
void extractBriefComment();
void extractCompletionChunks();
+ void extractRequiredFixIts();
void adaptPriority();
void decreasePriorityForNonAvailableCompletions();
@@ -75,6 +77,7 @@ private:
private:
CodeCompletion currentCodeCompletion_;
+ CXTranslationUnit cxTranslationUnit;
CXCompletionResult currentCxCodeCompleteResult;
CXCodeCompleteResults *cxCodeCompleteResults;
uint cxCodeCompleteResultIndex = 0;
diff --git a/src/tools/clangbackend/source/fulltokeninfo.cpp b/src/tools/clangbackend/source/fulltokeninfo.cpp
index 283798d0be..e850e0495c 100644
--- a/src/tools/clangbackend/source/fulltokeninfo.cpp
+++ b/src/tools/clangbackend/source/fulltokeninfo.cpp
@@ -24,6 +24,7 @@
****************************************************************************/
#include "clangstring.h"
+#include "clangtooltipinfocollector.h"
#include "cursor.h"
#include "fulltokeninfo.h"
#include "sourcerange.h"
@@ -46,29 +47,27 @@ FullTokenInfo::operator TokenInfoContainer() const
return TokenInfoContainer(line(), column(), length(), m_types, m_extraInfo);
}
-static Utf8String fullyQualifiedType(const Cursor &cursor)
-{
- Utf8String typeSpelling = cursor.type().canonical().utf8Spelling();
- if (typeSpelling.isEmpty()) {
- // Only if it's the namespaces level.
- typeSpelling = cursor.unifiedSymbolResolution();
- typeSpelling.replace(Utf8StringLiteral("c:@N@"), Utf8StringLiteral(""));
- typeSpelling.replace(Utf8StringLiteral("@N@"), Utf8StringLiteral("::"));
- typeSpelling.replace(Utf8StringLiteral("c:@aN"), Utf8StringLiteral("(anonymous)"));
+static Utf8String fullyQualifiedType(const Cursor &cursor) {
+ Utf8String prefix;
+ if (cursor.kind() == CXCursor_ClassTemplate || cursor.kind() == CXCursor_Namespace) {
+ if (cursor.unifiedSymbolResolution() == "c:@aN")
+ return Utf8String::fromUtf8("(anonymous)");
+ return qualificationPrefix(cursor) + cursor.displayName();
}
- return typeSpelling;
+ return cursor.type().canonical().spelling();
}
void FullTokenInfo::updateTypeSpelling(const Cursor &cursor, bool functionLike)
{
- m_extraInfo.typeSpelling = fullyQualifiedType(cursor);
m_extraInfo.semanticParentTypeSpelling = fullyQualifiedType(cursor.semanticParent());
- if (!functionLike)
+ if (!functionLike) {
+ m_extraInfo.typeSpelling = fullyQualifiedType(cursor);
return;
- Type type = cursor.type().canonical();
+ }
+
m_extraInfo.token = cursor.displayName();
// On the client side full type is typeSpelling + token.
- m_extraInfo.typeSpelling = type.resultType().utf8Spelling();
+ m_extraInfo.typeSpelling = cursor.type().resultType().utf8Spelling();
}
static Utf8String propertyParentSpelling(CXTranslationUnit cxTranslationUnit,
diff --git a/src/tools/clangpchmanagerbackend/source/pchmanagerserver.cpp b/src/tools/clangpchmanagerbackend/source/pchmanagerserver.cpp
index 90d315a0f1..1e9ea5ea46 100644
--- a/src/tools/clangpchmanagerbackend/source/pchmanagerserver.cpp
+++ b/src/tools/clangpchmanagerbackend/source/pchmanagerserver.cpp
@@ -28,6 +28,7 @@
#include <pchmanagerclientinterface.h>
#include <precompiledheadersupdatedmessage.h>
#include <removeprojectpartsmessage.h>
+#include <updategeneratedfilesmessage.h>
#include <updateprojectpartsmessage.h>
#include <utils/smallstring.h>
@@ -54,8 +55,6 @@ void PchManagerServer::end()
void PchManagerServer::updateProjectParts(UpdateProjectPartsMessage &&message)
{
- m_pchCreator.setGeneratedFiles(message.takeGeneratedFiles());
-
m_pchCreator.generatePchs(m_projectParts.update(message.takeProjectsParts()));
m_fileSystemWatcher.updateIdPaths(m_pchCreator.takeProjectsIncludes());
@@ -68,6 +67,16 @@ void PchManagerServer::removeProjectParts(RemoveProjectPartsMessage &&message)
m_projectParts.remove(message.projectsPartIds);
}
+void PchManagerServer::updateGeneratedFiles(UpdateGeneratedFilesMessage &&message)
+{
+ m_pchCreator.setGeneratedFiles(message.takeGeneratedFiles());
+}
+
+void PchManagerServer::removeGeneratedFiles(RemoveGeneratedFilesMessage &&message)
+{
+ // TODO
+}
+
void PchManagerServer::pathsWithIdsChanged(const Utils::SmallStringVector &ids)
{
m_pchCreator.generatePchs(m_projectParts.projects(ids));
diff --git a/src/tools/clangpchmanagerbackend/source/pchmanagerserver.h b/src/tools/clangpchmanagerbackend/source/pchmanagerserver.h
index 0921ce772c..b188b0e6bb 100644
--- a/src/tools/clangpchmanagerbackend/source/pchmanagerserver.h
+++ b/src/tools/clangpchmanagerbackend/source/pchmanagerserver.h
@@ -53,6 +53,8 @@ public:
void end() override;
void updateProjectParts(UpdateProjectPartsMessage &&message) override;
void removeProjectParts(RemoveProjectPartsMessage &&message) override;
+ void updateGeneratedFiles(UpdateGeneratedFilesMessage &&message) override;
+ void removeGeneratedFiles(RemoveGeneratedFilesMessage &&message) override;
void pathsWithIdsChanged(const Utils::SmallStringVector &ids) override;
void pathsChanged(const FilePathIds &filePathIds) override;
diff --git a/src/tools/clangrefactoringbackend/source/clangrefactoringbackend-source.pri b/src/tools/clangrefactoringbackend/source/clangrefactoringbackend-source.pri
index 2a78fc0e11..c0d8efe87a 100644
--- a/src/tools/clangrefactoringbackend/source/clangrefactoringbackend-source.pri
+++ b/src/tools/clangrefactoringbackend/source/clangrefactoringbackend-source.pri
@@ -21,7 +21,8 @@ HEADERS += \
$$PWD/projectpartartefactexception.h \
$$PWD/projectpartartefact.h \
$$PWD/filestatuscache.h \
- $$PWD/indexdataconsumer.h
+ $$PWD/indexdataconsumer.h \
+ $$PWD/projectpartqueue.h
!isEmpty(LIBTOOLING_LIBS) {
SOURCES += \
@@ -66,4 +67,5 @@ SOURCES += \
$$PWD/sourcerangefilter.cpp \
$$PWD/symbolindexer.cpp \
$$PWD/projectpartartefact.cpp \
- $$PWD/filestatuscache.cpp
+ $$PWD/filestatuscache.cpp \
+ $$PWD/projectpartqueue.cpp
diff --git a/src/tools/clangrefactoringbackend/source/collectsymbolsaction.h b/src/tools/clangrefactoringbackend/source/collectsymbolsaction.h
index ad91ecd5c5..59e860b729 100644
--- a/src/tools/clangrefactoringbackend/source/collectsymbolsaction.h
+++ b/src/tools/clangrefactoringbackend/source/collectsymbolsaction.h
@@ -74,8 +74,8 @@ private:
{
clang::index::IndexingOptions options;
- options.SystemSymbolFilter = clang::index::IndexingOptions::SystemSymbolFilterKind::All;
- options.IndexFunctionLocals = true;
+ options.SystemSymbolFilter = clang::index::IndexingOptions::SystemSymbolFilterKind::None;
+ options.IndexFunctionLocals = false;
return options;
}
diff --git a/src/tools/clangrefactoringbackend/source/projectpartqueue.cpp b/src/tools/clangrefactoringbackend/source/projectpartqueue.cpp
new file mode 100644
index 0000000000..d1fdc5a83d
--- /dev/null
+++ b/src/tools/clangrefactoringbackend/source/projectpartqueue.cpp
@@ -0,0 +1,147 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+#include "projectpartqueue.h"
+
+namespace ClangBackEnd {
+
+ProjectPartQueue::ProjectPartQueue()
+{
+
+}
+
+namespace {
+
+template<class InputIt1,
+ class InputIt2,
+ class OutputIt,
+ class Compare,
+ class Merge>
+OutputIt set_union_merge(InputIt1 first1,
+ InputIt1 last1,
+ InputIt2 first2,
+ InputIt2 last2,
+ OutputIt d_first,
+ Compare comp,
+ Merge merge)
+{
+ for (; first1 != last1; ++d_first) {
+ if (first2 == last2)
+ return std::copy(first1, last1, d_first);
+ if (comp(*first2, *first1)) {
+ *d_first = *first2++;
+ } else {
+ if (comp(*first1, *first2)) {
+ *d_first = *first1;
+ } else {
+ *d_first = merge(*first1, *first2);
+ ++first2;
+ }
+ ++first1;
+ }
+ }
+ return std::copy(first2, last2, d_first);
+}
+
+}
+
+void ProjectPartQueue::addProjectParts(V2::ProjectPartContainers &&projectParts)
+{
+ auto compare = [](const V2::ProjectPartContainer &first, const V2::ProjectPartContainer &second) {
+ return first.projectPartId < second.projectPartId;
+ };
+
+ auto merge = [](V2::ProjectPartContainer &&first,
+ V2::ProjectPartContainer &&second) {
+ first.arguments = std::move(second.arguments);
+ first.compilerMacros = std::move(second.compilerMacros);
+ first.includeSearchPaths = std::move(second.includeSearchPaths);
+ FilePathIds headerPathIds;
+ headerPathIds.reserve(first.headerPathIds.size() + second.headerPathIds.size());
+ std::set_union(first.headerPathIds.begin(),
+ first.headerPathIds.end(),
+ second.headerPathIds.begin(),
+ second.headerPathIds.end(),
+ std::back_inserter(headerPathIds));
+ first.headerPathIds = std::move(headerPathIds);
+ FilePathIds sourcePathIds;
+ headerPathIds.reserve(first.sourcePathIds.size() + second.sourcePathIds.size());
+ std::set_union(first.sourcePathIds.begin(),
+ first.sourcePathIds.end(),
+ second.sourcePathIds.begin(),
+ second.sourcePathIds.end(),
+ std::back_inserter(sourcePathIds));
+ first.sourcePathIds = std::move(sourcePathIds);
+
+ return first;
+ };
+
+ V2::ProjectPartContainers mergedProjectParts;
+ mergedProjectParts.reserve(m_projectParts.size() + projectParts.size());
+ set_union_merge(std::make_move_iterator(m_projectParts.begin()),
+ std::make_move_iterator(m_projectParts.end()),
+ std::make_move_iterator(projectParts.begin()),
+ std::make_move_iterator(projectParts.end()),
+ std::back_inserter(mergedProjectParts),
+ compare,
+ merge);
+
+ m_projectParts = std::move(mergedProjectParts);
+}
+
+class CompareDifference
+{
+public:
+ bool operator()(const V2::ProjectPartContainer &first, const Utils::SmallString &second)
+ {
+ return first.projectPartId < second;
+ }
+
+ bool operator()(const Utils::SmallString &first, const V2::ProjectPartContainer &second)
+ {
+ return first < second.projectPartId;
+ }
+};
+
+void ProjectPartQueue::removeProjectParts(const Utils::SmallStringVector &projectsPartIds)
+{
+ V2::ProjectPartContainers notToBeRemovedProjectParts;
+ notToBeRemovedProjectParts.reserve(m_projectParts.size());
+ std::set_difference(std::make_move_iterator(m_projectParts.begin()),
+ std::make_move_iterator(m_projectParts.end()),
+ projectsPartIds.begin(),
+ projectsPartIds.end(),
+ std::back_inserter(notToBeRemovedProjectParts),
+ CompareDifference{});
+
+ m_projectParts = std::move(notToBeRemovedProjectParts);
+}
+
+const V2::ProjectPartContainers &ProjectPartQueue::projectParts() const
+{
+ return m_projectParts;
+}
+
+} // namespace ClangBackEnd
diff --git a/src/tools/clangrefactoringbackend/source/projectpartqueue.h b/src/tools/clangrefactoringbackend/source/projectpartqueue.h
new file mode 100644
index 0000000000..b885a1ccb2
--- /dev/null
+++ b/src/tools/clangrefactoringbackend/source/projectpartqueue.h
@@ -0,0 +1,46 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+#pragma once
+
+#include <projectpartcontainerv2.h>
+
+namespace ClangBackEnd {
+
+class ProjectPartQueue
+{
+public:
+ ProjectPartQueue();
+
+ void addProjectParts(V2::ProjectPartContainers &&projectParts);
+ void removeProjectParts(const Utils::SmallStringVector &projectsPartIds);
+
+ const V2::ProjectPartContainers &projectParts() const;
+
+private:
+ V2::ProjectPartContainers m_projectParts;
+};
+
+} // namespace ClangBackEnd
diff --git a/src/tools/clangrefactoringbackend/source/refactoringserver.cpp b/src/tools/clangrefactoringbackend/source/refactoringserver.cpp
index 68aa24cbcd..799901a520 100644
--- a/src/tools/clangrefactoringbackend/source/refactoringserver.cpp
+++ b/src/tools/clangrefactoringbackend/source/refactoringserver.cpp
@@ -97,12 +97,23 @@ void RefactoringServer::requestSourceRangesForQueryMessage(RequestSourceRangesFo
void RefactoringServer::updateProjectParts(UpdateProjectPartsMessage &&message)
{
- m_symbolIndexing.updateProjectParts(message.takeProjectsParts(), message.takeGeneratedFiles());
+ m_symbolIndexing.updateProjectParts(message.takeProjectsParts(),
+ m_generatedFiles.fileContainers());
+}
+
+void RefactoringServer::updateGeneratedFiles(UpdateGeneratedFilesMessage &&message)
+{
+ m_generatedFiles.update(message.takeGeneratedFiles());
}
void RefactoringServer::removeProjectParts(RemoveProjectPartsMessage &&)
{
+ // TODO
+}
+void RefactoringServer::removeGeneratedFiles(RemoveGeneratedFilesMessage &&message)
+{
+ m_generatedFiles.remove(message.generatedFiles);
}
void RefactoringServer::cancel()
diff --git a/src/tools/clangrefactoringbackend/source/refactoringserver.h b/src/tools/clangrefactoringbackend/source/refactoringserver.h
index 1823174335..ce18aaf548 100644
--- a/src/tools/clangrefactoringbackend/source/refactoringserver.h
+++ b/src/tools/clangrefactoringbackend/source/refactoringserver.h
@@ -31,6 +31,7 @@
#include <ipcclientprovider.h>
#include <filepathcachinginterface.h>
+#include <generatedfiles.h>
#include <utils/smallstring.h>
@@ -62,7 +63,10 @@ public:
void requestSourceRangesAndDiagnosticsForQueryMessage(RequestSourceRangesAndDiagnosticsForQueryMessage &&message) override;
void requestSourceRangesForQueryMessage(RequestSourceRangesForQueryMessage &&message) override;
void updateProjectParts(UpdateProjectPartsMessage &&message) override;
+ void updateGeneratedFiles(UpdateGeneratedFilesMessage &&message) override;
void removeProjectParts(RemoveProjectPartsMessage &&message) override;
+ void removeGeneratedFiles(RemoveGeneratedFilesMessage &&message) override;
+
void cancel() override;
bool isCancelingJobs() const;
@@ -81,6 +85,7 @@ private:
private:
ClangQueryGatherer m_gatherer;
+ GeneratedFiles m_generatedFiles;
QTimer m_pollTimer;
SymbolIndexingInterface &m_symbolIndexing;
FilePathCachingInterface &m_filePathCache;
diff --git a/src/tools/clangrefactoringbackend/source/symbolindexer.cpp b/src/tools/clangrefactoringbackend/source/symbolindexer.cpp
index 51785e7870..58450cdc4d 100644
--- a/src/tools/clangrefactoringbackend/source/symbolindexer.cpp
+++ b/src/tools/clangrefactoringbackend/source/symbolindexer.cpp
@@ -43,7 +43,7 @@ SymbolIndexer::SymbolIndexer(SymbolsCollectorInterface &symbolsCollector,
pathWatcher.setNotifier(this);
}
-void SymbolIndexer::updateProjectParts(V2::ProjectPartContainers &&projectParts, V2::FileContainers &&generatedFiles)
+void SymbolIndexer::updateProjectParts(V2::ProjectPartContainers &&projectParts, const V2::FileContainers &generatedFiles)
{
for (V2::ProjectPartContainer &projectPart : projectParts)
updateProjectPart(std::move(projectPart), generatedFiles);
diff --git a/src/tools/clangrefactoringbackend/source/symbolindexer.h b/src/tools/clangrefactoringbackend/source/symbolindexer.h
index 42ab387662..4fc66fee0f 100644
--- a/src/tools/clangrefactoringbackend/source/symbolindexer.h
+++ b/src/tools/clangrefactoringbackend/source/symbolindexer.h
@@ -46,7 +46,7 @@ public:
Sqlite::TransactionInterface &transactionInterface);
void updateProjectParts(V2::ProjectPartContainers &&projectParts,
- V2::FileContainers &&generatedFiles);
+ const V2::FileContainers &generatedFiles);
void updateProjectPart(V2::ProjectPartContainer &&projectPart,
const V2::FileContainers &generatedFiles);
diff --git a/src/tools/clangrefactoringbackend/source/symbolindexing.cpp b/src/tools/clangrefactoringbackend/source/symbolindexing.cpp
index a9e772b168..c1e934eb2e 100644
--- a/src/tools/clangrefactoringbackend/source/symbolindexing.cpp
+++ b/src/tools/clangrefactoringbackend/source/symbolindexing.cpp
@@ -27,9 +27,10 @@
namespace ClangBackEnd {
-void SymbolIndexing::updateProjectParts(V2::ProjectPartContainers &&projectParts, V2::FileContainers &&generatedFiles)
+void SymbolIndexing::updateProjectParts(V2::ProjectPartContainers &&projectParts,
+ const V2::FileContainers &generatedFiles)
{
- m_indexer.updateProjectParts(std::move(projectParts), std::move(generatedFiles));
+ m_indexer.updateProjectParts(std::move(projectParts), generatedFiles);
}
} // namespace ClangBackEnd
diff --git a/src/tools/clangrefactoringbackend/source/symbolindexing.h b/src/tools/clangrefactoringbackend/source/symbolindexing.h
index ffd2936986..f6c4e79628 100644
--- a/src/tools/clangrefactoringbackend/source/symbolindexing.h
+++ b/src/tools/clangrefactoringbackend/source/symbolindexing.h
@@ -62,7 +62,7 @@ public:
}
void updateProjectParts(V2::ProjectPartContainers &&projectParts,
- V2::FileContainers &&generatedFiles);
+ const V2::FileContainers &generatedFiles) override;
private:
FilePathCachingInterface &m_filePathCache;
diff --git a/src/tools/clangrefactoringbackend/source/symbolindexinginterface.h b/src/tools/clangrefactoringbackend/source/symbolindexinginterface.h
index 72806e54a1..0151f29f7e 100644
--- a/src/tools/clangrefactoringbackend/source/symbolindexinginterface.h
+++ b/src/tools/clangrefactoringbackend/source/symbolindexinginterface.h
@@ -38,7 +38,7 @@ public:
SymbolIndexingInterface &operator=(const SymbolIndexingInterface&) = delete;
virtual void updateProjectParts(V2::ProjectPartContainers &&projectParts,
- V2::FileContainers &&generatedFiles) = 0;
+ const V2::FileContainers &generatedFiles) = 0;
protected:
~SymbolIndexingInterface() = default;
diff --git a/src/tools/iconlister/iconlister.cpp b/src/tools/iconlister/iconlister.cpp
index 06bacd31ba..509214cc25 100644
--- a/src/tools/iconlister/iconlister.cpp
+++ b/src/tools/iconlister/iconlister.cpp
@@ -311,8 +311,7 @@ void IconLister::addProjectExplorerIcons()
{MODE_PROJECT_FLAT_ACTIVE.icon(), "MODE_PROJECT_FLAT_ACTIVE", prefix,
""},
- {OPTIONS_CATEGORY_KITS.icon(), "OPTIONS_CATEGORY_KITS", prefix,
- ""},
+ {Utils::Icon({{":/projectexplorer/images/settingscategory_kits.png", Utils::Theme::PanelTextColorDark}}, Utils::Icon::Tint).icon(), "OPTIONS_CATEGORY_KITS", prefix, ""},
{QIcon(":/projectexplorer/images/fileoverlay_qml.png"), "fileoverlay_qml.png", prefix,
""},
@@ -824,55 +823,56 @@ void IconLister::addUtilsIcons()
void IconLister::addCPlusPlusIcons()
{
+ using namespace Utils::CodeModelIcon;
const QString prefix = "CPlusPlus";
const QList<IconInfo> icons = {
- {CPlusPlus::Icons::iconForType(CPlusPlus::Icons::ClassIconType), "ClassIconType", prefix,
+ {iconForType(Class), "Class", prefix,
""},
- {CPlusPlus::Icons::iconForType(CPlusPlus::Icons::StructIconType), "StructIconType", prefix,
+ {iconForType(Struct), "Struct", prefix,
""},
- {CPlusPlus::Icons::iconForType(CPlusPlus::Icons::EnumIconType), "EnumIconType", prefix,
+ {iconForType(Enum), "Enum", prefix,
""},
- {CPlusPlus::Icons::iconForType(CPlusPlus::Icons::EnumeratorIconType), "EnumeratorIconType", prefix,
+ {iconForType(Enumerator), "Enumerator", prefix,
""},
- {CPlusPlus::Icons::iconForType(CPlusPlus::Icons::FuncPublicIconType), "FuncPublicIconType", prefix,
+ {iconForType(FuncPublic), "FuncPublic", prefix,
""},
- {CPlusPlus::Icons::iconForType(CPlusPlus::Icons::FuncProtectedIconType), "FuncProtectedIconType", prefix,
+ {iconForType(FuncProtected), "FuncProtected", prefix,
""},
- {CPlusPlus::Icons::iconForType(CPlusPlus::Icons::FuncPrivateIconType), "FuncPrivateIconType", prefix,
+ {iconForType(FuncPrivate), "FuncPrivate", prefix,
""},
- {CPlusPlus::Icons::iconForType(CPlusPlus::Icons::FuncPublicStaticIconType), "FuncPublicStaticIconType", prefix,
+ {iconForType(FuncPublicStatic), "FuncPublicStatic", prefix,
""},
- {CPlusPlus::Icons::iconForType(CPlusPlus::Icons::FuncProtectedStaticIconType), "FuncProtectedStaticIconType", prefix,
+ {iconForType(FuncProtectedStatic), "FuncProtectedStatic", prefix,
""},
- {CPlusPlus::Icons::iconForType(CPlusPlus::Icons::FuncPrivateStaticIconType), "FuncPrivateStaticIconType", prefix,
+ {iconForType(FuncPrivateStatic), "FuncPrivateStatic", prefix,
""},
- {CPlusPlus::Icons::iconForType(CPlusPlus::Icons::NamespaceIconType), "NamespaceIconType", prefix,
+ {iconForType(Namespace), "Namespace", prefix,
""},
- {CPlusPlus::Icons::iconForType(CPlusPlus::Icons::VarPublicIconType), "VarPublicIconType", prefix,
+ {iconForType(VarPublic), "VarPublic", prefix,
""},
- {CPlusPlus::Icons::iconForType(CPlusPlus::Icons::VarProtectedIconType), "VarProtectedIconType", prefix,
+ {iconForType(VarProtected), "VarProtected", prefix,
""},
- {CPlusPlus::Icons::iconForType(CPlusPlus::Icons::VarPrivateIconType), "VarPrivateIconType", prefix,
+ {iconForType(VarPrivate), "VarPrivate", prefix,
""},
- {CPlusPlus::Icons::iconForType(CPlusPlus::Icons::VarPublicStaticIconType), "VarPublicStaticIconType", prefix,
+ {iconForType(VarPublicStatic), "VarPublicStatic", prefix,
""},
- {CPlusPlus::Icons::iconForType(CPlusPlus::Icons::VarProtectedStaticIconType), "VarProtectedStaticIconType", prefix,
+ {iconForType(VarProtectedStatic), "VarProtectedStatic", prefix,
""},
- {CPlusPlus::Icons::iconForType(CPlusPlus::Icons::VarPrivateStaticIconType), "VarPrivateStaticIconType", prefix,
+ {iconForType(VarPrivateStatic), "VarPrivateStatic", prefix,
""},
- {CPlusPlus::Icons::iconForType(CPlusPlus::Icons::SignalIconType), "SignalIconType", prefix,
+ {iconForType(Signal), "Signal", prefix,
""},
- {CPlusPlus::Icons::iconForType(CPlusPlus::Icons::SlotPublicIconType), "SlotPublicIconType", prefix,
+ {iconForType(SlotPublic), "SlotPublic", prefix,
""},
- {CPlusPlus::Icons::iconForType(CPlusPlus::Icons::SlotProtectedIconType), "SlotProtectedIconType", prefix,
+ {iconForType(SlotProtected), "SlotProtected", prefix,
""},
- {CPlusPlus::Icons::iconForType(CPlusPlus::Icons::SlotPrivateIconType), "SlotPrivateIconType", prefix,
+ {iconForType(SlotPrivate), "SlotPrivate", prefix,
""},
- {CPlusPlus::Icons::iconForType(CPlusPlus::Icons::KeywordIconType), "KeywordIconType", prefix,
+ {iconForType(Keyword), "Keyword", prefix,
""},
- {CPlusPlus::Icons::iconForType(CPlusPlus::Icons::MacroIconType), "MacroIconType", prefix,
+ {iconForType(Macro), "Macro", prefix,
""},
- {CPlusPlus::Icons::iconForType(CPlusPlus::Icons::PropertyIconType), "PropertyIconType", prefix,
+ {iconForType(Property), "Property", prefix,
""}
};
m_icons.append(icons);
@@ -1030,19 +1030,19 @@ void IconLister::addQmlDesignerIcons()
void IconLister::addProfilerTimelineIcons()
{
- Q_INIT_RESOURCE(timeline);
+ Q_INIT_RESOURCE(tracing);
using namespace Utils;
const QString prefix = "Profiler";
const QList<IconInfo> icons = {
- {Icon({{":/timeline/ico_rangeselection.png", Theme::IconsBaseColor}}).icon(), "rangeselection", prefix,
+ {Icon({{":/tracing/ico_rangeselection.png", Theme::IconsBaseColor}}).icon(), "rangeselection", prefix,
""},
- {Icon({{":/timeline/ico_rangeselected.png", Theme::IconsBaseColor}}).icon(), "rangeselected", prefix,
+ {Icon({{":/tracing/ico_rangeselected.png", Theme::IconsBaseColor}}).icon(), "rangeselected", prefix,
""},
- {Icon({{":/timeline/ico_selectionmode.png", Theme::IconsBaseColor}}).icon(), "selectionmode", prefix,
+ {Icon({{":/tracing/ico_selectionmode.png", Theme::IconsBaseColor}}).icon(), "selectionmode", prefix,
""},
- {Icon({{":/timeline/ico_edit.png", Theme::IconsBaseColor}}).icon(), "edit", prefix,
+ {Icon({{":/tracing/ico_edit.png", Theme::IconsBaseColor}}).icon(), "edit", prefix,
""},
- {Icon({{":/timeline/range_handle.png", Theme::IconsBaseColor}}).icon(), "range_handle", prefix,
+ {Icon({{":/tracing/range_handle.png", Theme::IconsBaseColor}}).icon(), "range_handle", prefix,
""},
};
m_icons.append(icons);
diff --git a/src/tools/iconlister/iconlister.pro b/src/tools/iconlister/iconlister.pro
index 0fdfbfed4d..371b01a281 100644
--- a/src/tools/iconlister/iconlister.pro
+++ b/src/tools/iconlister/iconlister.pro
@@ -35,7 +35,7 @@ RESOURCES += \
$$IDE_SOURCE_TREE/src/plugins/android/android.qrc \
$$IDE_SOURCE_TREE/src/plugins/qnx/qnx.qrc \
$$IDE_SOURCE_TREE/src/plugins/winrt/winrt.qrc \
- $$IDE_SOURCE_TREE/src/libs/timeline/qml/timeline.qrc \
+ $$IDE_SOURCE_TREE/src/libs/tracing/qml/tracing.qrc \
DEFINES += \
IDE_SOURCE_TREE='\\"$$IDE_SOURCE_TREE\\"'
diff --git a/src/tools/icons/qtcreatoricons.svg b/src/tools/icons/qtcreatoricons.svg
index 66fa8dfc87..95f5e2fb3a 100644
--- a/src/tools/icons/qtcreatoricons.svg
+++ b/src/tools/icons/qtcreatoricons.svg
@@ -6275,7 +6275,7 @@
style="display:inline" />
</g>
<g
- id="src/libs/cplusplus/images/member"
+ id="src/libs/utils/images/member"
transform="translate(-28,0)">
<rect
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-opacity:1"
@@ -6292,7 +6292,7 @@
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<g
- id="src/libs/cplusplus/images/signal">
+ id="src/libs/utils/images/signal">
<rect
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-opacity:1"
id="rect4853-8-7"
@@ -6355,7 +6355,7 @@
</g>
<g
transform="translate(4,0)"
- id="src/libs/cplusplus/images/slot">
+ id="src/libs/utils/images/slot">
<rect
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-opacity:1"
id="rect4853-8-0"
@@ -6385,7 +6385,7 @@
height="100%" />
</g>
<g
- id="src/libs/cplusplus/images/protected"
+ id="src/libs/utils/images/protected"
transform="translate(36,0)">
<rect
y="552"
@@ -6418,7 +6418,7 @@
</g>
</g>
<g
- id="src/libs/cplusplus/images/protectedbackground"
+ id="src/libs/utils/images/protectedbackground"
transform="translate(52,0)">
<rect
y="552"
@@ -6451,7 +6451,7 @@
</g>
</g>
<g
- id="src/libs/cplusplus/images/private"
+ id="src/libs/utils/images/private"
transform="translate(36,0)">
<rect
y="552"
@@ -6497,7 +6497,7 @@
sodipodi:nodetypes="zzzzz" />
</g>
<g
- id="src/libs/cplusplus/images/privatebackground"
+ id="src/libs/utils/images/privatebackground"
transform="translate(52,0)">
<rect
y="552"
@@ -6537,7 +6537,7 @@
inkscape:connector-curvature="0" />
</g>
<g
- id="src/libs/cplusplus/images/static"
+ id="src/libs/utils/images/static"
transform="translate(68,0)">
<rect
y="552"
@@ -6554,7 +6554,7 @@
sodipodi:nodetypes="cczczcc" />
</g>
<g
- id="src/libs/cplusplus/images/staticbackground"
+ id="src/libs/utils/images/staticbackground"
transform="translate(84,0)">
<rect
y="552"
@@ -6571,7 +6571,7 @@
sodipodi:nodetypes="cczczcc" />
</g>
<g
- id="src/libs/cplusplus/images/classparent"
+ id="src/libs/utils/images/classparent"
transform="translate(84,0)">
<rect
y="552"
@@ -6588,7 +6588,7 @@
sodipodi:nodetypes="ccccc" />
</g>
<g
- id="src/libs/cplusplus/images/classmemberfunction"
+ id="src/libs/utils/images/classmemberfunction"
transform="translate(100,0)">
<rect
y="552"
@@ -6606,7 +6606,7 @@
inkscape:label="#path4895-4" />
</g>
<g
- id="src/libs/cplusplus/images/classmembervariable"
+ id="src/libs/utils/images/classmembervariable"
transform="translate(116,0)">
<rect
y="552"
@@ -6625,7 +6625,7 @@
height="100%" />
</g>
<g
- id="src/libs/cplusplus/images/classrelation"
+ id="src/libs/utils/images/classrelation"
transform="translate(148,0)">
<rect
y="552"
@@ -6648,7 +6648,7 @@
sodipodi:nodetypes="cc" />
</g>
<g
- id="src/libs/cplusplus/images/classrelationbackground"
+ id="src/libs/utils/images/classrelationbackground"
transform="translate(164,0)">
<rect
y="552"
@@ -6671,7 +6671,7 @@
sodipodi:nodetypes="cc" />
</g>
<g
- id="src/libs/cplusplus/images/keyword">
+ id="src/libs/utils/images/keyword">
<rect
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-opacity:1"
id="rect4853-8-9-8-3-7-5-1-9"
@@ -6729,7 +6729,7 @@
x="0" />
</g>
<g
- id="src/libs/cplusplus/images/macro">
+ id="src/libs/utils/images/macro">
<rect
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-opacity:1"
id="rect4853-8-9-8-3-7-5-1-9-9-5"
@@ -6786,7 +6786,7 @@
</g>
</g>
<g
- id="src/libs/cplusplus/images/enum"
+ id="src/libs/utils/images/enum"
transform="translate(16,0)">
<rect
y="552"
@@ -6823,7 +6823,7 @@
</g>
</g>
<g
- id="src/libs/cplusplus/images/enumerator"
+ id="src/libs/utils/images/enumerator"
transform="translate(32,0)">
<rect
y="552"
@@ -6856,7 +6856,7 @@
style="opacity:1;fill:#b3b3b3;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
<g
- id="src/libs/cplusplus/images/property"
+ id="src/libs/utils/images/property"
transform="translate(292)">
<rect
y="552"
@@ -6881,7 +6881,7 @@
rx="1" />
</g>
<g
- id="src/libs/cplusplus/images/propertybackground">
+ id="src/libs/utils/images/propertybackground">
<rect
y="552"
x="441"
diff --git a/src/tools/qml2puppet/qml2puppet.qbs b/src/tools/qml2puppet/qml2puppet.qbs
index bb3d0726d3..25c3f39309 100644
--- a/src/tools/qml2puppet/qml2puppet.qbs
+++ b/src/tools/qml2puppet/qml2puppet.qbs
@@ -176,6 +176,8 @@ QtcTool {
"instances/qmlstatenodeinstance.h",
"instances/qmltransitionnodeinstance.cpp",
"instances/qmltransitionnodeinstance.h",
+ "instances/qt3dpresentationnodeinstance.cpp",
+ "instances/qt3dpresentationnodeinstance.h",
"instances/qt5informationnodeinstanceserver.cpp",
"instances/qt5informationnodeinstanceserver.h",
"instances/qt5nodeinstanceclientproxy.cpp",
diff --git a/src/tools/sdktool/addabiflavor.cpp b/src/tools/sdktool/addabiflavor.cpp
new file mode 100644
index 0000000000..e24b444cfe
--- /dev/null
+++ b/src/tools/sdktool/addabiflavor.cpp
@@ -0,0 +1,174 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+#include "addabiflavor.h"
+
+#include "addkeysoperation.h"
+#include "findkeyoperation.h"
+#include "findvalueoperation.h"
+#include "getoperation.h"
+#include "rmkeysoperation.h"
+
+#include "settings.h"
+
+#include <QDir>
+
+#include <iostream>
+
+static char VERSION[] = "Version";
+static char FLAVORS[] = "Flavors";
+static char ABI_FILE_ID[] = "abi";
+
+QString AddAbiFlavor::name() const
+{
+ return QLatin1String("addAbiFlavor");
+}
+
+QString AddAbiFlavor::helpText() const
+{
+ return QLatin1String("add an ABI flavor");
+}
+
+QString AddAbiFlavor::argumentsHelpText() const
+{
+ return QLatin1String(" --flavor <NAME> Name of new ABI flavor (required)\n"
+ " --oses <OS>(,<OS>)* OSes the flavor applies to (required)\n");
+}
+
+bool AddAbiFlavor::setArguments(const QStringList &args)
+{
+ for (int i = 0; i < args.count(); ++i) {
+ const QString current = args.at(i);
+ const QString next = ((i + 1) < args.count()) ? args.at(i + 1) : QString();
+
+ if (next.isNull() && current.startsWith("--")) {
+ std::cerr << "No parameter for option '" << qPrintable(current) << "' given." << std::endl << std::endl;
+ return false;
+ }
+
+ if (current == QLatin1String("--flavor")) {
+ ++i; // skip next;
+ m_flavor = next;
+ continue;
+ }
+
+ if (current == QLatin1String("--oses")) {
+ ++i; // skip next;
+ m_oses = next.split(',');
+ continue;
+ }
+
+ std::cerr << "Unknown parameter: " << qPrintable(current) << std::endl << std::endl;
+ return false;
+ }
+
+ if (m_flavor.isEmpty())
+ std::cerr << "Error no flavor was passed." << std::endl << std::endl;
+
+ if (m_oses.isEmpty())
+ std::cerr << "Error no OSes name was passed." << std::endl << std::endl;
+
+ return !m_flavor.isEmpty() && !m_oses.isEmpty();
+}
+
+int AddAbiFlavor::execute() const
+{
+ QVariantMap map = load(QLatin1String(ABI_FILE_ID));
+ if (map.isEmpty())
+ map = initializeAbiFlavors();
+
+ QVariantMap result = addAbiFlavor(map, m_oses, m_flavor);
+
+ if (result.isEmpty() || result == map)
+ return 2;
+
+ return save(result, QLatin1String(ABI_FILE_ID)) ? 0 : 3;
+}
+
+#ifdef WITH_TESTS
+bool AddAbiFlavor::test() const
+{
+ QVariantMap map = initializeAbiFlavors();
+ if (map.count() != 1
+ || !map.contains(QLatin1String(VERSION)))
+ return false;
+
+ map = addAbiFlavor(map, {"linux", "windows"}, "foo");
+
+ if (map.count() != 2
+ || !map.contains(QLatin1String(VERSION))
+ || !map.contains(QLatin1String(FLAVORS)))
+ return false;
+
+ const QVariantMap flavorMap = map.value(QLatin1String(FLAVORS)).toMap();
+ if (flavorMap.count() != 1
+ || flavorMap.value("foo").toStringList() != QStringList({"linux", "windows"}))
+ return false;
+
+ // Ignore known flavors:
+ const QVariantMap result = addAbiFlavor(map, {"linux"}, "foo");
+
+ if (map != result)
+ return false;
+
+ return true;
+}
+#endif
+
+QVariantMap AddAbiFlavor::addAbiFlavor(const QVariantMap &map,
+ const QStringList &oses,
+ const QString &flavor)
+{
+ // Sanity check: Is flavor already set in abi file?
+ if (exists(map, flavor)) {
+ std::cerr << "Error: flavor " << qPrintable(flavor) << " already defined as extra ABI flavor." << std::endl;
+ return map;
+ }
+
+ QVariantMap result = map;
+ QVariantMap flavorMap = map.value(QLatin1String(FLAVORS)).toMap();
+ flavorMap.insert(flavor, oses);
+ result.insert(QLatin1String(FLAVORS), flavorMap);
+ return result;
+}
+
+QVariantMap AddAbiFlavor::initializeAbiFlavors()
+{
+ QVariantMap map;
+ map.insert(QLatin1String(VERSION), 1);
+ return map;
+}
+
+bool AddAbiFlavor::exists(const QString &flavor)
+{
+ QVariantMap map = load(QLatin1String(ABI_FILE_ID));
+ return exists(map, flavor);
+}
+
+bool AddAbiFlavor::exists(const QVariantMap &map, const QString &flavor)
+{
+ const QVariantMap flavorMap = map.value(QLatin1String(FLAVORS)).toMap();
+ return flavorMap.contains(flavor);
+}
diff --git a/src/tools/sdktool/addabiflavor.h b/src/tools/sdktool/addabiflavor.h
new file mode 100644
index 0000000000..61c817b879
--- /dev/null
+++ b/src/tools/sdktool/addabiflavor.h
@@ -0,0 +1,58 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+#pragma once
+
+#include "operation.h"
+
+#include <QString>
+
+class AddAbiFlavor : public Operation
+{
+public:
+ QString name() const;
+ QString helpText() const;
+ QString argumentsHelpText() const;
+
+ bool setArguments(const QStringList &args);
+
+ int execute() const;
+
+#ifdef WITH_TESTS
+ bool test() const;
+#endif
+
+ static QVariantMap addAbiFlavor(const QVariantMap &map,
+ const QStringList &oses, const QString &flavor);
+
+ static QVariantMap initializeAbiFlavors();
+
+ static bool exists(const QString &flavor);
+ static bool exists(const QVariantMap &map, const QString &flavor);
+
+private:
+ QStringList m_oses;
+ QString m_flavor;
+};
diff --git a/src/tools/sdktool/addcmakeoperation.cpp b/src/tools/sdktool/addcmakeoperation.cpp
index bddf275c51..bc8d9a66bc 100644
--- a/src/tools/sdktool/addcmakeoperation.cpp
+++ b/src/tools/sdktool/addcmakeoperation.cpp
@@ -143,7 +143,7 @@ bool AddCMakeOperation::test() const
|| !map.contains(QString::fromLatin1(PREFIX) + '0'))
return false;
QVariantMap cmData = map.value(QString::fromLatin1(PREFIX) + '0').toMap();
- if (cmData.count() != 8
+ if (cmData.count() != 5
|| cmData.value(ID_KEY).toString() != "testId"
|| cmData.value(DISPLAYNAME_KEY).toString() != "name"
|| cmData.value(AUTODETECTED_KEY).toBool() != true
@@ -165,7 +165,7 @@ bool AddCMakeOperation::test() const
|| !map.contains(QString::fromLatin1(PREFIX) + '1'))
return false;
cmData = map.value(QString::fromLatin1(PREFIX) + '0').toMap();
- if (cmData.count() != 8
+ if (cmData.count() != 5
|| cmData.value(ID_KEY).toString() != "testId"
|| cmData.value(DISPLAYNAME_KEY).toString() != "name"
|| cmData.value(AUTODETECTED_KEY).toBool() != true
@@ -173,7 +173,7 @@ bool AddCMakeOperation::test() const
|| cmData.value("ExtraKey").toString() != "ExtraValue")
return false;
cmData = map.value(QString::fromLatin1(PREFIX) + '1').toMap();
- if (cmData.count() != 8
+ if (cmData.count() != 5
|| cmData.value(ID_KEY).toString() != "{some-cm-id}"
|| cmData.value(DISPLAYNAME_KEY).toString() != "name2"
|| cmData.value(AUTODETECTED_KEY).toBool() != true
diff --git a/src/tools/sdktool/addkitoperation.cpp b/src/tools/sdktool/addkitoperation.cpp
index e5767be7e8..a58e1257c2 100644
--- a/src/tools/sdktool/addkitoperation.cpp
+++ b/src/tools/sdktool/addkitoperation.cpp
@@ -318,7 +318,7 @@ bool AddKitOperation::test() const
QVariantMap qtMap = AddQtOperation::initializeQtVersions();
qtMap = AddQtOperation::addQt(qtMap, "{qt-id}", "Qt", "desktop-qt", "/usr/bin/qmake",
- KeyValuePairList());
+ KeyValuePairList(), {});
QVariantMap devMap = AddDeviceOperation::initializeDevices();
devMap = AddDeviceOperation::addDevice(devMap, "{dev-id}", "Dev", 0, 0,
diff --git a/src/tools/sdktool/addqtoperation.cpp b/src/tools/sdktool/addqtoperation.cpp
index 59a0b1b555..c71676433b 100644
--- a/src/tools/sdktool/addqtoperation.cpp
+++ b/src/tools/sdktool/addqtoperation.cpp
@@ -46,6 +46,7 @@ const char ID[] = "Id";
const char DISPLAYNAME[] = "Name";
const char AUTODETECTED[] = "isAutodetected";
const char AUTODETECTION_SOURCE[] = "autodetectionSource";
+const char ABIS[] = "Abis";
const char QMAKE[] = "QMakePath";
const char TYPE[] = "QtVersion.Type";
@@ -72,6 +73,7 @@ QString AddQtOperation::argumentsHelpText() const
" --name <NAME> display name of the new Qt version. (required)\n"
" --qmake <PATH> path to qmake. (required)\n"
" --type <TYPE> type of Qt version to add. (required)\n"
+ " --abis <ABI>(,<ABI>)* ABIs of Qt version (leave out for auto-detection!)\n"
" <KEY> <TYPE:VALUE> extra key value pairs\n");
}
@@ -121,6 +123,16 @@ bool AddQtOperation::setArguments(const QStringList &args)
continue;
}
+ if (current == "--abis") {
+ if (next.isNull()) {
+ std::cerr << "Error parsing after --abis." << std::endl << std::endl;
+ return false;
+ }
+ ++i; // skip next;
+ m_abis = next.split(',');
+ continue;
+ }
+
if (next.isNull()) {
std::cerr << "Unknown parameter: " << qPrintable(current) << std::endl << std::endl;
return false;
@@ -155,7 +167,7 @@ int AddQtOperation::execute() const
if (map.isEmpty())
map = initializeQtVersions();
- QVariantMap result = addQt(map, m_id, m_displayName, m_type, m_qmake, m_extra);
+ QVariantMap result = addQt(map, m_id, m_displayName, m_type, m_qmake, m_extra, m_abis);
if (result.isEmpty() || result == map)
return 2;
@@ -176,11 +188,13 @@ bool AddQtOperation::test() const
#if defined Q_OS_WIN
map = addQt(map, QLatin1String("{some-qt-id}"), QLatin1String("Test Qt Version"), QLatin1String("testType"),
QLatin1String("/tmp//../tmp/test\\qmake"),
- KeyValuePairList() << KeyValuePair(QLatin1String("extraData"), QVariant(QLatin1String("extraValue"))));
+ KeyValuePairList() << KeyValuePair(QLatin1String("extraData"), QVariant(QLatin1String("extraValue"))),
+ QStringList());
#else
map = addQt(map, QLatin1String("{some-qt-id}"), QLatin1String("Test Qt Version"), QLatin1String("testType"),
QLatin1String("/tmp//../tmp/test/qmake"),
- KeyValuePairList() << KeyValuePair(QLatin1String("extraData"), QVariant(QLatin1String("extraValue"))));
+ KeyValuePairList() << KeyValuePair(QLatin1String("extraData"), QVariant(QLatin1String("extraValue"))),
+ QStringList());
#endif
if (map.count() != 2
@@ -190,7 +204,7 @@ bool AddQtOperation::test() const
return false;
QVariantMap version0 = map.value(QLatin1String("QtVersion.0")).toMap();
- if (version0.count() != 7
+ if (version0.count() != 8
|| !version0.contains(QLatin1String(ID))
|| version0.value(QLatin1String(ID)).toInt() != -1
|| !version0.contains(QLatin1String(DISPLAYNAME))
@@ -201,6 +215,8 @@ bool AddQtOperation::test() const
|| version0.value(QLatin1String(AUTODETECTION_SOURCE)).toString() != QLatin1String("SDK.{some-qt-id}")
|| !version0.contains(QLatin1String(TYPE))
|| version0.value(QLatin1String(TYPE)).toString() != QLatin1String("testType")
+ || !version0.contains(QLatin1String(ABIS))
+ || version0.value(QLatin1String(ABIS)).toStringList() != QStringList()
|| !version0.contains(QLatin1String(QMAKE))
|| version0.value(QLatin1String(QMAKE)).toString() != QLatin1String("/tmp/test/qmake")
|| !version0.contains(QLatin1String("extraData"))
@@ -210,14 +226,16 @@ bool AddQtOperation::test() const
// Ignore existing ids:
QVariantMap result = addQt(map, QLatin1String("{some-qt-id}"), QLatin1String("Test Qt Version2"), QLatin1String("testType2"),
QLatin1String("/tmp/test/qmake2"),
- KeyValuePairList() << KeyValuePair(QLatin1String("extraData"), QVariant(QLatin1String("extraValue"))));
+ KeyValuePairList() << KeyValuePair(QLatin1String("extraData"), QVariant(QLatin1String("extraValue"))),
+ QStringList());
if (!result.isEmpty())
return false;
// Make sure name is unique:
map = addQt(map, QLatin1String("testId2"), QLatin1String("Test Qt Version"), QLatin1String("testType3"),
- QLatin1String("/tmp/test/qmake2"),
- KeyValuePairList() << KeyValuePair(QLatin1String("extraData"), QVariant(QLatin1String("extraValue"))));
+ QLatin1String("/tmp/test/qmake2"),
+ KeyValuePairList() << KeyValuePair(QLatin1String("extraData"), QVariant(QLatin1String("extraValue"))),
+ QStringList());
if (map.count() != 3
|| !map.contains(QLatin1String(VERSION))
|| map.value(QLatin1String(VERSION)).toInt() != 1
@@ -229,7 +247,7 @@ bool AddQtOperation::test() const
return false;
QVariantMap version1 = map.value(QLatin1String("QtVersion.1")).toMap();
- if (version1.count() != 7
+ if (version1.count() != 8
|| !version1.contains(QLatin1String(ID))
|| version1.value(QLatin1String(ID)).toInt() != -1
|| !version1.contains(QLatin1String(DISPLAYNAME))
@@ -240,6 +258,8 @@ bool AddQtOperation::test() const
|| version1.value(QLatin1String(AUTODETECTION_SOURCE)).toString() != QLatin1String("SDK.testId2")
|| !version1.contains(QLatin1String(TYPE))
|| version1.value(QLatin1String(TYPE)).toString() != QLatin1String("testType3")
+ || !version1.contains(QLatin1String(ABIS))
+ || version1.value(QLatin1String(ABIS)).toStringList() != QStringList()
|| !version1.contains(QLatin1String(QMAKE))
|| version1.value(QLatin1String(QMAKE)).toString() != QLatin1String("/tmp/test/qmake2")
|| !version1.contains(QLatin1String("extraData"))
@@ -252,7 +272,8 @@ bool AddQtOperation::test() const
QVariantMap AddQtOperation::addQt(const QVariantMap &map,
const QString &id, const QString &displayName, const QString &type,
- const QString &qmake, const KeyValuePairList &extra)
+ const QString &qmake, const KeyValuePairList &extra,
+ const QStringList &abis)
{
QString sdkId = extendId(id);
@@ -293,6 +314,7 @@ QVariantMap AddQtOperation::addQt(const QVariantMap &map,
data << KeyValuePair(QStringList() << qt << QLatin1String(AUTODETECTION_SOURCE), QVariant(sdkId));
data << KeyValuePair(QStringList() << qt << QLatin1String(QMAKE), QVariant(saneQmake));
data << KeyValuePair(QStringList() << qt << QLatin1String(TYPE), QVariant(type));
+ data << KeyValuePair(QStringList() << qt << ABIS, QVariant(abis));
KeyValuePairList qtExtraList;
foreach (const KeyValuePair &pair, extra)
@@ -322,10 +344,8 @@ bool AddQtOperation::exists(const QVariantMap &map, const QString &id)
// Sanity check: Make sure autodetection source is not in use already:
QStringList valueKeys = FindValueOperation::findValue(map, sdkId);
foreach (const QString &k, valueKeys) {
- if (k.endsWith(QString(QLatin1Char('/')) + QLatin1String(AUTODETECTION_SOURCE))) {
+ if (k.endsWith(QString(QLatin1Char('/')) + QLatin1String(AUTODETECTION_SOURCE)))
return true;
- break;
- }
}
return false;
}
diff --git a/src/tools/sdktool/addqtoperation.h b/src/tools/sdktool/addqtoperation.h
index 2712556767..65e31ff835 100644
--- a/src/tools/sdktool/addqtoperation.h
+++ b/src/tools/sdktool/addqtoperation.h
@@ -46,7 +46,8 @@ public:
static QVariantMap addQt(const QVariantMap &map,
const QString &id, const QString &displayName, const QString &type,
- const QString &qmake, const KeyValuePairList &extra);
+ const QString &qmake, const KeyValuePairList &extra,
+ const QStringList &abis);
static QVariantMap initializeQtVersions();
@@ -58,5 +59,6 @@ private:
QString m_displayName;
QString m_type;
QString m_qmake;
+ QStringList m_abis;
KeyValuePairList m_extra;
};
diff --git a/src/tools/sdktool/addtoolchainoperation.cpp b/src/tools/sdktool/addtoolchainoperation.cpp
index 51f98fe555..335b72ec76 100644
--- a/src/tools/sdktool/addtoolchainoperation.cpp
+++ b/src/tools/sdktool/addtoolchainoperation.cpp
@@ -183,7 +183,7 @@ bool AddToolChainOperation::test() const
QVariantMap tcData = map.value(QString::fromLatin1(PREFIX) + '0').toMap();
if (tcData.count() != 8
|| tcData.value(ID).toString() != "testId"
- || tcData.value(LANGUAGE_KEY).toString() != "langId"
+ || tcData.value(LANGUAGE_KEY_V2).toString() != "langId"
|| tcData.value(DISPLAYNAME).toString() != "name"
|| tcData.value(AUTODETECTED).toBool() != true
|| tcData.value(PATH).toString() != "/tmp/test"
@@ -209,7 +209,7 @@ bool AddToolChainOperation::test() const
tcData = map.value(QString::fromLatin1(PREFIX) + '0').toMap();
if (tcData.count() != 8
|| tcData.value(ID).toString() != "testId"
- || tcData.value(LANGUAGE_KEY).toString() != "langId"
+ || tcData.value(LANGUAGE_KEY_V2).toString() != "langId"
|| tcData.value(DISPLAYNAME).toString() != "name"
|| tcData.value(AUTODETECTED).toBool() != true
|| tcData.value(PATH).toString() != "/tmp/test"
@@ -220,7 +220,7 @@ bool AddToolChainOperation::test() const
tcData = map.value(QString::fromLatin1(PREFIX) + '1').toMap();
if (tcData.count() != 8
|| tcData.value(ID).toString() != "{some-tc-id}"
- || tcData.value(LANGUAGE_KEY).toString() != "langId2"
+ || tcData.value(LANGUAGE_KEY_V2).toString() != "langId2"
|| tcData.value(DISPLAYNAME).toString() != "name2"
|| tcData.value(AUTODETECTED).toBool() != true
|| tcData.value(PATH).toString() != "/tmp/test"
diff --git a/src/tools/sdktool/main.cpp b/src/tools/sdktool/main.cpp
index f480543fbb..444752a5a4 100644
--- a/src/tools/sdktool/main.cpp
+++ b/src/tools/sdktool/main.cpp
@@ -30,6 +30,7 @@
#include "addcmakeoperation.h"
#include "adddebuggeroperation.h"
#include "adddeviceoperation.h"
+#include "addabiflavor.h"
#include "addkeysoperation.h"
#include "addkitoperation.h"
#include "addqtoperation.h"
@@ -62,13 +63,13 @@ void printHelp(const Operation *op)
std::cout << std::endl;
}
-const QString tabular(const Operation *o)
+const QString tabular(const std::unique_ptr<Operation> &o)
{
const QString name = o->name();
return name + QString(16 - name.length(), QChar::Space) + o->helpText();
}
-void printHelp(const QList<Operation *> &operations)
+void printHelp(const std::vector<std::unique_ptr<Operation>> &operations)
{
std::cout << Core::Constants::IDE_DISPLAY_NAME << "SDK setup tool." << std::endl;
std::cout << " Usage: " << qPrintable(QCoreApplication::arguments().at(0))
@@ -79,7 +80,7 @@ void printHelp(const QList<Operation *> &operations)
std::cout << "OPERATION:" << std::endl;
std::cout << " One of:" << std::endl;
- foreach (const Operation *o, operations)
+ for (const std::unique_ptr<Operation> &o : operations)
std::cout << " " << qPrintable(tabular(o)) << std::endl;
std::cout << std::endl;
std::cout << "OPERATION_ARGS:" << std::endl;
@@ -88,7 +89,8 @@ void printHelp(const QList<Operation *> &operations)
std::cout << std::endl;
}
-int parseArguments(const QStringList &args, Settings *s, const QList<Operation *> &operations)
+int parseArguments(const QStringList &args, Settings *s,
+ const std::vector<std::unique_ptr<Operation>> &operations)
{
QStringList opArgs;
int argCount = args.count();
@@ -101,9 +103,9 @@ int parseArguments(const QStringList &args, Settings *s, const QList<Operation *
// help
if (current == QLatin1String("-h") || current == QLatin1String("--help")) {
if (!next.isEmpty()) {
- foreach (Operation *o, operations) {
+ for (const std::unique_ptr<Operation> &o : operations) {
if (o->name() == next) {
- printHelp(o);
+ printHelp(o.get());
return 0;
}
}
@@ -129,9 +131,9 @@ int parseArguments(const QStringList &args, Settings *s, const QList<Operation *
}
// operation
- foreach (Operation *o, operations) {
+ for (const std::unique_ptr<Operation> &o : operations) {
if (o->name() == current) {
- s->operation = o;
+ s->operation = o.get();
break;
}
}
@@ -156,7 +158,7 @@ int parseArguments(const QStringList &args, Settings *s, const QList<Operation *
if (!s->operation->setArguments(opArgs)) {
std::cerr << "Argument parsing failed." << std::endl << std::endl;
printHelp(s->operation);
- s->operation = 0;
+ s->operation = nullptr;
return 1;
}
@@ -176,47 +178,46 @@ int main(int argc, char *argv[])
Settings settings;
- QList<Operation *> operations;
- operations << new AddKeysOperation
+ std::vector<std::unique_ptr<Operation>> operations;
+ operations.emplace_back(std::make_unique<AddKeysOperation>());
- << new AddCMakeOperation
- << new AddDebuggerOperation
- << new AddDeviceOperation
- << new AddQtOperation
- << new AddToolChainOperation
+ operations.emplace_back(std::make_unique<AddAbiFlavor>());
+ operations.emplace_back(std::make_unique<AddCMakeOperation>());
+ operations.emplace_back(std::make_unique<AddDebuggerOperation>());
+ operations.emplace_back(std::make_unique<AddDeviceOperation>());
+ operations.emplace_back(std::make_unique<AddQtOperation>());
+ operations.emplace_back(std::make_unique<AddToolChainOperation>());
- << new AddKitOperation
+ operations.emplace_back(std::make_unique<AddKitOperation>());
- << new GetOperation
+ operations.emplace_back(std::make_unique<GetOperation>());
- << new RmCMakeOperation
- << new RmKitOperation
- << new RmDebuggerOperation
- << new RmDeviceOperation
- << new RmKeysOperation
- << new RmQtOperation
- << new RmToolChainOperation
+ operations.emplace_back(std::make_unique<RmCMakeOperation>());
+ operations.emplace_back(std::make_unique<RmKitOperation>());
+ operations.emplace_back(std::make_unique<RmDebuggerOperation>());
+ operations.emplace_back(std::make_unique<RmDeviceOperation>());
+ operations.emplace_back(std::make_unique<RmKeysOperation>());
+ operations.emplace_back(std::make_unique<RmQtOperation>());
+ operations.emplace_back(std::make_unique<RmToolChainOperation>());
- << new FindKeyOperation
- << new FindValueOperation;
+ operations.emplace_back(std::make_unique<FindKeyOperation>());
+ operations.emplace_back(std::make_unique<FindValueOperation>());
#ifdef WITH_TESTS
if (argc == 2 && !strcmp(argv[1], "-test")) {
std::cerr << std::endl << std::endl << "Starting tests..." << std::endl;
int res = 0;
- foreach (Operation *o, operations)
+ for (const std::unique_ptr<Operation> &o : operations) {
if (!o->test()) {
std::cerr << "!!!! Test failed for: " << qPrintable(o->name()) << " !!!!" << std::endl;
++res;
}
+ }
std::cerr << "Tests done." << std::endl << std::endl;
return res;
}
#endif
int result = parseArguments(a.arguments(), &settings, operations);
- if (!settings.operation)
- return result; // nothing to do:-)
-
- return settings.operation->execute();
+ return settings.operation ? settings.operation->execute() : result;
}
diff --git a/src/tools/sdktool/rmcmakeoperation.cpp b/src/tools/sdktool/rmcmakeoperation.cpp
index 2eaf84b9d0..a5583c3f84 100644
--- a/src/tools/sdktool/rmcmakeoperation.cpp
+++ b/src/tools/sdktool/rmcmakeoperation.cpp
@@ -97,6 +97,7 @@ bool RmCMakeOperation::test() const
{
// Add cmakes:
QVariantMap map = AddCMakeOperation::initializeCMake();
+ const QVariantMap emptyMap = map;
map = AddCMakeOperation::addCMake(map, "testId", "name", "/tmp/test",
KeyValuePairList({KeyValuePair("ExtraKey", QVariant("ExtraValue"))}));
map = AddCMakeOperation::addCMake(map, "testId2", "other name", "/tmp/test2", KeyValuePairList());
@@ -109,21 +110,25 @@ bool RmCMakeOperation::test() const
if (result != map)
return false;
+ // Remove from map with both testId and testId2:
result = rmCMake(map, "testId2");
if (result == map
|| result.value(COUNT, 0).toInt() != 1
- || !result.contains("CMake.0") || result.value("CMake.0") != map.value("CMake.0"))
+ || !result.contains(QString::fromLatin1(PREFIX) + "0")
+ || result.value(QString::fromLatin1(PREFIX) + "0") != map.value(QString::fromLatin1(PREFIX) + "0"))
return false;
+ // Remove from map with both testId and testId2:
result = rmCMake(map, "testId");
if (result == map
|| result.value(COUNT, 0).toInt() != 1
- || !result.contains("CMake.0") || result.value("CMake.0") != map.value("CMake.1"))
+ || !result.contains(QString::fromLatin1(PREFIX) + "0")
+ || result.value(QString::fromLatin1(PREFIX) + "0") != map.value(QString::fromLatin1(PREFIX) + "1"))
return false;
+ // Remove from map without testId!
result = rmCMake(result, "testId2");
- if (result == map
- || result.value(COUNT, 0).toInt() != 0)
+ if (result != emptyMap)
return false;
return true;
diff --git a/src/tools/sdktool/rmkitoperation.cpp b/src/tools/sdktool/rmkitoperation.cpp
index 5abfe9ecdd..4e7487f40b 100644
--- a/src/tools/sdktool/rmkitoperation.cpp
+++ b/src/tools/sdktool/rmkitoperation.cpp
@@ -105,7 +105,7 @@ bool RmKitOperation::test() const
QVariantMap qtMap = AddQtOperation::initializeQtVersions();
qtMap = AddQtOperation::addQt(qtMap, "{qt-id}", "Qt", "desktop-qt", "/usr/bin/qmake",
- KeyValuePairList());
+ KeyValuePairList(), QStringList());
QVariantMap devMap = AddDeviceOperation::initializeDevices();
devMap = AddDeviceOperation::addDevice(devMap, "{dev-id}", "Dev", 0, 0,
diff --git a/src/tools/sdktool/rmqtoperation.cpp b/src/tools/sdktool/rmqtoperation.cpp
index 292b8fdb3f..53f3b76001 100644
--- a/src/tools/sdktool/rmqtoperation.cpp
+++ b/src/tools/sdktool/rmqtoperation.cpp
@@ -103,10 +103,11 @@ bool RmQtOperation::test() const
map = AddQtOperation::addQt(map, QLatin1String("testId"), QLatin1String("name"), QLatin1String("type"),
QLatin1String("/tmp/test"),
- KeyValuePairList() << KeyValuePair(QLatin1String("ExtraKey"), QVariant(QLatin1String("ExtraValue"))));
+ KeyValuePairList() << KeyValuePair(QLatin1String("ExtraKey"), QVariant(QLatin1String("ExtraValue"))),
+ QStringList());
map = AddQtOperation::addQt(map, QLatin1String("testId2"), QLatin1String("other name"), QLatin1String("type"),
QLatin1String("/tmp/test2"),
- KeyValuePairList());
+ KeyValuePairList(), QStringList());
result = rmQt(map, QLatin1String("nonexistant"));
if (result != map)
diff --git a/src/tools/sdktool/sdktool.pro b/src/tools/sdktool/sdktool.pro
index d3d1babf2e..098897f1e2 100644
--- a/src/tools/sdktool/sdktool.pro
+++ b/src/tools/sdktool/sdktool.pro
@@ -10,6 +10,7 @@ win32: LIBS += -luser32 -lshell32
SOURCES += \
main.cpp \
+ addabiflavor.cpp \
addcmakeoperation.cpp \
adddebuggeroperation.cpp \
adddeviceoperation.cpp \
@@ -36,6 +37,7 @@ SOURCES += \
$$UTILS/savefile.cpp \
HEADERS += \
+ addabiflavor.h \
addcmakeoperation.h \
adddebuggeroperation.h \
adddeviceoperation.h \
diff --git a/src/tools/sdktool/sdktool.qbs b/src/tools/sdktool/sdktool.qbs
index 60095bdb87..67b1d8e3c3 100644
--- a/src/tools/sdktool/sdktool.qbs
+++ b/src/tools/sdktool/sdktool.qbs
@@ -26,6 +26,7 @@ QtcTool {
cpp.includePaths: base.concat([libsDir])
files: [
+ "addabiflavor.cpp", "addabiflavor.h",
"addcmakeoperation.cpp", "addcmakeoperation.h",
"adddebuggeroperation.cpp", "adddebuggeroperation.h",
"adddeviceoperation.cpp", "adddeviceoperation.h",
diff --git a/src/tools/sdktool/settings.cpp b/src/tools/sdktool/settings.cpp
index fa57542fbe..e4c74cc19e 100644
--- a/src/tools/sdktool/settings.cpp
+++ b/src/tools/sdktool/settings.cpp
@@ -60,7 +60,7 @@ Utils::FileName Settings::getPath(const QString &file)
const QString lowerFile = file.toLower();
const QStringList identical
= QStringList({ "android", "cmaketools", "debuggers", "devices",
- "profiles", "qtversions", "toolchains" });
+ "profiles", "qtversions", "toolchains", "abi" });
if (lowerFile == "cmake")
result.appendPath("cmaketools");
else if (lowerFile == "kits")
diff --git a/src/tools/tools.pro b/src/tools/tools.pro
index cce61a59a7..07246b95fe 100644
--- a/src/tools/tools.pro
+++ b/src/tools/tools.pro
@@ -23,8 +23,8 @@ mac {
SUBDIRS += clangbackend
-QTC_NO_CLANG_LIBTOOLING=$$(QTC_NO_CLANG_LIBTOOLING)
-isEmpty(QTC_NO_CLANG_LIBTOOLING) {
+QTC_ENABLE_CLANG_LIBTOOLING=$$(QTC_ENABLE_CLANG_LIBTOOLING)
+!isEmpty(QTC_ENABLE_CLANG_LIBTOOLING) {
SUBDIRS += clangrefactoringbackend
SUBDIRS += clangpchmanagerbackend
} else {
diff --git a/tests/auto/tracing/timelinemodel/tst_timelinemodel.cpp b/tests/auto/tracing/timelinemodel/tst_timelinemodel.cpp
index be527af127..812f51d226 100644
--- a/tests/auto/tracing/timelinemodel/tst_timelinemodel.cpp
+++ b/tests/auto/tracing/timelinemodel/tst_timelinemodel.cpp
@@ -108,6 +108,7 @@ void DummyModel::loadData()
computeNesting();
setCollapsedRowCount(2);
setExpandedRowCount(3);
+ emit contentChanged();
}
tst_TimelineModel::tst_TimelineModel() :
@@ -216,7 +217,6 @@ void tst_TimelineModel::height()
int heightAfterLastSignal = 0;
int heightChangedSignals = 0;
connect(&dummy, &Timeline::TimelineModel::heightChanged, [&](){
- QVERIFY(dummy.height() != heightAfterLastSignal);
++heightChangedSignals;
heightAfterLastSignal = dummy.height();
});
@@ -432,20 +432,17 @@ void tst_TimelineModel::insertStartEnd()
void tst_TimelineModel::rowCount()
{
DummyModel dummy(&aggregator);
- QSignalSpy expandedSpy(&dummy, SIGNAL(expandedRowCountChanged()));
- QSignalSpy collapsedSpy(&dummy, SIGNAL(collapsedRowCountChanged()));
+ QSignalSpy contentSpy(&dummy, SIGNAL(contentChanged()));
QCOMPARE(dummy.rowCount(), 1);
dummy.setExpanded(true);
QCOMPARE(dummy.rowCount(), 1);
dummy.loadData();
- QCOMPARE(expandedSpy.count(), 1);
- QCOMPARE(collapsedSpy.count(), 1);
+ QCOMPARE(contentSpy.count(), 1);
QCOMPARE(dummy.rowCount(), 3);
dummy.setExpanded(false);
QCOMPARE(dummy.rowCount(), 2);
dummy.clear();
- QCOMPARE(expandedSpy.count(), 2);
- QCOMPARE(collapsedSpy.count(), 2);
+ QCOMPARE(contentSpy.count(), 2);
QCOMPARE(dummy.rowCount(), 1);
}
diff --git a/tests/system/suite_tools/tst_git_clone/test.py b/tests/system/suite_tools/tst_git_clone/test.py
index 6421456e60..6da11764ea 100644
--- a/tests/system/suite_tools/tst_git_clone/test.py
+++ b/tests/system/suite_tools/tst_git_clone/test.py
@@ -65,10 +65,11 @@ def verifyVersionControlView(targetDir, canceled):
vcsLog = str(waitForObject("{type='Core::OutputWindow' unnamed='1' visible='1' "
"window=':Qt Creator_Core::Internal::MainWindow'}").plainText)
test.log("Clone log is: %s" % vcsLog)
- test.verify("Running in " + targetDir + ":" in vcsLog,
- "Searching for target directory in clone log")
- test.verify(" ".join(["clone", "--progress", cloneUrl, cloneDir]) in vcsLog,
- "Searching for git parameters in clone log")
+ if not JIRA.isBugStillOpen(20813):
+ test.verify("Running in " + targetDir + ":" in vcsLog,
+ "Searching for target directory in clone log")
+ test.verify(" ".join(["clone", "--progress", cloneUrl, cloneDir]) in vcsLog,
+ "Searching for git parameters in clone log")
test.verify(canceled == (" terminated abnormally" in vcsLog),
"Searching for result in clone log")
clickButton(waitForObject(":*Qt Creator.Clear_QToolButton"))
diff --git a/tests/unit/mockup/projectexplorer/abi.h b/tests/unit/mockup/projectexplorer/abi.h
new file mode 100644
index 0000000000..25baca234a
--- /dev/null
+++ b/tests/unit/mockup/projectexplorer/abi.h
@@ -0,0 +1,68 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+#pragma once
+
+namespace ProjectExplorer {
+class Abi
+{
+public:
+ enum OSFlavor {
+ // BSDs
+ FreeBsdFlavor,
+ NetBsdFlavor,
+ OpenBsdFlavor,
+
+ // Linux
+ AndroidLinuxFlavor,
+
+ // Unix
+ SolarisUnixFlavor,
+
+ // Windows
+ WindowsMsvc2005Flavor,
+ WindowsMsvc2008Flavor,
+ WindowsMsvc2010Flavor,
+ WindowsMsvc2012Flavor,
+ WindowsMsvc2013Flavor,
+ WindowsMsvc2015Flavor,
+ WindowsMsvc2017Flavor,
+ WindowsMSysFlavor,
+ WindowsCEFlavor,
+
+ // Embedded
+ VxWorksFlavor,
+
+ // Generic:
+ RtosFlavor,
+ GenericFlavor,
+
+ UnknownFlavor // keep last in this enum!
+ };
+
+ OSFlavor osFlavor() const { return UnknownFlavor; }
+ unsigned char wordWidth() const { return 64; }
+};
+}
diff --git a/tests/unit/mockup/projectexplorer/project.h b/tests/unit/mockup/projectexplorer/project.h
index ea040fbc49..78b4211dca 100644
--- a/tests/unit/mockup/projectexplorer/project.h
+++ b/tests/unit/mockup/projectexplorer/project.h
@@ -36,6 +36,10 @@ public:
Utils::FileName projectDirectory() const {
return Utils::FileName();
}
+
+ Utils::FileName rootProjectDirectory() const {
+ return Utils::FileName();
+ }
};
}
diff --git a/tests/unit/unittest/clangcodemodelserver-test.cpp b/tests/unit/unittest/clangcodemodelserver-test.cpp
index bde56e2160..9a1cc8c7b4 100644
--- a/tests/unit/unittest/clangcodemodelserver-test.cpp
+++ b/tests/unit/unittest/clangcodemodelserver-test.cpp
@@ -603,7 +603,7 @@ void ClangCodeModelServer::expectCompletionFromFileAUnsavedMethodVersion1()
{
const CodeCompletion completion(Utf8StringLiteral("Method2"),
34,
- CodeCompletion::FunctionCompletionKind);
+ CodeCompletion::FunctionDefinitionCompletionKind);
expectCompletion(completion);
}
@@ -612,7 +612,7 @@ void ClangCodeModelServer::expectCompletionFromFileAUnsavedMethodVersion2()
{
const CodeCompletion completion(Utf8StringLiteral("Method3"),
34,
- CodeCompletion::FunctionCompletionKind);
+ CodeCompletion::FunctionDefinitionCompletionKind);
expectCompletion(completion);
}
diff --git a/tests/unit/unittest/clientserverinprocess-test.cpp b/tests/unit/unittest/clientserverinprocess-test.cpp
index 68dd598e59..4e201fdcee 100644
--- a/tests/unit/unittest/clientserverinprocess-test.cpp
+++ b/tests/unit/unittest/clientserverinprocess-test.cpp
@@ -176,9 +176,7 @@ TEST_F(ClientServerInProcess, SendRequestAnnotationsMessage)
TEST_F(ClientServerInProcess, SendCompletionsMessage)
{
ClangBackEnd::CodeCompletions codeCompletions({Utf8StringLiteral("newFunction()")});
- ClangBackEnd::CompletionsMessage message(codeCompletions,
- ClangBackEnd::CompletionCorrection::NoCorrection,
- 1);
+ ClangBackEnd::CompletionsMessage message(codeCompletions, 1);
EXPECT_CALL(mockClangCodeModelClient, completions(message))
.Times(1);
diff --git a/tests/unit/unittest/codecompleter-test.cpp b/tests/unit/unittest/codecompleter-test.cpp
index c55a9a0514..ed07ecdc04 100644
--- a/tests/unit/unittest/codecompleter-test.cpp
+++ b/tests/unit/unittest/codecompleter-test.cpp
@@ -67,6 +67,11 @@ MATCHER_P2(IsCodeCompletion, text, completionKind,
return true;
}
+MATCHER(HasFixIts, "")
+{
+ return !arg.requiredFixIts.empty();
+}
+
class CodeCompleter : public ::testing::Test
{
protected:
@@ -372,8 +377,7 @@ TEST_F(CodeCompleterSlowTest, ArrowCompletion)
ASSERT_THAT(completions,
Contains(IsCodeCompletion(Utf8StringLiteral("member"),
CodeCompletion::VariableCompletionKind)));
- ASSERT_THAT(myCompleter.neededCorrection(),
- ClangBackEnd::CompletionCorrection::NoCorrection);
+ ASSERT_THAT(completions, Not(Contains(HasFixIts())));
}
TEST_F(CodeCompleterSlowTest, DotToArrowCompletionForPointer)
@@ -385,8 +389,7 @@ TEST_F(CodeCompleterSlowTest, DotToArrowCompletionForPointer)
ASSERT_THAT(completions,
Contains(IsCodeCompletion(Utf8StringLiteral("member"),
CodeCompletion::VariableCompletionKind)));
- ASSERT_THAT(myCompleter.neededCorrection(),
- ClangBackEnd::CompletionCorrection::DotToArrowCorrection);
+ ASSERT_THAT(completions, Contains(HasFixIts()));
}
TEST_F(CodeCompleterSlowTest, DotToArrowCompletionForPointerInOutdatedDocument)
@@ -406,8 +409,7 @@ TEST_F(CodeCompleterSlowTest, DotToArrowCompletionForPointerInOutdatedDocument)
ASSERT_THAT(completions,
Contains(IsCodeCompletion(Utf8StringLiteral("member"),
CodeCompletion::VariableCompletionKind)));
- ASSERT_THAT(myCompleter.neededCorrection(),
- ClangBackEnd::CompletionCorrection::DotToArrowCorrection);
+ ASSERT_THAT(completions, Contains(HasFixIts()));
}
TEST_F(CodeCompleterSlowTest, NoDotToArrowCompletionForObject)
@@ -419,7 +421,7 @@ TEST_F(CodeCompleterSlowTest, NoDotToArrowCompletionForObject)
ASSERT_THAT(completions,
Contains(IsCodeCompletion(Utf8StringLiteral("member"),
CodeCompletion::VariableCompletionKind)));
- ASSERT_THAT(myCompleter.neededCorrection(), ClangBackEnd::CompletionCorrection::NoCorrection);
+ ASSERT_THAT(completions, Not(Contains(HasFixIts())));
}
TEST_F(CodeCompleterSlowTest, NoDotToArrowCompletionForFloat)
@@ -429,7 +431,6 @@ TEST_F(CodeCompleterSlowTest, NoDotToArrowCompletionForFloat)
const ClangBackEnd::CodeCompletions completions = myCompleter.complete(3, 18);
ASSERT_TRUE(completions.isEmpty());
- ASSERT_THAT(myCompleter.neededCorrection(), ClangBackEnd::CompletionCorrection::NoCorrection);
}
TEST_F(CodeCompleterSlowTest, NoDotArrowCorrectionForObjectWithArrowOperator)
@@ -441,7 +442,7 @@ TEST_F(CodeCompleterSlowTest, NoDotArrowCorrectionForObjectWithArrowOperator)
ASSERT_THAT(completions,
Contains(IsCodeCompletion(Utf8StringLiteral("member"),
CodeCompletion::VariableCompletionKind)));
- ASSERT_THAT(myCompleter.neededCorrection(), ClangBackEnd::CompletionCorrection::NoCorrection);
+ ASSERT_THAT(completions, Not(Contains(HasFixIts())));
}
TEST_F(CodeCompleterSlowTest, NoDotArrowCorrectionForDotDot)
@@ -451,7 +452,6 @@ TEST_F(CodeCompleterSlowTest, NoDotArrowCorrectionForDotDot)
const ClangBackEnd::CodeCompletions completions = myCompleter.complete(5, 10);
ASSERT_TRUE(completions.isEmpty());
- ASSERT_THAT(myCompleter.neededCorrection(), ClangBackEnd::CompletionCorrection::NoCorrection);
}
TEST_F(CodeCompleterSlowTest, NoDotArrowCorrectionForArrowDot)
@@ -461,7 +461,6 @@ TEST_F(CodeCompleterSlowTest, NoDotArrowCorrectionForArrowDot)
const ClangBackEnd::CodeCompletions completions = myCompleter.complete(5, 11);
ASSERT_TRUE(completions.isEmpty());
- ASSERT_THAT(myCompleter.neededCorrection(), ClangBackEnd::CompletionCorrection::NoCorrection);
}
TEST_F(CodeCompleterSlowTest, NoDotArrowCorrectionForOnlyDot)
@@ -471,7 +470,6 @@ TEST_F(CodeCompleterSlowTest, NoDotArrowCorrectionForOnlyDot)
const ClangBackEnd::CodeCompletions completions = myCompleter.complete(5, 6);
ASSERT_TRUE(completions.isEmpty());
- ASSERT_THAT(myCompleter.neededCorrection(), ClangBackEnd::CompletionCorrection::NoCorrection);
}
TEST_F(CodeCompleterSlowTest, GlobalCompletionForSpaceAfterOnlyDot)
@@ -489,16 +487,7 @@ TEST_F(CodeCompleterSlowTest, NoDotArrowCorrectionForColonColon)
auto myCompleter = setupCompleter(noDotArrowCorrectionForColonColonFileContainer);
const ClangBackEnd::CodeCompletions completions = myCompleter.complete(1, 7);
- ASSERT_THAT(myCompleter.neededCorrection(), ClangBackEnd::CompletionCorrection::NoCorrection);
-}
-
-TEST_F(CodeCompleterSlowTest, DotArrowCorrectionForForwardDeclaredClassPointer)
-{
- auto myCompleter = setupCompleter(dotArrowCorrectionForForwardDeclaredClassPointer);
- const ClangBackEnd::CodeCompletions completions = myCompleter.complete(5, 9);
-
- ASSERT_TRUE(completions.isEmpty());
- ASSERT_THAT(myCompleter.neededCorrection(), ClangBackEnd::CompletionCorrection::DotToArrowCorrection);
+ ASSERT_THAT(completions, Not(Contains(HasFixIts())));
}
TEST_F(CodeCompleterSlowTest, NoGlobalCompletionAfterForwardDeclaredClassPointer)
@@ -507,7 +496,6 @@ TEST_F(CodeCompleterSlowTest, NoGlobalCompletionAfterForwardDeclaredClassPointer
const ClangBackEnd::CodeCompletions completions = myCompleter.complete(5, 10);
ASSERT_TRUE(completions.isEmpty());
- ASSERT_THAT(myCompleter.neededCorrection(), ClangBackEnd::CompletionCorrection::NoCorrection);
}
TEST_F(CodeCompleterSlowTest, GlobalCompletionAfterForwardDeclaredClassPointer)
@@ -516,7 +504,6 @@ TEST_F(CodeCompleterSlowTest, GlobalCompletionAfterForwardDeclaredClassPointer)
const ClangBackEnd::CodeCompletions completions = myCompleter.complete(6, 4);
ASSERT_TRUE(!completions.isEmpty());
- ASSERT_THAT(myCompleter.neededCorrection(), ClangBackEnd::CompletionCorrection::NoCorrection);
}
ClangBackEnd::CodeCompleter CodeCompleter::setupCompleter(
diff --git a/tests/unit/unittest/codecompletionsextractor-test.cpp b/tests/unit/unittest/codecompletionsextractor-test.cpp
index 553392700f..0facfadecb 100644
--- a/tests/unit/unittest/codecompletionsextractor-test.cpp
+++ b/tests/unit/unittest/codecompletionsextractor-test.cpp
@@ -169,7 +169,9 @@ TEST_F(CodeCompletionsExtractorSlowTest, Function)
{
ClangCodeCompleteResults completeResults(getResults(functionDocument, 20));
- ::CodeCompletionsExtractor extractor(completeResults.data());
+ ::CodeCompletionsExtractor extractor(
+ functionDocument.translationUnit().cxTranslationUnit(),
+ completeResults.data());
ASSERT_THAT(extractor, HasCompletion(Utf8StringLiteral("Function"),
CodeCompletion::FunctionCompletionKind,
@@ -180,7 +182,9 @@ TEST_F(CodeCompletionsExtractorSlowTest, TemplateFunction)
{
ClangCodeCompleteResults completeResults(getResults(functionDocument, 20));
- ::CodeCompletionsExtractor extractor(completeResults.data());
+ ::CodeCompletionsExtractor extractor(
+ functionDocument.translationUnit().cxTranslationUnit(),
+ completeResults.data());
ASSERT_THAT(extractor, HasCompletion(Utf8StringLiteral("TemplateFunction"),
CodeCompletion::TemplateFunctionCompletionKind,
@@ -191,7 +195,9 @@ TEST_F(CodeCompletionsExtractorSlowTest, Variable)
{
ClangCodeCompleteResults completeResults(getResults(variableDocument, 4));
- ::CodeCompletionsExtractor extractor(completeResults.data());
+ ::CodeCompletionsExtractor extractor(
+ variableDocument.translationUnit().cxTranslationUnit(),
+ completeResults.data());
ASSERT_THAT(extractor, HasCompletion(Utf8StringLiteral("Var"),
CodeCompletion::VariableCompletionKind,
@@ -202,7 +208,9 @@ TEST_F(CodeCompletionsExtractorSlowTest, NonTypeTemplateParameter)
{
ClangCodeCompleteResults completeResults(getResults(variableDocument, 25, 19));
- ::CodeCompletionsExtractor extractor(completeResults.data());
+ ::CodeCompletionsExtractor extractor(
+ variableDocument.translationUnit().cxTranslationUnit(),
+ completeResults.data());
ASSERT_THAT(extractor, HasCompletion(Utf8StringLiteral("NonTypeTemplateParameter"),
CodeCompletion::VariableCompletionKind,
@@ -214,7 +222,9 @@ TEST_F(CodeCompletionsExtractorSlowTest, VariableReference)
{
ClangCodeCompleteResults completeResults(getResults(variableDocument, 12));
- ::CodeCompletionsExtractor extractor(completeResults.data());
+ ::CodeCompletionsExtractor extractor(
+ variableDocument.translationUnit().cxTranslationUnit(),
+ completeResults.data());
ASSERT_THAT(extractor, HasCompletion(Utf8StringLiteral("Var"),
CodeCompletion::VariableCompletionKind,
@@ -225,7 +235,9 @@ TEST_F(CodeCompletionsExtractorSlowTest, Parameter)
{
ClangCodeCompleteResults completeResults(getResults(variableDocument, 4));
- ::CodeCompletionsExtractor extractor(completeResults.data());
+ ::CodeCompletionsExtractor extractor(
+ variableDocument.translationUnit().cxTranslationUnit(),
+ completeResults.data());
ASSERT_THAT(extractor, HasCompletion(Utf8StringLiteral("Parameter"),
CodeCompletion::VariableCompletionKind,
@@ -236,7 +248,9 @@ TEST_F(CodeCompletionsExtractorSlowTest, Field)
{
ClangCodeCompleteResults completeResults(getResults(variableDocument, 20));
- ::CodeCompletionsExtractor extractor(completeResults.data());
+ ::CodeCompletionsExtractor extractor(
+ variableDocument.translationUnit().cxTranslationUnit(),
+ completeResults.data());
ASSERT_THAT(extractor, HasCompletion(Utf8StringLiteral("Field"),
CodeCompletion::VariableCompletionKind,
@@ -247,7 +261,9 @@ TEST_F(CodeCompletionsExtractorSlowTest, Class)
{
ClangCodeCompleteResults completeResults(getResults(classDocument, 20));
- ::CodeCompletionsExtractor extractor(completeResults.data());
+ ::CodeCompletionsExtractor extractor(
+ classDocument.translationUnit().cxTranslationUnit(),
+ completeResults.data());
ASSERT_THAT(extractor, HasCompletion(Utf8StringLiteral("Class"),
CodeCompletion::ClassCompletionKind,
@@ -258,7 +274,9 @@ TEST_F(CodeCompletionsExtractorSlowTest, Struct)
{
ClangCodeCompleteResults completeResults(getResults(classDocument, 20));
- ::CodeCompletionsExtractor extractor(completeResults.data());
+ ::CodeCompletionsExtractor extractor(
+ classDocument.translationUnit().cxTranslationUnit(),
+ completeResults.data());
ASSERT_THAT(extractor, HasCompletion(Utf8StringLiteral("Struct"),
CodeCompletion::ClassCompletionKind,
@@ -269,7 +287,9 @@ TEST_F(CodeCompletionsExtractorSlowTest, Union)
{
ClangCodeCompleteResults completeResults(getResults(classDocument, 20));
- ::CodeCompletionsExtractor extractor(completeResults.data());
+ ::CodeCompletionsExtractor extractor(
+ classDocument.translationUnit().cxTranslationUnit(),
+ completeResults.data());
ASSERT_THAT(extractor, HasCompletion(Utf8StringLiteral("Union"),
CodeCompletion::ClassCompletionKind,
@@ -280,7 +300,9 @@ TEST_F(CodeCompletionsExtractorSlowTest, Typedef)
{
ClangCodeCompleteResults completeResults(getResults(classDocument, 20));
- ::CodeCompletionsExtractor extractor(completeResults.data());
+ ::CodeCompletionsExtractor extractor(
+ classDocument.translationUnit().cxTranslationUnit(),
+ completeResults.data());
ASSERT_THAT(extractor, HasCompletion(Utf8StringLiteral("TypeDef"),
CodeCompletion::TypeAliasCompletionKind,
@@ -291,7 +313,9 @@ TEST_F(CodeCompletionsExtractorSlowTest, UsingAsTypeAlias)
{
ClangCodeCompleteResults completeResults(getResults(classDocument, 20));
- ::CodeCompletionsExtractor extractor(completeResults.data());
+ ::CodeCompletionsExtractor extractor(
+ classDocument.translationUnit().cxTranslationUnit(),
+ completeResults.data());
ASSERT_THAT(extractor, HasCompletion(Utf8StringLiteral("UsingClass"),
CodeCompletion::TypeAliasCompletionKind,
@@ -302,7 +326,9 @@ TEST_F(CodeCompletionsExtractorSlowTest, TemplateTypeParameter)
{
ClangCodeCompleteResults completeResults(getResults(classDocument, 20));
- ::CodeCompletionsExtractor extractor(completeResults.data());
+ ::CodeCompletionsExtractor extractor(
+ classDocument.translationUnit().cxTranslationUnit(),
+ completeResults.data());
ASSERT_THAT(extractor, HasCompletion(Utf8StringLiteral("TemplateTypeParameter"),
CodeCompletion::ClassCompletionKind,
@@ -313,7 +339,9 @@ TEST_F(CodeCompletionsExtractorSlowTest, TemplateClass)
{
ClangCodeCompleteResults completeResults(getResults(classDocument, 20));
- ::CodeCompletionsExtractor extractor(completeResults.data());
+ ::CodeCompletionsExtractor extractor(
+ classDocument.translationUnit().cxTranslationUnit(),
+ completeResults.data());
ASSERT_THAT(extractor, HasCompletion(Utf8StringLiteral("TemplateClass"),
CodeCompletion::TemplateClassCompletionKind,
@@ -324,7 +352,9 @@ TEST_F(CodeCompletionsExtractorSlowTest, TemplateTemplateParameter)
{
ClangCodeCompleteResults completeResults(getResults(classDocument, 20));
- ::CodeCompletionsExtractor extractor(completeResults.data());
+ ::CodeCompletionsExtractor extractor(
+ classDocument.translationUnit().cxTranslationUnit(),
+ completeResults.data());
ASSERT_THAT(extractor, HasCompletion(Utf8StringLiteral("TemplateTemplateParameter"),
CodeCompletion::TemplateClassCompletionKind,
@@ -335,7 +365,9 @@ TEST_F(CodeCompletionsExtractorSlowTest, ClassTemplatePartialSpecialization)
{
ClangCodeCompleteResults completeResults(getResults(classDocument, 20));
- ::CodeCompletionsExtractor extractor(completeResults.data());
+ ::CodeCompletionsExtractor extractor(
+ classDocument.translationUnit().cxTranslationUnit(),
+ completeResults.data());
ASSERT_THAT(extractor, HasCompletion(Utf8StringLiteral("ClassTemplatePartialSpecialization"),
CodeCompletion::TemplateClassCompletionKind,
@@ -346,7 +378,9 @@ TEST_F(CodeCompletionsExtractorSlowTest, Namespace)
{
ClangCodeCompleteResults completeResults(getResults(namespaceDocument, 20));
- ::CodeCompletionsExtractor extractor(completeResults.data());
+ ::CodeCompletionsExtractor extractor(
+ namespaceDocument.translationUnit().cxTranslationUnit(),
+ completeResults.data());
ASSERT_THAT(extractor, HasCompletion(Utf8StringLiteral("Namespace"),
CodeCompletion::NamespaceCompletionKind,
@@ -357,7 +391,9 @@ TEST_F(CodeCompletionsExtractorSlowTest, NamespaceAlias)
{
ClangCodeCompleteResults completeResults(getResults(namespaceDocument, 20));
- ::CodeCompletionsExtractor extractor(completeResults.data());
+ ::CodeCompletionsExtractor extractor(
+ namespaceDocument.translationUnit().cxTranslationUnit(),
+ completeResults.data());
ASSERT_THAT(extractor, HasCompletion(Utf8StringLiteral("NamespaceAlias"),
CodeCompletion::NamespaceCompletionKind,
@@ -368,7 +404,9 @@ TEST_F(CodeCompletionsExtractorSlowTest, Enumeration)
{
ClangCodeCompleteResults completeResults(getResults(enumerationDocument, 20));
- ::CodeCompletionsExtractor extractor(completeResults.data());
+ ::CodeCompletionsExtractor extractor(
+ enumerationDocument.translationUnit().cxTranslationUnit(),
+ completeResults.data());
ASSERT_THAT(extractor, HasCompletion(Utf8StringLiteral("Enumeration"),
CodeCompletion::EnumerationCompletionKind,
@@ -379,7 +417,9 @@ TEST_F(CodeCompletionsExtractorSlowTest, Enumerator)
{
ClangCodeCompleteResults completeResults(getResults(enumerationDocument, 20));
- ::CodeCompletionsExtractor extractor(completeResults.data());
+ ::CodeCompletionsExtractor extractor(
+ enumerationDocument.translationUnit().cxTranslationUnit(),
+ completeResults.data());
ASSERT_THAT(extractor, HasCompletion(Utf8StringLiteral("Enumerator"),
CodeCompletion::EnumeratorCompletionKind,
@@ -390,7 +430,9 @@ TEST_F(CodeCompletionsExtractorSlowTest, Constructor)
{
ClangCodeCompleteResults completeResults(getResults(constructorDocument, 20));
- ::CodeCompletionsExtractor extractor(completeResults.data());
+ ::CodeCompletionsExtractor extractor(
+ constructorDocument.translationUnit().cxTranslationUnit(),
+ completeResults.data());
ASSERT_THAT(extractor, HasCompletion(Utf8StringLiteral("Constructor"),
CodeCompletion::ConstructorCompletionKind,
@@ -401,7 +443,9 @@ TEST_F(CodeCompletionsExtractorSlowTest, Destructor)
{
ClangCodeCompleteResults completeResults(getResults(constructorDocument, 20));
- ::CodeCompletionsExtractor extractor(completeResults.data());
+ ::CodeCompletionsExtractor extractor(
+ constructorDocument.translationUnit().cxTranslationUnit(),
+ completeResults.data());
ASSERT_THAT(extractor, HasCompletion(Utf8StringLiteral("~Constructor"),
CodeCompletion::DestructorCompletionKind,
@@ -412,10 +456,12 @@ TEST_F(CodeCompletionsExtractorSlowTest, Method)
{
ClangCodeCompleteResults completeResults(getResults(functionDocument, 20));
- ::CodeCompletionsExtractor extractor(completeResults.data());
+ ::CodeCompletionsExtractor extractor(
+ functionDocument.translationUnit().cxTranslationUnit(),
+ completeResults.data());
ASSERT_THAT(extractor, HasCompletion(Utf8StringLiteral("Method"),
- CodeCompletion::FunctionCompletionKind,
+ CodeCompletion::FunctionDefinitionCompletionKind,
CodeCompletion::Available));
ASSERT_FALSE(extractor.currentCodeCompletion().hasParameters);
}
@@ -424,10 +470,12 @@ TEST_F(CodeCompletionsExtractorSlowTest, MethodWithParameters)
{
ClangCodeCompleteResults completeResults(getResults(functionDocument, 20));
- ::CodeCompletionsExtractor extractor(completeResults.data());
+ ::CodeCompletionsExtractor extractor(
+ functionDocument.translationUnit().cxTranslationUnit(),
+ completeResults.data());
ASSERT_THAT(extractor, HasCompletion(Utf8StringLiteral("MethodWithParameters"),
- CodeCompletion::FunctionCompletionKind,
+ CodeCompletion::FunctionDefinitionCompletionKind,
CodeCompletion::Available));
ASSERT_TRUE(extractor.currentCodeCompletion().hasParameters);
}
@@ -436,7 +484,9 @@ TEST_F(CodeCompletionsExtractorSlowTest, Slot)
{
ClangCodeCompleteResults completeResults(getResults(functionDocument, 20));
- ::CodeCompletionsExtractor extractor(completeResults.data());
+ ::CodeCompletionsExtractor extractor(
+ functionDocument.translationUnit().cxTranslationUnit(),
+ completeResults.data());
ASSERT_THAT(extractor, HasCompletion(Utf8StringLiteral("Slot"),
CodeCompletion::SlotCompletionKind,
@@ -447,7 +497,9 @@ TEST_F(CodeCompletionsExtractorSlowTest, Signal)
{
ClangCodeCompleteResults completeResults(getResults(functionDocument, 20));
- ::CodeCompletionsExtractor extractor(completeResults.data());
+ ::CodeCompletionsExtractor extractor(
+ functionDocument.translationUnit().cxTranslationUnit(),
+ completeResults.data());
ASSERT_THAT(extractor, HasCompletion(Utf8StringLiteral("Signal"),
CodeCompletion::SignalCompletionKind,
@@ -458,7 +510,9 @@ TEST_F(CodeCompletionsExtractorSlowTest, MacroDefinition)
{
ClangCodeCompleteResults completeResults(getResults(variableDocument, 35));
- ::CodeCompletionsExtractor extractor(completeResults.data());
+ ::CodeCompletionsExtractor extractor(
+ variableDocument.translationUnit().cxTranslationUnit(),
+ completeResults.data());
ASSERT_THAT(extractor, HasCompletion(Utf8StringLiteral("MacroDefinition"),
CodeCompletion::PreProcessorCompletionKind,
@@ -469,7 +523,9 @@ TEST_F(CodeCompletionsExtractorSlowTest, FunctionMacro)
{
ClangCodeCompleteResults completeResults(getResults(functionDocument, 20));
- ::CodeCompletionsExtractor extractor(completeResults.data());
+ ::CodeCompletionsExtractor extractor(
+ functionDocument.translationUnit().cxTranslationUnit(),
+ completeResults.data());
ASSERT_THAT(extractor, HasCompletion(Utf8StringLiteral("FunctionMacro"),
CodeCompletion::FunctionCompletionKind,
@@ -480,7 +536,9 @@ TEST_F(CodeCompletionsExtractorSlowTest, IntKeyword)
{
ClangCodeCompleteResults completeResults(getResults(functionDocument, 20));
- ::CodeCompletionsExtractor extractor(completeResults.data());
+ ::CodeCompletionsExtractor extractor(
+ functionDocument.translationUnit().cxTranslationUnit(),
+ completeResults.data());
ASSERT_THAT(extractor, HasCompletion(Utf8StringLiteral("int"),
CodeCompletion::KeywordCompletionKind,
@@ -491,7 +549,9 @@ TEST_F(CodeCompletionsExtractorSlowTest, SwitchKeyword)
{
ClangCodeCompleteResults completeResults(getResults(functionDocument, 20));
- ::CodeCompletionsExtractor extractor(completeResults.data());
+ ::CodeCompletionsExtractor extractor(
+ functionDocument.translationUnit().cxTranslationUnit(),
+ completeResults.data());
ASSERT_THAT(extractor, HasCompletion(Utf8StringLiteral("switch"),
CodeCompletion::KeywordCompletionKind,
@@ -502,7 +562,9 @@ TEST_F(CodeCompletionsExtractorSlowTest, ClassKeyword)
{
ClangCodeCompleteResults completeResults(getResults(functionDocument, 20));
- ::CodeCompletionsExtractor extractor(completeResults.data());
+ ::CodeCompletionsExtractor extractor(
+ functionDocument.translationUnit().cxTranslationUnit(),
+ completeResults.data());
ASSERT_THAT(extractor, HasCompletion(Utf8StringLiteral("class"),
CodeCompletion::KeywordCompletionKind,
@@ -513,10 +575,12 @@ TEST_F(CodeCompletionsExtractorSlowTest, DeprecatedFunction)
{
ClangCodeCompleteResults completeResults(getResults(functionDocument, 20));
- ::CodeCompletionsExtractor extractor(completeResults.data());
+ ::CodeCompletionsExtractor extractor(
+ functionDocument.translationUnit().cxTranslationUnit(),
+ completeResults.data());
ASSERT_THAT(extractor, HasCompletion(Utf8StringLiteral("DeprecatedFunction"),
- CodeCompletion::FunctionCompletionKind,
+ CodeCompletion::FunctionDefinitionCompletionKind,
CodeCompletion::Deprecated));
}
@@ -524,10 +588,12 @@ TEST_F(CodeCompletionsExtractorSlowTest, NotAccessibleFunction)
{
ClangCodeCompleteResults completeResults(getResults(functionDocument, 20));
- ::CodeCompletionsExtractor extractor(completeResults.data());
+ ::CodeCompletionsExtractor extractor(
+ functionDocument.translationUnit().cxTranslationUnit(),
+ completeResults.data());
ASSERT_THAT(extractor, HasCompletion(Utf8StringLiteral("NotAccessibleFunction"),
- CodeCompletion::FunctionCompletionKind,
+ CodeCompletion::FunctionDefinitionCompletionKind,
CodeCompletion::NotAccessible));
}
@@ -535,10 +601,12 @@ TEST_F(CodeCompletionsExtractorSlowTest, NotAvailableFunction)
{
ClangCodeCompleteResults completeResults(getResults(functionDocument, 20));
- ::CodeCompletionsExtractor extractor(completeResults.data());
+ ::CodeCompletionsExtractor extractor(
+ functionDocument.translationUnit().cxTranslationUnit(),
+ completeResults.data());
ASSERT_THAT(extractor, HasCompletion(Utf8StringLiteral("NotAvailableFunction"),
- CodeCompletion::FunctionCompletionKind,
+ CodeCompletion::FunctionDefinitionCompletionKind,
CodeCompletion::NotAvailable));
}
@@ -549,10 +617,12 @@ TEST_F(CodeCompletionsExtractorSlowTest, UnsavedFile)
TESTDATA_DIR"/complete_extractor_function_unsaved.cpp")});
ClangCodeCompleteResults completeResults(getResults(document, 20));
- ::CodeCompletionsExtractor extractor(completeResults.data());
+ ::CodeCompletionsExtractor extractor(
+ document.translationUnit().cxTranslationUnit(),
+ completeResults.data());
ASSERT_THAT(extractor, HasCompletion(Utf8StringLiteral("Method2"),
- CodeCompletion::FunctionCompletionKind,
+ CodeCompletion::FunctionDefinitionCompletionKind,
CodeCompletion::Available));
}
@@ -566,10 +636,12 @@ TEST_F(CodeCompletionsExtractorSlowTest, ChangeUnsavedFile)
TESTDATA_DIR"/complete_extractor_function_unsaved_2.cpp")});
completeResults = getResults(document, 20);
- ::CodeCompletionsExtractor extractor(completeResults.data());
+ ::CodeCompletionsExtractor extractor(
+ document.translationUnit().cxTranslationUnit(),
+ completeResults.data());
ASSERT_THAT(extractor, HasCompletion(Utf8StringLiteral("Method3"),
- CodeCompletion::FunctionCompletionKind,
+ CodeCompletion::FunctionDefinitionCompletionKind,
CodeCompletion::Available));
}
@@ -578,7 +650,9 @@ TEST_F(CodeCompletionsExtractorSlowTest, ArgumentDefinition)
project.setArguments({Utf8StringLiteral("-DArgumentDefinition"), Utf8StringLiteral("-std=gnu++14")});
ClangCodeCompleteResults completeResults(getResults(variableDocument, 35));
- ::CodeCompletionsExtractor extractor(completeResults.data());
+ ::CodeCompletionsExtractor extractor(
+ variableDocument.translationUnit().cxTranslationUnit(),
+ completeResults.data());
ASSERT_THAT(extractor, HasCompletion(Utf8StringLiteral("ArgumentDefinitionVariable"),
CodeCompletion::VariableCompletionKind,
@@ -590,7 +664,9 @@ TEST_F(CodeCompletionsExtractorSlowTest, NoArgumentDefinition)
project.setArguments({Utf8StringLiteral("-std=gnu++14")});
ClangCodeCompleteResults completeResults(getResults(variableDocument, 35));
- ::CodeCompletionsExtractor extractor(completeResults.data());
+ ::CodeCompletionsExtractor extractor(
+ variableDocument.translationUnit().cxTranslationUnit(),
+ completeResults.data());
ASSERT_THAT(extractor, Not(HasCompletion(Utf8StringLiteral("ArgumentDefinitionVariable"),
CodeCompletion::VariableCompletionKind,
@@ -601,7 +677,9 @@ TEST_F(CodeCompletionsExtractorSlowTest, CompletionChunksFunction)
{
ClangCodeCompleteResults completeResults(getResults(functionDocument, 20));
- ::CodeCompletionsExtractor extractor(completeResults.data());
+ ::CodeCompletionsExtractor extractor(
+ functionDocument.translationUnit().cxTranslationUnit(),
+ completeResults.data());
ASSERT_THAT(extractor, HasCompletionChunks(Utf8StringLiteral("Function"),
CodeCompletionChunks({{CodeCompletionChunk::ResultType, Utf8StringLiteral("void")},
@@ -614,7 +692,9 @@ TEST_F(CodeCompletionsExtractorSlowTest, CompletionChunksFunctionWithOptionalChu
{
ClangCodeCompleteResults completeResults(getResults(functionDocument, 20));
- ::CodeCompletionsExtractor extractor(completeResults.data());
+ ::CodeCompletionsExtractor extractor(
+ functionDocument.translationUnit().cxTranslationUnit(),
+ completeResults.data());
ASSERT_THAT(extractor, HasCompletionChunks(Utf8StringLiteral("FunctionWithOptional"),
CodeCompletionChunks({{CodeCompletionChunk::ResultType, Utf8StringLiteral("void")},
@@ -632,7 +712,9 @@ TEST_F(CodeCompletionsExtractorSlowTest, CompletionChunksField)
{
ClangCodeCompleteResults completeResults(getResults(variableDocument, 20));
- ::CodeCompletionsExtractor extractor(completeResults.data());
+ ::CodeCompletionsExtractor extractor(
+ variableDocument.translationUnit().cxTranslationUnit(),
+ completeResults.data());
ASSERT_THAT(extractor, HasCompletionChunks(Utf8StringLiteral("Field"),
CodeCompletionChunks({{CodeCompletionChunk::ResultType, Utf8StringLiteral("int")},
@@ -643,7 +725,9 @@ TEST_F(CodeCompletionsExtractorSlowTest, CompletionChunksEnumerator)
{
ClangCodeCompleteResults completeResults(getResults(enumerationDocument, 20));
- ::CodeCompletionsExtractor extractor(completeResults.data());
+ ::CodeCompletionsExtractor extractor(
+ enumerationDocument.translationUnit().cxTranslationUnit(),
+ completeResults.data());
ASSERT_THAT(extractor, HasCompletionChunks(Utf8StringLiteral("Enumerator"),
CodeCompletionChunks({{CodeCompletionChunk::ResultType, Utf8StringLiteral("Enumeration")},
@@ -654,7 +738,9 @@ TEST_F(CodeCompletionsExtractorSlowTest, CompletionChunksEnumeration)
{
ClangCodeCompleteResults completeResults(getResults(enumerationDocument, 20));
- ::CodeCompletionsExtractor extractor(completeResults.data());
+ ::CodeCompletionsExtractor extractor(
+ enumerationDocument.translationUnit().cxTranslationUnit(),
+ completeResults.data());
ASSERT_THAT(extractor, HasCompletionChunks(Utf8StringLiteral("Enumeration"),
CodeCompletionChunks({{CodeCompletionChunk::TypedText, Utf8StringLiteral("Enumeration")}})));
@@ -664,7 +750,9 @@ TEST_F(CodeCompletionsExtractorSlowTest, CompletionChunksClass)
{
ClangCodeCompleteResults completeResults(getResults(classDocument, 20));
- ::CodeCompletionsExtractor extractor(completeResults.data());
+ ::CodeCompletionsExtractor extractor(
+ classDocument.translationUnit().cxTranslationUnit(),
+ completeResults.data());
ASSERT_THAT(extractor, HasCompletionChunks(Utf8StringLiteral("Class"),
CodeCompletionChunks({{CodeCompletionChunk::TypedText, Utf8StringLiteral("Class")}})));
@@ -675,7 +763,9 @@ TEST_F(CodeCompletionsExtractorSlowTest, BriefComment)
ClangCodeCompleteResults completeResults(getResults(briefCommentDocument, 10, 1,
/*needsReparse=*/ true));
- ::CodeCompletionsExtractor extractor(completeResults.data());
+ ::CodeCompletionsExtractor extractor(
+ briefCommentDocument.translationUnit().cxTranslationUnit(),
+ completeResults.data());
ASSERT_THAT(extractor, HasBriefComment(Utf8StringLiteral("BriefComment"), Utf8StringLiteral("A brief comment")));
}
@@ -684,7 +774,9 @@ TEST_F(CodeCompletionsExtractorSlowTest, OverloadCandidate)
{
ClangCodeCompleteResults completeResults(getResults(functionOverloadDocument, 8, 13));
- ::CodeCompletionsExtractor extractor(completeResults.data());
+ ::CodeCompletionsExtractor extractor(
+ functionOverloadDocument.translationUnit().cxTranslationUnit(),
+ completeResults.data());
ASSERT_THAT(extractor, HasCompletionChunks(Utf8String(),
CodeCompletionChunks({
diff --git a/tests/unit/unittest/data/symbolindexing_main1.cpp b/tests/unit/unittest/data/symbolindexing_main1.cpp
index 58df77916a..f0d60a5842 100644
--- a/tests/unit/unittest/data/symbolindexing_main1.cpp
+++ b/tests/unit/unittest/data/symbolindexing_main1.cpp
@@ -34,3 +34,8 @@ void f()
void f(int);
void f(double);
+
+void f2()
+{
+ function();
+}
diff --git a/tests/unit/unittest/generatedfiles-test.cpp b/tests/unit/unittest/generatedfiles-test.cpp
new file mode 100644
index 0000000000..a042f1679c
--- /dev/null
+++ b/tests/unit/unittest/generatedfiles-test.cpp
@@ -0,0 +1,72 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+#include "googletest.h"
+
+#include <generatedfiles.h>
+
+namespace {
+
+using ClangBackEnd::V2::FileContainer;
+using ClangBackEnd::V2::FileContainers;
+
+class GeneratedFiles : public testing::Test
+{
+protected:
+ FileContainer file1{"/file1", "content1"};
+ FileContainer file1b{"/file1", "content1b"};
+ FileContainer file2{"/file2", "content2"};
+ FileContainer file2b{"/file2", "content2b"};
+ FileContainer file3{"/file3", "content3"};
+ FileContainer file4{"/file4", "content4"};
+ ClangBackEnd::GeneratedFiles generatedFiles;
+};
+
+TEST_F(GeneratedFiles, AddGeneratedFiles)
+{
+ generatedFiles.update({file1, file2});
+
+ ASSERT_THAT(generatedFiles.fileContainers(), ElementsAre(file1, file2));
+}
+
+TEST_F(GeneratedFiles, UpdateGeneratedFiles)
+{
+ generatedFiles.update({{file1, file3}});
+
+ generatedFiles.update({file1b, file2b, file4});
+
+ ASSERT_THAT(generatedFiles.fileContainers(), ElementsAre(file1b, file2b, file3, file4));
+}
+
+TEST_F(GeneratedFiles, RemoveGeneratedFiles)
+{
+ generatedFiles.update({file1, file2, file3, file4});
+
+ generatedFiles.remove({"/file2", "/file4"});
+
+ ASSERT_THAT(generatedFiles.fileContainers(), ElementsAre(file1, file3));
+}
+
+}
diff --git a/tests/unit/unittest/gtest-creator-printing.cpp b/tests/unit/unittest/gtest-creator-printing.cpp
index a3e5a8982b..28cbf6b788 100644
--- a/tests/unit/unittest/gtest-creator-printing.cpp
+++ b/tests/unit/unittest/gtest-creator-printing.cpp
@@ -143,6 +143,11 @@ std::ostream &operator<<(std::ostream &out, const LineColumn &lineColumn)
return out << "(" << lineColumn.line << ", " << lineColumn.column << ")";
}
+void PrintTo(Utils::SmallStringView text, ::std::ostream *os)
+{
+ *os << text;
+}
+
void PrintTo(const Utils::SmallString &text, ::std::ostream *os)
{
*os << text;
@@ -299,23 +304,10 @@ std::ostream &operator<<(std::ostream &os, const AliveMessage &/*message*/)
return os << "()";
}
-#define RETURN_TEXT_FOR_CASE(enumValue) case CompletionCorrection::enumValue: return #enumValue
-static const char *completionCorrectionToText(CompletionCorrection correction)
-{
- switch (correction) {
- RETURN_TEXT_FOR_CASE(NoCorrection);
- RETURN_TEXT_FOR_CASE(DotToArrowCorrection);
- }
-
- return "";
-}
-#undef RETURN_TEXT_FOR_CASE
-
std::ostream &operator<<(std::ostream &os, const CompletionsMessage &message)
{
os << "("
<< message.codeCompletions << ", "
- << completionCorrectionToText(message.neededCorrection) << ", "
<< message.ticketNumber
<< ")";
@@ -538,6 +530,8 @@ static const char *highlightingTypeToCStringLiteral(HighlightingType type)
RETURN_TEXT_FOR_CASE(ObjectiveCImplementation);
RETURN_TEXT_FOR_CASE(ObjectiveCProperty);
RETURN_TEXT_FOR_CASE(ObjectiveCMethod);
+ RETURN_TEXT_FOR_CASE(TemplateTypeParameter);
+ RETURN_TEXT_FOR_CASE(TemplateTemplateParameter);
}
return "";
@@ -992,6 +986,16 @@ std::ostream &operator<<(std::ostream &out, SymbolTags symbolTags)
return out;
}
+std::ostream &operator<<(std::ostream &out, const UpdateGeneratedFilesMessage &message)
+{
+ return out << "(" << message.generatedFiles << ")";
+}
+
+std::ostream &operator<<(std::ostream &out, const RemoveGeneratedFilesMessage &message)
+{
+ return out << "(" << message.generatedFiles << ")";
+}
+
void PrintTo(const FilePath &filePath, ::std::ostream *os)
{
*os << filePath;
@@ -1031,6 +1035,7 @@ std::ostream &operator<<(std::ostream &out, const ProjectPartContainer &containe
<< container.projectPartId << ", "
<< container.arguments << ", "
<< container.headerPathIds << ", "
+ << container.sourcePathIds << ", "
<< container.compilerMacros << ", "
<< container.includeSearchPaths << ")";
diff --git a/tests/unit/unittest/gtest-creator-printing.h b/tests/unit/unittest/gtest-creator-printing.h
index a7c200daad..91c1e7fd37 100644
--- a/tests/unit/unittest/gtest-creator-printing.h
+++ b/tests/unit/unittest/gtest-creator-printing.h
@@ -67,6 +67,7 @@ std::ostream &operator<<(std::ostream &out, const Macro &macro);
namespace Utils {
class LineColumn;
+class SmallStringView;
std::ostream &operator<<(std::ostream &out, const LineColumn &lineColumn);
@@ -85,6 +86,7 @@ void PrintTo(const Utils::optional<Type> &optional, ::std::ostream *os)
*os << optional;
}
+void PrintTo(Utils::SmallStringView text, ::std::ostream *os);
void PrintTo(const Utils::SmallString &text, ::std::ostream *os);
void PrintTo(const Utils::PathString &text, ::std::ostream *os);
@@ -165,6 +167,8 @@ class SymbolEntry;
enum class SymbolKind : uchar;
enum class SymbolTag : uchar;
using SymbolTags = Utils::SizedArray<SymbolTag, 7>;
+class UpdateGeneratedFilesMessage;
+class RemoveGeneratedFilesMessage;
std::ostream &operator<<(std::ostream &out, const SourceLocationEntry &entry);
std::ostream &operator<<(std::ostream &out, const IdPaths &idPaths);
@@ -242,6 +246,8 @@ std::ostream &operator<<(std::ostream &out, const SymbolEntry &symbolEntry);
std::ostream &operator<<(std::ostream &out, SymbolKind symbolKind);
std::ostream &operator<<(std::ostream &out, SymbolTag symbolTag);
std::ostream &operator<<(std::ostream &out, SymbolTags symbolTags);
+std::ostream &operator<<(std::ostream &out, const UpdateGeneratedFilesMessage &message);
+std::ostream &operator<<(std::ostream &out, const RemoveGeneratedFilesMessage &message);
void PrintTo(const FilePath &filePath, ::std::ostream *os);
void PrintTo(const FilePathView &filePathView, ::std::ostream *os);
diff --git a/tests/unit/unittest/mockpchmanagerserver.h b/tests/unit/unittest/mockpchmanagerserver.h
index 766abd95ab..906903efd0 100644
--- a/tests/unit/unittest/mockpchmanagerserver.h
+++ b/tests/unit/unittest/mockpchmanagerserver.h
@@ -38,6 +38,10 @@ public:
void (const ClangBackEnd::UpdateProjectPartsMessage&));
MOCK_METHOD1(removeProjectParts,
void (const ClangBackEnd::RemoveProjectPartsMessage&));
+ MOCK_METHOD1(updateGeneratedFiles,
+ void (const ClangBackEnd::UpdateGeneratedFilesMessage&));
+ MOCK_METHOD1(removeGeneratedFiles,
+ void (const ClangBackEnd::RemoveGeneratedFilesMessage&));
void updateProjectParts(ClangBackEnd::UpdateProjectPartsMessage &&message) override
{
@@ -48,4 +52,14 @@ public:
{
removeProjectParts(message);
}
+
+ void updateGeneratedFiles(ClangBackEnd::UpdateGeneratedFilesMessage &&message) override
+ {
+ updateGeneratedFiles(message);
+ }
+
+ void removeGeneratedFiles(ClangBackEnd::RemoveGeneratedFilesMessage &&message) override
+ {
+ removeGeneratedFiles(message);
+ }
};
diff --git a/tests/unit/unittest/mockrefactoringserver.h b/tests/unit/unittest/mockrefactoringserver.h
index 091807e203..9de1a18e2b 100644
--- a/tests/unit/unittest/mockrefactoringserver.h
+++ b/tests/unit/unittest/mockrefactoringserver.h
@@ -47,9 +47,15 @@ public:
MOCK_METHOD1(updateProjectParts,
void (const ClangBackEnd::UpdateProjectPartsMessage&));
+ MOCK_METHOD1(updateGeneratedFiles,
+ void (const ClangBackEnd::UpdateGeneratedFilesMessage&));
+
MOCK_METHOD1(removeProjectParts,
void (const ClangBackEnd::RemoveProjectPartsMessage&));
+ MOCK_METHOD1(removeGeneratedFiles,
+ void (const ClangBackEnd::RemoveGeneratedFilesMessage&));
+
MOCK_METHOD0(cancel,
void());
@@ -73,8 +79,18 @@ public:
updateProjectParts(message);
}
+ void updateGeneratedFiles(ClangBackEnd::UpdateGeneratedFilesMessage &&message) override
+ {
+ updateGeneratedFiles(message);
+ }
+
void removeProjectParts(ClangBackEnd::RemoveProjectPartsMessage &&message) override
{
removeProjectParts(message);
}
+
+ void removeGeneratedFiles(ClangBackEnd::RemoveGeneratedFilesMessage &&message) override
+ {
+ removeGeneratedFiles(message);
+ }
};
diff --git a/tests/unit/unittest/mocksymbolindexing.h b/tests/unit/unittest/mocksymbolindexing.h
index 8a42ebfbc9..967a5f6aab 100644
--- a/tests/unit/unittest/mocksymbolindexing.h
+++ b/tests/unit/unittest/mocksymbolindexing.h
@@ -37,7 +37,7 @@ public:
const ClangBackEnd::V2::FileContainers &generatedFiles));
void updateProjectParts(ClangBackEnd::V2::ProjectPartContainers &&projectParts,
- ClangBackEnd::V2::FileContainers &&generatedFiles) override
+ const ClangBackEnd::V2::FileContainers &generatedFiles) override
{
updateProjectParts(projectParts, generatedFiles);
}
diff --git a/tests/unit/unittest/pchmanagerclient-test.cpp b/tests/unit/unittest/pchmanagerclient-test.cpp
index 9e40a21249..8c13055c5e 100644
--- a/tests/unit/unittest/pchmanagerclient-test.cpp
+++ b/tests/unit/unittest/pchmanagerclient-test.cpp
@@ -35,7 +35,9 @@
#include <filepathcaching.h>
#include <refactoringdatabaseinitializer.h>
#include <precompiledheadersupdatedmessage.h>
+#include <removegeneratedfilesmessage.h>
#include <removeprojectpartsmessage.h>
+#include <updategeneratedfilesmessage.h>
#include <updateprojectpartsmessage.h>
namespace {
@@ -167,7 +169,6 @@ TEST_F(PchManagerClient, ProjectPartPchRemovedFromDatabase)
{
EXPECT_CALL(mockPrecompiledHeaderStorage, deletePrecompiledHeader(TypedEq<Utils::SmallStringView>(projectPartId)));
-
projectUpdater.removeProjectParts({QString(projectPartId)});
}
diff --git a/tests/unit/unittest/pchmanagerclientserverinprocess-test.cpp b/tests/unit/unittest/pchmanagerclientserverinprocess-test.cpp
index f37fe2ae5e..248e9abf63 100644
--- a/tests/unit/unittest/pchmanagerclientserverinprocess-test.cpp
+++ b/tests/unit/unittest/pchmanagerclientserverinprocess-test.cpp
@@ -32,7 +32,9 @@
#include <pchmanagerclientproxy.h>
#include <pchmanagerserverproxy.h>
#include <precompiledheadersupdatedmessage.h>
+#include <removegeneratedfilesmessage.h>
#include <removeprojectpartsmessage.h>
+#include <updategeneratedfilesmessage.h>
#include <updateprojectpartsmessage.h>
#include <QBuffer>
@@ -41,10 +43,12 @@
#include <vector>
+using ClangBackEnd::UpdateGeneratedFilesMessage;
using ClangBackEnd::UpdateProjectPartsMessage;
+using ClangBackEnd::RemoveGeneratedFilesMessage;
+using ClangBackEnd::RemoveProjectPartsMessage;
using ClangBackEnd::V2::FileContainer;
using ClangBackEnd::V2::ProjectPartContainer;
-using ClangBackEnd::RemoveProjectPartsMessage;
using ClangBackEnd::PrecompiledHeadersUpdatedMessage;
using ::testing::Args;
@@ -98,8 +102,7 @@ TEST_F(PchManagerClientServerInProcess, SendUpdateProjectPartsMessage)
{"/includes"},
{{1, 1}},
{{1, 2}}};
- FileContainer fileContainer{{"/path/to/", "file"}, "content", {}};
- UpdateProjectPartsMessage message{{projectPart2}, {fileContainer}};
+ UpdateProjectPartsMessage message{{projectPart2}};
EXPECT_CALL(mockPchManagerServer, updateProjectParts(message));
@@ -107,6 +110,17 @@ TEST_F(PchManagerClientServerInProcess, SendUpdateProjectPartsMessage)
scheduleServerMessages();
}
+TEST_F(PchManagerClientServerInProcess, SendUpdateGeneratedFilesMessage)
+{
+ FileContainer fileContainer{{"/path/to/", "file"}, "content", {}};
+ UpdateGeneratedFilesMessage message{{fileContainer}};
+
+ EXPECT_CALL(mockPchManagerServer, updateGeneratedFiles(message));
+
+ serverProxy.updateGeneratedFiles(message.clone());
+ scheduleServerMessages();
+}
+
TEST_F(PchManagerClientServerInProcess, SendRemoveProjectPartsMessage)
{
RemoveProjectPartsMessage message{{"projectPartId1", "projectPartId2"}};
@@ -117,6 +131,16 @@ TEST_F(PchManagerClientServerInProcess, SendRemoveProjectPartsMessage)
scheduleServerMessages();
}
+TEST_F(PchManagerClientServerInProcess, SendRemoveGeneratedFilesMessage)
+{
+ RemoveGeneratedFilesMessage message{{{"/path/to/", "file"}}};
+
+ EXPECT_CALL(mockPchManagerServer, removeGeneratedFiles(message));
+
+ serverProxy.removeGeneratedFiles(message.clone());
+ scheduleServerMessages();
+}
+
TEST_F(PchManagerClientServerInProcess, SendPrecompiledHeaderUpdatedMessage)
{
PrecompiledHeadersUpdatedMessage message{{{"projectPartId", "/path/to/pch", 1}}};
diff --git a/tests/unit/unittest/pchmanagerserver-test.cpp b/tests/unit/unittest/pchmanagerserver-test.cpp
index 995045d0ff..276aed07b2 100644
--- a/tests/unit/unittest/pchmanagerserver-test.cpp
+++ b/tests/unit/unittest/pchmanagerserver-test.cpp
@@ -35,6 +35,7 @@
#include <precompiledheadersupdatedmessage.h>
#include <refactoringdatabaseinitializer.h>
#include <removeprojectpartsmessage.h>
+#include <updategeneratedfilesmessage.h>
#include <updateprojectpartsmessage.h>
namespace {
@@ -82,14 +83,14 @@ protected:
{id(main2Path)}};
std::vector<ProjectPartContainer> projectParts{projectPart1, projectPart2};
FileContainer generatedFile{{"/path/to/", "file"}, "content", {}};
- ClangBackEnd::UpdateProjectPartsMessage UpdateProjectPartsMessage{Utils::clone(projectParts),
- {generatedFile}};
+ ClangBackEnd::UpdateProjectPartsMessage updateProjectPartsMessage{Utils::clone(projectParts)};
+ ClangBackEnd::UpdateGeneratedFilesMessage updateGeneratedFilesMessage{{generatedFile}};
ClangBackEnd::ProjectPartPch projectPartPch1{projectPart1.projectPartId.clone(), "/path1/to/pch", 1};
ClangBackEnd::ProjectPartPch projectPartPch2{projectPart2.projectPartId.clone(), "/path2/to/pch", 1};
std::vector<ClangBackEnd::ProjectPartPch> projectPartPchs{projectPartPch1, projectPartPch2};
ClangBackEnd::PrecompiledHeadersUpdatedMessage precompiledHeaderUpdatedMessage1{{projectPartPch1}};
ClangBackEnd::PrecompiledHeadersUpdatedMessage precompiledHeaderUpdatedMessage2{{projectPartPch2}};
- ClangBackEnd::RemoveProjectPartsMessage RemoveProjectPartsMessage{{projectPart1.projectPartId.clone(),
+ ClangBackEnd::RemoveProjectPartsMessage removeProjectPartsMessage{{projectPart1.projectPartId.clone(),
projectPart2.projectPartId.clone()}};
};
@@ -109,41 +110,46 @@ TEST_F(PchManagerServer, DoNotCallPrecompiledHeadersForUnsuccessfullyFinishedTas
}
TEST_F(PchManagerServer, CallBuildInPchCreator)
+{;
+ EXPECT_CALL(mockPchCreator, generatePchs(updateProjectPartsMessage.projectsParts));
+
+ server.updateProjectParts(updateProjectPartsMessage.clone());
+}
+
+TEST_F(PchManagerServer, CallSetGeneratedFiles)
{
- auto &&callSetGeneratedFiles = EXPECT_CALL(mockPchCreator,
- setGeneratedFiles(UpdateProjectPartsMessage.generatedFiles));
- EXPECT_CALL(mockPchCreator, generatePchs(UpdateProjectPartsMessage.projectsParts))
- .After(callSetGeneratedFiles);
+ EXPECT_CALL(mockPchCreator,
+ setGeneratedFiles(updateGeneratedFilesMessage.generatedFiles));
- server.updateProjectParts(UpdateProjectPartsMessage.clone());
+ server.updateGeneratedFiles(updateGeneratedFilesMessage.clone());
}
TEST_F(PchManagerServer, UpdateIncludesOfFileWatcher)
{
EXPECT_CALL(mockClangPathWatcher, updateIdPaths(idPaths));
- server.updateProjectParts(UpdateProjectPartsMessage.clone());
+ server.updateProjectParts(updateProjectPartsMessage.clone());
}
TEST_F(PchManagerServer, GetChangedProjectPartsFromProjectParts)
{
EXPECT_CALL(mockProjectParts, update(_));
- server.updateProjectParts(UpdateProjectPartsMessage.clone());
+ server.updateProjectParts(updateProjectPartsMessage.clone());
}
TEST_F(PchManagerServer, RemoveIncludesFromFileWatcher)
{
- EXPECT_CALL(mockClangPathWatcher, removeIds(RemoveProjectPartsMessage.projectsPartIds));
+ EXPECT_CALL(mockClangPathWatcher, removeIds(removeProjectPartsMessage.projectsPartIds));
- server.removeProjectParts(RemoveProjectPartsMessage.clone());
+ server.removeProjectParts(removeProjectPartsMessage.clone());
}
TEST_F(PchManagerServer, RemoveProjectPartsFromProjectParts)
{
- EXPECT_CALL(mockProjectParts, remove(RemoveProjectPartsMessage.projectsPartIds));
+ EXPECT_CALL(mockProjectParts, remove(removeProjectPartsMessage.projectsPartIds));
- server.removeProjectParts(RemoveProjectPartsMessage.clone());
+ server.removeProjectParts(removeProjectPartsMessage.clone());
}
TEST_F(PchManagerServer, SetPathWatcherNotifier)
@@ -155,7 +161,7 @@ TEST_F(PchManagerServer, SetPathWatcherNotifier)
TEST_F(PchManagerServer, CallProjectsInProjectPartsForIncludeChange)
{
- server.updateProjectParts(UpdateProjectPartsMessage.clone());
+ server.updateProjectParts(updateProjectPartsMessage.clone());
EXPECT_CALL(mockProjectParts, projects(ElementsAre(projectPart1.projectPartId)));
@@ -164,7 +170,7 @@ TEST_F(PchManagerServer, CallProjectsInProjectPartsForIncludeChange)
TEST_F(PchManagerServer, CallGeneratePchsInPchCreatorForIncludeChange)
{
- server.updateProjectParts(UpdateProjectPartsMessage.clone());
+ server.updateProjectParts(updateProjectPartsMessage.clone());
EXPECT_CALL(mockPchCreator, generatePchs(ElementsAre(projectPart1)));
@@ -173,7 +179,7 @@ TEST_F(PchManagerServer, CallGeneratePchsInPchCreatorForIncludeChange)
TEST_F(PchManagerServer, CallUpdateIdPathsInFileSystemWatcherForIncludeChange)
{
- server.updateProjectParts(UpdateProjectPartsMessage.clone());
+ server.updateProjectParts(updateProjectPartsMessage.clone());
EXPECT_CALL(mockClangPathWatcher, updateIdPaths(idPaths));
diff --git a/tests/unit/unittest/projectpartqueue-test.cpp b/tests/unit/unittest/projectpartqueue-test.cpp
new file mode 100644
index 0000000000..f13d0f5578
--- /dev/null
+++ b/tests/unit/unittest/projectpartqueue-test.cpp
@@ -0,0 +1,104 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+#include "googletest.h"
+
+#include <projectpartqueue.h>
+
+namespace {
+
+class ProjectPartQueue : public testing::Test
+{
+protected:
+ ClangBackEnd::ProjectPartQueue queue;
+ ClangBackEnd::V2::ProjectPartContainer projectPart1{"ProjectPart1",
+ {"--yi"},
+ {{"YI","1"}},
+ {"/yi"},
+ {{1, 1}},
+ {{1, 2}}};
+ ClangBackEnd::V2::ProjectPartContainer projectPart2{"ProjectPart2",
+ {"--er"},
+ {{"ER","2"}},
+ {"/bar"},
+ {{2, 1}},
+ {{2, 2}}};
+ ClangBackEnd::V2::ProjectPartContainer projectPart2b{"ProjectPart2",
+ {"--liang"},
+ {{"LIANG","3"}},
+ {"/liang"},
+ {{2, 3}},
+ {{2, 2}, {2, 4}}};
+ ClangBackEnd::V2::ProjectPartContainer projectPart3{"ProjectPart3",
+ {"--san"},
+ {{"SAN","2"}},
+ {"/SAN"},
+ {{3, 1}},
+ {{3, 2}}};
+ ClangBackEnd::V2::ProjectPartContainer projectPartMerged{"ProjectPart2",
+ {"--liang"},
+ {{"LIANG","3"}},
+ {"/liang"},
+ {{2, 1}, {2, 3}},
+ {{2, 2}, {2, 4}}};
+};
+
+TEST_F(ProjectPartQueue, AddProjectPart)
+{
+ queue.addProjectParts({projectPart1});
+
+ queue.addProjectParts({projectPart2});
+
+ ASSERT_THAT(queue.projectParts(), ElementsAre(projectPart1, projectPart2));
+}
+
+TEST_F(ProjectPartQueue, IgnoreIdenticalProjectPart)
+{
+ queue.addProjectParts({projectPart1, projectPart2});
+
+ queue.addProjectParts({projectPart1, projectPart2});
+
+ ASSERT_THAT(queue.projectParts(), ElementsAre(projectPart1, projectPart2));
+}
+
+TEST_F(ProjectPartQueue, MergeSameProjectPartWithSameId)
+{
+ queue.addProjectParts({projectPart1, projectPart2});
+
+ queue.addProjectParts({projectPart1, projectPart2b, projectPart3});
+
+ ASSERT_THAT(queue.projectParts(), ElementsAre(projectPart1, projectPartMerged, projectPart3));
+}
+
+TEST_F(ProjectPartQueue, RemoveProjectPart)
+{
+ queue.addProjectParts({projectPart1, projectPart2, projectPart3});
+
+ queue.removeProjectParts({projectPart2.projectPartId});
+
+ ASSERT_THAT(queue.projectParts(), ElementsAre(projectPart1, projectPart3));
+}
+
+}
diff --git a/tests/unit/unittest/projectupdater-test.cpp b/tests/unit/unittest/projectupdater-test.cpp
index a77dfc0b5b..0dd63c2558 100644
--- a/tests/unit/unittest/projectupdater-test.cpp
+++ b/tests/unit/unittest/projectupdater-test.cpp
@@ -37,7 +37,9 @@
#include <precompiledheaderstorage.h>
#include <precompiledheadersupdatedmessage.h>
#include <refactoringdatabaseinitializer.h>
+#include <removegeneratedfilesmessage.h>
#include <removeprojectpartsmessage.h>
+#include <updategeneratedfilesmessage.h>
#include <updateprojectpartsmessage.h>
#include <cpptools/compileroptionsbuilder.h>
@@ -81,11 +83,19 @@ protected:
projectPart.files.push_back(source1ProjectFile);
projectPart.files.push_back(source2ProjectFile);
projectPart.displayName = QString(projectPartId);
- projectPart.projectMacros.push_back({"DEFINE", "1"});
+ projectPart.projectMacros = {{"FOO", "2"}, {"BAR", "1"}};
+ projectPart2.files.push_back(header2ProjectFile);
+ projectPart2.files.push_back(header1ProjectFile);
+ projectPart2.files.push_back(source2ProjectFile);
+ projectPart2.files.push_back(source1ProjectFile);
+ projectPart2.displayName = QString(projectPartId2);
+ projectPart2.projectMacros = {{"BAR", "1"}, {"FOO", "2"}};
Utils::SmallStringVector arguments{ClangPchManager::ProjectUpdater::compilerArguments(
&projectPart)};
+ Utils::SmallStringVector arguments2{ClangPchManager::ProjectUpdater::compilerArguments(
+ &projectPart2)};
expectedContainer = {projectPartId.clone(),
arguments.clone(),
@@ -93,6 +103,12 @@ protected:
{},
{filePathId(headerPaths[1])},
{filePathIds(sourcePaths)}};
+ expectedContainer2 = {projectPartId2.clone(),
+ arguments2.clone(),
+ Utils::clone(compilerMacros),
+ {},
+ {filePathId(headerPaths[1])},
+ {filePathIds(sourcePaths)}};
}
protected:
@@ -108,25 +124,73 @@ protected:
Utils::SmallString projectPartId2{"project2"};
Utils::PathStringVector headerPaths = {"/path/to/header1.h", "/path/to/header2.h"};
Utils::PathStringVector sourcePaths = {"/path/to/source1.cpp", "/path/to/source2.cpp"};
- ClangBackEnd::CompilerMacros compilerMacros = {{"DEFINE", "1"}};
+ ClangBackEnd::CompilerMacros compilerMacros = {{"BAR", "1"}, {"FOO", "2"}};
CppTools::ProjectFile header1ProjectFile{QString(headerPaths[0]), CppTools::ProjectFile::CXXHeader};
CppTools::ProjectFile header2ProjectFile{QString(headerPaths[1]), CppTools::ProjectFile::CXXHeader};
CppTools::ProjectFile source1ProjectFile{QString(sourcePaths[0]), CppTools::ProjectFile::CXXSource};
CppTools::ProjectFile source2ProjectFile{QString(sourcePaths[1]), CppTools::ProjectFile::CXXSource};
CppTools::ProjectPart projectPart;
+ CppTools::ProjectPart projectPart2;
ProjectPartContainer expectedContainer;
+ ProjectPartContainer expectedContainer2;
FileContainer generatedFile{{"/path/to", "header1.h"}, "content", {}};
+ FileContainer generatedFile2{{"/path/to2", "header1.h"}, "content", {}};
+ FileContainer generatedFile3{{"/path/to", "header2.h"}, "content", {}};
};
TEST_F(ProjectUpdater, CallUpdateProjectParts)
{
- std::vector<CppTools::ProjectPart*> projectParts = {&projectPart, &projectPart};
- ClangBackEnd::UpdateProjectPartsMessage message{{expectedContainer.clone(), expectedContainer.clone()},
- {generatedFile}};
+ std::vector<CppTools::ProjectPart*> projectParts = {&projectPart2, &projectPart};
+ ClangBackEnd::UpdateProjectPartsMessage message{{expectedContainer.clone(), expectedContainer2.clone()}};
+ updater.updateGeneratedFiles({generatedFile});
EXPECT_CALL(mockPchManagerServer, updateProjectParts(message));
- updater.updateProjectParts(projectParts, {generatedFile});
+ updater.updateProjectParts(projectParts);
+}
+
+TEST_F(ProjectUpdater, CallUpdateGeneratedFilesWithSortedEntries)
+{
+ ClangBackEnd::UpdateGeneratedFilesMessage message{{generatedFile, generatedFile3, generatedFile2}};
+
+ EXPECT_CALL(mockPchManagerServer, updateGeneratedFiles(message));
+
+ updater.updateGeneratedFiles({generatedFile2, generatedFile3, generatedFile});
+}
+
+TEST_F(ProjectUpdater, GeneratedFilesAddedAreSorted)
+{
+ updater.updateGeneratedFiles({generatedFile2, generatedFile3, generatedFile});
+
+ ASSERT_THAT(updater.generatedFiles().fileContainers(),
+ ElementsAre(generatedFile, generatedFile3, generatedFile2));
+}
+
+TEST_F(ProjectUpdater, GeneratedFilesAddedToExcludePaths)
+{
+ updater.updateGeneratedFiles({generatedFile2, generatedFile3, generatedFile});
+
+ ASSERT_THAT(updater.excludedPaths(), ElementsAre(generatedFile.filePath,
+ generatedFile3.filePath,
+ generatedFile2.filePath));
+}
+
+TEST_F(ProjectUpdater, CallRemoveGeneratedFiles)
+{
+ ClangBackEnd::RemoveGeneratedFilesMessage message{{{"/path/to/header1.h"}}};
+
+ EXPECT_CALL(mockPchManagerServer, removeGeneratedFiles(message));
+
+ updater.removeGeneratedFiles({{"/path/to/header1.h"}});
+}
+
+TEST_F(ProjectUpdater, GeneratedFilesRemovedFromExcludePaths)
+{
+ updater.updateGeneratedFiles({generatedFile});
+
+ updater.removeGeneratedFiles({generatedFile.filePath});
+
+ ASSERT_THAT(updater.excludedPaths(), IsEmpty());
}
TEST_F(ProjectUpdater, CallRemoveProjectParts)
@@ -142,6 +206,7 @@ TEST_F(ProjectUpdater, CallPrecompiledHeaderRemovedInPchManagerProjectUpdater)
{
ClangPchManager::PchManagerProjectUpdater pchUpdater{mockPchManagerServer, pchManagerClient, filePathCache};
ClangBackEnd::RemoveProjectPartsMessage message{{projectPartId, projectPartId2}};
+ EXPECT_CALL(mockPrecompiledHeaderStorage, deletePrecompiledHeader(_)).Times(AnyNumber());
EXPECT_CALL(mockPchManagerNotifier, precompiledHeaderRemoved(projectPartId.toQString()));
EXPECT_CALL(mockPchManagerNotifier, precompiledHeaderRemoved(projectPartId2.toQString()));
@@ -165,29 +230,34 @@ TEST_F(ProjectUpdater, ConvertProjectPartToProjectPartContainersHaveSameSizeLike
ASSERT_THAT(containers, SizeIs(2));
}
-TEST_F(ProjectUpdater, CreateExcludedPaths)
+TEST_F(ProjectUpdater, CreateSortedExcludedPaths)
{
- auto excludedPaths = updater.createExcludedPaths({generatedFile});
+ auto excludedPaths = updater.createExcludedPaths({generatedFile2, generatedFile3, generatedFile});
- ASSERT_THAT(excludedPaths, ElementsAre("/path/to/header1.h"));
+ ASSERT_THAT(excludedPaths, ElementsAre(ClangBackEnd::FilePath{"/path/to/header1.h"},
+ ClangBackEnd::FilePath{"/path/to/header2.h"},
+ ClangBackEnd::FilePath{"/path/to2/header1.h"}));
}
-TEST_F(ProjectUpdater, CreateCompilerMacros)
+TEST_F(ProjectUpdater, CreateSortedCompilerMacros)
{
- auto paths = updater.createCompilerMacros({{"DEFINE", "1"}});
+ auto paths = updater.createCompilerMacros({{"DEFINE", "1"}, {"FOO", "2"}, {"BAR", "1"}});
- ASSERT_THAT(paths, ElementsAre(CompilerMacro{"DEFINE", "1"}));
+ ASSERT_THAT(paths, ElementsAre(CompilerMacro{"BAR", "1"},
+ CompilerMacro{"FOO", "2"},
+ CompilerMacro{"DEFINE", "1"}));
}
-TEST_F(ProjectUpdater, CreateIncludeSearchPaths)
+TEST_F(ProjectUpdater, CreateSortedIncludeSearchPaths)
{
- ProjectPartHeaderPath includePath{"/to/path", ProjectPartHeaderPath::IncludePath};
+ ProjectPartHeaderPath includePath{"/to/path1", ProjectPartHeaderPath::IncludePath};
+ ProjectPartHeaderPath includePath2{"/to/path2", ProjectPartHeaderPath::IncludePath};
ProjectPartHeaderPath invalidPath;
ProjectPartHeaderPath frameworkPath{"/framework/path", ProjectPartHeaderPath::FrameworkPath};
- auto paths = updater.createIncludeSearchPaths({includePath, invalidPath, frameworkPath});
+ auto paths = updater.createIncludeSearchPaths({frameworkPath, includePath2, includePath, invalidPath});
- ASSERT_THAT(paths, ElementsAre(includePath.path, frameworkPath.path));
+ ASSERT_THAT(paths, ElementsAre(includePath.path, includePath2.path, frameworkPath.path));
}
}
diff --git a/tests/unit/unittest/readandwritemessageblock-test.cpp b/tests/unit/unittest/readandwritemessageblock-test.cpp
index bceeab7038..4a02631e13 100644
--- a/tests/unit/unittest/readandwritemessageblock-test.cpp
+++ b/tests/unit/unittest/readandwritemessageblock-test.cpp
@@ -214,9 +214,7 @@ TEST_F(ReadAndWriteMessageBlock, CompareCompletionsMessage)
{
ClangBackEnd::CodeCompletions codeCompletions({Utf8StringLiteral("newFunction()")});
- CompareMessage(ClangBackEnd::CompletionsMessage(codeCompletions,
- ClangBackEnd::CompletionCorrection::NoCorrection,
- 1));
+ CompareMessage(ClangBackEnd::CompletionsMessage(codeCompletions, 1));
}
TEST_F(ReadAndWriteMessageBlock, CompareAnnotationsMessage)
@@ -299,9 +297,7 @@ TEST_F(ReadAndWriteMessageBlock, ReadMessageAfterInterruption)
ClangBackEnd::MessageEnvelop ReadAndWriteMessageBlock::writeCompletionsMessage()
{
ClangBackEnd::CompletionsMessage message(
- ClangBackEnd::CodeCompletions({Utf8StringLiteral("newFunction()")}),
- ClangBackEnd::CompletionCorrection::NoCorrection,
- 1);
+ ClangBackEnd::CodeCompletions({Utf8StringLiteral("newFunction()")}), 1);
writeMessageBlock.write(message);
diff --git a/tests/unit/unittest/refactoringclientserverinprocess-test.cpp b/tests/unit/unittest/refactoringclientserverinprocess-test.cpp
index a5658ab178..278c33efa3 100644
--- a/tests/unit/unittest/refactoringclientserverinprocess-test.cpp
+++ b/tests/unit/unittest/refactoringclientserverinprocess-test.cpp
@@ -47,10 +47,12 @@ using ::testing::Args;
using ::testing::Property;
using ::testing::Eq;
+using ClangBackEnd::RemoveGeneratedFilesMessage;
+using ClangBackEnd::RemoveProjectPartsMessage;
using ClangBackEnd::UpdateProjectPartsMessage;
+using ClangBackEnd::UpdateGeneratedFilesMessage;
using ClangBackEnd::V2::FileContainer;
using ClangBackEnd::V2::ProjectPartContainer;
-using ClangBackEnd::RemoveProjectPartsMessage;
class RefactoringClientServerInProcess : public ::testing::Test
{
@@ -182,8 +184,7 @@ TEST_F(RefactoringClientServerInProcess, SendUpdateProjectPartsMessage)
{"/includes"},
{{1, 1}},
{{1, 2}}};
- FileContainer fileContainer{{"/path/to/", "file"}, "content", {}};
- UpdateProjectPartsMessage message{{projectPart2}, {fileContainer}};
+ UpdateProjectPartsMessage message{{projectPart2}};
EXPECT_CALL(mockRefactoringServer, updateProjectParts(message));
@@ -191,6 +192,17 @@ TEST_F(RefactoringClientServerInProcess, SendUpdateProjectPartsMessage)
scheduleServerMessages();
}
+TEST_F(RefactoringClientServerInProcess, SendUpdateGeneratedFilesMessage)
+{
+ FileContainer fileContainer{{"/path/to/", "file"}, "content", {}};
+ UpdateGeneratedFilesMessage message{{fileContainer}};
+
+ EXPECT_CALL(mockRefactoringServer, updateGeneratedFiles(message));
+
+ serverProxy.updateGeneratedFiles(message.clone());
+ scheduleServerMessages();
+}
+
TEST_F(RefactoringClientServerInProcess, SendRemoveProjectPartsMessage)
{
RemoveProjectPartsMessage message{{"projectPartId1", "projectPartId2"}};
@@ -201,6 +213,16 @@ TEST_F(RefactoringClientServerInProcess, SendRemoveProjectPartsMessage)
scheduleServerMessages();
}
+TEST_F(RefactoringClientServerInProcess, SendRemoveGeneratedFilesMessage)
+{
+ RemoveGeneratedFilesMessage message{{{"/path/to/", "file"}}};
+
+ EXPECT_CALL(mockRefactoringServer, removeGeneratedFiles(message));
+
+ serverProxy.removeGeneratedFiles(message.clone());
+ scheduleServerMessages();
+}
+
TEST_F(RefactoringClientServerInProcess, CancelMessage)
{
EXPECT_CALL(mockRefactoringServer, cancel());
diff --git a/tests/unit/unittest/refactoringengine-test.cpp b/tests/unit/unittest/refactoringengine-test.cpp
index 1a7c0d3b92..57b11a9523 100644
--- a/tests/unit/unittest/refactoringengine-test.cpp
+++ b/tests/unit/unittest/refactoringengine-test.cpp
@@ -149,7 +149,7 @@ void RefactoringEngine::SetUp()
projectPart = CppTools::ProjectPart::Ptr(new CppTools::ProjectPart);
projectPart->files.push_back(projectFile);
- CompilerOptionsBuilder optionsBuilder(*projectPart, CLANG_VERSION, CLANG_RESOURCE_DIR);
+ CompilerOptionsBuilder optionsBuilder(*projectPart);
commandLine = Utils::SmallStringVector(optionsBuilder.build(
projectFile.kind,
CompilerOptionsBuilder::PchUsage::None));
diff --git a/tests/unit/unittest/refactoringserver-test.cpp b/tests/unit/unittest/refactoringserver-test.cpp
index 0abe22f1b6..51cae8697e 100644
--- a/tests/unit/unittest/refactoringserver-test.cpp
+++ b/tests/unit/unittest/refactoringserver-test.cpp
@@ -298,6 +298,20 @@ TEST_F(RefactoringServerSlowTest, ForInvalidRequestSourceRangesAndDiagnosticsGet
refactoringServer.requestSourceRangesAndDiagnosticsForQueryMessage(std::move(message));
}
+TEST_F(RefactoringServer, UpdateGeneratedFilesSetMemberWhichIsUsedForSymbolIndexing)
+{
+ FileContainers unsaved{{{TESTDATA_DIR, "query_simplefunction.h"},
+ "void f();",
+ {}}};
+
+
+ EXPECT_CALL(mockSymbolIndexing,
+ updateProjectParts(_, unsaved));
+
+ refactoringServer.updateGeneratedFiles(Utils::clone(unsaved));
+ refactoringServer.updateProjectParts({});
+}
+
TEST_F(RefactoringServer, UpdateProjectPartsCallsSymbolIndexingUpdateProjectParts)
{
ProjectPartContainers projectParts{{{"projectPartId",
@@ -306,17 +320,15 @@ TEST_F(RefactoringServer, UpdateProjectPartsCallsSymbolIndexingUpdateProjectPart
{"/includes"},
{filePathId("header1.h")},
{filePathId("main.cpp")}}}};
- FileContainers unsaved{{{TESTDATA_DIR, "query_simplefunction.h"},
- "void f();",
- {}}};
EXPECT_CALL(mockSymbolIndexing,
- updateProjectParts(projectParts, unsaved));
+ updateProjectParts(projectParts, _));
- refactoringServer.updateProjectParts({Utils::clone(projectParts), Utils::clone(unsaved)});
+ refactoringServer.updateProjectParts({Utils::clone(projectParts)});
}
+
void RefactoringServer::SetUp()
{
temporaryFile.open();
diff --git a/tests/unit/unittest/symbolindexing-test.cpp b/tests/unit/unittest/symbolindexing-test.cpp
index 1d6c8d720b..1971379fd6 100644
--- a/tests/unit/unittest/symbolindexing-test.cpp
+++ b/tests/unit/unittest/symbolindexing-test.cpp
@@ -97,11 +97,12 @@ TEST_F(SymbolIndexing, Locations)
{
indexing.indexer().updateProjectParts({projectPart1}, {});
- auto locations = query.locationsAt(filePathId(TESTDATA_DIR "/symbolindexing_main1.cpp"), 6, 5);
+ auto locations = query.locationsAt(filePathId(TESTDATA_DIR "/symbolindexing_main1.cpp"), 1, 6);
ASSERT_THAT(locations,
ElementsAre(
- IsLocation(filePathId(TESTDATA_DIR "/symbolindexing_main1.cpp"), 5, 9),
- IsLocation(filePathId(TESTDATA_DIR "/symbolindexing_main1.cpp"), 6, 5)));
+ IsLocation(filePathId(TESTDATA_DIR "/symbolindexing_main1.cpp"), 1, 6),
+ IsLocation(filePathId(TESTDATA_DIR "/symbolindexing_main1.cpp"), 3, 6),
+ IsLocation(filePathId(TESTDATA_DIR "/symbolindexing_main1.cpp"), 40, 5)));
}
TEST_F(SymbolIndexing, DISABLED_TemplateFunction)
@@ -121,11 +122,12 @@ TEST_F(SymbolIndexing, PathsAreUpdated)
indexing.indexer().pathsChanged({filePathId(main1Path)});
indexing.indexer().pathsChanged({filePathId(main1Path)});
- auto locations = query.locationsAt(filePathId(TESTDATA_DIR "/symbolindexing_main1.cpp"), 6, 5);
+ auto locations = query.locationsAt(filePathId(TESTDATA_DIR "/symbolindexing_main1.cpp"), 1, 6);
ASSERT_THAT(locations,
ElementsAre(
- IsLocation(filePathId(TESTDATA_DIR "/symbolindexing_main1.cpp"), 5, 9),
- IsLocation(filePathId(TESTDATA_DIR "/symbolindexing_main1.cpp"), 6, 5)));
+ IsLocation(filePathId(TESTDATA_DIR "/symbolindexing_main1.cpp"), 1, 6),
+ IsLocation(filePathId(TESTDATA_DIR "/symbolindexing_main1.cpp"), 3, 6),
+ IsLocation(filePathId(TESTDATA_DIR "/symbolindexing_main1.cpp"), 40, 5)));
}
}
diff --git a/tests/unit/unittest/symbolscollector-test.cpp b/tests/unit/unittest/symbolscollector-test.cpp
index 1dcc4d95c7..ec2535a9a1 100644
--- a/tests/unit/unittest/symbolscollector-test.cpp
+++ b/tests/unit/unittest/symbolscollector-test.cpp
@@ -168,7 +168,7 @@ TEST_F(SymbolsCollector, CollectSymbolName)
collector.collectSymbols();
ASSERT_THAT(collector.symbols(),
- Contains(HasSymbolName("x")));
+ Contains(HasSymbolName("function")));
}
TEST_F(SymbolsCollector, SymbolMatchesLocation)
diff --git a/tests/unit/unittest/tokenprocessor-test.cpp b/tests/unit/unittest/tokenprocessor-test.cpp
index 50ee2cd9d0..e618104af0 100644
--- a/tests/unit/unittest/tokenprocessor-test.cpp
+++ b/tests/unit/unittest/tokenprocessor-test.cpp
@@ -959,7 +959,8 @@ TEST_F(TokenProcessor, TemplateTypeParameter)
{
const auto infos = translationUnit.tokenInfosInRange(sourceRange(265, 135));
- ASSERT_THAT(infos[3], HasOnlyType(HighlightingType::Type));
+ ASSERT_THAT(infos[3], HasTwoTypes(HighlightingType::Type,
+ HighlightingType::TemplateTypeParameter));
}
TEST_F(TokenProcessor, TemplateDefaultParameter)
@@ -987,7 +988,8 @@ TEST_F(TokenProcessor, TemplateTemplateParameter)
{
const auto infos = translationUnit.tokenInfosInRange(sourceRange(265, 135));
- ASSERT_THAT(infos[17], HasOnlyType(HighlightingType::Type));
+ ASSERT_THAT(infos[17], HasTwoTypes(HighlightingType::Type,
+ HighlightingType::TemplateTemplateParameter));
}
TEST_F(TokenProcessor, TemplateTemplateParameterDefaultArgument)
@@ -1008,7 +1010,8 @@ TEST_F(TokenProcessor, TemplateTypeParameterReference)
{
const auto infos = translationUnit.tokenInfosInRange(sourceRange(268, 58));
- ASSERT_THAT(infos[0], HasOnlyType(HighlightingType::Type));
+ ASSERT_THAT(infos[0], HasTwoTypes(HighlightingType::Type,
+ HighlightingType::TemplateTypeParameter));
}
TEST_F(TokenProcessor, TemplateTypeParameterDeclarationReference)
@@ -1036,14 +1039,16 @@ TEST_F(TokenProcessor, TemplateTemplateParameterReference)
{
const auto infos = translationUnit.tokenInfosInRange(sourceRange(270, 89));
- ASSERT_THAT(infos[0], HasOnlyType(HighlightingType::Type));
+ ASSERT_THAT(infos[0], HasTwoTypes(HighlightingType::Type,
+ HighlightingType::TemplateTemplateParameter));
}
TEST_F(TokenProcessor, TemplateTemplateContainerParameterReference)
{
const auto infos = translationUnit.tokenInfosInRange(sourceRange(270, 89));
- ASSERT_THAT(infos[2], HasOnlyType(HighlightingType::Type));
+ ASSERT_THAT(infos[2], HasTwoTypes(HighlightingType::Type,
+ HighlightingType::TemplateTypeParameter));
}
TEST_F(TokenProcessor, TemplateTemplateParameterReferenceVariable)
diff --git a/tests/unit/unittest/unittest.pro b/tests/unit/unittest/unittest.pro
index 88d5606250..b191d1a1d8 100644
--- a/tests/unit/unittest/unittest.pro
+++ b/tests/unit/unittest/unittest.pro
@@ -92,7 +92,9 @@ SOURCES += \
projectpartartefact-test.cpp \
filestatuscache-test.cpp \
highlightingresultreporter-test.cpp \
- precompiledheaderstorage-test.cpp
+ precompiledheaderstorage-test.cpp \
+ projectpartqueue-test.cpp \
+ generatedfiles-test.cpp
!isEmpty(LIBCLANG_LIBS) {
SOURCES += \