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