changeset 4531:22149eb5a8c9

Merge
author lana
date Fri, 09 Sep 2011 17:22:03 -0700
parents b8b6587b9574 a6e1c192951a
children 0595eb21e9b5 b92341e9ae56
files make/com/oracle/net/Makefile src/share/classes/sun/io/ByteToCharASCII.java src/share/classes/sun/io/ByteToCharBig5.java src/share/classes/sun/io/ByteToCharBig5_HKSCS.java src/share/classes/sun/io/ByteToCharBig5_Solaris.java src/share/classes/sun/io/ByteToCharConverter.java src/share/classes/sun/io/ByteToCharCp037.java src/share/classes/sun/io/ByteToCharCp1006.java src/share/classes/sun/io/ByteToCharCp1025.java src/share/classes/sun/io/ByteToCharCp1026.java src/share/classes/sun/io/ByteToCharCp1046.java src/share/classes/sun/io/ByteToCharCp1047.java src/share/classes/sun/io/ByteToCharCp1097.java src/share/classes/sun/io/ByteToCharCp1098.java src/share/classes/sun/io/ByteToCharCp1112.java src/share/classes/sun/io/ByteToCharCp1122.java src/share/classes/sun/io/ByteToCharCp1123.java src/share/classes/sun/io/ByteToCharCp1124.java src/share/classes/sun/io/ByteToCharCp1140.java src/share/classes/sun/io/ByteToCharCp1141.java src/share/classes/sun/io/ByteToCharCp1142.java src/share/classes/sun/io/ByteToCharCp1143.java src/share/classes/sun/io/ByteToCharCp1144.java src/share/classes/sun/io/ByteToCharCp1145.java src/share/classes/sun/io/ByteToCharCp1146.java src/share/classes/sun/io/ByteToCharCp1147.java src/share/classes/sun/io/ByteToCharCp1148.java src/share/classes/sun/io/ByteToCharCp1149.java src/share/classes/sun/io/ByteToCharCp1250.java src/share/classes/sun/io/ByteToCharCp1251.java src/share/classes/sun/io/ByteToCharCp1252.java src/share/classes/sun/io/ByteToCharCp1253.java src/share/classes/sun/io/ByteToCharCp1254.java src/share/classes/sun/io/ByteToCharCp1255.java src/share/classes/sun/io/ByteToCharCp1256.java src/share/classes/sun/io/ByteToCharCp1257.java src/share/classes/sun/io/ByteToCharCp1258.java src/share/classes/sun/io/ByteToCharCp1381.java src/share/classes/sun/io/ByteToCharCp1383.java src/share/classes/sun/io/ByteToCharCp273.java src/share/classes/sun/io/ByteToCharCp277.java src/share/classes/sun/io/ByteToCharCp278.java src/share/classes/sun/io/ByteToCharCp280.java src/share/classes/sun/io/ByteToCharCp284.java src/share/classes/sun/io/ByteToCharCp285.java src/share/classes/sun/io/ByteToCharCp297.java src/share/classes/sun/io/ByteToCharCp33722.java src/share/classes/sun/io/ByteToCharCp420.java src/share/classes/sun/io/ByteToCharCp424.java src/share/classes/sun/io/ByteToCharCp437.java src/share/classes/sun/io/ByteToCharCp500.java src/share/classes/sun/io/ByteToCharCp737.java src/share/classes/sun/io/ByteToCharCp775.java src/share/classes/sun/io/ByteToCharCp833.java src/share/classes/sun/io/ByteToCharCp834.java src/share/classes/sun/io/ByteToCharCp838.java src/share/classes/sun/io/ByteToCharCp850.java src/share/classes/sun/io/ByteToCharCp852.java src/share/classes/sun/io/ByteToCharCp855.java src/share/classes/sun/io/ByteToCharCp856.java src/share/classes/sun/io/ByteToCharCp857.java src/share/classes/sun/io/ByteToCharCp858.java src/share/classes/sun/io/ByteToCharCp860.java src/share/classes/sun/io/ByteToCharCp861.java src/share/classes/sun/io/ByteToCharCp862.java src/share/classes/sun/io/ByteToCharCp863.java src/share/classes/sun/io/ByteToCharCp864.java src/share/classes/sun/io/ByteToCharCp865.java src/share/classes/sun/io/ByteToCharCp866.java src/share/classes/sun/io/ByteToCharCp868.java src/share/classes/sun/io/ByteToCharCp869.java src/share/classes/sun/io/ByteToCharCp870.java src/share/classes/sun/io/ByteToCharCp871.java src/share/classes/sun/io/ByteToCharCp874.java src/share/classes/sun/io/ByteToCharCp875.java src/share/classes/sun/io/ByteToCharCp918.java src/share/classes/sun/io/ByteToCharCp921.java src/share/classes/sun/io/ByteToCharCp922.java src/share/classes/sun/io/ByteToCharCp930.java src/share/classes/sun/io/ByteToCharCp933.java src/share/classes/sun/io/ByteToCharCp935.java src/share/classes/sun/io/ByteToCharCp937.java src/share/classes/sun/io/ByteToCharCp939.java src/share/classes/sun/io/ByteToCharCp942.java src/share/classes/sun/io/ByteToCharCp942C.java src/share/classes/sun/io/ByteToCharCp943.java src/share/classes/sun/io/ByteToCharCp943C.java src/share/classes/sun/io/ByteToCharCp948.java src/share/classes/sun/io/ByteToCharCp949.java src/share/classes/sun/io/ByteToCharCp949C.java src/share/classes/sun/io/ByteToCharCp950.java src/share/classes/sun/io/ByteToCharCp964.java src/share/classes/sun/io/ByteToCharCp970.java src/share/classes/sun/io/ByteToCharDBCS_ASCII.java src/share/classes/sun/io/ByteToCharDBCS_EBCDIC.java src/share/classes/sun/io/ByteToCharDoubleByte.java src/share/classes/sun/io/ByteToCharEUC.java src/share/classes/sun/io/ByteToCharEUC2.java src/share/classes/sun/io/ByteToCharEUC_CN.java src/share/classes/sun/io/ByteToCharEUC_JP.java src/share/classes/sun/io/ByteToCharEUC_JP_LINUX.java src/share/classes/sun/io/ByteToCharEUC_JP_Solaris.java src/share/classes/sun/io/ByteToCharEUC_KR.java src/share/classes/sun/io/ByteToCharEUC_TW.java src/share/classes/sun/io/ByteToCharGB18030.java src/share/classes/sun/io/ByteToCharGB18030DB.java src/share/classes/sun/io/ByteToCharGBK.java src/share/classes/sun/io/ByteToCharISCII91.java src/share/classes/sun/io/ByteToCharISO2022.java src/share/classes/sun/io/ByteToCharISO2022CN.java src/share/classes/sun/io/ByteToCharISO2022JP.java src/share/classes/sun/io/ByteToCharISO2022KR.java src/share/classes/sun/io/ByteToCharISO8859_1.java src/share/classes/sun/io/ByteToCharISO8859_13.java src/share/classes/sun/io/ByteToCharISO8859_15.java src/share/classes/sun/io/ByteToCharISO8859_2.java src/share/classes/sun/io/ByteToCharISO8859_3.java src/share/classes/sun/io/ByteToCharISO8859_4.java src/share/classes/sun/io/ByteToCharISO8859_5.java src/share/classes/sun/io/ByteToCharISO8859_6.java src/share/classes/sun/io/ByteToCharISO8859_7.java src/share/classes/sun/io/ByteToCharISO8859_8.java src/share/classes/sun/io/ByteToCharISO8859_9.java src/share/classes/sun/io/ByteToCharJIS0201.java src/share/classes/sun/io/ByteToCharJIS0208.java src/share/classes/sun/io/ByteToCharJIS0208_Solaris.java src/share/classes/sun/io/ByteToCharJIS0212.java src/share/classes/sun/io/ByteToCharJIS0212_Solaris.java src/share/classes/sun/io/ByteToCharJISAutoDetect.java src/share/classes/sun/io/ByteToCharJohab.java src/share/classes/sun/io/ByteToCharKOI8_R.java src/share/classes/sun/io/ByteToCharMS874.java src/share/classes/sun/io/ByteToCharMS932.java src/share/classes/sun/io/ByteToCharMS936.java src/share/classes/sun/io/ByteToCharMS949.java src/share/classes/sun/io/ByteToCharMS950.java src/share/classes/sun/io/ByteToCharMS950_HKSCS.java src/share/classes/sun/io/ByteToCharMacArabic.java src/share/classes/sun/io/ByteToCharMacCentralEurope.java src/share/classes/sun/io/ByteToCharMacCroatian.java src/share/classes/sun/io/ByteToCharMacCyrillic.java src/share/classes/sun/io/ByteToCharMacDingbat.java src/share/classes/sun/io/ByteToCharMacGreek.java src/share/classes/sun/io/ByteToCharMacHebrew.java src/share/classes/sun/io/ByteToCharMacIceland.java src/share/classes/sun/io/ByteToCharMacRoman.java src/share/classes/sun/io/ByteToCharMacRomania.java src/share/classes/sun/io/ByteToCharMacSymbol.java src/share/classes/sun/io/ByteToCharMacThai.java src/share/classes/sun/io/ByteToCharMacTurkish.java src/share/classes/sun/io/ByteToCharMacUkraine.java src/share/classes/sun/io/ByteToCharPCK.java src/share/classes/sun/io/ByteToCharSJIS.java src/share/classes/sun/io/ByteToCharSingleByte.java src/share/classes/sun/io/ByteToCharTIS620.java src/share/classes/sun/io/ByteToCharUTF16.java src/share/classes/sun/io/ByteToCharUTF8.java src/share/classes/sun/io/ByteToCharUnicode.java src/share/classes/sun/io/ByteToCharUnicodeBig.java src/share/classes/sun/io/ByteToCharUnicodeBigUnmarked.java src/share/classes/sun/io/ByteToCharUnicodeLittle.java src/share/classes/sun/io/ByteToCharUnicodeLittleUnmarked.java src/share/classes/sun/io/CharToByteASCII.java src/share/classes/sun/io/CharToByteBig5.java src/share/classes/sun/io/CharToByteBig5_HKSCS.java src/share/classes/sun/io/CharToByteBig5_Solaris.java src/share/classes/sun/io/CharToByteConverter.java src/share/classes/sun/io/CharToByteCp037.java src/share/classes/sun/io/CharToByteCp1006.java src/share/classes/sun/io/CharToByteCp1025.java src/share/classes/sun/io/CharToByteCp1026.java src/share/classes/sun/io/CharToByteCp1046.java src/share/classes/sun/io/CharToByteCp1047.java src/share/classes/sun/io/CharToByteCp1097.java src/share/classes/sun/io/CharToByteCp1098.java src/share/classes/sun/io/CharToByteCp1112.java src/share/classes/sun/io/CharToByteCp1122.java src/share/classes/sun/io/CharToByteCp1123.java src/share/classes/sun/io/CharToByteCp1124.java src/share/classes/sun/io/CharToByteCp1140.java src/share/classes/sun/io/CharToByteCp1141.java src/share/classes/sun/io/CharToByteCp1142.java src/share/classes/sun/io/CharToByteCp1143.java src/share/classes/sun/io/CharToByteCp1144.java src/share/classes/sun/io/CharToByteCp1145.java src/share/classes/sun/io/CharToByteCp1146.java src/share/classes/sun/io/CharToByteCp1147.java src/share/classes/sun/io/CharToByteCp1148.java src/share/classes/sun/io/CharToByteCp1149.java src/share/classes/sun/io/CharToByteCp1250.java src/share/classes/sun/io/CharToByteCp1251.java src/share/classes/sun/io/CharToByteCp1252.java src/share/classes/sun/io/CharToByteCp1253.java src/share/classes/sun/io/CharToByteCp1254.java src/share/classes/sun/io/CharToByteCp1255.java src/share/classes/sun/io/CharToByteCp1256.java src/share/classes/sun/io/CharToByteCp1257.java src/share/classes/sun/io/CharToByteCp1258.java src/share/classes/sun/io/CharToByteCp1381.java src/share/classes/sun/io/CharToByteCp1383.java src/share/classes/sun/io/CharToByteCp273.java src/share/classes/sun/io/CharToByteCp277.java src/share/classes/sun/io/CharToByteCp278.java src/share/classes/sun/io/CharToByteCp280.java src/share/classes/sun/io/CharToByteCp284.java src/share/classes/sun/io/CharToByteCp285.java src/share/classes/sun/io/CharToByteCp297.java src/share/classes/sun/io/CharToByteCp33722.java src/share/classes/sun/io/CharToByteCp420.java src/share/classes/sun/io/CharToByteCp424.java src/share/classes/sun/io/CharToByteCp437.java src/share/classes/sun/io/CharToByteCp500.java src/share/classes/sun/io/CharToByteCp737.java src/share/classes/sun/io/CharToByteCp775.java src/share/classes/sun/io/CharToByteCp833.java src/share/classes/sun/io/CharToByteCp834.java src/share/classes/sun/io/CharToByteCp838.java src/share/classes/sun/io/CharToByteCp850.java src/share/classes/sun/io/CharToByteCp852.java src/share/classes/sun/io/CharToByteCp855.java src/share/classes/sun/io/CharToByteCp856.java src/share/classes/sun/io/CharToByteCp857.java src/share/classes/sun/io/CharToByteCp858.java src/share/classes/sun/io/CharToByteCp860.java src/share/classes/sun/io/CharToByteCp861.java src/share/classes/sun/io/CharToByteCp862.java src/share/classes/sun/io/CharToByteCp863.java src/share/classes/sun/io/CharToByteCp864.java src/share/classes/sun/io/CharToByteCp865.java src/share/classes/sun/io/CharToByteCp866.java src/share/classes/sun/io/CharToByteCp868.java src/share/classes/sun/io/CharToByteCp869.java src/share/classes/sun/io/CharToByteCp870.java src/share/classes/sun/io/CharToByteCp871.java src/share/classes/sun/io/CharToByteCp874.java src/share/classes/sun/io/CharToByteCp875.java src/share/classes/sun/io/CharToByteCp918.java src/share/classes/sun/io/CharToByteCp921.java src/share/classes/sun/io/CharToByteCp922.java src/share/classes/sun/io/CharToByteCp930.java src/share/classes/sun/io/CharToByteCp933.java src/share/classes/sun/io/CharToByteCp935.java src/share/classes/sun/io/CharToByteCp937.java src/share/classes/sun/io/CharToByteCp939.java src/share/classes/sun/io/CharToByteCp942.java src/share/classes/sun/io/CharToByteCp942C.java src/share/classes/sun/io/CharToByteCp943.java src/share/classes/sun/io/CharToByteCp943C.java src/share/classes/sun/io/CharToByteCp948.java src/share/classes/sun/io/CharToByteCp949.java src/share/classes/sun/io/CharToByteCp949C.java src/share/classes/sun/io/CharToByteCp950.java src/share/classes/sun/io/CharToByteCp964.java src/share/classes/sun/io/CharToByteCp970.java src/share/classes/sun/io/CharToByteDBCS_ASCII.java src/share/classes/sun/io/CharToByteDBCS_EBCDIC.java src/share/classes/sun/io/CharToByteDoubleByte.java src/share/classes/sun/io/CharToByteEUC.java src/share/classes/sun/io/CharToByteEUC_CN.java src/share/classes/sun/io/CharToByteEUC_JP.java src/share/classes/sun/io/CharToByteEUC_JP_LINUX.java src/share/classes/sun/io/CharToByteEUC_JP_Solaris.java src/share/classes/sun/io/CharToByteEUC_KR.java src/share/classes/sun/io/CharToByteEUC_TW.java src/share/classes/sun/io/CharToByteGB18030.java src/share/classes/sun/io/CharToByteGBK.java src/share/classes/sun/io/CharToByteISCII91.java src/share/classes/sun/io/CharToByteISO2022.java src/share/classes/sun/io/CharToByteISO2022CN_CNS.java src/share/classes/sun/io/CharToByteISO2022CN_GB.java src/share/classes/sun/io/CharToByteISO2022JP.java src/share/classes/sun/io/CharToByteISO2022KR.java src/share/classes/sun/io/CharToByteISO8859_1.java src/share/classes/sun/io/CharToByteISO8859_13.java src/share/classes/sun/io/CharToByteISO8859_15.java src/share/classes/sun/io/CharToByteISO8859_2.java src/share/classes/sun/io/CharToByteISO8859_3.java src/share/classes/sun/io/CharToByteISO8859_4.java src/share/classes/sun/io/CharToByteISO8859_5.java src/share/classes/sun/io/CharToByteISO8859_6.java src/share/classes/sun/io/CharToByteISO8859_7.java src/share/classes/sun/io/CharToByteISO8859_8.java src/share/classes/sun/io/CharToByteISO8859_9.java src/share/classes/sun/io/CharToByteJIS0201.java src/share/classes/sun/io/CharToByteJIS0208.java src/share/classes/sun/io/CharToByteJIS0208_Solaris.java src/share/classes/sun/io/CharToByteJIS0212.java src/share/classes/sun/io/CharToByteJIS0212_Solaris.java src/share/classes/sun/io/CharToByteJohab.java src/share/classes/sun/io/CharToByteKOI8_R.java src/share/classes/sun/io/CharToByteMS874.java src/share/classes/sun/io/CharToByteMS932.java src/share/classes/sun/io/CharToByteMS936.java src/share/classes/sun/io/CharToByteMS949.java src/share/classes/sun/io/CharToByteMS950.java src/share/classes/sun/io/CharToByteMS950_HKSCS.java src/share/classes/sun/io/CharToByteMacArabic.java src/share/classes/sun/io/CharToByteMacCentralEurope.java src/share/classes/sun/io/CharToByteMacCroatian.java src/share/classes/sun/io/CharToByteMacCyrillic.java src/share/classes/sun/io/CharToByteMacDingbat.java src/share/classes/sun/io/CharToByteMacGreek.java src/share/classes/sun/io/CharToByteMacHebrew.java src/share/classes/sun/io/CharToByteMacIceland.java src/share/classes/sun/io/CharToByteMacRoman.java src/share/classes/sun/io/CharToByteMacRomania.java src/share/classes/sun/io/CharToByteMacSymbol.java src/share/classes/sun/io/CharToByteMacThai.java src/share/classes/sun/io/CharToByteMacTurkish.java src/share/classes/sun/io/CharToByteMacUkraine.java src/share/classes/sun/io/CharToBytePCK.java src/share/classes/sun/io/CharToByteSJIS.java src/share/classes/sun/io/CharToByteSingleByte.java src/share/classes/sun/io/CharToByteTIS620.java src/share/classes/sun/io/CharToByteUTF16.java src/share/classes/sun/io/CharToByteUTF8.java src/share/classes/sun/io/CharToByteUnicode.java src/share/classes/sun/io/CharToByteUnicodeBig.java src/share/classes/sun/io/CharToByteUnicodeBigUnmarked.java src/share/classes/sun/io/CharToByteUnicodeLittle.java src/share/classes/sun/io/CharToByteUnicodeLittleUnmarked.java src/share/classes/sun/io/CharacterEncoding.java src/share/classes/sun/io/ConversionBufferFullException.java src/share/classes/sun/io/Converters.java src/share/classes/sun/io/MalformedInputException.java src/share/classes/sun/io/UnknownCharacterException.java test/sun/nio/cs/TestISCII91.java
diffstat 1393 files changed, 12433 insertions(+), 30414 deletions(-) [+]
line wrap: on
line diff
--- a/.hgtags	Tue Sep 06 13:40:31 2011 -0700
+++ b/.hgtags	Fri Sep 09 17:22:03 2011 -0700
@@ -122,3 +122,7 @@
 1e04b38b3824a4a1d197ef681a302e6813e53f8b jdk7-b145
 539e576793a8e64aaf160e0d6ab0b9723cd0bef0 jdk7-b146
 f097ca2434b1412b12ab4a5c2397ce271bf681e7 jdk7-b147
+2cdbbc4a63592be7f1556fffe37b1253a77bd481 jdk8-b01
+13e70aa1398eb959c54bc68b783ca0eef1286ad2 jdk8-b02
+7989ee9fe673a87f4db3917fa6a005732a6a9b85 jdk8-b03
+fc569517f3cf242f90ce3503b743eb5553938946 jdk8-b04
--- a/make/com/oracle/Makefile	Tue Sep 06 13:40:31 2011 -0700
+++ b/make/com/oracle/Makefile	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, Oracle and/or its affiliates. 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
@@ -27,8 +27,13 @@
 PRODUCT = oracle
 include $(BUILDDIR)/common/Defs.gmk
 
-SUBDIRS = net
-include $(BUILDDIR)/common/Subdirs.gmk
+#
+# Files to compile
+#
+AUTO_FILES_JAVA_DIRS = com/oracle
 
-all build clean clobber::
-	$(SUBDIRS-loop)
+#
+# Rules
+#
+include $(BUILDDIR)/common/Classes.gmk
+
--- a/make/com/oracle/net/Makefile	Tue Sep 06 13:40:31 2011 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,39 +0,0 @@
-#
-# Copyright (c) 2010, Oracle and/or its affiliates. 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.  Oracle designates this
-# particular file as subject to the "Classpath" exception as provided
-# by Oracle 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-BUILDDIR = ../../..
-PRODUCT = oracle
-include $(BUILDDIR)/common/Defs.gmk
-
-#
-# Files to compile
-#
-AUTO_FILES_JAVA_DIRS = com/oracle/net
-
-#
-# Rules
-#
-include $(BUILDDIR)/common/Classes.gmk
-
--- a/make/com/sun/crypto/provider/Makefile	Tue Sep 06 13:40:31 2011 -0700
+++ b/make/com/sun/crypto/provider/Makefile	Fri Sep 09 17:22:03 2011 -0700
@@ -113,6 +113,9 @@
   endif
 endif
 
+JAVAC_MAX_WARNINGS = false
+JAVAC_LINT_OPTIONS = -Xlint:all,-deprecation
+JAVAC_WARNINGS_FATAL = true
 include $(BUILDDIR)/common/Defs.gmk
 
 #
--- a/make/com/sun/jndi/Makefile	Tue Sep 06 13:40:31 2011 -0700
+++ b/make/com/sun/jndi/Makefile	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 1999, 2011, Oracle and/or its affiliates. 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
@@ -28,6 +28,8 @@
 #
 
 BUILDDIR = ../../..
+SUBDIRS_MAKEFLAGS += JAVAC_MAX_WARNINGS=true
+SUBDIRS_MAKEFLAGS += JAVAC_WARNINGS_FATAL=true
 include $(BUILDDIR)/common/Defs.gmk
 
 SUBDIRS = toolkit cosnaming ldap rmi dns
--- a/make/com/sun/security/Makefile	Tue Sep 06 13:40:31 2011 -0700
+++ b/make/com/sun/security/Makefile	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2000, 2011, Oracle and/or its affiliates. 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
@@ -28,6 +28,10 @@
 #
 
 BUILDDIR = ../../..
+SUBDIRS_MAKEFLAGS += JAVAC_MAX_WARNINGS=false
+# TODO: Workaround for CR 7063027. Remove -path eventually.
+SUBDIRS_MAKEFLAGS += JAVAC_LINT_OPTIONS=-Xlint:all,-deprecation,-path
+SUBDIRS_MAKEFLAGS += JAVAC_WARNINGS_FATAL=true
 include $(BUILDDIR)/common/Defs.gmk
 
 SUBDIRS = auth
--- a/make/common/Defs.gmk	Tue Sep 06 13:40:31 2011 -0700
+++ b/make/common/Defs.gmk	Fri Sep 09 17:22:03 2011 -0700
@@ -300,6 +300,9 @@
 #where the demo source can be found
 DEMOSRCDIR          = $(SHARE_SRC)/demo
 
+#where the sample source can be found
+SAMPLESRCDIR          = $(SHARE_SRC)/sample
+
 # An attempt is made to generate unique enough directories for the
 # generated files to not have name collisisons. Most build units
 # defines PRODUCT (except Release.gmk), but then they may or may 
--- a/make/common/Release.gmk	Tue Sep 06 13:40:31 2011 -0700
+++ b/make/common/Release.gmk	Fri Sep 09 17:22:03 2011 -0700
@@ -60,7 +60,8 @@
 # with a new module system (being discussed for JDK 8).
 #
 EXPORTED_PRIVATE_PKGS = com.sun.servicetag \
-                        com.oracle.net
+                        com.oracle.net \
+                        com.oracle.nio
 
 # 64-bit solaris has a few special cases. We define the variable
 # SOLARIS64 for use in this Makefile to easily test those cases
--- a/make/java/java/Makefile	Tue Sep 06 13:40:31 2011 -0700
+++ b/make/java/java/Makefile	Fri Sep 09 17:22:03 2011 -0700
@@ -34,6 +34,7 @@
 PRODUCT = java
 SUBDIRS_MAKEFLAGS += JAVAC_MAX_WARNINGS=true
 SUBDIRS_MAKEFLAGS += JAVAC_WARNINGS_FATAL=true
+JAVAC_MAX_WARNINGS=true
 include $(BUILDDIR)/common/Defs.gmk
 
 # windows compiler flags
--- a/make/java/security/Makefile	Tue Sep 06 13:40:31 2011 -0700
+++ b/make/java/security/Makefile	Fri Sep 09 17:22:03 2011 -0700
@@ -26,6 +26,9 @@
 BUILDDIR = ../..
 PACKAGE = java.security
 PRODUCT = sun
+JAVAC_MAX_WARNINGS = false
+JAVAC_LINT_OPTIONS = -Xlint:all,-deprecation
+JAVAC_WARNINGS_FATAL = true
 include $(BUILDDIR)/common/Defs.gmk
 
 #
--- a/make/java/sun_nio/FILES_java.gmk	Tue Sep 06 13:40:31 2011 -0700
+++ b/make/java/sun_nio/FILES_java.gmk	Fri Sep 09 17:22:03 2011 -0700
@@ -76,63 +76,3 @@
     sun/nio/cs/UTF_32BE_BOM.java \
     sun/nio/cs/UTF_32LE_BOM.java
 
-
-FILES_java += \
-    sun/io/Converters.java \
-    sun/io/ByteToCharConverter.java \
-    sun/io/ByteToCharASCII.java \
-    sun/io/ByteToCharUTF8.java \
-    sun/io/ByteToCharUTF16.java \
-    sun/io/ByteToCharUnicode.java \
-    sun/io/ByteToCharUnicodeBig.java  \
-    sun/io/ByteToCharUnicodeBigUnmarked.java \
-    sun/io/ByteToCharUnicodeLittle.java \
-    sun/io/ByteToCharUnicodeLittleUnmarked.java \
-    sun/io/CharToByteConverter.java \
-    sun/io/CharToByteASCII.java \
-    sun/io/CharToByteUTF8.java \
-    sun/io/CharToByteUTF16.java \
-    sun/io/CharToByteUnicode.java \
-    sun/io/CharToByteUnicodeBig.java \
-    sun/io/CharToByteUnicodeBigUnmarked.java \
-    sun/io/CharToByteUnicodeLittle.java \
-    sun/io/CharToByteUnicodeLittleUnmarked.java \
-    sun/io/CharacterEncoding.java \
-    sun/io/ConversionBufferFullException.java \
-    sun/io/MalformedInputException.java \
-    sun/io/UnknownCharacterException.java \
-    sun/io/ByteToCharISO8859_1.java \
-    sun/io/CharToByteISO8859_1.java \
-    sun/io/ByteToCharISO8859_2.java \
-    sun/io/CharToByteISO8859_2.java \
-    sun/io/ByteToCharISO8859_4.java \
-    sun/io/CharToByteISO8859_4.java \
-    sun/io/ByteToCharISO8859_5.java \
-    sun/io/CharToByteISO8859_5.java \
-    sun/io/ByteToCharISO8859_7.java \
-    sun/io/CharToByteISO8859_7.java \
-    sun/io/ByteToCharISO8859_9.java \
-    sun/io/CharToByteISO8859_9.java \
-    sun/io/ByteToCharISO8859_13.java \
-    sun/io/CharToByteISO8859_13.java \
-    sun/io/ByteToCharISO8859_15.java \
-    sun/io/CharToByteISO8859_15.java \
-    sun/io/ByteToCharCp1250.java \
-    sun/io/CharToByteCp1250.java \
-    sun/io/ByteToCharCp1251.java \
-    sun/io/CharToByteCp1251.java \
-    sun/io/ByteToCharCp1252.java \
-    sun/io/CharToByteCp1252.java \
-    sun/io/ByteToCharCp1253.java \
-    sun/io/CharToByteCp1253.java \
-    sun/io/ByteToCharCp1254.java \
-    sun/io/CharToByteCp1254.java \
-    sun/io/ByteToCharCp1257.java \
-    sun/io/CharToByteCp1257.java \
-    sun/io/ByteToCharKOI8_R.java \
-    sun/io/CharToByteKOI8_R.java \
-    sun/io/ByteToCharSingleByte.java \
-    sun/io/CharToByteSingleByte.java
-
-
-
--- a/make/java/sun_nio/Makefile	Tue Sep 06 13:40:31 2011 -0700
+++ b/make/java/sun_nio/Makefile	Fri Sep 09 17:22:03 2011 -0700
@@ -31,8 +31,7 @@
 PACKAGE = sun.nio
 PRODUCT = sun
 
-JAVAC_MAX_WARNINGS = false
-JAVAC_LINT_OPTIONS = -Xlint:all,-deprecation
+JAVAC_MAX_WARNINGS = true
 JAVAC_WARNINGS_FATAL = true
 include $(BUILDDIR)/common/Defs.gmk
 
--- a/make/java/util/FILES_properties.gmk	Tue Sep 06 13:40:31 2011 -0700
+++ b/make/java/util/FILES_properties.gmk	Fri Sep 09 17:22:03 2011 -0700
@@ -151,6 +151,7 @@
         sun/util/resources/CurrencyNames_es_CL.properties \
         sun/util/resources/CurrencyNames_es_CO.properties \
         sun/util/resources/CurrencyNames_es_CR.properties \
+        sun/util/resources/CurrencyNames_es_CU.properties \
         sun/util/resources/CurrencyNames_es_DO.properties \
         sun/util/resources/CurrencyNames_es_EC.properties \
         sun/util/resources/CurrencyNames_es_ES.properties \
--- a/make/javax/crypto/Makefile	Tue Sep 06 13:40:31 2011 -0700
+++ b/make/javax/crypto/Makefile	Fri Sep 09 17:22:03 2011 -0700
@@ -128,6 +128,8 @@
   endif
 endif
 
+JAVAC_MAX_WARNINGS = true
+JAVAC_WARNINGS_FATAL = true
 include $(BUILDDIR)/common/Defs.gmk
 
 #
--- a/make/javax/others/Makefile	Tue Sep 06 13:40:31 2011 -0700
+++ b/make/javax/others/Makefile	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 1998, 2008, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 1998, 2011, Oracle and/or its affiliates. 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
@@ -28,6 +28,7 @@
 #
 
 BUILDDIR = ../..
+JAVAC_MAX_WARNINGS = true
 include $(BUILDDIR)/common/Defs.gmk
 
 #
--- a/make/mkdemo/Makefile	Tue Sep 06 13:40:31 2011 -0700
+++ b/make/mkdemo/Makefile	Fri Sep 09 17:22:03 2011 -0700
@@ -39,9 +39,14 @@
 
 include $(BUILDDIR)/common/Subdirs.gmk
 
+TOPLEVEL_FILES =							\
+	$(DEMODIR)/README
+
 all build:: nbproject
 	$(SUBDIRS-loop)
 
+all build:: $(TOPLEVEL_FILES)
+
 nbproject:
 	$(RM) -r $(DEMODIR)/nbproject
 	$(MKDIR) -p $(DEMODIR)
@@ -54,8 +59,10 @@
 	  ( $(CD) $(DEMODIR) && $(TAR) -xf - )
 endif
 
+$(DEMODIR)/%: $(DEMOSRCDIR)/%
+	$(install-file)
+
 clean clobber::
 	$(SUBDIRS-loop)
 	$(RM) -r $(DEMODIR)
 	$(RM) -r $(DEMOCLASSDIR)
-
--- a/make/mksample/Makefile	Tue Sep 06 13:40:31 2011 -0700
+++ b/make/mksample/Makefile	Fri Sep 09 17:22:03 2011 -0700
@@ -49,8 +49,16 @@
 
 include $(BUILDDIR)/common/Subdirs.gmk
 
+TOPLEVEL_FILES =							\
+	$(SAMPLEDIR)/README
+
 all build clean clobber::
 	$(SUBDIRS-loop)
 
+all build:: $(TOPLEVEL_FILES)
+
+$(SAMPLEDIR)/%: $(SAMPLESRCDIR)/%
+	$(install-file)
+
 clobber clean ::
 	$(RM) -r $(SAMPLEDIR)
--- a/make/sun/nio/cs/FILES_java.gmk	Tue Sep 06 13:40:31 2011 -0700
+++ b/make/sun/nio/cs/FILES_java.gmk	Fri Sep 09 17:22:03 2011 -0700
@@ -29,277 +29,6 @@
 # Core character converters are built from make/java/java.
 #
 
-FILES_src = \
-	sun/io/ByteToCharDoubleByte.java \
-	sun/io/ByteToCharDBCS_ASCII.java \
-	sun/io/ByteToCharDBCS_EBCDIC.java \
-	sun/io/ByteToCharEUC.java \
-	sun/io/CharToByteDoubleByte.java \
-	sun/io/CharToByteDBCS_ASCII.java \
-	sun/io/CharToByteDBCS_EBCDIC.java \
-	sun/io/CharToByteEUC.java \
-	sun/io/ByteToCharBig5.java \
-	sun/io/ByteToCharBig5_Solaris.java \
-	sun/io/ByteToCharBig5_HKSCS.java \
-	sun/io/ByteToCharMS950_HKSCS.java \
-	sun/io/ByteToCharGB18030.java \
-	sun/io/ByteToCharGB18030DB.java \
-	sun/io/ByteToCharCp037.java \
-	sun/io/ByteToCharCp1006.java \
-	sun/io/ByteToCharCp1025.java \
-	sun/io/ByteToCharCp1026.java \
-	sun/io/ByteToCharCp1046.java \
-	sun/io/ByteToCharCp1047.java \
-	sun/io/ByteToCharCp1097.java \
-	sun/io/ByteToCharCp1098.java \
-	sun/io/ByteToCharCp1112.java \
-	sun/io/ByteToCharCp1122.java \
-	sun/io/ByteToCharCp1123.java \
-	sun/io/ByteToCharCp1124.java \
-	sun/io/ByteToCharCp1140.java \
-	sun/io/ByteToCharCp1141.java \
-	sun/io/ByteToCharCp1142.java \
-	sun/io/ByteToCharCp1143.java \
-	sun/io/ByteToCharCp1144.java \
-	sun/io/ByteToCharCp1145.java \
-	sun/io/ByteToCharCp1146.java \
-	sun/io/ByteToCharCp1147.java \
-	sun/io/ByteToCharCp1148.java \
-	sun/io/ByteToCharCp1149.java \
-	sun/io/ByteToCharCp1255.java \
-	sun/io/ByteToCharCp1256.java \
-	sun/io/ByteToCharCp1258.java \
-	sun/io/ByteToCharCp1381.java \
-	sun/io/ByteToCharCp1383.java \
-	sun/io/ByteToCharCp273.java \
-	sun/io/ByteToCharCp277.java \
-	sun/io/ByteToCharCp278.java \
-	sun/io/ByteToCharCp280.java \
-	sun/io/ByteToCharCp284.java \
-	sun/io/ByteToCharCp285.java \
-	sun/io/ByteToCharCp297.java \
-	sun/io/ByteToCharCp33722.java \
-	sun/io/ByteToCharCp420.java \
-	sun/io/ByteToCharCp424.java \
-	sun/io/ByteToCharCp437.java \
-	sun/io/ByteToCharCp500.java \
-	sun/io/ByteToCharCp737.java \
-	sun/io/ByteToCharCp775.java \
-	sun/io/ByteToCharCp833.java \
-	sun/io/ByteToCharCp834.java \
-	sun/io/ByteToCharCp838.java \
-	sun/io/ByteToCharCp850.java \
-	sun/io/ByteToCharCp852.java \
-	sun/io/ByteToCharCp855.java \
-	sun/io/ByteToCharCp856.java \
-	sun/io/ByteToCharCp857.java \
-	sun/io/ByteToCharCp858.java \
-	sun/io/ByteToCharCp860.java \
-	sun/io/ByteToCharCp861.java \
-	sun/io/ByteToCharCp862.java \
-	sun/io/ByteToCharCp863.java \
-	sun/io/ByteToCharCp864.java \
-	sun/io/ByteToCharCp865.java \
-	sun/io/ByteToCharCp866.java \
-	sun/io/ByteToCharCp868.java \
-	sun/io/ByteToCharCp869.java \
-	sun/io/ByteToCharCp870.java \
-	sun/io/ByteToCharCp871.java \
-	sun/io/ByteToCharCp874.java \
-	sun/io/ByteToCharCp875.java \
-	sun/io/ByteToCharCp918.java \
-	sun/io/ByteToCharCp921.java \
-	sun/io/ByteToCharCp922.java \
-	sun/io/ByteToCharCp930.java \
-	sun/io/ByteToCharCp933.java \
-	sun/io/ByteToCharCp935.java \
-	sun/io/ByteToCharCp937.java \
-	sun/io/ByteToCharCp939.java \
-	sun/io/ByteToCharCp942.java \
-	sun/io/ByteToCharCp942C.java \
-	sun/io/ByteToCharCp943.java \
-	sun/io/ByteToCharCp943C.java \
-	sun/io/ByteToCharCp948.java \
-	sun/io/ByteToCharCp949.java \
-	sun/io/ByteToCharCp949C.java \
-	sun/io/ByteToCharCp950.java \
-	sun/io/ByteToCharCp964.java \
-	sun/io/ByteToCharCp970.java \
-	sun/io/ByteToCharJIS0201.java \
-	sun/io/ByteToCharJIS0208.java \
-	sun/io/ByteToCharJIS0208_Solaris.java \
-	sun/io/ByteToCharJIS0212.java \
-	sun/io/ByteToCharJIS0212_Solaris.java \
-	sun/io/ByteToCharEUC_CN.java \
-	sun/io/ByteToCharEUC_JP.java \
-	sun/io/ByteToCharEUC_JP_LINUX.java \
-	sun/io/ByteToCharEUC_JP_Solaris.java \
-	sun/io/ByteToCharEUC_KR.java \
-	sun/io/ByteToCharEUC_TW.java \
-	sun/io/ByteToCharSJIS.java \
-	sun/io/ByteToCharPCK.java \
-	sun/io/ByteToCharGBK.java \
-	sun/io/ByteToCharISCII91.java \
-	sun/io/ByteToCharISO2022.java \
-	sun/io/ByteToCharISO2022CN.java \
-	sun/io/ByteToCharISO2022JP.java \
-	sun/io/ByteToCharISO2022KR.java \
-	sun/io/ByteToCharISO8859_3.java \
-	sun/io/ByteToCharISO8859_6.java \
-	sun/io/ByteToCharISO8859_8.java \
-	sun/io/ByteToCharJISAutoDetect.java \
-	sun/io/ByteToCharJohab.java \
-	sun/io/ByteToCharMS874.java \
-	sun/io/ByteToCharMS932.java \
-	sun/io/ByteToCharMS936.java \
-	sun/io/ByteToCharMS949.java \
-	sun/io/ByteToCharMS950.java \
-	sun/io/ByteToCharMacArabic.java \
-	sun/io/ByteToCharMacCentralEurope.java \
-	sun/io/ByteToCharMacCroatian.java \
-	sun/io/ByteToCharMacCyrillic.java \
-	sun/io/ByteToCharMacDingbat.java \
-	sun/io/ByteToCharMacGreek.java \
-	sun/io/ByteToCharMacHebrew.java \
-	sun/io/ByteToCharMacIceland.java \
-	sun/io/ByteToCharMacRoman.java \
-	sun/io/ByteToCharMacRomania.java \
-	sun/io/ByteToCharMacSymbol.java \
-	sun/io/ByteToCharMacThai.java \
-	sun/io/ByteToCharMacTurkish.java \
-	sun/io/ByteToCharMacUkraine.java \
-	sun/io/ByteToCharTIS620.java \
-	sun/io/CharToByteBig5.java \
-	sun/io/CharToByteBig5_Solaris.java \
-	sun/io/CharToByteBig5_HKSCS.java \
-	sun/io/CharToByteMS950_HKSCS.java \
-	sun/io/CharToByteGB18030.java \
-	sun/io/CharToByteCp037.java \
-	sun/io/CharToByteCp1006.java \
-	sun/io/CharToByteCp1025.java \
-	sun/io/CharToByteCp1026.java \
-	sun/io/CharToByteCp1046.java \
-	sun/io/CharToByteCp1047.java \
-	sun/io/CharToByteCp1097.java \
-	sun/io/CharToByteCp1098.java \
-	sun/io/CharToByteCp1112.java \
-	sun/io/CharToByteCp1122.java \
-	sun/io/CharToByteCp1123.java \
-	sun/io/CharToByteCp1124.java \
-	sun/io/CharToByteCp1140.java \
-	sun/io/CharToByteCp1141.java \
-	sun/io/CharToByteCp1142.java \
-	sun/io/CharToByteCp1143.java \
-	sun/io/CharToByteCp1144.java \
-	sun/io/CharToByteCp1145.java \
-	sun/io/CharToByteCp1146.java \
-	sun/io/CharToByteCp1147.java \
-	sun/io/CharToByteCp1148.java \
-	sun/io/CharToByteCp1149.java \
-	sun/io/CharToByteCp1255.java \
-	sun/io/CharToByteCp1256.java \
-	sun/io/CharToByteCp1258.java \
-	sun/io/CharToByteCp1381.java \
-	sun/io/CharToByteCp1383.java \
-	sun/io/CharToByteCp273.java \
-	sun/io/CharToByteCp277.java \
-	sun/io/CharToByteCp278.java \
-	sun/io/CharToByteCp280.java \
-	sun/io/CharToByteCp284.java \
-	sun/io/CharToByteCp285.java \
-	sun/io/CharToByteCp297.java \
-	sun/io/CharToByteCp33722.java \
-	sun/io/CharToByteCp420.java \
-	sun/io/CharToByteCp424.java \
-	sun/io/CharToByteCp437.java \
-	sun/io/CharToByteCp500.java \
-	sun/io/CharToByteCp737.java \
-	sun/io/CharToByteCp775.java \
-	sun/io/CharToByteCp833.java \
-	sun/io/CharToByteCp834.java \
-	sun/io/CharToByteCp838.java \
-	sun/io/CharToByteCp850.java \
-	sun/io/CharToByteCp852.java \
-	sun/io/CharToByteCp855.java \
-	sun/io/CharToByteCp856.java \
-	sun/io/CharToByteCp857.java \
-	sun/io/CharToByteCp858.java \
-	sun/io/CharToByteCp860.java \
-	sun/io/CharToByteCp861.java \
-	sun/io/CharToByteCp862.java \
-	sun/io/CharToByteCp863.java \
-	sun/io/CharToByteCp864.java \
-	sun/io/CharToByteCp865.java \
-	sun/io/CharToByteCp866.java \
-	sun/io/CharToByteCp868.java \
-	sun/io/CharToByteCp869.java \
-	sun/io/CharToByteCp870.java \
-	sun/io/CharToByteCp871.java \
-	sun/io/CharToByteCp874.java \
-	sun/io/CharToByteCp875.java \
-	sun/io/CharToByteCp918.java \
-	sun/io/CharToByteCp921.java \
-	sun/io/CharToByteCp922.java \
-	sun/io/CharToByteCp930.java \
-	sun/io/CharToByteCp933.java \
-	sun/io/CharToByteCp935.java \
-	sun/io/CharToByteCp937.java \
-	sun/io/CharToByteCp939.java \
-	sun/io/CharToByteCp942.java \
-	sun/io/CharToByteCp942C.java \
-	sun/io/CharToByteCp943.java \
-	sun/io/CharToByteCp943C.java \
-	sun/io/CharToByteCp948.java \
-	sun/io/CharToByteCp949.java \
-	sun/io/CharToByteCp949C.java \
-	sun/io/CharToByteCp950.java \
-	sun/io/CharToByteCp964.java \
-	sun/io/CharToByteCp970.java \
-	sun/io/CharToByteJIS0201.java \
-	sun/io/CharToByteJIS0208.java \
-	sun/io/CharToByteJIS0208_Solaris.java \
-	sun/io/CharToByteJIS0212.java \
-	sun/io/CharToByteJIS0212_Solaris.java \
-	sun/io/CharToByteEUC_CN.java \
-	sun/io/CharToByteEUC_JP.java \
-	sun/io/CharToByteEUC_JP_LINUX.java \
-	sun/io/CharToByteEUC_JP_Solaris.java \
-	sun/io/CharToByteEUC_KR.java \
-	sun/io/CharToByteEUC_TW.java \
-	sun/io/CharToByteSJIS.java \
-	sun/io/CharToBytePCK.java \
-	sun/io/CharToByteGBK.java \
-	sun/io/CharToByteISCII91.java \
-	sun/io/CharToByteISO2022.java \
-	sun/io/CharToByteISO2022CN_CNS.java \
-	sun/io/CharToByteISO2022CN_GB.java \
-	sun/io/CharToByteISO2022JP.java \
-	sun/io/CharToByteISO2022KR.java \
-	sun/io/CharToByteISO8859_3.java \
-	sun/io/CharToByteISO8859_6.java \
-	sun/io/CharToByteISO8859_8.java \
-	sun/io/CharToByteJohab.java \
-	sun/io/CharToByteMS874.java \
-	sun/io/CharToByteMS932.java \
-	sun/io/CharToByteMS936.java \
-	sun/io/CharToByteMS949.java \
-	sun/io/CharToByteMS950.java \
-	sun/io/CharToByteMacArabic.java \
-	sun/io/CharToByteMacCentralEurope.java \
-	sun/io/CharToByteMacCroatian.java \
-	sun/io/CharToByteMacCyrillic.java \
-	sun/io/CharToByteMacDingbat.java \
-	sun/io/CharToByteMacGreek.java \
-	sun/io/CharToByteMacHebrew.java \
-	sun/io/CharToByteMacIceland.java \
-	sun/io/CharToByteMacRoman.java \
-	sun/io/CharToByteMacRomania.java \
-	sun/io/CharToByteMacSymbol.java \
-	sun/io/CharToByteMacThai.java \
-	sun/io/CharToByteMacTurkish.java \
-	sun/io/CharToByteMacUkraine.java \
-	sun/io/CharToByteTIS620.java
-
 FILES_gen_extcs = \
 	sun/nio/cs/ext/IBM037.java \
 	sun/nio/cs/ext/IBM1006.java \
--- a/make/sun/security/Makefile	Tue Sep 06 13:40:31 2011 -0700
+++ b/make/sun/security/Makefile	Fri Sep 09 17:22:03 2011 -0700
@@ -34,6 +34,8 @@
 #
 
 BUILDDIR = ../..
+SUBDIRS_MAKEFLAGS += JAVAC_MAX_WARNINGS=true
+SUBDIRS_MAKEFLAGS += JAVAC_WARNINGS_FATAL=true
 include $(BUILDDIR)/common/Defs.gmk
 
 # build sun/security/jgss/wrapper on non-windows platform
--- a/make/sun/security/ec/Makefile	Tue Sep 06 13:40:31 2011 -0700
+++ b/make/sun/security/ec/Makefile	Fri Sep 09 17:22:03 2011 -0700
@@ -109,6 +109,9 @@
   endif
 endif
 
+JAVAC_MAX_WARNINGS=false
+JAVAC_LINT_OPTIONS=-Xlint:all,-deprecation
+JAVAC_WARNINGS_FATAL=true
 include $(BUILDDIR)/common/Defs.gmk
 
 #
--- a/make/sun/security/other/Makefile	Tue Sep 06 13:40:31 2011 -0700
+++ b/make/sun/security/other/Makefile	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 1996, 2009, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 1996, 2011, Oracle and/or its affiliates. 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
@@ -26,6 +26,9 @@
 BUILDDIR = ../../..
 PACKAGE = sun.security.other
 PRODUCT = sun
+JAVAC_MAX_WARNINGS=false
+JAVAC_LINT_OPTIONS=-Xlint:all,-deprecation
+JAVAC_WARNINGS_FATAL=true
 include $(BUILDDIR)/common/Defs.gmk
 
 #
--- a/make/sun/security/pkcs11/Makefile	Tue Sep 06 13:40:31 2011 -0700
+++ b/make/sun/security/pkcs11/Makefile	Fri Sep 09 17:22:03 2011 -0700
@@ -110,6 +110,9 @@
   endif
 endif
 
+JAVAC_MAX_WARNINGS=false
+JAVAC_LINT_OPTIONS=-Xlint:all,-deprecation
+JAVAC_WARNINGS_FATAL=true
 include $(BUILDDIR)/common/Defs.gmk
 
 #
--- a/make/tools/CharsetMapping/SingleByte-X.java.template	Tue Sep 06 13:40:31 2011 -0700
+++ b/make/tools/CharsetMapping/SingleByte-X.java.template	Fri Sep 09 17:22:03 2011 -0700
@@ -55,18 +55,6 @@
         return new SingleByte.Encoder(this, c2b, c2bIndex);
     }
 
-    public String getDecoderSingleByteMappings() {
-        return b2cTable;
-    }
-
-    public char[] getEncoderIndex2() {
-        return c2b;
-    }
-
-    public char[] getEncoderIndex1() {
-        return c2bIndex;
-    }
-
     private final static String b2cTable = $B2CTABLE$
 
     private final static char[] b2c = b2cTable.toCharArray();
--- a/make/tools/src/build/tools/generatecurrencydata/GenerateCurrencyData.java	Tue Sep 06 13:40:31 2011 -0700
+++ b/make/tools/src/build/tools/generatecurrencydata/GenerateCurrencyData.java	Fri Sep 09 17:22:03 2011 -0700
@@ -120,7 +120,7 @@
     private static int[] specialCaseOldCurrenciesNumericCode = new int[maxSpecialCases];
     private static int[] specialCaseNewCurrenciesNumericCode = new int[maxSpecialCases];
 
-    private static final int maxOtherCurrencies = 65;
+    private static final int maxOtherCurrencies = 70;
     private static int otherCurrenciesCount = 0;
     private static StringBuffer otherCurrencies = new StringBuffer();
     private static int[] otherCurrenciesDefaultFractionDigits = new int[maxOtherCurrencies];
--- a/src/share/classes/com/sun/crypto/provider/AESCrypt.java	Tue Sep 06 13:40:31 2011 -0700
+++ b/src/share/classes/com/sun/crypto/provider/AESCrypt.java	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2011, Oracle and/or its affiliates. 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
@@ -245,7 +245,7 @@
                     for (j = 0; j < 8; j++) {
                         tmp = AA[i][j];
                         AA[i][j] = AA[t][j];
-                        AA[t][j] = (byte) tmp;
+                        AA[t][j] = tmp;
                     }
                     pivot = AA[i][i];
                 }
--- a/src/share/classes/com/sun/crypto/provider/AESParameters.java	Tue Sep 06 13:40:31 2011 -0700
+++ b/src/share/classes/com/sun/crypto/provider/AESParameters.java	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2011, Oracle and/or its affiliates. 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
@@ -25,13 +25,10 @@
 
 package com.sun.crypto.provider;
 
-import java.util.*;
 import java.io.*;
-import sun.security.util.*;
 import java.security.AlgorithmParametersSpi;
 import java.security.spec.AlgorithmParameterSpec;
 import java.security.spec.InvalidParameterSpecException;
-import javax.crypto.spec.IvParameterSpec;
 
 /**
  * This class implements the parameter (IV) used with the AES algorithm
@@ -67,9 +64,15 @@
         core.init(encoded, decodingMethod);
     }
 
-    protected AlgorithmParameterSpec engineGetParameterSpec(Class paramSpec)
+    protected <T extends AlgorithmParameterSpec>
+        T engineGetParameterSpec(Class<T> paramSpec)
         throws InvalidParameterSpecException {
-        return core.getParameterSpec(paramSpec);
+        if (AlgorithmParameterSpec.class.isAssignableFrom(paramSpec)) {
+            return core.getParameterSpec(paramSpec);
+        } else {
+            throw new InvalidParameterSpecException
+                ("Inappropriate parameter Specification");
+        }
     }
 
     protected byte[] engineGetEncoded() throws IOException {
--- a/src/share/classes/com/sun/crypto/provider/BlockCipherParamsCore.java	Tue Sep 06 13:40:31 2011 -0700
+++ b/src/share/classes/com/sun/crypto/provider/BlockCipherParamsCore.java	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2011, Oracle and/or its affiliates. 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
@@ -25,7 +25,6 @@
 
 package com.sun.crypto.provider;
 
-import java.util.*;
 import java.io.*;
 import sun.security.util.*;
 import sun.misc.HexDumpEncoder;
@@ -64,7 +63,7 @@
             throw new InvalidParameterSpecException("IV not " +
                         block_size + " bytes long");
         }
-        iv = (byte[]) tmpIv.clone();
+        iv = tmpIv.clone();
     }
 
     void init(byte[] encoded) throws IOException {
@@ -90,11 +89,11 @@
         init(encoded);
     }
 
-    AlgorithmParameterSpec getParameterSpec(Class paramSpec)
+    <T extends AlgorithmParameterSpec> T getParameterSpec(Class<T> paramSpec)
         throws InvalidParameterSpecException
     {
         if (IvParameterSpec.class.isAssignableFrom(paramSpec)) {
-            return new IvParameterSpec(this.iv);
+            return paramSpec.cast(new IvParameterSpec(this.iv));
         } else {
             throw new InvalidParameterSpecException
                 ("Inappropriate parameter specification");
--- a/src/share/classes/com/sun/crypto/provider/BlowfishParameters.java	Tue Sep 06 13:40:31 2011 -0700
+++ b/src/share/classes/com/sun/crypto/provider/BlowfishParameters.java	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2011, Oracle and/or its affiliates. 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
@@ -25,13 +25,10 @@
 
 package com.sun.crypto.provider;
 
-import java.util.*;
 import java.io.*;
-import sun.security.util.*;
 import java.security.AlgorithmParametersSpi;
 import java.security.spec.AlgorithmParameterSpec;
 import java.security.spec.InvalidParameterSpecException;
-import javax.crypto.spec.IvParameterSpec;
 
 /**
  * This class implements the parameter (IV) used with the Blowfish algorithm in
@@ -68,9 +65,15 @@
         core.init(encoded, decodingMethod);
     }
 
-    protected AlgorithmParameterSpec engineGetParameterSpec(Class paramSpec)
+    protected <T extends AlgorithmParameterSpec>
+        T engineGetParameterSpec(Class<T> paramSpec)
         throws InvalidParameterSpecException {
-        return core.getParameterSpec(paramSpec);
+        if (AlgorithmParameterSpec.class.isAssignableFrom(paramSpec)) {
+            return core.getParameterSpec(paramSpec);
+        } else {
+            throw new InvalidParameterSpecException
+                ("Inappropriate parameter Specification");
+        }
     }
 
     protected byte[] engineGetEncoded() throws IOException {
--- a/src/share/classes/com/sun/crypto/provider/CipherBlockChaining.java	Tue Sep 06 13:40:31 2011 -0700
+++ b/src/share/classes/com/sun/crypto/provider/CipherBlockChaining.java	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2011, Oracle and/or its affiliates. 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
@@ -193,7 +193,7 @@
             // This is necessary because in this constellation, a
             // ciphertext block (or parts of it) will be overridden by
             // the plaintext result.
-            cipherOrig = (byte[])cipher.clone();
+            cipherOrig = cipher.clone();
         }
 
         for (; cipherOffset < endIndex;
--- a/src/share/classes/com/sun/crypto/provider/CipherCore.java	Tue Sep 06 13:40:31 2011 -0700
+++ b/src/share/classes/com/sun/crypto/provider/CipherCore.java	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2011, Oracle and/or its affiliates. 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
@@ -301,7 +301,7 @@
      */
     byte[] getIV() {
         byte[] iv = cipher.getIV();
-        return (iv == null) ? null : (byte[])iv.clone();
+        return (iv == null) ? null : iv.clone();
     }
 
     /**
@@ -475,8 +475,7 @@
         IvParameterSpec ivSpec = null;
         if (params != null) {
             try {
-                ivSpec = (IvParameterSpec)params.getParameterSpec
-                    (IvParameterSpec.class);
+                ivSpec = params.getParameterSpec(IvParameterSpec.class);
             } catch (InvalidParameterSpecException ipse) {
                 throw new InvalidAlgorithmParameterException("Wrong parameter "
                                                              + "type: IV "
@@ -832,7 +831,7 @@
         buffered = 0;
         diffBlocksize = blockSize;
         if (cipherMode != ECB_MODE) {
-            ((FeedbackCipher)cipher).reset();
+            cipher.reset();
         }
         return totalLen;
     }
--- a/src/share/classes/com/sun/crypto/provider/DESCrypt.java	Tue Sep 06 13:40:31 2011 -0700
+++ b/src/share/classes/com/sun/crypto/provider/DESCrypt.java	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2011, Oracle and/or its affiliates. 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
@@ -622,17 +622,17 @@
             // mangler function:
             // every 6 bit is fed into the sbox, which
             // produces 4-bit output
-            left ^= s0p[(int)((temp & 0x3f) ^ key[j+0])]
-                ^ s1p[(int)(((temp >>  4) & 0x3f) ^ key[j+1])]
-                ^ s2p[(int)(((temp >>  8) & 0x3f) ^ key[j+2])]
-                ^ s3p[(int)(((temp >> 12) & 0x3f) ^ key[j+3])]
-                ^ s4p[(int)(((temp >> 16) & 0x3f) ^ key[j+4])]
-                ^ s5p[(int)(((temp >> 20) & 0x3f) ^ key[j+5])]
-                ^ s6p[(int)(((temp >> 24) & 0x3f) ^ key[j+6])];
+            left ^= s0p[(temp & 0x3f) ^ key[j+0]]
+                ^ s1p[((temp >>  4) & 0x3f) ^ key[j+1]]
+                ^ s2p[((temp >>  8) & 0x3f) ^ key[j+2]]
+                ^ s3p[((temp >> 12) & 0x3f) ^ key[j+3]]
+                ^ s4p[((temp >> 16) & 0x3f) ^ key[j+4]]
+                ^ s5p[((temp >> 20) & 0x3f) ^ key[j+5]]
+                ^ s6p[((temp >> 24) & 0x3f) ^ key[j+6]];
 
             // make the last sbox input the last bit from right[0]
             temp = ((right & 1) << 5) | ((right >> 27) & 0x1f);
-            left ^= s7p[(int)(temp ^ key[j+7])];
+            left ^= s7p[temp ^ key[j+7]];
             temp = left;
             left = right;
             right = temp;
--- a/src/share/classes/com/sun/crypto/provider/DESKey.java	Tue Sep 06 13:40:31 2011 -0700
+++ b/src/share/classes/com/sun/crypto/provider/DESKey.java	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2011, Oracle and/or its affiliates. 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
@@ -78,7 +78,7 @@
     public byte[] getEncoded() {
         // Return a copy of the key, rather than a reference,
         // so that the key data cannot be modified from outside
-        return (byte[])this.key.clone();
+        return this.key.clone();
     }
 
     public String getAlgorithm() {
@@ -126,7 +126,7 @@
          throws java.io.IOException, ClassNotFoundException
     {
         s.defaultReadObject();
-        key = (byte[])key.clone();
+        key = key.clone();
     }
 
     /**
--- a/src/share/classes/com/sun/crypto/provider/DESKeyFactory.java	Tue Sep 06 13:40:31 2011 -0700
+++ b/src/share/classes/com/sun/crypto/provider/DESKeyFactory.java	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2009, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2011, Oracle and/or its affiliates. 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
@@ -92,7 +92,7 @@
      * inappropriate for the given key, or the given key cannot be processed
      * (e.g., the given key has an unrecognized algorithm or format).
      */
-    protected KeySpec engineGetKeySpec(SecretKey key, Class keySpec)
+    protected KeySpec engineGetKeySpec(SecretKey key, Class<?> keySpec)
         throws InvalidKeySpecException {
 
         try {
--- a/src/share/classes/com/sun/crypto/provider/DESParameters.java	Tue Sep 06 13:40:31 2011 -0700
+++ b/src/share/classes/com/sun/crypto/provider/DESParameters.java	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2011, Oracle and/or its affiliates. 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
@@ -25,13 +25,10 @@
 
 package com.sun.crypto.provider;
 
-import java.util.*;
 import java.io.*;
-import sun.security.util.*;
 import java.security.AlgorithmParametersSpi;
 import java.security.spec.AlgorithmParameterSpec;
 import java.security.spec.InvalidParameterSpecException;
-import javax.crypto.spec.IvParameterSpec;
 
 /**
  * This class implements the parameter (IV) used with the DES algorithm in
@@ -68,9 +65,15 @@
         core.init(encoded, decodingMethod);
     }
 
-    protected AlgorithmParameterSpec engineGetParameterSpec(Class paramSpec)
+    protected <T extends AlgorithmParameterSpec>
+        T engineGetParameterSpec(Class<T> paramSpec)
         throws InvalidParameterSpecException {
-        return core.getParameterSpec(paramSpec);
+        if (AlgorithmParameterSpec.class.isAssignableFrom(paramSpec)) {
+            return core.getParameterSpec(paramSpec);
+        } else {
+            throw new InvalidParameterSpecException
+                ("Inappropriate parameter Specification");
+        }
     }
 
     protected byte[] engineGetEncoded() throws IOException {
--- a/src/share/classes/com/sun/crypto/provider/DESedeKey.java	Tue Sep 06 13:40:31 2011 -0700
+++ b/src/share/classes/com/sun/crypto/provider/DESedeKey.java	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2011, Oracle and/or its affiliates. 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
@@ -78,7 +78,7 @@
     }
 
     public byte[] getEncoded() {
-        return (byte[])this.key.clone();
+        return this.key.clone();
     }
 
     public String getAlgorithm() {
@@ -127,7 +127,7 @@
          throws java.io.IOException, ClassNotFoundException
     {
         s.defaultReadObject();
-        key = (byte[])key.clone();
+        key = key.clone();
     }
 
     /**
--- a/src/share/classes/com/sun/crypto/provider/DESedeKeyFactory.java	Tue Sep 06 13:40:31 2011 -0700
+++ b/src/share/classes/com/sun/crypto/provider/DESedeKeyFactory.java	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2009, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2011, Oracle and/or its affiliates. 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
@@ -92,7 +92,7 @@
      * inappropriate for the given key, or the given key cannot be processed
      * (e.g., the given key has an unrecognized algorithm or format).
      */
-    protected KeySpec engineGetKeySpec(SecretKey key, Class keySpec)
+    protected KeySpec engineGetKeySpec(SecretKey key, Class<?> keySpec)
         throws InvalidKeySpecException {
 
         try {
--- a/src/share/classes/com/sun/crypto/provider/DESedeParameters.java	Tue Sep 06 13:40:31 2011 -0700
+++ b/src/share/classes/com/sun/crypto/provider/DESedeParameters.java	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2011, Oracle and/or its affiliates. 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
@@ -25,13 +25,10 @@
 
 package com.sun.crypto.provider;
 
-import java.util.*;
 import java.io.*;
-import sun.security.util.*;
 import java.security.AlgorithmParametersSpi;
 import java.security.spec.AlgorithmParameterSpec;
 import java.security.spec.InvalidParameterSpecException;
-import javax.crypto.spec.IvParameterSpec;
 
 /**
  * This class implements the parameter (IV) used with the Triple DES algorithm
@@ -67,9 +64,15 @@
         core.init(encoded, decodingMethod);
     }
 
-    protected AlgorithmParameterSpec engineGetParameterSpec(Class paramSpec)
+    protected <T extends AlgorithmParameterSpec>
+        T engineGetParameterSpec(Class<T> paramSpec)
         throws InvalidParameterSpecException {
-        return core.getParameterSpec(paramSpec);
+        if (AlgorithmParameterSpec.class.isAssignableFrom(paramSpec)) {
+            return core.getParameterSpec(paramSpec);
+        } else {
+            throw new InvalidParameterSpecException
+                ("Inappropriate parameter Specification");
+        }
     }
 
     protected byte[] engineGetEncoded() throws IOException {
--- a/src/share/classes/com/sun/crypto/provider/DESedeWrapCipher.java	Tue Sep 06 13:40:31 2011 -0700
+++ b/src/share/classes/com/sun/crypto/provider/DESedeWrapCipher.java	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004, 2009, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 2011, Oracle and/or its affiliates. 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
@@ -25,7 +25,6 @@
 
 package com.sun.crypto.provider;
 
-import java.util.Arrays;
 import java.security.*;
 import java.security.spec.*;
 import javax.crypto.*;
@@ -151,7 +150,7 @@
      * been set.
      */
     protected byte[] engineGetIV() {
-        return (iv == null? null:(byte[]) iv.clone());
+        return (iv == null) ? null : iv.clone();
     }
 
     /**
@@ -277,8 +276,7 @@
             try {
                 DESedeParameters paramsEng = new DESedeParameters();
                 paramsEng.engineInit(params.getEncoded());
-                ivSpec = (IvParameterSpec)
-                    paramsEng.engineGetParameterSpec(IvParameterSpec.class);
+                ivSpec = paramsEng.engineGetParameterSpec(IvParameterSpec.class);
             } catch (Exception ex) {
                 InvalidAlgorithmParameterException iape =
                     new InvalidAlgorithmParameterException
--- a/src/share/classes/com/sun/crypto/provider/DHKeyFactory.java	Tue Sep 06 13:40:31 2011 -0700
+++ b/src/share/classes/com/sun/crypto/provider/DHKeyFactory.java	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2009, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2011, Oracle and/or its affiliates. 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
@@ -25,8 +25,6 @@
 
 package com.sun.crypto.provider;
 
-import java.util.*;
-import java.lang.*;
 import java.security.Key;
 import java.security.PublicKey;
 import java.security.PrivateKey;
@@ -140,7 +138,8 @@
      * inappropriate for the given key, or the given key cannot be processed
      * (e.g., the given key has an unrecognized algorithm or format).
      */
-    protected KeySpec engineGetKeySpec(Key key, Class keySpec)
+    protected <T extends KeySpec>
+        T engineGetKeySpec(Key key, Class<T> keySpec)
         throws InvalidKeySpecException {
         DHParameterSpec params;
 
@@ -150,12 +149,12 @@
                 javax.crypto.interfaces.DHPublicKey dhPubKey
                     = (javax.crypto.interfaces.DHPublicKey) key;
                 params = dhPubKey.getParams();
-                return new DHPublicKeySpec(dhPubKey.getY(),
-                                           params.getP(),
-                                           params.getG());
+                return keySpec.cast(new DHPublicKeySpec(dhPubKey.getY(),
+                                                        params.getP(),
+                                                        params.getG()));
 
             } else if (X509EncodedKeySpec.class.isAssignableFrom(keySpec)) {
-                return new X509EncodedKeySpec(key.getEncoded());
+                return keySpec.cast(new X509EncodedKeySpec(key.getEncoded()));
 
             } else {
                 throw new InvalidKeySpecException
@@ -168,12 +167,12 @@
                 javax.crypto.interfaces.DHPrivateKey dhPrivKey
                     = (javax.crypto.interfaces.DHPrivateKey)key;
                 params = dhPrivKey.getParams();
-                return new DHPrivateKeySpec(dhPrivKey.getX(),
-                                            params.getP(),
-                                            params.getG());
+                return keySpec.cast(new DHPrivateKeySpec(dhPrivKey.getX(),
+                                                         params.getP(),
+                                                         params.getG()));
 
             } else if (PKCS8EncodedKeySpec.class.isAssignableFrom(keySpec)) {
-                return new PKCS8EncodedKeySpec(key.getEncoded());
+                return keySpec.cast(new PKCS8EncodedKeySpec(key.getEncoded()));
 
             } else {
                 throw new InvalidKeySpecException
@@ -208,8 +207,7 @@
                 }
                 // Convert key to spec
                 DHPublicKeySpec dhPubKeySpec
-                    = (DHPublicKeySpec)engineGetKeySpec
-                    (key, DHPublicKeySpec.class);
+                    = engineGetKeySpec(key, DHPublicKeySpec.class);
                 // Create key from spec, and return it
                 return engineGeneratePublic(dhPubKeySpec);
 
@@ -220,8 +218,7 @@
                 }
                 // Convert key to spec
                 DHPrivateKeySpec dhPrivKeySpec
-                    = (DHPrivateKeySpec)engineGetKeySpec
-                    (key, DHPrivateKeySpec.class);
+                    = engineGetKeySpec(key, DHPrivateKeySpec.class);
                 // Create key from spec, and return it
                 return engineGeneratePrivate(dhPrivKeySpec);
 
--- a/src/share/classes/com/sun/crypto/provider/DHParameterGenerator.java	Tue Sep 06 13:40:31 2011 -0700
+++ b/src/share/classes/com/sun/crypto/provider/DHParameterGenerator.java	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2011, Oracle and/or its affiliates. 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
@@ -25,7 +25,6 @@
 
 package com.sun.crypto.provider;
 
-import java.math.BigInteger;
 import java.security.*;
 import java.security.spec.*;
 import javax.crypto.spec.DHParameterSpec;
@@ -141,8 +140,7 @@
             paramGen = AlgorithmParameterGenerator.getInstance("DSA");
             paramGen.init(this.primeSize, random);
             algParams = paramGen.generateParameters();
-            dsaParamSpec = (DSAParameterSpec)
-                algParams.getParameterSpec(DSAParameterSpec.class);
+            dsaParamSpec = algParams.getParameterSpec(DSAParameterSpec.class);
 
             DHParameterSpec dhParamSpec;
             if (this.exponentSize > 0) {
--- a/src/share/classes/com/sun/crypto/provider/DHParameters.java	Tue Sep 06 13:40:31 2011 -0700
+++ b/src/share/classes/com/sun/crypto/provider/DHParameters.java	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2011, Oracle and/or its affiliates. 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
@@ -25,7 +25,6 @@
 
 package com.sun.crypto.provider;
 
-import java.util.*;
 import java.io.*;
 import sun.security.util.*;
 import java.math.BigInteger;
@@ -95,11 +94,12 @@
             engineInit(params);
     }
 
-    protected AlgorithmParameterSpec engineGetParameterSpec(Class paramSpec)
+    protected <T extends AlgorithmParameterSpec>
+        T engineGetParameterSpec(Class<T> paramSpec)
         throws InvalidParameterSpecException {
 
         if (DHParameterSpec.class.isAssignableFrom(paramSpec)) {
-            return new DHParameterSpec(this.p, this.g, this.l);
+            return paramSpec.cast(new DHParameterSpec(this.p, this.g, this.l));
         } else {
             throw new InvalidParameterSpecException
                 ("Inappropriate parameter Specification");
--- a/src/share/classes/com/sun/crypto/provider/DHPrivateKey.java	Tue Sep 06 13:40:31 2011 -0700
+++ b/src/share/classes/com/sun/crypto/provider/DHPrivateKey.java	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2011, Oracle and/or its affiliates. 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
@@ -31,7 +31,6 @@
 import java.security.PrivateKey;
 import java.security.InvalidKeyException;
 import java.security.ProviderException;
-import javax.crypto.*;
 import javax.crypto.spec.DHParameterSpec;
 import sun.security.util.*;
 
@@ -182,7 +181,7 @@
 
             // ignore OPTIONAL attributes
 
-            this.encodedKey = (byte[])encodedKey.clone();
+            this.encodedKey = encodedKey.clone();
 
         } catch (NumberFormatException e) {
             InvalidKeyException ike = new InvalidKeyException(
@@ -256,7 +255,7 @@
                 return null;
             }
         }
-        return (byte[])this.encodedKey.clone();
+        return this.encodedKey.clone();
     }
 
     /**
--- a/src/share/classes/com/sun/crypto/provider/DHPublicKey.java	Tue Sep 06 13:40:31 2011 -0700
+++ b/src/share/classes/com/sun/crypto/provider/DHPublicKey.java	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2011, Oracle and/or its affiliates. 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
@@ -29,10 +29,8 @@
 import java.math.BigInteger;
 import java.security.KeyRep;
 import java.security.InvalidKeyException;
-import java.security.InvalidAlgorithmParameterException;
 import java.security.ProviderException;
 import java.security.PublicKey;
-import javax.crypto.*;
 import javax.crypto.spec.DHParameterSpec;
 import sun.security.util.*;
 
@@ -174,7 +172,7 @@
                 throw new InvalidKeyException("Excess key data");
             }
 
-            this.encodedKey = (byte[])encodedKey.clone();
+            this.encodedKey = encodedKey.clone();
 
         } catch (NumberFormatException e) {
             throw new InvalidKeyException("Private-value length too big");
@@ -237,7 +235,7 @@
                 return null;
             }
         }
-        return (byte[])this.encodedKey.clone();
+        return this.encodedKey.clone();
     }
 
     /**
--- a/src/share/classes/com/sun/crypto/provider/EncryptedPrivateKeyInfo.java	Tue Sep 06 13:40:31 2011 -0700
+++ b/src/share/classes/com/sun/crypto/provider/EncryptedPrivateKeyInfo.java	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2011, Oracle and/or its affiliates. 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
@@ -77,7 +77,7 @@
         if (seq[1].data.available() != 0)
             throw new IOException("encryptedData field overrun");
 
-        this.encoded = (byte[])encoded.clone();
+        this.encoded = encoded.clone();
     }
 
     /**
@@ -86,7 +86,7 @@
      */
     EncryptedPrivateKeyInfo(AlgorithmId algid, byte[] encryptedData) {
         this.algid = algid;
-        this.encryptedData = (byte[])encryptedData.clone();
+        this.encryptedData = encryptedData.clone();
         this.encoded = null; // lazy generation of encoding
     }
 
@@ -101,7 +101,7 @@
      * Returns the encrypted data.
      */
     byte[] getEncryptedData() {
-        return (byte[])this.encryptedData.clone();
+        return this.encryptedData.clone();
     }
 
     /**
@@ -110,7 +110,7 @@
     byte[] getEncoded()
         throws IOException
     {
-        if (this.encoded != null) return (byte[])this.encoded.clone();
+        if (this.encoded != null) return this.encoded.clone();
 
         DerOutputStream out = new DerOutputStream();
         DerOutputStream tmp = new DerOutputStream();
@@ -125,6 +125,6 @@
         out.write(DerValue.tag_Sequence, tmp);
         this.encoded = out.toByteArray();
 
-        return (byte[])this.encoded.clone();
+        return this.encoded.clone();
     }
 }
--- a/src/share/classes/com/sun/crypto/provider/HmacCore.java	Tue Sep 06 13:40:31 2011 -0700
+++ b/src/share/classes/com/sun/crypto/provider/HmacCore.java	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2009, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2011, Oracle and/or its affiliates. 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
@@ -78,8 +78,8 @@
     private HmacCore(HmacCore other) throws CloneNotSupportedException {
         this.md = (MessageDigest)other.md.clone();
         this.blockLen = other.blockLen;
-        this.k_ipad = (byte[])other.k_ipad.clone();
-        this.k_opad = (byte[])other.k_opad.clone();
+        this.k_ipad = other.k_ipad.clone();
+        this.k_opad = other.k_opad.clone();
         this.first = other.first;
     }
 
--- a/src/share/classes/com/sun/crypto/provider/JceKeyStore.java	Tue Sep 06 13:40:31 2011 -0700
+++ b/src/share/classes/com/sun/crypto/provider/JceKeyStore.java	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2011, Oracle and/or its affiliates. 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
@@ -38,9 +38,7 @@
 import java.security.UnrecoverableKeyException;
 import java.security.cert.Certificate;
 import java.security.cert.CertificateFactory;
-import java.security.cert.X509Certificate;
 import java.security.cert.CertificateException;
-import java.security.spec.InvalidKeySpecException;
 import javax.crypto.SealedObject;
 
 /**
@@ -87,7 +85,7 @@
      * Private keys and certificates are stored in a hashtable.
      * Hash entries are keyed by alias names.
      */
-    private Hashtable entries = new Hashtable();
+    private Hashtable<String, Object> entries = new Hashtable<String, Object>();
 
     /**
      * Returns the key associated with the given alias, using the given
@@ -156,7 +154,7 @@
 
         if ((entry instanceof PrivateKeyEntry)
             && (((PrivateKeyEntry)entry).chain != null)) {
-            chain = (Certificate[])((PrivateKeyEntry)entry).chain.clone();
+            chain = ((PrivateKeyEntry)entry).chain.clone();
         }
 
         return chain;
@@ -262,7 +260,7 @@
                     // clone the chain
                     if ((chain != null) &&
                         (chain.length !=0)) {
-                        entry.chain = (Certificate[])chain.clone();
+                        entry.chain = chain.clone();
                     } else {
                         entry.chain = null;
                     }
@@ -316,10 +314,10 @@
             PrivateKeyEntry entry = new PrivateKeyEntry();
             entry.date = new Date();
 
-            entry.protectedKey = (byte[])key.clone();
+            entry.protectedKey = key.clone();
             if ((chain != null) &&
                 (chain.length != 0)) {
-                entry.chain = (Certificate[])chain.clone();
+                entry.chain = chain.clone();
             } else {
                 entry.chain = null;
             }
@@ -384,7 +382,7 @@
      *
      * @return enumeration of the alias names
      */
-    public Enumeration engineAliases() {
+    public Enumeration<String> engineAliases() {
         return entries.keys();
     }
 
@@ -462,9 +460,9 @@
     public String engineGetCertificateAlias(Certificate cert) {
         Certificate certElem;
 
-        Enumeration e = entries.keys();
+        Enumeration<String> e = entries.keys();
         while (e.hasMoreElements()) {
-            String alias = (String)e.nextElement();
+            String alias = e.nextElement();
             Object entry = entries.get(alias);
             if (entry instanceof TrustedCertEntry) {
                 certElem = ((TrustedCertEntry)entry).cert;
@@ -560,10 +558,10 @@
 
                 dos.writeInt(entries.size());
 
-                Enumeration e = entries.keys();
+                Enumeration<String> e = entries.keys();
                 while (e.hasMoreElements()) {
 
-                    String alias = (String)e.nextElement();
+                    String alias = e.nextElement();
                     Object entry = entries.get(alias);
 
                     if (entry instanceof PrivateKeyEntry) {
@@ -677,7 +675,7 @@
             DataInputStream dis;
             MessageDigest md = null;
             CertificateFactory cf = null;
-            Hashtable cfs = null;
+            Hashtable<String, CertificateFactory> cfs = null;
             ByteArrayInputStream bais = null;
             byte[] encoded = null;
 
@@ -713,7 +711,7 @@
                     cf = CertificateFactory.getInstance("X509");
                 } else {
                     // version 2
-                    cfs = new Hashtable(3);
+                    cfs = new Hashtable<String, CertificateFactory>(3);
                 }
 
                 entries.clear();
@@ -761,7 +759,7 @@
                                 String certType = dis.readUTF();
                                 if (cfs.containsKey(certType)) {
                                 // reuse certificate factory
-                                    cf = (CertificateFactory)cfs.get(certType);
+                                    cf = cfs.get(certType);
                                 } else {
                                 // create new certificate factory
                                     cf = CertificateFactory.getInstance(
@@ -803,7 +801,7 @@
                             String certType = dis.readUTF();
                             if (cfs.containsKey(certType)) {
                                 // reuse certificate factory
-                                cf = (CertificateFactory)cfs.get(certType);
+                                cf = cfs.get(certType);
                             } else {
                                 // create new certificate factory
                                 cf = CertificateFactory.getInstance(certType);
--- a/src/share/classes/com/sun/crypto/provider/KeyProtector.java	Tue Sep 06 13:40:31 2011 -0700
+++ b/src/share/classes/com/sun/crypto/provider/KeyProtector.java	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2011, Oracle and/or its affiliates. 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
@@ -25,14 +25,8 @@
 
 package com.sun.crypto.provider;
 
-import java.io.UnsupportedEncodingException;
 import java.io.IOException;
 import java.io.Serializable;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.io.ObjectInputStream.GetField;
 import java.security.Security;
 import java.security.Key;
 import java.security.PrivateKey;
@@ -42,22 +36,14 @@
 import java.security.GeneralSecurityException;
 import java.security.NoSuchAlgorithmException;
 import java.security.NoSuchProviderException;
-import java.security.SecureRandom;
 import java.security.UnrecoverableKeyException;
-import java.security.InvalidParameterException;
-import java.security.InvalidAlgorithmParameterException;
-import java.security.InvalidKeyException;
 import java.security.AlgorithmParameters;
-import java.security.spec.InvalidParameterSpecException;
-import java.security.spec.InvalidKeySpecException;
 import java.security.spec.PKCS8EncodedKeySpec;
 
 import javax.crypto.Cipher;
 import javax.crypto.CipherSpi;
 import javax.crypto.SecretKey;
-import javax.crypto.NoSuchPaddingException;
 import javax.crypto.IllegalBlockSizeException;
-import javax.crypto.BadPaddingException;
 import javax.crypto.SealedObject;
 import javax.crypto.spec.*;
 import sun.security.x509.AlgorithmId;
@@ -127,7 +113,7 @@
         PBEWithMD5AndTripleDESCipher cipher;
         cipher = new PBEWithMD5AndTripleDESCipher();
         cipher.engineInit(Cipher.ENCRYPT_MODE, sKey, pbeSpec, null);
-        byte[] plain = (byte[])key.getEncoded();
+        byte[] plain = key.getEncoded();
         byte[] encrKey = cipher.engineDoFinal(plain, 0, plain.length);
 
         // wrap encrypted private key in EncryptedPrivateKeyInfo
@@ -169,8 +155,8 @@
                 AlgorithmParameters pbeParams =
                     AlgorithmParameters.getInstance("PBE");
                 pbeParams.init(encodedParams);
-                PBEParameterSpec pbeSpec = (PBEParameterSpec)
-                    pbeParams.getParameterSpec(PBEParameterSpec.class);
+                PBEParameterSpec pbeSpec =
+                        pbeParams.getParameterSpec(PBEParameterSpec.class);
 
                 // create PBE key from password
                 PBEKeySpec pbeKeySpec = new PBEKeySpec(this.password);
--- a/src/share/classes/com/sun/crypto/provider/OAEPParameters.java	Tue Sep 06 13:40:31 2011 -0700
+++ b/src/share/classes/com/sun/crypto/provider/OAEPParameters.java	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2011, Oracle and/or its affiliates. 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
@@ -26,7 +26,6 @@
 package com.sun.crypto.provider;
 
 import java.math.BigInteger;
-import java.util.*;
 import java.io.*;
 import sun.security.util.*;
 import sun.security.x509.*;
@@ -180,11 +179,13 @@
         engineInit(encoded);
     }
 
-    protected AlgorithmParameterSpec engineGetParameterSpec(Class paramSpec)
+    protected <T extends AlgorithmParameterSpec>
+        T engineGetParameterSpec(Class<T> paramSpec)
         throws InvalidParameterSpecException {
         if (OAEPParameterSpec.class.isAssignableFrom(paramSpec)) {
-            return new OAEPParameterSpec(mdName, "MGF1", mgfSpec,
-                new PSource.PSpecified(p));
+            return paramSpec.cast(
+                new OAEPParameterSpec(mdName, "MGF1", mgfSpec,
+                                      new PSource.PSpecified(p)));
         } else {
             throw new InvalidParameterSpecException
                 ("Inappropriate parameter specification");
--- a/src/share/classes/com/sun/crypto/provider/PBECipherCore.java	Tue Sep 06 13:40:31 2011 -0700
+++ b/src/share/classes/com/sun/crypto/provider/PBECipherCore.java	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2011, Oracle and/or its affiliates. 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
@@ -25,7 +25,6 @@
 
 package com.sun.crypto.provider;
 
-import java.io.UnsupportedEncodingException;
 import java.security.*;
 import java.security.spec.*;
 import javax.crypto.*;
@@ -326,8 +325,7 @@
         PBEParameterSpec pbeSpec = null;
         if (params != null) {
             try {
-                pbeSpec = (PBEParameterSpec) params.getParameterSpec
-                    (PBEParameterSpec.class);
+                pbeSpec = params.getParameterSpec(PBEParameterSpec.class);
             } catch (InvalidParameterSpecException ipse) {
                 throw new InvalidAlgorithmParameterException("Wrong parameter "
                                                              + "type: PBE "
--- a/src/share/classes/com/sun/crypto/provider/PBEKey.java	Tue Sep 06 13:40:31 2011 -0700
+++ b/src/share/classes/com/sun/crypto/provider/PBEKey.java	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2011, Oracle and/or its affiliates. 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
@@ -25,7 +25,6 @@
 
 package com.sun.crypto.provider;
 
-import java.io.UnsupportedEncodingException;
 import java.security.KeyRep;
 import java.security.spec.InvalidKeySpecException;
 import javax.crypto.SecretKey;
@@ -69,7 +68,7 @@
     }
 
     public byte[] getEncoded() {
-        return (byte[])this.key.clone();
+        return this.key.clone();
     }
 
     public String getAlgorithm() {
@@ -118,7 +117,7 @@
          throws java.io.IOException, ClassNotFoundException
     {
         s.defaultReadObject();
-        key = (byte[])key.clone();
+        key = key.clone();
     }
 
 
--- a/src/share/classes/com/sun/crypto/provider/PBEKeyFactory.java	Tue Sep 06 13:40:31 2011 -0700
+++ b/src/share/classes/com/sun/crypto/provider/PBEKeyFactory.java	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2009, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2011, Oracle and/or its affiliates. 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
@@ -25,7 +25,6 @@
 
 package com.sun.crypto.provider;
 
-import java.io.UnsupportedEncodingException;
 import java.security.InvalidKeyException;
 import java.security.spec.KeySpec;
 import java.security.spec.InvalidKeySpecException;
@@ -132,7 +131,7 @@
      * inappropriate for the given key, or the given key cannot be processed
      * (e.g., the given key has an unrecognized algorithm or format).
      */
-    protected KeySpec engineGetKeySpec(SecretKey key, Class keySpecCl)
+    protected KeySpec engineGetKeySpec(SecretKey key, Class<?> keySpecCl)
         throws InvalidKeySpecException {
         if ((key instanceof SecretKey)
             && (validTypes.contains(key.getAlgorithm().toUpperCase()))
--- a/src/share/classes/com/sun/crypto/provider/PBEParameters.java	Tue Sep 06 13:40:31 2011 -0700
+++ b/src/share/classes/com/sun/crypto/provider/PBEParameters.java	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2011, Oracle and/or its affiliates. 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
@@ -25,7 +25,6 @@
 
 package com.sun.crypto.provider;
 
-import java.util.*;
 import java.io.*;
 import java.math.BigInteger;
 import java.security.AlgorithmParametersSpi;
@@ -65,7 +64,7 @@
            throw new InvalidParameterSpecException
                ("Inappropriate parameter specification");
        }
-       this.salt = (byte[])((PBEParameterSpec)paramSpec).getSalt().clone();
+       this.salt = ((PBEParameterSpec)paramSpec).getSalt().clone();
        this.iCount = ((PBEParameterSpec)paramSpec).getIterationCount();
     }
 
@@ -98,11 +97,12 @@
         engineInit(encoded);
     }
 
-    protected AlgorithmParameterSpec engineGetParameterSpec(Class paramSpec)
+    protected <T extends AlgorithmParameterSpec>
+            T engineGetParameterSpec(Class<T> paramSpec)
         throws InvalidParameterSpecException
     {
         if (PBEParameterSpec.class.isAssignableFrom(paramSpec)) {
-            return new PBEParameterSpec(this.salt, this.iCount);
+            return paramSpec.cast(new PBEParameterSpec(this.salt, this.iCount));
         } else {
             throw new InvalidParameterSpecException
                 ("Inappropriate parameter specification");
--- a/src/share/classes/com/sun/crypto/provider/PBKDF2HmacSHA1Factory.java	Tue Sep 06 13:40:31 2011 -0700
+++ b/src/share/classes/com/sun/crypto/provider/PBKDF2HmacSHA1Factory.java	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2009, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2011, Oracle and/or its affiliates. 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
@@ -25,14 +25,12 @@
 
 package com.sun.crypto.provider;
 
-import java.io.*;
 import java.security.InvalidKeyException;
 import java.security.spec.KeySpec;
 import java.security.spec.InvalidKeySpecException;
 import javax.crypto.SecretKey;
 import javax.crypto.SecretKeyFactorySpi;
 import javax.crypto.spec.PBEKeySpec;
-import javax.crypto.spec.SecretKeySpec;
 
 /**
  * This class implements a key factory for PBE keys derived using
@@ -88,7 +86,7 @@
      * given key cannot be processed (e.g., the given key has an
      * unrecognized algorithm or format).
      */
-    protected KeySpec engineGetKeySpec(SecretKey key, Class keySpecCl)
+    protected KeySpec engineGetKeySpec(SecretKey key, Class<?> keySpecCl)
         throws InvalidKeySpecException {
         if (key instanceof javax.crypto.interfaces.PBEKey) {
             // Check if requested key spec is amongst the valid ones
--- a/src/share/classes/com/sun/crypto/provider/PBKDF2KeyImpl.java	Tue Sep 06 13:40:31 2011 -0700
+++ b/src/share/classes/com/sun/crypto/provider/PBKDF2KeyImpl.java	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2011, Oracle and/or its affiliates. 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
@@ -133,6 +133,7 @@
             byte[] ti = new byte[hlen];
             // SecretKeySpec cannot be used, since password can be empty here.
             SecretKey macKey = new SecretKey() {
+                private static final long serialVersionUID = 7874493593505141603L;
                 @Override
                 public String getAlgorithm() {
                     return prf.getAlgorithm();
@@ -194,7 +195,7 @@
     }
 
     public byte[] getEncoded() {
-        return (byte[]) key.clone();
+        return key.clone();
     }
 
     public String getAlgorithm() {
@@ -206,7 +207,7 @@
     }
 
     public char[] getPassword() {
-        return (char[]) passwd.clone();
+        return passwd.clone();
     }
 
     public byte[] getSalt() {
@@ -268,7 +269,7 @@
     protected void finalize() throws Throwable {
         try {
             if (this.passwd != null) {
-                java.util.Arrays.fill(this.passwd, (char) '0');
+                java.util.Arrays.fill(this.passwd, '0');
                 this.passwd = null;
             }
             if (this.key != null) {
--- a/src/share/classes/com/sun/crypto/provider/PCBC.java	Tue Sep 06 13:40:31 2011 -0700
+++ b/src/share/classes/com/sun/crypto/provider/PCBC.java	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2011, Oracle and/or its affiliates. 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
@@ -145,7 +145,7 @@
         for (; plainOffset < endIndex;
              plainOffset += blockSize, cipherOffset += blockSize) {
             for (i=0; i<blockSize; i++) {
-                k[i] ^= (byte)(plain[i+plainOffset]);
+                k[i] ^= plain[i+plainOffset];
             }
             embeddedCipher.encryptBlock(k, 0, cipher, cipherOffset);
             for (i = 0; i < blockSize; i++) {
--- a/src/share/classes/com/sun/crypto/provider/RC2Cipher.java	Tue Sep 06 13:40:31 2011 -0700
+++ b/src/share/classes/com/sun/crypto/provider/RC2Cipher.java	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2009, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2011, Oracle and/or its affiliates. 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
@@ -98,8 +98,8 @@
             throws InvalidKeyException, InvalidAlgorithmParameterException {
         if (params != null && params.getAlgorithm().equals("RC2")) {
             try {
-                RC2ParameterSpec rc2Params = (RC2ParameterSpec)
-                    params.getParameterSpec(RC2ParameterSpec.class);
+                RC2ParameterSpec rc2Params =
+                        params.getParameterSpec(RC2ParameterSpec.class);
                 engineInit(opmode, key, rc2Params, random);
             } catch (InvalidParameterSpecException ipse) {
                 throw new InvalidAlgorithmParameterException
--- a/src/share/classes/com/sun/crypto/provider/RC2Parameters.java	Tue Sep 06 13:40:31 2011 -0700
+++ b/src/share/classes/com/sun/crypto/provider/RC2Parameters.java	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2011, Oracle and/or its affiliates. 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
@@ -55,7 +55,6 @@
  * @author Sean Mullan
  * @since 1.5
  */
-
 public final class RC2Parameters extends AlgorithmParametersSpi {
 
     // TABLE[EKB] from section 6 of RFC 2268, used to convert effective key
@@ -177,13 +176,14 @@
         engineInit(encoded);
     }
 
-    protected AlgorithmParameterSpec engineGetParameterSpec(Class paramSpec)
+    protected <T extends AlgorithmParameterSpec>
+            T engineGetParameterSpec(Class<T> paramSpec)
         throws InvalidParameterSpecException {
 
         if (RC2ParameterSpec.class.isAssignableFrom(paramSpec)) {
-            return (iv == null ?
-                    new RC2ParameterSpec(effectiveKeySize) :
-                    new RC2ParameterSpec(effectiveKeySize, iv));
+            return paramSpec.cast((iv == null ?
+                                   new RC2ParameterSpec(effectiveKeySize) :
+                                   new RC2ParameterSpec(effectiveKeySize, iv)));
         } else {
             throw new InvalidParameterSpecException
                 ("Inappropriate parameter specification");
--- a/src/share/classes/com/sun/crypto/provider/RSACipher.java	Tue Sep 06 13:40:31 2011 -0700
+++ b/src/share/classes/com/sun/crypto/provider/RSACipher.java	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2009, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2011, Oracle and/or its affiliates. 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
@@ -227,8 +227,8 @@
             init(opmode, key, random, null);
         } else {
             try {
-                OAEPParameterSpec spec = (OAEPParameterSpec)
-                    params.getParameterSpec(OAEPParameterSpec.class);
+                OAEPParameterSpec spec =
+                        params.getParameterSpec(OAEPParameterSpec.class);
                 init(opmode, key, random, spec);
             } catch (InvalidParameterSpecException ipse) {
                 InvalidAlgorithmParameterException iape =
--- a/src/share/classes/com/sun/crypto/provider/SunJCE.java	Tue Sep 06 13:40:31 2011 -0700
+++ b/src/share/classes/com/sun/crypto/provider/SunJCE.java	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2011, Oracle and/or its affiliates. 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
@@ -27,11 +27,6 @@
 
 import java.security.AccessController;
 import java.security.Provider;
-import java.security.PrivilegedAction;
-import java.security.cert.*;
-import java.net.URL;
-import java.io.ByteArrayInputStream;
-import java.security.CodeSource;
 import java.security.SecureRandom;
 
 
@@ -105,352 +100,353 @@
             "|OFB72|OFB80|OFB88|OFB96|OFB104|OFB112|OFB120|OFB128";
         final String BLOCK_PADS = "NOPADDING|PKCS5PADDING|ISO10126PADDING";
 
-        AccessController.doPrivileged(new java.security.PrivilegedAction() {
+        AccessController.doPrivileged(
+            new java.security.PrivilegedAction<Object>() {
                 public Object run() {
 
-                /*
-                 * Cipher engines
-                 */
-                put("Cipher.RSA", "com.sun.crypto.provider.RSACipher");
-                put("Cipher.RSA SupportedModes", "ECB");
-                put("Cipher.RSA SupportedPaddings",
-                        "NOPADDING|PKCS1PADDING|OAEPWITHMD5ANDMGF1PADDING"
-                        + "|OAEPWITHSHA1ANDMGF1PADDING"
-                        + "|OAEPWITHSHA-1ANDMGF1PADDING"
-                        + "|OAEPWITHSHA-256ANDMGF1PADDING"
-                        + "|OAEPWITHSHA-384ANDMGF1PADDING"
-                        + "|OAEPWITHSHA-512ANDMGF1PADDING");
-                put("Cipher.RSA SupportedKeyClasses",
-                        "java.security.interfaces.RSAPublicKey" +
-                        "|java.security.interfaces.RSAPrivateKey");
+                    /*
+                     * Cipher engines
+                     */
+                    put("Cipher.RSA", "com.sun.crypto.provider.RSACipher");
+                    put("Cipher.RSA SupportedModes", "ECB");
+                    put("Cipher.RSA SupportedPaddings",
+                            "NOPADDING|PKCS1PADDING|OAEPWITHMD5ANDMGF1PADDING"
+                            + "|OAEPWITHSHA1ANDMGF1PADDING"
+                            + "|OAEPWITHSHA-1ANDMGF1PADDING"
+                            + "|OAEPWITHSHA-256ANDMGF1PADDING"
+                            + "|OAEPWITHSHA-384ANDMGF1PADDING"
+                            + "|OAEPWITHSHA-512ANDMGF1PADDING");
+                    put("Cipher.RSA SupportedKeyClasses",
+                            "java.security.interfaces.RSAPublicKey" +
+                            "|java.security.interfaces.RSAPrivateKey");
 
-                put("Cipher.DES", "com.sun.crypto.provider.DESCipher");
-                put("Cipher.DES SupportedModes", BLOCK_MODES);
-                put("Cipher.DES SupportedPaddings", BLOCK_PADS);
-                put("Cipher.DES SupportedKeyFormats", "RAW");
+                    put("Cipher.DES", "com.sun.crypto.provider.DESCipher");
+                    put("Cipher.DES SupportedModes", BLOCK_MODES);
+                    put("Cipher.DES SupportedPaddings", BLOCK_PADS);
+                    put("Cipher.DES SupportedKeyFormats", "RAW");
 
-                put("Cipher.DESede", "com.sun.crypto.provider.DESedeCipher");
-                put("Alg.Alias.Cipher.TripleDES", "DESede");
-                put("Cipher.DESede SupportedModes", BLOCK_MODES);
-                put("Cipher.DESede SupportedPaddings", BLOCK_PADS);
-                put("Cipher.DESede SupportedKeyFormats", "RAW");
+                    put("Cipher.DESede", "com.sun.crypto.provider.DESedeCipher");
+                    put("Alg.Alias.Cipher.TripleDES", "DESede");
+                    put("Cipher.DESede SupportedModes", BLOCK_MODES);
+                    put("Cipher.DESede SupportedPaddings", BLOCK_PADS);
+                    put("Cipher.DESede SupportedKeyFormats", "RAW");
 
-                put("Cipher.DESedeWrap",
-                    "com.sun.crypto.provider.DESedeWrapCipher");
-                put("Cipher.DESedeWrap SupportedModes", "CBC");
-                put("Cipher.DESedeWrap SupportedPaddings", "NOPADDING");
-                put("Cipher.DESedeWrap SupportedKeyFormats", "RAW");
+                    put("Cipher.DESedeWrap",
+                        "com.sun.crypto.provider.DESedeWrapCipher");
+                    put("Cipher.DESedeWrap SupportedModes", "CBC");
+                    put("Cipher.DESedeWrap SupportedPaddings", "NOPADDING");
+                    put("Cipher.DESedeWrap SupportedKeyFormats", "RAW");
 
-                put("Cipher.PBEWithMD5AndDES",
-                    "com.sun.crypto.provider.PBEWithMD5AndDESCipher");
-                put("Alg.Alias.Cipher.OID."+OID_PKCS5_MD5_DES,
-                    "PBEWithMD5AndDES");
-                put("Alg.Alias.Cipher."+OID_PKCS5_MD5_DES,
-                    "PBEWithMD5AndDES");
-                put("Cipher.PBEWithMD5AndTripleDES",
-                    "com.sun.crypto.provider.PBEWithMD5AndTripleDESCipher");
-                put("Cipher.PBEWithSHA1AndRC2_40",
-                    "com.sun.crypto.provider.PKCS12PBECipherCore$" +
-                    "PBEWithSHA1AndRC2_40");
-                put("Alg.Alias.Cipher.OID." + OID_PKCS12_RC2_40,
-                    "PBEWithSHA1AndRC2_40");
-                put("Alg.Alias.Cipher." + OID_PKCS12_RC2_40,
-                    "PBEWithSHA1AndRC2_40");
-                put("Cipher.PBEWithSHA1AndDESede",
-                    "com.sun.crypto.provider.PKCS12PBECipherCore$" +
-                    "PBEWithSHA1AndDESede");
-                put("Alg.Alias.Cipher.OID." + OID_PKCS12_DESede,
-                    "PBEWithSHA1AndDESede");
-                put("Alg.Alias.Cipher." + OID_PKCS12_DESede,
-                    "PBEWithSHA1AndDESede");
+                    put("Cipher.PBEWithMD5AndDES",
+                        "com.sun.crypto.provider.PBEWithMD5AndDESCipher");
+                    put("Alg.Alias.Cipher.OID."+OID_PKCS5_MD5_DES,
+                        "PBEWithMD5AndDES");
+                    put("Alg.Alias.Cipher."+OID_PKCS5_MD5_DES,
+                        "PBEWithMD5AndDES");
+                    put("Cipher.PBEWithMD5AndTripleDES",
+                        "com.sun.crypto.provider.PBEWithMD5AndTripleDESCipher");
+                    put("Cipher.PBEWithSHA1AndRC2_40",
+                        "com.sun.crypto.provider.PKCS12PBECipherCore$" +
+                        "PBEWithSHA1AndRC2_40");
+                    put("Alg.Alias.Cipher.OID." + OID_PKCS12_RC2_40,
+                        "PBEWithSHA1AndRC2_40");
+                    put("Alg.Alias.Cipher." + OID_PKCS12_RC2_40,
+                        "PBEWithSHA1AndRC2_40");
+                    put("Cipher.PBEWithSHA1AndDESede",
+                        "com.sun.crypto.provider.PKCS12PBECipherCore$" +
+                        "PBEWithSHA1AndDESede");
+                    put("Alg.Alias.Cipher.OID." + OID_PKCS12_DESede,
+                        "PBEWithSHA1AndDESede");
+                    put("Alg.Alias.Cipher." + OID_PKCS12_DESede,
+                        "PBEWithSHA1AndDESede");
 
-                put("Cipher.Blowfish",
-                    "com.sun.crypto.provider.BlowfishCipher");
-                put("Cipher.Blowfish SupportedModes", BLOCK_MODES);
-                put("Cipher.Blowfish SupportedPaddings", BLOCK_PADS);
-                put("Cipher.Blowfish SupportedKeyFormats", "RAW");
+                    put("Cipher.Blowfish",
+                        "com.sun.crypto.provider.BlowfishCipher");
+                    put("Cipher.Blowfish SupportedModes", BLOCK_MODES);
+                    put("Cipher.Blowfish SupportedPaddings", BLOCK_PADS);
+                    put("Cipher.Blowfish SupportedKeyFormats", "RAW");
 
-                put("Cipher.AES", "com.sun.crypto.provider.AESCipher");
-                put("Alg.Alias.Cipher.Rijndael", "AES");
-                put("Cipher.AES SupportedModes", BLOCK_MODES128);
-                put("Cipher.AES SupportedPaddings", BLOCK_PADS);
-                put("Cipher.AES SupportedKeyFormats", "RAW");
+                    put("Cipher.AES", "com.sun.crypto.provider.AESCipher");
+                    put("Alg.Alias.Cipher.Rijndael", "AES");
+                    put("Cipher.AES SupportedModes", BLOCK_MODES128);
+                    put("Cipher.AES SupportedPaddings", BLOCK_PADS);
+                    put("Cipher.AES SupportedKeyFormats", "RAW");
 
-                put("Cipher.AESWrap", "com.sun.crypto.provider.AESWrapCipher");
-                put("Cipher.AESWrap SupportedModes", "ECB");
-                put("Cipher.AESWrap SupportedPaddings", "NOPADDING");
-                put("Cipher.AESWrap SupportedKeyFormats", "RAW");
+                    put("Cipher.AESWrap", "com.sun.crypto.provider.AESWrapCipher");
+                    put("Cipher.AESWrap SupportedModes", "ECB");
+                    put("Cipher.AESWrap SupportedPaddings", "NOPADDING");
+                    put("Cipher.AESWrap SupportedKeyFormats", "RAW");
 
-                put("Cipher.RC2",
-                    "com.sun.crypto.provider.RC2Cipher");
-                put("Cipher.RC2 SupportedModes", BLOCK_MODES);
-                put("Cipher.RC2 SupportedPaddings", BLOCK_PADS);
-                put("Cipher.RC2 SupportedKeyFormats", "RAW");
+                    put("Cipher.RC2",
+                        "com.sun.crypto.provider.RC2Cipher");
+                    put("Cipher.RC2 SupportedModes", BLOCK_MODES);
+                    put("Cipher.RC2 SupportedPaddings", BLOCK_PADS);
+                    put("Cipher.RC2 SupportedKeyFormats", "RAW");
 
-                put("Cipher.ARCFOUR",
-                    "com.sun.crypto.provider.ARCFOURCipher");
-                put("Alg.Alias.Cipher.RC4", "ARCFOUR");
-                put("Cipher.ARCFOUR SupportedModes", "ECB");
-                put("Cipher.ARCFOUR SupportedPaddings", "NOPADDING");
-                put("Cipher.ARCFOUR SupportedKeyFormats", "RAW");
+                    put("Cipher.ARCFOUR",
+                        "com.sun.crypto.provider.ARCFOURCipher");
+                    put("Alg.Alias.Cipher.RC4", "ARCFOUR");
+                    put("Cipher.ARCFOUR SupportedModes", "ECB");
+                    put("Cipher.ARCFOUR SupportedPaddings", "NOPADDING");
+                    put("Cipher.ARCFOUR SupportedKeyFormats", "RAW");
 
-                /*
-                 *  Key(pair) Generator engines
-                 */
-                put("KeyGenerator.DES",
-                    "com.sun.crypto.provider.DESKeyGenerator");
+                    /*
+                     *  Key(pair) Generator engines
+                     */
+                    put("KeyGenerator.DES",
+                        "com.sun.crypto.provider.DESKeyGenerator");
 
-                put("KeyGenerator.DESede",
-                    "com.sun.crypto.provider.DESedeKeyGenerator");
-                put("Alg.Alias.KeyGenerator.TripleDES", "DESede");
+                    put("KeyGenerator.DESede",
+                        "com.sun.crypto.provider.DESedeKeyGenerator");
+                    put("Alg.Alias.KeyGenerator.TripleDES", "DESede");
 
-                put("KeyGenerator.Blowfish",
-                    "com.sun.crypto.provider.BlowfishKeyGenerator");
+                    put("KeyGenerator.Blowfish",
+                        "com.sun.crypto.provider.BlowfishKeyGenerator");
 
-                put("KeyGenerator.AES",
-                    "com.sun.crypto.provider.AESKeyGenerator");
-                put("Alg.Alias.KeyGenerator.Rijndael", "AES");
+                    put("KeyGenerator.AES",
+                        "com.sun.crypto.provider.AESKeyGenerator");
+                    put("Alg.Alias.KeyGenerator.Rijndael", "AES");
 
-                put("KeyGenerator.RC2",
-                    "com.sun.crypto.provider.KeyGeneratorCore$" +
-                    "RC2KeyGenerator");
-                put("KeyGenerator.ARCFOUR",
-                    "com.sun.crypto.provider.KeyGeneratorCore$" +
-                    "ARCFOURKeyGenerator");
-                put("Alg.Alias.KeyGenerator.RC4", "ARCFOUR");
+                    put("KeyGenerator.RC2",
+                        "com.sun.crypto.provider.KeyGeneratorCore$" +
+                        "RC2KeyGenerator");
+                    put("KeyGenerator.ARCFOUR",
+                        "com.sun.crypto.provider.KeyGeneratorCore$" +
+                        "ARCFOURKeyGenerator");
+                    put("Alg.Alias.KeyGenerator.RC4", "ARCFOUR");
 
-                put("KeyGenerator.HmacMD5",
-                    "com.sun.crypto.provider.HmacMD5KeyGenerator");
+                    put("KeyGenerator.HmacMD5",
+                        "com.sun.crypto.provider.HmacMD5KeyGenerator");
 
-                put("KeyGenerator.HmacSHA1",
-                    "com.sun.crypto.provider.HmacSHA1KeyGenerator");
+                    put("KeyGenerator.HmacSHA1",
+                        "com.sun.crypto.provider.HmacSHA1KeyGenerator");
 
-                put("KeyGenerator.HmacSHA256",
-                    "com.sun.crypto.provider.KeyGeneratorCore$HmacSHA256KG");
-                put("KeyGenerator.HmacSHA384",
-                    "com.sun.crypto.provider.KeyGeneratorCore$HmacSHA384KG");
-                put("KeyGenerator.HmacSHA512",
-                    "com.sun.crypto.provider.KeyGeneratorCore$HmacSHA512KG");
+                    put("KeyGenerator.HmacSHA256",
+                        "com.sun.crypto.provider.KeyGeneratorCore$HmacSHA256KG");
+                    put("KeyGenerator.HmacSHA384",
+                        "com.sun.crypto.provider.KeyGeneratorCore$HmacSHA384KG");
+                    put("KeyGenerator.HmacSHA512",
+                        "com.sun.crypto.provider.KeyGeneratorCore$HmacSHA512KG");
 
-                put("KeyPairGenerator.DiffieHellman",
-                    "com.sun.crypto.provider.DHKeyPairGenerator");
-                put("Alg.Alias.KeyPairGenerator.DH", "DiffieHellman");
-                put("Alg.Alias.KeyPairGenerator.OID."+OID_PKCS3,
-                    "DiffieHellman");
-                put("Alg.Alias.KeyPairGenerator."+OID_PKCS3,
-                    "DiffieHellman");
-                /*
-                 * Algorithm parameter generation engines
-                 */
-                put("AlgorithmParameterGenerator.DiffieHellman",
-                    "com.sun.crypto.provider.DHParameterGenerator");
-                put("Alg.Alias.AlgorithmParameterGenerator.DH",
-                    "DiffieHellman");
-                put("Alg.Alias.AlgorithmParameterGenerator.OID."+OID_PKCS3,
-                    "DiffieHellman");
-                put("Alg.Alias.AlgorithmParameterGenerator."+OID_PKCS3,
-                    "DiffieHellman");
+                    put("KeyPairGenerator.DiffieHellman",
+                        "com.sun.crypto.provider.DHKeyPairGenerator");
+                    put("Alg.Alias.KeyPairGenerator.DH", "DiffieHellman");
+                    put("Alg.Alias.KeyPairGenerator.OID."+OID_PKCS3,
+                        "DiffieHellman");
+                    put("Alg.Alias.KeyPairGenerator."+OID_PKCS3,
+                        "DiffieHellman");
+                    /*
+                     * Algorithm parameter generation engines
+                     */
+                    put("AlgorithmParameterGenerator.DiffieHellman",
+                        "com.sun.crypto.provider.DHParameterGenerator");
+                    put("Alg.Alias.AlgorithmParameterGenerator.DH",
+                        "DiffieHellman");
+                    put("Alg.Alias.AlgorithmParameterGenerator.OID."+OID_PKCS3,
+                        "DiffieHellman");
+                    put("Alg.Alias.AlgorithmParameterGenerator."+OID_PKCS3,
+                        "DiffieHellman");
 
-                /*
-                 * Key Agreement engines
-                 */
-                put("KeyAgreement.DiffieHellman",
-                    "com.sun.crypto.provider.DHKeyAgreement");
-                put("Alg.Alias.KeyAgreement.DH", "DiffieHellman");
-                put("Alg.Alias.KeyAgreement.OID."+OID_PKCS3, "DiffieHellman");
-                put("Alg.Alias.KeyAgreement."+OID_PKCS3, "DiffieHellman");
+                    /*
+                     * Key Agreement engines
+                     */
+                    put("KeyAgreement.DiffieHellman",
+                        "com.sun.crypto.provider.DHKeyAgreement");
+                    put("Alg.Alias.KeyAgreement.DH", "DiffieHellman");
+                    put("Alg.Alias.KeyAgreement.OID."+OID_PKCS3, "DiffieHellman");
+                    put("Alg.Alias.KeyAgreement."+OID_PKCS3, "DiffieHellman");
 
-                put("KeyAgreement.DiffieHellman SupportedKeyClasses",
-                    "javax.crypto.interfaces.DHPublicKey" +
-                    "|javax.crypto.interfaces.DHPrivateKey");
+                    put("KeyAgreement.DiffieHellman SupportedKeyClasses",
+                        "javax.crypto.interfaces.DHPublicKey" +
+                        "|javax.crypto.interfaces.DHPrivateKey");
 
-                /*
-                 * Algorithm Parameter engines
-                 */
-                put("AlgorithmParameters.DiffieHellman",
-                    "com.sun.crypto.provider.DHParameters");
-                put("Alg.Alias.AlgorithmParameters.DH", "DiffieHellman");
-                put("Alg.Alias.AlgorithmParameters.OID."+OID_PKCS3,
-                    "DiffieHellman");
-                put("Alg.Alias.AlgorithmParameters."+OID_PKCS3,
-                    "DiffieHellman");
+                    /*
+                     * Algorithm Parameter engines
+                     */
+                    put("AlgorithmParameters.DiffieHellman",
+                        "com.sun.crypto.provider.DHParameters");
+                    put("Alg.Alias.AlgorithmParameters.DH", "DiffieHellman");
+                    put("Alg.Alias.AlgorithmParameters.OID."+OID_PKCS3,
+                        "DiffieHellman");
+                    put("Alg.Alias.AlgorithmParameters."+OID_PKCS3,
+                        "DiffieHellman");
 
-                put("AlgorithmParameters.DES",
-                    "com.sun.crypto.provider.DESParameters");
+                    put("AlgorithmParameters.DES",
+                        "com.sun.crypto.provider.DESParameters");
 
-                put("AlgorithmParameters.DESede",
-                    "com.sun.crypto.provider.DESedeParameters");
-                put("Alg.Alias.AlgorithmParameters.TripleDES", "DESede");
+                    put("AlgorithmParameters.DESede",
+                        "com.sun.crypto.provider.DESedeParameters");
+                    put("Alg.Alias.AlgorithmParameters.TripleDES", "DESede");
 
-                put("AlgorithmParameters.PBE",
-                    "com.sun.crypto.provider.PBEParameters");
+                    put("AlgorithmParameters.PBE",
+                        "com.sun.crypto.provider.PBEParameters");
 
-                put("AlgorithmParameters.PBEWithMD5AndDES",
-                    "com.sun.crypto.provider.PBEParameters");
-                put("Alg.Alias.AlgorithmParameters.OID."+OID_PKCS5_MD5_DES,
-                    "PBEWithMD5AndDES");
-                put("Alg.Alias.AlgorithmParameters."+OID_PKCS5_MD5_DES,
-                    "PBEWithMD5AndDES");
+                    put("AlgorithmParameters.PBEWithMD5AndDES",
+                        "com.sun.crypto.provider.PBEParameters");
+                    put("Alg.Alias.AlgorithmParameters.OID."+OID_PKCS5_MD5_DES,
+                        "PBEWithMD5AndDES");
+                    put("Alg.Alias.AlgorithmParameters."+OID_PKCS5_MD5_DES,
+                        "PBEWithMD5AndDES");
 
-                put("AlgorithmParameters.PBEWithMD5AndTripleDES",
-                    "com.sun.crypto.provider.PBEParameters");
+                    put("AlgorithmParameters.PBEWithMD5AndTripleDES",
+                        "com.sun.crypto.provider.PBEParameters");
 
-                put("AlgorithmParameters.PBEWithSHA1AndDESede",
-                    "com.sun.crypto.provider.PBEParameters");
-                put("Alg.Alias.AlgorithmParameters.OID."+OID_PKCS12_DESede,
-                    "PBEWithSHA1AndDESede");
-                put("Alg.Alias.AlgorithmParameters."+OID_PKCS12_DESede,
-                    "PBEWithSHA1AndDESede");
+                    put("AlgorithmParameters.PBEWithSHA1AndDESede",
+                        "com.sun.crypto.provider.PBEParameters");
+                    put("Alg.Alias.AlgorithmParameters.OID."+OID_PKCS12_DESede,
+                        "PBEWithSHA1AndDESede");
+                    put("Alg.Alias.AlgorithmParameters."+OID_PKCS12_DESede,
+                        "PBEWithSHA1AndDESede");
 
-                put("AlgorithmParameters.PBEWithSHA1AndRC2_40",
-                    "com.sun.crypto.provider.PBEParameters");
-                put("Alg.Alias.AlgorithmParameters.OID."+OID_PKCS12_RC2_40,
-                    "PBEWithSHA1AndRC2_40");
-                put("Alg.Alias.AlgorithmParameters." + OID_PKCS12_RC2_40,
-                    "PBEWithSHA1AndRC2_40");
+                    put("AlgorithmParameters.PBEWithSHA1AndRC2_40",
+                        "com.sun.crypto.provider.PBEParameters");
+                    put("Alg.Alias.AlgorithmParameters.OID."+OID_PKCS12_RC2_40,
+                        "PBEWithSHA1AndRC2_40");
+                    put("Alg.Alias.AlgorithmParameters." + OID_PKCS12_RC2_40,
+                        "PBEWithSHA1AndRC2_40");
 
-                put("AlgorithmParameters.Blowfish",
-                    "com.sun.crypto.provider.BlowfishParameters");
+                    put("AlgorithmParameters.Blowfish",
+                        "com.sun.crypto.provider.BlowfishParameters");
 
-                put("AlgorithmParameters.AES",
-                    "com.sun.crypto.provider.AESParameters");
-                put("Alg.Alias.AlgorithmParameters.Rijndael", "AES");
+                    put("AlgorithmParameters.AES",
+                        "com.sun.crypto.provider.AESParameters");
+                    put("Alg.Alias.AlgorithmParameters.Rijndael", "AES");
 
 
-                put("AlgorithmParameters.RC2",
-                    "com.sun.crypto.provider.RC2Parameters");
+                    put("AlgorithmParameters.RC2",
+                        "com.sun.crypto.provider.RC2Parameters");
 
-                put("AlgorithmParameters.OAEP",
-                    "com.sun.crypto.provider.OAEPParameters");
+                    put("AlgorithmParameters.OAEP",
+                        "com.sun.crypto.provider.OAEPParameters");
 
 
-                /*
-                 * Key factories
-                 */
-                put("KeyFactory.DiffieHellman",
-                    "com.sun.crypto.provider.DHKeyFactory");
-                put("Alg.Alias.KeyFactory.DH", "DiffieHellman");
-                put("Alg.Alias.KeyFactory.OID."+OID_PKCS3,
-                    "DiffieHellman");
-                put("Alg.Alias.KeyFactory."+OID_PKCS3, "DiffieHellman");
-                /*
-                 * Secret-key factories
-                 */
-                put("SecretKeyFactory.DES",
-                    "com.sun.crypto.provider.DESKeyFactory");
+                    /*
+                     * Key factories
+                     */
+                    put("KeyFactory.DiffieHellman",
+                        "com.sun.crypto.provider.DHKeyFactory");
+                    put("Alg.Alias.KeyFactory.DH", "DiffieHellman");
+                    put("Alg.Alias.KeyFactory.OID."+OID_PKCS3,
+                        "DiffieHellman");
+                    put("Alg.Alias.KeyFactory."+OID_PKCS3, "DiffieHellman");
+                    /*
+                     * Secret-key factories
+                     */
+                    put("SecretKeyFactory.DES",
+                        "com.sun.crypto.provider.DESKeyFactory");
 
-                put("SecretKeyFactory.DESede",
-                    "com.sun.crypto.provider.DESedeKeyFactory");
-                put("Alg.Alias.SecretKeyFactory.TripleDES", "DESede");
+                    put("SecretKeyFactory.DESede",
+                        "com.sun.crypto.provider.DESedeKeyFactory");
+                    put("Alg.Alias.SecretKeyFactory.TripleDES", "DESede");
 
-                put("SecretKeyFactory.PBEWithMD5AndDES",
-                    "com.sun.crypto.provider.PBEKeyFactory$PBEWithMD5AndDES"
-                    );
-                put("Alg.Alias.SecretKeyFactory.OID."+OID_PKCS5_MD5_DES,
-                    "PBEWithMD5AndDES");
-                put("Alg.Alias.SecretKeyFactory."+OID_PKCS5_MD5_DES,
-                    "PBEWithMD5AndDES");
+                    put("SecretKeyFactory.PBEWithMD5AndDES",
+                        "com.sun.crypto.provider.PBEKeyFactory$PBEWithMD5AndDES"
+                        );
+                    put("Alg.Alias.SecretKeyFactory.OID."+OID_PKCS5_MD5_DES,
+                        "PBEWithMD5AndDES");
+                    put("Alg.Alias.SecretKeyFactory."+OID_PKCS5_MD5_DES,
+                        "PBEWithMD5AndDES");
 
-                put("Alg.Alias.SecretKeyFactory.PBE",
-                    "PBEWithMD5AndDES");
+                    put("Alg.Alias.SecretKeyFactory.PBE",
+                        "PBEWithMD5AndDES");
 
-                /*
-                 * Internal in-house crypto algorithm used for
-                 * the JCEKS keystore type.  Since this was developed
-                 * internally, there isn't an OID corresponding to this
-                 * algorithm.
-                 */
-                put("SecretKeyFactory.PBEWithMD5AndTripleDES",
-                    "com.sun.crypto.provider.PBEKeyFactory$" +
-                    "PBEWithMD5AndTripleDES"
-                    );
+                    /*
+                     * Internal in-house crypto algorithm used for
+                     * the JCEKS keystore type.  Since this was developed
+                     * internally, there isn't an OID corresponding to this
+                     * algorithm.
+                     */
+                    put("SecretKeyFactory.PBEWithMD5AndTripleDES",
+                        "com.sun.crypto.provider.PBEKeyFactory$" +
+                        "PBEWithMD5AndTripleDES"
+                        );
 
-                put("SecretKeyFactory.PBEWithSHA1AndDESede",
-                    "com.sun.crypto.provider.PBEKeyFactory$PBEWithSHA1AndDESede"
-                    );
-                put("Alg.Alias.SecretKeyFactory.OID."+OID_PKCS12_DESede,
-                    "PBEWithSHA1AndDESede");
-                put("Alg.Alias.SecretKeyFactory." + OID_PKCS12_DESede,
-                    "PBEWithSHA1AndDESede");
+                    put("SecretKeyFactory.PBEWithSHA1AndDESede",
+                        "com.sun.crypto.provider.PBEKeyFactory$PBEWithSHA1AndDESede"
+                        );
+                    put("Alg.Alias.SecretKeyFactory.OID."+OID_PKCS12_DESede,
+                        "PBEWithSHA1AndDESede");
+                    put("Alg.Alias.SecretKeyFactory." + OID_PKCS12_DESede,
+                        "PBEWithSHA1AndDESede");
 
-                put("SecretKeyFactory.PBEWithSHA1AndRC2_40",
-                    "com.sun.crypto.provider.PBEKeyFactory$PBEWithSHA1AndRC2_40"
-                    );
-                put("Alg.Alias.SecretKeyFactory.OID." + OID_PKCS12_RC2_40,
-                    "PBEWithSHA1AndRC2_40");
-                put("Alg.Alias.SecretKeyFactory." + OID_PKCS12_RC2_40,
-                    "PBEWithSHA1AndRC2_40");
+                    put("SecretKeyFactory.PBEWithSHA1AndRC2_40",
+                        "com.sun.crypto.provider.PBEKeyFactory$PBEWithSHA1AndRC2_40"
+                        );
+                    put("Alg.Alias.SecretKeyFactory.OID." + OID_PKCS12_RC2_40,
+                        "PBEWithSHA1AndRC2_40");
+                    put("Alg.Alias.SecretKeyFactory." + OID_PKCS12_RC2_40,
+                        "PBEWithSHA1AndRC2_40");
 
-                put("SecretKeyFactory.PBKDF2WithHmacSHA1",
-                    "com.sun.crypto.provider.PBKDF2HmacSHA1Factory");
-                put("Alg.Alias.SecretKeyFactory.OID." + OID_PKCS5_PBKDF2,
-                    "PBKDF2WithHmacSHA1");
-                put("Alg.Alias.SecretKeyFactory." + OID_PKCS5_PBKDF2,
-                    "PBKDF2WithHmacSHA1");
+                    put("SecretKeyFactory.PBKDF2WithHmacSHA1",
+                        "com.sun.crypto.provider.PBKDF2HmacSHA1Factory");
+                    put("Alg.Alias.SecretKeyFactory.OID." + OID_PKCS5_PBKDF2,
+                        "PBKDF2WithHmacSHA1");
+                    put("Alg.Alias.SecretKeyFactory." + OID_PKCS5_PBKDF2,
+                        "PBKDF2WithHmacSHA1");
 
-                /*
-                 * MAC
-                 */
-                put("Mac.HmacMD5", "com.sun.crypto.provider.HmacMD5");
-                put("Mac.HmacSHA1", "com.sun.crypto.provider.HmacSHA1");
-                put("Mac.HmacSHA256",
-                    "com.sun.crypto.provider.HmacCore$HmacSHA256");
-                put("Mac.HmacSHA384",
-                    "com.sun.crypto.provider.HmacCore$HmacSHA384");
-                put("Mac.HmacSHA512",
-                    "com.sun.crypto.provider.HmacCore$HmacSHA512");
-                put("Mac.HmacPBESHA1",
-                    "com.sun.crypto.provider.HmacPKCS12PBESHA1");
+                    /*
+                     * MAC
+                     */
+                    put("Mac.HmacMD5", "com.sun.crypto.provider.HmacMD5");
+                    put("Mac.HmacSHA1", "com.sun.crypto.provider.HmacSHA1");
+                    put("Mac.HmacSHA256",
+                        "com.sun.crypto.provider.HmacCore$HmacSHA256");
+                    put("Mac.HmacSHA384",
+                        "com.sun.crypto.provider.HmacCore$HmacSHA384");
+                    put("Mac.HmacSHA512",
+                        "com.sun.crypto.provider.HmacCore$HmacSHA512");
+                    put("Mac.HmacPBESHA1",
+                        "com.sun.crypto.provider.HmacPKCS12PBESHA1");
 
-                put("Mac.SslMacMD5",
-                    "com.sun.crypto.provider.SslMacCore$SslMacMD5");
-                put("Mac.SslMacSHA1",
-                    "com.sun.crypto.provider.SslMacCore$SslMacSHA1");
+                    put("Mac.SslMacMD5",
+                        "com.sun.crypto.provider.SslMacCore$SslMacMD5");
+                    put("Mac.SslMacSHA1",
+                        "com.sun.crypto.provider.SslMacCore$SslMacSHA1");
 
-                put("Mac.HmacMD5 SupportedKeyFormats", "RAW");
-                put("Mac.HmacSHA1 SupportedKeyFormats", "RAW");
-                put("Mac.HmacSHA256 SupportedKeyFormats", "RAW");
-                put("Mac.HmacSHA384 SupportedKeyFormats", "RAW");
-                put("Mac.HmacSHA512 SupportedKeyFormats", "RAW");
-                put("Mac.HmacPBESHA1 SupportedKeyFormats", "RAW");
-                put("Mac.SslMacMD5 SupportedKeyFormats", "RAW");
-                put("Mac.SslMacSHA1 SupportedKeyFormats", "RAW");
+                    put("Mac.HmacMD5 SupportedKeyFormats", "RAW");
+                    put("Mac.HmacSHA1 SupportedKeyFormats", "RAW");
+                    put("Mac.HmacSHA256 SupportedKeyFormats", "RAW");
+                    put("Mac.HmacSHA384 SupportedKeyFormats", "RAW");
+                    put("Mac.HmacSHA512 SupportedKeyFormats", "RAW");
+                    put("Mac.HmacPBESHA1 SupportedKeyFormats", "RAW");
+                    put("Mac.SslMacMD5 SupportedKeyFormats", "RAW");
+                    put("Mac.SslMacSHA1 SupportedKeyFormats", "RAW");
 
-                /*
-                 * KeyStore
-                 */
-                put("KeyStore.JCEKS", "com.sun.crypto.provider.JceKeyStore");
+                    /*
+                     * KeyStore
+                     */
+                    put("KeyStore.JCEKS", "com.sun.crypto.provider.JceKeyStore");
 
-                /*
-                 * SSL/TLS mechanisms
-                 *
-                 * These are strictly internal implementations and may
-                 * be changed at any time.  These names were chosen
-                 * because PKCS11/SunPKCS11 does not yet have TLS1.2
-                 * mechanisms, and it will cause calls to come here.
-                 */
-                put("KeyGenerator.SunTlsPrf",
-                        "com.sun.crypto.provider.TlsPrfGenerator$V10");
-                put("KeyGenerator.SunTls12Prf",
-                        "com.sun.crypto.provider.TlsPrfGenerator$V12");
+                    /*
+                     * SSL/TLS mechanisms
+                     *
+                     * These are strictly internal implementations and may
+                     * be changed at any time.  These names were chosen
+                     * because PKCS11/SunPKCS11 does not yet have TLS1.2
+                     * mechanisms, and it will cause calls to come here.
+                     */
+                    put("KeyGenerator.SunTlsPrf",
+                            "com.sun.crypto.provider.TlsPrfGenerator$V10");
+                    put("KeyGenerator.SunTls12Prf",
+                            "com.sun.crypto.provider.TlsPrfGenerator$V12");
 
-                put("KeyGenerator.SunTlsMasterSecret",
-                    "com.sun.crypto.provider.TlsMasterSecretGenerator");
-                put("Alg.Alias.KeyGenerator.SunTls12MasterSecret",
-                    "SunTlsMasterSecret");
+                    put("KeyGenerator.SunTlsMasterSecret",
+                        "com.sun.crypto.provider.TlsMasterSecretGenerator");
+                    put("Alg.Alias.KeyGenerator.SunTls12MasterSecret",
+                        "SunTlsMasterSecret");
 
-                put("KeyGenerator.SunTlsKeyMaterial",
-                    "com.sun.crypto.provider.TlsKeyMaterialGenerator");
-                put("Alg.Alias.KeyGenerator.SunTls12KeyMaterial",
-                    "SunTlsKeyMaterial");
+                    put("KeyGenerator.SunTlsKeyMaterial",
+                        "com.sun.crypto.provider.TlsKeyMaterialGenerator");
+                    put("Alg.Alias.KeyGenerator.SunTls12KeyMaterial",
+                        "SunTlsKeyMaterial");
 
-                put("KeyGenerator.SunTlsRsaPremasterSecret",
-                    "com.sun.crypto.provider.TlsRsaPremasterSecretGenerator");
-                put("Alg.Alias.KeyGenerator.SunTls12RsaPremasterSecret",
-                    "SunTlsRsaPremasterSecret");
+                    put("KeyGenerator.SunTlsRsaPremasterSecret",
+                        "com.sun.crypto.provider.TlsRsaPremasterSecretGenerator");
+                    put("Alg.Alias.KeyGenerator.SunTls12RsaPremasterSecret",
+                        "SunTlsRsaPremasterSecret");
 
-                return null;
-            }
-        });
+                    return null;
+                }
+            });
     }
 }
--- a/src/share/classes/com/sun/crypto/provider/TlsKeyMaterialGenerator.java	Tue Sep 06 13:40:31 2011 -0700
+++ b/src/share/classes/com/sun/crypto/provider/TlsKeyMaterialGenerator.java	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2011, Oracle and/or its affiliates. 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
@@ -31,7 +31,6 @@
 import javax.crypto.*;
 import javax.crypto.spec.*;
 
-import sun.security.internal.interfaces.TlsMasterSecret;
 import sun.security.internal.spec.*;
 
 import static com.sun.crypto.provider.TlsPrfGenerator.*;
--- a/src/share/classes/com/sun/crypto/provider/TlsMasterSecretGenerator.java	Tue Sep 06 13:40:31 2011 -0700
+++ b/src/share/classes/com/sun/crypto/provider/TlsMasterSecretGenerator.java	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2011, Oracle and/or its affiliates. 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
@@ -140,6 +140,7 @@
     }
 
     private static final class TlsMasterSecretKey implements TlsMasterSecret {
+        private static final long serialVersionUID = 1019571680375368880L;
 
         private byte[] key;
         private final int majorVersion, minorVersion;
--- a/src/share/classes/com/sun/jndi/cosnaming/CNBindingEnumeration.java	Tue Sep 06 13:40:31 2011 -0700
+++ b/src/share/classes/com/sun/jndi/cosnaming/CNBindingEnumeration.java	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2005, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2011, Oracle and/or its affiliates. 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
@@ -32,8 +32,6 @@
 import java.util.Hashtable;
 
 import org.omg.CosNaming.*;
-import org.omg.CosNaming.NamingContextPackage.*;
-import org.omg.CORBA.*;
 
 /**
   * Implements the JNDI NamingEnumeration interface for COS
@@ -44,7 +42,8 @@
   * @author Rosanna Lee
   */
 
-final class CNBindingEnumeration implements NamingEnumeration {
+final class CNBindingEnumeration
+        implements NamingEnumeration<javax.naming.Binding> {
 
     private static final int DEFAULT_BATCHSIZE = 100;
     private BindingListHolder _bindingList; // list of bindings
@@ -52,105 +51,105 @@
     private int counter;                    // pointer in _bindingList
     private int batchsize = DEFAULT_BATCHSIZE;  // how many to ask for each time
     private CNCtx _ctx;                     // ctx to list
-    private Hashtable _env;                 // environment for getObjectInstance
+    private Hashtable<?,?> _env;            // environment for getObjectInstance
     private boolean more = false;           // iterator done?
     private boolean isLookedUpCtx = false;  // iterating on a context beneath this context ?
 
-  /**
-    * Creates a CNBindingEnumeration object.
-    * @param ctx Context to enumerate
-    */
-  CNBindingEnumeration(CNCtx ctx, boolean isLookedUpCtx, Hashtable env) {
-    // Get batch size to use
-    String batch = (env != null ?
-        (String)env.get(javax.naming.Context.BATCHSIZE) : null);
-    if (batch != null) {
-        try {
-            batchsize = Integer.parseInt(batch);
-        } catch (NumberFormatException e) {
-            throw new IllegalArgumentException("Batch size not numeric: " + batch);
+    /**
+     * Creates a CNBindingEnumeration object.
+     * @param ctx Context to enumerate
+     */
+    CNBindingEnumeration(CNCtx ctx, boolean isLookedUpCtx, Hashtable<?,?> env) {
+        // Get batch size to use
+        String batch = (env != null ?
+            (String)env.get(javax.naming.Context.BATCHSIZE) : null);
+        if (batch != null) {
+            try {
+                batchsize = Integer.parseInt(batch);
+            } catch (NumberFormatException e) {
+                throw new IllegalArgumentException("Batch size not numeric: " + batch);
+            }
+        }
+        _ctx = ctx;
+        _ctx.incEnumCount();
+        this.isLookedUpCtx = isLookedUpCtx;
+        _env = env;
+        _bindingList = new BindingListHolder();
+        BindingIteratorHolder _bindingIterH = new BindingIteratorHolder();
+
+        // Perform listing and request that bindings be returned in _bindingIter
+        // Upon return,_bindingList returns a zero length list
+        _ctx._nc.list(0, _bindingList, _bindingIterH);
+
+        _bindingIter = _bindingIterH.value;
+
+        // Get first batch using _bindingIter
+        if (_bindingIter != null) {
+            more = _bindingIter.next_n(batchsize, _bindingList);
+        } else {
+            more = false;
+        }
+        counter = 0;
+    }
+
+    /**
+     * Returns the next binding in the list.
+     * @exception NamingException any naming exception.
+     */
+
+    public javax.naming.Binding next() throws NamingException {
+        if (more && counter >= _bindingList.value.length) {
+            getMore();
+        }
+        if (more && counter < _bindingList.value.length) {
+            org.omg.CosNaming.Binding bndg = _bindingList.value[counter];
+            counter++;
+            return mapBinding(bndg);
+        } else {
+            throw new NoSuchElementException();
         }
     }
-    _ctx = ctx;
-    _ctx.incEnumCount();
-    this.isLookedUpCtx = isLookedUpCtx;
-    _env = env;
-    _bindingList = new BindingListHolder();
-    BindingIteratorHolder _bindingIterH = new BindingIteratorHolder();
 
-    // Perform listing and request that bindings be returned in _bindingIter
-    // Upon return,_bindingList returns a zero length list
-    _ctx._nc.list(0, _bindingList, _bindingIterH);
 
-    _bindingIter = _bindingIterH.value;
-
-    // Get first batch using _bindingIter
-    if (_bindingIter != null) {
-        more = _bindingIter.next_n(batchsize, _bindingList);
-    } else {
-        more = false;
-    }
-    counter = 0;
-  }
-
-  /**
-    * Returns the next binding in the list.
-    * @exception NamingException any naming exception.
-    */
-
-  public java.lang.Object next() throws NamingException {
-      if (more && counter >= _bindingList.value.length) {
-          getMore();
-      }
-      if (more && counter < _bindingList.value.length) {
-          org.omg.CosNaming.Binding bndg = _bindingList.value[counter];
-          counter++;
-          return mapBinding(bndg);
-      } else {
-          throw new NoSuchElementException();
-      }
-  }
-
-
-  /**
+    /**
     * Returns true or false depending on whether there are more bindings.
     * @return boolean value
     */
 
-  public boolean hasMore() throws NamingException {
-      // If there's more, check whether current bindingList has been exhausted,
-      // and if so, try to get more.
-      // If no more, just say so.
-      return more ? (counter < _bindingList.value.length || getMore()) : false;
-  }
+    public boolean hasMore() throws NamingException {
+        // If there's more, check whether current bindingList has been exhausted,
+        // and if so, try to get more.
+        // If no more, just say so.
+        return more ? (counter < _bindingList.value.length || getMore()) : false;
+    }
 
-  /**
-    * Returns true or false depending on whether there are more bindings.
-    * Need to define this to satisfy the Enumeration api requirement.
-    * @return boolean value
-    */
+    /**
+     * Returns true or false depending on whether there are more bindings.
+     * Need to define this to satisfy the Enumeration api requirement.
+     * @return boolean value
+     */
 
-  public boolean hasMoreElements() {
-      try {
-          return hasMore();
-      } catch (NamingException e) {
-          return false;
-      }
-  }
+    public boolean hasMoreElements() {
+        try {
+            return hasMore();
+        } catch (NamingException e) {
+            return false;
+        }
+    }
 
-  /**
+    /**
     * Returns the next binding in the list.
     * @exception NoSuchElementException Thrown when the end of the
     * list is reached.
     */
 
-    public java.lang.Object nextElement() {
+    public javax.naming.Binding nextElement() {
         try {
             return next();
         } catch (NamingException ne) {
             throw new NoSuchElementException();
         }
-  }
+    }
 
     public void close() throws NamingException {
         more = false;
@@ -197,7 +196,7 @@
         return more;
     }
 
-  /**
+    /**
     * Constructs a JNDI Binding object from the COS Naming binding
     * object.
     * @exception NameNotFound No objects under the name.
@@ -232,5 +231,5 @@
         String fullName = CNNameParser.cosNameToInsString(comps);
         jbndg.setNameInNamespace(fullName);
         return jbndg;
-  }
+    }
 }
--- a/src/share/classes/com/sun/jndi/cosnaming/CNCtx.java	Tue Sep 06 13:40:31 2011 -0700
+++ b/src/share/classes/com/sun/jndi/cosnaming/CNCtx.java	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2005, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2011, Oracle and/or its affiliates. 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
@@ -30,7 +30,6 @@
 import javax.naming.spi.ResolveResult;
 
 import java.util.Hashtable;
-import java.util.Vector;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.io.InputStream;
@@ -63,7 +62,7 @@
     public NamingContext _nc;   // public for accessing underlying NamingContext
     private NameComponent[] _name = null;
 
-    Hashtable _env; // used by ExceptionMapper
+    Hashtable<String, java.lang.Object> _env; // used by ExceptionMapper
     static final CNNameParser parser = new CNNameParser();
 
     private static final String FED_PROP = "com.sun.jndi.cosnaming.federation";
@@ -82,11 +81,12 @@
       * @param env Environment properties for initializing name service.
       * @exception NamingException Cannot initialize ORB or naming context.
       */
-    CNCtx(Hashtable env) throws NamingException {
+    @SuppressWarnings("unchecked")
+    CNCtx(Hashtable<?,?> env) throws NamingException {
         if (env != null) {
-            env = (Hashtable) env.clone();
+            env = (Hashtable<?,?>)env.clone();
         }
-        _env = env;
+        _env = (Hashtable<String, java.lang.Object>)env;
         federation = "true".equals(env != null ? env.get(FED_PROP) : null);
         initOrbAndRootContext(env);
     }
@@ -97,13 +97,14 @@
     /**
      * This method is used by the iiop and iiopname URL Context factories.
      */
-    public static ResolveResult createUsingURL(String url, Hashtable env)
+    @SuppressWarnings("unchecked")
+    public static ResolveResult createUsingURL(String url, Hashtable<?,?> env)
     throws NamingException {
         CNCtx ctx = new CNCtx();
         if (env != null) {
-            env = (Hashtable) env.clone();
+            env = (Hashtable<?,?>) env.clone();
         }
-        ctx._env = env;
+        ctx._env = (Hashtable<String, java.lang.Object>)env;
         String rest = ctx.initUsingUrl(
             env != null ?
                 (org.omg.CORBA.ORB) env.get("java.naming.corba.orb")
@@ -128,8 +129,8 @@
       * @param name The name of this context relative to the root
       */
 
-    CNCtx(ORB orb, OrbReuseTracker tracker, NamingContext nctx, Hashtable env,
-                        NameComponent[]name)
+    CNCtx(ORB orb, OrbReuseTracker tracker, NamingContext nctx,
+          Hashtable<String, java.lang.Object> env, NameComponent[]name)
         throws NamingException {
             if (orb == null || nctx == null)
                 throw new ConfigurationException(
@@ -207,7 +208,7 @@
       * @exception NamingException When an error occurs while initializing the
       * ORB or the naming context.
       */
-    private void initOrbAndRootContext(Hashtable env) throws NamingException {
+    private void initOrbAndRootContext(Hashtable<?,?> env) throws NamingException {
         org.omg.CORBA.ORB inOrb = null;
         String ncIor = null;
 
@@ -240,7 +241,7 @@
 
             // If name supplied in URL, resolve it to a NamingContext
             if (insName.length() > 0) {
-                _name = parser.nameToCosName(parser.parse(insName));
+                _name = CNNameParser.nameToCosName(parser.parse(insName));
                 try {
                     org.omg.CORBA.Object obj = _nc.resolve(_name);
                     _nc = NamingContextHelper.narrow(obj);
@@ -271,7 +272,7 @@
     }
 
 
-    private String initUsingUrl(ORB orb, String url, Hashtable env)
+    private String initUsingUrl(ORB orb, String url, Hashtable<?,?> env)
         throws NamingException {
         if (url.startsWith("iiop://") || url.startsWith("iiopname://")) {
             return initUsingIiopUrl(orb, url, env);
@@ -283,17 +284,14 @@
     /**
      * Handles "iiop" and "iiopname" URLs (INS 98-10-11)
      */
-    private String initUsingIiopUrl(ORB defOrb, String url, Hashtable env)
+    private String initUsingIiopUrl(ORB defOrb, String url, Hashtable<?,?> env)
         throws NamingException {
         try {
             IiopUrl parsedUrl = new IiopUrl(url);
 
-            Vector addrs = parsedUrl.getAddresses();
-            IiopUrl.Address addr;
             NamingException savedException = null;
 
-            for (int i = 0; i < addrs.size(); i++) {
-                addr = (IiopUrl.Address)addrs.elementAt(i);
+            for (IiopUrl.Address addr : parsedUrl.getAddresses()) {
 
                 try {
                     if (defOrb != null) {
@@ -341,7 +339,7 @@
     /**
      * Initializes using "corbaname" URL (INS 99-12-03)
      */
-    private String initUsingCorbanameUrl(ORB orb, String url, Hashtable env)
+    private String initUsingCorbanameUrl(ORB orb, String url, Hashtable<?,?> env)
         throws NamingException {
         try {
             CorbanameUrl parsedUrl = new CorbanameUrl(url);
@@ -731,7 +729,7 @@
                 // as per JNDI spec
 
                 if (leafNotFound(e, path[path.length-1])) {
-                    ; // do nothing
+                    // do nothing
                 } else {
                     throw ExceptionMapper.mapException(e, this, path);
                 }
@@ -829,7 +827,7 @@
       * with a non-null argument
       * @return a list of name-class objects as a NameClassEnumeration.
       */
-    public  NamingEnumeration list(String name) throws NamingException {
+    public  NamingEnumeration<NameClassPair> list(String name) throws NamingException {
             return list(new CompositeName(name));
     }
 
@@ -840,9 +838,10 @@
       * @exception NamingException All exceptions thrown by lookup
       * @return a list of name-class objects as a NameClassEnumeration.
       */
-    public  NamingEnumeration list(Name name)
+    @SuppressWarnings("unchecked")
+    public  NamingEnumeration<NameClassPair> list(Name name)
         throws NamingException {
-            return listBindings(name);
+            return (NamingEnumeration)listBindings(name);
     }
 
     /**
@@ -852,7 +851,7 @@
       * @exception NamingException all exceptions returned by lookup
       * @return a list of bindings as a BindingEnumeration.
       */
-    public  NamingEnumeration listBindings(String name)
+    public  NamingEnumeration<javax.naming.Binding> listBindings(String name)
         throws NamingException {
             return listBindings(new CompositeName(name));
     }
@@ -864,7 +863,7 @@
       * @exception NamingException all exceptions returned by lookup.
       * @return a list of bindings as a BindingEnumeration.
       */
-    public  NamingEnumeration listBindings(Name name)
+    public  NamingEnumeration<javax.naming.Binding> listBindings(Name name)
         throws NamingException {
             if (_nc == null)
                 throw new ConfigurationException(
@@ -1064,11 +1063,12 @@
       * Returns the current environment.
       * @return Environment.
       */
-    public  Hashtable getEnvironment() throws NamingException {
+    @SuppressWarnings("unchecked")
+    public  Hashtable<String, java.lang.Object> getEnvironment() throws NamingException {
         if (_env == null) {
-            return new Hashtable(5, 0.75f);
+            return new Hashtable<>(5, 0.75f);
         } else {
-            return (Hashtable)_env.clone();
+            return (Hashtable<String, java.lang.Object>)_env.clone();
         }
     }
 
@@ -1090,25 +1090,27 @@
       * @param propVal  The ORB.
       * @return the previous value of this property if any.
       */
+    @SuppressWarnings("unchecked")
     public java.lang.Object addToEnvironment(String propName,
         java.lang.Object propValue)
         throws NamingException {
             if (_env == null) {
-                _env = new Hashtable(7, 0.75f);
+                _env = new Hashtable<>(7, 0.75f);
             } else {
                 // copy-on-write
-                _env = (Hashtable)_env.clone();
+                _env = (Hashtable<String, java.lang.Object>)_env.clone();
             }
 
             return _env.put(propName, propValue);
     }
 
     // Record change but do not reinitialize ORB
+    @SuppressWarnings("unchecked")
     public java.lang.Object removeFromEnvironment(String propName)
         throws NamingException {
             if (_env != null  && _env.get(propName) != null) {
                 // copy-on-write
-                _env = (Hashtable)_env.clone();
+                _env = (Hashtable<String, java.lang.Object>)_env.clone();
                 return _env.remove(propName);
             }
             return null;
--- a/src/share/classes/com/sun/jndi/cosnaming/CNNameParser.java	Tue Sep 06 13:40:31 2011 -0700
+++ b/src/share/classes/com/sun/jndi/cosnaming/CNNameParser.java	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2003, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2011, Oracle and/or its affiliates. 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
@@ -67,7 +67,7 @@
     * @return a non-null CompoundName
     */
     public Name parse(String name) throws NamingException {
-        Vector comps = insStringToStringifiedComps(name);
+        Vector<String> comps = insStringToStringifiedComps(name);
         return new CNCompoundName(comps.elements());
     }
 
@@ -128,11 +128,11 @@
      * each element of the vector contains a stringified form of
      * a NameComponent.
      */
-    private static Vector insStringToStringifiedComps(String str)
+    private static Vector<String> insStringToStringifiedComps(String str)
         throws InvalidNameException {
 
         int len = str.length();
-        Vector components = new Vector(10);
+        Vector<String> components = new Vector<>(10);
         char[] id = new char[len];
         char[] kind = new char[len];
         int idCount, kindCount;
@@ -306,7 +306,7 @@
      * and stringifying code of the default CompoundName.
      */
     static final class CNCompoundName extends CompoundName {
-        CNCompoundName(Enumeration enum_) {
+        CNCompoundName(Enumeration<String> enum_) {
             super(enum_, CNNameParser.mySyntax);
         }
 
@@ -315,12 +315,12 @@
         }
 
         public Name getPrefix(int posn) {
-            Enumeration comps = super.getPrefix(posn).getAll();
+            Enumeration<String> comps = super.getPrefix(posn).getAll();
             return new CNCompoundName(comps);
         }
 
         public Name getSuffix(int posn) {
-            Enumeration comps = super.getSuffix(posn).getAll();
+            Enumeration<String> comps = super.getSuffix(posn).getAll();
             return new CNCompoundName(comps);
         }
 
--- a/src/share/classes/com/sun/jndi/cosnaming/ExceptionMapper.java	Tue Sep 06 13:40:31 2011 -0700
+++ b/src/share/classes/com/sun/jndi/cosnaming/ExceptionMapper.java	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2005, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2011, Oracle and/or its affiliates. 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
@@ -102,10 +102,10 @@
 
     private static final NamingException tryFed(NotFound e, CNCtx ctx,
         NameComponent[] inputName) throws NamingException {
-        NameComponent[] rest = ((NotFound) e).rest_of_name;
+        NameComponent[] rest = e.rest_of_name;
 
         if (debug) {
-            System.out.println(((NotFound)e).why.value());
+            System.out.println(e.why.value());
             System.out.println(rest.length);
         }
 
--- a/src/share/classes/com/sun/jndi/cosnaming/IiopUrl.java	Tue Sep 06 13:40:31 2011 -0700
+++ b/src/share/classes/com/sun/jndi/cosnaming/IiopUrl.java	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2005, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2011, Oracle and/or its affiliates. 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
@@ -68,7 +68,7 @@
     static final private int DEFAULT_IIOPNAME_PORT = 9999;
     static final private int DEFAULT_IIOP_PORT = 900;
     static final private String DEFAULT_HOST = "localhost";
-    private Vector addresses;
+    private Vector<Address> addresses;
     private String stringName;
 
     public static class Address {
@@ -149,7 +149,7 @@
         }
     }
 
-    public Vector getAddresses() {
+    public Vector<Address> getAddresses() {
         return addresses;
     }
 
@@ -185,7 +185,7 @@
         } else {
             stringName = UrlUtil.decode(url.substring(addrEnd+1));
         }
-        addresses = new Vector(3);
+        addresses = new Vector<>(3);
         if (oldFormat) {
             // Only one host:port part, not multiple
             addresses.addElement(
--- a/src/share/classes/com/sun/jndi/dns/DnsClient.java	Tue Sep 06 13:40:31 2011 -0700
+++ b/src/share/classes/com/sun/jndi/dns/DnsClient.java	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2011, Oracle and/or its affiliates. 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
@@ -524,7 +524,7 @@
                 "\tResponse Q:" + resps);
         }
         byte[] pkt;
-        if ((pkt = (byte[]) resps.get(xid)) != null) {
+        if ((pkt = resps.get(xid)) != null) {
             checkResponseCode(new Header(pkt, pkt.length));
             synchronized (queuesLock) {
                 resps.remove(xid);
--- a/src/share/classes/com/sun/jndi/dns/DnsContext.java	Tue Sep 06 13:40:31 2011 -0700
+++ b/src/share/classes/com/sun/jndi/dns/DnsContext.java	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2009, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2011, Oracle and/or its affiliates. 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
@@ -47,7 +47,7 @@
 
     DnsName domain;             // fully-qualified domain name of this context,
                                 // with a root (empty) label at position 0
-    Hashtable environment;
+    Hashtable<Object,Object> environment;
     private boolean envShared;  // true if environment is possibly shared
                                 // and so must be copied on write
     private boolean parentIsDns;        // was this DnsContext created by
@@ -95,14 +95,15 @@
      * There must be at least one server.
      * The environment must not be null; it is cloned before being stored.
      */
-    public DnsContext(String domain, String[] servers, Hashtable environment)
+    @SuppressWarnings("unchecked")
+    public DnsContext(String domain, String[] servers, Hashtable<?,?> environment)
             throws NamingException {
 
         this.domain = new DnsName(domain.endsWith(".")
                                   ? domain
                                   : domain + ".");
         this.servers = servers;
-        this.environment = (Hashtable) environment.clone();
+        this.environment = (Hashtable<Object,Object>) environment.clone();
         envShared = false;
         parentIsDns = false;
         resolver = null;
@@ -154,14 +155,15 @@
     /*
      * Override default with a noncloning version.
      */
-    protected Hashtable p_getEnvironment() {
+    protected Hashtable<?,?> p_getEnvironment() {
         return environment;
     }
 
-    public Hashtable getEnvironment() throws NamingException {
-        return (Hashtable) environment.clone();
+    public Hashtable<?,?> getEnvironment() throws NamingException {
+        return (Hashtable<?,?>) environment.clone();
     }
 
+    @SuppressWarnings("unchecked")
     public Object addToEnvironment(String propName, Object propVal)
             throws NamingException {
 
@@ -189,7 +191,7 @@
             return environment.put(propName, propVal);
         } else if (environment.get(propName) != propVal) {
             // copy on write
-            environment = (Hashtable) environment.clone();
+            environment = (Hashtable<Object,Object>) environment.clone();
             envShared = false;
             return environment.put(propName, propVal);
         } else {
@@ -197,6 +199,7 @@
         }
     }
 
+    @SuppressWarnings("unchecked")
     public Object removeFromEnvironment(String propName)
             throws NamingException {
 
@@ -222,7 +225,7 @@
             return environment.remove(propName);
         } else if (environment.get(propName) != null) {
             // copy-on-write
-            environment = (Hashtable) environment.clone();
+            environment = (Hashtable<Object,Object>) environment.clone();
             envShared = false;
             return environment.remove(propName);
         } else {
@@ -307,7 +310,7 @@
         return c_lookup(name, cont);
     }
 
-    public NamingEnumeration c_list(Name name, Continuation cont)
+    public NamingEnumeration<NameClassPair> c_list(Name name, Continuation cont)
             throws NamingException {
         cont.setSuccess();
         try {
@@ -322,7 +325,7 @@
         }
     }
 
-    public NamingEnumeration c_listBindings(Name name, Continuation cont)
+    public NamingEnumeration<Binding> c_listBindings(Name name, Continuation cont)
             throws NamingException {
         cont.setSuccess();
         try {
@@ -457,7 +460,7 @@
                 new OperationNotSupportedException());
     }
 
-    public NamingEnumeration c_search(Name name,
+    public NamingEnumeration<SearchResult> c_search(Name name,
                                       Attributes matchingAttributes,
                                       String[] attributesToReturn,
                                       Continuation cont)
@@ -465,7 +468,7 @@
         throw new OperationNotSupportedException();
     }
 
-    public NamingEnumeration c_search(Name name,
+    public NamingEnumeration<SearchResult> c_search(Name name,
                                       String filter,
                                       SearchControls cons,
                                       Continuation cont)
@@ -473,7 +476,7 @@
         throw new OperationNotSupportedException();
     }
 
-    public NamingEnumeration c_search(Name name,
+    public NamingEnumeration<SearchResult> c_search(Name name,
                                       String filterExpr,
                                       Object[] filterArgs,
                                       SearchControls cons,
@@ -608,7 +611,7 @@
         BasicAttributes attrs = new BasicAttributes(true);
 
         for (int i = 0; i < rrs.answer.size(); i++) {
-            ResourceRecord rr = (ResourceRecord) rrs.answer.elementAt(i);
+            ResourceRecord rr = rrs.answer.elementAt(i);
             int rrtype  = rr.getType();
             int rrclass = rr.getRrclass();
 
@@ -952,19 +955,14 @@
 //----------
 
 /*
- * An enumeration of name/classname pairs.
- *
- * Nodes that have children or that are zone cuts are returned with
- * classname DirContext.  Other nodes are returned with classname
- * Object even though they are DirContexts as well, since this might
- * make the namespace easier to browse.
+ * Common base class for NameClassPairEnumeration and BindingEnumeration.
  */
-class NameClassPairEnumeration implements NamingEnumeration {
+abstract class BaseNameClassPairEnumeration<T> implements NamingEnumeration<T> {
 
-    protected Enumeration nodes;    // nodes to be enumerated, or null if none
+    protected Enumeration<NameNode> nodes;    // nodes to be enumerated, or null if none
     protected DnsContext ctx;       // context being enumerated
 
-    NameClassPairEnumeration(DnsContext ctx, Hashtable nodes) {
+    BaseNameClassPairEnumeration(DnsContext ctx, Hashtable<String,NameNode> nodes) {
         this.ctx = ctx;
         this.nodes = (nodes != null)
             ? nodes.elements()
@@ -974,12 +972,12 @@
     /*
      * ctx will be set to null when no longer needed by the enumeration.
      */
-    public void close() {
+    public final void close() {
         nodes = null;
         ctx = null;
     }
 
-    public boolean hasMore() {
+    public final boolean hasMore() {
         boolean more = ((nodes != null) && nodes.hasMoreElements());
         if (!more) {
             close();
@@ -987,11 +985,46 @@
         return more;
     }
 
-    public Object next() throws NamingException {
+    public final boolean hasMoreElements() {
+        return hasMore();
+    }
+
+    abstract public T next() throws NamingException;
+
+    public final T nextElement() {
+        try {
+            return next();
+        } catch (NamingException e) {
+            java.util.NoSuchElementException nsee =
+                    new java.util.NoSuchElementException();
+            nsee.initCause(e);
+            throw nsee;
+        }
+    }
+}
+
+/*
+ * An enumeration of name/classname pairs.
+ *
+ * Nodes that have children or that are zone cuts are returned with
+ * classname DirContext.  Other nodes are returned with classname
+ * Object even though they are DirContexts as well, since this might
+ * make the namespace easier to browse.
+ */
+final class NameClassPairEnumeration
+        extends BaseNameClassPairEnumeration<NameClassPair>
+        implements NamingEnumeration<NameClassPair> {
+
+    NameClassPairEnumeration(DnsContext ctx, Hashtable<String,NameNode> nodes) {
+        super(ctx, nodes);
+    }
+
+    @Override
+    public NameClassPair next() throws NamingException {
         if (!hasMore()) {
             throw new java.util.NoSuchElementException();
         }
-        NameNode nnode = (NameNode) nodes.nextElement();
+        NameNode nnode = nodes.nextElement();
         String className = (nnode.isZoneCut() ||
                             (nnode.getChildren() != null))
             ? "javax.naming.directory.DirContext"
@@ -1005,28 +1038,15 @@
         ncp.setNameInNamespace(ctx.fullyQualify(cname).toString());
         return ncp;
     }
-
-    public boolean hasMoreElements() {
-        return hasMore();
-    }
-
-    public Object nextElement() {
-        try {
-            return next();
-        } catch (NamingException e) {
-            throw (new java.util.NoSuchElementException(
-                    "javax.naming.NamingException was thrown: " +
-                    e.getMessage()));
-        }
-    }
 }
 
 /*
  * An enumeration of Bindings.
  */
-class BindingEnumeration extends NameClassPairEnumeration {
+final class BindingEnumeration extends BaseNameClassPairEnumeration<Binding>
+                         implements NamingEnumeration<Binding> {
 
-    BindingEnumeration(DnsContext ctx, Hashtable nodes) {
+    BindingEnumeration(DnsContext ctx, Hashtable<String,NameNode> nodes) {
         super(ctx, nodes);
     }
 
@@ -1035,11 +1055,12 @@
 //      close();
 //  }
 
-    public Object next() throws NamingException {
+    @Override
+    public Binding next() throws NamingException {
         if (!hasMore()) {
             throw (new java.util.NoSuchElementException());
         }
-        NameNode nnode = (NameNode) nodes.nextElement();
+        NameNode nnode = nodes.nextElement();
 
         String label = nnode.getLabel();
         Name compName = (new DnsName()).add(label);
--- a/src/share/classes/com/sun/jndi/dns/DnsContextFactory.java	Tue Sep 06 13:40:31 2011 -0700
+++ b/src/share/classes/com/sun/jndi/dns/DnsContextFactory.java	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2011, Oracle and/or its affiliates. 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
@@ -59,7 +59,7 @@
 
     public Context getInitialContext(Hashtable<?,?> env) throws NamingException {
         if (env == null) {
-            env = new Hashtable(5);
+            env = new Hashtable<>(5);
         }
         return urlToContext(getInitCtxUrl(env), env);
     }
@@ -75,7 +75,7 @@
      * components are overridden by "domain".
      */
     public static DnsContext getContext(String domain,
-                                        DnsUrl[] urls, Hashtable env)
+                                        DnsUrl[] urls, Hashtable<?,?> env)
             throws NamingException {
 
         String[] servers = serversForUrls(urls);
@@ -95,7 +95,7 @@
                 ).isEmpty();
     }
 
-    private static Context urlToContext(String url, Hashtable env)
+    private static Context urlToContext(String url, Hashtable<?,?> env)
             throws NamingException {
 
         DnsUrl[] urls;
@@ -212,7 +212,7 @@
      * Reads environment to find URL(s) of initial context.
      * Default URL is "dns:".
      */
-    private static String getInitCtxUrl(Hashtable env) {
+    private static String getInitCtxUrl(Hashtable<?,?> env) {
         String url = (String) env.get(Context.PROVIDER_URL);
         return ((url != null) ? url : DEFAULT_URL);
     }
@@ -223,34 +223,31 @@
      * @param oneIsEnough return output once there exists one ok
      * @return the filtered list, all non-permitted input removed
      */
-    private static List filterNameServers(List input, boolean oneIsEnough) {
+    private static List<String> filterNameServers(List<String> input, boolean oneIsEnough) {
         SecurityManager security = System.getSecurityManager();
         if (security == null || input == null || input.isEmpty()) {
             return input;
         } else {
-            List output = new ArrayList();
-            for (Object o: input) {
-                if (o instanceof String) {
-                    String platformServer = (String)o;
-                    int colon = platformServer.indexOf(':',
-                            platformServer.indexOf(']') + 1);
+            List<String> output = new ArrayList<>();
+            for (String platformServer: input) {
+                int colon = platformServer.indexOf(':',
+                        platformServer.indexOf(']') + 1);
 
-                    int p = (colon < 0)
-                        ? DEFAULT_PORT
-                        : Integer.parseInt(
-                            platformServer.substring(colon + 1));
-                    String s = (colon < 0)
-                        ? platformServer
-                        : platformServer.substring(0, colon);
-                    try {
-                        security.checkConnect(s, p);
-                        output.add(platformServer);
-                        if (oneIsEnough) {
-                            return output;
-                        }
-                    } catch (SecurityException se) {
-                        continue;
+                int p = (colon < 0)
+                    ? DEFAULT_PORT
+                    : Integer.parseInt(
+                        platformServer.substring(colon + 1));
+                String s = (colon < 0)
+                    ? platformServer
+                    : platformServer.substring(0, colon);
+                try {
+                    security.checkConnect(s, p);
+                    output.add(platformServer);
+                    if (oneIsEnough) {
+                        return output;
                     }
+                } catch (SecurityException se) {
+                    continue;
                 }
             }
             return output;
--- a/src/share/classes/com/sun/jndi/dns/DnsName.java	Tue Sep 06 13:40:31 2011 -0700
+++ b/src/share/classes/com/sun/jndi/dns/DnsName.java	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2004, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2011, Oracle and/or its affiliates. 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
@@ -29,7 +29,6 @@
 import java.util.ArrayList;
 import java.util.Comparator;
 import java.util.Enumeration;
-import java.util.Iterator;
 
 import javax.naming.*;
 
@@ -111,7 +110,7 @@
     // The labels of this domain name, as a list of strings.  Index 0
     // corresponds to the leftmost (least significant) label:  note that
     // this is the reverse of the ordering used by the Name interface.
-    private ArrayList labels = new ArrayList();
+    private ArrayList<String> labels = new ArrayList<>();
 
     // The number of octets needed to carry this domain name in a DNS
     // packet.  Equal to the sum of the lengths of each label, plus the
@@ -152,9 +151,7 @@
             domain = n.domain;
             octets = n.octets;
         } else {
-            Iterator iter = labels.iterator();
-            while (iter.hasNext()) {
-                String label = (String) iter.next();
+            for (String label: labels) {
                 if (label.length() > 0) {
                     octets += (short) (label.length() + 1);
                 }
@@ -165,10 +162,8 @@
 
     public String toString() {
         if (domain == null) {
-            StringBuffer buf = new StringBuffer();
-            Iterator iter = labels.iterator();
-            while (iter.hasNext()) {
-                String label = (String) iter.next();
+            StringBuilder buf = new StringBuilder();
+            for (String label: labels) {
                 if (buf.length() > 0 || label.length() == 0) {
                     buf.append('.');
                 }
@@ -183,9 +178,8 @@
      * Does this domain name follow <em>host name</em> syntax?
      */
     public boolean isHostName() {
-        Iterator iter = labels.iterator();
-        while (iter.hasNext()) {
-            if (!isHostNameLabel((String) iter.next())) {
+        for (String label: labels) {
+            if (!isHostNameLabel(label)) {
                 return false;
             }
         }
@@ -241,16 +235,16 @@
             throw new ArrayIndexOutOfBoundsException();
         }
         int i = size() - pos - 1;       // index of "pos" component in "labels"
-        return (String) labels.get(i);
+        return labels.get(i);
     }
 
-    public Enumeration getAll() {
-        return new Enumeration() {
+    public Enumeration<String> getAll() {
+        return new Enumeration<String>() {
             int pos = 0;
             public boolean hasMoreElements() {
                 return (pos < size());
             }
-            public Object nextElement() {
+            public String nextElement() {
                 if (pos < size()) {
                     return get(pos++);
                 }
@@ -276,7 +270,7 @@
             throw new ArrayIndexOutOfBoundsException();
         }
         int i = size() - pos - 1;     // index of element to remove in "labels"
-        String label = (String) labels.remove(i);
+        String label = labels.remove(i);
         int len = label.length();
         if (len > 0) {
             octets -= (short) (len + 1);
@@ -530,7 +524,7 @@
     /*
      * Append a label to buf, escaping as needed.
      */
-    private static void escape(StringBuffer buf, String label) {
+    private static void escape(StringBuilder buf, String label) {
         for (int i = 0; i < label.length(); i++) {
             char c = label.charAt(i);
             if (c == '.' || c == '\\') {
--- a/src/share/classes/com/sun/jndi/dns/NameNode.java	Tue Sep 06 13:40:31 2011 -0700
+++ b/src/share/classes/com/sun/jndi/dns/NameNode.java	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2002, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2011, Oracle and/or its affiliates. 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
@@ -52,7 +52,7 @@
 
     private String label;               // name of this node relative to its
                                         // parent, or null for root of a tree
-    private Hashtable children = null;  // child nodes
+    private Hashtable<String,NameNode> children = null;  // child nodes
     private boolean isZoneCut = false;  // true if this node is a zone cut
     private int depth = 0;              // depth in tree (0 for root)
 
@@ -97,7 +97,7 @@
      * Returns the children of this node, or null if there are none.
      * The caller must not modify the Hashtable returned.
      */
-    Hashtable getChildren() {
+    Hashtable<String,NameNode> getChildren() {
         return children;
     }
 
@@ -108,7 +108,7 @@
      */
     NameNode get(String key) {
         return (children != null)
-            ? (NameNode) children.get(key)
+            ? children.get(key)
             : null;
     }
 
@@ -140,9 +140,9 @@
 
             NameNode child = null;
             if (node.children == null) {
-                node.children = new Hashtable();
+                node.children = new Hashtable<>();
             } else {
-                child = (NameNode) node.children.get(key);
+                child = node.children.get(key);
             }
             if (child == null) {
                 child = newNameNode(label);
--- a/src/share/classes/com/sun/jndi/dns/Resolver.java	Tue Sep 06 13:40:31 2011 -0700
+++ b/src/share/classes/com/sun/jndi/dns/Resolver.java	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2011, Oracle and/or its affiliates. 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
@@ -125,8 +125,7 @@
                 }
                 // Look for an SOA record giving the zone's top node.
                 for (int i = 0; i < rrs.authority.size(); i++) {
-                    ResourceRecord rr = (ResourceRecord)
-                        rrs.authority.elementAt(i);
+                    ResourceRecord rr = rrs.authority.elementAt(i);
                     if (rr.getType() == ResourceRecord.TYPE_SOA) {
                         DnsName zone = rr.getName();
                         if (fqdn.endsWith(zone)) {
@@ -152,7 +151,7 @@
         ResourceRecords rrs = query(zone, rrclass, ResourceRecord.TYPE_SOA,
                                     recursion, false);
         for (int i = 0; i < rrs.answer.size(); i++) {
-            ResourceRecord rr = (ResourceRecord) rrs.answer.elementAt(i);
+            ResourceRecord rr = rrs.answer.elementAt(i);
             if (rr.getType() == ResourceRecord.TYPE_SOA) {
                 return rr;
             }
@@ -175,8 +174,7 @@
                   recursion, false);
         String[] ns = new String[rrs.answer.size()];
         for (int i = 0; i < ns.length; i++) {
-            ResourceRecord rr = (ResourceRecord)
-                rrs.answer.elementAt(i);
+            ResourceRecord rr = rrs.answer.elementAt(i);
             if (rr.getType() != ResourceRecord.TYPE_NS) {
                 throw new CommunicationException("Corrupted DNS message");
             }
--- a/src/share/classes/com/sun/jndi/dns/ResourceRecords.java	Tue Sep 06 13:40:31 2011 -0700
+++ b/src/share/classes/com/sun/jndi/dns/ResourceRecords.java	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2001, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2011, Oracle and/or its affiliates. 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
@@ -45,10 +45,10 @@
     // Four sections:  question, answer, authority, additional.
     // The question section is treated as being made up of (shortened)
     // resource records, although this isn't technically how it's defined.
-    Vector question = new Vector();
-    Vector answer = new Vector();
-    Vector authority = new Vector();
-    Vector additional = new Vector();
+    Vector<ResourceRecord> question = new Vector<>();
+    Vector<ResourceRecord> answer = new Vector<>();
+    Vector<ResourceRecord> authority = new Vector<>();
+    Vector<ResourceRecord> additional = new Vector<>();
 
     /*
      * True if these resource records are from a zone transfer.  In
@@ -80,7 +80,7 @@
         if (answer.size() == 0) {
             return -1;
         }
-        return ((ResourceRecord) answer.firstElement()).getType();
+        return answer.firstElement().getType();
     }
 
     /*
@@ -91,7 +91,7 @@
         if (answer.size() == 0) {
             return -1;
         }
-        return ((ResourceRecord) answer.lastElement()).getType();
+        return answer.lastElement().getType();
     }
 
     /*
--- a/src/share/classes/com/sun/jndi/dns/ZoneNode.java	Tue Sep 06 13:40:31 2011 -0700
+++ b/src/share/classes/com/sun/jndi/dns/ZoneNode.java	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2002, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2011, Oracle and/or its affiliates. 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
@@ -55,7 +55,7 @@
 
 class ZoneNode extends NameNode {
 
-    private SoftReference contentsRef = null;   // the zone's namespace
+    private SoftReference<NameNode> contentsRef = null;   // the zone's namespace
     private long serialNumber = -1;     // the zone data's serial number
     private Date expiration = null;     // time when the zone's data expires
 
@@ -88,7 +88,7 @@
      */
     synchronized NameNode getContents() {
         return (contentsRef != null)
-                ? (NameNode) contentsRef.get()
+                ? contentsRef.get()
                 : null;
     }
 
@@ -130,7 +130,7 @@
         NameNode newContents = new NameNode(null);
 
         for (int i = 0; i < rrs.answer.size(); i++) {
-            ResourceRecord rr = (ResourceRecord) rrs.answer.elementAt(i);
+            ResourceRecord rr = rrs.answer.elementAt(i);
             DnsName n = rr.getName();
 
             // Ignore resource records whose names aren't within the zone's
@@ -144,9 +144,9 @@
             }
         }
         // The zone's SOA record is the first record in the answer section.
-        ResourceRecord soa = (ResourceRecord) rrs.answer.firstElement();
+        ResourceRecord soa = rrs.answer.firstElement();
         synchronized (this) {
-            contentsRef = new SoftReference(newContents);
+            contentsRef = new SoftReference<NameNode>(newContents);
             serialNumber = getSerialNumber(soa);
             setExpiration(getMinimumTtl(soa));
             return newContents;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/share/classes/com/sun/jndi/ldap/AbstractLdapNamingEnumeration.java	Fri Sep 09 17:22:03 2011 -0700
@@ -0,0 +1,408 @@
+/*
+ * Copyright (c) 1999, 2011, Oracle and/or its affiliates. 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.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package com.sun.jndi.ldap;
+
+import com.sun.jndi.toolkit.ctx.Continuation;
+import java.util.NoSuchElementException;
+import java.util.Vector;
+
+import javax.naming.*;
+import javax.naming.directory.Attributes;
+import javax.naming.ldap.Control;
+
+/**
+ * Basic enumeration for NameClassPair, Binding, and SearchResults.
+ */
+
+abstract class AbstractLdapNamingEnumeration<T extends NameClassPair>
+        implements NamingEnumeration<T>, ReferralEnumeration<T> {
+
+    protected Name listArg;
+
+    private boolean cleaned = false;
+    private LdapResult res;
+    private LdapClient enumClnt;
+    private Continuation cont;  // used to fill in exceptions
+    private Vector<LdapEntry> entries = null;
+    private int limit = 0;
+    private int posn = 0;
+    protected LdapCtx homeCtx;
+    private LdapReferralException refEx = null;
+    private NamingException errEx = null;
+
+    /*
+     * Record the next set of entries and/or referrals.
+     */
+    AbstractLdapNamingEnumeration(LdapCtx homeCtx, LdapResult answer, Name listArg,
+        Continuation cont) throws NamingException {
+
+            // These checks are to accommodate referrals and limit exceptions
+            // which will generate an enumeration and defer the exception
+            // to be thrown at the end of the enumeration.
+            // All other exceptions are thrown immediately.
+            // Exceptions shouldn't be thrown here anyhow because
+            // process_return_code() is called before the constructor
+            // is called, so these are just safety checks.
+
+            if ((answer.status != LdapClient.LDAP_SUCCESS) &&
+                (answer.status != LdapClient.LDAP_SIZE_LIMIT_EXCEEDED) &&
+                (answer.status != LdapClient.LDAP_TIME_LIMIT_EXCEEDED) &&
+                (answer.status != LdapClient.LDAP_ADMIN_LIMIT_EXCEEDED) &&
+                (answer.status != LdapClient.LDAP_REFERRAL) &&
+                (answer.status != LdapClient.LDAP_PARTIAL_RESULTS)) {
+
+                // %%% need to deal with referral
+                NamingException e = new NamingException(
+                                    LdapClient.getErrorMessage(
+                                    answer.status, answer.errorMessage));
+
+                throw cont.fillInException(e);
+            }
+
+            // otherwise continue
+
+            res = answer;
+            entries = answer.entries;
+            limit = (entries == null) ? 0 : entries.size(); // handle empty set
+            this.listArg = listArg;
+            this.cont = cont;
+
+            if (answer.refEx != null) {
+                refEx = answer.refEx;
+            }
+
+            // Ensures that context won't get closed from underneath us
+            this.homeCtx = homeCtx;
+            homeCtx.incEnumCount();
+            enumClnt = homeCtx.clnt; // remember
+    }
+
+    @Override
+    public final T nextElement() {
+        try {
+            return next();
+        } catch (NamingException e) {
+            // can't throw exception
+            cleanup();
+            return null;
+        }
+    }
+
+    @Override
+    public final boolean hasMoreElements() {
+        try {
+            return hasMore();
+        } catch (NamingException e) {
+            // can't throw exception
+            cleanup();
+            return false;
+        }
+    }
+
+    /*
+     * Retrieve the next set of entries and/or referrals.
+     */
+    private void getNextBatch() throws NamingException {
+
+        res = homeCtx.getSearchReply(enumClnt, res);
+        if (res == null) {
+            limit = posn = 0;
+            return;
+        }
+
+        entries = res.entries;
+        limit = (entries == null) ? 0 : entries.size(); // handle empty set
+        posn = 0; // reset
+
+        // mimimize the number of calls to processReturnCode()
+        // (expensive when batchSize is small and there are many results)
+        if ((res.status != LdapClient.LDAP_SUCCESS) ||
+            ((res.status == LdapClient.LDAP_SUCCESS) &&
+                (res.referrals != null))) {
+
+            try {
+                // convert referrals into a chain of LdapReferralException
+                homeCtx.processReturnCode(res, listArg);
+
+            } catch (LimitExceededException | PartialResultException e) {
+                setNamingException(e);
+
+            }
+        }
+
+        // merge any newly received referrals with any current referrals
+        if (res.refEx != null) {
+            if (refEx == null) {
+                refEx = res.refEx;
+            } else {
+                refEx = refEx.appendUnprocessedReferrals(res.refEx);
+            }
+            res.refEx = null; // reset
+        }
+
+        if (res.resControls != null) {
+            homeCtx.respCtls = res.resControls;
+        }
+    }
+
+    private boolean more = true;  // assume we have something to start with
+    private boolean hasMoreCalled = false;
+
+    /*
+     * Test if unprocessed entries or referrals exist.
+     */
+    @Override
+    public final boolean hasMore() throws NamingException {
+
+        if (hasMoreCalled) {
+            return more;
+        }
+
+        hasMoreCalled = true;
+
+        if (!more) {
+            return false;
+        } else {
+            return (more = hasMoreImpl());
+        }
+    }
+
+    /*
+     * Retrieve the next entry.
+     */
+    @Override
+    public final T next() throws NamingException {
+
+        if (!hasMoreCalled) {
+            hasMore();
+        }
+        hasMoreCalled = false;
+        return nextImpl();
+    }
+
+    /*
+     * Test if unprocessed entries or referrals exist.
+     */
+    private boolean hasMoreImpl() throws NamingException {
+        // when page size is supported, this
+        // might generate an exception while attempting
+        // to fetch the next batch to determine
+        // whether there are any more elements
+
+        // test if the current set of entries has been processed
+        if (posn == limit) {
+            getNextBatch();
+        }
+
+        // test if any unprocessed entries exist
+        if (posn < limit) {
+            return true;
+        } else {
+
+            try {
+                // try to process another referral
+                return hasMoreReferrals();
+
+            } catch (LdapReferralException |
+                     LimitExceededException |
+                     PartialResultException e) {
+                cleanup();
+                throw e;
+
+            } catch (NamingException e) {
+                cleanup();
+                PartialResultException pre = new PartialResultException();
+                pre.setRootCause(e);
+                throw pre;
+            }
+        }
+    }
+
+    /*
+     * Retrieve the next entry.
+     */
+    private T nextImpl() throws NamingException {
+        try {
+            return nextAux();
+        } catch (NamingException e) {
+            cleanup();
+            throw cont.fillInException(e);
+        }
+    }
+
+    private T nextAux() throws NamingException {
+        if (posn == limit) {
+            getNextBatch();  // updates posn and limit
+        }
+
+        if (posn >= limit) {
+            cleanup();
+            throw new NoSuchElementException("invalid enumeration handle");
+        }
+
+        LdapEntry result = entries.elementAt(posn++);
+
+        // gets and outputs DN from the entry
+        return createItem(result.DN, result.attributes, result.respCtls);
+    }
+
+    protected final String getAtom(String dn) {
+        // need to strip off all but lowest component of dn
+        // so that is relative to current context (currentDN)
+        try {
+            Name parsed = new LdapName(dn);
+            return parsed.get(parsed.size() - 1);
+        } catch (NamingException e) {
+            return dn;
+        }
+    }
+
+    protected abstract T createItem(String dn, Attributes attrs,
+        Vector<Control> respCtls) throws NamingException;
+
+    /*
+     * Append the supplied (chain of) referrals onto the
+     * end of the current (chain of) referrals.
+     */
+    @Override
+    public void appendUnprocessedReferrals(LdapReferralException ex) {
+        if (refEx != null) {
+            refEx = refEx.appendUnprocessedReferrals(ex);
+        } else {
+            refEx = ex.appendUnprocessedReferrals(refEx);
+        }
+    }
+
+    final void setNamingException(NamingException e) {
+        errEx = e;
+    }
+
+    protected abstract AbstractLdapNamingEnumeration<T> getReferredResults(
+            LdapReferralContext refCtx) throws NamingException;
+
+    /*
+     * Iterate through the URLs of a referral. If successful then perform
+     * a search operation and merge the received results with the current
+     * results.
+     */
+    protected final boolean hasMoreReferrals() throws NamingException {
+
+        if ((refEx != null) &&
+            (refEx.hasMoreReferrals() ||
+             refEx.hasMoreReferralExceptions())) {
+
+            if (homeCtx.handleReferrals == LdapClient.LDAP_REF_THROW) {
+                throw (NamingException)(refEx.fillInStackTrace());
+            }
+
+            // process the referrals sequentially
+            while (true) {
+
+                LdapReferralContext refCtx =
+                    (LdapReferralContext)refEx.getReferralContext(
+                    homeCtx.envprops, homeCtx.reqCtls);
+
+                try {
+
+                    update(getReferredResults(refCtx));
+                    break;
+
+                } catch (LdapReferralException re) {
+
+                    // record a previous exception
+                    if (errEx == null) {
+                        errEx = re.getNamingException();
+                    }
+                    refEx = re;
+                    continue;
+
+                } finally {
+                    // Make sure we close referral context
+                    refCtx.close();
+                }
+            }
+            return hasMoreImpl();
+
+        } else {
+            cleanup();
+
+            if (errEx != null) {
+                throw errEx;
+            }
+            return (false);
+        }
+    }
+
+    /*
+     * Merge the entries and/or referrals from the supplied enumeration
+     * with those of the current enumeration.
+     */
+    protected void update(AbstractLdapNamingEnumeration<T> ne) {
+        // Cleanup previous context first
+        homeCtx.decEnumCount();
+
+        // New enum will have already incremented enum count and recorded clnt
+        homeCtx = ne.homeCtx;
+        enumClnt = ne.enumClnt;
+
+        // Do this to prevent referral enumeration (ne) from decrementing
+        // enum count because we'll be doing that here from this
+        // enumeration.
+        ne.homeCtx = null;
+
+        // Record rest of information from new enum
+        posn = ne.posn;
+        limit = ne.limit;
+        res = ne.res;
+        entries = ne.entries;
+        refEx = ne.refEx;
+        listArg = ne.listArg;
+    }
+
+    protected final void finalize() {
+        cleanup();
+    }
+
+    protected final void cleanup() {
+        if (cleaned) return; // been there; done that
+
+        if(enumClnt != null) {
+            enumClnt.clearSearchReply(res, homeCtx.reqCtls);
+        }
+
+        enumClnt = null;
+        cleaned = true;
+        if (homeCtx != null) {
+            homeCtx.decEnumCount();
+            homeCtx = null;
+        }
+    }
+
+    @Override
+    public final void close() {
+        cleanup();
+    }
+}
--- a/src/share/classes/com/sun/jndi/ldap/Ber.java	Tue Sep 06 13:40:31 2011 -0700
+++ b/src/share/classes/com/sun/jndi/ldap/Ber.java	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2011, Oracle and/or its affiliates. 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
@@ -94,12 +94,14 @@
     public static final int ASN_ENUMERATED      = 0x0a;
 
     final static class EncodeException extends IOException {
+        private static final long serialVersionUID = -5247359637775781768L;
         EncodeException(String msg) {
             super(msg);
         }
     }
 
     final static class DecodeException extends IOException {
+        private static final long serialVersionUID = 8735036969244425583L;
         DecodeException(String msg) {
             super(msg);
         }
--- a/src/share/classes/com/sun/jndi/ldap/ClientId.java	Tue Sep 06 13:40:31 2011 -0700
+++ b/src/share/classes/com/sun/jndi/ldap/ClientId.java	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2005, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2011, Oracle and/or its affiliates. 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
@@ -25,6 +25,7 @@
 
 package com.sun.jndi.ldap;
 
+import java.util.Locale;
 import java.util.Arrays; // JDK 1.2
 import java.io.OutputStream;
 import javax.naming.ldap.Control;
@@ -71,10 +72,10 @@
     ClientId(int version, String hostname, int port, String protocol,
             Control[] bindCtls, OutputStream trace, String socketFactory) {
         this.version = version;
-        this.hostname = hostname.toLowerCase();  // ignore case
+        this.hostname = hostname.toLowerCase(Locale.ENGLISH);  // ignore case
         this.port = port;
         this.protocol = protocol;
-        this.bindCtls = (bindCtls != null ? (Control[]) bindCtls.clone() : null);
+        this.bindCtls = (bindCtls != null ? bindCtls.clone() : null);
         this.trace = trace;
         //
         // Needed for custom socket factory pooling
@@ -83,13 +84,15 @@
         if ((socketFactory != null) &&
              !socketFactory.equals(LdapCtx.DEFAULT_SSL_FACTORY)) {
             try {
-                Class socketFactoryClass = Obj.helper.loadClass(socketFactory);
-                Class objClass = Class.forName("java.lang.Object");
+                Class<?> socketFactoryClass =
+                        Obj.helper.loadClass(socketFactory);
+                Class<?> objClass = Class.forName("java.lang.Object");
                 this.sockComparator = socketFactoryClass.getMethod(
-                                "compare", new Class[]{objClass, objClass});
-                Method getDefault =
-                    socketFactoryClass.getMethod("getDefault", new Class[]{});
-                this.factory = (SocketFactory) getDefault.invoke(null, new Object[]{});
+                                "compare", new Class<?>[]{objClass, objClass});
+                Method getDefault = socketFactoryClass.getMethod(
+                                            "getDefault", new Class<?>[]{});
+                this.factory =
+                        (SocketFactory)getDefault.invoke(null, new Object[]{});
             } catch (Exception e) {
                 // Ignore it here, the same exceptions are/will be handled by
                 // LdapPoolManager and Connection classes.
--- a/src/share/classes/com/sun/jndi/ldap/Connection.java	Tue Sep 06 13:40:31 2011 -0700
+++ b/src/share/classes/com/sun/jndi/ldap/Connection.java	Fri Sep 09 17:22:03 2011 -0700
@@ -238,27 +238,22 @@
             throws NoSuchMethodException {
 
         try {
-            Class inetSocketAddressClass =
+            Class<?> inetSocketAddressClass =
                 Class.forName("java.net.InetSocketAddress");
 
-            Constructor inetSocketAddressCons =
-                inetSocketAddressClass.getConstructor(new Class[]{
+            Constructor<?> inetSocketAddressCons =
+                inetSocketAddressClass.getConstructor(new Class<?>[]{
                 String.class, int.class});
 
             return inetSocketAddressCons.newInstance(new Object[]{
                 host, new Integer(port)});
 
-        } catch (ClassNotFoundException e) {
+        } catch (ClassNotFoundException |
+                 InstantiationException |
+                 InvocationTargetException |
+                 IllegalAccessException e) {
             throw new NoSuchMethodException();
 
-        } catch (InstantiationException e) {
-            throw new NoSuchMethodException();
-
-        } catch (InvocationTargetException e) {
-            throw new NoSuchMethodException();
-
-        } catch (IllegalAccessException e) {
-            throw new NoSuchMethodException();
         }
     }
 
@@ -280,9 +275,9 @@
 
             // create the factory
 
-            Class socketFactoryClass = Obj.helper.loadClass(socketFactory);
+            Class<?> socketFactoryClass = Obj.helper.loadClass(socketFactory);
             Method getDefault =
-                socketFactoryClass.getMethod("getDefault", new Class[]{});
+                socketFactoryClass.getMethod("getDefault", new Class<?>[]{});
             Object factory = getDefault.invoke(null, new Object[]{});
 
             // create the socket
@@ -293,10 +288,10 @@
 
                 try {
                     createSocket = socketFactoryClass.getMethod("createSocket",
-                        new Class[]{});
+                        new Class<?>[]{});
 
                     Method connect = Socket.class.getMethod("connect",
-                        new Class[]{Class.forName("java.net.SocketAddress"),
+                        new Class<?>[]{Class.forName("java.net.SocketAddress"),
                         int.class});
                     Object endpoint = createInetSocketAddress(host, port);
 
@@ -320,7 +315,7 @@
 
             if (socket == null) {
                 createSocket = socketFactoryClass.getMethod("createSocket",
-                    new Class[]{String.class, int.class});
+                    new Class<?>[]{String.class, int.class});
 
                 if (debug) {
                     System.err.println("Connection: creating socket using " +
@@ -335,15 +330,15 @@
             if (connectTimeout > 0) {
 
                 try {
-                    Constructor socketCons =
-                        Socket.class.getConstructor(new Class[]{});
+                    Constructor<Socket> socketCons =
+                        Socket.class.getConstructor(new Class<?>[]{});
 
                     Method connect = Socket.class.getMethod("connect",
-                        new Class[]{Class.forName("java.net.SocketAddress"),
+                        new Class<?>[]{Class.forName("java.net.SocketAddress"),
                         int.class});
                     Object endpoint = createInetSocketAddress(host, port);
 
-                    socket = (Socket) socketCons.newInstance(new Object[]{});
+                    socket = socketCons.newInstance(new Object[]{});
 
                     if (debug) {
                         System.err.println("Connection: creating socket with " +
--- a/src/share/classes/com/sun/jndi/ldap/DigestClientId.java	Tue Sep 06 13:40:31 2011 -0700
+++ b/src/share/classes/com/sun/jndi/ldap/DigestClientId.java	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2005, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2011, Oracle and/or its affiliates. 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
@@ -65,7 +65,7 @@
     DigestClientId(int version, String hostname, int port,
         String protocol, Control[] bindCtls, OutputStream trace,
         String socketFactory, String username,
-        Object passwd, Hashtable env) {
+        Object passwd, Hashtable<?,?> env) {
 
         super(version, hostname, port, protocol, bindCtls, trace,
             socketFactory, username, passwd);
--- a/src/share/classes/com/sun/jndi/ldap/EventQueue.java	Tue Sep 06 13:40:31 2011 -0700
+++ b/src/share/classes/com/sun/jndi/ldap/EventQueue.java	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2005, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2011, Oracle and/or its affiliates. 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
@@ -25,7 +25,6 @@
 
 package com.sun.jndi.ldap;
 
-import java.io.*;
 import java.util.Vector;
 import java.util.EventObject;
 
@@ -52,9 +51,9 @@
         QueueElement next = null;
         QueueElement prev = null;
         EventObject event = null;
-        Vector vector = null;
+        Vector<NamingListener> vector = null;
 
-        QueueElement(EventObject event, Vector vector) {
+        QueueElement(EventObject event, Vector<NamingListener> vector) {
             this.event = event;
             this.vector = vector;
         }
@@ -87,7 +86,7 @@
      * are notified.
      * @param vector List of NamingListeners that will be notified of event.
      */
-    synchronized void enqueue(EventObject event, Vector vector) {
+    synchronized void enqueue(EventObject event, Vector<NamingListener> vector) {
         QueueElement newElt = new QueueElement(event, vector);
 
         if (head == null) {
@@ -133,7 +132,7 @@
         try {
             while ((qe = dequeue()) != null) {
                 EventObject e = qe.event;
-                Vector v = qe.vector;
+                Vector<NamingListener> v = qe.vector;
 
                 for (int i = 0; i < v.size(); i++) {
 
@@ -145,12 +144,11 @@
                     // only enqueue events with listseners of the correct type.
 
                     if (e instanceof NamingEvent) {
-                        ((NamingEvent)e).dispatch((NamingListener)v.elementAt(i));
+                        ((NamingEvent)e).dispatch(v.elementAt(i));
 
                     // An exception occurred: if notify all naming listeners
                     } else if (e instanceof NamingExceptionEvent) {
-                        ((NamingExceptionEvent)e).dispatch(
-                            (NamingListener)v.elementAt(i));
+                        ((NamingExceptionEvent)e).dispatch(v.elementAt(i));
                     } else if (e instanceof UnsolicitedNotificationEvent) {
                         ((UnsolicitedNotificationEvent)e).dispatch(
                             (UnsolicitedNotificationListener)v.elementAt(i));
--- a/src/share/classes/com/sun/jndi/ldap/EventSupport.java	Tue Sep 06 13:40:31 2011 -0700
+++ b/src/share/classes/com/sun/jndi/ldap/EventSupport.java	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2000, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2011, Oracle and/or its affiliates. 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
@@ -27,11 +27,9 @@
 
 import java.util.Hashtable;
 import java.util.Vector;
-import java.util.Enumeration;
 import java.util.EventObject;
 
 import javax.naming.*;
-import javax.naming.directory.*;
 import javax.naming.event.*;
 import javax.naming.directory.SearchControls;
 import javax.naming.ldap.UnsolicitedNotificationListener;
@@ -120,12 +118,13 @@
     /**
      * NamingEventNotifiers; hashed by search arguments;
      */
-    private Hashtable notifiers = new Hashtable(11);
+    private Hashtable<NotifierArgs, NamingEventNotifier> notifiers =
+            new Hashtable<>(11);
 
     /**
      * List of unsolicited notification listeners.
      */
-    private Vector unsolicited = null;
+    private Vector<UnsolicitedNotificationListener> unsolicited = null;
 
     /**
      * Constructs EventSupport for ctx.
@@ -155,8 +154,7 @@
             l instanceof NamespaceChangeListener) {
             NotifierArgs args = new NotifierArgs(nm, scope, l);
 
-            NamingEventNotifier notifier =
-                (NamingEventNotifier) notifiers.get(args);
+            NamingEventNotifier notifier = notifiers.get(args);
             if (notifier == null) {
                 notifier = new NamingEventNotifier(this, ctx, args, l);
                 notifiers.put(args, notifier);
@@ -167,10 +165,10 @@
         if (l instanceof UnsolicitedNotificationListener) {
             // Add listener to this's list of unsolicited notifiers
             if (unsolicited == null) {
-                unsolicited = new Vector(3);
+                unsolicited = new Vector<>(3);
             }
 
-            unsolicited.addElement(l);
+            unsolicited.addElement((UnsolicitedNotificationListener)l);
         }
     }
 
@@ -185,8 +183,7 @@
             l instanceof NamespaceChangeListener) {
             NotifierArgs args = new NotifierArgs(nm, filter, ctls, l);
 
-            NamingEventNotifier notifier =
-                (NamingEventNotifier) notifiers.get(args);
+            NamingEventNotifier notifier = notifiers.get(args);
             if (notifier == null) {
                 notifier = new NamingEventNotifier(this, ctx, args, l);
                 notifiers.put(args, notifier);
@@ -197,9 +194,9 @@
         if (l instanceof UnsolicitedNotificationListener) {
             // Add listener to this's list of unsolicited notifiers
             if (unsolicited == null) {
-                unsolicited = new Vector(3);
+                unsolicited = new Vector<>(3);
             }
-            unsolicited.addElement(l);
+            unsolicited.addElement((UnsolicitedNotificationListener)l);
         }
     }
 
@@ -207,15 +204,11 @@
      * Removes <tt>l</tt> from all notifiers in this context.
      */
     synchronized void removeNamingListener(NamingListener l) {
-        Enumeration allnotifiers = notifiers.elements();
-        NamingEventNotifier notifier;
-
         if (debug) System.err.println("EventSupport removing listener");
 
         // Go through list of notifiers, remove 'l' from each.
         // If 'l' is notifier's only listener, remove notifier too.
-        while (allnotifiers.hasMoreElements()) {
-            notifier = (NamingEventNotifier)allnotifiers.nextElement();
+        for (NamingEventNotifier notifier : notifiers.values()) {
             if (notifier != null) {
                 if (debug)
                     System.err.println("EventSupport removing listener from notifier");
@@ -305,8 +298,8 @@
     synchronized void cleanup() {
         if (debug) System.err.println("EventSupport clean up");
         if (notifiers != null) {
-            for (Enumeration ns = notifiers.elements(); ns.hasMoreElements(); ) {
-                ((NamingEventNotifier) ns.nextElement()).stop();
+            for (NamingEventNotifier notifier : notifiers.values()) {
+                notifier.stop();
             }
             notifiers = null;
         }
@@ -328,7 +321,8 @@
      * them to the registered listeners.
      * Package private; used by NamingEventNotifier to fire events
      */
-    synchronized void queueEvent(EventObject event, Vector vector) {
+    synchronized void queueEvent(EventObject event,
+                                 Vector<? extends NamingListener> vector) {
         if (eventQueue == null)
             eventQueue = new EventQueue();
 
@@ -340,7 +334,9 @@
          * of this event will not take effect until after the event is
          * delivered.
          */
-        Vector v = (Vector)vector.clone();
+        @SuppressWarnings("unchecked") // clone()
+        Vector<NamingListener> v =
+                (Vector<NamingListener>)vector.clone();
         eventQueue.enqueue(event, v);
     }
 
--- a/src/share/classes/com/sun/jndi/ldap/LdapAttribute.java	Tue Sep 06 13:40:31 2011 -0700
+++ b/src/share/classes/com/sun/jndi/ldap/LdapAttribute.java	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2002, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2011, Oracle and/or its affiliates. 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
@@ -26,8 +26,6 @@
 package com.sun.jndi.ldap;
 
 import java.io.IOException;
-import java.io.Serializable;
-import java.util.Enumeration;
 import java.util.Hashtable;
 import java.util.Vector;
 import javax.naming.*;
@@ -50,11 +48,12 @@
     // these two are used to reconstruct the baseCtx if this attribute has
     // been serialized (
     private String baseCtxURL;
-    private Hashtable baseCtxEnv;
+    private Hashtable<String, ? super String> baseCtxEnv;
 
+    @SuppressWarnings("unchecked") // clone()
     public Object clone() {
         LdapAttribute attr = new LdapAttribute(this.attrID, baseCtx, rdn);
-        attr.values = (Vector)values.clone();
+        attr.values = (Vector<Object>)values.clone();
         return attr;
     }
 
@@ -112,7 +111,7 @@
     private DirContext getBaseCtx() throws NamingException {
         if(baseCtx == null) {
             if (baseCtxEnv == null) {
-                baseCtxEnv = new Hashtable(3);
+                baseCtxEnv = new Hashtable<String, String>(3);
             }
             baseCtxEnv.put(Context.INITIAL_CONTEXT_FACTORY,
                              "com.sun.jndi.ldap.LdapCtxFactory");
@@ -144,9 +143,10 @@
      * we are serialized. This must be called _before_ the object is
      * serialized!!!
      */
+    @SuppressWarnings("unchecked") // clone()
     private void setBaseCtxInfo() {
-        Hashtable realEnv = null;
-        Hashtable secureEnv = null;
+        Hashtable<String, Object> realEnv = null;
+        Hashtable<String, Object> secureEnv = null;
 
         if (baseCtx != null) {
             realEnv = ((LdapCtx)baseCtx).envprops;
@@ -156,16 +156,14 @@
         if(realEnv != null && realEnv.size() > 0 ) {
             // remove any security credentials - otherwise the serialized form
             // would store them in the clear
-            Enumeration keys = realEnv.keys();
-            while(keys.hasMoreElements()) {
-                String key = (String)keys.nextElement();
+            for (String key : realEnv.keySet()){
                 if (key.indexOf("security") != -1 ) {
 
                     //if we need to remove props, we must do it to a clone
                     //of the environment. cloning is expensive, so we only do
                     //it if we have to.
                     if(secureEnv == null) {
-                        secureEnv = (Hashtable)realEnv.clone();
+                        secureEnv = (Hashtable<String, Object>)realEnv.clone();
                     }
                     secureEnv.remove(key);
                 }
--- a/src/share/classes/com/sun/jndi/ldap/LdapBindingEnumeration.java	Tue Sep 06 13:40:31 2011 -0700
+++ b/src/share/classes/com/sun/jndi/ldap/LdapBindingEnumeration.java	Fri Sep 09 17:22:03 2011 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2003, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2011, Oracle and/or its affiliates. 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
@@ -28,11 +28,13 @@
 import java.util.Vector;
 import javax.naming.*;
 import javax.naming.directory.*;
+import javax.naming.ldap.Control;
 import javax.naming.spi.*;
 
 import com.sun.jndi.toolkit.ctx.Continuation;
 
-final class LdapBindingEnumeration extends LdapNamingEnumeration {
+final class LdapBindingEnumeration
+        extends AbstractLdapNamingEnumeration<Binding> {
 
     LdapBindingEnumeration(LdapCtx homeCtx, LdapResult answer, Name remain,
         Continuation cont) throws NamingException
@@ -40,8 +42,9 @@
         super(homeCtx, answer, remain, cont);
     }
 
-    protected NameClassPair
-      createItem(String dn, Attributes attrs, Vector respCtls)
+    @Override
+    protected Binding
+      createItem(String dn, Attributes attrs, Vector<Control> respCtls)
         throws NamingException {
 
         Object obj = null;
@@ -85,9 +88,10 @@
         return binding;
     }
 
-    protected LdapNamingEnumeration
-    getReferredResults(LdapReferralContext refCtx) throws NamingException{
+    @Override
+    protected LdapBindingEnumeration getReferredResults(
+            LdapReferralContext refCtx) throws NamingException{
         // repeat the original operation at the new context
-        return (LdapNamingEnumeration) refCtx.listBindings(listArg);
+        return (LdapBindingEnumeration)refCtx.listBindings(listArg);
     }
 }
--- a/src/share/classes/com/sun/jndi/ldap/LdapClient.java	Tue Sep 06 13:40:31 2011 -0700
+++ b/src/share/classes/com/sun/jndi/ldap/LdapClient.java	Fri Sep 09 17:22:03 2011 -0700
@@ -25,8 +25,8 @@
 
 package com.sun.jndi.ldap;
 
-import java.net.*;
 import java.io.*;
+import java.util.Locale;
 import java.util.Vector;
 import java.util.Hashtable;
 
@@ -81,7 +81,8 @@
     static final boolean caseIgnore = true;
 
     // Default list of binary attributes
-    private static final Hashtable defaultBinaryAttrs = new Hashtable(23,0.75f);
+    private static final Hashtable<String, Boolean> defaultBinaryAttrs =
+            new Hashtable<>(23,0.75f);
     static {
         defaultBinaryAttrs.put("userpassword", Boolean.TRUE);      //2.5.4.35
         defaultBinaryAttrs.put("javaserializeddata", Boolean.TRUE);
@@ -146,7 +147,7 @@
 
     synchronized LdapResult
     authenticate(boolean initial, String name, Object pw, int version,
-        String authMechanism, Control[] ctls,  Hashtable env)
+        String authMechanism, Control[] ctls,  Hashtable<?,?> env)
         throws NamingException {
 
         authenticateCalled = true;
@@ -516,8 +517,8 @@
     LdapResult search(String dn, int scope, int deref, int sizeLimit,
                       int timeLimit, boolean attrsOnly, String attrs[],
                       String filter, int batchSize, Control[] reqCtls,
-                      Hashtable binaryAttrs, boolean waitFirstReply,
-                      int replyQueueCapacity)
+                      Hashtable<String, Boolean> binaryAttrs,
+                      boolean waitFirstReply, int replyQueueCapacity)
         throws IOException, NamingException {
 
         ensureOpen();
@@ -586,7 +587,7 @@
      * Retrieve the next batch of entries and/or referrals.
      */
     LdapResult getSearchReply(int batchSize, LdapResult res,
-        Hashtable binaryAttrs) throws IOException, NamingException {
+        Hashtable<String, Boolean> binaryAttrs) throws IOException, NamingException {
 
         ensureOpen();
 
@@ -600,7 +601,7 @@
     }
 
     private LdapResult getSearchReply(LdapRequest req,
-        int batchSize, LdapResult res, Hashtable binaryAttrs)
+        int batchSize, LdapResult res, Hashtable<String, Boolean> binaryAttrs)
         throws IOException, NamingException {
 
         if (batchSize == 0)
@@ -610,7 +611,7 @@
             res.entries.setSize(0); // clear the (previous) set of entries
         } else {
             res.entries =
-                new Vector(batchSize == Integer.MAX_VALUE ? 32 : batchSize);
+                new Vector<>(batchSize == Integer.MAX_VALUE ? 32 : batchSize);
         }
 
         if (res.referrals != null) {
@@ -660,7 +661,7 @@
             } else if ((seq == LDAP_REP_SEARCH_REF) && isLdapv3) {
 
                 // handle LDAPv3 search reference
-                Vector URLs = new Vector(4);
+                Vector<String> URLs = new Vector<>(4);
 
                 // %%% Although not strictly correct, some LDAP servers
                 //     encode the SEQUENCE OF tag in the SearchResultRef
@@ -676,7 +677,7 @@
                 }
 
                 if (res.referrals == null) {
-                    res.referrals = new Vector(4);
+                    res.referrals = new Vector<>(4);
                 }
                 res.referrals.addElement(URLs);
                 res.resControls = isLdapv3 ? parseControls(replyBer) : null;
@@ -700,7 +701,8 @@
         return res;
     }
 
-    private Attribute parseAttribute(BerDecoder ber, Hashtable binaryAttrs)
+    private Attribute parseAttribute(BerDecoder ber,
+                                     Hashtable<String, Boolean> binaryAttrs)
         throws IOException {
 
         int len[] = new int[1];
@@ -737,13 +739,15 @@
         if (hasBinaryValues) {
             la.add(ber.parseOctetString(ber.peekByte(), len));
         } else {
-            la.add(ber.parseStringWithTag(Ber.ASN_SIMPLE_STRING, isLdapv3, len));
+            la.add(ber.parseStringWithTag(
+                                    Ber.ASN_SIMPLE_STRING, isLdapv3, len));
         }
         return len[0];
     }
 
-    private boolean isBinaryValued(String attrid, Hashtable binaryAttrs) {
-        String id = attrid.toLowerCase();
+    private boolean isBinaryValued(String attrid,
+                                   Hashtable<String, Boolean> binaryAttrs) {
+        String id = attrid.toLowerCase(Locale.ENGLISH);
 
         return ((id.indexOf(";binary") != -1) ||
             defaultBinaryAttrs.containsKey(id) ||
@@ -751,8 +755,8 @@
     }
 
     // package entry point; used by Connection
-    static void parseResult(BerDecoder replyBer, LdapResult res, boolean isLdapv3)
-        throws IOException {
+    static void parseResult(BerDecoder replyBer, LdapResult res,
+            boolean isLdapv3) throws IOException {
 
         res.status = replyBer.parseEnumeration();
         res.matchedDN = replyBer.parseString(isLdapv3);
@@ -763,7 +767,7 @@
             (replyBer.bytesLeft() > 0) &&
             (replyBer.peekByte() == LDAP_REP_REFERRAL)) {
 
-            Vector URLs = new Vector(4);
+            Vector<String> URLs = new Vector<>(4);
             int[] seqlen = new int[1];
 
             replyBer.parseSeq(seqlen);
@@ -775,18 +779,18 @@
             }
 
             if (res.referrals == null) {
-                res.referrals = new Vector(4);
+                res.referrals = new Vector<>(4);
             }
             res.referrals.addElement(URLs);
         }
     }
 
     // package entry point; used by Connection
-    static Vector parseControls(BerDecoder replyBer) throws IOException {
+    static Vector<Control> parseControls(BerDecoder replyBer) throws IOException {
 
         // handle LDAPv3 controls (if present)
         if ((replyBer.bytesLeft() > 0) && (replyBer.peekByte() == LDAP_CONTROLS)) {
-            Vector ctls = new Vector(4);
+            Vector<Control> ctls = new Vector<>(4);
             String controlOID;
             boolean criticality = false; // default
             byte[] controlValue = null;  // optional
@@ -957,7 +961,7 @@
         ber.beginSeq(Ber.ASN_SEQUENCE | Ber.ASN_CONSTRUCTOR);
             ber.encodeString(attr.getID(), isLdapv3);
             ber.beginSeq(Ber.ASN_SEQUENCE | Ber.ASN_CONSTRUCTOR | 1);
-                NamingEnumeration enum_ = attr.getAll();
+                NamingEnumeration<?> enum_ = attr.getAll();
                 Object val;
                 while (enum_.hasMore()) {
                     val = enum_.next();
@@ -1007,9 +1011,10 @@
                 ber.beginSeq(LDAP_REQ_ADD);
                     ber.encodeString(entry.DN, isLdapv3);
                     ber.beginSeq(Ber.ASN_SEQUENCE | Ber.ASN_CONSTRUCTOR);
-                        NamingEnumeration enum_ = entry.attributes.getAll();
+                        NamingEnumeration<? extends Attribute> enum_ =
+                                entry.attributes.getAll();
                         while (enum_.hasMore()) {
-                            attr = (Attribute)enum_.next();
+                            attr = enum_.next();
 
                             // zero values is not permitted
                             if (hasNoValue(attr)) {
@@ -1474,7 +1479,7 @@
     // removeUnsolicited() is invoked to remove an LdapCtx from this client.
     //
     ////////////////////////////////////////////////////////////////////////////
-    private Vector unsolicited = new Vector(3);
+    private Vector<LdapCtx> unsolicited = new Vector<>(3);
     void addUnsolicited(LdapCtx ctx) {
         if (debug > 0) {
             System.err.println("LdapClient.addUnsolicited" + ctx);
@@ -1500,70 +1505,70 @@
         if (debug > 0) {
             System.err.println("LdapClient.processUnsolicited");
         }
-      synchronized (unsolicited) {
-        try {
-            // Parse the response
-            LdapResult res = new LdapResult();
+        synchronized (unsolicited) {
+            try {
+                // Parse the response
+                LdapResult res = new LdapResult();
 
-            ber.parseSeq(null); // init seq
-            ber.parseInt();             // msg id; should be 0; ignored
-            if (ber.parseByte() != LDAP_REP_EXTENSION) {
-                throw new IOException(
-                    "Unsolicited Notification must be an Extended Response");
+                ber.parseSeq(null); // init seq
+                ber.parseInt();             // msg id; should be 0; ignored
+                if (ber.parseByte() != LDAP_REP_EXTENSION) {
+                    throw new IOException(
+                        "Unsolicited Notification must be an Extended Response");
+                }
+                ber.parseLength();
+                parseExtResponse(ber, res);
+
+                if (DISCONNECT_OID.equals(res.extensionId)) {
+                    // force closing of connection
+                    forceClose(pooled);
+                }
+
+                if (unsolicited.size() > 0) {
+                    // Create an UnsolicitedNotification using the parsed data
+                    // Need a 'ctx' object because we want to use the context's
+                    // list of provider control factories.
+                    UnsolicitedNotification notice = new UnsolicitedResponseImpl(
+                        res.extensionId,
+                        res.extensionValue,
+                        res.referrals,
+                        res.status,
+                        res.errorMessage,
+                        res.matchedDN,
+                        (res.resControls != null) ?
+                        unsolicited.elementAt(0).convertControls(res.resControls) :
+                        null);
+
+                    // Fire UnsolicitedNotification events to listeners
+                    notifyUnsolicited(notice);
+
+                    // If "disconnect" notification,
+                    // notify unsolicited listeners via NamingException
+                    if (DISCONNECT_OID.equals(res.extensionId)) {
+                        notifyUnsolicited(
+                            new CommunicationException("Connection closed"));
+                    }
+                }
+            } catch (IOException e) {
+                if (unsolicited.size() == 0)
+                    return;  // no one registered; ignore
+
+                NamingException ne = new CommunicationException(
+                    "Problem parsing unsolicited notification");
+                ne.setRootCause(e);
+
+                notifyUnsolicited(ne);
+
+            } catch (NamingException e) {
+                notifyUnsolicited(e);
             }
-            ber.parseLength();
-            parseExtResponse(ber, res);