Commit Graph

238 Commits

Author SHA1 Message Date
Orgad Shaneh
83be2cc026 ProjectExplorer: Fix FolderNode::addNestedNode
std::lower_bound returns the first entry that is greater than or
equal to the argument. It should never return anything smaller
than the argument, so the condition did not make sense.

This broke the project tree of Qt Creator's cmake project (and likely other
projects as well).

Invert the condition to make it clearer.

This amends commit 18ecbb9b14.

Change-Id: I99a002b5fb2c4ea6639b896ce8d2ef2b01f0815b
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2019-12-05 10:08:10 +00:00
hjk
2758682723 ProjectExplorer: Move BuildSystem owership to BuildConfiguration
... or Target.

This patch moves build system from conceptually "one per project"
to "one per target (i.e. per project-and-kit)" or "per
BuildConfigurations" for targets where the builds differ
significantly.

Building requires usually items from the kit (Qt version, compiler,
...) so a target-agnostic build is practically almost always wrong.

Moving the build system to the target also has the potential
to solve issues caused by switching targets while parsing, that
used Project::activeTarget() regularly, with potentially different
results before and after the switch.

This patch might create performance/size regressions when several
targets are set up per project as the build system implementation's
internal data are duplicated in this case.

The idea is to fix that by sharing per-project pieces again in
the project implementation once these problems occur.

Change-Id: I87f640ce418b93175b5029124eaa55f3b8721dca
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2019-11-19 11:05:52 +00:00
hjk
7af9e0e827 ProjectExplorer: Speed up finding subfolder nodes
Instead of building up a temporary list and searching in there,
search the children directly.

Change-Id: Ibf08dad6dbbed3fbda3b93a7df311b9dd6f6e710
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2019-11-14 16:46:28 +00:00
Christian Kandeler
18ecbb9b14 ProjectExplorer: Speed up FolderNode::addNestedNodes()
... by aggregating the look-up of parent folder nodes.
Also make use of this function in the GenericProjectManager.
As a test case, I added my whole ~/dev directory with ca 600,000 source
files to a generic project. With this patch, the time spent on adding
the new nodes to the tree went down from 15 seconds to two seconds.

Task-number: QTCREATORBUG-20652
Change-Id: If006bce55924feacc071c38ec7a0292d29c51be1
Reviewed-by: hjk <hjk@qt.io>
2019-11-14 12:33:10 +00:00
hjk
66c7d75dbd Qbs, Qmake, Python, Generic: Introduce BuildSystem derived classes
... and move context menu action handling there.

This is a temporary measure to be able to move that functionality
alongside the actual BuildSystem to the BuildConfiguration.

There is a lot to be cleaned up left, to keep the patch small.

Change-Id: If4b0820a13b376fc97b70785052924972ce22705
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2019-10-25 07:55:10 +00:00
hjk
0dc97a51b5 ProjectExplorer: Add a mechanism to access fixed data in ProjectNodes
To be used in CMakeTargetNode for Android-specific items, but possibly
useful for other combinations, too, at the price of (only) one empty hash
per _Project_Node.

Change-Id: I4ced56a6ddfa54a00f96be0507a556fa7b20b552
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2019-08-06 09:01:34 +00:00
hjk
86d0c7ef66 ProjectExplorer: Move ProjectExplorerPlugin::directoryFor etc
... to Node::

It's completely self-contained, and uses less indirections this way.

Change-Id: I2f9274ee46b53b6443f52bc45f620b43d43f529c
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2019-08-02 11:40:58 +00:00
Tobias Hunger
9ae4510e27 ProjectNodes: Use QVector instead of QList for LocationInfo
Change-Id: I5bad9e1849b9d752de24626013c9102242d11a0a
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-07-29 08:45:08 +00:00
Tobias Hunger
5f771d972a ProjectNodes: Support different priorities for LocationInfo
Allow to have different priorities for LocationInfo in the FileNodes.

Use this to group the different LocationInfo items in the context
menu.

Change-Id: I13369d996841891ba7165684fe7bfb7687f9d523
Reviewed-by: hjk <hjk@qt.io>
2019-07-26 13:12:32 +00:00
hjk
251287f0d3 Avoid warning on empty expressions
For some reason, Q_UNUSED includes already a semicolon, adding one
on the user side creates an additional empty statement.

Change-Id: I9c5e8fac381345a60792cb75e2938fd53958d3b0
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2019-07-23 11:55:59 +00:00
Ville Nummela
63e4180242 ProjectExplorer: Add special handling for removing files
... from a project which are pulled in via wildcards.
Such files cannot be removed from a project file, because they are
not listed verbatim. This kind of failure should not be reported to the
user if the file is also deleted, as the file list will have the correct
state after the next reparse.

Fixes: QTCREATORBUG-22586
Done-with: Christian Kandeler <christian.kandeler@qt.io>
Change-Id: I3dc66fe9a6594be7d0b86f46d830cd099ee49fd7
Reviewed-by: hjk <hjk@qt.io>
2019-06-25 11:53:58 +00:00
Christian Kandeler
019447c535 New class wizard: Add Qt module dependencies, if necessary
Provide general infrastrucure and implementation for qmake.

Fixes: QTCREATORBUG-16067
Change-Id: I8c6368fe2724c9450dcbc3410b6ca459bbbdc043
Reviewed-by: hjk <hjk@qt.io>
2019-06-19 14:06:49 +00:00
Christian Kandeler
0c74f6cc21 ProjectExplorer: Add "build for current run config" menu entry
This lets users build the executable corresponding to the currently
active run configuration. It's functionally equivalent to locating the
corresponding node in the project tree and choosing "Build" from the
context menu.

Fixes: QTCREATORBUG-22403
Change-Id: Ic2b729c7ce17f1ad944dc06746bb9d6db90b6c61
Reviewed-by: hjk <hjk@qt.io>
2019-06-06 15:05:56 +00:00
hjk
473a741c9f Utils: Rename FileName to FilePath
More in line with QFileInfo terminonlogy which appears to be
best-of-breed within Qt.

Change-Id: I1d051ff1c8363ebd4ee56376451df45216c4c9ab
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2019-05-28 12:23:26 +00:00
hjk
92a52a7181 Use Qt's QFileInfoList instead of QList<QFileInfo>
Helps to adapt to potential upstream changes in Qt 6

Change-Id: Ie154bd4fd513d46cb0493758be8943fc4581d71c
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2019-05-28 07:19:45 +00:00
hjk
f4c9e5e5c4 More FileName::appendPath() -> .pathAppended()
Change-Id: I403d34e4f52f758339c158efc7a11fd329e3e043
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
2019-05-17 11:55:04 +00:00
hjk
92da9d1e67 ProjectExplorer: De-virtualize FolderNode::showWhenEmpty
Change-Id: Id3d019f449afcfe72b92d505c7822c3b10e2e8e7
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2019-03-04 15:50:34 +00:00
hjk
b0e125ac11 ProjectExplorer: Move Node::nodeType implementation
... to the only remaining user, and rename it there.

Change-Id: I0bdb3179282e323f5ad7b41d034bb5f3db8f6ffc
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2019-03-04 09:25:50 +00:00
hjk
8983185405 ProjectExplorer: Replace a use of Node::nodeType()
Change-Id: Ic586f6c4f436e871381f0e037028aed8a2fbf2c7
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2019-03-01 10:08:51 +00:00
hjk
28fd0bbbb9 ProjectExplorer: Remove unused FolderNode::isAncesterOf
Change-Id: I91d095fb0da74c3a899e6117c6f456350f0534c0
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2019-03-01 08:54:36 +00:00
hjk
729c74379a ProjectExplorer: Merge Node::isFileNodeType and asFileNode
They were identifying the same set of nodes.

Change-Id: I3316cbc434ff740547bcf0baf9e5f1544f6e3f56
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2019-03-01 08:44:22 +00:00
hjk
89c9eed127 ProjectExplorer: De-virtualize FolderNode::addFileFilter
... which interestingly enough is only used with Add Existing
Directory, not with Add Existing Files.

Change-Id: If76ba5f192dc49f3cb56e3d0c9ab249e47aa1c28
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2019-03-01 08:42:14 +00:00
hjk
ad4e2562fa ProjectExplorer: Replace Node::setNodeType by virtual functions
Not the usual direction of change, but currently there are
several systems to identify or invoke node functionality.

Virtual functions are likely to stay in this context, so this
here attempts to help consolidation by reducing the influence
of the node type flags, hopefully leading to full removal
by making remaining functionality available through the
other mechanisms (virtual functions, asFooNode() 'casts',
less so the FileType flag).

Change-Id: I12a17ce30b3c8883995b29b4720408020ee0fa3e
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2019-03-01 08:32:14 +00:00
hjk
44a42db1ae ProjectExplorer: "Upstream" line number display for FileNodes
So far only used and set with QBS, but conceptually usable more
generally, and harmless if not used.

Change-Id: I1d2d615f5613340690de22a1c7d716a193fb1f05
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2019-02-26 13:58:18 +00:00
hjk
7bf10a5842 ProjectExplorer: Use setter for VirtualFolder's priority
More uniform code.

Change-Id: I9a10a1bb15b0df9cf30c68d2c0537bfae2bed98a
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2019-02-26 10:42:45 +00:00
hjk
65be7c2915 ProjectExplorer: Use a setter for the Node's type
Change-Id: I3cc496151888cdecff0be54043a24fefe5ee2b02
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2019-02-26 10:39:58 +00:00
hjk
ffa88006a5 ProjectExplorer: Replace FolderNode ctor display argument
... by use of the setter.

Change-Id: Ie6bf15b4dfae4d4e4d98694313b6e7dc9a22c117
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2019-02-26 10:33:07 +00:00
hjk
2aacf26a77 ProjectExplorer: Remove Node::m_id
It was only used within cmake, in a role that is nowadays covered by
buildKey.

Change-Id: I4fd77c06a3bb8965db5235315cb017c7b548fbaa
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2019-02-26 09:37:02 +00:00
hjk
f844f54cb7 ProjectExplorer: Use setters in ProjectExplorer::Node
Instead of constructor arguments. This makes it clearer on the
user side which value is actually changed.

Change-Id: I63ae8cd139a49700996c8874098111aad89ace22
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2019-02-26 08:26:43 +00:00
hjk
09372918c1 ProjectExplorer: Remove FileNode's isGenerated constructor bool
Use setter of base class, similar to setListInProject() before.

Change-Id: Id620f0084a5dec0410f29c80f8f6393a6bcd5050
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2019-02-25 12:23:31 +00:00
Christian Kandeler
11f989bb93 ProjectExplorer: Allow to add existing project as sub-project
Implemented only for qmake as of now.

Fixes: QTCREATORBUG-5837
Change-Id: I78f6ce55d6a149a75ae595f7a86d39dc55496819
Reviewed-by: hjk <hjk@qt.io>
2019-02-20 16:15:13 +00:00
hjk
5d1114fe52 ProjectExplorer: Drop the target argument
... from ProjectNode::targetData and setTargetData, and rename them
to data and setData.

It was only used in the implementation to retrieve the right node,
instead move the responsibility to find the right node to the caller.

Current assumption is that the functions were always called on
the right node already.

Change-Id: I9ae7e8a7ed5c79b924b99fd9a6a652bad56d114a
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2018-12-20 16:18:37 +00:00
hjk
93257a56a0 QmakeAndroid: Replace remaining AndroidQtSupport
This uses the same approach as in the previous patches: Have some
generic interface in the base classes (here ProjectNode::targetData()
setTargetData()) and implement on the qmake project side.

Implementation for Cmake/QBS is architecture-wise possible, but
not used right now, and left for later.

Change-Id: I3bbf66170020cf9027a894cd66db15ec7ffbf499
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2018-12-20 13:13:51 +00:00
hjk
f2bade30cf ProjectExplorer: Introduce a FolderNode::findProjectNode()
And use it.

Change-Id: Iaf13c4661e397bdb4d756c352683b696e337c8af
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2018-12-18 14:59:40 +00:00
hjk
ee564b2249 ProjectExplorer: Add a convenience function to walk project nodes
... recursively.

Change-Id: I44a7e29867c26e2586d04fd8d6c16990ce047c6d
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2018-11-28 12:36:40 +00:00
Ivan Donchevskii
1442a1186d ProjectExplorer: Fix typo in findNodes
It makes sense to add all matching child nodes for the folder
instead of the only one which can even be nullptr.

Change-Id: I134a8073cfae557db2cb44c313239f18b97bda97
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2018-11-01 09:13:21 +00:00
Orgad Shaneh
2f6c6b632c ProjectExplorer: Remove versionControls argument from scanForFiles
Retrieving the list is cheap, there's no reason to store it and pass
it through all these functions.

Change-Id: I394b512c113af92f60cfb8c2f6561d1617d9cd36
Reviewed-by: hjk <hjk@qt.io>
2018-10-02 06:59:56 +00:00
Christian Stenger
ce12c239ff ProjectExplorer: Fix replaceSubtree for project nodes
Ensure to keep node alive as long as needed.

Task-number: QTCREATORBUG-20616
Change-Id: I57a720d3e31e14bcb8388de5fef68f70db370c90
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2018-06-27 13:09:00 +00:00
Tobias Hunger
2df36926f5 CMake: Use FolderNode::addNestedNodes for unique_ptr in server-mode
Remove FolderNode::addNestedNodes that take raw pointers now that the
last user is gone.

Change-Id: If2ca3864934d9239ac136e65c0b7dbcea7caf220
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
2018-05-04 09:03:15 +00:00
Tobias Hunger
bdd2dd371e ProjectExplorer: Add FolderNode::addNestedNodes taking unique_ptrs
Use that in CMake's tealeafreader.

Change-Id: Id1c372b083df380d0d930668cf7eec4ee89060c2
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
2018-05-04 09:02:56 +00:00
Tobias Hunger
b57ce2d7a6 ProjectExplorer: Fix crash on replaceSubtree
Do not double-free oldNode.

Change-Id: Icce2d13b6afd24f2e37c5ca7e2b572a6784e69e1
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2018-05-03 09:02:48 +00:00
Tobias Hunger
6fbf0255eb ProjectExplorer: Remove FolderNode::addNode taking a raw pointer
Change-Id: I53b765d2c3e71889386c76425662bfcc47bdf582
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
2018-05-02 14:55:29 +00:00
Tobias Hunger
8bbe795c39 ProjectExplorer: Make FolderNode::replaceSubtree take a unique_ptr
Change-Id: I8e853c00ec24838bdca342e3f1a1b1213f32ef93
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
2018-05-02 14:55:21 +00:00
Tobias Hunger
d332954567 ProjectExplorer: Add and use addNestedNode(...) that takes unique_ptr
Change-Id: Ieb26721d053111fb350494e31d1f6da3fe642420
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
2018-05-02 14:55:15 +00:00
Tobias Hunger
147e6078ad ProjectExplorer: Make FolderNodeFactory return an unique_ptr
Change-Id: I9b611c4a3ff0928b2078dc30a44eb39df67c8d89
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
2018-05-02 11:34:47 +00:00
Tobias Hunger
04057106ba ProjectExplorer: Remove FolderNode::removeNode
Use takeNode instead.

Change-Id: I7e05c4ba7c18aaabcdad5160f91a2c2ad754b758
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
2018-05-02 11:34:40 +00:00
Tobias Hunger
1f55ba9012 ProjectExplorer: Use unique_ptr to hold ProjectNodes
Change-Id: Iaa5bea221686564de24138a99b5fe0d09521c118
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
2018-05-02 11:34:29 +00:00
Tobias Hunger
ad8a6cc0e6 ProjectExplorer: Do not use QFlags
Using QFlags here increases the size of a Node by extending the
m_flags from 16bit to 32bit and adds needless padding.

Change-Id: I9169585a7f91da5b85433fcd6f4d1bb7d39e65c1
Reviewed-by: hjk <hjk@qt.io>
2018-04-26 12:42:38 +00:00
hjk
e20d620043 ProjectExplorer: Let RunConfiguration declare what nodes it belongs to
This feature in question is the availability of the "Run" button in the
context menu of certain project nodes in the project tree to run
something presumably related to/build from that (sub)project.

Previously, the decision was made for certain qmake based projects
(those targeting Desktop, iOS and VxWorks) by some indirection
through the corresponding RunConfigurationFactories.

The patch lets the RunConfigurations decide themselves directly
and removes the indirection, potentially opening the feature for
other qmake based RCs, as well as other combinations (e.g.
PythonRunConfiguration could be associated with its .py file,
without the need to have a dummy project)

Change-Id: Ic489bd1dfa25fcd9102ffa4fa30125565dd2e40e
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2018-03-16 09:55:03 +00:00
Tobias Hunger
f044e69f67 ProjectExplorer: Remove obsolete functionality
Change-Id: Iea9b50c0bf9d855fb039a30062e26f8d6f3bc321
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
2018-03-15 14:04:16 +00:00