diff options
Diffstat (limited to 'src')
22 files changed, 124 insertions, 79 deletions
diff --git a/src/libs/utils/fileutils.cpp b/src/libs/utils/fileutils.cpp index 5901a60803..6b7b0b2a09 100644 --- a/src/libs/utils/fileutils.cpp +++ b/src/libs/utils/fileutils.cpp @@ -35,7 +35,7 @@ #include <QDebug> #include <QDateTime> #include <QOperatingSystemVersion> -#include <QRegExp> +#include <QRegularExpression> #include <QTimer> #include <QUrl> #include <qplatformdefs.h> @@ -325,10 +325,10 @@ QString FilePath::shortNativePath() const QString FileUtils::fileSystemFriendlyName(const QString &name) { QString result = name; - result.replace(QRegExp(QLatin1String("\\W")), QLatin1String("_")); - result.replace(QRegExp(QLatin1String("_+")), QLatin1String("_")); // compact _ - result.remove(QRegExp(QLatin1String("^_*"))); // remove leading _ - result.remove(QRegExp(QLatin1String("_+$"))); // remove trailing _ + result.replace(QRegularExpression(QLatin1String("\\W")), QLatin1String("_")); + result.replace(QRegularExpression(QLatin1String("_+")), QLatin1String("_")); // compact _ + result.remove(QRegularExpression(QLatin1String("^_*"))); // remove leading _ + result.remove(QRegularExpression(QLatin1String("_+$"))); // remove trailing _ if (result.isEmpty()) result = QLatin1String("unknown"); return result; @@ -336,8 +336,8 @@ QString FileUtils::fileSystemFriendlyName(const QString &name) int FileUtils::indexOfQmakeUnfriendly(const QString &name, int startpos) { - static QRegExp checkRegExp(QLatin1String("[^a-zA-Z0-9_.-]")); - return checkRegExp.indexIn(name, startpos); + static const QRegularExpression checkRegExp(QLatin1String("[^a-zA-Z0-9_.-]")); + return checkRegExp.match(name, startpos).capturedStart(); } QString FileUtils::qmakeFriendlyName(const QString &name) diff --git a/src/libs/utils/namevaluesdialog.cpp b/src/libs/utils/namevaluesdialog.cpp index 2b78dc7661..54c7a4577e 100644 --- a/src/libs/utils/namevaluesdialog.cpp +++ b/src/libs/utils/namevaluesdialog.cpp @@ -31,6 +31,7 @@ #include <QDialogButtonBox> #include <QLabel> #include <QPlainTextEdit> +#include <QSet> #include <QVBoxLayout> namespace Utils { diff --git a/src/libs/utils/savedaction.cpp b/src/libs/utils/savedaction.cpp index 87a785f6db..beec2d3308 100644 --- a/src/libs/utils/savedaction.cpp +++ b/src/libs/utils/savedaction.cpp @@ -29,12 +29,12 @@ #include <utils/pathchooser.h> #include <utils/pathlisteditor.h> -#include <QDebug> -#include <QSettings> - +#include <QActionGroup> #include <QCheckBox> +#include <QDebug> #include <QGroupBox> #include <QLineEdit> +#include <QSettings> #include <QSpinBox> #include <QTextEdit> diff --git a/src/libs/utils/variant.h b/src/libs/utils/variant.h index 371b9312d3..baf0c27816 100644 --- a/src/libs/utils/variant.h +++ b/src/libs/utils/variant.h @@ -29,9 +29,7 @@ See std(::experimental)::variant. */ -// TODO: replace by #include <(experimental/)variant> depending on compiler and C++ version #if __cplusplus >= 201703L -#error Please delete variant.hpp and the #else section below, then remove this error #include <variant> namespace Utils { diff --git a/src/plugins/android/androidconfigurations.cpp b/src/plugins/android/androidconfigurations.cpp index f5ce84007e..000cc35399 100644 --- a/src/plugins/android/androidconfigurations.cpp +++ b/src/plugins/android/androidconfigurations.cpp @@ -617,8 +617,9 @@ QVector<AndroidDeviceInfo> AndroidConfig::connectedDevices(const FilePath &adbTo if (adbDevs.empty()) return devices; - while (adbDevs.first().startsWith("* daemon")) - adbDevs.removeFirst(); // remove the daemon logs + for (const QString line : adbDevs) // remove the daemon logs + if (line.startsWith("* daemon")) + adbDevs.removeOne(line); adbDevs.removeFirst(); // remove "List of devices attached" header line // workaround for '????????????' serial numbers: diff --git a/src/plugins/android/androidextralibrarylistmodel.cpp b/src/plugins/android/androidextralibrarylistmodel.cpp index 58c6c2c8a7..3a168eca4a 100644 --- a/src/plugins/android/androidextralibrarylistmodel.cpp +++ b/src/plugins/android/androidextralibrarylistmodel.cpp @@ -87,7 +87,8 @@ void AndroidExtraLibraryListModel::updateModel() QTC_ASSERT(rc, return); const ProjectNode *node = m_target->project()->findNodeForBuildKey(rc->buildKey()); - QTC_ASSERT(node, return); + if (!node) + return; if (node->parseInProgress()) { emit enabledChanged(false); diff --git a/src/plugins/android/androidtoolmanager.cpp b/src/plugins/android/androidtoolmanager.cpp index 22c40dfef9..fa88a4987f 100644 --- a/src/plugins/android/androidtoolmanager.cpp +++ b/src/plugins/android/androidtoolmanager.cpp @@ -206,8 +206,10 @@ AndroidDeviceInfoList AndroidToolManager::androidVirtualDevices(const Utils::Fil if (avds.empty()) return devices; - while (avds.first().startsWith(QLatin1String("* daemon"))) - avds.removeFirst(); // remove the daemon logs + for (const QString line : avds) // remove the daemon logs + if (line.startsWith("* daemon")) + avds.removeOne(line); + avds.removeFirst(); // remove "List of devices attached" header line bool nextLineIsTargetLine = false; diff --git a/src/plugins/clangtools/clangtoolruncontrol.cpp b/src/plugins/clangtools/clangtoolruncontrol.cpp index 49bef96a7c..b60e3d0400 100644 --- a/src/plugins/clangtools/clangtoolruncontrol.cpp +++ b/src/plugins/clangtools/clangtoolruncontrol.cpp @@ -454,7 +454,7 @@ void ClangToolRunWorker::finalize() { const QString toolName = tool()->name(); if (m_filesNotAnalyzed.size() != 0) { - appendMessage(tr("Error: Failed to analyze %1 files.").arg(m_filesAnalyzed.size()), + appendMessage(tr("Error: Failed to analyze %1 files.").arg(m_filesNotAnalyzed.size()), ErrorMessageFormat); Target *target = runControl()->target(); if (target && target->activeBuildConfiguration() && !target->activeBuildConfiguration()->buildDirectory().exists() diff --git a/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.cpp b/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.cpp index 6dce6ed9fc..ee3c329141 100644 --- a/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.cpp +++ b/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.cpp @@ -202,7 +202,6 @@ RawProjectPart makeRawProjectPart(const Utils::FilePath &projectFile, kitInfo.cToolChain = toolchainFromFlags(kit, originalFlags, ProjectExplorer::Constants::C_LANGUAGE_ID); - ToolChainKitAspect::setToolChain(kit, kitInfo.cToolChain); } addDriverModeFlagIfNeeded(kitInfo.cToolChain, flags, originalFlags); rpp.setFlagsForC({kitInfo.cToolChain, flags}); @@ -211,7 +210,6 @@ RawProjectPart makeRawProjectPart(const Utils::FilePath &projectFile, kitInfo.cxxToolChain = toolchainFromFlags(kit, originalFlags, ProjectExplorer::Constants::CXX_LANGUAGE_ID); - ToolChainKitAspect::setToolChain(kit, kitInfo.cxxToolChain); } addDriverModeFlagIfNeeded(kitInfo.cxxToolChain, flags, originalFlags); rpp.setFlagsForCxx({kitInfo.cxxToolChain, flags}); diff --git a/src/plugins/coreplugin/locator/filesystemfilter.cpp b/src/plugins/coreplugin/locator/filesystemfilter.cpp index 41ad77e5c1..dcb5925842 100644 --- a/src/plugins/coreplugin/locator/filesystemfilter.cpp +++ b/src/plugins/coreplugin/locator/filesystemfilter.cpp @@ -102,7 +102,7 @@ QList<LocatorFilterEntry> FileSystemFilter::matchesFor(QFutureInterface<LocatorF const QStringList files = dirInfo.entryList(fileFilter, QDir::Name|QDir::IgnoreCase|QDir::LocaleAware); - const QRegularExpression regExp = createRegExp(entryFileName, caseSensitivity_); + QRegularExpression regExp = createRegExp(entryFileName, caseSensitivity_); if (!regExp.isValid()) return {}; @@ -122,7 +122,10 @@ QList<LocatorFilterEntry> FileSystemFilter::matchesFor(QFutureInterface<LocatorF } } // file names can match with +linenumber or :linenumber - const EditorManager::FilePathInfo fp = EditorManager::splitLineAndColumnNumber(entry); + const EditorManager::FilePathInfo fp = EditorManager::splitLineAndColumnNumber(entryFileName); + regExp = createRegExp(fp.filePath, caseSensitivity_); + if (!regExp.isValid()) + return {}; const QString fileName = QFileInfo(fp.filePath).fileName(); for (const QString &file : files) { if (future.isCanceled()) diff --git a/src/plugins/cpptools/cppfilesettingspage.cpp b/src/plugins/cpptools/cppfilesettingspage.cpp index c706076291..a4763c3333 100644 --- a/src/plugins/cpptools/cppfilesettingspage.cpp +++ b/src/plugins/cpptools/cppfilesettingspage.cpp @@ -324,6 +324,7 @@ void CppFileSettingsWidget::apply() rc.sourceSuffix = m_ui.sourceSuffixComboBox->currentText(); rc.headerSearchPaths = trimmedPaths(m_ui.headerSearchPathsEdit->text()); rc.sourceSearchPaths = trimmedPaths(m_ui.sourceSearchPathsEdit->text()); + rc.licenseTemplatePath = licenseTemplatePath(); if (rc == *m_settings) return; diff --git a/src/plugins/git/branchmodel.cpp b/src/plugins/git/branchmodel.cpp index 0a40144948..73c7ce5ba8 100644 --- a/src/plugins/git/branchmodel.cpp +++ b/src/plugins/git/branchmodel.cpp @@ -150,6 +150,11 @@ public: return fn; } + QString fullRef(bool includePrefix = false) const + { + return fullName(includePrefix).join('/'); + } + void insert(const QStringList &path, BranchNode *n) { BranchNode *current = this; @@ -186,7 +191,7 @@ public: } return names; } - return {fullName().join('/')}; + return {fullRef()}; } int rowOf(BranchNode *node) @@ -346,7 +351,7 @@ QVariant BranchModel::data(const QModelIndex &index, int role) const return res; } case Qt::EditRole: - return index.column() == 0 ? node->fullName().join('/') : QVariant(); + return index.column() == 0 ? node->fullRef() : QVariant(); case Qt::ToolTipRole: if (!node->isLeaf()) return QVariant(); @@ -381,7 +386,7 @@ bool BranchModel::setData(const QModelIndex &index, const QVariant &value, int r if (newName.isEmpty()) return false; - const QString oldName = node->fullName().join('/'); + const QString oldName = node->fullRef(); if (oldName == newName) return false; @@ -525,7 +530,7 @@ QString BranchModel::fullName(const QModelIndex &idx, bool includePrefix) const return QString(); if (node == d->headNode) return QString("HEAD"); - return node->fullName(includePrefix).join('/'); + return node->fullRef(includePrefix); } QStringList BranchModel::localBranchNames() const @@ -901,7 +906,8 @@ void BranchModel::updateUpstreamStatus(BranchNode *node) { if (node->tracking.isEmpty()) return; - VcsCommand *command = d->client->asyncUpstreamStatus(d->workingDirectory, node->name, node->tracking); + VcsCommand *command = d->client->asyncUpstreamStatus( + d->workingDirectory, node->fullRef(), node->tracking); QObject::connect(command, &VcsCommand::stdOutText, node, [this, node](const QString &text) { const QStringList split = text.trimmed().split('\t'); QTC_ASSERT(split.size() == 2, return); diff --git a/src/plugins/mcusupport/mcusupport.qrc b/src/plugins/mcusupport/mcusupport.qrc index b45fb8ccc3..59ff76770b 100644 --- a/src/plugins/mcusupport/mcusupport.qrc +++ b/src/plugins/mcusupport/mcusupport.qrc @@ -8,6 +8,8 @@ <file>wizards/icon@2x.png</file> <file>wizards/application/CMakeLists.txt</file> <file>wizards/application/project.qmlproject.tpl</file> + <file>wizards/application/BareMetal/main.cpp.tpl</file> + <file>wizards/application/FreeRTOS/main.cpp.tpl</file> <file>wizards/application/main.qml.tpl</file> <file>wizards/application/wizard.json</file> </qresource> diff --git a/src/plugins/mcusupport/mcusupportoptions.cpp b/src/plugins/mcusupport/mcusupportoptions.cpp index 894eb9cb4c..bb10f7b064 100644 --- a/src/plugins/mcusupport/mcusupportoptions.cpp +++ b/src/plugins/mcusupport/mcusupportoptions.cpp @@ -61,7 +61,7 @@ namespace McuSupport { namespace Internal { -static const int KIT_VERSION = 4; // Bumps up whenever details in Kit creation change +static const int KIT_VERSION = 5; // Bumps up whenever details in Kit creation change static QString packagePathFromSettings(const QString &settingsKey, const QString &defaultPath = {}) { @@ -441,7 +441,7 @@ void McuSupportOptions::deletePackagesAndTargets() const QVersionNumber &McuSupportOptions::supportedQulVersion() { - static const QVersionNumber v({1, 1}); + static const QVersionNumber v({1, 2}); return v; } diff --git a/src/plugins/mcusupport/mcusupportsdk.cpp b/src/plugins/mcusupport/mcusupportsdk.cpp index 757d919315..7dd7967997 100644 --- a/src/plugins/mcusupport/mcusupportsdk.cpp +++ b/src/plugins/mcusupport/mcusupportsdk.cpp @@ -99,8 +99,6 @@ static McuToolChainPackage *createArmGccPackage() Utils::HostOsInfo::withExecutableSuffix("bin/arm-none-eabi-g++"), "GNUArmEmbeddedToolchain", McuToolChainPackage::TypeArmGcc); - result->setDownloadUrl( - "https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads"); result->setEnvironmentVariableName(envVar); return result; } @@ -149,19 +147,6 @@ static McuPackage *createRGLPackage() return result; } -static McuPackage *createStm32CubeFwF7SdkPackage() -{ - auto result = new McuPackage( - McuPackage::tr("STM32Cube SDK"), - "%{Env:STM32Cube_FW_F7_SDK_PATH}", - "Drivers/STM32F7xx_HAL_Driver", - "Stm32CubeFwF7Sdk"); - result->setDownloadUrl( - "https://www.st.com/content/st_com/en/products/embedded-software/mcus-embedded-software/stm32-embedded-software/stm32cube-mcu-packages/stm32cubef7.html"); - result->setEnvironmentVariableName("STM32Cube_FW_F7_SDK_PATH"); - return result; -} - static McuPackage *createStm32CubeProgrammerPackage() { @@ -185,17 +170,6 @@ static McuPackage *createStm32CubeProgrammerPackage() return result; } -static McuPackage *createEvkbImxrt1050SdkPackage() -{ - auto result = new McuPackage( - McuPackage::tr("NXP i.MXRT SDK"), - "%{Env:EVKB_IMXRT1050_SDK_PATH}", // TODO: Try to not use 1050 specifics - "EVKB-IMXRT1050_manifest_v3_5.xml", - "EvkbImxrt1050Sdk"); - result->setDownloadUrl("https://mcuxpresso.nxp.com/en/welcome"); - return result; -} - static McuPackage *createMcuXpressoIdePackage() { const char envVar[] = "MCUXpressoIDE_PATH"; @@ -318,13 +292,8 @@ static QVector<McuTarget *> targetsFromDescriptions(const QList<McuTargetDescrip static QFileInfoList targetDescriptionFiles(const Utils::FilePath &dir) { - // Workaround for UL-2390: Instead of "./kits/", walk through "./lib/cmake/Qul/boards/" - QFileInfoList result; - QDirIterator it(dir.toString() + "/lib/cmake/Qul/boards/", {QLatin1String("*.json")}, - QDir::Files, QDirIterator::Subdirectories); - while (it.hasNext()) - result.append(it.next()); - return result; + const QDir kitsDir(dir.toString() + "/kits/", "*.json"); + return kitsDir.entryInfoList(); } static QString freeRTOSEnvVarForPlatform(const QString &platform) diff --git a/src/plugins/mcusupport/wizards/application/BareMetal/main.cpp.tpl b/src/plugins/mcusupport/wizards/application/BareMetal/main.cpp.tpl new file mode 100644 index 0000000000..d6c84deeea --- /dev/null +++ b/src/plugins/mcusupport/wizards/application/BareMetal/main.cpp.tpl @@ -0,0 +1,14 @@ +#include "%{ProjectName}.h" + +#include <qul/application.h> +#include <qul/qul.h> + +int main() +{ + Qul::initPlatform(); + Qul::Application app; + static %{ProjectName} item; + app.setRootItem(&item); + app.exec(); + return 0; +} diff --git a/src/plugins/mcusupport/wizards/application/CMakeLists.txt b/src/plugins/mcusupport/wizards/application/CMakeLists.txt index ff5871b9b5..3ad30d99ca 100644 --- a/src/plugins/mcusupport/wizards/application/CMakeLists.txt +++ b/src/plugins/mcusupport/wizards/application/CMakeLists.txt @@ -4,7 +4,7 @@ project(%{ProjectName} VERSION 0.0.1 LANGUAGES C CXX ASM) find_package(Qul) -add_executable(%{ProjectName}) +add_executable(%{ProjectName} ${OS}/main.cpp) qul_target_qml_sources(%{ProjectName} %{MainQmlFile}) target_link_libraries(%{ProjectName} Qul::QuickUltralite) diff --git a/src/plugins/mcusupport/wizards/application/FreeRTOS/main.cpp.tpl b/src/plugins/mcusupport/wizards/application/FreeRTOS/main.cpp.tpl new file mode 100644 index 0000000000..43ca2e706b --- /dev/null +++ b/src/plugins/mcusupport/wizards/application/FreeRTOS/main.cpp.tpl @@ -0,0 +1,38 @@ +#include "%{ProjectName}.h" + +#include <qul/application.h> +#include <qul/qul.h> + +#include <cstdio> +#include <FreeRTOS.h> +#include <task.h> + +#ifndef QUL_STACK_SIZE +#error QUL_STACK_SIZE must be defined. +#endif + +static void Qul_Thread(void *argument); + +int main() +{ + Qul::initPlatform(); + + if (xTaskCreate(Qul_Thread, "QulExec", QUL_STACK_SIZE, 0, 4, 0) != pdPASS) { + std::printf("Task creation failed!.\\r\\n"); + configASSERT(false); + } + + vTaskStartScheduler(); + + // Should not reach this point + configASSERT(false); + return 0; +} + +static void Qul_Thread(void *argument) +{ + Qul::Application app; + static %{ProjectName} item; + app.setRootItem(&item); + app.exec(); +} diff --git a/src/plugins/mcusupport/wizards/application/main.qml.tpl b/src/plugins/mcusupport/wizards/application/main.qml.tpl index 595c561f74..8c05a48f66 100644 --- a/src/plugins/mcusupport/wizards/application/main.qml.tpl +++ b/src/plugins/mcusupport/wizards/application/main.qml.tpl @@ -1,4 +1,3 @@ -pragma main; import QtQuick 2.0 Rectangle { diff --git a/src/plugins/mcusupport/wizards/application/wizard.json b/src/plugins/mcusupport/wizards/application/wizard.json index 1c598507e1..b458bb010a 100644 --- a/src/plugins/mcusupport/wizards/application/wizard.json +++ b/src/plugins/mcusupport/wizards/application/wizard.json @@ -53,6 +53,16 @@ "openInEditor": false }, { + "source": "BareMetal/main.cpp.tpl", + "target": "%{ProjectDirectory}/BareMetal/main.cpp", + "openInEditor": false + }, + { + "source": "FreeRTOS/main.cpp.tpl", + "target": "%{ProjectDirectory}/FreeRTOS/main.cpp", + "openInEditor": false + }, + { "source": "main.qml.tpl", "target": "%{ProjectDirectory}/%{MainQmlFile}", "openInEditor": true diff --git a/src/plugins/qmlpreview/qmlpreviewruncontrol.cpp b/src/plugins/qmlpreview/qmlpreviewruncontrol.cpp index 9f22796689..c513a580f3 100644 --- a/src/plugins/qmlpreview/qmlpreviewruncontrol.cpp +++ b/src/plugins/qmlpreview/qmlpreviewruncontrol.cpp @@ -134,21 +134,22 @@ LocalQmlPreviewSupport::LocalQmlPreviewSupport(ProjectExplorer::RunControl *runC const auto currentTarget = runControl->target(); const auto *qmlBuildSystem = qobject_cast<QmlProjectManager::QmlBuildSystem *>(currentTarget->buildSystem()); - const auto aspect = runControl->aspect<QmlProjectManager::QmlMainFileAspect>(); - const QString mainScript = aspect->mainScript(); - const QString currentFile = aspect->currentFile(); - - const QString mainScriptFromProject = qmlBuildSystem->targetFile( - Utils::FilePath::fromString(mainScript)).toString(); - - const QString currentFileFromProject = qmlBuildSystem->targetFile( - Utils::FilePath::fromString(currentFile)).toString(); - - if (!currentFile.isEmpty() && qmlProjectRunConfigurationArguments.last().contains(mainScriptFromProject)) { - qmlProjectRunConfigurationArguments.removeLast(); - auto commandLine = Utils::CommandLine(runnable.commandLine().executable(), qmlProjectRunConfigurationArguments); - commandLine.addArg(currentFile); - runnable.setCommandLine(commandLine); + if (const auto aspect = runControl->aspect<QmlProjectManager::QmlMainFileAspect>()) { + const QString mainScript = aspect->mainScript(); + const QString currentFile = aspect->currentFile(); + + const QString mainScriptFromProject = qmlBuildSystem->targetFile( + Utils::FilePath::fromString(mainScript)).toString(); + + const QString currentFileFromProject = qmlBuildSystem->targetFile( + Utils::FilePath::fromString(currentFile)).toString(); + + if (!currentFile.isEmpty() && qmlProjectRunConfigurationArguments.last().contains(mainScriptFromProject)) { + qmlProjectRunConfigurationArguments.removeLast(); + auto commandLine = Utils::CommandLine(runnable.commandLine().executable(), qmlProjectRunConfigurationArguments); + commandLine.addArg(currentFile); + runnable.setCommandLine(commandLine); + } } Utils::QtcProcess::addArg(&runnable.commandLineArguments, diff --git a/src/plugins/webassembly/webassemblyrunconfiguration.cpp b/src/plugins/webassembly/webassemblyrunconfiguration.cpp index 2bb8861b71..977e61b0fe 100644 --- a/src/plugins/webassembly/webassemblyrunconfiguration.cpp +++ b/src/plugins/webassembly/webassemblyrunconfiguration.cpp @@ -51,6 +51,7 @@ static CommandLine emrunCommand(Target *target, const QString &browser, const QS "--browser", browser, "--port", port, "--no_emrun_detect", + "--serve_after_close", html.toString() }); } |