Skip to main content
aboutsummaryrefslogtreecommitdiffstats
blob: 71e1307b094fb3a6aa8cad817d3c98a341fc98c7 (plain) (blame)
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
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
/*******************************************************************************
 * Copyright (c) 2000, 2020 IBM Corporation and others.
 *
 * This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License 2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.jdt.core.search;

import org.eclipse.jdt.internal.core.search.processing.*;

/**
 * <p>
 * This interface defines the constants used by the search engine.
 * </p>
 * <p>
 * This interface declares constants only.
 * </p>
 * @see org.eclipse.jdt.core.search.SearchEngine
 * @noimplement This interface is not intended to be implemented by clients.
 */
public interface IJavaSearchConstants {

	/**
	 * The nature of searched element or the nature
	 * of match in unknown.
	 */
	int UNKNOWN = -1;

	/* Nature of searched element */

	/**
	 * The searched element is a type, which may include classes, interfaces,
	 * enums, and annotation types.
	 *
	 * @category searchFor
	 */
	int TYPE= 0;

	/**
	 * The searched element is a method.
	 *
	 * @category searchFor
	 */
	int METHOD= 1;

	/**
	 * The searched element is a package.
	 *
	 * @category searchFor
	 */
	int PACKAGE= 2;

	/**
	 * The searched element is a constructor.
	 *
	 * @category searchFor
	 */
	int CONSTRUCTOR= 3;

	/**
	 * The searched element is a field.
	 *
	 * @category searchFor
	 */
	int FIELD= 4;

	/**
	 * The searched element is a class.
	 * More selective than using {@link #TYPE}.
	 *
	 * @category searchFor
	 */
	int CLASS= 5;

	/**
	 * The searched element is an interface.
	 * More selective than using {@link #TYPE}.
	 *
	 * @category searchFor
	 */
	int INTERFACE= 6;

	/**
	 * The searched element is an enum.
	 * More selective than using {@link #TYPE}.
	 *
	 * @since 3.1
	 * @category searchFor
	 */
	int ENUM= 7;

	/**
	 * The searched element is an annotation type.
	 * More selective than using {@link #TYPE}.
	 *
	 * @since 3.1
	 * @category searchFor
	 */
	int ANNOTATION_TYPE= 8;

	/**
	 * The searched element is a class or enum type.
	 * More selective than using {@link #TYPE}.
	 *
	 * @since 3.1
	 * @category searchFor
	 */
	int CLASS_AND_ENUM= 9;

	/**
	 * The searched element is a class or interface type.
	 * More selective than using {@link #TYPE}.
	 *
	 * @since 3.1
	 * @category searchFor
	 */
	int CLASS_AND_INTERFACE= 10;

	/**
	 * The searched element is an interface or annotation type.
	 * More selective than using {@link #TYPE}.
	 * @since 3.3
	 * @category searchFor
	 */
	int INTERFACE_AND_ANNOTATION= 11;

	/**
	 * The searched element is a module.
	 * @since 3.14
	 * @category searchFor
	 */
	int MODULE= 12;
	/* Nature of match */

	/**
	 * The search result is a declaration.
	 * Can be used in conjunction with any of the nature of searched elements
	 * so as to better narrow down the search.
	 *
	 * @category limitTo
	 */
	int DECLARATIONS= 0;

	/**
	 * The search result is a type that implements an interface or extends a class.
	 * Used in conjunction with either TYPE or CLASS or INTERFACE, it will
	 * respectively search for any type implementing/extending a type,
	 * or rather exclusively search for classes implementing/extending the type, or
	 * interfaces extending the type.
	 *
	 * @category limitTo
	 */
	int IMPLEMENTORS= 1;

	/**
	 * The search result is a reference.
	 * Can be used in conjunction with any of the nature of searched elements
	 * so as to better narrow down the search.
	 * References can contain implementers since they are more generic kind
	 * of matches.
	 *
	 * @category limitTo
	 */
	int REFERENCES= 2;

	/**
	 * The search result is a declaration, a reference, or an implementer
	 * of an interface.
	 * Can be used in conjunction with any of the nature of searched elements
	 * so as to better narrow down the search.
	 *
	 * @category limitTo
	 */
	int ALL_OCCURRENCES= 3;

	/**
	 * When searching for field matches, it will exclusively find read accesses, as
	 * opposed to write accesses. Note that some expressions are considered both
	 * as field read/write accesses: for example, x++; x+= 1;
	 *
	 * @since 2.0
	 * @category limitTo
	 */
	int READ_ACCESSES = 4;

	/**
	 * When searching for field matches, it will exclusively find write accesses, as
	 * opposed to read accesses. Note that some expressions are considered both
	 * as field read/write accesses: for example,  x++; x+= 1;
	 *
	 * @since 2.0
	 * @category limitTo
	 */
	int WRITE_ACCESSES = 5;

	/**
	 * When searching for Type Declaration matches, and if a module is given, this
	 * will find type declaration matches in this module as well as the dependent
	 * module graph of the given module.
	 *
	 * @since 3.14
	 * @category limitTo
	 */
	int MODULE_GRAPH = 6;

	/**
	 * Ignore declaring type while searching result.
	 * Can be used in conjunction with any of the nature of match.
	 *
	 * @since 3.1
	 * @category limitTo
	 */
	int IGNORE_DECLARING_TYPE = 0x10;

	/**
	 * Ignore return type while searching result.
	 * Can be used in conjunction with any other nature of match.
	 * Note that:
	 * <ul>
	 * 	<li>for fields search, pattern will ignore field type</li>
	 * 	<li>this flag will have no effect for types search</li>
	 *	</ul>
	 *
	 * @since 3.1
	 * @category limitTo
	 */
	int IGNORE_RETURN_TYPE = 0x20;

	/**
	 * Return only type references used as the type of a field declaration.
	 * <p>
	 * When this flag is set, only {@link TypeReferenceMatch} matches will be
	 * returned.
	 *</p>
	 * @since 3.4
	 * @category limitTo
	 */
	int FIELD_DECLARATION_TYPE_REFERENCE = 0x40;

	/**
	 * Return only type references used as the type of a local variable declaration.
	 * <p>
	 * When this flag is set, only {@link TypeReferenceMatch} matches will be
	 * returned.
	 *</p>
	 * @since 3.4
	 * @category limitTo
	 */
	int LOCAL_VARIABLE_DECLARATION_TYPE_REFERENCE = 0x80;

	/**
	 * Return only type references used as the type of a method parameter
	 * declaration.
	 * <p>
	 * When this flag is set, only {@link TypeReferenceMatch} matches will be
	 * returned.
	 *</p>
	 * @since 3.4
	 * @category limitTo
	 */
	int PARAMETER_DECLARATION_TYPE_REFERENCE = 0x100;

	/**
	 * Return only type references used as a super type or as a super interface.
	 * <p>
	 * When this flag is set, only {@link TypeReferenceMatch} matches will be
	 * returned.
	 *</p>
	 * @since 3.4
	 * @category limitTo
	 */
	int SUPERTYPE_TYPE_REFERENCE = 0x200;

	/**
	 * Return only type references used in a throws clause.
	 * <p>
	 * When this flag is set, only {@link TypeReferenceMatch} matches will be
	 * returned.
	 *</p>
	 * @since 3.4
	 * @category limitTo
	 */
	int THROWS_CLAUSE_TYPE_REFERENCE = 0x400;

	/**
	 * Return only type references used in a cast expression.
	 * <p>
	 * When this flag is set, only {@link TypeReferenceMatch} matches will be
	 * returned.
	 *</p>
	 * @since 3.4
	 * @category limitTo
	 */
	int CAST_TYPE_REFERENCE = 0x800;

	/**
	 * Return only type references used in a catch header.
	 * <p>
	 * When this flag is set, only {@link TypeReferenceMatch} matches will be
	 * returned.
	 *</p>
	 * @since 3.4
	 * @category limitTo
	 */
	int CATCH_TYPE_REFERENCE = 0x1000;

	/**
	 * Return only type references used in class instance creation.
	 * <p>
	 * When this flag is set, only {@link TypeReferenceMatch} matches will be
	 * returned.
	 *</p><p>
	 *	Example:
	 *<pre>
	 * public class Test {
	 * 	Test() {}
	 * 	static Test bar()  {
	 * 		return new <i>Test</i>();
	 * 	}
	 * }
	 *</pre>
	 * Searching references to the type <code>Test</code> using this flag in the
	 * above snippet will match only the reference in italic.
	 * <p>
	 * Note that array creations are not returned when using this flag.
	 * </p>
	 * @since 3.4
	 * @category limitTo
	 */
	int CLASS_INSTANCE_CREATION_TYPE_REFERENCE = 0x2000;

	/**
	 * Return only type references used as a method return type.
	 * <p>
	 * When this flag is set, only {@link TypeReferenceMatch} matches will be
	 * returned.
	 *</p>
	 * @since 3.4
	 * @category limitTo
	 */
	int RETURN_TYPE_REFERENCE = 0x4000;

	/**
	 * Return only type references used in an import declaration.
	 * <p>
	 * When this flag is set, only {@link TypeReferenceMatch} matches will be
	 * returned.
	 *</p>
	 * @since 3.4
	 * @category limitTo
	 */
	int IMPORT_DECLARATION_TYPE_REFERENCE = 0x8000;

	/**
	 * Return only type references used as an annotation.
	 * <p>
	 * When this flag is set, only {@link TypeReferenceMatch} matches will be
	 * returned.
	 *</p>
	 * @since 3.4
	 * @category limitTo
	 */
	int ANNOTATION_TYPE_REFERENCE = 0x10000;

	/**
	 * Return only type references used as a type argument in a parameterized
	 * type or a parameterized method.
	 * <p>
	 * When this flag is set, only {@link TypeReferenceMatch} matches will be
	 * returned.
	 *</p>
	 * @since 3.4
	 * @category limitTo
	 */
	int TYPE_ARGUMENT_TYPE_REFERENCE = 0x20000;

	/**
	 * Return only type references used as a type variable bound.
	 * <p>
	 * When this flag is set, only {@link TypeReferenceMatch} matches will be
	 * returned.
	 *</p>
	 * @since 3.4
	 * @category limitTo
	 */
	int TYPE_VARIABLE_BOUND_TYPE_REFERENCE = 0x40000;

	/**
	 * Return only type references used as a wildcard bound.
	 * <p>
	 * When this flag is set, only {@link TypeReferenceMatch} matches will be
	 * returned.
	 *</p>
	 * @since 3.4
	 * @category limitTo
	 */
	int WILDCARD_BOUND_TYPE_REFERENCE = 0x80000;

	/**
	 * Return only type references used as a type of an <code>instanceof</code>
	 * expression.
	 * <p>
	 * When this flag is set, only {@link TypeReferenceMatch} matches will be
	 * returned.
	 *</p>
	 * @since 3.4
	 * @category limitTo
	 */
	int INSTANCEOF_TYPE_REFERENCE = 0x100000;

	/**
	 * Return only super field accesses or super method invocations (e.g. using the
	 * <code>super</code> qualifier).
	 * <p>
	 * When this flag is set, the kind of returned matches will depend on the
	 * specified nature of the searched element:
	 * <ul>
	 * 	<li>for the {@link #FIELD} nature, only {@link FieldReferenceMatch}
	 * 		matches will be returned,</li>
	 * 	<li>for the {@link #METHOD} nature, only {@link MethodReferenceMatch}
	 * 		matches will be returned.</li>
	 * </ul>
	 * @since 3.4
	 * @category limitTo
	 */
	int SUPER_REFERENCE = 0x1000000;

	/**
	 * Return only qualified field accesses or qualified method invocations.
	 * <p>
	 * When this flag is set, the kind of returned matches will depend on the
	 * specified nature of the searched element:
	 * <ul>
	 * 	<li>for the {@link #FIELD} nature, only {@link FieldReferenceMatch}
	 * 		matches will be returned,</li>
	 * 	<li>for the {@link #METHOD} nature, only {@link MethodReferenceMatch}
	 * 		matches will be returned.</li>
	 * </ul>
	 * @since 3.4
	 * @category limitTo
	 */
	int QUALIFIED_REFERENCE = 0x2000000;

	/**
	 * Return only primary field accesses or primary method invocations (e.g. using
	 * the <code>this</code> qualifier).
	 * <p>
	 * When this flag is set, the kind of returned matches will depend on the
	 * specified nature of the searched element:
	 * <ul>
	 * 	<li>for the {@link #FIELD} nature, only {@link FieldReferenceMatch}
	 * 		matches will be returned,</li>
	 * 	<li>for the {@link #METHOD} nature, only {@link MethodReferenceMatch}
	 * 		matches will be returned.</li>
	 * </ul>
	 * @since 3.4
	 * @category limitTo
	 */
	int THIS_REFERENCE = 0x4000000;

	/**
	 * Return only field accesses or method invocations without any qualification.
	 * <p>
	 * When this flag is set, the kind of returned matches will depend on the
	 * specified nature of the searched element:
	 * <ul>
	 * 	<li>for the {@link #FIELD} nature, only {@link FieldReferenceMatch}
	 * 		matches will be returned,</li>
	 * 	<li>for the {@link #METHOD} nature, only {@link MethodReferenceMatch}
	 * 		matches will be returned.</li>
	 * </ul>
	 * @since 3.4
	 * @category limitTo
	 */
	int IMPLICIT_THIS_REFERENCE = 0x8000000;

	/**
	 * Return only method reference expressions, e.g. <code>A::foo</code>.
	 * <p>
	 * When this flag is set, only {@link MethodReferenceMatch} matches will be
	 * returned.
	 *</p>
	 * @since 3.10
	 * @category limitTo
	 */
	int METHOD_REFERENCE_EXPRESSION = 0x10000000;

	/**
	 * Return only type references used as a permit type (Java 15)
	 * <p>
	 * When this flag is set, only {@link TypeReferenceMatch} matches will be
	 * returned.
	 *</p>
	 * @since 3.24
	 * @category limitTo
	 */
	int PERMITTYPE_TYPE_REFERENCE = 0x20000000;

	/* Syntactic match modes */

	/**
	 * The search pattern matches exactly the search result,
	 * that is, the source of the search result equals the search pattern.
	 *
	 * @deprecated Use {@link SearchPattern#R_EXACT_MATCH} instead.
	 * @category matchRule
	 */
	int EXACT_MATCH = 0;
	/**
	 * The search pattern is a prefix of the search result.
	 *
	 * @deprecated Use {@link SearchPattern#R_PREFIX_MATCH} instead.
	 * @category matchRule
	 */
	int PREFIX_MATCH = 1;
	/**
	 * The search pattern contains one or more wild cards ('*') where a
	 * wild-card can replace 0 or more characters in the search result.
	 *
	 * @deprecated Use {@link SearchPattern#R_PATTERN_MATCH} instead.
	 * @category matchRule
	 */
	int PATTERN_MATCH = 2;


	/* Case sensitivity */

	/**
	 * The search pattern matches the search result only
	 * if cases are the same.
	 *
	 * @deprecated Use the methods that take the matchMode
	 *   with {@link SearchPattern#R_CASE_SENSITIVE} as a matchRule instead.
	 * @category matchRule
	 */
	boolean CASE_SENSITIVE = true;
	/**
	 * The search pattern ignores cases in the search result.
	 *
	 * @deprecated Use the methods that take the matchMode
	 *   without {@link SearchPattern#R_CASE_SENSITIVE} as a matchRule instead.
	 * @category matchRule
	 */
	boolean CASE_INSENSITIVE = false;


	/* Waiting policies */

	/**
	 * The search operation starts immediately, even if the underlying indexer
	 * has not finished indexing the workspace. Results will more likely
	 * not contain all the matches.
	 */
	int FORCE_IMMEDIATE_SEARCH = IJob.ForceImmediate;
	/**
	 * The search operation throws an <code>org.eclipse.core.runtime.OperationCanceledException</code>
	 * if the underlying indexer has not finished indexing the workspace.
	 */
	int CANCEL_IF_NOT_READY_TO_SEARCH = IJob.CancelIfNotReady;
	/**
	 * The search operation waits for the underlying indexer to finish indexing
	 * the workspace before starting the search.
	 */
	int WAIT_UNTIL_READY_TO_SEARCH = IJob.WaitUntilReady;

	/* Special Constant for module search */

	/**
	 * The unnamed module is represented by this constant for making the intent explicit
	 * in searches involving modules
	 * @since 3.14
	 */
	char[] ALL_UNNAMED = "ALL-UNNAMED".toCharArray(); ////$NON-NLS-1$

}

Back to the top