changeset 890:7336798a900d

Merge
author lana
date Tue, 05 Aug 2008 17:44:17 -0700
parents 6549643c008c a6cf328006ab
children c5cfb0b3ccad
files jdk/make/common/shared/Platform.gmk jdk/make/sun/font/Makefile langtools/test/tools/javac/CyclicInheritance.sh langtools/test/tools/javac/ExtendsAccess/ExtendsAccess.sh langtools/test/tools/javac/FloatingPointChanges/BadConstructorModifiers.sh langtools/test/tools/javac/InnerNamedConstant_2.sh langtools/test/tools/javac/LocalClasses_2.sh langtools/test/tools/javac/NameCollision.sh langtools/test/tools/javac/NestedInnerClassNames.sh langtools/test/tools/javac/NonStaticFieldExpr1.sh langtools/test/tools/javac/NonStaticFieldExpr2.sh langtools/test/tools/javac/NonStaticFieldExpr3.sh langtools/test/tools/javac/QualifiedAccess/QualifiedAccess_1.sh langtools/test/tools/javac/QualifiedAccess/QualifiedAccess_2.sh langtools/test/tools/javac/QualifiedAccess/QualifiedAccess_3.sh langtools/test/tools/javac/SynchronizedClass.sh langtools/test/tools/javac/depDocComment/DeprecatedDocComment.sh
diffstat 180 files changed, 2235 insertions(+), 2952 deletions(-) [+]
line wrap: on
line diff
--- a/.hgtags	Thu Jul 24 21:12:50 2008 -0700
+++ b/.hgtags	Tue Aug 05 17:44:17 2008 -0700
@@ -5,3 +5,4 @@
 18dc4ba4739a537fd146f77da51db16efce28da2 jdk7-b28
 bfe4572fd301a6fcd120373cdb2eff5d2da0c72c jdk7-b29
 bee4731164a06ddece1297ae58db24aca6a1c626 jdk7-b30
+cd8b8f500face60d1566d850857a7fccadbd383a jdk7-b31
--- a/.hgtags-top-repo	Thu Jul 24 21:12:50 2008 -0700
+++ b/.hgtags-top-repo	Tue Aug 05 17:44:17 2008 -0700
@@ -5,3 +5,4 @@
 56652b46f328937f6b9b5130f1e4cd80f48868ef jdk7-b28
 31e08f70e88d77c2053f91c21b49a04296bdc59a jdk7-b29
 2dab2f712e1832c92acfa63ec0337048b9422c20 jdk7-b30
+3300a35a0bd56d695b92fe0b34f03ebbfc939064 jdk7-b31
--- a/README-builds.html	Thu Jul 24 21:12:50 2008 -0700
+++ b/README-builds.html	Tue Aug 05 17:44:17 2008 -0700
@@ -5,15 +5,12 @@
     </head>
     <body style="background-color:lightcyan">
         <!-- ====================================================== -->
-        <table width="100%" style="background-color:white">
+        +        <table width="100%">
             <tr>
                 <td align="center">
-                    <a href="http://openjdk.java.net" border="0">    
-                        <img alt="OpenJDK" 
-                             src="http://openjdk.java.net/images/openjdk.png"
-                             width=256
-                             style="border-style: none"/>
-                    </a>
+                    <img alt="OpenJDK" 
+                         src="http://openjdk.java.net/images/openjdk.png" 
+                         width=256 />
                 </td>
             </tr>
             <tr>
@@ -54,6 +51,7 @@
                             <li><a href="#bootjdk">Bootstrap JDK</a> </li>
                             <li><a href="#binaryplugs">Binary Plugs</a> </li>
                             <li><a href="#importjdk">Optional Import JDK</a> </li>
+                            <li><a href="#ant">Ant</a> </li>
                             <li><a href="#cacerts">Certificate Authority File (cacert)</a> </li>
                             <li><a href="#compilers">Compilers</a> 
                                 <ul>
@@ -424,24 +422,37 @@
                     you should use <tt>gmake</tt>
                     which will be located in either the <tt>/opt/sfw/bin</tt> or 
                     <tt>/usr/sfw/bin</tt> directory.
+                    In more recent versions of Solaris GNU make can be found
+                    at <tt>/usr/bin/gmake</tt>. 
                 </li>
                 <li>
                     <strong>Windows:</strong>
                     Make sure you start your build inside a bash/sh/ksh shell.
                     <br>
                     <b>WARNING:</b> Watch out for make version 3.81, it may
-                    not work due to a lack of support for drive letter paths
-                    like <tt>C:/</tt>. See
-                    <a href="#gmake">section on gmake</a>.
+                    not work due to a lack of support for MS-DOS drive letter paths
+                    like <tt>C:/</tt> or <tt>C:\</tt>.
                     Use a 3.80 version, or find a newer
-                    version that has this problem fixed.
+                    version that has this problem fixed, like 3.82.
                     The older 3.80 version of make.exe can be downloaded with this
                     <a href="http://cygwin.paracoda.com/release/make/make-3.80-1.tar.bz2" target="_blank">
                     link</a>.
+                    Use of this older 3.80 make.exe may require that you install the
+                    libintl2.dll library or libintl2 cygwin package which is
+                    no longer installed by default by the cygwin installer.
+                    <br>
                     Also see the
                     <a href="http://developer.mozilla.org/en/docs/Windows_build_prerequisites_using_cygwin#make" target="_blank">
                     mozilla developer center</a>
                     on this topic.
+                    <br>
+                    It's hoped that when make 3.82 starts shipping in a future cygwin
+                    release that this MS-DOS path issue will be fixed.
+                    In addition to the above 3.80 make.exe you can download 
+                    this
+                    <a href="http://www.cmake.org/files/cygwin/make.exe">
+                    www.cmake.org make.exe</a> which will not have a libintl2.dll
+                    dependency.
                 </li>
             </ul>
             <p>
@@ -507,6 +518,11 @@
                     Install or upgrade the <a href="#freetype">FreeType development
                     package</a>.
                 </li>
+                <li>
+                    Install
+                    <a href="#ant">Ant</a>, set
+                    <tt><a href="#ANT_HOME">ANT_HOME</a></tt>.
+                </li>
             </ol>
         </blockquote>
         <!-- ------------------------------------------------------ -->
@@ -567,6 +583,11 @@
                     <a href="#cups">CUPS Include files</a>, set
                     <tt><a href="#ALT_CUPS_HEADERS_PATH">ALT_CUPS_HEADERS_PATH</a></tt>.
                 </li>
+                <li>
+                    Install
+                    <a href="#ant">Ant</a>, set
+                    <tt><a href="#ANT_HOME">ANT_HOME</a></tt>.
+                </li>
             </ol>
         </blockquote>
         <!-- ------------------------------------------------------ -->
@@ -654,6 +675,11 @@
                     Install 
                     <a href="#dxsdk">Microsoft DirectX SDK</a>.
                 </li>
+                <li>
+                    Install
+                    <a href="#ant">Ant</a>, set
+                    <tt><a href="#ANT_HOME">ANT_HOME</a></tt>.
+                </li>
             </ol>
         </blockquote>
         <!-- ------------------------------------------------------ -->
@@ -736,6 +762,22 @@
                 and the build will copy the needed files from this import area.
             </blockquote>
             <!-- ------------------------------------------------------ -->
+            <h4><a name="ant">Ant</a></h4>
+            <blockquote>
+                All OpenJDK builds require access to least Ant 1.6.5.
+                The Ant tool is available from the 
+                <a href="http://ant.apache.org/antlibs/bindownload.cgi" target="_blank">
+                Ant download site</a>.
+                You should always set 
+                <tt><a href="#ANT_HOME">ANT_HOME</a></tt>
+                to point to the location of
+                the Ant installation, this is the directory pathname
+                that contains a <tt>bin and lib</tt>.
+                It's also a good idea to also place its <tt>bin</tt> directory
+                in the <tt>PATH</tt> environment variable, although it's
+                not absolutely required.
+            </blockquote>
+            <!-- ------------------------------------------------------ -->
             <h4><a name="cacerts">Certificate Authority File (cacert)</a></h4>
             <blockquote>
                 See <a href="http://en.wikipedia.org/wiki/Certificate_Authority" target="_blank">
@@ -915,6 +957,21 @@
                 and 
                 <tt><a href="#ALT_FREETYPE_HEADERS_PATH">ALT_FREETYPE_HEADERS_PATH</a></tt>
                 to refer to place where library and header files are installed.
+                <p>
+                Building the freetype 2 libraries from scratch is also possible,
+                however on Windows refer to the
+                <a href="http://freetype.freedesktop.org/wiki/FreeType_DLL">
+                Windows FreeType DLL build instructions</a>.
+                <p>
+                Note that by default FreeType is built with byte code hinting
+                support disabled due to licensing restrictions.
+                In this case, text appearance and metrics are expected to
+                differ from Sun's official JDK build.
+                See
+                <a href="http://freetype.sourceforge.net/freetype2/index.html">
+                    the SourceForge FreeType2 Home Page
+                </a>
+                for more information.
             </blockquote>    
             <!-- ------------------------------------------------------ -->
             <h4><a name="alsa">Advanced Linux Sound Architecture (ALSA) (Linux only)</a></h4>
@@ -1036,7 +1093,8 @@
                             <tr>
                                 <td>make.exe</td>
                                 <td>Devel</td>
-                                <td>make: The GNU version of the 'make' utility</td>
+                                <td>make: The GNU version of the 'make' utility<br>
+                                <b>NOTE</b>: See <a href="#gmake">the GNU make section</a></td>
                             </tr>
                             <tr>
                                 <td>m4.exe</td>
@@ -1050,7 +1108,7 @@
                                 <td>cpio: A program to manage archives of files</td>
                             </tr>
                             <tr>
-                                <td>awk.exe</td>
+                                <td>gawk.exe</td>
                                 <td>Utils</td>
                                 <td>awk: Pattern-directed scanning and processing language</td>
                             </tr>
@@ -1061,17 +1119,17 @@
                             </tr>
                             <tr>
                                 <td>zip.exe</td>
-                                <td>Utils</td>
+                                <td>Archive</td>
                                 <td>zip: Package and compress (archive) files</td>
                             </tr>
                             <tr>
                                 <td>unzip.exe</td>
-                                <td>Utils</td>
+                                <td>Archive</td>
                                 <td>unzip: Extract compressed files in a ZIP archive</td>
                             </tr>
                             <tr>
                                 <td>free.exe</td>
-                                <td>Utils</td>
+                                <td>Procps</td>
                                 <td>free: Display amount of free and used memory in the system</td>
                             </tr>
                         </tbody>
@@ -1224,38 +1282,13 @@
         document) that can impact the build are:
         <blockquote>
             <dl>
-                <dt><a name="path"><tt>PATH</tt></a> </dt>
-                <dd>Typically you want to set the <tt>PATH</tt> to include:
-                    <ul>
-                        <li>The location of the GNU make binary</li>
-                        <li>The location of the Bootstrap JDK <tt>java</tt> 
-                        (see <a href="#bootjdk">Bootstrap JDK</a>)</li>
-                        <li>The location of the C/C++ compilers 
-                        (see <a href="#compilers"><tt>compilers</tt></a>)</li>
-                        <li>The location or locations for the Unix command utilities
-                        (e.g. <tt>/usr/bin</tt>)</li>
-                    </ul>
-                </dd>
-                <dt><tt>MILESTONE</tt> </dt>
+                <dt><a name="ALT_BINARY_PLUGS_PATH"><tt>ALT_BINARY_PLUGS_PATH</tt></a></dt>
                 <dd>
-                    The milestone name for the build (<i>e.g.</i>"beta"). 
-                    The default value is "internal".
-                </dd>
-                <dt><tt>BUILD_NUMBER</tt> </dt>
-                <dd>
-                    The build number for the build (<i>e.g.</i> "b27"). 
-                    The default value is "b00".
-                </dd>
-                <dt><a name="arch_data_model"><tt>ARCH_DATA_MODEL</tt></a></dt>
-                <dd>The <tt>ARCH_DATA_MODEL</tt> variable
-                    is used to specify whether the build is to generate 32-bit or 64-bit
-                    binaries. 
-                    The Solaris build supports either 32-bit or 64-bit builds, but
-                    Windows and Linux will support only one, depending on the specific
-                    OS being used.
-                    Normally, setting this variable is only necessary on Solaris.
-                    Set <tt>ARCH_DATA_MODEL</tt> to <tt>32</tt> for generating 32-bit binaries, 
-                    or to <tt>64</tt> for generating 64-bit binaries.
+                    The location of the binary plugs installation.
+                    See <a href="#binaryplugs">Binary Plugs</a> for more information.
+                    You should always have a local copy of a
+                    recent Binary Plugs install image
+                    and set this variable to that location.
                 </dd>
                 <dt><a name="ALT_BOOTDIR"><tt>ALT_BOOTDIR</tt></a></dt>
                 <dd>
@@ -1264,106 +1297,25 @@
                     You should always install your own local Bootstrap JDK and
                     always set <tt>ALT_BOOTDIR</tt> explicitly.
                 </dd>
-                <dt><a name="ALT_BINARY_PLUGS_PATH"><tt>ALT_BINARY_PLUGS_PATH</tt></a></dt>
+                <dt><a name="ALT_BUILD_BINARY_PLUGS_PATH"><tt>ALT_BUILD_BINARY_PLUGS_PATH</tt></a></dt>
                 <dd>
-                    The location of the binary plugs installation.
-                    See <a href="#binaryplugs">Binary Plugs</a> for more information.
-                    You should always have a local copy of a
-                    recent Binary Plugs install image
-                    and set this variable to that location.
-                </dd>
-                <dt><a name="ALT_JDK_IMPORT_PATH"><tt>ALT_JDK_IMPORT_PATH</tt></a></dt>
-                <dd>
-                    The location of a previously built JDK installation. 
-                    See <a href="#importjdk">Optional Import JDK</a> for more information.
-                </dd>
-                <dt><a name="ALT_OUTPUTDIR"><tt>ALT_OUTPUTDIR</tt></a> </dt>
-                <dd>
-                    An override for specifying the (absolute) path of where the
-                    build output is to go.
-                    The default output directory will be build/<i>platform</i>.
-                </dd>
-                <dt><a name="ALT_COMPILER_PATH"><tt>ALT_COMPILER_PATH</tt></a> </dt>
-                <dd>
-                    The location of the C/C++ compiler.
-                    The default varies depending on the platform. 
-                </dd>
-                <dt><tt><a name="ALT_CACERTS_FILE">ALT_CACERTS_FILE</a></tt></dt>
-                <dd>
-                    The location of the <a href="#cacerts">cacerts</a> file.
-                    The default will refer to 
-                    <tt>jdk/src/share/lib/security/cacerts</tt>.
-                </dd>
-                <dt><a name="ALT_CUPS_HEADERS_PATH"><tt>ALT_CUPS_HEADERS_PATH</tt></a> </dt>
-                <dd>
-                    The location of the CUPS header files.
-                    See <a href="#cups">CUPS information</a> for more information.
-                    If this path does not exist the fallback path is 
-                    <tt>/usr/include</tt>.
-                </dd>
-                <dt><a name="ALT_FREETYPE_LIB_PATH"><tt>ALT_FREETYPE_LIB_PATH</tt></a></dt>
-                <dd>
-                    The location of the FreeType shared library. 
-                    See <a href="#freetype">FreeType information</a> for details. 
-                </dd>
-                <dt><a name="ALT_FREETYPE_HEADERS_PATH"><tt>ALT_FREETYPE_HEADERS_PATH</tt></a></dt>
-                <dd>
-                    The location of the FreeType header files.
-                    See <a href="#freetype">FreeType information</a> for details. 
-                </dd>
-                <dt><a name="ALT_JDK_DEVTOOLS_PATH"><tt>ALT_JDK_DEVTOOLS_PATH</tt></a></dt>
-                <dd>
-                    The default root location of the devtools.
-                    The default value is 
-                    <tt>$(ALT_SLASH_JAVA)/devtools</tt>.
-                </dd>
-                <dt><tt><a name="ALT_DEVTOOLS_PATH">ALT_DEVTOOLS_PATH</a></tt> </dt>
-                <dd>
-                    The location of tools like the 
-                    <a href="#zip"><tt>zip</tt> and <tt>unzip</tt></a>
-                    binaries, but might also contain the GNU make utility
-                    (<tt><i>gmake</i></tt>).
-                    So this area is a bit of a grab bag, especially on Windows.
-                    The default value depends on the platform and
-                    Unix Commands being used.
-                    On Linux the default will be 
-                    <tt>$(ALT_JDK_DEVTOOLS_PATH)/linux/bin</tt>, 
-                    on Solaris
-                    <tt>$(ALT_JDK_DEVTOOLS_PATH)/<i>{sparc,i386}</i>/bin</tt>, 
-                    on Windows with MKS
-                    <tt>%SYSTEMDRIVE%/UTILS</tt>, 
-                    and on Windows with CYGWIN
-                    <tt>/usr/bin</tt>.
-                </dd>
-                <dt><a name="ALT_UNIXCOMMAND_PATH"><tt>ALT_UNIXCOMMAND_PATH</tt></a> </dt>
-                <dd>
-                    An override for specifying where the
-                    Unix command set are located. 
-                    The default location varies depending on the platform,
-                    <tt>"%SYSTEMDRIVE%/MKSNT"</tt> or
-                    <tt>$(ROOTDIR)</tt> on Windows with MKS, otherwise it's 
-                    <tt>"/bin"</tt> or <tt>/usr/bin</tt>.
-                </dd>
-                <dt><a name="ALT_UNIXCCS_PATH"><tt>ALT_UNIXCCS_PATH</tt></a></dt>
-                <dd>
-                    <strong>Solaris only:</strong>
-                    An override for specifying where the Unix CCS
-                    command set are located.
-                    The default location is <tt>/usr/ccs/bin</tt> 
-                </dd>
-                <dt><a name="ALT_USRBIN_PATH"><tt>ALT_USRBIN_PATH</tt></a></dt>
-                <dd>
-                    An override for specifying where the
-                    Unix <tt>/usr/bin</tt> commands are located. You usually do not need
-                    to set this variable: the default location is <tt>/usr/bin</tt>)
-                </dd>
-                <dt><a name="ALT_SLASHJAVA"><tt>ALT_SLASHJAVA</tt></a></dt>
-                <dd>
-                    The default root location for many of the ALT path locations
-                    of the following ALT variables.
-                    The default value is 
-                    <tt>"/java"</tt> on Solaris and Linux, 
-                    <tt>"J:"</tt> on Windows.
+                    These are useful in managing builds on multiple platforms.
+                    The default network location for all of the binary plug images
+                    for all platforms. 
+                    If <tt><a href="#ALT_BINARY_PLUGS_PATH">ALT_BINARY_PLUGS_PATH</a></tt>
+                    is not set, this directory will be used and should contain 
+                    the following directories:
+                    <tt>solaris-sparc</tt>,
+                    <tt>solaris-i586</tt>,
+                    <tt>solaris-sparcv9</tt>,
+                    <tt>solaris-amd64</tt>,
+                    <tt>linux-i586</tt>,
+                    <tt>linux-amd64</tt>,
+                    <tt>windows-i586</tt>,
+                    and
+                    <tt>windows-amd64</tt>.
+                    Where each of these directories contain the binary plugs image
+                    for that platform.
                 </dd>
                 <dt><a name="ALT_BUILD_JDK_IMPORT_PATH"><tt>ALT_BUILD_JDK_IMPORT_PATH</tt></a></dt>
                 <dd>
@@ -1385,56 +1337,166 @@
                     Where each of these directories contain the import JDK image
                     for that platform.
                 </dd>
-                <dt><a name="ALT_BUILD_BINARY_PLUGS_PATH"><tt>ALT_BUILD_BINARY_PLUGS_PATH</tt></a></dt>
+                <dt><tt><a name="ALT_CACERTS_FILE">ALT_CACERTS_FILE</a></tt></dt>
                 <dd>
-                    These are useful in managing builds on multiple platforms.
-                    The default network location for all of the binary plug images
-                    for all platforms. 
-                    If <tt><a href="#ALT_BINARY_PLUGS_PATH">ALT_BINARY_PLUGS_PATH</a></tt>
-                    is not set, this directory will be used and should contain 
-                    the following directories:
-                    <tt>solaris-sparc</tt>,
-                    <tt>solaris-i586</tt>,
-                    <tt>solaris-sparcv9</tt>,
-                    <tt>solaris-amd64</tt>,
-                    <tt>linux-i586</tt>,
-                    <tt>linux-amd64</tt>,
-                    <tt>windows-i586</tt>,
-                    and
-                    <tt>windows-amd64</tt>.
-                    Where each of these directories contain the binary plugs image
-                    for that platform.
+                    The location of the <a href="#cacerts">cacerts</a> file.
+                    The default will refer to 
+                    <tt>jdk/src/share/lib/security/cacerts</tt>.
                 </dd>
-                <dt><strong>Windows specific:</strong></dt>
+                <dt><a name="ALT_COMPILER_PATH"><tt>ALT_COMPILER_PATH</tt></a> </dt>
                 <dd>
-                    <dl>
-                        <dt><a name="ALT_MSDEVTOOLS_PATH"><tt>ALT_MSDEVTOOLS_PATH</tt></a> </dt>
-                        <dd>
-                            The location of the Microsoft Visual Studio .NET 2003
-                            tools 'bin' directory.
-                            The default is usually derived from
-                            <a href="#ALT_COMPILER_PATH"><tt>ALT_COMPILER_PATH</tt></a>.
-                        </dd>
-                        <dt><tt><a name="ALT_DXSDK_PATH">ALT_DXSDK_PATH</a></tt> </dt>
-                        <dd>
-                            The location of the 
-                            <a href="#dxsdk">Microsoft DirectX 9 SDK</a>.
-                            The default will be to try and use the DirectX environment
-                            variable <tt>DXSDK_DIR</tt>,
-                            failing that, look in <tt>C:/DXSDK</tt>.
-                        </dd>
-                        <dt><tt><a name="ALT_MSVCRT_DLL_PATH">ALT_MSVCRT_DLL_PATH</a></tt> </dt>
-                        <dd>
-                            The location of the 
-                            <a href="#msvcrt"><tt>MSVCRT.DLL</tt></a>. 
-                        </dd>
-                        <dt><tt><a name="ALT_MSVCR71_DLL_PATH">ALT_MSVCR71_DLL_PATH</a></tt> </dt>
-                        <dd>
-                            <strong>i586 only:</strong>
-                            The location of the 
-                            <a href="#msvcr71"><tt>MSVCR71.DLL</tt></a>. 
-                        </dd>
-                    </dl>
+                    The location of the C/C++ compiler.
+                    The default varies depending on the platform. 
+                </dd>
+                <dt><a name="ALT_CUPS_HEADERS_PATH"><tt>ALT_CUPS_HEADERS_PATH</tt></a> </dt>
+                <dd>
+                    The location of the CUPS header files.
+                    See <a href="#cups">CUPS information</a> for more information.
+                    If this path does not exist the fallback path is 
+                    <tt>/usr/include</tt>.
+                </dd>
+                <dt><tt><a name="ALT_DEVTOOLS_PATH">ALT_DEVTOOLS_PATH</a></tt> </dt>
+                <dd>
+                    The location of tools like the 
+                    <a href="#zip"><tt>zip</tt> and <tt>unzip</tt></a>
+                    binaries, but might also contain the GNU make utility
+                    (<tt><i>gmake</i></tt>).
+                    So this area is a bit of a grab bag, especially on Windows.
+                    The default value depends on the platform and
+                    Unix Commands being used.
+                    On Linux the default will be 
+                    <tt>$(ALT_JDK_DEVTOOLS_PATH)/linux/bin</tt>, 
+                    on Solaris
+                    <tt>$(ALT_JDK_DEVTOOLS_PATH)/<i>{sparc,i386}</i>/bin</tt>, 
+                    on Windows with MKS
+                    <tt>%SYSTEMDRIVE%/UTILS</tt>, 
+                    and on Windows with CYGWIN
+                    <tt>/usr/bin</tt>.
+                </dd>
+                <dt><tt><a name="ALT_DXSDK_PATH">ALT_DXSDK_PATH</a></tt> </dt>
+                <dd>
+                    <strong>Windows Only:</strong>
+                    The location of the 
+                    <a href="#dxsdk">Microsoft DirectX 9 SDK</a>.
+                    The default will be to try and use the DirectX environment
+                    variable <tt>DXSDK_DIR</tt>,
+                    failing that, look in <tt>C:/DXSDK</tt>.
+                </dd>
+                <dt><a name="ALT_FREETYPE_HEADERS_PATH"><tt>ALT_FREETYPE_HEADERS_PATH</tt></a></dt>
+                <dd>
+                    The location of the FreeType header files.
+                    See <a href="#freetype">FreeType information</a> for details. 
+                </dd>
+                <dt><a name="ALT_FREETYPE_LIB_PATH"><tt>ALT_FREETYPE_LIB_PATH</tt></a></dt>
+                <dd>
+                    The location of the FreeType shared library. 
+                    See <a href="#freetype">FreeType information</a> for details. 
+                </dd>
+                <dt><a name="ALT_JDK_DEVTOOLS_PATH"><tt>ALT_JDK_DEVTOOLS_PATH</tt></a></dt>
+                <dd>
+                    The default root location of the devtools.
+                    The default value is 
+                    <tt>$(ALT_SLASH_JAVA)/devtools</tt>.
+                </dd>
+                <dt><a name="ALT_JDK_IMPORT_PATH"><tt>ALT_JDK_IMPORT_PATH</tt></a></dt>
+                <dd>
+                    The location of a previously built JDK installation. 
+                    See <a href="#importjdk">Optional Import JDK</a> for more information.
+                </dd>
+                <dt><a name="ALT_MSDEVTOOLS_PATH"><tt>ALT_MSDEVTOOLS_PATH</tt></a> </dt>
+                <dd>
+                    <strong>Windows Only:</strong>
+                    The location of the Microsoft Visual Studio .NET 2003
+                    tools 'bin' directory.
+                    The default is usually derived from
+                    <a href="#ALT_COMPILER_PATH"><tt>ALT_COMPILER_PATH</tt></a>.
+                </dd>
+                <dt><tt><a name="ALT_MSVCR71_DLL_PATH">ALT_MSVCR71_DLL_PATH</a></tt> </dt>
+                <dd>
+                    <strong>Windows i586 only:</strong>
+                    The location of the 
+                    <a href="#msvcr71"><tt>MSVCR71.DLL</tt></a>. 
+                </dd>
+                <dt><tt><a name="ALT_MSVCRT_DLL_PATH">ALT_MSVCRT_DLL_PATH</a></tt> </dt>
+                <dd>
+                    <strong>Windows Only:</strong>
+                    The location of the 
+                    <a href="#msvcrt"><tt>MSVCRT.DLL</tt></a>. 
+                </dd>
+                <dt><a name="ALT_OUTPUTDIR"><tt>ALT_OUTPUTDIR</tt></a> </dt>
+                <dd>
+                    An override for specifying the (absolute) path of where the
+                    build output is to go.
+                    The default output directory will be build/<i>platform</i>.
+                </dd>
+                <dt><a name="ALT_SLASHJAVA"><tt>ALT_SLASHJAVA</tt></a></dt>
+                <dd>
+                    The default root location for many of the ALT path locations
+                    of the following ALT variables.
+                    The default value is 
+                    <tt>"/java"</tt> on Solaris and Linux, 
+                    <tt>"J:"</tt> on Windows.
+                </dd>
+                <dt><a name="ALT_UNIXCCS_PATH"><tt>ALT_UNIXCCS_PATH</tt></a></dt>
+                <dd>
+                    <strong>Solaris only:</strong>
+                    An override for specifying where the Unix CCS
+                    command set are located.
+                    The default location is <tt>/usr/ccs/bin</tt> 
+                </dd>
+                <dt><a name="ALT_UNIXCOMMAND_PATH"><tt>ALT_UNIXCOMMAND_PATH</tt></a> </dt>
+                <dd>
+                    An override for specifying where the
+                    Unix command set are located. 
+                    The default location varies depending on the platform,
+                    <tt>"%SYSTEMDRIVE%/MKSNT"</tt> or
+                    <tt>$(ROOTDIR)</tt> on Windows with MKS, otherwise it's 
+                    <tt>"/bin"</tt> or <tt>/usr/bin</tt>.
+                </dd>
+                <dt><a name="ALT_USRBIN_PATH"><tt>ALT_USRBIN_PATH</tt></a></dt>
+                <dd>
+                    An override for specifying where the
+                    Unix <tt>/usr/bin</tt> commands are located. You usually do not need
+                    to set this variable: the default location is <tt>/usr/bin</tt>)
+                </dd>
+                <dt><a name="ANT_HOME"><tt>ANT_HOME</tt></a></dt>
+                <dd>
+                    The location of the Ant installation. 
+                    See <a href="#ant">Ant</a> for more information.
+                    You should always set <tt>ANT_HOME</tt> explicitly.
+                </dd>
+                <dt><a name="arch_data_model"><tt>ARCH_DATA_MODEL</tt></a></dt>
+                <dd>The <tt>ARCH_DATA_MODEL</tt> variable
+                    is used to specify whether the build is to generate 32-bit or 64-bit
+                    binaries. 
+                    The Solaris build supports either 32-bit or 64-bit builds, but
+                    Windows and Linux will support only one, depending on the specific
+                    OS being used.
+                    Normally, setting this variable is only necessary on Solaris.
+                    Set <tt>ARCH_DATA_MODEL</tt> to <tt>32</tt> for generating 32-bit binaries, 
+                    or to <tt>64</tt> for generating 64-bit binaries.
+                </dd>
+                <dt><tt>BUILD_NUMBER</tt> </dt>
+                <dd>
+                    The build number for the build (<i>e.g.</i> "b27"). 
+                    The default value is "b00".
+                </dd>
+                <dt><tt>MILESTONE</tt> </dt>
+                <dd>
+                    The milestone name for the build (<i>e.g.</i>"beta"). 
+                    The default value is "internal".
+                </dd>
+                <dt><a name="path"><tt>PATH</tt></a> </dt>
+                <dd>Typically you want to set the <tt>PATH</tt> to include:
+                    <ul>
+                        <li>The location of the GNU make binary</li>
+                        <li>The location of the Bootstrap JDK <tt>java</tt> 
+                        (see <a href="#bootjdk">Bootstrap JDK</a>)</li>
+                        <li>The location of the C/C++ compilers 
+                        (see <a href="#compilers"><tt>compilers</tt></a>)</li>
+                        <li>The location or locations for the Unix command utilities
+                        (e.g. <tt>/usr/bin</tt>)</li>
+                    </ul>
                 </dd>
             </dl>
         </blockquote>
--- a/corba/.hgtags	Thu Jul 24 21:12:50 2008 -0700
+++ b/corba/.hgtags	Tue Aug 05 17:44:17 2008 -0700
@@ -5,3 +5,4 @@
 27509b7d21ed783b3f6eb7b7612781c675a30c2f jdk7-b28
 8b71960f79ce0a6fb8ddfeec03f03d400a361747 jdk7-b29
 c0252adbb2abbfdd6c35595429ac6fbdd98e20ac jdk7-b30
+ef6af34d75a7b44e77083f1d4ee47631fa09d3b4 jdk7-b31
--- a/hotspot/.hgtags	Thu Jul 24 21:12:50 2008 -0700
+++ b/hotspot/.hgtags	Tue Aug 05 17:44:17 2008 -0700
@@ -5,3 +5,4 @@
 c14dab40ed9bf45ad21150bd70c9c80cdf655415 jdk7-b28
 4f91c08b3e4498213a9c5a24898f7d9c38cf86fb jdk7-b29
 d1605aabd0a15ecf93787c47de63073c33fba52d jdk7-b30
+9c2ecc2ffb125f14fab3857fe7689598956348a0 jdk7-b31
--- a/hotspot/src/os/linux/vm/os_linux.cpp	Thu Jul 24 21:12:50 2008 -0700
+++ b/hotspot/src/os/linux/vm/os_linux.cpp	Tue Aug 05 17:44:17 2008 -0700
@@ -2414,8 +2414,20 @@
   return ::mprotect(bottom, size, prot) == 0;
 }
 
-bool os::protect_memory(char* addr, size_t size) {
-  return linux_mprotect(addr, size, PROT_READ);
+// Set protections specified
+bool os::protect_memory(char* addr, size_t bytes, ProtType prot,
+                        bool is_committed) {
+  unsigned int p = 0;
+  switch (prot) {
+  case MEM_PROT_NONE: p = PROT_NONE; break;
+  case MEM_PROT_READ: p = PROT_READ; break;
+  case MEM_PROT_RW:   p = PROT_READ|PROT_WRITE; break;
+  case MEM_PROT_RWX:  p = PROT_READ|PROT_WRITE|PROT_EXEC; break;
+  default:
+    ShouldNotReachHere();
+  }
+  // is_committed is unused.
+  return linux_mprotect(addr, bytes, p);
 }
 
 bool os::guard_memory(char* addr, size_t size) {
@@ -3704,8 +3716,9 @@
 
 // Mark the polling page as readable
 void os::make_polling_page_readable(void) {
-  if( !protect_memory((char *)_polling_page, Linux::page_size()) )
+  if( !linux_mprotect((char *)_polling_page, Linux::page_size(), PROT_READ)) {
     fatal("Could not enable polling page");
+  }
 };
 
 int os::active_processor_count() {
--- a/hotspot/src/os/solaris/vm/os_solaris.cpp	Thu Jul 24 21:12:50 2008 -0700
+++ b/hotspot/src/os/solaris/vm/os_solaris.cpp	Tue Aug 05 17:44:17 2008 -0700
@@ -2965,10 +2965,21 @@
   return retVal == 0;
 }
 
-// Protect memory (make it read-only. (Used to pass readonly pages through
+// Protect memory (Used to pass readonly pages through
 // JNI GetArray<type>Elements with empty arrays.)
-bool os::protect_memory(char* addr, size_t bytes) {
-  return solaris_mprotect(addr, bytes, PROT_READ);
+bool os::protect_memory(char* addr, size_t bytes, ProtType prot,
+                        bool is_committed) {
+  unsigned int p = 0;
+  switch (prot) {
+  case MEM_PROT_NONE: p = PROT_NONE; break;
+  case MEM_PROT_READ: p = PROT_READ; break;
+  case MEM_PROT_RW:   p = PROT_READ|PROT_WRITE; break;
+  case MEM_PROT_RWX:  p = PROT_READ|PROT_WRITE|PROT_EXEC; break;
+  default:
+    ShouldNotReachHere();
+  }
+  // is_committed is unused.
+  return solaris_mprotect(addr, bytes, p);
 }
 
 // guard_memory and unguard_memory only happens within stack guard pages.
--- a/hotspot/src/os/windows/vm/os_windows.cpp	Thu Jul 24 21:12:50 2008 -0700
+++ b/hotspot/src/os/windows/vm/os_windows.cpp	Tue Aug 05 17:44:17 2008 -0700
@@ -2170,6 +2170,7 @@
             // Windows 98 reports faulting addresses incorrectly
             if (!MacroAssembler::needs_explicit_null_check((intptr_t)addr) ||
                 !os::win32::is_nt()) {
+
               return Handle_Exception(exceptionInfo,
                   SharedRuntime::continuation_for_implicit_exception(thread, pc, SharedRuntime::IMPLICIT_NULL));
             }
@@ -2563,9 +2564,33 @@
   return VirtualFree(addr, 0, MEM_RELEASE) != 0;
 }
 
-bool os::protect_memory(char* addr, size_t bytes) {
+// Set protections specified
+bool os::protect_memory(char* addr, size_t bytes, ProtType prot,
+                        bool is_committed) {
+  unsigned int p = 0;
+  switch (prot) {
+  case MEM_PROT_NONE: p = PAGE_NOACCESS; break;
+  case MEM_PROT_READ: p = PAGE_READONLY; break;
+  case MEM_PROT_RW:   p = PAGE_READWRITE; break;
+  case MEM_PROT_RWX:  p = PAGE_EXECUTE_READWRITE; break;
+  default:
+    ShouldNotReachHere();
+  }
+
   DWORD old_status;
-  return VirtualProtect(addr, bytes, PAGE_READONLY, &old_status) != 0;
+
+  // Strange enough, but on Win32 one can change protection only for committed
+  // memory, not a big deal anyway, as bytes less or equal than 64K
+  if (!is_committed && !commit_memory(addr, bytes)) {
+    fatal("cannot commit protection page");
+  }
+  // One cannot use os::guard_memory() here, as on Win32 guard page
+  // have different (one-shot) semantics, from MSDN on PAGE_GUARD:
+  //
+  // Pages in the region become guard pages. Any attempt to access a guard page
+  // causes the system to raise a STATUS_GUARD_PAGE exception and turn off
+  // the guard page status. Guard pages thus act as a one-time access alarm.
+  return VirtualProtect(addr, bytes, p, &old_status) != 0;
 }
 
 bool os::guard_memory(char* addr, size_t bytes) {
--- a/hotspot/src/os_cpu/linux_sparc/vm/assembler_linux_sparc.cpp	Thu Jul 24 21:12:50 2008 -0700
+++ b/hotspot/src/os_cpu/linux_sparc/vm/assembler_linux_sparc.cpp	Tue Aug 05 17:44:17 2008 -0700
@@ -27,12 +27,6 @@
 
 #include <asm-sparc/traps.h>
 
-bool MacroAssembler::needs_explicit_null_check(intptr_t offset) {
-  // Since the linux kernel resides at the low end of
-  // user address space, no null pointer check is needed.
-  return offset < 0 || offset >= 0x100000;
-}
-
 void MacroAssembler::read_ccr_trap(Register ccr_save) {
   // No implementation
   breakpoint_trap();
--- a/hotspot/src/os_cpu/linux_x86/vm/assembler_linux_x86_32.cpp	Thu Jul 24 21:12:50 2008 -0700
+++ b/hotspot/src/os_cpu/linux_x86/vm/assembler_linux_x86_32.cpp	Tue Aug 05 17:44:17 2008 -0700
@@ -39,10 +39,3 @@
 
   movptr(thread, tls);
 }
-
-bool MacroAssembler::needs_explicit_null_check(intptr_t offset) {
-  // Linux kernel guarantees that the first page is always unmapped. Don't
-  // assume anything more than that.
-  bool offset_in_first_page =   0 <= offset  &&  offset < os::vm_page_size();
-  return !offset_in_first_page;
-}
--- a/hotspot/src/os_cpu/linux_x86/vm/assembler_linux_x86_64.cpp	Thu Jul 24 21:12:50 2008 -0700
+++ b/hotspot/src/os_cpu/linux_x86/vm/assembler_linux_x86_64.cpp	Tue Aug 05 17:44:17 2008 -0700
@@ -65,22 +65,3 @@
        popq(rax);
    }
 }
-
-bool MacroAssembler::needs_explicit_null_check(intptr_t offset) {
-  // Exception handler checks the nmethod's implicit null checks table
-  // only when this method returns false.
-  if (UseCompressedOops) {
-    // The first page after heap_base is unmapped and
-    // the 'offset' is equal to [heap_base + offset] for
-    // narrow oop implicit null checks.
-    uintptr_t heap_base = (uintptr_t)Universe::heap_base();
-    if ((uintptr_t)offset >= heap_base) {
-      // Normalize offset for the next check.
-      offset = (intptr_t)(pointer_delta((void*)offset, (void*)heap_base, 1));
-    }
-  }
-  // Linux kernel guarantees that the first page is always unmapped. Don't
-  // assume anything more than that.
-  bool offset_in_first_page =   0 <= offset  &&  offset < os::vm_page_size();
-  return !offset_in_first_page;
-}
--- a/hotspot/src/os_cpu/solaris_sparc/vm/assembler_solaris_sparc.cpp	Thu Jul 24 21:12:50 2008 -0700
+++ b/hotspot/src/os_cpu/solaris_sparc/vm/assembler_solaris_sparc.cpp	Tue Aug 05 17:44:17 2008 -0700
@@ -28,18 +28,6 @@
 #include <sys/trap.h>          // For trap numbers
 #include <v9/sys/psr_compat.h> // For V8 compatibility
 
-bool MacroAssembler::needs_explicit_null_check(intptr_t offset) {
-  // The first page of virtual addresses is unmapped on SPARC.
-  // Thus, any access the VM makes through a null pointer with an offset of
-  // less than 4K will get a recognizable SIGSEGV, which the signal handler
-  // will transform into a NullPointerException.
-  // (Actually, the first 64K or so is unmapped, but it's simpler
-  // to depend only on the first 4K or so.)
-
-  bool offset_in_first_page = 0 <= offset && offset < os::vm_page_size();
-  return !offset_in_first_page;
-}
-
 void MacroAssembler::read_ccr_trap(Register ccr_save) {
   // Execute a trap to get the PSR, mask and shift
   // to get the condition codes.
--- a/hotspot/src/os_cpu/solaris_x86/vm/assembler_solaris_x86_32.cpp	Thu Jul 24 21:12:50 2008 -0700
+++ b/hotspot/src/os_cpu/solaris_x86/vm/assembler_solaris_x86_32.cpp	Tue Aug 05 17:44:17 2008 -0700
@@ -79,9 +79,3 @@
   if (thread != rax) popl(rax);
   popl(thread);
 }
-
-bool MacroAssembler::needs_explicit_null_check(intptr_t offset) {
-  // Identical to Sparc/Solaris code
-  bool offset_in_first_page =   0 <= offset  &&  offset < os::vm_page_size();
-  return !offset_in_first_page;
-}
--- a/hotspot/src/os_cpu/solaris_x86/vm/assembler_solaris_x86_64.cpp	Thu Jul 24 21:12:50 2008 -0700
+++ b/hotspot/src/os_cpu/solaris_x86/vm/assembler_solaris_x86_64.cpp	Tue Aug 05 17:44:17 2008 -0700
@@ -85,22 +85,3 @@
     popq(rax);
   }
 }
-
-bool MacroAssembler::needs_explicit_null_check(intptr_t offset) {
-  // Identical to Sparc/Solaris code
-
-  // Exception handler checks the nmethod's implicit null checks table
-  // only when this method returns false.
-  if (UseCompressedOops) {
-    // The first page after heap_base is unmapped and
-    // the 'offset' is equal to [heap_base + offset] for
-    // narrow oop implicit null checks.
-    uintptr_t heap_base = (uintptr_t)Universe::heap_base();
-    if ((uintptr_t)offset >= heap_base) {
-      // Normalize offset for the next check.
-      offset = (intptr_t)(pointer_delta((void*)offset, (void*)heap_base, 1));
-    }
-  }
-  bool offset_in_first_page = 0 <= offset && offset < os::vm_page_size();
-  return !offset_in_first_page;
-}
--- a/hotspot/src/os_cpu/windows_x86/vm/assembler_windows_x86_32.cpp	Thu Jul 24 21:12:50 2008 -0700
+++ b/hotspot/src/os_cpu/windows_x86/vm/assembler_windows_x86_32.cpp	Tue Aug 05 17:44:17 2008 -0700
@@ -58,7 +58,3 @@
          "Thread Pointer Offset has not been initialized");
   movl(thread, Address(thread, ThreadLocalStorage::get_thread_ptr_offset()));
 }
-
-bool MacroAssembler::needs_explicit_null_check(intptr_t offset) {
-  return offset < 0 || (int)os::vm_page_size() <= offset;
-}
--- a/hotspot/src/os_cpu/windows_x86/vm/assembler_windows_x86_64.cpp	Thu Jul 24 21:12:50 2008 -0700
+++ b/hotspot/src/os_cpu/windows_x86/vm/assembler_windows_x86_64.cpp	Tue Aug 05 17:44:17 2008 -0700
@@ -65,19 +65,3 @@
        popq(rax);
    }
 }
-
-bool MacroAssembler::needs_explicit_null_check(intptr_t offset) {
-  // Exception handler checks the nmethod's implicit null checks table
-  // only when this method returns false.
-  if (UseCompressedOops) {
-    // The first page after heap_base is unmapped and
-    // the 'offset' is equal to [heap_base + offset] for
-    // narrow oop implicit null checks.
-    uintptr_t heap_base = (uintptr_t)Universe::heap_base();
-    if ((uintptr_t)offset >= heap_base) {
-      // Normalize offset for the next check.
-      offset = (intptr_t)(pointer_delta((void*)offset, (void*)heap_base, 1));
-    }
-  }
-  return offset < 0 || os::vm_page_size() <= offset;
-}
--- a/hotspot/src/share/vm/asm/assembler.cpp	Thu Jul 24 21:12:50 2008 -0700
+++ b/hotspot/src/share/vm/asm/assembler.cpp	Tue Aug 05 17:44:17 2008 -0700
@@ -246,6 +246,24 @@
   }
 }
 
+bool MacroAssembler::needs_explicit_null_check(intptr_t offset) {
+  // Exception handler checks the nmethod's implicit null checks table
+  // only when this method returns false.
+#ifndef SPARC
+  // Sparc does not have based addressing
+  if (UseCompressedOops) {
+    // The first page after heap_base is unmapped and
+    // the 'offset' is equal to [heap_base + offset] for
+    // narrow oop implicit null checks.
+    uintptr_t heap_base = (uintptr_t)Universe::heap_base();
+    if ((uintptr_t)offset >= heap_base) {
+      // Normalize offset for the next check.
+      offset = (intptr_t)(pointer_delta((void*)offset, (void*)heap_base, 1));
+    }
+  }
+#endif // SPARC
+  return offset < 0 || os::vm_page_size() <= offset;
+}
 
 #ifndef PRODUCT
 void Label::print_instructions(MacroAssembler* masm) const {
--- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/parMarkBitMap.cpp	Thu Jul 24 21:12:50 2008 -0700
+++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/parMarkBitMap.cpp	Tue Aug 05 17:44:17 2008 -0700
@@ -61,6 +61,8 @@
   if (_virtual_space != NULL) {
     delete _virtual_space;
     _virtual_space = NULL;
+    // Release memory reserved in the space.
+    rs.release();
   }
   return false;
 }
--- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.cpp	Thu Jul 24 21:12:50 2008 -0700
+++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.cpp	Tue Aug 05 17:44:17 2008 -0700
@@ -108,8 +108,8 @@
   // size than is needed or wanted for the perm gen.  Use the "compound
   // alignment" ReservedSpace ctor to avoid having to use the same page size for
   // all gens.
-  ReservedSpace heap_rs(pg_max_size, pg_align, og_max_size + yg_max_size,
-                        og_align);
+  ReservedHeapSpace heap_rs(pg_max_size, pg_align, og_max_size + yg_max_size,
+                            og_align);
   os::trace_page_sizes("ps perm", pg_min_size, pg_max_size, pg_page_sz,
                        heap_rs.base(), pg_max_size);
   os::trace_page_sizes("ps main", og_min_size + yg_min_size,
--- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp	Thu Jul 24 21:12:50 2008 -0700
+++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp	Tue Aug 05 17:44:17 2008 -0700
@@ -422,6 +422,8 @@
       return vspace;
     }
     delete vspace;
+    // Release memory reserved in the space.
+    rs.release();
   }
 
   return 0;
--- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psVirtualspace.cpp	Thu Jul 24 21:12:50 2008 -0700
+++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psVirtualspace.cpp	Tue Aug 05 17:44:17 2008 -0700
@@ -71,13 +71,8 @@
 
 void PSVirtualSpace::release() {
   DEBUG_ONLY(PSVirtualSpaceVerifier this_verifier(this));
-  if (reserved_low_addr() != NULL) {
-    if (special()) {
-      os::release_memory_special(reserved_low_addr(), reserved_size());
-    } else {
-      (void)os::release_memory(reserved_low_addr(), reserved_size());
-    }
-  }
+  // This may not release memory it didn't reserve.
+  // Use rs.release() to release the underlying memory instead.
   _reserved_low_addr = _reserved_high_addr = NULL;
   _committed_low_addr = _committed_high_addr = NULL;
   _special = false;
--- a/hotspot/src/share/vm/memory/genCollectedHeap.cpp	Thu Jul 24 21:12:50 2008 -0700
+++ b/hotspot/src/share/vm/memory/genCollectedHeap.cpp	Tue Aug 05 17:44:17 2008 -0700
@@ -222,8 +222,8 @@
 
   *_total_reserved = total_reserved;
   *_n_covered_regions = n_covered_regions;
-  *heap_rs = ReservedSpace(total_reserved, alignment,
-                           UseLargePages, heap_address);
+  *heap_rs = ReservedHeapSpace(total_reserved, alignment,
+                               UseLargePages, heap_address);
 
   return heap_address;
 }
--- a/hotspot/src/share/vm/prims/jni.cpp	Thu Jul 24 21:12:50 2008 -0700
+++ b/hotspot/src/share/vm/prims/jni.cpp	Tue Aug 05 17:44:17 2008 -0700
@@ -2173,8 +2173,7 @@
     size_t size = os::vm_allocation_granularity();
     bad_address = os::reserve_memory(size);
     if (bad_address != NULL) {
-      os::commit_memory(bad_address, size);
-      os::protect_memory(bad_address, size);
+      os::protect_memory(bad_address, size, os::MEM_PROT_READ);
     }
   }
   return bad_address;
--- a/hotspot/src/share/vm/runtime/arguments.cpp	Thu Jul 24 21:12:50 2008 -0700
+++ b/hotspot/src/share/vm/runtime/arguments.cpp	Tue Aug 05 17:44:17 2008 -0700
@@ -1176,8 +1176,7 @@
   // by ergonomics.
   if (MaxHeapSize <= max_heap_for_compressed_oops()) {
     if (FLAG_IS_DEFAULT(UseCompressedOops)) {
-      // Leave compressed oops off by default. Uncomment
-      // the following line to return it to default status.
+      // Turn off until bug is fixed.
       // FLAG_SET_ERGO(bool, UseCompressedOops, true);
     }
   } else {
--- a/hotspot/src/share/vm/runtime/os.cpp	Thu Jul 24 21:12:50 2008 -0700
+++ b/hotspot/src/share/vm/runtime/os.cpp	Tue Aug 05 17:44:17 2008 -0700
@@ -922,8 +922,9 @@
   // time and expensive page trap spinning, 'SerializePageLock' is used to block
   // the mutator thread if such case is encountered. See bug 6546278 for details.
   Thread::muxAcquire(&SerializePageLock, "serialize_thread_states");
-  os::protect_memory( (char *)os::get_memory_serialize_page(), os::vm_page_size() );
-  os::unguard_memory( (char *)os::get_memory_serialize_page(), os::vm_page_size() );
+  os::protect_memory((char *)os::get_memory_serialize_page(),
+                     os::vm_page_size(), MEM_PROT_READ, /*is_committed*/true );
+  os::unguard_memory((char *)os::get_memory_serialize_page(), os::vm_page_size());
   Thread::muxRelease(&SerializePageLock);
 }
 
--- a/hotspot/src/share/vm/runtime/os.hpp	Thu Jul 24 21:12:50 2008 -0700
+++ b/hotspot/src/share/vm/runtime/os.hpp	Tue Aug 05 17:44:17 2008 -0700
@@ -193,7 +193,11 @@
   static bool   commit_memory(char* addr, size_t size, size_t alignment_hint);
   static bool   uncommit_memory(char* addr, size_t bytes);
   static bool   release_memory(char* addr, size_t bytes);
-  static bool   protect_memory(char* addr, size_t bytes);
+
+  enum ProtType { MEM_PROT_NONE, MEM_PROT_READ, MEM_PROT_RW, MEM_PROT_RWX };
+  static bool   protect_memory(char* addr, size_t bytes, ProtType prot,
+                               bool is_committed = false);
+
   static bool   guard_memory(char* addr, size_t bytes);
   static bool   unguard_memory(char* addr, size_t bytes);
   static char*  map_memory(int fd, const char* file_name, size_t file_offset,
--- a/hotspot/src/share/vm/runtime/virtualspace.cpp	Thu Jul 24 21:12:50 2008 -0700
+++ b/hotspot/src/share/vm/runtime/virtualspace.cpp	Tue Aug 05 17:44:17 2008 -0700
@@ -28,12 +28,15 @@
 
 // ReservedSpace
 ReservedSpace::ReservedSpace(size_t size) {
-  initialize(size, 0, false, NULL);
+  initialize(size, 0, false, NULL, 0);
 }
 
 ReservedSpace::ReservedSpace(size_t size, size_t alignment,
-                             bool large, char* requested_address) {
-  initialize(size, alignment, large, requested_address);
+                             bool large,
+                             char* requested_address,
+                             const size_t noaccess_prefix) {
+  initialize(size+noaccess_prefix, alignment, large, requested_address,
+             noaccess_prefix);
 }
 
 char *
@@ -105,7 +108,8 @@
 ReservedSpace::ReservedSpace(const size_t prefix_size,
                              const size_t prefix_align,
                              const size_t suffix_size,
-                             const size_t suffix_align)
+                             const size_t suffix_align,
+                             const size_t noaccess_prefix)
 {
   assert(prefix_size != 0, "sanity");
   assert(prefix_align != 0, "sanity");
@@ -118,12 +122,16 @@
   assert((suffix_align & prefix_align - 1) == 0,
     "suffix_align not divisible by prefix_align");
 
+  // Add in noaccess_prefix to prefix_size;
+  const size_t adjusted_prefix_size = prefix_size + noaccess_prefix;
+  const size_t size = adjusted_prefix_size + suffix_size;
+
   // On systems where the entire region has to be reserved and committed up
   // front, the compound alignment normally done by this method is unnecessary.
   const bool try_reserve_special = UseLargePages &&
     prefix_align == os::large_page_size();
   if (!os::can_commit_large_page_memory() && try_reserve_special) {
-    initialize(prefix_size + suffix_size, prefix_align, true);
+    initialize(size, prefix_align, true, NULL, noaccess_prefix);
     return;
   }
 
@@ -131,15 +139,19 @@
   _size = 0;
   _alignment = 0;
   _special = false;
+  _noaccess_prefix = 0;
+
+  // Assert that if noaccess_prefix is used, it is the same as prefix_align.
+  assert(noaccess_prefix == 0 ||
+         noaccess_prefix == prefix_align, "noaccess prefix wrong");
 
   // Optimistically try to reserve the exact size needed.
-  const size_t size = prefix_size + suffix_size;
   char* addr = os::reserve_memory(size, NULL, prefix_align);
   if (addr == NULL) return;
 
   // Check whether the result has the needed alignment (unlikely unless
   // prefix_align == suffix_align).
-  const size_t ofs = size_t(addr) + prefix_size & suffix_align - 1;
+  const size_t ofs = size_t(addr) + adjusted_prefix_size & suffix_align - 1;
   if (ofs != 0) {
     // Wrong alignment.  Release, allocate more space and do manual alignment.
     //
@@ -153,11 +165,11 @@
     }
 
     const size_t extra = MAX2(ofs, suffix_align - ofs);
-    addr = reserve_and_align(size + extra, prefix_size, prefix_align,
+    addr = reserve_and_align(size + extra, adjusted_prefix_size, prefix_align,
                              suffix_size, suffix_align);
     if (addr == NULL) {
       // Try an even larger region.  If this fails, address space is exhausted.
-      addr = reserve_and_align(size + suffix_align, prefix_size,
+      addr = reserve_and_align(size + suffix_align, adjusted_prefix_size,
                                prefix_align, suffix_size, suffix_align);
     }
   }
@@ -165,10 +177,12 @@
   _base = addr;
   _size = size;
   _alignment = prefix_align;
+  _noaccess_prefix = noaccess_prefix;
 }
 
 void ReservedSpace::initialize(size_t size, size_t alignment, bool large,
-                               char* requested_address) {
+                               char* requested_address,
+                               const size_t noaccess_prefix) {
   const size_t granularity = os::vm_allocation_granularity();
   assert((size & granularity - 1) == 0,
          "size not aligned to os::vm_allocation_granularity()");
@@ -181,6 +195,7 @@
   _size = 0;
   _special = false;
   _alignment = 0;
+  _noaccess_prefix = 0;
   if (size == 0) {
     return;
   }
@@ -220,7 +235,8 @@
     // important.  If available space is not detected, return NULL.
 
     if (requested_address != 0) {
-      base = os::attempt_reserve_memory_at(size, requested_address);
+      base = os::attempt_reserve_memory_at(size,
+                                           requested_address-noaccess_prefix);
     } else {
       base = os::reserve_memory(size, NULL, alignment);
     }
@@ -259,6 +275,11 @@
   _base = base;
   _size = size;
   _alignment = MAX2(alignment, (size_t) os::vm_page_size());
+  _noaccess_prefix = noaccess_prefix;
+
+  // Assert that if noaccess_prefix is used, it is the same as alignment.
+  assert(noaccess_prefix == 0 ||
+         noaccess_prefix == _alignment, "noaccess prefix wrong");
 
   assert(markOopDesc::encode_pointer_as_mark(_base)->decode_pointer() == _base,
          "area must be distinguisable from marks for mark-sweep");
@@ -274,6 +295,7 @@
   _base = base;
   _size = size;
   _alignment = alignment;
+  _noaccess_prefix = 0;
   _special = special;
 }
 
@@ -320,17 +342,58 @@
 
 void ReservedSpace::release() {
   if (is_reserved()) {
+    char *real_base = _base - _noaccess_prefix;
+    const size_t real_size = _size + _noaccess_prefix;
     if (special()) {
-      os::release_memory_special(_base, _size);
+      os::release_memory_special(real_base, real_size);
     } else{
-      os::release_memory(_base, _size);
+      os::release_memory(real_base, real_size);
     }
     _base = NULL;
     _size = 0;
+    _noaccess_prefix = 0;
     _special = false;
   }
 }
 
+void ReservedSpace::protect_noaccess_prefix(const size_t size) {
+  // If there is noaccess prefix, return.
+  if (_noaccess_prefix == 0) return;
+
+  assert(_noaccess_prefix >= (size_t)os::vm_page_size(),
+         "must be at least page size big");
+
+  // Protect memory at the base of the allocated region.
+  // If special, the page was committed (only matters on windows)
+  if (!os::protect_memory(_base, _noaccess_prefix, os::MEM_PROT_NONE,
+                          _special)) {
+    fatal("cannot protect protection page");
+  }
+
+  _base += _noaccess_prefix;
+  _size -= _noaccess_prefix;
+  assert((size == _size) && ((uintptr_t)_base % _alignment == 0),
+         "must be exactly of required size and alignment");
+}
+
+ReservedHeapSpace::ReservedHeapSpace(size_t size, size_t alignment,
+                                     bool large, char* requested_address) :
+  ReservedSpace(size, alignment, large,
+                requested_address,
+                UseCompressedOops ? lcm(os::vm_page_size(), alignment) : 0) {
+  // Only reserved space for the java heap should have a noaccess_prefix
+  // if using compressed oops.
+  protect_noaccess_prefix(size);
+}
+
+ReservedHeapSpace::ReservedHeapSpace(const size_t prefix_size,
+                                     const size_t prefix_align,
+                                     const size_t suffix_size,
+                                     const size_t suffix_align) :
+  ReservedSpace(prefix_size, prefix_align, suffix_size, suffix_align,
+                UseCompressedOops ? lcm(os::vm_page_size(), prefix_align) : 0) {
+  protect_noaccess_prefix(prefix_size+suffix_size);
+}
 
 // VirtualSpace
 
@@ -348,6 +411,7 @@
   _lower_alignment        = 0;
   _middle_alignment       = 0;
   _upper_alignment        = 0;
+  _special                = false;
 }
 
 
@@ -402,7 +466,8 @@
 
 
 void VirtualSpace::release() {
-  (void)os::release_memory(low_boundary(), reserved_size());
+  // This does not release memory it never reserved.
+  // Caller must release via rs.release();
   _low_boundary           = NULL;
   _high_boundary          = NULL;
   _low                    = NULL;
--- a/hotspot/src/share/vm/runtime/virtualspace.hpp	Thu Jul 24 21:12:50 2008 -0700
+++ b/hotspot/src/share/vm/runtime/virtualspace.hpp	Tue Aug 05 17:44:17 2008 -0700
@@ -29,13 +29,15 @@
  private:
   char*  _base;
   size_t _size;
+  size_t _noaccess_prefix;
   size_t _alignment;
   bool   _special;
 
   // ReservedSpace
   ReservedSpace(char* base, size_t size, size_t alignment, bool special);
   void initialize(size_t size, size_t alignment, bool large,
-                  char* requested_address = NULL);
+                  char* requested_address,
+                  const size_t noaccess_prefix);
 
   // Release parts of an already-reserved memory region [addr, addr + len) to
   // get a new region that has "compound alignment."  Return the start of the
@@ -59,13 +61,19 @@
                           const size_t suffix_size,
                           const size_t suffix_align);
 
+ protected:
+  // Create protection page at the beginning of the space.
+  void protect_noaccess_prefix(const size_t size);
+
  public:
   // Constructor
   ReservedSpace(size_t size);
   ReservedSpace(size_t size, size_t alignment, bool large,
-                char* requested_address = NULL);
+                char* requested_address = NULL,
+                const size_t noaccess_prefix = 0);
   ReservedSpace(const size_t prefix_size, const size_t prefix_align,
-                const size_t suffix_size, const size_t suffix_align);
+                const size_t suffix_size, const size_t suffix_align,
+                const size_t noaccess_prefix);
 
   // Accessors
   char*  base()      const { return _base;      }
@@ -73,6 +81,8 @@
   size_t alignment() const { return _alignment; }
   bool   special()   const { return _special;   }
 
+  size_t noaccess_prefix()   const { return _noaccess_prefix;   }
+
   bool is_reserved() const { return _base != NULL; }
   void release();
 
@@ -104,6 +114,16 @@
   return last_part(partition_size, alignment());
 }
 
+// Class encapsulating behavior specific of memory space reserved for Java heap
+class ReservedHeapSpace : public ReservedSpace {
+public:
+  // Constructor
+  ReservedHeapSpace(size_t size, size_t forced_base_alignment,
+                    bool large, char* requested_address);
+  ReservedHeapSpace(const size_t prefix_size, const size_t prefix_align,
+                    const size_t suffix_size, const size_t suffix_align);
+};
+
 // VirtualSpace is data structure for committing a previously reserved address range in smaller chunks.
 
 class VirtualSpace VALUE_OBJ_CLASS_SPEC {
--- a/jaxp/.hgtags	Thu Jul 24 21:12:50 2008 -0700
+++ b/jaxp/.hgtags	Tue Aug 05 17:44:17 2008 -0700
@@ -5,3 +5,4 @@
 b996318955c0ad8e9fa0ffb56c74f626786e863f jdk7-b28
 617ee8607cfd5fd81f233f3c0b690f85084687a0 jdk7-b29
 2d94a238a1641d074e6032dcdceed461d6f85d6a jdk7-b30
+255d64ee287e926e8629dd80bc67690e65eeba30 jdk7-b31
--- a/jaxws/.hgtags	Thu Jul 24 21:12:50 2008 -0700
+++ b/jaxws/.hgtags	Tue Aug 05 17:44:17 2008 -0700
@@ -5,3 +5,4 @@
 eefcd5204500a11d6aa802dca9f961cf10ab64c2 jdk7-b28
 836c55713abab186e4de0c6eabd06ff008c7b8d0 jdk7-b29
 7f2466f8cc7009702e548d1a763254f546024d7e jdk7-b30
+f978623825364a2ad9c6f51d02fc9424a8b0bc86 jdk7-b31
--- a/jdk/.hgtags	Thu Jul 24 21:12:50 2008 -0700
+++ b/jdk/.hgtags	Tue Aug 05 17:44:17 2008 -0700
@@ -6,3 +6,4 @@
 e21f4266466cd1306b176aaa08b2cd8337a9be3d jdk7-b29
 b6d6877c1155621a175dccd12dc14c54f938fb8b jdk7-b30
 b7474b739d13bacd9972f88ac91f6350b7b0be12 jdk7-b31
+c51121419e30eac5f0fbbce45ff1711c4ce0de28 jdk7-b32
--- a/jdk/make/com/sun/java/pack/Makefile	Thu Jul 24 21:12:50 2008 -0700
+++ b/jdk/make/com/sun/java/pack/Makefile	Tue Aug 05 17:44:17 2008 -0700
@@ -97,9 +97,6 @@
 	/D "J2SE_FTYPE=0x1L"
 
   RES = $(OBJDIR)/$(PGRM).res
-
-  # Files built here do not compile with warning level 3 if warnings are fatal
-  COMPILER_WARNINGS_FATAL=false
 else
   LDOUTPUT = -o #Have a space 
   LDDFLAGS += -lc
--- a/jdk/make/com/sun/security/auth/module/Makefile	Thu Jul 24 21:12:50 2008 -0700
+++ b/jdk/make/com/sun/security/auth/module/Makefile	Tue Aug 05 17:44:17 2008 -0700
@@ -55,9 +55,6 @@
     EXTRA_LIBS += netapi32.lib user32.lib mpr.lib
   endif #fdlibm
   # code generates errors when compiled at warning level 3 and warnings are fatal
-  ifeq ($(ARCH_DATA_MODEL), 64)
-    COMPILER_WARNINGS_FATAL=false
-  endif # ARCH_DATA_MODEL
 endif # windows
 
 ifeq ($(PLATFORM), solaris)
--- a/jdk/make/common/Defs-linux.gmk	Thu Jul 24 21:12:50 2008 -0700
+++ b/jdk/make/common/Defs-linux.gmk	Tue Aug 05 17:44:17 2008 -0700
@@ -149,10 +149,9 @@
 PIC_CODE_LARGE = -fPIC
 PIC_CODE_SMALL = -fpic
 GLOBAL_KPIC = $(PIC_CODE_LARGE)
+CFLAGS_COMMON   += $(GLOBAL_KPIC) $(GCC_WARNINGS)
 ifeq ($(ARCH), amd64)
-   CFLAGS_COMMON   += $(GLOBAL_KPIC) $(GCC_WARNINGS) -pipe
-else
-   CFLAGS_COMMON   += $(GLOBAL_KPIC) $(GCC_WARNINGS)
+ CFLAGS_COMMON += -pipe
 endif
 
 # Linux 64bit machines use Dwarf2, which can be HUGE, have fastdebug use -g1
--- a/jdk/make/common/Defs-solaris.gmk	Thu Jul 24 21:12:50 2008 -0700
+++ b/jdk/make/common/Defs-solaris.gmk	Tue Aug 05 17:44:17 2008 -0700
@@ -40,6 +40,9 @@
 #   LDLIBS        (set $(EXTRA_LIBS) instead)
 #   LDLIBS_COMMON (set $(EXTRA_LIBS) instead)
 #   LINTFLAGS     (set $(OTHER_LINTFLAGS) instead)
+#
+# Note: CPPFLAGS are used in C and C++ compiles.
+#
 
 # Get shared JDK settings
 include $(JDK_MAKE_SHARED_DIR)/Defs.gmk
@@ -112,6 +115,10 @@
 #                       Required with many of the source files.
 #       -mt             Assume multi-threaded (important)
 #
+# The more unusual options to the Sun C compiler:
+#       +w              Print more warnings
+#       +w2             Maximum warnings
+#
 
 #
 # Debug flag for C and C++ compiler
@@ -140,15 +147,34 @@
   CXXFLAGS_DEBUG_OPTION  = -g0  $(CC_FASTDEBUG_OPT)
 endif
 
-CFLAGS_COMMON   = -v -mt -L$(OBJDIR) -xc99=%none
+CFLAGS_COMMON   = -L$(OBJDIR)
+
+# Do not allow C99 language features like declarations in code etc.
+CFLAGS_COMMON  += -xc99=%none
+
+# Allow C++ comments in C code
 CFLAGS_COMMON  += -xCC
-CFLAGS_COMMON  += -errshort=tags
+
+# Show error message tags on errors
+CFLAGS_COMMON   += -errshort=tags
+CXXFLAGS_COMMON += -errtags=yes
+
+# Optimization flags
 CFLAGS_OPT      = $(POPT)
+
+# Debug version flags
 CFLAGS_DBG      = $(CFLAGS_DEBUG_OPTION)
-CFLAGS_COMMON  +=  -Xa $(CFLAGS_REQUIRED)
+
+# Required C compiler flags
+CFLAGS_COMMON  += -Xa $(CFLAGS_REQUIRED)
+
+# Maximum warnings all the time
+CXXFLAGS_COMMON += +w
+CFLAGS_COMMON   += -v
 
 # Assume MT behavior all the time (important)
-CXXFLAGS_COMMON  = -mt
+CXXFLAGS_COMMON += -mt
+CFLAGS_COMMON   += -mt
 
 # Assume no C++ exceptions are used
 CXXFLAGS_COMMON += -features=no%except -DCC_NOEX
@@ -237,8 +263,8 @@
 # OTHER_CFLAGS += -DPERTURBALOT
 #
 
-CPPFLAGS_COMMON = -D$(ARCH_FAMILY) -D__solaris__ -D_REENTRANT 
-CPPFLAGS_OPT    = 
+CPPFLAGS_COMMON = -D__solaris__  -D$(ARCH_FAMILY)
+CPPFLAGS_OPT    = -DNDEBUG
 CPPFLAGS_DBG    = -DDEBUG
 
 ifeq ($(ARCH_FAMILY), i586)
--- a/jdk/make/common/Defs-windows.gmk	Thu Jul 24 21:12:50 2008 -0700
+++ b/jdk/make/common/Defs-windows.gmk	Tue Aug 05 17:44:17 2008 -0700
@@ -283,7 +283,7 @@
 ifeq ($(ARCH), amd64)
   CPPFLAGS_COMMON += -D_AMD64_ -Damd64
 else
-  CPPFLAGS_COMMON += -DWIN32 -D_X86_ -Dx86 
+  CPPFLAGS_COMMON += -D_X86_ -Dx86 
 endif
 CPPFLAGS_COMMON += -DWIN32_LEAN_AND_MEAN
 
@@ -293,16 +293,23 @@
 CFLAGS_COMMON += -Fd$(OBJDIR)/$(basename $(@F)).pdb -Fm$(OBJDIR)/$(basename $(@F)).map
 
 #
+# Use -wdNNNN to disable warning NNNN.
+#   C4800 is a warning about bool performance casts (can't make go away)
+#
+COMPILER_WARNINGS_TO_IGNORE = 4800
+CFLAGS_COMMON += $(COMPILER_WARNINGS_TO_IGNORE:%=-wd%)
+
+#
 # Add warnings and extra on 64bit issues
 #
 ifeq ($(ARCH_DATA_MODEL), 64)
   CFLAGS_COMMON += -Wp64 
 endif
-CFLAGS_COMMON += -W$(COMPILER_WARNING_LEVEL)
 
 #
 # Treat compiler warnings as errors, if requested
 #
+CFLAGS_COMMON += -W$(COMPILER_WARNING_LEVEL)
 ifeq ($(COMPILER_WARNINGS_FATAL),true)
   CFLAGS_COMMON += -WX
 endif
@@ -352,17 +359,9 @@
   #    BUILD_WIN_SA=1
   # on the make command.
   ifdef BUILD_WIN_SA
-    ifeq ($(ARCH), amd64)
-      INCLUDE_SA = true
-    else
-      INCLUDE_SA = true
-    endif
+    INCLUDE_SA = true
   else
-    ifeq ($(ARCH), amd64)
-      INCLUDE_SA = false
-    else
-      INCLUDE_SA = false
-    endif
+    INCLUDE_SA = false
   endif
 endif
 
@@ -404,7 +403,6 @@
 else
   JDK_UPDATE_VER := 0
 endif
-JDK_VER = $(JDK_MINOR_VERSION),$(JDK_MICRO_VERSION),$(JDK_UPDATE_VER),$(COOKED_BUILD_NUMBER)
 
 RC_FLAGS = /l 0x409 /r
 
@@ -414,15 +412,23 @@
   RC_FLAGS += $(MS_RC_DEBUG_OPTION)
 endif 
 
-ifndef COPYRIGHT_YEAR
-    COPYRIGHT_YEAR = 2007 
-endif
+# Values for the RC variables defined in RC_FLAGS
+JDK_RC_BUILD_ID = $(FULL_VERSION)
+JDK_RC_COMPANY = $(COMPANY_NAME)
+JDK_RC_COMPONENT = $(PRODUCT_NAME) $(JDK_RC_PLATFORM_NAME) binary
+JDK_RC_VER = \
+    $(JDK_MINOR_VERSION).$(JDK_MICRO_VERSION).$(JDK_UPDATE_VER).$(COOKED_BUILD_NUMBER)
+JDK_RC_COPYRIGHT = Copyright \xA9 $(COPYRIGHT_YEAR)
+JDK_RC_NAME = \
+    $(PRODUCT_NAME) $(JDK_RC_PLATFORM_NAME) $(JDK_MINOR_VERSION) $(JDK_UPDATE_META_TAG)
+JDK_RC_FVER = \
+    $(JDK_MINOR_VERSION),$(JDK_MICRO_VERSION),$(JDK_UPDATE_VER),$(COOKED_BUILD_NUMBER)
 
 # J2SE name required here
-RC_FLAGS += -d "J2SE_BUILD_ID=$(FULL_VERSION)" \
-            -d "J2SE_COMPANY=$(COMPANY_NAME)" \
-            -d "J2SE_COMPONENT=$(PRODUCT_NAME) Platform SE binary" \
-            -d "J2SE_VER=$(JDK_MINOR_VERSION).$(JDK_MICRO_VERSION).$(JDK_UPDATE_VER).$(COOKED_BUILD_NUMBER)" \
-            -d "J2SE_COPYRIGHT=Copyright \xA9 $(COPYRIGHT_YEAR)" \
-            -d "J2SE_NAME=$(PRODUCT_NAME) Platform SE $(JDK_MINOR_VERSION) $(JDK_UPDATE_META_TAG)" \
-            -d "J2SE_FVER=$(JDK_VER)"
+RC_FLAGS += -d "J2SE_BUILD_ID=$(JDK_RC_BUILD_ID)" \
+            -d "J2SE_COMPANY=$(JDK_RC_COMPANY)" \
+            -d "J2SE_COMPONENT=$(JDK_RC_COMPONENT)" \
+            -d "J2SE_VER=$(JDK_RC_VER)" \
+            -d "J2SE_COPYRIGHT=$(JDK_RC_COPYRIGHT)" \
+            -d "J2SE_NAME=$(JDK_RC_NAME)" \
+            -d "J2SE_FVER=$(JDK_RC_FVER)"
--- a/jdk/make/common/Defs.gmk	Thu Jul 24 21:12:50 2008 -0700
+++ b/jdk/make/common/Defs.gmk	Tue Aug 05 17:44:17 2008 -0700
@@ -703,7 +703,7 @@
 ifdef ALT_COPYRIGHT_YEAR
   COPYRIGHT_YEAR = $(ALT_COPYRIGHT_YEAR)
 else
-  COPYRIGHT_YEAR = $(shell $(DATE) '+%Y')
+  COPYRIGHT_YEAR := $(shell $(DATE) '+%Y')
 endif
 
 # Install of imported file (JDK_IMPORT_PATH, or some other external location)
--- a/jdk/make/common/shared/Compiler-gcc.gmk	Thu Jul 24 21:12:50 2008 -0700
+++ b/jdk/make/common/shared/Compiler-gcc.gmk	Tue Aug 05 17:44:17 2008 -0700
@@ -73,23 +73,18 @@
     REQUIRED_CC_VER = 4.0
     REQUIRED_GCC_VER = 4.0.*
   else
-  ifeq ($(ARCH_DATA_MODEL), 32)
-    # i586
     REQUIRED_CC_VER = 3.2
-    REQUIRED_GCC_VER = 3.2.1*
-    REQUIRED_GCC_VER_INT = 3.2.1-7a
-  else
-  ifeq ($(ARCH), amd64)
-    # amd64
-    REQUIRED_CC_VER = 3.2
-    REQUIRED_GCC_VER = 3.2.*
-  endif
-  ifeq ($(ARCH), ia64)
-    # ia64
-    REQUIRED_CC_VER = 3.2
-    REQUIRED_GCC_VER = 2.9[56789].*
-  endif
-  endif
+    ifeq ($(ARCH_DATA_MODEL), 32)
+      REQUIRED_GCC_VER = 3.2.1*
+      REQUIRED_GCC_VER_INT = 3.2.1-7a
+    else
+      ifeq ($(ARCH), amd64)
+        REQUIRED_GCC_VER = 3.2.*
+      endif
+      ifeq ($(ARCH), ia64)
+        REQUIRED_GCC_VER = 2.9[56789].*
+      endif
+    endif
   endif
   # Option used to create a shared library
   SHARED_LIBRARY_FLAG = -shared -mimpure-text
--- a/jdk/make/common/shared/Defs-java.gmk	Thu Jul 24 21:12:50 2008 -0700
+++ b/jdk/make/common/shared/Defs-java.gmk	Tue Aug 05 17:44:17 2008 -0700
@@ -107,7 +107,10 @@
 ifeq ($(DEBUG_CLASSFILES),true)
   JAVACFLAGS += -g
 endif
-ifeq ($(COMPILER_WARNINGS_FATAL), true)
+ifeq ($(JAVAC_MAX_WARNINGS), true)
+  JAVACFLAGS  += -Xlint:all
+endif
+ifeq ($(JAVAC_WARNINGS_FATAL), true)
   JAVACFLAGS  += -Werror
 endif
 
@@ -180,7 +183,10 @@
 # The javac options supplied to the boot javac is limited. This compiler
 #   should only be used to build the 'make/tools' sources, which are not
 #   class files that end up in the classes directory.
-ifeq ($(COMPILER_WARNINGS_FATAL), true)
+ifeq ($(JAVAC_MAX_WARNINGS), true)
+  BOOT_JAVACFLAGS  += -Xlint:all
+endif
+ifeq ($(JAVAC_WARNINGS_FATAL), true)
   BOOT_JAVACFLAGS  += -Werror
 endif
 BOOT_JAVACFLAGS  += -encoding ascii
--- a/jdk/make/common/shared/Defs.gmk	Thu Jul 24 21:12:50 2008 -0700
+++ b/jdk/make/common/shared/Defs.gmk	Tue Aug 05 17:44:17 2008 -0700
@@ -188,16 +188,18 @@
 endif
 
 # Default names
-LAUNCHER_NAME = java
-PRODUCT_NAME = Java(TM)
-PRODUCT_SUFFIX = SE Runtime Environment
-COMPANY_NAME = Sun Microsystems, Inc.
-
 ifdef OPENJDK
   LAUNCHER_NAME = openjdk
   PRODUCT_NAME = OpenJDK
   PRODUCT_SUFFIX = Runtime Environment
-  COMPANY_NAME =
+  JDK_RC_PLATFORM_NAME = Platform
+  COMPANY_NAME = N/A
+else
+  LAUNCHER_NAME = java
+  PRODUCT_NAME = Java(TM)
+  PRODUCT_SUFFIX = SE Runtime Environment
+  JDK_RC_PLATFORM_NAME = Platform SE
+  COMPANY_NAME = Sun Microsystems, Inc.
 endif
 
 RUNTIME_NAME = $(PRODUCT_NAME) $(PRODUCT_SUFFIX)
--- a/jdk/make/common/shared/Platform.gmk	Thu Jul 24 21:12:50 2008 -0700
+++ b/jdk/make/common/shared/Platform.gmk	Tue Aug 05 17:44:17 2008 -0700
@@ -373,35 +373,41 @@
   REQUIRED_DXSDK_VER = 0x0900
   OS_VENDOR = Microsoft
   # How much RAM does this machine have:
-  ifeq ($(USING_CYGWIN),true)
-    # CYGWIN has the 'free' utility
-    _MB_OF_MEMORY := \
-	 $(shell free -m | grep Mem: | awk '{print $$2;}' )
-  else
-    # Windows 2000 has the mem utility, but two memory areas
-    #    extended memory is what is beyond 1024M
-    _B_OF_EXT_MEMORY := \
-	 $(shell mem 2> $(DEV_NULL) | grep 'total contiguous extended memory' | awk '{print $$1;}')
-    ifeq ($(_B_OF_EXT_MEMORY),)
-      _B_OF_MEMORY := \
-	 $(shell mem 2> $(DEV_NULL) | grep 'total conventional memory' | awk '{print $$1;}')
+  ifeq ($(JDK_HAS_MEM_INFO),)
+    ifeq ($(USING_CYGWIN),true)
+      # CYGWIN has the 'free' utility
+      _MB_OF_MEMORY := \
+	   $(shell free -m | grep Mem: | awk '{print $$2;}' )
     else
-      _B_OF_MEMORY := \
-         $(shell expr 1048576 '+' $(_B_OF_EXT_MEMORY) 2> $(DEV_NULL))
+      # Windows 2000 has the mem utility, but two memory areas
+      #    extended memory is what is beyond 1024M
+      _B_OF_EXT_MEMORY := \
+	   $(shell mem 2> $(DEV_NULL) | \
+		   grep 'total contiguous extended memory' | awk '{print $$1;}')
+      ifeq ($(_B_OF_EXT_MEMORY),)
+          _B_OF_MEMORY := \
+	   $(shell mem 2> $(DEV_NULL) | \
+		   grep 'total conventional memory' | awk '{print $$1;}')
+      else
+        _B_OF_MEMORY := \
+           $(shell expr 1048576 '+' $(_B_OF_EXT_MEMORY) 2> $(DEV_NULL))
+      endif
+      ifeq ($(_B_OF_MEMORY),)
+        # Windows 2003 has the systeminfo utility use it if mem doesn't work
+        _MB_OF_MEMORY := \
+	    $(shell systeminfo 2> $(DEV_NULL) | \
+		    grep 'Total Physical Memory:' | \
+		    awk '{print $$4;}' | sed -e 's@,@@')
+      else
+        _MB_OF_MEMORY := $(shell expr $(_B_OF_MEMORY) '/' 1024 2> $(DEV_NULL))
+      endif
     endif
-    ifeq ($(_B_OF_MEMORY),)
-      # Windows 2003 has the systeminfo utility use it if mem doesn't work
-      _MB_OF_MEMORY := \
-	  $(shell systeminfo 2> $(DEV_NULL) | grep 'Total Physical Memory:' | awk '{print $$4;}' | sed -e 's@,@@')
+    ifeq ($(shell expr $(_MB_OF_MEMORY) '+' 0 2> $(DEV_NULL)), $(_MB_OF_MEMORY))
+      MB_OF_MEMORY := $(_MB_OF_MEMORY)
     else
-      _MB_OF_MEMORY := $(shell expr $(_B_OF_MEMORY) '/' 1024 2> $(DEV_NULL))
+      MB_OF_MEMORY := 512
     endif
   endif
-  ifeq ($(shell expr $(_MB_OF_MEMORY) '+' 0 2> $(DEV_NULL)), $(_MB_OF_MEMORY))
-    MB_OF_MEMORY := $(_MB_OF_MEMORY)
-  else
-    MB_OF_MEMORY := 512
-  endif
 endif
 
 REQUIRED_ZIP_VER = 2.2
@@ -446,30 +452,38 @@
 #    system swapping during the build.
 #    If we don't know, assume 512. Subtract 128 from MB for VM MAX.
 #    Don't set VM max over 1024-128=896.
-ifneq ($(MB_OF_MEMORY),)
-  LOW_MEMORY_MACHINE := $(shell \
-    if [ $(MB_OF_MEMORY) -le 512 ] ; then \
-      echo "true"; \
-    else \
-      echo "false"; \
-    fi)
-  MAX_VM_MEMORY := $(shell \
-    if [ $(MB_OF_MEMORY) -le 1024 ] ; then \
-      expr $(MB_OF_MEMORY) '-' 128 2> $(DEV_NULL) ; \
-    else \
-      echo "896"; \
-    fi)
-  MIN_VM_MEMORY := $(shell \
-    if [ $(MAX_VM_MEMORY) -le 128 ] ; then \
-      expr $(MAX_VM_MEMORY) '-' 8 2> $(DEV_NULL) ; \
-    else \
-      echo "128"; \
-    fi)
-else
-  MB_OF_MEMORY       := unknown
-  LOW_MEMORY_MACHINE := true
-  MAX_VM_MEMORY      := 384
-  MIN_VM_MEMORY      := 128
+ifeq ($(JDK_HAS_MEM_INFO),)
+  JDK_HAS_MEM_INFO=true
+  export JDK_HAS_MEM_INFO
+  ifneq ($(MB_OF_MEMORY),)
+    LOW_MEMORY_MACHINE := $(shell \
+      if [ $(MB_OF_MEMORY) -le 512 ] ; then \
+        echo "true"; \
+      else \
+        echo "false"; \
+      fi)
+    MAX_VM_MEMORY := $(shell \
+      if [ $(MB_OF_MEMORY) -le 1024 ] ; then \
+        expr $(MB_OF_MEMORY) '-' 128 2> $(DEV_NULL) ; \
+      else \
+        echo "896"; \
+      fi)
+    MIN_VM_MEMORY := $(shell \
+      if [ $(MAX_VM_MEMORY) -le 128 ] ; then \
+        expr $(MAX_VM_MEMORY) '-' 8 2> $(DEV_NULL) ; \
+      else \
+        echo "128"; \
+      fi)
+  else
+    MB_OF_MEMORY       := unknown
+    LOW_MEMORY_MACHINE := true
+    MAX_VM_MEMORY      := 384
+    MIN_VM_MEMORY      := 128
+  endif
+  export MB_OF_MEMORY
+  export LOW_MEMORY_MACHINE
+  export MAX_VM_MEMORY
+  export MIN_VM_MEMORY
 endif
 
 # If blanks in the username, use the first 4 words and pack them together
--- a/jdk/make/java/fdlibm/Makefile	Thu Jul 24 21:12:50 2008 -0700
+++ b/jdk/make/java/fdlibm/Makefile	Tue Aug 05 17:44:17 2008 -0700
@@ -46,8 +46,6 @@
   _OPT = $(CC_NO_OPT)
   OTHER_CFLAGS =
   CPPFLAGS_DBG += -DLOGGING
-  # Files built here do not compile with warning level 3 if warnings are fatal
-  COMPILER_WARNINGS_FATAL=false
 endif
 
 #
--- a/jdk/make/java/hpi/windows/Makefile	Thu Jul 24 21:12:50 2008 -0700
+++ b/jdk/make/java/hpi/windows/Makefile	Tue Aug 05 17:44:17 2008 -0700
@@ -37,8 +37,6 @@
 # windows compiler flags
 ifeq ($(PLATFORM),windows)
   CPPFLAGS_DBG += -DLOGGING
-  # Files built here do not compile with warning level 3 if warnings are fatal
-  COMPILER_WARNINGS_FATAL=false
 endif
 
 FILES_c = \
--- a/jdk/make/java/java/Makefile	Thu Jul 24 21:12:50 2008 -0700
+++ b/jdk/make/java/java/Makefile	Tue Aug 05 17:44:17 2008 -0700
@@ -37,8 +37,6 @@
 # windows compiler flags
 ifeq ($(PLATFORM),windows)
   OTHER_CFLAGS =
-  # Files built here do not compile with warning level 3 if warnings are fatal
-  COMPILER_WARNINGS_FATAL=false
   # build directly into BINDIR...
   LIB_LOCATION = $(BINDIR)
   # Exported functions
--- a/jdk/make/java/java_crw_demo/Makefile	Thu Jul 24 21:12:50 2008 -0700
+++ b/jdk/make/java/java_crw_demo/Makefile	Tue Aug 05 17:44:17 2008 -0700
@@ -48,11 +48,6 @@
 OTHER_INCLUDES = -I$(SRCDIR)
 
 #
-# This removes all asserts in the optimized version
-#
-CPPFLAGS_OPT += -DNDEBUG
-
-#
 # Library to compile.
 #
 include $(BUILDDIR)/common/Library.gmk
--- a/jdk/make/java/java_hprof_demo/Makefile	Thu Jul 24 21:12:50 2008 -0700
+++ b/jdk/make/java/java_hprof_demo/Makefile	Tue Aug 05 17:44:17 2008 -0700
@@ -92,11 +92,6 @@
 INIT += $(LIBDIR)/jvm.hprof.txt
 
 #
-# This removes all asserts in the optimized version
-#
-CPPFLAGS_OPT += -DNDEBUG
-
-#
 # This puts logging code in
 #
 CPPFLAGS_DBG += -DHPROF_LOGGING
--- a/jdk/make/java/jli/Makefile	Thu Jul 24 21:12:50 2008 -0700
+++ b/jdk/make/java/jli/Makefile	Tue Aug 05 17:44:17 2008 -0700
@@ -115,9 +115,6 @@
 		     -export:JLI_ManifestIterate \
 		     -export:JLI_SetTraceLauncher
 
-	# Files from zlib built here do not compile with warning level 3
-	# if warnings are fatal
-	COMPILER_WARNINGS_FATAL=false
 endif
 
 OTHER_INCLUDES += -I$(LAUNCHER_SHARE_SRC)
--- a/jdk/make/java/net/Makefile	Thu Jul 24 21:12:50 2008 -0700
+++ b/jdk/make/java/net/Makefile	Tue Aug 05 17:44:17 2008 -0700
@@ -94,8 +94,6 @@
 
 ifeq ($(PLATFORM), windows)
   OTHER_LDLIBS = ws2_32.lib $(JVMLIB)
-  # Will not compile at warning level 3 if warnings are fatal
-  COMPILER_WARNINGS_FATAL=false
 else
   OTHER_LDLIBS = $(LIBSOCKET) -lnsl -ldl $(JVMLIB)
 endif
--- a/jdk/make/java/nio/Makefile	Thu Jul 24 21:12:50 2008 -0700
+++ b/jdk/make/java/nio/Makefile	Tue Aug 05 17:44:17 2008 -0700
@@ -134,7 +134,6 @@
      $(OBJDIR)/../../../java.lang/java/$(OBJDIRNAME)/FileDescriptor_md.obj
 endif
 ifeq ($(PLATFORM), linux)
-COMPILER_WARNINGS_FATAL=true
 OTHER_LDLIBS += -L$(LIBDIR)/$(LIBARCH) -ljava -lnet -lpthread -ldl
 endif
 ifeq ($(PLATFORM), solaris)
--- a/jdk/make/java/npt/Makefile	Thu Jul 24 21:12:50 2008 -0700
+++ b/jdk/make/java/npt/Makefile	Tue Aug 05 17:44:17 2008 -0700
@@ -53,11 +53,6 @@
 OTHER_INCLUDES = -I$(SRCDIR) -I$(PSRCDIR)
 
 #
-# This removes all asserts in the optimized version
-#
-CPPFLAGS_OPT += -DNDEBUG
-
-#
 # Library to compile.
 #
 include $(BUILDDIR)/common/Library.gmk
--- a/jdk/make/java/verify/Makefile	Thu Jul 24 21:12:50 2008 -0700
+++ b/jdk/make/java/verify/Makefile	Tue Aug 05 17:44:17 2008 -0700
@@ -43,8 +43,6 @@
   #
   JAVALIB = 
   EXTRA_LIBS = 
-  # Files built here do not compile with warning level 3 if warnings are fatal
-  COMPILER_WARNINGS_FATAL=false
 endif
 
 #
--- a/jdk/make/java/zip/Makefile	Thu Jul 24 21:12:50 2008 -0700
+++ b/jdk/make/java/zip/Makefile	Tue Aug 05 17:44:17 2008 -0700
@@ -49,9 +49,6 @@
 
 ifneq ($(PLATFORM), windows)
 OTHER_CFLAGS += -DUSE_MMAP
-else
-  # Files built here do not compile with warning level 3 if warnings are fatal
-  COMPILER_WARNINGS_FATAL=false
 endif
 
 #
--- a/jdk/make/jpda/back/Makefile	Thu Jul 24 21:12:50 2008 -0700
+++ b/jdk/make/jpda/back/Makefile	Tue Aug 05 17:44:17 2008 -0700
@@ -53,11 +53,6 @@
 endif # PLATFORM
 
 #
-# This turns off all assert() checking in the optimized library
-#
-CPPFLAGS_OPT += -DNDEBUG
-
-#
 # This controls the ability to do logging in the library.
 #
 CPPFLAGS_DBG += -DJDWP_LOGGING
--- a/jdk/make/jpda/transport/shmem/Makefile	Thu Jul 24 21:12:50 2008 -0700
+++ b/jdk/make/jpda/transport/shmem/Makefile	Tue Aug 05 17:44:17 2008 -0700
@@ -36,13 +36,6 @@
 
 include $(BUILDDIR)/common/Defs.gmk
 
-# 64-bit windows does not build at -W3 if warnings are fatal
-ifeq ($(PLATFORM), windows)
-  ifeq ($(ARCH_DATA_MODEL), 64)
-    COMPILER_WARNINGS_FATAL=false
-  endif
-endif
-
 FILES_c = \
         SharedMemoryTransport.c \
         SharedMemoryConnection.c \
--- a/jdk/make/jpda/transport/socket/Makefile	Thu Jul 24 21:12:50 2008 -0700
+++ b/jdk/make/jpda/transport/socket/Makefile	Tue Aug 05 17:44:17 2008 -0700
@@ -36,11 +36,6 @@
 
 include $(BUILDDIR)/common/Defs.gmk
 
-ifeq ($(PLATFORM), windows)
-  # Files built here do not compile with warning level 3 if warnings are fatal
-  COMPILER_WARNINGS_FATAL=false
-endif
-
 ifeq ($(PLATFORM), linux)
   OTHER_LDLIBS += -lnsl $(LIBSOCKET) -lpthread
 endif
--- a/jdk/make/sun/cmm/kcms/Makefile	Thu Jul 24 21:12:50 2008 -0700
+++ b/jdk/make/sun/cmm/kcms/Makefile	Tue Aug 05 17:44:17 2008 -0700
@@ -47,8 +47,6 @@
 ifeq ($(PLATFORM), windows)
   # Override the default version info with our own resource file (see 5043594)
   VERSIONINFO_RESOURCE = $(CLOSED_SRC)/share/native/sun/java2d/cmm/kcms/cmm.rc
-  # Files built here do not compile with warning level 3 if warnings are fatal
-  COMPILER_WARNINGS_FATAL=false
 endif
 
 # Rules
--- a/jdk/make/sun/font/Makefile	Thu Jul 24 21:12:50 2008 -0700
+++ b/jdk/make/sun/font/Makefile	Tue Aug 05 17:44:17 2008 -0700
@@ -77,9 +77,6 @@
 
 ifeq ($(PLATFORM), windows)
 
-  # Files built here do not compile with warning level 3 if warnings are fatal
-  COMPILER_WARNINGS_FATAL=false
-
   LDLIBS += user32.lib gdi32.lib $(OBJDIR)/../../../sun.awt/awt/$(OBJDIRNAME)/awt.lib  
 
   OTHER_CFLAGS += -DCC_NOEX
--- a/jdk/make/sun/font/t2k/Makefile	Thu Jul 24 21:12:50 2008 -0700
+++ b/jdk/make/sun/font/t2k/Makefile	Tue Aug 05 17:44:17 2008 -0700
@@ -64,9 +64,6 @@
 
 ifeq ($(PLATFORM), windows)
 
-  # Files built here do not compile with warning level 3 if warnings are fatal
-  COMPILER_WARNINGS_FATAL=false
-
   # t2k imports several shared methods from fontmanager.dll
   LDLIBS += user32.lib $(OBJDIR)/../../../sun.font/fontmanager/$(OBJDIRNAME)/fontmanager.lib
 
--- a/jdk/make/sun/jdbc/Makefile	Thu Jul 24 21:12:50 2008 -0700
+++ b/jdk/make/sun/jdbc/Makefile	Tue Aug 05 17:44:17 2008 -0700
@@ -69,11 +69,6 @@
   INIT += $(ODBC_FAKE_LIBRARIES)
 endif
 
-ifeq ($(PLATFORM),windows)
-  # Files built here do not compile with warning level 3 if warnings are fatal
-  COMPILER_WARNINGS_FATAL=false
-endif
-
 #
 # Rules
 #
--- a/jdk/make/sun/jpeg/Makefile	Thu Jul 24 21:12:50 2008 -0700
+++ b/jdk/make/sun/jpeg/Makefile	Tue Aug 05 17:44:17 2008 -0700
@@ -73,10 +73,5 @@
 #
 vpath %.c   $(SHARE_SRC)/native/$(PKGDIR)/image/jpeg
 
-ifeq ($(PLATFORM), windows)
-  # Files built here do not compile with warning level 3 if warnings are fatal
-  COMPILER_WARNINGS_FATAL=false
-endif # PLATFORM
-
 CLASSES.export += java.io.InputStream
 
--- a/langtools/.hgtags	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/.hgtags	Tue Aug 05 17:44:17 2008 -0700
@@ -5,3 +5,4 @@
 4ef4bd31856949554967fbf22783babb21a62a0e jdk7-b28
 dec081837b01d509dcc2b9de86a4299c1ec17e04 jdk7-b29
 eaf608c64fecf70f955dc9f29f94c055b183aeec jdk7-b30
+07c916ecfc71f6bf432e4ff09bfbfb6290b5703c jdk7-b31
--- a/langtools/src/share/classes/com/sun/tools/classfile/Attributes.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/classfile/Attributes.java	Tue Aug 05 17:44:17 2008 -0700
@@ -78,6 +78,19 @@
         return map.get(name);
     }
 
+    public int getIndex(ConstantPool constant_pool, String name) {
+        for (int i = 0; i < attrs.length; i++) {
+            Attribute attr = attrs[i];
+            try {
+                if (attr != null && attr.getName(constant_pool).equals(name))
+                    return i;
+            } catch (ConstantPoolException e) {
+                // ignore invalid entries
+            }
+        }
+        return -1;
+    }
+
     public int size() {
         return attrs.length;
     }
--- a/langtools/src/share/classes/com/sun/tools/classfile/Type.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/classfile/Type.java	Tue Aug 05 17:44:17 2008 -0700
@@ -36,10 +36,6 @@
 public class Type {
     protected Type() { }
 
-    public boolean isObject() {
-        return false;
-    }
-
     protected static void append(StringBuilder sb, String prefix, List<? extends Type> types, String suffix) {
         sb.append(prefix);
         String sep = "";
@@ -66,11 +62,6 @@
             return name;
         }
 
-        @Override
-        public boolean isObject() {
-            return name.equals("java.lang.Object");
-        }
-
         public final String name;
     }
 
@@ -129,7 +120,7 @@
         public String toString() {
             StringBuilder sb = new StringBuilder();
             appendIfNotEmpty(sb, "<", typeArgTypes, ">");
-            if (superclassType != null && !superclassType.isObject()) {
+            if (superclassType != null) {
                 sb.append(" extends ");
                 sb.append(superclassType);
             }
@@ -188,7 +179,7 @@
             StringBuilder sb = new StringBuilder();
             sb.append(name);
             String sep = " extends ";
-            if (classBound != null && !classBound.isObject()) {
+            if (classBound != null) {
                 sb.append(sep);
                 sb.append(classBound);
                 sep = " & ";
--- a/langtools/src/share/classes/com/sun/tools/doclets/formats/html/AbstractMemberWriter.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/doclets/formats/html/AbstractMemberWriter.java	Tue Aug 05 17:44:17 2008 -0700
@@ -345,18 +345,18 @@
     /**
      * Print use info.
      */
-    protected void printUseInfo(Object mems, String heading) {
+    protected void printUseInfo(List<? extends ProgramElementDoc> mems, String heading) {
         if (mems == null) {
             return;
         }
-        List members = (List)mems;
+        List<? extends ProgramElementDoc> members = mems;
         if (members.size() > 0) {
             writer.tableIndexSummary();
             writer.tableUseInfoHeaderStart("#CCCCFF");
             writer.print(heading);
             writer.tableHeaderEnd();
-            for (Iterator it = members.iterator(); it.hasNext(); ) {
-                ProgramElementDoc pgmdoc = (ProgramElementDoc)it.next();
+            for (Iterator<? extends ProgramElementDoc> it = members.iterator(); it.hasNext(); ) {
+                ProgramElementDoc pgmdoc = it.next();
                 ClassDoc cd = pgmdoc.containingClass();
 
                 writer.printSummaryLinkType(this, pgmdoc);
--- a/langtools/src/share/classes/com/sun/tools/doclets/formats/html/ClassUseWriter.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/doclets/formats/html/ClassUseWriter.java	Tue Aug 05 17:44:17 2008 -0700
@@ -39,28 +39,28 @@
 
     final ClassDoc classdoc;
     Set pkgToPackageAnnotations = null;
-    final Map pkgToClassTypeParameter;
-    final Map pkgToClassAnnotations;
-    final Map pkgToMethodTypeParameter;
-    final Map pkgToMethodArgTypeParameter;
-    final Map pkgToMethodReturnTypeParameter;
-    final Map pkgToMethodAnnotations;
-    final Map pkgToMethodParameterAnnotations;
-    final Map pkgToFieldTypeParameter;
-    final Map pkgToFieldAnnotations;
-    final Map pkgToSubclass;
-    final Map pkgToSubinterface;
-    final Map pkgToImplementingClass;
-    final Map pkgToField;
-    final Map pkgToMethodReturn;
-    final Map pkgToMethodArgs;
-    final Map pkgToMethodThrows;
-    final Map pkgToConstructorAnnotations;
-    final Map pkgToConstructorParameterAnnotations;
-    final Map pkgToConstructorArgs;
-    final Map pkgToConstructorArgTypeParameter;
-    final Map pkgToConstructorThrows;
-    final SortedSet pkgSet;
+    final Map<String,List<ProgramElementDoc>> pkgToClassTypeParameter;
+    final Map<String,List<ProgramElementDoc>> pkgToClassAnnotations;
+    final Map<String,List<ProgramElementDoc>> pkgToMethodTypeParameter;
+    final Map<String,List<ProgramElementDoc>> pkgToMethodArgTypeParameter;
+    final Map<String,List<ProgramElementDoc>> pkgToMethodReturnTypeParameter;
+    final Map<String,List<ProgramElementDoc>> pkgToMethodAnnotations;
+    final Map<String,List<ProgramElementDoc>> pkgToMethodParameterAnnotations;
+    final Map<String,List<ProgramElementDoc>> pkgToFieldTypeParameter;
+    final Map<String,List<ProgramElementDoc>> pkgToFieldAnnotations;
+    final Map<String,List<ProgramElementDoc>> pkgToSubclass;
+    final Map<String,List<ProgramElementDoc>> pkgToSubinterface;
+    final Map<String,List<ProgramElementDoc>> pkgToImplementingClass;
+    final Map<String,List<ProgramElementDoc>> pkgToField;
+    final Map<String,List<ProgramElementDoc>> pkgToMethodReturn;
+    final Map<String,List<ProgramElementDoc>> pkgToMethodArgs;
+    final Map<String,List<ProgramElementDoc>> pkgToMethodThrows;
+    final Map<String,List<ProgramElementDoc>> pkgToConstructorAnnotations;
+    final Map<String,List<ProgramElementDoc>> pkgToConstructorParameterAnnotations;
+    final Map<String,List<ProgramElementDoc>> pkgToConstructorArgs;
+    final Map<String,List<ProgramElementDoc>> pkgToConstructorArgTypeParameter;
+    final Map<String,List<ProgramElementDoc>> pkgToConstructorThrows;
+    final SortedSet<PackageDoc> pkgSet;
     final MethodWriterImpl methodSubWriter;
     final ConstructorWriterImpl constrSubWriter;
     final FieldWriterImpl fieldSubWriter;
@@ -81,9 +81,9 @@
         super(configuration, path, filename, relpath);
         this.classdoc = classdoc;
         if (mapper.classToPackageAnnotations.containsKey(classdoc.qualifiedName()))
-                pkgToPackageAnnotations = new HashSet((List) mapper.classToPackageAnnotations.get(classdoc.qualifiedName()));
+                pkgToPackageAnnotations = new HashSet<PackageDoc>(mapper.classToPackageAnnotations.get(classdoc.qualifiedName()));
         configuration.currentcd = classdoc;
-        this.pkgSet = new TreeSet();
+        this.pkgSet = new TreeSet<PackageDoc>();
         this.pkgToClassTypeParameter = pkgDivide(mapper.classToClassTypeParam);
         this.pkgToClassAnnotations = pkgDivide(mapper.classToClassAnnotations);
         this.pkgToMethodTypeParameter = pkgDivide(mapper.classToExecMemberDocTypeParam);
@@ -135,19 +135,19 @@
         }
     }
 
-    private Map pkgDivide(Map classMap) {
-        Map map = new HashMap();
-        List list= (List)classMap.get(classdoc.qualifiedName());
+    private Map<String,List<ProgramElementDoc>> pkgDivide(Map<String,? extends List<? extends ProgramElementDoc>> classMap) {
+        Map<String,List<ProgramElementDoc>> map = new HashMap<String,List<ProgramElementDoc>>();
+        List<? extends ProgramElementDoc> list= classMap.get(classdoc.qualifiedName());
         if (list != null) {
             Collections.sort(list);
-            Iterator it = list.iterator();
+            Iterator<? extends ProgramElementDoc> it = list.iterator();
             while (it.hasNext()) {
-                ProgramElementDoc doc = (ProgramElementDoc)it.next();
+                ProgramElementDoc doc = it.next();
                 PackageDoc pkg = doc.containingPackage();
                 pkgSet.add(pkg);
-                List inPkg = (List)map.get(pkg.name());
+                List<ProgramElementDoc> inPkg = map.get(pkg.name());
                 if (inPkg == null) {
-                    inPkg = new ArrayList();
+                    inPkg = new ArrayList<ProgramElementDoc>();
                     map.put(pkg.name(), inPkg);
                 }
                 inPkg.add(doc);
--- a/langtools/src/share/classes/com/sun/tools/doclets/formats/html/ConfigurationImpl.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/doclets/formats/html/ConfigurationImpl.java	Tue Aug 05 17:44:17 2008 -0700
@@ -253,7 +253,7 @@
             }
         }
         if (root.specifiedClasses().length > 0) {
-            Map map = new HashMap();
+            Map<String,PackageDoc> map = new HashMap<String,PackageDoc>();
             PackageDoc pd;
             ClassDoc[] classes = root.classes();
             for (int i = 0; i < classes.length; i++) {
@@ -481,7 +481,7 @@
     /**
      * {@inheritDoc}
      */
-    public Comparator getMemberComparator() {
+    public Comparator<ProgramElementDoc> getMemberComparator() {
         return null;
     }
 }
--- a/langtools/src/share/classes/com/sun/tools/doclets/formats/html/ConstantsSummaryWriterImpl.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/doclets/formats/html/ConstantsSummaryWriterImpl.java	Tue Aug 05 17:44:17 2008 -0700
@@ -107,7 +107,7 @@
     /**
      * {@inheritDoc}
      */
-    public void writeLinkToPackageContent(PackageDoc pkg, String parsedPackageName, Set printedPackageHeaders) {
+    public void writeLinkToPackageContent(PackageDoc pkg, String parsedPackageName, Set<String> printedPackageHeaders) {
         String packageName = pkg.name();
         //add link to summary
         li();
--- a/langtools/src/share/classes/com/sun/tools/doclets/formats/html/ConstructorWriterImpl.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/doclets/formats/html/ConstructorWriterImpl.java	Tue Aug 05 17:44:17 2008 -0700
@@ -55,10 +55,10 @@
         super(writer, classDoc);
         VisibleMemberMap visibleMemberMap = new VisibleMemberMap(classDoc,
             VisibleMemberMap.CONSTRUCTORS, configuration().nodeprecated);
-        List constructors = new ArrayList(visibleMemberMap.getMembersFor(classDoc));
+        List<ProgramElementDoc> constructors = new ArrayList<ProgramElementDoc>(visibleMemberMap.getMembersFor(classDoc));
         for (int i = 0; i < constructors.size(); i++) {
-            if (((ProgramElementDoc)(constructors.get(i))).isProtected() ||
-                ((ProgramElementDoc)(constructors.get(i))).isPrivate()) {
+            if ((constructors.get(i)).isProtected() ||
+                (constructors.get(i)).isPrivate()) {
                 setFoundNonPubConstructor(true);
             }
         }
--- a/langtools/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDocletWriter.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDocletWriter.java	Tue Aug 05 17:44:17 2008 -0700
@@ -1463,7 +1463,7 @@
                 int originalLength = result.length();
                 TagletOutput output = TagletWriter.getInlineTagOuput(
                     configuration.tagletManager, holderTag,
-                    (Tag) tagelem, getTagletWriterInstance(isFirstSentence));
+                    tagelem, getTagletWriterInstance(isFirstSentence));
                 result.append(output == null ? "" : output.toString());
                 if (originalLength == 0 && isFirstSentence && tagelem.name().equals("@inheritDoc") && result.length() > 0) {
                     break;
@@ -1750,8 +1750,8 @@
      * @return an array of strings representing the annotations being
      *         documented.
      */
-    private List getAnnotations(int indent, AnnotationDesc[] descList, boolean linkBreak) {
-        List results = new ArrayList();
+    private List<String> getAnnotations(int indent, AnnotationDesc[] descList, boolean linkBreak) {
+        List<String> results = new ArrayList<String>();
         StringBuffer annotation;
         for (int i = 0; i < descList.length; i++) {
             AnnotationTypeDoc annotationDoc = descList[i].annotationType();
@@ -1781,7 +1781,7 @@
                         pairs[j].element(), pairs[j].element().name(), false));
                     annotation.append('=');
                     AnnotationValue annotationValue = pairs[j].value();
-                    List annotationTypeValues = new ArrayList();
+                    List<AnnotationValue> annotationTypeValues = new ArrayList<AnnotationValue>();
                     if (annotationValue.value() instanceof AnnotationValue[]) {
                         AnnotationValue[] annotationArray =
                             (AnnotationValue[]) annotationValue.value();
--- a/langtools/src/share/classes/com/sun/tools/doclets/formats/html/HtmlSerialMethodWriter.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/doclets/formats/html/HtmlSerialMethodWriter.java	Tue Aug 05 17:44:17 2008 -0700
@@ -90,7 +90,7 @@
             tagletManager.getSerializedFormTags(),
             writer.getTagletWriterInstance(false), output);
         print(output.toString());
-        MethodDoc method = (MethodDoc)member;
+        MethodDoc method = member;
         if (method.name().compareTo("writeExternal") == 0
                 && method.tags("serialData").length == 0) {
             serialWarning(member.position(), "doclet.MissingSerialDataTag",
--- a/langtools/src/share/classes/com/sun/tools/doclets/formats/html/PackageFrameWriter.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/doclets/formats/html/PackageFrameWriter.java	Tue Aug 05 17:44:17 2008 -0700
@@ -73,7 +73,7 @@
         super(configuration, DirectoryManager.getDirectoryPath(packageDoc), OUTPUT_FILE_NAME, DirectoryManager.getRelativePath(packageDoc));
         this.packageDoc = packageDoc;
         if (configuration.root.specifiedPackages().length == 0) {
-            documentedClasses = new HashSet(Arrays.asList(configuration.root.classes()));
+            documentedClasses = new HashSet<ClassDoc>(Arrays.asList(configuration.root.classes()));
         }
     }
 
--- a/langtools/src/share/classes/com/sun/tools/doclets/formats/html/PackageIndexWriter.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/doclets/formats/html/PackageIndexWriter.java	Tue Aug 05 17:44:17 2008 -0700
@@ -49,7 +49,7 @@
      *
      * @see Group
      */
-    private Map groupPackageMap;
+    private Map<String,List<PackageDoc>> groupPackageMap;
 
     /**
      * List to store the order groups as specified on the command line.
@@ -120,10 +120,9 @@
     protected void generateIndex() {
         for (int i = 0; i < groupList.size(); i++) {
         String groupname = (String)groupList.get(i);
-        List list = (List)groupPackageMap.get(groupname);
+        List<PackageDoc> list = groupPackageMap.get(groupname);
             if (list != null && list.size() > 0) {
-                printIndexContents((PackageDoc[])list.
-                                       toArray(new PackageDoc[list.size()]),
+                printIndexContents(list.toArray(new PackageDoc[list.size()]),
                                     groupname);
             }
         }
--- a/langtools/src/share/classes/com/sun/tools/doclets/formats/html/PackageUseWriter.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/doclets/formats/html/PackageUseWriter.java	Tue Aug 05 17:44:17 2008 -0700
@@ -38,7 +38,7 @@
 public class PackageUseWriter extends SubWriterHolderWriter {
 
     final PackageDoc pkgdoc;
-    final SortedMap usingPackageToUsedClasses = new TreeMap();
+    final SortedMap<String,Set<ClassDoc>> usingPackageToUsedClasses = new TreeMap<String,Set<ClassDoc>>();
 
     /**
      * Constructor.
@@ -61,15 +61,15 @@
         ClassDoc[] content = pkgdoc.allClasses();
         for (int i = 0; i < content.length; ++i) {
             ClassDoc usedClass = content[i];
-            Set usingClasses = (Set)mapper.classToClass.get(usedClass.qualifiedName());
+            Set<ClassDoc> usingClasses = mapper.classToClass.get(usedClass.qualifiedName());
             if (usingClasses != null) {
                 for (Iterator it = usingClasses.iterator(); it.hasNext(); ) {
                     ClassDoc usingClass = (ClassDoc)it.next();
                     PackageDoc usingPackage = usingClass.containingPackage();
-                    Set usedClasses = (Set)usingPackageToUsedClasses
+                    Set<ClassDoc> usedClasses = usingPackageToUsedClasses
                         .get(usingPackage.name());
                     if (usedClasses == null) {
-                        usedClasses = new TreeSet();
+                        usedClasses = new TreeSet<ClassDoc>();
                         usingPackageToUsedClasses.put(Util.getPackageName(usingPackage),
                                                       usedClasses);
                     }
--- a/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/Configuration.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/Configuration.java	Tue Aug 05 17:44:17 2008 -0700
@@ -120,12 +120,12 @@
     /**
      * The list of doc-file subdirectories to exclude
      */
-    protected Set excludedDocFileDirs;
+    protected Set<String> excludedDocFileDirs;
 
     /**
      * The list of qualifiers to exclude
      */
-    protected Set excludedQualifiers;
+    protected Set<String> excludedQualifiers;
 
     /**
      * The Root of the generated Program Structure from the Doclet API.
@@ -255,8 +255,8 @@
         message =
             new MessageRetriever(this,
             "com.sun.tools.doclets.internal.toolkit.resources.doclets");
-        excludedDocFileDirs = new HashSet();
-        excludedQualifiers = new HashSet();
+        excludedDocFileDirs = new HashSet<String>();
+        excludedQualifiers = new HashSet<String>();
     }
 
     /**
@@ -329,14 +329,14 @@
         DocErrorReporter reporter);
 
     private void initPackageArray() {
-        Set set = new HashSet(Arrays.asList(root.specifiedPackages()));
+        Set<PackageDoc> set = new HashSet<PackageDoc>(Arrays.asList(root.specifiedPackages()));
         ClassDoc[] classes = root.specifiedClasses();
         for (int i = 0; i < classes.length; i++) {
             set.add(classes[i].containingPackage());
         }
-        ArrayList results = new ArrayList(set);
+        ArrayList<PackageDoc> results = new ArrayList<PackageDoc>(set);
         Collections.sort(results);
-        packages = (PackageDoc[]) results.toArray(new PackageDoc[] {});
+        packages = results.toArray(new PackageDoc[] {});
     }
 
     /**
@@ -345,7 +345,7 @@
      * @param options the two dimensional array of options.
      */
     public void setOptions(String[][] options) {
-        LinkedHashSet customTagStrs = new LinkedHashSet();
+        LinkedHashSet<String[]> customTagStrs = new LinkedHashSet<String[]>();
         for (int oi = 0; oi < options.length; ++oi) {
             String[] os = options[oi];
             String opt = os[0].toLowerCase();
@@ -476,7 +476,7 @@
         }
     }
 
-    private void addToSet(Set s, String str){
+    private void addToSet(Set<String> s, String str){
         StringTokenizer st = new StringTokenizer(str, ":");
         String current;
         while(st.hasMoreTokens()){
@@ -712,5 +712,5 @@
      *
      * @return the {@link java.util.Comparator} used to sort members.
      */
-    public abstract Comparator getMemberComparator();
+    public abstract Comparator<ProgramElementDoc> getMemberComparator();
 }
--- a/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/ConstantsSummaryWriter.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/ConstantsSummaryWriter.java	Tue Aug 05 17:44:17 2008 -0700
@@ -79,7 +79,7 @@
      *                              something more than once.
      */
     public abstract void writeLinkToPackageContent(PackageDoc pkg, String parsedPackageName,
-        Set WriteedPackageHeaders);
+        Set<String> WriteedPackageHeaders);
 
     /**
      * Write the given package name.
--- a/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AbstractBuilder.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AbstractBuilder.java	Tue Aug 05 17:44:17 2008 -0700
@@ -61,7 +61,7 @@
      * efficiency purposes.  We don't want to copy the
      * doc files multiple times for a single package.
      */
-    protected static Set containingPackagesSeen;
+    protected static Set<String> containingPackagesSeen;
 
     /**
      * True if we want to print debug output.
--- a/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AnnotationTypeBuilder.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AnnotationTypeBuilder.java	Tue Aug 05 17:44:17 2008 -0700
@@ -84,7 +84,7 @@
         builder.annotationTypeDoc = annotationTypeDoc;
         builder.writer = writer;
         if(containingPackagesSeen == null) {
-            containingPackagesSeen = new HashSet();
+            containingPackagesSeen = new HashSet<String>();
         }
         return builder;
     }
--- a/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AnnotationTypeOptionalMemberBuilder.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AnnotationTypeOptionalMemberBuilder.java	Tue Aug 05 17:44:17 2008 -0700
@@ -73,7 +73,7 @@
         builder.writer = writer;
         builder.visibleMemberMap = new VisibleMemberMap(classDoc,
             VisibleMemberMap.ANNOTATION_TYPE_MEMBER_OPTIONAL, configuration.nodeprecated);
-        builder.members = new ArrayList(
+        builder.members = new ArrayList<ProgramElementDoc>(
             builder.visibleMemberMap.getMembersFor(classDoc));
         if (configuration.getMemberComparator() != null) {
             Collections.sort(builder.members,
--- a/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AnnotationTypeRequiredMemberBuilder.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AnnotationTypeRequiredMemberBuilder.java	Tue Aug 05 17:44:17 2008 -0700
@@ -62,7 +62,7 @@
     /**
      * The list of members being documented.
      */
-    protected List members;
+    protected List<ProgramElementDoc> members;
 
     /**
      * The index of the current member that is being documented at this point
@@ -97,7 +97,7 @@
         builder.writer = writer;
         builder.visibleMemberMap = new VisibleMemberMap(classDoc,
             VisibleMemberMap.ANNOTATION_TYPE_MEMBER_REQUIRED, configuration.nodeprecated);
-        builder.members = new ArrayList(
+        builder.members = new ArrayList<ProgramElementDoc>(
             builder.visibleMemberMap.getMembersFor(classDoc));
         if (configuration.getMemberComparator() != null) {
             Collections.sort(builder.members,
--- a/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/ClassBuilder.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/ClassBuilder.java	Tue Aug 05 17:44:17 2008 -0700
@@ -100,7 +100,7 @@
             Util.setEnumDocumentation(configuration, classDoc);
         }
         if(containingPackagesSeen == null) {
-            containingPackagesSeen = new HashSet();
+            containingPackagesSeen = new HashSet<String>();
         }
         return builder;
     }
--- a/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/ConstantsSummaryBuilder.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/ConstantsSummaryBuilder.java	Tue Aug 05 17:44:17 2008 -0700
@@ -63,12 +63,12 @@
     /**
      * The set of ClassDocs that have constant fields.
      */
-    protected Set classDocsWithConstFields;
+    protected Set<ClassDoc> classDocsWithConstFields;
 
     /**
      * The set of printed package headers.
      */
-    protected Set printedPackageHeaders;
+    protected Set<String> printedPackageHeaders;
 
     /**
      * The current package being documented.
@@ -102,7 +102,7 @@
         ConstantsSummaryBuilder builder = new ConstantsSummaryBuilder(
             configuration);
         builder.writer = writer;
-        builder.classDocsWithConstFields = new HashSet();
+        builder.classDocsWithConstFields = new HashSet<ClassDoc>();
         return builder;
     }
 
@@ -169,7 +169,7 @@
     public void buildContents() {
         writer.writeContentsHeader();
         PackageDoc[] packages = configuration.packages;
-        printedPackageHeaders = new HashSet();
+        printedPackageHeaders = new HashSet<String>();
         for (int i = 0; i < packages.length; i++) {
             if (hasConstantField(packages[i]) && ! hasPrintedPackageIndex(packages[i].name())) {
                 writer.writeLinkToPackageContent(packages[i],
@@ -188,7 +188,7 @@
      */
     public void buildConstantSummaries(List elements) {
         PackageDoc[] packages = configuration.packages;
-        printedPackageHeaders = new HashSet();
+        printedPackageHeaders = new HashSet<String>();
         for (int i = 0; i < packages.length; i++) {
             if (hasConstantField(packages[i])) {
                 currentPackage = packages[i];
@@ -315,7 +315,7 @@
      * @param pkgname the name of the package to check.
      */
     private boolean hasPrintedPackageIndex(String pkgname) {
-        String[] list = (String[])printedPackageHeaders.toArray(new String[] {});
+        String[] list = printedPackageHeaders.toArray(new String[] {});
         for (int i = 0; i < list.length; i++) {
             if (pkgname.startsWith(list[i])) {
                 return true;
@@ -363,7 +363,7 @@
          * Builds the table of constants for a given class.
          */
         protected void buildMembersSummary() {
-            List members = new ArrayList(members());
+            List<FieldDoc> members = new ArrayList<FieldDoc>(members());
             if (members.size() > 0) {
                 Collections.sort(members);
                 writer.writeConstantMembers(classdoc, members);
@@ -375,17 +375,17 @@
          * @param cd the classdoc to examine.
          * @return the list of visible constant fields for the given classdoc.
          */
-        protected List members() {
-            List l = visibleMemberMapFields.getLeafClassMembers(configuration);
+        protected List<FieldDoc> members() {
+            List<ProgramElementDoc> l = visibleMemberMapFields.getLeafClassMembers(configuration);
             l.addAll(visibleMemberMapEnumConst.getLeafClassMembers(configuration));
-            Iterator iter;
+            Iterator<ProgramElementDoc> iter;
 
             if(l != null){
                 iter = l.iterator();
             } else {
                 return null;
             }
-            List inclList = new LinkedList();
+            List<FieldDoc> inclList = new LinkedList<FieldDoc>();
             FieldDoc member;
             while(iter.hasNext()){
                 member = (FieldDoc)iter.next();
--- a/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/ConstructorBuilder.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/ConstructorBuilder.java	Tue Aug 05 17:44:17 2008 -0700
@@ -72,7 +72,7 @@
         /**
          * The constructors being documented.
          */
-        private List constructors;
+        private List<ProgramElementDoc> constructors;
 
         /**
          * Construct a new ConstructorBuilder.
@@ -104,12 +104,10 @@
                                 VisibleMemberMap.CONSTRUCTORS,
                                 configuration.nodeprecated);
                 builder.constructors =
-                        new ArrayList(builder.visibleMemberMap.getMembersFor(classDoc));
+                        new ArrayList<ProgramElementDoc>(builder.visibleMemberMap.getMembersFor(classDoc));
                 for (int i = 0; i < builder.constructors.size(); i++) {
-                        if (((ProgramElementDoc) (builder.constructors.get(i)))
-                                .isProtected()
-                                || ((ProgramElementDoc) (builder.constructors.get(i)))
-                                        .isPrivate()) {
+                        if (builder.constructors.get(i).isProtected()
+                                || builder.constructors.get(i).isPrivate()) {
                                 writer.setFoundNonPubConstructor(true);
                         }
                 }
--- a/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/EnumConstantBuilder.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/EnumConstantBuilder.java	Tue Aug 05 17:44:17 2008 -0700
@@ -61,7 +61,7 @@
         /**
          * The list of enum constants being documented.
          */
-        private List enumConstants;
+        private List<ProgramElementDoc> enumConstants;
 
         /**
          * The index of the current enum constant that is being documented at this point
@@ -99,7 +99,7 @@
                                 VisibleMemberMap.ENUM_CONSTANTS,
                                 configuration.nodeprecated);
                 builder.enumConstants =
-                        new ArrayList(builder.visibleMemberMap.getMembersFor(classDoc));
+                        new ArrayList<ProgramElementDoc>(builder.visibleMemberMap.getMembersFor(classDoc));
                 if (configuration.getMemberComparator() != null) {
                         Collections.sort(
                                 builder.enumConstants,
--- a/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/FieldBuilder.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/FieldBuilder.java	Tue Aug 05 17:44:17 2008 -0700
@@ -61,7 +61,7 @@
         /**
          * The list of fields being documented.
          */
-        private List fields;
+        private List<ProgramElementDoc> fields;
 
         /**
          * The index of the current field that is being documented at this point
@@ -99,8 +99,8 @@
                                 VisibleMemberMap.FIELDS,
                                 configuration.nodeprecated);
                 builder.fields =
-                        new ArrayList(builder.visibleMemberMap.getLeafClassMembers(
-                configuration));
+                        new ArrayList<ProgramElementDoc>(builder.visibleMemberMap.getLeafClassMembers(
+                            configuration));
                 if (configuration.getMemberComparator() != null) {
                         Collections.sort(
                                 builder.fields,
--- a/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/LayoutParser.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/LayoutParser.java	Tue Aug 05 17:44:17 2008 -0700
@@ -45,7 +45,7 @@
     /**
      * The map of XML elements that have been parsed.
      */
-    private Map xmlElementsMap;
+    private Map<String,List<Object>> xmlElementsMap;
 
     private Configuration configuration;
     private static LayoutParser instance;
@@ -56,7 +56,7 @@
      * This class is a singleton.
      */
     private LayoutParser(Configuration configuration) {
-        xmlElementsMap = new HashMap();
+        xmlElementsMap = new HashMap<String,List<Object>>();
         this.configuration = configuration;
     }
 
@@ -83,7 +83,7 @@
             return (List) xmlElementsMap.get(root);
         }
         try {
-            List xmlElements = new ArrayList();
+            List<Object> xmlElements = new ArrayList<Object>();
             xmlElementsMap.put(root, xmlElements);
             currentRoot = root;
             isParsing = false;
@@ -106,7 +106,7 @@
     throws SAXException {
         if (isParsing || qName.equals(currentRoot)) {
             isParsing = true;
-            List xmlElements = (List) xmlElementsMap.get(currentRoot);
+            List<Object> xmlElements = xmlElementsMap.get(currentRoot);
             xmlElements.add(qName);
         }
     }
@@ -120,11 +120,11 @@
             isParsing = false;
             return;
         }
-        List xmlElements = (List) xmlElementsMap.get(currentRoot);
+        List<Object> xmlElements = xmlElementsMap.get(currentRoot);
         if (xmlElements.get(xmlElements.size()-1).equals(qName)) {
             return;
         } else {
-            List subElements = new ArrayList();
+            List<Object> subElements = new ArrayList<Object>();
             int targetIndex = xmlElements.indexOf(qName);
             int size = xmlElements.size();
             for (int i = targetIndex; i < size; i++) {
--- a/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/MemberSummaryBuilder.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/MemberSummaryBuilder.java	Tue Aug 05 17:44:17 2008 -0700
@@ -306,13 +306,13 @@
          */
         private void buildSummary(MemberSummaryWriter writer,
             VisibleMemberMap visibleMemberMap) {
-        List members = new ArrayList(visibleMemberMap.getLeafClassMembers(
+        List<ProgramElementDoc> members = new ArrayList<ProgramElementDoc>(visibleMemberMap.getLeafClassMembers(
             configuration));
         if (members.size() > 0) {
             Collections.sort(members);
             writer.writeMemberSummaryHeader(classDoc);
             for (int i = 0; i < members.size(); i++) {
-                ProgramElementDoc member = (ProgramElementDoc) members.get(i);
+                ProgramElementDoc member = members.get(i);
                 Tag[] firstSentenceTags = member.firstSentenceTags();
                 if (member instanceof MethodDoc && firstSentenceTags.length == 0) {
                     //Inherit comments from overriden or implemented method if
@@ -349,7 +349,7 @@
             if (inhclass == classDoc) {
                 continue;
             }
-            List inhmembers = visibleMemberMap.getMembersFor(inhclass);
+            List<ProgramElementDoc> inhmembers = visibleMemberMap.getMembersFor(inhclass);
             if (inhmembers.size() > 0) {
                 Collections.sort(inhmembers);
                 writer.writeInheritedMemberSummaryHeader(inhclass);
@@ -358,7 +358,7 @@
                         inhclass.isPackagePrivate() &&
                             ! Util.isLinkable(inhclass, configuration) ?
                             classDoc : inhclass,
-                        (ProgramElementDoc) inhmembers.get(j),
+                        inhmembers.get(j),
                         j == 0,
                         j == inhmembers.size() - 1);
                 }
--- a/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/MethodBuilder.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/MethodBuilder.java	Tue Aug 05 17:44:17 2008 -0700
@@ -66,7 +66,7 @@
         /**
          * The methods being documented.
          */
-        private List methods;
+        private List<ProgramElementDoc> methods;
 
         private MethodBuilder(Configuration configuration) {
                 super(configuration);
@@ -94,7 +94,7 @@
                                 VisibleMemberMap.METHODS,
                                 configuration.nodeprecated);
                 builder.methods =
-                        new ArrayList(builder.visibleMemberMap.getLeafClassMembers(
+                        new ArrayList<ProgramElementDoc>(builder.visibleMemberMap.getLeafClassMembers(
                 configuration));
                 if (configuration.getMemberComparator() != null) {
                         Collections.sort(
--- a/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/taglets/CodeTaglet.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/taglets/CodeTaglet.java	Tue Aug 05 17:44:17 2008 -0700
@@ -26,6 +26,7 @@
 
 import java.util.Map;
 import com.sun.javadoc.Tag;
+import com.sun.tools.doclets.Taglet;
 
 /**
  * An inline Taglet used to denote literal code fragments.
@@ -47,7 +48,7 @@
 
         private static final String NAME = "code";
 
-        public static void register(Map map) {
+        public static void register(Map<String, Taglet> map) {
                 map.remove(NAME);
                 map.put(NAME, new CodeTaglet());
         }
--- a/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/taglets/LiteralTaglet.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/taglets/LiteralTaglet.java	Tue Aug 05 17:44:17 2008 -0700
@@ -46,7 +46,7 @@
 
     private static final String NAME = "literal";
 
-    public static void register(Map map) {
+    public static void register(Map<String,Taglet> map) {
            map.remove(NAME);
            map.put(NAME, new LiteralTaglet());
     }
--- a/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/taglets/ParamTaglet.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/taglets/ParamTaglet.java	Tue Aug 05 17:44:17 2008 -0700
@@ -56,11 +56,11 @@
      *               check.
      * @return a name-rank number map.
      */
-    private static Map getRankMap(Object[] params){
+    private static Map<String,String> getRankMap(Object[] params){
         if (params == null) {
             return null;
         }
-        HashMap result = new HashMap();
+        HashMap<String,String> result = new HashMap<String,String>();
         for (int i = 0; i < params.length; i++) {
             String name = params[i] instanceof Parameter ?
                 ((Parameter) params[i]).name() :
@@ -192,7 +192,7 @@
     private TagletOutput getTagletOutput(boolean isNonTypeParams, Doc holder,
             TagletWriter writer, Object[] formalParameters, ParamTag[] paramTags) {
         TagletOutput result = writer.getOutputInstance();
-        Set alreadyDocumented = new HashSet();
+        Set<String> alreadyDocumented = new HashSet<String>();
         if (paramTags.length > 0) {
             result.appendOutput(
                 processParamTags(isNonTypeParams, paramTags,
@@ -214,7 +214,7 @@
      */
     private TagletOutput getInheritedTagletOutput(boolean isNonTypeParams, Doc holder,
             TagletWriter writer, Object[] formalParameters,
-            Set alreadyDocumented) {
+            Set<String> alreadyDocumented) {
         TagletOutput result = writer.getOutputInstance();
         if ((! alreadyDocumented.contains(null)) &&
                 holder instanceof MethodDoc) {
@@ -263,7 +263,7 @@
      */
     private TagletOutput processParamTags(boolean isNonTypeParams,
             ParamTag[] paramTags, Map rankMap, TagletWriter writer,
-            Set alreadyDocumented) {
+            Set<String> alreadyDocumented) {
         TagletOutput result = writer.getOutputInstance();
         if (paramTags.length > 0) {
             for (int i = 0; i < paramTags.length; ++i) {
--- a/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/taglets/TagletManager.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/taglets/TagletManager.java	Tue Aug 05 17:44:17 2008 -0700
@@ -61,7 +61,7 @@
     /**
      * The map of custom tags.
      */
-    private LinkedHashMap customTags;
+    private LinkedHashMap<String,Taglet> customTags;
 
     /**
      * The array of custom tags that can appear in packages.
@@ -111,31 +111,31 @@
     /**
      * Keep track of standard tags.
      */
-    private Set standardTags;
+    private Set<String> standardTags;
 
     /**
      * Keep track of standard tags in lowercase to compare for better
      * error messages when a tag like @docRoot is mistakenly spelled
      * lowercase @docroot.
      */
-    private Set standardTagsLowercase;
+    private Set<String> standardTagsLowercase;
 
     /**
      * Keep track of overriden standard tags.
      */
-    private Set overridenStandardTags;
+    private Set<String> overridenStandardTags;
 
     /**
      * Keep track of the tags that may conflict
      * with standard tags in the future (any custom tag without
      * a period in its name).
      */
-    private Set potentiallyConflictingTags;
+    private Set<String> potentiallyConflictingTags;
 
     /**
      * The set of unseen custom tags.
      */
-    private Set unseenCustomTags;
+    private Set<String> unseenCustomTags;
 
     /**
      * True if we do not want to use @since tags.
@@ -161,12 +161,12 @@
      */
     public TagletManager(boolean nosince, boolean showversion,
                          boolean showauthor, MessageRetriever message){
-        overridenStandardTags = new HashSet();
-        potentiallyConflictingTags = new HashSet();
-        standardTags = new HashSet();
-        standardTagsLowercase = new HashSet();
-        unseenCustomTags = new HashSet();
-        customTags = new LinkedHashMap();
+        overridenStandardTags = new HashSet<String>();
+        potentiallyConflictingTags = new HashSet<String>();
+        standardTags = new HashSet<String>();
+        standardTagsLowercase = new HashSet<String>();
+        unseenCustomTags = new HashSet<String>();
+        customTags = new LinkedHashMap<String,Taglet>();
         this.nosince = nosince;
         this.showversion = showversion;
         this.showauthor = showauthor;
@@ -201,7 +201,7 @@
      */
     public void addCustomTag(String classname, String tagletPath) {
         try {
-            Class customTagClass = null;
+            Class<?> customTagClass = null;
             // construct class loader
             String cpString = null;   // make sure env.class.path defaults to dot
 
@@ -219,7 +219,7 @@
             meth.invoke(null, new Object[] {customTags});
             list = customTags.values().toArray();
             Object newLastTag = (list != null&& list.length > 0)
-                ? (Object) list[list.length-1] : null;
+                ? list[list.length-1] : null;
             if (lastTag != newLastTag) {
                 //New taglets must always be added to the end of the LinkedHashMap.
                 //If the current and previous last taglet are not equal, that
@@ -315,7 +315,7 @@
         if (tagName == null || locations == null) {
             return;
         }
-        Taglet tag = (Taglet) customTags.get(tagName);
+        Taglet tag = customTags.get(tagName);
         locations = locations.toLowerCase();
         if (tag == null || header != null) {
             customTags.remove(tagName);
@@ -396,7 +396,7 @@
                 }
             }
             //Check if this tag is being used in the wrong location.
-            if((taglet = (Taglet) customTags.get(name)) != null) {
+            if ((taglet = customTags.get(name)) != null) {
                 if (areInlineTags && ! taglet.isInlineTag()) {
                     printTagMisuseWarn(taglet, tags[i], "inline");
                 }
@@ -425,7 +425,7 @@
      * @param holderType the type of documentation that the misused tag was found in.
      */
     private void printTagMisuseWarn(Taglet taglet, Tag tag, String holderType) {
-        Set locationsSet = new LinkedHashSet();
+        Set<String> locationsSet = new LinkedHashSet<String>();
         if (taglet.inOverview()) {
             locationsSet.add("overview");
         }
@@ -447,7 +447,7 @@
         if (taglet.isInlineTag()) {
             locationsSet.add("inline text");
         }
-        String[] locations = (String[]) locationsSet.toArray(new String[]{});
+        String[] locations = locationsSet.toArray(new String[]{});
         if (locations == null || locations.length == 0) {
             //This known tag is excluded.
             return;
@@ -592,17 +592,17 @@
      * Initialize the custom tag arrays.
      */
     private void initCustomTagArrays() {
-        Iterator it = customTags.values().iterator();
-        ArrayList pTags = new ArrayList(customTags.size());
-        ArrayList tTags = new ArrayList(customTags.size());
-        ArrayList fTags = new ArrayList(customTags.size());
-        ArrayList cTags = new ArrayList(customTags.size());
-        ArrayList mTags = new ArrayList(customTags.size());
-        ArrayList iTags = new ArrayList(customTags.size());
-        ArrayList oTags = new ArrayList(customTags.size());
+        Iterator<Taglet> it = customTags.values().iterator();
+        ArrayList<Taglet> pTags = new ArrayList<Taglet>(customTags.size());
+        ArrayList<Taglet> tTags = new ArrayList<Taglet>(customTags.size());
+        ArrayList<Taglet> fTags = new ArrayList<Taglet>(customTags.size());
+        ArrayList<Taglet> cTags = new ArrayList<Taglet>(customTags.size());
+        ArrayList<Taglet> mTags = new ArrayList<Taglet>(customTags.size());
+        ArrayList<Taglet> iTags = new ArrayList<Taglet>(customTags.size());
+        ArrayList<Taglet> oTags = new ArrayList<Taglet>(customTags.size());
         Taglet current;
         while (it.hasNext()) {
-            current = (Taglet) it.next();
+            current = it.next();
             if (current.inPackage() && !current.isInlineTag()) {
                 pTags.add(current);
             }
@@ -625,20 +625,20 @@
                 oTags.add(current);
             }
         }
-        packageTags =  (Taglet[]) pTags.toArray(new Taglet[] {});
-        typeTags =  (Taglet[]) tTags.toArray(new Taglet[] {});
-        fieldTags =  (Taglet[]) fTags.toArray(new Taglet[] {});
-        constructorTags =  (Taglet[]) cTags.toArray(new Taglet[] {});
-        methodTags =  (Taglet[]) mTags.toArray(new Taglet[] {});
-        overviewTags = (Taglet[]) oTags.toArray(new Taglet[] {});
-        inlineTags =  (Taglet[]) iTags.toArray(new Taglet[] {});
+        packageTags = pTags.toArray(new Taglet[] {});
+        typeTags = tTags.toArray(new Taglet[] {});
+        fieldTags = fTags.toArray(new Taglet[] {});
+        constructorTags = cTags.toArray(new Taglet[] {});
+        methodTags = mTags.toArray(new Taglet[] {});
+        overviewTags = oTags.toArray(new Taglet[] {});
+        inlineTags = iTags.toArray(new Taglet[] {});
 
         //Init the serialized form tags
         serializedFormTags = new Taglet[4];
-        serializedFormTags[0] = (Taglet) customTags.get("serialData");
-        serializedFormTags[1] = (Taglet) customTags.get("throws");
-        serializedFormTags[2] = (Taglet) customTags.get("since");
-        serializedFormTags[3] = (Taglet) customTags.get("see");
+        serializedFormTags[0] = customTags.get("serialData");
+        serializedFormTags[1] = customTags.get("throws");
+        serializedFormTags[2] = customTags.get("since");
+        serializedFormTags[3] = customTags.get("see");
     }
 
     /**
@@ -726,10 +726,9 @@
         printReportHelper("doclet.Notice_taglet_unseen", unseenCustomTags);
     }
 
-    private void printReportHelper(String noticeKey, Set names) {
+    private void printReportHelper(String noticeKey, Set<String> names) {
         if (names.size() > 0) {
-            String[] namesArray =
-                (String[]) names.toArray(new String[] {});
+            String[] namesArray = names.toArray(new String[] {});
             String result = " ";
             for (int i = 0; i < namesArray.length; i++) {
                 result += "@" + namesArray[i];
@@ -751,9 +750,9 @@
      */
     public Taglet getTaglet(String name) {
         if (name.indexOf("@") == 0) {
-            return (Taglet) customTags.get(name.substring(1));
+            return customTags.get(name.substring(1));
         } else {
-            return (Taglet) customTags.get(name);
+            return customTags.get(name);
         }
 
     }
--- a/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/taglets/ThrowsTaglet.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/taglets/ThrowsTaglet.java	Tue Aug 05 17:44:17 2008 -0700
@@ -82,7 +82,7 @@
      * Add links for exceptions that are declared but not documented.
      */
     private TagletOutput linkToUndocumentedDeclaredExceptions(
-            Type[] declaredExceptionTypes, Set alreadyDocumented,
+            Type[] declaredExceptionTypes, Set<String> alreadyDocumented,
             TagletWriter writer) {
         TagletOutput result = writer.getOutputInstance();
         //Add links to the exceptions declared but not documented.
@@ -107,11 +107,11 @@
      * documented.
      */
     private TagletOutput inheritThrowsDocumentation(Doc holder,
-            Type[] declaredExceptionTypes, Set alreadyDocumented,
+            Type[] declaredExceptionTypes, Set<String> alreadyDocumented,
             TagletWriter writer) {
         TagletOutput result = writer.getOutputInstance();
         if (holder instanceof MethodDoc) {
-            Set declaredExceptionTags = new LinkedHashSet();
+            Set<Tag> declaredExceptionTags = new LinkedHashSet<Tag>();
             for (int j = 0; j < declaredExceptionTypes.length; j++) {
                 DocFinder.Output inheritedDoc =
                     DocFinder.search(new DocFinder.Input((MethodDoc) holder, this,
@@ -124,7 +124,7 @@
                 declaredExceptionTags.addAll(inheritedDoc.tagList);
             }
             result.appendOutput(throwsTagsOutput(
-                (ThrowsTag[]) declaredExceptionTags.toArray(new ThrowsTag[] {}),
+                declaredExceptionTags.toArray(new ThrowsTag[] {}),
                 writer, alreadyDocumented, false));
         }
         return result;
@@ -137,7 +137,7 @@
         ExecutableMemberDoc execHolder = (ExecutableMemberDoc) holder;
         ThrowsTag[] tags = execHolder.throwsTags();
         TagletOutput result = writer.getOutputInstance();
-        HashSet alreadyDocumented = new HashSet();
+        HashSet<String> alreadyDocumented = new HashSet<String>();
         if (tags.length > 0) {
             result.appendOutput(throwsTagsOutput(
                 execHolder.throwsTags(), writer, alreadyDocumented, true));
@@ -161,7 +161,7 @@
      * @return the TagletOutput representation of this <code>Tag</code>.
      */
     protected TagletOutput throwsTagsOutput(ThrowsTag[] throwTags,
-        TagletWriter writer, Set alreadyDocumented, boolean allowDups) {
+        TagletWriter writer, Set<String> alreadyDocumented, boolean allowDups) {
         TagletOutput result = writer.getOutputInstance();
         if (throwTags.length > 0) {
             for (int i = 0; i < throwTags.length; ++i) {
--- a/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/ClassDocCatalog.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/ClassDocCatalog.java	Tue Aug 05 17:44:17 2008 -0700
@@ -49,44 +49,44 @@
       * Stores the set of packages that the classes specified on the command line
       * belong to.  Note that the default package is "".
       */
-     private Set packageSet;
+     private Set<String> packageSet;
 
 
      /**
       * Stores all classes for each package
       */
-     private Map allClasses;
+     private Map<String,Set<ClassDoc>> allClasses;
 
      /**
       * Stores ordinary classes (excluding Exceptions and Errors) for each
       * package
       */
-     private Map ordinaryClasses;
+     private Map<String,Set<ClassDoc>> ordinaryClasses;
 
      /**
       * Stores exceptions for each package
       */
-     private Map exceptions;
+     private Map<String,Set<ClassDoc>> exceptions;
 
     /**
      * Stores enums for each package.
      */
-    private Map enums;
+    private Map<String,Set<ClassDoc>> enums;
 
     /**
      * Stores annotation types for each package.
      */
-    private Map annotationTypes;
+    private Map<String,Set<ClassDoc>> annotationTypes;
 
      /**
       * Stores errors for each package
       */
-     private Map errors;
+     private Map<String,Set<ClassDoc>> errors;
 
      /**
       * Stores interfaces for each package
       */
-     private Map interfaces;
+     private Map<String,Set<ClassDoc>> interfaces;
 
      /**
       * Construct a new ClassDocCatalog.
@@ -109,14 +109,14 @@
      }
 
      private void init() {
-         allClasses = new HashMap();
-         ordinaryClasses = new HashMap();
-         exceptions = new HashMap();
-         enums = new HashMap();
-         annotationTypes = new HashMap();
-         errors = new HashMap();
-         interfaces = new HashMap();
-         packageSet = new HashSet();
+         allClasses = new HashMap<String,Set<ClassDoc>>();
+         ordinaryClasses = new HashMap<String,Set<ClassDoc>>();
+         exceptions = new HashMap<String,Set<ClassDoc>>();
+         enums = new HashMap<String,Set<ClassDoc>>();
+         annotationTypes = new HashMap<String,Set<ClassDoc>>();
+         errors = new HashMap<String,Set<ClassDoc>>();
+         interfaces = new HashMap<String,Set<ClassDoc>>();
+         packageSet = new HashSet<String>();
      }
 
      /**
@@ -148,7 +148,7 @@
        * @param classdoc the ClassDoc to add to the catelog.
        * @param map the Map to add the ClassDoc to.
        */
-      private void addClass(ClassDoc classdoc, Map map) {
+      private void addClass(ClassDoc classdoc, Map<String,Set<ClassDoc>> map) {
 
           PackageDoc pkg = classdoc.containingPackage();
           if (pkg.isIncluded()) {
@@ -157,22 +157,22 @@
               return;
           }
           String key = Util.getPackageName(pkg);
-          Set s = (Set) map.get(key);
+          Set<ClassDoc> s = map.get(key);
           if (s == null) {
               packageSet.add(key);
-              s = new HashSet();
+              s = new HashSet<ClassDoc>();
           }
           s.add(classdoc);
           map.put(key, s);
 
       }
 
-      private ClassDoc[] getArray(Map m, String key) {
-          Set s = (Set) m.get(key);
+      private ClassDoc[] getArray(Map<String,Set<ClassDoc>> m, String key) {
+          Set<ClassDoc> s = m.get(key);
           if (s == null) {
               return new ClassDoc[] {};
           } else {
-              return (ClassDoc[]) s.toArray(new ClassDoc[] {});
+              return s.toArray(new ClassDoc[] {});
           }
       }
 
@@ -202,7 +202,7 @@
       * ClassDocs for.
       */
      public String[] packageNames() {
-         return (String[]) packageSet.toArray(new String[] {});
+         return packageSet.toArray(new String[] {});
      }
 
      /**
--- a/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/ClassTree.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/ClassTree.java	Tue Aug 05 17:44:17 2008 -0700
@@ -49,35 +49,35 @@
      * List of baseclasses. Contains only java.lang.Object. Can be used to get
      * the mapped listing of sub-classes.
      */
-    private List baseclasses = new ArrayList();
+    private List<ClassDoc> baseclasses = new ArrayList<ClassDoc>();
 
     /**
     * Mapping for each Class with their SubClasses
     */
-    private Map subclasses = new HashMap();
+    private Map<ClassDoc,List<ClassDoc>> subclasses = new HashMap<ClassDoc,List<ClassDoc>>();
 
     /**
      * List of base-interfaces. Contains list of all the interfaces who do not
      * have super-interfaces. Can be used to get the mapped listing of
      * sub-interfaces.
      */
-    private List baseinterfaces = new ArrayList();
+    private List<ClassDoc> baseinterfaces = new ArrayList<ClassDoc>();
 
     /**
     * Mapping for each Interface with their SubInterfaces
     */
-    private Map subinterfaces = new HashMap();
+    private Map<ClassDoc,List<ClassDoc>> subinterfaces = new HashMap<ClassDoc,List<ClassDoc>>();
 
-    private List baseEnums = new ArrayList();
-    private Map subEnums = new HashMap();
+    private List<ClassDoc> baseEnums = new ArrayList<ClassDoc>();
+    private Map<ClassDoc,List<ClassDoc>> subEnums = new HashMap<ClassDoc,List<ClassDoc>>();
 
-    private List baseAnnotationTypes = new ArrayList();
-    private Map subAnnotationTypes = new HashMap();
+    private List<ClassDoc> baseAnnotationTypes = new ArrayList<ClassDoc>();
+    private Map<ClassDoc,List<ClassDoc>> subAnnotationTypes = new HashMap<ClassDoc,List<ClassDoc>>();
 
     /**
     * Mapping for each Interface with classes who implement it.
     */
-    private Map implementingclasses = new HashMap();
+    private Map<ClassDoc,List<ClassDoc>> implementingclasses = new HashMap<ClassDoc,List<ClassDoc>>();
 
     /**
      * Constructor. Build the Tree using the Root of this Javadoc run.
@@ -132,7 +132,7 @@
                 processType(classes[i], configuration, baseclasses, subclasses);
             } else if (classes[i].isInterface()) {
                 processInterface(classes[i]);
-                List list  = (List)implementingclasses.get(classes[i]);
+                List<ClassDoc> list = implementingclasses.get(classes[i]);
                 if (list != null) {
                     Collections.sort(list);
                 }
@@ -143,11 +143,11 @@
         }
 
         Collections.sort(baseinterfaces);
-        for (Iterator it = subinterfaces.values().iterator(); it.hasNext(); ) {
-            Collections.sort((List)it.next());
+        for (Iterator<List<ClassDoc>> it = subinterfaces.values().iterator(); it.hasNext(); ) {
+            Collections.sort(it.next());
         }
-        for (Iterator it = subclasses.values().iterator(); it.hasNext(); ) {
-            Collections.sort((List)it.next());
+        for (Iterator<List<ClassDoc>> it = subclasses.values().iterator(); it.hasNext(); ) {
+            Collections.sort(it.next());
         }
     }
 
@@ -164,7 +164,7 @@
      * @param configuration the current configurtation of the doclet.
      */
     private void processType(ClassDoc cd, Configuration configuration,
-            List bases, Map subs) {
+            List<ClassDoc> bases, Map<ClassDoc,List<ClassDoc>> subs) {
         ClassDoc superclass = Util.getFirstVisibleSuperClassCD(cd, configuration);
         if (superclass != null) {
             if (!add(subs, superclass, cd)) {
@@ -219,10 +219,10 @@
      * @param cd sub-interface to be mapped.
      * @returns boolean true if class added, false if class already processed.
      */
-    private boolean add(Map map, ClassDoc superclass, ClassDoc cd) {
-        List list = (List)map.get(superclass);
+    private boolean add(Map<ClassDoc,List<ClassDoc>> map, ClassDoc superclass, ClassDoc cd) {
+        List<ClassDoc> list = map.get(superclass);
         if (list == null) {
-            list = new ArrayList();
+            list = new ArrayList<ClassDoc>();
             map.put(superclass, list);
         }
         if (list.contains(cd)) {
@@ -241,10 +241,10 @@
      * @param cd class for which the sub-class list is requested.
      * @returns List Sub-Class list for the class passed.
      */
-    private List get(Map map, ClassDoc cd) {
-        List list = (List)map.get(cd);
+    private List<ClassDoc> get(Map<ClassDoc,List<ClassDoc>> map, ClassDoc cd) {
+        List<ClassDoc> list = map.get(cd);
         if (list == null) {
-            return new ArrayList();
+            return new ArrayList<ClassDoc>();
         }
         return list;
     }
@@ -254,7 +254,7 @@
      *
      * @param cd class whose sub-class list is required.
      */
-    public List subclasses(ClassDoc cd) {
+    public List<ClassDoc> subclasses(ClassDoc cd) {
         return get(subclasses, cd);
     }
 
@@ -263,7 +263,7 @@
      *
      * @param cd interface whose sub-interface list is required.
      */
-    public List subinterfaces(ClassDoc cd) {
+    public List<ClassDoc> subinterfaces(ClassDoc cd) {
         return get(subinterfaces, cd);
     }
 
@@ -272,9 +272,9 @@
      *
      * @param cd interface whose implementing-classes list is required.
      */
-    public List implementingclasses(ClassDoc cd) {
-        List result = get(implementingclasses, cd);
-        List subinterfaces = allSubs(cd, false);
+    public List<ClassDoc> implementingclasses(ClassDoc cd) {
+        List<ClassDoc> result = get(implementingclasses, cd);
+        List<ClassDoc> subinterfaces = allSubs(cd, false);
 
         //If class x implements a subinterface of cd, then it follows
         //that class x implements cd.
@@ -301,7 +301,7 @@
      * @param isEnum true if the subclasses should be forced to come from the
      * enum tree.
      */
-    public List subs(ClassDoc cd, boolean isEnum) {
+    public List<ClassDoc> subs(ClassDoc cd, boolean isEnum) {
         if (isEnum) {
             return get(subEnums, cd);
         } else if (cd.isAnnotationType()) {
@@ -324,10 +324,10 @@
      * @param isEnum true if the subclasses should be forced to come from the
      * enum tree.
      */
-    public List allSubs(ClassDoc cd, boolean isEnum) {
-        List list = subs(cd, isEnum);
+    public List<ClassDoc> allSubs(ClassDoc cd, boolean isEnum) {
+        List<ClassDoc> list = subs(cd, isEnum);
         for (int i = 0; i < list.size(); i++) {
-            cd = (ClassDoc)list.get(i);
+            cd = list.get(i);
             List tlist = subs(cd, isEnum);
             for (int j = 0; j < tlist.size(); j++) {
                 ClassDoc tcd = (ClassDoc)tlist.get(j);
--- a/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/ClassUseMapper.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/ClassUseMapper.java	Tue Aug 05 17:44:17 2008 -0700
@@ -46,138 +46,138 @@
      * Mapping of ClassDocs to set of PackageDoc used by that class.
      * Entries may be null.
      */
-    public Map classToPackage = new HashMap();
+    public Map<String,Set<PackageDoc>> classToPackage = new HashMap<String,Set<PackageDoc>>();
 
     /**
      * Mapping of Annotations to set of PackageDoc that use the annotation.
      */
-    public Map classToPackageAnnotations = new HashMap();
+    public Map<String,List<PackageDoc>> classToPackageAnnotations = new HashMap<String,List<PackageDoc>>();
 
     /**
      * Mapping of ClassDocs to set of ClassDoc used by that class.
      * Entries may be null.
      */
-    public Map classToClass = new HashMap();
+    public Map<String,Set<ClassDoc>> classToClass = new HashMap<String,Set<ClassDoc>>();
 
     /**
      * Mapping of ClassDocs to list of ClassDoc which are direct or
      * indirect subclasses of that class.
      * Entries may be null.
      */
-    public Map classToSubclass = new HashMap();
+    public Map<String,List<ClassDoc>> classToSubclass = new HashMap<String,List<ClassDoc>>();
 
     /**
      * Mapping of ClassDocs to list of ClassDoc which are direct or
      * indirect subinterfaces of that interface.
      * Entries may be null.
      */
-    public Map classToSubinterface = new HashMap();
+    public Map<String,List<ClassDoc>> classToSubinterface = new HashMap<String,List<ClassDoc>>();
 
     /**
      * Mapping of ClassDocs to list of ClassDoc which implement
      * this interface.
      * Entries may be null.
      */
-    public Map classToImplementingClass = new HashMap();
+    public Map<String,List<ClassDoc>> classToImplementingClass = new HashMap<String,List<ClassDoc>>();
 
     /**
      * Mapping of ClassDocs to list of FieldDoc declared as that class.
      * Entries may be null.
      */
-    public Map classToField = new HashMap();
+    public Map<String,List<FieldDoc>> classToField = new HashMap<String,List<FieldDoc>>();
 
     /**
      * Mapping of ClassDocs to list of MethodDoc returning that class.
      * Entries may be null.
      */
-    public Map classToMethodReturn = new HashMap();
+    public Map<String,List<MethodDoc>> classToMethodReturn = new HashMap<String,List<MethodDoc>>();
 
     /**
      * Mapping of ClassDocs to list of MethodDoc having that class
      * as an arg.
      * Entries may be null.
      */
-    public Map classToMethodArgs = new HashMap();
+    public Map<String,List<ExecutableMemberDoc>> classToMethodArgs = new HashMap<String,List<ExecutableMemberDoc>>();
 
     /**
      * Mapping of ClassDocs to list of MethodDoc which throws that class.
      * Entries may be null.
      */
-    public Map classToMethodThrows = new HashMap();
+    public Map<String,List<ExecutableMemberDoc>> classToMethodThrows = new HashMap<String,List<ExecutableMemberDoc>>();
 
     /**
      * Mapping of ClassDocs to list of ConstructorDoc having that class
      * as an arg.
      * Entries may be null.
      */
-    public Map classToConstructorArgs = new HashMap();
+    public Map<String,List<ExecutableMemberDoc>> classToConstructorArgs = new HashMap<String,List<ExecutableMemberDoc>>();
 
     /**
      * Mapping of ClassDocs to list of ConstructorDoc which throws that class.
      * Entries may be null.
      */
-    public Map classToConstructorThrows = new HashMap();
+    public Map<String,List<ExecutableMemberDoc>> classToConstructorThrows = new HashMap<String,List<ExecutableMemberDoc>>();
 
     /**
      * The mapping of AnnotationTypeDocs to constructors that use them.
      */
-    public Map classToConstructorAnnotations = new HashMap();
+    public Map<String,List<ConstructorDoc>> classToConstructorAnnotations = new HashMap<String,List<ConstructorDoc>>();
 
     /**
      * The mapping of AnnotationTypeDocs to Constructor parameters that use them.
      */
-    public Map classToConstructorParamAnnotation = new HashMap();
+    public Map<String,List<ExecutableMemberDoc>> classToConstructorParamAnnotation = new HashMap<String,List<ExecutableMemberDoc>>();
 
     /**
      * The mapping of ClassDocs to Constructor arguments that use them as type parameters.
      */
-    public Map classToConstructorDocArgTypeParam = new HashMap();
+    public Map<String,List<ExecutableMemberDoc>> classToConstructorDocArgTypeParam = new HashMap<String,List<ExecutableMemberDoc>>();
 
     /**
      * The mapping of ClassDocs to ClassDocs that use them as type parameters.
      */
-    public Map classToClassTypeParam = new HashMap();
+    public Map<String,List<ClassDoc>> classToClassTypeParam = new HashMap<String,List<ClassDoc>>();
 
     /**
      * The mapping of AnnotationTypeDocs to ClassDocs that use them.
      */
-    public Map classToClassAnnotations = new HashMap();
+    public Map<String,List<ClassDoc>> classToClassAnnotations = new HashMap<String,List<ClassDoc>>();
 
     /**
      * The mapping of ClassDocs to ExecutableMemberDocs that use them as type parameters.
      */
-    public Map classToExecMemberDocTypeParam = new HashMap();
+    public Map<String,List<MethodDoc>> classToExecMemberDocTypeParam = new HashMap<String,List<MethodDoc>>();
 
     /**
      * The mapping of ClassDocs to ExecutableMemberDocs arguments that use them as type parameters.
      */
-    public Map classToExecMemberDocArgTypeParam = new HashMap();
+    public Map<String,List<ExecutableMemberDoc>> classToExecMemberDocArgTypeParam = new HashMap<String,List<ExecutableMemberDoc>>();
 
     /**
      * The mapping of AnnotationTypeDocs to ExecutableMemberDocs that use them.
      */
-    public Map classToExecMemberDocAnnotations = new HashMap();
+    public Map<String,List<MethodDoc>> classToExecMemberDocAnnotations = new HashMap<String,List<MethodDoc>>();
 
     /**
      * The mapping of ClassDocs to ExecutableMemberDocs that have return type
      * with type parameters of that class.
      */
-    public Map classToExecMemberDocReturnTypeParam = new HashMap();
+    public Map<String,List<MethodDoc>> classToExecMemberDocReturnTypeParam = new HashMap<String,List<MethodDoc>>();
 
     /**
      * The mapping of AnnotationTypeDocs to MethodDoc parameters that use them.
      */
-    public Map classToExecMemberDocParamAnnotation = new HashMap();
+    public Map<String,List<ExecutableMemberDoc>> classToExecMemberDocParamAnnotation = new HashMap<String,List<ExecutableMemberDoc>>();
 
     /**
      * The mapping of ClassDocs to FieldDocs that use them as type parameters.
      */
-    public Map classToFieldDocTypeParam = new HashMap();
+    public Map<String,List<FieldDoc>> classToFieldDocTypeParam = new HashMap<String,List<FieldDoc>>();
 
     /**
      * The mapping of AnnotationTypeDocs to FieldDocs that use them.
      */
-    public Map annotationToFieldDoc = new HashMap();
+    public Map<String,List<FieldDoc>> annotationToFieldDoc = new HashMap<String,List<FieldDoc>>();
 
 
     public ClassUseMapper(RootDoc root, ClassTree classtree) {
@@ -231,15 +231,15 @@
     /**
      * Return all subclasses of a class AND fill-in classToSubclass map.
      */
-    private Collection subclasses(ClassDoc cd) {
-        Collection ret = (Collection)classToSubclass.get(cd.qualifiedName());
+    private Collection<ClassDoc> subclasses(ClassDoc cd) {
+        Collection<ClassDoc> ret = classToSubclass.get(cd.qualifiedName());
         if (ret == null) {
-            ret = new TreeSet();
-            List subs = classtree.subclasses(cd);
+            ret = new TreeSet<ClassDoc>();
+            List<ClassDoc> subs = classtree.subclasses(cd);
             if (subs != null) {
                 ret.addAll(subs);
-                for (Iterator it = subs.iterator(); it.hasNext();) {
-                    ret.addAll(subclasses((ClassDoc)it.next()));
+                for (Iterator<ClassDoc> it = subs.iterator(); it.hasNext();) {
+                    ret.addAll(subclasses(it.next()));
                 }
             }
             addAll(classToSubclass, cd, ret);
@@ -250,15 +250,15 @@
     /**
      * Return all subinterfaces of an interface AND fill-in classToSubinterface map.
      */
-    private Collection subinterfaces(ClassDoc cd) {
-        Collection ret = (Collection)classToSubinterface.get(cd.qualifiedName());
+    private Collection<ClassDoc> subinterfaces(ClassDoc cd) {
+        Collection<ClassDoc> ret = classToSubinterface.get(cd.qualifiedName());
         if (ret == null) {
-            ret = new TreeSet();
-            List subs = classtree.subinterfaces(cd);
+            ret = new TreeSet<ClassDoc>();
+            List<ClassDoc> subs = classtree.subinterfaces(cd);
             if (subs != null) {
                 ret.addAll(subs);
-                for (Iterator it = subs.iterator(); it.hasNext();) {
-                    ret.addAll(subinterfaces((ClassDoc)it.next()));
+                for (Iterator<ClassDoc> it = subs.iterator(); it.hasNext();) {
+                    ret.addAll(subinterfaces(it.next()));
                 }
             }
             addAll(classToSubinterface, cd, ret);
@@ -272,11 +272,11 @@
      * implementing subinterfaces) AND fill-in both classToImplementingClass
      * and classToSubinterface maps.
      */
-    private Collection implementingClasses(ClassDoc cd) {
-        Collection ret = (List)classToImplementingClass.get(cd.qualifiedName());
+    private Collection<ClassDoc> implementingClasses(ClassDoc cd) {
+        Collection<ClassDoc> ret = classToImplementingClass.get(cd.qualifiedName());
         if (ret == null) {
-            ret = new TreeSet();
-            List impl = classtree.implementingclasses(cd);
+            ret = new TreeSet<ClassDoc>();
+            List<ClassDoc> impl = classtree.implementingclasses(cd);
             if (impl != null) {
                 ret.addAll(impl);
                 for (Iterator it = impl.iterator(); it.hasNext();) {
@@ -298,7 +298,7 @@
     private void mapExecutable(ExecutableMemberDoc em) {
         Parameter[] params = em.parameters();
         boolean isConstructor = em.isConstructor();
-        List classArgs = new ArrayList();
+        List<Type> classArgs = new ArrayList<Type>();
         for (int k = 0; k < params.length; k++) {
             Type pcd = params[k].type();
             // primitives don't get mapped, also avoid dups
@@ -325,34 +325,38 @@
         }
     }
 
-    private List refList(Map map, ClassDoc cd) {
-        List list = (List)map.get(cd.qualifiedName());
+    private <T> List<T> refList(Map<String,List<T>> map, ClassDoc cd) {
+        List<T> list = map.get(cd.qualifiedName());
         if (list == null) {
-            list = new ArrayList();
+            @SuppressWarnings("unchecked")
+            List<T> l = new ArrayList();
+            list = l;
             map.put(cd.qualifiedName(), list);
         }
         return list;
     }
 
-    private Set packageSet(ClassDoc cd) {
-        Set pkgSet = (Set)classToPackage.get(cd.qualifiedName());
+    private Set<PackageDoc> packageSet(ClassDoc cd) {
+        Set<PackageDoc> pkgSet = classToPackage.get(cd.qualifiedName());
         if (pkgSet == null) {
-            pkgSet = new TreeSet();
+            pkgSet = new TreeSet<PackageDoc>();
             classToPackage.put(cd.qualifiedName(), pkgSet);
         }
         return pkgSet;
     }
 
-    private Set classSet(ClassDoc cd) {
-        Set clsSet = (Set)classToClass.get(cd.qualifiedName());
+    private Set<ClassDoc> classSet(ClassDoc cd) {
+        Set<ClassDoc> clsSet = classToClass.get(cd.qualifiedName());
         if (clsSet == null) {
-            clsSet = new TreeSet();
+            @SuppressWarnings("unchecked")
+            Set<ClassDoc> s = new TreeSet();
+            clsSet = s;
             classToClass.put(cd.qualifiedName(), clsSet);
         }
         return clsSet;
     }
 
-    private void add(Map map, ClassDoc cd, ProgramElementDoc ref) {
+    private <T extends ProgramElementDoc> void add(Map<String,List<T>> map, ClassDoc cd, T ref) {
         // add to specified map
         refList(map, cd).add(ref);
 
@@ -361,25 +365,23 @@
 
         classSet(cd).add(ref instanceof MemberDoc?
                 ((MemberDoc)ref).containingClass() :
-                    ref);
+                    (ClassDoc)ref);
     }
 
-    private void addAll(Map map, ClassDoc cd, Collection refs) {
+    private void addAll(Map<String,List<ClassDoc>> map, ClassDoc cd, Collection<ClassDoc> refs) {
         if (refs == null) {
             return;
         }
         // add to specified map
         refList(map, cd).addAll(refs);
 
-        Set pkgSet = packageSet(cd);
-        Set clsSet = classSet(cd);
+        Set<PackageDoc> pkgSet = packageSet(cd);
+        Set<ClassDoc> clsSet = classSet(cd);
         // add ref's package to package map and class map
-        for (Iterator it = refs.iterator(); it.hasNext();) {
-            ProgramElementDoc pedoc = (ProgramElementDoc)it.next();
-            pkgSet.add(pedoc.containingPackage());
-            clsSet.add(pedoc instanceof MemberDoc?
-                    ((MemberDoc)pedoc).containingClass() :
-                        pedoc);
+        for (Iterator<ClassDoc> it = refs.iterator(); it.hasNext();) {
+            ClassDoc cls = it.next();
+            pkgSet.add(cls.containingPackage());
+            clsSet.add(cls);
 
         }
     }
@@ -392,8 +394,8 @@
      * @param doc the doc whose type parameters are being checked.
      * @param holder the holder that owns the type parameters.
      */
-    private void mapTypeParameters(Map map, Object doc,
-            ProgramElementDoc holder) {
+    private <T extends ProgramElementDoc> void mapTypeParameters(Map<String,List<T>> map, Object doc,
+            T holder) {
         TypeVariable[] typeVariables;
         if (doc instanceof ClassDoc) {
             typeVariables = ((ClassDoc) doc).typeParameters();
@@ -438,9 +440,8 @@
      * @param doc the doc whose type parameters are being checked.
      * @param holder the holder that owns the type parameters.
      */
-    private void mapAnnotations(Map map, Object doc,
-            Object holder) {
-        TypeVariable[] typeVariables;
+    private <T extends ProgramElementDoc> void mapAnnotations(Map<String,List<T>> map, Object doc,
+            T holder) {
         AnnotationDesc[] annotations;
         boolean isPackage = false;
         if (doc instanceof ProgramElementDoc) {
@@ -458,12 +459,31 @@
             if (isPackage)
                 refList(map, annotationDoc).add(holder);
             else
-                add(map, annotationDoc, (ProgramElementDoc) holder);
+                add(map, annotationDoc, holder);
         }
     }
 
-    private void addTypeParameterToMap(Map map, Type type,
-            ProgramElementDoc holder) {
+
+    /**
+     * Map the AnnotationType to the ProgramElementDocs that use them as
+     * type parameters.
+     *
+     * @param map the map the insert the information into.
+     * @param doc the doc whose type parameters are being checked.
+     * @param holder the holder that owns the type parameters.
+     */
+    private <T extends PackageDoc> void mapAnnotations(Map<String,List<T>> map, PackageDoc doc,
+            T holder) {
+        AnnotationDesc[] annotations;
+        annotations = doc.annotations();
+        for (int i = 0; i < annotations.length; i++) {
+            AnnotationTypeDoc annotationDoc = annotations[i].annotationType();
+            refList(map, annotationDoc).add(holder);
+        }
+    }
+
+    private <T extends ProgramElementDoc> void addTypeParameterToMap(Map<String,List<T>> map, Type type,
+            T holder) {
         if (type instanceof ClassDoc) {
             add(map, (ClassDoc) type, holder);
         } else if (type instanceof ParameterizedType) {
--- a/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/DeprecatedAPIListBuilder.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/DeprecatedAPIListBuilder.java	Tue Aug 05 17:44:17 2008 -0700
@@ -52,7 +52,7 @@
     /**
      * List of deprecated type Lists.
      */
-    private List deprecatedLists;
+    private List<List<Doc>> deprecatedLists;
 
 
     /**
@@ -61,9 +61,9 @@
      * @param root Root of the tree.
      */
     public DeprecatedAPIListBuilder(RootDoc root) {
-        deprecatedLists = new ArrayList();
+        deprecatedLists = new ArrayList<List<Doc>>();
         for (int i = 0; i < NUM_TYPES; i++) {
-            deprecatedLists.add(i, new ArrayList());
+            deprecatedLists.add(i, new ArrayList<Doc>());
         }
         buildDeprecatedAPIInfo(root);
     }
@@ -114,7 +114,7 @@
      * @param list List of all the particular deprecated members, e.g. methods.
      * @param members members to be added in the list.
      */
-    private void composeDeprecatedList(List list, MemberDoc[] members) {
+    private void composeDeprecatedList(List<Doc> list, MemberDoc[] members) {
         for (int i = 0; i < members.length; i++) {
             if (Util.isDeprecated(members[i])) {
                 list.add(members[i]);
@@ -137,8 +137,8 @@
      *
      * @param the constant representing the type of list being returned.
      */
-    public List getList(int type) {
-        return (List) deprecatedLists.get(type);
+    public List<Doc> getList(int type) {
+        return deprecatedLists.get(type);
     }
 
     /**
@@ -147,6 +147,6 @@
      * @param type the type of list being checked.
      */
     public boolean hasDocumentation(int type) {
-        return ((List) deprecatedLists.get(type)).size() > 0;
+        return (deprecatedLists.get(type)).size() > 0;
     }
 }
--- a/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/DocFinder.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/DocFinder.java	Tue Aug 05 17:44:17 2008 -0700
@@ -164,7 +164,7 @@
          * subclass of IOException.  This subclass of DocFinder.Output allows
          * multiple tag inheritence.
          */
-        public List tagList  = new ArrayList();
+        public List<Tag> tagList  = new ArrayList<Tag>();
     }
 
     /**
--- a/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/Extern.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/Extern.java	Tue Aug 05 17:44:17 2008 -0700
@@ -53,7 +53,7 @@
      * Map package names onto Extern Item objects.
      * Lazily initialized.
      */
-    private Map packageToItemMap;
+    private Map<String,Item> packageToItemMap;
 
     /**
      * The global configuration information for this run.
@@ -101,7 +101,7 @@
             this.path = path;
             this.relative = relative;
             if (packageToItemMap == null) {
-                packageToItemMap = new HashMap();
+                packageToItemMap = new HashMap<String,Item>();
             }
             if (!packageToItemMap.containsKey(packageName)) { // save the previous
                 packageToItemMap.put(packageName, this);        // mapped location
@@ -185,7 +185,7 @@
         if (packageToItemMap == null) {
             return null;
         }
-        return (Item)packageToItemMap.get(pkgName);
+        return packageToItemMap.get(pkgName);
     }
 
     /**
--- a/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/Group.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/Group.java	Tue Aug 05 17:44:17 2008 -0700
@@ -61,24 +61,24 @@
     /**
      * Map of regular expressions with the corresponding group name.
      */
-    private Map regExpGroupMap = new HashMap();
+    private Map<String,String> regExpGroupMap = new HashMap<String,String>();
 
     /**
      * List of regular expressions sorted according to the length. Regular
      * expression with longest length will be first in the sorted order.
      */
-    private List sortedRegExpList = new ArrayList();
+    private List<String> sortedRegExpList = new ArrayList<String>();
 
     /**
      * List of group names in the same order as given on the command line.
      */
-    private List groupList = new ArrayList();
+    private List<String> groupList = new ArrayList<String>();
 
     /**
      * Map of non-regular expressions(possible package names) with the
      * corresponding group name.
      */
-    private Map pkgNameGroupMap = new HashMap();
+    private Map<String,String> pkgNameGroupMap = new HashMap<String,String>();
 
     /**
      * The global configuration information for this run.
@@ -90,9 +90,9 @@
      * the compare method in the implementing class is doing the reverse
      * comparison.
      */
-    private static class MapKeyComparator implements Comparator {
-        public int compare(Object key1, Object key2) {
-            return ((String)key2).length() - ((String)key1).length();
+    private static class MapKeyComparator implements Comparator<String> {
+        public int compare(String key1, String key2) {
+            return key2.length() - key1.length();
         }
     }
 
@@ -182,8 +182,8 @@
      *
      * @param packages Packages specified on the command line.
      */
-    public Map groupPackages(PackageDoc[] packages) {
-        Map groupPackageMap = new HashMap();
+    public Map<String,List<PackageDoc>> groupPackages(PackageDoc[] packages) {
+        Map<String,List<PackageDoc>> groupPackageMap = new HashMap<String,List<PackageDoc>>();
         String defaultGroupName =
             (pkgNameGroupMap.isEmpty() && regExpGroupMap.isEmpty())?
                 configuration.message.getText("doclet.Packages") :
@@ -195,7 +195,7 @@
         for (int i = 0; i < packages.length; i++) {
             PackageDoc pkg = packages[i];
             String pkgName = pkg.name();
-            String groupName = (String)pkgNameGroupMap.get(pkgName);
+            String groupName = pkgNameGroupMap.get(pkgName);
             // if this package is not explicitly assigned to a group,
             // try matching it to group specified by regular expression
             if (groupName == null) {
@@ -220,9 +220,9 @@
      */
     String regExpGroupName(String pkgName) {
         for (int j = 0; j < sortedRegExpList.size(); j++) {
-            String regexp = (String)sortedRegExpList.get(j);
+            String regexp = sortedRegExpList.get(j);
             if (pkgName.startsWith(regexp)) {
-                return (String)regExpGroupMap.get(regexp);
+                return regExpGroupMap.get(regexp);
             }
         }
         return null;
@@ -235,10 +235,10 @@
      * @param map Map to be searched for gorup name.
      * @param groupname Group name to search.
      */
-    List getPkgList(Map map, String groupname) {
-        List list = (List)map.get(groupname);
+    List<PackageDoc> getPkgList(Map<String,List<PackageDoc>> map, String groupname) {
+        List<PackageDoc> list = map.get(groupname);
         if (list == null) {
-            list = new ArrayList();
+            list = new ArrayList<PackageDoc>();
             map.put(groupname, list);
         }
         return list;
--- a/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/ImplementedMethods.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/ImplementedMethods.java	Tue Aug 05 17:44:17 2008 -0700
@@ -41,8 +41,8 @@
  */
 public class ImplementedMethods {
 
-    private Map interfaces = new HashMap();
-    private List methlist = new ArrayList();
+    private Map<MethodDoc,Type> interfaces = new HashMap<MethodDoc,Type>();
+    private List<MethodDoc> methlist = new ArrayList<MethodDoc>();
     private Configuration configuration;
     private final ClassDoc classdoc;
     private final MethodDoc method;
@@ -67,7 +67,7 @@
      */
     public MethodDoc[] build(boolean sort) {
         buildImplementedMethodList(sort);
-        return (MethodDoc[])methlist.toArray(new MethodDoc[methlist.size()]);
+        return methlist.toArray(new MethodDoc[methlist.size()]);
     }
 
     public MethodDoc[] build() {
@@ -75,7 +75,7 @@
     }
 
     public Type getMethodHolder(MethodDoc methodDoc) {
-        return (Type) interfaces.get(methodDoc);
+        return interfaces.get(methodDoc);
     }
 
     /**
@@ -111,7 +111,7 @@
         ClassDoc overriddenClass = method.overriddenClass();
         if (overriddenClass != null) {
             for (int i = 0; i < methlist.size(); i++) {
-                ClassDoc cd = ((MethodDoc)methlist.get(i)).containingClass();
+                ClassDoc cd = methlist.get(i).containingClass();
                 if (cd == overriddenClass || overriddenClass.subclassOf(cd)) {
                     methlist.remove(i);  // remove overridden method
                     return;
@@ -131,7 +131,7 @@
     private boolean overridingMethodFound(MethodDoc method) {
         ClassDoc containingClass = method.containingClass();
         for (int i = 0; i < methlist.size(); i++) {
-            MethodDoc listmethod = (MethodDoc)methlist.get(i);
+            MethodDoc listmethod = methlist.get(i);
             if (containingClass == listmethod.containingClass()) {
                 // it's the same method.
                 return true;
--- a/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/IndexBuilder.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/IndexBuilder.java	Tue Aug 05 17:44:17 2008 -0700
@@ -49,7 +49,7 @@
      * Mapping of each Unicode Character with the member list containing
      * members with names starting with it.
      */
-    private Map indexmap = new HashMap();
+    private Map<Character,List<Doc>> indexmap = new HashMap<Character,List<Doc>>();
 
     /**
      * Don't generate deprecated information if true.
@@ -68,10 +68,10 @@
      * A comparator used to sort classes and members.
      * Note:  Maybe this compare code belongs in the tool?
      */
-    private class DocComparator implements Comparator {
-        public int compare(Object d1, Object d2) {
-            String doc1 = (((Doc) d1).name());
-            String doc2 = (((Doc) d2).name());
+    private class DocComparator implements Comparator<Doc> {
+        public int compare(Doc d1, Doc d2) {
+            String doc1 = d1.name();
+            String doc2 = d2.name();
             int compareResult;
             if ((compareResult = doc1.compareToIgnoreCase(doc2)) != 0) {
                 return compareResult;
@@ -124,8 +124,8 @@
      * sort each element which is a list.
      */
     protected void sortIndexMap() {
-        for (Iterator it = indexmap.values().iterator(); it.hasNext(); ) {
-            Collections.sort((List)it.next(), new DocComparator());
+        for (Iterator<List<Doc>> it = indexmap.values().iterator(); it.hasNext(); ) {
+            Collections.sort(it.next(), new DocComparator());
         }
     }
 
@@ -141,7 +141,7 @@
         ClassDoc[] classes = root.classes();
         if (!classesOnly) {
             if (packages.length == 0) {
-                Set set = new HashSet();
+                Set<PackageDoc> set = new HashSet<PackageDoc>();
                 PackageDoc pd;
                 for (int i = 0; i < classes.length; i++) {
                     pd = classes[i].containingPackage();
@@ -149,7 +149,7 @@
                         set.add(pd);
                     }
                 }
-                adjustIndexMap((PackageDoc[]) set.toArray(packages));
+                adjustIndexMap(set.toArray(packages));
             } else {
                 adjustIndexMap(packages);
             }
@@ -193,9 +193,9 @@
                     '*' :
                     Character.toUpperCase(name.charAt(0));
                 Character unicode = new Character(ch);
-                List list = (List)indexmap.get(unicode);
+                List<Doc> list = indexmap.get(unicode);
                 if (list == null) {
-                    list = new ArrayList();
+                    list = new ArrayList<Doc>();
                     indexmap.put(unicode, list);
                 }
                 list.add(elements[i]);
--- a/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/MetaKeywords.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/MetaKeywords.java	Tue Aug 05 17:44:17 2008 -0700
@@ -82,7 +82,7 @@
      * definitions are on separate pages.
      */
     public String[] getMetaKeywords(ClassDoc classdoc) {
-        ArrayList results = new ArrayList();
+        ArrayList<String> results = new ArrayList<String>();
 
         // Add field and method keywords only if -keywords option is used
         if( configuration.keywords ) {
@@ -90,16 +90,16 @@
             results.addAll(getMemberKeywords(classdoc.fields()));
             results.addAll(getMemberKeywords(classdoc.methods()));
         }
-        return (String[]) results.toArray(new String[]{});
+        return results.toArray(new String[]{});
     }
 
     /**
      * Get the current class for a meta tag keyword, as the first
      * and only element of an array list.
      */
-    protected ArrayList getClassKeyword(ClassDoc classdoc) {
+    protected ArrayList<String> getClassKeyword(ClassDoc classdoc) {
         String cltypelower = classdoc.isInterface() ? "interface" : "class";
-        ArrayList metakeywords = new ArrayList(1);
+        ArrayList<String> metakeywords = new ArrayList<String>(1);
         metakeywords.add(classdoc.qualifiedName() + " " + cltypelower);
         return metakeywords;
     }
@@ -141,8 +141,8 @@
      *
      * @param memberdocs  array of MemberDoc objects to be added to keywords
      */
-    protected ArrayList getMemberKeywords(MemberDoc[] memberdocs) {
-        ArrayList results = new ArrayList();
+    protected ArrayList<String> getMemberKeywords(MemberDoc[] memberdocs) {
+        ArrayList<String> results = new ArrayList<String>();
         String membername;
         for (int i=0; i < memberdocs.length; i++) {
             membername = memberdocs[i].name()
--- a/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/SourceToHTMLConverter.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/SourceToHTMLConverter.java	Tue Aug 05 17:44:17 2008 -0700
@@ -260,12 +260,12 @@
      * @param docs the array of <code>Doc</code>s to add anchors for.
      * @param hash the <code>HashMap</code> to add to.
      */
-    protected static void addToHash(Doc[] docs, HashMap hash) {
+    protected static void addToHash(Doc[] docs, HashMap<Integer,String> hash) {
         if(docs == null) {
             return;
         }
         for(int i = 0; i < docs.length; i++) {
-            hash.put(new Integer(docs[i].position().line()), getAnchor(docs[i]));
+            hash.put(docs[i].position().line(), getAnchor(docs[i]));
         }
     }
 
--- a/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/Util.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/Util.java	Tue Aug 05 17:44:17 2008 -0700
@@ -73,9 +73,9 @@
      * @return List       List of eligible members for whom
      *                    documentation is getting generated.
      */
-    public static List excludeDeprecatedMembersAsList(
+    public static List<ProgramElementDoc> excludeDeprecatedMembersAsList(
         ProgramElementDoc[] members) {
-        List list = new ArrayList();
+        List<ProgramElementDoc> list = new ArrayList<ProgramElementDoc>();
         for (int i = 0; i < members.length; i++) {
             if (members[i].tags("deprecated").length == 0) {
                 list.add(members[i]);
@@ -372,10 +372,10 @@
      * We want the list of types in alphabetical order.  However, types are not
      * comparable.  We need a comparator for now.
      */
-    private static class TypeComparator implements Comparator {
-        public int compare(Object type1, Object type2) {
-            return ((Type) type1).qualifiedTypeName().toLowerCase().compareTo(
-                ((Type) type2).qualifiedTypeName().toLowerCase());
+    private static class TypeComparator implements Comparator<Type> {
+        public int compare(Type type1, Type type2) {
+            return type1.qualifiedTypeName().toLowerCase().compareTo(
+                type2.qualifiedTypeName().toLowerCase());
         }
     }
 
@@ -391,9 +391,9 @@
      * @param  sort if true, return list of interfaces sorted alphabetically.
      * @return List of all the required interfaces.
      */
-    public static List getAllInterfaces(Type type,
+    public static List<Type> getAllInterfaces(Type type,
             Configuration configuration, boolean sort) {
-        Map results = sort ? new TreeMap() : new LinkedHashMap();
+        Map<ClassDoc,Type> results = sort ? new TreeMap<ClassDoc,Type>() : new LinkedHashMap<ClassDoc,Type>();
         Type[] interfaceTypes = null;
         Type superType = null;
         if (type instanceof ParameterizedType) {
@@ -423,7 +423,7 @@
             }
         }
         if (superType == null)
-            return new ArrayList(results.values());
+            return new ArrayList<Type>(results.values());
         //Try walking the tree.
         addAllInterfaceTypes(results,
             superType,
@@ -431,7 +431,7 @@
                 ((ClassDoc) superType).interfaceTypes() :
                 ((ParameterizedType) superType).interfaceTypes(),
             false, configuration);
-        List resultsList = new ArrayList(results.values());
+        List<Type> resultsList = new ArrayList<Type>(results.values());
         if (sort) {
                 Collections.sort(resultsList, new TypeComparator());
         }
@@ -442,7 +442,7 @@
         return getAllInterfaces(type, configuration, true);
     }
 
-    private static void findAllInterfaceTypes(Map results, ClassDoc c, boolean raw,
+    private static void findAllInterfaceTypes(Map<ClassDoc,Type> results, ClassDoc c, boolean raw,
             Configuration configuration) {
         Type superType = c.superclassType();
         if (superType == null)
@@ -454,7 +454,7 @@
                 raw, configuration);
     }
 
-    private static void findAllInterfaceTypes(Map results, ParameterizedType p,
+    private static void findAllInterfaceTypes(Map<ClassDoc,Type> results, ParameterizedType p,
             Configuration configuration) {
         Type superType = p.superclassType();
         if (superType == null)
@@ -466,7 +466,7 @@
                 false, configuration);
     }
 
-    private static void addAllInterfaceTypes(Map results, Type type,
+    private static void addAllInterfaceTypes(Map<ClassDoc,Type> results, Type type,
             Type[] interfaceTypes, boolean raw,
             Configuration configuration) {
         for (int i = 0; i < interfaceTypes.length; i++) {
@@ -495,8 +495,8 @@
     }
 
 
-    public static List asList(ProgramElementDoc[] members) {
-        List list = new ArrayList();
+    public static List<ProgramElementDoc> asList(ProgramElementDoc[] members) {
+        List<ProgramElementDoc> list = new ArrayList<ProgramElementDoc>();
         for (int i = 0; i < members.length; i++) {
             list.add(members[i]);
         }
@@ -639,7 +639,7 @@
      * @return an array of tokens.
      */
     public static String[] tokenize(String s, char separator, int maxTokens) {
-        List tokens = new ArrayList();
+        List<String> tokens = new ArrayList<String>();
         StringBuilder  token = new StringBuilder ();
         boolean prevIsEscapeChar = false;
         for (int i = 0; i < s.length(); i += Character.charCount(i)) {
@@ -663,7 +663,7 @@
         if (token.length() > 0) {
             tokens.add(token.toString());
         }
-        return (String[]) tokens.toArray(new String[] {});
+        return tokens.toArray(new String[] {});
     }
 
     /**
--- a/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/VisibleMemberMap.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/VisibleMemberMap.java	Tue Aug 05 17:44:17 2008 -0700
@@ -65,19 +65,19 @@
     /**
      * List of ClassDoc objects for which ClassMembers objects are built.
      */
-    private final List visibleClasses = new ArrayList();
+    private final List<ClassDoc> visibleClasses = new ArrayList<ClassDoc>();
 
     /**
      * Map for each member name on to a map which contains members with same
      * name-signature. The mapped map will contain mapping for each MemberDoc
      * onto it's respecive level string.
      */
-    private final Map memberNameMap = new HashMap();
+    private final Map<Object,Map<ProgramElementDoc,String>> memberNameMap = new HashMap<Object,Map<ProgramElementDoc,String>>();
 
     /**
      * Map of class and it's ClassMembers object.
      */
-    private final Map classMap = new HashMap();
+    private final Map<ClassDoc,ClassMembers> classMap = new HashMap<ClassDoc,ClassMembers>();
 
     /**
      * Type whose visible members are requested.  This is the leaf of
@@ -128,8 +128,8 @@
      * @param configuation the current configuration of the doclet.
      * @return the package private members inherited by the class.
      */
-    private List getInheritedPackagePrivateMethods(Configuration configuration) {
-        List results = new ArrayList();
+    private List<ProgramElementDoc> getInheritedPackagePrivateMethods(Configuration configuration) {
+        List<ProgramElementDoc> results = new ArrayList<ProgramElementDoc>();
         for (Iterator iter = visibleClasses.iterator(); iter.hasNext(); ) {
             ClassDoc currentClass = (ClassDoc) iter.next();
             if (currentClass != classdoc &&
@@ -150,8 +150,8 @@
      *
      * @param configuation the current configuration of the doclet.
      */
-    public List getLeafClassMembers(Configuration configuration) {
-        List result = getMembersFor(classdoc);
+    public List<ProgramElementDoc> getLeafClassMembers(Configuration configuration) {
+        List<ProgramElementDoc> result = getMembersFor(classdoc);
         result.addAll(getInheritedPackagePrivateMethods(configuration));
         return result;
     }
@@ -163,10 +163,10 @@
      *
      * @return the list of members for the given class.
      */
-    public List getMembersFor(ClassDoc cd) {
-        ClassMembers clmembers = (ClassMembers)(classMap.get(cd));
+    public List<ProgramElementDoc> getMembersFor(ClassDoc cd) {
+        ClassMembers clmembers = classMap.get(cd);
         if (clmembers == null) {
-            return new ArrayList();
+            return new ArrayList<ProgramElementDoc>();
         }
         return clmembers.getMembers();
     }
@@ -175,11 +175,11 @@
      * Sort the given mixed list of classes and interfaces to a list of
      * classes followed by interfaces traversed. Don't sort alphabetically.
      */
-    private void sort(List list) {
-        List classes = new ArrayList();
-        List interfaces = new ArrayList();
+    private void sort(List<ClassDoc> list) {
+        List<ClassDoc> classes = new ArrayList<ClassDoc>();
+        List<ClassDoc> interfaces = new ArrayList<ClassDoc>();
         for (int i = 0; i < list.size(); i++) {
-            ClassDoc cd = (ClassDoc)list.get(i);
+            ClassDoc cd = list.get(i);
             if (cd.isClass()) {
                 classes.add(cd);
             } else {
@@ -191,12 +191,12 @@
         list.addAll(interfaces);
     }
 
-    private void fillMemberLevelMap(List list, String level) {
+    private void fillMemberLevelMap(List<ProgramElementDoc> list, String level) {
         for (int i = 0; i < list.size(); i++) {
-            Object key = getMemberKey((ProgramElementDoc)list.get(i));
-            Map memberLevelMap = (Map) memberNameMap.get(key);
+            Object key = getMemberKey(list.get(i));
+            Map<ProgramElementDoc,String> memberLevelMap = memberNameMap.get(key);
             if (memberLevelMap == null) {
-                memberLevelMap = new HashMap();
+                memberLevelMap = new HashMap<ProgramElementDoc,String>();
                 memberNameMap.put(key, memberLevelMap);
             }
             memberLevelMap.put(list.get(i), level);
@@ -218,10 +218,10 @@
      * type variables in consideration when comparing.
      */
     private class ClassMember {
-        private Set members;
+        private Set<ProgramElementDoc> members;
 
         public ClassMember(ProgramElementDoc programElementDoc) {
-            members = new HashSet();
+            members = new HashSet<ProgramElementDoc>();
             members.add(programElementDoc);
         }
 
@@ -256,7 +256,7 @@
         /**
          * List of inherited members from the mapping class.
          */
-        private List members = new ArrayList();
+        private List<ProgramElementDoc> members = new ArrayList<ProgramElementDoc>();
 
         /**
          * Level/Depth of inheritance.
@@ -268,7 +268,7 @@
          *
          * @return List Inherited members.
          */
-        public List getMembers() {
+        public List<ProgramElementDoc> getMembers() {
             return members;
         }
 
@@ -276,11 +276,11 @@
             this.mappingClass = mappingClass;
             this.level = level;
             if (classMap.containsKey(mappingClass) &&
-                        level.startsWith(((ClassMembers) classMap.get(mappingClass)).level)) {
+                        level.startsWith(classMap.get(mappingClass).level)) {
                 //Remove lower level class so that it can be replaced with
                 //same class found at higher level.
                 purgeMemberLevelMap(getClassMembers(mappingClass, false),
-                    ((ClassMembers) classMap.get(mappingClass)).level);
+                    classMap.get(mappingClass).level);
                 classMap.remove(mappingClass);
                 visibleClasses.remove(mappingClass);
             }
@@ -326,11 +326,10 @@
          * Adjust member-level-map, class-map.
          */
         private void addMembers(ClassDoc fromClass) {
-            List cdmembers = getClassMembers(fromClass, true);
-            List incllist = new ArrayList();
+            List<ProgramElementDoc> cdmembers = getClassMembers(fromClass, true);
+            List<ProgramElementDoc> incllist = new ArrayList<ProgramElementDoc>();
             for (int i = 0; i < cdmembers.size(); i++) {
-                ProgramElementDoc pgmelem =
-                    (ProgramElementDoc)(cdmembers.get(i));
+                ProgramElementDoc pgmelem = cdmembers.get(i);
                 if (!found(members, pgmelem) &&
                     memberIsVisible(pgmelem) &&
                     !isOverridden(pgmelem, level)) {
@@ -373,7 +372,7 @@
         /**
          * Return all available class members.
          */
-        private List getClassMembers(ClassDoc cd, boolean filter) {
+        private List<ProgramElementDoc> getClassMembers(ClassDoc cd, boolean filter) {
             if (cd.isEnum() && kind == CONSTRUCTORS) {
                 //If any of these rules are hit, return empty array because
                 //we don't document these members ever.
@@ -428,16 +427,15 @@
          */
         private AnnotationTypeElementDoc[] filter(AnnotationTypeDoc doc,
             boolean required) {
-            AnnotationTypeElementDoc[] members = ((AnnotationTypeDoc) doc).elements();
-            List targetMembers = new ArrayList();
+            AnnotationTypeElementDoc[] members = doc.elements();
+            List<AnnotationTypeElementDoc> targetMembers = new ArrayList<AnnotationTypeElementDoc>();
             for (int i = 0; i < members.length; i++) {
                 if ((required && members[i].defaultValue() == null) ||
                      ((!required) && members[i].defaultValue() != null)){
                     targetMembers.add(members[i]);
                 }
             }
-            return (AnnotationTypeElementDoc[])
-                targetMembers.toArray(new AnnotationTypeElementDoc[]{});
+            return targetMembers.toArray(new AnnotationTypeElementDoc[]{});
         }
 
         private boolean found(List list, ProgramElementDoc elem) {
--- a/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/links/LinkFactory.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/links/LinkFactory.java	Tue Aug 05 17:44:17 2008 -0700
@@ -84,7 +84,7 @@
                         owner instanceof ClassDoc) {
                     linkInfo.classDoc = (ClassDoc) owner;
                     linkInfo.label = type.typeName();
-                    linkOutput.append(getClassLink((LinkInfo) linkInfo));
+                    linkOutput.append(getClassLink(linkInfo));
                 } else {
                     //No need to link method type parameters.
                     linkInfo.displayLength += type.typeName().length();
@@ -113,7 +113,7 @@
                     return linkOutput;
                 } else {
                     linkInfo.classDoc = type.asClassDoc();
-                    linkOutput = getClassLink((LinkInfo) linkInfo);
+                    linkOutput = getClassLink(linkInfo);
                     if (linkInfo.includeTypeAsSepLink) {
                         linkOutput.append(getTypeParameterLinks(linkInfo, false));
                     }
@@ -136,7 +136,7 @@
             return linkOutput;
         } else if (linkInfo.classDoc != null) {
             //Just a class link
-            LinkOutput linkOutput = getClassLink((LinkInfo) linkInfo);
+            LinkOutput linkOutput = getClassLink(linkInfo);
             if (linkInfo.includeTypeAsSepLink) {
                 linkOutput.append(getTypeParameterLinks(linkInfo, false));
             }
--- a/langtools/src/share/classes/com/sun/tools/javac/api/JavacTaskImpl.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/api/JavacTaskImpl.java	Tue Aug 05 17:44:17 2008 -0700
@@ -381,8 +381,8 @@
         return results;
     }
     // where
-        private void handleFlowResults(List<Env<AttrContext>> list, ListBuffer<Element> elems) {
-            for (Env<AttrContext> env: list) {
+        private void handleFlowResults(Queue<Env<AttrContext>> queue, ListBuffer<Element> elems) {
+            for (Env<AttrContext> env: queue) {
                 switch (env.tree.getTag()) {
                     case JCTree.CLASSDEF:
                         JCClassDecl cdef = (JCClassDecl) env.tree;
@@ -396,7 +396,7 @@
                         break;
                 }
             }
-            genList.appendList(list);
+            genList.addAll(queue);
         }
 
 
@@ -424,13 +424,13 @@
             analyze(null);  // ensure all classes have been parsed, entered, and analyzed
 
             if (classes == null) {
-                compiler.generate(compiler.desugar(genList.toList()), results);
+                compiler.generate(compiler.desugar(genList), results);
                 genList.clear();
             }
             else {
                 Filter f = new Filter() {
                         public void process(Env<AttrContext> env) {
-                            compiler.generate(compiler.desugar(List.of(env)), results);
+                            compiler.generate(compiler.desugar(ListBuffer.of(env)), results);
                         }
                     };
                 f.run(genList, classes);
--- a/langtools/src/share/classes/com/sun/tools/javac/comp/Enter.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/comp/Enter.java	Tue Aug 05 17:44:17 2008 -0700
@@ -260,8 +260,11 @@
      */
     <T extends JCTree> List<Type> classEnter(List<T> trees, Env<AttrContext> env) {
         ListBuffer<Type> ts = new ListBuffer<Type>();
-        for (List<T> l = trees; l.nonEmpty(); l = l.tail)
-            ts.append(classEnter(l.head, env));
+        for (List<T> l = trees; l.nonEmpty(); l = l.tail) {
+            Type t = classEnter(l.head, env);
+            if (t != null)
+                ts.append(t);
+        }
         return ts.toList();
     }
 
--- a/langtools/src/share/classes/com/sun/tools/javac/file/ZipFileIndex.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/file/ZipFileIndex.java	Tue Aug 05 17:44:17 2008 -0700
@@ -32,6 +32,7 @@
 import java.text.MessageFormat;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Calendar;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -1307,11 +1308,18 @@
             return javatime;
         }
 
-        // From java.util.zip
-        private static long dosToJavaTime(int nativetime) {
-            // Bootstrap build problems prevent me from using the code directly
-            // Convert the raw/native time to a long for now
-            return (long)nativetime;
+        // based on dosToJavaTime in java.util.Zip, but avoiding the
+        // use of deprecated Date constructor
+        private static long dosToJavaTime(int dtime) {
+            Calendar c = Calendar.getInstance();
+            c.set(Calendar.YEAR,        ((dtime >> 25) & 0x7f) + 1980);
+            c.set(Calendar.MONTH,       ((dtime >> 21) & 0x0f) - 1);
+            c.set(Calendar.DATE,        ((dtime >> 16) & 0x1f));
+            c.set(Calendar.HOUR_OF_DAY, ((dtime >> 11) & 0x1f));
+            c.set(Calendar.MINUTE,      ((dtime >>  5) & 0x3f));
+            c.set(Calendar.SECOND,      ((dtime <<  1) & 0x3e));
+            c.set(Calendar.MILLISECOND, 0);
+            return c.getTimeInMillis();
         }
 
         void setNativeTime(int natTime) {
--- a/langtools/src/share/classes/com/sun/tools/javac/main/JavaCompiler.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/main/JavaCompiler.java	Tue Aug 05 17:44:17 2008 -0700
@@ -63,6 +63,7 @@
 // TEMP, until we have a more efficient way to save doc comment info
 import com.sun.tools.javac.parser.DocCommentScanner;
 
+import java.util.Queue;
 import javax.lang.model.SourceVersion;
 
 /** This class could be the main entry point for GJC when GJC is used as a
@@ -460,11 +461,11 @@
             return log.nerrors;
     }
 
-    protected final <T> List<T> stopIfError(ListBuffer<T> listBuffer) {
+    protected final <T> Queue<T> stopIfError(Queue<T> queue) {
         if (errorCount() == 0)
-            return listBuffer.toList();
+            return queue;
         else
-            return List.nil();
+            return ListBuffer.lb();
     }
 
     protected final <T> List<T> stopIfError(List<T> list) {
@@ -776,8 +777,8 @@
                 break;
 
             case BY_FILE:
-                for (List<Env<AttrContext>> list : groupByFile(flow(attribute(todo))).values())
-                    generate(desugar(list));
+                for (Queue<Env<AttrContext>> queue : groupByFile(flow(attribute(todo))).values())
+                    generate(desugar(queue));
                 break;
 
             case BY_TODO:
@@ -794,7 +795,7 @@
         }
 
         if (verbose) {
-            elapsed_msec = elapsed(start_msec);;
+            elapsed_msec = elapsed(start_msec);
             printVerbose("total", Long.toString(elapsed_msec));
         }
 
@@ -1026,11 +1027,11 @@
      * Attribution of the entries in the list does not stop if any errors occur.
      * @returns a list of environments for attributd classes.
      */
-    public List<Env<AttrContext>> attribute(ListBuffer<Env<AttrContext>> envs) {
+    public Queue<Env<AttrContext>> attribute(Queue<Env<AttrContext>> envs) {
         ListBuffer<Env<AttrContext>> results = lb();
-        while (envs.nonEmpty())
-            results.append(attribute(envs.next()));
-        return results.toList();
+        while (!envs.isEmpty())
+            results.append(attribute(envs.remove()));
+        return results;
     }
 
     /**
@@ -1068,10 +1069,10 @@
      * If any errors occur, an empty list will be returned.
      * @returns the list of attributed parse trees
      */
-    public List<Env<AttrContext>> flow(List<Env<AttrContext>> envs) {
+    public Queue<Env<AttrContext>> flow(Queue<Env<AttrContext>> envs) {
         ListBuffer<Env<AttrContext>> results = lb();
-        for (List<Env<AttrContext>> l = envs; l.nonEmpty(); l = l.tail) {
-            flow(l.head, results);
+        for (Env<AttrContext> env: envs) {
+            flow(env, results);
         }
         return stopIfError(results);
     }
@@ -1079,7 +1080,7 @@
     /**
      * Perform dataflow checks on an attributed parse tree.
      */
-    public List<Env<AttrContext>> flow(Env<AttrContext> env) {
+    public Queue<Env<AttrContext>> flow(Env<AttrContext> env) {
         ListBuffer<Env<AttrContext>> results = lb();
         flow(env, results);
         return stopIfError(results);
@@ -1132,10 +1133,10 @@
      * If any errors occur, an empty list will be returned.
      * @returns a list containing the classes to be generated
      */
-    public List<Pair<Env<AttrContext>, JCClassDecl>> desugar(List<Env<AttrContext>> envs) {
+    public Queue<Pair<Env<AttrContext>, JCClassDecl>> desugar(Queue<Env<AttrContext>> envs) {
         ListBuffer<Pair<Env<AttrContext>, JCClassDecl>> results = lb();
-        for (List<Env<AttrContext>> l = envs; l.nonEmpty(); l = l.tail)
-            desugar(l.head, results);
+        for (Env<AttrContext> env: envs)
+            desugar(env, results);
         return stopIfError(results);
     }
 
@@ -1145,7 +1146,7 @@
      * the current implicitSourcePolicy is taken into account.
      * The preparation stops as soon as an error is found.
      */
-    protected void desugar(Env<AttrContext> env, ListBuffer<Pair<Env<AttrContext>, JCClassDecl>> results) {
+    protected void desugar(Env<AttrContext> env, Queue<Pair<Env<AttrContext>, JCClassDecl>> results) {
         if (errorCount() > 0)
             return;
 
@@ -1180,7 +1181,7 @@
                     List<JCTree> pdef = lower.translateTopLevelClass(env, env.tree, localMake);
                     if (pdef.head != null) {
                         assert pdef.tail.isEmpty();
-                        results.append(new Pair<Env<AttrContext>, JCClassDecl>(env, (JCClassDecl)pdef.head));
+                        results.add(new Pair<Env<AttrContext>, JCClassDecl>(env, (JCClassDecl)pdef.head));
                     }
                 }
                 return;
@@ -1194,7 +1195,7 @@
                     rootClasses.contains((JCClassDecl)untranslated) &&
                     ((cdef.mods.flags & (Flags.PROTECTED|Flags.PUBLIC)) != 0 ||
                      cdef.sym.packge().getQualifiedName() == names.java_lang)) {
-                    results.append(new Pair<Env<AttrContext>, JCClassDecl>(env, removeMethodBodies(cdef)));
+                    results.add(new Pair<Env<AttrContext>, JCClassDecl>(env, removeMethodBodies(cdef)));
                 }
                 return;
             }
@@ -1210,7 +1211,7 @@
                 JCClassDecl cdef = (JCClassDecl)env.tree;
                 if (untranslated instanceof JCClassDecl &&
                     rootClasses.contains((JCClassDecl)untranslated)) {
-                    results.append(new Pair<Env<AttrContext>, JCClassDecl>(env, cdef));
+                    results.add(new Pair<Env<AttrContext>, JCClassDecl>(env, cdef));
                 }
                 return;
             }
@@ -1224,7 +1225,7 @@
             //generate code for each class
             for (List<JCTree> l = cdefs; l.nonEmpty(); l = l.tail) {
                 JCClassDecl cdef = (JCClassDecl)l.head;
-                results.append(new Pair<Env<AttrContext>, JCClassDecl>(env, cdef));
+                results.add(new Pair<Env<AttrContext>, JCClassDecl>(env, cdef));
             }
         }
         finally {
@@ -1275,15 +1276,14 @@
      * based upon the compiler's options.
      * Generation stops if an error occurs while writing files.
      */
-    public void generate(List<Pair<Env<AttrContext>, JCClassDecl>> list) {
-        generate(list, null);
+    public void generate(Queue<Pair<Env<AttrContext>, JCClassDecl>> queue) {
+        generate(queue, null);
     }
 
-    public void generate(List<Pair<Env<AttrContext>, JCClassDecl>> list, ListBuffer<JavaFileObject> results) {
+    public void generate(Queue<Pair<Env<AttrContext>, JCClassDecl>> queue, ListBuffer<JavaFileObject> results) {
         boolean usePrintSource = (stubOutput || sourceOutput || printFlat);
 
-        for (List<Pair<Env<AttrContext>, JCClassDecl>> l = list; l.nonEmpty(); l = l.tail) {
-            Pair<Env<AttrContext>, JCClassDecl> x = l.head;
+        for (Pair<Env<AttrContext>, JCClassDecl> x: queue) {
             Env<AttrContext> env = x.fst;
             JCClassDecl cdef = x.snd;
 
@@ -1325,26 +1325,17 @@
     }
 
         // where
-        Map<JCCompilationUnit, List<Env<AttrContext>>> groupByFile(List<Env<AttrContext>> list) {
+        Map<JCCompilationUnit, Queue<Env<AttrContext>>> groupByFile(Queue<Env<AttrContext>> envs) {
             // use a LinkedHashMap to preserve the order of the original list as much as possible
-            Map<JCCompilationUnit, List<Env<AttrContext>>> map = new LinkedHashMap<JCCompilationUnit, List<Env<AttrContext>>>();
-            Set<JCCompilationUnit> fixupSet = new HashSet<JCTree.JCCompilationUnit>();
-            for (List<Env<AttrContext>> l = list; l.nonEmpty(); l = l.tail) {
-                Env<AttrContext> env = l.head;
-                List<Env<AttrContext>> sublist = map.get(env.toplevel);
-                if (sublist == null)
-                    sublist = List.of(env);
-                else {
-                    // this builds the list for the file in reverse order, so make a note
-                    // to reverse the list before returning.
-                    sublist = sublist.prepend(env);
-                    fixupSet.add(env.toplevel);
+            Map<JCCompilationUnit, Queue<Env<AttrContext>>> map = new LinkedHashMap<JCCompilationUnit, Queue<Env<AttrContext>>>();
+            for (Env<AttrContext> env: envs) {
+                Queue<Env<AttrContext>> sublist = map.get(env.toplevel);
+                if (sublist == null) {
+                    sublist = new ListBuffer<Env<AttrContext>>();
+                    map.put(env.toplevel, sublist);
                 }
-                map.put(env.toplevel, sublist);
+                sublist.add(env);
             }
-            // fixup any lists that need reversing back to the correct order
-            for (JCTree.JCCompilationUnit tree: fixupSet)
-                map.put(tree, map.get(tree).reverse());
             return map;
         }
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/src/share/classes/com/sun/tools/javac/util/AbstractLog.java	Tue Aug 05 17:44:17 2008 -0700
@@ -0,0 +1,197 @@
+/*
+ * Copyright 1999-2008 Sun Microsystems, Inc.  All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Sun designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Sun in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+package com.sun.tools.javac.util;
+
+import java.util.HashMap;
+import java.util.Map;
+import javax.tools.JavaFileObject;
+
+import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition;
+import com.sun.tools.javac.util.JCDiagnostic.SimpleDiagnosticPosition;
+
+
+/**
+ *  A base class for error logs. Reports errors and warnings, and
+ *  keeps track of error numbers and positions.
+ *
+ *  <p><b>This is NOT part of any API supported by Sun Microsystems.  If
+ *  you write code that depends on this, you do so at your own risk.
+ *  This code and its internal interfaces are subject to change or
+ *  deletion without notice.</b>
+ */
+public abstract class AbstractLog {
+    AbstractLog(JCDiagnostic.Factory diags) {
+        this.diags = diags;
+        sourceMap = new HashMap<JavaFileObject, DiagnosticSource>();
+    }
+
+    /** Re-assign source, returning previous setting.
+     */
+    public JavaFileObject useSource(JavaFileObject file) {
+        JavaFileObject prev = (source == null ? null : source.getFile());
+        source = getSource(file);
+        return prev;
+    }
+
+    protected DiagnosticSource getSource(JavaFileObject file) {
+        if (file == null)
+            return null;
+        DiagnosticSource s = sourceMap.get(file);
+        if (s == null) {
+            s = new DiagnosticSource(file, this);
+            sourceMap.put(file, s);
+        }
+        return s;
+    }
+
+    /** Report an error, unless another error was already reported at same
+     *  source position.
+     *  @param key    The key for the localized error message.
+     *  @param args   Fields of the error message.
+     */
+    public void error(String key, Object ... args) {
+        report(diags.error(source, null, key, args));
+    }
+
+    /** Report an error, unless another error was already reported at same
+     *  source position.
+     *  @param pos    The source position at which to report the error.
+     *  @param key    The key for the localized error message.
+     *  @param args   Fields of the error message.
+     */
+    public void error(DiagnosticPosition pos, String key, Object ... args) {
+        report(diags.error(source, pos, key, args));
+    }
+
+    /** Report an error, unless another error was already reported at same
+     *  source position.
+     *  @param pos    The source position at which to report the error.
+     *  @param key    The key for the localized error message.
+     *  @param args   Fields of the error message.
+     */
+    public void error(int pos, String key, Object ... args) {
+        report(diags.error(source, wrap(pos), key, args));
+    }
+
+    /** Report a warning, unless suppressed by the  -nowarn option or the
+     *  maximum number of warnings has been reached.
+     *  @param pos    The source position at which to report the warning.
+     *  @param key    The key for the localized warning message.
+     *  @param args   Fields of the warning message.
+     */
+    public void warning(String key, Object ... args) {
+        report(diags.warning(source, null, key, args));
+    }
+
+    /** Report a warning, unless suppressed by the  -nowarn option or the
+     *  maximum number of warnings has been reached.
+     *  @param pos    The source position at which to report the warning.
+     *  @param key    The key for the localized warning message.
+     *  @param args   Fields of the warning message.
+     */
+    public void warning(DiagnosticPosition pos, String key, Object ... args) {
+        report(diags.warning(source, pos, key, args));
+    }
+
+    /** Report a warning, unless suppressed by the  -nowarn option or the
+     *  maximum number of warnings has been reached.
+     *  @param pos    The source position at which to report the warning.
+     *  @param key    The key for the localized warning message.
+     *  @param args   Fields of the warning message.
+     */
+    public void warning(int pos, String key, Object ... args) {
+        report(diags.warning(source, wrap(pos), key, args));
+    }
+
+    /** Report a warning.
+     *  @param pos    The source position at which to report the warning.
+     *  @param key    The key for the localized warning message.
+     *  @param args   Fields of the warning message.
+     */
+    public void mandatoryWarning(DiagnosticPosition pos, String key, Object ... args) {
+        report(diags.mandatoryWarning(source, pos, key, args));
+    }
+
+    /** Provide a non-fatal notification, unless suppressed by the -nowarn option.
+     *  @param key    The key for the localized notification message.
+     *  @param args   Fields of the notint an error or warning message:
+     */
+    public void note(String key, Object ... args) {
+        report(diags.note(source, null, key, args));
+    }
+
+    /** Provide a non-fatal notification, unless suppressed by the -nowarn option.
+     *  @param key    The key for the localized notification message.
+     *  @param args   Fields of the notification message.
+     */
+    public void note(DiagnosticPosition pos, String key, Object ... args) {
+        report(diags.note(source, pos, key, args));
+    }
+
+    /** Provide a non-fatal notification, unless suppressed by the -nowarn option.
+     *  @param key    The key for the localized notification message.
+     *  @param args   Fields of the notification message.
+     */
+    public void note(int pos, String key, Object ... args) {
+        report(diags.note(source, wrap(pos), key, args));
+    }
+
+    /** Provide a non-fatal notification, unless suppressed by the -nowarn option.
+     *  @param key    The key for the localized notification message.
+     *  @param args   Fields of the notification message.
+     */
+    public void note(JavaFileObject file, String key, Object ... args) {
+        report(diags.note(getSource(file), null, key, args));
+    }
+
+    /** Provide a non-fatal notification, unless suppressed by the -nowarn option.
+     *  @param key    The key for the localized notification message.
+     *  @param args   Fields of the notification message.
+     */
+    public void mandatoryNote(final JavaFileObject file, String key, Object ... args) {
+        report(diags.mandatoryNote(getSource(file), key, args));
+    }
+
+    protected abstract void report(JCDiagnostic diagnostic);
+
+    protected abstract void directError(String key, Object... args);
+
+    private DiagnosticPosition wrap(int pos) {
+        return (pos == Position.NOPOS ? null : new SimpleDiagnosticPosition(pos));
+    }
+
+    /** Factory for diagnostics
+     */
+    protected JCDiagnostic.Factory diags;
+
+    /** The file that's currently being translated.
+     */
+    protected DiagnosticSource source;
+
+    /** A cache of lightweight DiagnosticSource objects.
+     */
+    protected Map<JavaFileObject, DiagnosticSource> sourceMap;
+}
--- a/langtools/src/share/classes/com/sun/tools/javac/util/DiagnosticFormatter.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/util/DiagnosticFormatter.java	Tue Aug 05 17:44:17 2008 -0700
@@ -28,7 +28,6 @@
 import javax.tools.JavaFileObject;
 
 import com.sun.tools.javac.file.JavacFileManager;
-import com.sun.tools.javac.util.JCDiagnostic.DiagnosticSource;
 import com.sun.tools.javac.util.JCDiagnostic.DiagnosticType;
 
 /**
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/src/share/classes/com/sun/tools/javac/util/DiagnosticSource.java	Tue Aug 05 17:44:17 2008 -0700
@@ -0,0 +1,214 @@
+/*
+ * Copyright 1999-2008 Sun Microsystems, Inc.  All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Sun designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Sun in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+package com.sun.tools.javac.util;
+
+import java.io.IOException;
+import java.lang.ref.SoftReference;
+import java.nio.CharBuffer;
+import java.util.Map;
+import javax.tools.JavaFileObject;
+
+import com.sun.tools.javac.file.JavacFileManager;
+import com.sun.tools.javac.tree.JCTree;
+
+import static com.sun.tools.javac.util.LayoutCharacters.*;
+
+/**
+ * A simple abstraction of a source file, as needed for use in a diagnostic message.
+ * Provides access to the line and position in a line for any given character offset.
+ *
+ *  <p><b>This is NOT part of any API supported by Sun Microsystems.  If
+ *  you write code that depends on this, you do so at your own risk.
+ *  This code and its internal interfaces are subject to change or
+ *  deletion without notice.</b>
+ */
+public class DiagnosticSource {
+    public DiagnosticSource(JavaFileObject fo, AbstractLog log) {
+        this.fileObject = fo;
+        this.log = log;
+    }
+
+    /** Return the underlying file object handled by this
+     *  DiagnosticSource object.
+     */
+    public JavaFileObject getFile() {
+        return fileObject;
+    }
+
+    public CharSequence getName()  {
+        return JavacFileManager.getJavacBaseFileName(fileObject);
+    }
+
+    /** Return the one-based line number associated with a given pos
+     * for the current source file.  Zero is returned if no line exists
+     * for the given position.
+     */
+    public int getLineNumber(int pos) {
+        try {
+            if (findLine(pos)) {
+                return line;
+            }
+            return 0;
+        } finally {
+            buf = null;
+        }
+    }
+
+    /** Return the one-based column number associated with a given pos
+     * for the current source file.  Zero is returned if no column exists
+     * for the given position.
+     */
+    public int getColumnNumber(int pos) {
+        try {
+            if (findLine(pos)) {
+                int column = 0;
+                for (int bp = lineStart; bp < pos; bp++) {
+                    if (bp >= bufLen) {
+                        return 0;
+                    }
+                    if (buf[bp] == '\t') {
+                        column = (column / TabInc * TabInc) + TabInc;
+                    } else {
+                        column++;
+                    }
+                }
+                return column + 1; // positions are one-based
+            }
+            return 0;
+        } finally {
+            buf = null;
+        }
+    }
+
+    /** Return the content of the line containing a given pos.
+     */
+    public String getLine(int pos) {
+        try {
+            if (!findLine(pos))
+                return null;
+
+            int lineEnd = lineStart;
+            while (lineEnd < bufLen && buf[lineEnd] != CR && buf[lineEnd] != LF)
+                lineEnd++;
+            if (lineEnd - lineStart == 0)
+                return null;
+            return new String(buf, lineStart, lineEnd - lineStart);
+        } finally {
+            buf = null;
+        }
+    }
+
+    public Map<JCTree, Integer> getEndPosTable() {
+        return endPosTable;
+    }
+
+    public void setEndPosTable(Map<JCTree, Integer> t) {
+        if (endPosTable != null && endPosTable != t)
+            throw new IllegalStateException("endPosTable already set");
+        endPosTable = t;
+    }
+
+    /** Find the line in the buffer that contains the current position
+     * @param pos      Character offset into the buffer
+     */
+    private boolean findLine(int pos) {
+        if (pos == Position.NOPOS)
+            return false;
+
+        try {
+            // try and recover buffer from soft reference cache
+            if (buf == null && refBuf != null)
+                buf = refBuf.get();
+
+            if (buf == null) {
+                buf = initBuf(fileObject);
+                lineStart = 0;
+                line = 1;
+            } else if (lineStart > pos) { // messages don't come in order
+                lineStart = 0;
+                line = 1;
+            }
+
+            int bp = lineStart;
+            while (bp < bufLen && bp < pos) {
+                switch (buf[bp++]) {
+                case CR:
+                    if (bp < bufLen && buf[bp] == LF) bp++;
+                    line++;
+                    lineStart = bp;
+                    break;
+                case LF:
+                    line++;
+                    lineStart = bp;
+                    break;
+                }
+            }
+            return bp <= bufLen;
+        } catch (IOException e) {
+            log.directError("source.unavailable");
+            buf = new char[0];
+            return false;
+        }
+    }
+
+    protected char[] initBuf(JavaFileObject fileObject) throws IOException {
+        char[] buf;
+        CharSequence cs = fileObject.getCharContent(true);
+        if (cs instanceof CharBuffer) {
+            CharBuffer cb = (CharBuffer) cs;
+            buf = JavacFileManager.toArray(cb);
+            bufLen = cb.limit();
+        } else {
+            buf = cs.toString().toCharArray();
+            bufLen = buf.length;
+        }
+        refBuf = new SoftReference<char[]>(buf);
+        return buf;
+    }
+
+    /** The underlying file object. */
+    protected JavaFileObject fileObject;
+
+    protected Map<JCTree, Integer> endPosTable;
+
+    /** A soft reference to the content of the file object. */
+    protected SoftReference<char[]> refBuf;
+
+    /** A temporary hard reference to the content of the file object. */
+    protected char[] buf;
+
+    /** The length of the content. */
+    protected int bufLen;
+
+    /** The start of a line found by findLine. */
+    protected int lineStart;
+
+    /** The line number of a line found by findLine. */
+    protected int line;
+
+    /** A log for reporting errors, such as errors accessing the content. */
+    protected AbstractLog log;
+}
--- a/langtools/src/share/classes/com/sun/tools/javac/util/JCDiagnostic.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/util/JCDiagnostic.java	Tue Aug 05 17:44:17 2008 -0700
@@ -175,18 +175,6 @@
     }
 
     /**
-     * A simple abstraction of a source file, as needed for use in a diagnostic message.
-     */
-    // Note: This class may be superceded by a more general abstraction
-    public interface DiagnosticSource {
-        JavaFileObject getFile();
-        CharSequence getName();
-        int getLineNumber(int pos);
-        int getColumnNumber(int pos);
-        Map<JCTree, Integer> getEndPosTable();
-    };
-
-    /**
      * A DiagnosticType defines the type of the diagnostic.
      **/
     public enum DiagnosticType {
--- a/langtools/src/share/classes/com/sun/tools/javac/util/ListBuffer.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/util/ListBuffer.java	Tue Aug 05 17:44:17 2008 -0700
@@ -25,6 +25,7 @@
 
 package com.sun.tools.javac.util;
 
+import java.util.AbstractQueue;
 import java.util.Collection;
 import java.util.Iterator;
 import java.util.NoSuchElementException;
@@ -37,12 +38,18 @@
  *  This code and its internal interfaces are subject to change or
  *  deletion without notice.</b>
  */
-public class ListBuffer<A> implements Collection<A> {
+public class ListBuffer<A> extends AbstractQueue<A> {
 
     public static <T> ListBuffer<T> lb() {
         return new ListBuffer<T>();
     }
 
+    public static <T> ListBuffer<T> of(T x) {
+        ListBuffer<T> lb = new ListBuffer<T>();
+        lb.add(x);
+        return lb;
+    }
+
     /** The list of elements of this buffer.
      */
     public List<A> elems;
@@ -119,6 +126,7 @@
     /** Append an element to buffer.
      */
     public ListBuffer<A> append(A x) {
+        x.getClass(); // null check
         if (shared) copy();
         last.head = x;
         last.setTail(new List<A>(null,null));
@@ -180,20 +188,14 @@
         return elems.head;
     }
 
-    /** Remove the first element in this buffer.
+    /** Return first element in this buffer and remove
      */
-    public void remove() {
+    public A next() {
+        A x = elems.head;
         if (elems != last) {
             elems = elems.tail;
             count--;
         }
-    }
-
-    /** Return first element in this buffer and remove
-     */
-    public A next() {
-        A x = elems.head;
-        remove();
         return x;
     }
 
@@ -219,21 +221,46 @@
     }
 
     public boolean add(A a) {
-        throw new UnsupportedOperationException();
+        append(a);
+        return true;
     }
+
     public boolean remove(Object o) {
         throw new UnsupportedOperationException();
     }
+
     public boolean containsAll(Collection<?> c) {
-        throw new UnsupportedOperationException();
+        for (Object x: c) {
+            if (!contains(x))
+                return false;
+        }
+        return true;
     }
+
     public boolean addAll(Collection<? extends A> c) {
-        throw new UnsupportedOperationException();
+        for (A a: c)
+            append(a);
+        return true;
     }
+
     public boolean removeAll(Collection<?> c) {
         throw new UnsupportedOperationException();
     }
+
     public boolean retainAll(Collection<?> c) {
         throw new UnsupportedOperationException();
     }
+
+    public boolean offer(A a) {
+        append(a);
+        return true;
+    }
+
+    public A poll() {
+        return next();
+    }
+
+    public A peek() {
+        return first();
+    }
 }
--- a/langtools/src/share/classes/com/sun/tools/javac/util/Log.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/util/Log.java	Tue Aug 05 17:44:17 2008 -0700
@@ -26,8 +26,6 @@
 package com.sun.tools.javac.util;
 
 import java.io.*;
-import java.nio.CharBuffer;
-import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
@@ -38,9 +36,6 @@
 import com.sun.tools.javac.tree.JCTree;
 import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition;
 import com.sun.tools.javac.util.JCDiagnostic.DiagnosticType;
-import com.sun.tools.javac.util.JCDiagnostic.SimpleDiagnosticPosition;
-
-import static com.sun.tools.javac.util.LayoutCharacters.*;
 
 /** A class for error logs. Reports errors and warnings, and
  *  keeps track of error numbers and positions.
@@ -50,7 +45,7 @@
  *  This code and its internal interfaces are subject to change or
  *  deletion without notice.</b>
  */
-public class Log {
+public class Log extends AbstractLog {
     /** The context key for the log. */
     public static final Context.Key<Log> logKey
         = new Context.Key<Log>();
@@ -98,28 +93,22 @@
      * interface to javac (JSR 199).
      */
     protected DiagnosticListener<? super JavaFileObject> diagListener;
+
     /**
      * Formatter for diagnostics
      */
     private DiagnosticFormatter diagFormatter;
 
-    /**
-     * Factory for diagnostics
-     */
-    private JCDiagnostic.Factory diags;
-
-
     /** Construct a log with given I/O redirections.
      */
     @Deprecated
     protected Log(Context context, PrintWriter errWriter, PrintWriter warnWriter, PrintWriter noticeWriter) {
+        super(JCDiagnostic.Factory.instance(context));
         context.put(logKey, this);
         this.errWriter = errWriter;
         this.warnWriter = warnWriter;
         this.noticeWriter = noticeWriter;
 
-        this.diags = JCDiagnostic.Factory.instance(context);
-
         Options options = Options.instance(context);
         this.dumpOnError = options.get("-doe") != null;
         this.promptOnError = options.get("-prompt") != null;
@@ -174,10 +163,6 @@
         return instance;
     }
 
-    /** The file that's currently translated.
-     */
-    protected JCDiagnostic.DiagnosticSource source;
-
     /** The number of errors encountered so far.
      */
     public int nerrors = 0;
@@ -192,77 +177,13 @@
      */
     private Set<Pair<JavaFileObject, Integer>> recorded = new HashSet<Pair<JavaFileObject,Integer>>();
 
-    private Map<JavaFileObject, Map<JCTree, Integer>> endPosTables;
-
-    /** The buffer containing the file that's currently translated.
-     */
-    private char[] buf = null;
-
-    /** The length of useful data in buf
-     */
-    private int bufLen = 0;
-
-    /** The position in the buffer at which last error was reported
-     */
-    private int bp;
-
-    /** number of the current source line; first line is 1
-     */
-    private int line;
-
-    /**  buffer index of the first character of the current source line
-     */
-    private int lineStart;
-
     public boolean hasDiagnosticListener() {
         return diagListener != null;
     }
 
     public void setEndPosTable(JavaFileObject name, Map<JCTree, Integer> table) {
-        if (endPosTables == null)
-            endPosTables = new HashMap<JavaFileObject, Map<JCTree, Integer>>();
-        endPosTables.put(name, table);
-    }
-
-    /** Re-assign source, returning previous setting.
-     */
-    public JavaFileObject useSource(final JavaFileObject name) {
-        JavaFileObject prev = currentSource();
-        if (name != prev) {
-            source = new JCDiagnostic.DiagnosticSource() {
-                    public JavaFileObject getFile() {
-                        return name;
-                    }
-                    public CharSequence getName() {
-                        return JavacFileManager.getJavacBaseFileName(getFile());
-                    }
-                    public int getLineNumber(int pos) {
-                        return Log.this.getLineNumber(pos);
-                    }
-                    public int getColumnNumber(int pos) {
-                        return Log.this.getColumnNumber(pos);
-                    }
-                    public Map<JCTree, Integer> getEndPosTable() {
-                        return (endPosTables == null ? null : endPosTables.get(name));
-                    }
-                };
-            buf = null;
-        }
-        return prev;
-    }
-
-    /** Re-assign source buffer for existing source name.
-     */
-    protected void setBuf(char[] newBuf) {
-        buf = newBuf;
-        bufLen = buf.length;
-        bp = 0;
-        lineStart = 0;
-        line = 1;
-    }
-
-    protected char[] getBuf() {
-        return buf;
+        name.getClass(); // null check
+        getSource(name).setEndPosTable(table);
     }
 
     /** Return current source name.
@@ -320,74 +241,19 @@
      *  @param pos   Buffer index of the error position, must be on current line
      */
     private void printErrLine(int pos, PrintWriter writer) {
-        if (!findLine(pos))
+        String line = (source == null ? null : source.getLine(pos));
+        if (line == null)
             return;
+        int col = source.getColumnNumber(pos);
 
-        int lineEnd = lineStart;
-        while (lineEnd < bufLen && buf[lineEnd] != CR && buf[lineEnd] != LF)
-            lineEnd++;
-        if (lineEnd - lineStart == 0)
-            return;
-        printLines(writer, new String(buf, lineStart, lineEnd - lineStart));
-        for (bp = lineStart; bp < pos; bp++) {
-            writer.print((buf[bp] == '\t') ? "\t" : " ");
+        printLines(writer, line);
+        for (int i = 0; i < col - 1; i++) {
+            writer.print((line.charAt(i) == '\t') ? "\t" : " ");
         }
         writer.println("^");
         writer.flush();
     }
 
-    protected void initBuf(JavaFileObject fileObject) throws IOException {
-        CharSequence cs = fileObject.getCharContent(true);
-        if (cs instanceof CharBuffer) {
-            CharBuffer cb = (CharBuffer) cs;
-            buf = JavacFileManager.toArray(cb);
-            bufLen = cb.limit();
-        } else {
-            buf = cs.toString().toCharArray();
-            bufLen = buf.length;
-        }
-    }
-
-    /** Find the line in the buffer that contains the current position
-     * @param pos      Character offset into the buffer
-     */
-    private boolean findLine(int pos) {
-        if (pos == Position.NOPOS || currentSource() == null)
-            return false;
-        try {
-            if (buf == null) {
-                initBuf(currentSource());
-                lineStart = 0;
-                line = 1;
-            } else if (lineStart > pos) { // messages don't come in order
-                lineStart = 0;
-                line = 1;
-            }
-            bp = lineStart;
-            while (bp < bufLen && bp < pos) {
-                switch (buf[bp++]) {
-                case CR:
-                    if (bp < bufLen && buf[bp] == LF) bp++;
-                    line++;
-                    lineStart = bp;
-                    break;
-                case LF:
-                    line++;
-                    lineStart = bp;
-                    break;
-                }
-            }
-            return bp <= bufLen;
-        } catch (IOException e) {
-            //e.printStackTrace();
-            // FIXME: include e.getLocalizedMessage() in error message
-            printLines(errWriter, getLocalizedString("source.unavailable"));
-            errWriter.flush();
-            buf = new char[0];
-        }
-        return false;
-    }
-
     /** Print the text of a message, translating newlines appropriately
      *  for the platform.
      */
@@ -400,72 +266,9 @@
         if (msg.length() != 0) writer.println(msg);
     }
 
-    /** Report an error, unless another error was already reported at same
-     *  source position.
-     *  @param key    The key for the localized error message.
-     *  @param args   Fields of the error message.
-     */
-    public void error(String key, Object ... args) {
-        report(diags.error(source, null, key, args));
-    }
-
-    /** Report an error, unless another error was already reported at same
-     *  source position.
-     *  @param pos    The source position at which to report the error.
-     *  @param key    The key for the localized error message.
-     *  @param args   Fields of the error message.
-     */
-    public void error(DiagnosticPosition pos, String key, Object ... args) {
-        report(diags.error(source, pos, key, args));
-    }
-
-    /** Report an error, unless another error was already reported at same
-     *  source position.
-     *  @param pos    The source position at which to report the error.
-     *  @param key    The key for the localized error message.
-     *  @param args   Fields of the error message.
-     */
-    public void error(int pos, String key, Object ... args) {
-        report(diags.error(source, wrap(pos), key, args));
-    }
-
-    /** Report a warning, unless suppressed by the  -nowarn option or the
-     *  maximum number of warnings has been reached.
-     *  @param pos    The source position at which to report the warning.
-     *  @param key    The key for the localized warning message.
-     *  @param args   Fields of the warning message.
-     */
-    public void warning(String key, Object ... args) {
-        report(diags.warning(source, null, key, args));
-    }
-
-    /** Report a warning, unless suppressed by the  -nowarn option or the
-     *  maximum number of warnings has been reached.
-     *  @param pos    The source position at which to report the warning.
-     *  @param key    The key for the localized warning message.
-     *  @param args   Fields of the warning message.
-     */
-    public void warning(DiagnosticPosition pos, String key, Object ... args) {
-        report(diags.warning(source, pos, key, args));
-    }
-
-    /** Report a warning, unless suppressed by the  -nowarn option or the
-     *  maximum number of warnings has been reached.
-     *  @param pos    The source position at which to report the warning.
-     *  @param key    The key for the localized warning message.
-     *  @param args   Fields of the warning message.
-     */
-    public void warning(int pos, String key, Object ... args) {
-        report(diags.warning(source, wrap(pos), key, args));
-    }
-
-    /** Report a warning.
-     *  @param pos    The source position at which to report the warning.
-     *  @param key    The key for the localized warning message.
-     *  @param args   Fields of the warning message.
-     */
-    public void mandatoryWarning(DiagnosticPosition pos, String key, Object ... args) {
-        report(diags.mandatoryWarning(source, pos, key, args));
+    protected void directError(String key, Object... args) {
+        printLines(errWriter, getLocalizedString(key, args));
+        errWriter.flush();
     }
 
     /** Report a warning that cannot be suppressed.
@@ -478,74 +281,6 @@
         nwarnings++;
     }
 
-    /** Provide a non-fatal notification, unless suppressed by the -nowarn option.
-     *  @param key    The key for the localized notification message.
-     *  @param args   Fields of the notification message.
-     */
-    public void note(String key, Object ... args) {
-        report(diags.note(source, null, key, args));
-    }
-
-    /** Provide a non-fatal notification, unless suppressed by the -nowarn option.
-     *  @param key    The key for the localized notification message.
-     *  @param args   Fields of the notification message.
-     */
-    public void note(DiagnosticPosition pos, String key, Object ... args) {
-        report(diags.note(source, pos, key, args));
-    }
-
-    /** Provide a non-fatal notification, unless suppressed by the -nowarn option.
-     *  @param key    The key for the localized notification message.
-     *  @param args   Fields of the notification message.
-     */
-    public void note(int pos, String key, Object ... args) {
-        report(diags.note(source, wrap(pos), key, args));
-    }
-
-    /** Provide a non-fatal notification, unless suppressed by the -nowarn option.
-     *  @param file   The file to which the note applies.
-     *  @param key    The key for the localized notification message.
-     *  @param args   Fields of the notification message.
-     */
-    public void note(JavaFileObject file, String key, Object ... args) {
-        report(diags.note(wrap(file), null, key, args));
-    }
-
-    /** Provide a non-fatal notification, unless suppressed by the -nowarn option.
-     *  @param key    The key for the localized notification message.
-     *  @param args   Fields of the notification message.
-     */
-    public void mandatoryNote(final JavaFileObject file, String key, Object ... args) {
-        report(diags.mandatoryNote(wrap(file), key, args));
-    }
-
-    private JCDiagnostic.DiagnosticSource wrap(final JavaFileObject file) {
-        if (file == null) {
-            return null;
-        }
-        return new JCDiagnostic.DiagnosticSource() {
-            public JavaFileObject getFile() {
-                return file;
-            }
-            public CharSequence getName() {
-                return JavacFileManager.getJavacBaseFileName(getFile());
-            }
-            public int getLineNumber(int pos) {
-                return Log.this.getLineNumber(pos);
-            }
-            public int getColumnNumber(int pos) {
-                return Log.this.getColumnNumber(pos);
-            }
-            public Map<JCTree, Integer> getEndPosTable() {
-                return (endPosTables == null ? null : endPosTables.get(file));
-            }
-        };
-    }
-
-    private DiagnosticPosition wrap(int pos) {
-        return (pos == Position.NOPOS ? null : new SimpleDiagnosticPosition(pos));
-    }
-
     /**
      * Common diagnostic handling.
      * The diagnostic is counted, and depending on the options and how many diagnostics have been
@@ -657,12 +392,13 @@
  * and quick prototyping
  ***************************************************************************/
 
-/** print an error or warning message:
- */
+    /** print an error or warning message:
+     */
     private void printRawError(int pos, String msg) {
-        if (!findLine(pos)) {
+        if (source == null || pos == Position.NOPOS) {
             printLines(errWriter, "error: " + msg);
         } else {
+            int line = source.getLineNumber(pos);
             JavaFileObject file = currentSource();
             if (file != null)
                 printLines(errWriter,
@@ -673,8 +409,8 @@
         errWriter.flush();
     }
 
-/** report an error:
- */
+    /** report an error:
+     */
     public void rawError(int pos, String msg) {
         if (nerrors < MaxErrors && shouldReport(currentSource(), pos)) {
             printRawError(pos, msg);
@@ -684,8 +420,8 @@
         errWriter.flush();
     }
 
-/** report a warning:
- */
+    /** report a warning:
+     */
     public void rawWarning(int pos, String msg) {
         if (nwarnings < MaxWarnings && emitWarnings) {
             printRawError(pos, "warning: " + msg);
@@ -695,36 +431,6 @@
         errWriter.flush();
     }
 
-    /** Return the one-based line number associated with a given pos
-     * for the current source file.  Zero is returned if no line exists
-     * for the given position.
-     */
-    protected int getLineNumber(int pos) {
-        if (findLine(pos))
-            return line;
-        return 0;
-    }
-
-    /** Return the one-based column number associated with a given pos
-     * for the current source file.  Zero is returned if no column exists
-     * for the given position.
-     */
-    protected int getColumnNumber(int pos) {
-        if (findLine(pos)) {
-            int column = 0;
-            for (bp = lineStart; bp < pos; bp++) {
-                if (bp >= bufLen)
-                    return 0;
-                if (buf[bp] == '\t')
-                    column = (column / TabInc * TabInc) + TabInc;
-                else
-                    column++;
-            }
-            return column + 1; // positions are one-based
-        }
-        return 0;
-    }
-
     public static String format(String fmt, Object... args) {
         return String.format((java.util.Locale)null, fmt, args);
     }
--- a/langtools/src/share/classes/com/sun/tools/javadoc/DocletInvoker.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javadoc/DocletInvoker.java	Tue Aug 05 17:44:17 2008 -0700
@@ -47,7 +47,7 @@
  */
 public class DocletInvoker {
 
-    private final Class docletClass;
+    private final Class<?> docletClass;
 
     private final String docletClassName;
 
--- a/langtools/src/share/classes/com/sun/tools/javadoc/ExecutableMemberDocImpl.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javadoc/ExecutableMemberDocImpl.java	Tue Aug 05 17:44:17 2008 -0700
@@ -231,7 +231,7 @@
         StringBuffer result = new StringBuffer();
         result.append("(");
         for (List<Type> types = sym.type.getParameterTypes(); types.nonEmpty(); ) {
-            Type t = (Type)types.head;
+            Type t = types.head;
             result.append(TypeMaker.getTypeString(env, t, full));
             types = types.tail;
             if (types.nonEmpty()) {
--- a/langtools/src/share/classes/com/sun/tools/javadoc/JavadocEnter.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javadoc/JavadocEnter.java	Tue Aug 05 17:44:17 2008 -0700
@@ -86,7 +86,7 @@
         if (tree.sym != null && tree.sym.kind == Kinds.TYP) {
             if (tree.sym == null) return;
             String comment = env.toplevel.docComments.get(tree);
-            ClassSymbol c = (ClassSymbol)tree.sym;
+            ClassSymbol c = tree.sym;
             docenv.makeClassDoc(c, comment, tree, env.toplevel.lineMap);
         }
     }
--- a/langtools/src/share/classes/com/sun/tools/javadoc/JavadocMemberEnter.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javadoc/JavadocMemberEnter.java	Tue Aug 05 17:44:17 2008 -0700
@@ -63,7 +63,7 @@
 
     public void visitMethodDef(JCMethodDecl tree) {
         super.visitMethodDef(tree);
-        MethodSymbol meth = (MethodSymbol)tree.sym;
+        MethodSymbol meth = tree.sym;
         if (meth == null || meth.kind != Kinds.MTH) return;
         String docComment = env.toplevel.docComments.get(tree);
         Position.LineMap lineMap = env.toplevel.lineMap;
@@ -82,7 +82,7 @@
                 !isParameter(tree.sym)) {
             String docComment = env.toplevel.docComments.get(tree);
             Position.LineMap lineMap = env.toplevel.lineMap;
-            docenv.makeFieldDoc((VarSymbol)tree.sym, docComment, tree, lineMap);
+            docenv.makeFieldDoc(tree.sym, docComment, tree, lineMap);
         }
     }
 
--- a/langtools/src/share/classes/com/sun/tools/javadoc/SeeTagImpl.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javadoc/SeeTagImpl.java	Tue Aug 05 17:44:17 2008 -0700
@@ -450,7 +450,7 @@
             if (typeId.length() > 0) {
                 paramList.append(typeId.toString());
             }
-            return (String[])paramList.toArray(new String[paramList.length()]);
+            return paramList.toArray(new String[paramList.length()]);
         }
 
         void addTypeToParamList() {
--- a/langtools/src/share/classes/com/sun/tools/javadoc/SerializedForm.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javadoc/SerializedForm.java	Tue Aug 05 17:44:17 2008 -0700
@@ -267,7 +267,7 @@
      * @return an array of MethodDocImpl for serialization methods in this class.
      */
     MethodDoc[] methods() {
-        return (MethodDoc[])methods.toArray(new MethodDoc[methods.length()]);
+        return methods.toArray(new MethodDoc[methods.length()]);
     }
 
     /**
--- a/langtools/src/share/classes/com/sun/tools/javah/Gen.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javah/Gen.java	Tue Aug 05 17:44:17 2008 -0700
@@ -324,7 +324,7 @@
 
     FieldDoc[] getAllFields(ClassDoc subclazz)
                 throws ClassNotFoundException {
-        Vector fields = new Vector();
+        Vector<FieldDoc> fields = new Vector<FieldDoc>();
         ClassDoc cd = null;
         Stack s = new Stack();
 
--- a/langtools/src/share/classes/com/sun/tools/javap/ClassWriter.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javap/ClassWriter.java	Tue Aug 05 17:44:17 2008 -0700
@@ -104,14 +104,10 @@
         Signature_attribute sigAttr = getSignature(cf.attributes);
         if (sigAttr == null) {
             // use info from class file header
-            if (classFile.isClass()) {
-                if (classFile.super_class != 0 ) {
-                    String sn = getJavaSuperclassName(cf);
-                    if (!sn.equals("java.lang.Object") || options.compat) { // BUG XXXXXXXX
-                        print(" extends ");
-                        print(sn);
-                    }
-                }
+            if (classFile.isClass() && classFile.super_class != 0 ) {
+                String sn = getJavaSuperclassName(cf);
+                print(" extends ");
+                print(sn);
             }
             for (int i = 0; i < classFile.interfaces.length; i++) {
                 print(i == 0 ? (classFile.isClass() ? " implements " : " extends ") : ",");
@@ -124,7 +120,7 @@
                 // FieldType and a ClassSignatureType that only contains a superclass type.
                 if (t instanceof Type.ClassSigType)
                     print(t);
-                else if (!t.isObject()) {
+                else {
                     print(" extends ");
                     print(t);
                 }
--- a/langtools/src/share/classes/com/sun/tools/javap/JavapTask.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javap/JavapTask.java	Tue Aug 05 17:44:17 2008 -0700
@@ -140,24 +140,31 @@
 
         new Option(false, "-public") {
             void process(JavapTask task, String opt, String arg) {
+                task.options.accessOptions.add(opt);
                 task.options.showAccess = AccessFlags.ACC_PUBLIC;
             }
         },
 
         new Option(false, "-protected") {
             void process(JavapTask task, String opt, String arg) {
+                task.options.accessOptions.add(opt);
                 task.options.showAccess = AccessFlags.ACC_PROTECTED;
             }
         },
 
         new Option(false, "-package") {
             void process(JavapTask task, String opt, String arg) {
+                task.options.accessOptions.add(opt);
                 task.options.showAccess = 0;
             }
         },
 
         new Option(false, "-p", "-private") {
             void process(JavapTask task, String opt, String arg) {
+                if (!task.options.accessOptions.contains("-p") &&
+                        !task.options.accessOptions.contains("-private")) {
+                    task.options.accessOptions.add(opt);
+                }
                 task.options.showAccess = AccessFlags.ACC_PRIVATE;
             }
         },
@@ -298,7 +305,7 @@
         return new DiagnosticListener<JavaFileObject> () {
             public void report(Diagnostic<? extends JavaFileObject> diagnostic) {
                 if (diagnostic.getKind() == Diagnostic.Kind.ERROR) {
-                    pw.print(getMessage("err.prefix"));
+                        pw.print(getMessage("err.prefix"));
                     pw.print(" ");
                 }
                 pw.println(diagnostic.getMessage(null));
@@ -306,14 +313,35 @@
         };
     }
 
+    /** Result codes.
+     */
+    static final int
+        EXIT_OK = 0,        // Compilation completed with no errors.
+        EXIT_ERROR = 1,     // Completed but reported errors.
+        EXIT_CMDERR = 2,    // Bad command-line arguments
+        EXIT_SYSERR = 3,    // System error or resource exhaustion.
+        EXIT_ABNORMAL = 4;  // Compiler terminated abnormally
+
     int run(String[] args) {
         try {
             handleOptions(args);
+
+            // the following gives consistent behavior with javac
+            if (classes == null || classes.size() == 0) {
+                if (options.help || options.version || options.fullVersion)
+                    return EXIT_OK;
+                else
+                    return EXIT_CMDERR;
+            }
+
             boolean ok = run();
-            return ok ? 0 : 1;
+            return ok ? EXIT_OK : EXIT_ERROR;
         } catch (BadArgs e) {
             diagnosticListener.report(createDiagnostic(e.key, e.args));
-            return 1;
+            if (e.showUsage) {
+                log.println(getMessage("main.usage.summary", progname));
+            }
+            return EXIT_CMDERR;
         } catch (InternalError e) {
             Object[] e_args;
             if (e.getCause() == null)
@@ -324,7 +352,7 @@
                 System.arraycopy(e.args, 0, e_args, 1, e.args.length);
             }
             diagnosticListener.report(createDiagnostic("err.internal.error", e_args));
-            return 1;
+            return EXIT_ABNORMAL;
         } finally {
             log.flush();
         }
@@ -349,8 +377,7 @@
             fileManager = getDefaultFileManager(diagnosticListener, log);
 
         Iterator<String> iter = args.iterator();
-        if (!iter.hasNext())
-            options.help = true;
+        boolean noArgs = !iter.hasNext();
 
         while (iter.hasNext()) {
             String arg = iter.next();
@@ -366,13 +393,29 @@
                 throw new BadArgs("err.unknown.option", arg).showUsage(true);
         }
 
+        if (!options.compat && options.accessOptions.size() > 1) {
+            StringBuilder sb = new StringBuilder();
+            for (String opt: options.accessOptions) {
+                if (sb.length() > 0)
+                    sb.append(" ");
+                sb.append(opt);
+            }
+            throw new BadArgs("err.incompatible.options", sb);
+        }
+
         if (options.ignoreSymbolFile && fileManager instanceof JavapFileManager)
             ((JavapFileManager) fileManager).setIgnoreSymbolFile(true);
 
         if ((classes == null || classes.size() == 0) &&
-                !(options.help || options.version || options.fullVersion)) {
+                !(noArgs || options.help || options.version || options.fullVersion)) {
             throw new BadArgs("err.no.classes.specified");
         }
+
+        if (noArgs || options.help)
+            showHelp();
+
+        if (options.version || options.fullVersion)
+            showVersion(options.fullVersion);
     }
 
     private void handleOption(String name, Iterator<String> rest) throws BadArgs {
@@ -405,14 +448,8 @@
     }
 
     public boolean run() {
-        if (options.help)
-            showHelp();
-
-        if (options.version || options.fullVersion)
-            showVersion(options.fullVersion);
-
         if (classes == null || classes.size() == 0)
-            return true;
+            return false;
 
         context.put(PrintWriter.class, log);
         ClassWriter classWriter = ClassWriter.instance(context);
--- a/langtools/src/share/classes/com/sun/tools/javap/Options.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javap/Options.java	Tue Aug 05 17:44:17 2008 -0700
@@ -25,6 +25,8 @@
 
 package com.sun.tools.javap;
 
+import java.util.HashSet;
+import java.util.Set;
 import com.sun.tools.classfile.AccessFlags;
 
 /*
@@ -74,6 +76,7 @@
     public boolean showFlags;
     public boolean showLineAndLocalVariableTables;
     public int showAccess;
+    public Set<String> accessOptions = new HashSet<String>();
     public boolean showDisassembled;
     public boolean showInternalSignatures;
     public boolean showAllAttrs;
--- a/langtools/src/share/classes/com/sun/tools/javap/resources/javap.properties	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javap/resources/javap.properties	Tue Aug 05 17:44:17 2008 -0700
@@ -7,6 +7,7 @@
 err.end.of.file=unexpected end of file while reading {0}
 err.file.not.found=file not found: {0}
 err.h.not.supported=-h is no longer available - use the 'javah' program
+err.incompatible.options=bad combination of options: {0}
 err.internal.error=internal error: {0} {1} {2}
 err.ioerror=IO error reading {0}: {1}
 err.missing.arg=no value given for {0}
@@ -16,6 +17,10 @@
 err.verify.not.supported=-verify not supported
 err.Xold.not.supported.here=-Xold must be given as the first option
 
+main.usage.summary=\
+Usage: {0} <options> <classes>\n\
+use -help for a list of possible options
+
 main.usage=\
 Usage: {0} <options> <classes>\n\
 where possible options include:
--- a/langtools/test/tools/javac/CyclicInheritance.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/test/tools/javac/CyclicInheritance.java	Tue Aug 05 17:44:17 2008 -0700
@@ -4,7 +4,7 @@
  * @summary Test that recursive 'extends' and 'implements' clauses are detected
  * and disallowed.
  *
- * @run shell CyclicInheritance.sh
+ * @compile/fail/ref=CyclicInheritance.out -XDrawDiagnostics -XDstdout CyclicInheritance.java
  */
 
 
--- a/langtools/test/tools/javac/CyclicInheritance.out	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/test/tools/javac/CyclicInheritance.out	Tue Aug 05 17:44:17 2008 -0700
@@ -1,25 +1,9 @@
-CyclicInheritance.java:15: cyclic inheritance involving C1
-class C1 extends C1 {}                  // ERROR - Cyclic inheritance
-^
-CyclicInheritance.java:17: cyclic inheritance involving C11
-class C11 extends C12 {}                // ERROR - Cyclic inheritance
-^
-CyclicInheritance.java:20: cyclic inheritance involving I1
-interface I1 extends I1 {}              // ERROR - Cyclic inheritance
-^
-CyclicInheritance.java:22: cyclic inheritance involving I11
-interface I11 extends I12 {}            // ERROR - Cyclic inheritance
-^
-CyclicInheritance.java:27: cyclic inheritance involving C211
-class C211 implements C211.I {          // ERROR - may change pending resoluation of 4087020
-^
-CyclicInheritance.java:31: cyclic inheritance involving C212
-class C212 extends C212.C {             // ERROR - Cyclic inheritance, subclass cannot enclose superclass
-^
-CyclicInheritance.java:36: C221.I has private access in C221
-class C221 implements C221.I {          // ERROR - Cannot access C21 (private)
-                          ^
-CyclicInheritance.java:40: C222.C has private access in C222
-class C222 extends C222.C {             // ERROR - Cannot access C22 (private)
-                       ^
+CyclicInheritance.java:15:1: compiler.err.cyclic.inheritance: C1
+CyclicInheritance.java:17:1: compiler.err.cyclic.inheritance: C11
+CyclicInheritance.java:20:1: compiler.err.cyclic.inheritance: I1
+CyclicInheritance.java:22:1: compiler.err.cyclic.inheritance: I11
+CyclicInheritance.java:27:1: compiler.err.cyclic.inheritance: C211
+CyclicInheritance.java:31:1: compiler.err.cyclic.inheritance: C212
+CyclicInheritance.java:36:27: compiler.err.report.access: C221.I, private, C221
+CyclicInheritance.java:40:24: compiler.err.report.access: C222.C, private, C222
 8 errors
--- a/langtools/test/tools/javac/CyclicInheritance.sh	Thu Jul 24 21:12:50 2008 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,86 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright 1999-2002 Sun Microsystems, Inc.  All Rights Reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
-# CA 95054 USA or visit www.sun.com if you need additional information or
-# have any questions.
-#
-
-
-if [ "${TESTSRC}" = "" ]
-then
-  echo "TESTSRC not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-echo "TESTSRC=${TESTSRC}"
-if [ "${TESTJAVA}" = "" ]
-then
-  echo "TESTJAVA not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-echo "TESTJAVA=${TESTJAVA}"
-if [ "${TESTCLASSES}" = "" ]
-then
-  echo "TESTCLASSES not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-echo "TESTCLASSES=${TESTCLASSES}"
-echo "CLASSPATH=${CLASSPATH}"
-
-# set platform-dependent variables
-OS=`uname -s`
-case "$OS" in
-  SunOS | Linux )
-    NULL=/dev/null
-    PS=":"
-    FS="/"
-    ;;
-  Windows* )
-    NULL=NUL
-    PS=";"
-    FS="\\"
-    ;;
-  * )
-    echo "Unrecognized system!"
-    exit 1;
-    ;;
-esac
-
-TMP1=OUTPUT.txt
-
-rm -rf C1.class   C11.class C12.class 
-rm -rf I1.class   I11.class I12.class 
-rm -rf C211.class C2.class
-
-cp "${TESTSRC}${FS}CyclicInheritance.java" .
-"${TESTJAVA}${FS}bin${FS}javac" ${TESTTOOLVMOPTS} CyclicInheritance.java 2> ${TMP1}
-cat ${TMP1}
-
-diff -c "${TESTSRC}${FS}CyclicInheritance.out" ${TMP1}
-result=$?
-rm ${TMP1}
-
-if [ $result -eq 0 ]
-then
-  echo "Passed"
-else
-  echo "Failed"
-fi
-exit $result
--- a/langtools/test/tools/javac/ExtendsAccess/ExtendsAccess.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/test/tools/javac/ExtendsAccess/ExtendsAccess.java	Tue Aug 05 17:44:17 2008 -0700
@@ -3,7 +3,7 @@
  * @bug 4087314 4087314 4785453
  * @summary Test access checking within 'extends' and 'implements' clause.
  * @author William Maddox (maddox)
- * @run shell ExtendsAccess.sh
+ * @compile/fail/ref=ExtendsAccess.out -XDrawDiagnostics -XDstdout ExtendsAccess.java
  */
 
 /*
--- a/langtools/test/tools/javac/ExtendsAccess/ExtendsAccess.out	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/test/tools/javac/ExtendsAccess/ExtendsAccess.out	Tue Aug 05 17:44:17 2008 -0700
@@ -1,151 +1,47 @@
-ExtendsAccess.java:31: cannot find symbol
-symbol: class publicClass
-class ExtendsAccess111 extends publicClass { }                          // ERROR - 'publicClass' not in scope
-                               ^
-ExtendsAccess.java:32: cannot find symbol
-symbol: class defaultClass
-class ExtendsAccess112 extends defaultClass { }                         // ERROR - 'defaultClass' not in scope
-                               ^
-ExtendsAccess.java:33: cannot find symbol
-symbol: class protectedClass
-class ExtendsAccess113 extends protectedClass { }                       // ERROR - 'protectedClass' not in scope
-                               ^
-ExtendsAccess.java:34: cannot find symbol
-symbol: class privateClass
-class ExtendsAccess114 extends privateClass { }                         // ERROR - 'privateClass' not in scope
-                               ^
-ExtendsAccess.java:39: ExtendsAccess.privateClass has private access in ExtendsAccess
-class ExtendsAccess1241 extends ExtendsAccess.privateClass { }          // ERROR - cannot access 'privateClass'
-                                             ^
-ExtendsAccess.java:42: p.ExtendsAccess.defaultClass is not public in p.ExtendsAccess; cannot be accessed from outside package
-class ExtendsAccess1222 extends p.ExtendsAccess.defaultClass { }        // ERROR - cannot access 'defaultClass'
-                                               ^
-ExtendsAccess.java:43: p.ExtendsAccess.protectedClass has protected access in p.ExtendsAccess
-class ExtendsAccess1232 extends p.ExtendsAccess.protectedClass { }      // ERROR - cannot access 'protectedClass'
-                                               ^
-ExtendsAccess.java:44: p.ExtendsAccess.privateClass has private access in p.ExtendsAccess
-class ExtendsAccess1242 extends p.ExtendsAccess.privateClass { }        // ERROR - cannot access 'privateClass'
-                                               ^
-ExtendsAccess.java:56: ExtendsAccess.privateClass has private access in ExtendsAccess
-    class N extends privateClass { }                                    // ERROR - cannot access 'privateClass'
-                    ^
-ExtendsAccess.java:63: p.ExtendsAccess.defaultClass is not public in p.ExtendsAccess; cannot be accessed from outside package
-    class N extends defaultClass { }                                    // ERROR - cannot access 'defaultClass'
-                    ^
-ExtendsAccess.java:69: p.ExtendsAccess.privateClass has private access in p.ExtendsAccess
-    class N extends privateClass { }                                    // ERROR - cannot access 'privateClass'
-                    ^
-ExtendsAccess.java:85: ExtendsAccess.privateClass has private access in ExtendsAccess
-    class N extends ExtendsAccess.privateClass { }                      // ERROR - cannot access 'privateClass'
-                                 ^
-ExtendsAccess.java:92: p.ExtendsAccess.defaultClass is not public in p.ExtendsAccess; cannot be accessed from outside package
-    class N extends p.ExtendsAccess.defaultClass { }                    // ERROR - cannot access 'defaultClass'
-                                   ^
-ExtendsAccess.java:101: p.ExtendsAccess.privateClass has private access in p.ExtendsAccess
-    class N extends p.ExtendsAccess.privateClass { }                    // ERROR - cannot access 'privateClass'
-                                   ^
-ExtendsAccess.java:104: cannot find symbol
-symbol: class publicStaticClass
-class ExtendsAccess211 extends publicStaticClass { }                    // ERROR - 'publicStaticClass' not in scope
-                               ^
-ExtendsAccess.java:105: cannot find symbol
-symbol: class defaultStaticClass
-class ExtendsAccess212 extends defaultStaticClass { }                   // ERROR - 'defaultStaticClass' not in scope
-                               ^
-ExtendsAccess.java:106: cannot find symbol
-symbol: class protectedStaticClass
-class ExtendsAccess213 extends protectedStaticClass { }                 // ERROR - 'protectedStaticClass' not in scope
-                               ^
-ExtendsAccess.java:107: cannot find symbol
-symbol: class privateStaticClass
-class ExtendsAccess214 extends privateStaticClass { }                   // ERROR - 'privateStaticClass' not in scope
-                               ^
-ExtendsAccess.java:112: ExtendsAccess.privateStaticClass has private access in ExtendsAccess
-class ExtendsAccess2241 extends ExtendsAccess.privateStaticClass { }    // ERROR - cannot access 'privateStaticClass'
-                                             ^
-ExtendsAccess.java:115: p.ExtendsAccess.defaultStaticClass is not public in p.ExtendsAccess; cannot be accessed from outside package
-class ExtendsAccess2222 extends p.ExtendsAccess.defaultStaticClass { }  // ERROR - cannot access 'defaultStaticClass'
-                                               ^
-ExtendsAccess.java:116: p.ExtendsAccess.protectedStaticClass has protected access in p.ExtendsAccess
-class ExtendsAccess2232 extends p.ExtendsAccess.protectedStaticClass { }// ERROR - cannot access 'protectedStaticClass'
-                                               ^
-ExtendsAccess.java:117: p.ExtendsAccess.privateStaticClass has private access in p.ExtendsAccess
-class ExtendsAccess2242 extends p.ExtendsAccess.privateStaticClass { }  // ERROR - cannot access 'privateStaticClass'
-                                               ^
-ExtendsAccess.java:129: ExtendsAccess.privateStaticClass has private access in ExtendsAccess
-    class N extends privateStaticClass { }                      // ERROR - cannot access 'privateStaticClass'
-                    ^
-ExtendsAccess.java:136: p.ExtendsAccess.defaultStaticClass is not public in p.ExtendsAccess; cannot be accessed from outside package
-    class N extends defaultStaticClass { }                      // ERROR - cannot access 'defaultStaticClass'
-                    ^
-ExtendsAccess.java:142: p.ExtendsAccess.privateStaticClass has private access in p.ExtendsAccess
-    class N extends privateStaticClass { }                      // ERROR - cannot access 'privateStaticClass'
-                    ^
-ExtendsAccess.java:158: ExtendsAccess.privateStaticClass has private access in ExtendsAccess
-    class N extends ExtendsAccess.privateStaticClass { }        // ERROR - cannot access 'privateStaticClass'
-                                 ^
-ExtendsAccess.java:165: p.ExtendsAccess.defaultStaticClass is not public in p.ExtendsAccess; cannot be accessed from outside package
-    class N extends p.ExtendsAccess.defaultStaticClass { }      // ERROR - cannot access 'defaultStaticClass'
-                                   ^
-ExtendsAccess.java:174: p.ExtendsAccess.privateStaticClass has private access in p.ExtendsAccess
-    class N extends p.ExtendsAccess.privateStaticClass { }      // ERROR - cannot access 'privateStaticClass'
-                                   ^
-ExtendsAccess.java:177: cannot find symbol
-symbol: class publicInterface
-class ExtendsAccess311 extends ExtendsAccess implements publicInterface { }     // ERROR - 'publicInterface' not in scope
-                                                        ^
-ExtendsAccess.java:178: cannot find symbol
-symbol: class defaultInterface
-class ExtendsAccess312 extends ExtendsAccess implements defaultInterface { }    // ERROR - 'defaultInterface' not in scope
-                                                        ^
-ExtendsAccess.java:179: cannot find symbol
-symbol: class protectedInterface
-class ExtendsAccess313 extends ExtendsAccess implements protectedInterface { }  // ERROR - 'protectedInterface' not in scope
-                                                        ^
-ExtendsAccess.java:180: cannot find symbol
-symbol: class privateInterface
-class ExtendsAccess314 extends ExtendsAccess implements privateInterface { }    // ERROR - 'privateInterface' not in scope
-                                                        ^
-ExtendsAccess.java:186: ExtendsAccess.privateInterface has private access in ExtendsAccess
-        implements ExtendsAccess.privateInterface { }                           // ERROR - cannot access 'privateInterface'
-                                ^
-ExtendsAccess.java:191: p.ExtendsAccess.defaultInterface is not public in p.ExtendsAccess; cannot be accessed from outside package
-        implements p.ExtendsAccess.defaultInterface { }                         // ERROR - cannot access 'defaultStaticClass'
-                                  ^
-ExtendsAccess.java:193: p.ExtendsAccess.protectedInterface has protected access in p.ExtendsAccess
-        implements p.ExtendsAccess.protectedInterface { }                       // ERROR - cannot access 'protectedStaticClass'
-                                  ^
-ExtendsAccess.java:195: p.ExtendsAccess.privateInterface has private access in p.ExtendsAccess
-        implements p.ExtendsAccess.privateInterface { }                         // ERROR - cannot access 'privateInterface'
-                                  ^
-ExtendsAccess.java:207: ExtendsAccess.privateInterface has private access in ExtendsAccess
-    class N implements privateInterface { }                     // ERROR - cannot access 'privateInterface'
-                       ^
-ExtendsAccess.java:214: p.ExtendsAccess.defaultInterface is not public in p.ExtendsAccess; cannot be accessed from outside package
-    class N implements defaultInterface { }                     // ERROR - cannot access 'defaultStaticClass'
-                       ^
-ExtendsAccess.java:220: p.ExtendsAccess.privateInterface has private access in p.ExtendsAccess
-    class N implements privateInterface { }                     // ERROR - cannot access 'privateInterface'
-                       ^
-ExtendsAccess.java:236: ExtendsAccess.privateInterface has private access in ExtendsAccess
-    class N implements ExtendsAccess.privateInterface { }       // ERROR - cannot access 'privateInterface'
-                                    ^
-ExtendsAccess.java:243: p.ExtendsAccess.defaultInterface is not public in p.ExtendsAccess; cannot be accessed from outside package
-    class N implements p.ExtendsAccess.defaultInterface { }     // ERROR - cannot access 'defaultClass'
-                                      ^
-ExtendsAccess.java:252: p.ExtendsAccess.privateInterface has private access in p.ExtendsAccess
-    class N implements p.ExtendsAccess.privateInterface { }     // ERROR - cannot access 'privateInterface'
-                                      ^
-ExtendsAccess.java:36: an enclosing instance that contains ExtendsAccess.publicClass is required
-class ExtendsAccess1211 extends ExtendsAccess.publicClass { }           // OK - can extend inner classes (was ERROR - no enclosing instance)
-^
-ExtendsAccess.java:37: an enclosing instance that contains ExtendsAccess.defaultClass is required
-class ExtendsAccess1221 extends ExtendsAccess.defaultClass { }          // OK - can extend inner classes (was ERROR - no enclosing instance)
-^
-ExtendsAccess.java:38: an enclosing instance that contains ExtendsAccess.protectedClass is required
-class ExtendsAccess1231 extends ExtendsAccess.protectedClass { }        // OK - can extend inner classes (was ERROR - no enclosing instance)
-^
-ExtendsAccess.java:41: an enclosing instance that contains p.ExtendsAccess.publicClass is required
-class ExtendsAccess1212 extends p.ExtendsAccess.publicClass { }         // OK - can extend inner classes (was ERROR - no enclosing instance)
-^
+ExtendsAccess.java:31:32: compiler.err.cant.resolve: (- compiler.misc.kindname.class), publicClass, , 
+ExtendsAccess.java:32:32: compiler.err.cant.resolve: (- compiler.misc.kindname.class), defaultClass, , 
+ExtendsAccess.java:33:32: compiler.err.cant.resolve: (- compiler.misc.kindname.class), protectedClass, , 
+ExtendsAccess.java:34:32: compiler.err.cant.resolve: (- compiler.misc.kindname.class), privateClass, , 
+ExtendsAccess.java:39:46: compiler.err.report.access: ExtendsAccess.privateClass, private, ExtendsAccess
+ExtendsAccess.java:42:48: compiler.err.not.def.public.cant.access: p.ExtendsAccess.defaultClass, p.ExtendsAccess
+ExtendsAccess.java:43:48: compiler.err.report.access: p.ExtendsAccess.protectedClass, protected, p.ExtendsAccess
+ExtendsAccess.java:44:48: compiler.err.report.access: p.ExtendsAccess.privateClass, private, p.ExtendsAccess
+ExtendsAccess.java:56:21: compiler.err.report.access: ExtendsAccess.privateClass, private, ExtendsAccess
+ExtendsAccess.java:63:21: compiler.err.not.def.public.cant.access: p.ExtendsAccess.defaultClass, p.ExtendsAccess
+ExtendsAccess.java:69:21: compiler.err.report.access: p.ExtendsAccess.privateClass, private, p.ExtendsAccess
+ExtendsAccess.java:85:34: compiler.err.report.access: ExtendsAccess.privateClass, private, ExtendsAccess
+ExtendsAccess.java:92:36: compiler.err.not.def.public.cant.access: p.ExtendsAccess.defaultClass, p.ExtendsAccess
+ExtendsAccess.java:101:36: compiler.err.report.access: p.ExtendsAccess.privateClass, private, p.ExtendsAccess
+ExtendsAccess.java:104:32: compiler.err.cant.resolve: (- compiler.misc.kindname.class), publicStaticClass, , 
+ExtendsAccess.java:105:32: compiler.err.cant.resolve: (- compiler.misc.kindname.class), defaultStaticClass, , 
+ExtendsAccess.java:106:32: compiler.err.cant.resolve: (- compiler.misc.kindname.class), protectedStaticClass, , 
+ExtendsAccess.java:107:32: compiler.err.cant.resolve: (- compiler.misc.kindname.class), privateStaticClass, , 
+ExtendsAccess.java:112:46: compiler.err.report.access: ExtendsAccess.privateStaticClass, private, ExtendsAccess
+ExtendsAccess.java:115:48: compiler.err.not.def.public.cant.access: p.ExtendsAccess.defaultStaticClass, p.ExtendsAccess
+ExtendsAccess.java:116:48: compiler.err.report.access: p.ExtendsAccess.protectedStaticClass, protected, p.ExtendsAccess
+ExtendsAccess.java:117:48: compiler.err.report.access: p.ExtendsAccess.privateStaticClass, private, p.ExtendsAccess
+ExtendsAccess.java:129:21: compiler.err.report.access: ExtendsAccess.privateStaticClass, private, ExtendsAccess
+ExtendsAccess.java:136:21: compiler.err.not.def.public.cant.access: p.ExtendsAccess.defaultStaticClass, p.ExtendsAccess
+ExtendsAccess.java:142:21: compiler.err.report.access: p.ExtendsAccess.privateStaticClass, private, p.ExtendsAccess
+ExtendsAccess.java:158:34: compiler.err.report.access: ExtendsAccess.privateStaticClass, private, ExtendsAccess
+ExtendsAccess.java:165:36: compiler.err.not.def.public.cant.access: p.ExtendsAccess.defaultStaticClass, p.ExtendsAccess
+ExtendsAccess.java:174:36: compiler.err.report.access: p.ExtendsAccess.privateStaticClass, private, p.ExtendsAccess
+ExtendsAccess.java:177:57: compiler.err.cant.resolve: (- compiler.misc.kindname.class), publicInterface, , 
+ExtendsAccess.java:178:57: compiler.err.cant.resolve: (- compiler.misc.kindname.class), defaultInterface, , 
+ExtendsAccess.java:179:57: compiler.err.cant.resolve: (- compiler.misc.kindname.class), protectedInterface, , 
+ExtendsAccess.java:180:57: compiler.err.cant.resolve: (- compiler.misc.kindname.class), privateInterface, , 
+ExtendsAccess.java:186:33: compiler.err.report.access: ExtendsAccess.privateInterface, private, ExtendsAccess
+ExtendsAccess.java:191:35: compiler.err.not.def.public.cant.access: p.ExtendsAccess.defaultInterface, p.ExtendsAccess
+ExtendsAccess.java:193:35: compiler.err.report.access: p.ExtendsAccess.protectedInterface, protected, p.ExtendsAccess
+ExtendsAccess.java:195:35: compiler.err.report.access: p.ExtendsAccess.privateInterface, private, p.ExtendsAccess
+ExtendsAccess.java:207:24: compiler.err.report.access: ExtendsAccess.privateInterface, private, ExtendsAccess
+ExtendsAccess.java:214:24: compiler.err.not.def.public.cant.access: p.ExtendsAccess.defaultInterface, p.ExtendsAccess
+ExtendsAccess.java:220:24: compiler.err.report.access: p.ExtendsAccess.privateInterface, private, p.ExtendsAccess
+ExtendsAccess.java:236:37: compiler.err.report.access: ExtendsAccess.privateInterface, private, ExtendsAccess
+ExtendsAccess.java:243:39: compiler.err.not.def.public.cant.access: p.ExtendsAccess.defaultInterface, p.ExtendsAccess
+ExtendsAccess.java:252:39: compiler.err.report.access: p.ExtendsAccess.privateInterface, private, p.ExtendsAccess
+ExtendsAccess.java:36:1: compiler.err.encl.class.required: ExtendsAccess.publicClass
+ExtendsAccess.java:37:1: compiler.err.encl.class.required: ExtendsAccess.defaultClass
+ExtendsAccess.java:38:1: compiler.err.encl.class.required: ExtendsAccess.protectedClass
+ExtendsAccess.java:41:1: compiler.err.encl.class.required: p.ExtendsAccess.publicClass
 46 errors
--- a/langtools/test/tools/javac/ExtendsAccess/ExtendsAccess.sh	Thu Jul 24 21:12:50 2008 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,83 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright 1999-2002 Sun Microsystems, Inc.  All Rights Reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
-# CA 95054 USA or visit www.sun.com if you need additional information or
-# have any questions.
-#
-
-
-if [ "${TESTSRC}" = "" ]
-then
-  echo "TESTSRC not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-echo "TESTSRC=${TESTSRC}"
-if [ "${TESTJAVA}" = "" ]
-then
-  echo "TESTJAVA not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-echo "TESTJAVA=${TESTJAVA}"
-if [ "${TESTCLASSES}" = "" ]
-then
-  echo "TESTCLASSES not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-echo "TESTCLASSES=${TESTCLASSES}"
-echo "CLASSPATH=${CLASSPATH}"
-
-# set platform-dependent variables
-OS=`uname -s`
-case "$OS" in
-  SunOS | Linux )
-    NULL=/dev/null
-    PS=":"
-    FS="/"
-    ;;
-  Windows* )
-    NULL=NUL
-    PS=";"
-    FS="\\"
-    ;;
-  * )
-    echo "Unrecognized system!"
-    exit 1;
-    ;;
-esac
-
-TMP1=OUTPUT.txt
-
-cp "${TESTSRC}${FS}ExtendsAccess.java" .
-cp -r "${TESTSRC}${FS}p" .
-"${TESTJAVA}${FS}bin${FS}javac" ${TESTTOOLVMOPTS} ExtendsAccess.java 2> ${TMP1}
-cat ${TMP1}
-
-diff -c "${TESTSRC}${FS}ExtendsAccess.out" ${TMP1}
-result=$?
-rm ${TMP1}
-
-if [ $result -eq 0 ]
-then
-  echo "Passed"
-else
-  echo "Failed"
-fi
-exit $result
--- a/langtools/test/tools/javac/FloatingPointChanges/BadConstructorModifiers.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/test/tools/javac/FloatingPointChanges/BadConstructorModifiers.java	Tue Aug 05 17:44:17 2008 -0700
@@ -4,7 +4,7 @@
  * @summary strictfp may not be used with constructors
  * @author David Stoutamire (dps)
  *
- * @run shell BadConstructorModifiers.sh
+ * @compile/fail/ref=BadConstructorModifiers.out -XDrawDiagnostics -XDstdout BadConstructorModifiers.java
  */
 
 public class BadConstructorModifiers {
--- a/langtools/test/tools/javac/FloatingPointChanges/BadConstructorModifiers.out	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/test/tools/javac/FloatingPointChanges/BadConstructorModifiers.out	Tue Aug 05 17:44:17 2008 -0700
@@ -1,4 +1,2 @@
-BadConstructorModifiers.java:12: modifier strictfp not allowed here
-    strictfp BadConstructorModifiers (double abra) { }
-             ^
+BadConstructorModifiers.java:12:14: compiler.err.mod.not.allowed.here: strictfp
 1 error
--- a/langtools/test/tools/javac/FloatingPointChanges/BadConstructorModifiers.sh	Thu Jul 24 21:12:50 2008 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,82 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright 1999-2002 Sun Microsystems, Inc.  All Rights Reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
-# CA 95054 USA or visit www.sun.com if you need additional information or
-# have any questions.
-#
-
-
-if [ "${TESTSRC}" = "" ]
-then
-  echo "TESTSRC not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-echo "TESTSRC=${TESTSRC}"
-if [ "${TESTJAVA}" = "" ]
-then
-  echo "TESTJAVA not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-echo "TESTJAVA=${TESTJAVA}"
-if [ "${TESTCLASSES}" = "" ]
-then
-  echo "TESTCLASSES not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-echo "TESTCLASSES=${TESTCLASSES}"
-echo "CLASSPATH=${CLASSPATH}"
-
-# set platform-dependent variables
-OS=`uname -s`
-case "$OS" in
-  SunOS | Linux )
-    NULL=/dev/null
-    PS=":"
-    FS="/"
-    ;;
-  Windows* )
-    NULL=NUL
-    PS=";"
-    FS="\\"
-    ;;
-  * )
-    echo "Unrecognized system!"
-    exit 1;
-    ;;
-esac
-
-TMP1=OUTPUT.txt
-
-cp "${TESTSRC}${FS}BadConstructorModifiers.java" .
-"${TESTJAVA}${FS}bin${FS}javac" ${TESTTOOLVMOPTS} BadConstructorModifiers.java 2> ${TMP1}
-cat ${TMP1}
-
-diff -c "${TESTSRC}${FS}BadConstructorModifiers.out" ${TMP1}
-result=$?
-rm ${TMP1}
-
-if [ $result -eq 0 ]
-then
-  echo "Passed"
-else
-  echo "Failed"
-fi
-exit $result
--- a/langtools/test/tools/javac/InnerNamedConstant_2.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/test/tools/javac/InnerNamedConstant_2.java	Tue Aug 05 17:44:17 2008 -0700
@@ -4,7 +4,7 @@
  * @summary Verify rejection of illegal static variables in inner classes.
  * @author William Maddox (maddox)
  *
- * @run shell InnerNamedConstant_2.sh
+ * @compile/fail/ref=InnerNamedConstant_2.out -XDrawDiagnostics -XDstdout InnerNamedConstant_2.java
  */
 
 public class InnerNamedConstant_2 {
--- a/langtools/test/tools/javac/InnerNamedConstant_2.out	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/test/tools/javac/InnerNamedConstant_2.out	Tue Aug 05 17:44:17 2008 -0700
@@ -1,13 +1,5 @@
-InnerNamedConstant_2.java:22: inner classes cannot have static declarations
-        static int x = 1;                  // ERROR - static not final
-                   ^
-InnerNamedConstant_2.java:23: inner classes cannot have static declarations
-        static final String z;             // ERROR - static blank final
-                            ^
-InnerNamedConstant_2.java:25: cannot assign a value to final variable z
-            z = "foobar";                  // Error may be reported here. See 4278961.
-            ^
-InnerNamedConstant_2.java:34: inner classes cannot have static declarations
-        static final int y = Inner1.x * 5; // ERROR - initializer not constant
-                         ^
+InnerNamedConstant_2.java:22:20: compiler.err.icls.cant.have.static.decl
+InnerNamedConstant_2.java:23:29: compiler.err.icls.cant.have.static.decl
+InnerNamedConstant_2.java:25:13: compiler.err.cant.assign.val.to.final.var: z
+InnerNamedConstant_2.java:34:26: compiler.err.icls.cant.have.static.decl
 4 errors
--- a/langtools/test/tools/javac/InnerNamedConstant_2.sh	Thu Jul 24 21:12:50 2008 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,82 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright 1999-2002 Sun Microsystems, Inc.  All Rights Reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
-# CA 95054 USA or visit www.sun.com if you need additional information or
-# have any questions.
-#
-
-
-if [ "${TESTSRC}" = "" ]
-then
-  echo "TESTSRC not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-echo "TESTSRC=${TESTSRC}"
-if [ "${TESTJAVA}" = "" ]
-then
-  echo "TESTJAVA not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-echo "TESTJAVA=${TESTJAVA}"
-if [ "${TESTCLASSES}" = "" ]
-then
-  echo "TESTCLASSES not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-echo "TESTCLASSES=${TESTCLASSES}"
-echo "CLASSPATH=${CLASSPATH}"
-
-# set platform-dependent variables
-OS=`uname -s`
-case "$OS" in
-  SunOS | Linux )
-    NULL=/dev/null
-    PS=":"
-    FS="/"
-    ;;
-  Windows* )
-    NULL=NUL
-    PS=";"
-    FS="\\"
-    ;;
-  * )
-    echo "Unrecognized system!"
-    exit 1;
-    ;;
-esac
-
-TMP1=OUTPUT.txt
-
-cp "${TESTSRC}${FS}InnerNamedConstant_2.java" .
-"${TESTJAVA}${FS}bin${FS}javac" ${TESTTOOLVMOPTS} InnerNamedConstant_2.java 2> ${TMP1}
-cat ${TMP1}
-
-diff -c "${TESTSRC}${FS}InnerNamedConstant_2.out" ${TMP1}
-result=$?
-rm ${TMP1}
-
-if [ $result -eq 0 ]
-then
-  echo "Passed"
-else
-  echo "Failed"
-fi
-exit $result
--- a/langtools/test/tools/javac/LocalClasses_2.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/test/tools/javac/LocalClasses_2.java	Tue Aug 05 17:44:17 2008 -0700
@@ -4,7 +4,7 @@
  * @summary Verify that a local class cannot be redefined within its scope.
  * @author William Maddox (maddox)
  *
- * @run shell LocalClasses_2.sh
+ * @compile/fail/ref=LocalClasses_2.out -XDrawDiagnostics -XDstdout LocalClasses_2.java
  */
 
 class LocalClasses_2 {
--- a/langtools/test/tools/javac/LocalClasses_2.out	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/test/tools/javac/LocalClasses_2.out	Tue Aug 05 17:44:17 2008 -0700
@@ -1,4 +1,2 @@
-LocalClasses_2.java:15: Local is already defined in foo()
-            class Local { }                     // ERROR
-            ^
+LocalClasses_2.java:15:13: compiler.err.already.defined: Local, foo()
 1 error
--- a/langtools/test/tools/javac/LocalClasses_2.sh	Thu Jul 24 21:12:50 2008 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,82 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright 1999-2002 Sun Microsystems, Inc.  All Rights Reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
-# CA 95054 USA or visit www.sun.com if you need additional information or
-# have any questions.
-#
-
-
-if [ "${TESTSRC}" = "" ]
-then
-  echo "TESTSRC not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-echo "TESTSRC=${TESTSRC}"
-if [ "${TESTJAVA}" = "" ]
-then
-  echo "TESTJAVA not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-echo "TESTJAVA=${TESTJAVA}"
-if [ "${TESTCLASSES}" = "" ]
-then
-  echo "TESTCLASSES not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-echo "TESTCLASSES=${TESTCLASSES}"
-echo "CLASSPATH=${CLASSPATH}"
-
-# set platform-dependent variables
-OS=`uname -s`
-case "$OS" in
-  SunOS | Linux )
-    NULL=/dev/null
-    PS=":"
-    FS="/"
-    ;;
-  Windows* )
-    NULL=NUL
-    PS=";"
-    FS="\\"
-    ;;
-  * )
-    echo "Unrecognized system!"
-    exit 1;
-    ;;
-esac
-
-TMP1=OUTPUT.txt
-
-cp "${TESTSRC}${FS}LocalClasses_2.java" .
-"${TESTJAVA}${FS}bin${FS}javac" ${TESTTOOLVMOPTS} LocalClasses_2.java 2> ${TMP1}
-cat ${TMP1}
-
-diff -c "${TESTSRC}${FS}LocalClasses_2.out" ${TMP1}
-result=$?
-rm ${TMP1}
-
-if [ $result -eq 0 ]
-then
-  echo "Passed"
-else
-  echo "Failed"
-fi
-exit $result
--- a/langtools/test/tools/javac/NameCollision.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/test/tools/javac/NameCollision.java	Tue Aug 05 17:44:17 2008 -0700
@@ -4,7 +4,7 @@
  * @summary Interface names for classes in the same scope should not
  * cause the compiler to crash.
  *
- * @run shell NameCollision.sh
+ * @compile/fail/ref=NameCollision.out -XDrawDiagnostics -XDstdout NameCollision.java
  */
 
 // The test fails if the compiler crashes.
--- a/langtools/test/tools/javac/NameCollision.out	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/test/tools/javac/NameCollision.out	Tue Aug 05 17:44:17 2008 -0700
@@ -1,4 +1,2 @@
-NameCollision.java:13: interface expected here
-    class Runnable implements Runnable { } // ERROR
-                              ^
+NameCollision.java:13:31: compiler.err.intf.expected.here
 1 error
--- a/langtools/test/tools/javac/NameCollision.sh	Thu Jul 24 21:12:50 2008 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,83 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright 1999-2002 Sun Microsystems, Inc.  All Rights Reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
-# CA 95054 USA or visit www.sun.com if you need additional information or
-# have any questions.
-#
-
-
-if [ "${TESTSRC}" = "" ]
-then
-  echo "TESTSRC not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-echo "TESTSRC=${TESTSRC}"
-if [ "${TESTJAVA}" = "" ]
-then
-  echo "TESTJAVA not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-echo "TESTJAVA=${TESTJAVA}"
-if [ "${TESTCLASSES}" = "" ]
-then
-  echo "TESTCLASSES not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-echo "TESTCLASSES=${TESTCLASSES}"
-echo "CLASSPATH=${CLASSPATH}"
-
-# set platform-dependent variables
-OS=`uname -s`
-case "$OS" in
-  SunOS | Linux )
-    NULL=/dev/null
-    PS=":"
-    FS="/"
-    ;;
-  Windows* )
-    NULL=NUL
-    PS=";"
-    FS="\\"
-    ;;
-  * )
-    echo "Unrecognized system!"
-    exit 1;
-    ;;
-esac
-
-TMP1=OUTPUT.txt
-
-
-cp "${TESTSRC}${FS}NameCollision.java" .
-"${TESTJAVA}${FS}bin${FS}javac" ${TESTTOOLVMOPTS} NameCollision.java 2> ${TMP1}
-cat ${TMP1}
-
-diff -c "${TESTSRC}${FS}NameCollision.out" ${TMP1}
-result=$?
-rm ${TMP1}
-
-if [ $result -eq 0 ]
-then
-  echo "Passed"
-else
-  echo "Failed"
-fi
-exit $result
--- a/langtools/test/tools/javac/NestedInnerClassNames.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/test/tools/javac/NestedInnerClassNames.java	Tue Aug 05 17:44:17 2008 -0700
@@ -4,7 +4,7 @@
  * @summary Verify that an inner class cannot have the same simple name as an enclosing one.
  * @author William Maddox (maddox)
  *
- * @run shell NestedInnerClassNames.sh
+ * @compile/fail/ref=NestedInnerClassNames.out -XDrawDiagnostics -XDstdout NestedInnerClassNames.java
  */
 
 /*
--- a/langtools/test/tools/javac/NestedInnerClassNames.out	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/test/tools/javac/NestedInnerClassNames.out	Tue Aug 05 17:44:17 2008 -0700
@@ -1,52 +1,18 @@
-NestedInnerClassNames.java:16: NestedInnerClassNames is already defined in unnamed package
-    class NestedInnerClassNames {}              // ERROR
-    ^
-NestedInnerClassNames.java:23: NestedInnerClassNames.foo is already defined in NestedInnerClassNames
-        class foo { }                           // ERROR
-        ^
-NestedInnerClassNames.java:34: NestedInnerClassNames is already defined in unnamed package
-        class NestedInnerClassNames {}          // ERROR
-        ^
-NestedInnerClassNames.java:45: NestedInnerClassNames.baz is already defined in NestedInnerClassNames
-        class baz {                             // ERROR
-        ^
-NestedInnerClassNames.java:46: NestedInnerClassNames.baz.baz is already defined in NestedInnerClassNames.baz
-            class baz { }                       // ERROR
-            ^
-NestedInnerClassNames.java:59: NestedInnerClassNames.foo$bar is already defined in NestedInnerClassNames
-        class foo$bar {                         // ERROR
-        ^
-NestedInnerClassNames.java:76: NestedInnerClassNames.$bar is already defined in NestedInnerClassNames
-            class $bar { }                      // ERROR
-            ^
-NestedInnerClassNames.java:90: NestedInnerClassNames.bar$bar.bar is already defined in NestedInnerClassNames.bar$bar
-            class bar{ }                       // ERROR
-            ^
-NestedInnerClassNames.java:109: duplicate class: NestedInnerClassNames.foo.foo
-    class foo$foo { }                           // ERROR
-    ^
-NestedInnerClassNames.java:19: NestedInnerClassNames is already defined in unnamed package
-        class NestedInnerClassNames {}          // ERROR
-        ^
-NestedInnerClassNames.java:28: foo is already defined in m2()
-            class foo { }                       // ERROR
-            ^
-NestedInnerClassNames.java:40: NestedInnerClassNames is already defined in unnamed package
-            class NestedInnerClassNames {}      // ERROR
-            ^
-NestedInnerClassNames.java:52: baz is already defined in m4()
-            class baz {                         // ERROR
-            ^
-NestedInnerClassNames.java:53: baz.baz is already defined in baz
-                class baz { }                   // ERROR
-                ^
-NestedInnerClassNames.java:67: foo$bar is already defined in m5()
-            class foo$bar {                     // ERROR
-            ^
-NestedInnerClassNames.java:83: $bar is already defined in m6()
-                class $bar { }                  // ERROR
-                ^
-NestedInnerClassNames.java:97: bar$bar.bar is already defined in bar$bar
-                class bar{ }                   // ERROR
-                ^
+NestedInnerClassNames.java:16:5: compiler.err.already.defined: NestedInnerClassNames, unnamed package
+NestedInnerClassNames.java:23:9: compiler.err.already.defined: NestedInnerClassNames.foo, NestedInnerClassNames
+NestedInnerClassNames.java:34:9: compiler.err.already.defined: NestedInnerClassNames, unnamed package
+NestedInnerClassNames.java:45:9: compiler.err.already.defined: NestedInnerClassNames.baz, NestedInnerClassNames
+NestedInnerClassNames.java:46:13: compiler.err.already.defined: NestedInnerClassNames.baz.baz, NestedInnerClassNames.baz
+NestedInnerClassNames.java:59:9: compiler.err.already.defined: NestedInnerClassNames.foo$bar, NestedInnerClassNames
+NestedInnerClassNames.java:76:13: compiler.err.already.defined: NestedInnerClassNames.$bar, NestedInnerClassNames
+NestedInnerClassNames.java:90:13: compiler.err.already.defined: NestedInnerClassNames.bar$bar.bar, NestedInnerClassNames.bar$bar
+NestedInnerClassNames.java:109:5: compiler.err.duplicate.class: NestedInnerClassNames.foo.foo
+NestedInnerClassNames.java:19:9: compiler.err.already.defined: NestedInnerClassNames, unnamed package
+NestedInnerClassNames.java:28:13: compiler.err.already.defined: foo, m2()
+NestedInnerClassNames.java:40:13: compiler.err.already.defined: NestedInnerClassNames, unnamed package
+NestedInnerClassNames.java:52:13: compiler.err.already.defined: baz, m4()
+NestedInnerClassNames.java:53:17: compiler.err.already.defined: baz.baz, baz
+NestedInnerClassNames.java:67:13: compiler.err.already.defined: foo$bar, m5()
+NestedInnerClassNames.java:83:17: compiler.err.already.defined: $bar, m6()
+NestedInnerClassNames.java:97:17: compiler.err.already.defined: bar$bar.bar, bar$bar
 17 errors
--- a/langtools/test/tools/javac/NestedInnerClassNames.sh	Thu Jul 24 21:12:50 2008 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,82 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright 1999-2002 Sun Microsystems, Inc.  All Rights Reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
-# CA 95054 USA or visit www.sun.com if you need additional information or
-# have any questions.
-#
-
-
-if [ "${TESTSRC}" = "" ]
-then
-  echo "TESTSRC not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-echo "TESTSRC=${TESTSRC}"
-if [ "${TESTJAVA}" = "" ]
-then
-  echo "TESTJAVA not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-echo "TESTJAVA=${TESTJAVA}"
-if [ "${TESTCLASSES}" = "" ]
-then
-  echo "TESTCLASSES not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-echo "TESTCLASSES=${TESTCLASSES}"
-echo "CLASSPATH=${CLASSPATH}"
-
-# set platform-dependent variables
-OS=`uname -s`
-case "$OS" in
-  SunOS | Linux )
-    NULL=/dev/null
-    PS=":"
-    FS="/"
-    ;;
-  Windows* )
-    NULL=NUL
-    PS=";"
-    FS="\\"
-    ;;
-  * )
-    echo "Unrecognized system!"
-    exit 1;
-    ;;
-esac
-
-TMP1=OUTPUT.txt
-
-cp "${TESTSRC}${FS}NestedInnerClassNames.java" .
-"${TESTJAVA}${FS}bin${FS}javac" ${TESTTOOLVMOPTS} NestedInnerClassNames.java 2> ${TMP1}
-cat ${TMP1}
-
-diff -c "${TESTSRC}${FS}NestedInnerClassNames.out" ${TMP1}
-result=$?
-rm ${TMP1}
-
-if [ $result -eq 0 ]
-then
-  echo "Passed"
-else
-  echo "Failed"
-fi
-exit $result
--- a/langtools/test/tools/javac/NonStaticFieldExpr1.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/test/tools/javac/NonStaticFieldExpr1.java	Tue Aug 05 17:44:17 2008 -0700
@@ -3,7 +3,7 @@
    @author dps
    @summary field: instance access through types is not allowed
 
-   @run shell NonStaticFieldExpr1.sh
+   @compile/fail/ref=NonStaticFieldExpr1.out -XDrawDiagnostics -XDstdout NonStaticFieldExpr1.java
 */
 class NonStaticFieldExpr1 {
   public int x;
--- a/langtools/test/tools/javac/NonStaticFieldExpr1.out	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/test/tools/javac/NonStaticFieldExpr1.out	Tue Aug 05 17:44:17 2008 -0700
@@ -1,4 +1,2 @@
-NonStaticFieldExpr1.java:10: non-static variable x cannot be referenced from a static context
-  int y = NonStaticFieldExpr1.x;                // SHOULD BE ERROR
-                             ^
+NonStaticFieldExpr1.java:10:30: compiler.err.non-static.cant.be.ref: (- compiler.misc.kindname.variable), x
 1 error
--- a/langtools/test/tools/javac/NonStaticFieldExpr1.sh	Thu Jul 24 21:12:50 2008 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,85 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright 1999-2002 Sun Microsystems, Inc.  All Rights Reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
-# CA 95054 USA or visit www.sun.com if you need additional information or
-# have any questions.
-#
-
-
-if [ "${TESTSRC}" = "" ]
-then
-  echo "TESTSRC not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-echo "TESTSRC=${TESTSRC}"
-if [ "${TESTJAVA}" = "" ]
-then
-  echo "TESTJAVA not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-echo "TESTJAVA=${TESTJAVA}"
-if [ "${TESTCLASSES}" = "" ]
-then
-  echo "TESTCLASSES not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-echo "TESTCLASSES=${TESTCLASSES}"
-echo "CLASSPATH=${CLASSPATH}"
-
-# set platform-dependent variables
-OS=`uname -s`
-case "$OS" in
-  SunOS | Linux )
-    NULL=/dev/null
-    PS=":"
-    FS="/"
-    ;;
-  Windows* )
-    NULL=NUL
-    PS=";"
-    FS="\\"
-    ;;
-  * )
-    echo "Unrecognized system!"
-    exit 1;
-    ;;
-esac
-
-TMP1=OUTPUT.txt
-
-cp "${TESTSRC}${FS}NonStaticFieldExpr1.java" .
-"${TESTJAVA}${FS}bin${FS}javac" ${TESTTOOLVMOPTS} NonStaticFieldExpr1.java 2> ${TMP1}
-cat ${TMP1}
-
-diff -c "${TESTSRC}${FS}NonStaticFieldExpr1.out" ${TMP1}
-result=$?
-rm ${TMP1}
-
-if [ $result -eq 0 ]
-then
-  echo "Passed"
-else
-  echo "Failed"
-fi
-exit $result
-
-
-
--- a/langtools/test/tools/javac/NonStaticFieldExpr2.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/test/tools/javac/NonStaticFieldExpr2.java	Tue Aug 05 17:44:17 2008 -0700
@@ -3,7 +3,7 @@
    @author dps
    @summary method: instance access through types is not allowed
 
-   @run shell NonStaticFieldExpr2.sh
+   @compile/fail/ref=NonStaticFieldExpr2.out -XDrawDiagnostics -XDstdout NonStaticFieldExpr2.java
 */
 
 class NonStaticFieldExpr2 {
--- a/langtools/test/tools/javac/NonStaticFieldExpr2.out	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/test/tools/javac/NonStaticFieldExpr2.out	Tue Aug 05 17:44:17 2008 -0700
@@ -1,4 +1,2 @@
-NonStaticFieldExpr2.java:14: non-static variable x cannot be referenced from a static context
-     int z = NonStaticFieldExpr2.x;     // SHOULD BE ERROR
-                                ^
+NonStaticFieldExpr2.java:14:33: compiler.err.non-static.cant.be.ref: (- compiler.misc.kindname.variable), x
 1 error
--- a/langtools/test/tools/javac/NonStaticFieldExpr2.sh	Thu Jul 24 21:12:50 2008 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,82 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright 1999-2002 Sun Microsystems, Inc.  All Rights Reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
-# CA 95054 USA or visit www.sun.com if you need additional information or
-# have any questions.
-#
-
-
-if [ "${TESTSRC}" = "" ]
-then
-  echo "TESTSRC not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-echo "TESTSRC=${TESTSRC}"
-if [ "${TESTJAVA}" = "" ]
-then
-  echo "TESTJAVA not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-echo "TESTJAVA=${TESTJAVA}"
-if [ "${TESTCLASSES}" = "" ]
-then
-  echo "TESTCLASSES not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-echo "TESTCLASSES=${TESTCLASSES}"
-echo "CLASSPATH=${CLASSPATH}"
-
-# set platform-dependent variables
-OS=`uname -s`
-case "$OS" in
-  SunOS | Linux )
-    NULL=/dev/null
-    PS=":"
-    FS="/"
-    ;;
-  Windows* )
-    NULL=NUL
-    PS=";"
-    FS="\\"
-    ;;
-  * )
-    echo "Unrecognized system!"
-    exit 1;
-    ;;
-esac
-
-TMP1=OUTPUT.txt
-
-cp "${TESTSRC}${FS}NonStaticFieldExpr2.java" .
-"${TESTJAVA}${FS}bin${FS}javac" ${TESTTOOLVMOPTS} NonStaticFieldExpr2.java 2> ${TMP1}
-cat ${TMP1}
-
-diff -c "${TESTSRC}${FS}NonStaticFieldExpr2.out" ${TMP1}
-result=$?
-rm ${TMP1}
-
-if [ $result -eq 0 ]
-then
-  echo "Passed"
-else
-  echo "Failed"
-fi
-exit $result
--- a/langtools/test/tools/javac/NonStaticFieldExpr3.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/test/tools/javac/NonStaticFieldExpr3.java	Tue Aug 05 17:44:17 2008 -0700
@@ -3,7 +3,7 @@
    @author dps
    @summary class: instance access through types is not allowed
 
-   @run shell NonStaticFieldExpr3.sh
+   @compile/fail/ref=NonStaticFieldExpr3.out -XDrawDiagnostics -XDstdout NonStaticFieldExpr3.java
 */
 
 class NonStaticFieldExpr3 {
--- a/langtools/test/tools/javac/NonStaticFieldExpr3.out	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/test/tools/javac/NonStaticFieldExpr3.out	Tue Aug 05 17:44:17 2008 -0700
@@ -1,4 +1,2 @@
-NonStaticFieldExpr3.java:14: non-static variable x cannot be referenced from a static context
-  int a = NonStaticFieldExpr3.x;      // SHOULD BE ERROR
-                             ^
+NonStaticFieldExpr3.java:14:30: compiler.err.non-static.cant.be.ref: (- compiler.misc.kindname.variable), x
 1 error
--- a/langtools/test/tools/javac/NonStaticFieldExpr3.sh	Thu Jul 24 21:12:50 2008 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,82 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright 1999-2002 Sun Microsystems, Inc.  All Rights Reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
-# CA 95054 USA or visit www.sun.com if you need additional information or
-# have any questions.
-#
-
-
-if [ "${TESTSRC}" = "" ]
-then
-  echo "TESTSRC not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-echo "TESTSRC=${TESTSRC}"
-if [ "${TESTJAVA}" = "" ]
-then
-  echo "TESTJAVA not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-echo "TESTJAVA=${TESTJAVA}"
-if [ "${TESTCLASSES}" = "" ]
-then
-  echo "TESTCLASSES not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-echo "TESTCLASSES=${TESTCLASSES}"
-echo "CLASSPATH=${CLASSPATH}"
-
-# set platform-dependent variables
-OS=`uname -s`
-case "$OS" in
-  SunOS | Linux )
-    NULL=/dev/null
-    PS=":"
-    FS="/"
-    ;;
-  Windows* )
-    NULL=NUL
-    PS=";"
-    FS="\\"
-    ;;
-  * )
-    echo "Unrecognized system!"
-    exit 1;
-    ;;
-esac
-
-TMP1=OUTPUT.txt
-
-cp "${TESTSRC}${FS}NonStaticFieldExpr3.java" .
-"${TESTJAVA}${FS}bin${FS}javac" ${TESTTOOLVMOPTS} NonStaticFieldExpr3.java 2> ${TMP1}
-cat ${TMP1}
-
-diff -c "${TESTSRC}${FS}NonStaticFieldExpr3.out" ${TMP1}
-result=$?
-rm ${TMP1}
-
-if [ $result -eq 0 ]
-then
-  echo "Passed"
-else
-  echo "Failed"
-fi
-exit $result
--- a/langtools/test/tools/javac/QualifiedAccess/QualifiedAccess_1.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/test/tools/javac/QualifiedAccess/QualifiedAccess_1.java	Tue Aug 05 17:44:17 2008 -0700
@@ -5,7 +5,9 @@
  * the type to which a component member belongs be accessible in qualified
  * names.
  *
- * @run shell QualifiedAccess_1.sh
+ * @compile pack1/P1.java
+ * @compile pack1/P2.java
+ * @compile/fail/ref=QualifiedAccess_1.out -XDrawDiagnostics -XDstdout QualifiedAccess_1.java
  */
 
 import pack1.P1;
--- a/langtools/test/tools/javac/QualifiedAccess/QualifiedAccess_1.out	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/test/tools/javac/QualifiedAccess/QualifiedAccess_1.out	Tue Aug 05 17:44:17 2008 -0700
@@ -1,55 +1,19 @@
-QualifiedAccess_1.java:22: pack1.P1.P3 is not public in pack1.P1; cannot be accessed from outside package
-    P1.P3 bar;                                  // ERROR
-      ^
-QualifiedAccess_1.java:23: pack1.P1.P3 is not public in pack1.P1; cannot be accessed from outside package
-    P1.P3.P4 baz;                               // ERROR
-      ^
-QualifiedAccess_1.java:24: pack1.P1.P3 is not public in pack1.P1; cannot be accessed from outside package
-    P1.P3.P4.P5 quux;                           // ERROR
-      ^
-QualifiedAccess_1.java:27: pack1.P1.P3 is not public in pack1.P1; cannot be accessed from outside package
-    P1.P3 m12() {return null;}                  // ERROR
-      ^
-QualifiedAccess_1.java:28: pack1.P1.P3 is not public in pack1.P1; cannot be accessed from outside package
-    P1.P3.P4 m13() {return null;}               // ERROR
-      ^
-QualifiedAccess_1.java:29: pack1.P1.P3 is not public in pack1.P1; cannot be accessed from outside package
-    P1.P3.P4.P5 m14() {return null;}            // ERROR
-      ^
-QualifiedAccess_1.java:32: pack1.P1.P3 is not public in pack1.P1; cannot be accessed from outside package
-    void m22(P1.P3 x) {}                        // ERROR
-               ^
-QualifiedAccess_1.java:33: pack1.P1.P3 is not public in pack1.P1; cannot be accessed from outside package
-    void m23(P1.P3.P4 x) {}                     // ERROR
-               ^
-QualifiedAccess_1.java:34: pack1.P1.P3 is not public in pack1.P1; cannot be accessed from outside package
-    void m24(P1.P3.P4.P5 x) {}                  // ERROR
-               ^
-QualifiedAccess_1.java:44: pack1.P1.P3 is not public in pack1.P1; cannot be accessed from outside package
-        P1.P3 bar = null;                       // ERROR
-          ^
-QualifiedAccess_1.java:45: pack1.P1.P3 is not public in pack1.P1; cannot be accessed from outside package
-        P1.P3.P4 baz = null;                    // ERROR
-          ^
-QualifiedAccess_1.java:46: pack1.P1.P3 is not public in pack1.P1; cannot be accessed from outside package
-        P1.P3.P4.P5 quux = null;                // ERROR
-          ^
-QualifiedAccess_1.java:57: pack1.P1.P3 is not public in pack1.P1; cannot be accessed from outside package
-        Object bar = (P1.P3)null;               // ERROR
-                        ^
-QualifiedAccess_1.java:58: pack1.P1.P3 is not public in pack1.P1; cannot be accessed from outside package
-        Object baz = (P1.P3.P4)null;            // ERROR
-                        ^
-QualifiedAccess_1.java:59: pack1.P1.P3 is not public in pack1.P1; cannot be accessed from outside package
-        Object quux = (P1.P3.P4.P5)null;        // ERROR
-                         ^
-QualifiedAccess_1.java:70: pack1.P1.P3 is not public in pack1.P1; cannot be accessed from outside package
-        boolean bar = null instanceof P1.P3;            // ERROR
-                                        ^
-QualifiedAccess_1.java:71: pack1.P1.P3 is not public in pack1.P1; cannot be accessed from outside package
-        boolean baz = null instanceof P1.P3.P4;         // ERROR
-                                        ^
-QualifiedAccess_1.java:72: pack1.P1.P3 is not public in pack1.P1; cannot be accessed from outside package
-        boolean quux = null instanceof P1.P3.P4.P5;     // ERROR
-                                         ^
+QualifiedAccess_1.java:24:7: compiler.err.not.def.public.cant.access: pack1.P1.P3, pack1.P1
+QualifiedAccess_1.java:25:7: compiler.err.not.def.public.cant.access: pack1.P1.P3, pack1.P1
+QualifiedAccess_1.java:26:7: compiler.err.not.def.public.cant.access: pack1.P1.P3, pack1.P1
+QualifiedAccess_1.java:29:7: compiler.err.not.def.public.cant.access: pack1.P1.P3, pack1.P1
+QualifiedAccess_1.java:30:7: compiler.err.not.def.public.cant.access: pack1.P1.P3, pack1.P1
+QualifiedAccess_1.java:31:7: compiler.err.not.def.public.cant.access: pack1.P1.P3, pack1.P1
+QualifiedAccess_1.java:34:16: compiler.err.not.def.public.cant.access: pack1.P1.P3, pack1.P1
+QualifiedAccess_1.java:35:16: compiler.err.not.def.public.cant.access: pack1.P1.P3, pack1.P1
+QualifiedAccess_1.java:36:16: compiler.err.not.def.public.cant.access: pack1.P1.P3, pack1.P1
+QualifiedAccess_1.java:46:11: compiler.err.not.def.public.cant.access: pack1.P1.P3, pack1.P1
+QualifiedAccess_1.java:47:11: compiler.err.not.def.public.cant.access: pack1.P1.P3, pack1.P1
+QualifiedAccess_1.java:48:11: compiler.err.not.def.public.cant.access: pack1.P1.P3, pack1.P1
+QualifiedAccess_1.java:59:25: compiler.err.not.def.public.cant.access: pack1.P1.P3, pack1.P1
+QualifiedAccess_1.java:60:25: compiler.err.not.def.public.cant.access: pack1.P1.P3, pack1.P1
+QualifiedAccess_1.java:61:26: compiler.err.not.def.public.cant.access: pack1.P1.P3, pack1.P1
+QualifiedAccess_1.java:72:41: compiler.err.not.def.public.cant.access: pack1.P1.P3, pack1.P1
+QualifiedAccess_1.java:73:41: compiler.err.not.def.public.cant.access: pack1.P1.P3, pack1.P1
+QualifiedAccess_1.java:74:42: compiler.err.not.def.public.cant.access: pack1.P1.P3, pack1.P1
 18 errors
--- a/langtools/test/tools/javac/QualifiedAccess/QualifiedAccess_1.sh	Thu Jul 24 21:12:50 2008 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,85 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright 1999-2002 Sun Microsystems, Inc.  All Rights Reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
-# CA 95054 USA or visit www.sun.com if you need additional information or
-# have any questions.
-#
-
-
-if [ "${TESTSRC}" = "" ]
-then
-  echo "TESTSRC not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-echo "TESTSRC=${TESTSRC}"
-if [ "${TESTJAVA}" = "" ]
-then
-  echo "TESTJAVA not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-echo "TESTJAVA=${TESTJAVA}"
-if [ "${TESTCLASSES}" = "" ]
-then
-  echo "TESTCLASSES not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-echo "TESTCLASSES=${TESTCLASSES}"
-echo "CLASSPATH=${CLASSPATH}"
-
-# set platform-dependent variables
-OS=`uname -s`
-case "$OS" in
-  SunOS | Linux )
-    NULL=/dev/null
-    PS=":"
-    FS="/"
-    ;;
-  Windows* )
-    NULL=NUL
-    PS=";"
-    FS="\\"
-    ;;
-  * )
-    echo "Unrecognized system!"
-    exit 1;
-    ;;
-esac
-
-TMP1=OUTPUT.txt
-
-cp "${TESTSRC}${FS}QualifiedAccess_1.java" .
-cp -r "${TESTSRC}${FS}pack1" .
-"${TESTJAVA}${FS}bin${FS}javac" ${TESTTOOLVMOPTS} pack1${FS}P1.java
-"${TESTJAVA}${FS}bin${FS}javac" ${TESTTOOLVMOPTS} pack1${FS}P2.java
-"${TESTJAVA}${FS}bin${FS}javac" ${TESTTOOLVMOPTS} QualifiedAccess_1.java 2> ${TMP1}
-cat ${TMP1}
-
-diff -c "${TESTSRC}${FS}QualifiedAccess_1.out" ${TMP1}
-result=$?
-rm ${TMP1}
-
-if [ $result -eq 0 ]
-then
-  echo "Passed"
-else
-  echo "Failed"
-fi
-exit $result
--- a/langtools/test/tools/javac/QualifiedAccess/QualifiedAccess_2.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/test/tools/javac/QualifiedAccess/QualifiedAccess_2.java	Tue Aug 05 17:44:17 2008 -0700
@@ -5,7 +5,9 @@
  * the type to which a component member belongs be accessible in qualified
  * names.
  *
- * @run shell QualifiedAccess_2.sh
+ * @compile pack1/P1.java
+ * @compile pack1/P2.java
+ * @compile/fail/ref=QualifiedAccess_2.out -XDrawDiagnostics -XDstdout QualifiedAccess_2.java
  */
 
 import pack1.P1;
--- a/langtools/test/tools/javac/QualifiedAccess/QualifiedAccess_2.out	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/test/tools/javac/QualifiedAccess/QualifiedAccess_2.out	Tue Aug 05 17:44:17 2008 -0700
@@ -1,19 +1,7 @@
-QualifiedAccess_2.java:38: A.B has private access in A
-    class C extends A.B {}              // ERROR - B is inaccessible
-                     ^
-QualifiedAccess_2.java:39: A.B has private access in A
-    class D extends A.B.Inner {}        // ERROR - B is inaccessible
-                     ^
-QualifiedAccess_2.java:43: pack1.P1.Foo is not public in pack1.P1; cannot be accessed from outside package
-            P1.Foo.Bar x;               // ERROR - Foo is inaccessible
-              ^
-QualifiedAccess_2.java:50: Y.Quux.Quem has private access in Y.Quux
-    void foo() throws Y.Quux.Quem.MyError {
-                            ^
-QualifiedAccess_2.java:28: pack1.P1.R.S has private access in pack1.P1.R
-        Object z = new R.S.T();         // ERROR - S is inaccessible
-                        ^
-QualifiedAccess_2.java:52: Y.Quux.Quem has private access in Y.Quux
-        throw new Y.Quux.Quem.MyError();
-                        ^
+QualifiedAccess_2.java:40:22: compiler.err.report.access: A.B, private, A
+QualifiedAccess_2.java:41:22: compiler.err.report.access: A.B, private, A
+QualifiedAccess_2.java:45:15: compiler.err.not.def.public.cant.access: pack1.P1.Foo, pack1.P1
+QualifiedAccess_2.java:52:29: compiler.err.report.access: Y.Quux.Quem, private, Y.Quux
+QualifiedAccess_2.java:30:25: compiler.err.report.access: pack1.P1.R.S, private, pack1.P1.R
+QualifiedAccess_2.java:54:25: compiler.err.report.access: Y.Quux.Quem, private, Y.Quux
 6 errors
--- a/langtools/test/tools/javac/QualifiedAccess/QualifiedAccess_2.sh	Thu Jul 24 21:12:50 2008 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,85 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright 1999-2002 Sun Microsystems, Inc.  All Rights Reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
-# CA 95054 USA or visit www.sun.com if you need additional information or
-# have any questions.
-#
-
-
-if [ "${TESTSRC}" = "" ]
-then
-  echo "TESTSRC not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-echo "TESTSRC=${TESTSRC}"
-if [ "${TESTJAVA}" = "" ]
-then
-  echo "TESTJAVA not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-echo "TESTJAVA=${TESTJAVA}"
-if [ "${TESTCLASSES}" = "" ]
-then
-  echo "TESTCLASSES not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-echo "TESTCLASSES=${TESTCLASSES}"
-echo "CLASSPATH=${CLASSPATH}"
-
-# set platform-dependent variables
-OS=`uname -s`
-case "$OS" in
-  SunOS | Linux )
-    NULL=/dev/null
-    PS=":"
-    FS="/"
-    ;;
-  Windows* )
-    NULL=NUL
-    PS=";"
-    FS="\\"
-    ;;
-  * )
-    echo "Unrecognized system!"
-    exit 1;
-    ;;
-esac
-
-TMP1=OUTPUT.txt
-
-cp "${TESTSRC}${FS}QualifiedAccess_2.java" .
-cp -r "${TESTSRC}${FS}pack1" .
-"${TESTJAVA}${FS}bin${FS}javac" ${TESTTOOLVMOPTS} pack1${FS}P1.java
-"${TESTJAVA}${FS}bin${FS}javac" ${TESTTOOLVMOPTS} pack1${FS}P2.java
-"${TESTJAVA}${FS}bin${FS}javac" ${TESTTOOLVMOPTS} QualifiedAccess_2.java 2> ${TMP1}
-cat ${TMP1}
-
-diff -c "${TESTSRC}${FS}QualifiedAccess_2.out" ${TMP1}
-result=$?
-rm ${TMP1}
-
-if [ $result -eq 0 ]
-then
-  echo "Passed"
-else
-  echo "Failed"
-fi
-exit $result
--- a/langtools/test/tools/javac/QualifiedAccess/QualifiedAccess_3.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/test/tools/javac/QualifiedAccess/QualifiedAccess_3.java	Tue Aug 05 17:44:17 2008 -0700
@@ -5,7 +5,7 @@
  * the type to which a component member belongs be accessible in qualified
  * names.
  *
- * @run shell QualifiedAccess_3.sh
+ * @compile/fail/ref=QualifiedAccess_3.out -XDrawDiagnostics -XDstdout QualifiedAccess_3.java
  */
 
 import pack1.P1;
--- a/langtools/test/tools/javac/QualifiedAccess/QualifiedAccess_3.out	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/test/tools/javac/QualifiedAccess/QualifiedAccess_3.out	Tue Aug 05 17:44:17 2008 -0700
@@ -1,13 +1,5 @@
-QualifiedAccess_3.java:39: pack1.P1.Foo is not public in pack1.P1; cannot be accessed from outside package
-        P1.Foo.Bar x = null;            // ERROR - 'P1.Foo' not accessible
-          ^
-QualifiedAccess_3.java:40: length in Array is defined in an inaccessible class or interface
-        int i = p1.a.length;            // ERROR - Type of 'a' not accessible
-                    ^
-QualifiedAccess_3.java:43: privatei in pack1.P2 is defined in an inaccessible class or interface
-        p1.p2.privatei = 3;             // ERROR - Type of 'p1.p2' not accessible.
-             ^
-QualifiedAccess_3.java:44: privatei in pack1.P2 is defined in an inaccessible class or interface
-        System.out.println (p1.p2.privatei);    // ERROR - Type of 'p1.p2' not accessible.
-                                 ^
+QualifiedAccess_3.java:39:11: compiler.err.not.def.public.cant.access: pack1.P1.Foo, pack1.P1
+QualifiedAccess_3.java:40:21: compiler.err.not.def.access.class.intf.cant.access: length, Array
+QualifiedAccess_3.java:43:14: compiler.err.not.def.access.class.intf.cant.access: privatei, pack1.P2
+QualifiedAccess_3.java:44:34: compiler.err.not.def.access.class.intf.cant.access: privatei, pack1.P2
 4 errors
--- a/langtools/test/tools/javac/QualifiedAccess/QualifiedAccess_3.sh	Thu Jul 24 21:12:50 2008 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,83 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright 1999-2002 Sun Microsystems, Inc.  All Rights Reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
-# CA 95054 USA or visit www.sun.com if you need additional information or
-# have any questions.
-#
-
-
-if [ "${TESTSRC}" = "" ]
-then
-  echo "TESTSRC not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-echo "TESTSRC=${TESTSRC}"
-if [ "${TESTJAVA}" = "" ]
-then
-  echo "TESTJAVA not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-echo "TESTJAVA=${TESTJAVA}"
-if [ "${TESTCLASSES}" = "" ]
-then
-  echo "TESTCLASSES not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-echo "TESTCLASSES=${TESTCLASSES}"
-echo "CLASSPATH=${CLASSPATH}"
-
-# set platform-dependent variables
-OS=`uname -s`
-case "$OS" in
-  SunOS | Linux )
-    NULL=/dev/null
-    PS=":"
-    FS="/"
-    ;;
-  Windows* )
-    NULL=NUL
-    PS=";"
-    FS="\\"
-    ;;
-  * )
-    echo "Unrecognized system!"
-    exit 1;
-    ;;
-esac
-
-TMP1=OUTPUT.txt
-
-cp "${TESTSRC}${FS}QualifiedAccess_3.java" .
-cp -r "${TESTSRC}${FS}pack1" .
-"${TESTJAVA}${FS}bin${FS}javac" ${TESTTOOLVMOPTS} QualifiedAccess_3.java 2> ${TMP1}
-cat ${TMP1}
-
-diff -c "${TESTSRC}${FS}QualifiedAccess_3.out" ${TMP1}
-result=$?
-rm ${TMP1}
-
-if [ $result -eq 0 ]
-then
-  echo "Passed"
-else
-  echo "Failed"
-fi
-exit $result
--- a/langtools/test/tools/javac/SynchronizedClass.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/test/tools/javac/SynchronizedClass.java	Tue Aug 05 17:44:17 2008 -0700
@@ -3,7 +3,7 @@
    @summary Verify that ClassModifier "synchronized" is not allowed.
    @author dps
 
-   @run shell SynchronizedClass.sh
+   @compile/fail/ref=SynchronizedClass.out -XDrawDiagnostics -XDstdout SynchronizedClass.java
 */
 
 public synchronized class SynchronizedClass { } // ERROR
--- a/langtools/test/tools/javac/SynchronizedClass.out	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/test/tools/javac/SynchronizedClass.out	Tue Aug 05 17:44:17 2008 -0700
@@ -1,4 +1,2 @@
-SynchronizedClass.java:9: modifier synchronized not allowed here
-public synchronized class SynchronizedClass { } // ERROR
-                    ^
+SynchronizedClass.java:9:21: compiler.err.mod.not.allowed.here: synchronized
 1 error
--- a/langtools/test/tools/javac/SynchronizedClass.sh	Thu Jul 24 21:12:50 2008 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,82 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright 1999-2002 Sun Microsystems, Inc.  All Rights Reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
-# CA 95054 USA or visit www.sun.com if you need additional information or
-# have any questions.
-#
-
-
-if [ "${TESTSRC}" = "" ]
-then
-  echo "TESTSRC not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-echo "TESTSRC=${TESTSRC}"
-if [ "${TESTJAVA}" = "" ]
-then
-  echo "TESTJAVA not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-echo "TESTJAVA=${TESTJAVA}"
-if [ "${TESTCLASSES}" = "" ]
-then
-  echo "TESTCLASSES not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-echo "TESTCLASSES=${TESTCLASSES}"
-echo "CLASSPATH=${CLASSPATH}"
-
-# set platform-dependent variables
-OS=`uname -s`
-case "$OS" in
-  SunOS | Linux )
-    NULL=/dev/null
-    PS=":"
-    FS="/"
-    ;;
-  Windows* )
-    NULL=NUL
-    PS=";"
-    FS="\\"
-    ;;
-  * )
-    echo "Unrecognized system!"
-    exit 1;
-    ;;
-esac
-
-TMP1=OUTPUT.txt
-
-cp "${TESTSRC}${FS}SynchronizedClass.java" .
-"${TESTJAVA}${FS}bin${FS}javac" ${TESTTOOLVMOPTS} SynchronizedClass.java 2> ${TMP1}
-cat ${TMP1}
-
-diff -c "${TESTSRC}${FS}SynchronizedClass.out" ${TMP1}
-result=$?
-rm ${TMP1}
-
-if [ $result -eq 0 ]
-then
-  echo "Passed"
-else
-  echo "Failed"
-fi
-exit $result
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/T6725036.java	Tue Aug 05 17:44:17 2008 -0700
@@ -0,0 +1,94 @@
+/*
+ * Copyright 2008 Sun Microsystems, Inc.  All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/*
+ * @test
+ * @bug 6725036
+ * @summary javac returns incorrect value for lastModifiedTime() when
+ *          source is a zip file archive
+ */
+
+import java.io.File;
+import java.util.Date;
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
+import javax.tools.JavaFileObject;
+
+import com.sun.tools.javac.file.JavacFileManager;
+import com.sun.tools.javac.file.ZipFileIndex;
+import com.sun.tools.javac.file.ZipFileIndexArchive;
+import com.sun.tools.javac.util.Context;
+
+public class T6725036 {
+    public static void main(String... args) throws Exception {
+        new T6725036().run();
+    }
+
+    void run() throws Exception {
+        String TEST_ENTRY_NAME = "java/lang/String.class";
+
+        File f = new File(System.getProperty("java.home"));
+        if (!f.getName().equals("jre"))
+            f = new File(f, "jre");
+        File rt_jar = new File(new File(f, "lib"), "rt.jar");
+
+        JarFile j = new JarFile(rt_jar);
+        JarEntry je = j.getJarEntry(TEST_ENTRY_NAME);
+        long jarEntryTime = je.getTime();
+
+        ZipFileIndex zfi =
+                ZipFileIndex.getZipFileIndex(rt_jar, null, false, null, false);
+        long zfiTime = zfi.getLastModified(TEST_ENTRY_NAME);
+
+        check(je, jarEntryTime, zfi + ":" + TEST_ENTRY_NAME, zfiTime);
+
+        Context context = new Context();
+        JavacFileManager fm = new JavacFileManager(context, false, null);
+        ZipFileIndexArchive zfia = new ZipFileIndexArchive(fm, zfi);
+        int sep = TEST_ENTRY_NAME.lastIndexOf("/");
+        JavaFileObject jfo =
+                zfia.getFileObject(TEST_ENTRY_NAME.substring(0, sep + 1),
+                    TEST_ENTRY_NAME.substring(sep + 1));
+        long jfoTime = jfo.getLastModified();
+
+        check(je, jarEntryTime, jfo, jfoTime);
+
+        if (errors > 0)
+            throw new Exception(errors + " occurred");
+    }
+
+    void check(Object ref, long refTime, Object test, long testTime) {
+        if (refTime == testTime)
+            return;
+        System.err.println("Error: ");
+        System.err.println("Expected: " + getText(ref, refTime));
+        System.err.println("   Found: " + getText(test, testTime));
+        errors++;
+    }
+
+    String getText(Object x, long t) {
+        return String.format("%14d", t) + " (" + new Date(t) + ") from " + x;
+    }
+
+    int errors;
+}
--- a/langtools/test/tools/javac/depDocComment/DeprecatedDocComment.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/test/tools/javac/depDocComment/DeprecatedDocComment.java	Tue Aug 05 17:44:17 2008 -0700
@@ -5,7 +5,8 @@
  * docComment only
  * @author Jing Qian
  *
- * @run shell DeprecatedDocComment.sh
+ * @compile DeprecatedDocComment2.java
+ * @compile/fail/ref=DeprecatedDocComment.out -XDrawDiagnostics -XDstdout -Werror -deprecation DeprecatedDocComment.java
  */
 
 // WARNING: This file needs to be compiled with the -deprecation flag on.
--- a/langtools/test/tools/javac/depDocComment/DeprecatedDocComment.out	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/test/tools/javac/depDocComment/DeprecatedDocComment.out	Tue Aug 05 17:44:17 2008 -0700
@@ -1,10 +1,4 @@
-DeprecatedDocComment.java:26: warning: [deprecation] deprecatedTest1() in DeprecatedDocComment2 has been deprecated
-      DeprecatedDocComment2.deprecatedTest1();
-                           ^
-DeprecatedDocComment.java:30: warning: [deprecation] deprecatedTest5() in DeprecatedDocComment2 has been deprecated
-      DeprecatedDocComment2.deprecatedTest5();
-                           ^
-DeprecatedDocComment.java:31: warning: [deprecation] deprecatedTest6() in DeprecatedDocComment2 has been deprecated
-      DeprecatedDocComment2.deprecatedTest6();
-                           ^
+DeprecatedDocComment.java:27:28: compiler.warn.has.been.deprecated: deprecatedTest1(), DeprecatedDocComment2
+DeprecatedDocComment.java:31:28: compiler.warn.has.been.deprecated: deprecatedTest5(), DeprecatedDocComment2
+DeprecatedDocComment.java:32:28: compiler.warn.has.been.deprecated: deprecatedTest6(), DeprecatedDocComment2
 3 warnings
--- a/langtools/test/tools/javac/depDocComment/DeprecatedDocComment.sh	Thu Jul 24 21:12:50 2008 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,84 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright 1999-2002 Sun Microsystems, Inc.  All Rights Reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
-# CA 95054 USA or visit www.sun.com if you need additional information or
-# have any questions.
-#
-
-
-if [ "${TESTSRC}" = "" ]
-then
-  echo "TESTSRC not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-echo "TESTSRC=${TESTSRC}"
-if [ "${TESTJAVA}" = "" ]
-then
-  echo "TESTJAVA not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-echo "TESTJAVA=${TESTJAVA}"
-if [ "${TESTCLASSES}" = "" ]
-then
-  echo "TESTCLASSES not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-echo "TESTCLASSES=${TESTCLASSES}"
-echo "CLASSPATH=${CLASSPATH}"
-
-# set platform-dependent variables
-OS=`uname -s`
-case "$OS" in
-  SunOS | Linux )
-    NULL=/dev/null
-    PS=":"
-    FS="/"
-    ;;
-  Windows* )
-    NULL=NUL
-    PS=";"
-    FS="\\"
-    ;;
-  * )
-    echo "Unrecognized system!"
-    exit 1;
-    ;;
-esac
-
-TMP1=OUTPUT.txt
-
-cp "${TESTSRC}${FS}DeprecatedDocComment.java" .
-cp "${TESTSRC}${FS}DeprecatedDocComment2.java" .
-"${TESTJAVA}${FS}bin${FS}javac" ${TESTTOOLVMOPTS} DeprecatedDocComment2.java
-"${TESTJAVA}${FS}bin${FS}javac" ${TESTTOOLVMOPTS} -deprecation DeprecatedDocComment.java 2> ${TMP1}
-cat ${TMP1}
-
-diff -c "${TESTSRC}${FS}DeprecatedDocComment.out" ${TMP1}
-result=$?
-rm ${TMP1}
-
-if [ $result -eq 0 ]
-then
-  echo "Passed"
-else
-  echo "Failed"
-fi
-exit $result
--- a/langtools/test/tools/javap/4870651/T4870651.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/test/tools/javap/4870651/T4870651.java	Tue Aug 05 17:44:17 2008 -0700
@@ -23,8 +23,9 @@
 
 /*
  * @test
- * @bug 4870651
- * @summary javap should recognize generics, varargs, enum
+ * @bug 4870651 6715757
+ * @summary javap should recognize generics, varargs, enum;
+ *          javap prints "extends java.lang.Object"
  * @build T4870651 Test
  * @run main T4870651
  */
@@ -38,7 +39,9 @@
 
     public void run() throws IOException {
         verify("Test",
-               "class Test<T, E extends java.lang.Exception & java.lang.Comparable<T>, U extends java.lang.Comparable>",
+               "class Test<T extends java.lang.Object, " +
+                   "E extends java.lang.Exception & java.lang.Comparable<T>, " +
+                   "U extends java.lang.Comparable>",
                "v1(java.lang.String...)");
 
         verify("Test$Enum",
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javap/T4501661.java	Tue Aug 05 17:44:17 2008 -0700
@@ -0,0 +1,126 @@
+/*
+ * Copyright 2008 Sun Microsystems, Inc.  All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+import java.io.*;
+import java.util.*;
+
+/*
+ * @test
+ * @bug 4501661
+ * @summary disallow mixing -public, -private, and -protected
+ */
+public class T4501661 {
+    public static void main(String... args) throws Exception {
+        new T4501661().run();
+    }
+
+    void run() throws Exception {
+        File javaFile = writeTestFile();
+        File classFile = compileTestFile(javaFile);
+        boolean[] values = { false, true };
+        for (boolean priv: values) {
+            for (boolean prot: values) {
+                for (boolean publ: values) {
+                    test(priv, prot, publ, classFile);
+                }
+            }
+        }
+
+        if (errors > 0)
+            throw new Exception(errors + " errors found");
+    }
+
+    void test(boolean priv, boolean prot, boolean publ, File classFile) {
+        List<String> args = new ArrayList<String>();
+        if (priv)
+            args.add("-private");
+        if (prot)
+            args.add("-protected");
+        if (publ)
+            args.add("-public");
+        boolean expectOK = (args.size() <= 1);
+        args.add(classFile.getPath());
+        String out = javap(args, expectOK);
+        if (out == null)
+            return;
+        if (!priv && !prot && !publ)
+            checkNone(out, "private");
+        if (prot)
+            checkNone(out, "private", "package");
+        if (publ)
+            checkNone(out, "private", "package", "protected");
+    }
+
+    File writeTestFile() throws IOException {
+        File f = new File("Test.java");
+        PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(f)));
+        out.println("abstract class Test { ");
+        out.println("  public void public_m() { }");
+        out.println("  protected void protected_m() { }");
+        out.println("  private void private_m() { }");
+        out.println("  void package_m() { }");
+        out.println("}");
+        out.close();
+        return f;
+    }
+
+    File compileTestFile(File f) {
+        int rc = com.sun.tools.javac.Main.compile(new String[] { "-g", f.getPath() });
+        if (rc != 0)
+            throw new Error("compilation failed. rc=" + rc);
+        String path = f.getPath();
+        return new File(path.substring(0, path.length() - 5) + ".class");
+    }
+
+    String javap(List<String> args, boolean expectOK) {
+        StringWriter sw = new StringWriter();
+        PrintWriter pw = new PrintWriter(sw);
+        int rc = com.sun.tools.javap.Main.run(args.toArray(new String[args.size()]), pw);
+        System.err.println(args);
+        System.err.println(sw);
+        if (expectOK) {
+            if (rc == 0)
+                return sw.toString();
+            else
+                error("javap failed unexpectedly; rc=" + rc + "\n" + sw);
+        } else {
+            if (rc == 0)
+                error("javap succeeded unexpectedly");
+        }
+        return null;
+    }
+
+    void checkNone(String log, String... words) {
+        for (String word: words) {
+            if (log.indexOf(word) != -1)
+                error("\"" + word + "\" unexpectedly found in output");
+        }
+    }
+
+    void error(String msg) {
+        System.err.println("error: " + msg);
+        errors++;
+    }
+
+    int errors;
+}
--- a/langtools/test/tools/javap/T4876942.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/test/tools/javap/T4876942.java	Tue Aug 05 17:44:17 2008 -0700
@@ -23,7 +23,7 @@
 
 /*
  * @test
- * @bug 4876942
+ * @bug 4876942 6715251
  * @summary javap invoked without args does not print help screen
  */
 
@@ -48,7 +48,7 @@
         PrintWriter out = new PrintWriter(sw);
         //sun.tools.javap.Main.entry(args);
         int rc = com.sun.tools.javap.Main.run(args, out);
-        if (rc != 0)
+        if (rc != (args.length == 0 ? 2 : 0))
             throw new Error("javap failed. rc=" + rc);
         out.close();
         return sw.toString();
--- a/langtools/test/tools/javap/T4880663.java	Thu Jul 24 21:12:50 2008 -0700
+++ b/langtools/test/tools/javap/T4880663.java	Tue Aug 05 17:44:17 2008 -0700
@@ -23,8 +23,9 @@
 
 /*
  * @test
- * @bug 4880663
+ * @bug 4880663 6715757
  * @summary javap could output whitespace between class name and opening brace
+ *          javap prints "extends java.lang.Object"
  */
 
 
@@ -38,7 +39,7 @@
     public void run() throws IOException {
         File javaFile = writeTestFile();
         File classFile = compileTestFile(javaFile);
-        verify(classFile, "class Test {");
+        verify(classFile, "class Test extends java.lang.Object {");
 
         if (errors > 0)
             throw new Error(errors + " found.");
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javap/T6715251.java	Tue Aug 05 17:44:17 2008 -0700
@@ -0,0 +1,74 @@
+/*
+ * Copyright 2008 Sun Microsystems, Inc.  All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+import java.io.*;
+import java.util.*;
+
+/*
+ * @test
+ * @bug 6715251
+ * @summary javap should be consistent with javac and return 2 if given no arguments
+ */
+
+public class T6715251 {
+    public static void main(String... args) throws Exception {
+        new T6715251().run();
+    }
+
+    void run() throws Exception {
+        String testClasses = System.getProperty("test.classes", ".");
+
+        test(2);
+        test(0, "-help");
+        test(0, "-version");
+        test(0, "-fullversion");
+        test(0, "-classpath", testClasses, "T6715251");
+
+        if (errors > 0)
+            throw new Exception(errors + " errors received");
+    }
+
+    void test(int expect, String ... args) {
+        int rc = javap(args);
+        if (rc != expect)
+            error("bad result: expected: " + expect + ", found " + rc + "\n"
+                  + log);
+
+    }
+
+    int javap(String... args) {
+        StringWriter sw = new StringWriter();
+        PrintWriter pw = new PrintWriter(sw);
+        int rc = com.sun.tools.javap.Main.run(args, pw);
+        log = sw.toString();
+        return rc;
+    }
+
+    void error(String msg) {
+        System.err.println(msg);
+        errors++;
+    }
+
+    String log;
+    int errors;
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javap/T6715753.java	Tue Aug 05 17:44:17 2008 -0700
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2008 Sun Microsystems, Inc.  All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+import java.io.*;
+
+/*
+ * @test
+ * @bug 6715753
+ * @summary Use javap to inquire about a specific inner class
+ */
+
+public class T6715753 {
+    public static void main(String... args) throws Exception {
+        new T6715753().run();
+    }
+
+    void run() throws Exception {
+        StringWriter sw = new StringWriter();
+        PrintWriter pw = new PrintWriter(sw);
+        String[] args = { "-notAnOption" };
+        int rc = com.sun.tools.javap.Main.run(args, pw);
+        String log = sw.toString();
+        if (rc == 0
+            || log.indexOf("-notAnOption") == -1
+            || log.indexOf("javap") == -1) { // locale-independent indication of usage message
+            System.err.println("rc: " + rc + ", log=\n" + log);
+            throw new Exception("test failed");
+        }
+    }
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javap/T6716452.java	Tue Aug 05 17:44:17 2008 -0700
@@ -0,0 +1,113 @@
+/*
+ * Copyright 2008 Sun Microsystems, Inc.  All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/*
+ * @test 6716452
+ * @summary need a method to get an index of an attribute
+ */
+
+import java.io.*;
+import com.sun.tools.classfile.*;
+
+public class T6716452 {
+    public static void main(String[] args) throws Exception {
+        new T6716452().run();
+    }
+
+    public void run() throws Exception {
+        File javaFile = writeTestFile();
+        File classFile = compileTestFile(javaFile);
+
+        ClassFile cf = ClassFile.read(classFile);
+        for (Method m: cf.methods) {
+            test(cf, m);
+        }
+
+        if (errors > 0)
+            throw new Exception(errors + " errors found");
+    }
+
+    void test(ClassFile cf, Method m) {
+        test(cf, m, Attribute.Code, Code_attribute.class);
+        test(cf, m, Attribute.Exceptions, Exceptions_attribute.class);
+    }
+
+    // test the result of Attributes.getIndex according to expectations
+    // encoded in the method's name
+    void test(ClassFile cf, Method m, String name, Class<?> c) {
+        int index = m.attributes.getIndex(cf.constant_pool, name);
+        try {
+            String m_name = m.getName(cf.constant_pool);
+            System.err.println("Method " + m_name + " name:" + name + " index:" + index + " class: " + c);
+            boolean expect = (m_name.equals("<init>") && name.equals("Code"))
+                || (m_name.indexOf(name) != -1);
+            boolean found = (index != -1);
+            if (expect) {
+                if (found) {
+                    Attribute attr = m.attributes.get(index);
+                    if (!c.isAssignableFrom(attr.getClass())) {
+                        error(m + ": unexpected attribute found,"
+                              + " expected " + c.getName()
+                              + " found " + attr.getClass().getName());
+                    }
+                } else {
+                    error(m + ": expected attribute " + name + " not found");
+                }
+            } else {
+                if (found) {
+                    error(m + ": unexpected attribute " + name);
+                }
+            }
+        } catch (ConstantPoolException e) {
+            error(m + ": " + e);
+        }
+    }
+
+    File writeTestFile() throws IOException {
+        File f = new File("Test.java");
+        PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(f)));
+        out.println("abstract class Test { ");
+        out.println("  abstract void m();");
+        out.println("  void m_Code() { }");
+        out.println("  abstract void m_Exceptions() throws Exception;");
+        out.println("  void m_Code_Exceptions() throws Exception { }");
+        out.println("}");
+        out.close();
+        return f;
+    }
+
+    File compileTestFile(File f) {
+        int rc = com.sun.tools.javac.Main.compile(new String[] { "-g", f.getPath() });
+        if (rc != 0)
+            throw new Error("compilation failed. rc=" + rc);
+        String path = f.getPath();
+        return new File(path.substring(0, path.length() - 5) + ".class");
+    }
+
+    void error(String msg) {
+        System.err.println("error: " + msg);
+        errors++;
+    }
+
+    int errors;
+}