Merge commit 'origin/7.0'

Change-Id: I90148816d32c81b9fef982b5010c785161d83097
This commit is contained in:
Eike Ziller
2022-05-10 11:44:37 +02:00
10 changed files with 60 additions and 115 deletions

View File

@@ -472,6 +472,8 @@ class Dumper(DumperBase):
tdata.code = TypeCode.Void
elif typeName == 'wchar_t':
tdata.code = TypeCode.Integral
elif typeName in ("char16_t", "char32_t", "char8_t"):
tdata.code = TypeCode.Integral
else:
self.warn('UNKNOWN TYPE KEY: %s: %s' % (typeName, code))
elif code == lldb.eTypeClassEnumeration:

View File

@@ -643,7 +643,7 @@ def qdump__std____1__map(d, value):
with Children(d, size, maxNumChild=1000):
for (i, pair) in zip(d.childRange(), in_order_traversal(head)):
d.putPairItem(i, pair, 'key', 'value')
d.putPairItem(i, pair)
def qform__std____1__multimap():
@@ -1293,9 +1293,9 @@ def qform__std____cxx11__wstring():
def qdump__std____1__basic_string(d, value):
innerType = value.type[0].name
if innerType == "char":
if innerType in ("char", "char8_t", "char16_t"):
qdump__std____1__string(d, value)
elif innerType == "wchar_t":
elif innerType in ("wchar_t", "char32_t"):
qdump__std____1__wstring(d, value)
else:
d.warn("UNKNOWN INNER TYPE %s" % innerType)

View File

@@ -670,6 +670,11 @@ WelcomeMode::WelcomeMode()
m_modeWidget->engine()->setOutputWarningsToStandardError(false);
connect(Core::ModeManager::instance(), &Core::ModeManager::currentModeChanged, this, [this](Utils::Id mode){
bool active = (mode == Core::Constants::MODE_WELCOME);
m_modeWidget->rootObject()->setProperty("active", active);
});
if (!useNewWelcomePage()) {
#ifdef QT_DEBUG

View File

@@ -5301,7 +5301,9 @@ void tst_Dumpers::dumper_data()
<< Data("#include <vector>\n"
"#include <list>\n"
"template<class T>\n"
"class myallocator : public std::allocator<T> {};\n",
"class myallocator : public std::allocator<T> {\n"
"using std::allocator<T>::allocator;\n"
"};\n",
"std::vector<double> v0, v1;\n"
"v1.push_back(1);\n"

View File

@@ -63,10 +63,7 @@ Fifth - you'll have to make sure that some needed tools are available (no matter
* wget or curl, capable of HTTPS
Normally it should be okay to just install them as usual and add their executables' path(s) to the PATH variable.
Sixth - Qt Creator must be built on a Qt without Qt WebEngine or Qt WebKit. Its ClangCodeModel
plugin should be linked to LLVM/Clang 7.0.0 or later. How to do so, see QTCREATOR_REPO/README.md.
With a lower version, the tests for the ClangCodeModel might fail. Without the plugin, the tests for
the ClangCodeModel will be skipped but will not cause failures.
Sixth - Qt Creator must be built on a Qt without Qt WebEngine or Qt WebKit.
On macOS make sure you are using the correct keyboard layout to avoid problems when using keyboard interaction. Tested and known to be
working would be 'U.S. International - PC', while pure 'U.S.' had problems.

View File

@@ -167,7 +167,6 @@
:Qt Creator_Utils::BuildDirectoryLineEdit {name='LineEdit' type='Utils::FancyLineEdit' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
:Qt Creator_Utils::NavigationTreeView {type='Utils::NavigationTreeView' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
:Qt Creator_Utils::NavigationTreeView::QExpandingLineEdit {container=':Qt Creator_Utils::NavigationTreeView' type='QExpandingLineEdit' unnamed='1' visible='1'}
:QtSupport__Internal__QtVersionManager.QLabel {container=':qt_tabwidget_stackedwidget_QScrollArea' text?='Qt version *' type='QLabel' unnamed='1' visible='1'}
:QtSupport__Internal__QtVersionManager.errorLabel.QLabel {container=':qt_tabwidget_stackedwidget.QtSupport__Internal__QtVersionManager_QtSupport::Internal::QtOptionsPageWidget' name='errorLabel' type='QLabel' visible='1'}
:QtSupport__Internal__QtVersionManager.qmake_QLabel {container=':qt_tabwidget_stackedwidget.QtSupport__Internal__QtVersionManager_QtSupport::Internal::QtOptionsPageWidget' name='qmakePath' type='QLabel' visible='1'}
:QtVersionLabel_KitPage {container=':qt_tabwidget_stackedwidget_QWidget' text='Qt version:' type='QLabel' unnamed='1' visible='1'}

View File

@@ -1,6 +1,6 @@
############################################################################
#
# Copyright (C) 2016 The Qt Company Ltd.
# Copyright (C) 2022 The Qt Company Ltd.
# Contact: https://www.qt.io/licensing/
#
# This file is part of Qt Creator.
@@ -347,10 +347,6 @@ def __checkParentAccess__(filePath):
# options dialog and returns a dict holding the kits as keys
# and a list of information of its configured Qt
def getConfiguredKits():
def __retrieveQtVersionName__(target, version):
treeView = waitForObject(":qtdirList_QTreeView")
return str(treeView.currentIndex().data().toString())
# end of internal function for iterateQtVersions
def __setQtVersionForKit__(kit, kitName, kitsQtVersionName):
mouseClick(waitForObjectItem(":BuildAndRun_QTreeView", kit))
qtVersionStr = str(waitForObjectExists(":Kits_QtVersion_QComboBox").currentText)
@@ -361,18 +357,15 @@ def getConfiguredKits():
# end of internal function for iterate kits
kitsWithQtVersionName = {}
result = {}
result = []
# collect kits and their Qt versions
targetsQtVersions, qtVersionNames = iterateQtVersions(True, False, __retrieveQtVersionName__)
qtVersionNames = iterateQtVersions()
# update collected Qt versions with their configured device and version
iterateKits(True, True, __setQtVersionForKit__, kitsWithQtVersionName)
iterateKits(False, True, __setQtVersionForKit__, kitsWithQtVersionName)
# merge defined target names with their configured Qt versions and devices
for kit, qtVersion in kitsWithQtVersionName.iteritems():
if kit in ('Fremantle', 'Harmattan', 'Qt Simulator'):
test.verify(qtVersion == 'None',
"The outdated kit '%s' should not have a Qt version" % kit)
elif qtVersion in qtVersionNames:
result[kit] = targetsQtVersions[qtVersionNames.index(qtVersion)].items()[0]
if qtVersion in qtVersionNames:
result.append(kit)
else:
test.fail("Qt version '%s' for kit '%s' can't be found in qtVersionNames."
% (qtVersion, kit))
@@ -400,35 +393,14 @@ def regexVerify(text, expectedTexts):
return True
return False
# function that opens Options Dialog and parses the configured Qt versions
# param keepOptionsOpen set to True if the Options dialog should stay open when
# leaving this function
# param alreadyOnOptionsDialog set to True if you already have opened the Options Dialog
# (if False this function will open it via the MenuBar -> Tools -> Options...)
# param additionalFunction pass a function or name of a defined function to execute
# for each correctly configured item on the list of Qt versions
# (Qt versions having no assigned toolchain, failing qmake,... will be skipped)
# this function must take at least 2 parameters - the first is the target name
# and the second the version of the current selected Qt version item
# param argsForAdditionalFunc you can specify as much parameters as you want to pass
# to additionalFunction from the outside
# the function returns a list of dict holding target-version mappings if used without
# additionalFunction
# WATCH OUT! if you're using the additionalFunction parameter - this function will
# return the list mentioned above as well as the returned value(s) from
# additionalFunction. You MUST call this function like
# result, additionalResult = _iterateQtVersions(...)
# where additionalResult is the result of all executions of additionalFunction which
# means it is a list of results.
def iterateQtVersions(keepOptionsOpen=False, alreadyOnOptionsDialog=False,
additionalFunction=None, *argsForAdditionalFunc):
result = []
additionalResult = []
if not alreadyOnOptionsDialog:
# the function returns a list of the found Qt versions
def iterateQtVersions():
qtVersionNames = []
invokeMenuItem("Tools", "Options...")
mouseClick(waitForObjectItem(":Options_QListView", "Kits"))
clickOnTab(":Options.qt_tabwidget_tabbar_QTabBar", "Qt Versions")
pattern = re.compile("Qt version (?P<version>.*?) for (?P<target>.*)")
treeView = waitForObject(":qtdirList_QTreeView")
model = treeView.model()
for rootIndex in dumpIndices(model):
@@ -436,52 +408,29 @@ def iterateQtVersions(keepOptionsOpen=False, alreadyOnOptionsDialog=False,
for subIndex in dumpIndices(model, rootIndex):
subChildText = str(subIndex.data()).replace(".", "\\.").replace("_", "\\_")
treeView.scrollTo(subIndex)
mouseClick(waitForObjectItem(treeView, ".".join([rootChildText,subChildText])))
currentText = str(waitForObject(":QtSupport__Internal__QtVersionManager.QLabel").text)
matches = pattern.match(currentText)
if matches:
target = matches.group("target").strip()
version = matches.group("version").strip()
result.append({target:version})
if additionalFunction:
try:
if isString(additionalFunction):
currResult = globals()[additionalFunction](target, version, *argsForAdditionalFunc)
else:
currResult = additionalFunction(target, version, *argsForAdditionalFunc)
except:
t,v,_ = sys.exc_info()
currResult = None
test.fatal("Function to additionally execute on Options Dialog could not be found or "
"an exception occurred while executing it.", "%s(%s)" % (str(t), str(v)))
additionalResult.append(currResult)
if not keepOptionsOpen:
clickButton(waitForObject(":Options.Cancel_QPushButton"))
if additionalFunction:
return result, additionalResult
else:
return result
mouseClick(waitForObjectItem(treeView, ".".join([rootChildText, subChildText])))
qtVersionNames.append(str(treeView.currentIndex().data().toString()))
return qtVersionNames
# function that opens Options Dialog (if necessary) and parses the configured Kits
# param keepOptionsOpen set to True if the Options dialog should stay open when
# leaving this function
# param clickOkWhenDone set to True if the Options dialog should be closed by clicking the
# "OK" button. If False, the dialog will stay open
# param alreadyOnOptionsDialog set to True if you already have opened the Options Dialog
# (if False this functions will open it via the MenuBar -> Tools -> Options...)
# (if False this function will open it via the MenuBar -> Tools -> Options...)
# param additionalFunction pass a function or name of a defined function to execute
# for each configured item on the list of Kits
# this function must take at least 2 parameters - the first is the item (QModelIndex)
# of the current Kit (if you need to click on it) and the second the Kit name itself
# param argsForAdditionalFunc you can specify as much parameters as you want to pass
# this function must take at least 2 parameters - the first is the full string
# of the kit which can be used in waitForObjectItem(), the second the Kit name itself
# param argsForAdditionalFunc you can specify as many parameters as you want to pass
# to additionalFunction from the outside
# the function returns a list of Kit names if used without an additional function
# WATCH OUT! if you're using the additionalFunction parameter - this function will
# return the list mentioned above as well as the returned value(s) from
# this function will return a list of Kit names as well as the returned value(s) from
# additionalFunction. You MUST call this function like
# result, additionalResult = _iterateQtVersions(...)
# result, additionalResult = iterateKits(...)
# where additionalResult is the result of all executions of additionalFunction which
# means it is a list of results.
def iterateKits(keepOptionsOpen=False, alreadyOnOptionsDialog=False,
additionalFunction=None, *argsForAdditionalFunc):
def iterateKits(clickOkWhenDone, alreadyOnOptionsDialog,
additionalFunction, *argsForAdditionalFunc):
result = []
additionalResult = []
if not alreadyOnOptionsDialog:
@@ -498,31 +447,22 @@ def iterateKits(keepOptionsOpen=False, alreadyOnOptionsDialog=False,
test.compare(manual.data().toString(), "Manual", "Verifying label for target section")
for section in [autoDetected, manual]:
for currentItem in dumpItems(model, section):
kitName = currentItem
if (kitName.endswith(" (default)")):
kitName = kitName.rsplit(" (default)", 1)[0]
kitName = currentItem.rsplit(" (default)", 1)[0]
result.append(kitName)
try:
item = ".".join([str(section.data().toString()),
currentItem.replace(".", "\\.")])
if additionalFunction:
try:
if isString(additionalFunction):
currResult = globals()[additionalFunction](item, kitName, *argsForAdditionalFunc)
else:
currResult = additionalFunction(item, kitName, *argsForAdditionalFunc)
except:
t,v,_ = sys.exc_info()
t, v, _ = sys.exc_info()
currResult = None
test.fatal("Function to additionally execute on Options Dialog could not be "
"found or an exception occurred while executing it.", "%s(%s)" %
(str(t), str(v)))
additionalResult.append(currResult)
if not keepOptionsOpen:
clickButton(waitForObject(":Options.Cancel_QPushButton"))
if additionalFunction:
if clickOkWhenDone:
clickButton(waitForObject(":Options.OK_QPushButton"))
return result, additionalResult
else:
return result
# set a help viewer that will always be used, regardless of Creator's width

View File

@@ -93,7 +93,7 @@ def main():
def verifyKitCheckboxes(kits, displayedPlatforms):
waitForObject("{type='QLabel' unnamed='1' visible='1' text='Kit Selection'}")
availableCheckboxes = frozenset(filter(enabledCheckBoxExists, kits.keys()))
availableCheckboxes = frozenset(filter(enabledCheckBoxExists, kits))
# verification whether expected, found and configured match
expectedShownKits = availableCheckboxes.intersection(displayedPlatforms)

View File

@@ -1,6 +1,6 @@
############################################################################
#
# Copyright (C) 2017 The Qt Company Ltd.
# Copyright (C) 2022 The Qt Company Ltd.
# Contact: https://www.qt.io/licensing/
#
# This file is part of Qt Creator.
@@ -41,7 +41,8 @@ def verifyProjectsMode(expectedKits):
kitNameTemplate = "Manual.%s"
def __removeKit__(kit, kitName):
def __removeKit__(_, kitName):
global kitNameTemplate
if kitName == Targets.getStringForTarget(Targets.getDefaultKit()):
# The following kits will be the default kit at that time
@@ -58,6 +59,5 @@ def main():
switchViewTo(ViewConstants.PROJECTS)
verifyProjectsMode(Targets.getTargetsAsStrings(Targets.availableTargetClasses(True)))
iterateKits(True, False, __removeKit__)
clickButton(waitForObject(":Options.OK_QPushButton"))
verifyProjectsMode([])
invokeMenuItem("File", "Exit")

View File

@@ -2,7 +2,7 @@
############################################################################
#
# Copyright (C) 2019 The Qt Company Ltd.
# Copyright (C) 2022 The Qt Company Ltd.
# Contact: https://www.qt.io/licensing/
#
# This file is part of Qt Creator.
@@ -189,7 +189,7 @@ def printResult():
def deleteRemovable():
global useCounts, objMap
deletable = filter(lambda x: useCounts[x] == 0, useCounts)
deletable = list(filter(lambda x: useCounts[x] == 0, useCounts))
if len(deletable) == 0:
print("Nothing to delete - leaving objects.map untouched")
return