changeset 11158:8cc4dc300041 jdk9-b44

Merge
author lana
date Tue, 23 Dec 2014 13:58:34 -0800
parents 4cd41f1142d2 ee07afa6dc9b
children 346e256d398b 406206fbc0ca
files test/javax/swing/JComboBox/ConsumedEscTest/ConsumedEscTest.java
diffstat 645 files changed, 19057 insertions(+), 2965 deletions(-) [+]
line wrap: on
line diff
--- a/make/src/classes/build/tools/module/ModuleArchive.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/make/src/classes/build/tools/module/ModuleArchive.java	Tue Dec 23 13:58:34 2014 -0800
@@ -227,10 +227,12 @@
 
         private static String nativeDir(String filename) {
             if (System.getProperty("os.name").startsWith("Windows")) {
-                if (filename.endsWith(".dll"))
+                if (filename.endsWith(".dll") || filename.endsWith(".diz")
+                    || filename.endsWith(".pdb") || filename.endsWith(".map")) {
                     return "bin";
-                 else
+                } else {
                     return "lib";
+                }
             } else {
                 return "lib";
             }
--- a/make/src/classes/build/tools/tzdb/TzdbZoneRulesProvider.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/make/src/classes/build/tools/tzdb/TzdbZoneRulesProvider.java	Tue Dec 23 13:58:34 2014 -0800
@@ -758,8 +758,8 @@
                         if (endYear == Year.MAX_VALUE) {
                             endYear = startYear;
                             lastRules.add(new TransRule(endYear, rule));
-                            lastRulesStartYear = Math.max(startYear, lastRulesStartYear);
                         }
+                        lastRulesStartYear = Math.max(startYear, lastRulesStartYear);
                     } else {
                         if (endYear == Year.MAX_VALUE) {
                             //endYear = zoneEnd.getYear();
--- a/src/demo/share/java2d/J2DBench/options/default.opt	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/demo/share/java2d/J2DBench/options/default.opt	Tue Dec 23 13:58:34 2014 -0800
@@ -5,33 +5,53 @@
 global.env.runcount=5
 global.env.repcount=0
 global.env.testtime=2500
+global.results.workunits=units
+global.results.timeunits=sec
+global.results.ratio=unitspersec
 global.dest.screen=disabled
 global.dest.offscreen=disabled
 global.dest.compatimg.compatimg=disabled
 global.dest.compatimg.opqcompatimg=disabled
 global.dest.compatimg.bmcompatimg=disabled
 global.dest.compatimg.transcompatimg=disabled
-global.dest.volimg=enabled
+global.dest.volimg.volimg=enabled
+global.dest.volimg.opqvolimg=disabled
+global.dest.volimg.bmvolimg=disabled
+global.dest.volimg.transvolimg=disabled
 global.dest.bufimg.IntXrgb=disabled
 global.dest.bufimg.IntArgb=disabled
+global.dest.bufimg.IntArgbPre=disabled
+global.dest.bufimg.3ByteBgr=disabled
 global.dest.bufimg.ByteIndexed=disabled
 global.dest.bufimg.ByteGray=disabled
+global.dest.bufimg.4ByteAbgr=disabled
+global.dest.bufimg.4ByteAbgrPre=disabled
+global.dest.bufimg.custom=disabled
 graphics.opts.anim=2
 graphics.opts.sizes=20,250
 graphics.opts.alpharule=SrcOver
+graphics.opts.transform=ident
 graphics.opts.extraalpha=Both
 graphics.opts.xormode=Off
 graphics.opts.clip=Both
 graphics.opts.renderhint=Default
-graphics.render.opts.randomcolor=Both
+graphics.render.opts.paint=single,random
 graphics.render.opts.alphacolor=Off
 graphics.render.opts.antialias=Both
+graphics.render.opts.stroke=width1
 graphics.render.tests.drawLine=enabled
+graphics.render.tests.drawLineHoriz=disabled
+graphics.render.tests.drawLineVert=disabled
 graphics.render.tests.fillRect=enabled
+graphics.render.tests.drawRect=disabled
 graphics.render.tests.fillOval=enabled
+graphics.render.tests.drawOval=disabled
 graphics.render.tests.fillPoly=disabled
 graphics.render.tests.drawPoly=disabled
 graphics.render.tests.shape.fillCubic=enabled
+graphics.render.tests.shape.drawCubic=disabled
+graphics.render.tests.shape.fillEllipse2D=disabled
+graphics.render.tests.shape.drawEllipse2D=disabled
 graphics.imaging.src.offscr.opaque=disabled
 graphics.imaging.src.offscr.bitmask=disabled
 graphics.imaging.src.offscr.translucent=disabled
@@ -44,33 +64,98 @@
 graphics.imaging.src.transcompatimg.opaque=disabled
 graphics.imaging.src.transcompatimg.bitmask=disabled
 graphics.imaging.src.transcompatimg.translucent=enabled
-graphics.imaging.src.volimg.opaque=disabled
-graphics.imaging.src.volimg.bitmask=disabled
-graphics.imaging.src.volimg.translucent=disabled
+graphics.imaging.src.opqvolimg.opaque=disabled
+graphics.imaging.src.opqvolimg.bitmask=disabled
+graphics.imaging.src.opqvolimg.translucent=disabled
+graphics.imaging.src.bmvolimg.opaque=disabled
+graphics.imaging.src.bmvolimg.bitmask=disabled
+graphics.imaging.src.bmvolimg.translucent=disabled
+graphics.imaging.src.transvolimg.opaque=disabled
+graphics.imaging.src.transvolimg.bitmask=disabled
+graphics.imaging.src.transvolimg.translucent=disabled
 graphics.imaging.src.bufimg.IntXrgb.opaque=enabled
 graphics.imaging.src.bufimg.IntXrgb.bitmask=disabled
 graphics.imaging.src.bufimg.IntXrgb.translucent=disabled
 graphics.imaging.src.bufimg.IntArgb.opaque=disabled
 graphics.imaging.src.bufimg.IntArgb.bitmask=disabled
 graphics.imaging.src.bufimg.IntArgb.translucent=enabled
+graphics.imaging.src.bufimg.IntArgbPre.opaque=disabled
+graphics.imaging.src.bufimg.IntArgbPre.bitmask=disabled
+graphics.imaging.src.bufimg.IntArgbPre.translucent=disabled
 graphics.imaging.src.bufimg.ByteGray.opaque=disabled
 graphics.imaging.src.bufimg.ByteGray.bitmask=disabled
 graphics.imaging.src.bufimg.ByteGray.translucent=disabled
+graphics.imaging.src.bufimg.3ByteBgr.opaque=disabled
+graphics.imaging.src.bufimg.3ByteBgr.bitmask=disabled
+graphics.imaging.src.bufimg.3ByteBgr.translucent=disabled
+graphics.imaging.src.bufimg.4ByteAbgr.opaque=disabled
+graphics.imaging.src.bufimg.4ByteAbgr.bitmask=disabled
+graphics.imaging.src.bufimg.4ByteAbgr.translucent=disabled
+graphics.imaging.src.bufimg.4ByteAbgrPre.opaque=disabled
+graphics.imaging.src.bufimg.4ByteAbgrPre.bitmask=disabled
+graphics.imaging.src.bufimg.4ByteAbgrPre.translucent=disabled
 graphics.imaging.src.bufimg.ByteIndexedBm.opaque=disabled
 graphics.imaging.src.bufimg.ByteIndexedBm.bitmask=disabled
 graphics.imaging.src.bufimg.ByteIndexedBm.translucent=disabled
-graphics.imaging.tests.drawimage=enabled
-graphics.imaging.tests.drawimagebg=disabled
-graphics.imaging.tests.drawimagescaleup=enabled
-graphics.imaging.tests.drawimagescaledown=disabled
-graphics.imaging.tests.drawimagetxform=enabled
+graphics.imaging.src.bufimg.unmanagedIntXrgb.opaque=disabled
+graphics.imaging.src.bufimg.unmanagedIntXrgb.bitmask=disabled
+graphics.imaging.src.bufimg.unmanagedIntXrgb.translucent=disabled
+graphics.imaging.src.bufimg.unmanagedIntArgb.opaque=disabled
+graphics.imaging.src.bufimg.unmanagedIntArgb.bitmask=disabled
+graphics.imaging.src.bufimg.unmanagedIntArgb.translucent=disabled
+graphics.imaging.src.bufimg.unmanagedIntArgbPre.opaque=disabled
+graphics.imaging.src.bufimg.unmanagedIntArgbPre.bitmask=disabled
+graphics.imaging.src.bufimg.unmanagedIntArgbPre.translucent=disabled
+graphics.imaging.src.bufimg.unmanaged3ByteBgr.opaque=disabled
+graphics.imaging.src.bufimg.unmanaged3ByteBgr.bitmask=disabled
+graphics.imaging.src.bufimg.unmanaged3ByteBgr.translucent=disabled
+graphics.imaging.benchmarks.opts.interpolation=Nearest neighbor
+graphics.imaging.benchmarks.opts.touchsrc=Off
+graphics.imaging.benchmarks.tests.drawimage=enabled
+graphics.imaging.benchmarks.tests.drawimagebg=disabled
+graphics.imaging.benchmarks.tests.drawimagescaleup=enabled
+graphics.imaging.benchmarks.tests.drawimagescaledown=disabled
+graphics.imaging.benchmarks.tests.drawimagescalesplit=disabled
+graphics.imaging.benchmarks.tests.drawimagetxform=enabled
+graphics.imaging.imageops.opts.op=convolve3x3zero
+graphics.imaging.imageops.tests.graphics2d.drawimageop=disabled
+graphics.imaging.imageops.tests.bufimgop.filternull=disabled
+graphics.imaging.imageops.tests.bufimgop.filtercached=disabled
+graphics.imaging.imageops.tests.rasterop.filternull=disabled
+graphics.imaging.imageops.tests.rasterop.filtercached=disabled
+graphics.misc.copytests.copyAreaVert=disabled
+graphics.misc.copytests.copyAreaHoriz=disabled
+graphics.misc.copytests.copyAreaDiag=disabled
+pixel.opts.renderto=Off
+pixel.opts.renderfrom=Off
+pixel.src.1BitBinary=disabled
+pixel.src.2BitBinary=disabled
+pixel.src.4BitBinary=disabled
+pixel.src.ByteIndexed=disabled
+pixel.src.ByteGray=disabled
+pixel.src.Short555=disabled
+pixel.src.Short565=disabled
+pixel.src.ShortGray=disabled
+pixel.src.3ByteBgr=disabled
+pixel.src.4ByteAbgr=disabled
+pixel.src.IntXrgb=disabled
+pixel.src.IntXbgr=disabled
+pixel.src.IntArgb=disabled
+pixel.bimgtests.getrgb=disabled
+pixel.bimgtests.setrgb=disabled
+pixel.rastests.getdataelem=disabled
+pixel.rastests.setdataelem=disabled
+pixel.rastests.getpixel=disabled
+pixel.rastests.setpixel=disabled
+pixel.dbtests.getelem=disabled
+pixel.dbtests.setelem=disabled
 text.opts.data.tlength=32
 text.opts.data.tscript=english
 text.opts.font.fname=lucida
 text.opts.font.fstyle=0
 text.opts.font.fsize=13.0
 text.opts.font.ftx=Identity
-text.opts.graphics.taa=Both
+text.opts.graphics.textaa=Off,On
 text.opts.graphics.tfm=Off
 text.opts.graphics.gaa=Off
 text.opts.graphics.gtx=Identity
@@ -114,3 +199,66 @@
 text.construction.tests.gvfromfontlayout=disabled
 text.construction.tests.tlfromfont=disabled
 text.construction.tests.tlfrommap=disabled
+imageio.opts.size=250
+imageio.opts.content=photo
+imageio.input.opts.general.source.file=disabled
+imageio.input.opts.general.source.url=disabled
+imageio.input.opts.general.source.byteArray=disabled
+imageio.input.opts.imageio.useCache=Off
+imageio.input.image.toolkit.opts.format=
+imageio.input.image.toolkit.tests.createImage=disabled
+imageio.input.image.imageio.opts.format=
+imageio.input.image.imageio.tests.imageioRead=disabled
+imageio.input.image.imageio.reader.opts.seekForwardOnly=On
+imageio.input.image.imageio.reader.opts.ignoreMetadata=On
+imageio.input.image.imageio.reader.opts.installListener=Off
+imageio.input.image.imageio.reader.tests.read=disabled
+imageio.input.image.imageio.reader.tests.getImageMetadata=disabled
+imageio.input.stream.tests.construct=disabled
+imageio.input.stream.tests.read=disabled
+imageio.input.stream.tests.readByteArray=disabled
+imageio.input.stream.tests.readFullyByteArray=disabled
+imageio.input.stream.tests.readBit=disabled
+imageio.input.stream.tests.readByte=disabled
+imageio.input.stream.tests.readUnsignedByte=disabled
+imageio.input.stream.tests.readShort=disabled
+imageio.input.stream.tests.readUnsignedShort=disabled
+imageio.input.stream.tests.readInt=disabled
+imageio.input.stream.tests.readUnsignedInt=disabled
+imageio.input.stream.tests.readFloat=disabled
+imageio.input.stream.tests.readLong=disabled
+imageio.input.stream.tests.readDouble=disabled
+imageio.input.stream.tests.skipBytes=disabled
+imageio.output.opts.general.dest.file=disabled
+imageio.output.opts.general.dest.byteArray=disabled
+imageio.output.opts.imageio.useCache=Off
+imageio.output.image.imageio.opts.format=
+imageio.output.image.imageio.tests.imageioWrite=disabled
+imageio.output.image.imageio.writer.opts.installListener=Off
+imageio.output.image.imageio.writer.tests.write=disabled
+imageio.output.stream.tests.construct=disabled
+imageio.output.stream.tests.write=disabled
+imageio.output.stream.tests.writeByteArray=disabled
+imageio.output.stream.tests.writeBit=disabled
+imageio.output.stream.tests.writeByte=disabled
+imageio.output.stream.tests.writeShort=disabled
+imageio.output.stream.tests.writeInt=disabled
+imageio.output.stream.tests.writeFloat=disabled
+imageio.output.stream.tests.writeLong=disabled
+imageio.output.stream.tests.writeDouble=disabled
+cmm.opts.profiles=1001
+cmm.colorconv.data.fromRGB=disabled
+cmm.colorconv.data.toRGB=disabled
+cmm.colorconv.data.fromCIEXYZ=disabled
+cmm.colorconv.data.toCIEXYZ=disabled
+cmm.colorconv.ccop.ccopOptions.size=250
+cmm.colorconv.ccop.ccopOptions.content=photo
+cmm.colorconv.ccop.ccopOptions.srcType=INT_ARGB
+cmm.colorconv.ccop.ccopOptions.dstType=INT_ARGB
+cmm.colorconv.ccop.op_img=disabled
+cmm.colorconv.ccop.op_rst=disabled
+cmm.colorconv.ccop.op_draw=disabled
+cmm.colorconv.embed.embedOptions.Images=512x512
+cmm.colorconv.embed.embd_img_read=disabled
+cmm.profiles.getHeader=disabled
+cmm.profiles.getNumComponents=disabled
--- a/src/demo/share/java2d/J2DBench/src/j2dbench/Destinations.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/demo/share/java2d/J2DBench/src/j2dbench/Destinations.java	Tue Dec 23 13:58:34 2014 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -57,6 +57,7 @@
     public static Group.EnableSet destroot;
     public static Group bufimgdestroot;
     public static Group compatimgdestroot;
+    public static Group volimgdestroot;
 
     public static void init() {
         destroot = new Group.EnableSet(TestEnvironment.globaloptroot,
@@ -79,7 +80,16 @@
             }
 
             if (ImageTests.hasVolatileImage) {
+                volimgdestroot = new Group.EnableSet(destroot, "volimg",
+                        "Output to Volatile Image");
+
+                volimgdestroot.setHorizontal();
                 new VolatileImg();
+                if (ImageTests.hasTransparentVolatileImage) {
+                    new VolatileImg(Transparency.OPAQUE);
+                    new VolatileImg(Transparency.BITMASK);
+                    new VolatileImg(Transparency.TRANSLUCENT);
+                }
             }
 
             bufimgdestroot = new Group.EnableSet(destroot, "bufimg",
@@ -91,6 +101,8 @@
             new BufImg(BufferedImage.TYPE_3BYTE_BGR);
             new BufImg(BufferedImage.TYPE_BYTE_INDEXED);
             new BufImg(BufferedImage.TYPE_BYTE_GRAY);
+            new BufImg(BufferedImage.TYPE_4BYTE_ABGR);
+            new BufImg(BufferedImage.TYPE_4BYTE_ABGR_PRE);
             new CustomImg();
         }
     }
@@ -206,18 +218,62 @@
     }
 
     public static class VolatileImg extends Destinations {
+        private final int transparency;
+
+        public static final String[] ShortNames = {
+                "volimg",
+                "opqvolimg",
+                "bmvolimg",
+                "transvolimg",
+        };
+
+        public static final String[] ShortDescriptions = {
+                "Default",
+                "Opaque",
+                "Bitmask",
+                "Translucent",
+        };
+
+        public static final String[] LongDescriptions = {
+                "Default VolatileImg Image",
+                "Opaque VolatileImg Image",
+                "Bitmask VolatileImg Image",
+                "Translucent VolatileImg Image",
+        };
+
+        public static final String[] ModifierNames = {
+                "VolatileImg()",
+                "VolatileImg(Opaque)",
+                "VolatileImg(Bitmask)",
+                "VolatileImg(Translucent)",
+        };
+
         public VolatileImg() {
-            super(destroot, "volimg", "Output to Volatile Image", false);
+            this(0);
         }
 
-        public String getModifierValueName(Object val) {
-            return "VolatileImg";
+        public VolatileImg(final int transparency) {
+            super(volimgdestroot,
+                  ShortNames[transparency],
+                  ShortDescriptions[transparency],
+                  false);
+            this.transparency = transparency;
         }
 
-        public void setDestination(TestEnvironment env) {
+        public String getModifierValueName(final Object val) {
+            return ModifierNames[transparency];
+        }
+
+        public void setDestination(final TestEnvironment env) {
             Component c = env.getCanvas();
-            env.setTestImage(c.createVolatileImage(env.getWidth(),
-                                                   env.getHeight()));
+            GraphicsConfiguration gc = c.getGraphicsConfiguration();
+            int w = env.getWidth();
+            int h = env.getHeight();
+            if (transparency == 0) {
+                env.setTestImage(gc.createCompatibleVolatileImage(w, h));
+            } else {
+                env.setTestImage(gc.createCompatibleVolatileImage(w, h, transparency));
+            }
         }
     }
 
--- a/src/demo/share/java2d/J2DBench/src/j2dbench/Group.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/demo/share/java2d/J2DBench/src/j2dbench/Group.java	Tue Dec 23 13:58:34 2014 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -44,6 +44,7 @@
 import javax.swing.BoxLayout;
 import javax.swing.JComponent;
 import javax.swing.JPanel;
+import javax.swing.JScrollPane;
 import javax.swing.JTabbedPane;
 import javax.swing.border.TitledBorder;
 import java.util.NoSuchElementException;
@@ -199,7 +200,7 @@
                     p.add(comp);
                 }
             }
-            return p;
+            return new JScrollPane(p);
         }
     }
 
--- a/src/demo/share/java2d/J2DBench/src/j2dbench/J2DBench.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/demo/share/java2d/J2DBench/src/j2dbench/J2DBench.java	Tue Dec 23 13:58:34 2014 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -60,6 +60,8 @@
 import javax.swing.BoxLayout;
 import javax.swing.JFileChooser;
 import javax.swing.JOptionPane;
+import javax.swing.SwingUtilities;
+
 import java.text.SimpleDateFormat;
 import java.util.Date;
 
@@ -376,7 +378,11 @@
         }
 
         if (gui) {
-            startGUI();
+            SwingUtilities.invokeLater(new Runnable() {
+                public void run() {
+                    startGUI();
+                }
+            });
         } else {
 
             long start = System.currentTimeMillis();
@@ -772,6 +778,7 @@
 
         f.getContentPane().add(p, BorderLayout.SOUTH);
         f.pack();
+        f.setLocationRelativeTo(null);
         f.show();
     }
 
--- a/src/demo/share/java2d/J2DBench/src/j2dbench/tests/GraphicsTests.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/demo/share/java2d/J2DBench/src/j2dbench/tests/GraphicsTests.java	Tue Dec 23 13:58:34 2014 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -112,10 +112,10 @@
 
         sizeList = new Option.IntList(groptroot, "sizes",
                                       "Size of Operations to perform",
-                                      new int[] {1, 20, 100, 250, 1000},
+                                      new int[] {1, 20, 100, 250, 1000, 4000},
                                       new String[] {
                                           "1x1", "20x20", "100x100", "250x250",
-                                          "1000x1000",
+                                          "1000x1000", "4000x4000",
                                       },
                                       new String[] {
                                           "Tiny Shapes (1x1)",
@@ -123,6 +123,7 @@
                                           "Medium Shapes (100x100)",
                                           "Large Shapes (250x250)",
                                           "X-Large Shapes (1000x1000)",
+                                          "Huge Shapes (4000x4000)",
                                       }, 0xa);
         if (hasGraphics2D) {
             String rulenames[] = {
--- a/src/demo/share/java2d/J2DBench/src/j2dbench/tests/ImageTests.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/demo/share/java2d/J2DBench/src/j2dbench/tests/ImageTests.java	Tue Dec 23 13:58:34 2014 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -53,6 +53,7 @@
 import java.awt.AlphaComposite;
 import java.awt.Dimension;
 import java.awt.GraphicsConfiguration;
+import java.awt.RenderingHints;
 import java.awt.image.BufferedImage;
 import java.awt.image.BufferedImageOp;
 import java.awt.image.ByteLookupTable;
@@ -77,6 +78,7 @@
 
 public abstract class ImageTests extends GraphicsTests {
     public static boolean hasVolatileImage;
+    public static boolean hasTransparentVolatileImage;
     public static boolean hasCompatImage;
 
     static {
@@ -89,14 +91,20 @@
             hasCompatImage = true;
         } catch (NoSuchMethodError e) {
         }
+        try {
+            new Canvas().getMousePosition();
+            hasTransparentVolatileImage = true;
+        } catch (NoSuchMethodError e) {
+        }
     }
 
     static Group imageroot;
     static Group.EnableSet imgsrcroot;
     static Group.EnableSet bufimgsrcroot;
 
+    static Group imgbenchroot;
     static Group imgtestroot;
-    static Group imgoptionsroot;
+    static Group imgtestOptRoot;
 
     static Group imageOpRoot;
     static Group imageOpOptRoot;
@@ -106,6 +114,7 @@
     static Group rasterOpTestRoot;
     static Option opList;
     static Option doTouchSrc;
+    static Option interpolation;
 
     static String transNodeNames[] = {
         null, "opaque", "bitmask", "translucent",
@@ -122,19 +131,9 @@
 
         imgsrcroot = new Group.EnableSet(imageroot, "src",
                                          "Image Rendering Sources");
-        imgsrcroot.setBordered(true);
-
-        imgoptionsroot = new Group(imgsrcroot, "options",
-                                "Image Source Options");
-        imgoptionsroot.setBordered(true);
-        doTouchSrc =
-            new Option.Toggle(imgoptionsroot, "touchsrc",
-                              "Touch src image before every operation",
-                               Option.Toggle.Off);
-
-        imgtestroot = new Group(imageroot, "tests",
-                                "Image Rendering Tests");
-        imgtestroot.setBordered(true);
+        imgbenchroot = new Group(imageroot, "benchmarks",
+                                "Image Rendering Benchmarks");
+        imgtestOptRoot = new Group(imgbenchroot, "opts", "Options");
 
         new OffScreen();
 
@@ -144,9 +143,14 @@
                 new CompatImg(Transparency.BITMASK);
                 new CompatImg(Transparency.TRANSLUCENT);
             }
-
             if (hasVolatileImage) {
-                new VolatileImg();
+                if (hasTransparentVolatileImage) {
+                    new VolatileImg(Transparency.OPAQUE);
+                    new VolatileImg(Transparency.BITMASK);
+                    new VolatileImg(Transparency.TRANSLUCENT);
+                } else {
+                    new VolatileImg();
+                }
             }
 
             bufimgsrcroot =
@@ -154,11 +158,15 @@
                                     "BufferedImage Rendering Sources");
             new BufImg(BufferedImage.TYPE_INT_RGB);
             new BufImg(BufferedImage.TYPE_INT_ARGB);
+            new BufImg(BufferedImage.TYPE_INT_ARGB_PRE);
             new BufImg(BufferedImage.TYPE_BYTE_GRAY);
             new BufImg(BufferedImage.TYPE_3BYTE_BGR);
+            new BufImg(BufferedImage.TYPE_4BYTE_ABGR);
+            new BufImg(BufferedImage.TYPE_4BYTE_ABGR_PRE);
             new BmByteIndexBufImg();
             new BufImg(BufferedImage.TYPE_INT_RGB, true);
             new BufImg(BufferedImage.TYPE_INT_ARGB, true);
+            new BufImg(BufferedImage.TYPE_INT_ARGB_PRE, true);
             new BufImg(BufferedImage.TYPE_3BYTE_BGR, true);
 
             imageOpRoot = new Group(imageroot, "imageops",
@@ -211,12 +219,31 @@
             new BufImgOpFilter(true);
             new RasterOpFilter(false);
             new RasterOpFilter(true);
+
+            String interpolationnames[] = {"Nearest neighbor", "Bilinear",
+                                           "Bicubic",};
+            interpolation =
+                    new ObjectList(imgtestOptRoot, "interpolation",
+                                   "Interpolation",
+                                   interpolationnames, new Object[] {
+                            RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR,
+                            RenderingHints.VALUE_INTERPOLATION_BILINEAR,
+                            RenderingHints.VALUE_INTERPOLATION_BICUBIC,
+                    }, interpolationnames, interpolationnames, 1);
         }
 
+        doTouchSrc =
+                new Option.Toggle(imgtestOptRoot, "touchsrc",
+                                  "Touch source image before every operation",
+                                  Option.Toggle.Off);
+
+        imgtestroot = new Group(imgbenchroot, "tests", "Image Rendering Tests");
+
         new DrawImage();
         new DrawImageBg();
         new DrawImageScale("up", 1.5f);
         new DrawImageScale("down", .75f);
+        new DrawImageScale("split", .5f);
         new DrawImageTransform();
     }
 
@@ -236,6 +263,7 @@
         super(parent, nodeName, description);
         addDependency(imgsrcroot, srcFilter);
         addDependency(doTouchSrc);
+        addDependency(interpolation);
     }
 
     public GraphicsTests.Context createContext() {
@@ -248,6 +276,11 @@
 
         ictx.src = env.getSrcImage();
         ictx.touchSrc = env.isEnabled(doTouchSrc);
+        if (hasGraphics2D) {
+            Graphics2D g2d = (Graphics2D) ctx.graphics;
+            final Object modifier = env.getModifier(interpolation);
+            g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, modifier);
+        }
     }
 
     public abstract static class TriStateImageType extends Group {
@@ -290,13 +323,27 @@
     }
 
     public static class VolatileImg extends TriStateImageType {
+        private final int transparency;
+
         public VolatileImg() {
-            super(imgsrcroot, "volimg", "Volatile Image", Transparency.OPAQUE);
+            this(0);
+        }
+
+        public VolatileImg(int transparency) {
+            super(imgsrcroot, Destinations.VolatileImg.ShortNames[transparency],
+                  Destinations.VolatileImg.LongDescriptions[transparency],
+                  transparency);
+            this.transparency = transparency;
         }
 
         public Image makeImage(TestEnvironment env, int w, int h) {
             Canvas c = env.getCanvas();
-            return c.createVolatileImage(w, h);
+            GraphicsConfiguration gc = c.getGraphicsConfiguration();
+            if (transparency == 0) {
+                return gc.createCompatibleVolatileImage(w, h);
+            } else {
+                return gc.createCompatibleVolatileImage(w, h, transparency);
+            }
         }
     }
 
--- a/src/demo/share/java2d/J2DBench/src/j2dbench/tests/cmm/ColorConvertOpTests.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/demo/share/java2d/J2DBench/src/j2dbench/tests/cmm/ColorConvertOpTests.java	Tue Dec 23 13:58:34 2014 -0800
@@ -60,7 +60,7 @@
 public class ColorConvertOpTests extends ColorConversionTests {
 
     private static class ImageContent {
-        static ImageContent BLANK = new ImageContent("bank", "Blank (opaque black)");
+        static ImageContent BLANK = new ImageContent("blank", "Blank (opaque black)");
         static ImageContent RANDOM = new ImageContent("random", "Random");
         static ImageContent VECTOR = new ImageContent("vector", "Vector Art");
         static ImageContent PHOTO= new ImageContent("photo", "Photograph");
@@ -83,7 +83,7 @@
         static ImageType INT_RGB = new ImageType(BufferedImage.TYPE_INT_RGB, "INT_RGB", "TYPE_INT_RGB");
         static ImageType INT_BGR = new ImageType(BufferedImage.TYPE_INT_BGR, "INT_BGR", "TYPE_INT_BGR");
         static ImageType BYTE_3BYTE_BGR = new ImageType(BufferedImage.TYPE_3BYTE_BGR, "3BYTE_BGR", "TYPE_3BYTE_BGR");
-        static ImageType BYTE_4BYTE_ABGR = new ImageType(BufferedImage.TYPE_4BYTE_ABGR, "4BYTE_BGR", "TYPE_4BYTE_BGR");
+        static ImageType BYTE_4BYTE_ABGR = new ImageType(BufferedImage.TYPE_4BYTE_ABGR, "4BYTE_ABGR", "TYPE_4BYTE_ABGR");
         static ImageType COMPATIBLE_DST = new ImageType(0, "Compatible", "Compatible destination");
 
         private ImageType(int type, String abbr, String descr) {
@@ -130,7 +130,7 @@
 
         for (int i = 0; i < num; i++) {
             t[i] = allTypes[i];
-            names[i] = t[i].toString();
+            names[i] = t[i].abbrev;
             abbrev[i] = t[i].abbrev;
             descr[i] = t[i].descr;
         }
--- a/src/demo/share/java2d/J2DBench/src/j2dbench/tests/cmm/EmbeddedProfileTests.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/demo/share/java2d/J2DBench/src/j2dbench/tests/cmm/EmbeddedProfileTests.java	Tue Dec 23 13:58:34 2014 -0800
@@ -100,7 +100,7 @@
         String[] descr = new String[num];
 
         for (int i = 0; i < num; i++) {
-            names[i] = images[i].toString();
+            names[i] = images[i].abbrev;
             abbrev[i] = images[i].abbrev;
             descr[i] = images[i].description;
         }
@@ -153,7 +153,7 @@
                 iis = ImageIO.createImageInputStream(url.openStream());
                 reader = (ImageReader) ImageIO.getImageReaders(iis).next();
             } catch (IOException e) {
-                throw new RuntimeException("Unable to run the becnhmark", e);
+                throw new RuntimeException("Unable to run the benchmark", e);
             }
 
             do {
--- a/src/demo/share/jfc/TableExample/TableSorter.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/demo/share/jfc/TableExample/TableSorter.java	Tue Dec 23 13:58:34 2014 -0800
@@ -267,7 +267,7 @@
         than assigned otherwise sister calls in the recursion might
         get out of sinc.  When the number of elements is three they
         are partitioned so that the first set, [low, mid), has one
-        element and and the second, [mid, high), has two. We skip the
+        element and the second, [mid, high), has two. We skip the
         optimisation when the number of elements is three or less as
         the first compare in the normal merge will produce the same
         sequence of steps. This optimisation seems to be worthwhile
--- a/src/java.base/share/classes/com/sun/java/util/jar/pack/ClassReader.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/com/sun/java/util/jar/pack/ClassReader.java	Tue Dec 23 13:58:34 2014 -0800
@@ -497,7 +497,7 @@
                     code.max_locals  >= TOO_BIG ||
                     code.getLength() >= TOO_BIG ||
                     name.endsWith("X")) {
-                    // No, we don't really know what to do this this one.
+                    // No, we don't really know what to do with this one.
                     // Do not compress the rare and strange "u4" and "X" cases.
                     a = null;
                 }
--- a/src/java.base/share/classes/com/sun/java/util/jar/pack/Coding.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/com/sun/java/util/jar/pack/Coding.java	Tue Dec 23 13:58:34 2014 -0800
@@ -95,7 +95,7 @@
       If S>0, the unsigned value of a byte sequence is regarded as a binary
       integer.  If any of the S low-order bits are zero, the corresponding
       signed value will be non-negative.  If all of the S low-order bits
-      (S>0) are one, the the corresponding signed value will be negative.
+      (S>0) are one, the corresponding signed value will be negative.
 
       The non-negative signed values are compact and monotonically increasing
       (from 0) in the ordering of the corresponding unsigned values.
--- a/src/java.base/share/classes/java/io/FileInputStream.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/java/io/FileInputStream.java	Tue Dec 23 13:58:34 2014 -0800
@@ -26,6 +26,7 @@
 package java.io;
 
 import java.nio.channels.FileChannel;
+import java.util.concurrent.atomic.AtomicBoolean;
 import sun.nio.ch.FileChannelImpl;
 
 
@@ -57,10 +58,9 @@
      */
     private final String path;
 
-    private FileChannel channel = null;
+    private volatile FileChannel channel;
 
-    private final Object closeLock = new Object();
-    private volatile boolean closed = false;
+    private final AtomicBoolean closed = new AtomicBoolean(false);
 
     /**
      * Creates a <code>FileInputStream</code> by
@@ -313,14 +313,14 @@
      * @spec JSR-51
      */
     public void close() throws IOException {
-        synchronized (closeLock) {
-            if (closed) {
-                return;
-            }
-            closed = true;
+        if (!closed.compareAndSet(false, true)) {
+            // if compareAndSet() returns false closed was already true
+            return;
         }
-        if (channel != null) {
-           channel.close();
+
+        FileChannel fc = channel;
+        if (fc != null) {
+           fc.close();
         }
 
         fd.closeAll(new Closeable() {
@@ -364,12 +364,23 @@
      * @spec JSR-51
      */
     public FileChannel getChannel() {
-        synchronized (this) {
-            if (channel == null) {
-                channel = FileChannelImpl.open(fd, path, true, false, this);
+        FileChannel fc = this.channel;
+        if (fc == null) {
+            synchronized (this) {
+                fc = this.channel;
+                if (fc == null) {
+                    this.channel = fc = FileChannelImpl.open(fd, path, true, false, this);
+                    if (closed.get()) {
+                        try {
+                            fc.close();
+                        } catch (IOException ioe) {
+                            throw new InternalError(ioe); // should not happen
+                        }
+                    }
+                }
             }
-            return channel;
         }
+        return fc;
     }
 
     private static native void initIDs();
--- a/src/java.base/share/classes/java/io/FileOutputStream.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/java/io/FileOutputStream.java	Tue Dec 23 13:58:34 2014 -0800
@@ -26,6 +26,7 @@
 package java.io;
 
 import java.nio.channels.FileChannel;
+import java.util.concurrent.atomic.AtomicBoolean;
 import sun.misc.SharedSecrets;
 import sun.misc.JavaIOFileDescriptorAccess;
 import sun.nio.ch.FileChannelImpl;
@@ -68,7 +69,7 @@
     /**
      * The associated channel, initialized lazily.
      */
-    private FileChannel channel;
+    private volatile FileChannel channel;
 
     /**
      * The path of the referenced file
@@ -76,8 +77,7 @@
      */
     private final String path;
 
-    private final Object closeLock = new Object();
-    private volatile boolean closed = false;
+    private final AtomicBoolean closed = new AtomicBoolean(false);
 
     /**
      * Creates a file output stream to write to the file with the
@@ -341,15 +341,14 @@
      * @spec JSR-51
      */
     public void close() throws IOException {
-        synchronized (closeLock) {
-            if (closed) {
-                return;
-            }
-            closed = true;
+        if (!closed.compareAndSet(false, true)) {
+            // if compareAndSet() returns false closed was already true
+            return;
         }
 
-        if (channel != null) {
-            channel.close();
+        FileChannel fc = channel;
+        if (fc != null) {
+           fc.close();
         }
 
         fd.closeAll(new Closeable() {
@@ -394,12 +393,23 @@
      * @spec JSR-51
      */
     public FileChannel getChannel() {
-        synchronized (this) {
-            if (channel == null) {
-                channel = FileChannelImpl.open(fd, path, false, true, this);
+        FileChannel fc = this.channel;
+        if (fc == null) {
+            synchronized (this) {
+                fc = this.channel;
+                if (fc == null) {
+                    this.channel = fc = FileChannelImpl.open(fd, path, false, true, this);
+                    if (closed.get()) {
+                        try {
+                            fc.close();
+                        } catch (IOException ioe) {
+                            throw new InternalError(ioe); // should not happen
+                        }
+                    }
+                }
             }
-            return channel;
         }
+        return fc;
     }
 
     /**
--- a/src/java.base/share/classes/java/io/InputStream.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/java/io/InputStream.java	Tue Dec 23 13:58:34 2014 -0800
@@ -25,6 +25,8 @@
 
 package java.io;
 
+import java.util.Objects;
+
 /**
  * This abstract class is the superclass of all classes representing
  * an input stream of bytes.
@@ -48,6 +50,8 @@
     // use when skipping.
     private static final int MAX_SKIP_BUFFER_SIZE = 2048;
 
+    private static final int TRANSFER_BUFFER_SIZE = 8192;
+
     /**
      * Reads the next byte of data from the input stream. The value byte is
      * returned as an <code>int</code> in the range <code>0</code> to
@@ -364,4 +368,40 @@
         return false;
     }
 
+    /**
+     * Reads all bytes from this input stream and writes the bytes to the
+     * given output stream in the order that they are read. On return, this
+     * input stream will be at end of stream. This method does not close either
+     * stream.
+     * <p>
+     * This method may block indefinitely reading from the input stream, or
+     * writing to the output stream. The behavior for the case where the input
+     * and/or output stream is <i>asynchronously closed</i>, or the thread
+     * interrupted during the transfer, is highly input and output stream
+     * specific, and therefore not specified.
+     * <p>
+     * If an I/O error occurs reading from the input stream or writing to the
+     * output stream, then it may do so after some bytes have been read or
+     * written. Consequently the input stream may not be at end of stream and
+     * one, or both, streams may be in an inconsistent state. It is strongly
+     * recommended that both streams be promptly closed if an I/O error occurs.
+     *
+     * @param  out the output stream, non-null
+     * @return the number of bytes transferred
+     * @throws IOException if an I/O error occurs when reading or writing
+     * @throws NullPointerException if {@code out} is {@code null}
+     *
+     * @since 1.9
+     */
+    public long transferTo(OutputStream out) throws IOException {
+        Objects.requireNonNull(out, "out");
+        long transferred = 0;
+        byte[] buffer = new byte[TRANSFER_BUFFER_SIZE];
+        int read;
+        while ((read = this.read(buffer, 0, TRANSFER_BUFFER_SIZE)) >= 0) {
+            out.write(buffer, 0, read);
+            transferred += read;
+        }
+        return transferred;
+    }
 }
--- a/src/java.base/share/classes/java/io/ObjectInputStream.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/java/io/ObjectInputStream.java	Tue Dec 23 13:58:34 2014 -0800
@@ -2345,7 +2345,7 @@
                 skipped++;
                 n--;
             }
-            return skipped + skip(n);
+            return skipped + in.skip(n);
         }
 
         public int available() throws IOException {
--- a/src/java.base/share/classes/java/io/RandomAccessFile.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/java/io/RandomAccessFile.java	Tue Dec 23 13:58:34 2014 -0800
@@ -26,6 +26,7 @@
 package java.io;
 
 import java.nio.channels.FileChannel;
+import java.util.concurrent.atomic.AtomicBoolean;
 import sun.nio.ch.FileChannelImpl;
 
 
@@ -59,7 +60,7 @@
 public class RandomAccessFile implements DataOutput, DataInput, Closeable {
 
     private FileDescriptor fd;
-    private FileChannel channel = null;
+    private volatile FileChannel channel;
     private boolean rw;
 
     /**
@@ -68,8 +69,7 @@
      */
     private final String path;
 
-    private Object closeLock = new Object();
-    private volatile boolean closed = false;
+    private final AtomicBoolean closed = new AtomicBoolean(false);
 
     private static final int O_RDONLY = 1;
     private static final int O_RDWR =   2;
@@ -276,13 +276,24 @@
      * @since 1.4
      * @spec JSR-51
      */
-    public final FileChannel getChannel() {
-        synchronized (this) {
-            if (channel == null) {
-                channel = FileChannelImpl.open(fd, path, true, rw, this);
+    public FileChannel getChannel() {
+        FileChannel fc = this.channel;
+        if (fc == null) {
+            synchronized (this) {
+                fc = this.channel;
+                if (fc == null) {
+                    this.channel = fc = FileChannelImpl.open(fd, path, true, rw, this);
+                    if (closed.get()) {
+                        try {
+                            fc.close();
+                        } catch (IOException ioe) {
+                            throw new InternalError(ioe); // should not happen
+                        }
+                    }
+                }
             }
-            return channel;
         }
+        return fc;
     }
 
     /**
@@ -604,14 +615,14 @@
      * @spec JSR-51
      */
     public void close() throws IOException {
-        synchronized (closeLock) {
-            if (closed) {
-                return;
-            }
-            closed = true;
+        if (!closed.compareAndSet(false, true)) {
+            // if compareAndSet() returns false closed was already true
+            return;
         }
-        if (channel != null) {
-            channel.close();
+
+        FileChannel fc = channel;
+        if (fc != null) {
+           fc.close();
         }
 
         fd.closeAll(new Closeable() {
--- a/src/java.base/share/classes/java/lang/Class.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/java/lang/Class.java	Tue Dec 23 13:58:34 2014 -0800
@@ -1529,7 +1529,7 @@
      * the accessible public fields of the class or interface represented by
      * this {@code Class} object.
      *
-     * <p> If this {@code Class} object represents a class or interface with no
+     * <p> If this {@code Class} object represents a class or interface with
      * no accessible public fields, then this method returns an array of length
      * 0.
      *
--- a/src/java.base/share/classes/java/lang/ClassValue.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/java/lang/ClassValue.java	Tue Dec 23 13:58:34 2014 -0800
@@ -162,7 +162,7 @@
      * observe the time-dependent states as it computes {@code V1}, etc.
      * This does not remove the threat of a stale value, since there is a window of time
      * between the return of {@code computeValue} in {@code T} and the installation
-     * of the the new value.  No user synchronization is possible during this time.
+     * of the new value.  No user synchronization is possible during this time.
      *
      * @param type the type whose class value must be removed
      * @throws NullPointerException if the argument is null
@@ -285,7 +285,7 @@
      * will receive the notification without delay.
      * <p>
      * If version were not volatile, one thread T1 could persistently hold onto
-     * a stale value this.value == V1, while while another thread T2 advances
+     * a stale value this.value == V1, while another thread T2 advances
      * (under a lock) to this.value == V2.  This will typically be harmless,
      * but if T1 and T2 interact causally via some other channel, such that
      * T1's further actions are constrained (in the JMM) to happen after
--- a/src/java.base/share/classes/java/lang/Integer.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/java/lang/Integer.java	Tue Dec 23 13:58:34 2014 -0800
@@ -840,7 +840,7 @@
     /**
      * Parses the string argument as an unsigned decimal integer. The
      * characters in the string must all be decimal digits, except
-     * that the first character may be an an ASCII plus sign {@code
+     * that the first character may be an ASCII plus sign {@code
      * '+'} ({@code '\u005Cu002B'}). The resulting integer value
      * is returned, exactly as if the argument and the radix 10 were
      * given as arguments to the {@link
--- a/src/java.base/share/classes/java/lang/Long.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/java/lang/Long.java	Tue Dec 23 13:58:34 2014 -0800
@@ -971,7 +971,7 @@
     /**
      * Parses the string argument as an unsigned decimal {@code long}. The
      * characters in the string must all be decimal digits, except
-     * that the first character may be an an ASCII plus sign {@code
+     * that the first character may be an ASCII plus sign {@code
      * '+'} ({@code '\u005Cu002B'}). The resulting integer value
      * is returned, exactly as if the argument and the radix 10 were
      * given as arguments to the {@link
--- a/src/java.base/share/classes/java/lang/Math.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/java/lang/Math.java	Tue Dec 23 13:58:34 2014 -0800
@@ -2224,7 +2224,7 @@
          * multiply-store result is subnormal, the next multiply will
          * round it away to zero.  This is done by first multiplying
          * by 2 ^ (scaleFactor % n) and then multiplying several
-         * times by by 2^n as needed where n is the exponent of number
+         * times by 2^n as needed where n is the exponent of number
          * that is a covenient power of two.  In this way, at most one
          * real rounding error occurs.  If the double value set is
          * being used exclusively, the rounding will occur on a
@@ -2249,7 +2249,7 @@
 
         // magnitude of a power of two so large that scaling a finite
         // nonzero value by it would be guaranteed to over or
-        // underflow; due to rounding, scaling down takes takes an
+        // underflow; due to rounding, scaling down takes an
         // additional power of two which is reflected here
         final int MAX_SCALE = DoubleConsts.MAX_EXPONENT + -DoubleConsts.MIN_EXPONENT +
                               DoubleConsts.SIGNIFICAND_WIDTH + 1;
@@ -2318,7 +2318,7 @@
     public static float scalb(float f, int scaleFactor) {
         // magnitude of a power of two so large that scaling a finite
         // nonzero value by it would be guaranteed to over or
-        // underflow; due to rounding, scaling down takes takes an
+        // underflow; due to rounding, scaling down takes an
         // additional power of two which is reflected here
         final int MAX_SCALE = FloatConsts.MAX_EXPONENT + -FloatConsts.MIN_EXPONENT +
                               FloatConsts.SIGNIFICAND_WIDTH + 1;
--- a/src/java.base/share/classes/java/lang/ProcessBuilder.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/java/lang/ProcessBuilder.java	Tue Dec 23 13:58:34 2014 -0800
@@ -750,7 +750,7 @@
      * {@link Process#getErrorStream()} will return a
      * <a href="#redirect-output">null input stream</a>.
      *
-     * <p>If the {@link #redirectErrorStream redirectErrorStream}
+     * <p>If the {@link #redirectErrorStream() redirectErrorStream}
      * attribute has been set {@code true}, then the redirection set
      * by this method has no effect.
      *
--- a/src/java.base/share/classes/java/lang/Throwable.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/java/lang/Throwable.java	Tue Dec 23 13:58:34 2014 -0800
@@ -202,7 +202,7 @@
      * The field is initialized to a zero-length array.  A {@code
      * null} value of this field indicates subsequent calls to {@link
      * #setStackTrace(StackTraceElement[])} and {@link
-     * #fillInStackTrace()} will be be no-ops.
+     * #fillInStackTrace()} will be no-ops.
      *
      * @serial
      * @since 1.4
--- a/src/java.base/share/classes/java/lang/invoke/MethodType.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/java/lang/invoke/MethodType.java	Tue Dec 23 13:58:34 2014 -0800
@@ -116,7 +116,7 @@
     /**
      * Construct a temporary unchecked instance of MethodType for use only as a key to the intern table.
      * Does not check the given parameters for validity, and must be discarded after it is used as a searching key.
-     * The parameters are reversed for this constructor, so that is is not accidentally used.
+     * The parameters are reversed for this constructor, so that it is not accidentally used.
      */
     private MethodType(Class<?>[] ptypes, Class<?> rtype) {
         this.rtype = rtype;
@@ -1006,7 +1006,7 @@
      * Therefore, the number returned is the number of arguments
      * <em>including</em> and <em>after</em> the given parameter,
      * <em>plus</em> the number of long or double arguments
-     * at or after after the argument for the given parameter.
+     * at or after the argument for the given parameter.
      * <p>
      * This method is included for the benefit of applications that must
      * generate bytecodes that process method handles and invokedynamic.
--- a/src/java.base/share/classes/java/security/DomainCombiner.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/java/security/DomainCombiner.java	Tue Dec 23 13:58:34 2014 -0800
@@ -92,7 +92,7 @@
      * @param currentDomains the ProtectionDomains associated with the
      *          current execution Thread, up to the most recent
      *          privileged {@code ProtectionDomain}.
-     *          The ProtectionDomains are are listed in order of execution,
+     *          The ProtectionDomains are listed in order of execution,
      *          with the most recently executing {@code ProtectionDomain}
      *          residing at the beginning of the array. This parameter may
      *          be {@code null} if the current execution Thread
--- a/src/java.base/share/classes/java/security/Provider.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/java/security/Provider.java	Tue Dec 23 13:58:34 2014 -0800
@@ -1711,7 +1711,7 @@
          *
          * @param parameter the parameter to test
          *
-         * @return false if this this service cannot use the specified
+         * @return false if this service cannot use the specified
          * parameter; true if it can possibly use the parameter
          *
          * @throws InvalidParameterException if the value of parameter is
--- a/src/java.base/share/classes/java/security/Signature.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/java/security/Signature.java	Tue Dec 23 13:58:34 2014 -0800
@@ -776,7 +776,7 @@
     /**
      * Updates the data to be signed or verified using the specified
      * ByteBuffer. Processes the {@code data.remaining()} bytes
-     * starting at at {@code data.position()}.
+     * starting at {@code data.position()}.
      * Upon return, the buffer's position will be equal to its limit;
      * its limit will not have changed.
      *
--- a/src/java.base/share/classes/java/security/SignatureSpi.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/java/security/SignatureSpi.java	Tue Dec 23 13:58:34 2014 -0800
@@ -131,7 +131,7 @@
     /**
      * Updates the data to be signed or verified using the specified
      * ByteBuffer. Processes the {@code data.remaining()} bytes
-     * starting at at {@code data.position()}.
+     * starting at {@code data.position()}.
      * Upon return, the buffer's position will be equal to its limit;
      * its limit will not have changed.
      *
--- a/src/java.base/share/classes/java/security/interfaces/DSAKeyPairGenerator.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/java/security/interfaces/DSAKeyPairGenerator.java	Tue Dec 23 13:58:34 2014 -0800
@@ -54,7 +54,7 @@
  *
  * </ol>
  *
- * <p>Note: it is not always necessary to do do algorithm-specific
+ * <p>Note: it is not always necessary to do algorithm-specific
  * initialization for a DSA key pair generator. That is, it is not always
  * necessary to call an {@code initialize} method in this interface.
  * Algorithm-independent initialization using the {@code initialize} method
--- a/src/java.base/share/classes/java/time/format/DateTimeFormatter.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/java/time/format/DateTimeFormatter.java	Tue Dec 23 13:58:34 2014 -0800
@@ -1097,7 +1097,7 @@
      * This returns an immutable formatter capable of formatting and parsing
      * the ISO-8601 instant format.
      * When formatting, the second-of-minute is always output.
-     * The nano-of-second outputs zero, three, six or nine digits digits as necessary.
+     * The nano-of-second outputs zero, three, six or nine digits as necessary.
      * When parsing, time to at least the seconds field is required.
      * Fractional seconds from zero to nine are parsed.
      * The localized decimal style is not used.
--- a/src/java.base/share/classes/java/time/format/DateTimeFormatterBuilder.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/java/time/format/DateTimeFormatterBuilder.java	Tue Dec 23 13:58:34 2014 -0800
@@ -793,7 +793,7 @@
      * They are converted to a date-time with a zone-offset of UTC and formatted
      * using the standard ISO-8601 format.
      * With this method, formatting nano-of-second outputs zero, three, six
-     * or nine digits digits as necessary.
+     * or nine digits as necessary.
      * The localized decimal style is not used.
      * <p>
      * The instant is obtained using {@link ChronoField#INSTANT_SECONDS INSTANT_SECONDS}
--- a/src/java.base/share/classes/java/util/Arrays.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/java/util/Arrays.java	Tue Dec 23 13:58:34 2014 -0800
@@ -1221,7 +1221,7 @@
      *
      * <p>The implementation takes equal advantage of ascending and
      * descending order in its input array, and can take advantage of
-     * ascending and descending order in different parts of the the same
+     * ascending and descending order in different parts of the same
      * input array.  It is well-suited to merging two or more sorted arrays:
      * simply concatenate the arrays and sort the resulting array.
      *
@@ -1280,7 +1280,7 @@
      *
      * <p>The implementation takes equal advantage of ascending and
      * descending order in its input array, and can take advantage of
-     * ascending and descending order in different parts of the the same
+     * ascending and descending order in different parts of the same
      * input array.  It is well-suited to merging two or more sorted arrays:
      * simply concatenate the arrays and sort the resulting array.
      *
@@ -1407,7 +1407,7 @@
      *
      * <p>The implementation takes equal advantage of ascending and
      * descending order in its input array, and can take advantage of
-     * ascending and descending order in different parts of the the same
+     * ascending and descending order in different parts of the same
      * input array.  It is well-suited to merging two or more sorted arrays:
      * simply concatenate the arrays and sort the resulting array.
      *
@@ -1473,7 +1473,7 @@
      *
      * <p>The implementation takes equal advantage of ascending and
      * descending order in its input array, and can take advantage of
-     * ascending and descending order in different parts of the the same
+     * ascending and descending order in different parts of the same
      * input array.  It is well-suited to merging two or more sorted arrays:
      * simply concatenate the arrays and sort the resulting array.
      *
--- a/src/java.base/share/classes/java/util/Base64.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/java/util/Base64.java	Tue Dec 23 13:58:34 2014 -0800
@@ -556,7 +556,7 @@
          *
          * <p> It is the responsibility of the invoker of this method to make
          * sure the output byte array {@code dst} has enough space for decoding
-         * all bytes from the input byte array. No bytes will be be written to
+         * all bytes from the input byte array. No bytes will be written to
          * the output byte array if the output byte array is not big enough.
          *
          * <p> If the input byte array is not in valid Base64 encoding scheme
--- a/src/java.base/share/classes/java/util/Calendar.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/java/util/Calendar.java	Tue Dec 23 13:58:34 2014 -0800
@@ -2993,7 +2993,7 @@
     }
 
     /**
-     * Sets the date of this {@code Calendar} with the the given date
+     * Sets the date of this {@code Calendar} with the given date
      * specifiers - week year, week of year, and day of week.
      *
      * <p>Unlike the {@code set} method, all of the calendar fields
--- a/src/java.base/share/classes/java/util/Locale.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/java/util/Locale.java	Tue Dec 23 13:58:34 2014 -0800
@@ -95,7 +95,7 @@
  *   <code>Locale</code> always canonicalizes to lower case.</dd>
  *
  *   <dd>Well-formed language values have the form
- *   <code>[a-zA-Z]{2,8}</code>.  Note that this is not the the full
+ *   <code>[a-zA-Z]{2,8}</code>.  Note that this is not the full
  *   BCP47 language production, since it excludes extlang.  They are
  *   not needed since modern three-letter language codes replace
  *   them.</dd>
@@ -1691,7 +1691,7 @@
     }
 
     /**
-     * Returns a name for the the locale's script that is appropriate for display to
+     * Returns a name for the locale's script that is appropriate for display to
      * the user. If possible, the name will be localized for the default
      * {@link Locale.Category#DISPLAY DISPLAY} locale.  Returns
      * the empty string if this locale doesn't specify a script code.
--- a/src/java.base/share/classes/java/util/ResourceBundle.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/java/util/ResourceBundle.java	Tue Dec 23 13:58:34 2014 -0800
@@ -994,7 +994,7 @@
      * bundle is found, the default control's {@link Control#getFallbackLocale
      * getFallbackLocale} method is called, which returns the current default
      * locale.  A new sequence of candidate locale names is generated using this
-     * locale and and searched again, as above.
+     * locale and searched again, as above.
      *
      * <p>If still no result bundle is found, the base name alone is looked up. If
      * this still fails, a <code>MissingResourceException</code> is thrown.
--- a/src/java.base/share/classes/java/util/Spliterator.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/java/util/Spliterator.java	Tue Dec 23 13:58:34 2014 -0800
@@ -84,7 +84,7 @@
  * via the {@link #estimateSize} method.  Ideally, as reflected in characteristic
  * {@link #SIZED}, this value corresponds exactly to the number of elements
  * that would be encountered in a successful traversal.  However, even when not
- * exactly known, an estimated value value may still be useful to operations
+ * exactly known, an estimated value may still be useful to operations
  * being performed on the source, such as helping to determine whether it is
  * preferable to split further or traverse the remaining elements sequentially.
  *
--- a/src/java.base/share/classes/java/util/Spliterators.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/java/util/Spliterators.java	Tue Dec 23 13:58:34 2014 -0800
@@ -132,7 +132,7 @@
      * @param array The array, assumed to be unmodified during use
      * @param additionalCharacteristics Additional spliterator characteristics
      *        of this spliterator's source or elements beyond {@code SIZED} and
-     *        {@code SUBSIZED} which are are always reported
+     *        {@code SUBSIZED} which are always reported
      * @return A spliterator for an array
      * @throws NullPointerException if the given array is {@code null}
      * @see Arrays#spliterator(Object[])
@@ -164,7 +164,7 @@
      * @param toIndex One past the greatest index to cover
      * @param additionalCharacteristics Additional spliterator characteristics
      *        of this spliterator's source or elements beyond {@code SIZED} and
-     *        {@code SUBSIZED} which are are always reported
+     *        {@code SUBSIZED} which are always reported
      * @return A spliterator for an array
      * @throws NullPointerException if the given array is {@code null}
      * @throws ArrayIndexOutOfBoundsException if {@code fromIndex} is negative,
@@ -196,7 +196,7 @@
      * @param array The array, assumed to be unmodified during use
      * @param additionalCharacteristics Additional spliterator characteristics
      *        of this spliterator's source or elements beyond {@code SIZED} and
-     *        {@code SUBSIZED} which are are always reported
+     *        {@code SUBSIZED} which are always reported
      * @return A spliterator for an array
      * @throws NullPointerException if the given array is {@code null}
      * @see Arrays#spliterator(int[])
@@ -226,7 +226,7 @@
      * @param toIndex One past the greatest index to cover
      * @param additionalCharacteristics Additional spliterator characteristics
      *        of this spliterator's source or elements beyond {@code SIZED} and
-     *        {@code SUBSIZED} which are are always reported
+     *        {@code SUBSIZED} which are always reported
      * @return A spliterator for an array
      * @throws NullPointerException if the given array is {@code null}
      * @throws ArrayIndexOutOfBoundsException if {@code fromIndex} is negative,
@@ -258,7 +258,7 @@
      * @param array The array, assumed to be unmodified during use
      * @param additionalCharacteristics Additional spliterator characteristics
      *        of this spliterator's source or elements beyond {@code SIZED} and
-     *        {@code SUBSIZED} which are are always reported
+     *        {@code SUBSIZED} which are always reported
      * @return A spliterator for an array
      * @throws NullPointerException if the given array is {@code null}
      * @see Arrays#spliterator(long[])
@@ -282,7 +282,7 @@
      * {@code SIZED} and {@code SUBSIZED}.  The caller may provide additional
      * characteristics for the spliterator to report.  (For example, if it is
      * known the array will not be further modified, specify {@code IMMUTABLE};
-     * if the array data is considered to have an an encounter order, specify
+     * if the array data is considered to have an encounter order, specify
      * {@code ORDERED}).  The method {@link Arrays#spliterator(long[], int, int)} can
      * often be used instead, which returns a spliterator that reports
      * {@code SIZED}, {@code SUBSIZED}, {@code IMMUTABLE}, and {@code ORDERED}.
@@ -292,7 +292,7 @@
      * @param toIndex One past the greatest index to cover
      * @param additionalCharacteristics Additional spliterator characteristics
      *        of this spliterator's source or elements beyond {@code SIZED} and
-     *        {@code SUBSIZED} which are are always reported
+     *        {@code SUBSIZED} which are always reported
      * @return A spliterator for an array
      * @throws NullPointerException if the given array is {@code null}
      * @throws ArrayIndexOutOfBoundsException if {@code fromIndex} is negative,
@@ -324,7 +324,7 @@
      * @param array The array, assumed to be unmodified during use
      * @param additionalCharacteristics Additional spliterator characteristics
      *        of this spliterator's source or elements beyond {@code SIZED} and
-     *        {@code SUBSIZED} which are are always reported
+     *        {@code SUBSIZED} which are always reported
      * @return A spliterator for an array
      * @throws NullPointerException if the given array is {@code null}
      * @see Arrays#spliterator(double[])
@@ -348,7 +348,7 @@
      * {@code SIZED} and {@code SUBSIZED}.  The caller may provide additional
      * characteristics for the spliterator to report.  (For example, if it is
      * known the array will not be further modified, specify {@code IMMUTABLE};
-     * if the array data is considered to have an an encounter order, specify
+     * if the array data is considered to have an encounter order, specify
      * {@code ORDERED}).  The method {@link Arrays#spliterator(long[], int, int)} can
      * often be used instead, which returns a spliterator that reports
      * {@code SIZED}, {@code SUBSIZED}, {@code IMMUTABLE}, and {@code ORDERED}.
@@ -358,7 +358,7 @@
      * @param toIndex One past the greatest index to cover
      * @param additionalCharacteristics Additional spliterator characteristics
      *        of this spliterator's source or elements beyond {@code SIZED} and
-     *        {@code SUBSIZED} which are are always reported
+     *        {@code SUBSIZED} which are always reported
      * @return A spliterator for an array
      * @throws NullPointerException if the given array is {@code null}
      * @throws ArrayIndexOutOfBoundsException if {@code fromIndex} is negative,
@@ -907,7 +907,7 @@
          * @param array the array, assumed to be unmodified during use
          * @param additionalCharacteristics Additional spliterator characteristics
          * of this spliterator's source or elements beyond {@code SIZED} and
-         * {@code SUBSIZED} which are are always reported
+         * {@code SUBSIZED} which are always reported
          */
         public ArraySpliterator(Object[] array, int additionalCharacteristics) {
             this(array, 0, array.length, additionalCharacteristics);
@@ -920,7 +920,7 @@
          * @param fence one past the greatest index to cover
          * @param additionalCharacteristics Additional spliterator characteristics
          * of this spliterator's source or elements beyond {@code SIZED} and
-         * {@code SUBSIZED} which are are always reported
+         * {@code SUBSIZED} which are always reported
          */
         public ArraySpliterator(Object[] array, int origin, int fence, int additionalCharacteristics) {
             this.array = array;
@@ -992,7 +992,7 @@
          * @param array the array, assumed to be unmodified during use
          * @param additionalCharacteristics Additional spliterator characteristics
          *        of this spliterator's source or elements beyond {@code SIZED} and
-         *        {@code SUBSIZED} which are are always reported
+         *        {@code SUBSIZED} which are always reported
          */
         public IntArraySpliterator(int[] array, int additionalCharacteristics) {
             this(array, 0, array.length, additionalCharacteristics);
@@ -1005,7 +1005,7 @@
          * @param fence one past the greatest index to cover
          * @param additionalCharacteristics Additional spliterator characteristics
          *        of this spliterator's source or elements beyond {@code SIZED} and
-         *        {@code SUBSIZED} which are are always reported
+         *        {@code SUBSIZED} which are always reported
          */
         public IntArraySpliterator(int[] array, int origin, int fence, int additionalCharacteristics) {
             this.array = array;
@@ -1075,7 +1075,7 @@
          * @param array the array, assumed to be unmodified during use
          * @param additionalCharacteristics Additional spliterator characteristics
          *        of this spliterator's source or elements beyond {@code SIZED} and
-         *        {@code SUBSIZED} which are are always reported
+         *        {@code SUBSIZED} which are always reported
          */
         public LongArraySpliterator(long[] array, int additionalCharacteristics) {
             this(array, 0, array.length, additionalCharacteristics);
@@ -1088,7 +1088,7 @@
          * @param fence one past the greatest index to cover
          * @param additionalCharacteristics Additional spliterator characteristics
          *        of this spliterator's source or elements beyond {@code SIZED} and
-         *        {@code SUBSIZED} which are are always reported
+         *        {@code SUBSIZED} which are always reported
          */
         public LongArraySpliterator(long[] array, int origin, int fence, int additionalCharacteristics) {
             this.array = array;
@@ -1158,7 +1158,7 @@
          * @param array the array, assumed to be unmodified during use
          * @param additionalCharacteristics Additional spliterator characteristics
          *        of this spliterator's source or elements beyond {@code SIZED} and
-         *        {@code SUBSIZED} which are are always reported
+         *        {@code SUBSIZED} which are always reported
          */
         public DoubleArraySpliterator(double[] array, int additionalCharacteristics) {
             this(array, 0, array.length, additionalCharacteristics);
@@ -1171,7 +1171,7 @@
          * @param fence one past the greatest index to cover
          * @param additionalCharacteristics Additional spliterator characteristics
          *        of this spliterator's source or elements beyond {@code SIZED} and
-         *        {@code SUBSIZED} which are are always reported
+         *        {@code SUBSIZED} which are always reported
          */
         public DoubleArraySpliterator(double[] array, int origin, int fence, int additionalCharacteristics) {
             this.array = array;
@@ -1698,7 +1698,7 @@
         private int batch;            // batch size for splits
 
         /**
-         * Creates a spliterator using the given given
+         * Creates a spliterator using the given
          * collection's {@link java.util.Collection#iterator()) for traversal,
          * and reporting its {@link java.util.Collection#size()) as its initial
          * size.
--- a/src/java.base/share/classes/java/util/spi/LocaleServiceProvider.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/java/util/spi/LocaleServiceProvider.java	Tue Dec 23 13:58:34 2014 -0800
@@ -43,9 +43,8 @@
  * supported by the Java runtime environment itself.
  *
  * <h3>Packaging of Locale Sensitive Service Provider Implementations</h3>
- * Implementations of these locale sensitive services are packaged using the
- * <a href="../../../../technotes/guides/extensions/index.html">Java Extension Mechanism</a>
- * as installed extensions.  A provider identifies itself with a
+ * Implementations of these locale sensitive services can be made available
+ * by adding them to the application's class path. A provider identifies itself with a
  * provider-configuration file in the resource directory META-INF/services,
  * using the fully qualified provider interface class name as the file name.
  * The file should contain a list of fully-qualified concrete provider class names,
--- a/src/java.base/share/classes/java/util/zip/CRC32C.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/java/util/zip/CRC32C.java	Tue Dec 23 13:58:34 2014 -0800
@@ -204,7 +204,6 @@
     /**
      * Updates the CRC-32C checksum with the specified array of bytes.
      */
-    @SuppressWarnings("deprecation") // Unsafe.{getInt, getLong}
     private static int updateBytes(int crc, byte[] b, int off, int end) {
 
         // Do only byte reads for arrays so short they can't be aligned
@@ -228,11 +227,11 @@
                 int secondHalf;
                 if (Unsafe.ADDRESS_SIZE == 4) {
                     // On 32 bit platforms read two ints instead of a single 64bit long
-                    firstHalf = UNSAFE.getInt(b, Unsafe.ARRAY_BYTE_BASE_OFFSET + off);
-                    secondHalf = UNSAFE.getInt(b, Unsafe.ARRAY_BYTE_BASE_OFFSET + off
+                    firstHalf = UNSAFE.getInt(b, (long)Unsafe.ARRAY_BYTE_BASE_OFFSET + off);
+                    secondHalf = UNSAFE.getInt(b, (long)Unsafe.ARRAY_BYTE_BASE_OFFSET + off
                                                + Integer.BYTES);
                 } else {
-                    long value = UNSAFE.getLong(b, Unsafe.ARRAY_BYTE_BASE_OFFSET + off);
+                    long value = UNSAFE.getLong(b, (long)Unsafe.ARRAY_BYTE_BASE_OFFSET + off);
                     if (ByteOrder.nativeOrder() == ByteOrder.LITTLE_ENDIAN) {
                         firstHalf = (int) value;
                         secondHalf = (int) (value >>> 32);
--- a/src/java.base/share/classes/javax/security/auth/Policy.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/javax/security/auth/Policy.java	Tue Dec 23 13:58:34 2014 -0800
@@ -76,7 +76,7 @@
  * </pre>
  *
  * The CodeBase and Signedby components of the triplet name/value pairs
- * are optional.  If they are not present, then any any codebase will match,
+ * are optional.  If they are not present, then any codebase will match,
  * and any signer (including unsigned code) will match.
  * For Example,
  *
--- a/src/java.base/share/classes/javax/security/auth/SubjectDomainCombiner.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/javax/security/auth/SubjectDomainCombiner.java	Tue Dec 23 13:58:34 2014 -0800
@@ -137,7 +137,7 @@
      * @param currentDomains the ProtectionDomains associated with the
      *          current execution Thread, up to the most recent
      *          privileged {@code ProtectionDomain}.
-     *          The ProtectionDomains are are listed in order of execution,
+     *          The ProtectionDomains are listed in order of execution,
      *          with the most recently executing {@code ProtectionDomain}
      *          residing at the beginning of the array. This parameter may
      *          be {@code null} if the current execution Thread
--- a/src/java.base/share/classes/jdk/internal/org/objectweb/asm/Frame.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/jdk/internal/org/objectweb/asm/Frame.java	Tue Dec 23 13:58:34 2014 -0800
@@ -192,7 +192,7 @@
     private static final int LOCAL = 0x2000000;
 
     /**
-     * Kind of the the types that are relative to the stack of an input stack
+     * Kind of the types that are relative to the stack of an input stack
      * map frame. The value of such types is a position relatively to the top of
      * this stack.
      */
--- a/src/java.base/share/classes/jdk/internal/util/xml/XMLStreamWriter.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/jdk/internal/util/xml/XMLStreamWriter.java	Tue Dec 23 13:58:34 2014 -0800
@@ -116,7 +116,7 @@
     public void writeStartDocument() throws XMLStreamException;
 
     /**
-     * Write the XML Declaration. Defaults the the encoding to utf-8
+     * Write the XML Declaration. Defaults the encoding to utf-8
      * @param version version of the xml document
      * @throws XMLStreamException
      */
--- a/src/java.base/share/classes/sun/invoke/util/VerifyAccess.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/sun/invoke/util/VerifyAccess.java	Tue Dec 23 13:58:34 2014 -0800
@@ -80,7 +80,7 @@
      * @param defc the class in which the proposed member is actually defined
      * @param mods modifier flags for the proposed member
      * @param lookupClass the class for which the access check is being made
-     * @return true iff the the accessing class can access such a member
+     * @return true iff the accessing class can access such a member
      */
     public static boolean isMemberAccessible(Class<?> refc,  // symbolic ref class
                                              Class<?> defc,  // actual def class
--- a/src/java.base/share/classes/sun/launcher/resources/launcher.properties	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/sun/launcher/resources/launcher.properties	Tue Dec 23 13:58:34 2014 -0800
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2007, 2014, 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
@@ -46,11 +46,7 @@
 \    -verbose:[class|gc|jni]\n\
 \                  enable verbose output\n\
 \    -version      print product version and exit\n\
-\    -version:<value>\n\
-\                  require the specified version to run\n\
 \    -showversion  print product version and continue\n\
-\    -jre-restrict-search | -no-jre-restrict-search\n\
-\                  include/exclude user private JREs in the version search\n\
 \    -? -help      print this help message\n\
 \    -X            print help on non-standard options\n\
 \    -ea[:<packagename>...|:<classname>]\n\
--- a/src/java.base/share/classes/sun/misc/JavaNioAccess.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/sun/misc/JavaNioAccess.java	Tue Dec 23 13:58:34 2014 -0800
@@ -42,7 +42,7 @@
 
     /**
      * Constructs a direct ByteBuffer referring to the block of memory starting
-     * at the given memory address and and extending {@code cap} bytes.
+     * at the given memory address and extending {@code cap} bytes.
      * The {@code ob} parameter is an arbitrary object that is attached
      * to the resulting buffer.
      */
--- a/src/java.base/share/classes/sun/misc/Unsafe.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/sun/misc/Unsafe.java	Tue Dec 23 13:58:34 2014 -0800
@@ -958,6 +958,8 @@
      * other threads. This method is generally only useful if the
      * underlying field is a Java volatile (or if an array cell, one
      * that is otherwise only accessed using volatile accesses).
+     *
+     * Corresponds to C11 atomic_store_explicit(..., memory_order_release).
      */
     public native void    putOrderedObject(Object o, long offset, Object x);
 
@@ -1111,22 +1113,40 @@
 
 
     /**
-     * Ensures lack of reordering of loads before the fence
-     * with loads or stores after the fence.
+     * Ensures that loads before the fence will not be reordered with loads and
+     * stores after the fence; a "LoadLoad plus LoadStore barrier".
+     *
+     * Corresponds to C11 atomic_thread_fence(memory_order_acquire)
+     * (an "acquire fence").
+     *
+     * A pure LoadLoad fence is not provided, since the addition of LoadStore
+     * is almost always desired, and most current hardware instructions that
+     * provide a LoadLoad barrier also provide a LoadStore barrier for free.
      * @since 1.8
      */
     public native void loadFence();
 
     /**
-     * Ensures lack of reordering of stores before the fence
-     * with loads or stores after the fence.
+     * Ensures that loads and stores before the fence will not be reordered with
+     * stores after the fence; a "StoreStore plus LoadStore barrier".
+     *
+     * Corresponds to C11 atomic_thread_fence(memory_order_release)
+     * (a "release fence").
+     *
+     * A pure StoreStore fence is not provided, since the addition of LoadStore
+     * is almost always desired, and most current hardware instructions that
+     * provide a StoreStore barrier also provide a LoadStore barrier for free.
      * @since 1.8
      */
     public native void storeFence();
 
     /**
-     * Ensures lack of reordering of loads or stores before the fence
-     * with loads or stores after the fence.
+     * Ensures that loads and stores before the fence will not be reordered
+     * with loads and stores after the fence.  Implies the effects of both
+     * loadFence() and storeFence(), and in addition, the effect of a StoreLoad
+     * barrier.
+     *
+     * Corresponds to C11 atomic_thread_fence(memory_order_seq_cst).
      * @since 1.8
      */
     public native void fullFence();
--- a/src/java.base/share/classes/sun/misc/VM.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/sun/misc/VM.java	Tue Dec 23 13:58:34 2014 -0800
@@ -150,7 +150,7 @@
     private static volatile boolean booted = false;
     private static final Object lock = new Object();
 
-    // Invoked by by System.initializeSystemClass just before returning.
+    // Invoked by System.initializeSystemClass just before returning.
     // Subsystems that are invoked during initialization can check this
     // property in order to avoid doing things that should wait until the
     // application class loader has been set up.
--- a/src/java.base/share/classes/sun/net/ftp/impl/FtpClient.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/sun/net/ftp/impl/FtpClient.java	Tue Dec 23 13:58:34 2014 -0800
@@ -2187,7 +2187,7 @@
             return resp.get(0).substring(4);
         }
         // on multiple lines answers, like the ones above, remove 1st and last
-        // line, concat the the others.
+        // line, concat the others.
         StringBuilder sb = new StringBuilder();
         for (int i = 1; i < resp.size() - 1; i++) {
             sb.append(resp.get(i).substring(3));
--- a/src/java.base/share/classes/sun/nio/ch/FileChannelImpl.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/sun/nio/ch/FileChannelImpl.java	Tue Dec 23 13:58:34 2014 -0800
@@ -110,6 +110,9 @@
     // -- Standard channel operations --
 
     protected void implCloseChannel() throws IOException {
+        if (!fd.valid())
+            return; // nothing to do
+
         // Release and invalidate any locks that we still hold
         if (fileLockTable != null) {
             for (FileLock fl: fileLockTable.removeAll()) {
--- a/src/java.base/share/classes/sun/reflect/Label.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/sun/reflect/Label.java	Tue Dec 23 13:58:34 2014 -0800
@@ -52,7 +52,7 @@
         final short patchBCI;
         final int   stackDepth;
     }
-    private List<PatchInfo> patches = new ArrayList<>();
+    private final List<PatchInfo> patches = new ArrayList<>();
 
     public Label() {
     }
--- a/src/java.base/share/classes/sun/reflect/ReflectionFactory.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/sun/reflect/ReflectionFactory.java	Tue Dec 23 13:58:34 2014 -0800
@@ -135,7 +135,7 @@
      * be initialized and therefore must not be called until the
      * first get/set of this field.
      * @param field the field
-     * @param override true if caller has overridden aaccessibility
+     * @param override true if caller has overridden accessibility
      */
     public FieldAccessor newFieldAccessor(Field field, boolean override) {
         checkInitted();
--- a/src/java.base/share/classes/sun/reflect/annotation/AnnotationInvocationHandler.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/sun/reflect/annotation/AnnotationInvocationHandler.java	Tue Dec 23 13:58:34 2014 -0800
@@ -280,19 +280,25 @@
      * be rare).
      */
     private Method[] getMemberMethods() {
-        if (memberMethods == null) {
-            memberMethods = AccessController.doPrivileged(
-                new PrivilegedAction<Method[]>() {
-                    public Method[] run() {
-                        final Method[] mm = type.getDeclaredMethods();
-                        validateAnnotationMethods(mm);
-                        AccessibleObject.setAccessible(mm, true);
-                        return mm;
-                    }
-                });
+        Method[] value = memberMethods;
+        if (value == null) {
+            value = computeMemberMethods();
+            memberMethods = value;
         }
-        return memberMethods;
+        return value;
     }
+
+    private Method[] computeMemberMethods() {
+        return AccessController.doPrivileged(
+            new PrivilegedAction<Method[]>() {
+                public Method[] run() {
+                    final Method[] methods = type.getDeclaredMethods();
+                    validateAnnotationMethods(methods);
+                    AccessibleObject.setAccessible(methods, true);
+                    return methods;
+                }});
+    }
+
     private transient volatile Method[] memberMethods = null;
 
     /**
--- a/src/java.base/share/classes/sun/reflect/annotation/AnnotationParser.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/sun/reflect/annotation/AnnotationParser.java	Tue Dec 23 13:58:34 2014 -0800
@@ -772,7 +772,7 @@
     }
 
     /**
-     * Return an appropriate exception proxy for a mismatching array
+     * Returns an appropriate exception proxy for a mismatching array
      * annotation where the erroneous array has the specified tag.
      */
     private static ExceptionProxy exceptionProxy(int tag) {
--- a/src/java.base/share/classes/sun/reflect/annotation/AnnotationSupport.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/sun/reflect/annotation/AnnotationSupport.java	Tue Dec 23 13:58:34 2014 -0800
@@ -115,7 +115,7 @@
 
 
     /**
-     * Figures out if conatiner class comes before containee class among the
+     * Figures out if container class comes before containee class among the
      * keys of the given map.
      *
      * @return true if container class is found before containee class when
--- a/src/java.base/share/classes/sun/reflect/annotation/AnnotationType.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/sun/reflect/annotation/AnnotationType.java	Tue Dec 23 13:58:34 2014 -0800
@@ -55,7 +55,7 @@
     private final Map<String, Object> memberDefaults;
 
     /**
-     * Member name -> Method object mapping. This (and its assoicated
+     * Member name -> Method object mapping. This (and its associated
      * accessor) are used only to generate AnnotationTypeMismatchExceptions.
      */
     private final Map<String, Method> members;
@@ -117,7 +117,7 @@
         memberDefaults = new HashMap<String, Object>(0);
         members = new HashMap<String, Method>(methods.length+1, 1.0f);
 
-        for (Method method :  methods) {
+        for (Method method : methods) {
             if (method.getParameterTypes().length != 0)
                 throw new IllegalArgumentException(method + " has params");
             String name = method.getName();
@@ -213,7 +213,7 @@
     }
 
     /**
-     * Returns true if this this annotation type is inherited.
+     * Returns true if this annotation type is inherited.
      */
     public boolean isInherited() {
         return inherited;
--- a/src/java.base/share/classes/sun/reflect/annotation/AnnotationTypeMismatchExceptionProxy.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/sun/reflect/annotation/AnnotationTypeMismatchExceptionProxy.java	Tue Dec 23 13:58:34 2014 -0800
@@ -36,7 +36,7 @@
 class AnnotationTypeMismatchExceptionProxy extends ExceptionProxy {
     private static final long serialVersionUID = 7844069490309503934L;
     private Method member;
-    private String foundType;
+    private final String foundType;
 
     /**
      * It turns out to be convenient to construct these proxies in
--- a/src/java.base/share/classes/sun/reflect/annotation/EnumConstantNotPresentExceptionProxy.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/sun/reflect/annotation/EnumConstantNotPresentExceptionProxy.java	Tue Dec 23 13:58:34 2014 -0800
@@ -33,8 +33,8 @@
  */
 public class EnumConstantNotPresentExceptionProxy extends ExceptionProxy {
     private static final long serialVersionUID = -604662101303187330L;
-    Class<? extends Enum<?>> enumType;
-    String constName;
+    final Class<? extends Enum<?>> enumType;
+    final String constName;
 
     public EnumConstantNotPresentExceptionProxy(Class<? extends Enum<?>> enumType,
                                                 String constName) {
--- a/src/java.base/share/classes/sun/reflect/annotation/TypeNotPresentExceptionProxy.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/sun/reflect/annotation/TypeNotPresentExceptionProxy.java	Tue Dec 23 13:58:34 2014 -0800
@@ -34,8 +34,8 @@
  */
 public class TypeNotPresentExceptionProxy extends ExceptionProxy {
     private static final long serialVersionUID = 5565925172427947573L;
-    String typeName;
-    Throwable cause;
+    final String typeName;
+    final Throwable cause;
 
     public TypeNotPresentExceptionProxy(String typeName, Throwable cause) {
         this.typeName = typeName;
--- a/src/java.base/share/classes/sun/reflect/generics/factory/CoreReflectionFactory.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/sun/reflect/generics/factory/CoreReflectionFactory.java	Tue Dec 23 13:58:34 2014 -0800
@@ -76,11 +76,11 @@
      * kind. Classes produced will be those that would be loaded by the
      * defining class loader of the declaration <tt>d</tt> (if <tt>d</tt>
      * is a type declaration, or by the defining loader of the declaring
-     * class of <tt>d</tt>  otherwise.
+     * class of <tt>d</tt> otherwise.
      * <p> Type variables will be created or lookup as necessary in the
      * scope <tt> s</tt>.
      * @param d - the generic declaration (class, interface, method or
-     * constructor) that thsi factory services
+     * constructor) that this factory services
      * @param s  the scope in which the factory will allocate and search for
      * type variables
      * @return an instance of <tt>CoreReflectionFactory</tt>
--- a/src/java.base/share/classes/sun/reflect/generics/factory/GenericsFactory.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/sun/reflect/generics/factory/GenericsFactory.java	Tue Dec 23 13:58:34 2014 -0800
@@ -42,7 +42,7 @@
  * of a specific implementation by using this interface. For example,
  * repositories of generic type information are initialized with a
  * factory conforming to this interface, and use it to generate the
- * tpe information they are required to provide. As a result, such
+ * type information they are required to provide. As a result, such
  * repository code can be shared across different reflective systems.
  */
 public interface GenericsFactory {
@@ -60,7 +60,7 @@
     TypeVariable<?> makeTypeVariable(String name,
                                      FieldTypeSignature[] bounds);
     /**
-     * Return an instance of the <tt>ParameterizedType</tt> interface
+     * Returns an instance of the <tt>ParameterizedType</tt> interface
      * that corresponds to a generic type instantiation of the
      * generic declaration <tt>declaration</tt> with actual type arguments
      * <tt>typeArgs</tt>.
@@ -123,7 +123,7 @@
     /**
      * Returns a (possibly generic) array type.
      * If the component type is a parameterized type, it must
-     * only have unbounded wildcard arguemnts, otherwise
+     * only have unbounded wildcard arguments, otherwise
      * a MalformedParameterizedTypeException is thrown.
      * @param componentType - the component type of the array
      * @return a (possibly generic) array type.
--- a/src/java.base/share/classes/sun/reflect/generics/parser/SignatureParser.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/sun/reflect/generics/parser/SignatureParser.java	Tue Dec 23 13:58:34 2014 -0800
@@ -227,7 +227,7 @@
      *     "<" FormalTypeParameter+ ">"
      */
     private FormalTypeParameter[] parseFormalTypeParameters(){
-        List<FormalTypeParameter> ftps =  new ArrayList<>(3);
+        List<FormalTypeParameter> ftps = new ArrayList<>(3);
         assert(current() == '<'); // should not have been called at all
         if (current() != '<') { throw error("expected '<'");}
         advance();
--- a/src/java.base/share/classes/sun/reflect/generics/reflectiveObjects/GenericArrayTypeImpl.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/sun/reflect/generics/reflectiveObjects/GenericArrayTypeImpl.java	Tue Dec 23 13:58:34 2014 -0800
@@ -53,10 +53,10 @@
 
 
     /**
-     * Returns  a <tt>Type</tt> object representing the component type
+     * Returns a <tt>Type</tt> object representing the component type
      * of this array.
      *
-     * @return  a <tt>Type</tt> object representing the component type
+     * @return a <tt>Type</tt> object representing the component type
      *     of this array
      * @since 1.5
      */
--- a/src/java.base/share/classes/sun/reflect/generics/reflectiveObjects/LazyReflectiveObjectGenerator.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/sun/reflect/generics/reflectiveObjects/LazyReflectiveObjectGenerator.java	Tue Dec 23 13:58:34 2014 -0800
@@ -25,7 +25,9 @@
 
 package sun.reflect.generics.reflectiveObjects;
 
+import java.lang.reflect.Type;
 import sun.reflect.generics.factory.GenericsFactory;
+import sun.reflect.generics.tree.FieldTypeSignature;
 import sun.reflect.generics.visitor.Reifier;
 
 
@@ -54,4 +56,16 @@
     // produce a reifying visitor (could this be typed as a TypeTreeVisitor?
     protected Reifier getReifier(){return Reifier.make(getFactory());}
 
+    Type[] reifyBounds(FieldTypeSignature[] boundASTs) {
+        final int length = boundASTs.length;
+        final Type[] bounds = new Type[length];
+        // iterate over bound trees, reifying each in turn
+        for (int i = 0; i < length; i++) {
+            Reifier r = getReifier();
+            boundASTs[i].accept(r);
+            bounds[i] = r.getResult();
+        }
+        return bounds;
+    }
+
 }
--- a/src/java.base/share/classes/sun/reflect/generics/reflectiveObjects/TypeVariableImpl.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/sun/reflect/generics/reflectiveObjects/TypeVariableImpl.java	Tue Dec 23 13:58:34 2014 -0800
@@ -51,17 +51,16 @@
  */
 public class TypeVariableImpl<D extends GenericDeclaration>
     extends LazyReflectiveObjectGenerator implements TypeVariable<D> {
-    D genericDeclaration;
-    private String name;
-    // upper bounds - evaluated lazily
-    private Type[] bounds;
+    private final D genericDeclaration;
+    private final String name;
 
-    // The ASTs for the bounds. We are required to evaluate the bounds
-    // lazily, so we store these at least until we are first asked
-    // for the bounds. This also neatly solves the
-    // problem with F-bounds - you can't reify them before the formal
-    // is defined.
-    private FieldTypeSignature[] boundASTs;
+    /**
+     * The upper bounds.  Lazily converted from FieldTypeSignature[] to Type[].
+     * We are required to evaluate the bounds lazily, so we store them as ASTs
+     * until we are first asked for them.  This also neatly solves the problem
+     * with F-bounds - you can't reify them before the formal is defined.
+     */
+    private volatile Object[] bounds;
 
     // constructor is private to enforce access through static factory
     private TypeVariableImpl(D decl, String n, FieldTypeSignature[] bs,
@@ -69,18 +68,7 @@
         super(f);
         genericDeclaration = decl;
         name = n;
-        boundASTs = bs;
-    }
-
-    // Accessors
-
-    // accessor for ASTs for bounds. Must not be called after
-    // bounds have been evaluated, because we might throw the ASTs
-    // away (but that is not thread-safe, is it?)
-    private FieldTypeSignature[] getBoundASTs() {
-        // check that bounds were not evaluated yet
-        assert(bounds == null);
-        return boundASTs;
+        bounds = bs;
     }
 
     /**
@@ -123,7 +111,7 @@
      *  <li>Otherwise, B is resolved.
      * </ul>
      *
-     * @throws <tt>TypeNotPresentException</tt>  if any of the
+     * @throws <tt>TypeNotPresentException</tt> if any of the
      *     bounds refers to a non-existent type declaration
      * @throws <tt>MalformedParameterizedTypeException</tt> if any of the
      *     bounds refer to a parameterized type that cannot be instantiated
@@ -132,34 +120,23 @@
      *     type variable
     */
     public Type[] getBounds() {
-        // lazily initialize bounds if necessary
-        if (bounds == null) {
-            FieldTypeSignature[] fts = getBoundASTs(); // get AST
-            // allocate result array; note that
-            // keeping ts and bounds separate helps with threads
-            Type[] ts = new Type[fts.length];
-            // iterate over bound trees, reifying each in turn
-            for ( int j = 0; j  < fts.length; j++) {
-                Reifier r = getReifier();
-                fts[j].accept(r);
-                ts[j] = r.getResult();
-            }
-            // cache result
-            bounds = ts;
-            // could throw away bound ASTs here; thread safety?
+        Object[] value = bounds;
+        if (value instanceof FieldTypeSignature[]) {
+            value = reifyBounds((FieldTypeSignature[])value);
+            bounds = value;
         }
-        return bounds.clone(); // return cached bounds
+        return (Type[])value.clone();
     }
 
     /**
-     * Returns the <tt>GenericDeclaration</tt>  object representing the
+     * Returns the <tt>GenericDeclaration</tt> object representing the
      * generic declaration that declared this type variable.
      *
      * @return the generic declaration that declared this type variable.
      *
      * @since 1.5
      */
-    public D getGenericDeclaration(){
+    public D getGenericDeclaration() {
         if (genericDeclaration instanceof Class)
             ReflectUtil.checkPackageAccess((Class)genericDeclaration);
         else if ((genericDeclaration instanceof Method) ||
--- a/src/java.base/share/classes/sun/reflect/generics/reflectiveObjects/WildcardTypeImpl.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/sun/reflect/generics/reflectiveObjects/WildcardTypeImpl.java	Tue Dec 23 13:58:34 2014 -0800
@@ -39,25 +39,26 @@
  */
 public class WildcardTypeImpl extends LazyReflectiveObjectGenerator
     implements WildcardType {
-    // upper bounds - evaluated lazily
-    private Type[] upperBounds;
-    // lower bounds - evaluated lazily
-    private Type[] lowerBounds;
-    // The ASTs for the bounds. We are required to evaluate the bounds
-    // lazily, so we store these at least until we are first asked
-    // for the bounds. This also neatly solves the
-    // problem with F-bounds - you can't reify them before the formal
-    // is defined.
-    private FieldTypeSignature[] upperBoundASTs;
-    private FieldTypeSignature[] lowerBoundASTs;
+
+    /*
+     * We are required to evaluate the bounds lazily, so we store them as ASTs
+     * until we are first asked for them.  This also neatly solves the problem
+     * with F-bounds - you can't reify them before the formal is defined.
+     */
+
+    /** The upper bounds.  Lazily converted from FieldTypeSignature[] to Type[]. */
+    private volatile Object[] upperBounds;
+
+    /** The lower bounds.  Lazily converted from FieldTypeSignature[] to Type[]. */
+    private volatile Object[] lowerBounds;
 
     // constructor is private to enforce access through static factory
     private WildcardTypeImpl(FieldTypeSignature[] ubs,
                              FieldTypeSignature[] lbs,
                              GenericsFactory f) {
         super(f);
-        upperBoundASTs = ubs;
-        lowerBoundASTs = lbs;
+        upperBounds = ubs;
+        lowerBounds = lbs;
     }
 
     /**
@@ -76,27 +77,8 @@
         return new WildcardTypeImpl(ubs, lbs, f);
     }
 
-    // Accessors
-
-    // accessor for ASTs for upper bounds. Must not be called after upper
-    // bounds have been evaluated, because we might throw the ASTs
-    // away (but that is not thread-safe, is it?)
-    private FieldTypeSignature[] getUpperBoundASTs() {
-        // check that upper bounds were not evaluated yet
-        assert(upperBounds == null);
-        return upperBoundASTs;
-    }
-    // accessor for ASTs for lower bounds. Must not be called after lower
-    // bounds have been evaluated, because we might throw the ASTs
-    // away (but that is not thread-safe, is it?)
-    private FieldTypeSignature[] getLowerBoundASTs() {
-        // check that lower bounds were not evaluated yet
-        assert(lowerBounds == null);
-        return lowerBoundASTs;
-    }
-
     /**
-     * Returns an array of <tt>Type</tt> objects representing the  upper
+     * Returns an array of <tt>Type</tt> objects representing the upper
      * bound(s) of this type variable.  Note that if no upper bound is
      * explicitly declared, the upper bound is <tt>Object</tt>.
      *
@@ -117,24 +99,12 @@
      *     for any reason
      */
     public Type[] getUpperBounds() {
-        // lazily initialize bounds if necessary
-        if (upperBounds == null) {
-            FieldTypeSignature[] fts = getUpperBoundASTs(); // get AST
-
-            // allocate result array; note that
-            // keeping ts and bounds separate helps with threads
-            Type[] ts = new Type[fts.length];
-            // iterate over bound trees, reifying each in turn
-            for ( int j = 0; j  < fts.length; j++) {
-                Reifier r = getReifier();
-                fts[j].accept(r);
-                ts[j] = r.getResult();
-            }
-            // cache result
-            upperBounds = ts;
-            // could throw away upper bound ASTs here; thread safety?
+        Object[] value = upperBounds;
+        if (value instanceof FieldTypeSignature[]) {
+            value = reifyBounds((FieldTypeSignature[])value);
+            upperBounds = value;
         }
-        return upperBounds.clone(); // return cached bounds
+        return (Type[])value.clone();
     }
 
     /**
@@ -160,23 +130,12 @@
      *     for any reason
      */
     public Type[] getLowerBounds() {
-        // lazily initialize bounds if necessary
-        if (lowerBounds == null) {
-            FieldTypeSignature[] fts = getLowerBoundASTs(); // get AST
-            // allocate result array; note that
-            // keeping ts and bounds separate helps with threads
-            Type[] ts = new Type[fts.length];
-            // iterate over bound trees, reifying each in turn
-            for ( int j = 0; j  < fts.length; j++) {
-                Reifier r = getReifier();
-                fts[j].accept(r);
-                ts[j] = r.getResult();
-            }
-            // cache result
-            lowerBounds = ts;
-            // could throw away lower bound ASTs here; thread safety?
+        Object[] value = lowerBounds;
+        if (value instanceof FieldTypeSignature[]) {
+            value = reifyBounds((FieldTypeSignature[])value);
+            lowerBounds = value;
         }
-        return lowerBounds.clone(); // return cached bounds
+        return (Type[])value.clone();
     }
 
     public String toString() {
--- a/src/java.base/share/classes/sun/reflect/generics/repository/AbstractRepository.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/sun/reflect/generics/repository/AbstractRepository.java	Tue Dec 23 13:58:34 2014 -0800
@@ -56,7 +56,7 @@
     /**
      * Returns a <tt>Reifier</tt> used to convert parts of the
      * AST into reflective objects.
-     * @return  a <tt>Reifier</tt> used to convert parts of the
+     * @return a <tt>Reifier</tt> used to convert parts of the
      * AST into reflective objects
      */
     protected Reifier getReifier(){return Reifier.make(getFactory());}
@@ -76,7 +76,7 @@
     }
 
     /**
-     * Returns the AST for the genric type info of this entity.
+     * Returns the AST for the generic type info of this entity.
      * @param s - a string representing the generic signature of this
      * entity
      * @return the AST for the generic type info of this entity.
--- a/src/java.base/share/classes/sun/reflect/generics/repository/ClassRepository.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/sun/reflect/generics/repository/ClassRepository.java	Tue Dec 23 13:58:34 2014 -0800
@@ -25,12 +25,12 @@
 
 package sun.reflect.generics.repository;
 
+import java.lang.reflect.Type;
 import sun.reflect.generics.factory.GenericsFactory;
 import sun.reflect.generics.tree.ClassSignature;
 import sun.reflect.generics.tree.TypeTree;
 import sun.reflect.generics.visitor.Reifier;
 import sun.reflect.generics.parser.SignatureParser;
-import java.lang.reflect.Type;
 
 
 /**
@@ -70,47 +70,54 @@
         return new ClassRepository(rawSig, f);
     }
 
-    // public API
  /*
  * When queried for a particular piece of type information, the
  * general pattern is to consult the corresponding cached value.
  * If the corresponding field is non-null, it is returned.
  * If not, it is created lazily. This is done by selecting the appropriate
  * part of the tree and transforming it into a reflective object
- * using a visitor.
- * a visitor, which is created by feeding it the factory
+ * using a visitor, which is created by feeding it the factory
  * with which the repository was created.
  */
 
     public Type getSuperclass() {
-        Type superclass = this.superclass;
-        if (superclass == null) { // lazily initialize superclass
-            Reifier r = getReifier(); // obtain visitor
-            // Extract superclass subtree from AST and reify
-            getTree().getSuperclass().accept(r);
-            // extract result from visitor and cache it
-            superclass = r.getResult();
-            this.superclass = superclass;
+        Type value = superclass;
+        if (value == null) {
+            value = computeSuperclass();
+            superclass = value;
         }
-        return superclass; // return cached result
+        return value;
     }
 
     public Type[] getSuperInterfaces() {
-        Type[] superInterfaces = this.superInterfaces;
-        if (superInterfaces == null) { // lazily initialize super interfaces
-            // first, extract super interface subtree(s) from AST
-            TypeTree[] ts  = getTree().getSuperInterfaces();
-            // create array to store reified subtree(s)
-            superInterfaces = new Type[ts.length];
-            // reify all subtrees
-            for (int i = 0; i < ts.length; i++) {
-                Reifier r = getReifier(); // obtain visitor
-                ts[i].accept(r);// reify subtree
-                // extract result from visitor and store it
-                superInterfaces[i] = r.getResult();
-            }
-            this.superInterfaces = superInterfaces;
+        Type[] value = superInterfaces;
+        if (value == null) {
+            value = computeSuperInterfaces();
+            superInterfaces = value;
         }
-        return superInterfaces.clone(); // return cached result
+        return value.clone();
+    }
+
+    private Type computeSuperclass() {
+        Reifier r = getReifier(); // obtain visitor
+        // Extract superclass subtree from AST and reify
+        getTree().getSuperclass().accept(r);
+        return r.getResult();
+    }
+
+    private Type[] computeSuperInterfaces() {
+        // first, extract super interface subtree(s) from AST
+        TypeTree[] ts = getTree().getSuperInterfaces();
+        // create array to store reified subtree(s)
+        int length = ts.length;
+        Type[] superInterfaces = new Type[length];
+        // reify all subtrees
+        for (int i = 0; i < length; i++) {
+            Reifier r = getReifier(); // obtain visitor
+            ts[i].accept(r);// reify subtree
+            // extract result from visitor and store it
+            superInterfaces[i] = r.getResult();
+        }
+        return superInterfaces;
     }
 }
--- a/src/java.base/share/classes/sun/reflect/generics/repository/ConstructorRepository.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/sun/reflect/generics/repository/ConstructorRepository.java	Tue Dec 23 13:58:34 2014 -0800
@@ -43,8 +43,11 @@
 public class ConstructorRepository
     extends GenericDeclRepository<MethodTypeSignature> {
 
-    private Type[] paramTypes; // caches the generic parameter types info
-    private Type[] exceptionTypes; // caches the generic exception types info
+    /** The generic parameter types.  Lazily initialized. */
+    private volatile Type[] parameterTypes;
+
+    /** The generic exception types.  Lazily initialized. */
+    private volatile Type[] exceptionTypes;
 
  // protected, to enforce use of static factory yet allow subclassing
     protected ConstructorRepository(String rawSig, GenericsFactory f) {
@@ -64,57 +67,67 @@
      * @return a <tt>ConstructorRepository</tt> that manages the generic type
      * information represented in the signature <tt>rawSig</tt>
      */
-    public static ConstructorRepository make(String rawSig,
-                                             GenericsFactory f) {
+    public static ConstructorRepository make(String rawSig, GenericsFactory f) {
         return new ConstructorRepository(rawSig, f);
     }
 
-    // public API
-
  /*
  * When queried for a particular piece of type information, the
  * general pattern is to consult the corresponding cached value.
  * If the corresponding field is non-null, it is returned.
  * If not, it is created lazily. This is done by selecting the appropriate
  * part of the tree and transforming it into a reflective object
- * using a visitor.
- * a visitor, which is created by feeding it the factory
+ * using a visitor, which is created by feeding it the factory
  * with which the repository was created.
  */
 
-    public Type[] getParameterTypes(){
-        if (paramTypes == null) { // lazily initialize parameter types
-            // first, extract parameter type subtree(s) from AST
-            TypeSignature[] pts = getTree().getParameterTypes();
-            // create array to store reified subtree(s)
-            Type[] ps = new Type[pts.length];
-            // reify all subtrees
-            for (int i = 0; i < pts.length; i++) {
-                Reifier r = getReifier(); // obtain visitor
-                pts[i].accept(r); // reify subtree
-                // extract result from visitor and store it
-                ps[i] = r.getResult();
-            }
-            paramTypes = ps; // cache overall result
+    public Type[] getParameterTypes() {
+        Type[] value = parameterTypes;
+        if (value == null) {
+            value = computeParameterTypes();
+            parameterTypes = value;
         }
-        return paramTypes.clone(); // return cached result
+        return value.clone();
     }
 
-    public Type[] getExceptionTypes(){
-        if (exceptionTypes == null) { // lazily initialize exception types
-            // first, extract exception type subtree(s) from AST
-            FieldTypeSignature[] ets = getTree().getExceptionTypes();
-            // create array to store reified subtree(s)
-            Type[] es = new Type[ets.length];
-            // reify all subtrees
-            for (int i = 0; i < ets.length; i++) {
-                Reifier r = getReifier(); // obtain visitor
-                ets[i].accept(r); // reify subtree
-                // extract result from visitor and store it
-                es[i] = r.getResult();
-            }
-            exceptionTypes = es; // cache overall result
+    public Type[] getExceptionTypes() {
+        Type[] value = exceptionTypes;
+        if (value == null) {
+            value = computeExceptionTypes();
+            exceptionTypes = value;
         }
-        return exceptionTypes.clone(); // return cached result
+        return value.clone();
+    }
+
+    private Type[] computeParameterTypes() {
+        // first, extract parameter type subtree(s) from AST
+        TypeSignature[] pts = getTree().getParameterTypes();
+        // create array to store reified subtree(s)
+        int length = pts.length;
+        Type[] parameterTypes = new Type[length];
+        // reify all subtrees
+        for (int i = 0; i < length; i++) {
+            Reifier r = getReifier(); // obtain visitor
+            pts[i].accept(r); // reify subtree
+            // extract result from visitor and store it
+            parameterTypes[i] = r.getResult();
+        }
+        return parameterTypes;
+    }
+
+    private Type[] computeExceptionTypes() {
+        // first, extract exception type subtree(s) from AST
+        FieldTypeSignature[] ets = getTree().getExceptionTypes();
+        // create array to store reified subtree(s)
+        int length = ets.length;
+        Type[] exceptionTypes = new Type[length];
+        // reify all subtrees
+        for (int i = 0; i < length; i++) {
+            Reifier r = getReifier(); // obtain visitor
+            ets[i].accept(r); // reify subtree
+            // extract result from visitor and store it
+            exceptionTypes[i] = r.getResult();
+        }
+        return exceptionTypes;
     }
 }
--- a/src/java.base/share/classes/sun/reflect/generics/repository/FieldRepository.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/sun/reflect/generics/repository/FieldRepository.java	Tue Dec 23 13:58:34 2014 -0800
@@ -41,7 +41,8 @@
  */
 public class FieldRepository extends AbstractRepository<TypeSignature> {
 
-    private Type genericType; // caches the generic type info
+    /** The generic type info.  Lazily initialized. */
+    private volatile Type genericType;
 
  // protected, to enforce use of static factory yet allow subclassing
     protected FieldRepository(String rawSig, GenericsFactory f) {
@@ -61,31 +62,32 @@
      * @return a <tt>FieldRepository</tt> that manages the generic type
      * information represented in the signature <tt>rawSig</tt>
      */
-    public static FieldRepository make(String rawSig,
-                                             GenericsFactory f) {
+    public static FieldRepository make(String rawSig, GenericsFactory f) {
         return new FieldRepository(rawSig, f);
     }
 
-    // public API
-
  /*
  * When queried for a particular piece of type information, the
  * general pattern is to consult the corresponding cached value.
  * If the corresponding field is non-null, it is returned.
  * If not, it is created lazily. This is done by selecting the appropriate
  * part of the tree and transforming it into a reflective object
- * using a visitor.
- * a visitor, which is created by feeding it the factory
+ * using a visitor, which is created by feeding it the factory
  * with which the repository was created.
  */
 
-    public Type getGenericType(){
-        if (genericType == null) { // lazily initialize generic type
-            Reifier r = getReifier(); // obtain visitor
-            getTree().accept(r); // reify subtree
-            // extract result from visitor and cache it
-            genericType = r.getResult();
+    public Type getGenericType() {
+        Type value = genericType;
+        if (value == null) {
+            value = computeGenericType();
+            genericType = value;
         }
-        return genericType; // return cached result
+        return value;
+    }
+
+    private Type computeGenericType() {
+        Reifier r = getReifier();       // obtain visitor
+        getTree().accept(r);            // reify subtree
+        return r.getResult();           // extract result from visitor
     }
 }
--- a/src/java.base/share/classes/sun/reflect/generics/repository/GenericDeclRepository.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/sun/reflect/generics/repository/GenericDeclRepository.java	Tue Dec 23 13:58:34 2014 -0800
@@ -43,13 +43,12 @@
     extends AbstractRepository<S> {
 
     /** The formal type parameters.  Lazily initialized. */
-    private volatile TypeVariable<?>[] typeParams;
+    private volatile TypeVariable<?>[] typeParameters;
 
     protected GenericDeclRepository(String rawSig, GenericsFactory f) {
         super(rawSig, f);
     }
 
-    // public API
  /*
  * When queried for a particular piece of type information, the
  * general pattern is to consult the corresponding cached value.
@@ -61,25 +60,31 @@
  */
 
     /**
-     * Return the formal type parameters of this generic declaration.
+     * Returns the formal type parameters of this generic declaration.
      * @return the formal type parameters of this generic declaration
      */
     public TypeVariable<?>[] getTypeParameters() {
-        TypeVariable<?>[] typeParams = this.typeParams;
-        if (typeParams == null) { // lazily initialize type parameters
-            // first, extract type parameter subtree(s) from AST
-            FormalTypeParameter[] ftps = getTree().getFormalTypeParameters();
-            // create array to store reified subtree(s)
-            typeParams = new TypeVariable<?>[ftps.length];
-            // reify all subtrees
-            for (int i = 0; i < ftps.length; i++) {
-                Reifier r = getReifier(); // obtain visitor
-                ftps[i].accept(r); // reify subtree
-                // extract result from visitor and store it
-                typeParams[i] = (TypeVariable<?>) r.getResult();
-            }
-            this.typeParams = typeParams; // cache overall result
+        TypeVariable<?>[] value = typeParameters;
+        if (value == null) {
+            value = computeTypeParameters();
+            typeParameters = value;
         }
-        return typeParams.clone(); // return cached result
+        return value.clone();
+    }
+
+    private TypeVariable<?>[] computeTypeParameters() {
+        // first, extract type parameter subtree(s) from AST
+        FormalTypeParameter[] ftps = getTree().getFormalTypeParameters();
+        // create array to store reified subtree(s)
+        int length = ftps.length;
+        TypeVariable<?>[] typeParameters = new TypeVariable<?>[length];
+        // reify all subtrees
+        for (int i = 0; i < length; i++) {
+            Reifier r = getReifier(); // obtain visitor
+            ftps[i].accept(r); // reify subtree
+            // extract result from visitor and store it
+            typeParameters[i] = (TypeVariable<?>) r.getResult();
+        }
+        return typeParameters;
     }
 }
--- a/src/java.base/share/classes/sun/reflect/generics/repository/MethodRepository.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/sun/reflect/generics/repository/MethodRepository.java	Tue Dec 23 13:58:34 2014 -0800
@@ -39,7 +39,8 @@
  */
 public class MethodRepository extends ConstructorRepository {
 
-    private Type returnType; // caches the generic return type info
+    /** The generic return type info.  Lazily initialized. */
+    private volatile Type returnType;
 
  // private, to enforce use of static factory
     private MethodRepository(String rawSig, GenericsFactory f) {
@@ -59,18 +60,21 @@
         return new MethodRepository(rawSig, f);
     }
 
-    // public API
-
     public Type getReturnType() {
-        if (returnType == null) { // lazily initialize return type
-            Reifier r = getReifier(); // obtain visitor
-            // Extract return type subtree from AST and reify
-            getTree().getReturnType().accept(r);
-            // extract result from visitor and cache it
-            returnType = r.getResult();
-            }
-        return returnType; // return cached result
+        Type value = returnType;
+        if (value == null) {
+            value = computeReturnType();
+            returnType = value;
+        }
+        return value;
     }
 
+    private Type computeReturnType() {
+        Reifier r = getReifier(); // obtain visitor
+        // Extract return type subtree from AST and reify
+        getTree().getReturnType().accept(r);
+        // extract result from visitor and cache it
+        return r.getResult();
+    }
 
 }
--- a/src/java.base/share/classes/sun/reflect/generics/scope/AbstractScope.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/sun/reflect/generics/scope/AbstractScope.java	Tue Dec 23 13:58:34 2014 -0800
@@ -29,7 +29,6 @@
 import java.lang.reflect.TypeVariable;
 
 
-
 /**
  * Abstract superclass for lazy scope objects, used when building
  * factories for generic information repositories.
@@ -49,7 +48,7 @@
     /**
      * Constructor. Takes a reflective object whose scope the newly
      * constructed instance will represent.
-     * @param D - A generic declaration whose scope the newly
+     * @param decl - A generic declaration whose scope the newly
      * constructed instance will represent
      */
     protected AbstractScope(D decl){ recvr = decl;}
@@ -63,7 +62,7 @@
 
     /** This method must be implemented by any concrete subclass.
      * It must return the enclosing scope of this scope. If this scope
-     * is a top-level scope, an instance of  DummyScope must be returned.
+     * is a top-level scope, an instance of DummyScope must be returned.
      * @return The enclosing scope of this scope
      */
     protected abstract Scope computeEnclosingScope();
@@ -72,13 +71,13 @@
      * Accessor for the enclosing scope, which is computed lazily and cached.
      * @return the enclosing scope
      */
-    protected Scope getEnclosingScope(){
-        Scope enclosingScope = this.enclosingScope;
-        if (enclosingScope == null) {
-            enclosingScope = computeEnclosingScope();
-            this.enclosingScope = enclosingScope;
+    protected Scope getEnclosingScope() {
+        Scope value = enclosingScope;
+        if (value == null) {
+            value = computeEnclosingScope();
+            enclosingScope = value;
         }
-        return enclosingScope;
+        return value;
     }
 
     /**
--- a/src/java.base/share/classes/sun/reflect/generics/tree/Signature.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/sun/reflect/generics/tree/Signature.java	Tue Dec 23 13:58:34 2014 -0800
@@ -27,7 +27,7 @@
 
 /**
  * Common superinterface for generic signatures. These are the signatures
- * of complete class and method/constructor delcarations.
+ * of complete class and method/constructor declarations.
  */
 public interface Signature extends Tree{
     FormalTypeParameter[] getFormalTypeParameters();
--- a/src/java.base/share/classes/sun/reflect/generics/tree/Wildcard.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/sun/reflect/generics/tree/Wildcard.java	Tue Dec 23 13:58:34 2014 -0800
@@ -28,8 +28,8 @@
 import sun.reflect.generics.visitor.TypeTreeVisitor;
 
 public class Wildcard implements TypeArgument {
-    private FieldTypeSignature[] upperBounds;
-    private FieldTypeSignature[] lowerBounds;
+    private final FieldTypeSignature[] upperBounds;
+    private final FieldTypeSignature[] lowerBounds;
 
     private Wildcard(FieldTypeSignature[] ubs, FieldTypeSignature[] lbs) {
         upperBounds = ubs;
@@ -43,11 +43,11 @@
         return new Wildcard(ubs, lbs);
     }
 
-    public FieldTypeSignature[] getUpperBounds(){
+    public FieldTypeSignature[] getUpperBounds() {
         return upperBounds;
     }
 
-    public FieldTypeSignature[] getLowerBounds(){
+    public FieldTypeSignature[] getLowerBounds() {
         if (lowerBounds.length == 1 &&
             lowerBounds[0] == BottomSignature.make())
             return emptyBounds;
--- a/src/java.base/share/classes/sun/reflect/generics/visitor/Reifier.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/sun/reflect/generics/visitor/Reifier.java	Tue Dec 23 13:58:34 2014 -0800
@@ -39,7 +39,7 @@
  */
 public class Reifier implements TypeTreeVisitor<Type> {
     private Type resultType;
-    private GenericsFactory factory;
+    private final GenericsFactory factory;
 
     private Reifier(GenericsFactory f){
         factory = f;
--- a/src/java.base/share/classes/sun/reflect/misc/MethodUtil.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/sun/reflect/misc/MethodUtil.java	Tue Dec 23 13:58:34 2014 -0800
@@ -40,6 +40,7 @@
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.AccessibleObject;
 import java.lang.reflect.Modifier;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.Map;
 import sun.misc.IOUtils;
@@ -216,17 +217,21 @@
      * key in the method cache.
      */
     private static class Signature {
-        private String methodName;
-        private Class<?>[] argClasses;
-
-        private volatile int hashCode = 0;
+        private final String methodName;
+        private final Class<?>[] argClasses;
+        private final int hashCode;
 
         Signature(Method m) {
             this.methodName = m.getName();
             this.argClasses = m.getParameterTypes();
+            this.hashCode = methodName.hashCode() + Arrays.hashCode(argClasses);
         }
 
-        public boolean equals(Object o2) {
+        @Override public int hashCode() {
+            return hashCode;
+        }
+
+        @Override public boolean equals(Object o2) {
             if (this == o2) {
                 return true;
             }
@@ -244,25 +249,6 @@
             }
             return true;
         }
-
-        /**
-         * Hash code computed using algorithm suggested in
-         * Effective Java, Item 8.
-         */
-        public int hashCode() {
-            if (hashCode == 0) {
-                int result = 17;
-                result = 37 * result + methodName.hashCode();
-                if (argClasses != null) {
-                    for (int i = 0; i < argClasses.length; i++) {
-                        result = 37 * result + ((argClasses[i] == null) ? 0 :
-                            argClasses[i].hashCode());
-                    }
-                }
-                hashCode = result;
-            }
-            return hashCode;
-        }
     }
 
 
--- a/src/java.base/share/classes/sun/reflect/misc/ReflectUtil.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/sun/reflect/misc/ReflectUtil.java	Tue Dec 23 13:58:34 2014 -0800
@@ -319,7 +319,7 @@
             return;
         }
 
-        // disallow any method not declared in one of the proxy intefaces
+        // disallow any method not declared in one of the proxy interfaces
         throw new IllegalArgumentException("Can't handle: " + method);
     }
 
--- a/src/java.base/share/classes/sun/security/provider/PolicyFile.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/sun/security/provider/PolicyFile.java	Tue Dec 23 13:58:34 2014 -0800
@@ -1040,7 +1040,7 @@
     }
 
     /**
-     * Evaluates the the global policy for the permissions granted to
+     * Evaluates the global policy for the permissions granted to
      * the ProtectionDomain and tests whether the permission is
      * granted.
      *
--- a/src/java.base/share/classes/sun/security/ssl/EphemeralKeyManager.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/sun/security/ssl/EphemeralKeyManager.java	Tue Dec 23 13:58:34 2014 -0800
@@ -41,7 +41,7 @@
 
     /*
      * Current cached RSA KeyPairs. Elements are never null.
-     * Indexed via the the constants above.
+     * Indexed via the constants above.
      */
     private final EphemeralKeyPair[] keys = new EphemeralKeyPair[] {
         new EphemeralKeyPair(null),
--- a/src/java.base/share/classes/sun/security/ssl/MAC.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/sun/security/ssl/MAC.java	Tue Dec 23 13:58:34 2014 -0800
@@ -120,7 +120,7 @@
      * @param buf compressed record on which the MAC is computed
      * @param offset start of compressed record data
      * @param len the size of the compressed record
-     * @param isSimulated if true, simulate the the MAC computation
+     * @param isSimulated if true, simulate the MAC computation
      */
     final byte[] compute(byte type, byte buf[],
             int offset, int len, boolean isSimulated) {
@@ -147,7 +147,7 @@
      * @param type record type
      * @param bb a ByteBuffer in which the position and limit
      *          demarcate the data to be MAC'd.
-     * @param isSimulated if true, simulate the the MAC computation
+     * @param isSimulated if true, simulate the MAC computation
      */
     final byte[] compute(byte type, ByteBuffer bb, boolean isSimulated) {
         if (macAlg.size == 0) {
--- a/src/java.base/share/classes/sun/security/ssl/SSLEngineImpl.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/sun/security/ssl/SSLEngineImpl.java	Tue Dec 23 13:58:34 2014 -0800
@@ -77,7 +77,7 @@
  *      All data is routed through
  *      EngineInputRecord/EngineOutputRecord.  However, all handshake
  *      data (ct_alert/ct_change_cipher_spec/ct_handshake) are passed
- *      through to the the underlying InputRecord/OutputRecord, and
+ *      through to the underlying InputRecord/OutputRecord, and
  *      the data uses the internal buffers.
  *
  *      Application data is handled slightly different, we copy the data
@@ -158,7 +158,7 @@
      *                v                                     |
      *               ERROR>------>----->CLOSED<--------<----+
      *
-     * ALSO, note that the the purpose of handshaking (renegotiation is
+     * ALSO, note that the purpose of handshaking (renegotiation is
      * included) is to assign a different, and perhaps new, session to
      * the connection.  The SSLv3 spec is a bit confusing on that new
      * protocol feature.
--- a/src/java.base/share/classes/sun/security/ssl/SSLSocketImpl.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/sun/security/ssl/SSLSocketImpl.java	Tue Dec 23 13:58:34 2014 -0800
@@ -144,7 +144,7 @@
      *                                     v
      *                                 APP_CLOSED
      *
-     * ALSO, note that the the purpose of handshaking (renegotiation is
+     * ALSO, note that the purpose of handshaking (renegotiation is
      * included) is to assign a different, and perhaps new, session to
      * the connection.  The SSLv3 spec is a bit confusing on that new
      * protocol feature.
@@ -2190,7 +2190,7 @@
     }
 
     /**
-     * Returns the the SSL Session in use by this connection.  These can
+     * Returns the SSL Session in use by this connection.  These can
      * be long lived, and frequently correspond to an entire login session
      * for some user.
      */
--- a/src/java.base/share/classes/sun/security/ssl/ServerHandshaker.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/sun/security/ssl/ServerHandshaker.java	Tue Dec 23 13:58:34 2014 -0800
@@ -1467,7 +1467,7 @@
                 if (serverPrincipal != null) {
                     // When service is bound, we check ASAP. Otherwise,
                     // will check after client request is received
-                    // in in Kerberos ClientKeyExchange
+                    // in Kerberos ClientKeyExchange
                     SecurityManager sm = System.getSecurityManager();
                     try {
                         if (sm != null) {
--- a/src/java.base/share/classes/sun/security/x509/AlgorithmId.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/sun/security/x509/AlgorithmId.java	Tue Dec 23 13:58:34 2014 -0800
@@ -39,7 +39,7 @@
  * algorithm type, and may also be used in other cases.  Equivalence is
  * defined according to OID and (where relevant) parameters.
  *
- * <P>Subclasses may be used, for example when when the algorithm ID has
+ * <P>Subclasses may be used, for example when the algorithm ID has
  * associated parameters which some code (e.g. code using public keys) needs
  * to have parsed.  Two examples of such algorithms are Diffie-Hellman key
  * exchange, and the Digital Signature Standard Algorithm (DSS/DSA).
--- a/src/java.base/share/classes/sun/security/x509/GeneralName.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/sun/security/x509/GeneralName.java	Tue Dec 23 13:58:34 2014 -0800
@@ -221,7 +221,7 @@
     /**
      * Encode the name to the specified DerOutputStream.
      *
-     * @param out the DerOutputStream to encode the the GeneralName to.
+     * @param out the DerOutputStream to encode the GeneralName to.
      * @exception IOException on encoding errors.
      */
     public void encode(DerOutputStream out) throws IOException {
--- a/src/java.base/share/classes/sun/security/x509/URIName.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/sun/security/x509/URIName.java	Tue Dec 23 13:58:34 2014 -0800
@@ -302,7 +302,7 @@
      * <p>
      * RFC5280: For URIs, the constraint applies to the host part of the name.
      * The constraint may specify a host or a domain.  Examples would be
-     * "foo.bar.com";  and ".xyz.com".  When the the constraint begins with
+     * "foo.bar.com";  and ".xyz.com".  When the constraint begins with
      * a period, it may be expanded with one or more subdomains.  That is,
      * the constraint ".xyz.com" is satisfied by both abc.xyz.com and
      * abc.def.xyz.com.  However, the constraint ".xyz.com" is not satisfied
--- a/src/java.base/share/classes/sun/security/x509/X500Name.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/sun/security/x509/X500Name.java	Tue Dec 23 13:58:34 2014 -0800
@@ -336,7 +336,7 @@
     }
 
     /**
-     * Return an immutable List of the the AVAs contained in all the
+     * Return an immutable List of the AVAs contained in all the
      * RDNs of this X500Name.
      */
     public List<AVA> allAvas() {
--- a/src/java.base/share/classes/sun/text/normalizer/NormalizerBase.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/sun/text/normalizer/NormalizerBase.java	Tue Dec 23 13:58:34 2014 -0800
@@ -646,9 +646,9 @@
 
     /**
      * Compose a string.
-     * The string will be composed to according the the specified mode.
+     * The string will be composed according to the specified mode.
      * @param str        The string to compose.
-     * @param compat     If true the string will be composed accoding to
+     * @param compat     If true the string will be composed according to
      *                    NFKC rules and if false will be composed according to
      *                    NFC rules.
      * @param options    The only recognized option is UNICODE_3_2
@@ -694,9 +694,9 @@
 
     /**
      * Decompose a string.
-     * The string will be decomposed to according the the specified mode.
+     * The string will be decomposed according to the specified mode.
      * @param str       The string to decompose.
-     * @param compat    If true the string will be decomposed accoding to NFKD
+     * @param compat    If true the string will be decomposed according to NFKD
      *                   rules and if false will be decomposed according to NFD
      *                   rules.
      * @return String   The decomposed string
@@ -708,9 +708,9 @@
 
     /**
      * Decompose a string.
-     * The string will be decomposed to according the the specified mode.
+     * The string will be decomposed according to the specified mode.
      * @param str     The string to decompose.
-     * @param compat  If true the string will be decomposed accoding to NFKD
+     * @param compat  If true the string will be decomposed according to NFKD
      *                 rules and if false will be decomposed according to NFD
      *                 rules.
      * @param options The normalization options, ORed together (0 for no options).
@@ -756,7 +756,7 @@
 
     /**
      * Normalize a string.
-     * The string will be normalized according the the specified normalization
+     * The string will be normalized according to the specified normalization
      * mode and options.
      * @param src       The char array to compose.
      * @param srcStart  Start index of the source
--- a/src/java.base/share/classes/sun/text/normalizer/UCharacterIterator.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/sun/text/normalizer/UCharacterIterator.java	Tue Dec 23 13:58:34 2014 -0800
@@ -247,7 +247,7 @@
 
     //// for StringPrep
     /**
-     * Convenience method for returning the underlying text storage as as string
+     * Convenience method for returning the underlying text storage as a string
      * @return the underlying text storage in the iterator as a string
      * @stable ICU 2.4
      */
--- a/src/java.base/share/classes/sun/text/normalizer/UTF16.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/sun/text/normalizer/UTF16.java	Tue Dec 23 13:58:34 2014 -0800
@@ -94,7 +94,7 @@
  *   </li>
  *   <li>
  *    <strong>Exceptions:</strong> The error checking will throw an exception
- *   if indices are out of bounds. Other than than that, all methods will
+ *   if indices are out of bounds. Other than that, all methods will
  *   behave reasonably, even if unmatched surrogates or out-of-bounds UTF-32
  *   values are present. <code>UCharacter.isLegal()</code> can be used to check
  *   for validity if desired.
--- a/src/java.base/share/classes/sun/util/locale/provider/SPILocaleProviderAdapter.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/classes/sun/util/locale/provider/SPILocaleProviderAdapter.java	Tue Dec 23 13:58:34 2014 -0800
@@ -77,7 +77,8 @@
                 public P run() {
                     P delegate = null;
 
-                    for (LocaleServiceProvider provider : ServiceLoader.loadInstalled(c)) {
+                    for (LocaleServiceProvider provider :
+                             ServiceLoader.load(c, ClassLoader.getSystemClassLoader())) {
                         if (delegate == null) {
                             try {
                                 delegate =
--- a/src/java.base/share/native/libjli/java.c	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/share/native/libjli/java.c	Tue Dec 23 13:58:34 2014 -0800
@@ -169,6 +169,13 @@
 static jlong initialHeapSize    = 0;  /* inital heap size */
 
 /*
+ * A minimum -Xss stack size suitable for all platforms.
+ */
+#ifndef STACK_SIZE_MINIMUM
+#define STACK_SIZE_MINIMUM (32 * KB)
+#endif
+
+/*
  * Entry point.
  */
 int
@@ -737,7 +744,7 @@
 }
 
 /*
- * Adds a new VM option with the given given name and value.
+ * Adds a new VM option with the given name and value.
  */
 void
 AddOption(char *str, void *info)
@@ -766,6 +773,14 @@
         jlong tmp;
         if (parse_size(str + 4, &tmp)) {
             threadStackSize = tmp;
+            /*
+             * Make sure the thread stack size is big enough that we won't get a stack
+             * overflow before the JVM startup code can check to make sure the stack
+             * is big enough.
+             */
+            if (threadStackSize < STACK_SIZE_MINIMUM) {
+                threadStackSize = STACK_SIZE_MINIMUM;
+            }
         }
     }
 
--- a/src/java.base/unix/classes/sun/nio/ch/FileKey.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/unix/classes/sun/nio/ch/FileKey.java	Tue Dec 23 13:58:34 2014 -0800
@@ -38,13 +38,9 @@
 
     private FileKey() { }
 
-    public static FileKey create(FileDescriptor fd) {
+    public static FileKey create(FileDescriptor fd) throws IOException {
         FileKey fk = new FileKey();
-        try {
-            fk.init(fd);
-        } catch (IOException ioe) {
-            throw new Error(ioe);
-        }
+        fk.init(fd);
         return fk;
     }
 
--- a/src/java.base/unix/native/libjli/java_md_solinux.c	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/unix/native/libjli/java_md_solinux.c	Tue Dec 23 13:58:34 2014 -0800
@@ -89,7 +89,7 @@
  *
  * However, if the environment contains a LD_LIBRARY_PATH, this will cause the
  * launcher to inspect the LD_LIBRARY_PATH. The launcher will check
- *  a. if the LD_LIBRARY_PATH's first component is the the path to the desired
+ *  a. if the LD_LIBRARY_PATH's first component is the path to the desired
  *     libjvm.so
  *  b. if any other libjvm.so is found in any of the paths.
  * If case b is true, then the launcher will set the LD_LIBRARY_PATH to the
--- a/src/java.base/unix/native/libnet/PlainDatagramSocketImpl.c	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/unix/native/libnet/PlainDatagramSocketImpl.c	Tue Dec 23 13:58:34 2014 -0800
@@ -2070,7 +2070,7 @@
              * so we switch to IPV6_ADD_MEMBERSHIP socket option.
              * As of 2.4.7 kernel IPV6_ADD_MEMBERSHIP can't handle IPv4-mapped
              * addresses so we have to use IP_ADD_MEMBERSHIP for IPv4 multicast
-             * groups. However if the socket is an IPv6 socket then then setsockopt
+             * groups. However if the socket is an IPv6 socket then setsockopt
              * should return ENOPROTOOPT. We assume this will be fixed in Linux
              * at some stage.
              */
--- a/src/java.base/unix/native/libnet/PlainSocketImpl.c	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/unix/native/libnet/PlainSocketImpl.c	Tue Dec 23 13:58:34 2014 -0800
@@ -1053,7 +1053,7 @@
     } else {
         fd = (*env)->GetIntField(env, fdObj, IO_fd_fdID);
         /* Bug 4086704 - If the Socket associated with this file descriptor
-         * was closed (sysCloseFD), the the file descriptor is set to -1.
+         * was closed (sysCloseFD), the file descriptor is set to -1.
          */
         if (fd == -1) {
             JNU_ThrowByName(env, "java/net/SocketException", "Socket closed");
--- a/src/java.base/unix/native/libnet/SocketOutputStream.c	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/unix/native/libnet/SocketOutputStream.c	Tue Dec 23 13:58:34 2014 -0800
@@ -74,7 +74,7 @@
     } else {
         fd = (*env)->GetIntField(env, fdObj, IO_fd_fdID);
         /* Bug 4086704 - If the Socket associated with this file descriptor
-         * was closed (sysCloseFD), the the file descriptor is set to -1.
+         * was closed (sysCloseFD), the file descriptor is set to -1.
          */
         if (fd == -1) {
             JNU_ThrowByName(env, "java/net/SocketException", "Socket closed");
--- a/src/java.base/unix/native/libnet/net_util_md.c	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/unix/native/libnet/net_util_md.c	Tue Dec 23 13:58:34 2014 -0800
@@ -1433,7 +1433,7 @@
 
     /*
      * On Linux the receive buffer is used for both socket
-     * structures and the the packet payload. The implication
+     * structures and the packet payload. The implication
      * is that if SO_RCVBUF is too small then small packets
      * must be discard.
      */
--- a/src/java.base/windows/classes/sun/nio/ch/FileKey.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/windows/classes/sun/nio/ch/FileKey.java	Tue Dec 23 13:58:34 2014 -0800
@@ -39,13 +39,9 @@
 
     private FileKey() { }
 
-    public static FileKey create(FileDescriptor fd) {
+    public static FileKey create(FileDescriptor fd) throws IOException {
         FileKey fk = new FileKey();
-        try {
-            fk.init(fd);
-        } catch (IOException ioe) {
-            throw new Error(ioe);
-        }
+        fk.init(fd);
         return fk;
     }
 
--- a/src/java.base/windows/native/libjli/cmdtoargs.c	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/windows/native/libjli/cmdtoargs.c	Tue Dec 23 13:58:34 2014 -0800
@@ -26,7 +26,7 @@
 
 /*
  * Converts a single string command line to the traditional argc, argv.
- * There are rules which govern the breaking of the the arguments, and
+ * There are rules which govern the breaking of the arguments, and
  * these rules are embodied in the regression tests below, and duplicated
  * in the jdk regression tests.
  */
--- a/src/java.base/windows/native/libnet/TwoStacksPlainSocketImpl.c	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.base/windows/native/libnet/TwoStacksPlainSocketImpl.c	Tue Dec 23 13:58:34 2014 -0800
@@ -1159,7 +1159,7 @@
     } else {
         fd = (*env)->GetIntField(env, fdObj, IO_fd_fdID);
         /* Bug 4086704 - If the Socket associated with this file descriptor
-         * was closed (sysCloseFD), the the file descriptor is set to -1.
+         * was closed (sysCloseFD), the file descriptor is set to -1.
          */
         if (fd == -1) {
             JNU_ThrowByName(env, "java/net/SocketException", "Socket closed");
--- a/src/java.desktop/macosx/classes/com/apple/laf/AquaComboBoxUI.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/macosx/classes/com/apple/laf/AquaComboBoxUI.java	Tue Dec 23 13:58:34 2014 -0800
@@ -496,10 +496,15 @@
     // This is somewhat messy.  The difference here from BasicComboBoxUI.EnterAction is that
     // arrow up or down does not automatically select the
     @SuppressWarnings("serial") // anonymous class
-    private static final Action triggerSelectionAction = new AbstractAction() {
+    private final Action triggerSelectionAction = new AbstractAction() {
         public void actionPerformed(final ActionEvent e) {
             triggerSelectionEvent((JComboBox)e.getSource(), e);
         }
+
+        @Override
+        public boolean isEnabled() {
+            return comboBox.isPopupVisible() && super.isEnabled();
+        }
     };
 
     @SuppressWarnings("serial") // anonymous class
--- a/src/java.desktop/macosx/classes/com/apple/laf/AquaFileChooserUI.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/macosx/classes/com/apple/laf/AquaFileChooserUI.java	Tue Dec 23 13:58:34 2014 -0800
@@ -1300,12 +1300,12 @@
                 filters = (FileFilter[]) e.getNewValue();
                 fireContentsChanged(this, -1, -1);
             } else if (prop == JFileChooser.FILE_FILTER_CHANGED_PROPERTY) {
-                fireContentsChanged(this, -1, -1);
+                setSelectedItem(e.getNewValue());
             }
         }
 
         public void setSelectedItem(Object filter) {
-            if(filter != null) {
+            if (filter != null && !containsFileFilter(filter)) {
                 getFileChooser().setFileFilter((FileFilter) filter);
                 fireContentsChanged(this, -1, -1);
             }
@@ -1353,6 +1353,10 @@
         }
     }
 
+    private boolean containsFileFilter(Object fileFilter) {
+        return Objects.equals(fileFilter, getFileChooser().getFileFilter());
+    }
+
     /**
      * Acts when FilterComboBox has changed the selected item.
      */
@@ -1363,7 +1367,10 @@
         }
 
         public void actionPerformed(final ActionEvent e) {
-            getFileChooser().setFileFilter((FileFilter) filterComboBox.getSelectedItem());
+            Object selectedFilter = filterComboBox.getSelectedItem();
+            if (!containsFileFilter(selectedFilter)) {
+                getFileChooser().setFileFilter((FileFilter) selectedFilter);
+            }
         }
     }
 
--- a/src/java.desktop/macosx/classes/com/apple/laf/AquaScrollPaneUI.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/macosx/classes/com/apple/laf/AquaScrollPaneUI.java	Tue Dec 23 13:58:34 2014 -0800
@@ -41,7 +41,7 @@
 
     // This is a grody hack to trick BasicScrollPaneUI into scrolling horizontally
     // when we notice that the shift key is down. This should be removed when AWT/Swing
-    // becomes aware of of multi-axis scroll wheels.
+    // becomes aware of multi-axis scroll wheels.
     protected class XYMouseWheelHandler extends javax.swing.plaf.basic.BasicScrollPaneUI.MouseWheelHandler {
         public void mouseWheelMoved(final MouseWheelEvent e) {
             JScrollBar vScrollBar = null;
--- a/src/java.desktop/macosx/classes/sun/java2d/OSXSurfaceData.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/macosx/classes/sun/java2d/OSXSurfaceData.java	Tue Dec 23 13:58:34 2014 -0800
@@ -1094,7 +1094,7 @@
     }
 
     /**
-     * Clips the copy area to the heavywieght bounds and returns the cliped rectangle. The tricky part here is the the
+     * Clips the copy area to the heavywieght bounds and returns the cliped rectangle. The tricky part here is the
      * passed arguments x, y are in the coordinate space of the sg2d/lightweight comp. In order to do the clipping we
      * translate them to the coordinate space of the surface, and the returned clipped rectangle is in the coordinate
      * space of the surface.
--- a/src/java.desktop/macosx/native/libawt_lwawt/awt/ImageSurfaceData.m	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/macosx/native/libawt_lwawt/awt/ImageSurfaceData.m	Tue Dec 23 13:58:34 2014 -0800
@@ -1692,7 +1692,7 @@
 {
     ImageSDOps *isdo = (ImageSDOps*)ops;
 
-    // For every ImageSD_Unlock, we need to be be conservative and mark the pixels
+    // For every ImageSD_Unlock, we need to be conservative and mark the pixels
     // as modified by the Sun2D renderer.
     isdo->javaImageInfo[sun_java2d_OSXOffScreenSurfaceData_kNeedToSyncFromJavaPixelsIndex] = 1;
 
--- a/src/java.desktop/macosx/native/libawt_lwawt/awt/QuartzSurfaceData.m	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/macosx/native/libawt_lwawt/awt/QuartzSurfaceData.m	Tue Dec 23 13:58:34 2014 -0800
@@ -72,7 +72,7 @@
 
 // given a UInt32 color, it tries to find that find the corresponding CGColorRef in the hash cache. If the CGColorRef
 // doesn't exist or there is a collision, it creates a new one CGColorRef and put's in the cache. Then,
-// it sets with current fill/stroke color for the the CGContext passed in (qsdo->cgRef).
+// it sets with current fill/stroke color for the CGContext passed in (qsdo->cgRef).
 void setCachedColor(QuartzSDOps *qsdo, UInt32 color)
 {
     static const CGFloat kColorConversionMultiplier = 1.0f/255.0f;
--- a/src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/GTKColorChooserPanel.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/GTKColorChooserPanel.java	Tue Dec 23 13:58:34 2014 -0800
@@ -898,7 +898,7 @@
                              y > innerR)) {
                 return false;
             }
-            // Rotate to origin and and verify x is valid.
+            // Rotate to origin and verify x is valid.
             int triangleSize = innerR * 3 / 2;
             double x1 = Math.cos(angle) * x - Math.sin(angle) * y;
             double y1 = Math.sin(angle) * x + Math.cos(angle) * y;
--- a/src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/GTKFileChooserUI.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/GTKFileChooserUI.java	Tue Dec 23 13:58:34 2014 -0800
@@ -1304,7 +1304,7 @@
      * Render different filters
      */
     @SuppressWarnings("serial") // Superclass is not serializable across versions
-    public class FilterComboBoxRenderer extends DefaultListCellRenderer implements UIResource {
+    public class FilterComboBoxRenderer extends DefaultListCellRenderer {
         public String getName() {
             // As SynthComboBoxRenderer's are asked for a size BEFORE they
             // are parented getName is overriden to force the name to be
--- a/src/java.desktop/share/classes/com/sun/media/sound/AbstractMidiDevice.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/com/sun/media/sound/AbstractMidiDevice.java	Tue Dec 23 13:58:34 2014 -0800
@@ -87,7 +87,7 @@
      * @param info the description of the device
      */
     /*
-     * The initial mode and and only supported mode default to OMNI_ON_POLY.
+     * The initial mode and only supported mode default to OMNI_ON_POLY.
      */
     protected AbstractMidiDevice(MidiDevice.Info info) {
 
@@ -108,7 +108,7 @@
 
     /** Open the device from an application program.
      * Setting the open reference count to -1 here prevents Transmitters and Receivers that
-     * opened the the device implicitly from closing it. The only way to close the device after
+     * opened the device implicitly from closing it. The only way to close the device after
      * this call is a call to close().
      */
     public final void open() throws MidiUnavailableException {
--- a/src/java.desktop/share/classes/java/awt/Button.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/java/awt/Button.java	Tue Dec 23 13:58:34 2014 -0800
@@ -609,7 +609,7 @@
          * Perform the specified Action on the object
          *
          * @param i zero-based index of actions
-         * @return true if the the action was performed; else false.
+         * @return true if the action was performed; else false.
          */
         public boolean doAccessibleAction(int i) {
             if (i == 0) {
--- a/src/java.desktop/share/classes/java/awt/Checkbox.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/java/awt/Checkbox.java	Tue Dec 23 13:58:34 2014 -0800
@@ -788,7 +788,7 @@
          * Perform the specified Action on the object
          *
          * @param i zero-based index of actions
-         * @return true if the the action was performed; else false.
+         * @return true if the action was performed; else false.
          */
         public boolean doAccessibleAction(int i) {
             return false;    //  To be fully implemented in a future release
--- a/src/java.desktop/share/classes/java/awt/Component.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/java/awt/Component.java	Tue Dec 23 13:58:34 2014 -0800
@@ -4281,7 +4281,7 @@
         }
 
         /**
-         * Makes specified region of the the next available buffer visible
+         * Makes specified region of the next available buffer visible
          * by either blitting or flipping.
          */
         void showSubRegion(int x1, int y1, int x2, int y2) {
@@ -7431,7 +7431,7 @@
      * @param id one of KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS,
      *        KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, or
      *        KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS
-     * @return <code>true</code> if the the Set of focus traversal keys for the
+     * @return <code>true</code> if the Set of focus traversal keys for the
      *         given focus traversal operation has been explicitly defined for
      *         this Component; <code>false</code> otherwise.
      * @throws IllegalArgumentException if id is not one of
--- a/src/java.desktop/share/classes/java/awt/Container.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/java/awt/Container.java	Tue Dec 23 13:58:34 2014 -0800
@@ -3193,7 +3193,7 @@
      *        KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS,
      *        KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS, or
      *        KeyboardFocusManager.DOWN_CYCLE_TRAVERSAL_KEYS
-     * @return <code>true</code> if the the Set of focus traversal keys for the
+     * @return <code>true</code> if the Set of focus traversal keys for the
      *         given focus traversal operation has been explicitly defined for
      *         this Component; <code>false</code> otherwise.
      * @throws IllegalArgumentException if id is not one of
--- a/src/java.desktop/share/classes/java/awt/EventQueue.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/java/awt/EventQueue.java	Tue Dec 23 13:58:34 2014 -0800
@@ -823,7 +823,7 @@
     }
 
     /**
-     * Returns the the event currently being dispatched by the
+     * Returns the event currently being dispatched by the
      * <code>EventQueue</code> associated with the calling thread. This is
      * useful if a method needs access to the event, but was not designed to
      * receive a reference to it as an argument. Note that this method should
--- a/src/java.desktop/share/classes/java/awt/FlowLayout.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/java/awt/FlowLayout.java	Tue Dec 23 13:58:34 2014 -0800
@@ -503,7 +503,7 @@
      * @param width the width dimensions
      * @param height the height dimensions
      * @param rowStart the beginning of the row
-     * @param rowEnd the the ending of the row
+     * @param rowEnd the ending of the row
      * @param useBaseline Whether or not to align on baseline.
      * @param ascent Ascent for the components. This is only valid if
      *               useBaseline is true.
--- a/src/java.desktop/share/classes/java/awt/KeyboardFocusManager.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/java/awt/KeyboardFocusManager.java	Tue Dec 23 13:58:34 2014 -0800
@@ -1771,7 +1771,7 @@
      * will be notified in the order in which they were added; the current
      * KeyboardFocusManager will be notified last. Notifications will halt
      * as soon as one KeyEventPostProcessor returns <code>true</code> from its
-     * <code>postProcessKeyEvent</code> method. There is no limit to the the
+     * <code>postProcessKeyEvent</code> method. There is no limit to the
      * total number of KeyEventPostProcessors that can be added, nor to the
      * number of times that a particular KeyEventPostProcessor instance can be
      * added.
@@ -2666,7 +2666,7 @@
                      * We allow to trigger restoreFocus() in the dispatching process
                      * only if we have the last request to dispatch. If the last request
                      * fails, focus will be restored to either the component of the last
-                     * previously succeeded request, or to to the focus owner that was
+                     * previously succeeded request, or to the focus owner that was
                      * before this clearing process.
                      */
                     if (!iter.hasNext()) {
--- a/src/java.desktop/share/classes/java/awt/List.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/java/awt/List.java	Tue Dec 23 13:58:34 2014 -0800
@@ -347,7 +347,7 @@
     }
 
     /**
-     * Adds the specified item to the the scrolling list
+     * Adds the specified item to the scrolling list
      * at the position indicated by the index.  The index is
      * zero-based.  If the value of the index is less than zero,
      * or if the value of the index is greater than or equal to
@@ -364,7 +364,7 @@
     }
 
     /**
-     * Adds the specified item to the the list
+     * Adds the specified item to the list
      * at the position indicated by the index.
      *
      * @param  item the item to be added
--- a/src/java.desktop/share/classes/java/awt/MultipleGradientPaintContext.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/java/awt/MultipleGradientPaintContext.java	Tue Dec 23 13:58:34 2014 -0800
@@ -418,7 +418,7 @@
             // each interval
             gradients[i] = new int[GRADIENT_SIZE];
 
-            // get the the 2 colors
+            // get the 2 colors
             rgb1 = colors[i].getRGB();
             rgb2 = colors[i+1].getRGB();
 
--- a/src/java.desktop/share/classes/java/awt/RadialGradientPaint.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/java/awt/RadialGradientPaint.java	Tue Dec 23 13:58:34 2014 -0800
@@ -94,7 +94,7 @@
  * Note that some minor variations in distances may occur due to sampling at
  * the granularity of a pixel.
  * If no cycle method is specified, {@code NO_CYCLE} will be chosen by
- * default, which means the the last keyframe color will be used to fill the
+ * default, which means the last keyframe color will be used to fill the
  * remaining area.
  * <p>
  * The colorSpace parameter allows the user to specify in which colorspace
--- a/src/java.desktop/share/classes/java/awt/WaitDispatchSupport.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/java/awt/WaitDispatchSupport.java	Tue Dec 23 13:58:34 2014 -0800
@@ -208,7 +208,7 @@
                     }
                 }, interval);
             }
-            // Dispose SequencedEvent we are dispatching on the the current
+            // Dispose SequencedEvent we are dispatching on the current
             // AppContext, to prevent us from hang - see 4531693 for details
             SequencedEvent currentSE = KeyboardFocusManager.
                 getCurrentKeyboardFocusManager().getCurrentSequencedEvent();
@@ -220,7 +220,7 @@
             }
             // In case the exit() method is called before starting
             // new event pump it will post the waking event to EDT.
-            // The event will be handled after the the new event pump
+            // The event will be handled after the new event pump
             // starts. Thus, the enter() method will not hang.
             //
             // Event pump should be privileged. See 6300270.
--- a/src/java.desktop/share/classes/java/awt/datatransfer/DataFlavor.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/java/awt/datatransfer/DataFlavor.java	Tue Dec 23 13:58:34 2014 -0800
@@ -384,7 +384,7 @@
      * @param representationClass the class used to transfer data in this flavor
      * @param humanPresentableName the human-readable string used to identify
      *                 this flavor; if this parameter is <code>null</code>
-     *                 then the value of the the MIME Content Type is used
+     *                 then the value of the MIME Content Type is used
      * @exception NullPointerException if <code>representationClass</code> is null
      */
     public DataFlavor(Class<?> representationClass, String humanPresentableName) {
@@ -418,7 +418,7 @@
      *                 is thrown
      * @param humanPresentableName the human-readable string used to identify
      *                 this flavor; if this parameter is <code>null</code>
-     *                 then the value of the the MIME Content Type is used
+     *                 then the value of the MIME Content Type is used
      * @exception IllegalArgumentException if <code>mimeType</code> is
      *                 invalid or if the class is not successfully loaded
      * @exception NullPointerException if <code>mimeType</code> is null
--- a/src/java.desktop/share/classes/java/awt/event/KeyEvent.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/java/awt/event/KeyEvent.java	Tue Dec 23 13:58:34 2014 -0800
@@ -1309,7 +1309,7 @@
     /**
      * Set the keyChar value to indicate a logical character.
      *
-     * @param keyChar a char corresponding to to the combination of keystrokes
+     * @param keyChar a char corresponding to the combination of keystrokes
      *                that make up this event.
      */
     public void setKeyChar(char keyChar) {
--- a/src/java.desktop/share/classes/java/awt/event/KeyListener.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/java/awt/event/KeyListener.java	Tue Dec 23 13:58:34 2014 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2014, 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
@@ -44,7 +44,7 @@
  *
  * @see KeyAdapter
  * @see KeyEvent
- * @see <a href="http://java.sun.com/docs/books/tutorial/post1.0/ui/keylistener.html">Tutorial: Writing a Key Listener</a>
+ * @see <a href="https://docs.oracle.com/javase/tutorial/uiswing/events/keylistener.html">Tutorial: Writing a Key Listener</a>
  *
  * @since 1.1
  */
--- a/src/java.desktop/share/classes/java/awt/font/GlyphVector.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/java/awt/font/GlyphVector.java	Tue Dec 23 13:58:34 2014 -0800
@@ -341,7 +341,7 @@
     /**
      * Returns the position of the specified glyph relative to the
      * origin of this <code>GlyphVector</code>.
-     * If <code>glyphIndex</code> equals the number of of glyphs in
+     * If <code>glyphIndex</code> equals the number of glyphs in
      * this <code>GlyphVector</code>, this method returns the position after
      * the last glyph. This position is used to define the advance of
      * the entire <code>GlyphVector</code>.
@@ -358,7 +358,7 @@
     /**
      * Sets the position of the specified glyph within this
      * <code>GlyphVector</code>.
-     * If <code>glyphIndex</code> equals the number of of glyphs in
+     * If <code>glyphIndex</code> equals the number of glyphs in
      * this <code>GlyphVector</code>, this method sets the position after
      * the last glyph. This position is used to define the advance of
      * the entire <code>GlyphVector</code>.
@@ -477,7 +477,7 @@
      * coordinates of the glyph numbered <code>beginGlyphIndex + position/2</code>.
      * Odd numbered array entries beginning with position one are the Y
      * coordinates of the glyph numbered <code>beginGlyphIndex + (position-1)/2</code>.
-     * If <code>beginGlyphIndex</code> equals the number of of glyphs in
+     * If <code>beginGlyphIndex</code> equals the number of glyphs in
      * this <code>GlyphVector</code>, this method gets the position after
      * the last glyph and this position is used to define the advance of
      * the entire <code>GlyphVector</code>.
--- a/src/java.desktop/share/classes/java/awt/font/TextAttribute.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/java/awt/font/TextAttribute.java	Tue Dec 23 13:58:34 2014 -0800
@@ -832,7 +832,7 @@
     /**
      * Attribute key for the embedding level of the text.  Values are
      * instances of <b><code>Integer</code></b>.  The default value is
-     * <code>null</code>, indicating that the the Bidirectional
+     * <code>null</code>, indicating that the Bidirectional
      * algorithm should run without explicit embeddings.
      *
      * <p>Positive values 1 through 61 are <em>embedding</em> levels,
--- a/src/java.desktop/share/classes/java/awt/im/spi/package.html	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/java/awt/im/spi/package.html	Tue Dec 23 13:58:34 2014 -0800
@@ -55,9 +55,8 @@
 
 <H4><A NAME="Packaging"></A>Packaging Input Methods</H4>
 
-<P>Input methods are packaged as installed extensions, as specified
-by the <A HREF="../../../../../technotes/guides/extensions/index.html">Extension
-Mechanism</A>. The main JAR file of an input method must contain the
+<P>Input methods can be made available by adding them to the application's
+class path. The main JAR file of an input method must contain the
 file:</P>
 
 <PRE>    META-INF/services/java.awt.im.spi.InputMethodDescriptor</PRE>
--- a/src/java.desktop/share/classes/java/awt/image/ColorConvertOp.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/java/awt/image/ColorConvertOp.java	Tue Dec 23 13:58:34 2014 -0800
@@ -577,7 +577,7 @@
 
     /**
      * Returns the bounding box of the destination, given this source.
-     * Note that this will be the same as the the bounding box of the
+     * Note that this will be the same as the bounding box of the
      * source.
      * @param src the source <code>BufferedImage</code>
      * @return a <code>Rectangle2D</code> that is the bounding box
@@ -589,7 +589,7 @@
 
     /**
      * Returns the bounding box of the destination, given this source.
-     * Note that this will be the same as the the bounding box of the
+     * Note that this will be the same as the bounding box of the
      * source.
      * @param src the source <code>Raster</code>
      * @return a <code>Rectangle2D</code> that is the bounding box
--- a/src/java.desktop/share/classes/java/awt/image/ComponentColorModel.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/java/awt/image/ComponentColorModel.java	Tue Dec 23 13:58:34 2014 -0800
@@ -92,7 +92,7 @@
  * <p>
  * For instances with unsigned sample values,
  * the unnormalized color/alpha component representation is only
- * supported if two conditions hold.  First, sample value value 0 must
+ * supported if two conditions hold.  First, sample value 0 must
  * map to normalized component value 0.0 and sample value 2<sup>n</sup> - 1
  * to 1.0.  Second the min/max range of all color components of the
  * <code>ColorSpace</code> must be 0.0 to 1.0.  In this case, the
--- a/src/java.desktop/share/classes/java/awt/print/PrinterIOException.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/java/awt/print/PrinterIOException.java	Tue Dec 23 13:58:34 2014 -0800
@@ -76,7 +76,7 @@
     }
 
     /**
-     * Returns the the cause of this exception (the <code>IOException</code>
+     * Returns the cause of this exception (the <code>IOException</code>
      * that terminated the print job).
      *
      * @return  the cause of this exception.
--- a/src/java.desktop/share/classes/java/beans/Encoder.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/java/beans/Encoder.java	Tue Dec 23 13:58:34 2014 -0800
@@ -121,7 +121,7 @@
      * it is returned.
      * <li>
      * A persistence delegate is then looked up by the name
-     * composed of the the fully qualified name of the given type
+     * composed of the fully qualified name of the given type
      * and the "PersistenceDelegate" postfix.
      * For example, a persistence delegate for the {@code Bean} class
      * should be named {@code BeanPersistenceDelegate}
--- a/src/java.desktop/share/classes/java/beans/Transient.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/java/beans/Transient.java	Tue Dec 23 13:58:34 2014 -0800
@@ -41,7 +41,7 @@
  * indicates to encoders derived from {@link Encoder}
  * that this feature should be ignored.
  * <p>
- * The {@code Transient} annotation may be be used
+ * The {@code Transient} annotation may be used
  * in any of the methods that are involved
  * in a {@link FeatureDescriptor} subclass
  * to identify the transient feature in the annotated class and its subclasses.
--- a/src/java.desktop/share/classes/javax/imageio/IIOParam.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/javax/imageio/IIOParam.java	Tue Dec 23 13:58:34 2014 -0800
@@ -442,7 +442,7 @@
     }
 
     /**
-     * Returns the set of of source bands to be used. The returned
+     * Returns the set of source bands to be used. The returned
      * value is that set by the most recent call to
      * <code>setSourceBands</code>, or <code>null</code> if there have
      * been no calls to <code>setSourceBands</code>.
--- a/src/java.desktop/share/classes/javax/imageio/event/IIOReadUpdateListener.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/javax/imageio/event/IIOReadUpdateListener.java	Tue Dec 23 13:58:34 2014 -0800
@@ -70,7 +70,7 @@
      * a value of 1 means no gaps.
      * @param periodY the vertical spacing between updated pixels;
      * a value of 1 means no gaps.
-     * @param bands an array of <code>int</code>s indicating the the
+     * @param bands an array of <code>int</code>s indicating the
      * set bands that may be updated.
      */
     void passStarted(ImageReader source,
@@ -187,7 +187,7 @@
      * a value of 1 means no gaps.
      * @param periodY the vertical spacing between updated pixels;
      * a value of 1 means no gaps.
-     * @param bands an array of <code>int</code>s indicating the the
+     * @param bands an array of <code>int</code>s indicating the
      * set bands that may be updated.
      *
      * @see #passStarted
--- a/src/java.desktop/share/classes/javax/imageio/plugins/jpeg/JPEGQTable.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/javax/imageio/plugins/jpeg/JPEGQTable.java	Tue Dec 23 13:58:34 2014 -0800
@@ -136,7 +136,7 @@
     /**
      * Constructs a quantization table from the argument, which must
      * contain 64 elements in natural order (not zig-zag order).
-     * A copy is made of the the input array.
+     * A copy is made of the input array.
      * @param table the quantization table, as an <code>int</code> array.
      * @throws IllegalArgumentException if <code>table</code> is
      * <code>null</code> or <code>table.length</code> is not equal to 64.
--- a/src/java.desktop/share/classes/javax/sound/midi/MidiMessage.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/javax/sound/midi/MidiMessage.java	Tue Dec 23 13:58:34 2014 -0800
@@ -52,7 +52,7 @@
  * API uses integers instead of bytes when expressing MIDI data. For example,
  * the {@link #getStatus()} method of {@code MidiMessage} returns MIDI status
  * bytes as integers. If you are processing MIDI data that originated outside
- * Java Sound and now is encoded as signed bytes, the bytes can can be
+ * Java Sound and now is encoded as signed bytes, the bytes can be
  * converted to integers using this conversion:
  *
  * <center>{@code int i = (int)(byte & 0xFF)}</center>
--- a/src/java.desktop/share/classes/javax/sound/midi/ShortMessage.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/javax/sound/midi/ShortMessage.java	Tue Dec 23 13:58:34 2014 -0800
@@ -303,7 +303,7 @@
      * @param  status the MIDI status byte
      * @param  data1 the first data byte
      * @param  data2 the second data byte
-     * @throws InvalidMidiDataException if the the status byte, or all data
+     * @throws InvalidMidiDataException if the status byte, or all data
      *         bytes belonging to the message, do not specify a valid MIDI
      *         message
      * @see #setMessage(int, int, int, int)
--- a/src/java.desktop/share/classes/javax/sound/sampled/Clip.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/javax/sound/sampled/Clip.java	Tue Dec 23 13:58:34 2014 -0800
@@ -178,7 +178,7 @@
     /**
      * Sets the first and last sample frames that will be played in the loop.
      * The ending point must be greater than or equal to the starting point, and
-     * both must fall within the the size of the loaded media. A value of 0 for
+     * both must fall within the size of the loaded media. A value of 0 for
      * the starting point means the beginning of the loaded media. Similarly, a
      * value of -1 for the ending point indicates the last frame of the media.
      *
--- a/src/java.desktop/share/classes/javax/swing/AbstractButton.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/javax/swing/AbstractButton.java	Tue Dec 23 13:58:34 2014 -0800
@@ -1474,7 +1474,7 @@
      * area.  If you wish to have a transparent button, such as
      * an icon only button, for example, then you should set
      * this to <code>false</code>. Do not call <code>setOpaque(false)</code>.
-     * The default value for the the <code>contentAreaFilled</code>
+     * The default value for the <code>contentAreaFilled</code>
      * property is <code>true</code>.
      * <p>
      * This function may cause the component's opaque property to change.
@@ -1538,7 +1538,7 @@
     }
 
     /**
-     * Returns the keyboard mnemonic from the the current model.
+     * Returns the keyboard mnemonic from the current model.
      * @return the keyboard mnemonic from the model
      */
     public int getMnemonic() {
@@ -2562,7 +2562,7 @@
          * Perform the specified Action on the object
          *
          * @param i zero-based index of actions
-         * @return true if the the action was performed; else false.
+         * @return true if the action was performed; else false.
          */
         public boolean doAccessibleAction(int i) {
             if (i == 0) {
--- a/src/java.desktop/share/classes/javax/swing/ArrayTable.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/javax/swing/ArrayTable.java	Tue Dec 23 13:58:34 2014 -0800
@@ -51,7 +51,7 @@
     /**
      * Writes the passed in ArrayTable to the passed in ObjectOutputStream.
      * The data is saved as an integer indicating how many key/value
-     * pairs are being archived, followed by the the key/value pairs. If
+     * pairs are being archived, followed by the key/value pairs. If
      * <code>table</code> is null, 0 will be written to <code>s</code>.
      * <p>
      * This is a convenience method that ActionMap/InputMap and
--- a/src/java.desktop/share/classes/javax/swing/Box.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/javax/swing/Box.java	Tue Dec 23 13:58:34 2014 -0800
@@ -82,7 +82,7 @@
 
     /**
      * Creates a <code>Box</code> that displays its components
-     * along the the specified axis.
+     * along the specified axis.
      *
      * @param axis  can be {@link BoxLayout#X_AXIS},
      *              {@link BoxLayout#Y_AXIS},
--- a/src/java.desktop/share/classes/javax/swing/GroupLayout.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/javax/swing/GroupLayout.java	Tue Dec 23 13:58:34 2014 -0800
@@ -2397,7 +2397,7 @@
      * {@code CONSTANT_DESCENT}; otherwise the baseline is anchored to the top
      * of the group.
      * <p>
-     * Elements aligned to the baseline are resizable if they have have
+     * Elements aligned to the baseline are resizable if they have
      * a baseline resize behavior of {@code CONSTANT_ASCENT} or
      * {@code CONSTANT_DESCENT}. Elements with a baseline resize
      * behavior of {@code OTHER} or {@code CENTER_OFFSET} are not resizable.
--- a/src/java.desktop/share/classes/javax/swing/JComboBox.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/javax/swing/JComboBox.java	Tue Dec 23 13:58:34 2014 -0800
@@ -1320,8 +1320,8 @@
      */
     public void actionPerformed(ActionEvent e) {
         ComboBoxEditor editor = getEditor();
-        if ((editor != null) && (e != null)
-                && (editor.getEditorComponent() == e.getSource())) {
+        if ((editor != null) && (e != null) && (editor == e.getSource()
+                || editor.getEditorComponent() == e.getSource())) {
             setPopupVisible(false);
             getModel().setSelectedItem(editor.getItem());
             String oldCommand = getActionCommand();
@@ -1919,7 +1919,7 @@
          * Perform the specified Action on the object
          *
          * @param i zero-based index of actions
-         * @return true if the the action was performed; else false.
+         * @return true if the action was performed; else false.
          */
         public boolean doAccessibleAction(int i) {
             if (i == 0) {
--- a/src/java.desktop/share/classes/javax/swing/JComponent.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/javax/swing/JComponent.java	Tue Dec 23 13:58:34 2014 -0800
@@ -1882,7 +1882,7 @@
     }
 
     /**
-     * Sets the the horizontal alignment.
+     * Sets the horizontal alignment.
      *
      * @param alignmentY  the new horizontal alignment
      * @see #getAlignmentY
@@ -1911,7 +1911,7 @@
     }
 
     /**
-     * Sets the the vertical alignment.
+     * Sets the vertical alignment.
      *
      * @param alignmentX  the new vertical alignment
      * @see #getAlignmentX
@@ -4799,7 +4799,7 @@
     /**
      * Notifies this component that it no longer has a parent component.
      * When this method is invoked, any <code>KeyboardAction</code>s
-     * set up in the the chain of parent components are removed.
+     * set up in the chain of parent components are removed.
      * This method is called by the toolkit internally and should
      * not be called directly by programs.
      *
@@ -5575,7 +5575,7 @@
      * the UI before any of the <code>JComponent</code>'s children
      * (or its <code>LayoutManager</code> etc.) are written,
      * and we don't want to restore the UI until the most derived
-     * <code>JComponent</code> subclass has been been stored.
+     * <code>JComponent</code> subclass has been stored.
      *
      * @param s the <code>ObjectOutputStream</code> in which to write
      */
--- a/src/java.desktop/share/classes/javax/swing/JEditorPane.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/javax/swing/JEditorPane.java	Tue Dec 23 13:58:34 2014 -0800
@@ -716,7 +716,7 @@
      * like fetch the stream from a cache, monitor the progress
      * of the stream, etc.
      * <p>
-     * This method is expected to have the the side effect of
+     * This method is expected to have the side effect of
      * establishing the content type, and therefore setting the
      * appropriate <code>EditorKit</code> to use for loading the stream.
      * <p>
@@ -1826,7 +1826,7 @@
              * Perform the specified Action on the object
              *
              * @param i zero-based index of actions
-             * @return true if the the action was performed; else false.
+             * @return true if the action was performed; else false.
              * @see #getAccessibleActionCount
              */
             public boolean doAccessibleAction(int i) {
--- a/src/java.desktop/share/classes/javax/swing/JLayer.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/javax/swing/JLayer.java	Tue Dec 23 13:58:34 2014 -0800
@@ -131,7 +131,7 @@
  * <li>{@link Container#add(java.awt.Component, Object)}</li>
  * <li>{@link Container#add(java.awt.Component, Object, int)}</li>
  * </ul>
- * using any of of them will cause {@code UnsupportedOperationException} to be thrown,
+ * using any of them will cause {@code UnsupportedOperationException} to be thrown,
  * to add a component to {@code JLayer}
  * use {@link #setView(Component)} or {@link #setGlassPane(JPanel)}.
  *
--- a/src/java.desktop/share/classes/javax/swing/JList.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/javax/swing/JList.java	Tue Dec 23 13:58:34 2014 -0800
@@ -140,7 +140,7 @@
  * <p>
  * The preferred way to listen for changes in list selection is to add
  * {@code ListSelectionListener}s directly to the {@code JList}. {@code JList}
- * then takes care of listening to the the selection model and notifying your
+ * then takes care of listening to the selection model and notifying your
  * listeners of change.
  * <p>
  * Responsibility for listening to selection changes in order to keep the list's
@@ -717,7 +717,7 @@
      * <p>
      * This is a JavaBeans bound property.
      *
-     * @param height the height to be used for for all cells in the list
+     * @param height the height to be used for all cells in the list
      * @see #setPrototypeCellValue
      * @see #setFixedCellWidth
      * @see JComponent#addPropertyChangeListener
--- a/src/java.desktop/share/classes/javax/swing/JMenuItem.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/javax/swing/JMenuItem.java	Tue Dec 23 13:58:34 2014 -0800
@@ -178,7 +178,7 @@
     }
 
     /**
-     * Inititalizes the focusability of the the <code>JMenuItem</code>.
+     * Inititalizes the focusability of the <code>JMenuItem</code>.
      * <code>JMenuItem</code>'s are focusable, but subclasses may
      * want to be, this provides them the opportunity to override this
      * and invoke something else, or nothing at all. Refer to
--- a/src/java.desktop/share/classes/javax/swing/JProgressBar.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/javax/swing/JProgressBar.java	Tue Dec 23 13:58:34 2014 -0800
@@ -330,7 +330,7 @@
     public JProgressBar(int orient, int min, int max)
     {
         // Creating the model this way is a bit simplistic, but
-        //  I believe that it is the the most common usage of this
+        //  I believe that it is the most common usage of this
         //  component - it's what people will expect.
         setModel(new DefaultBoundedRangeModel(min, 0, min, max));
         updateUI();
--- a/src/java.desktop/share/classes/javax/swing/JSpinner.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/javax/swing/JSpinner.java	Tue Dec 23 13:58:34 2014 -0800
@@ -447,7 +447,7 @@
      * Sends a <code>ChangeEvent</code>, whose source is this
      * <code>JSpinner</code>, to each <code>ChangeListener</code>.
      * When a <code>ChangeListener</code> has been added
-     * to the spinner, this method method is called each time
+     * to the spinner, this method is called each time
      * a <code>ChangeEvent</code> is received from the model.
      *
      * @see #addChangeListener
@@ -1798,7 +1798,7 @@
                 Rectangle editorRect = at.getCharacterBounds(i);
                 if (editorRect != null &&
                     sameWindowAncestor(JSpinner.this, editor)) {
-                    // return rectangle in the the JSpinner bounds
+                    // return rectangle in the JSpinner bounds
                     return SwingUtilities.convertRectangle(editor,
                                                            editorRect,
                                                            JSpinner.this);
--- a/src/java.desktop/share/classes/javax/swing/JTree.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/javax/swing/JTree.java	Tue Dec 23 13:58:34 2014 -0800
@@ -5575,7 +5575,7 @@
              * object behind the TreeCellRenderer.
              *
              * @param i zero-based index of actions
-             * @return true if the the action was performed; else false.
+             * @return true if the action was performed; else false.
              */
             public boolean doAccessibleAction(int i) {
                 if (i < 0 || i >= getAccessibleActionCount()) {
--- a/src/java.desktop/share/classes/javax/swing/OverlayLayout.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/javax/swing/OverlayLayout.java	Tue Dec 23 13:58:34 2014 -0800
@@ -97,7 +97,7 @@
      * this class to know when to invalidate layout.
      *
      * @param name the name of the component
-     * @param comp the the component to be added
+     * @param comp the component to be added
      */
     public void addLayoutComponent(String name, Component comp) {
         invalidateLayout(comp.getParent());
--- a/src/java.desktop/share/classes/javax/swing/ScrollPaneLayout.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/javax/swing/ScrollPaneLayout.java	Tue Dec 23 13:58:34 2014 -0800
@@ -225,7 +225,7 @@
      * </ul>
      *
      * @param s the component identifier
-     * @param c the the component to be added
+     * @param c the component to be added
      * @exception IllegalArgumentException if <code>s</code> is an invalid key
      */
     public void addLayoutComponent(String s, Component c)
--- a/src/java.desktop/share/classes/javax/swing/SpinnerModel.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/javax/swing/SpinnerModel.java	Tue Dec 23 13:58:34 2014 -0800
@@ -53,7 +53,7 @@
  *   <dd>The preceding element or null if <code>value</code> is the
  *     first element of the sequence.
  * </dl>
- * When the the <code>value</code> property changes,
+ * When the <code>value</code> property changes,
  * <code>ChangeListeners</code> are notified.  <code>SpinnerModel</code> may
  * choose to notify the <code>ChangeListeners</code> under other circumstances.
  *
--- a/src/java.desktop/share/classes/javax/swing/UIDefaults.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/javax/swing/UIDefaults.java	Tue Dec 23 13:58:34 2014 -0800
@@ -167,7 +167,7 @@
     }
 
     /**
-     * Looks up up the given key in our Hashtable and resolves LazyValues
+     * Looks up the given key in our Hashtable and resolves LazyValues
      * or ActiveValues.
      */
     private Object getFromHashtable(Object key) {
@@ -1181,7 +1181,7 @@
     /**
      * <code>LazyInputMap</code> will create a <code>InputMap</code>
      * in its <code>createValue</code>
-     * method. The bindings are passed in in the constructor.
+     * method. The bindings are passed in the constructor.
      * The bindings are an array with
      * the even number entries being string <code>KeyStrokes</code>
      * (eg "alt SPACE") and
--- a/src/java.desktop/share/classes/javax/swing/ViewportLayout.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/javax/swing/ViewportLayout.java	Tue Dec 23 13:58:34 2014 -0800
@@ -66,7 +66,7 @@
     /**
      * Adds the specified component to the layout. Not used by this class.
      * @param name the name of the component
-     * @param c the the component to be added
+     * @param c the component to be added
      */
     public void addLayoutComponent(String name, Component c) { }
 
--- a/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicComboPopup.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicComboPopup.java	Tue Dec 23 13:58:34 2014 -0800
@@ -1141,7 +1141,7 @@
 
 
     /**
-     * This is is a utility method that helps event handlers figure out where to
+     * This is a utility method that helps event handlers figure out where to
      * send the focus when the popup is brought up.  The standard implementation
      * delegates the focus to the editor (if the combo box is editable) or to
      * the JComboBox if it is not editable.
--- a/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicSliderUI.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicSliderUI.java	Tue Dec 23 13:58:34 2014 -0800
@@ -1449,7 +1449,7 @@
 
     /**
      * Returns the value at the y position. If {@code yPos} is beyond the
-     * track at the the bottom or the top, this method sets the value to either
+     * track at the bottom or the top, this method sets the value to either
      * the minimum or maximum value of the slider, depending on if the slider
      * is inverted or not.
      *
@@ -1927,7 +1927,7 @@
      * The recommended approach to creating bindings is to use a
      * combination of an <code>ActionMap</code>, to contain the action,
      * and an <code>InputMap</code> to contain the mapping from KeyStroke
-     * to action description. The InputMap is is usually described in the
+     * to action description. The InputMap is usually described in the
      * LookAndFeel tables.
      * <p>
      * Please refer to the key bindings specification for further details.
--- a/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicTableUI.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicTableUI.java	Tue Dec 23 13:58:34 2014 -0800
@@ -344,7 +344,7 @@
             }
 
             // In cases where the lead is not within the search range,
-            // we need to bring it within one cell for the the search
+            // we need to bring it within one cell for the search
             // to work properly. Check these here.
             leadRow = Math.min(Math.max(leadRow, minY - 1), maxY + 1);
             leadColumn = Math.min(Math.max(leadColumn, minX - 1), maxX + 1);
--- a/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicTextUI.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicTextUI.java	Tue Dec 23 13:58:34 2014 -0800
@@ -137,7 +137,7 @@
     /**
      * Fetches the name of the keymap that will be installed/used
      * by default for this UI. This is implemented to create a
-     * name based upon the classname.  The name is the the name
+     * name based upon the classname.  The name is the name
      * of the class with the package prefix removed.
      *
      * @return the name
--- a/src/java.desktop/share/classes/javax/swing/plaf/synth/SynthGraphicsUtils.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/javax/swing/plaf/synth/SynthGraphicsUtils.java	Tue Dec 23 13:58:34 2014 -0800
@@ -245,7 +245,7 @@
     }
 
     /**
-     * Returns the maximum height of the the Font from the passed in
+     * Returns the maximum height of the Font from the passed in
      * SynthContext.
      *
      * @param context SynthContext used to determine font.
--- a/src/java.desktop/share/classes/javax/swing/table/JTableHeader.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/javax/swing/table/JTableHeader.java	Tue Dec 23 13:58:34 2014 -0800
@@ -242,7 +242,7 @@
     }
 
     /**
-     * Returns the the dragged column, if and only if, a drag is in
+     * Returns the dragged column, if and only if, a drag is in
      * process, otherwise returns <code>null</code>.
      *
      * @return  the dragged column, if a drag is in
--- a/src/java.desktop/share/classes/javax/swing/table/TableColumn.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/javax/swing/table/TableColumn.java	Tue Dec 23 13:58:34 2014 -0800
@@ -127,7 +127,7 @@
     /**
      *  This object is not used internally by the drawing machinery of
      *  the <code>JTable</code>; identifiers may be set in the
-     *  <code>TableColumn</code> as as an
+     *  <code>TableColumn</code> as an
      *  optional way to tag and locate table columns. The table package does
      *  not modify or invoke any methods in these identifier objects other
      *  than the <code>equals</code> method which is used in the
--- a/src/java.desktop/share/classes/javax/swing/text/BoxView.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/javax/swing/text/BoxView.java	Tue Dec 23 13:58:34 2014 -0800
@@ -1128,7 +1128,7 @@
      * indicating the <code>View</code>s are layed out in ascending order.
      * <p>
      * If the receiver is laying its <code>View</code>s along the
-     * <code>Y_AXIS</code>, this will will return the value from
+     * <code>Y_AXIS</code>, this will return the value from
      * invoking the same method on the <code>View</code>
      * responsible for rendering <code>position</code> and
      * <code>bias</code>. Otherwise this will return false.
--- a/src/java.desktop/share/classes/javax/swing/text/DefaultStyledDocument.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/javax/swing/text/DefaultStyledDocument.java	Tue Dec 23 13:58:34 2014 -0800
@@ -409,7 +409,7 @@
 
 
     /**
-     * Fetches the list of of style names.
+     * Fetches the list of style names.
      *
      * @return all the style names
      */
--- a/src/java.desktop/share/classes/javax/swing/text/ElementIterator.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/javax/swing/text/ElementIterator.java	Tue Dec 23 13:58:34 2014 -0800
@@ -79,7 +79,7 @@
      * as well as a child index.  If the
      * index is -1, then the element represented
      * on the stack is the element itself.
-     * Otherwise, the index functions as as index
+     * Otherwise, the index functions as an index
      * into the vector of children of the element.
      * In this case, the item on the stack
      * represents the "index"th child of the element
--- a/src/java.desktop/share/classes/javax/swing/text/ParagraphView.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/javax/swing/text/ParagraphView.java	Tue Dec 23 13:58:34 2014 -0800
@@ -403,7 +403,7 @@
      * This is implemented to try and locate a <code>TabSet</code>
      * in the paragraph element's attribute set.  If one can be
      * found, its settings will be used, otherwise a default expansion
-     * will be provided.  The base location for for tab expansion
+     * will be provided.  The base location for tab expansion
      * is the left inset from the paragraphs most recent allocation
      * (which is what the layout of the children is based upon).
      *
--- a/src/java.desktop/share/classes/javax/swing/text/PlainView.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/javax/swing/text/PlainView.java	Tue Dec 23 13:58:34 2014 -0800
@@ -385,11 +385,11 @@
         int x = (int) fx;
         int y = (int) fy;
         if (y < alloc.y) {
-            // above the area covered by this icon, so the the position
+            // above the area covered by this icon, so the position
             // is assumed to be the start of the coverage for this view.
             return getStartOffset();
         } else if (y > alloc.y + alloc.height) {
-            // below the area covered by this icon, so the the position
+            // below the area covered by this icon, so the position
             // is assumed to be the end of the coverage for this view.
             return getEndOffset() - 1;
         } else {
--- a/src/java.desktop/share/classes/javax/swing/text/WrappedPlainView.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/javax/swing/text/WrappedPlainView.java	Tue Dec 23 13:58:34 2014 -0800
@@ -668,11 +668,11 @@
             int x = (int) fx;
             int y = (int) fy;
             if (y < alloc.y) {
-                // above the area covered by this icon, so the the position
+                // above the area covered by this icon, so the position
                 // is assumed to be the start of the coverage for this view.
                 return getStartOffset();
             } else if (y > alloc.y + alloc.height) {
-                // below the area covered by this icon, so the the position
+                // below the area covered by this icon, so the position
                 // is assumed to be the end of the coverage for this view.
                 return getEndOffset() - 1;
             } else {
--- a/src/java.desktop/share/classes/javax/swing/text/html/CSS.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/javax/swing/text/html/CSS.java	Tue Dec 23 13:58:34 2014 -0800
@@ -1588,7 +1588,7 @@
 
                 /*
                  * HTML.Attribute.ALIGN needs special processing.
-                 * It can map to to 1 of many(3) possible CSS attributes
+                 * It can map to 1 of many(3) possible CSS attributes
                  * depending on the nature of the tag the attribute is
                  * part off and depending on the value of the attribute.
                  */
--- a/src/java.desktop/share/classes/javax/swing/text/html/FormView.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/javax/swing/text/html/FormView.java	Tue Dec 23 13:58:34 2014 -0800
@@ -37,7 +37,7 @@
  * Component decorator that implements the view interface
  * for form elements, &lt;input&gt;, &lt;textarea&gt;,
  * and &lt;select&gt;.  The model for the component is stored
- * as an attribute of the the element (using StyleConstants.ModelAttribute),
+ * as an attribute of the element (using StyleConstants.ModelAttribute),
  * and is used to build the component of the view.  The type
  * of the model is assumed to of the type that would be set by
  * <code>HTMLDocument.HTMLReader.FormAction</code>.  If there are
--- a/src/java.desktop/share/classes/javax/swing/text/html/HTMLDocument.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/javax/swing/text/html/HTMLDocument.java	Tue Dec 23 13:58:34 2014 -0800
@@ -1345,7 +1345,7 @@
     }
 
     /**
-     * Inserts the HTML specified as a string after the the end of the
+     * Inserts the HTML specified as a string after the end of the
      * given element.
      *
      * <p>Consider the following structure (the <code>elem</code>
--- a/src/java.desktop/share/classes/javax/swing/text/html/IsindexView.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/javax/swing/text/html/IsindexView.java	Tue Dec 23 13:58:34 2014 -0800
@@ -53,7 +53,7 @@
     }
 
     /**
-     * Creates the components necessary to to implement
+     * Creates the components necessary to implement
      * this view.  The component returned is a <code>JPanel</code>,
      * that contains the PROMPT to the left and <code>JTextField</code>
      * to the right.
--- a/src/java.desktop/share/classes/javax/swing/text/html/LineView.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/javax/swing/text/html/LineView.java	Tue Dec 23 13:58:34 2014 -0800
@@ -136,7 +136,7 @@
      * This is implemented to try and locate a <code>TabSet</code>
      * in the paragraph element's attribute set.  If one can be
      * found, its settings will be used, otherwise a default expansion
-     * will be provided.  The base location for for tab expansion
+     * will be provided.  The base location for tab expansion
      * is the left inset from the paragraphs most recent allocation
      * (which is what the layout of the children is based upon).
      *
--- a/src/java.desktop/share/classes/javax/swing/text/html/parser/DTDConstants.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/javax/swing/text/html/parser/DTDConstants.java	Tue Dec 23 13:58:34 2014 -0800
@@ -27,7 +27,7 @@
 
 /**
  * SGML constants used in a DTD. The names of the
- * constants correspond the the equivalent SGML constructs
+ * constants correspond to the equivalent SGML constructs
  * as described in "The SGML Handbook" by  Charles F. Goldfarb.
  *
  * @see DTD
--- a/src/java.desktop/share/classes/javax/swing/text/html/parser/Entity.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/javax/swing/text/html/parser/Entity.java	Tue Dec 23 13:58:34 2014 -0800
@@ -35,7 +35,7 @@
 
 /**
  * An entity is described in a DTD using the ENTITY construct.
- * It defines the type and value of the the entity.
+ * It defines the type and value of the entity.
  *
  * @see DTD
  * @author Arthur van Hoff
--- a/src/java.desktop/share/classes/javax/swing/text/html/parser/Parser.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/javax/swing/text/html/parser/Parser.java	Tue Dec 23 13:58:34 2014 -0800
@@ -1846,7 +1846,7 @@
 
             if (unknown) {
                 // we will not see a corresponding start tag
-                // on the the stack.  If we are seeing an
+                // on the stack.  If we are seeing an
                 // end tag, lets send this on as an empty
                 // tag with the end tag attribute set to
                 // true.
--- a/src/java.desktop/share/classes/javax/swing/undo/UndoManager.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/javax/swing/undo/UndoManager.java	Tue Dec 23 13:58:34 2014 -0800
@@ -283,7 +283,7 @@
 
 
     /**
-     * Returns the the next significant edit to be undone if <code>undo</code>
+     * Returns the next significant edit to be undone if <code>undo</code>
      * is invoked. This returns <code>null</code> if there are no edits
      * to be undone.
      *
@@ -302,7 +302,7 @@
     }
 
     /**
-     * Returns the the next significant edit to be redone if <code>redo</code>
+     * Returns the next significant edit to be redone if <code>redo</code>
      * is invoked. This returns <code>null</code> if there are no edits
      * to be redone.
      *
--- a/src/java.desktop/share/classes/sun/awt/datatransfer/DataTransferer.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/sun/awt/datatransfer/DataTransferer.java	Tue Dec 23 13:58:34 2014 -0800
@@ -926,6 +926,15 @@
         // bytes and dump them into a byte array. For text flavors, decode back
         // to a String and recur to reencode according to the requested format.
         } else if (flavor.isRepresentationClassInputStream()) {
+
+            // Workaround to JDK-8024061: Exception thrown when drag and drop
+            //      between two components is executed quickly.
+            // and JDK-8065098:  JColorChooser no longer supports drag and drop
+            //      between two JVM instances
+            if (!(obj instanceof InputStream)) {
+                return new byte[0];
+            }
+
             try (ByteArrayOutputStream bos = new ByteArrayOutputStream()) {
                 try (InputStream is = (InputStream)obj) {
                     boolean eof = false;
--- a/src/java.desktop/share/classes/sun/awt/dnd/SunDropTargetContextPeer.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/sun/awt/dnd/SunDropTargetContextPeer.java	Tue Dec 23 13:58:34 2014 -0800
@@ -239,13 +239,6 @@
 
         if (localTransferable != null) {
             return localTransferable.getTransferData(df);
-        } else if (df.isMimeTypeEqual(DataFlavor.javaJVMLocalObjectMimeType)) {
-            // Workaround to JDK-8024061: Exception thrown when drag and drop
-            //      between two components is executed quickly.
-            // It is expected localTransferable is not null if javaJVMLocalObjectMimeType
-            // is used. Executing further results in ClassCastException, so null is
-            // returned here as no transfer data is available in this case.
-            return null;
         }
 
         if (dropStatus != STATUS_ACCEPT || dropComplete) {
--- a/src/java.desktop/share/classes/sun/awt/im/ExecutableInputMethodManager.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/sun/awt/im/ExecutableInputMethodManager.java	Tue Dec 23 13:58:34 2014 -0800
@@ -259,7 +259,8 @@
                 AccessController.doPrivileged(new PrivilegedExceptionAction<Object>() {
                     public Object run() {
                         for (InputMethodDescriptor descriptor :
-                            ServiceLoader.loadInstalled(InputMethodDescriptor.class)) {
+                            ServiceLoader.load(InputMethodDescriptor.class,
+                                               ClassLoader.getSystemClassLoader())) {
                             ClassLoader cl = descriptor.getClass().getClassLoader();
                             javaInputMethodLocatorList.add(new InputMethodLocator(descriptor, cl, null));
                         }
--- a/src/java.desktop/share/classes/sun/font/BidiUtils.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/sun/font/BidiUtils.java	Tue Dec 23 13:58:34 2014 -0800
@@ -47,7 +47,7 @@
      * array instead of iterating over the runs.
      *
      * @param levels the array to receive the character levels
-     * @param start the starting offset into the the array
+     * @param start the starting offset into the array
      * @throws IndexOutOfBoundsException if <code>start</code> is less than 0 or
      * <code>start + getLength()</code> is greater than <code>levels.length</code>.
      */
--- a/src/java.desktop/share/classes/sun/font/Decoration.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/sun/font/Decoration.java	Tue Dec 23 13:58:34 2014 -0800
@@ -105,7 +105,7 @@
     }
 
     /**
-     * Return a Decoration appropriate for the the given Map.
+     * Return a Decoration appropriate for the given Map.
      * @param attributes the Map used to determine the Decoration
      */
     public static Decoration getDecoration(Map<? extends Attribute, ?> attributes) {
--- a/src/java.desktop/share/classes/sun/font/FileFontStrike.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/sun/font/FileFontStrike.java	Tue Dec 23 13:58:34 2014 -0800
@@ -898,7 +898,7 @@
 
     /* The caller of this can be trusted to return a copy of this
      * return value rectangle to public API. In fact frequently it
-     * can't use use this return value directly anyway.
+     * can't use this return value directly anyway.
      * This returns bounds in device space. Currently the only
      * caller is SGV and it converts back to user space.
      * We could change things so that this code does the conversion so
--- a/src/java.desktop/share/classes/sun/font/FontUtilities.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/sun/font/FontUtilities.java	Tue Dec 23 13:58:34 2014 -0800
@@ -214,7 +214,7 @@
      * char which means it may include undecoded surrogate pairs.
      * The distinction is made so that code which needs to identify all
      * cases in which we do not have a simple mapping from
-     * char->unicode character->glyph can be be identified.
+     * char->unicode character->glyph can be identified.
      * For example measurement cannot simply sum advances of 'chars',
      * the caret in editable text cannot advance one 'char' at a time, etc.
      * These callers really are asking for more than whether 'layout'
--- a/src/java.desktop/share/classes/sun/font/SunFontManager.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/sun/font/SunFontManager.java	Tue Dec 23 13:58:34 2014 -0800
@@ -575,7 +575,7 @@
      * that claims to support the Microsoft Windows encoding corresponding to
      * the default file.encoding property of this JRE instance.
      * This narrow value is useful for Swing to decide if the font is useful
-     * for the the Windows Look and Feel, or, if a  composite font should be
+     * for the Windows Look and Feel, or, if a composite font should be
      * used instead.
      * The information used to make the decision is obtained from
      * the ulCodePageRange fields in the font.
@@ -1611,7 +1611,7 @@
      * all non-null file names first.
      * They are added in to a map with nominally the first
      * word in the name of the family as the key. In all the cases
-     * we are using the the family name is a single word, and as is
+     * we are using the family name is a single word, and as is
      * more or less required the family name is the initial sequence
      * in a full name. So lookup first finds the matching description,
      * then registers the whole family, returning the right font.
--- a/src/java.desktop/share/classes/sun/font/SunLayoutEngine.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/sun/font/SunLayoutEngine.java	Tue Dec 23 13:58:34 2014 -0800
@@ -72,7 +72,7 @@
  * font tables (the selector indicates which).  Then layout is called,
  * the contents are copied (or not), and the stack is destroyed on
  * exit. So the association is between the font/script (layout engine
- * desc) and and one of a few permanent engine objects, which are
+ * desc) and one of a few permanent engine objects, which are
  * handed the key when they need to process something.  In the native
  * case, the engine holds an index, and just passes it together with
  * the key info down to native.  Some default cases are the 'default
--- a/src/java.desktop/share/classes/sun/font/TrueTypeFont.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/sun/font/TrueTypeFont.java	Tue Dec 23 13:58:34 2014 -0800
@@ -154,7 +154,7 @@
     /* number of table entries in the directory/offsets table */
     int numTables;
 
-    /* The contents of the the directory/offsets table */
+    /* The contents of the directory/offsets table */
     DirectoryEntry []tableDirectory;
 
 //     protected byte []gposTable = null;
@@ -228,7 +228,7 @@
             return false; /* useNatives is false */
         } else if (nativeNames instanceof String) {
             String name = (String)nativeNames;
-            /* Don't do do this for Latin fonts */
+            /* Don't do this for Latin fonts */
             if (name.indexOf("8859") > 0) {
                 checkedNatives = true;
                 return false;
--- a/src/java.desktop/share/classes/sun/java2d/loops/ProcessPath.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/sun/java2d/loops/ProcessPath.java	Tue Dec 23 13:58:34 2014 -0800
@@ -1418,7 +1418,7 @@
                                               */
                                  );
         } else {
-            /* Clamping starting from first vertex of the the processed
+            /* Clamping starting from first vertex of the processed
              * segment
              *
              * CLIPCLAMP(xMin, xMax, x1, y1, x2, y2, x3, y3, res);
@@ -1438,7 +1438,7 @@
                 return;
             }
 
-            /* Clamping starting from last vertex of the the processed
+            /* Clamping starting from last vertex of the processed
              * segment
              *
              * CLIPCLAMP(xMin, xMax, x2, y2, x1, y1, x3, y3, res);
@@ -2062,7 +2062,7 @@
                 if (res == CRES_INVISIBLE) return;
                 lastClipped = IS_CLIPPED(res);
 
-                /* Clamping starting from first vertex of the the processed
+                /* Clamping starting from first vertex of the processed
                  * segment
                  *
                  * CLIPCLAMP(outXMin, outXMax, x1, y1, x2, y2, x3, y3, res);
@@ -2078,7 +2078,7 @@
                     return;
                 }
 
-                /* Clamping starting from last vertex of the the processed
+                /* Clamping starting from last vertex of the processed
                  * segment
                  *
                  * CLIPCLAMP(outXMin, outXMax, x2, y2, x1, y1, x3, y3, res);
--- a/src/java.desktop/share/classes/sun/java2d/pipe/BufferedContext.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/sun/java2d/pipe/BufferedContext.java	Tue Dec 23 13:58:34 2014 -0800
@@ -451,7 +451,7 @@
     public abstract RenderQueue getRenderQueue();
 
     /**
-     * Saves the the state of this context.
+     * Saves the state of this context.
      * It may reset the current context.
      *
      * Note: must be called while the RenderQueue lock is held.
--- a/src/java.desktop/share/classes/sun/java2d/pipe/DrawImage.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/sun/java2d/pipe/DrawImage.java	Tue Dec 23 13:58:34 2014 -0800
@@ -364,8 +364,53 @@
                                     int sx1, int sy1, int sx2, int sy2,
                                     Color bgColor)
     {
+        final AffineTransform itx;
+        try {
+            itx = tx.createInverse();
+        } catch (final NoninvertibleTransformException ignored) {
+            // Non-invertible transform means no output
+            return;
+        }
+
+        /*
+         * Find the maximum bounds on the destination that will be
+         * affected by the transformed source.  First, transform all
+         * four corners of the source and then min and max the resulting
+         * destination coordinates of the transformed corners.
+         * Note that tx already has the offset to sx1,sy1 accounted
+         * for so we use the box (0, 0, sx2-sx1, sy2-sy1) as the
+         * source coordinates.
+         */
+        final double[] coords = new double[8];
+        /* corner:  UL      UR      LL      LR   */
+        /* index:  0  1    2  3    4  5    6  7  */
+        /* coord: (0, 0), (w, 0), (0, h), (w, h) */
+        coords[2] = coords[6] = sx2 - sx1;
+        coords[5] = coords[7] = sy2 - sy1;
+        tx.transform(coords, 0, coords, 0, 4);
+        double ddx1, ddy1, ddx2, ddy2;
+        ddx1 = ddx2 = coords[0];
+        ddy1 = ddy2 = coords[1];
+        for (int i = 2; i < coords.length; i += 2) {
+            double d = coords[i];
+            if (ddx1 > d) ddx1 = d;
+            else if (ddx2 < d) ddx2 = d;
+            d = coords[i+1];
+            if (ddy1 > d) ddy1 = d;
+            else if (ddy2 < d) ddy2 = d;
+        }
+
         Region clip = sg.getCompClip();
-        SurfaceData dstData = sg.surfaceData;
+        final int dx1 = Math.max((int) Math.floor(ddx1), clip.lox);
+        final int dy1 = Math.max((int) Math.floor(ddy1), clip.loy);
+        final int dx2 = Math.min((int) Math.ceil(ddx2), clip.hix);
+        final int dy2 = Math.min((int) Math.ceil(ddy2), clip.hiy);
+        if (dx2 <= dx1 || dy2 <= dy1) {
+            // empty destination means no output
+            return;
+        }
+
+        final SurfaceData dstData = sg.surfaceData;
         SurfaceData srcData = dstData.getSourceSurfaceData(img,
                                                            SunGraphics2D.TRANSFORM_GENERIC,
                                                            sg.imageComp,
@@ -429,56 +474,13 @@
             // assert(helper != null);
         }
 
-        AffineTransform itx;
-        try {
-            itx = tx.createInverse();
-        } catch (NoninvertibleTransformException e) {
-            // Non-invertible transform means no output
-            return;
-        }
-
-        /*
-         * Find the maximum bounds on the destination that will be
-         * affected by the transformed source.  First, transform all
-         * four corners of the source and then min and max the resulting
-         * destination coordinates of the transformed corners.
-         * Note that tx already has the offset to sx1,sy1 accounted
-         * for so we use the box (0, 0, sx2-sx1, sy2-sy1) as the
-         * source coordinates.
-         */
-        double coords[] = new double[8];
-        /* corner:  UL      UR      LL      LR   */
-        /* index:  0  1    2  3    4  5    6  7  */
-        /* coord: (0, 0), (w, 0), (0, h), (w, h) */
-        coords[2] = coords[6] = sx2 - sx1;
-        coords[5] = coords[7] = sy2 - sy1;
-        tx.transform(coords, 0, coords, 0, 4);
-        double ddx1, ddy1, ddx2, ddy2;
-        ddx1 = ddx2 = coords[0];
-        ddy1 = ddy2 = coords[1];
-        for (int i = 2; i < coords.length; i += 2) {
-            double d = coords[i];
-            if (ddx1 > d) ddx1 = d;
-            else if (ddx2 < d) ddx2 = d;
-            d = coords[i+1];
-            if (ddy1 > d) ddy1 = d;
-            else if (ddy2 < d) ddy2 = d;
-        }
-        int dx1 = (int) Math.floor(ddx1);
-        int dy1 = (int) Math.floor(ddy1);
-        int dx2 = (int) Math.ceil(ddx2);
-        int dy2 = (int) Math.ceil(ddy2);
-
         SurfaceType dstType = dstData.getSurfaceType();
-        MaskBlit maskblit;
-        Blit blit;
         if (sg.compositeState <= SunGraphics2D.COMP_ALPHA) {
             /* NOTE: We either have, or we can make,
              * a MaskBlit for any alpha composite type
              */
-            maskblit = MaskBlit.getFromCache(SurfaceType.IntArgbPre,
-                                             sg.imageComp,
-                                             dstType);
+            MaskBlit maskblit = MaskBlit.getFromCache(SurfaceType.IntArgbPre,
+                                                      sg.imageComp, dstType);
 
             /* NOTE: We can only use the native TransformHelper
              * func to go directly to the dest if both the helper
@@ -496,27 +498,19 @@
                                  null, 0, 0);
                 return;
             }
-            blit = null;
-        } else {
-            /* NOTE: We either have, or we can make,
-             * a Blit for any composite type, even Custom
-             */
-            maskblit = null;
-            blit = Blit.getFromCache(SurfaceType.IntArgbPre,
-                                     sg.imageComp,
-                                     dstType);
         }
 
         // We need to transform to a temp image and then copy
         // just the pieces that are valid data to the dest.
-        BufferedImage tmpimg = new BufferedImage(dx2-dx1, dy2-dy1,
+        final int w = dx2 - dx1;
+        final int h = dy2 - dy1;
+        BufferedImage tmpimg = new BufferedImage(w, h,
                                                  BufferedImage.TYPE_INT_ARGB_PRE);
         SurfaceData tmpData = SurfaceData.getPrimarySurfaceData(tmpimg);
         SurfaceType tmpType = tmpData.getSurfaceType();
-        MaskBlit tmpmaskblit =
-            MaskBlit.getFromCache(SurfaceType.IntArgbPre,
-                                  CompositeType.SrcNoEa,
-                                  tmpType);
+        MaskBlit tmpmaskblit = MaskBlit.getFromCache(SurfaceType.IntArgbPre,
+                                                     CompositeType.SrcNoEa,
+                                                     tmpType);
         /*
          * The helper function fills a temporary edges buffer
          * for us with the bounding coordinates of each scanline
@@ -531,7 +525,7 @@
          *
          * edges thus has to be h*2+2 in length
          */
-        int edges[] = new int[(dy2-dy1)*2+2];
+        final int[] edges = new int[h * 2 + 2];
         // It is important that edges[0]=edges[1]=0 when we call
         // Transform in case it must return early and we would
         // not want to render anything on an error condition.
@@ -539,35 +533,17 @@
                          AlphaComposite.Src, null,
                          itx, interpType,
                          sx1, sy1, sx2, sy2,
-                         0, 0, dx2-dx1, dy2-dy1,
+                         0, 0, w, h,
                          edges, dx1, dy1);
 
-        /*
-         * Now copy the results, scanline by scanline, into the dest.
-         * The edges array helps us minimize the work.
+        final Region region = Region.getInstance(dx1, dy1, dx2, dy2, edges);
+        clip = clip.getIntersection(region);
+
+        /* NOTE: We either have, or we can make,
+         * a Blit for any composite type, even Custom
          */
-        int index = 2;
-        for (int y = edges[0]; y < edges[1]; y++) {
-            int relx1 = edges[index++];
-            int relx2 = edges[index++];
-            if (relx1 >= relx2) {
-                continue;
-            }
-            if (maskblit != null) {
-                maskblit.MaskBlit(tmpData, dstData,
-                                  sg.composite, clip,
-                                  relx1, y,
-                                  dx1+relx1, dy1+y,
-                                  relx2 - relx1, 1,
-                                  null, 0, 0);
-            } else {
-                blit.Blit(tmpData, dstData,
-                          sg.composite, clip,
-                          relx1, y,
-                          dx1+relx1, dy1+y,
-                          relx2 - relx1, 1);
-            }
-        }
+        final Blit blit = Blit.getFromCache(tmpType, sg.imageComp, dstType);
+        blit.Blit(tmpData, dstData, sg.composite, clip, 0, 0, dx1, dy1, w, h);
     }
 
     // Render an image using only integer translation
--- a/src/java.desktop/share/classes/sun/java2d/pipe/Region.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/sun/java2d/pipe/Region.java	Tue Dec 23 13:58:34 2014 -0800
@@ -30,6 +30,8 @@
 import java.awt.geom.AffineTransform;
 import java.awt.geom.RectangularShape;
 
+import sun.java2d.loops.TransformHelper;
+
 /**
  * This class encapsulates a definition of a two dimensional region which
  * consists of a number of Y ranges each containing multiple X bands.
@@ -160,6 +162,15 @@
         this.hiy = hiy;
     }
 
+    private Region(int lox, int loy, int hix, int hiy, int[] bands, int end) {
+        this.lox = lox;
+        this.loy = loy;
+        this.hix = hix;
+        this.hiy = hiy;
+        this.bands = bands;
+        this.endIndex = end;
+    }
+
     /**
      * Returns a Region object covering the pixels which would be
      * touched by a fill or clip operation on a Graphics implementation
@@ -256,6 +267,44 @@
     }
 
     /**
+     * Returns a Region object with a rectangle of interest specified by the
+     * indicated rectangular area in lox, loy, hix, hiy and edges array, which
+     * is located relative to the rectangular area. Edges array - 0,1 are y
+     * range, 2N,2N+1 are x ranges, 1 per y range.
+     *
+     * @see TransformHelper
+     */
+    static Region getInstance(final int lox, final int loy, final int hix,
+                              final int hiy, final int[] edges) {
+        final int y1 = edges[0];
+        final int y2 = edges[1];
+        if (hiy <= loy || hix <= lox || y2 <= y1) {
+            return EMPTY_REGION;
+        }
+        // rowsNum * (3 + 1 * 2)
+        final int[] bands = new int[(y2 - y1) * 5];
+        int end = 0;
+        int index = 2;
+        for (int y = y1; y < y2; ++y) {
+            final int spanlox = Math.max(clipAdd(lox, edges[index++]), lox);
+            final int spanhix = Math.min(clipAdd(lox, edges[index++]), hix);
+            if (spanlox < spanhix) {
+                final int spanloy = Math.max(clipAdd(loy, y), loy);
+                final int spanhiy = Math.min(clipAdd(spanloy, 1), hiy);
+                if (spanloy < spanhiy) {
+                    bands[end++] = spanloy;
+                    bands[end++] = spanhiy;
+                    bands[end++] = 1; // 1 span per row
+                    bands[end++] = spanlox;
+                    bands[end++] = spanhix;
+                }
+            }
+        }
+        return end != 0 ? new Region(lox, loy, hix, hiy, bands, end)
+                        : EMPTY_REGION;
+    }
+
+    /**
      * Returns a Region object with a rectangle of interest specified
      * by the indicated Rectangle object.
      * <p>
--- a/src/java.desktop/share/classes/sun/print/PathGraphics.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/sun/print/PathGraphics.java	Tue Dec 23 13:58:34 2014 -0800
@@ -888,7 +888,7 @@
              * since it doesn't actually require "layout" (even though its
              * considered a layout attribute), it just requires a fractional
              * tweak to the[default]advances. So we need to specifically
-             * check for tracking until such time as as we can trust
+             * check for tracking until such time as we can trust
              * the GlyphVector.FLAG_HAS_POSITION_ADJUSTMENTS bit.
              */
             Map<TextAttribute, ?> map = font.getAttributes();
--- a/src/java.desktop/share/classes/sun/print/PeekGraphics.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/sun/print/PeekGraphics.java	Tue Dec 23 13:58:34 2014 -0800
@@ -871,7 +871,7 @@
      * paint or color, and composite attributes.
      * For characters in script systems such as Hebrew and Arabic,
      * the glyphs may be draw from right to left, in which case the
-     * coordinate supplied is the the location of the leftmost character
+     * coordinate supplied is the location of the leftmost character
      * on the baseline.
      * @param iterator the iterator whose text is to be drawn
      * @param x,y the coordinates where the iterator's text should be drawn.
@@ -897,7 +897,7 @@
      * paint or color, and composite attributes.
      * For characters in script systems such as Hebrew and Arabic,
      * the glyphs may be draw from right to left, in which case the
-     * coordinate supplied is the the location of the leftmost character
+     * coordinate supplied is the location of the leftmost character
      * on the baseline.
      * @param iterator the iterator whose text is to be drawn
      * @param x,y the coordinates where the iterator's text should be drawn.
--- a/src/java.desktop/share/classes/sun/print/PrintJob2D.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/sun/print/PrintJob2D.java	Tue Dec 23 13:58:34 2014 -0800
@@ -837,7 +837,7 @@
      * The resolution of the page is chosen so that it
      * is similar to the screen resolution.
      * Except (since 1.3) when the application specifies a resolution.
-     * In that case it it scaled accordingly.
+     * In that case it is scaled accordingly.
      */
     public Dimension getPageDimension() {
         double wid, hgt, scale;
--- a/src/java.desktop/share/classes/sun/print/ProxyGraphics2D.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/sun/print/ProxyGraphics2D.java	Tue Dec 23 13:58:34 2014 -0800
@@ -744,7 +744,7 @@
      * paint or color, and composite attributes.
      * For characters in script systems such as Hebrew and Arabic,
      * the glyphs may be draw from right to left, in which case the
-     * coordinate supplied is the the location of the leftmost character
+     * coordinate supplied is the location of the leftmost character
      * on the baseline.
      * @param iterator the iterator whose text is to be drawn
      * @param x,y the coordinates where the iterator's text should be drawn.
@@ -769,7 +769,7 @@
      * paint or color, and composite attributes.
      * For characters in script systems such as Hebrew and Arabic,
      * the glyphs may be draw from right to left, in which case the
-     * coordinate supplied is the the location of the leftmost character
+     * coordinate supplied is the location of the leftmost character
      * on the baseline.
      * @param iterator the iterator whose text is to be drawn
      * @param x,y the coordinates where the iterator's text should be drawn.
--- a/src/java.desktop/share/classes/sun/swing/AccumulativeRunnable.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/sun/swing/AccumulativeRunnable.java	Tue Dec 23 13:58:34 2014 -0800
@@ -64,7 +64,7 @@
  * </pre>
  *
  * <p>
- * Say we want want to implement addDirtyRegion(Rectangle rect)
+ * Say we want to implement addDirtyRegion(Rectangle rect)
  * which sends this region to the
  * handleDirtyRegions(List<Rect> regiouns) on the EDT.
  * addDirtyRegions better be accumulated before handling on the EDT.
--- a/src/java.desktop/share/classes/sun/swing/CachedPainter.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/classes/sun/swing/CachedPainter.java	Tue Dec 23 13:58:34 2014 -0800
@@ -79,7 +79,7 @@
     }
 
     /**
-     * Renders the cached image to the the passed in <code>Graphic</code>.
+     * Renders the cached image to the passed in <code>Graphic</code>.
      * If there is no cached image <code>paintToImage</code> will be invoked.
      * <code>paintImage</code> is invoked to paint the cached image.
      *
--- a/src/java.desktop/share/native/common/font/fontscalerdefs.h	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/native/common/font/fontscalerdefs.h	Tue Dec 23 13:58:34 2014 -0800
@@ -87,7 +87,7 @@
 #define t2kScalarAverage(a, b) (((a) + (b)) / (t2kScalar)(2))
 
   /* managed: 1 means the glyph has a hardware cached
-   * copy, and its freeing is managed by the the usual
+   * copy, and its freeing is managed by the usual
    * 2D disposer code.
    * A value of 0 means its either unaccelerated (and so has no cellInfos)
    * or we want to free this in a different way.
--- a/src/java.desktop/share/native/common/java2d/opengl/OGLBlitLoops.c	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/native/common/java2d/opengl/OGLBlitLoops.c	Tue Dec 23 13:58:34 2014 -0800
@@ -674,6 +674,9 @@
                         viaTexture = JNI_TRUE;
                         break;
 #endif
+                    case OGLC_VENDOR_INTEL:
+                        viaTexture = JNI_TRUE;
+                        break;
                     default:
                         // just use the glDrawPixels() codepath
                         viaTexture = JNI_FALSE;
--- a/src/java.desktop/share/native/common/java2d/opengl/OGLContext.c	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/native/common/java2d/opengl/OGLContext.c	Tue Dec 23 13:58:34 2014 -0800
@@ -919,8 +919,8 @@
             vcap = OGLC_VENDOR_ATI;
         } else if (strncmp(vendor, "NVIDIA", 6) == 0) {
             vcap = OGLC_VENDOR_NVIDIA;
-        } else if (strncmp(vendor, "Sun", 3) == 0) {
-            vcap = OGLC_VENDOR_SUN;
+        } else if (strncmp(vendor, "Intel", 5) == 0) {
+            vcap = OGLC_VENDOR_INTEL;
         }
         // REMIND: new in 7 - check if needs fixing
         *caps |= ((vcap & OGLC_VCAP_MASK) << OGLC_VCAP_OFFSET);
--- a/src/java.desktop/share/native/common/java2d/opengl/OGLContext.h	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/native/common/java2d/opengl/OGLContext.h	Tue Dec 23 13:58:34 2014 -0800
@@ -152,7 +152,7 @@
 #define OGLC_VENDOR_OTHER  0
 #define OGLC_VENDOR_ATI    1
 #define OGLC_VENDOR_NVIDIA 2
-#define OGLC_VENDOR_SUN    3
+#define OGLC_VENDOR_INTEL  3
 
 #define OGLC_VCAP_MASK     0x3
 #define OGLC_VCAP_OFFSET   24
--- a/src/java.desktop/share/native/libawt/awt/image/gif/gifdecoder.c	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/native/libawt/awt/image/gif/gifdecoder.c	Tue Dec 23 13:58:34 2014 -0800
@@ -399,7 +399,7 @@
          * and therefore we have to continue looping through data
          * but skip internal output loop.
          *
-         * In particular this is is possible when
+         * In particular this is possible when
          * width of the frame is set to zero. If
          * global width (i.e. width of the logical screen)
          * is zero too then zero-length scanline buffer
--- a/src/java.desktop/share/native/libawt/java2d/loops/ProcessPath.c	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/native/libawt/java2d/loops/ProcessPath.c	Tue Dec 23 13:58:34 2014 -0800
@@ -1418,7 +1418,7 @@
                                             */
                                );
     } else {
-        /* Clamping starting from first vertex of the the processed segment
+        /* Clamping starting from first vertex of the processed segment
          */
         CLIPCLAMP(xMin, xMax, x1, y1, x2, y2, x3, y3, jfloat, res);
         X1 = (jint)(x1*MDP_MULT);
@@ -1435,7 +1435,7 @@
             return;
         }
 
-        /* Clamping starting from last vertex of the the processed segment
+        /* Clamping starting from last vertex of the processed segment
          */
         CLIPCLAMP(xMin, xMax, x2, y2, x1, y1, x3, y3, jfloat, res);
 
@@ -2121,7 +2121,7 @@
         if (res == CRES_INVISIBLE) return;
         lastClipped = IS_CLIPPED(res);
 
-        /* Clamping starting from first vertex of the the processed segment */
+        /* Clamping starting from first vertex of the processed segment */
         CLIPCLAMP(outXMin, outXMax, x1, y1, x2, y2, x3, y3, jint, res);
 
         /* Clamping only by left boundary */
@@ -2133,7 +2133,7 @@
             return;
         }
 
-        /* Clamping starting from last vertex of the the processed segment */
+        /* Clamping starting from last vertex of the processed segment */
         CLIPCLAMP(outXMin, outXMax, x2, y2, x1, y1, x3, y3, jint, res);
 
         /* Checking if there was a clip by right boundary */
--- a/src/java.desktop/share/native/libfontmanager/freetypeScaler.c	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/native/libfontmanager/freetypeScaler.c	Tue Dec 23 13:58:34 2014 -0800
@@ -183,7 +183,7 @@
                                           bBuffer, offset, numBytes);
             return bread;
         } else {
-            /* We probably hit bug bug 4845371. For reasons that
+            /* We probably hit bug 4845371. For reasons that
              * are currently unclear, the call stacks after the initial
              * createScaler call that read large amounts of data seem to
              * be OK and can create the byte buffer above, but this code
@@ -253,7 +253,7 @@
        We can consider sharing freetype library between different
        scalers. However, Freetype docs suggest to use different libraries
        for different threads. Also, our architecture implies that single
-       FontScaler object is shared for for different sizes/transforms/styles
+       FontScaler object is shared for different sizes/transforms/styles
        of the same font.
 
        On other hand these methods can not be concurrently executed
--- a/src/java.desktop/share/native/libfontmanager/layout/LayoutEngine.h	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/native/libfontmanager/layout/LayoutEngine.h	Tue Dec 23 13:58:34 2014 -0800
@@ -297,7 +297,7 @@
      * This method does character to glyph mapping. The default implementation
      * uses the font instance to do the mapping. It will allocate the glyph and
      * character index arrays if they're not already allocated. If it allocates the
-     * character index array, it will fill it it.
+     * character index array, it will fill it.
      *
      * This method supports right to left
      * text with the ability to store the glyphs in reverse order, and by supporting
@@ -537,4 +537,3 @@
 
 U_NAMESPACE_END
 #endif
-
--- a/src/java.desktop/share/native/liblcms/LCMS.c	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/share/native/liblcms/LCMS.c	Tue Dec 23 13:58:34 2014 -0800
@@ -879,7 +879,7 @@
         cmsCloseProfile(p);
         p =  NULL;
     } else {
-        // do final check whether we can read and handle the the target tag.
+        // do final check whether we can read and handle the target tag.
         const void* pTag = cmsReadTag(pfSanity, sig);
         if (pTag == NULL) {
             // the tag can not be cooked
--- a/src/java.desktop/unix/classes/sun/awt/X11/ListHelper.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/unix/classes/sun/awt/X11/ListHelper.java	Tue Dec 23 13:58:34 2014 -0800
@@ -48,7 +48,7 @@
     private final int BORDER_WIDTH; // Width of border drawn around the list
                                     // of items
     private final int ITEM_MARGIN;  // Margin between the border of the list
-                                    // of items and and item's bg, and between
+                                    // of items and item's bg, and between
                                     // items
     private final int TEXT_SPACE;   // Space between the edge of an item and
                                     // the text
--- a/src/java.desktop/unix/classes/sun/awt/X11/XEmbeddedFramePeer.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/unix/classes/sun/awt/X11/XEmbeddedFramePeer.java	Tue Dec 23 13:58:34 2014 -0800
@@ -251,7 +251,7 @@
                 embedder.registerAccelerator(iter.next(), i++);
             }
         }
-        // Now we know that the the embedder is an XEmbed server, so we
+        // Now we know that the embedder is an XEmbed server, so we
         // reregister the drop target to enable XDnD protocol support via
         // XEmbed.
         updateDropTarget();
--- a/src/java.desktop/unix/classes/sun/awt/X11/XScrollPanePeer.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/unix/classes/sun/awt/X11/XScrollPanePeer.java	Tue Dec 23 13:58:34 2014 -0800
@@ -202,7 +202,7 @@
 
         // Check to see if we hid either of the scrollbars but left
         // ourselves scrolled off of the top and/or right of the pane.
-        // If we did, we need to scroll to the top and/or right of of
+        // If we did, we need to scroll to the top and/or right of
         // the pane to make it visible.
         //
         // Reminder: see if there is a better place to put this code.
--- a/src/java.desktop/unix/classes/sun/awt/X11/XTextFieldPeer.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/unix/classes/sun/awt/X11/XTextFieldPeer.java	Tue Dec 23 13:58:34 2014 -0800
@@ -287,7 +287,7 @@
     }
 
     /**
-     * Deselects the the highlighted text.
+     * Deselects the highlighted text.
      */
     public void deselect() {
         int selStart=xtext.getSelectionStart();
--- a/src/java.desktop/unix/classes/sun/awt/X11/XToolkit.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/unix/classes/sun/awt/X11/XToolkit.java	Tue Dec 23 13:58:34 2014 -0800
@@ -103,11 +103,11 @@
     static TreeMap<Long, XBaseWindow> winMap = new TreeMap<>();
     static HashMap<Object, Object> specialPeerMap = new HashMap<>();
     static HashMap<Long, Collection<XEventDispatcher>> winToDispatcher = new HashMap<>();
-    private static long _display;
     static UIDefaults uidefaults;
-    static X11GraphicsEnvironment localEnv;
-    static X11GraphicsDevice device;
-    static final X11GraphicsConfig config;
+    static final X11GraphicsEnvironment localEnv;
+    private static final X11GraphicsDevice device;
+    private static final X11GraphicsConfig config;
+    private static final long display;
     static int awt_multiclick_time;
     static boolean securityWarningEnabled;
 
@@ -118,15 +118,16 @@
     static {
         initSecurityWarning();
         if (GraphicsEnvironment.isHeadless()) {
+            localEnv = null;
+            device = null;
             config = null;
+            display = 0;
         } else {
             localEnv = (X11GraphicsEnvironment) GraphicsEnvironment
                 .getLocalGraphicsEnvironment();
             device = (X11GraphicsDevice) localEnv.getDefaultScreenDevice();
-            config = (X11GraphicsConfig) (device.getDefaultConfiguration());
-            if (device != null) {
-                _display = device.getDisplay();
-            }
+            config = (X11GraphicsConfig) device.getDefaultConfiguration();
+            display = device.getDisplay();
             setupModifierMap();
             initIDs();
             setBackingStoreType();
@@ -197,10 +198,18 @@
         }
     }
 
-    static Object displayLock = new Object();
-
+    /**
+     * Returns the X11 Display of the default screen device.
+     *
+     * @return X11 Display
+     * @throws AWTError thrown if local GraphicsEnvironment is null, which
+     *         means we are in the headless environment
+     */
     public static long getDisplay() {
-        return _display;
+        if (localEnv == null) {
+            throw new AWTError("Local GraphicsEnvironment must not be null");
+        }
+        return display;
     }
 
     public static long getDefaultRootWindow() {
--- a/src/java.desktop/unix/classes/sun/font/NativeFont.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/unix/classes/sun/font/NativeFont.java	Tue Dec 23 13:58:34 2014 -0800
@@ -369,7 +369,7 @@
          */
 //      sb.replace(hPos[6]+1, hPos[7], "0");
 
-        /* comment out this block to the the 1.4.2 behaviour */
+        /* comment out this block to the 1.4.2 behaviour */
         if (hPos[0] == 0 && hPos[1] == 1) {
             /* null foundry name : some linux font configuration files have
              * symbol font entries like this and its just plain wrong.
--- a/src/java.desktop/unix/native/common/awt/awt_Font.c	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/unix/native/common/awt/awt_Font.c	Tue Dec 23 13:58:34 2014 -0800
@@ -587,6 +587,7 @@
         Disposer_AddRecord(env, font, pDataDisposeMethod, ptr_to_jlong(fdata));
         return fdata;
     } else {
+        JNU_CHECK_EXCEPTION_RETURN(env, NULL);
         Display *display = NULL;
         struct FontData *fdata = NULL;
         char fontSpec[1024];
@@ -722,7 +723,7 @@
     }
 
     /* AWT fonts are always "multifonts" and probably have been in
-     * all post 1.0 releases, so this test test for multi fonts is
+     * all post 1.0 releases, so this test for multi fonts is
      * probably not needed, and the singleton xfont is probably never used.
      */
     if (fdata->charset_num > 0) {
--- a/src/java.desktop/unix/native/common/awt/medialib/mlib_v_ImageCopy_f.c	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/unix/native/common/awt/medialib/mlib_v_ImageCopy_f.c	Tue Dec 23 13:58:34 2014 -0800
@@ -196,7 +196,7 @@
 /***************************************************************/
 /*
  * Either source or destination data are not 8-byte aligned.
- * And size is is in bytes.
+ * And size is in bytes.
  */
 
 void mlib_ImageCopy_na(const mlib_u8 *sa,
--- a/src/java.desktop/unix/native/libawt_xawt/awt/awt_Event.c	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/unix/native/libawt_xawt/awt/awt_Event.c	Tue Dec 23 13:58:34 2014 -0800
@@ -42,7 +42,7 @@
 JNIEXPORT void JNICALL
 Java_java_awt_Event_initIDs(JNIEnv *env, jclass cls)
 {
-    eventIDs.data = (*env)->GetFieldID(env, cls, "data", "J");
-    eventIDs.consumed = (*env)->GetFieldID(env, cls, "consumed", "Z");
-    eventIDs.id = (*env)->GetFieldID(env, cls, "id", "I");
+    CHECK_NULL(eventIDs.data = (*env)->GetFieldID(env, cls, "data", "J"));
+    CHECK_NULL(eventIDs.consumed = (*env)->GetFieldID(env, cls, "consumed", "Z"));
+    CHECK_NULL(eventIDs.id = (*env)->GetFieldID(env, cls, "id", "I"));
 }
--- a/src/java.desktop/unix/native/libawt_xawt/awt/awt_GraphicsEnv.c	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/unix/native/libawt_xawt/awt/awt_GraphicsEnv.c	Tue Dec 23 13:58:34 2014 -0800
@@ -23,6 +23,7 @@
  * questions.
  */
 
+#include "jni_util.h"
 #include "awt_p.h"
 #include "awt.h"
 #include "color.h"
@@ -763,6 +764,7 @@
     XSetIOErrorHandler(xioerror_handler);
     JNU_CallStaticMethodByName(env, NULL, "sun/awt/X11/XErrorHandlerUtil", "init", "(J)V",
         ptr_to_jlong(awt_display));
+    JNU_CHECK_EXCEPTION_RETURN(env, NULL);
 
     /* set awt_numScreens, and whether or not we're using Xinerama */
     xineramaInit();
@@ -789,6 +791,7 @@
             x11Screens[i].root = RootWindow(awt_display, i);
         }
         x11Screens[i].defaultConfig = makeDefaultConfig(env, i);
+        JNU_CHECK_EXCEPTION_RETURN(env, NULL);
     }
 
     return dpy;
@@ -1495,7 +1498,7 @@
     if (aData == NULL) {
         return JNI_FALSE;
     }
-    return (jboolean)aData->isTranslucencySupported;
+    return aData->isTranslucencySupported ? JNI_TRUE : JNI_FALSE;
 #endif
 }
 
@@ -1575,9 +1578,9 @@
     jobject this)
 {
 #ifdef HEADLESS
-    return false;
+    return JNI_FALSE;
 #else
-    return usingXinerama;
+    return usingXinerama ? JNI_TRUE : JNI_FALSE;
 #endif /* HEADLESS */
 }
 
--- a/src/java.desktop/unix/native/libawt_xawt/awt/multiVis.c	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/unix/native/libawt_xawt/awt/multiVis.c	Tue Dec 23 13:58:34 2014 -0800
@@ -1103,7 +1103,7 @@
                                          * of those supports a transparent
                                          * pixel. */
     int32_t             *numVisuals;            /* Number of XVisualInfo struct's
-                                         * pointed to to by pVisuals. */
+                                         * pointed to by pVisuals. */
     XVisualInfo **pVisuals;             /* All of the device's visuals. */
     int32_t             *numOverlayVisuals;     /* Number of OverlayInfo's pointed
                                          * to by pOverlayVisuals.  If this
--- a/src/java.desktop/unix/native/libawt_xawt/awt/sun_awt_X11_GtkFileDialogPeer.c	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/unix/native/libawt_xawt/awt/sun_awt_X11_GtkFileDialogPeer.c	Tue Dec 23 13:58:34 2014 -0800
@@ -72,6 +72,11 @@
 
 static void quit(JNIEnv * env, jobject jpeer, gboolean isSignalHandler)
 {
+    jthrowable pendingException;
+    if (pendingException = (*env)->ExceptionOccurred(env)) {
+         (*env)->ExceptionClear(env);
+    }
+
     GtkWidget * dialog = (GtkWidget*)jlong_to_ptr(
             (*env)->GetLongField(env, jpeer, widgetFieldID));
 
@@ -95,6 +100,10 @@
             fp_gdk_threads_leave();
         }
     }
+
+    if (pendingException) {
+         (*env)->Throw(env, pendingException);
+    }
 }
 
 /*
--- a/src/java.desktop/unix/native/libawt_xawt/awt/wsutils.h	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/unix/native/libawt_xawt/awt/wsutils.h	Tue Dec 23 13:58:34 2014 -0800
@@ -167,7 +167,7 @@
                                          * of those supports a transparent
                                          * pixel. */
     int32_t             *numVisuals,            /* Number of XVisualInfo struct's
-                                         * pointed to to by pVisuals. */
+                                         * pointed to by pVisuals. */
     XVisualInfo **pVisuals,             /* All of the device's visuals. */
     int32_t             *numOverlayVisuals,     /* Number of OverlayInfo's pointed
                                          * to by pOverlayVisuals.  If this
--- a/src/java.desktop/unix/native/libawt_xawt/xawt/XToolkit.c	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/unix/native/libawt_xawt/xawt/XToolkit.c	Tue Dec 23 13:58:34 2014 -0800
@@ -77,7 +77,7 @@
 #ifndef HEADLESS
 
 extern Display* awt_init_Display(JNIEnv *env, jobject this);
-extern void freeNativeStringArray(char **array, long length);
+extern void freeNativeStringArray(char **array, jsize length);
 extern char** stringArrayToNative(JNIEnv *env, jobjectArray array, jsize * ret_length);
 
 struct XFontPeerIDs xFontPeerIDs;
--- a/src/java.desktop/unix/native/libmlib_image/mlib_v_ImageChannelExtract_43.c	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/unix/native/libmlib_image/mlib_v_ImageChannelExtract_43.c	Tue Dec 23 13:58:34 2014 -0800
@@ -252,7 +252,7 @@
 /***************************************************************/
 /*
  * Either source or destination data are not 8-byte aligned.
- * And dsize is is in pixels.
+ * And dsize is in pixels.
  */
 
 void mlib_v_ImageChannelExtract_U8_43R_D1(const mlib_u8 *src,
@@ -1182,7 +1182,7 @@
 /***************************************************************/
 /*
  * Either source or destination data are not 8-byte aligned.
- * And size is is in pixels.
+ * And size is in pixels.
  */
 
 void mlib_v_ImageChannelExtract_S16_43L_D1(const mlib_s16 *src,
--- a/src/java.desktop/windows/classes/sun/awt/shell/Win32ShellFolder2.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/windows/classes/sun/awt/shell/Win32ShellFolder2.java	Tue Dec 23 13:58:34 2014 -0800
@@ -251,7 +251,7 @@
                         // Get a child pidl relative to 'parent'
                         long childPIDL = copyFirstPIDLEntry(pIDL);
                         if (childPIDL != 0) {
-                            // Get a handle to the the rest of the ID list
+                            // Get a handle to the rest of the ID list
                             // i,e, parent's grandchilren and down
                             pIDL = getNextPIDLEntry(pIDL);
                             if (pIDL != 0) {
--- a/src/java.desktop/windows/classes/sun/awt/windows/TranslucentWindowPainter.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/windows/classes/sun/awt/windows/TranslucentWindowPainter.java	Tue Dec 23 13:58:34 2014 -0800
@@ -110,7 +110,7 @@
     protected abstract Image getBackBuffer(boolean clear);
 
     /**
-     * Updates the the window associated with this painter with the contents
+     * Updates the window associated with this painter with the contents
      * of the passed image.
      * The image can not be null, and NPE will be thrown if it is.
      */
--- a/src/java.desktop/windows/classes/sun/awt/windows/WToolkit.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/windows/classes/sun/awt/windows/WToolkit.java	Tue Dec 23 13:58:34 2014 -0800
@@ -183,7 +183,7 @@
     /**
      * Initializes the Toolkit for use in an embedded environment.
      *
-     * @return true if the the initialization succeeded; false if it failed.
+     * @return true if the initialization succeeded; false if it failed.
      *         The function will fail if the Toolkit was already initialized.
      * @since 1.3
      */
--- a/src/java.desktop/windows/native/libawt/java2d/windows/GDIWindowSurfaceData.cpp	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/windows/native/libawt/java2d/windows/GDIWindowSurfaceData.cpp	Tue Dec 23 13:58:34 2014 -0800
@@ -77,7 +77,7 @@
         ZeroMemory(info, sizeof(ThreadGraphicsInfo));
         TlsSetValue(threadInfoIndex, (LPVOID)info);
         J2dTraceLn2(J2D_TRACE_VERBOSE,
-                    "  current batch limit for for thread 0x%x is %d",
+                    "  current batch limit for thread 0x%x is %d",
                      GetCurrentThreadId(), ::GdiGetBatchLimit());
         J2dTraceLn(J2D_TRACE_VERBOSE, "  setting to the limit to 1");
         // Fix for bug 4374079
--- a/src/java.desktop/windows/native/libawt/windows/awt_Debug.h	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/windows/native/libawt/windows/awt_Debug.h	Tue Dec 23 13:58:34 2014 -0800
@@ -40,7 +40,7 @@
 
             static void AssertCallback(const char * expr, const char * file,
                                        int line);
-            /* This method signals that the VM is exiting cleanly, and thus the
+            /* This method signals that the VM is exiting cleanly, and thus
                the debug memory manager should dump a leaks report when the
                VM has finished exiting. This method should not be called for
                termination exits (such as <CTRL>-C) */
--- a/src/java.desktop/windows/native/libawt/windows/awt_Frame.h	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/windows/native/libawt/windows/awt_Frame.h	Tue Dec 23 13:58:34 2014 -0800
@@ -215,7 +215,7 @@
      * Hashtable<Thread, BlockedThreadStruct> - a table that contains all the
      * information about non-toolkit threads with modal blocked embedded
      * frames. This information includes: number of blocked embedded frames
-     * created on the the thread, and mouse and modal hooks installed for
+     * created on the thread, and mouse and modal hooks installed for
      * that thread. For every thread each hook is installed only once
      */
     static Hashtable sm_BlockedThreads;
--- a/src/java.desktop/windows/native/libawt/windows/awt_Palette.cpp	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/windows/native/libawt/windows/awt_Palette.cpp	Tue Dec 23 13:58:34 2014 -0800
@@ -113,7 +113,7 @@
 }
 
 /**
- * Retrieves system palette entries. Includes a workaround for for some
+ * Retrieves system palette entries. Includes a workaround for some
  * video drivers which may not support the GSPE call but may return
  * valid values from this procedure.
  */
--- a/src/java.desktop/windows/native/libawt/windows/awt_Toolkit.h	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/windows/native/libawt/windows/awt_Toolkit.h	Tue Dec 23 13:58:34 2014 -0800
@@ -553,7 +553,7 @@
         bool Terminate(bool wrongThread);
         bool InvokeAndTerminate(void(_cdecl *fn)(void *), void *param);
 
-        // waits for the the thread completion;
+        // waits for the thread completion;
         // use the method after Terminate() only if Terminate() returned true
         INLINE void Wait4Finish() {
             ::WaitForSingleObject(hFinished, INFINITE);
--- a/src/java.desktop/windows/native/libjsound/PLATFORM_API_WinOS_MidiIn.cpp	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.desktop/windows/native/libjsound/PLATFORM_API_WinOS_MidiIn.cpp	Tue Dec 23 13:58:34 2014 -0800
@@ -426,7 +426,7 @@
 
     err = midiInStart((HMIDIIN) handle->deviceHandle);
         /* $$mp 200308-11: This method is already called in ...open(). It is
-           unclear why is is called again. The specification says that
+           unclear why it is called again. The specification says that
            MidiDevice.getMicrosecondPosition() returns the time since the
            device was opened (the spec doesn't know about start/stop).
            So I guess this call is obsolete. */
--- a/src/java.instrument/share/native/libinstrument/InvocationAdapter.c	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.instrument/share/native/libinstrument/InvocationAdapter.c	Tue Dec 23 13:58:34 2014 -0800
@@ -564,7 +564,7 @@
 /*
  * Evaluates all escapes in s.  Assumes that escapes are well-formed
  * syntactically, i.e., of the form %XX.
- * If the path does not require decoding the the original path is
+ * If the path does not require decoding the original path is
  * returned. Otherwise the decoded path (heap allocated) is returned,
  * along with the length of the decoded path. Note that the return
  * string will not be null terminated after decoding.
--- a/src/java.management/share/classes/com/sun/jmx/mbeanserver/JmxMBeanServer.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.management/share/classes/com/sun/jmx/mbeanserver/JmxMBeanServer.java	Tue Dec 23 13:58:34 2014 -0800
@@ -576,7 +576,7 @@
      * the selected MBeans.
      *
      * @param name The object name pattern identifying the MBeans to
-     *      be retrieved. If null or or no domain and key properties
+     *      be retrieved. If null or no domain and key properties
      *      are specified, all the MBeans registered will be retrieved.
      * @param query The query expression to be applied for selecting
      *      MBeans. If null no query expression will be applied for
@@ -598,7 +598,7 @@
      * the names of a set of MBeans specified by pattern matching on the
      * <CODE>ObjectName</CODE> and/or a Query expression, a specific
      * MBean name (equivalent to testing whether an MBean is registered).
-     * When the object name is null or or no domain and key properties are
+     * When the object name is null or no domain and key properties are
      * specified, all objects are selected (and filtered if a query is
      * specified). It returns the set of ObjectNames for the MBeans
      * selected.
--- a/src/java.management/share/classes/com/sun/jmx/remote/internal/ClientNotifForwarder.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.management/share/classes/com/sun/jmx/remote/internal/ClientNotifForwarder.java	Tue Dec 23 13:58:34 2014 -0800
@@ -140,7 +140,7 @@
     }
 
     /**
-     * Called to to fetch notifications from a server.
+     * Called to fetch notifications from a server.
      */
     abstract protected NotificationResult fetchNotifs(long clientSequenceNumber,
                                                       int maxNotifications,
--- a/src/java.management/share/classes/com/sun/management/GarbageCollectionNotificationInfo.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.management/share/classes/com/sun/management/GarbageCollectionNotificationInfo.java	Tue Dec 23 13:58:34 2014 -0800
@@ -42,7 +42,7 @@
  * The notification emitted will contain the garbage collection notification
  * information about the status of the memory:
  * <u1>
- *   <li>The name of the garbage collector used perform the collection.</li>
+ *   <li>The name of the garbage collector used to perform the collection.</li>
  *   <li>The action performed by the garbage collector.</li>
  *   <li>The cause of the garbage collection action.</li>
  *   <li>A {@link GcInfo} object containing some statistics about the GC cycle
@@ -109,7 +109,7 @@
      *
      * @param gcName The name of the garbage collector used to perform the collection
      * @param gcAction The name of the action performed by the garbage collector
-     * @param gcCause The cause the garbage collection action
+     * @param gcCause The cause of the garbage collection action
      * @param gcInfo  a GcInfo object providing statistics about the GC cycle
      */
     public GarbageCollectionNotificationInfo(String gcName,
@@ -152,18 +152,18 @@
     }
 
     /**
-     * Returns the action of the performed by the garbage collector
+     * Returns the action performed by the garbage collector
      *
-     * @return the the action of the performed by the garbage collector
+     * @return the action performed by the garbage collector
      */
     public String getGcAction() {
         return gcAction;
     }
 
     /**
-     * Returns the cause  the garbage collection
+     * Returns the cause of the garbage collection
      *
-     * @return the the cause  the garbage collection
+     * @return the cause of the garbage collection
      */
     public String getGcCause() {
         return gcCause;
--- a/src/java.management/share/classes/javax/management/openmbean/ArrayType.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.management/share/classes/javax/management/openmbean/ArrayType.java	Tue Dec 23 13:58:34 2014 -0800
@@ -570,7 +570,7 @@
         // In case this ArrayType instance describes an array of classes implementing the TabularData or CompositeData interface,
         // we first check for the assignability of obj to such an array of TabularData or CompositeData,
         // which ensures that:
-        //  . obj is of the the same dimension as this ArrayType instance,
+        //  . obj is of the same dimension as this ArrayType instance,
         //  . it is declared as an array of elements which are either all TabularData or all CompositeData.
         //
         // If the assignment check is positive,
--- a/src/java.management/share/classes/javax/management/openmbean/SimpleType.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.management/share/classes/javax/management/openmbean/SimpleType.java	Tue Dec 23 13:58:34 2014 -0800
@@ -244,7 +244,7 @@
 
     /**
      * Returns the hash code value for this <code>SimpleType</code> instance.
-     * The hash code of a <code>SimpleType</code> instance is the the hash code of
+     * The hash code of a <code>SimpleType</code> instance is the hash code of
      * the string value returned by the {@link OpenType#getClassName() getClassName} method.
      * <p>
      * As <code>SimpleType</code> instances are immutable, the hash code for this instance is calculated once,
--- a/src/java.management/share/classes/javax/management/openmbean/TabularDataSupport.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.management/share/classes/javax/management/openmbean/TabularDataSupport.java	Tue Dec 23 13:58:34 2014 -0800
@@ -212,7 +212,7 @@
     /**
      * Returns <tt>true</tt> if and only if this <tt>TabularData</tt> instance contains a <tt>CompositeData</tt> value
      * (ie a row) whose index is the specified <var>key</var>. If <var>key</var> cannot be cast to a one dimension array
-     * of Object instances, this method simply returns <tt>false</tt>; otherwise it returns the the result of the call to
+     * of Object instances, this method simply returns <tt>false</tt>; otherwise it returns the result of the call to
      * <tt>this.containsKey((Object[]) key)</tt>.
      *
      * @param  key  the index value whose presence in this <tt>TabularData</tt> instance is to be tested.
--- a/src/java.naming/share/classes/com/sun/jndi/ldap/EventSupport.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.naming/share/classes/com/sun/jndi/ldap/EventSupport.java	Tue Dec 23 13:58:34 2014 -0800
@@ -260,7 +260,7 @@
         if (unsolicited == null || unsolicited.size() == 0) {
             // This shouldn't really happen, but might in case
             // there is a timing problem that removes a listener
-            // before a fired event event reaches here.
+            // before a fired event reaches here.
             return;
         }
 
--- a/src/java.naming/share/classes/com/sun/jndi/ldap/LdapCtx.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.naming/share/classes/com/sun/jndi/ldap/LdapCtx.java	Tue Dec 23 13:58:34 2014 -0800
@@ -989,7 +989,7 @@
     }
 
     /*
-     * Append the the second Vector onto the first Vector
+     * Append the second Vector onto the first Vector
      * (v2 must be non-null)
      */
     private static <T> Vector<T> appendVector(Vector<T> v1, Vector<T> v2) {
--- a/src/java.naming/share/classes/com/sun/jndi/ldap/LdapReferralException.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.naming/share/classes/com/sun/jndi/ldap/LdapReferralException.java	Tue Dec 23 13:58:34 2014 -0800
@@ -59,7 +59,7 @@
   * objects.
   * <p>
   * If an exception was recorded while processing a chain of
-  * <tt>LdapReferralException</tt> objects then is is throw once
+  * <tt>LdapReferralException</tt> objects then it is throw once
   * processing has completed.
   *
   * @author Vincent Ryan
--- a/src/java.naming/share/classes/com/sun/jndi/toolkit/ctx/AtomicContext.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.naming/share/classes/com/sun/jndi/toolkit/ctx/AtomicContext.java	Tue Dec 23 13:58:34 2014 -0800
@@ -533,7 +533,7 @@
       * This function is used when implementing a naming system that
       * supports junctions.  For example, when the a_list_nns(newobj)
       * method is invoked, that means the caller is attempting to list the
-      * the nns context of of this context.  For a context that supports
+      * the nns context of this context.  For a context that supports
       * junctions, it by default does not have any nns.  Consequently,
       * a NameNotFoundException is thrown.
       */
--- a/src/java.naming/share/classes/javax/naming/ldap/Rdn.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.naming/share/classes/javax/naming/ldap/Rdn.java	Tue Dec 23 13:58:34 2014 -0800
@@ -505,7 +505,7 @@
      *
      * @param val The non-null object to be escaped.
      * @return Escaped string value.
-     * @throws ClassCastException if val is is not a String or byte array.
+     * @throws ClassCastException if val is not a String or byte array.
      */
     public static String escapeValue(Object val) {
         return (val instanceof byte[])
--- a/src/java.prefs/unix/classes/java/util/prefs/FileSystemPreferences.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.prefs/unix/classes/java/util/prefs/FileSystemPreferences.java	Tue Dec 23 13:58:34 2014 -0800
@@ -981,7 +981,7 @@
     private static int MAX_ATTEMPTS = 5;
 
     /**
-     * Release the the appropriate file lock (user or system).
+     * Release the appropriate file lock (user or system).
      * @throws SecurityException if file access denied.
      */
     private void unlockFile() {
--- a/src/java.rmi/share/classes/java/rmi/registry/LocateRegistry.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.rmi/share/classes/java/rmi/registry/LocateRegistry.java	Tue Dec 23 13:58:34 2014 -0800
@@ -62,7 +62,7 @@
     private LocateRegistry() {}
 
     /**
-     * Returns a reference to the the remote object <code>Registry</code> for
+     * Returns a reference to the remote object <code>Registry</code> for
      * the local host on the default registry port of 1099.
      *
      * @return reference (a stub) to the remote object registry
@@ -76,7 +76,7 @@
     }
 
     /**
-     * Returns a reference to the the remote object <code>Registry</code> for
+     * Returns a reference to the remote object <code>Registry</code> for
      * the local host on the specified <code>port</code>.
      *
      * @param port port on which the registry accepts requests
--- a/src/java.rmi/share/classes/sun/rmi/registry/RegistryImpl.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.rmi/share/classes/sun/rmi/registry/RegistryImpl.java	Tue Dec 23 13:58:34 2014 -0800
@@ -336,13 +336,12 @@
      * Main program to start a registry. <br>
      * The port number can be specified on the command line.
      */
-    @SuppressWarnings("deprecation")
     public static void main(String args[])
     {
         // Create and install the security manager if one is not installed
         // already.
         if (System.getSecurityManager() == null) {
-            System.setSecurityManager(new RMISecurityManager());
+            System.setSecurityManager(new SecurityManager());
         }
 
         try {
--- a/src/java.rmi/share/classes/sun/rmi/server/MarshalOutputStream.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.rmi/share/classes/sun/rmi/server/MarshalOutputStream.java	Tue Dec 23 13:58:34 2014 -0800
@@ -88,7 +88,7 @@
     }
 
     /**
-     * Serializes a location from which to load the the specified class.
+     * Serializes a location from which to load the specified class.
      */
     protected void annotateClass(Class<?> cl) throws IOException {
         writeLocation(java.rmi.server.RMIClassLoader.getClassAnnotation(cl));
--- a/src/java.rmi/share/classes/sun/rmi/transport/tcp/ConnectionMultiplexer.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.rmi/share/classes/sun/rmi/transport/tcp/ConnectionMultiplexer.java	Tue Dec 23 13:58:34 2014 -0800
@@ -35,7 +35,7 @@
  * ConnectionMultiplexer manages the transparent multiplexing of
  * multiple virtual connections from one endpoint to another through
  * one given real connection to that endpoint.  The input and output
- * streams for the the underlying real connection must be supplied.
+ * streams for the underlying real connection must be supplied.
  * A callback object is also supplied to be informed of new virtual
  * connections opened by the remote endpoint.  After creation, the
  * run() method must be called in a thread created for demultiplexing
--- a/src/java.scripting/share/classes/javax/script/ScriptContext.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.scripting/share/classes/javax/script/ScriptContext.java	Tue Dec 23 13:58:34 2014 -0800
@@ -130,7 +130,7 @@
      * is determined by the numeric value of the scope parameter (lowest
      * scope values first.)
      *
-     * @param name The name of the the attribute to retrieve.
+     * @param name The name of the attribute to retrieve.
      * @return The value of the attribute in the lowest scope for
      * which an attribute with the given name is defined.  Returns
      * null if no attribute with the name exists in any scope.
--- a/src/java.scripting/share/classes/javax/script/ScriptEngineManager.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.scripting/share/classes/javax/script/ScriptEngineManager.java	Tue Dec 23 13:58:34 2014 -0800
@@ -407,7 +407,7 @@
     /** Map of script file extension to script engine factory. */
     private HashMap<String, ScriptEngineFactory> extensionAssociations;
 
-    /** Map of script script MIME type to script engine factory. */
+    /** Map of script MIME type to script engine factory. */
     private HashMap<String, ScriptEngineFactory> mimeTypeAssociations;
 
     /** Global bindings associated with script engines created by this manager. */
--- a/src/java.scripting/share/classes/javax/script/SimpleScriptContext.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.scripting/share/classes/javax/script/SimpleScriptContext.java	Tue Dec 23 13:58:34 2014 -0800
@@ -132,7 +132,7 @@
      * is determined by the numeric value of the scope parameter (lowest
      * scope values first.)
      *
-     * @param name The name of the the attribute to retrieve.
+     * @param name The name of the attribute to retrieve.
      * @return The value of the attribute in the lowest scope for
      * which an attribute with the given name is defined.  Returns
      * null if no attribute with the name exists in any scope.
--- a/src/java.security.jgss/share/classes/javax/security/auth/kerberos/KerberosTicket.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.security.jgss/share/classes/javax/security/auth/kerberos/KerberosTicket.java	Tue Dec 23 13:58:34 2014 -0800
@@ -535,7 +535,7 @@
      * allowable renew time has passed. Any other error returned by the
      * KDC will also cause this method to fail.
      *
-     * Note: This method is not synchronized with the the accessor
+     * Note: This method is not synchronized with the accessor
      * methods of this object. Hence callers need to be aware of multiple
      * threads that might access this and try to renew it at the same
      * time.
--- a/src/java.security.jgss/share/classes/org/ietf/jgss/GSSContext.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.security.jgss/share/classes/org/ietf/jgss/GSSContext.java	Tue Dec 23 13:58:34 2014 -0800
@@ -558,7 +558,7 @@
      * @param msgProp instance of MessageProp that is used by the
      * application to set the desired QOP and privacy state. Set the
      * desired QOP to 0 to request the default QOP. Upon return from this
-     * method, this object will contain the the actual privacy state that
+     * method, this object will contain the actual privacy state that
      * was applied to the message by the underlying mechanism.
      * @return a byte[] containing the token to be sent to the peer.
      *
@@ -605,7 +605,7 @@
      * @param msgProp instance of MessageProp that is used by the
      * application to set the desired QOP and privacy state. Set the
      * desired QOP to 0 to request the default QOP. Upon return from this
-     * method, this object will contain the the actual privacy state that
+     * method, this object will contain the actual privacy state that
      * was applied to the message by the underlying mechanism.
      *
      * @throws GSSException containing the following
--- a/src/java.security.jgss/share/classes/sun/security/jgss/TokenTracker.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.security.jgss/share/classes/sun/security/jgss/TokenTracker.java	Tue Dec 23 13:58:34 2014 -0800
@@ -368,7 +368,7 @@
 
         /**
          * Returns -1 if this interval represented by this entry precedes
-         * the number, 0 if the the number is contained in the interval,
+         * the number, 0 if the number is contained in the interval,
          * and -1 if the interval occurs after the number.
          */
         final int compareTo(int number) {
--- a/src/java.security.jgss/share/classes/sun/security/krb5/KrbApReq.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.security.jgss/share/classes/sun/security/krb5/KrbApReq.java	Tue Dec 23 13:58:34 2014 -0800
@@ -102,7 +102,7 @@
      * @param useSubkey Whether the subkey is to be used to protect this
      *        specific application session. If this is not set then the
      *        session key from the ticket will be used.
-     * @param checksum checksum of the the application data that accompanies
+     * @param checksum checksum of the application data that accompanies
      *        the KRB_AP_REQ.
      * @throws KrbException for any Kerberos protocol specific error
      * @throws IOException for any IO related errors
--- a/src/java.security.jgss/share/classes/sun/security/krb5/internal/ccache/FileCredentialsCache.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.security.jgss/share/classes/sun/security/krb5/internal/ccache/FileCredentialsCache.java	Tue Dec 23 13:58:34 2014 -0800
@@ -390,7 +390,7 @@
          * /tmp/krb5cc_uid ; for all other platforms  we use
          * {user_home}/krb5cc_{user_name}
          * Please note that for Windows we will use LSA to get
-         * the TGT from the the default cache even before we come here;
+         * the TGT from the default cache even before we come here;
          * however when we create cache we will create a cache under
          * {user_home}/krb5cc_{user_name} for non-Unix platforms including
          * Windows.
--- a/src/java.security.sasl/share/classes/com/sun/security/sasl/PlainClient.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.security.sasl/share/classes/com/sun/security/sasl/PlainClient.java	Tue Dec 23 13:58:34 2014 -0800
@@ -49,7 +49,7 @@
      *  for which authorization is being granted; if null, same as
      *  authenticationID
      * @param authenticationID A non-null string representing the principal
-     * being authenticated. pw is associated with with this principal.
+     * being authenticated. pw is associated with this principal.
      * @param pw A non-null byte[] containing the password.
      */
     PlainClient(String authorizationID, String authenticationID, byte[] pw)
--- a/src/java.sql.rowset/share/classes/com/sun/rowset/CachedRowSetImpl.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.sql.rowset/share/classes/com/sun/rowset/CachedRowSetImpl.java	Tue Dec 23 13:58:34 2014 -0800
@@ -431,7 +431,7 @@
      * provider to assist in determining the choice of the synchronizaton
      * provider such as:
      * <ul>
-     * <li><code>ROWSET_SYNC_PROVIDER</code> - the property specifying the the
+     * <li><code>ROWSET_SYNC_PROVIDER</code> - the property specifying the
      * <code>SyncProvider</code> class name to be instantiated by the
      * <code>SyncFacttory</code>
      * <li><code>ROWSET_SYNC_VENDOR</code> - the property specifying the software
@@ -3727,7 +3727,7 @@
 
         /*
          * Each call to internalPrevious may move the cursor
-         * over multiple rows, the absolute position moves one one row
+         * over multiple rows, the absolute position moves one row
          */
         if (ret == true)
             --absolutePos;
--- a/src/java.sql.rowset/share/classes/com/sun/rowset/JdbcRowSetImpl.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.sql.rowset/share/classes/com/sun/rowset/JdbcRowSetImpl.java	Tue Dec 23 13:58:34 2014 -0800
@@ -3993,7 +3993,7 @@
 
     /**
      * Retrieves the <code>DatabaseMetaData</code> associated with
-     * the connection handle associated this this
+     * the connection handle associated with this
      * <code>JdbcRowSet</code> object.
      *
      * @return the <code>DatabaseMetadata</code> associated
@@ -4007,7 +4007,7 @@
 
     /**
      * Retrieves the <code>ParameterMetaData</code> associated with
-     * the connection handle associated this this
+     * the connection handle associated with this
      * <code>JdbcRowSet</code> object.
      *
      * @return the <code>ParameterMetadata</code> associated
@@ -4325,7 +4325,7 @@
      * the connection is created using a JDBC technology-enabled driver
      * ("JDBC driver") and the <code>DriverManager</code>.
      * The correct JDBC URL for the specific driver to be used can be found
-     * in the driver documentation.  Although there are guidelines for for how
+     * in the driver documentation.  Although there are guidelines for how
      * a JDBC URL is formed,
      * a driver vendor can specify any <code>String</code> object except
      * one with a length of <code>0</code> (an empty string).
--- a/src/java.sql.rowset/share/classes/com/sun/rowset/JoinRowSetImpl.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.sql.rowset/share/classes/com/sun/rowset/JoinRowSetImpl.java	Tue Dec 23 13:58:34 2014 -0800
@@ -1169,7 +1169,7 @@
      * @return the column value; if the value is SQL <code>NULL</code>, the
      *         result is <code>null</code>
      * @throws SQLException if the given column index is out of bounds,
-     *            the cursor is not on a valid row, or the the value to be
+     *            the cursor is not on a valid row, or the value to be
      *            retrieved is not binary
      */
     public byte[] getBytes(int columnIndex) throws SQLException {
@@ -4129,7 +4129,7 @@
     }
 
     /**
-     * Creates an an output stream of the internal state and contents of a
+     * Creates an output stream of the internal state and contents of a
      * <code>WebRowSet</code> for XML proceessing
      *
      * @throws SQLException if a datasource access occurs
--- a/src/java.sql.rowset/share/classes/com/sun/rowset/WebRowSetImpl.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.sql.rowset/share/classes/com/sun/rowset/WebRowSetImpl.java	Tue Dec 23 13:58:34 2014 -0800
@@ -93,7 +93,7 @@
     }
 
     /**
-     * Constructs a new <code>WebRowSet</code> object initialized with the the
+     * Constructs a new <code>WebRowSet</code> object initialized with the
      * synchronization SPI provider properties as specified in the <code>Hashtable</code>. If
      * this hashtable is empty or is <code>null</code> the default constructor is invoked.
      *
@@ -234,7 +234,7 @@
     /**
      * Writes this <code>WebRowSet</code> object to the given <code> OutputStream</code>
      * object in XML format.
-     * Creates an an output stream of the internal state and contents of a
+     * Creates an output stream of the internal state and contents of a
      * <code>WebRowSet</code> for XML proceessing
      *
      * @throws SQLException if a datasource access error occurs
--- a/src/java.sql.rowset/share/classes/com/sun/rowset/internal/CachedRowSetWriter.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.sql.rowset/share/classes/com/sun/rowset/internal/CachedRowSetWriter.java	Tue Dec 23 13:58:34 2014 -0800
@@ -843,7 +843,7 @@
                for (String pkName : primaryKeys) {
                    if (!isPKNameValid(pkName, rsmd)) {
 
-                       /* We came here as one of the the primary keys
+                       /* We came here as one of the primary keys
                         * of the table is not present in the cached
                         * rowset object, it should be an autoincrement column
                         * and not included while creating CachedRowSet
--- a/src/java.sql.rowset/share/classes/com/sun/rowset/internal/SyncResolverImpl.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.sql.rowset/share/classes/com/sun/rowset/internal/SyncResolverImpl.java	Tue Dec 23 13:58:34 2014 -0800
@@ -288,7 +288,7 @@
     }
 
     /**
-     * This passes a CachedRowSet as a row the the CachedRowSetWriter
+     * This passes a CachedRowSet as a row to the CachedRowSetWriter
      * after the values have been resolved, back to the datasource.
      *
      * @param row a <code>CachedRowSet</code> object which will hold the
--- a/src/java.sql.rowset/share/classes/com/sun/rowset/providers/package.html	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.sql.rowset/share/classes/com/sun/rowset/providers/package.html	Tue Dec 23 13:58:34 2014 -0800
@@ -137,7 +137,7 @@
  inserted or deleted. Any method that causes a change in the rowset's values
  or cursor position also notifies any object that has been registered as
 a  listener with the rowset. So, for example, a table that displays the rowset's
- data in an applet can can be notified of changes and make updates as they
+ data in an applet can be notified of changes and make updates as they
  occur.<br>
     <br>
   The changes made to a rowset can be propagated back to the original data
--- a/src/java.sql/share/classes/java/sql/DriverManager.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.sql/share/classes/java/sql/DriverManager.java	Tue Dec 23 13:58:34 2014 -0800
@@ -29,7 +29,6 @@
 import java.util.ServiceLoader;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
-import java.util.PropertyPermission;
 import java.util.concurrent.CopyOnWriteArrayList;
 import sun.reflect.CallerSensitive;
 import sun.reflect.Reflection;
@@ -89,6 +88,8 @@
     private static volatile java.io.PrintStream logStream = null;
     // Used in println() to synchronize logWriter
     private final static Object logSync = new Object();
+    // Used in ensureDriversInitialized() to synchronize driversInitialized
+    private final static Object lockForInitDrivers = new Object();
     private static volatile boolean driversInitialized;
     private static final String JDBC_DRIVERS_PROPERTY = "jdbc.drivers";
 
@@ -280,11 +281,13 @@
 
         println("DriverManager.getDriver(\"" + url + "\")");
 
+        ensureDriversInitialized();
+
         Class<?> callerClass = Reflection.getCallerClass();
 
         // Walk through the loaded registeredDrivers attempting to locate someone
         // who understands the given URL.
-        for (DriverInfo aDriver : getRegisteredDrivers()) {
+        for (DriverInfo aDriver : registeredDrivers) {
             // If the caller does not have permission to load the driver then
             // skip it.
             if (isDriverAllowed(aDriver.driver, callerClass)) {
@@ -384,8 +387,7 @@
      * @see SecurityManager#checkPermission
      */
     @CallerSensitive
-    public static synchronized void deregisterDriver(Driver driver)
-        throws SQLException {
+    public static void deregisterDriver(Driver driver) throws SQLException {
         if (driver == null) {
             return;
         }
@@ -398,22 +400,24 @@
         println("DriverManager.deregisterDriver: " + driver);
 
         DriverInfo aDriver = new DriverInfo(driver, null);
-        if (registeredDrivers.contains(aDriver)) {
-            if (isDriverAllowed(driver, Reflection.getCallerClass())) {
-                DriverInfo di = registeredDrivers.get(registeredDrivers.indexOf(aDriver));
-                 // If a DriverAction was specified, Call it to notify the
-                 // driver that it has been deregistered
-                 if (di.action() != null) {
-                     di.action().deregister();
-                 }
-                 registeredDrivers.remove(aDriver);
+        synchronized (lockForInitDrivers) {
+            if (registeredDrivers.contains(aDriver)) {
+                if (isDriverAllowed(driver, Reflection.getCallerClass())) {
+                    DriverInfo di = registeredDrivers.get(registeredDrivers.indexOf(aDriver));
+                     // If a DriverAction was specified, Call it to notify the
+                     // driver that it has been deregistered
+                     if (di.action() != null) {
+                         di.action().deregister();
+                     }
+                     registeredDrivers.remove(aDriver);
+                } else {
+                    // If the caller does not have permission to load the driver then
+                    // throw a SecurityException.
+                    throw new SecurityException();
+                }
             } else {
-                // If the caller does not have permission to load the driver then
-                // throw a SecurityException.
-                throw new SecurityException();
+                println("    couldn't find driver to unload");
             }
-        } else {
-            println("    couldn't find driver to unload");
         }
     }
 
@@ -430,10 +434,12 @@
     public static java.util.Enumeration<Driver> getDrivers() {
         java.util.Vector<Driver> result = new java.util.Vector<>();
 
+        ensureDriversInitialized();
+
         Class<?> callerClass = Reflection.getCallerClass();
 
         // Walk through the loaded registeredDrivers.
-        for (DriverInfo aDriver : getRegisteredDrivers()) {
+        for (DriverInfo aDriver : registeredDrivers) {
             // If the caller does not have permission to load the driver then
             // skip it.
             if (isDriverAllowed(aDriver.driver, callerClass)) {
@@ -558,91 +564,81 @@
     }
 
     /*
-     * Return the registered java.sql.Drivers and call loadInitialDrivers
-     * if needed
+     * Load the initial JDBC drivers by checking the System property
+     * jdbc.drivers and then use the {@code ServiceLoader} mechanism
      */
-    private static CopyOnWriteArrayList<DriverInfo> getRegisteredDrivers() {
-        // Check to see if we need to load the initial drivers
-        if (!driversInitialized) {
-            loadInitialDrivers();
-        }
-        return registeredDrivers;
-
-    }
-
-    /*
-     * Load the initial JDBC drivers by checking the System property
-     * jdbc.properties and then use the {@code ServiceLoader} mechanism
-     */
-    private synchronized static void loadInitialDrivers() {
-        String drivers;
-
+    private static void ensureDriversInitialized() {
         if (driversInitialized) {
             return;
         }
 
-        try {
-            drivers = AccessController.doPrivileged(new PrivilegedAction<String>() {
-                public String run() {
-                    return System.getProperty(JDBC_DRIVERS_PROPERTY);
+        synchronized (lockForInitDrivers) {
+            if (driversInitialized) {
+                return;
+            }
+            String drivers;
+            try {
+                drivers = AccessController.doPrivileged(new PrivilegedAction<String>() {
+                    public String run() {
+                        return System.getProperty(JDBC_DRIVERS_PROPERTY);
+                    }
+                });
+            } catch (Exception ex) {
+                drivers = null;
+            }
+            // If the driver is packaged as a Service Provider, load it.
+            // Get all the drivers through the classloader
+            // exposed as a java.sql.Driver.class service.
+            // ServiceLoader.load() replaces the sun.misc.Providers()
+
+            AccessController.doPrivileged(new PrivilegedAction<Void>() {
+                public Void run() {
+
+                    ServiceLoader<Driver> loadedDrivers = ServiceLoader.load(Driver.class);
+                    Iterator<Driver> driversIterator = loadedDrivers.iterator();
+
+                    /* Load these drivers, so that they can be instantiated.
+                     * It may be the case that the driver class may not be there
+                     * i.e. there may be a packaged driver with the service class
+                     * as implementation of java.sql.Driver but the actual class
+                     * may be missing. In that case a java.util.ServiceConfigurationError
+                     * will be thrown at runtime by the VM trying to locate
+                     * and load the service.
+                     *
+                     * Adding a try catch block to catch those runtime errors
+                     * if driver not available in classpath but it's
+                     * packaged as service and that service is there in classpath.
+                     */
+                    try {
+                        while (driversIterator.hasNext()) {
+                            driversIterator.next();
+                        }
+                    } catch (Throwable t) {
+                        // Do nothing
+                    }
+                    return null;
                 }
             });
-        } catch (Exception ex) {
-            drivers = null;
+
+            println("DriverManager.initialize: jdbc.drivers = " + drivers);
+
+            if (drivers != null && !drivers.equals("")) {
+                String[] driversList = drivers.split(":");
+                println("number of Drivers:" + driversList.length);
+                for (String aDriver : driversList) {
+                    try {
+                        println("DriverManager.Initialize: loading " + aDriver);
+                        Class.forName(aDriver, true,
+                                ClassLoader.getSystemClassLoader());
+                    } catch (Exception ex) {
+                        println("DriverManager.Initialize: load failed: " + ex);
+                    }
+                }
+            }
+
+            driversInitialized = true;
+            println("JDBC DriverManager initialized");
         }
-        // If the driver is packaged as a Service Provider, load it.
-        // Get all the drivers through the classloader
-        // exposed as a java.sql.Driver.class service.
-        // ServiceLoader.load() replaces the sun.misc.Providers()
-
-        AccessController.doPrivileged(new PrivilegedAction<Void>() {
-            public Void run() {
-
-                ServiceLoader<Driver> loadedDrivers = ServiceLoader.load(Driver.class);
-                Iterator<Driver> driversIterator = loadedDrivers.iterator();
-
-                /* Load these drivers, so that they can be instantiated.
-                 * It may be the case that the driver class may not be there
-                 * i.e. there may be a packaged driver with the service class
-                 * as implementation of java.sql.Driver but the actual class
-                 * may be missing. In that case a java.util.ServiceConfigurationError
-                 * will be thrown at runtime by the VM trying to locate
-                 * and load the service.
-                 *
-                 * Adding a try catch block to catch those runtime errors
-                 * if driver not available in classpath but it's
-                 * packaged as service and that service is there in classpath.
-                 */
-                try{
-                    while(driversIterator.hasNext()) {
-                        driversIterator.next();
-                    }
-                } catch(Throwable t) {
-                // Do nothing
-                }
-                return null;
-            }
-        });
-
-        println("DriverManager.initialize: jdbc.drivers = " + drivers);
-
-        if (drivers == null || drivers.equals("")) {
-            return;
-        }
-        String[] driversList = drivers.split(":");
-        println("number of Drivers:" + driversList.length);
-        for (String aDriver : driversList) {
-            try {
-                println("DriverManager.Initialize: loading " + aDriver);
-                Class.forName(aDriver, true,
-                        ClassLoader.getSystemClassLoader());
-            } catch (Exception ex) {
-                println("DriverManager.Initialize: load failed: " + ex);
-            }
-        }
-
-        driversInitialized = true;
-        println("JDBC DriverManager initialized");
     }
 
 
@@ -666,11 +662,13 @@
 
         println("DriverManager.getConnection(\"" + url + "\")");
 
+        ensureDriversInitialized();
+
         // Walk through the loaded registeredDrivers attempting to make a connection.
         // Remember the first exception that gets raised so we can reraise it.
         SQLException reason = null;
 
-        for (DriverInfo aDriver : getRegisteredDrivers()) {
+        for (DriverInfo aDriver : registeredDrivers) {
             // If the caller does not have permission to load the driver then
             // skip it.
             if (isDriverAllowed(aDriver.driver, callerCL)) {
--- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/encryption/EncryptionMethod.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/encryption/EncryptionMethod.java	Tue Dec 23 13:58:34 2014 -0800
@@ -68,7 +68,7 @@
     void setKeySize(int size);
 
     /**
-     * Returns the OAEP parameters of the algorithm applied applied to the
+     * Returns the OAEP parameters of the algorithm applied to the
      * cipher data.
      *
      * @return the OAEP parameters.
@@ -130,4 +130,3 @@
      */
     void removeEncryptionMethodInformation(Element information);
 }
-
--- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/KeyUtils.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/KeyUtils.java	Tue Dec 23 13:58:34 2014 -0800
@@ -32,7 +32,7 @@
 import com.sun.org.apache.xml.internal.security.keys.content.X509Data;
 
 /**
- * Utility class for for <CODE>com.sun.org.apache.xml.internal.security.keys</CODE> package.
+ * Utility class for the <CODE>com.sun.org.apache.xml.internal.security.keys</CODE> package.
  *
  * @author $Author: coheigea $
  */
--- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/Reference.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/Reference.java	Tue Dec 23 13:58:34 2014 -0800
@@ -571,7 +571,7 @@
     }
 
     /**
-     * This method only works works after a call to verify.
+     * This method only works after a call to verify.
      * @return the transformed output(i.e. what is going to be digested).
      */
     public XMLSignatureInput getTransformsOutput() {
--- a/src/jdk.attach/solaris/native/libattach/VirtualMachineImpl.c	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/jdk.attach/solaris/native/libattach/VirtualMachineImpl.c	Tue Dec 23 13:58:34 2014 -0800
@@ -320,7 +320,7 @@
         JNU_ThrowIOExceptionWithLastError(env, "door_call");
     } else {
         /*
-         * door_call succeeded but the call didn't return the the expected jint.
+         * door_call succeeded but the call didn't return the expected jint.
          */
         if (door_args.data_size < sizeof(jint)) {
             JNU_ThrowIOException(env, "Enqueue error - reason unknown as result is truncated!");
--- a/src/jdk.crypto.mscapi/windows/classes/sun/security/mscapi/RSACipher.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/jdk.crypto.mscapi/windows/classes/sun/security/mscapi/RSACipher.java	Tue Dec 23 13:58:34 2014 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2014, 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
@@ -159,6 +159,7 @@
     }
 
     // see JCE spec
+    @SuppressWarnings("deprecation")
     protected void engineInit(int opmode, Key key,
             AlgorithmParameterSpec params, SecureRandom random)
             throws InvalidKeyException, InvalidAlgorithmParameterException {
@@ -369,6 +370,7 @@
     }
 
     // see JCE spec
+    @SuppressWarnings("deprecation")
     protected java.security.Key engineUnwrap(byte[] wrappedKey,
             String algorithm,
             int type) throws InvalidKeyException, NoSuchAlgorithmException {
--- a/src/jdk.crypto.pkcs11/share/classes/sun/security/pkcs11/Config.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/jdk.crypto.pkcs11/share/classes/sun/security/pkcs11/Config.java	Tue Dec 23 13:58:34 2014 -0800
@@ -584,16 +584,24 @@
     }
 
     private String parseLine() throws IOException {
-        String s = parseWord();
+        // allow quoted string as part of line
+        String s = null;
         while (true) {
             int token = nextToken();
             if ((token == TT_EOL) || (token == TT_EOF)) {
                 break;
             }
-            if (token != TT_WORD) {
+            if (token != TT_WORD && token != '\"') {
                 throw excToken("Unexpected value");
             }
-            s = s + " " + st.sval;
+            if (s == null) {
+                s = st.sval;
+            } else {
+                s = s + " " + st.sval;
+            }
+        }
+        if (s == null) {
+            throw excToken("Unexpected empty line");
         }
         return s;
     }
@@ -653,7 +661,9 @@
     //
 
     private String parseLibrary(String keyword) throws IOException {
-        String lib = parseStringEntry(keyword);
+        checkDup(keyword);
+        parseEquals();
+        String lib = parseLine();
         lib = expand(lib);
         int i = lib.indexOf("/$ISA/");
         if (i != -1) {
--- a/src/jdk.crypto.pkcs11/share/classes/sun/security/pkcs11/P11KeyStore.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/jdk.crypto.pkcs11/share/classes/sun/security/pkcs11/P11KeyStore.java	Tue Dec 23 13:58:34 2014 -0800
@@ -1641,7 +1641,7 @@
 
         // If the key is a token object on this token, update it instead
         // of creating a duplicate key object.
-        // Otherwise, treat a P11Key like any other key, if is is extractable.
+        // Otherwise, treat a P11Key like any other key, if it is extractable.
         if (key instanceof P11Key) {
             P11Key p11Key = (P11Key)key;
             if (p11Key.tokenObject && (p11Key.token == this.token)) {
--- a/src/jdk.crypto.ucrypto/solaris/classes/com/oracle/security/ucrypto/NativeCipherWithJavaPadding.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/jdk.crypto.ucrypto/solaris/classes/com/oracle/security/ucrypto/NativeCipherWithJavaPadding.java	Tue Dec 23 13:58:34 2014 -0800
@@ -89,7 +89,7 @@
 
     private static class PKCS5Padding implements Padding {
         private final int blockSize;
-        // buffer for storing the the potential padding bytes
+        // buffer for storing the potential padding bytes
         private ByteBuffer trailingBytes = null;
 
         PKCS5Padding(int blockSize)
--- a/src/jdk.crypto.ucrypto/solaris/classes/com/oracle/security/ucrypto/NativeRSACipher.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/jdk.crypto.ucrypto/solaris/classes/com/oracle/security/ucrypto/NativeRSACipher.java	Tue Dec 23 13:58:34 2014 -0800
@@ -178,6 +178,7 @@
 
     // see JCE spec
     @Override
+    @SuppressWarnings("deprecation")
     protected synchronized void engineInit(int opmode, Key newKey,
             AlgorithmParameterSpec params, SecureRandom random)
             throws InvalidKeyException, InvalidAlgorithmParameterException {
@@ -331,6 +332,7 @@
 
     // see JCE spec
     @Override
+    @SuppressWarnings("deprecation")
     protected synchronized Key engineUnwrap(byte[] wrappedKey,
             String wrappedKeyAlgorithm, int wrappedKeyType)
             throws InvalidKeyException, NoSuchAlgorithmException {
--- a/src/jdk.jcmd/share/classes/sun/tools/jstat/Arguments.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/jdk.jcmd/share/classes/sun/tools/jstat/Arguments.java	Tue Dec 23 13:58:34 2014 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 2014, 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
@@ -141,8 +141,9 @@
     public Arguments(String[] args) throws IllegalArgumentException {
         int argc = 0;
 
-        if (args.length < 1) {
-            throw new IllegalArgumentException("invalid argument count");
+        if (args.length == 0) {
+            help = true;
+            return;
         }
 
         if ((args[0].compareTo("-?") == 0)
--- a/src/jdk.jconsole/share/classes/sun/tools/jconsole/Plotter.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/jdk.jconsole/share/classes/sun/tools/jconsole/Plotter.java	Tue Dec 23 13:58:34 2014 -0800
@@ -838,7 +838,7 @@
     private static class TimeStamps {
         // Time stamps (long) are split into offsets (long) and a
         // series of times from the offsets (int). A new offset is
-        // stored when the the time value doesn't fit in an int
+        // stored when the time value doesn't fit in an int
         // (approx every 24 days).  An array of indices is used to
         // define the starting point for each offset in the times
         // array.
--- a/src/jdk.jconsole/share/classes/sun/tools/jconsole/inspector/XObject.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/jdk.jconsole/share/classes/sun/tools/jconsole/inspector/XObject.java	Tue Dec 23 13:58:34 2014 -0800
@@ -65,7 +65,7 @@
         return object;
     }
 
-    //if true the the object.hashcode is added to the label
+    //if true the object.hashcode is added to the label
     public static void
         useHashCodeRepresentation(boolean useHashCodeRepresentation) {
         XObject.useHashCodeRepresentation = useHashCodeRepresentation;
--- a/src/jdk.jdi/share/classes/com/sun/jdi/VirtualMachineManager.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/jdk.jdi/share/classes/com/sun/jdi/VirtualMachineManager.java	Tue Dec 23 13:58:34 2014 -0800
@@ -225,7 +225,7 @@
  * file contains a provider configuration file named
  * <tt>com.sun.jdi.connect.spi.TransportService</tt> in the resource
  * directory <tt>META-INF/services</tt>, and the provider
- * configuration file lists the the full-qualified class name of the
+ * configuration file lists the full-qualified class name of the
  * TransportService implementation. A TransportService is a concrete
  * sub-class of {@link com.sun.jdi.connect.spi.TransportService
  * TransportService}. The format of the provider configuration file
--- a/src/jdk.jdi/share/classes/com/sun/jdi/connect/AttachingConnector.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/jdk.jdi/share/classes/com/sun/jdi/connect/AttachingConnector.java	Tue Dec 23 13:58:34 2014 -0800
@@ -38,7 +38,7 @@
 @jdk.Exported
 public interface AttachingConnector extends Connector {
     /**
-     * Attaches to a running application and and returns a
+     * Attaches to a running application and returns a
      * mirror of its VM.
      * <p>
      * The connector uses the given argument map in
--- a/src/jdk.jdi/share/classes/com/sun/tools/jdi/ThreadReferenceImpl.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/jdk.jdi/share/classes/com/sun/tools/jdi/ThreadReferenceImpl.java	Tue Dec 23 13:58:34 2014 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2014, 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
@@ -238,7 +238,7 @@
     }
 
     public void stop(ObjectReference throwable) throws InvalidTypeException {
-        validateMirror(throwable);
+        validateMirrorOrNull(throwable);
         // Verify that the given object is a Throwable instance
         List<ReferenceType> list = vm.classesByName("java.lang.Throwable");
         ClassTypeImpl throwableClass = (ClassTypeImpl)list.get(0);
@@ -613,7 +613,7 @@
     }
 
     /**
-     * Propagate the the thread state change information
+     * Propagate the thread state change information
      * to registered listeners.
      * Must be entered while synchronized on vm.state()
      */
--- a/src/jdk.jdi/share/classes/com/sun/tools/jdi/VirtualMachineImpl.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/jdk.jdi/share/classes/com/sun/tools/jdi/VirtualMachineImpl.java	Tue Dec 23 13:58:34 2014 -0800
@@ -1250,7 +1250,7 @@
         Long key = id;
 
         /*
-         * Attempt to retrieve an existing object object reference
+         * Attempt to retrieve an existing object reference
          */
         SoftObjectReference ref = objectsByID.get(key);
         if (ref != null) {
--- a/src/jdk.jdwp.agent/share/native/libjdwp/eventHandler.c	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/jdk.jdwp.agent/share/native/libjdwp/eventHandler.c	Tue Dec 23 13:58:34 2014 -0800
@@ -438,7 +438,7 @@
                 do {
                     /* The events have been reported and this
                      * thread is about to continue, but it may
-                     * have been started up up just to perform a
+                     * have been started up just to perform a
                      * requested method invocation. If so, we do
                      * the invoke now and then stop again waiting
                      * for another continue. By then another
--- a/src/jdk.jvmstat/share/classes/sun/jvmstat/monitor/BufferedMonitoredVm.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/jdk.jvmstat/share/classes/sun/jvmstat/monitor/BufferedMonitoredVm.java	Tue Dec 23 13:58:34 2014 -0800
@@ -47,7 +47,7 @@
     byte[] getBytes();
 
     /**
-     * Interface to get the the size of the instrumentation buffer
+     * Interface to get the size of the instrumentation buffer
      * for the target Java Virtual Machine.
      *
      * @return int - the size of the instrumentation buffer for the
--- a/src/jdk.jvmstat/share/classes/sun/jvmstat/monitor/HostIdentifier.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/jdk.jvmstat/share/classes/sun/jvmstat/monitor/HostIdentifier.java	Tue Dec 23 13:58:34 2014 -0800
@@ -227,7 +227,7 @@
      *
      * The necessary components of the VmIdentifier are extracted and
      * reassembled into a HostIdentifier. If a "file:" scheme (protocol)
-     * is specified, the the returned HostIdentifier will always be
+     * is specified, the returned HostIdentifier will always be
      * equivalent to HostIdentifier("file://localhost").
      *
      * @param vmid the VmIdentifier use to construct the HostIdentifier.
--- a/src/jdk.jvmstat/share/classes/sun/jvmstat/monitor/MonitoredVm.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/jdk.jvmstat/share/classes/sun/jvmstat/monitor/MonitoredVm.java	Tue Dec 23 13:58:34 2014 -0800
@@ -59,7 +59,7 @@
      *
      * @param name the name of the Instrumentation object to find.
      * @return Monitor - the {@link Monitor} object that can be used to
-     *                   monitor the the named instrumentation object, or
+     *                   monitor the named instrumentation object, or
      *                   <tt>null</tt> if the named object doesn't exist.
      * @throws MonitorException Thrown if an error occurs while communicating
      *                          with the target Java Virtual Machine.
--- a/src/jdk.jvmstat/share/classes/sun/jvmstat/monitor/MonitoredVmUtil.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/jdk.jvmstat/share/classes/sun/jvmstat/monitor/MonitoredVmUtil.java	Tue Dec 23 13:58:34 2014 -0800
@@ -58,7 +58,7 @@
      *
      * @param vm the target MonitoredVm
      * @return String - contains the command line of the target Java
-     *                  application or the the string "Unknown" if the
+     *                  application or the string "Unknown" if the
      *                  command line cannot be determined.
      */
     public static String commandLine(MonitoredVm vm) throws MonitorException {
@@ -73,7 +73,7 @@
      *
      * @param vm the target MonitoredVm
      * @return String - contains the arguments to the main class for the
-     *                  target Java application or the the string "Unknown"
+     *                  target Java application or the string "Unknown"
      *                  if the command line cannot be determined.
      */
     public static String mainArgs(MonitoredVm vm) throws MonitorException {
@@ -97,7 +97,7 @@
      * @param vm the target MonitoredVm
      * @param fullPath include the full path to Jar file, where applicable
      * @return String - contains the main class of the target Java
-     *                  application or the the string "Unknown" if the
+     *                  application or the string "Unknown" if the
      *                  command line cannot be determined.
      */
     public static String mainClass(MonitoredVm vm, boolean fullPath)
@@ -138,7 +138,7 @@
      *
      * @param vm the target MonitoredVm
      * @return String - contains the arguments passed to the JVM for the
-     *                  target Java application or the the string "Unknown"
+     *                  target Java application or the string "Unknown"
      *                  if the command line cannot be determined.
      */
     public static String jvmArgs(MonitoredVm vm) throws MonitorException {
@@ -151,7 +151,7 @@
      *
      * @param vm the target MonitoredVm
      * @return String - contains the flags passed to the JVM for the
-     *                  target Java application or the the string "Unknown"
+     *                  target Java application or the string "Unknown"
      *                  if the command line cannot be determined.
      */
     public static String jvmFlags(MonitoredVm vm) throws MonitorException {
--- a/src/jdk.jvmstat/share/classes/sun/jvmstat/monitor/remote/RemoteVm.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/jdk.jvmstat/share/classes/sun/jvmstat/monitor/remote/RemoteVm.java	Tue Dec 23 13:58:34 2014 -0800
@@ -49,7 +49,7 @@
     byte[] getBytes() throws RemoteException;
 
     /**
-     * Interface to get the the size of the instrumentation buffer
+     * Interface to get the size of the instrumentation buffer
      * for the target Java Virtual Machine.
      *
      * @return int - the size of the instrumentation buffer for the
--- a/src/jdk.jvmstat/share/classes/sun/jvmstat/perfdata/monitor/AbstractPerfDataBuffer.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/jdk.jvmstat/share/classes/sun/jvmstat/perfdata/monitor/AbstractPerfDataBuffer.java	Tue Dec 23 13:58:34 2014 -0800
@@ -91,7 +91,7 @@
      *
      * @param name the name of the Instrumentation object to find.
      * @return Monitor - the {@link Monitor} object that can be used to
-     *                   monitor the the named instrumentation object, or
+     *                   monitor the named instrumentation object, or
      *                   <tt>null</tt> if the named object doesn't exist.
      * @throws MonitorException Thrown if an error occurs while communicating
      *                          with the target Java Virtual Machine.
--- a/src/jdk.jvmstat/share/classes/sun/jvmstat/perfdata/monitor/PerfDataBufferImpl.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/jdk.jvmstat/share/classes/sun/jvmstat/perfdata/monitor/PerfDataBufferImpl.java	Tue Dec 23 13:58:34 2014 -0800
@@ -229,7 +229,7 @@
      *
      * @param name the name of the Instrumentation object to find.
      * @return Monitor - the {@link Monitor} object that can be used to
-     *                   monitor the the named instrumentation object, or
+     *                   monitor the named instrumentation object, or
      *                   <tt>null</tt> if the named object doesn't exist.
      * @throws MonitorException Thrown if an error occurs while communicating
      *                          with the target Java Virtual Machine.
--- a/src/jdk.jvmstat/share/classes/sun/jvmstat/perfdata/monitor/PerfIntegerMonitor.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/jdk.jvmstat/share/classes/sun/jvmstat/perfdata/monitor/PerfIntegerMonitor.java	Tue Dec 23 13:58:34 2014 -0800
@@ -63,7 +63,7 @@
      * The object returned contains an Integer object containing the
      * current value of the IntegerInstrument.
      *
-     * @return Object - the current value of the the IntegerInstrument. The
+     * @return Object - the current value of the IntegerInstrument. The
      *                   return type is guaranteed to be of type Integer.
      */
     public Object getValue() {
--- a/src/jdk.jvmstat/share/classes/sun/jvmstat/perfdata/monitor/PerfLongMonitor.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/jdk.jvmstat/share/classes/sun/jvmstat/perfdata/monitor/PerfLongMonitor.java	Tue Dec 23 13:58:34 2014 -0800
@@ -62,7 +62,7 @@
      * The object returned contains a Long object containing the
      * current value of the LongInstrument.
      *
-     * @return Object - the current value of the the LongInstrument. The
+     * @return Object - the current value of the LongInstrument. The
      *                  return type is guaranteed to be of type Long.
      */
     public Object getValue() {
--- a/src/jdk.jvmstat/share/classes/sun/jvmstat/perfdata/monitor/v1_0/PerfDataBuffer.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/jdk.jvmstat/share/classes/sun/jvmstat/perfdata/monitor/v1_0/PerfDataBuffer.java	Tue Dec 23 13:58:34 2014 -0800
@@ -429,7 +429,7 @@
 
                 /*
                  * replace the real counters with pseudo counters that are
-                 * initialized to to the correct values. The maximum size of
+                 * initialized to the correct values. The maximum size of
                  * the eden and survivor spaces are supposed to be:
                  *    max_eden_size = new_size - (2*alignment).
                  *    max_survivor_size = new_size - (2*alignment).
--- a/src/jdk.naming.dns/share/classes/com/sun/jndi/dns/ResourceRecord.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/jdk.naming.dns/share/classes/com/sun/jndi/dns/ResourceRecord.java	Tue Dec 23 13:58:34 2014 -0800
@@ -103,7 +103,7 @@
     int rrlen;                  // number of octets in encoded RR
     DnsName name;               // name field of RR, including root label
     int rrtype;                 // type field of RR
-    String rrtypeName;          // name of of rrtype
+    String rrtypeName;          // name of rrtype
     int rrclass;                // class field of RR
     String rrclassName;         // name of rrclass
     int ttl = 0;                // ttl field of RR
--- a/src/jdk.naming.rmi/share/classes/com/sun/jndi/rmi/registry/RegistryContext.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/jdk.naming.rmi/share/classes/com/sun/jndi/rmi/registry/RegistryContext.java	Tue Dec 23 13:58:34 2014 -0800
@@ -353,7 +353,6 @@
     /**
      * Wrap a RemoteException inside a NamingException.
      */
-    @SuppressWarnings("deprecation")
     public static NamingException wrapRemoteException(RemoteException re) {
 
         NamingException ne;
@@ -365,8 +364,7 @@
             ne = new NoPermissionException();
 
         } else if (re instanceof StubNotFoundException ||
-                   re instanceof UnknownHostException ||
-                   re instanceof SocketSecurityException) {
+                   re instanceof UnknownHostException) {
             ne = new ConfigurationException();
 
         } else if (re instanceof ExportException ||
@@ -414,11 +412,10 @@
      * Attempts to install a security manager if none is currently in
      * place.
      */
-    @SuppressWarnings("deprecation")
     private static void installSecurityMgr() {
 
         try {
-            System.setSecurityManager(new RMISecurityManager());
+            System.setSecurityManager(new SecurityManager());
         } catch (Exception e) {
         }
     }
--- a/src/jdk.rmic/share/classes/sun/tools/java/ClassDefinition.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/jdk.rmic/share/classes/sun/tools/java/ClassDefinition.java	Tue Dec 23 13:58:34 2014 -0800
@@ -295,7 +295,7 @@
     }
 
     /**
-     * Tell if the class is local or or anonymous class, or inside
+     * Tell if the class is local or anonymous class, or inside
      * such a class, which means it cannot be mentioned outside of
      * its file.
      */
@@ -770,7 +770,7 @@
     }
 
     /**
-     * We know the the field is marked protected (and not public) and that
+     * We know the field is marked protected (and not public) and that
      * the field is visible (as per canAccess).  Can we access the field as
      * <accessor>.<field>, where <accessor> has the type <accessorType>?
      *
--- a/src/jdk.sctp/share/classes/com/sun/nio/sctp/SctpMultiChannel.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/jdk.sctp/share/classes/com/sun/nio/sctp/SctpMultiChannel.java	Tue Dec 23 13:58:34 2014 -0800
@@ -219,7 +219,7 @@
      *         bind the socket to an automatically assigned socket address
      *
      * @param  backlog
-     *         The maximum number number of pending connections
+     *         The maximum number of pending connections
      *
      * @return  This channel
      *
@@ -706,7 +706,7 @@
      *
      * @throws  SecurityException
      *          If a security manager has been installed and it does not permit
-     *          new associations to be setup with the the messages's address
+     *          new associations to be setup with the messages's address
      *
      * @throws  IOException
      *          If some other I/O error occurs
--- a/src/jdk.sctp/share/classes/com/sun/nio/sctp/SctpServerChannel.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/jdk.sctp/share/classes/com/sun/nio/sctp/SctpServerChannel.java	Tue Dec 23 13:58:34 2014 -0800
@@ -214,7 +214,7 @@
      *         bind the socket to an automatically assigned socket address
      *
      * @param  backlog
-     *         The maximum number number of pending associations
+     *         The maximum number of pending associations
      *
      * @return  This channel
      *
--- a/src/jdk.sctp/unix/native/libsctp/SctpChannelImpl.c	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/jdk.sctp/unix/native/libsctp/SctpChannelImpl.c	Tue Dec 23 13:58:34 2014 -0800
@@ -507,7 +507,7 @@
             if (handleNotification(env, fd, resultContainerObj, snp, rv,
                                    (msg->msg_flags & MSG_EOR),
                                    (struct sockaddr*)&sa ) == JNI_TRUE) {
-                /* We have received a notification that is of interest to
+                /* We have received a notification that is of interest
                    to the Java API. The appropriate notification will be
                    set in the result container. */
                 if (allocated == JNI_TRUE) {
--- a/src/jdk.security.auth/share/classes/com/sun/security/auth/NTDomainPrincipal.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/jdk.security.auth/share/classes/com/sun/security/auth/NTDomainPrincipal.java	Tue Dec 23 13:58:34 2014 -0800
@@ -117,7 +117,7 @@
      * @param o Object to be compared for equality with this
      *          <code>NTDomainPrincipal</code>.
      *
-     * @return true if the specified Object is equal equal to this
+     * @return true if the specified Object is equal to this
      *          <code>NTDomainPrincipal</code>.
      */
     public boolean equals(Object o) {
--- a/src/jdk.security.auth/share/classes/com/sun/security/auth/NTNumericCredential.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/jdk.security.auth/share/classes/com/sun/security/auth/NTNumericCredential.java	Tue Dec 23 13:58:34 2014 -0800
@@ -88,7 +88,7 @@
      * @param o Object to be compared for equality with this
      *          <code>NTNumericCredential</code>.
      *
-     * @return true if the specified Object is equal equal to this
+     * @return true if the specified Object is equal to this
      *          <code>NTNumericCredential</code>.
      */
     public boolean equals(Object o) {
--- a/src/jdk.security.auth/share/classes/com/sun/security/auth/NTSidDomainPrincipal.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/jdk.security.auth/share/classes/com/sun/security/auth/NTSidDomainPrincipal.java	Tue Dec 23 13:58:34 2014 -0800
@@ -91,7 +91,7 @@
      * @param o Object to be compared for equality with this
      *          <code>NTSidDomainPrincipal</code>.
      *
-     * @return true if the specified Object is equal equal to this
+     * @return true if the specified Object is equal to this
      *          <code>NTSidDomainPrincipal</code>.
      */
     public boolean equals(Object o) {
--- a/src/jdk.security.auth/share/classes/com/sun/security/auth/NTSidGroupPrincipal.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/jdk.security.auth/share/classes/com/sun/security/auth/NTSidGroupPrincipal.java	Tue Dec 23 13:58:34 2014 -0800
@@ -86,7 +86,7 @@
      * @param o Object to be compared for equality with this
      *          <code>NTSidGroupPrincipal</code>.
      *
-     * @return true if the specified Object is equal equal to this
+     * @return true if the specified Object is equal to this
      *          <code>NTSidGroupPrincipal</code>.
      */
     public boolean equals(Object o) {
--- a/src/jdk.security.auth/share/classes/com/sun/security/auth/NTSidPrimaryGroupPrincipal.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/jdk.security.auth/share/classes/com/sun/security/auth/NTSidPrimaryGroupPrincipal.java	Tue Dec 23 13:58:34 2014 -0800
@@ -89,7 +89,7 @@
      * @param o Object to be compared for equality with this
      *          <code>NTSidPrimaryGroupPrincipal</code>.
      *
-     * @return true if the specified Object is equal equal to this
+     * @return true if the specified Object is equal to this
      *          <code>NTSidPrimaryGroupPrincipal</code>.
      */
     public boolean equals(Object o) {
--- a/src/jdk.security.auth/share/classes/com/sun/security/auth/NTSidUserPrincipal.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/jdk.security.auth/share/classes/com/sun/security/auth/NTSidUserPrincipal.java	Tue Dec 23 13:58:34 2014 -0800
@@ -85,7 +85,7 @@
      * @param o Object to be compared for equality with this
      *          <code>NTSidUserPrincipal</code>.
      *
-     * @return true if the specified Object is equal equal to this
+     * @return true if the specified Object is equal to this
      *          <code>NTSidUserPrincipal</code>.
      */
     public boolean equals(Object o) {
--- a/src/jdk.security.auth/share/classes/com/sun/security/auth/NTUserPrincipal.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/jdk.security.auth/share/classes/com/sun/security/auth/NTUserPrincipal.java	Tue Dec 23 13:58:34 2014 -0800
@@ -111,7 +111,7 @@
      * @param o Object to be compared for equality with this
      *          <code>NTPrincipal</code>.
      *
-     * @return true if the specified Object is equal equal to this
+     * @return true if the specified Object is equal to this
      *          <code>NTPrincipal</code>.
      */
     public boolean equals(Object o) {
--- a/src/jdk.security.auth/share/classes/com/sun/security/auth/SolarisNumericGroupPrincipal.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/jdk.security.auth/share/classes/com/sun/security/auth/SolarisNumericGroupPrincipal.java	Tue Dec 23 13:58:34 2014 -0800
@@ -184,7 +184,7 @@
      * @param o Object to be compared for equality with this
      *          <code>SolarisNumericGroupPrincipal</code>.
      *
-     * @return true if the specified Object is equal equal to this
+     * @return true if the specified Object is equal to this
      *          <code>SolarisNumericGroupPrincipal</code>.
      */
     public boolean equals(Object o) {
--- a/src/jdk.security.auth/share/classes/com/sun/security/auth/SolarisNumericUserPrincipal.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/jdk.security.auth/share/classes/com/sun/security/auth/SolarisNumericUserPrincipal.java	Tue Dec 23 13:58:34 2014 -0800
@@ -151,7 +151,7 @@
      * @param o Object to be compared for equality with this
      *          <code>SolarisNumericUserPrincipal</code>.
      *
-     * @return true if the specified Object is equal equal to this
+     * @return true if the specified Object is equal to this
      *          <code>SolarisNumericUserPrincipal</code>.
      */
     public boolean equals(Object o) {
--- a/src/jdk.security.auth/share/classes/com/sun/security/auth/SolarisPrincipal.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/jdk.security.auth/share/classes/com/sun/security/auth/SolarisPrincipal.java	Tue Dec 23 13:58:34 2014 -0800
@@ -115,7 +115,7 @@
      * @param o Object to be compared for equality with this
      *          <code>SolarisPrincipal</code>.
      *
-     * @return true if the specified Object is equal equal to this
+     * @return true if the specified Object is equal to this
      *          <code>SolarisPrincipal</code>.
      */
     public boolean equals(Object o) {
--- a/src/jdk.security.auth/share/classes/com/sun/security/auth/UnixNumericGroupPrincipal.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/jdk.security.auth/share/classes/com/sun/security/auth/UnixNumericGroupPrincipal.java	Tue Dec 23 13:58:34 2014 -0800
@@ -187,7 +187,7 @@
      * @param o Object to be compared for equality with this
      *          <code>UnixNumericGroupPrincipal</code>.
      *
-     * @return true if the specified Object is equal equal to this
+     * @return true if the specified Object is equal to this
      *          <code>UnixNumericGroupPrincipal</code>.
      */
     public boolean equals(Object o) {
--- a/src/jdk.security.auth/share/classes/com/sun/security/auth/UnixNumericUserPrincipal.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/jdk.security.auth/share/classes/com/sun/security/auth/UnixNumericUserPrincipal.java	Tue Dec 23 13:58:34 2014 -0800
@@ -147,7 +147,7 @@
      * @param o Object to be compared for equality with this
      *          <code>UnixNumericUserPrincipal</code>.
      *
-     * @return true if the specified Object is equal equal to this
+     * @return true if the specified Object is equal to this
      *          <code>UnixNumericUserPrincipal</code>.
      */
     public boolean equals(Object o) {
--- a/src/jdk.security.auth/share/classes/com/sun/security/auth/UnixPrincipal.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/jdk.security.auth/share/classes/com/sun/security/auth/UnixPrincipal.java	Tue Dec 23 13:58:34 2014 -0800
@@ -112,7 +112,7 @@
      * @param o Object to be compared for equality with this
      *          <code>UnixPrincipal</code>.
      *
-     * @return true if the specified Object is equal equal to this
+     * @return true if the specified Object is equal to this
      *          <code>UnixPrincipal</code>.
      */
     public boolean equals(Object o) {
--- a/src/jdk.security.auth/share/classes/com/sun/security/auth/X500Principal.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/jdk.security.auth/share/classes/com/sun/security/auth/X500Principal.java	Tue Dec 23 13:58:34 2014 -0800
@@ -130,7 +130,7 @@
      * @param o Object to be compared for equality with this
      *          <code>X500Principal</code>.
      *
-     * @return true if the specified Object is equal equal to this
+     * @return true if the specified Object is equal to this
      *          <code>X500Principal</code>.
      */
     public boolean equals(Object o) {
--- a/src/sample/share/nio/server/ChannelIOSecure.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/sample/share/nio/server/ChannelIOSecure.java	Tue Dec 23 13:58:34 2014 -0800
@@ -576,7 +576,7 @@
 
         /*
          * We ignore the return value here, we return the
-         * number of bytes actually consumed from the the file.
+         * number of bytes actually consumed from the file.
          * We'll flush the output buffer before we start shutting down.
          */
         doWrite(fileChannelBB);
--- a/src/sample/solaris/dtrace/hotspot/gc_time_stat.d	Thu Dec 18 19:57:52 2014 -0800
+++ b/src/sample/solaris/dtrace/hotspot/gc_time_stat.d	Tue Dec 23 13:58:34 2014 -0800
@@ -111,8 +111,8 @@
  *  arg4: uintptr_t,    the initial size of the memory pool (in bytes)
  *  arg5: uintptr_t,    the amount of memory in use in the memory pool
  *                          (in bytes)
- *  arg6: uintptr_t,    the the number of committed pages in the memory pool
- *  arg7: uintptr_t,    the the maximum size of the memory pool
+ *  arg6: uintptr_t,    the number of committed pages in the memory pool
+ *  arg7: uintptr_t,    the maximum size of the memory pool
  */
 hotspot$target:::mem-pool-gc-begin
 {
--- a/test/ProblemList.txt	Thu Dec 18 19:57:52 2014 -0800
+++ b/test/ProblemList.txt	Tue Dec 23 13:58:34 2014 -0800
@@ -135,10 +135,6 @@
 
 # jdk_management
 
-# 8044591
-com/sun/management/GarbageCollectorMXBean/GarbageCollectionNotificationContentTest.java   generic-all
-com/sun/management/GarbageCollectorMXBean/GarbageCollectionNotificationTest.java          generic-all
-
 # 8058492
 java/lang/management/ThreadMXBean/FindDeadlocks.java                                      generic-all
 
@@ -303,25 +299,6 @@
 
 # jdk_util
 
-# 8051641
-sun/util/calendar/zi/TestZoneInfo310.java                        generic-all
-
-# 8062588
-java/util/Locale/LocaleProviders.sh                              generic-all
-java/util/PluggableLocale/BreakIteratorProviderTest.sh           generic-all
-java/util/PluggableLocale/CalendarDataProviderTest.sh            generic-all
-java/util/PluggableLocale/CalendarNameProviderTest.sh            generic-all
-java/util/PluggableLocale/CollatorProviderTest.sh                generic-all
-java/util/PluggableLocale/CurrencyNameProviderTest.sh            generic-all
-java/util/PluggableLocale/DateFormatProviderTest.sh              generic-all
-java/util/PluggableLocale/DateFormatSymbolsProviderTest.sh       generic-all
-java/util/PluggableLocale/DecimalFormatSymbolsProviderTest.sh    generic-all
-java/util/PluggableLocale/GenericTest.sh                         generic-all
-java/util/PluggableLocale/LocaleNameProviderTest.sh              generic-all
-java/util/PluggableLocale/NumberFormatProviderTest.sh            generic-all
-java/util/PluggableLocale/TimeZoneNameProviderTest.sh            generic-all
-java/util/ResourceBundle/Bug6299235Test.sh                       generic-all
-
 # 8062512
 java/util/spi/ResourceBundleControlProvider/UserDefaultControlTest.java generic-all
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/com/sun/crypto/provider/KeyAgreement/SameDHKeyStressTest.java	Tue Dec 23 13:58:34 2014 -0800
@@ -0,0 +1,169 @@
+/*
+ * Copyright (c) 1999, 2014, 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.
+ *
+ * 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.
+ */
+
+/*
+ * @test
+ * @bug 8048819
+ * @summary This test stressful verifies the assertion of "The secret keys generated
+ * by all involved parties should be the same." for javax.crypto.KeyAgreement
+ * @run main SameDHKeyStressTest
+ */
+import java.security.AlgorithmParameterGenerator;
+import java.security.InvalidAlgorithmParameterException;
+import java.security.InvalidKeyException;
+import java.security.Key;
+import java.security.KeyPair;
+import java.security.KeyPairGenerator;
+import java.security.NoSuchAlgorithmException;
+import java.security.NoSuchProviderException;
+import java.security.spec.AlgorithmParameterSpec;
+import java.util.Arrays;
+import javax.crypto.KeyAgreement;
+import javax.crypto.SecretKey;
+import javax.crypto.spec.DHGenParameterSpec;
+import javax.crypto.spec.DHParameterSpec;
+
+public class SameDHKeyStressTest {
+
+    static final String[] ALGORITHMS = {"DH", "DiffieHellman", "dh", "diffieHELLMAN"};
+    static final String[] SECRET_ALOGRITHMS = {"DES", "DESede", "blowfish"};
+    static final int[] NUMBER_OF_PARTIES = {2, 3, 4};
+    static final String[] PA_NAMES = {"Alice", "Bob", "Carol", "David"};
+
+    public static void main(String args[]) {
+        int failedCnt = 0;
+        StringBuilder failedList = new StringBuilder("Failed List:");
+
+        for (String algorithm : ALGORITHMS) {
+            for (int numOfParties : NUMBER_OF_PARTIES) {
+                for (String secretAlgorithm : SECRET_ALOGRITHMS) {
+                    if (!runTest(algorithm, numOfParties, secretAlgorithm)) {
+                        failedCnt++;
+                        failedList.append("\n Altorightm = ").append(algorithm).
+                                append(" Number of Parties = ").append(numOfParties).
+                                append(" Secret Algorithm = ").append(secretAlgorithm);
+                    }
+                }
+            }
+        } //end of for loop
+
+        if (failedCnt > 0) {
+            System.out.println(failedList);
+            throw new RuntimeException("SameDHKeyStressTest Failed");
+        }
+    }
+
+    public static boolean runTest(String algo, int numParties, String secretAlgo) {
+        KAParticipant[] parties = new KAParticipant[numParties];
+        Key[] keyArchives = new Key[numParties];
+        try {
+            // generate AlogirhtmParameterSpec
+            AlgorithmParameterGenerator apg = AlgorithmParameterGenerator.getInstance("DH","SunJCE");
+            AlgorithmParameterSpec aps = new DHGenParameterSpec(512, 64);
+            apg.init(aps);
+            DHParameterSpec spec = apg.generateParameters().
+                    getParameterSpec(DHParameterSpec.class);
+
+            //initilize all KeyAgreement participants
+            for (int i = 0; i < numParties; i++) {
+                parties[i] = new KAParticipant(PA_NAMES[i], algo);
+                parties[i].initialize(spec);
+                keyArchives[i] = parties[i].getPublicKey();
+            }
+
+            // Do all phases in the KeyAgreement for all participants
+            Key[] keyBuffer = new Key[numParties];
+            boolean lastPhase = false;
+            for (int j = 0; j < numParties - 1; j++) {
+                if (j == numParties - 2) {
+                    lastPhase = true;
+                }
+                for (int k = 0; k < numParties; k++) {
+                    if (k == numParties - 1) {
+                        keyBuffer[k] = parties[k].doPhase(keyArchives[0], lastPhase);
+                    } else {
+                        keyBuffer[k] = parties[k].doPhase(keyArchives[k + 1], lastPhase);
+                    }
+                }
+                System.arraycopy(keyBuffer, 0, keyArchives, 0, numParties);
+            }
+
+            //Comparison: The secret keys generated by all involved parties should be the same
+            SecretKey[] sKeys = new SecretKey[numParties];
+            for (int n = 0; n < numParties; n++) {
+                sKeys[n] = parties[n].generateSecret(secretAlgo);
+            }
+            for (int q = 0; q < numParties - 1; q++) {
+                if (!Arrays.equals(sKeys[q].getEncoded(), sKeys[q + 1].getEncoded())) {
+                    return false;
+                }
+            }
+            return true;
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            return false;
+        }
+
+    }
+
+}
+
+class KAParticipant {
+
+    private String name = null;
+    private String algorithm = null;
+    private KeyPairGenerator keyGen = null;
+    private KeyPair keys = null;
+    private KeyAgreement ka = null;
+
+    public KAParticipant(String pName, String algo) throws NoSuchAlgorithmException, NoSuchProviderException {
+        name = pName;
+        algorithm = algo;
+        keyGen = KeyPairGenerator.getInstance(algo,"SunJCE");
+        ka = KeyAgreement.getInstance(algo,"SunJCE");
+    }
+
+    public void initialize(AlgorithmParameterSpec spec) throws InvalidAlgorithmParameterException, InvalidKeyException {
+        keyGen.initialize(spec);
+        keys = keyGen.generateKeyPair();
+        ka.init(keys.getPrivate());
+    }
+
+    public Key doPhase(Key key, boolean lastPhase) throws InvalidKeyException {
+        return ka.doPhase(key, lastPhase);
+    }
+
+    public Key getPublicKey() {
+        return keys.getPublic();
+    }
+
+    public byte[] generateSecret() {
+        return ka.generateSecret();
+    }
+
+    public SecretKey generateSecret(String algo) throws java.lang.IllegalStateException,
+            java.security.NoSuchAlgorithmException,
+            java.security.InvalidKeyException {
+        return ka.generateSecret(algo);
+    }
+}
--- a/test/com/sun/management/GarbageCollectorMXBean/GarbageCollectionNotificationContentTest.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/test/com/sun/management/GarbageCollectorMXBean/GarbageCollectionNotificationContentTest.java	Tue Dec 23 13:58:34 2014 -0800
@@ -26,6 +26,7 @@
  * @bug     7036199
  * @summary Check that GarbageCollectionNotification contents are reasonable
  * @author  Frederic Parain
+ * @requires vm.opt.ExplicitGCInvokesConcurrent == null | vm.opt.ExplicitGCInvokesConcurrent == false
  * @run     main/othervm GarbageCollectionNotificationContentTest
  */
 
--- a/test/com/sun/management/GarbageCollectorMXBean/GarbageCollectionNotificationTest.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/test/com/sun/management/GarbageCollectorMXBean/GarbageCollectionNotificationTest.java	Tue Dec 23 13:58:34 2014 -0800
@@ -26,6 +26,7 @@
  * @bug     7036199
  * @summary Check that GarbageCollection notification are thrown by every GarbageCollectorMXBean
  * @author  Frederic Parain
+ * @requires vm.opt.ExplicitGCInvokesConcurrent == null | vm.opt.ExplicitGCInvokesConcurrent == false
  * @run     main/othervm GarbageCollectionNotificationTest
  */
 
--- a/test/com/sun/tools/attach/StartManagementAgent.java	Thu Dec 18 19:57:52 2014 -0800
+++ b/test/com/sun/tools/attach/StartManagementAgent.java	Tue Dec 23 13:58:34 2014 -0800
@@ -41,7 +41,7 @@
  * @summary Test for VirtualMachine.startManagementAgent and VirtualMachine.startLocalManagementAgent
  * @library /lib/testlibrary
  * @run build Application SimpleProvider jdk.testlibrary.*
- * @run main StartManagementAgent
+ * @run main/timeout=300 StartManagementAgent
  */
 
 /*
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/awt/Choice/DragMouseOutAndRelease/DragMouseOutAndRelease.java	Tue Dec 23 13:58:34 2014 -0800
@@ -0,0 +1,421 @@
+/*
+ * Copyright (c) 2006, 2014, 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.
+ *
+ * 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.
+ */
+/*
+  @test
+  @bug 6322625
+  @summary REG:Choice does not trigger MouseReleased when dragging and releasing the mouse outside choice, XAWT
+  @author andrei.dmitriev area=awt.choice
+  @run main DragMouseOutAndRelease
+*/
+
+import java.awt.*;
+import java.awt.event.*;
+
+public class DragMouseOutAndRelease
+{
+    static Frame frame = new Frame("Test Frame");
+    static Choice choice1 = new Choice();
+    static Robot robot;
+    static Point pt;
+    static volatile boolean mousePressed = false;
+    static volatile boolean mouseReleased = false;
+
+    private static void init()
+    {
+        String[] instructions =
+        {
+            "This is an AUTOMATIC test, simply wait until it is done.",
+            "The result (passed or failed) will be shown in the",
+            "message window below."
+        };
+        Sysout.createDialog( );
+        Sysout.printInstructions( instructions );
+
+        frame.setLayout (new FlowLayout ());
+        for (int i = 1; i<10;i++){
+            choice1.add("item "+i);
+        }
+        frame.add(choice1);
+
+        choice1.addMouseListener(new MouseAdapter() {
+                public void mousePressed(MouseEvent me) {
+                    mousePressed = true;
+                    System.out.println(me);
+                }
+                public void mouseReleased(MouseEvent me) {
+                    mouseReleased = true;
+                    System.out.println(me);
+                }
+            });
+
+        frame.pack();
+        frame.setVisible(true);
+        frame.validate();
+
+        try {
+            robot = new Robot();
+            robot.setAutoDelay(50);
+            robot.waitForIdle();
+            testMouseDrag();
+        } catch (Throwable e) {
+            new RuntimeException("Test failed. Exception thrown: "+e);
+        }
+        DragMouseOutAndRelease.pass();
+    }//End  init()
+
+    public static void testMouseDrag(){
+        mousePressed = false;
+        mouseReleased = false;
+
+        pt = choice1.getLocationOnScreen();
+        robot.mouseMove(pt.x + choice1.getWidth()/2, pt.y + choice1.getHeight()/2);
+        robot.waitForIdle();
+        robot.mousePress(InputEvent.BUTTON1_MASK);
+        robot.waitForIdle();
+
+
+        //move mouse outside Choice
+        robot.mouseMove(pt.x + choice1.getWidth()/2, pt.y - choice1.getHeight());
+        robot.waitForIdle();
+        robot.mouseRelease(InputEvent.BUTTON1_MASK);
+        robot.waitForIdle();
+
+        if (!mousePressed || !mouseReleased)
+        {
+            System.out.println("ERROR: "+ mousePressed+","+mouseReleased);
+            // close the choice
+            robot.keyPress(KeyEvent.VK_ESCAPE);
+            robot.keyRelease(KeyEvent.VK_ESCAPE);
+            robot.waitForIdle();
+            DragMouseOutAndRelease.fail("Test failed. Choice should generate PRESSED, RELEASED events outside if pressed on Choice ");
+        } else{
+            // close the choice
+            robot.keyPress(KeyEvent.VK_ESCAPE);
+            robot.keyRelease(KeyEvent.VK_ESCAPE);
+            robot.waitForIdle();
+            System.out.println("Choice did generated PRESSED and RELEASED after Drag outside the Choice ");
+        }
+    }
+
+
+
+    /*****************************************************
+     * Standard Test Machinery Section
+     * DO NOT modify anything in this section -- it's a
+     * standard chunk of code which has all of the
+     * synchronisation necessary for the test harness.
+     * By keeping it the same in all tests, it is easier
+     * to read and understand someone else's test, as
+     * well as insuring that all tests behave correctly
+     * with the test harness.
+     * There is a section following this for test-
+     * classes
+     ******************************************************/
+    private static boolean theTestPassed = false;
+    private static boolean testGeneratedInterrupt = false;
+    private static String failureMessage = "";
+
+    private static Thread mainThread = null;
+
+    private static int sleepTime = 300000;
+
+    // Not sure about what happens if multiple of this test are
+    //  instantiated in the same VM.  Being static (and using
+    //  static vars), it aint gonna work.  Not worrying about
+    //  it for now.
+    public static void main( String args[] ) throws InterruptedException
+    {
+        mainThread = Thread.currentThread();
+        try
+        {
+            init();
+        }
+        catch( TestPassedException e )
+        {
+            //The test passed, so just return from main and harness will
+            // interepret this return as a pass
+            return;
+        }
+        //At this point, neither test pass nor test fail has been
+        // called -- either would have thrown an exception and ended the
+        // test, so we know we have multiple threads.
+
+        //Test involves other threads, so sleep and wait for them to
+        // called pass() or fail()
+        try
+        {
+            Thread.sleep( sleepTime );
+            //Timed out, so fail the test
+            throw new RuntimeException( "Timed out after " + sleepTime/1000 + " seconds" );
+        }
+        catch (InterruptedException e)
+        {
+            //The test harness may have interrupted the test.  If so, rethrow the exception
+            // so that the harness gets it and deals with it.
+            if( ! testGeneratedInterrupt ) throw e;
+
+            //reset flag in case hit this code more than once for some reason (just safety)
+            testGeneratedInterrupt = false;
+
+            if ( theTestPassed == false )
+            {
+                throw new RuntimeException( failureMessage );
+            }
+        }
+
+    }//main
+
+    public static synchronized void setTimeoutTo( int seconds )
+    {
+        sleepTime = seconds * 1000;
+    }
+
+    public static synchronized void pass()
+    {
+        Sysout.println( "The test passed." );
+        Sysout.println( "The test is over, hit  Ctl-C to stop Java VM" );
+        //first check if this is executing in main thread
+        if ( mainThread == Thread.currentThread() )
+        {
+            //Still in the main thread, so set the flag just for kicks,
+            // and throw a test passed exception which will be caught
+            // and end the test.
+            theTestPassed = true;
+            throw new TestPassedException();
+        }
+        theTestPassed = true;
+        testGeneratedInterrupt = true;
+        mainThread.interrupt();
+    }//pass()
+
+    public static synchronized void fail()
+    {
+        //test writer didn't specify why test failed, so give generic
+        fail( "it just plain failed! :-)" );
+    }
+
+    public static synchronized void fail( String whyFailed )
+    {
+        Sysout.println( "The test failed: " + whyFailed );
+        Sysout.println( "The test is over, hit  Ctl-C to stop Java VM" );
+        //check if this called from main thread
+        if ( mainThread == Thread.currentThread() )
+        {
+            //If main thread, fail now 'cause not sleeping
+            throw new RuntimeException( whyFailed );
+        }
+        theTestPassed = false;
+        testGeneratedInterrupt = true;
+        failureMessage = whyFailed;
+        mainThread.interrupt();
+    }//fail()
+
+}// class DragMouseOutAndRelease
+
+//This exception is used to exit from any level of call nesting
+// when it's determined that the test has passed, and immediately
+// end the test.
+class TestPassedException extends RuntimeException
+{
+}
+
+//*********** End Standard Test Machinery Section **********
+
+
+//************ Begin classes defined for the test ****************
+
+// if want to make listeners, here is the recommended place for them, then instantiate
+//  them in init()
+
+/* Example of a class which may be written as part of a test
+class NewClass implements anInterface
+ {
+   static int newVar = 0;
+
+   public void eventDispatched(AWTEvent e)
+    {
+      //Counting events to see if we get enough
+      eventCount++;
+
+      if( eventCount == 20 )
+       {
+         //got enough events, so pass
+
+         DragMouseOutAndRelease.pass();
+       }
+      else if( tries == 20 )
+       {
+         //tried too many times without getting enough events so fail
+
+         DragMouseOutAndRelease.fail();
+       }
+
+    }// eventDispatched()
+
+ }// NewClass class
+
+*/
+
+
+//************** End classes defined for the test *******************
+
+
+
+
+/****************************************************
+ Standard Test Machinery
+ DO NOT modify anything below -- it's a standard
+  chunk of code whose purpose is to make user
+  interaction uniform, and thereby make it simpler
+  to read and understand someone else's test.
+ ****************************************************/
+
+/**