forked from typetools/checker-framework
-
Notifications
You must be signed in to change notification settings - Fork 0
/
changelog.txt
3181 lines (2311 loc) · 112 KB
/
changelog.txt
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
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
---------------------------------------------------------------------------
Version ??, April 2, 2019
Support `androidx.annotation.RecentlyNonNull` and `RecentlyNullable` (as of
2.6.0, but not previously documented).
The following qualifiers are now repeatable: `@DefaultQualifier`
`@EnsuresQualifierIf` `@EnsuresQualifier` `@RequiresQualifier`. Therefore,
users generally do not need to write the following wrapper annotations:
`@DefaultQualifiers` `@EnsuresQualifiersIf` `@EnsuresQualifiers`
`@RequiresQualifiers`.
New command-line option `-ArequirePrefixInWarningSuppressions` makes
`@SuppressWarnings` recognize warning keys of the form
"checkername:key.about.problem" but ignore warning keys of the form
"key.about.problem" without the checker name as a prefix.
---------------------------------------------------------------------------
Version 2.7.0, March 1, 2019
The manual links to the AWS crypto policy compliance checker, which enforces
that no weak cipher algorithms are used with the Java crypto API.
The Nullness Checker supports RxJava annotations
io.reactivex.annotations.NonNull and io.reactivex.annotations.Nullable.
The checker-qual artifact (jar file) contains an OSGi manifest.
New TYPE_DECLARATION enum constant in TypeUseLocation makes it possible to
(for example) set defaults annotations for class/interface definitions.
Interface changes:
* Renamed the "value" element of the @HasSubsequence annotation to
"subsequence".
* Renamed @PolySignedness to @PolySigned.
* Renamed AnnotatedTypeFactory.ParameterizedMethodType to
ParameterizedExecutableType.
Added missing checks regarding annotations on classes, constructor
declarations, and constructor invocations. You may see new warnings.
Closed issues:
788, 1751, 2147, 2163, 2186, 2235, 2243, 2263, 2264, 2286, 2302, 2326, 2327.
---------------------------------------------------------------------------
Version 2.6.0, February 3, 2019
The manual includes a section about how to use Lombok and the Checker
Framework simultaneously.
Commons CSV has been added to the annotated libraries on Maven Central.
Some error messages have been changed to improve comprehensibility,
such as by adjusting wording or adding additional information.
Relevant to type system implementers:
Renamed method areSameIgnoringValues to areSameByName.
Closed issues: 2008, 2166, 2185, 2187, 2221, 2224, 2229, 2234, 2248.
Also fixed false negatives in handling of Map.get().
---------------------------------------------------------------------------
Version 2.5.8, December 5, 2018
The manual now links to the AWS KMS compliance checker, which enforces
that calls to AWS KMS only generate 256-bit keys.
Closed issues: 372, 1678, 2207, 2212, 2217.
---------------------------------------------------------------------------
Version 2.5.7, November 4, 2018
New @EnsuresKeyFor and @EnsuresKeyForIf method annotations permit
specifying the postcondition that a method gives some value a @KeyFor type.
The manual links to the Rx Thread & Effect Checker, which enforces
UI Thread safety properties for stream-based Android applications.
Closed issues:
1014, 2151, 2178, 2180, 2183, 2188, 2190, 2195, 2196, 2198, 2199
---------------------------------------------------------------------------
Version 2.5.6, October 3, 2018
Introduce checker-qual-android artifact that is just like the checker-qual
artifact, but the qualifiers have classfile retention. This is useful for
Android projects.
Remove the checker-compat-qual artifact, which was only useful for Java 7,
which the Checker Framework no longer supports. It remains available on
Maven Central, with versions 2.5.5 and earlier.
Closed issues:
2135, 2157, 2158, 2164, 2171.
---------------------------------------------------------------------------
Version 2.5.5, August 30, 2018
Implicit imports (deprecated in November 2014) are no longer supported.
Renamed the testlib Maven artifact to framework-test.
Removed command-line option -AprintErrorStack, which is now the default.
Added -AnoPrintErrorStack to disable it (which should be rare).
Replaced ErrorReporter class with BugInCF and UserError exceptions.
Closed issues:
1999, 2008, 2023, 2029, 2074, 2088, 2098, 2099, 2102, 2107.
---------------------------------------------------------------------------
Version 2.5.4, August 1, 2018
Closed issues:
2030, 2048, 2052, 2059, 2065, 2067, 2073, 2082.
---------------------------------------------------------------------------
Version 2.5.3, July 2, 2018
Closed issues:
266, 1248, 1678, 2010, 2011, 2018, 2020, 2046, 2047, 2054.
---------------------------------------------------------------------------
Version 2.5.2, June 1, 2018
In the Map Key Checker, null is now @UnknownKeyFor. See the "Map Key Checker"
chapter in the manual for more details.
Closed issues:
370, 469, 1701, 1916, 1922, 1959, 1976, 1978, 1981, 1983, 1984, 1991, 1992.
---------------------------------------------------------------------------
Version 2.5.1, May 1, 2018
Added a Maven artifact of the Checker Framework testing library, testlib.
Closed issues:
849, 1739, 1838, 1847, 1890, 1901, 1911, 1912, 1913, 1934, 1936, 1941, 1942,
1945, 1946, 1948, 1949, 1952, 1953, 1956, 1958.
---------------------------------------------------------------------------
Version 2.5.0, April 2, 2018
Declaration annotations that are aliases for type annotations are now treated
as if they apply to the top-level type. See "Declaration annotations" section
in the "Warnings" chapter in the manual for more details.
Ended support for annotations in comments. See "Migrating away from
annotations in comments" section in the "Handling legacy code" chapter in the
manual for instructions on how to remove annotations from comments.
Closed issues:
515, 1667, 1739, 1776, 1819, 1863, 1864, 1865, 1866, 1867, 1870, 1876, 1879,
1882, 1898, 1903, 1905, 1906, 1910, 1914, 1915, 1920.
---------------------------------------------------------------------------
Version 2.4.0, March 1, 2018
Added the Index Checker, which eliminates ArrayIndexOutOfBoundsException.
Added the Optional Checker, which verifies uses of Java 8's Optional class.
Removed the Linear Checker, whose implementation was inconsistent with its
documentation.
Added a @QualifierArgument annotation to be used on pre- and postcondition
annotations created by @PreconditionAnnotation, @PostconditionAnnotation,
and @ConditionalPostconditionAnnotation. This allows qualifiers with
arguments to be used in pre- and postconditions.
Added new type @InternalFormForNonArray to the Signature Checker
Moved annotated libraries from checker/lib/*.jar to the Central Repository:
https://search.maven.org/#search%7Cga%7C1%7Cg%3A%22org.checkerframework.annotatedlib%22
Moved the Javadoc stub file from checker/lib/javadoc.astub to
checker/resources/javadoc.astub.
Simplified the instructions for running the Checker Framework with Gradle.
The Checker Framework Eclipse plugin is no longer released nor supported.
Closed issues:
65, 66, 100, 108, 175, 184, 190, 194, 209, 239, 260, 270, 274, 293, 302, 303,
306, 321, 325, 341, 356, 360, 361, 371, 383, 385, 391, 397, 398, 410, 423, 424,
431, 430, 432, 548, 1131, 1148, 1213, 1455, 1504, 1642, 1685, 1770, 1796, 1797,
1801, 1809, 1810, 1815, 1817, 1818, 1823, 1831, 1837, 1839, 1850, 1851, 1852,
1861.
---------------------------------------------------------------------------
Version 2.3.2, February 1, 2018
Closed issues:
946, 1133, 1232, 1319, 1625, 1633, 1696, 1709, 1712, 1734, 1738, 1749, 1754,
1760, 1761, 1768, 1769, 1781.
---------------------------------------------------------------------------
Version 2.3.1, January 2, 2018
Closed issues:
1695, 1696, 1697, 1698, 1705, 1708, 1711, 1714, 1715, 1724.
---------------------------------------------------------------------------
Version 2.3.0, December 1, 2017
Removed the deprecated @LazyNonNull type qualifier.
Deprecated most methods in InternalUtils and moved them to either
TreeUtils or TypesUtils. Adapted a few method names and parameter
orders for consistency.
Closed issues:
951, 1356, 1495, 1602, 1605, 1623, 1628, 1636, 1641, 1653, 1655, 1664, 1665,
1681, 1684, 1688, 1690.
---------------------------------------------------------------------------
Version 2.2.2, November 2, 2017
The Interning Checker supports a new annotation, @InternedDistinct, which
indicates that the value is not equals() to any other value.
An annotated version of the Commons IO library appears in checker/lib/ .
Closed issue 1586, which required re-opening issues 293 and 341 until
proper fixes for those are implemented.
Closed issues:
1386, 1389, 1423, 1520, 1529, 1530, 1531, 1546, 1553, 1555, 1565, 1570, 1579,
1580, 1582, 1585, 1586, 1587, 1598, 1609, 1615, 1617.
---------------------------------------------------------------------------
Version 2.2.1, September 29, 2017
Deprecated some methods in AnnotatedTypeMirror and AnnotationUtils, to
be removed after the 2.2.1 release.
The qualifiers and utility classes in checker-qual.jar are compiled to Java 8
byte code. A new jar, checker-qual7.jar, includes the qualifiers and utility
classes compiled to Java 7 byte code.
Closed issues:
724, 1431, 1442, 1459, 1464, 1482, 1496, 1499, 1500, 1506, 1507, 1510, 1512,
1522, 1526, 1528, 1532, 1535, 1542, 1543.
---------------------------------------------------------------------------
Version 2.2.0, September 5, 2017
A Java 8 JVM is required to run the Checker Framework.
You can still typecheck and compile Java 7 (or earlier) code.
With the "-target 7" flag, the resulting .class files still run with JDK 7.
The stub file format has changed to be more similar to regular Java syntax.
Most notably, receiver annotations are written using standard Java 8 syntax
(a special first formal paramter named "this") and inner classes are written
using standard Java syntax (rather than at the top level using a name that
contains "$". You need to update your stub files to conform to the new syntax.
Closed issues:
220, 293, 297, 341, 375, 407, 536, 571, 798, 867, 1180, 1214, 1218, 1371, 1411,
1427, 1428, 1435, 1438, 1450, 1456, 1460, 1466, 1473, 1474.
---------------------------------------------------------------------------
Version 2.1.14, 3 August 2017
Nullness Checker change to annotated JDK: The type argument to the Class,
Constructor, and Optional classes may now be annotated as @Nullable or
@NonNull. The nullness of the type argument doesn't matter, but this
enables easier integration with generic clients.
Many crashes and false positives associated with uninferred method type
arguments have been correct. By default, uninferred method type arguments,
which can happen with Java 8 style target type contexts, are silently ignored.
Use the option -AconservativeUninferredTypeArguments to see warnings about
method calls where the Checker Framework fails to infer type arguments.
Closed issues:
753, 804, 961, 1032, 1062, 1066, 1098, 1209, 1280, 1316, 1329, 1355, 1365,
1366, 1367, 1377, 1379, 1382, 1384, 1397, 1398, 1399, 1402, 1404, 1406, 1407.
---------------------------------------------------------------------------
Version 2.1.13, 3 July 2017
Verified that the Checker Framework builds from source on Windows Subsystem
for Linux, on Windows 10 Creators Edition.
The manual explains how to configure Android projects that use Android Studio
3.0 and Android Gradle Plugin 3.0.0, which support type annotations.
Closed issues:
146, 1264, 1275, 1290, 1303, 1308, 1310, 1312, 1313, 1315, 1323, 1324, 1331,
1332, 1333, 1334, 1347, 1357, 1372.
---------------------------------------------------------------------------
Version 2.1.12, 1 June 2017
The manual links to Glacier, a class immutability checker.
The stubparser license has been updated. You can now use stubparser under
either the LGPL or the Apache license, whichever you prefer.
Closed issues:
254, 1201, 1229, 1236, 1239, 1240, 1257, 1265, 1270, 1271, 1272, 1274, 1288,
1291, 1299, 1304, 1305.
---------------------------------------------------------------------------
Version 2.1.11, 1 May 2017
The manual contains new FAQ (frequently asked questions) sections about
false positive warnings and about inference for field types.
Closed issues:
989, 1096, 1136, 1228.
---------------------------------------------------------------------------
Version 2.1.10, 3 April 2017
The Constant Value Checker, which performs constant propagation, has been
extended to perform interval analysis -- that is, it determines, for each
expression, a statically-known lower and upper bound. Use the new
@IntRange annotation to express this. Thanks to Jiasen (Jason) Xu for this
feature.
Closed issues:
134, 216, 227, 307, 334, 437, 445, 718, 1044, 1045, 1051, 1052, 1054, 1055,
1059, 1077, 1087, 1102, 1108, 1110, 1111, 1120, 1124, 1127, 1132.
---------------------------------------------------------------------------
Version 2.1.9, 1 March 2017
By default, uninferred method type arguments, which can happen with Java 8
style target type contexts, are silently ignored, removing many false
positives. The new option -AconservativeUninferredTypeArguments can be used to
get the conservative behavior.
Closed issues:
1006, 1011, 1015, 1027, 1035, 1036, 1037, 1039, 1043, 1046, 1049, 1053, 1072,
1084.
---------------------------------------------------------------------------
Version 2.1.8, 20 January 2017
The Checker Framework webpage has moved to https://checkerframework.org/.
Old URLs should redirect to the new one, but please update your links
and let us know if any old links are broken rather than redirecting.
The documentation has been reorganized in the Checker Framework repository.
The manual, tutorial, and webpages now appear under checker-framework/docs/.
Closed issues:
770, 1003, 1012.
---------------------------------------------------------------------------
Version 2.1.7, 3 January 2017
Manual improvements:
* Added a link to jOOQ's SQL checker.
* Documented the `-AprintVerboseGenerics` command-line option.
* Better explanation of relationship between Fake Enum and Subtyping Checkers.
Closed issues:
154, 322, 402, 404, 433, 531, 578, 720, 795, 916, 953, 973, 974, 975, 976,
980, 988, 1000.
---------------------------------------------------------------------------
Version 2.1.6, 1 December 2016
Closed issues:
412, 475.
---------------------------------------------------------------------------
Version 2.1.5, 2 November 2016
The new class org.checkerframework.checker.nullness.Opt provides every
method in Java 8's java.util.Optional class, but written for possibly-null
references rather than for the Optional type. This can shorten code that
manipulates possibly-null references.
In bytecode, type variable upper bounds of type Object may or may not have
been explicitly written. The Checker Framework now assumes they were not
written explicitly in source code and defaults them as implicit upper bounds.
The manual describes how to run a checker within the NetBeans IDE.
The manual describes two approaches to creating a type alias or typedef.
Closed issues:
643, 775, 887, 906, 941.
---------------------------------------------------------------------------
Version 2.1.4, 3 October 2016
Closed issues:
885, 886, 919.
---------------------------------------------------------------------------
Version 2.1.3, 16 September 2016
Closed issues:
122, 488, 495, 580, 618, 647, 713, 764, 818, 872, 893, 894, 901, 902, 903,
905, 913.
---------------------------------------------------------------------------
Version 2.1.2, 1 September 2016
Closed issues:
182, 367, 712, 811, 846, 857, 858, 863, 870, 871, 878, 883, 888.
---------------------------------------------------------------------------
Version 2.1.1, 1 August 2016
The codebase conforms to a consistent coding style, which is enforced by
a git pre-commit hook.
AnnotatedTypeFactory#createSupportedTypeQualifiers() must now return a mutable
list. Checkers that override this method will have to be changed.
Closed issues:
384, 590, 681, 790, 805, 809, 810, 820, 824, 826, 829, 838, 845, 850, 856.
---------------------------------------------------------------------------
Version 2.1.0, 1 July 2016
The new Signedness Checker prevents mixing of unsigned and signed
values and prevents meaningless operations on unsigned values.
The Lock Checker expresses the annotated variable as `<self>`;
previously it used `itself`, which may conflict with an identifier.
Closed issues:
166, 273, 358, 408, 471, 484, 594, 625, 692, 700, 701, 711, 717, 752, 756,
759, 763, 767, 779, 783, 794, 807, 808.
---------------------------------------------------------------------------
Version 2.0.1, 1 June 2016
We renamed method annotateImplicit to addComputedTypeAnnotations. If you
have implemented a checker, you need to change occurrences of
annotateImplicit to addComputedTypeAnnotations.
The Checker Framework (checker.jar) is now placed on the processorpath
during compilation. Previously, it was placed on the classpath. The
qualifiers (checker-qual.jar) remain on the classpath. This change should
reduce conflicts between your code and the Checker Framework. If your code
depends on classes in the Checker Framework, then you should add those
classes to the classpath when you run the compiler.
Closed issues:
171, 250, 291, 523, 577, 672, 680, 688, 689, 690, 691, 695, 696, 698, 702,
704, 705, 706, 707, 720, 721, 723, 728, 736, 738, 740.
---------------------------------------------------------------------------
Version 2.0.0, 2 May 2016
Inference:
* The infer-and-annotate.sh script infers annotations and inserts them in
your source code. This can reduce the burden of writing annotations and
let you get started using a type system more quickly. See the
"Whole-program inference" section in the manual for details.
Type systems:
* The Lock Checker has been replaced by a new implementation that provides
a stronger guarantee. The old Lock Checker prevented two threads from
simultaneously using a given variable, but race conditions were still
possible due to aliases. The new Lock Checker prevents two threads from
simultaneously dereferencing a given value, and thus prevents race
conditions. For details, see the "Lock Checker" chapter in the manual,
which has been rewritten to describe the new semantics.
* The top type qualifier for the Signature String type system has been
renamed from @UnannotatedString to @SignatureUnknown. You shouldn't
ever write this annotation, but if you perform separate compilation (for
instance, if you do type-checking with the Signature String Checker
against a library that is annotated with Signature String annotations),
then you need to re-compile the library.
* The IGJ, OIGJ, and Javari Checkers are no longer distributed with the
Checker Framework. If you wish to use them, install version 1.9.13 of
the Checker Framework. The implementations have been removed because
they were not being maintained. The type systems are valuable, but the
type-checkers should be rewritten from scratch.
Documentation improvements:
* New manual section "Tips for creating a checker" shows how to break down
the implementation of a type system into small, manageable pieces.
* Improved instructions for using Maven and Gradle, including for Android
code.
Tool changes:
* The Checker Framework Live Demo webpage lets you try the Checker
Framework without installing it: http://eisop.uwaterloo.ca/live/
* New command-line arguments -Acfgviz and -Averbosecfg enable better
debugging of the control-flow-graph generation step of type-checking.
* New command-line argument -Ainfer is used by the infer-and-annotate.sh
script that performs type inference.
Closed issues:
69, 86, 199, 299, 329, 421, 428, 557, 564, 573, 579, 665, 668, 669, 670, 671.
---------------------------------------------------------------------------
Version 1.9.13, 1 April 2016
Documentation:
* Clarified Maven documentation about use of annotations in comments.
* Added FAQ about annotating fully-qualified type names.
Closed issues: 438, 572, 579, 607, 624, 631.
---------------------------------------------------------------------------
Version 1.9.12, 1 March 2016
The Checker Framework distribution contains annotated versions
of libraries in directory checker-framework/checker/lib/.
During type-checking, you should put these versions first on your classpath,
to obtain more precise type-checking with fewer false positive warnings.
tools.jar is no longer required to be on the classpath when using
checker-qual.jar
The Signature String Checker supports two new string representations of a
Java type: @InternalForm and @ClassGetSimpleName.
The manual documents how to run a pluggable type-checker in IntelliJ IDEA.
The instructions on how to run a type-checker in Gradle have been updated to
use the artifacts in Maven Central. Examples using the instructions have been
added under checker-framework/docs/examples/GradleExamples/.
Renamed enum DefaultLocation to TypeUseLocation.
Closed issues: 130, 263, 345, 458, 559, 559, 574, 582, 596.
---------------------------------------------------------------------------
Version 1.9.11, 1 February 2016
Renamed and merged -AuseSafeDefaultsForUnannotatedSourceCode and
-AsafeDefaultsForUnannotatedBytecode command-line options to
-AuseDefaultsForUncheckedCode that takes arguments source and bytecode.
For type-system developers:
* The previously deprecated
org.checkerframework.framework.qual.TypeQualifier{s} annotations
were removed.
* Every type system uses the CLIMB-to-top defaulting scheme, unless it
explicitly specifies a different one. Previously a type system needed
to explicitly request CLIMB-to-top, but now it is the default.
Closed issues: 524, 563, 568.
---------------------------------------------------------------------------
Version 1.9.10, 4 January 2016
The Checker Framework distribution files now contain a version number:
for example, checker-framework-1.9.9.zip rather than checker-framework.zip.
The Nullness Checker supports the org.eclipse.jgit.annotations.Nullable and
NonNull annotations.
Buildfiles do less unnecessary recomputation.
Documentation:
* Documented how to initialize circular data structures in the
Initialization type system.
* Linked to David Bürgin's Nullness Checker tutorial at
https://github.com/glts/safer-spring-petclinic/wiki
* Acknowledged more contributors in the manual.
For type-system developers:
* The org.checkerframework.framework.qual.TypeQualifier{s} annotations are
now deprecated. To indicate which annotations a checker supports, see
https://checkerframework.org/manual/#creating-indicating-supported-annotations .
Support for TypeQualifier{s} will be removed in the next release.
* Renamed
org.checkerframework.framework.qual.Default{,Qualifier}ForUnannotatedCode to
DefaultInUncheckedCodeFor and DefaultQualifierInHierarchyInUncheckedCode.
Closed issues: 169, 363, 448, 478, 496, 516, 529.
---------------------------------------------------------------------------
Version 1.9.9, 1 December 2015
Fixed issues: 511, 513, 514, 455, 527.
Removed the javac_maven script and batch file,
which had been previously deprecated.
---------------------------------------------------------------------------
Version 1.9.8, 9 November 2015
Field initialization warnings can now be suppressed for a single field at a
time, by placing @SuppressWarnings("initialization") on the field declaration.
Updated Maven instructions to no longer require a script.
Added an example of how to use the instructions under
docs/examples/MavenExample.
The javac_maven script (and batch file) are deprecated and will be
removed as of December 2015.
Fixed issues: 487, 500, 502.
---------------------------------------------------------------------------
Version 1.9.7, 24 October 2015
Fixed issues: 291, 474.
----------------------------------------------------------------------
Version 1.9.6, 8 October 2015
Fixed issue: 460.
----------------------------------------------------------------------
Version 1.9.5, 1 September 2015
Test Framework Updates:
* The test framework has been refactored to improve extensibility.
* Tests that previously extended ParameterizedCheckerTest or
CheckerTest should extend either CheckerFrameworkTest or nothing.
* If a test used methods that were previously found on
CheckerTest, you may find them in TestUtilities.
Fixed issues: 438, 457, 459.
----------------------------------------------------------------------
Version 1.9.4, 4 August 2015
Documented the notion of a compound checker, which depends on other checkers
and automatically runs them.
Renamed -AuseConservativeDefaultsForUnannotatedSourceCode command-line
option to -AuseSafeDefaultsForUnannotatedSourceCode
Moved the Checker Framework version control repository from Google Code to
GitHub, and from the Mercurial version control system to Git. If you have
cloned the old repository, then discard your old clone and create a new one
using this command:
git clone https://github.com/typetools/checker-framework.git
Fixed issues: 427, 429, 434, 442, 450.
----------------------------------------------------------------------
Version 1.9.3, 1 July 2015
New command-line options:
* -AsafeDefaultsForUnannotatedBytecode causes a checker to use conservative
defaults for .class files that were compiled without running the given
checker. Without this option, type-checking is unsound (that is, there
might be errors at run time even though the checker issues no warnings).
* -AuseConservativeDefaultsForUnannotatedSourceCode uses conservative
annotations for unannotated type uses. Use this when compiling a library in
which some but not all classes are annotated.
Various bug fixes and documentation improvements.
Fixed issues: 436.
----------------------------------------------------------------------
Version 1.9.2, 1 June 2015
Internationalization Format String Checker:
This new type-checker prevents use of incorrect internationalization
format strings.
Fixed issues: 434.
----------------------------------------------------------------------
Version 1.9.1, 1 May 2015
New FAQ entry:
"How does the Checker Framework compare with Eclipse's null analysis?"
----------------------------------------------------------------------
Version 1.9.0, 17 April 2015
Bug fixes for generics, especially type parameters:
* Manual chapter 21 "Generics and polymorphism" has been expanded,
and it gives more information on annotating type parameters.
* The qualifier on a type parameter (e.g. <@HERE T> ) only applies
to the lower bound of that type parameter. Previously it also
applied to the upper bound.
* Unannotated, unbounded wildcards are now qualified with the
annotations of the type parameter to which they are an argument.
See the new manual section 23.3.4 for more details.
* Warning "bound.type.incompatible" is issued if the lower bound of
a type parameter or wildcard is a supertype of its upper bound,
e.g. <@Nullable T extends @NonNull Object>
* Method type argument inference has been improved. Fewer warnings
should be issued when method invocations omit type arguments.
* Added command-line option -AprintVerboseGenerics to print more
information about type parameters and wildcards when they appear
in warning messages.
Reflection resolution:
If you supply the -AresolveReflection command-line option, the Checker
Framework attempts to resolve reflection. This reduces the number of
false positive warnings caused by reflection.
The documentation for the Map Key Checker has been moved into its own
chapter in the manual.
Fixed issues: 221, 241, 313, 314, 328, 335, 337, 338, 339, 355, 369,
376, 378, 386, 388, 389, 393, 403, 404, 413, 414, 415,
417, 418, 420, 421, 422, 426.
----------------------------------------------------------------------
Version 1.8.11, 2 March 2015
Fixed issues: 396, 400, 401.
----------------------------------------------------------------------
Version 1.8.10, 30 January 2015
Fixed issues: 37, 127, 350, 364, 365, 387, 392, 395.
----------------------------------------------------------------------
Version 1.8.9, 19 December 2014
Aliasing Checker:
This new type-checker ensures that an expression has no aliases.
Fixed issues: 362, 380, 382.
----------------------------------------------------------------------
Version 1.8.8, 26 November 2014
@SuppressWarnings("all") suppresses all Checker Framework warnings.
Implicit imports are deprecated, including the jsr308_imports environment
variable and the -jsr308_imports ... and -Djsr308.imports=... command-line
options.
For checkers bundled with the Checker Framework, package names may now
be omitted when running from the command line.
E.g.
javac -processor NullnessChecker MyFile.java
The Nullness checker supports Android annotations
android.support.annotation.NonNull and android.support.annotation.Nullable.
Fixed issues: 366, 379.
----------------------------------------------------------------------
Version 1.8.7, 30 October 2014
Fix performance regression introduced in release 1.8.6.
Nullness Checker:
* Updated Nullness annotations in the annotated JDK.
See issues: 336, 340, 374.
* String concatenations with null literals are now @NonNull
rather than @Nullable. See issue 357.
Fixed issues: 200, 300, 332, 336, 340, 357, 359, 373, 374.
----------------------------------------------------------------------
Version 1.8.6, 25 September 2014
Method Reference and Lambda Expression Support:
The Checker Framework now supports type-checking method references
and lambda expressions to ensure they are congruent with the
functional interface they are assigned to. The bodies of lambda expressions
are also now type-checked similarly to regular method bodies.
Dataflow:
* Handling of the following language features has been improved:
boxed Booleans, finally blocks, switch statements, type casts, enhanced
for loops
* Performance improvements
Annotations:
The checker-compat-qual.jar is now included with the Checker Framework
release. It can also be found in Maven Central at the coordinates:
org.checkerframework:checker-compat-qual
Annotations in checker-compat-qual.jar do not require Java 8 but
can only be placed in annotation locations valid in Java 7.
----------------------------------------------------------------------
Version 1.8.5, 29 August 2014
Eclipse Plugin:
All checkers in the Checker Framework manual now appear in the
Eclipse plugin by default. Users no longer have to include
checker.jar on their classpath to run any of the built-in checkers.
Improved Java 7 compatibility and introduced Java 7 compliant
annotations for the Nullness Checker. Please see the section on
"Class-file compatibility with Java 7" in the manual for more details.
Fixed issue 347.
----------------------------------------------------------------------
Version 1.8.4, 1 August 2014
The new Constant Value Checker is a constant propagation analysis: it
determines which variable values can be known at compile time.
Overriding methods now inherit declaration annotations from methods they
override, if the declaration annotation is meta-annotate with
@InheritedAnnotation. In particular, the purity annotations @SideEffectFree,
@Deterministic, and @Pure are inherited.
Command-line options:
* Renamed the -AenablePurity command-line flag to -AcheckPurityAnnotations.
* Added a command-line option -AoutputArgsToFile to output all command-line
options passed to the compiler to a file. This is especially useful when
debugging Maven compilation.
Annotations:
These changes are relevant only to people who wish to use pluggable
type-checking with a standard Java 7 toolset. (If you are not having
trouble with your Java 7 JVM, then you don't care about them.)
* Made clean-room reimplementations of nullness-related annotations
compatible with Java 7 JVMs, by removing TYPE_USE as a target.
* Added a new set of Java 7 compatibility annotations for the Nullness Checker
in the org.checkerframework.checker.nullness.compatqual package. These
annotations do not require Java 8 but can only be placed in annotation
locations valid in Java 7.
Java 8 support:
The Checker Framework no longer crashes when type-checking code with lambda
expressions, but it does issue a lambda.unsupported warning when
type-checking code containing lambda expressions. Full support for
type-checking lambda expressions will appear in a future release.
Fixed issue 343.
----------------------------------------------------------------------
Version 1.8.3, 1 July 2014
Updated the Initialization Checker section in the manual with
a new introduction paragraph.
Removed the Maven plugin section from the manual as the plugin is
no longer maintained and the final release was on June 2, 2014.
The javac_maven script (and batch file) are available to use
the Checker Framework from Maven.
Fixed issue 331.
----------------------------------------------------------------------
Version 1.8.2, 2 Jun 2014
Converted from using rt.jar to ct.sym for creating the annotated jdk.
Using the annotated jdk on the bootclasspath of a VM will cause the
vm to crash immediately.
The Lock Checker has been rewritten to support dataflow analysis.
It can now understand conditional expressions, for example, and
knows that "lock" is held in the body of statements like
"if (lock.tryLock()) { ... }"
The Lock Checker chapter in the manual has been updated accordingly
and describes the new Lock Checker features in detail.
Provided a javac_maven script (and batch file) to make it simpler
to use the Checker Framework from Maven. The Maven plug-in is deprecated
and will be removed as of July 1, 2014. Added an explanation of how
to use the script in the Maven section of the manual.
The Checker Framework installation instructions in the manual have
been updated.
Fixed issues: 312, 315, 316, 318, 319, 324, 326, 327.
----------------------------------------------------------------------
Version 1.8.1, 1 May 2014
Support to directly use the Java 8 javac in addition to jsr308-langtools.
Added docs/examples directory to checker-framework.zip.
New section in the manual describing the contents of checker-framework.zip.
Fixed issues: 204, 304, 320.
----------------------------------------------------------------------
Version 1.8.0, 2 April 2014
Added the GUI Effect Checker, which prevents "invalid thread access" errors
when a background thread in a GUI attempts to access the UI.
Changed the Java package of all type-checkers and qualifiers. The package
"checkers" has been renamed to "org.checkerframeork.checker". This
requires you to change your import statements, such as from
import checkers.nullness.quals.*;
to
import org.checkerframework.checker.nullness.qual.*;
It also requires you to change command-line invocations of javac, such as from
javac -processor checkers.nullness.NullnessChecker ...
to
javac -processor org.checkerframework.checker.nullness.NullnessChecker ...
Restructured the Checker Framework project and package layout,
using the org.checkerframework prefix.
----------------------------------------------------------------------
Version 1.7.5, 5 March 2014
Minor improvements to documentation and demos.
Support a few new units in the UnitsChecker.
----------------------------------------------------------------------
Version 1.7.4, 19 February 2014
Error messages now display the error key that can be used in
SuppressWarning annotations. Use -AshowSuppressWarningKeys to
show additional keys.
Defaulted type qualifiers are now stored in the Element and written
to the final bytecode.
Reduce special treatment of checkers.quals.Unqualified.
Fixed issues: 170, 240, 265, 281.
----------------------------------------------------------------------
Version 1.7.3, 4 February 2014
Fixes for Issues 210, 253, 280, 288.
Manual:
Improved discussion of checker guarantees.
Maven Plugin:
Added option useJavacOutput to display exact compiler output.
Eclipse Plugin:
Added the Format String Checker to the list of built-in checkers.
----------------------------------------------------------------------