2004-05-21 00:02:09 +00:00
|
|
|
Copyright (C) 1996-2004, International Business Machines Corporation and
|
|
|
|
others. All Rights Reserved.
|
|
|
|
|
2004-05-12 01:35:44 +00:00
|
|
|
-------------------------------------------
|
|
|
|
Using the GatherAPIData and ReportAPI tools
|
|
|
|
-------------------------------------------
|
|
|
|
|
|
|
|
These two tools are used together to generate reports about changes in
|
|
|
|
supported API between versions of ICU4J.
|
|
|
|
|
|
|
|
|
|
|
|
GatherAPIData
|
|
|
|
|
|
|
|
GatherAPIData uses javadoc to process the ICU4J source files and
|
|
|
|
generate a file listing information about the public API, including
|
|
|
|
the ICU4J status (draft, stable, deprecated, obsolete). It excludes
|
|
|
|
private API, API marked @internal. The file is written as text, so it
|
|
|
|
is human-readable, but it is a bit verbose. To save space, the file
|
2004-05-12 05:33:44 +00:00
|
|
|
can be zip'd or gzip'd (using flags passed to the tool), which will
|
|
|
|
reduce the size by about a factor of 10.
|
2004-05-12 01:35:44 +00:00
|
|
|
|
|
|
|
GatherAPIData requires javadoc and is currently based on sun jdk
|
|
|
|
1.4.2. JavaDoc is internal (I believe) so you need a reference jvm
|
|
|
|
from Sun to compile the tool, but it can be run against any 1.4 JDK
|
|
|
|
(at least, those from Sun). Instructions in the source file show how
|
|
|
|
it can be invoked.
|
|
|
|
|
|
|
|
GatherAPIData should be passed all the packages that need reporting.
|
|
|
|
Currently, public api is only in the lang, math, text, and util
|
|
|
|
subpackages of com.ibm.icu.
|
|
|
|
|
|
|
|
|
|
|
|
ReportAPI
|
|
|
|
|
|
|
|
ReportAPI takes two api files generated by GatherAPIData and reports
|
|
|
|
on removals, changes, and additions to the API. It does this by
|
|
|
|
comparing the API information in the two API files. When new classes
|
|
|
|
are added, only the class is listed, not its entire API, and similarly
|
|
|
|
when a class is deleted. When APIs with the same name and signature
|
|
|
|
are changed (visibility, status, inheritance) these changes are listed
|
|
|
|
by showing the old and new versions of the API.
|
|
|
|
|
|
|
|
ReportAPI is not particularly smart, and in particular, does not know
|
|
|
|
about inherited API. So for example, moving public API from a class
|
|
|
|
to a base class is reported as a deletion of API from the original
|
|
|
|
class, even though the effective API on the original class is
|
|
|
|
unchanged by this.
|
|
|
|
|
|
|
|
ReportAPI also does not know about Java class files, so for example it
|
|
|
|
cannot be used to compare com.ibm.icu.lang.UCharacter against
|
|
|
|
java.lang.Character. This might be provided in a later release.
|
|
|
|
|
|
|
|
For these reasons, in general it is best to compare two successive
|
|
|
|
versions of ICU4J against each other, rather than radically different
|
|
|
|
versions. A large number of changes can show up, many of which might
|
|
|
|
fall into these 'innocuous' categories.
|
|
|
|
|
|
|
|
ReportAPI can generate either plain text or html reports. Since it
|
|
|
|
only requires the data files and does not rely on JavaDoc, it is more
|
|
|
|
straightforward to invoke.
|
|
|
|
|
2004-05-12 05:33:44 +00:00
|
|
|
ReportAPI uses the file extension to determine how to uncompress the
|
|
|
|
api data files. It expects '.zip' for files that have been compressed
|
|
|
|
using zip, and '.gz' for files that have been compressed using gzip.
|
|
|
|
The GatherAPIData utility automatically appends these extensions when
|
|
|
|
compression is used.
|
2004-05-12 01:35:44 +00:00
|
|
|
|
|
|
|
API Data Files
|
|
|
|
|
|
|
|
API Data files for ICU4J 2.8 and 3.0 are in this directory. The
|
|
|
|
intent is to store data files for each release version of ICU4J, to
|
|
|
|
facilitate comparison using the ReportAPI tool. Of course, they can
|
|
|
|
always be regenerated using the GenerateAPI and the sources of a
|
|
|
|
particular ICU4J release.
|
|
|
|
|
|
|
|
The format of the API data file is straightforward. The first line of
|
|
|
|
the file is the header, successive lines are the api information.
|
|
|
|
Each line consists of a number of tokens, each followed by a
|
|
|
|
semi-colon (incuding the last token on the line).
|
|
|
|
|
|
|
|
The header line contains the version number, the 'name' of the version
|
|
|
|
of ICU4J represented by the file, and a 'base directory' field
|
|
|
|
(currently not fully implemented).
|
|
|
|
|
|
|
|
The following lines contain data generated by the APIInfo class, one
|
|
|
|
line per class or method. The tokens are status, visibility, static,
|
|
|
|
final, synchronized, abstract, type, package, containing class, name,
|
|
|
|
and 'signature' (which varies by the type of object). For classes,
|
|
|
|
the 'signature' is the immediate inheritance of the class. For
|
|
|
|
fields, the 'signature' is the type of the field. For methods, the
|
|
|
|
'signature' is the function signature. All fields are always present.
|
|
|
|
|
|
|
|
For more information, please see APIInfo.java.
|
|
|
|
|
2004-05-12 05:33:44 +00:00
|
|
|
-------
|