forked from typetools/checker-framework
-
Notifications
You must be signed in to change notification settings - Fork 0
/
changelog.txt
3585 lines (2604 loc) · 128 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 3.6.0, August 3, 2020
The Interning Checker supports method annotations @EqualsMethod and
@CompareToMethod. Place them on methods like equals(), compareTo(), and
compare() to permit certain uses of == on non-interned values.
Added an overloaded version of NullnessUtil.castNonNull that takes an error message.
Added a new option `-Aversion` to print the version of the Checker Framework.
New CFGVisualizeLauncher command-line arguments:
* `--outputdir`: directory in which to write output files
* `--string`: print the control flow graph in the terminal
All CFGVisualizeLauncher command-line arguments now start with `--` instead of `-`.
Implementation details:
commonAssignmentCheck() now takes an additional argument. Type system
authors must update their overriding implementations.
Renamed GenericAnnotatedTypeFactory#addAnnotationsFromDefaultQualifierForUse to
#addAnnotationsFromDefaultForType and
BaseTypeValidator#shouldCheckTopLevelDeclaredType to
#shouldCheckTopLevelDeclaredOrPrimitiveType
Removed org.checkerframework.framework.test.FrameworkPer(Directory/File)Test classes.
Use CheckerFrameworkPer(Directory/File)Test instead.
Closed issues:
1395, 2483, 3207, 3223, 3224, 3313, 3381, 3422, 3424, 3428, 3429, 3438, 3442,
3443, 3447, 3449, 3461, 3482, 3485, 3495, 3500, 3528.
---------------------------------------------------------------------------
Version 3.5.0, July 1, 2020
Use "allcheckers:" instead of "all:" as a prefix in a warning suppression string.
Writing `@SuppressWarnings("allcheckers")` means the same thing as
`@SuppressWarnings("all")`, unless the `-ArequirePrefixInWarningSuppressions`
command-line argument is supplied. See the manual for details.
It is no longer necessary to pass -Astubs=checker.jar/javadoc.astub when
compiling a program that uses Javadoc classes.
Renamed command-line arguments:
* -AshowSuppressWarningKeys to -AshowSuppressWarningsStrings
The Signature Checker no longer considers Java keywords to be identifiers.
Renamed Signature Checker annotations:
@BinaryNameInUnnamedPackage => @BinaryNameWithoutPackage
@FieldDescriptorForPrimitiveOrArrayInUnnamedPackage => @FieldDescriptorWithoutPackage
@IdentifierOrArray => @ArrayWithoutPackage
Added new Signature Checker annotations:
@BinaryNameOrPrimitiveType
@DotSeparatedIdentifiersOrPrimitiveType
#IdentifierOrPrimitiveType
The Nullness Checker now treats `System.getProperty()` soundly. Use
`-Alint=permitClearProperty` to disable special treatment of
`System.getProperty()` and to permit undefining built-in system properties.
Class qualifier parameters: When a generic class represents a collection,
a user can write a type qualifier on the type argument, as in
`List<@Tainted Character>` versus `List<@Untainted Character>`. When a
non-generic class represents a collection with a hard-coded type (as
`StringBuffer` hard-codes `Character`), you can use the new class qualifier
parameter feature to distinguish `StringBuffer`s that contain different
types of characters.
The Dataflow Framework supports backward analysis. See its manual.
Implementation details:
Changed the types of some fields and methods from array to List:
* QualifierDefaults.validLocationsForUncheckedCodeDefaults()
* QualifierDefaults.STANDARD_CLIMB_DEFAULTS_TOP
* QualifierDefaults.STANDARD_CLIMB_DEFAULTS_BOTTOM
* QualifierDefaults.STANDARD_UNCHECKED_DEFAULTS_TOP
* QualifierDefaults.STANDARD_UNCHECKED_DEFAULTS_BOTTOM
Dataflow Framework: Analysis is now an interface. Added AbstractAnalysis,
ForwardAnalysis, ForwardTransferFunction, ForwardAnalysisImpl,
BackwardAnalysis, BackwardTransferFunction, and BackwardAnalysisImpl.
To adapt existing code:
* `extends Analysis<V, S, T>` => `extends ForwardAnalysisImpl<V, S, T>`
* `implements TransferFunction<V, S>` => `implements ForwardTransferFunction<V, S>`
In AbstractQualifierPolymorphism, use AnnotationMirrors instead of sets of
annotation mirrors.
Renamed meta-annotation SuppressWarningsKeys to SuppressWarningsPrefix.
Renamed SourceChecker#getSuppressWarningsKeys(...) to getSuppressWarningsPrefixes.
Renamed SubtypingChecker#getSuppressWarningsKeys to getSuppressWarningsPrefixes.
Added GenericAnnotatedTypeFactory#postAnalyze, changed signature of
GenericAnnotatedTypeFactory#handleCFGViz, and removed CFAbstractAnalysis#visualizeCFG.
Removed methods and classes marked deprecated in release 3.3.0 or earlier.
Closed issues:
#1362, #1727, #2632, #3249, #3296, #3300, #3356, #3357, #3358, #3359, #3380.
---------------------------------------------------------------------------
Version 3.4.1, June 1, 2020
-Ainfer now takes an argument:
* -Ainfer=jaifs uses .jaif files to store the results of whole-program inference.
* -Ainfer=stubs uses .astub files to store the results of whole-program inference.
* -Ainfer is deprecated but is the same as -Ainfer=jaifs, for backwards compatibility.
New command-line option:
-AmergeStubsWithSource If both a stub file and a source file are available, use both.
Closed issues:
#2893, #3021, #3128, #3160, #3232, #3277, #3285, #3289, #3295, #3302, #3305,
#3307, #3310, #3316, #3318, #3329.
---------------------------------------------------------------------------
Version 3.4.0, May 3, 2020
The annotated jdk8.jar is no longer used. You should remove any occurrence of
-Xbootclasspath/p:.../jdk8.jar
from your build scripts. Annotations for JDK 8 are included in checker.jar.
The Returns Receiver Checker enables documenting and checking that a method
returns its receiver (i.e., the `this` parameter).
Closed issues:
#3267, #3263, #3217, #3212, #3201, #3111, #3010, #2943, #2930.
---------------------------------------------------------------------------
Version 3.3.0, April 1, 2020
New command-line options:
-Alint=trustArrayLenZero trust @ArrayLen(0) annotations when determining
the type of Collections.toArray.
Renamings:
-AuseDefaultsForUncheckedCode to -AuseConservativeDefaultsForUncheckedCode
The old name works temporarily but will be removed in a future release.
For collection methods with `Object` formal parameter type, such as
contains, indexOf, and remove, the annotated JDK now forbids null as an
argument. To make the Nullness Checker permit null, pass
`-Astubs=collection-object-parameters-may-be-null.astub`.
The argument to @SuppressWarnings can be a substring of a message key that
extends at each end to a period or an end of the key. (Previously, any
substring worked, including the empty string which suppressed all warnings.
Use "all" to suppress all warnings.)
All postcondition annotations are repeatable (e.g., `@EnsuresNonNull`,
`@EnsuresNonNullIf`, ...).
Renamed wrapper annotations (which users should not write):
* `@DefaultQualifiers` => `@DefaultQualifier.List`
* `@EnsuresQualifiersIf` => `@EnsuresQualifierIf.List`
* `@EnsuresQualifiers` => `@EnsuresQualifier.List`
* `@RequiresQualifiers` => `@RequiresQualifier.List`
Implementation details:
* Removed `@DefaultInUncheckedCodeFor` and
`@DefaultQualifierInHierarchyInUncheckedCode`.
* Renamings:
applyUncheckedCodeDefaults() to applyConservativeDefaults()
useUncheckedCodeDefault() to useConservativeDefault()
AnnotatedTypeReplacer to AnnotatedTypeCopierWithReplacement
AnnotatedTypeMerger to AnnotatedTypeReplacer
* Deprecated the `framework.source.Result` class; use `DiagMessage` or
`List<DiagMessage>` instead. If you were creating a `Result` just to
pass it to `report`, then call new methods `reportError` and
`reportWarning` instead.
* AbstractTypeProcessor#typeProcessingOver() always gets called.
Closed issues:
#1307, #1881, #1929, #2432, #2793, #3040, #3046, #3050, #3056, #3083, #3124,
#3126, #3129, #3132, #3139, #3149, #3150, #3167, #3189.
---------------------------------------------------------------------------
Version 3.2.0, March 2, 2020
@SuppressWarnings("initialization") suppresses only warnings whose key
contains "initialization". Previously, it suppressed all warnings issued
by the Nullness Checker or the Initialization Checker.
Closed issues:
#2719, #3001, #3020, #3069, #3093, #3120.
---------------------------------------------------------------------------
Version 3.1.1, February 3, 2020
New command-line options:
-AassumeDeterministic Unsoundly assume that every method is deterministic
-AassumePure Unsoundly assume that every method is pure
Renamed -Anocheckjdk to -ApermitMissingJdk.
The old version still works, for backward compatibility.
Renamed -Alint=forbidnonnullarraycomponents to
-Alint=soundArrayCreationNullness. The old version still works, for
backward compatibility.
Implementation details:
* Deprecated QualifierHierarchy#getTypeQualifiers.
* Deprecated Analysis#Analysis(ProcessingEnvironment) and Analysis#Analysis(T,
int, ProcessingEnvironment); use Analysis#Analysis(), Analysis#Analysis(int),
Analysis#Analysis(T), and Analysis#Analysis(T, int) instead.
* Renamed SourceChecker#getMessages to getMessagesProperties.
* Renamed one overload of SourceChecker.printMessages to printOrStoreMessage.
Closed issues:
#2181, #2975, #3018, #3022, #3032, #3036, #3037, #3038, #3041, #3049, #3055,
#3076.
---------------------------------------------------------------------------
Version 3.1.0, January 3, 2020
Command-line option -AprintGitProperties prints information about the git
repository from which the Checker Framework was compiled.
Implementation details:
* Removed static cache in AnnotationUtils#areSameByClass and added
AnnotatedTypeFactory#areSameByClass that uses an instance cache.
* Removed static cache in AnnotationBuilder#fromName and #fromClass.
* ContractsUtils#getPreconditions takes an ExecutableElement as an argument.
* ContractsUtils#getContracts returns a Set.
* Moved ContractUtils.Contract to outer level.
* Renamed ConditionalPostcondition#annoResult to ConditionalPostcondition#resultValue.
Closed issues:
#2867, #2897, #2972.
---------------------------------------------------------------------------
Version 3.0.1, December 2, 2019
New command-line option for the Constant Value Checker
`-AnoNullStringsConcatenation` unsoundly assumes that every operand of a String
concatenation is non-null.
Implementation details:
* Moved AnnotatedTypes#hasTypeQualifierElementTypes to AnnotationUtils.
* Deprecated AnnotatedTypes#isTypeAnnotation and AnnotatedTypes#hasTypeQualifierElementTypes.
Closed issues:
#945, #1224, #2024, #2744, #2809, #2815, #2818, #2830, #2840, #2853, #2854,
#2865, #2873, #2874, #2878, #2880, #2886, #2888, #2900, #2905, #2919, #2923.
---------------------------------------------------------------------------
Version 3.0.0, November 1, 2019
The Checker Framework works on both JDK 8 and JDK 11.
* Type annotations for JDK 8 remain in jdk8.jar.
* Type annotations for JDK 11 appear in stub files in checker.jar.
Removed the @PolyAll annotation.
Implementation details:
* Removed all previously deprecated methods.
* AnnotatedTypeFactory#getFnInterfaceFromTree now returns an AnnotatedExecutableType.
* AnnotationUtils#areSame and #areSameByName now only accept non-null
AnnotationMirrors
Closed issues:
#1169, #1654, #2081, #2703, #2739, #2749, #2779, #2781, #2798, #2820, #2824,
#2829, #2842, #2845, #2848.
---------------------------------------------------------------------------
Version 2.11.1, October 1, 2019
The manual links to the Object Construction Checker.
Closed issues:
#1635, #2718, #2767.
---------------------------------------------------------------------------
Version 2.11.0, August 30, 2019
The Checker Framework now uses the Java 9 javac API. The manual describes
how to satisfy this dependency, in a way that works on a Java 8 JVM.
Running the Checker Framework on a Java 9 JVM is not yet supported.
---------------------------------------------------------------------------
Version 2.10.1, August 22, 2019
Closed issues:
#1152, #1614, #2031, #2482, #2543, #2587, #2678, #2686, #2690, #2712, #2717,
#2713, #2721, #2725, #2729.
---------------------------------------------------------------------------
Version 2.10.0, August 1, 2019
Removed the NullnessRawnessChecker. Use the NullnessChecker instead.
Closed issues:
#435, #939, #1430, #1687, #1771, #1902, #2173, #2345, #2470, #2534, #2606,
#2613, #2619, #2633, #2638.
---------------------------------------------------------------------------
Version 2.9.0, July 3, 2019
Renamed the Signedness Checker's @Constant annotation to @SignednessGlb.
Introduced an alias, @SignedPositive, for use by programmers.
Annotated the first argument of Opt.get and Opt.orElseThrow as @NonNull.
Removed meta-annotation @ImplicitFor:
* Use the new meta-annotation @QualifierForLiteral to replace
@ImplicitFor(literals, stringpatterns).
* Use the meta-annotation @DefaultFor to replace @ImplicitFor(typeKinds,
types).
* Use the new meta-annotation @UpperBoundFor to specify a qualifier upper
bound for certain types.
* You can completely remove
@ImplicitFor(typeNames = Void.class, literals = LiteralKind.NULL)
on bottom qualifiers.
@DefaultFor(types = Void.class)
and
@QualifierForLiterals(literals = LiteralKind.NULL)
are added to the bottom qualifier by default.
Add @DefaultQualifierOnUse and @NoDefaultQualifierOnUse type declaration annotations
New/changed error message keys:
* initialization.static.fields.uninitialized for uninitialized static fields
* unary.increment.type.incompatible and unary.decrement.type.incompatible
replace some occurrences of compound.assignment.type.incompatible
Implementation details:
* Renamed QualifierPolymorphism#annotate methods to resolve
* Renamed ImplicitsTreeAnnotator to LiteralTreeAnnotator
* Renamed ImplicitsTypeAnnotator to DefaultForTypeAnnotator
* Removed TypeUseLocation.TYPE_DECLARATION
* Removed InheritedFromClassAnnotator, replace with DefaultQualifierForUseTypeAnnotator
* Rename TreeUtils.isSuperCall and TreeUtils.isThisCall to
isSuperConstructorCall and isThisConstructorCall
Closed issues:
#2247, #2391, #2409, #2434, #2451, #2457, #2468, #2484, #2485, #2493, #2505,
#2536, #2537, #2540, #2541, #2564, #2565, #2585.
---------------------------------------------------------------------------
Version 2.8.2, June 3, 2019
The Signature Checker supports a new type, @FqBinaryName.
Added a template for a repository that you can use to write a custom checker.
Linked to the Checker Framework Gradle plugin, which makes it easy to run
a checker on a project that is built using the Gradle build tool.
Implementation detail: deprecated TreeUtils.skipParens in favor of
TreeUtils.withoutParens which has the same specification.
Closed issues:
#2291, #2406, #2469, #2477, #2479, #2480, #2494, #2499.
---------------------------------------------------------------------------
Version 2.8.1, May 1, 2019
Moved text about the Purity Checker into its own chapter in the manual.
Closed issues:
#660, #2030, #2223, #2240, #2244, #2375, #2407, #2410, #2415, #2420, #2421,
#2446, #2447, #2460, #2462.
---------------------------------------------------------------------------
Version 2.8.0, April 3, 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.
New CONSTRUCTOR_RESULT enum constant in TypeUseLocation makes it possible to
set default annotations for constructor results.
Clarified the semantics of annotations on class and constructor declarations.
See Section 25.5 "Annotations on classes and constructors" in the manual.
Interface changes:
* Added protected methods to BaseTypeVisitor so that checkers can change the
checks for annotations on classes, constructor declarations, and constructor
invocations.
* Removed BaseTypeVisitor#checkAssignability and BaseTypeVisitor#isAssignable
methods.
* Renamed AnnotatedTypeFactory#getEnclosingMethod to
AnnotatedTypeFactory#getEnclosingElementForArtificialTree
Closed issues:
#2159, #2230, #2318, #2324, #2330, #2334, #2343, #2344, #2353, #2366, #2367,
#2370, #2371, #2385.
---------------------------------------------------------------------------
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.
---------------------------------------------------------------------------