-
Notifications
You must be signed in to change notification settings - Fork 578
/
DefaultNullnessAnnotations.java
745 lines (635 loc) · 55.1 KB
/
DefaultNullnessAnnotations.java
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
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
/*
* FindBugs - Find Bugs in Java programs
* Copyright (C) 2003-2007 University of Maryland
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package edu.umd.cs.findbugs.ba;
import edu.umd.cs.findbugs.SystemProperties;
import edu.umd.cs.findbugs.util.Values;
/**
* @author David Hovemeyer
*/
public class DefaultNullnessAnnotations {
public static final boolean ICSE10_NULLNESS_PAPER = SystemProperties.getBoolean("icse10");
/**
* Add default NullnessAnnotations to given INullnessAnnotationDatabase.
*
* @param database
* an INullnessAnnotationDatabase
*/
public static void addDefaultNullnessAnnotations(INullnessAnnotationDatabase database) {
if (AnnotationDatabase.IGNORE_BUILTIN_ANNOTATIONS) {
return;
}
boolean missingClassWarningsSuppressed = AnalysisContext.currentAnalysisContext().setMissingClassWarningsSuppressed(true);
database.addDefaultAnnotation(AnnotationDatabase.Target.METHOD, Values.DOTTED_JAVA_LANG_STRING, NullnessAnnotation.NONNULL);
database.addFieldAnnotation("java.lang.System", "out", "Ljava/io/PrintStream;", true, NullnessAnnotation.NONNULL);
database.addFieldAnnotation("java.lang.System", "err", "Ljava/io/PrintStream;", true, NullnessAnnotation.NONNULL);
database.addFieldAnnotation("java.lang.System", "in", "Ljava/io/InputStream;", true, NullnessAnnotation.NONNULL);
database.addFieldAnnotation("java.math.BigInteger", "ZERO", "Ljava/math/BigInteger;", true, NullnessAnnotation.NONNULL);
database.addFieldAnnotation("java.math.BigInteger", "ONE", "Ljava/math/BigInteger;", true, NullnessAnnotation.NONNULL);
database.addFieldAnnotation("java.math.BigInteger", "TEN", "Ljava/math/BigInteger;", true, NullnessAnnotation.NONNULL);
database.addMethodAnnotation("java.nio.file.Files", "probeContentType", "(Ljava/nio/file/Path;)Ljava/lang/String;", true,
NullnessAnnotation.CHECK_FOR_NULL);
database.addMethodAnnotation("java.nio.file.Path", "getRoot", "()Ljava/nio/file/Path;", false,
NullnessAnnotation.CHECK_FOR_NULL);
database.addMethodAnnotation("java.nio.file.Path", "getFileName", "()Ljava/nio/file/Path;", false,
NullnessAnnotation.CHECK_FOR_NULL);
database.addMethodAnnotation("java.nio.file.Path", "getParent", "()Ljava/nio/file/Path;", false,
NullnessAnnotation.CHECK_FOR_NULL);
database.addMethodAnnotation(Values.DOTTED_JAVA_IO_FILE, "list", "()[Ljava/lang/String;", false,
NullnessAnnotation.CHECK_FOR_NULL);
database.addMethodAnnotation(Values.DOTTED_JAVA_IO_FILE, "list", "(Ljava/io/FilenameFilter;)[Ljava/lang/String;", false,
NullnessAnnotation.CHECK_FOR_NULL);
database.addMethodAnnotation(Values.DOTTED_JAVA_IO_FILE, "listFiles", "()[Ljava/io/File;", false,
NullnessAnnotation.CHECK_FOR_NULL);
database.addMethodAnnotation(Values.DOTTED_JAVA_IO_FILE, "listFiles", "(Ljava/io/FilenameFilter;)[Ljava/io/File;", false,
NullnessAnnotation.CHECK_FOR_NULL);
database.addMethodAnnotation(Values.DOTTED_JAVA_IO_FILE, "listFiles", "(Ljava/io/FileFilter;)[Ljava/io/File;", false,
NullnessAnnotation.CHECK_FOR_NULL);
database.addMethodAnnotation("java.lang.ref.ReferenceQueue", "poll", "()Ljava/lang/ref/Reference;", false,
NullnessAnnotation.CHECK_FOR_NULL);
database.addMethodAnnotation("java.lang.ref.Reference", "get", "()Ljava/lang/Object;", false,
NullnessAnnotation.CHECK_FOR_NULL);
database.addMethodAnnotation("java.lang.Class", "newInstance", "()Ljava/lang/Object;", false, NullnessAnnotation.NONNULL);
database.addMethodAnnotation("java.lang.Class", "forName", "(Ljava/lang/String;)Ljava/lang/Class;", true,
NullnessAnnotation.NONNULL);
database.addMethodAnnotation("java.lang.reflect.Method", "getParameterTypes", "()[Ljava/lang/Class;", false,
NullnessAnnotation.NONNULL);
database.addMethodAnnotation(Values.DOTTED_JAVA_LANG_OBJECT, "clone", "()Ljava/lang/Object;", false, NullnessAnnotation.NONNULL);
database.addMethodAnnotation(Values.DOTTED_JAVA_LANG_OBJECT, "toString", "()Ljava/lang/String;", false, NullnessAnnotation.NONNULL);
database.addMethodAnnotation(Values.DOTTED_JAVA_LANG_OBJECT, "getClass", "()Ljava/lang/Class;", false, NullnessAnnotation.NONNULL);
database.addMethodParameterAnnotation(Values.DOTTED_JAVA_LANG_OBJECT, "equals", "(Ljava/lang/Object;)Z", false, 0,
NullnessAnnotation.CHECK_FOR_NULL);
database.addMethodParameterAnnotation("java.util.Arrays", "asList", "([Ljava/lang/Object;)Ljava/util/List;", true, 0,
NullnessAnnotation.NONNULL);
database.addMethodParameterAnnotation(Values.DOTTED_JAVA_LANG_INTEGER, "<init>", "(Ljava/lang/String;)V", false, 0,
NullnessAnnotation.NONNULL);
database.addMethodParameterAnnotation(Values.DOTTED_JAVA_LANG_INTEGER, "parseInt", "(Ljava/lang/String;I)I", true, 0,
NullnessAnnotation.NONNULL);
database.addMethodParameterAnnotation(Values.DOTTED_JAVA_LANG_INTEGER, "parseInt", "(Ljava/lang/String;)I", true, 0,
NullnessAnnotation.NONNULL);
database.addMethodAnnotation("java.nio.channels.SocketChannel", "open", "()Ljava/nio/channels/SocketChannel;", true,
NullnessAnnotation.NONNULL);
database.addMethodAnnotation("java.sql.Statement", "executeQuery", "(Ljava/lang/String;)Ljava/sql/ResultSet;", false,
NullnessAnnotation.NONNULL);
database.addMethodAnnotation("java.sql.PreparedStatement", "executeQuery", "()Ljava/sql/ResultSet;", false,
NullnessAnnotation.NONNULL);
database.addMethodAnnotation("java.sql.Connection", "prepareStatement",
"(Ljava/lang/String;)Ljava/sql/PreparedStatement;", false, NullnessAnnotation.NONNULL);
database.addDefaultAnnotation(AnnotationDatabase.Target.METHOD, "java.sql.DatabaseMetaData", NullnessAnnotation.NONNULL);
database.addMethodAnnotation("java.sql.DatabaseMetaData", "getConnection", "()Ljava/sql/Connection;", false,
NullnessAnnotation.NULLABLE);
database.addMethodAnnotation("java.sql.DatabaseMetaData", "getAttributes",
"(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/ResultSet;", false,
NullnessAnnotation.NULLABLE);
database.addMethodAnnotation("java.sql.DatabaseMetaData", "getColumns",
"(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/ResultSet;", false,
NullnessAnnotation.NULLABLE);
database.addMethodAnnotation("java.sql.DatabaseMetaData", "getSuperTables",
"(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/ResultSet;", false,
NullnessAnnotation.NULLABLE);
database.addMethodAnnotation("java.sql.DatabaseMetaData", "getSuperTypes",
"(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/ResultSet;", false,
NullnessAnnotation.NULLABLE);
database.addMethodAnnotation("java.sql.DatabaseMetaData", "getTimeDateFunctions", "()Ljava/lang/String;", false,
NullnessAnnotation.NULLABLE);
database.addMethodAnnotation("java.sql.DatabaseMetaData", "getTypeInfo", "()Ljava/sql/ResultSet;", false,
NullnessAnnotation.NULLABLE);
database.addMethodAnnotation("java.sql.DatabaseMetaData", "getURL", "()Ljava/lang/String;", false,
NullnessAnnotation.NULLABLE);
database.addDefaultAnnotation(AnnotationDatabase.Target.PARAMETER, "java.util.concurrent.package-info",
NullnessAnnotation.NONNULL);
database.addDefaultAnnotation(AnnotationDatabase.Target.PARAMETER, "java.util.concurrent.CopyOnWriteArrayList",
NullnessAnnotation.UNKNOWN_NULLNESS);
database.addDefaultAnnotation(AnnotationDatabase.Target.PARAMETER, "java.util.concurrent.CopyOnWriteArraySet",
NullnessAnnotation.UNKNOWN_NULLNESS);
database.addDefaultAnnotation(AnnotationDatabase.Target.PARAMETER, "java.util.concurrent.ConcurrentLinkedQueue$Node",
NullnessAnnotation.UNKNOWN_NULLNESS);
database.addDefaultAnnotation(AnnotationDatabase.Target.PARAMETER, "java.util.concurrent.Exchanger",
NullnessAnnotation.UNKNOWN_NULLNESS);
database.addDefaultAnnotation(AnnotationDatabase.Target.PARAMETER, "java.util.concurrent.FutureTask",
NullnessAnnotation.UNKNOWN_NULLNESS);
database.addDefaultAnnotation(AnnotationDatabase.Target.PARAMETER, "java.util.concurrent.LinkedBlockingQueue$Node",
NullnessAnnotation.UNKNOWN_NULLNESS);
database.addDefaultAnnotation(AnnotationDatabase.Target.PARAMETER,
"java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask", NullnessAnnotation.UNKNOWN_NULLNESS);
database.addDefaultAnnotation(AnnotationDatabase.Target.PARAMETER, "java.util.concurrent.SynchronousQueue$WaitQueue",
NullnessAnnotation.UNKNOWN_NULLNESS);
database.addDefaultAnnotation(AnnotationDatabase.Target.PARAMETER, "java.util.concurrent.SynchronousQueue$Node",
NullnessAnnotation.UNKNOWN_NULLNESS);
database.addDefaultAnnotation(AnnotationDatabase.Target.PARAMETER, "java.util.concurrent.ThreadPoolExecutor$Worker",
NullnessAnnotation.UNKNOWN_NULLNESS);
database.addDefaultAnnotation(AnnotationDatabase.Target.PARAMETER, "java.util.concurrent.AbstractExecutorService",
NullnessAnnotation.UNKNOWN_NULLNESS);
database.addDefaultAnnotation(AnnotationDatabase.Target.PARAMETER,
"java.util.concurrent.ConcurrentSkipListMap$ConcurrentSkipListSubMap", NullnessAnnotation.UNKNOWN_NULLNESS);
database.addDefaultAnnotation(AnnotationDatabase.Target.PARAMETER,
"java.util.concurrent.ConcurrentSkipListMap$HeadIndex", NullnessAnnotation.UNKNOWN_NULLNESS);
database.addDefaultAnnotation(AnnotationDatabase.Target.PARAMETER, "java.util.concurrent.ConcurrentSkipListMap$Index",
NullnessAnnotation.UNKNOWN_NULLNESS);
database.addDefaultAnnotation(AnnotationDatabase.Target.PARAMETER, "java.util.concurrent.ConcurrentSkipListMap$Node",
NullnessAnnotation.UNKNOWN_NULLNESS);
database.addDefaultAnnotation(AnnotationDatabase.Target.PARAMETER, "java.util.concurrent.ConcurrentSkipListMap$SubMap",
NullnessAnnotation.UNKNOWN_NULLNESS);
database.addDefaultAnnotation(AnnotationDatabase.Target.PARAMETER,
"java.util.concurrent.ConcurrentSkipListSet$ConcurrentSkipListSubSet", NullnessAnnotation.UNKNOWN_NULLNESS);
database.addDefaultAnnotation(AnnotationDatabase.Target.PARAMETER, "java.util.concurrent.LinkedBlockingDeque$Node",
NullnessAnnotation.UNKNOWN_NULLNESS);
database.addDefaultAnnotation(AnnotationDatabase.Target.PARAMETER, "java.util.concurrent.SynchronousQueue$TransferQueue",
NullnessAnnotation.UNKNOWN_NULLNESS);
database.addDefaultAnnotation(AnnotationDatabase.Target.PARAMETER,
"java.util.concurrent.SynchronousQueue$TransferQueue$QNode", NullnessAnnotation.UNKNOWN_NULLNESS);
database.addDefaultAnnotation(AnnotationDatabase.Target.PARAMETER, "java.util.concurrent.SynchronousQueue$TransferStack",
NullnessAnnotation.UNKNOWN_NULLNESS);
database.addDefaultAnnotation(AnnotationDatabase.Target.PARAMETER, "java.util.concurrent.SynchronousQueue$Transferer",
NullnessAnnotation.UNKNOWN_NULLNESS);
database.addMethodParameterAnnotation("java.util.concurrent.ConcurrentMap", "containsKey", "(Ljava/lang/Object;)Z",
false, 0, NullnessAnnotation.NONNULL);
database.addMethodParameterAnnotation("java.util.concurrent.ConcurrentMap", "containsValue", "(Ljava/lang/Object;)Z",
false, 0, NullnessAnnotation.NONNULL);
database.addMethodParameterAnnotation("java.util.concurrent.ConcurrentMap", "get",
"(Ljava/lang/Object;)Ljava/lang/Object;", false, 0, NullnessAnnotation.NONNULL);
database.addMethodParameterAnnotation("java.util.concurrent.ConcurrentMap", "remove",
"(Ljava/lang/Object;)Ljava/lang/Object;", false, 0, NullnessAnnotation.NONNULL);
database.addMethodParameterAnnotation("java.util.concurrent.ConcurrentMap", "put",
"(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;", false, 0, NullnessAnnotation.NONNULL);
database.addMethodParameterAnnotation("java.util.concurrent.ConcurrentMap", "put",
"(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;", false, 1, NullnessAnnotation.NONNULL);
database.addMethodParameterAnnotation("java.util.concurrent.ConcurrentHashMap", "remove",
"(Ljava/lang/Object;Ljava/lang/Object;)Z", false, 1, NullnessAnnotation.CHECK_FOR_NULL);
database.addMethodParameterAnnotation("java.util.concurrent.ConcurrentHashMap", "setEntryAt",
"([Ljava/util/concurrent/ConcurrentHashMap$HashEntry;ILjava/util/concurrent/ConcurrentHashMap$HashEntry;)V", false, 1,
NullnessAnnotation.NULLABLE);
database.addMethodParameterAnnotation("java.util.concurrent.ForkJoinPool", "<init>",
"(ILjava/util/concurrent/ForkJoinPool$ForkJoinWorkerThreadFactory;Ljava/lang/Thread$UncaughtExceptionHandler;Z)V", false, 1,
NullnessAnnotation.NONNULL);
database.addMethodParameterAnnotation("java.util.concurrent.ForkJoinPool", "<init>",
"(ILjava/util/concurrent/ForkJoinPool$ForkJoinWorkerThreadFactory;Ljava/lang/Thread$UncaughtExceptionHandler;Z)V", false, 2,
NullnessAnnotation.NULLABLE);
database.addMethodParameterAnnotation("java.util.concurrent.PriorityBlockingQueue", "<init>",
"(ILjava/util/Comparator;)V", false, 1, NullnessAnnotation.NULLABLE);
database.addDefaultAnnotation(AnnotationDatabase.Target.PARAMETER, "java.util.concurrent.ConcurrentLinkedDeque$Node",
NullnessAnnotation.UNKNOWN_NULLNESS);
database.addMethodParameterAnnotation("java.util.concurrent.ConcurrentMap", "remove",
"(Ljava/lang/Object;Ljava/lang/Object;)Z", false, 1, NullnessAnnotation.NULLABLE);
database.addMethodParameterAnnotation("java.util.concurrent.FutureTask", "<init>",
"(Ljava/lang/Runnable;Ljava/lang/Object;)V", false, 1, NullnessAnnotation.CHECK_FOR_NULL);
database.addMethodParameterAnnotation("java.util.concurrent.Executors", "callable",
"(Ljava/lang/Runnable;Ljava/lang/Object;)Ljava/util/concurrent/Callable;", true, 1,
NullnessAnnotation.CHECK_FOR_NULL);
database.addMethodParameterAnnotation("java.util.concurrent.ThreadPoolExecutor", "addWorker", "(Ljava/lang/Runnable;Z)Z",
false, 0, NullnessAnnotation.CHECK_FOR_NULL);
database.addMethodParameterAnnotation("java.util.concurrent.ConcurrentHashMap$Segment", "remove",
"(Ljava/lang/Object;ILjava/lang/Object;)Ljava/lang/Object;", false, 2, NullnessAnnotation.CHECK_FOR_NULL);
database.addMethodParameterAnnotation("java.util.concurrent.CyclicBarrier", "<init>", "(ILjava/lang/Runnable;)V", false,
1, NullnessAnnotation.CHECK_FOR_NULL);
database.addMethodParameterAnnotation("java.util.concurrent.BrokenBarrierException", "<init>",
"(Ljava/lang/String;)V", false, 0, NullnessAnnotation.CHECK_FOR_NULL);
database.addMethodParameterAnnotation("java.util.concurrent.CancellationException", "<init>",
"(Ljava/lang/String;)V", false, 0, NullnessAnnotation.CHECK_FOR_NULL);
database.addMethodParameterAnnotation("java.util.concurrent.CompletableFuture", "complete",
"(Ljava/lang/Object;)Z", false, 0, NullnessAnnotation.NULLABLE);
database.addMethodParameterAnnotation("java.util.concurrent.CompletableFuture", "completedFuture",
"(Ljava/lang/Object;)Ljava/util/concurrent/CompletableFuture;", true, 0, NullnessAnnotation.NULLABLE);
database.addMethodParameterAnnotation("java.util.concurrent.CompletableFuture", "completedStage",
"(Ljava/lang/Object;)Ljava/util/concurrent/CompletionStage;", true, 0, NullnessAnnotation.NULLABLE);
database.addMethodParameterAnnotation("java.util.concurrent.ExecutionException", "<init>", "(Ljava/lang/String;)V",
false, 0, NullnessAnnotation.CHECK_FOR_NULL);
database.addMethodParameterAnnotation("java.util.concurrent.ExecutionException", "<init>",
"(Ljava/lang/String;Ljava/lang/Throwable;)V", false, 0, NullnessAnnotation.CHECK_FOR_NULL);
database.addMethodParameterAnnotation("java.util.concurrent.ExecutionException", "<init>",
"(Ljava/lang/String;Ljava/lang/Throwable;)V", false, 1, NullnessAnnotation.CHECK_FOR_NULL);
database.addMethodParameterAnnotation("java.util.concurrent.ExecutionException", "<init>",
"(Ljava/lang/Throwable;)V", false, 0, NullnessAnnotation.CHECK_FOR_NULL);
database.addMethodParameterAnnotation("java.util.concurrent.RejectedExecutionException", "<init>",
"(Ljava/lang/String;)V", false, 0, NullnessAnnotation.CHECK_FOR_NULL);
database.addMethodParameterAnnotation("java.util.concurrent.RejectedExecutionException", "<init>",
"(Ljava/lang/String;Ljava/lang/Throwable;)V", false, 0, NullnessAnnotation.CHECK_FOR_NULL);
database.addMethodParameterAnnotation("java.util.concurrent.RejectedExecutionException", "<init>",
"(Ljava/lang/String;Ljava/lang/Throwable;)V", false, 1, NullnessAnnotation.CHECK_FOR_NULL);
database.addMethodParameterAnnotation("java.util.concurrent.RejectedExecutionException", "<init>",
"(Ljava/lang/Throwable;)V", false, 0, NullnessAnnotation.CHECK_FOR_NULL);
database.addMethodParameterAnnotation("java.util.concurrent.TimeoutException", "<init>", "(Ljava/lang/String;)V",
false, 0, NullnessAnnotation.CHECK_FOR_NULL);
database.addMethodParameterAnnotation("java.util.concurrent.Executors$RunnableAdapter", "<init>",
"(Ljava/lang/Runnable;Ljava/lang/Object;)V", false, 1, NullnessAnnotation.CHECK_FOR_NULL);
database.addMethodParameterAnnotation("java.util.concurrent.ConcurrentSkipListMap", "<init>",
"(Ljava/util/Comparator;)V", false, 0, NullnessAnnotation.CHECK_FOR_NULL);
database.addMethodParameterAnnotation("java.util.concurrent.ConcurrentSkipListMap", "doRemove",
"(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;", false, 1, NullnessAnnotation.CHECK_FOR_NULL);
database.addMethodParameterAnnotation("java.util.concurrent.ForkJoinPool", "casBarrierStack",
"(Ljava/util/concurrent/ForkJoinPool$WaitQueueNode;Ljava/util/concurrent/ForkJoinPool$WaitQueueNode;)Z", false,
0, NullnessAnnotation.CHECK_FOR_NULL);
database.addMethodParameterAnnotation("java.util.concurrent.ForkJoinPool", "casBarrierStack",
"(Ljava/util/concurrent/ForkJoinPool$WaitQueueNode;Ljava/util/concurrent/ForkJoinPool$WaitQueueNode;)Z", false,
1, NullnessAnnotation.CHECK_FOR_NULL);
database.addMethodParameterAnnotation("java.util.concurrent.ForkJoinPool", "casSpareStack",
"(Ljava/util/concurrent/ForkJoinPool$WaitQueueNode;Ljava/util/concurrent/ForkJoinPool$WaitQueueNode;)Z", false,
1, NullnessAnnotation.CHECK_FOR_NULL);
database.addMethodParameterAnnotation("java.util.concurrent.ForkJoinTask", "adapt",
"(Ljava/lang/Runnable;Ljava/lang/Object;)Ljava/util/concurrent/ForkJoinTask;", true, 1,
NullnessAnnotation.CHECK_FOR_NULL);
database.addMethodParameterAnnotation("java.util.concurrent.ForkJoinTask", "awaitDone",
"(Ljava/util/concurrent/ForkJoinWorkerThread;J)I", false, 0, NullnessAnnotation.CHECK_FOR_NULL);
database.addMethodParameterAnnotation("java.util.concurrent.ForkJoinTask", "awaitDone",
"(Ljava/util/concurrent/ForkJoinWorkerThread;Z)I", false, 0, NullnessAnnotation.CHECK_FOR_NULL);
database.addMethodParameterAnnotation("java.util.concurrent.ForkJoinTask$AdaptedRunnable", "<init>",
"(Ljava/lang/Runnable;Ljava/lang/Object;)V", false, 1, NullnessAnnotation.CHECK_FOR_NULL);
database.addMethodParameterAnnotation("java.util.concurrent.ForkJoinWorkerThread", "onTermination",
"(Ljava/lang/Throwable;)V", false, 0, NullnessAnnotation.CHECK_FOR_NULL);
database.addMethodParameterAnnotation("java.util.concurrent.ForkJoinWorkerThread", "setSlot",
"([Ljava/util/concurrent/ForkJoinTask;ILjava/util/concurrent/ForkJoinTask;)V", true, 2,
NullnessAnnotation.CHECK_FOR_NULL);
database.addMethodParameterAnnotation("java.util.concurrent.LinkedTransferQueue", "casCleanMe",
"(Ljava/util/concurrent/LinkedTransferQueue$Node;Ljava/util/concurrent/LinkedTransferQueue$Node;)Z", false, 0,
NullnessAnnotation.CHECK_FOR_NULL);
database.addMethodParameterAnnotation("java.util.concurrent.LinkedTransferQueue", "casCleanMe",
"(Ljava/util/concurrent/LinkedTransferQueue$Node;Ljava/util/concurrent/LinkedTransferQueue$Node;)Z", false, 1,
NullnessAnnotation.CHECK_FOR_NULL);
database.addMethodParameterAnnotation("java.util.concurrent.LinkedTransferQueue", "casHead",
"(Ljava/util/concurrent/LinkedTransferQueue$Node;Ljava/util/concurrent/LinkedTransferQueue$Node;)Z", false, 0,
NullnessAnnotation.CHECK_FOR_NULL);
database.addMethodParameterAnnotation("java.util.concurrent.LinkedTransferQueue", "xfer",
"(Ljava/lang/Object;ZIJ)Ljava/lang/Object;", false, 0, NullnessAnnotation.CHECK_FOR_NULL);
database.addMethodParameterAnnotation("java.util.concurrent.LinkedTransferQueue$Itr", "advance",
"(Ljava/util/concurrent/LinkedTransferQueue$Node;)V", false, 0, NullnessAnnotation.CHECK_FOR_NULL);
database.addMethodParameterAnnotation("java.util.concurrent.LinkedTransferQueue$Node", "casItem",
"(Ljava/lang/Object;Ljava/lang/Object;)Z", false, 1, NullnessAnnotation.CHECK_FOR_NULL);
database.addMethodParameterAnnotation("java.util.concurrent.LinkedTransferQueue$Node", "casNext",
"(Ljava/util/concurrent/LinkedTransferQueue$Node;Ljava/util/concurrent/LinkedTransferQueue$Node;)Z", false, 0,
NullnessAnnotation.CHECK_FOR_NULL);
database.addMethodParameterAnnotation("java.util.concurrent.Phaser", "<init>", "(Ljava/util/concurrent/Phaser;)V", false,
0, NullnessAnnotation.CHECK_FOR_NULL);
database.addMethodParameterAnnotation("java.util.concurrent.Phaser", "<init>", "(Ljava/util/concurrent/Phaser;I)V",
false, 0, NullnessAnnotation.CHECK_FOR_NULL);
database.addMethodAnnotation("java.util.concurrent.locks.ReadWriteLock", "readLock",
"()Ljava/util/concurrent/locks/Lock;", false, NullnessAnnotation.NONNULL);
database.addMethodAnnotation("java.util.concurrent.locks.ReadWriteLock", "writeLock",
"()Ljava/util/concurrent/locks/Lock;", false, NullnessAnnotation.NONNULL);
database.addMethodAnnotation("java.util.concurrent.locks.ReentrantReadWriteLock", "readLock",
"()Ljava/util/concurrent/locks/ReentrantReadWriteLock$ReadLock;", false, NullnessAnnotation.NONNULL);
database.addMethodAnnotation("java.util.concurrent.locks.ReentrantReadWriteLock", "writeLock",
"()Ljava/util/concurrent/locks/ReentrantReadWriteLock$WriteLock;", false, NullnessAnnotation.NONNULL);
database.addMethodParameterAnnotation("java.util.concurrent.ExecutorService", "submit",
"(Ljava/lang/Runnable;Ljava/lang/Object;)Ljava/util/concurrent/Future;", false, 1,
NullnessAnnotation.CHECK_FOR_NULL);
database.addMethodParameterAnnotation("java.util.concurrent.AbstractExecutorService", "submit",
"(Ljava/lang/Runnable;Ljava/lang/Object;)Ljava/util/concurrent/Future;", false, 1,
NullnessAnnotation.CHECK_FOR_NULL);
database.addMethodParameterAnnotation("java.util.concurrent.ExecutorCompletionService", "submit",
"(Ljava/lang/Runnable;Ljava/lang/Object;)Ljava/util/concurrent/Future;", false, 1,
NullnessAnnotation.CHECK_FOR_NULL);
database.addMethodParameterAnnotation("java.util.concurrent.AbstractExecutorServiceNullnessAnnotationDatabase",
"newTaskFor", "(Ljava/lang/Runnable;Ljava/lang/Object;)Ljava/util/concurrent/Future;", false, 1,
NullnessAnnotation.CHECK_FOR_NULL);
database.addMethodParameterAnnotation("java.util.concurrent.ExecutorCompletionService", "newTaskFor",
"(Ljava/lang/Runnable;Ljava/lang/Object;)Ljava/util/concurrent/RunnableFuture;", false, 1,
NullnessAnnotation.CHECK_FOR_NULL);
database.addMethodParameterAnnotation("java.util.concurrent.ThreadPoolExecutor", "addIfUnderCorePoolSize",
"(Ljava/lang/Runnable;)Z", false, 0, NullnessAnnotation.CHECK_FOR_NULL);
database.addMethodParameterAnnotation("java.util.concurrent.ThreadPoolExecutor", "addThread",
"(Ljava/lang/Runnable;)Ljava/lang/Thread;", false, 0, NullnessAnnotation.CHECK_FOR_NULL);
database.addMethodParameterAnnotation("java.util.concurrent.ThreadPoolExecutor", "afterExecute",
"(Ljava/lang/Runnable;Ljava/lang/Throwable;)V", false, 1, NullnessAnnotation.CHECK_FOR_NULL);
database.addMethodParameterAnnotation("java.util.EnumMap", "get", "(Ljava/lang/Object;)Ljava/lang/Object;", false, 0,
NullnessAnnotation.NONNULL);
database.addMethodParameterAnnotation("java.util.EnumMap", "containsKey", "(Ljava/lang/Object;)Z", false, 0,
NullnessAnnotation.NONNULL);
database.addMethodParameterAnnotation("java.util.EnumMap", "put",
"(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;", false, 0, NullnessAnnotation.NONNULL);
database.addMethodParameterAnnotation("java.util.EnumMap", "remove", "(Ljava/lang/Object;)Ljava/lang/Object;", false, 0,
NullnessAnnotation.NONNULL);
database.addMethodParameterAnnotation("java.util.SortedMap", "get", "(Ljava/lang/Object;)Ljava/lang/Object;", false, 0,
NullnessAnnotation.NONNULL);
database.addMethodParameterAnnotation("java.util.SortedMap", "containsKey", "(Ljava/lang/Object;)Ljava/lang/Object;",
false, 0, NullnessAnnotation.NONNULL);
database.addMethodParameterAnnotation("java.util.SortedMap", "put",
"(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;", false, 0, NullnessAnnotation.NONNULL);
database.addMethodParameterAnnotation("java.util.SortedMap", "remove", "(Ljava/lang/Object;)Ljava/lang/Object;", false,
0, NullnessAnnotation.NONNULL);
database.addMethodParameterAnnotation("java.util.SortedSet", "add", "(Ljava/lang/Object;)Z", false, 0,
NullnessAnnotation.NONNULL);
database.addMethodParameterAnnotation("java.util.SortedSet", "remove", "(Ljava/lang/Object;)Z", false, 0,
NullnessAnnotation.NONNULL);
database.addMethodParameterAnnotation("java.util.SortedSet", "contains", "(Ljava/lang/Object;)Z", false, 0,
NullnessAnnotation.NONNULL);
database.addMethodParameterAnnotation("java.util.Hashtable", "get", "(Ljava/lang/Object;)Ljava/lang/Object;", false, 0,
NullnessAnnotation.NONNULL);
database.addMethodParameterAnnotation("java.util.Hashtable", "containsKey", "(Ljava/lang/Object;)Z", false, 0,
NullnessAnnotation.NONNULL);
database.addMethodParameterAnnotation("java.util.Hashtable", "containsValue", "(Ljava/lang/Object;)Z", false, 0,
NullnessAnnotation.NONNULL);
database.addMethodParameterAnnotation("java.util.Hashtable", "contains", "(Ljava/lang/Object;)Z", false, 0,
NullnessAnnotation.NONNULL);
database.addMethodParameterAnnotation("java.util.Hashtable", "put",
"(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;", false, 0, NullnessAnnotation.NONNULL);
database.addMethodParameterAnnotation("java.util.Hashtable", "put",
"(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;", false, 1, NullnessAnnotation.NONNULL);
database.addMethodParameterAnnotation("javax.swing.UIDefaults", "put",
"(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;", false, 1, NullnessAnnotation.CHECK_FOR_NULL);
database.addMethodParameterAnnotation("java.util.Properties", "getProperty", "(Ljava/lang/String;)Ljava/lang/String;",
false, 0, NullnessAnnotation.NONNULL);
database.addMethodParameterAnnotation("java.util.Properties", "setProperty",
"(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;", false, 1, NullnessAnnotation.NONNULL);
database.addMethodParameterAnnotation("java.util.Properties", "setProperty",
"(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;", false, 0, NullnessAnnotation.NONNULL);
database.addMethodParameterAnnotation("org.w3c.dom.Element", "setAttribute", "(Ljava/lang/String;Ljava/lang/String;)V",
false, 0, NullnessAnnotation.NONNULL);
database.addMethodParameterAnnotation("java.text.DateFormat", "parse",
"(Ljava/lang/String;Ljava/text/ParsePosition;)Ljava/util/Date;", false, 0, NullnessAnnotation.NONNULL);
database.addMethodParameterAnnotation("java.text.DateFormat", "parse", "(Ljava/lang/String;)Ljava/util/Date;", false, 0,
NullnessAnnotation.NONNULL);
// addMethodAnnotation("java.util.Queue", "poll",
// "()Ljava/lang/Object;", false, NullnessAnnotation.CHECK_FOR_NULL);
database.addMethodAnnotation("java.io.BufferedReader", "readLine", "()Ljava/lang/String;", false,
NullnessAnnotation.CHECK_FOR_NULL);
database.addMethodParameterAnnotation("com.google.common.base.Preconditions", "checkNotNull", "(Ljava/lang/Object;)Ljava/lang/Object;",
true, 0, NullnessAnnotation.NONNULL);
database.addMethodParameterAnnotation("com.google.common.base.Preconditions", "checkNotNull",
"(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;",
true, 0, NullnessAnnotation.NONNULL);
database.addMethodParameterAnnotation("com.google.common.base.Preconditions", "checkNotNull",
"(Ljava/lang/Object;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/Object;",
true, 0, NullnessAnnotation.NONNULL);
database.addMethodAnnotation("com.google.common.base.Preconditions", "checkNotNull", "(Ljava/lang/Object;)Ljava/lang/Object;",
true, NullnessAnnotation.NONNULL);
database.addMethodAnnotation("com.google.common.base.Preconditions", "checkNotNull",
"(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;",
true, NullnessAnnotation.NONNULL);
database.addMethodAnnotation("com.google.common.base.Preconditions", "checkNotNull",
"(Ljava/lang/Object;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/Object;",
true, NullnessAnnotation.NONNULL);
database.addMethodParameterAnnotation("java.util.Objects", "requireNonNull", "(Ljava/lang/Object;)Ljava/lang/Object;",
true, 0, NullnessAnnotation.NONNULL);
database.addMethodParameterAnnotation("java.util.Objects", "requireNonNull", "(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;",
true, 0, NullnessAnnotation.NONNULL);
database.addMethodAnnotation("java.util.Objects", "requireNonNull", "(Ljava/lang/Object;)Ljava/lang/Object;",
true, NullnessAnnotation.NONNULL);
database.addMethodAnnotation("java.util.Objects", "requireNonNull", "(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;",
true, NullnessAnnotation.NONNULL);
database.addMethodAnnotation("org.w3c.dom.Element", "getAttribute", "(Ljava/lang/String;)Ljava/lang/String;",
false, NullnessAnnotation.NONNULL);
database.addMethodAnnotation("org.w3c.dom.Element", "getAttributeNS", "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;",
false, NullnessAnnotation.NONNULL);
database.addMethodAnnotation("org.w3c.dom.Element", "getElementsByTagName", "(Ljava/lang/String;)Lorg/w3c/dom/NodeList;",
false, NullnessAnnotation.NONNULL);
database.addMethodAnnotation("org.w3c.dom.Element", "getElementsByTagNameNS", "(Ljava/lang/String;Ljava/lang/String;)Lorg/w3c/dom/NodeList;",
false, NullnessAnnotation.NONNULL);
addEclipseSpecificAnnotations(database);
AnalysisContext.currentAnalysisContext().setMissingClassWarningsSuppressed(missingClassWarningsSuppressed);
}
private static void addEclipseSpecificAnnotations(INullnessAnnotationDatabase db) {
// if(true){
// return;
// }
// usually either uses known common services or checks for unknown. Too much noise
// db.addMethodAnnotation("org.eclipse.core.runtime.IAdaptable","getAdapter","(Ljava/lang/Class;)Ljava/lang/Object;",
// false, NullnessAnnotation.CHECK_FOR_NULL);
db.addMethodAnnotation("org.eclipse.core.runtime.IAdapterFactory", "getAdapter", "(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;",
false, NullnessAnnotation.CHECK_FOR_NULL);
db.addMethodAnnotation("org.eclipse.core.runtime.IAdapterManager", "getAdapter", "(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;",
false, NullnessAnnotation.CHECK_FOR_NULL);
db.addMethodAnnotation("org.eclipse.core.runtime.IAdapterManager", "getAdapter", "(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;",
false, NullnessAnnotation.CHECK_FOR_NULL);
db.addMethodAnnotation("org.eclipse.core.runtime.IAdapterManager", "loadAdapter", "(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;",
false, NullnessAnnotation.CHECK_FOR_NULL);
// usually reads are in-sync with writes, so too much noise
// db.addMethodAnnotation("org.eclipse.ui.IMemento","getChild","(Ljava/lang/String;)Lorg/eclipse/ui/IMemento;",
// false, NullnessAnnotation.CHECK_FOR_NULL);
// db.addMethodAnnotation("org.eclipse.ui.IMemento","getID","()Ljava/lang/String;",
// false, NullnessAnnotation.CHECK_FOR_NULL);
// db.addMethodAnnotation("org.eclipse.ui.IMemento","getInteger","(Ljava/lang/String;)Ljava/lang/Integer;",
// false, NullnessAnnotation.CHECK_FOR_NULL);
// db.addMethodAnnotation("org.eclipse.ui.IMemento","getString","(Ljava/lang/String;)Ljava/lang/String;",
// false, NullnessAnnotation.CHECK_FOR_NULL);
// db.addMethodAnnotation("org.eclipse.ui.IMemento","getTextData","()Ljava/lang/String;",
// false, NullnessAnnotation.CHECK_FOR_NULL);
// too seldom, usually used after job.join.
// db.addMethodAnnotation("org.eclipse.core.runtime.jobs.Job","getResult","()Lorg/eclipse/core/runtime/IStatus;",
// false, NullnessAnnotation.CHECK_FOR_NULL);
db.addMethodAnnotation("org.eclipse.core.runtime.FileLocator", "find", "(Ljava/net/URL;)Ljava/net/URL;",
false, NullnessAnnotation.CHECK_FOR_NULL);
db.addMethodAnnotation("org.eclipse.core.runtime.FileLocator", "find",
"(Lorg/osgi/framework/Bundle;Lorg/eclipse/core/runtime/IPath;Ljava/util/Map;)Ljava/net/URL;",
false, NullnessAnnotation.CHECK_FOR_NULL);
db.addMethodAnnotation("org.osgi.framework.Bundle", "getEntry", "(Ljava/lang/String;)Ljava/net/URL;",
false, NullnessAnnotation.CHECK_FOR_NULL);
db.addMethodAnnotation("org.osgi.framework.Bundle", "getEntryPaths", "(Ljava/lang/String;)Ljava/util/Enumeration;",
false, NullnessAnnotation.CHECK_FOR_NULL);
db.addMethodAnnotation("org.osgi.framework.Bundle", "getResource", "(Ljava/lang/String;)Ljava/net/URL;",
false, NullnessAnnotation.CHECK_FOR_NULL);
db.addMethodAnnotation("org.osgi.framework.Bundle", "getResources", "(Ljava/lang/String;)Ljava/util/Enumeration;",
false, NullnessAnnotation.CHECK_FOR_NULL);
db.addMethodAnnotation("org.osgi.framework.Bundle", "getServicesInUse", "()[Lorg/osgi/framework/ServiceReference;",
false, NullnessAnnotation.CHECK_FOR_NULL);
// usually not a problem - and there is a way to ask before if it is not empty
// db.addMethodAnnotation("org.eclipse.core.runtime.IPath","lastSegment","()Ljava/lang/String;",
// false, NullnessAnnotation.CHECK_FOR_NULL);
// too much noise: similar as if annotating List.get(i)
// db.addMethodAnnotation("org.eclipse.core.runtime.IPath","segment","(I)Ljava/lang/String;",
// false, NullnessAnnotation.CHECK_FOR_NULL);
// too much noise: usually search results are validated
// db.addMethodAnnotation("org.eclipse.core.resources.IContainer","findMember","(Ljava/lang/String;)Lorg/eclipse/core/resources/IResource;",
// false, NullnessAnnotation.CHECK_FOR_NULL);
// db.addMethodAnnotation("org.eclipse.core.resources.IContainer","findMember","(Ljava/lang/String;Z)Lorg/eclipse/core/resources/IResource;",
// false, NullnessAnnotation.CHECK_FOR_NULL);
// db.addMethodAnnotation("org.eclipse.core.resources.IContainer","findMember","(Lorg/eclipse/core/runtime/IPath;)Lorg/eclipse/core/resources/IResource;",
// false, NullnessAnnotation.CHECK_FOR_NULL);
// db.addMethodAnnotation("org.eclipse.core.resources.IContainer","findMember","(Lorg/eclipse/core/runtime/IPath;Z)Lorg/eclipse/core/resources/IResource;",
// false, NullnessAnnotation.CHECK_FOR_NULL);
db.addMethodAnnotation("org.eclipse.core.resources.IContainer", "getDefaultCharset", "(Z)Ljava/lang/String;",
false, NullnessAnnotation.CHECK_FOR_NULL);
db.addMethodAnnotation("org.eclipse.core.resources.IFile", "getCharset", "(Z)Ljava/lang/String;",
false, NullnessAnnotation.CHECK_FOR_NULL);
db.addMethodAnnotation("org.eclipse.core.resources.IFile", "getContentDescription",
"()Lorg/eclipse/core/runtime/content/IContentDescription;",
false, NullnessAnnotation.CHECK_FOR_NULL);
db.addMethodAnnotation("org.eclipse.core.resources.IProject", "getNature", "(Ljava/lang/String;)Lorg/eclipse/core/resources/IProjectNature;",
false, NullnessAnnotation.CHECK_FOR_NULL);
// db.addMethodAnnotation("org.eclipse.core.resources.IProject","getWorkingLocation","(Ljava/lang/String;)Lorg/eclipse/core/runtime/IPath;",
// false, NullnessAnnotation.CHECK_FOR_NULL);
db.addMethodAnnotation("org.eclipse.core.resources.IWorkspaceRoot", "getContainerForLocation",
"(Lorg/eclipse/core/runtime/IPath;)Lorg/eclipse/core/resources/IContainer;",
false, NullnessAnnotation.CHECK_FOR_NULL);
db.addMethodAnnotation("org.eclipse.core.resources.IWorkspaceRoot", "getFileForLocation",
"(Lorg/eclipse/core/runtime/IPath;)Lorg/eclipse/core/resources/IFile;",
false, NullnessAnnotation.CHECK_FOR_NULL);
// override annotation from IResource: workspace root is always available
// XXX seems not to work at all...
// db.addMethodAnnotation("org.eclipse.core.resources.IWorkspaceRoot","getLocation","()Lorg/eclipse/core/runtime/IPath;",
// false, NullnessAnnotation.NONNULL);
// override annotation from IResource: workspace root has no parent
db.addMethodAnnotation("org.eclipse.core.resources.IWorkspaceRoot", "getParent", "()Lorg/eclipse/core/resources/IContainer;",
false, NullnessAnnotation.CHECK_FOR_NULL);
// XXX too high rate of false positives, due the problem with IWorkspaceRoot.getLocation() above
// db.addMethodAnnotation("org.eclipse.core.resources.IResource","getLocation","()Lorg/eclipse/core/runtime/IPath;",
// false, NullnessAnnotation.CHECK_FOR_NULL);
// XXX too high rate of false positives, due the problem with IWorkspaceRoot.getLocation() above
// db.addMethodAnnotation("org.eclipse.core.resources.IResource","getLocationURI","()Ljava/net/URI;",
// false, NullnessAnnotation.CHECK_FOR_NULL);
db.addMethodAnnotation("org.eclipse.core.resources.IResource", "findMarker", "(J)Lorg/eclipse/core/resources/IMarker;",
false, NullnessAnnotation.CHECK_FOR_NULL);
db.addMethodAnnotation("org.eclipse.core.resources.IResource", "getFileExtension", "()Ljava/lang/String;",
false, NullnessAnnotation.CHECK_FOR_NULL);
// only true for workspace root
// db.addMethodAnnotation("org.eclipse.core.resources.IResource","getParent","()Lorg/eclipse/core/resources/IContainer;",
// false, NullnessAnnotation.CHECK_FOR_NULL);
db.addMethodAnnotation("org.eclipse.core.resources.IResource", "getPersistentProperty",
"(Lorg/eclipse/core/runtime/QualifiedName;)Ljava/lang/String;",
false, NullnessAnnotation.CHECK_FOR_NULL);
// db.addMethodAnnotation("org.eclipse.core.resources.IResource","getProject","()Lorg/eclipse/core/resources/IProject;",
// false, NullnessAnnotation.CHECK_FOR_NULL);
// db.addMethodAnnotation("org.eclipse.core.resources.IResource","getRawLocation","()Lorg/eclipse/core/runtime/IPath;",
// false, NullnessAnnotation.CHECK_FOR_NULL);
// db.addMethodAnnotation("org.eclipse.core.resources.IResource","getResourceAttributes","()Lorg/eclipse/core/resources/ResourceAttributes;",
// false, NullnessAnnotation.CHECK_FOR_NULL);
db.addMethodAnnotation("org.eclipse.core.resources.IResource", "getSessionProperty",
"(Lorg/eclipse/core/runtime/QualifiedName;)Ljava/lang/Object;",
false, NullnessAnnotation.CHECK_FOR_NULL);
db.addMethodAnnotation("org.eclipse.core.resources.IResourceDelta", "findMember",
"(Lorg/eclipse/core/runtime/IPath;)Lorg/eclipse/core/resources/IResourceDelta;",
false, NullnessAnnotation.CHECK_FOR_NULL);
db.addMethodAnnotation("org.eclipse.core.resources.IResourceDelta", "getMovedFromPath", "()Lorg/eclipse/core/runtime/IPath;",
false, NullnessAnnotation.CHECK_FOR_NULL);
db.addMethodAnnotation("org.eclipse.core.resources.IResourceDelta", "getMovedToPath", "()Lorg/eclipse/core/runtime/IPath;",
false, NullnessAnnotation.CHECK_FOR_NULL);
// javadoc collision with IFile which claims to implement interface without returning null
// db.addMethodAnnotation("org.eclipse.core.resources.IStorage","getFullPath","()Lorg/eclipse/core/runtime/IPath;",
// false, NullnessAnnotation.CHECK_FOR_NULL);
// Too many false positives
// db.addMethodAnnotation("org.eclipse.core.resources.IMarker","getAttribute","(Ljava/lang/String;)Ljava/lang/Object;",
// false, NullnessAnnotation.CHECK_FOR_NULL);
db.addMethodAnnotation("org.eclipse.team.core.RepositoryProvider", "getProvider",
"(Lorg/eclipse/core/resources/IProject;)Lorg/eclipse/team/core/RepositoryProvider;",
false, NullnessAnnotation.CHECK_FOR_NULL);
db.addMethodAnnotation("org.eclipse.team.core.RepositoryProvider", "getProvider",
"(Lorg/eclipse/core/resources/IProject;Ljava/lang/String;)Lorg/eclipse/team/core/RepositoryProvider;",
false, NullnessAnnotation.CHECK_FOR_NULL);
db.addMethodAnnotation("org.eclipse.swt.widgets.Display", "getCurrent", "()Lorg/eclipse/swt/widgets/Display;",
false, NullnessAnnotation.CHECK_FOR_NULL);
// db.addMethodAnnotation("org.eclipse.swt.widgets.Control","getParent","()Lorg/eclipse/swt/widgets/Composite;",
// false, NullnessAnnotation.CHECK_FOR_NULL);
// Usually checked or used only if set before
// db.addMethodAnnotation("org.eclipse.swt.widgets.Widget","getData","()Ljava/lang/Object;",
// false, NullnessAnnotation.CHECK_FOR_NULL);
// db.addMethodAnnotation("org.eclipse.swt.widgets.Widget","getData","(Ljava/lang/String;)Ljava/lang/Object;",
// false, NullnessAnnotation.CHECK_FOR_NULL);
// there is a way to ask selection before - so we can't just always warn
// db.addMethodAnnotation("org.eclipse.jface.viewers.IStructuredSelection","getFirstElement","()Ljava/lang/Object;",
// false, NullnessAnnotation.CHECK_FOR_NULL);
// too many false positives
// db.addMethodAnnotation("org.eclipse.jface.viewers.ISelectionProvider","getSelection","()Lorg/eclipse/jface/viewers/ISelection;",
// false, NullnessAnnotation.CHECK_FOR_NULL);
db.addMethodAnnotation("org.eclipse.jface.viewers.ITreeContentProvider", "getParent", "(Ljava/lang/Object;)Ljava/lang/Object;",
false, NullnessAnnotation.CHECK_FOR_NULL);
db.addMethodAnnotation("org.eclipse.jface.viewers.ILazyTreeContentProvider", "getParent", "(Ljava/lang/Object;)Ljava/lang/Object;",
false, NullnessAnnotation.CHECK_FOR_NULL);
db.addMethodAnnotation("org.eclipse.jface.viewers.ILabelProvider", "getImage", "(Ljava/lang/Object;)Lorg/eclipse/swt/graphics/Image;",
false, NullnessAnnotation.CHECK_FOR_NULL);
// too many false positives
// db.addMethodAnnotation("org.eclipse.jface.viewers.ILabelProvider","getText","(Ljava/lang/Object;)Ljava/lang/String;",
// false, NullnessAnnotation.CHECK_FOR_NULL);
db.addMethodAnnotation("org.eclipse.jface.viewers.IFontProvider", "getFont", "(Ljava/lang/Object;)Lorg/eclipse/swt/graphics/Font;",
false, NullnessAnnotation.CHECK_FOR_NULL);
db.addMethodAnnotation("org.eclipse.jface.viewers.IColorProvider", "getForeground", "(Ljava/lang/Object;)Lorg/eclipse/swt/graphics/Color;",
false, NullnessAnnotation.CHECK_FOR_NULL);
db.addMethodAnnotation("org.eclipse.jface.viewers.IColorProvider", "getBackground", "(Ljava/lang/Object;)Lorg/eclipse/swt/graphics/Color;",
false, NullnessAnnotation.CHECK_FOR_NULL);
db.addMethodAnnotation("org.eclipse.jface.viewers.IColorDecorator", "decorateForeground",
"(Ljava/lang/Object;)Lorg/eclipse/swt/graphics/Color;",
false, NullnessAnnotation.CHECK_FOR_NULL);
db.addMethodAnnotation("org.eclipse.jface.viewers.IColorDecorator", "decorateBackground",
"(Ljava/lang/Object;)Lorg/eclipse/swt/graphics/Color;",
false, NullnessAnnotation.CHECK_FOR_NULL);
db.addMethodAnnotation("org.eclipse.jface.viewers.IFontDecorator", "decorateFont", "(Ljava/lang/Object;)Lorg/eclipse/swt/graphics/Font;",
false, NullnessAnnotation.CHECK_FOR_NULL);
db.addMethodAnnotation("org.eclipse.jface.viewers.ILabelDecorator", "decorateImage",
"(Lorg/eclipse/swt/graphics/Image;Ljava/lang/Object;)Lorg/eclipse/swt/graphics/Image;",
false, NullnessAnnotation.CHECK_FOR_NULL);
db.addMethodAnnotation("org.eclipse.jface.viewers.ILabelDecorator", "decorateText",
"(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/String;",
false, NullnessAnnotation.CHECK_FOR_NULL);
db.addMethodAnnotation("org.eclipse.jface.viewers.ITableColorProvider", "getForeground",
"(Ljava/lang/Object;I)Lorg/eclipse/swt/graphics/Color;",
false, NullnessAnnotation.CHECK_FOR_NULL);
db.addMethodAnnotation("org.eclipse.jface.viewers.ITableColorProvider", "getBackground",
"(Ljava/lang/Object;I)Lorg/eclipse/swt/graphics/Color;",
false, NullnessAnnotation.CHECK_FOR_NULL);
db.addMethodAnnotation("org.eclipse.jface.viewers.ITableLabelProvider", "getColumnImage",
"(Ljava/lang/Object;I)Lorg/eclipse/swt/graphics/Image;",
false, NullnessAnnotation.CHECK_FOR_NULL);
// too many false positives
// db.addMethodAnnotation("org.eclipse.jface.viewers.ITableLabelProvider","getColumnText","(Ljava/lang/Object;I)Ljava/lang/String;",
// false, NullnessAnnotation.CHECK_FOR_NULL);
db.addMethodAnnotation("org.eclipse.ui.IWorkbenchPage", "findView", "(Ljava/lang/String;)Lorg/eclipse/ui/IViewPart;",
false, NullnessAnnotation.CHECK_FOR_NULL);
db.addMethodAnnotation("org.eclipse.ui.IWorkbenchPage", "findEditor", "(Lorg/eclipse/ui/IEditorInput;)Lorg/eclipse/ui/IEditorPart;",
false, NullnessAnnotation.CHECK_FOR_NULL);
db.addMethodAnnotation("org.eclipse.ui.IWorkbenchPage", "findViewReference", "(Ljava/lang/String;)Lorg/eclipse/ui/IViewReference;",
false, NullnessAnnotation.CHECK_FOR_NULL);
db.addMethodAnnotation("org.eclipse.ui.IWorkbenchPage", "findViewReference",
"(Ljava/lang/String;Ljava/lang/String;)Lorg/eclipse/ui/IViewReference;",
false, NullnessAnnotation.CHECK_FOR_NULL);
// Too many false positives if used from editor, which is active anyway
// db.addMethodAnnotation("org.eclipse.ui.IWorkbenchPage","getActiveEditor","()Lorg/eclipse/ui/IEditorPart;",
// false, NullnessAnnotation.CHECK_FOR_NULL);
// too many false positives
// db.addMethodAnnotation("org.eclipse.ui.IWorkbenchPage","openEditor","(Lorg/eclipse/ui/IEditorInput;Ljava/lang/String;)Lorg/eclipse/ui/IEditorPart;",
// false, NullnessAnnotation.CHECK_FOR_NULL);
// db.addMethodAnnotation("org.eclipse.ui.IWorkbenchPage","openEditor","(Lorg/eclipse/ui/IEditorInput;Ljava/lang/String;ZI)Lorg/eclipse/ui/IEditorPart;",
// false, NullnessAnnotation.CHECK_FOR_NULL);
// db.addMethodAnnotation("org.eclipse.ui.IWorkbenchWindow","getActivePage","()Lorg/eclipse/ui/IWorkbenchPage;",
// false, NullnessAnnotation.CHECK_FOR_NULL);
// too much noise because if a class is used in UI context, there is an active window.
// db.addMethodAnnotation("org.eclipse.ui.IWorkbench","getActiveWorkbenchWindow","()Lorg/eclipse/ui/IWorkbenchWindow;",
// false, NullnessAnnotation.CHECK_FOR_NULL);
// db.addMethodAnnotation("org.eclipse.jface.wizard.IWizard","getContainer","()Lorg/eclipse/jface/wizard/IWizardContainer;",
// false, NullnessAnnotation.CHECK_FOR_NULL);
// db.addMethodAnnotation("org.eclipse.jface.wizard.IWizard","getDialogSettings","()Lorg/eclipse/jface/dialogs/IDialogSettings;",
// false, NullnessAnnotation.CHECK_FOR_NULL);
// db.addMethodAnnotation("org.eclipse.jface.wizard.IWizard","getNextPage","(Lorg/eclipse/jface/wizard/IWizardPage;)Lorg/eclipse/jface/wizard/IWizardPage;",
// false, NullnessAnnotation.CHECK_FOR_NULL);
// db.addMethodAnnotation("org.eclipse.jface.wizard.IWizard","getPreviousPage","(Lorg/eclipse/jface/wizard/IWizardPage;)Lorg/eclipse/jface/wizard/IWizardPage;",
// false, NullnessAnnotation.CHECK_FOR_NULL);
// db.addMethodAnnotation("org.eclipse.jface.wizard.IWizard","getWindowTitle","()Ljava/lang/String;",
// false, NullnessAnnotation.CHECK_FOR_NULL);
// db.addMethodAnnotation("org.eclipse.jface.wizard.IWizard","getPage","(Ljava/lang/String;)Lorg/eclipse/jface/wizard/IWizardPage;",
// false, NullnessAnnotation.CHECK_FOR_NULL);
//
// db.addMethodAnnotation("org.eclipse.jface.wizard.IWizardPage","getNextPage","()Lorg/eclipse/jface/wizard/IWizardPage;",
// false, NullnessAnnotation.CHECK_FOR_NULL);
// db.addMethodAnnotation("org.eclipse.jface.wizard.IWizardPage","getPreviousPage","()Lorg/eclipse/jface/wizard/IWizardPage;",
// false, NullnessAnnotation.CHECK_FOR_NULL);
// db.addMethodAnnotation("org.eclipse.jface.wizard.IWizardPage","getWizard","()Lorg/eclipse/jface/wizard/IWizard;",
// false, NullnessAnnotation.CHECK_FOR_NULL);
// usually statically assigned resources - so either it never worked or always ok. Too noisy
// db.addMethodAnnotation("org.eclipse.jface.resource.ImageRegistry","getDescriptor","(Ljava/lang/String;)Lorg/eclipse/jface/resource/ImageDescriptor;",
// false, NullnessAnnotation.CHECK_FOR_NULL);
// db.addMethodAnnotation("org.eclipse.jface.resource.ImageRegistry","get","(Ljava/lang/String;)Lorg/eclipse/swt/graphics/Image;",
// false, NullnessAnnotation.CHECK_FOR_NULL);
//
// db.addMethodAnnotation("org.eclipse.jface.resource.ColorRegistry","get","(Ljava/lang/String;)Lorg/eclipse/swt/graphics/Color;",
// false, NullnessAnnotation.CHECK_FOR_NULL);
// db.addMethodAnnotation("org.eclipse.jface.resource.ColorRegistry","getRGB","(Ljava/lang/String;)Lorg/eclipse/swt/graphics/RGB;",
// false, NullnessAnnotation.CHECK_FOR_NULL);
//
// db.addMethodAnnotation("org.eclipse.jface.resource.JFaceResources","getImage","(Ljava/lang/String;)Lorg/eclipse/swt/graphics/Image;",
// false, NullnessAnnotation.CHECK_FOR_NULL);
// db.addMethodAnnotation("org.eclipse.jface.action.IAction","getImageDescriptor","()Lorg/eclipse/jface/resource/ImageDescriptor;",
// false, NullnessAnnotation.CHECK_FOR_NULL);
}
}