aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/cpptools/cpptoolsplugin.h
blob: 067c484bb5848c77d40907ec4431e58bd848ef4c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
/****************************************************************************
**
** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Digia.  For licensing terms and
** conditions see http://qt.digia.com/licensing.  For further information
** use the contact form at http://qt.digia.com/contact-us.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file.  Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Digia gives you certain additional
** rights.  These rights are described in the Digia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
****************************************************************************/

#ifndef CPPTOOLS_H
#define CPPTOOLS_H

#include "cpptools_global.h"

#include <projectexplorer/projectexplorer.h>

#include <QSharedPointer>

QT_BEGIN_NAMESPACE
class QFileInfo;
class QDir;
QT_END_NAMESPACE

namespace CppTools {

class CppToolsSettings;

namespace Internal {

class CppModelManager;
struct CppFileSettings;
class CppCodeModelSettings;

class CPPTOOLS_EXPORT CppToolsPlugin : public ExtensionSystem::IPlugin
{
    Q_OBJECT
    Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QtCreatorPlugin" FILE "CppTools.json")

public:
    CppToolsPlugin();
    ~CppToolsPlugin();

    static CppToolsPlugin *instance();
    static const QStringList &headerSearchPaths();
    static const QStringList &sourceSearchPaths();
    static void clearHeaderSourceCache();

    bool initialize(const QStringList &arguments, QString *errorMessage);
    void extensionsInitialized();
    ShutdownFlag aboutToShutdown();

    QSharedPointer<CppCodeModelSettings> codeModelSettings() const;

public slots:
    void switchHeaderSource();
    void switchHeaderSourceInNextSplit();

private slots:
#ifdef WITH_TESTS
    void test_codegen_public_in_empty_class();
    void test_codegen_public_in_nonempty_class();
    void test_codegen_public_before_protected();
    void test_codegen_private_after_protected();
    void test_codegen_protected_in_nonempty_class();
    void test_codegen_protected_between_public_and_private();
    void test_codegen_qtdesigner_integration();
    void test_codegen_definition_empty_class();
    void test_codegen_definition_first_member();
    void test_codegen_definition_last_member();
    void test_codegen_definition_middle_member();
    void test_codegen_definition_middle_member_surrounded_by_undefined();
    void test_codegen_definition_member_specific_file();

    void test_completion_forward_declarations_present();
    void test_completion_inside_parentheses_c_style_conversion();
    void test_completion_inside_parentheses_cast_operator_conversion();
    void test_completion_basic_1();
    void test_completion_template_1();
    void test_completion_template_2();
    void test_completion_template_3();
    void test_completion_template_4();
    void test_completion_template_5();
    void test_completion_template_6();
    void test_completion_template_7();
    void test_completion_type_of_pointer_is_typedef();
    void test_completion_instantiate_full_specialization();
    void test_completion_template_as_base();
    void test_completion_template_as_base_data();
    void test_completion_use_global_identifier_as_base_class();
    void test_completion_use_global_identifier_as_base_class_data();
    void test_completion_base_class_has_name_the_same_as_derived();
    void test_completion_base_class_has_name_the_same_as_derived_data();
    void test_completion_cyclic_inheritance();
    void test_completion_cyclic_inheritance_data();
    void test_completion_template_function();
    void test_completion_template_function_data();
    void test_completion_enclosing_template_class();
    void test_completion_enclosing_template_class_data();
    void test_completion_instantiate_nested_class_when_enclosing_is_template();
    void test_completion_instantiate_nested_of_nested_class_when_enclosing_is_template();
    void test_completion_instantiate_template_with_default_argument_type();
    void test_completion_instantiate_template_with_default_argument_type_as_template();
    void test_completion_member_access_operator_1();

    void test_completion_typedef_of_type_and_decl_of_type_no_replace_access_operator();
    void test_completion_typedef_of_pointer_and_decl_of_pointer_no_replace_access_operator();
    void test_completion_typedef_of_type_and_decl_of_pointer_replace_access_operator();
    void test_completion_typedef_of_pointer_and_decl_of_type_replace_access_operator();

    void test_completion_predecl_typedef_of_type_and_decl_of_pointer_replace_access_operator();
    void test_completion_predecl_typedef_of_type_and_decl_type_no_replace_access_operator();
    void test_completion_predecl_typedef_of_pointer_and_decl_of_pointer_no_replace_access_operator();
    void test_completion_predecl_typedef_of_pointer_and_decl_of_type_replace_access_operator();

    void test_completion_typedef_of_pointer();
    void test_completion_typedef_of_pointer_inside_function();
    void test_completion_typedef_is_inside_function_before_declaration_block();
    void test_completion_resolve_complex_typedef_with_template();
    void test_completion_template_specialization_with_pointer();
    void test_completion_typedef_using_templates1();
    void test_completion_typedef_using_templates2();
    void test_completion_namespace_alias_with_many_namespace_declarations();
    void test_completion_QTCREATORBUG9098();
    void test_completion_type_and_using_declaration();
    void test_completion_type_and_using_declaration_data();
    void test_completion_instantiate_template_with_anonymous_class();
    void test_completion_instantiate_template_function();
    void test_completion_crash_cloning_template_class_QTCREATORBUG9329();
    void test_completion_recursive_auto_declarations1_QTCREATORBUG9503();
    void test_completion_recursive_auto_declarations2_QTCREATORBUG9503();
    void test_completion_recursive_typedefs_declarations1();
    void test_completion_recursive_typedefs_declarations2();
    void test_completion_recursive_using_declarations1();
    void test_completion_recursive_using_declarations2();
    void test_completion_recursive_using_typedef_declarations();
    void test_completion_recursive_typedefs_in_templates1();
    void test_completion_recursive_typedefs_in_templates2();
    void test_completion_prefix_first_QTCREATORBUG_8737();
    void test_completion_prefix_first_QTCREATORBUG_9236();

    void test_completion_class_declaration_inside_function_or_block_QTCREATORBUG3620();
    void test_completion_class_declaration_inside_function_or_block_QTCREATORBUG3620_data();
    void test_completion_namespace_alias_inside_function_or_block_QTCREATORBUG166();
    void test_completion_namespace_alias_inside_function_or_block_QTCREATORBUG166_data();
    void test_completion_class_declaration_inside_function_or_block_QTCREATORBUG3620_static_member();
    void test_completion_enum_inside_block_inside_function_QTCREATORBUG5456();
    void test_completion_enum_inside_function_QTCREATORBUG5456();

    void test_completion_template_parameter_defined_inside_scope_of_declaration_QTCREATORBUG9169_1();
    void test_completion_template_parameter_defined_inside_scope_of_declaration_QTCREATORBUG9169_2();
    void test_completion_template_parameter_defined_inside_scope_of_declaration_QTCREATORBUG8852_1();
    void test_completion_template_parameter_defined_inside_scope_of_declaration_QTCREATORBUG8852_2();
    void test_completion_template_parameter_defined_inside_scope_of_declaration_QTCREATORBUG8852_3();

    //lambda
    void test_completion_lambdaCalls_1();
    void test_completion_lambdaCalls_2();
    void test_completion_lambdaCalls_3();
    void test_completion_lambdaCalls_4();
    void test_completion_lambdaCalls_5();

    void test_completion_member_of_class_accessed_by_using_QTCREATORBUG9037_1();
    void test_completion_member_of_class_accessed_by_using_QTCREATORBUG9037_2();

    void test_completion_local_type_and_member_1();
    void test_completion_local_type_and_member_2();
    void test_completion_local_type_and_member_3();
    void test_completion_local_type_and_member_4();
    void test_completion_local_type_and_member_5();
    void test_completion_local_type_and_member_6();

    void test_completion_signals_hide_QPrivateSignal();

    void test_format_pointerdeclaration_in_simpledeclarations();
    void test_format_pointerdeclaration_in_simpledeclarations_data();
    void test_format_pointerdeclaration_in_controlflowstatements();
    void test_format_pointerdeclaration_in_controlflowstatements_data();
    void test_format_pointerdeclaration_multiple_declarators();
    void test_format_pointerdeclaration_multiple_declarators_data();
    void test_format_pointerdeclaration_multiple_matches();
    void test_format_pointerdeclaration_multiple_matches_data();
    void test_format_pointerdeclaration_macros();
    void test_format_pointerdeclaration_macros_data();

    void test_cpppreprocessor_includes();

    void test_modelmanager_paths_are_clean();
    void test_modelmanager_framework_headers();
    void test_modelmanager_refresh_also_includes_of_project_files();
    void test_modelmanager_refresh_several_times();
    void test_modelmanager_refresh_test_for_changes();
    void test_modelmanager_refresh_added_and_purge_removed();
    void test_modelmanager_refresh_timeStampModified_if_sourcefiles_change();
    void test_modelmanager_refresh_timeStampModified_if_sourcefiles_change_data();
    void test_modelmanager_snapshot_after_two_projects();
    void test_modelmanager_extraeditorsupport_uiFiles();
    void test_modelmanager_gc_if_last_cppeditor_closed();
    void test_modelmanager_dont_gc_opened_files();
    void test_modelmanager_defines_per_project();
    void test_modelmanager_defines_per_project_pch();
    void test_modelmanager_defines_per_editor();

    void test_cpplocatorfilters_CppLocatorFilter();
    void test_cpplocatorfilters_CppLocatorFilter_data();
    void test_cpplocatorfilters_CppCurrentDocumentFilter();

    void test_builtinsymbolsearcher();
    void test_builtinsymbolsearcher_data();

    void test_headersource_data();
    void test_headersource();

    void test_typehierarchy_data();
    void test_typehierarchy();

private:
    void test_completion();
#endif

private:
    QSharedPointer<CppFileSettings> m_fileSettings;
    QSharedPointer<CppCodeModelSettings> m_codeModelSettings;
    CppToolsSettings *m_settings;
};

} // namespace Internal
} // namespace CppTools

#endif // CPPTOOLS_H