Commit Graph

193 Commits

Author SHA1 Message Date
Leander Schulten
92667c779c CppEditor: Remove using directive at global scope always in all files
Previously only using directives in the global scope that followed the
quickfixed using directive were removed

Change-Id: I330acfe3236a6845fd1667f9fa699ab6c8fb560d
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2020-11-16 13:55:27 +00:00
Christian Kandeler
3cd2e2c445 CppEditor: Improve "definition from declaration" for templates
- Make sure the template parameters are included in the definition.
- Find the correct insertion location when using an already-defined
  template member function as an anchor.

Fixes: QTCREATORBUG-24848
Change-Id: I1272ba36403904e7aed81bcef48745793c5e2217
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2020-11-13 12:49:51 +00:00
Christian Kandeler
d2ebc16b92 CppEditor: Fix "move definition" quickfix for template member functions
There are a lot more problems in this area (e.g. with nested classes),
but let's tackle them one by one.

Fixes: QTCREATORBUG-24801
Change-Id: I4b3805ea6f8b28373925693650150bbd89508096
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2020-10-28 12:41:26 +00:00
Christian Kandeler
0ebb004d85 CppEditor: Make "Complete Switch" quickfix work with enum classes
Fixes: QTCREATORBUG-20475
Change-Id: Id21a007ab4b652dcfe49d97bfa4c9fa77bacf8c4
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2020-10-27 11:40:37 +00:00
Christian Kandeler
135e76f965 CppEditor: Offer InsertDefsOperation quickfix for all classes
The check whether there are unimplemented member functions takes quite
long, so Creator would freeze for several seconds when right-clicking on
the name of even a medium-sized class.
Therefore, we offer the operation for all classes with member functions
and move the expensive check into the perform() method.

Change-Id: Ie19958ba8c53493be859f9982d7d5697e6e9d88b
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2020-10-21 08:19:25 +00:00
Christian Kandeler
2b5e1ea62e CppEditor: Fix some "convert to camel case" edge cases
Fixes: QTCREATORBUG-16560
Change-Id: I8573ae6c5dce0956c868addc69a921c62f1d571a
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2020-10-20 13:27:54 +00:00
Leander Schulten
15f39cf37c CppEditor: Fix Typedef Handling with 'Remove Using Directive' QuickFix
Previously, typedefs were ignored and the new code became invalid after
applying the quickfix.

Change-Id: I0d4295e90d02dfacc3edac5ac3f96d9edbeaf662
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2020-10-12 14:34:54 +00:00
Christian Kandeler
023a77ea80 CppEditor: Consider templates in "complete switch" quickfix
Fixes: QTCREATORBUG-24752
Change-Id: I39bc007e5f493a9826adb4575eb210bf9ec21159
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2020-10-12 09:01:29 +00:00
Leander Schulten
32ee29cb9e CppEditor: Implement remove using namespace Quickfix
Fixes: QTCREATORBUG-24392
Change-Id: Iaf4df4ebf161a4a757f59f22e692e0f9b99cd63c
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2020-08-12 13:32:20 +00:00
Christian Kandeler
d9eb3dc5a4 CppEditor: Do not re-indent existing code
... in "Complete Switch Statement" quickfix.

Fixes: QTCREATORBUG-12445
Change-Id: Ic168f5b434b81d2b5f5a0d344d6c6786a75d07a5
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2020-08-10 12:02:11 +00:00
Christian Kandeler
537e2e23ff CppEditor: Work around cmake bug
If you mention "Q_OBJECT" in a raw string literal, the cmake build
fails...

Change-Id: I9004184b48dea9a77b9303c3fd871cef747ade4c
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2020-07-30 13:30:18 +00:00
Christian Kandeler
77d13f08ba CppEditor: Let users create implementations for all member functions
... in one go.

Fixes: QTCREATORBUG-12164
Change-Id: Ifc81c8b1caf4319ce57882375f513d72e4c0ea52
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2020-07-29 11:56:07 +00:00
Leander Schulten
fdd70d898d CppEditor: Don't create 'namespace xyz{}' if there is 'using namespace xyz'
Change-Id: Idc08de5f44ccac0de8490158199c4e44f7efe79e
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
2020-07-28 09:53:48 +00:00
Christian Kandeler
73f3056c3e CppEditor: Add class member from member initialization
That is, if a class member being initialized is not yet declared, offer
to add the declaration.

Fixes: QTCREATORBUG-11842
Change-Id: I1d2a56ab99543e996e220aa26b7923023dd163f7
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2020-07-23 12:57:29 +00:00
Christian Kandeler
e4100c31fc CppEditor: Fix trailing whitespace after extracting a function
... from a block of code.
We must not insert an empty line into the newly created function,
because it gets indented in the first indent operation, resulting in
trailing characters after the actual code has been inserted later.

Fixes: QTCREATORBUG-12118
Change-Id: If438d4de379cae90baa846c112866f2777b44fce
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2020-07-23 09:00:44 +00:00
Christian Kandeler
affd4ee658 CppEditor: Extend Q_PROPERTY quickfix
... to also generate the RESET function.

Fixes: QTCREATORBUG-11809
Change-Id: I94789227230a67f074ff5fdc76ad8113d2870dd6
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2020-07-22 07:46:11 +00:00
Christian Stenger
1e0b82e77d CppEditor: Fix possible wrong location for function definitions
Having no namespace when inserting generated functions may insert
explicitly at the end of a header which is not always desired as we
need to take care of e.g. header guards as well.

Change-Id: I3b154ae936a96f2f8e7e34cda6b5bcdfcbc83faf
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2020-07-16 11:11:58 +00:00
Christian Kandeler
9fa1286faf CppEditor: Ensure "inline" specifier
... when creating functions in header files. Otherwise, we will likely
cause linker failures in non-trivial projects.

Fixes: QTCREATORBUG-15052
Change-Id: Ic0fff8779ba924f8b9943ab233a0cda409e73e9d
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2020-07-15 08:04:43 +00:00
Christian Kandeler
bfd49fe5ce CppEditor: Ensure proper namespace for new getter/setter functions
If the class is in a namespace and the cpp file does not yet have any
implementations in that namespace, then we would erroneously put the
getters in the global namespace.

Fixes: QTCREATORBUG-14886
Change-Id: I836537abddfdd92ced783d60e1226b082bbc238e
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2020-07-14 14:32:40 +00:00
Christian Kandeler
e210bcf3eb CppEditor: Offer to create getters and setters for all class members
Fixes: QTCREATORBUG-14504
Change-Id: I12c687492b12c6997064eb7f137b6ccb189d2009
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2020-07-10 08:07:16 +00:00
Christian Kandeler
5b3aece387 CppEditor: Make "Add curly braces" quickfix more robust
Anchor the opening brace at the closing parenthesis, rather than at the
statement. This way, we won't get troubled by macro weirdness in the
statement part.

Fixes: QTCREATORBUG-13921
Change-Id: I05af24d1642e6b62c78bb2f47a1ef0b1fea326d0
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2020-07-07 14:13:37 +00:00
Christian Kandeler
934641f45c TextEditor: Sort indent ranges before applying
It can easily happen that callers insert indent ranges out of order, and
without sorting the indentation done earlier in the file is not
considered for the later parts, leading to inconsistent results.

Fixes: QTCREATORBUG-18929
Change-Id: Ice2abe92d54446bcdd102c6a1f822262a8533543
Reviewed-by: David Schulz <david.schulz@qt.io>
2020-06-15 13:46:11 +00:00
Christian Kandeler
e100939ba7 CppEditor: Extend "Add Include" quickfix
... so it works for all kinds of symbols, not just Qt classes.

Fixes: QTCREATORBUG-21
Change-Id: I2d329c09b64cd8f7eef8cce7d9f022aca8586c0d
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2020-06-05 14:56:21 +00:00
Christian Kandeler
d811e7773f CppEditor: Do not treat friend declaration as member function
... when trying to create definitions from declarations.
Instead, we completely ignore friends in this context, arguing that the
respective function normally should have a proper declaration somewhere
else.

Fixes: QTCREATORBUG-7164
Change-Id: I3ddb89cefecbc494f9c7e63600b65fd6288b7169
Reviewed-by: Cristian Adam <cristian.adam@qt.io>
2020-06-05 14:51:18 +00:00
Christian Kandeler
2262af087a CplusPlus: Fix type information for anonymous enums
Variables declared like this:
    enum { E1, E2 } e;
would not get assigned a proper type.

Task-number: QTCREATORBUG-7487
Change-Id: I4362f22feb0f2e4e1e754e9c623e5576fa31f4bc
Reviewed-by: Cristian Adam <cristian.adam@qt.io>
2020-06-04 11:24:56 +00:00
Christian Kandeler
39047fac5b CPlusPlus: Add missing type information for enum variables
Consider these two variable declarations:
  enum EX { EX1, EX2};
  EX ex;
  emum EY { EY1, EY2} ey;
The ex variable would correctly get assigned type EX, but the ey
variable would not have any type.
This is now fixed.

Task-number: QTCREATORBUG-7487
Change-Id: I3e09c5766fdb9e6baf3a8d7bc6f2fc581f2d824b
Reviewed-by: Cristian Adam <cristian.adam@qt.io>
2020-06-04 10:23:39 +00:00
Christian Kandeler
c8d7c074f5 CppEditor: Consider namespaces in "extract function" quickfix
Fixes: QTCREATORBUG-23256
Change-Id: I99b1271907767c3607e35adb49bd4109f3eca18c
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
2020-05-29 09:02:49 +00:00
Christian Kandeler
6c4b8b10b7 CppEditor: Add quickfix for creating a forward declaration
In header files, a forward declaration is often preferable to including
another header file, so let's offer this as a quickfix.

Fixes: QTCREATORBUG-23444
Change-Id: Ib50550abb5337098e4122e65e2af42a66742d6f6
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
2020-05-27 13:25:19 +00:00
David Schulz
1ab9dc9464 CppEditor: generate valid code via "Convert to Pointer/Stack Variable"
Adding a "= new <TypeName>" after converting a stack variable without
assignment or initializer to pointer.
Also remove the assignment when converting from pointer to stack
variable as this works better with explicit constructors.

Fixes: QTCREATORBUG-23181
Change-Id: I377ec32a1b66cf4b96db14cfcb4b71fb96c80c98
Reviewed-by: David Schulz <david.schulz@qt.io>
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2020-01-08 09:21:25 +00:00
Nikolai Kosjar
54fefd89b8 C++: Transfer noexcept specifier for refactoring actions
This applies for e.g.

* "Add Definition..." (on function decl)
* "Move Definition..." (on function decl)
* "Insert Virtual Functions of Base Class" (on class specifier)

Fixes: QTCREATORBUG-11849
Fixes: QTCREATORBUG-19699
Change-Id: I0d259bc1782470f3b3f19617230005a5594a5cca
Reviewed-by: Cristian Adam <cristian.adam@qt.io>
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
2019-10-08 09:20:10 +00:00
Tobias Hunger
1df553a683 ProjectExplorer: Rename IncludePathType to HeaderPathType
It is the type used by the HeaderPath class, so reflect that in
the name.

I also considered to rename HeaderPath to IncludePath, but
that name is reflected in a lot of users, which would also need
to be adjusted for consistency. That would blow up the patch size
for little value IMHO.

Change-Id: I51421dbd3ab8b2874dc32fc82dc394c9b93ce5e9
Reviewed-by: Marco Bubke <marco.bubke@qt.io>
2018-09-13 11:32:31 +00:00
Marco Bubke
3abaf647d0 Add system include path to HeaderPath and merge ProjectPartHeaderPath
System include paths are appended after other includes by the compiler. So
we should set them as system includes and not as normal includes. Otherwise
we change the include order. Headers in system include paths are not
cluttering the screen with unwanted warning and by the way improve
performance too.

ProjectPartHeaderPath was a dopperganger of HeaderPath, so we merged them.

Change-Id: I7c394b4098b697de79761499ffcd5913cc02d652
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2018-09-10 09:31:32 +00:00
hjk
289f2b170a CppEditor: Do not add QuickFixFactories to object pool anymore
Not needed anymore.

Also some cleanup, no 'using' in headers etc.

Change-Id: I8c4547d80d0c0ffd989d1efbc74687c9f56096a4
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
2018-02-02 12:26:32 +00:00
Ivan Donchevskii
96ef6c797b CppEditor: split CppEditor and CppEditorWidget
Change-Id: Id3c815184f7f3bace0276e947f6b6f76e61ec6de
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
2017-09-12 15:05:38 +00:00
Przemyslaw Gorszkowski
c6771c39c1 CppEditor: Fix quickfix for adding include for static functions
Task-number: QTCREATORBUG-14499
Change-Id: Id3e962ed310f43c33b91c7834a1f9ca074519a38
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
2017-06-23 11:47:24 +00:00
Nikolai Kosjar
d8d1511be1 CppEditor: Fix InsertQtPropertyMembers test
Broken by

  commit d6e81eb49e
  CppEditor: Emit member variable for qproperty refactoring

Change-Id: I5e86f0fb1942a497c4242b6f1890e74eb55b687c
Reviewed-by: David Schulz <david.schulz@qt.io>
2017-02-27 11:40:45 +00:00
hjk
56409f5afa Replace a few occurrences of QStringList() << ...
... by something shorter.

Change-Id: I363b4e509adb07997517b2d233246a333aea4aea
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
2017-02-08 11:21:45 +00:00
hjk
8f12ade7bd CppEditor: Compile fix after 3b1308bb
Change-Id: I55f8f175e8cd49b455b94872770a7bd02baa7492
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
2016-11-18 13:41:29 +00:00
Lorenz Haas
49c6710b42 CppEditor: Fix GenerateGetterSetter for reference types
Change-Id: Iad332cf023c6bff0c7f5ae46fb56f0393c9c7b29
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
2016-10-31 16:00:17 +00:00
Orgad Shaneh
34baa3ec47 CppEditor: Add enclosing template on "Move Definition Outside"
The template id for the class name is missing, but it's better than
nothing.

For example:

template<class T>
class Foo
{
    void func() {} // Move Definition Outside Class
};

// The following lines are added
template<class T>
void Foo::func() {} // Should be Foo<T>::func

Task-number: QTCREATORBUG-16649
Change-Id: Icb560e0b87f563cbda18f4742f44bb8ef4d8a900
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
2016-09-06 13:23:18 +00:00
Orgad Shaneh
d0d1f43e8f CppEditor: Add enclosing template on "Add Definition"
The template id for the class name is missing, but it's better than
nothing.

For example:

template<class T>
class Foo
{
  void func(); // Add Definition
};

// The following lines are added
template<class T>
void Foo::func() // Should be Foo<T>::func
{
}

Change-Id: I60a0cbd348985def3dfb7037067786e942278593
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
2016-09-06 13:23:12 +00:00
Orgad Shaneh
5a40bddf08 CppEditor: Add template enclosing scope on "Insert Declaration"
Change-Id: Iff4893193b56c2ed86b4b9515a1a1df847528369
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
2016-08-19 14:41:25 +00:00
Orgad Shaneh
2890966ec3 CppEditor: Prevent "Add Declaration" for existing template functions
class Foo
{
    template<class T>
    void func();
};

template<class T>
void Foo::func() {} // Add Declaration should not be triggered at all

Change-Id: Ifff733d8381177300dae017ae419200cfdf5c425
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
2016-08-19 14:41:17 +00:00
Orgad Shaneh
65dc6d0fc2 CppEditor: Fix "Move Definition to Class" for template member functions
class Foo
{
    template<class T>
    void func();
};

template<class T>
void Foo::func() {} // Move to class

It currently doesn't trigger at all.

Change-Id: I63d561771a8dd455f01e99dd836abbd23eec71b7
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
2016-08-19 14:41:11 +00:00
Orgad Shaneh
e920921f27 CppEditor: Fix "Move Definition to Class" for function in template class
template<class T>
class Foo { void func(); };

template<class T>
void Foo<T>::func() {} // Move to class

Prior to this change, this currently leaves behind `template<class T>`
where the definition used to be:

template<class T>
class Foo { void func() {} };

template<class T>

Task-number: QTCREATORBUG-14354
Change-Id: I8e1f75a3ae50619a7bae9c63d3798b16bcfea545
Reviewed-by: Lorenz Haas <lorenz.haas@histomatics.de>
Reviewed-by: Marco Bubke <marco.bubke@qt.io>
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
2016-08-19 13:00:42 +00:00
Orgad Shaneh
03923fc5a2 CppEditor: Add a failing test for move outside class with template
Task-number: QTCREATORBUG-16649
Change-Id: I29c42c23f4dc44b0401fb07c0dc6d0008dcaf096
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
2016-07-22 06:35:09 +00:00
Nikolai Kosjar
1ea6404337 CppTools: Allow prefering getter names with "get" prefix
We default to "foo()" for e.g. a member variable "m_foo", but other
coding styles require "getFoo()".

Task-number: QTCREATORBUG-16452
Change-Id: I9ccfdf88e4c469bc1c06fde855ad754faf2bd238
Reviewed-by: André Hartmann <aha_1980@gmx.de>
2016-06-22 12:22:57 +00:00
Nikita Baryshnikov
5f91cb0d68 CppTools: fix metatype registration macro usage
in places where we do not need it

Change-Id: Ibf35f8144da859fffa3e0a7b6bb262284ec2292a
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
2016-03-24 08:15:44 +00:00
Tobias Hunger
397e7f4843 Update License according to agreement with Free Qt Foundation
* Update files in src/plugins

Change-Id: Ia5d77fad7d19d4bb3498e78661982f68729adb22
Reviewed-by: Tobias Hunger <tobias.hunger@theqtcompany.com>
2016-01-19 15:57:01 +00:00
Marco Bubke
2b4cadf1fe CppTools: Move ProjectPart in its own header file
Also extracting inline HeaderPath class and change projects list in vector
because the size is  larger than a pointer.

Change-Id: I885fdff3fe9bccc877634d1615249755f5b674fd
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
2016-01-13 14:46:56 +00:00