${AnyProject}::updateCppCodeModel() did two potentially not that cheap
operations in the ui thread:
(1) Querying the MimeDatabase for the mime type for the source files of
the project. In 99.9% of the cases no files need to be read for
this as the file extension will resolve the type. The expensiveness
comes from the sheer number of files that can occur.
(2) Calling compilers with the "(sub)project's compiler command line"
to determine the macros. While the caches avoid redundant calls,
the number of the unique compiler calls makes this still a
ui-freezing experience.
These two operations are moved into a worker thread. For this, the
expensive compiler calls are encapsulated in thread safe lambdas
("runners") in order to keep the "mutexed" data minimal. The original
API calls of the toolchains are implemented in terms of the runners.
While adapting the project managers, remove also the calls to
setProjectLanguage(). These are redundant because all of the project
managers already set a proper value in the constructor. Also, currently
there is no need (client) to report back detection of C sources in
project parts. This also keeps CppProjectUpdater simple.
There is still room for improvement:
* Run the compiler calls in parallel instead of sequence.
* Ensure that the mime type for a file is determined exactly once.
Change-Id: I2efc4e132ee88e3c8f264012ec8fafe3d86c404f
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
To be secure that include is only called it the definition is true.
Change-Id: I04bae9860e64206a1c6886d7cf1682a87e9f9a07
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
The argument parsing has some considerable overhead. We try to avoid that
with merging all content together in one file.
Change-Id: Icf426bb5d6a5569d59c180f94c7eab66a22a251c
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
Only the test clangstaticanalyzerlogfilereader makes use of that.
Change-Id: I5761ed023eab1b03dbb276d1798163fd2fb81e3d
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
...due to a not set master temporary directory.
Change-Id: I6668209e9b724f6560331f683b63e1c41616f060
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Additionally move common used code for interacting with the
Welcome page into separate file.
Change-Id: If863ae529c7c81d095f310f0a34926b324c77fa8
Reviewed-by: Robert Loehning <robert.loehning@qt.io>
It worked with plain GDB (parse_and_eval), and was broken by
696b2d4261.
Change-Id: Ibc143efdbd90681a2f9f4d84b75063eb98078f2b
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
1f29242276 used the correct form for
CONFIG -= qt.
This revealed several cases that are missing CoreProfile configuration.
Change-Id: I8bb6d5156eb6beba91a8df7b948832f1e043d64f
Reviewed-by: hjk <hjk@qt.io>
Overwriting QMAKE_CXXFLAGS will remove the needed isysroot flag
for finding the standard headers.
Explicitly settings the standard lib on macOS is also no longer
necessary.
Change-Id: I8a5ae5df485785b473a435c7feb9f8fb3295952b
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
* Move the combox box for switching the parse configurations out of the
"Additional Preprocessor Directives" dialog ('#'-button) to make it
better visible/accessible. Also, decouple the extra preprocessor
directives from the concrete parse context since this is not anymore
in same dialog.
* The combo box appears only if multiple parse configurations are
available for a file.
* The first time multiple parse configurations are detected, an info bar
is shown that points the user to the combox box. A "Do Not Show Again"
button is provided.
* Upon selecting an entry, the preferred parse configuration is saved as
part of the session. The setting can be cleared with the context menu
entry on the combo box.
Follow-up changes need to ensure that the display name and/or tooltip is
unambiguous, e.g. for qbs and cmake projects.
Change-Id: I9e9773704187291524ad7b605bfdddd83ef5b19d
Reviewed-by: David Schulz <david.schulz@qt.io>
QTC_LIB_DEPENDS has to be set before including qttest.pri
Change-Id: Ie455b7341a2d79d74e3bf6f9f9d39ce8a7539e6d
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Test checks that the dumper doesn't go through the slow "iterate
through every type defined in target" dumper path.
Done-by: Alexandru Croitor
Change-Id: I4e1aea22ea2912467635f2e62fe1f6b2aa58e897
Reviewed-by: hjk <hjk@qt.io>
Helps building tests in restricted environments.
Change-Id: Ic12b8e011555735a6539a8aba1e9e55b321dfbc2
Reviewed-by: David Schulz <david.schulz@qt.io>
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
It is much more performant to have a overload of char instead of providing
a string all the time.
Change-Id: I1a4ed82bf056f6af0c1f91c236b3fc30afa7f5d8
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
We don't handled generated files so we got internal parse errors.
Change-Id: If75e202f93fe3f71f43e3b1d15c0fb77e20c2248
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>