forked from qt-creator/qt-creator
Merge "Merge remote-tracking branch 'origin/4.5'"
This commit is contained in:
60
dist/changes-4.5.0.md
vendored
60
dist/changes-4.5.0.md
vendored
@@ -14,10 +14,13 @@ General
|
||||
* Changed `File System` pane to tree view with top level directory selectable
|
||||
from `Computer`, `Home`, `Projects`, and individual project root directories
|
||||
(QTCREATORBUG-8305)
|
||||
* Fixed crash when closing Qt Creator while searching for updates
|
||||
(QTCREATORBUG-19165)
|
||||
|
||||
Editing
|
||||
|
||||
* Added shortcut for sorting selected lines
|
||||
* Added `Edit` > `Advanced` > `Sort Selected Lines`, replacing `Tools` >
|
||||
`External` > `Text` > `Sort Selection`
|
||||
|
||||
All Projects
|
||||
|
||||
@@ -25,12 +28,27 @@ All Projects
|
||||
* Added support for changing the maximum number of lines shown in compile output
|
||||
(QTCREATORBUG-2200)
|
||||
|
||||
QMake Projects
|
||||
|
||||
* Fixed support of wildcards in `INSTALLS` variable (QTCREATORBUG-17935)
|
||||
* Fixed that `QMAKE_CFLAGS` was not passed to code model
|
||||
|
||||
CMake Projects
|
||||
|
||||
* Added groups to CMake configuration UI
|
||||
* Added option to change configuration variable types
|
||||
* Added option to unset configuration variable
|
||||
* Improved handling of CMake configuration changes on disk (QTCREATORBUG-17555)
|
||||
* Improved simplified project tree (QTCREATORBUG-19040)
|
||||
* Fixed that value was removed when renaming configuration variable
|
||||
(QTCREATORBUG-17926)
|
||||
* Fixed that `PATH` environment was unnecessarily modified (QTCREATORBUG-18714)
|
||||
* Fixed that QML errors in application output where not linked to the source
|
||||
(QTCREATORBUG-18586)
|
||||
|
||||
Qbs Projects
|
||||
|
||||
* Fixed that custom `installRoot` was not saved (QTCREATORBUG-18895)
|
||||
|
||||
C++ Support
|
||||
|
||||
@@ -39,6 +57,7 @@ C++ Support
|
||||
* Fixed detection of macros defined by tool chain for `C`
|
||||
* Fixed that `Refactoring` context menu blocked UI while checking for available
|
||||
actions
|
||||
* Fixed crash when refactoring class with errors (QTCREATORBUG-19180)
|
||||
* Clang Code Model
|
||||
* Added sanity check to `Clang Code Model Warnings` option
|
||||
(QTCREATORBUG-18864)
|
||||
@@ -52,6 +71,7 @@ C++ Support
|
||||
QML Support
|
||||
|
||||
* Added wizards with different starting UI layouts
|
||||
* Fixed that undo history was lost when reformatting file (QTCREATORBUG-18645)
|
||||
|
||||
Python Support
|
||||
|
||||
@@ -65,6 +85,11 @@ Debugging
|
||||
* LLDB / macOS
|
||||
* Added pretty printing of Core Foundation and Foundation string-like types
|
||||
(QTCREATORBUG-18638)
|
||||
* CDB
|
||||
* Fixed attaching to running process with command line arguments
|
||||
(QTCREATORBUG-19034)
|
||||
* QML
|
||||
* Fixed changing values of ECMAScript strings (QTCREATORBUG-19032)
|
||||
|
||||
QML Profiler
|
||||
|
||||
@@ -73,11 +98,25 @@ QML Profiler
|
||||
Qt Quick Designer
|
||||
|
||||
* Added option to only show visible items in navigator
|
||||
* Fixed crash in integrated code editor (QTCREATORBUG-19079)
|
||||
* Fixed crash when Ctrl-clicking on newly refactored QML file
|
||||
(QTCREATORBUG-19064)
|
||||
* Fixed filtering in Library view (QTCREATORBUG-19054)
|
||||
* Fixed `Cmd + Left` in integrated code editor on macOS (QTCREATORBUG-19272)
|
||||
* Fixed crash with `Become Last Sibling` and multiline expressions
|
||||
(QTCREATORBUG-19284)
|
||||
|
||||
Version Control Systems
|
||||
|
||||
* Added query for saving modified files before opening commit editor
|
||||
(QTCREATORBUG-3857)
|
||||
* Git
|
||||
* Fixed issues with localized tool output (QTCREATORBUG-19017)
|
||||
|
||||
Test Integration
|
||||
|
||||
* Fixed issue with finding test target with CMake projects (QTCREATORBUG-17882,
|
||||
QTCREATORBUG-18922, QTCREATORBUG-18932)
|
||||
|
||||
Beautifier
|
||||
|
||||
@@ -98,6 +137,7 @@ Platform Specific
|
||||
|
||||
Windows
|
||||
|
||||
* Fixed detection of Visual Studio Build Tools 2017 (QTCREATORBUG-19053)
|
||||
* Fixed that environment variable keys were converted to upper case in build
|
||||
and run configurations (QTCREATORBUG-18915)
|
||||
|
||||
@@ -111,8 +151,16 @@ Android
|
||||
|
||||
* Removed support for local deployment (QTBUG-62995)
|
||||
* Removed support for Ant
|
||||
* Added UI for managing Android SDKs (QTCREATORBUG-18978)
|
||||
* Improved Android settings
|
||||
* Improved checks for minimum requirements of Android tools (QTCREATORBUG-18837)
|
||||
|
||||
iOS
|
||||
|
||||
* Fixed check for minimum Xcode version (QTCREATORBUG-18091)
|
||||
* Fixed switching between simulator device types with Xcode 9
|
||||
(QTCREATORBUG-19270)
|
||||
|
||||
Universal Windows Platform
|
||||
|
||||
* Fixed deployment on Windows 10 Phone emulator
|
||||
@@ -122,19 +170,24 @@ Alessandro Portale
|
||||
Alexander Volkov
|
||||
Andre Hartmann
|
||||
André Pönitz
|
||||
Benjamin Terrier
|
||||
Christian Kandeler
|
||||
Christian Stenger
|
||||
Claus Steuer
|
||||
Daniel Trevitz
|
||||
David Schulz
|
||||
Donald Carr
|
||||
Eike Ziller
|
||||
Filipe Azevedo
|
||||
Friedemann Kleint
|
||||
Ivan Donchevskii
|
||||
Jake Petroules
|
||||
Jaroslaw Kobus
|
||||
Jochen Becher
|
||||
Kai Köhne
|
||||
Knud Dollereder
|
||||
Laurent Montel
|
||||
Leena Miettinen
|
||||
Marco Benelli
|
||||
Marco Bubke
|
||||
Mitch Curtis
|
||||
@@ -145,10 +198,13 @@ Orgad Shaneh
|
||||
Robert Löhning
|
||||
Ryuji Kakemizu
|
||||
Samuel Gaist
|
||||
scootergrisen
|
||||
Sergey Belyashov
|
||||
Serhii Moroz
|
||||
Thiago Macieira
|
||||
Thomas Hartmann
|
||||
Tim Jenssen
|
||||
Tobias Hunger
|
||||
Ulf Hermann
|
||||
Vikas Pachdha
|
||||
Vikas Pachdha
|
||||
Viktor Kireev
|
||||
|
@@ -260,6 +260,7 @@ public:
|
||||
BuildToolsMarker = 0x080,
|
||||
SdkToolsMarker = 0x100,
|
||||
PlatformToolsMarker = 0x200,
|
||||
EmulatorToolsMarker = 0x400,
|
||||
SectionMarkers = InstalledPackagesMarker | AvailablePackagesMarkers | AvailableUpdatesMarker
|
||||
};
|
||||
|
||||
@@ -278,6 +279,7 @@ private:
|
||||
BuildTools *parseBuildToolsPackage(const QStringList &data) const;
|
||||
SdkTools *parseSdkToolsPackage(const QStringList &data) const;
|
||||
PlatformTools *parsePlatformToolsPackage(const QStringList &data) const;
|
||||
EmulatorTools *parseEmulatorToolsPackage(const QStringList &data) const;
|
||||
MarkerTag parseMarkers(const QString &line);
|
||||
|
||||
MarkerTag m_currentSection = MarkerTag::None;
|
||||
@@ -292,7 +294,8 @@ const std::map<SdkManagerOutputParser::MarkerTag, const char *> markerTags {
|
||||
{SdkManagerOutputParser::MarkerTag::SystemImageMarker, "system-images"},
|
||||
{SdkManagerOutputParser::MarkerTag::BuildToolsMarker, "build-tools"},
|
||||
{SdkManagerOutputParser::MarkerTag::SdkToolsMarker, "tools"},
|
||||
{SdkManagerOutputParser::MarkerTag::PlatformToolsMarker, "platform-tools"}
|
||||
{SdkManagerOutputParser::MarkerTag::PlatformToolsMarker, "platform-tools"},
|
||||
{SdkManagerOutputParser::MarkerTag::EmulatorToolsMarker, "emulator"}
|
||||
};
|
||||
|
||||
AndroidSdkManager::AndroidSdkManager(const AndroidConfig &config, QObject *parent):
|
||||
@@ -543,6 +546,10 @@ void SdkManagerOutputParser::parsePackageData(MarkerTag packageMarker, const QSt
|
||||
createPackage(&SdkManagerOutputParser::parsePlatformToolsPackage);
|
||||
break;
|
||||
|
||||
case MarkerTag::EmulatorToolsMarker:
|
||||
createPackage(&SdkManagerOutputParser::parseEmulatorToolsPackage);
|
||||
break;
|
||||
|
||||
case MarkerTag::PlatformMarker:
|
||||
createPackage(&SdkManagerOutputParser::parsePlatform);
|
||||
break;
|
||||
@@ -705,6 +712,22 @@ PlatformTools *SdkManagerOutputParser::parsePlatformToolsPackage(const QStringLi
|
||||
return platformTools;
|
||||
}
|
||||
|
||||
EmulatorTools *SdkManagerOutputParser::parseEmulatorToolsPackage(const QStringList &data) const
|
||||
{
|
||||
EmulatorTools *emulatorTools = nullptr;
|
||||
GenericPackageData packageData;
|
||||
if (parseAbstractData(packageData, data, 1, "Emulator-tools")) {
|
||||
emulatorTools = new EmulatorTools(packageData.revision, data.at(0));
|
||||
emulatorTools->setDescriptionText(packageData.description);
|
||||
emulatorTools->setDisplayText(packageData.description);
|
||||
emulatorTools->setInstalledLocation(packageData.installedLocation);
|
||||
} else {
|
||||
qCDebug(sdkManagerLog) << "Emulator-tools: Parsing failed. Minimum required data "
|
||||
"unavailable:" << data;
|
||||
}
|
||||
return emulatorTools;
|
||||
}
|
||||
|
||||
SdkManagerOutputParser::MarkerTag SdkManagerOutputParser::parseMarkers(const QString &line)
|
||||
{
|
||||
if (line.isEmpty())
|
||||
|
@@ -253,4 +253,20 @@ AndroidSdkPackage::PackageType PlatformTools::type() const
|
||||
return AndroidSdkPackage::PlatformToolsPackage;
|
||||
}
|
||||
|
||||
EmulatorTools::EmulatorTools(QVersionNumber revision, QString sdkStylePathStr, QObject *parent):
|
||||
AndroidSdkPackage(revision, sdkStylePathStr, parent)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
bool EmulatorTools::isValid() const
|
||||
{
|
||||
return installedLocation().exists();
|
||||
}
|
||||
|
||||
AndroidSdkPackage::PackageType EmulatorTools::type() const
|
||||
{
|
||||
return AndroidSdkPackage::EmulatorToolsPackage;
|
||||
}
|
||||
|
||||
} // namespace Android
|
||||
|
@@ -52,8 +52,9 @@ public:
|
||||
PlatformToolsPackage = 1 << 3,
|
||||
SdkPlatformPackage = 1 << 4,
|
||||
SystemImagePackage = 1 << 5,
|
||||
EmulatorToolsPackage = 1 << 6,
|
||||
AnyValidType = SdkToolsPackage | BuildToolsPackage | PlatformToolsPackage |
|
||||
SdkPlatformPackage | SystemImagePackage
|
||||
SdkPlatformPackage | SystemImagePackage | EmulatorToolsPackage
|
||||
};
|
||||
|
||||
enum PackageState {
|
||||
@@ -169,6 +170,17 @@ public:
|
||||
PackageType type() const override;
|
||||
};
|
||||
|
||||
class EmulatorTools : public AndroidSdkPackage
|
||||
{
|
||||
public:
|
||||
EmulatorTools(QVersionNumber revision, QString sdkStylePathStr, QObject *parent = nullptr);
|
||||
|
||||
// AndroidSdkPackage Overrides
|
||||
public:
|
||||
bool isValid() const override;
|
||||
PackageType type() const override;
|
||||
};
|
||||
|
||||
class SdkTools : public AndroidSdkPackage
|
||||
{
|
||||
public:
|
||||
|
@@ -148,8 +148,8 @@ static CPlusPlus::Document::Ptr declaringDocument(CPlusPlus::Document::Ptr doc,
|
||||
}
|
||||
}
|
||||
|
||||
if (lookupItems.size()) {
|
||||
if (CPlusPlus::Symbol *symbol = lookupItems.first().declaration()) {
|
||||
for (const CPlusPlus::LookupItem &item : lookupItems) {
|
||||
if (CPlusPlus::Symbol *symbol = item.declaration()) {
|
||||
if (CPlusPlus::Class *toeClass = symbol->asClass()) {
|
||||
const QString declFileName = QLatin1String(toeClass->fileId()->chars(),
|
||||
toeClass->fileId()->size());
|
||||
|
@@ -123,8 +123,12 @@ TestConfiguration *QuickTestTreeItem::testConfiguration() const
|
||||
switch (type()) {
|
||||
case TestCase: {
|
||||
QStringList testFunctions;
|
||||
for (int row = 0, count = childCount(); row < count; ++row)
|
||||
testFunctions << name() + "::" + childItem(row)->name();
|
||||
for (int row = 0, count = childCount(); row < count; ++row) {
|
||||
const TestTreeItem *child = childItem(row);
|
||||
if (child->type() == TestTreeItem::TestSpecialFunction)
|
||||
continue;
|
||||
testFunctions << name() + "::" + child->name();
|
||||
}
|
||||
config = new QuickTestConfiguration;
|
||||
config->setTestCases(testFunctions);
|
||||
config->setProjectFile(proFile());
|
||||
|
@@ -101,7 +101,7 @@ TestNavigationWidget::TestNavigationWidget(QWidget *parent) :
|
||||
connect(m_model->parser(), &TestCodeParser::parsingFailed,
|
||||
this, &TestNavigationWidget::onParsingFinished);
|
||||
connect(m_model, &TestTreeModel::updatedActiveFrameworks,
|
||||
[this] (int numberOfActive) {
|
||||
this, [this] (int numberOfActive) {
|
||||
m_missingFrameworksWidget->setVisible(numberOfActive == 0);
|
||||
});
|
||||
connect(m_progressTimer, &QTimer::timeout,
|
||||
|
@@ -95,6 +95,12 @@ public:
|
||||
addWrappedQtHeadersIncludePath();
|
||||
}
|
||||
|
||||
void addToolchainAndProjectMacros() final
|
||||
{
|
||||
addMacros({ProjectExplorer::Macro("Q_CREATOR_RUN", "1")});
|
||||
CompilerOptionsBuilder::addToolchainAndProjectMacros();
|
||||
}
|
||||
|
||||
void addExtraOptions() final
|
||||
{
|
||||
addDummyUiHeaderOnDiskIncludePath();
|
||||
|
@@ -88,8 +88,9 @@ public:
|
||||
REPARSE_URGENT = 1, // Do not wait for more requests, start ASAP
|
||||
REPARSE_FORCE_CONFIGURATION = 2, // Force configuration arguments to cmake
|
||||
REPARSE_CHECK_CONFIGURATION = 4, // Check and warn if on-disk config and QtC config differ
|
||||
REPARSE_IGNORE = 8, // Do not reparse:-)
|
||||
REPARSE_FAIL = 16 // Do not reparse and raise a warning
|
||||
REPARSE_SCAN = 8,
|
||||
REPARSE_IGNORE = 16, // Do not reparse:-)
|
||||
REPARSE_FAIL = 32 // Do not reparse and raise a warning
|
||||
};
|
||||
|
||||
signals:
|
||||
|
@@ -390,25 +390,27 @@ bool CMakeProject::supportsKit(Kit *k, QString *errorMessage) const
|
||||
|
||||
void CMakeProject::runCMake()
|
||||
{
|
||||
if (isParsing())
|
||||
CMakeBuildConfiguration *bc = activeBc(this);
|
||||
if (isParsing() || !bc)
|
||||
return;
|
||||
|
||||
CMakeBuildConfiguration *bc = activeBc(this);
|
||||
if (bc) {
|
||||
BuildDirParameters parameters(bc);
|
||||
m_buildDirManager.setParametersAndRequestParse(parameters,
|
||||
BuildDirManager::REPARSE_CHECK_CONFIGURATION,
|
||||
BuildDirManager::REPARSE_CHECK_CONFIGURATION);
|
||||
}
|
||||
BuildDirParameters parameters(bc);
|
||||
m_buildDirManager.setParametersAndRequestParse(parameters,
|
||||
BuildDirManager::REPARSE_CHECK_CONFIGURATION,
|
||||
BuildDirManager::REPARSE_CHECK_CONFIGURATION);
|
||||
}
|
||||
|
||||
void CMakeProject::runCMakeAndScanProjectTree()
|
||||
{
|
||||
if (!m_treeScanner.isFinished())
|
||||
CMakeBuildConfiguration *bc = activeBc(this);
|
||||
if (isParsing() || !bc)
|
||||
return;
|
||||
QTC_ASSERT(m_treeScanner.isFinished(), return);
|
||||
|
||||
m_waitingForScan = true;
|
||||
runCMake();
|
||||
BuildDirParameters parameters(bc);
|
||||
m_buildDirManager.setParametersAndRequestParse(parameters,
|
||||
BuildDirManager::REPARSE_CHECK_CONFIGURATION | BuildDirManager::REPARSE_SCAN,
|
||||
BuildDirManager::REPARSE_CHECK_CONFIGURATION | BuildDirManager::REPARSE_SCAN);
|
||||
}
|
||||
|
||||
void CMakeProject::buildCMakeTarget(const QString &buildTarget)
|
||||
@@ -452,6 +454,8 @@ void CMakeProject::handleReparseRequest(int reparseParameters)
|
||||
m_delayedParsingTimer.setInterval((reparseParameters & BuildDirManager::REPARSE_URGENT) ? 0 : 1000);
|
||||
m_delayedParsingTimer.start();
|
||||
m_delayedParsingParameters = m_delayedParsingParameters | reparseParameters;
|
||||
if (m_allFiles.isEmpty())
|
||||
m_delayedParsingParameters |= BuildDirManager::REPARSE_SCAN;
|
||||
}
|
||||
|
||||
void CMakeProject::startParsing(int reparseParameters)
|
||||
@@ -466,6 +470,7 @@ void CMakeProject::startParsing(int reparseParameters)
|
||||
|
||||
emitParsingStarted();
|
||||
|
||||
m_waitingForScan = reparseParameters & BuildDirManager::REPARSE_SCAN;
|
||||
m_waitingForParse = true;
|
||||
m_combinedScanAndParseResult = true;
|
||||
|
||||
|
@@ -58,6 +58,7 @@ QStringList CompilerOptionsBuilder::build(CppTools::ProjectFile::Kind fileKind,
|
||||
addToolchainAndProjectMacros();
|
||||
undefineClangVersionMacrosForMsvc();
|
||||
undefineCppLanguageFeatureMacrosForMsvc2015();
|
||||
addDefineFunctionMacrosMsvc();
|
||||
|
||||
addPredefinedHeaderPathsOptions();
|
||||
addPrecompiledHeaderOptions(pchUsage);
|
||||
@@ -389,6 +390,12 @@ void CompilerOptionsBuilder::undefineCppLanguageFeatureMacrosForMsvc2015()
|
||||
}
|
||||
}
|
||||
|
||||
void CompilerOptionsBuilder::addDefineFunctionMacrosMsvc()
|
||||
{
|
||||
if (m_projectPart.toolchainType == ProjectExplorer::Constants::MSVC_TOOLCHAIN_TYPEID)
|
||||
addMacros({{"__FUNCSIG__", "\"\""}, {"__FUNCTION__", "\"\""}, {"__FUNCDNAME__", "\"\""}});
|
||||
}
|
||||
|
||||
QString CompilerOptionsBuilder::includeDirOption() const
|
||||
{
|
||||
return QLatin1String("-I");
|
||||
|
@@ -64,11 +64,12 @@ public:
|
||||
void addWordWidth();
|
||||
void addHeaderPathOptions();
|
||||
void addPrecompiledHeaderOptions(PchUsage pchUsage);
|
||||
void addToolchainAndProjectMacros();
|
||||
virtual void addToolchainAndProjectMacros();
|
||||
void addMacros(const ProjectExplorer::Macros ¯os);
|
||||
|
||||
void addMsvcCompatibilityVersion();
|
||||
void undefineCppLanguageFeatureMacrosForMsvc2015();
|
||||
void addDefineFunctionMacrosMsvc();
|
||||
|
||||
void addProjectConfigFileInclude();
|
||||
void undefineClangVersionMacrosForMsvc();
|
||||
|
@@ -2102,7 +2102,7 @@ void DebuggerPlugin::attachExternalApplication(RunControl *rc)
|
||||
ProcessHandle pid = rc->applicationProcessHandle();
|
||||
RunConfiguration *runConfig = rc->runConfiguration();
|
||||
auto runControl = new RunControl(runConfig, ProjectExplorer::Constants::DEBUG_RUN_MODE);
|
||||
auto debugger = new DebuggerRunTool(runControl, guessKitFromAbis({rc->abi()}));
|
||||
auto debugger = new DebuggerRunTool(runControl, guessKitFromAbis({rc->abi()}), false);
|
||||
debugger->setAttachPid(pid);
|
||||
debugger->setRunControlName(tr("Process %1").arg(pid.pid()));
|
||||
debugger->setStartMode(AttachExternal);
|
||||
|
@@ -795,7 +795,7 @@ Internal::TerminalRunner *DebuggerRunTool::terminalRunner() const
|
||||
return d->terminalRunner;
|
||||
}
|
||||
|
||||
DebuggerRunTool::DebuggerRunTool(RunControl *runControl, Kit *kit)
|
||||
DebuggerRunTool::DebuggerRunTool(RunControl *runControl, Kit *kit, bool allowTerminal)
|
||||
: RunWorker(runControl), d(new DebuggerRunToolPrivate)
|
||||
{
|
||||
setDisplayName("DebuggerRunTool");
|
||||
@@ -839,7 +839,7 @@ DebuggerRunTool::DebuggerRunTool(RunControl *runControl, Kit *kit)
|
||||
// Normalize to work around QTBUG-17529 (QtDeclarative fails with 'File name case mismatch'...)
|
||||
m_runParameters.inferior.workingDirectory =
|
||||
FileUtils::normalizePathName(m_runParameters.inferior.workingDirectory);
|
||||
setUseTerminal(m_runParameters.inferior.runMode == ApplicationLauncher::Console);
|
||||
setUseTerminal(allowTerminal && m_runParameters.inferior.runMode == ApplicationLauncher::Console);
|
||||
}
|
||||
|
||||
const QByteArray envBinary = qgetenv("QTC_DEBUGGER_PATH");
|
||||
|
@@ -47,7 +47,8 @@ class DEBUGGER_EXPORT DebuggerRunTool : public ProjectExplorer::RunWorker
|
||||
|
||||
public:
|
||||
explicit DebuggerRunTool(ProjectExplorer::RunControl *runControl,
|
||||
ProjectExplorer::Kit *kit = nullptr);
|
||||
ProjectExplorer::Kit *kit = nullptr,
|
||||
bool allowTerminal = true);
|
||||
~DebuggerRunTool();
|
||||
|
||||
Internal::DebuggerEngine *engine() const { return m_engine; }
|
||||
|
@@ -87,6 +87,7 @@ public:
|
||||
void bringToForeground();
|
||||
qint64 applicationPID() const;
|
||||
bool isRunning() const;
|
||||
bool isRemoteRunning() const;
|
||||
|
||||
// Remote
|
||||
void doReportError(const QString &message);
|
||||
@@ -220,6 +221,11 @@ bool ApplicationLauncher::isRunning() const
|
||||
return d->isRunning();
|
||||
}
|
||||
|
||||
bool ApplicationLauncher::isRemoteRunning() const
|
||||
{
|
||||
return d->isRemoteRunning();
|
||||
}
|
||||
|
||||
bool ApplicationLauncherPrivate::isRunning() const
|
||||
{
|
||||
if (m_currentMode == ApplicationLauncher::Gui)
|
||||
@@ -227,6 +233,11 @@ bool ApplicationLauncherPrivate::isRunning() const
|
||||
return m_consoleProcess.isRunning();
|
||||
}
|
||||
|
||||
bool ApplicationLauncherPrivate::isRemoteRunning() const
|
||||
{
|
||||
return m_isLocal ? false : m_deviceProcess->state() == QProcess::Running;
|
||||
}
|
||||
|
||||
ProcessHandle ApplicationLauncher::applicationPID() const
|
||||
{
|
||||
return ProcessHandle(d->applicationPID());
|
||||
|
@@ -61,6 +61,7 @@ public:
|
||||
void stop();
|
||||
bool isRunning() const;
|
||||
Utils::ProcessHandle applicationPID() const;
|
||||
bool isRemoteRunning() const;
|
||||
|
||||
QString errorString() const;
|
||||
QProcess::ProcessError processError() const;
|
||||
|
@@ -275,7 +275,7 @@ bool QbsProject::addFilesToProduct(const QStringList &filePaths,
|
||||
}
|
||||
if (notAdded->count() != filePaths.count()) {
|
||||
m_projectData = m_qbsProject.projectData();
|
||||
rebuildProjectTree();
|
||||
delayedUpdateAfterParse();
|
||||
}
|
||||
return notAdded->isEmpty();
|
||||
}
|
||||
@@ -302,8 +302,7 @@ bool QbsProject::removeFilesFromProduct(const QStringList &filePaths,
|
||||
}
|
||||
if (notRemoved->count() != filePaths.count()) {
|
||||
m_projectData = m_qbsProject.projectData();
|
||||
rebuildProjectTree();
|
||||
emit fileListChanged();
|
||||
delayedUpdateAfterParse();
|
||||
}
|
||||
return notRemoved->isEmpty();
|
||||
}
|
||||
@@ -472,6 +471,11 @@ void QbsProject::updateAfterParse()
|
||||
emit fileListChanged();
|
||||
}
|
||||
|
||||
void QbsProject::delayedUpdateAfterParse()
|
||||
{
|
||||
QTimer::singleShot(0, this, &QbsProject::updateAfterParse);
|
||||
}
|
||||
|
||||
void QbsProject::updateProjectNodes()
|
||||
{
|
||||
OpTimer opTimer("updateProjectNodes");
|
||||
|
@@ -136,6 +136,7 @@ private:
|
||||
void handleRuleExecutionDone();
|
||||
bool checkCancelStatus();
|
||||
void updateAfterParse();
|
||||
void delayedUpdateAfterParse();
|
||||
void updateProjectNodes();
|
||||
|
||||
void projectLoaded() override;
|
||||
|
@@ -63,7 +63,7 @@ const char QBS_INSTALLSTEP_ID[] = "Qbs.InstallStep";
|
||||
const char QBS_VARIANT_DEBUG[] = "debug";
|
||||
const char QBS_VARIANT_RELEASE[] = "release";
|
||||
|
||||
const char QBS_CONFIG_VARIANT_KEY[] = "qbs.buildVariant";
|
||||
const char QBS_CONFIG_VARIANT_KEY[] = "qbs.defaultBuildVariant";
|
||||
const char QBS_CONFIG_PROFILE_KEY[] = "qbs.profile";
|
||||
const char QBS_INSTALL_ROOT_KEY[] = "qbs.installRoot";
|
||||
const char QBS_CONFIG_DECLARATIVE_DEBUG_KEY[] = "Qt.declarative.qmlDebugging";
|
||||
|
@@ -55,6 +55,7 @@
|
||||
#include <QSet>
|
||||
#include <QDir>
|
||||
#include <QLoggingCategory>
|
||||
#include <QRegularExpression>
|
||||
|
||||
using namespace LanguageUtils;
|
||||
using namespace QmlJS;
|
||||
@@ -330,6 +331,19 @@ static inline QString extractComponentFromQml(const QString &source)
|
||||
return result;
|
||||
}
|
||||
|
||||
static QString normalizeJavaScriptExpression(const QString &expression)
|
||||
{
|
||||
static const QRegularExpression regExp("\\n(\\s)+");
|
||||
|
||||
QString result = expression;
|
||||
return result.replace(regExp, "\n");
|
||||
}
|
||||
|
||||
static bool compareJavaScriptExpression(const QString &expression1, const QString &expression2)
|
||||
{
|
||||
return normalizeJavaScriptExpression(expression1) == normalizeJavaScriptExpression(expression2);
|
||||
}
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
namespace QmlDesigner {
|
||||
@@ -1379,7 +1393,7 @@ void TextToModelMerger::syncExpressionProperty(AbstractProperty &modelProperty,
|
||||
{
|
||||
if (modelProperty.isBindingProperty()) {
|
||||
BindingProperty bindingProperty = modelProperty.toBindingProperty();
|
||||
if (bindingProperty.expression() != javascript
|
||||
if (!compareJavaScriptExpression(bindingProperty.expression(), javascript)
|
||||
|| astType.isEmpty() == bindingProperty.isDynamic()
|
||||
|| astType != bindingProperty.dynamicTypeName()) {
|
||||
differenceHandler.bindingExpressionsDiffer(bindingProperty, javascript, astType);
|
||||
@@ -1574,7 +1588,7 @@ void ModelValidator::bindingExpressionsDiffer(BindingProperty &modelProperty,
|
||||
Q_UNUSED(modelProperty)
|
||||
Q_UNUSED(javascript)
|
||||
Q_UNUSED(astType)
|
||||
Q_ASSERT(modelProperty.expression() == javascript);
|
||||
Q_ASSERT(compareJavaScriptExpression(modelProperty.expression(), javascript));
|
||||
Q_ASSERT(modelProperty.dynamicTypeName() == astType);
|
||||
Q_ASSERT(0);
|
||||
}
|
||||
|
@@ -298,7 +298,9 @@ void Parser::Private::parseHeader(QIODevice *device)
|
||||
|
||||
// now that we're done checking if we're done (heh) with the header, parse the address
|
||||
// and cost column descriptions. speed is unimportant here.
|
||||
if (line.startsWith("positions: ")) {
|
||||
if (line.startsWith('#')) {
|
||||
continue;
|
||||
} else if (line.startsWith("positions: ")) {
|
||||
QString values = getValue(line, 11);
|
||||
data->setPositions(values.split(QLatin1Char(' '), QString::SkipEmptyParts));
|
||||
addressValuesCount = data->positions().count();
|
||||
|
@@ -62,8 +62,6 @@ ValgrindConfigWidget::ValgrindConfigWidget(ValgrindBaseSettings *settings,
|
||||
|
||||
connect(m_ui->valgrindExeChooser, &Utils::PathChooser::rawPathChanged,
|
||||
m_settings, &ValgrindBaseSettings::setValgrindExecutable);
|
||||
connect(m_settings, &ValgrindBaseSettings::valgrindExecutableChanged,
|
||||
m_ui->valgrindExeChooser, &Utils::PathChooser::setPath);
|
||||
connect(m_ui->smcDetectionComboBox, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged),
|
||||
m_settings, &ValgrindBaseSettings::setSelfModifyingCodeDetection);
|
||||
|
||||
|
@@ -143,10 +143,7 @@ void ValgrindBaseSettings::toMap(QVariantMap &map) const
|
||||
|
||||
void ValgrindBaseSettings::setValgrindExecutable(const QString &valgrindExecutable)
|
||||
{
|
||||
if (m_valgrindExecutable != valgrindExecutable) {
|
||||
m_valgrindExecutable = valgrindExecutable;
|
||||
emit valgrindExecutableChanged(valgrindExecutable);
|
||||
}
|
||||
m_valgrindExecutable = valgrindExecutable;
|
||||
}
|
||||
|
||||
void ValgrindBaseSettings::setSelfModifyingCodeDetection(int smcDetection)
|
||||
|
@@ -78,7 +78,6 @@ public:
|
||||
void setSelfModifyingCodeDetection(int);
|
||||
|
||||
signals:
|
||||
void valgrindExecutableChanged(const QString &);
|
||||
void selfModifyingCodeDetectionChanged(int);
|
||||
|
||||
private:
|
||||
|
Submodule src/shared/qbs updated: 2e4d332924...acf142851a
Reference in New Issue
Block a user