forked from typetools/checker-framework
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathchangelog.txt
2635 lines (2013 loc) · 95.5 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 2.1.0, 1 July 2016
The new Signedness Checker prevents mixing of unsigned and signed
values and prevents meaningless operations on unsigned values.
---------------------------------------------------------------------------
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/checker/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.
Nullness Checker supports 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
http://types.cs.washington.edu/checker-framework/current/checker-framework-manual.html#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
checker/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 checker/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.
----------------------------------------------------------------------
Version 1.7.2, 2 January 2014
Fixed issues: 289, 292, 295, 296, 298.
----------------------------------------------------------------------
Version 1.7.1, 9 December 2013
Fixes for Issues 141, 145, 257, 261, 269, 267, 275, 278, 282, 283, 284, 285.
Implementation details:
Renamed AbstractBasicAnnotatedTypeFactory to GenericAnnotatedTypeFactory
----------------------------------------------------------------------
Version 1.7.0, 23 October 2013
Format String Checker:
This new type-checker ensures that format methods, such as
System.out.printf, are invoked with correct arguments.
Renamed the Basic Checker to the Subtyping Checker.
Reimplemented the dataflow analysis that performs flow-sensitive type
refinement. This fixes many bugs, improves precision, and adds features.
Many more Java expressions can be written as annotation arguments.
Initialization Checker:
This new abstract type-checker verifies initialization properties. It
needs to be combined with another type system whose proper initialization
should be checked. This is the new default initialzation checker for the
Nullness Checker. It is based on the "Freedom Before Commitment" approach.
Renamed method annotations used by the Nullness Checker:
@AssertNonNullAfter => @EnsuresNonNull
@NonNullOnEntry => @RequiresNonNull
@AssertNonNullIfTrue(...) => @IfMethodReturnsFalseEnsuresNonNull
@AssertNonNullIfFalse(...) => @IfMethodReturnsFalseEnsuresNonNull
@LazyNonNull => @MonotonicNonNull
@AssertParametersNonNull => [no replacement]
Removed annotations used by the Nullness Checker:
@AssertParametersNonNull
Renamed type annotations used by the Initialization Checker:
@NonRaw => @Initialized
@Raw => @UnknownInitialization
new annotation @UnderInitialization
The old Initialization Checker (that uses @Raw and @NonRaw) can be invoked
by invoking the NullnessRawnessChecker rather than the NullnessChecker.
Purity (side effect) analysis uses new annotations @SideEffectFree,
@Deterministic, and @TerminatesExecution; @Pure means both @SideEffectFree
and @Deterministic.
Pre- and postconditions about type qualifiers are available for any type system
through @RequiresQualifier, @EnsuresQualifier and @EnsuresQualifierIf. The
contract annotations for the Nullness Checker (e.g. @EnsuresNonNull) are now
only a special case of these general purpose annotations.
The meta-annotations @PreconditionAnnotation, @PostconditionAnnotation, and
@ConditionalPostconditionAnnotation can be used to create more special-case
annotations for other type systems.
Renamed assertion comment string used by all checkers:
@SuppressWarnings => @AssumeAssertion
To use an assert statement to suppress warnings, the assertion message must
include the string "@AssumeAssertion(warningkey)". Previously, just the
warning key sufficed, but the string @SuppressWarnings(warningkey) was
recommended.
New command-line options:
-AonlyDefs and -AonlyUses complement existing -AskipDefs and -AskipUses
-AsuppressWarnings Suppress warnings matching the given key
-AassumeSideEffectFree Unsoundly assume that every method is side-effect-free
-AignoreRawTypeArguments Ignore subtype tests for type arguments that
were inferred for a raw type
-AenablePurity Check the bodies of methods marked as pure
(@SideEffectFree or @Deterministic)
-AsuggestPureMethods Suggest methods that could be marked as pure
-AassumeAssertionsAreEnabled, -AassumeAssertionsAreDisabled Whether to
assume that assertions are enabled or disabled
-AconcurrentSemantics Whether to assume concurrent semantics
-Anocheckjdk Don't err if no annotated JDK can be found
-Aflowdotdir Create an image of the control flow graph
-AinvariantArrays replaces -Alint=arrays:invariant
-AcheckCastElementType replaces -Alint=cast:strict
Manual:
New manual section about array types.
New FAQ entries: "Which checker should I start with?", "How can I handle
typestate, or phases of my program with different data properties?",
"What is the meaning of a type qualifier at a class declaration?"
Reorganized FAQ chapter into sections.
Many other improvements.
----------------------------------------------------------------------
Version 1.6.7, 28 August 2013
User-visible framework improvements:
Improve the error message produced by -Adetailedmsgtext
Bug fixes:
Fix issue #245: anonymous classes were skipped by default
----------------------------------------------------------------------
Version 1.6.6, 01 August 2013
Documentation:
The Checker Framework manual has been improved. Changes include:
more troubleshooting tips to the Checker Framework manual, an improved discussion on qualifier bounds, more examples, improved formatting, and more.
An FAQ entry has been added to discuss JSR305.
Minor clarifications have been added to the Checker Framework tutorial.
----------------------------------------------------------------------
Version 1.6.5, 01 July 2013
User-visible framework improvements:
Stub files now support static imports.
Maven plugin:
Maven plugin will now issue a warning rather than quit when zero checkers are specified in a project's pom.xml.
Documentation:
Improved the Maven plugin instructions in the Checker Framework manual.
Added documentation for the -XDTA:noannotationsincomments compiler flag.
Internal framework improvements:
Improved Maven-plugin developer documentation.
----------------------------------------------------------------------
Version 1.6.4, 01 June 2013
User-visible framework improvements:
StubGenerator now generates stubs that can be read by the StubParser.
Maven plugin:
The Maven plugin no longer requires the Maven project's output directory to exist in order to run the Checker Framework. However, if you ask the Checker Framework to generate class files then the output directory will be created.
Documentation:
Improved the Maven plugin instructions in the Checker Framework manual.
Improved the discussion of why to define both a bottom and a top qualifier in the Checker Framework manual.
Update FAQ to discuss that some other tools incorrectly interpret array declarations.
----------------------------------------------------------------------
Version 1.6.3, 01 May 2013
Eclipse plugin bug fixes:
The javac argument files used by the Eclipse plugin now properly escape file paths. Windows users should no longer encounter errors about missing built-in checkers.
Documentation:
Add FAQ "What is the meaning of an annotation after a type?"
----------------------------------------------------------------------
Version 1.6.2, 04 Apr 2013
Eclipse plugin:
The "Additional compiler parameters" text field has now been replaced by a list. Parameters in this list may be activated/deactivated via checkbox.
Eclipse plugin bug fixes:
Classpaths and source files should now be correctly quoted when they contain spaces.
Internal framework improvements:
Update pom files to use the same update-version code as the Checker Framework "web" ant task. Remove pom specific update-version code.
Update build ant tasks to avoid re-running targets when executing tests from the release script.
----------------------------------------------------------------------
Version 1.6.1, 01 Mar 2013
User-visible framework improvements:
A number of error messages have been clarified.
Stub file now supports type annotations in front and after method type variable declarations.
You may now specify custom paths to javac.jar and jdk7.jar on the command line for non-standard installations.
Internal framework improvements:
Add shouldBeApplied method to avoid unnecessary scans in DefaultApplier and avoid annotating void types.
Add createQualifierDefaults and createQualifierPolymorphism factory methods.
Maven plugin:
Put Checker Framework jars at the beginning of classpath.
Added option to compile code in order to support checking for multi-module projects.
The plugin no longer copies the various Checker Framework maven artifacts to one location but instead takes advantage of the new custom path options for javac.jar and jdk7.jar.
The maven plugin no longer attempts to resolve jdk6.jar
Eclipse plugin:
Put Checker Framework jars at the beginning of classpath.
All files selected from a single project can now be checked. The previous behavior only checked the entire project or one file depending on the type of the first file selected.
Documentation:
Fixed broken links and incomplete URLs in the Checker Framework Manual.
Update FAQ to discuss that some other tools incorrectly interpret array declarations.
Bug fixes
----------------------------------------------------------------------
Version 1.6.0, 1 Feb 2013
User-visible framework improvements:
It is possible to use enum constants in stub files without requiring the fully qualified name, as was previously necessary.
Support build on a stock Java 8 OpenJDK.
Adapt to underlying jsr308-langtools changes.
The most visible change is syntax for fully-qualified types, from @A java.lang.Object to java.lang.@A Object.
JDK 7 is now required. The Checker Framework does not build or run on JDK 6.
Documentation:
A new tutorial is available at http://types.cs.washington.edu/checker-framework/tutorial/
----------------------------------------------------------------------
Version 1.5.0, 14 Jan 2013
User-visible framework improvements:
To invoke the Checker Framework, call the main method of class
CheckerMain, which is a drop-in replacement for javac. This replaces
all previous techniques for invoking the Checker Framework. Users
should no longer provide any Checker Framework jars on the classpath or
bootclasspath. jsr308-all.jar has been removed.
The Checker Framework now works with both JDK 6 and JDK 7, without need
for user customization. The Checker Framework determines the
appropriate annotated JDK to use.
All jar files now reside in checker-framework/checkers/binary/.
Maven plugin:
Individual pom files (and artifacts in the Maven repository) for all
Checker Framework jar files.
Avoid too-long command lines on Windows.
See the Maven section of the manual for more details.
Eclipse plugin:
Avoid too-long command lines on Windows.
Other bug fixes and interface improvements.
Other framework improvements:
New -Adetailedmsgtext command-line option, intended for use by IDE plugins.
----------------------------------------------------------------------
Version 1.4.4, 1 Dec 2012
Internal framework improvements:
Add shutdown hook mechanism and use it for -AresourceStats resource
statistics flag.
Add -AstubWarnIfNotFound and -AstubDebug options to improve
warnings and debug information from the stub file parsing.
Ignore case when comparing error suppression keys.
Support the bottom type as subtype of any wildcard type.
Tool Integration Changes
The Maven plugin id has been changed to reflect standard Maven
naming conventions.
Eclipse and Maven plugin version numbers will now
track the Checker Framework version numbers.
Bug fixes.
----------------------------------------------------------------------
Version 1.4.3, 1 Nov 2012
Clarify license:
The Checker Framework is licensed under the GPL2. More permissive
licenses apply to annotations, tool plugins (Maven, Eclipse),
external libraries included with the Checker Framework, and examples in
the Checker Framework Manual.
Replaced all third-party annotations by cleanroom implementations, to
avoid any potential problems or confusion with licensing.
Aliased annotations:
Clarified that there is no need to rewrite your program. The Checker
Framework recognizes dozens of annotations used by other tools.
Improved documentation of Units Checker and Gradle Integration.
Improved developer documentation of Eclipse and Maven plugins.
Bug fixes.
----------------------------------------------------------------------
Version 1.4.2, 16 Oct 2012
External tool support:
Eclipse plug-in now works properly, due to many fixes
Regex Checker:
New CheckedPatternSyntaxException added to RegexUtil
Support new foreign annotations:
org.eclipse.jdt.annotation.Nullable
org.eclipse.jdt.annotation.NonNull
New FAQ: "What is a receiver?"
Make annotations use 1-based numbering for formal parameters:
Previously, due to a bug the annotations used 0-based numbering.
This change means that you need to rewrite annotations in the following ways:
@KeyFor("#3") => @KeyFor("#4")
@AssertNonNullIfTrue("#0") => @AssertNonNullIfTrue("#1")
@AssertNonNullIfTrue({"#0", "#1"}) => @AssertNonNullIfTrue({"#1", "#2"})
@AssertNonNullAfter("get(#2)") => @AssertNonNullAfter("get(#3)")
This command:
find . -type f -print | xargs perl -pi -e 's/("#)([0-9])(")/$1.($2+1).$3/eg'
handles the first two cases, which account for most uses. You would need
to handle any annotations like the last two cases in a different way,
such as by running
grep -r -n -E '\("[^"]+#[0-9][^A-Za-z]|\("#[0-9][^"]' .
and making manual changes to the matching lines. (It is possible to
provide a command that handles all cases, but it would be more likely to
make undesired changes.)
Whenever making automated changes, it is wise to save a copy of your
codebase, then compare it to the modified version so you can undo any
undesired changes. Also, avoid running the automated command over version
control files such as your .hg, .git, .svn, or CVS directory.
----------------------------------------------------------------------
Version 1.4.1, 29 Sep 2012
User-visible framework improvements:
Support stub files contained in .jar files.
Support aliasing for declaration annotations.
Updated the Maven plugin.
Code refactoring:
Make AnnotationUtils and AnnotatedTypes into stateless utility classes.
Instead, provide the necessary parameters for particular methods.
Make class AnnotationBuilder independent of AnnotationUtils.
Remove the ProcessingEnvironment from AnnotatedTypeMirror, which was
hardly used and can be replaced easily.
Used more consistent naming for a few more fields.
Moved AnnotatedTypes from package checkers.types to checkers.utils.
this required making a few methods in AnnotatedTypeFactory public,
which might require changes in downstream code.
Internal framework improvements:
Fixed Issues 136, 139, 142, 156.
Bug fixes and documentation improvements.
----------------------------------------------------------------------
Version 1.4.0, 11 Sep 2012
User-visible framework improvements:
Defaulting:
@DefaultQualifier annotations now use a Class instead of a String,
preventing simple typo errors.
@DefaultLocation extended with more constants.
TreeAnnotator propagates the least-upper-bound of the operands of
binary/compound operations, instead of taking the default qualifier.
Stub files now ignore the return type, allowing for files automatically
generated from other formats.
Type factories and type hierarchies:
Simplify AnnotatedTypeFactory constructors.
Add a GeneralAnnotatedTypeFactory that supports multiple type systems.
Improvements to QualifierHierarchy construction.
Type-checking improvements:
Propagate annotations from the sub-expression of a cast to its result.
Better handling of assignment context and improved inference of
array creation expressions.
Optional stricter checking of casts to array and generic types using
the new -Alint=cast:strict flag.
This will become the default in the future.
Code reorganization:
SourceChecker.initChecker no longer has a ProcessingEnvironment
parameter. The environment can now be accessed using the standard
processingEnv field (instead of the previous env field).
Classes com.sun.source.util.AbstractTypeProcessor and
checkers.util.AggregateChecker are now in package checkers.source.
Move isAssignable from the BaseTypeChecker to the BaseTypeVisitor; now
the Checker only consists of factories and logic is contained in the
Visitor.
Warning and error messages:
Issue a warning if an unsupported -Alint option is provided.
Improved error messages.
Maven plugin now works.
Nullness Checker:
Only allow creation of (implicitly) non-null objects.
Optionally forbid creation of arrays with @NonNull component type,
when flag -Alint=arrays:forbidnonnullcomponents is supplied.
This will become the default in the future.
Internal framework improvements:
Enable assertion checking.
Improve handling of annotated type variables.
Assignment context is now a type, not a tree.
Fix all compiler warnings.
----------------------------------------------------------------------
Version 1.3.1, 21 Jul 2012
Installation:
Clarify installation instructions for Windows. Remove javac.bat, which
worked for running distributed checkers but not for creating new checkers.
User-visible framework improvements:
Implement @PolyAll qualifier to vary over multiple type systems.
The Checker Framework is unsound due to Java's covariant array subtyping.
You can enable invariant array subtyping (for qualifiers only, not for
base Java types) with the command-line option -Alint=arrays:invariant.
This will become the default in the future.
Internal framework improvements:
Improve defaulting for multiple qualifier hierarchies.
Big refactoring of how qualifier hierarchies are built up.
Improvements to error handling output for unexpected exceptions.
Bug fixes and documentation improvements.
----------------------------------------------------------------------
Version 1.3.0, 3 Jul 2012
Annotation syntax changes, as mandated by the latest Type Annotations
(JSR 308) specification. The most important ones are:
- New receiver syntax, using "this" as a formal parameter name:
ReturnType methodname(@ReceiverAnnotation MyClass this, ...) { ... }
- Changed @Target default to be the Java 1.5 values
- UW extension: in addition to annotations in comments, support
special /*>>> */ comments to hide multiple tokens.
This is useful for the new receiver syntax and for import statements.
Framework improvements:
Adapt to annotation storage changes in jsr308-langtools 1.3.0.
Move type validation methods from the BaseTypeChecker to BaseTypeVisitor.
----------------------------------------------------------------------
Version 1.2.7, 14 May 2012
Regex Checker:
Add basic support for the concatenation of two non-regular expressions
that produce a valid regular expression.
Support "isRegex" in flow inference.
Framework improvements:
New @StubFiles annotation declaratively adds stub files to a checker.
Internal bug fixes:
Respect skipDefs and skipUses in NullnessFlow.
Support package annotations in stub files.
Better support for enums in annotation attributes.
Cleanups to how implicit receivers are determined.
----------------------------------------------------------------------
Version 1.2.6, 18 Mar 2012
Nullness Checker:
Correctly handle unboxing in more contexts (if, switch (Issue 129),
while loops, ...)
Regex Checker:
Add capturing groups parameter to Regex qualifier.
Count groups in String literals and String concatenation.
Verify group number to method calls that take a capturing group
number.
Update RegexUtil methods to take optional groups parameter.
Modify regex qualifier hierarchy to support groups parameter.
Add special case for Pattern.compile when called with Pattern.LITERAL flag.
Internal bug fixes:
Improve flow's support of annotations with parameters.
Fix generics corner cases (Issues 131, 132, 133, 135).
Support type annotations in annotations and type-check annotations.
Improve reflective look-up of visitors and factories.