diff --git a/CMakeLists.txt b/CMakeLists.txt index cf284176838..353cf93d53b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -50,10 +50,12 @@ endif() find_package(Qt5 COMPONENTS Concurrent Core Network PrintSupport Qml Quick QuickWidgets - Script Sql ${_TEST_QT_COMPONENT} + Sql ${_TEST_QT_COMPONENT} REQUIRED ) +find_package(Threads) + # Get information on directories from qmake # as this is not yet exported by cmake. function(qt5_query_qmake) @@ -88,7 +90,7 @@ endfunction() qt5_query_qmake() -find_package(Qt5 COMPONENTS Designer Help SerialPort Svg QUIET) +find_package(Qt5 COMPONENTS Designer Help Script SerialPort Svg QUIET) function (set_if_target var target) if (TARGET "${target}") set(_result ON) diff --git a/share/qtcreator/CMakeLists.txt b/share/qtcreator/CMakeLists.txt index 6b432ef96c0..3fe6c60b4b5 100644 --- a/share/qtcreator/CMakeLists.txt +++ b/share/qtcreator/CMakeLists.txt @@ -1,9 +1,22 @@ -install( - DIRECTORY cplusplus debugger glsl modeleditor qml qmldesigner - qmlicons qml-type-descriptions schemes snippets styles templates themes welcomescreen - DESTINATION "${IDE_DATA_PATH}" +set(template_directories cplusplus debugger glsl modeleditor qml qmldesigner + qmlicons qml-type-descriptions schemes snippets styles templates themes welcomescreen) + +add_custom_target(copy_share_to_builddir ALL + COMMENT Copy files into build directory + VERBATIM ) +foreach(dir IN ITEMS ${template_directories}) + add_custom_command(TARGET copy_share_to_builddir POST_BUILD + COMMAND "${CMAKE_COMMAND}" -E copy_directory "${dir}" + "${PROJECT_BINARY_DIR}/${IDE_DATA_PATH}/${dir}" + WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" + COMMENT Copy files into build directory + VERBATIM + ) +endforeach() + +install(DIRECTORY ${template_directories} DESTINATION "${IDE_DATA_PATH}") install( FILES indexer_preincludes/qglobal.h indexer_preincludes/windows.h DESTINATION "${IDE_DATA_PATH}/indexer_preincludes" diff --git a/share/qtcreator/templates/wizards/projects/cpplibrary/project.pro b/share/qtcreator/templates/wizards/projects/cpplibrary/project.pro index f6652ee9301..431667ada5b 100644 --- a/share/qtcreator/templates/wizards/projects/cpplibrary/project.pro +++ b/share/qtcreator/templates/wizards/projects/cpplibrary/project.pro @@ -1,5 +1,5 @@ @if '%{QtModule}' === 'none' -QT -= core +CONFIG -= qt @elsif '%{QtModule}' === 'core' QT -= gui @else diff --git a/share/qtcreator/templates/wizards/projects/cpplibrary/wizard.json b/share/qtcreator/templates/wizards/projects/cpplibrary/wizard.json index ea455be4a2d..ac43d6f1a9f 100644 --- a/share/qtcreator/templates/wizards/projects/cpplibrary/wizard.json +++ b/share/qtcreator/templates/wizards/projects/cpplibrary/wizard.json @@ -23,12 +23,12 @@ { "key": "PluginInterface", "value": "%{JS: value('BaseClassInfo').PluginInterface }" }, { "key": "PluginModule", "value": "%{JS: value('BaseClassInfo').PluginModule }" }, { "key": "PluginMethods", "value": "%{JS: value('BaseClassInfo').PluginMethods }" }, - { "key": "QtModule", "value": "%{JS: value('IsQtPlugin') ? value('PluginModule') : value('LibraryQtModule')}" }, + { "key": "QtModule", "value": "%{JS: value('IsQtPlugin') === 'true' ? value('PluginModule') : value('LibraryQtModule')}" }, { "key": "QtModuleUpperCase", "value": "%{JS: value('QtModule').charAt(0).toUpperCase() + value('QtModule').slice(1)}" }, { "key": "LibraryDefine", "value": "%{JS: Cpp.headerGuard(value('ProjectName')) + '_LIBRARY'}" }, { "key": "LibraryExport", "value": "%{JS: Cpp.headerGuard(value('ProjectName')) + '_EXPORT'}" }, { "key": "GlobalHdrFileName", "value": "%{JS: Util.fileName(value('ProjectName') + '_global', Util.preferredSuffix('text/x-c++hdr'))}" }, - { "key": "TargetInstallPath", "value": "%{JS: value('IsShared') ? '/usr/lib' : (value('IsQtPlugin') && value('PluginTargetPath') ? '$$[QT_INSTALL_PLUGINS]/' + value('PluginTargetPath') : '')}" }, + { "key": "TargetInstallPath", "value": "%{JS: value('IsShared') === 'true' ? '/usr/lib' : (value('IsQtPlugin') && value('PluginTargetPath') ? '$$[QT_INSTALL_PLUGINS]/' + value('PluginTargetPath') : '')}" }, { "key": "CN", "value": "%{JS: Cpp.className(value('Class'))}" }, { "key": "GUARD", "value": "%{JS: Cpp.headerGuard(value('HdrFileName'))}" }, { "key": "GLOBAL_GUARD", "value": "%{JS: Cpp.headerGuard(value('GlobalHdrFileName'))}" } diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index c52f4fd9093..01fb642e910 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -486,6 +486,10 @@ function(fix_test_environment test_name) list(APPEND env_path $ENV{PATH}) list(APPEND env_path ${CMAKE_BINARY_DIR}/${IDE_PLUGIN_PATH}) list(APPEND env_path ${CMAKE_BINARY_DIR}/${IDE_BIN_PATH}) + list(APPEND env_path $) + if (TARGET libclang) + list(APPEND env_path $) + endif() string(REPLACE "/" "\\" env_path "${env_path}") string(REPLACE ";" "\\;" env_path "${env_path}") diff --git a/src/app/CMakeLists.txt b/src/app/CMakeLists.txt index e44e544784b..0ef67b2943c 100644 --- a/src/app/CMakeLists.txt +++ b/src/app/CMakeLists.txt @@ -33,11 +33,6 @@ if (WIN32) target_sources(qtcreator PRIVATE qtcreator.rc) endif() -add_custom_command(TARGET qtcreator POST_BUILD - COMMAND "${CMAKE_COMMAND}" -E copy_directory - "${PROJECT_SOURCE_DIR}/share/qtcreator" - "${PROJECT_BINARY_DIR}/${IDE_DATA_PATH}") - if (APPLE) set_target_properties(qtcreator PROPERTIES MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/app-Info.plist" diff --git a/src/libs/utils/fileutils.cpp b/src/libs/utils/fileutils.cpp index 4bf278a0414..0553d7f0d90 100644 --- a/src/libs/utils/fileutils.cpp +++ b/src/libs/utils/fileutils.cpp @@ -28,6 +28,7 @@ #include "algorithm.h" #include "qtcassert.h" +#include "qtcprocess.h" #include #include @@ -66,6 +67,33 @@ QT_END_NAMESPACE namespace Utils { +/*! \class Utils::CommandLine + + \brief The CommandLine class represents a command line of a QProcess + or similar utility. + +*/ + +void CommandLine::addArg(const QString &arg) +{ + QtcProcess::addArg(&m_arguments, arg); +} + +void CommandLine::addArgs(const QStringList &inArgs) +{ + QtcProcess::addArgs(&m_arguments, inArgs); +} + +void CommandLine::addArgs(const QString &inArgs) +{ + QtcProcess::addArgs(&m_arguments, inArgs); +} + +QString CommandLine::toUserOutput() const +{ + return m_executable.toUserOutput() + ' ' + m_arguments; +} + /*! \class Utils::FileUtils \brief The FileUtils class contains file and directory related convenience diff --git a/src/libs/utils/fileutils.h b/src/libs/utils/fileutils.h index fd8f4f74227..d840c350afd 100644 --- a/src/libs/utils/fileutils.h +++ b/src/libs/utils/fileutils.h @@ -128,6 +128,29 @@ using FilePathList = QList; using FileName = FilePath; using FileNameList = FilePathList; +class QTCREATOR_UTILS_EXPORT CommandLine +{ +public: + CommandLine() {} + + CommandLine(const FilePath &executable, const QString &arguments) + : m_executable(executable), m_arguments(arguments) + {} + + void addArg(const QString &arg); + void addArgs(const QStringList &inArgs); + void addArgs(const QString &inArgs); + + QString toUserOutput() const; + + FilePath executable() const { return m_executable; } + QString arguments() const { return m_arguments; } + +private: + FilePath m_executable; + QString m_arguments; +}; + class QTCREATOR_UTILS_EXPORT FileUtils { public: static bool removeRecursively(const FilePath &filePath, QString *error = nullptr); diff --git a/src/libs/utils/qtcprocess.cpp b/src/libs/utils/qtcprocess.cpp index dce239b4889..d05746d5b1e 100644 --- a/src/libs/utils/qtcprocess.cpp +++ b/src/libs/utils/qtcprocess.cpp @@ -1521,24 +1521,4 @@ QString QtcProcess::Arguments::toString() const return QtcProcess::joinArgs(m_unixArgs, OsTypeLinux); } -void CommandLine::addArg(const QString &arg) -{ - QtcProcess::addArg(&m_arguments, arg); -} - -void CommandLine::addArgs(const QStringList &inArgs) -{ - QtcProcess::addArgs(&m_arguments, inArgs); -} - -void CommandLine::addArgs(const QString &inArgs) -{ - QtcProcess::addArgs(&m_arguments, inArgs); -} - -QString CommandLine::toUserOutput() const -{ - return m_executable.toUserOutput() + ' ' + m_arguments; -} - } // namespace Utils diff --git a/src/libs/utils/qtcprocess.h b/src/libs/utils/qtcprocess.h index 1a831d3a5a7..d3d22d34154 100644 --- a/src/libs/utils/qtcprocess.h +++ b/src/libs/utils/qtcprocess.h @@ -32,29 +32,6 @@ namespace Utils { class AbstractMacroExpander; -class QTCREATOR_UTILS_EXPORT CommandLine -{ -public: - CommandLine() {} - - CommandLine(const FilePath &executable, const QString &arguments) - : m_executable(executable), m_arguments(arguments) - {} - - void addArg(const QString &arg); - void addArgs(const QStringList &inArgs); - void addArgs(const QString &inArgs); - - QString toUserOutput() const; - - FilePath executable() const { return m_executable; } - QString arguments() const { return m_arguments; } - -private: - FilePath m_executable; - QString m_arguments; -}; - class QTCREATOR_UTILS_EXPORT QtcProcess : public QProcess { Q_OBJECT diff --git a/src/plugins/android/androiddeployqtstep.cpp b/src/plugins/android/androiddeployqtstep.cpp index 8e56cd6a582..61c2bfcfa98 100644 --- a/src/plugins/android/androiddeployqtstep.cpp +++ b/src/plugins/android/androiddeployqtstep.cpp @@ -300,7 +300,7 @@ AndroidDeployQtStep::DeployErrorCode AndroidDeployQtStep::runDeploy() { CommandLine cmd(Utils::FilePath::fromString(m_command), {}); if (m_useAndroiddeployqt && m_apkPath.isEmpty()) { - cmd = m_androiddeployqtArgs; + cmd.addArgs(m_androiddeployqtArgs.arguments()); if (m_uninstallPreviousPackageRun) cmd.addArg("--install"); else diff --git a/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp b/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp index 1d2ef2cb752..364337308ba 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp @@ -205,8 +205,6 @@ bool CMakeBuildStep::init() } } - QString arguments = allArguments(rc); - setIgnoreReturnValue(m_buildTarget == CMakeBuildStep::cleanTarget()); ProcessParameters *pp = processParameters(); @@ -217,8 +215,7 @@ bool CMakeBuildStep::init() env.set("NINJA_STATUS", m_ninjaProgressString + "%o/sec] "); pp->setEnvironment(env); pp->setWorkingDirectory(bc->buildDirectory()); - pp->setCommand(cmakeCommand()); - pp->setArguments(arguments); + pp->setCommandLine(cmakeCommand(rc)); pp->resolveAll(); setOutputParser(new CMakeParser); @@ -342,12 +339,12 @@ void CMakeBuildStep::setToolArguments(const QString &list) m_toolArguments = list; } -QString CMakeBuildStep::allArguments(const CMakeRunConfiguration *rc) const +Utils::CommandLine CMakeBuildStep::cmakeCommand(CMakeRunConfiguration *rc) const { - QString arguments; + CMakeTool *tool = CMakeKitAspect::cmakeTool(target()->kit()); - Utils::QtcProcess::addArg(&arguments, "--build"); - Utils::QtcProcess::addArg(&arguments, "."); + Utils::CommandLine cmd(tool ? tool->cmakeExecutable() : Utils::FilePath(), {}); + cmd.addArgs({"--build", "."}); QString target; @@ -360,21 +357,14 @@ QString CMakeBuildStep::allArguments(const CMakeRunConfiguration *rc) const target = m_buildTarget; } - Utils::QtcProcess::addArg(&arguments, "--target"); - Utils::QtcProcess::addArg(&arguments, target); + cmd.addArgs({"--target", target}); if (!m_toolArguments.isEmpty()) { - Utils::QtcProcess::addArg(&arguments, "--"); - arguments += ' ' + m_toolArguments; + cmd.addArg("--"); + cmd.addArgs(m_toolArguments); } - return arguments; -} - -Utils::FilePath CMakeBuildStep::cmakeCommand() const -{ - CMakeTool *tool = CMakeKitAspect::cmakeTool(target()->kit()); - return tool ? tool->cmakeExecutable() : Utils::FilePath(); + return cmd; } QString CMakeBuildStep::cleanTarget() @@ -530,8 +520,7 @@ void CMakeBuildStepConfigWidget::updateDetails() param.setMacroExpander(bc->macroExpander()); param.setEnvironment(bc->environment()); param.setWorkingDirectory(bc->buildDirectory()); - param.setCommand(m_buildStep->cmakeCommand()); - param.setArguments(m_buildStep->allArguments(nullptr)); + param.setCommandLine(m_buildStep->cmakeCommand(nullptr)); setSummaryText(param.summary(displayName())); } diff --git a/src/plugins/cmakeprojectmanager/cmakebuildstep.h b/src/plugins/cmakeprojectmanager/cmakebuildstep.h index ba2f62dab60..9b906f883fa 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildstep.h +++ b/src/plugins/cmakeprojectmanager/cmakebuildstep.h @@ -35,7 +35,10 @@ class QListWidget; class QListWidgetItem; QT_END_NAMESPACE -namespace Utils { class PathChooser; } +namespace Utils { +class CommandLine; +class PathChooser; +} // Utils namespace ProjectExplorer { class ToolChain; } @@ -64,9 +67,7 @@ public: QString toolArguments() const; void setToolArguments(const QString &list); - QString allArguments(const CMakeRunConfiguration *rc) const; - - Utils::FilePath cmakeCommand() const; + Utils::CommandLine cmakeCommand(CMakeRunConfiguration *rc) const; QVariantMap toMap() const override; diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.cpp b/src/plugins/cmakeprojectmanager/cmakeproject.cpp index 4814ab4c32a..1182b9699ef 100644 --- a/src/plugins/cmakeprojectmanager/cmakeproject.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeproject.cpp @@ -54,6 +54,7 @@ #include #include +#include #include #include @@ -635,7 +636,8 @@ MakeInstallCommand CMakeProject::makeInstallCommand(const Target *target, if (const BuildConfiguration * const bc = target->activeBuildConfiguration()) { if (const auto cmakeStep = bc->stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD) ->firstOfType()) { - cmd.command = cmakeStep->cmakeCommand(); + if (CMakeTool *tool = CMakeKitAspect::cmakeTool(target->kit())) + cmd.command = tool->cmakeExecutable(); } } cmd.arguments << "--build" << "." << "--target" << "install"; diff --git a/src/plugins/cmakeprojectmanager/servermode.cpp b/src/plugins/cmakeprojectmanager/servermode.cpp index 56b177fdf9d..bd37c4f6fe2 100644 --- a/src/plugins/cmakeprojectmanager/servermode.cpp +++ b/src/plugins/cmakeprojectmanager/servermode.cpp @@ -92,7 +92,7 @@ ServerMode::ServerMode(const Environment &env, m_socketDir("/tmp/cmake-"), #endif m_sourceDirectory(sourceDirectory), m_buildDirectory(buildDirectory), - m_cmakeExecutable(cmakeExecutable), + m_cmakeCommand(cmakeExecutable, {}), m_generator(generator), m_extraGenerator(extraGenerator), m_platform(platform), m_toolset(toolset), m_useExperimental(experimental), m_majorProtocol(major), m_minorProtocol(minor) @@ -114,28 +114,24 @@ ServerMode::ServerMode(const Environment &env, m_socketName = QString::fromLatin1("\\\\.\\pipe\\") + QUuid::createUuid().toString(); #endif - const QStringList args = QStringList({"-E", "server", "--pipe=" + m_socketName}); - connect(m_cmakeProcess.get(), &QtcProcess::started, this, [this]() { m_connectionTimer.start(); }); connect(m_cmakeProcess.get(), QOverload::of(&QtcProcess::finished), this, &ServerMode::handleCMakeFinished); - QString argumentString; - QtcProcess::addArgs(&argumentString, args); + m_cmakeCommand.addArgs({"-E", "server", "--pipe=" + m_socketName}); if (m_useExperimental) - QtcProcess::addArg(&argumentString, "--experimental"); + m_cmakeCommand.addArg("--experimental"); qCInfo(cmakeServerMode) - << "Preparing cmake:" << cmakeExecutable.toString() << argumentString + << "Preparing cmake:" << m_cmakeCommand.toUserOutput() << "in" << m_buildDirectory.toString(); - m_cmakeProcess->setCommand(CommandLine(cmakeExecutable, argumentString)); + m_cmakeProcess->setCommand(m_cmakeCommand); // Delay start: - QTimer::singleShot(0, this, [argumentString, this] { - emit message(tr("Running \"%1 %2\" in %3.") - .arg(m_cmakeExecutable.toUserOutput()) - .arg(argumentString) + QTimer::singleShot(0, this, [this] { + emit message(tr("Running \"%1\" in %2.") + .arg(m_cmakeCommand.toUserOutput()) .arg(m_buildDirectory.toUserOutput())); m_cmakeProcess->start(); @@ -199,7 +195,7 @@ void ServerMode::connectToServer() m_cmakeProcess->disconnect(); qCInfo(cmakeServerMode) << "Timeout waiting for pipe" << m_socketName; reportError(tr("Running \"%1\" failed: Timeout waiting for pipe \"%2\".") - .arg(m_cmakeExecutable.toUserOutput()) + .arg(m_cmakeCommand.toUserOutput()) .arg(m_socketName)); Core::Reaper::reap(m_cmakeProcess.release()); @@ -236,14 +232,14 @@ void ServerMode::handleCMakeFinished(int code, QProcess::ExitStatus status) qCInfo(cmakeServerMode) << "CMake has finished" << code << status; QString msg; if (status != QProcess::NormalExit) - msg = tr("CMake process \"%1\" crashed.").arg(m_cmakeExecutable.toUserOutput()); + msg = tr("CMake process \"%1\" crashed.").arg(m_cmakeCommand.toUserOutput()); else if (code != 0) - msg = tr("CMake process \"%1\" quit with exit code %2.").arg(m_cmakeExecutable.toUserOutput()).arg(code); + msg = tr("CMake process \"%1\" quit with exit code %2.").arg(m_cmakeCommand.toUserOutput()).arg(code); if (!msg.isEmpty()) { reportError(msg); } else { - emit message(tr("CMake process \"%1\" quit normally.").arg(m_cmakeExecutable.toUserOutput())); + emit message(tr("CMake process \"%1\" quit normally.").arg(m_cmakeCommand.toUserOutput())); } if (m_cmakeSocket) { diff --git a/src/plugins/cmakeprojectmanager/servermode.h b/src/plugins/cmakeprojectmanager/servermode.h index 1b9e376ff92..2a4ccbf2327 100644 --- a/src/plugins/cmakeprojectmanager/servermode.h +++ b/src/plugins/cmakeprojectmanager/servermode.h @@ -94,7 +94,7 @@ private: Utils::FilePath m_sourceDirectory; Utils::FilePath m_buildDirectory; - Utils::FilePath m_cmakeExecutable; + Utils::CommandLine m_cmakeCommand; QByteArray m_buffer; diff --git a/src/plugins/coreplugin/CMakeLists.txt b/src/plugins/coreplugin/CMakeLists.txt index 5018a9b4c16..77836859692 100644 --- a/src/plugins/coreplugin/CMakeLists.txt +++ b/src/plugins/coreplugin/CMakeLists.txt @@ -1,5 +1,5 @@ add_qtc_plugin(Core - DEPENDS Qt5::PrintSupport Qt5::Qml Qt5::Script Qt5::Sql Qt5::Gui Qt5::GuiPrivate + DEPENDS Qt5::PrintSupport Qt5::Qml Qt5::Sql Qt5::Gui Qt5::GuiPrivate PUBLIC_DEPENDS Aggregation ExtensionSystem Utils app_version SOURCES actionmanager/actioncontainer.cpp actionmanager/actioncontainer.h actionmanager/actioncontainer_p.h @@ -100,7 +100,6 @@ add_qtc_plugin(Core locator/externaltoolsfilter.cpp locator/externaltoolsfilter.h locator/filesystemfilter.cpp locator/filesystemfilter.h locator/filesystemfilter.ui locator/ilocatorfilter.cpp locator/ilocatorfilter.h - locator/javascriptfilter.cpp locator/javascriptfilter.h locator/locator.cpp locator/locator.h locator/locatorconstants.h locator/locatorfiltersfilter.cpp locator/locatorfiltersfilter.h @@ -176,3 +175,11 @@ extend_qtc_plugin(Core CONDITION (NOT WIN32) AND (NOT APPLE) SOURCES progressmanager/progressmanager_x11.cpp ) + +extend_qtc_plugin(Core + CONDITION TARGET Qt5::Script + DEPENDS Qt5::Script + DEFINES WITH_JAVASCRIPTFILTER + SOURCES + locator/javascriptfilter.cpp locator/javascriptfilter.h +) diff --git a/src/plugins/coreplugin/dialogs/settingsdialog.cpp b/src/plugins/coreplugin/dialogs/settingsdialog.cpp index 596d498875a..8057a9e48ad 100644 --- a/src/plugins/coreplugin/dialogs/settingsdialog.cpp +++ b/src/plugins/coreplugin/dialogs/settingsdialog.cpp @@ -726,7 +726,7 @@ void SettingsDialog::done(int val) QSettings *settings = ICore::settings(); settings->setValue(QLatin1String(pageKeyC), m_currentPage.toSetting()); - ICore::saveSettings(); // save all settings + ICore::saveSettings(ICore::SettingsDialogDone); // save all settings // exit event loops in reverse order of addition for (QEventLoop *eventLoop : m_eventLoops) diff --git a/src/plugins/coreplugin/icore.cpp b/src/plugins/coreplugin/icore.cpp index 4a6066df0eb..63eba664ccd 100644 --- a/src/plugins/coreplugin/icore.cpp +++ b/src/plugins/coreplugin/icore.cpp @@ -330,7 +330,7 @@ ICore::ICore(MainWindow *mainwindow) m_mainwindow = mainwindow; // Save settings once after all plugins are initialized: connect(PluginManager::instance(), &PluginManager::initializationDone, - this, &ICore::saveSettings); + this, [] { ICore::saveSettings(ICore::InitializationDone); }); connect(PluginManager::instance(), &PluginManager::testsFinished, [this] (int failedTests) { emit coreAboutToClose(); if (failedTests != 0) @@ -690,9 +690,9 @@ void ICore::setupScreenShooter(const QString &name, QWidget *w, const QRect &rc) new ScreenShooter(w, name, rc); } -void ICore::saveSettings() +void ICore::saveSettings(SaveSettingsReason reason) { - emit m_instance->saveSettingsRequested(); + emit m_instance->saveSettingsRequested(reason); m_mainwindow->saveSettings(); ICore::settings(QSettings::SystemScope)->sync(); diff --git a/src/plugins/coreplugin/icore.h b/src/plugins/coreplugin/icore.h index 5125345cffd..04d501e1346 100644 --- a/src/plugins/coreplugin/icore.h +++ b/src/plugins/coreplugin/icore.h @@ -141,14 +141,21 @@ public: static QString systemInformation(); static void setupScreenShooter(const QString &name, QWidget *w, const QRect &rc = QRect()); + enum SaveSettingsReason { + InitializationDone, + SettingsDialogDone, + ModeChanged, + MainWindowClosing, + }; + public slots: - static void saveSettings(); + static void saveSettings(SaveSettingsReason reason); signals: void coreAboutToOpen(); void coreOpened(); void newItemDialogStateChanged(); - void saveSettingsRequested(); + void saveSettingsRequested(SaveSettingsReason reason); void coreAboutToClose(); void contextAboutToChange(const QList &context); void contextChanged(const Core::Context &context); diff --git a/src/plugins/coreplugin/mainwindow.cpp b/src/plugins/coreplugin/mainwindow.cpp index d35477f6b57..dd724d9f9c7 100644 --- a/src/plugins/coreplugin/mainwindow.cpp +++ b/src/plugins/coreplugin/mainwindow.cpp @@ -322,7 +322,7 @@ void MainWindow::closeEvent(QCloseEvent *event) return; } - ICore::saveSettings(); + ICore::saveSettings(ICore::MainWindowClosing); // Save opened files if (!DocumentManager::saveAllModifiedDocuments()) { diff --git a/src/plugins/projectexplorer/processparameters.cpp b/src/plugins/projectexplorer/processparameters.cpp index 350aa7c90f7..f535cc120e1 100644 --- a/src/plugins/projectexplorer/processparameters.cpp +++ b/src/plugins/projectexplorer/processparameters.cpp @@ -54,6 +54,14 @@ ProcessParameters::ProcessParameters() : { } +void ProcessParameters::setCommandLine(const CommandLine &cmdLine) +{ + m_command = cmdLine.executable(); + m_arguments = cmdLine.arguments(); + m_effectiveCommand.clear(); + m_effectiveArguments.clear(); +} + /*! Sets the executable to run. */ diff --git a/src/plugins/projectexplorer/processparameters.h b/src/plugins/projectexplorer/processparameters.h index 3e08e6bb853..c87ede7d5b5 100644 --- a/src/plugins/projectexplorer/processparameters.h +++ b/src/plugins/projectexplorer/processparameters.h @@ -30,7 +30,10 @@ #include #include -namespace Utils { class MacroExpander; } +namespace Utils { +class CommandLine; +class MacroExpander; +} // Utils namespace ProjectExplorer { @@ -40,6 +43,8 @@ class PROJECTEXPLORER_EXPORT ProcessParameters public: ProcessParameters(); + void setCommandLine(const Utils::CommandLine &cmdLine); + void setCommand(const Utils::FilePath &cmd); Utils::FilePath command() const { return m_command; } diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index cda19816a74..8169fab0a0c 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -2098,7 +2098,7 @@ void ProjectExplorerPluginPrivate::currentModeChanged(Id mode, Id oldMode) // Saving settings directly in a mode change is not a good idea, since the mode change // can be part of a bigger change. Save settings after that bigger change had a chance to // complete. - QTimer::singleShot(0, ICore::instance(), &ICore::saveSettings); + QTimer::singleShot(0, ICore::instance(), [] { ICore::saveSettings(ICore::ModeChanged); }); } if (mode == Core::Constants::MODE_WELCOME) updateWelcomePage(); diff --git a/src/plugins/projectexplorer/runcontrol.cpp b/src/plugins/projectexplorer/runcontrol.cpp index a358df38f3b..f90a8fd48c0 100644 --- a/src/plugins/projectexplorer/runcontrol.cpp +++ b/src/plugins/projectexplorer/runcontrol.cpp @@ -1554,4 +1554,10 @@ CommandLine Runnable::commandLine() const return CommandLine(FilePath::fromString(executable), commandLineArguments); } +void Runnable::setCommandLine(const CommandLine &cmdLine) +{ + executable = cmdLine.executable().toString(); + commandLineArguments = cmdLine.arguments(); +} + } // namespace ProjectExplorer diff --git a/src/plugins/projectexplorer/runcontrol.h b/src/plugins/projectexplorer/runcontrol.h index 040520991d0..fbb1c151ff1 100644 --- a/src/plugins/projectexplorer/runcontrol.h +++ b/src/plugins/projectexplorer/runcontrol.h @@ -74,6 +74,7 @@ public: Runnable() = default; Utils::CommandLine commandLine() const; + void setCommandLine(const Utils::CommandLine &cmdLine); QString executable; QString commandLineArguments; diff --git a/src/plugins/qmldesigner/designercore/include/nodemetainfo.h b/src/plugins/qmldesigner/designercore/include/nodemetainfo.h index 5d2d171ae72..09daa924aae 100644 --- a/src/plugins/qmldesigner/designercore/include/nodemetainfo.h +++ b/src/plugins/qmldesigner/designercore/include/nodemetainfo.h @@ -85,6 +85,7 @@ public: bool defaultPropertyIsComponent() const; TypeName typeName() const; + TypeName simplifiedTypeName() const; int majorVersion() const; int minorVersion() const; diff --git a/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp b/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp index 9c88cd130a6..25ff9506441 100644 --- a/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp +++ b/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp @@ -1483,6 +1483,11 @@ TypeName NodeMetaInfo::typeName() const return m_privateData->qualfiedTypeName(); } +TypeName NodeMetaInfo::simplifiedTypeName() const +{ + return typeName().split('.').constLast(); +} + int NodeMetaInfo::majorVersion() const { return m_privateData->majorVersion(); diff --git a/src/tools/clangrefactoringbackend/CMakeLists.txt b/src/tools/clangrefactoringbackend/CMakeLists.txt index 781783545ec..d161659e823 100644 --- a/src/tools/clangrefactoringbackend/CMakeLists.txt +++ b/src/tools/clangrefactoringbackend/CMakeLists.txt @@ -2,8 +2,7 @@ add_subdirectory(source) add_qtc_executable(clangrefactoringbackend DEPENDS - clangrefactoringbackend_lib Sqlite ClangSupport - libclang clangTooling clangIndex clangQuery clangToolingRefactor + clangrefactoringbackend_lib Sqlite SOURCES clangrefactoringbackendmain.cpp ) diff --git a/src/tools/clangrefactoringbackend/source/CMakeLists.txt b/src/tools/clangrefactoringbackend/source/CMakeLists.txt index cd15e8ad338..213ce6ffd76 100644 --- a/src/tools/clangrefactoringbackend/source/CMakeLists.txt +++ b/src/tools/clangrefactoringbackend/source/CMakeLists.txt @@ -1,5 +1,11 @@ add_qtc_library(clangrefactoringbackend_lib STATIC - DEPENDS libclang clangTooling clangIndex clangQuery ClangSupport + PUBLIC_DEPENDS + Threads::Threads + LLVMCore libclang + clangAST clangASTMatchers clangBasic clangDynamicASTMatchers clangFrontend + clangHandleCXX clangIndex clangLex + clangSerialization clangTooling clangQuery + ClangSupport DEFINES CLANGSUPPORT_BUILD_LIB PUBLIC_INCLUDES ${CLANG_INCLUDE_DIRS} diff --git a/src/tools/sdktool/sdktool.pro b/src/tools/sdktool/sdktool.pro index 098897f1e27..434da257c5e 100644 --- a/src/tools/sdktool/sdktool.pro +++ b/src/tools/sdktool/sdktool.pro @@ -30,10 +30,12 @@ SOURCES += \ rmqtoperation.cpp \ rmtoolchainoperation.cpp \ settings.cpp \ + $$UTILS/environment.cpp \ $$UTILS/fileutils.cpp \ $$UTILS/hostosinfo.cpp \ $$UTILS/persistentsettings.cpp \ $$UTILS/qtcassert.cpp \ + $$UTILS/qtcprocess.cpp \ $$UTILS/savefile.cpp \ HEADERS += \ @@ -57,10 +59,12 @@ HEADERS += \ rmqtoperation.h \ rmtoolchainoperation.h \ settings.h \ + $$UTILS/environment.h \ $$UTILS/fileutils.h \ $$UTILS/hostosinfo.h \ $$UTILS/persistentsettings.h \ $$UTILS/qtcassert.h \ + $$UTILS/qtcprocess.h \ $$UTILS/savefile.h \ macos { diff --git a/src/tools/sdktool/sdktool.qbs b/src/tools/sdktool/sdktool.qbs index 67b1d8e3c34..1c672d783e5 100644 --- a/src/tools/sdktool/sdktool.qbs +++ b/src/tools/sdktool/sdktool.qbs @@ -66,10 +66,12 @@ QtcTool { name: "Utils" prefix: libsDir + "/utils/" files: [ + "environment.cpp", "environment.h", "fileutils.cpp", "fileutils.h", "hostosinfo.cpp", "hostosinfo.h", "persistentsettings.cpp", "persistentsettings.h", "qtcassert.cpp", "qtcassert.h", + "qtcprocess.cpp", "qtcprocess.h", "savefile.cpp", "savefile.h" ] } diff --git a/tests/auto/debugger/tst_dumpers.cpp b/tests/auto/debugger/tst_dumpers.cpp index 237c08b66d5..0f60d6c7db5 100644 --- a/tests/auto/debugger/tst_dumpers.cpp +++ b/tests/auto/debugger/tst_dumpers.cpp @@ -93,7 +93,7 @@ static bool generateEnvironmentSettings(Utils::Environment &env, const QString cmdPath = QString::fromLocal8Bit(qgetenv("COMSPEC")); // Windows SDK setup scripts require command line switches for environment expansion. QString cmdArguments = " /E:ON /V:ON /c \"" + QDir::toNativeSeparators(saver.fileName()) + '"'; - run.setCommand(cmdPath, cmdArguments); + run.setCommand(Utils::CommandLine(cmdPath, cmdArguments)); run.start(); if (!run.waitForStarted()) {