blob: 081f8969cde4170eea3a1a2a66412af19b31f615 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<title>Annotation File Utilities Changelog</title>
</head>
<body>
<h1>Annotation File Utilities Changelog</h1>
<p>
This is the changelog for the
<a href="./">Annotation File Utilities</a>.
</p>
<ul>
<li>
Version 3.6.45 (released September 5, 2017):
<ul>
<li>Minor bug fixes and improvements.</li>
</ul>
</li>
<li>
Version 3.6.44 (released August 3, 2017):
<ul>
<li>Minor bug fixes and improvements.</li>
</ul>
</li>
<li>
Version 3.6.43 (released July 3, 2017):
<ul>
<li>Minor bug fixes and improvements.</li>
</ul>
</li>
<li>
Version 3.6.42 (released June 1, 2017):
<ul>
<li>Minor bug fixes and improvements.</li>
</ul>
</li>
<li>
Version 3.6.41 (released May 1, 2017):
<ul>
<li>Minor bug fixes and improvements.</li>
</ul>
</li>
<li>
Version 3.6.40 (released April 3, 2017):
<ul>
<li>Minor bug fixes and improvements.</li>
</ul>
</li>
<li>
Version 3.6.39 (released March 1, 2017):
<ul>
<li>Minor bug fixes and improvements.</li>
</ul>
</li>
<li>
Version 3.6.38 (released Jan 20, 2017):
<ul>
<li> The Annotation File Utilities webpage has moved to
<a href="https://checkerframework.org/annotation-file-utilities/">https://checkerframework.org/annotation-file-utilities/</a>.
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.</li>
</ul>
</li>
<li>
Version 3.6.37 (released Jan 3, 2017):
<ul>
<li>Minor bug fixes and improvements.</li>
</ul>
</li>
<li>
Version 3.6.36 (released Dec 1, 2016):
<ul>
<li>Minor bug fixes and improvements.</li>
</ul>
</li>
<li>
Version 3.6.35 (released Nov 2, 2016):
<ul>
<li>Minor bug fixes and improvements.</li>
</ul>
</li>
<li>
Version 3.6.34 (released Oct 3, 2016):
<ul>
<li>Minor bug fixes and improvements.</li>
</ul>
</li>
<li>
Version 3.6.33 (released Sep 16, 2016):
<ul>
<li>Minor bug fixes and improvements.</li>
</ul>
</li>
<li>
Version 3.6.32 (released Sep 1, 2016):
<ul>
<li>Minor bug fixes and improvements.</li>
</ul>
</li>
<li>
Version 3.6.31 (released August 1, 2016):
<ul>
<li>Minor bug fixes and improvements.</li>
</ul>
</li>
<li>
Version 3.6.30 (released July 1, 2016):
<ul>
<li>Minor bug fixes and improvements.</li>
</ul>
</li>
<li>
Version 3.6.29 (released Jun 1, 2016):
<ul>
<li>
extract-annotations no longer puts package annotations on non-existent class,
fixing Issue <a href="https://github.com/typetools/annotation-tools/issues/117">#117</a>.
</li>
<li>
Closes issue <a href="https://github.com/typetools/annotation-tools/issues/120">#120</a>.
</li>
</ul>
Version 3.6.28 (released May 1, 2016):
<ul>
<li>
<code>AScene</code> now has a copy constructor and implements
<code>Cloneable</code>.
</li>
</ul>
</li>
<li>
Version 3.6.27 (released Apr 1, 2016):
<ul>
<li>
The annotation file format permits use of a class name, in addition to
<code>&lt;init&gt;</code>, to specify a constructor.
</li>
<li>
Closes issues
<a href="https://github.com/typetools/annotation-tools/issues/70">#70</a>
and
<a href="https://github.com/typetools/annotation-tools/issues/88">#88</a>.
</li>
</ul>
</li>
<li>
Version 3.6.26 (released Mar 1, 2016):
<ul>
<li>Avoids reinserting an annotation that already exists in comments, fixing Issue
<a href="https://github.com/typetools/annotation-tools/issues/114">#114</a>.</li>
</ul>
</li>
<li>
Version 3.6.25 (released Feb 1, 2016):
<ul>
<li>Uses system javac to compile the executable program, thus enabling Java 7 execution.</li>
<li>Clears set of required imports after processing each source file, fixing Issue
<a href="https://github.com/typetools/annotation-tools/issues/111">#111</a>.</li>
<li>Escapes String fields of annotations, fixing Issue
<a href="https://github.com/typetools/annotation-tools/issues/112">#112</a>.</li>
</ul>
</li>
<li>
Version 3.6.24 (released Jan 4, 2016):
<ul>
<li>Fixes Issue
<a href="https://github.com/typetools/annotation-tools/issues/108">#108</a>
by adding a <code>LICENSE.txt</code> file.</li>
<li>Fixes offset calculation for wide JVM instructions.</li>
<li>Makes minor improvements to build process.</li>
</ul>
</li>
<li>
Version 3.6.23 (released Dec 1, 2015):
<ul>
<li>Fixes Issue
<a href="https://github.com/typetools/annotation-tools/issues/106">#106</a>.</li>
<li>Makes minor improvements to documentation and build process.</li>
</ul>
</li>
<li>
Version 3.6.22 (released Nov 9, 2015):
<ul>
<li>Minor bug fixes and improvements.</li>
</ul>
</li>
<li>
Version 3.6.21 (released Oct 24, 2015):
<ul>
<li>Minor bug fixes and improvements.</li>
</ul>
</li>
<li>
Version 3.6.20 (released Oct 8, 2015):
<ul>
<li>Minor bug fixes and improvements.</li>
</ul>
</li>
<li>
Version 3.6.19 (released Sep 1, 2015):
<ul>
<li>Avoids importing the same annotation name from multiple packages (Issue
<a href="https://github.com/typetools/annotation-tools/issues/101">#101</a>).</li>
<li>Fixes some bugs (including Issues
<a href="https://github.com/typetools/annotation-tools/issues/100">#100</a> and
<a href="https://github.com/typetools/annotation-tools/issues/102">#102</a>)
pertaining to <code>extends</code> clause generation.</li>
</ul>
</li>
<li>
Version 3.6.18 (released Aug 4, 2015):
<ul>
<li>
Moved the Annotation Tools version control repository from Google Code
to GitHub, and from the Mercurial version control system to Git.
If you have cloned the version control repository, then discard your
old clone and create a new one using this command:
<pre> git clone https://github.com/typetools/annotation-tools.git</pre>
</li>
<li>Fixes some errors involving default class and method bound insertion.</li>
</ul>
</li>
<li>
Version 3.6.17 (released July 1, 2015):
<ul>
<li>
Minor bug fixes and improvements.
</li>
</ul>
</li>
<li>
Version 3.6.16 (released June 1, 2015):
<ul>
<li>
Fixes multiple crash-causing bugs in <code>insert-annotations-to-source</code>.
</li>
</ul>
</li>
<li>
Version 3.6.15 (released May 1, 2015):
<ul>
<li>
Allows annotations on constituents of an intersection type cast without the use of the AST path format.
</li>
<li>
Fixes assorted bugs in <code>insert-annotations</code>.
</li>
</ul>
</li>
<li>
Version 3.6.14 (released April 17, 2015):
<ul>
<li>
Fixes numerous minor bugs in <code>insert-annotations</code> and <code>insert-annotations-to-source</code>.
</li>
</ul>
</li>
<li>
Version 3.6.13 (released March 2, 2015):
<ul>
<li>
Extends support for lambda expressions, member references, and type arguments of static method calls and member references to <code>extract-annotations</code> and <code>insert-annotations</code>.
</li>
<li>
Slightly changes JAIF format for the new features. (See file format documentation for details.)
</li>
</ul>
</li>
<li>
Version 3.6.12 (released January 30, 2015):
<ul>
<li>
Adds support for lambda expressions, member references, and type arguments of static method calls and member references to <code>insert-annotations-to-source</code>.
</li>
</ul>
</li>
<li>
Version 3.6.11 (released December 19, 2014):
<ul>
<li>
Fixes more insertion logic bugs, including errors in handling generic arrays.
</li>
</ul>
</li>
<li>
Version 3.6.10 (released November 26, 2014):
<ul>
<li>
Fixes many bugs, mostly in AST path-based insertion logic.
</li>
</ul>
</li>
<li>
Version 3.6.9 (released October 30, 2014):
<ul>
<li>
Minor bug fixes and improvements.
</li>
</ul>
</li>
<li>
Version 3.6.8 (released September 24, 2014):
<ul>
<li>
Fixes numerous bugs in AST path-based insertion logic.
</li>
</ul>
</li>
<li>
Version 3.6.7 (released August 1, 2014):
<ul>
<li>
Improves Java 9 support.
</li>
<li>
Fills in some previously missing cases for AST path-based insertion specifications.
</li>
</ul>
</li>
<li>
Version 3.6.6 (released July 1, 2014):
<ul>
<li>
Fixes bug affecting inner array types of new[] expressions in the AST path-based insertion logic.
</li>
<li>
Fixes JAIF generation bugs involving insert-annotation and insert typecast within methods and fields.
</li>
</ul>
</li>
<li>
Version 3.6.5 (released June 2, 2014):
<ul>
<li>
Generates extends bounds when necessary for annotation insertion.
</li>
<li>
Fixes assorted bugs in the AST path-based insertion logic.
</li>
</ul>
</li>
<li>
Version 3.6.4 (released May 1, 2014):
<ul>
<li>
Expands AST path support to cover every AST node within a class declaration.
</li>
<li>
Abbreviates enum tags for annotations if <code>--abbreviate</code> is selected.
</li>
<li>
Generates explicit default constructors when necessary for annotation insertion.
</li>
</ul>
</li>
<li>
Version 3.6.3 (released Apr 2, 2014):
<ul>
<li>
Eliminates insert-annotation problems with handling Java 8 class files.
</li>
<li>
Corrects annotation placement within a qualified type name.
</li>
<li>
Fills in gaps in AST Path API. All (Java 7) non-declaration nodes can now be identified by a path from an enclosing declaration.
</li>
<li>
Expands scene-lib API with visitor framework and new class <code>APIIndex</code>, which provides a cache that maps Java abstract syntax tree nodes to AST paths as defined in the annotation file format specification.
</li>
</ul>
</li>
<li>
Version 3.6.2 (released Mar 5, 2014):
<ul>
<li>
Expands scene-lib API with visitor framework and new class <code>APIIndex</code>, which provides a cache that maps Java abstract syntax tree nodes to AST paths as defined in the annotation file format specification.
</li>
</ul>
</li>
<li>
Version 3.6.1 (released Feb 19, 2014):
<ul>
<li>
Adds missing cases for AST path-based annotation/cast insertion.
</li>
</ul>
</li>
<li>
Version 3.5.9 (released Jan 2, 2014):
<ul>
<li>
Fixes assorted minor bugs.
</li>
</ul>
</li>
<li>
Version 3.5.8 (released Dec 9, 2013):
<ul>
<li>
Creates output directory in current working directory (by default), rather than relative to input pathname.
</li>
<li>
Recognizes "instanceinit" keyword in JAIF for adding annotations inside instance initializers.
</li>
<li>
Corrects syntax of results of inserting annotations on bare array literals.
</li>
<li>
More fully treats enum, interface, and annotation declarations in accordance with the rules for class declarations.
</li>
</ul>
</li>
<li>
Version 3.5.7 (released Nov 15, 2013):
<ul>
<li>
Handles type paths with INNER_TYPE.
</li>
<li>
Disallows annotations on generic array type bounds and on wildcard bounds in "instanceof" expressions, since Java 8 prohibits type bounds in those locations.
</li>
<li>
Vastly improves performance when index file covers numerous source files, by filtering out irrelevant insertions at an earlier stage.
</li>
<li>
Avoids stack overflow during regex matching.
</li>
</ul>
</li>
<li>
Version 3.5.6 (released Oct 23, 2013):
<ul>
<li>
Adds "insert-annotation" to JAIF format, allowing the use of AST paths to specify source locations for annotation insertion (which previously was possible only for typecast insertions).
</li>
<li>
For consistency with <code>extract-annotations</code>, <code>insert-annotations-to-source</code> now matches generic method types in the source with JAIF specifications for their least upper bounds.
</li>
<li>
Allows annotations on inner type declarations of parameterized types.
</li>
<li>
Avoids spurious code location matches on anonymous inner subclasses of an outer class.
</li>
<li>
Works around Java regex bug that on some input causes an infinite loop in the Matcher.
</li>
<li>
Fixes many other bugs, most involving receiver insertions.
</li>
<li>
No longer aborts on (non-fatal) warnings found during the <code>javac</code> type-checking phase of <code>insert-annotations-to-source</code>.
</li>
</ul>
</li>
<li>
Version 3.5.5 (released Aug 28, 2013):
<ul>
<li>
Allows annotation insertion at constructor "return type" as per the specification.
</li>
<li>
Fixes assorted bugs dealing with type qualification, inner classes, and receiver insertion.
</li>
</ul>
</li>
<li>
Version 3.5.4 (released Aug 1, 2013):
<ul>
<li>
Allow the use of command-line argument files. Argument file rules are identical to those of javac.
</li>
<li>
The Annotation File Utilities now appropriately handles vararg parameters.
</li>
<li>
Minor documentation improvements.
</li>
</ul>
</li>
<li>
Version 3.5.3 (released May 1, 2013):
<ul>
<li>
Don't depend on bootstrap javac files.
</li>
<li>
Other minor improvements.
</li>
</ul>
</li>
<li>
Version 3.5.2 (released April 4, 2013):
<ul>
<li>
Allow annotations on compound types of a cast insertion.
</li>
<li>
Added <code>--print_error_stack</code> command-line option to
<code>insert-annotations-to-source</code> tool to print a stack trace on
an error.
</li>
<li>
Various bug fixes.
</li>
<li>
Improvements to the Annotation File Format manual.
<ul>
<li>
Clarified "Grammar" section by reordering and adding more details.
</li>
<li>
Added "Design and Implementation Details" section.
</li>
</ul>
</li>
</ul>
</li>
<li>
Version 3.5.1 (released March 1, 2013):
<ul>
<li>
Small improvements to error messages when parsing JAIF files and for
illegal source code insertions.
</li>
<li>
Installation instruction and manual improvements.
</li>
<li>
Better handling of source code insertions in anonymous and local
classes.
<ul>
<li>
Allow source code insertions in a local class (a class defined
within a method).
</li>
<li>
Bug fixes for anonymous and local class indexes.
</li>
<li>
Don't traverse into nested classes when calculating a source code
index.
</li>
</ul>
</li>
<li>
Improved support for source code method declaration receiver parameter
insertions.
<ul>
<li>
Use the full type name (Outer.Inner1.Inner2) for receiver insertions
in inner classes.
</li>
<li>
Allow annotation insertions on compound types of method declaration
receiver parameters.
</li>
</ul>
</li>
<li>
Insert source code annotations in the semantically correct place for
qualified types.
</li>
<li>
For bytecode annotation extraction and insertion read and put "local"
type annotations in the Code attribute, not the Method attribute.
</li>
</ul>
</li>
<li>
Version 3.5 (released February 1, 2013):
<ul>
<li>
Updated to JSR308 bytecode representation and receiver parameter syntax.
</li>
<li>
Support source code insertion of annotated casts.
</li>
<li>
Support adding annotations to bytecode for type casts with intersection
types.
</li>
</ul>
</li>
<li>
Version 3.4 (released September 11, 2012):
<ul>
<li>
Adapted to underlying changes in JSR 308.
</li>
<li>
Support .class literals as annotation attributes.
</li>
</ul>
</li>
<li>
Version 3.3 (released September 20, 2011):
<ul>
<li>
Improved support for annotations on array creation expressions.
</li>
<li>
Small tweaks to the code and documentation.
</li>
</ul>
</li>
<li>
Version 3.2 (released June 18, 2011):
<ul>
<li>
Support source code indexes, in contrast to the bytecode
centric indexes supported so far, which makes it easier for
source code centric tools to emit AFU files.
See Section "Support for source code indexes" in the
<a href="annotation-file-format.html">manual</a>.
</li>
<li>
Support annotating the bounds of class and method type
parameters and of wildcards, in particular also support
implicit bounds and make them explicit.
Also support adding declaration annotations on type parameters.
</li>
<li>
Better support for anonymous inner classes.
</li>
<li>
Improve handling of already existing annotations, in
particular for generic types.
</li>
<li>
Consistently do matching on methods using the erased signature.
</li>
<li>
Specify annotations on extends and implements clauses.
</li>
<li>
Handle interfaces, enums, etc. like classes.
</li>
<li>
Numerous small bug fixes and improvements.
</li>
</ul>
</li>
<li>
Version 3.1 (released September 18, 2010):
<ul>
<li>
Don't duplicate annotations that are in the source already.
</li>
<li>
Add <code>--omit-annotation</code> option to omit a given annotation
(example: <code>@ThisMutable</code>, which is the default and need not be
inserted in source files).
</li>
<li>
Bug fixes related to inner classes, array levels, multiple methods
with same signature but different return type (impossible in Java
code, but can occur in class files), parameter indices.
</li>
<li>
Switch from utilMDE library to
<a href="https://github.com/mernst/plume-lib">plume-lib</a>.
</li>
</ul>
</li>
<li>
Version 3.0 (released December 21, 2009):
<ul>
<li>
Handle meta-annotations.
Previously, the Annotation File Utilities didn't handle meta-annotations
(annotations that are written on an annotation type declaration); in fact,
AFU simply fabricated retention information. Now, meta-annotations are
handled uniformly with other annotations.
</li>
<li>
Distinguish type annotations from declaration annotations.
Previously, AFU assumed that all annotations were type annotations. Now,
this information is looked up from the meta-annotations and is
distinguished in the file format (see below).
</li>
<li>
Read annotations from classfiles.
Previously, AFU created partial information for annotations in an ad hoc
way, and classfile reading did not work. (The focus was on inserting
annotations in class files, not reading annotations from class files.)
Now, classfile reading is operational, and it is often not necessary to
declare annotations in an annotation file. However, if the annotation is
declared in the annotation file, it should be consistent with its
declaration in the class file.
</li>
<li>Changes to annotation file format.
<ul>
<li>Indicating meta-annotations
<pre> annotation visible @Nullable:</pre>
becomes
<pre> annotation @Nullable: @Retention(value=RUNTIME)</pre>
and if it's a type annotation, it should be
<pre> annotation @Nullable: @Retention(value=RUNTIME) @java.lang.annotation.Target(value={TYPE_USE})</pre>
</li>
<li>Locations for type and declaration annotations.
If p2.B is a declaration annotation on a method, it is written as before:
<pre> method foo(Ljava/util/Set;)V: @p2.B</pre>
If p2.B is a type annotation on a method return type, it is written in a
new location:
<pre> method foo(Ljava/util/Set;)V:
return: @p2.B</pre>
Fields and method parameters are treated similarly, but with
<code>type</code> marker instead of <code>return</code>. So if p2.A is a
declaration annotation targeting the field, while p2.B is a type
annotation on the field, the field would be declared as:
<pre> field s: @p2.A
type: @p2.B</pre>
Furthermore, <code>inner-type:</code> is permitted only after a keyword
that introduces a type, such as <code>type</code>, <code>return</code>, and
<code>receiver</code>, to prevent confusion (though the file format
becomes slightly more verbose).
</li>
<li>Permit qualified names in several places that only identifiers were
permitted before. This enables use of names that contain periods, such
as inner classes, and also fully-qualified names.
</li>
<li>Permit two shorthands in annotation uses, as in Java. If there is a
single field named "value", then its name may be omitted: @A(1) instead
of @A(value=1). If an array has only one element, the braces may be
omitted: @B(value=1) instead of @B(value={1}). Both
shorthands may be combined: @B(1) instead of @B(value={1}).
</li>
</ul>
</li>
</ul>
</li>
<li>
Version 2.3.3 (released August 18, 2009):
<ul>
<li>Fix a few bugs.</li>
</ul>
</li>
<li>
Version 2.3.2 (released August 14, 2009):
<ul>
<li>Relax file format: receiver may precede parameters (in spec &amp;
implementation), parameters may omit "#" (in implementation only)</li>
</ul>
</li>
<li>
Version 2.3.1 (released August 12, 2009):
<ul>
<li>Fix many bugs.</li>
</ul>
</li>
<li>
Version 2.3 (released July 29, 2009):
<ul>
<li>Support <code>-i --in-place</code> argument.</li>
<li>Fix incorrect array brackets in tests.</li>
<li>Fix inserting annotations on receivers.</li>
<li>Improve documentation.</li>
<li>Improve error handling.</li>
</ul>
</li>
<li>
Version 2.2 (released December 7, 2008):
<ul>
<li>Permit Main to process multiple files at a time.</li>
<li>Don't re-insert annotations that are already present.</li>
<li>Add a space before annotation if there isn't one there.</li>
<li>Fix problems with array syntax; now adheres to the current JSR
308 syntax.</li>
<li>Improve error handling.</li>
<li>Code reorganization: remove subdirectories and classes that
added complexity without commensurate functionality.</li>
</ul>
</li>
<li>
Version 2.1.2 (released April 28, 2008):
Minor updates to the &ldquo;Annotation File Format Specification&rdquo; (<a
href="https://checkerframework.org/annotation-file-utilities/annotation-file-format.pdf">PDF</a>, <a
href="https://checkerframework.org/annotation-file-utilities/annotation-file-format.html">HTML</a>).
</li>
<li>
Version 2.1.1 (released May 31, 2007):
Added support for two new annotation target_types; consult the
classfile specification (<a
href="https://checkerframework.org/jsr308/specification/java-annotation-design.pdf">PDF</a>,
<a href="https://checkerframework.org/jsr308/specification/java-annotation-design.html">HTML</a>).
</li>
<li>
Version 2.1 (released May 4, 2007):
Modified overall setup of distribution to be easier to understand.
</li>
<li>
Version 2.0 (released May 1, 2007):
Initial public release.
</li>
<li>
Version 1.0 (released March 19, 2007):
Preliminary release.
The <code>insert-to-annotations-source</code> tool only
operates on class, field and method signatures.
</li>
</ul>
<p>
The original developer (through version 2.1.2) was Jaime Quinonez.
</p>
</body>
</html>
<!-- LocalWords: utils bashrc tcsh tcshrc cshrc classpath AFU Ljava
-->