changeset 1442:a50217eb3ee1 jdk7-b64

Merge
author jqzuo
date Thu, 09 Jul 2009 13:53:05 -0400
parents c51ead46c547 (current diff) 1a52b17a18d2 (diff)
children 382a27aa78d3 6d92ce5fe15b 913ad033bb37 837bb8760bad
files src/share/classes/sun/swing/AccessibleMethod.java
diffstat 62 files changed, 1385 insertions(+), 557 deletions(-) [+]
line wrap: on
line diff
--- a/make/docs/CORE_PKGS.gmk	Mon Jul 06 14:10:31 2009 -0400
+++ b/make/docs/CORE_PKGS.gmk	Thu Jul 09 13:53:05 2009 -0400
@@ -217,6 +217,7 @@
   javax.swing.plaf.basic                         \
   javax.swing.plaf.metal                         \
   javax.swing.plaf.multi                         \
+  javax.swing.plaf.nimbus                        \
   javax.swing.plaf.synth                         \
   javax.tools                                    \
   javax.transaction                              \
--- a/make/sun/xawt/mapfile-vers	Mon Jul 06 14:10:31 2009 -0400
+++ b/make/sun/xawt/mapfile-vers	Thu Jul 09 13:53:05 2009 -0400
@@ -125,6 +125,7 @@
         Java_sun_awt_X11_XlibWrapper_XFree;
         Java_sun_awt_X11_XlibWrapper_ServerVendor;
         Java_sun_awt_X11_XlibWrapper_VendorRelease;
+        Java_sun_awt_X11_XlibWrapper_IsXsunKPBehavior;
         Java_sun_awt_X11_XlibWrapper_SetToolkitErrorHandler;
         Java_sun_awt_X11_XlibWrapper_XSetErrorHandler;
         Java_sun_awt_X11_XlibWrapper_CallErrorHandler;
--- a/src/share/classes/com/sun/java/swing/SwingUtilities3.java	Mon Jul 06 14:10:31 2009 -0400
+++ b/src/share/classes/com/sun/java/swing/SwingUtilities3.java	Thu Jul 09 13:53:05 2009 -0400
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2008 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 2002-2009 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -27,13 +27,17 @@
 
 import sun.awt.EventQueueDelegate;
 import sun.awt.AppContext;
+import java.util.Collections;
 import java.util.Map;
+import java.util.WeakHashMap;
 import java.util.concurrent.Callable;
 import java.awt.AWTEvent;
 import java.awt.EventQueue;
 import java.awt.Component;
+import java.awt.Container;
 import javax.swing.JComponent;
 import javax.swing.RepaintManager;
+import javax.swing.SwingUtilities;
 
 /**
  * A collection of utility methods for Swing.
@@ -69,6 +73,43 @@
                                     repaintManager);
     }
 
+    private static final Map<Container, Boolean> vsyncedMap =
+        Collections.synchronizedMap(new WeakHashMap<Container, Boolean>());
+
+    /**
+     * Sets vsyncRequested state for the {@code rootContainer}.  If
+     * {@code isRequested} is {@code true} then vsynced
+     * {@code BufferStrategy} is enabled for this {@code rootContainer}.
+     *
+     * Note: requesting vsynced painting does not guarantee one. The outcome
+     * depends on current RepaintManager's RepaintManager.PaintManager
+     * and on the capabilities of the graphics hardware/software and what not.
+     *
+     * @param rootContainer topmost container. Should be either {@code Window}
+     *  or {@code Applet}
+     * @param isRequested the value to set vsyncRequested state to
+     */
+    public static void setVsyncRequested(Container rootContainer,
+                                         boolean isRequested) {
+        assert SwingUtilities.getRoot(rootContainer) == rootContainer;
+        if (isRequested) {
+            vsyncedMap.put(rootContainer, Boolean.TRUE);
+        } else {
+            vsyncedMap.remove(rootContainer);
+        }
+    }
+
+    /**
+     * Checks if vsync painting is requested for {@code rootContainer}
+     *
+     * @param rootContainer topmost container. Should be either Window or Applet
+     * @return {@code true} if vsync painting is requested for {@code rootContainer}
+     */
+    public static boolean isVsyncRequested(Container rootContainer) {
+        assert SwingUtilities.getRoot(rootContainer) == rootContainer;
+        return Boolean.TRUE == vsyncedMap.get(rootContainer);
+    }
+
     /**
      * Returns delegate {@code RepaintManager} for {@code component} hierarchy.
      */
--- a/src/share/classes/com/sun/java/swing/plaf/gtk/GTKLookAndFeel.java	Mon Jul 06 14:10:31 2009 -0400
+++ b/src/share/classes/com/sun/java/swing/plaf/gtk/GTKLookAndFeel.java	Thu Jul 09 13:53:05 2009 -0400
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2008 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 2002-2009 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -139,7 +139,7 @@
                                     });
                     isSunDesktop = val.booleanValue();
             }
-            if (isSunDesktop) {
+            if (isSunDesktop && !sun.java2d.SunGraphicsEnvironment.isOpenSolaris) {
                 isSunCJK = true;
             }
         }
--- a/src/share/classes/java/awt/AWTEvent.java	Mon Jul 06 14:10:31 2009 -0400
+++ b/src/share/classes/java/awt/AWTEvent.java	Thu Jul 09 13:53:05 2009 -0400
@@ -32,6 +32,7 @@
 import java.lang.reflect.Field;
 import java.util.logging.Logger;
 import java.util.logging.Level;
+import sun.awt.AWTAccessor;
 
 /**
  * The root event class for all AWT events.
@@ -230,6 +231,12 @@
         if (!GraphicsEnvironment.isHeadless()) {
             initIDs();
         }
+        AWTAccessor.setAWTEventAccessor(
+            new AWTAccessor.AWTEventAccessor() {
+                public void setPosted(AWTEvent ev) {
+                    ev.isPosted = true;
+                }
+            });
     }
 
     private static synchronized Field get_InputEvent_CanAccessSystemClipboard() {
--- a/src/share/classes/java/awt/Component.java	Mon Jul 06 14:10:31 2009 -0400
+++ b/src/share/classes/java/awt/Component.java	Thu Jul 09 13:53:05 2009 -0400
@@ -861,6 +861,17 @@
             public boolean isVisible_NoClientCode(Component comp) {
                 return comp.isVisible_NoClientCode();
             }
+            public void setRequestFocusController
+                (RequestFocusController requestController)
+            {
+                 Component.setRequestFocusController(requestController);
+            }
+            public AppContext getAppContext(Component comp) {
+                 return comp.appContext;
+            }
+            public void setAppContext(Component comp, AppContext appContext) {
+                 comp.appContext = appContext;
+            }
         });
     }
 
@@ -9824,31 +9835,6 @@
 
     // ****************** END OF MIXING CODE ********************************
 
-    private static boolean doesClassImplement(Class cls, String interfaceName) {
-        if (cls == null) return false;
-
-        for (Class c : cls.getInterfaces()) {
-            if (c.getName().equals(interfaceName)) {
-                return true;
-            }
-        }
-        return doesClassImplement(cls.getSuperclass(), interfaceName);
-    }
-
-    /**
-     * Checks that the given object implements the given interface.
-     * @param obj Object to be checked
-     * @param interfaceName The name of the interface. Must be fully-qualified interface name.
-     * @return true, if this object implements the given interface,
-     *         false, otherwise, or if obj or interfaceName is null
-     */
-    static boolean doesImplement(Object obj, String interfaceName) {
-        if (obj == null) return false;
-        if (interfaceName == null) return false;
-
-        return doesClassImplement(obj.getClass(), interfaceName);
-    }
-
     // Note that the method is overriden in the Window class,
     // a window doesn't need to be updated in the Z-order.
     void updateZOrder() {
--- a/src/share/classes/java/awt/ContainerOrderFocusTraversalPolicy.java	Mon Jul 06 14:10:31 2009 -0400
+++ b/src/share/classes/java/awt/ContainerOrderFocusTraversalPolicy.java	Thu Jul 09 13:53:05 2009 -0400
@@ -425,15 +425,13 @@
             }
             if (log.isLoggable(Level.FINE)) log.fine("### Cycle is " + cycle);
 
-            for (int i = 0; i < cycle.size(); i++) {
-                Component comp = cycle.get(i);
+            for (Component comp : cycle) {
                 if (accept(comp)) {
                     return comp;
-                } else if (comp instanceof Container && comp != aContainer) {
-                    Container cont = (Container)comp;
-                    if (cont.isFocusTraversalPolicyProvider()) {
-                        return cont.getFocusTraversalPolicy().getDefaultComponent(cont);
-                    }
+                } else if (comp != aContainer &&
+                           (comp = getComponentDownCycle(comp, FORWARD_TRAVERSAL)) != null)
+                {
+                    return comp;
                 }
             }
         }
--- a/src/share/classes/java/awt/Dialog.java	Mon Jul 06 14:10:31 2009 -0400
+++ b/src/share/classes/java/awt/Dialog.java	Thu Jul 09 13:53:05 2009 -0400
@@ -262,12 +262,6 @@
         TOOLKIT_EXCLUDE
     };
 
-    /**
-     * @since 1.6
-     */
-    private final static ModalExclusionType DEFAULT_MODAL_EXCLUSION_TYPE =
-        ModalExclusionType.APPLICATION_EXCLUDE;
-
     /* operations with this list should be synchronized on tree lock*/
     transient static IdentityArrayList<Dialog> modalDialogs = new IdentityArrayList<Dialog>();
 
--- a/src/share/classes/java/awt/EventQueue.java	Mon Jul 06 14:10:31 2009 -0400
+++ b/src/share/classes/java/awt/EventQueue.java	Thu Jul 09 13:53:05 2009 -0400
@@ -43,6 +43,7 @@
 import sun.awt.PeerEvent;
 import sun.awt.SunToolkit;
 import sun.awt.EventQueueItem;
+import sun.awt.AWTAccessor;
 
 /**
  * <code>EventQueue</code> is a platform-independent class
@@ -154,6 +155,18 @@
 
     private static final Logger eventLog = Logger.getLogger("java.awt.event.EventQueue");
 
+    static {
+        AWTAccessor.setEventQueueAccessor(
+            new AWTAccessor.EventQueueAccessor() {
+                public EventQueue getNextQueue(EventQueue eventQueue) {
+                    return eventQueue.nextQueue;
+                }
+                public Thread getDispatchThread(EventQueue eventQueue) {
+                    return eventQueue.dispatchThread;
+                }
+            });
+    }
+
     public EventQueue() {
         for (int i = 0; i < NUM_PRIORITIES; i++) {
             queues[i] = new Queue();
--- a/src/share/classes/java/awt/MenuComponent.java	Mon Jul 06 14:10:31 2009 -0400
+++ b/src/share/classes/java/awt/MenuComponent.java	Thu Jul 09 13:53:05 2009 -0400
@@ -30,6 +30,7 @@
 import java.io.ObjectInputStream;
 import sun.awt.AppContext;
 import sun.awt.SunToolkit;
+import sun.awt.AWTAccessor;
 import javax.accessibility.*;
 
 /**
@@ -109,6 +110,22 @@
      */
     private static final long serialVersionUID = -4536902356223894379L;
 
+    static {
+        AWTAccessor.setMenuComponentAccessor(
+            new AWTAccessor.MenuComponentAccessor() {
+                public AppContext getAppContext(MenuComponent menuComp) {
+                    return menuComp.appContext;
+                }
+                public void setAppContext(MenuComponent menuComp,
+                                          AppContext appContext) {
+                    menuComp.appContext = appContext;
+                }
+                public MenuContainer getParent(MenuComponent menuComp) {
+                    return menuComp.parent;
+                }
+            });
+    }
+
     /**
      * Creates a <code>MenuComponent</code>.
      * @exception HeadlessException if
--- a/src/share/classes/java/awt/PopupMenu.java	Mon Jul 06 14:10:31 2009 -0400
+++ b/src/share/classes/java/awt/PopupMenu.java	Thu Jul 09 13:53:05 2009 -0400
@@ -28,6 +28,7 @@
 import java.awt.peer.PopupMenuPeer;
 import javax.accessibility.*;
 
+import sun.awt.AWTAccessor;
 
 /**
  * A class that implements a menu which can be dynamically popped up
@@ -48,6 +49,15 @@
 
     transient boolean isTrayIconPopup = false;
 
+    static {
+        AWTAccessor.setPopupMenuAccessor(
+            new AWTAccessor.PopupMenuAccessor() {
+                public boolean isTrayIconPopup(PopupMenu popupMenu) {
+                    return popupMenu.isTrayIconPopup;
+                }
+            });
+    }
+
     /*
      * JDK 1.1 serialVersionUID
      */
--- a/src/share/classes/java/awt/Window.java	Mon Jul 06 14:10:31 2009 -0400
+++ b/src/share/classes/java/awt/Window.java	Thu Jul 09 13:53:05 2009 -0400
@@ -3658,7 +3658,7 @@
     private static void setLayersOpaque(Component component, boolean isOpaque) {
         // Shouldn't use instanceof to avoid loading Swing classes
         //    if it's a pure AWT application.
-        if (Component.doesImplement(component, "javax.swing.RootPaneContainer")) {
+        if (SunToolkit.isInstanceOf(component, "javax.swing.RootPaneContainer")) {
             javax.swing.RootPaneContainer rpc = (javax.swing.RootPaneContainer)component;
             javax.swing.JRootPane root = rpc.getRootPane();
             javax.swing.JLayeredPane lp = root.getLayeredPane();
@@ -3797,6 +3797,10 @@
             {
                 return window.calculateSecurityWarningPosition(x, y, w, h);
             }
+
+            public void setLWRequestStatus(Window changed, boolean status) {
+                changed.syncLWRequests = status;
+            }
         }); // WindowAccessor
     } // static
 
--- a/src/share/classes/java/beans/MetaData.java	Mon Jul 06 14:10:31 2009 -0400
+++ b/src/share/classes/java/beans/MetaData.java	Thu Jul 09 13:53:05 2009 -0400
@@ -93,7 +93,7 @@
 
     protected Expression instantiate(Object oldInstance, Encoder out) {
         Enum e = (Enum) oldInstance;
-        return new Expression(e, Enum.class, "valueOf", new Object[]{e.getClass(), e.name()});
+        return new Expression(e, Enum.class, "valueOf", new Object[]{e.getDeclaringClass(), e.name()});
     }
 }
 
--- a/src/share/classes/java/text/SimpleDateFormat.java	Mon Jul 06 14:10:31 2009 -0400
+++ b/src/share/classes/java/text/SimpleDateFormat.java	Thu Jul 09 13:53:05 2009 -0400
@@ -1030,9 +1030,9 @@
 
         case 1: // 'y' - YEAR
             if (calendar instanceof GregorianCalendar) {
-                if (count >= 4)
+                if (count != 2)
                     zeroPaddingNumber(value, count, maxIntCount, buffer);
-                else // count < 4
+                else // count == 2
                     zeroPaddingNumber(value, 2, 2, buffer); // clip 1996 to 96
             } else {
                 if (current == null) {
--- a/src/share/classes/javax/swing/BufferStrategyPaintManager.java	Mon Jul 06 14:10:31 2009 -0400
+++ b/src/share/classes/javax/swing/BufferStrategyPaintManager.java	Thu Jul 09 13:53:05 2009 -0400
@@ -1,5 +1,5 @@
 /*
- * Copyright 2005-2008 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 2005-2009 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -33,9 +33,14 @@
 import java.security.AccessController;
 import java.util.*;
 import java.util.logging.*;
+
+import com.sun.java.swing.SwingUtilities3;
+
 import sun.awt.SubRegionShowable;
 import sun.java2d.SunGraphics2D;
 import sun.security.action.GetPropertyAction;
+import sun.java2d.pipe.hw.ExtendedBufferCapabilities;
+import sun.awt.SunToolkit;
 
 /**
  * A PaintManager implementation that uses a BufferStrategy for
@@ -73,12 +78,6 @@
     private static Method COMPONENT_CREATE_BUFFER_STRATEGY_METHOD;
     private static Method COMPONENT_GET_BUFFER_STRATEGY_METHOD;
 
-    /**
-     * Indicates whether or not we should try and get a flip buffer strategy
-     * first, default is false.
-     */
-    private static boolean TRY_FLIP;
-
     private static final Logger LOGGER = Logger.getLogger(
                            "javax.swing.BufferStrategyPaintManager");
 
@@ -151,12 +150,6 @@
      */
     private boolean disposeBufferOnEnd;
 
-
-    static {
-        TRY_FLIP = "true".equals(AccessController.doPrivileged(
-              new GetPropertyAction("swing.useFlipBufferStrategy", "false")));
-    }
-
     private static Method getGetBufferStrategyMethod() {
         if (COMPONENT_GET_BUFFER_STRATEGY_METHOD == null) {
             getMethods();
@@ -257,7 +250,7 @@
         try {
             BufferInfo info = getBufferInfo(c);
             BufferStrategy bufferStrategy;
-            if (info != null && !info.usingFlip && info.isInSync() &&
+            if (info != null && info.isInSync() &&
                 (bufferStrategy = info.getBufferStrategy(false)) != null) {
                 SubRegionShowable bsSubRegion =
                         (SubRegionShowable)bufferStrategy;
@@ -579,8 +572,9 @@
         rootJ = c;
         root = c;
         xOffset = yOffset = 0;
-        while (root != null && (!(root instanceof Window) &&
-                                !(root instanceof Applet))) {
+        while (root != null &&
+               (!(root instanceof Window) &&
+                !SunToolkit.isInstanceOf(root, "java.applet.Applet"))) {
             xOffset += root.getX();
             yOffset += root.getY();
             root = root.getParent();
@@ -685,8 +679,6 @@
         // same reason.
         private WeakReference<BufferStrategy> weakBS;
         private WeakReference<Container> root;
-        // Whether or not we're using flip bs or blit.
-        private boolean usingFlip;
         // Indicates whether or not the backbuffer and display are in sync.
         // This is set to true when a full repaint on the rootpane is done.
         private boolean inSync;
@@ -764,13 +756,6 @@
         }
 
         /**
-         * Returns true if using a flip buffer strategy.
-         */
-        public boolean usingFlip() {
-            return usingFlip;
-        }
-
-        /**
          * Returns true if the buffer strategy of the component differs
          * from current buffer strategy.
          */
@@ -814,23 +799,19 @@
          * blit.
          */
         private BufferStrategy createBufferStrategy() {
-            BufferCapabilities caps;
             Container root = getRoot();
             if (root == null) {
                 return null;
             }
             BufferStrategy bs = null;
-            if (TRY_FLIP) {
-                bs = createBufferStrategy(root,BufferCapabilities.FlipContents.
-                                          COPIED);
-                usingFlip = true;
+            if (SwingUtilities3.isVsyncRequested(root)) {
+                bs = createBufferStrategy(root, true);
                 if (LOGGER.isLoggable(Level.FINER)) {
-                    LOGGER.finer("createBufferStrategy: using flip strategy");
+                    LOGGER.finer("createBufferStrategy: using vsynced strategy");
                 }
             }
             if (bs == null) {
-                bs = createBufferStrategy(root, null);
-                usingFlip = false;
+                bs = createBufferStrategy(root, false);
             }
             if (!(bs instanceof SubRegionShowable)) {
                 // We do this for two reasons:
@@ -843,17 +824,24 @@
             return bs;
         }
 
-        // Creates and returns a buffer strategy of the requested type.  If
+        // Creates and returns a buffer strategy.  If
         // there is a problem creating the buffer strategy this will
         // eat the exception and return null.
         private BufferStrategy createBufferStrategy(Container root,
-                                     BufferCapabilities.FlipContents type) {
-            BufferCapabilities caps = new BufferCapabilities(
-                    new ImageCapabilities(true),
-                    new ImageCapabilities(true),
-                    type);
+                boolean isVsynced) {
+            BufferCapabilities caps;
+            if (isVsynced) {
+                caps = new ExtendedBufferCapabilities(
+                    new ImageCapabilities(true), new ImageCapabilities(true),
+                    BufferCapabilities.FlipContents.COPIED,
+                    ExtendedBufferCapabilities.VSyncType.VSYNC_ON);
+            } else {
+                caps = new BufferCapabilities(
+                    new ImageCapabilities(true), new ImageCapabilities(true),
+                    null);
+            }
             BufferStrategy bs = null;
-            if (root instanceof Applet) {
+            if (SunToolkit.isInstanceOf(root, "java.applet.Applet")) {
                 try {
                     getCreateBufferStrategyMethod().invoke(root, 2, caps);
                     bs = (BufferStrategy)getGetBufferStrategyMethod().
--- a/src/share/classes/javax/swing/JLayeredPane.java	Mon Jul 06 14:10:31 2009 -0400
+++ b/src/share/classes/javax/swing/JLayeredPane.java	Thu Jul 09 13:53:05 2009 -0400
@@ -30,6 +30,7 @@
 import java.awt.Color;
 import java.awt.Graphics;
 import java.awt.Rectangle;
+import sun.awt.SunToolkit;
 
 import javax.accessibility.*;
 
@@ -195,9 +196,12 @@
 
             for (Component c : getComponents()) {
                 layer = null;
-                if(c instanceof JInternalFrame || (c instanceof JComponent &&
-                         (layer = (Integer)((JComponent)c).getClientProperty(
-                          LAYER_PROPERTY)) != null)) {
+
+                if(SunToolkit.isInstanceOf(c, "javax.swing.JInternalFrame") ||
+                       (c instanceof JComponent &&
+                        (layer = (Integer)((JComponent)c).
+                                     getClientProperty(LAYER_PROPERTY)) != null))
+                {
                     if(layer != null && layer.equals(FRAME_CONTENT_LAYER))
                         continue;
                     layeredComponentFound = true;
--- a/src/share/classes/javax/swing/LayoutFocusTraversalPolicy.java	Mon Jul 06 14:10:31 2009 -0400
+++ b/src/share/classes/javax/swing/LayoutFocusTraversalPolicy.java	Thu Jul 09 13:53:05 2009 -0400
@@ -29,6 +29,7 @@
 import java.awt.ComponentOrientation;
 import java.util.Comparator;
 import java.io.*;
+import sun.awt.SunToolkit;
 
 
 /**
@@ -226,11 +227,11 @@
      protected boolean accept(Component aComponent) {
         if (!super.accept(aComponent)) {
             return false;
-        } else if (aComponent instanceof JTable) {
+        } else if (SunToolkit.isInstanceOf(aComponent, "javax.swing.JTable")) {
             // JTable only has ancestor focus bindings, we thus force it
             // to be focusable by returning true here.
             return true;
-        } else if (aComponent instanceof JComboBox) {
+        } else if (SunToolkit.isInstanceOf(aComponent, "javax.swing.JComboBox")) {
             JComboBox box = (JComboBox)aComponent;
             return box.getUI().isFocusTraversable(box);
         } else if (aComponent instanceof JComponent) {
--- a/src/share/classes/javax/swing/LookAndFeel.java	Mon Jul 06 14:10:31 2009 -0400
+++ b/src/share/classes/javax/swing/LookAndFeel.java	Thu Jul 09 13:53:05 2009 -0400
@@ -32,6 +32,7 @@
 import java.awt.Component;
 import java.awt.SystemColor;
 import java.awt.Toolkit;
+import sun.awt.SunToolkit;
 
 import javax.swing.text.*;
 import javax.swing.border.*;
@@ -271,7 +272,7 @@
         // this is a special case because the JPasswordField's ancestor heirarchy
         // includes a class outside of javax.swing, thus we cannot call setUIProperty
         // directly.
-        if (c instanceof JPasswordField) {
+        if (SunToolkit.isInstanceOf(c, "javax.swing.JPasswordField")) {
             if (!((JPasswordField)c).customSetUIProperty(propertyName, propertyValue)) {
                 c.setUIProperty(propertyName, propertyValue);
             }
--- a/src/share/classes/javax/swing/SortingFocusTraversalPolicy.java	Mon Jul 06 14:10:31 2009 -0400
+++ b/src/share/classes/javax/swing/SortingFocusTraversalPolicy.java	Thu Jul 09 13:53:05 2009 -0400
@@ -444,11 +444,10 @@
         for (Component comp : cycle) {
             if (accept(comp)) {
                 return comp;
-            } else if (comp instanceof Container && comp != aContainer) {
-                Container cont = (Container)comp;
-                if (cont.isFocusTraversalPolicyProvider()) {
-                    return cont.getFocusTraversalPolicy().getDefaultComponent(cont);
-                }
+            } else if (comp != aContainer &&
+                       (comp = getComponentDownCycle(comp, FORWARD_TRAVERSAL)) != null)
+            {
+                return comp;
             }
         }
         return null;
--- a/src/share/classes/javax/swing/TransferHandler.java	Mon Jul 06 14:10:31 2009 -0400
+++ b/src/share/classes/javax/swing/TransferHandler.java	Thu Jul 09 13:53:05 2009 -0400
@@ -40,6 +40,7 @@
 import sun.swing.SwingUtilities2;
 import sun.awt.AppContext;
 import sun.swing.*;
+import sun.awt.SunToolkit;
 
 /**
  * This class is used to handle the transfer of a <code>Transferable</code>
@@ -283,19 +284,9 @@
                           ? ((DropTargetDragEvent)source).getLocation()
                           : ((DropTargetDropEvent)source).getLocation();
 
-            if (component instanceof JTextComponent) {
-                try {
-                    AccessibleMethod method
-                        = new AccessibleMethod(JTextComponent.class,
-                                               "dropLocationForPoint",
-                                               Point.class);
-
-                    dropLocation =
-                        (DropLocation)method.invokeNoChecked(component, p);
-                } catch (NoSuchMethodException e) {
-                    throw new AssertionError(
-                        "Couldn't locate method JTextComponent.dropLocationForPoint");
-                }
+            if (SunToolkit.isInstanceOf(component, "javax.swing.text.JTextComponent")) {
+                dropLocation = SwingAccessor.getJTextComponentAccessor().
+                                   dropLocationForPoint((JTextComponent)component, p);
             } else if (component instanceof JComponent) {
                 dropLocation = ((JComponent)component).dropLocationForPoint(p);
             }
@@ -1373,22 +1364,9 @@
                                         ? null
                                         : support.getDropLocation();
 
-            if (component instanceof JTextComponent) {
-                try {
-                    AccessibleMethod method =
-                        new AccessibleMethod(JTextComponent.class,
-                                             "setDropLocation",
-                                             DropLocation.class,
-                                             Object.class,
-                                             Boolean.TYPE);
-
-                    state =
-                        method.invokeNoChecked(component, dropLocation,
-                                               state, forDrop);
-                } catch (NoSuchMethodException e) {
-                    throw new AssertionError(
-                        "Couldn't locate method JTextComponet.setDropLocation");
-                }
+            if (SunToolkit.isInstanceOf(component, "javax.swing.text.JTextComponent")) {
+                state = SwingAccessor.getJTextComponentAccessor().
+                            setDropLocation((JTextComponent)component, dropLocation, state, forDrop);
             } else if (component instanceof JComponent) {
                 state = ((JComponent)component).setDropLocation(dropLocation, state, forDrop);
             }
--- a/src/share/classes/javax/swing/UIManager.java	Mon Jul 06 14:10:31 2009 -0400
+++ b/src/share/classes/javax/swing/UIManager.java	Thu Jul 09 13:53:05 2009 -0400
@@ -60,6 +60,7 @@
 import java.lang.reflect.Method;
 import java.util.HashMap;
 import sun.awt.AppContext;
+import sun.awt.AWTAccessor;
 
 
 /**
@@ -1472,21 +1473,7 @@
                         return false;
                     }
                 });
-        try {
-            Method setRequestFocusControllerM = java.security.AccessController.doPrivileged(
-                    new java.security.PrivilegedExceptionAction<Method>() {
-                        public Method run() throws Exception {
-                            Method method =
-                            Component.class.getDeclaredMethod("setRequestFocusController",
-                                                              sun.awt.RequestFocusController.class);
-                            method.setAccessible(true);
-                            return method;
-                        }
-                    });
-            setRequestFocusControllerM.invoke(null, JComponent.focusController);
-        } catch (Exception e) {
-            // perhaps we should log this
-            assert false;
-        }
+        AWTAccessor.getComponentAccessor().
+            setRequestFocusController(JComponent.focusController);
     }
 }
--- a/src/share/classes/javax/swing/plaf/basic/BasicInternalFrameUI.java	Mon Jul 06 14:10:31 2009 -0400
+++ b/src/share/classes/javax/swing/plaf/basic/BasicInternalFrameUI.java	Thu Jul 09 13:53:05 2009 -0400
@@ -1,5 +1,5 @@
 /*
- * Copyright 1997-2008 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 1997-2009 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -683,6 +683,7 @@
                 }
                 getDesktopManager().endResizingFrame(frame);
                 resizing = false;
+                updateFrameCursor();
             }
             _x = 0;
             _y = 0;
--- a/src/share/classes/javax/swing/plaf/nimbus/AbstractRegionPainter.java	Mon Jul 06 14:10:31 2009 -0400
+++ b/src/share/classes/javax/swing/plaf/nimbus/AbstractRegionPainter.java	Thu Jul 09 13:53:05 2009 -0400
@@ -31,7 +31,6 @@
 import javax.swing.plaf.UIResource;
 import javax.swing.Painter;
 import java.awt.print.PrinterGraphics;
-import static javax.swing.plaf.nimbus.NimbusLookAndFeel.deriveARGB;
 
 /**
  * Convenient base class for defining Painter instances for rendering a
@@ -347,7 +346,7 @@
      */
     protected final Color decodeColor(Color color1, Color color2,
                                       float midPoint) {
-        return new Color(deriveARGB(color1, color2, midPoint));
+        return new Color(NimbusLookAndFeel.deriveARGB(color1, color2, midPoint));
     }
 
     /**
--- a/src/share/classes/javax/swing/plaf/nimbus/Defaults.template	Mon Jul 06 14:10:31 2009 -0400
+++ b/src/share/classes/javax/swing/plaf/nimbus/Defaults.template	Thu Jul 09 13:53:05 2009 -0400
@@ -278,7 +278,7 @@
      * offset (if any), and whether it is to be bold, italic, or left in its
      * default form.</p>
      */
-    public static final class DerivedFont implements UIDefaults.ActiveValue {
+    static final class DerivedFont implements UIDefaults.ActiveValue {
         private float sizeOffset;
         private Boolean bold;
         private Boolean italic;
--- a/src/share/classes/javax/swing/plaf/nimbus/NimbusLookAndFeel.java	Mon Jul 06 14:10:31 2009 -0400
+++ b/src/share/classes/javax/swing/plaf/nimbus/NimbusLookAndFeel.java	Thu Jul 09 13:53:05 2009 -0400
@@ -436,15 +436,13 @@
      */
     static int deriveARGB(Color color1, Color color2, float midPoint) {
         int r = color1.getRed() +
-                (int) ((color2.getRed() - color1.getRed()) * midPoint + 0.5f);
+                Math.round((color2.getRed() - color1.getRed()) * midPoint);
         int g = color1.getGreen() +
-                (int) ((color2.getGreen() - color1.getGreen()) * midPoint +
-                        0.5f);
+                Math.round((color2.getGreen() - color1.getGreen()) * midPoint);
         int b = color1.getBlue() +
-                (int) ((color2.getBlue() - color1.getBlue()) * midPoint + 0.5f);
+                Math.round((color2.getBlue() - color1.getBlue()) * midPoint);
         int a = color1.getAlpha() +
-                (int) ((color2.getAlpha() - color1.getAlpha()) * midPoint +
-                        0.5f);
+                Math.round((color2.getAlpha() - color1.getAlpha()) * midPoint);
         return ((a & 0xFF) << 24) |
                 ((r & 0xFF) << 16) |
                 ((g & 0xFF) << 8) |
--- a/src/share/classes/javax/swing/plaf/nimbus/PainterImpl.template	Mon Jul 06 14:10:31 2009 -0400
+++ b/src/share/classes/javax/swing/plaf/nimbus/PainterImpl.template	Thu Jul 09 13:53:05 2009 -0400
@@ -31,7 +31,7 @@
 import javax.swing.Painter;
 
 
-public final class ${PAINTER_NAME} extends AbstractRegionPainter {
+final class ${PAINTER_NAME} extends AbstractRegionPainter {
     //package private integers representing the available states that
     //this painter will paint. These are used when creating a new instance
     //of ${PAINTER_NAME} to determine which region/state is being painted
--- a/src/share/classes/javax/swing/plaf/nimbus/package.html	Mon Jul 06 14:10:31 2009 -0400
+++ b/src/share/classes/javax/swing/plaf/nimbus/package.html	Thu Jul 09 13:53:05 2009 -0400
@@ -38,7 +38,7 @@
 component states.
 
 <p>Nimbus allows customizing many of its properties, including painters, by
-altering the {@link UIDefaults} table. Here's an example:
+altering the {@link javax.swing.UIDefaults} table. Here's an example:
 <code><pre>
     UIManager.put("ProgressBar.tileWidth", myTileWidth);
     UIManager.put("ProgressBar[Enabled].backgroundPainter", myBgPainter);
--- a/src/share/classes/javax/swing/plaf/synth/SynthColorChooserUI.java	Mon Jul 06 14:10:31 2009 -0400
+++ b/src/share/classes/javax/swing/plaf/synth/SynthColorChooserUI.java	Thu Jul 09 13:53:05 2009 -0400
@@ -69,6 +69,7 @@
     }
 
     protected void installDefaults() {
+        super.installDefaults();
         updateStyle(chooser);
     }
 
--- a/src/share/classes/javax/swing/table/DefaultTableCellRenderer.java	Mon Jul 06 14:10:31 2009 -0400
+++ b/src/share/classes/javax/swing/table/DefaultTableCellRenderer.java	Thu Jul 09 13:53:05 2009 -0400
@@ -1,5 +1,5 @@
 /*
- * Copyright 1998-2005 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 1998-2009 Sun Microsystems, Inc.  All Rights Reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -118,12 +118,12 @@
         if (System.getSecurityManager() != null) {
             if (border != null) return border;
             return SAFE_NO_FOCUS_BORDER;
-        } else {
+        } else if (border != null) {
             if (noFocusBorder == null || noFocusBorder == DEFAULT_NO_FOCUS_BORDER) {
                 return border;
             }
-            return noFocusBorder;
         }
+        return noFocusBorder;
     }
 
     /**
--- a/src/share/classes/javax/swing/text/JTextComponent.java	Mon Jul 06 14:10:31 2009 -0400
+++ b/src/share/classes/javax/swing/text/JTextComponent.java	Thu Jul 09 13:53:05 2009 -0400
@@ -76,6 +76,7 @@
 import sun.swing.PrintingStatus;
 import sun.swing.SwingUtilities2;
 import sun.swing.text.TextComponentPrintable;
+import sun.swing.SwingAccessor;
 
 /**
  * <code>JTextComponent</code> is the base class for swing text
@@ -761,6 +762,23 @@
         return dropMode;
     }
 
+    static {
+        SwingAccessor.setJTextComponentAccessor(
+            new SwingAccessor.JTextComponentAccessor() {
+                public TransferHandler.DropLocation dropLocationForPoint(JTextComponent textComp,
+                                                                         Point p)
+                {
+                    return textComp.dropLocationForPoint(p);
+                }
+                public Object setDropLocation(JTextComponent textComp,
+                                              TransferHandler.DropLocation location,
+                                              Object state, boolean forDrop)
+                {
+                    return textComp.setDropLocation(location, state, forDrop);
+                }
+            });
+    }
+
 
     /**
      * Calculates a drop location in this component, representing where a
--- a/src/share/classes/sun/awt/AWTAccessor.java	Mon Jul 06 14:10:31 2009 -0400
+++ b/src/share/classes/sun/awt/AWTAccessor.java	Thu Jul 09 13:53:05 2009 -0400
@@ -30,6 +30,7 @@
 import java.awt.image.BufferedImage;
 
 import sun.misc.Unsafe;
+import java.awt.peer.ComponentPeer;
 
 /**
  * The AWTAccessor utility class.
@@ -98,6 +99,21 @@
          * any client code.
          */
         boolean isVisible_NoClientCode(Component comp);
+
+        /**
+         * Sets the RequestFocusController.
+         */
+        void setRequestFocusController(RequestFocusController requestController);
+
+        /**
+         * Returns the appContext of the component.
+         */
+        AppContext getAppContext(Component comp);
+
+        /**
+         * Sets the appContext of the component.
+         */
+        void setAppContext(Component comp, AppContext appContext);
     }
 
     /*
@@ -153,23 +169,21 @@
          */
         Point2D calculateSecurityWarningPosition(Window window,
                 double x, double y, double w, double h);
+
+        /** Sets the synchronous status of focus requests on lightweight
+         * components in the specified window to the specified value.
+         */
+        void setLWRequestStatus(Window changed, boolean status);
     }
 
     /*
      * An accessor for the AWTEvent class.
      */
     public interface AWTEventAccessor {
-        /*
-         *
-         * Sets the flag on this AWTEvent indicating that it was
-         * generated by the system.
+        /**
+         * Marks the event as posted.
          */
-        void setSystemGenerated(AWTEvent ev);
-        /*
-         *
-         * Indicates whether this AWTEvent was generated by the system.
-         */
-        boolean isSystemGenerated(AWTEvent ev);
+        void setPosted(AWTEvent ev);
     }
 
     /*
@@ -216,6 +230,51 @@
     }
 
     /*
+     * An accessor for the MenuComponent class.
+     */
+    public interface MenuComponentAccessor {
+        /**
+         * Returns the appContext of the menu component.
+         */
+        AppContext getAppContext(MenuComponent menuComp);
+
+        /**
+         * Sets the appContext of the menu component.
+         */
+        void setAppContext(MenuComponent menuComp, AppContext appContext);
+
+        /**
+         * Returns the menu container of the menu component
+         */
+        MenuContainer getParent(MenuComponent menuComp);
+    }
+
+    /*
+     * An accessor for the EventQueue class
+     */
+    public interface EventQueueAccessor {
+        /*
+         * Gets the next event queue.
+         */
+        EventQueue getNextQueue(EventQueue eventQueue);
+        /*
+         * Gets the event dispatch thread.
+         */
+        Thread getDispatchThread(EventQueue eventQueue);
+    }
+
+    /*
+     * An accessor for the PopupMenu class
+     */
+    public interface PopupMenuAccessor {
+        /*
+         * Returns whether the popup menu is attached to a tray
+         */
+        boolean isTrayIconPopup(PopupMenu popupMenu);
+    }
+
+
+    /*
      * The java.awt.Component class accessor object.
      */
     private static ComponentAccessor componentAccessor;
@@ -241,6 +300,21 @@
     private static KeyboardFocusManagerAccessor kfmAccessor;
 
     /*
+     * The java.awt.MenuComponent class accessor object.
+     */
+    private static MenuComponentAccessor menuComponentAccessor;
+
+    /*
+     * The java.awt.EventQueue class accessor object.
+     */
+    private static EventQueueAccessor eventQueueAccessor;
+
+    /*
+     * The java.awt.PopupMenu class accessor object.
+     */
+    private static PopupMenuAccessor popupMenuAccessor;
+
+    /*
      * Set an accessor object for the java.awt.Component class.
      */
     public static void setComponentAccessor(ComponentAccessor ca) {
@@ -286,6 +360,9 @@
      * Retrieve the accessor object for the java.awt.AWTEvent class.
      */
     public static AWTEventAccessor getAWTEventAccessor() {
+        if (awtEventAccessor == null) {
+            unsafe.ensureClassInitialized(AWTEvent.class);
+        }
         return awtEventAccessor;
     }
 
@@ -322,4 +399,55 @@
         }
         return kfmAccessor;
     }
+
+    /*
+     * Set an accessor object for the java.awt.MenuComponent class.
+     */
+    public static void setMenuComponentAccessor(MenuComponentAccessor mca) {
+        menuComponentAccessor = mca;
+    }
+
+    /*
+     * Retrieve the accessor object for the java.awt.MenuComponent class.
+     */
+    public static MenuComponentAccessor getMenuComponentAccessor() {
+        if (menuComponentAccessor == null) {
+            unsafe.ensureClassInitialized(MenuComponent.class);
+        }
+        return menuComponentAccessor;
+    }
+
+    /*
+     * Set an accessor object for the java.awt.EventQueue class.
+     */
+    public static void setEventQueueAccessor(EventQueueAccessor eqa) {
+        eventQueueAccessor = eqa;
+    }
+
+    /*
+     * Retrieve the accessor object for the java.awt.EventQueue class.
+     */
+    public static EventQueueAccessor getEventQueueAccessor() {
+        if (eventQueueAccessor == null) {
+            unsafe.ensureClassInitialized(EventQueue.class);
+        }
+        return eventQueueAccessor;
+    }
+
+    /*
+     * Set an accessor object for the java.awt.PopupMenu class.
+     */
+    public static void setPopupMenuAccessor(PopupMenuAccessor pma) {
+        popupMenuAccessor = pma;
+    }
+
+    /*
+     * Retrieve the accessor object for the java.awt.PopupMenu class.
+     */
+    public static PopupMenuAccessor getPopupMenuAccessor() {
+        if (popupMenuAccessor == null) {
+            unsafe.ensureClassInitialized(PopupMenu.class);
+        }
+        return popupMenuAccessor;
+    }
 }
--- a/src/share/classes/sun/awt/SunToolkit.java	Mon Jul 06 14:10:31 2009 -0400
+++ b/src/share/classes/sun/awt/SunToolkit.java	Thu Jul 09 13:53:05 2009 -0400
@@ -77,14 +77,7 @@
      */
     public static final int GRAB_EVENT_MASK = 0x80000000;
 
-    private static Field syncLWRequestsField;
     private static Method  wakeupMethod;
-    private static Field componentKeyField;
-    private static Field menuComponentKeyField;
-    private static Field trayIconKeyField;
-    private static Field componentAppContextField;
-    private static Field menuComponentAppContextField;
-    private static Field isPostedField;
     /* The key to put()/get() the PostEventQueue into/from the AppContext.
      */
     private static final String POST_EVENT_QUEUE_KEY = "PostEventQueue";
@@ -422,32 +415,21 @@
     private static final Map appContextMap =
         Collections.synchronizedMap(new WeakHashMap());
 
-
     /**
      * Sets the appContext field of target. If target is not a Component or
      * MenuComponent, this returns false.
      */
-    private static boolean setAppContext(Object target, AppContext context)
-    {
-        if (!(target instanceof Component) && !(target instanceof MenuComponent)) {
+    private static boolean setAppContext(Object target,
+                                         AppContext context) {
+        if (target instanceof Component) {
+            AWTAccessor.getComponentAccessor().
+                setAppContext((Component)target, context);
+        } else if (target instanceof MenuComponent) {
+            AWTAccessor.getMenuComponentAccessor().
+                setAppContext((MenuComponent)target, context);
+        } else {
             return false;
         }
-        try{
-            if (target instanceof Component){
-                if (componentAppContextField == null) {
-                    componentAppContextField = getField(Component.class, "appContext");
-                }
-                componentAppContextField.set(target, context);
-            } else if (target instanceof MenuComponent) {
-                if (menuComponentAppContextField == null) {
-                    menuComponentAppContextField = getField(MenuComponent.class, "appContext");
-                }
-                menuComponentAppContextField.set(target, context);
-            }
-        } catch( IllegalAccessException e){
-            assert false;
-        }
-
         return true;
     }
 
@@ -456,23 +438,15 @@
      * Component or MenuComponent this returns null.
      */
     private static AppContext getAppContext(Object target) {
-        AppContext retObj = null;
-        try{
-            if (target instanceof Component){
-                if (componentAppContextField == null) {
-                    componentAppContextField = getField(Component.class, "appContext");
-                }
-                retObj = (AppContext) componentAppContextField.get(target);
-            } else if (target instanceof MenuComponent) {
-                if (menuComponentAppContextField == null) {
-                    menuComponentAppContextField = getField(MenuComponent.class, "appContext");
-                }
-                retObj = (AppContext) menuComponentAppContextField.get(target);
-            }
-        } catch( IllegalAccessException e){
-            assert false;
+        if (target instanceof Component) {
+            return AWTAccessor.getComponentAccessor().
+                       getAppContext((Component)target);
+        } else if (target instanceof MenuComponent) {
+            return AWTAccessor.getMenuComponentAccessor().
+                       getAppContext((MenuComponent)target);
+        } else {
+            return null;
         }
-        return retObj;
     }
 
     /*
@@ -520,16 +494,7 @@
       */
 
     public static void setLWRequestStatus(Window changed,boolean status){
-        if (syncLWRequestsField == null){
-            syncLWRequestsField = getField(Window.class, "syncLWRequests");
-        }
-        try{
-            if (syncLWRequestsField != null){
-                syncLWRequestsField.setBoolean(changed, status);
-            }
-        } catch( IllegalAccessException e){
-            assert false;
-        }
+        AWTAccessor.getWindowAccessor().setLWRequestStatus(changed, status);
     };
 
     public static void checkAndSetPolicy(Container cont, boolean isSwingCont)
@@ -637,18 +602,9 @@
      * Post AWTEvent of high priority.
      */
     public static void postPriorityEvent(final AWTEvent e) {
-        if (isPostedField == null) {
-            isPostedField = getField(AWTEvent.class, "isPosted");
-        }
         PeerEvent pe = new PeerEvent(Toolkit.getDefaultToolkit(), new Runnable() {
                 public void run() {
-                    try {
-                        isPostedField.setBoolean(e, true);
-                    } catch (IllegalArgumentException e) {
-                        assert(false);
-                    } catch (IllegalAccessException e) {
-                        assert(false);
-                    }
+                    AWTAccessor.getAWTEventAccessor().setPosted(e);
                     ((Component)e.getSource()).dispatchEvent(e);
                 }
             }, PeerEvent.ULTIMATE_PRIORITY_EVENT);
@@ -757,36 +713,6 @@
     }
 
     /*
-     * Returns next queue for the given EventQueue which has private access
-     */
-    private static EventQueue getNextQueue(final Object o) {
-        EventQueue result = null;
-        try{
-            Field nextQueueField = getField(EventQueue.class,
-                                            "nextQueue");
-            result = (EventQueue)nextQueueField.get(o);
-        } catch( IllegalAccessException e){
-            assert false;
-        }
-        return result;
-    }
-
-    /*
-     * Returns dispatch thread for the given EventQueue which has private access
-     */
-    private static Thread getDispatchThread(final Object o) {
-        Thread result = null;
-        try{
-            Field dispatchThreadField = getField(EventQueue.class,
-                                                 "dispatchThread");
-            result = (Thread)dispatchThreadField.get(o);
-        } catch( IllegalAccessException e){
-            assert false;
-        }
-        return result;
-    }
-
-    /*
      * Returns true if the calling thread is the event dispatch thread
      * contained within AppContext which associated with the given target.
      * Use this call to ensure that a given task is being executed
@@ -796,13 +722,14 @@
         AppContext appContext = targetToAppContext(target);
         EventQueue eq = (EventQueue)appContext.get(AppContext.EVENT_QUEUE_KEY);
 
-        EventQueue next = getNextQueue(eq);
+        AWTAccessor.EventQueueAccessor accessor = AWTAccessor.getEventQueueAccessor();
+        EventQueue next = accessor.getNextQueue(eq);
         while (next != null) {
             eq = next;
-            next = getNextQueue(eq);
+            next = accessor.getNextQueue(eq);
         }
 
-        return (Thread.currentThread() == getDispatchThread(eq));
+        return (Thread.currentThread() == accessor.getDispatchThread(eq));
     }
 
     public Dimension getScreenSize() {
@@ -1356,22 +1283,7 @@
         return false;
     }
 
-    private static Dialog.ModalExclusionType DEFAULT_MODAL_EXCLUSION_TYPE;
-
-    static {
-        DEFAULT_MODAL_EXCLUSION_TYPE = (Dialog.ModalExclusionType)AccessController.doPrivileged(new PrivilegedAction() {
-            public Object run() {
-                Dialog.ModalExclusionType defaultType = Dialog.ModalExclusionType.NO_EXCLUDE;
-                try {
-                    java.lang.reflect.Field f = Dialog.class.getDeclaredField("DEFAULT_MODAL_EXCLUSION_TYPE");
-                    f.setAccessible(true);
-                    defaultType = (Dialog.ModalExclusionType)f.get(null);
-                } catch (Exception e) {
-                }
-                return defaultType;
-            }
-        });
-    }
+    private static Dialog.ModalExclusionType DEFAULT_MODAL_EXCLUSION_TYPE = null;
 
     /**
      * Returns whether the XEmbed server feature is requested by
@@ -1430,6 +1342,9 @@
      */
     public static void setModalExcluded(Window window)
     {
+        if (DEFAULT_MODAL_EXCLUSION_TYPE == null) {
+            DEFAULT_MODAL_EXCLUSION_TYPE = Dialog.ModalExclusionType.APPLICATION_EXCLUDE;
+        }
         window.setModalExclusionType(DEFAULT_MODAL_EXCLUSION_TYPE);
     }
 
@@ -1451,6 +1366,9 @@
      */
     public static boolean isModalExcluded(Window window)
     {
+        if (DEFAULT_MODAL_EXCLUSION_TYPE == null) {
+            DEFAULT_MODAL_EXCLUSION_TYPE = Dialog.ModalExclusionType.APPLICATION_EXCLUDE;
+        }
         return window.getModalExclusionType().compareTo(DEFAULT_MODAL_EXCLUSION_TYPE) >= 0;
     }
 
@@ -2104,6 +2022,42 @@
     public int getNumberOfButtons(){
         return 3;
     }
+
+    /**
+     * Checks that the given object implements/extends the given
+     * interface/class.
+     *
+     * Note that using the instanceof operator causes a class to be loaded.
+     * Using this method doesn't load a class and it can be used instead of
+     * the instanceof operator for performance reasons.
+     *
+     * @param obj Object to be checked
+     * @param type The name of the interface/class. Must be
+     * fully-qualified interface/class name.
+     * @return true, if this object implements/extends the given
+     *         interface/class, false, otherwise, or if obj or type is null
+     */
+    public static boolean isInstanceOf(Object obj, String type) {
+        if (obj == null) return false;
+        if (type == null) return false;
+
+        return isInstanceOf(obj.getClass(), type);
+    }
+
+    private static boolean isInstanceOf(Class cls, String type) {
+        if (cls == null) return false;
+
+        if (cls.getName().equals(type)) {
+            return true;
+        }
+
+        for (Class c : cls.getInterfaces()) {
+            if (c.getName().equals(type)) {
+                return true;
+            }
+        }
+        return isInstanceOf(cls.getSuperclass(), type);
+    }
 } // class SunToolkit
 
 
--- a/src/share/classes/sun/awt/shell/ShellFolder.java	Mon Jul 06 14:10:31 2009 -0400
+++ b/src/share/classes/sun/awt/shell/ShellFolder.java	Thu Jul 09 13:53:05 2009 -0400
@@ -202,8 +202,16 @@
     private static ShellFolderManager shellFolderManager;
 
     static {
-        Class managerClass = (Class)Toolkit.getDefaultToolkit().
-            getDesktopProperty("Shell.shellFolderManager");
+        String managerClassName = (String)Toolkit.getDefaultToolkit().
+                                      getDesktopProperty("Shell.shellFolderManager");
+        Class managerClass = null;
+        try {
+            managerClass = Class.forName(managerClassName);
+        // swallow the exceptions below and use default shell folder
+        } catch(ClassNotFoundException e) {
+        } catch(NullPointerException e) {
+        }
+
         if (managerClass == null) {
             managerClass = ShellFolderManager.class;
         }
--- a/src/share/classes/sun/swing/AccessibleMethod.java	Mon Jul 06 14:10:31 2009 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,136 +0,0 @@
-/*
- * Copyright 2005-2008 Sun Microsystems, Inc.  All Rights Reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Sun designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Sun in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
- * CA 95054 USA or visit www.sun.com if you need additional information or
- * have any questions.
- */
-package sun.swing;
-
-import java.security.*;
-import java.lang.reflect.*;
-
-/**
- * A utility for accessing and invoking methods, via reflection,
- * that would otherwise be unaccessible.
- *
- * @author Shannon Hickey
- */
-public class AccessibleMethod {
-
-    private final Method method;
-
-    /**
-     * Construct an instance for the given params.
-     *
-     * @param klass the class to which the method belongs
-     * @param methodName the name of the method
-     * @param paramTypes the paramater type array
-     * @throws NullPointerException if <code>klass</code>
-     *         or <code>name</code> is <code>null</code>
-     * @throws NoSuchMethodException if the method can't be found
-     */
-    public AccessibleMethod(Class klass,
-                            String methodName,
-                            Class ... paramTypes) throws NoSuchMethodException {
-        try {
-            method = AccessController.doPrivileged(
-                new AccessMethodAction(klass, methodName, paramTypes));
-        } catch (PrivilegedActionException e) {
-            throw (NoSuchMethodException)e.getCause();
-        }
-    }
-
-    /**
-     * Invoke the method that this object represents.
-     * Has the same behavior and throws the same exceptions as
-     * <code>java.lang.reflect.Method.invoke</code> with one
-     * exception: This method does not throw
-     * <code>IllegalAccessException</code> since the target
-     * method has already been made accessible.
-     *
-     * @param obj the object the underlying method is invoked from
-     * @param args the arguments used for the method call
-     * @return the result of dispatching the method represented by
-     *         this object on <code>obj</code> with parameters
-     *         <code>args</code>
-     * @see java.lang.reflect.Method#invoke
-     */
-    public Object invoke(Object obj, Object ... args)
-            throws IllegalArgumentException, InvocationTargetException {
-
-        try {
-            return method.invoke(obj, args);
-        } catch (IllegalAccessException e) {
-            // should never happen since we've made it accessible
-            throw new AssertionError("accessible method inaccessible");
-        }
-    }
-
-    /**
-     * Invoke the method that this object represents, with the
-     * expectation that the method being called throws no
-     * checked exceptions.
-     * <p>
-     * Simply calls <code>this.invoke(obj, args)</code>
-     * but catches any <code>InvocationTargetException</code>
-     * and returns the cause wrapped in a runtime exception.
-     *
-     * @param obj the object the underlying method is invoked from
-     * @param args the arguments used for the method call
-     * @return the result of dispatching the method represented by
-     *         this object on <code>obj</code> with parameters
-     *         <code>args</code>
-     * @see #invoke
-     */
-    public Object invokeNoChecked(Object obj, Object ... args) {
-        try {
-            return invoke(obj, args);
-        } catch (InvocationTargetException ex) {
-            if (ex.getCause() instanceof RuntimeException) {
-                throw (RuntimeException)ex.getCause();
-            } else {
-                throw new RuntimeException(ex.getCause());
-            }
-        }
-    }
-
-    /** The action used to fetch the method and make it accessible */
-    private static class AccessMethodAction implements PrivilegedExceptionAction<Method> {
-        private final Class<?> klass;
-        private final String methodName;
-        private final Class[] paramTypes;
-
-        public AccessMethodAction(Class klass,
-                                  String methodName,
-                                  Class ... paramTypes) {
-
-            this.klass = klass;
-            this.methodName = methodName;
-            this.paramTypes = paramTypes;
-        }
-
-        public Method run() throws NoSuchMethodException {
-            Method method = klass.getDeclaredMethod(methodName, paramTypes);
-            method.setAccessible(true);
-            return method;
-        }
-    }
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/share/classes/sun/swing/SwingAccessor.java	Thu Jul 09 13:53:05 2009 -0400
@@ -0,0 +1,96 @@
+/*
+ * Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Sun designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Sun in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+package sun.swing;
+
+import sun.misc.Unsafe;
+
+import java.awt.Point;
+
+import javax.swing.text.JTextComponent;
+import javax.swing.TransferHandler;
+
+/**
+ * The SwingAccessor utility class.
+ * The main purpose of this class is to enable accessing
+ * private and package-private fields of classes from
+ * different classes/packages. See sun.misc.SharedSecretes
+ * for another example.
+ */
+public final class SwingAccessor {
+    private static final Unsafe unsafe = Unsafe.getUnsafe();
+
+    /**
+     * We don't need any objects of this class.
+     * It's rather a collection of static methods
+     * and interfaces.
+     */
+    private SwingAccessor() {
+    }
+
+    /**
+     * An accessor for the JTextComponent class.
+     * Note that we intentionally introduce the JTextComponentAccessor,
+     * and not the JComponentAccessor because the needed methods
+     * aren't override methods.
+     */
+    public interface JTextComponentAccessor {
+
+        /**
+         * Calculates a custom drop location for the text component,
+         * representing where a drop at the given point should insert data.
+         */
+        TransferHandler.DropLocation dropLocationForPoint(JTextComponent textComp, Point p);
+
+        /**
+         * Called to set or clear the drop location during a DnD operation.
+         */
+        Object setDropLocation(JTextComponent textComp, TransferHandler.DropLocation location,
+                               Object state, boolean forDrop);
+    }
+
+    /**
+     * The javax.swing.text.JTextComponent class accessor object.
+     */
+    private static JTextComponentAccessor jtextComponentAccessor;
+
+    /**
+     * Set an accessor object for the javax.swing.text.JTextComponent class.
+     */
+    public static void setJTextComponentAccessor(JTextComponentAccessor jtca) {
+         jtextComponentAccessor = jtca;
+    }
+
+    /**
+     * Retrieve the accessor object for the javax.swing.text.JTextComponent class.
+     */
+    public static JTextComponentAccessor getJTextComponentAccessor() {
+        if (jtextComponentAccessor == null) {
+            unsafe.ensureClassInitialized(JTextComponent.class);
+        }
+
+        return jtextComponentAccessor;
+    }
+}
--- a/src/share/classes/sun/text/normalizer/NormalizerBase.java	Mon Jul 06 14:10:31 2009 -0400
+++ b/src/share/classes/sun/text/normalizer/NormalizerBase.java	Thu Jul 09 13:53:05 2009 -0400
@@ -1598,15 +1598,34 @@
      * @param options   the optional features to be enabled.
      */
     public static String normalize(String str, Normalizer.Form form, int options) {
+        int len = str.length();
+        boolean asciiOnly = true;
+        if (len < 80) {
+            for (int i = 0; i < len; i++) {
+                if (str.charAt(i) > 127) {
+                    asciiOnly = false;
+                    break;
+                }
+            }
+        } else {
+            char[] a = str.toCharArray();
+            for (int i = 0; i < len; i++) {
+                if (a[i] > 127) {
+                    asciiOnly = false;
+                    break;
+                }
+            }
+        }
+
         switch (form) {
         case NFC :
-            return NFC.normalize(str, options);
+            return asciiOnly ? str : NFC.normalize(str, options);
         case NFD :
-            return NFD.normalize(str, options);
+            return asciiOnly ? str : NFD.normalize(str, options);
         case NFKC :
-            return NFKC.normalize(str, options);
+            return asciiOnly ? str : NFKC.normalize(str, options);
         case NFKD :
-            return NFKD.normalize(str, options);
+            return asciiOnly ? str : NFKD.normalize(str, options);
         }
 
         throw new IllegalArgumentException("Unexpected normalization form: " +
--- a/src/share/demo/jfc/Font2DTest/RangeMenu.java	Mon Jul 06 14:10:31 2009 -0400
+++ b/src/share/demo/jfc/Font2DTest/RangeMenu.java	Thu Jul 09 13:53:05 2009 -0400
@@ -53,7 +53,7 @@
 public final class RangeMenu extends JComboBox implements ActionListener {
 
     /// Painfully extracted from java.lang.Character.UnicodeBlock.  Arrrgh!
-    /// Unicode 3.0 data.
+    /// Unicode 5.1.0 data.
 
     private final int[][] UNICODE_RANGES = {
         { 0x000000, 0x00007f }, /// BASIC_LATIN
@@ -63,14 +63,16 @@
         { 0x000250, 0x0002af }, /// IPA_EXTENSIONS
         { 0x0002b0, 0x0002ff }, /// SPACING_MODIFIER_LETTERS
         { 0x000300, 0x00036f }, /// COMBINING_DIACRITICAL_MARKS
-        { 0x000370, 0x0003ff }, /// GREEK
+        { 0x000370, 0x0003ff }, /// GREEK_AND_COPTIC
         { 0x000400, 0x0004ff }, /// CYRILLIC
         { 0x000500, 0x00052f }, /// CYRILLIC_SUPPLEMENTARY
         { 0x000530, 0x00058f }, /// ARMENIAN
         { 0x000590, 0x0005ff }, /// HEBREW
         { 0x000600, 0x0006ff }, /// ARABIC
         { 0x000700, 0x00074f }, /// SYRIAC
+        { 0x000750, 0x00077f }, /// ARABIC_SUPPLEMENT
         { 0x000780, 0x0007bf }, /// THAANA
+        { 0x0007c0, 0x0007ff }, /// NKO
         { 0x000900, 0x00097f }, /// DEVANAGARI
         { 0x000980, 0x0009ff }, /// BENGALI
         { 0x000a00, 0x000a7f }, /// GURMUKHI
@@ -88,6 +90,7 @@
         { 0x0010a0, 0x0010ff }, /// GEORGIAN
         { 0x001100, 0x0011ff }, /// HANGUL_JAMO
         { 0x001200, 0x00137f }, /// ETHIOPIC
+        { 0x001380, 0x00139f }, /// ETHIOPIC_SUPPLEMENT
         { 0x0013a0, 0x0013ff }, /// CHEROKEE
         { 0x001400, 0x00167f }, /// UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS
         { 0x001680, 0x00169f }, /// OGHAM
@@ -100,8 +103,16 @@
         { 0x001800, 0x0018af }, /// MONGOLIAN
         { 0x001900, 0x00194f }, /// LIMBU
         { 0x001950, 0x00197f }, /// TAI_LE
+        { 0x001980, 0x0019df }, /// NEW_TAI_LE
         { 0x0019e0, 0x0019ff }, /// KHMER_SYMBOLS
+        { 0x001a00, 0x001a1f }, /// BUGINESE
+        { 0x001b00, 0x001b7f }, /// BALINESE
+        { 0x001b80, 0x001bbf }, /// SUNDANESE
+        { 0x001c00, 0x001c4f }, /// LEPCHA
+        { 0x001c50, 0x001c7f }, /// OL_CHIKI
         { 0x001d00, 0x001d7f }, /// PHONETIC_EXTENSIONS
+        { 0x001d80, 0x001dbf }, /// PHONEITC EXTENSIONS SUPPLEMENT
+        { 0x001dc0, 0x001dff }, /// COMBINING_DIACRITICAL_MAKRS_SUPPLEMENT
         { 0x001e00, 0x001eff }, /// LATIN_EXTENDED_ADDITIONAL
         { 0x001f00, 0x001fff }, /// GREEK_EXTENDED
         { 0x002000, 0x00206f }, /// GENERAL_PUNCTUATION
@@ -128,6 +139,14 @@
         { 0x002980, 0x0029ff }, /// MISCELLANEOUS_MATHEMATICAL_SYMBOLS_B
         { 0x002a00, 0x002aff }, /// SUPPLEMENTAL_MATHEMATICAL_OPERATORS
         { 0x002b00, 0x002bff }, /// MISCELLANEOUS_SYMBOLS_AND_ARROWS
+        { 0x002c00, 0x002c5f }, /// GLAGOLITIC
+        { 0x002c60, 0x002c7f }, /// LATIN_EXTENDED-C
+        { 0x002c80, 0x002cff }, /// COPTIC
+        { 0x002d00, 0x002d2f }, /// GEORGIAN_SUPPLEMENT
+        { 0x002d30, 0x002d7f }, /// TIFINAGH
+        { 0x002d80, 0x002ddf }, /// ETHIOPIC_EXTENDED
+        { 0x002de0, 0x002dff }, /// CYRILLIC_EXTENDED-A
+        { 0x002e00, 0x002e7f }, /// SUPPLEMENTAL_PUNCTUATION
         { 0x002e80, 0x002eff }, /// CJK_RADICALS_SUPPLEMENT
         { 0x002f00, 0x002fdf }, /// KANGXI_RADICALS
         { 0x002ff0, 0x002fff }, /// IDEOGRAPHIC_DESCRIPTION_CHARACTERS
@@ -138,6 +157,7 @@
         { 0x003130, 0x00318f }, /// HANGUL_COMPATIBILITY_JAMO
         { 0x003190, 0x00319f }, /// KANBUN
         { 0x0031a0, 0x0031bf }, /// BOPOMOFO_EXTENDED
+        { 0x0031c0, 0x0031ef }, /// CJK_STROKES
         { 0x0031f0, 0x0031ff }, /// KATAKANA_PHONETIC_EXTENSIONS
         { 0x003200, 0x0032ff }, /// ENCLOSED_CJK_LETTERS_AND_MONTHS
         { 0x003300, 0x0033ff }, /// CJK_COMPATIBILITY
@@ -146,13 +166,26 @@
         { 0x004e00, 0x009fff }, /// CJK_UNIFIED_IDEOGRAPHS
         { 0x00a000, 0x00a48f }, /// YI_SYLLABLES
         { 0x00a490, 0x00a4cf }, /// YI_RADICALS
+        { 0x00a500, 0x00a63f }, /// YAI
+        { 0x00a640, 0x00a69f }, /// CYRILLIC_EXTENDED-B
+        { 0x00a700, 0x00a71f }, /// MODIFIER_TONE_LETTERS
+        { 0x00a720, 0x00a7ff }, /// LATIN_EXTENDED-D
+        { 0x00a800, 0x00a82f }, /// SYLOTI_NAGRI
+        { 0x00a840, 0x00a87f }, /// PHAGS-PA
+        { 0x00a880, 0x00a8df }, /// SAURASHTRA
+        { 0x00a900, 0x00a92f }, /// KAYAH_LI
+        { 0x00a930, 0x00a95f }, /// REJANG
+        { 0x00aa00, 0x00aa5f }, /// CHAM
         { 0x00ac00, 0x00d7af }, /// HANGUL_SYLLABLES
-        { 0x00d800, 0x00dfff }, /// SURROGATES_AREA
+        { 0x00d800, 0x00db7f }, /// HIGH_SURROGATES_AREA
+        { 0x00db80, 0x00dbff }, /// HIGH_PRIVATE_USE_SURROGATES_AREA
+        { 0x00dc00, 0x00dfff }, /// LOW_SURROGATES_AREA
         { 0x00e000, 0x00f8ff }, /// PRIVATE_USE_AREA
         { 0x00f900, 0x00faff }, /// CJK_COMPATIBILITY_IDEOGRAPHS
         { 0x00fb00, 0x00fb4f }, /// ALPHABETIC_PRESENTATION_FORMS
         { 0x00fb50, 0x00fdff }, /// ARABIC_PRESENTATION_FORMS_A
         { 0x00fe00, 0x00fe0f }, /// VARIATION_SELECTORS
+        { 0x00fe10, 0x00fe1f }, /// VERTICAL_FORMS
         { 0x00fe20, 0x00fe2f }, /// COMBINING_HALF_MARKS
         { 0x00fe30, 0x00fe4f }, /// CJK_COMPATIBILITY_FORMS
         { 0x00fe50, 0x00fe6f }, /// SMALL_FORM_VARIANTS
@@ -162,17 +195,32 @@
         { 0x010000, 0x01007f }, /// LINEAR_B_SYLLABARY
         { 0x010080, 0x0100ff }, /// LINEAR_B_IDEOGRAMS
         { 0x010100, 0x01013f }, /// AEGEAN_NUMBERS
+        { 0x010140, 0x01018f }, /// ANCIENT_GREEK_NUMBERS
+        { 0x010190, 0x0101cf }, /// ANCIENT_SYMBOLS
+        { 0x0101d0, 0x0101ff }, /// PHAISTOS_DISC
+        { 0x010280, 0x01029f }, /// LYCIAN
+        { 0x0102a0, 0x0102df }, /// CARIAN
         { 0x010300, 0x01032f }, /// OLD_ITALIC
         { 0x010330, 0x01034f }, /// GOTHIC
         { 0x010380, 0x01039f }, /// UGARITIC
+        { 0x0103a0, 0x0103df }, /// OLD_PERSIAN
         { 0x010400, 0x01044f }, /// DESERET
         { 0x010450, 0x01047f }, /// SHAVIAN
         { 0x010480, 0x0104af }, /// OSMANYA
         { 0x010800, 0x01083f }, /// CYPRIOT_SYLLABARY
+        { 0x010900, 0x01091f }, /// PHOENICIAN
+        { 0x010920, 0x01093f }, /// LYDIAN
+        { 0x010a00, 0x010a5f }, /// KHAROSHTHI
+        { 0x012000, 0x0123ff }, /// CUNEIFORM
+        { 0x012400, 0x01247f }, /// CUNEIFORM_NUMBERS_AND_PUNCTUATION
         { 0x01d000, 0x01d0ff }, /// BYZANTINE_MUSICAL_SYMBOLS
         { 0x01d100, 0x01d1ff }, /// MUSICAL_SYMBOLS
+        { 0x01d200, 0x01d24f }, /// ANCIENT_GREEK_MUSICAL_NOTATION
         { 0x01d300, 0x01d35f }, /// TAI_XUAN_JING_SYMBOLS
+        { 0x01d360, 0x01d37f }, /// COUNTING_ROD_NUMERALS
         { 0x01d400, 0x01d7ff }, /// MATHEMATICAL_ALPHANUMERIC_SYMBOLS
+        { 0x01f000, 0x01f02f }, /// MAHJONG_TILES
+        { 0x01f030, 0x01f09f }, /// DOMINO_TILES
         { 0x020000, 0x02a6df }, /// CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B
         { 0x02f800, 0x02fa1f }, /// CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT
         { 0x0e0000, 0x0e007f }, /// TAGS
@@ -190,14 +238,16 @@
         "IPA Extensions",
         "Spacing Modifier Letters",
         "Combining Diacritical Marks",
-        "Greek",
+        "Greek and Coptic",
         "Cyrillic",
         "Cyrillic Supplement",
         "Armenian",
         "Hebrew",
         "Arabic",
         "Syriac",
+        "Arabic Supplement",
         "Thaana",
+        "NKo",
         "Devanagari",
         "Bengali",
         "Gurmukhi",
@@ -215,6 +265,7 @@
         "Georgian",
         "Hangul Jamo",
         "Ethiopic",
+        "Ethiopic Supplement",
         "Cherokee",
         "Unified Canadian Aboriginal Syllabics",
         "Ogham",
@@ -227,14 +278,22 @@
         "Mongolian",
         "Limbu",
         "Tai Le",
+        "New Tai Lue",
         "Khmer Symbols",
+        "Buginese",
+        "Balinese",
+        "Sundanese",
+        "Lepcha",
+        "Ol Chiki",
         "Phonetic Extensions",
+        "Phonetic Extensions Supplement",
+        "Combining Diacritical Marks Supplement",
         "Latin Extended Additional",
         "Greek Extended",
         "General Punctuation",
         "Superscripts and Subscripts",
         "Currency Symbols",
-        "Combining Marks for Symbols",
+        "Combining Diacritical Marks for Symbols",
         "Letterlike Symbols",
         "Number Forms",
         "Arrows",
@@ -255,6 +314,14 @@
         "Miscellaneous Mathematical Symbols-B",
         "Supplemental Mathematical Operators",
         "Miscellaneous Symbols and Arrows",
+        "Glagolitic",
+        "Latin Extended-C",
+        "Coptic",
+        "Georgian Supplement",
+        "Tifinagh",
+        "Ethiopic Extended",
+        "Cyrillic Extended-A",
+        "Supplemental Punctuation",
         "CJK Radicals Supplement",
         "Kangxi Radicals",
         "Ideographic Description Characters",
@@ -265,6 +332,7 @@
         "Hangul Compatibility Jamo",
         "Kanbun",
         "Bopomofo Extended",
+        "CJK Strokes",
         "Katakana Phonetic Extensions",
         "Enclosed CJK Letters and Months",
         "CJK Compatibility",
@@ -273,13 +341,26 @@
         "CJK Unified Ideographs",
         "Yi Syllables",
         "Yi Radicals",
+        "Vai",
+        "Cyrillic Extended-B",
+        "Modifier Tone Letters",
+        "Latin Extended-D",
+        "Syloti Nagri",
+        "Phags-pa",
+        "Saurashtra",
+        "Kayah Li",
+        "Rejang",
+        "Cham",
         "Hangul Syllables",
-        "Surrogates Area", // High Surrogates, High Private Use Surrogates, Low Surrogates
+        "High Surrogates",
+        "High Private Use Surrogates",
+        "Low Surrogates",
         "Private Use Area",
         "CJK Compatibility Ideographs",
         "Alphabetic Presentation Forms",
         "Arabic Presentation Forms-A",
         "Variation Selectors",
+        "Vertical Forms",
         "Combining Half Marks",
         "CJK Compatibility Forms",
         "Small Form Variants",
@@ -289,17 +370,32 @@
         "Linear B Syllabary",
         "Linear B Ideograms",
         "Aegean Numbers",
+        "Ancient Greek Numbers",
+        "Ancient Symbols",
+        "Phaistos Disc",
+        "Lycian",
+        "Carian",
         "Old Italic",
         "Gothic",
         "Ugaritic",
+        "Old Persian",
         "Deseret",
         "Shavian",
         "Osmanya",
         "Cypriot Syllabary",
+        "Phoenician",
+        "Lydian",
+        "Kharoshthi",
+        "Cuneiform",
+        "Cuneiform Numbers and Punctuation",
         "Byzantine Musical Symbols",
         "Musical Symbols",
+        "Ancient Greek Musical Notation",
         "Tai Xuan Jing Symbols",
+        "Counting Rod Numerals",
         "Mathematical Alphanumeric Symbols",
+        "Mahjong Tiles",
+        "Domino Tiles",
         "CJK Unified Ideographs Extension B",
         "CJK Compatibility Ideographs Supplement",
         "Tags",
--- a/src/solaris/classes/sun/awt/X11/XKeysym.java	Mon Jul 06 14:10:31 2009 -0400
+++ b/src/solaris/classes/sun/awt/X11/XKeysym.java	Thu Jul 09 13:53:05 2009 -0400
@@ -145,7 +145,7 @@
     {
         // Xsun without XKB uses keysymarray[2] keysym to determine if it is KP event.
         // Otherwise, it is [1].
-        int ndx = XToolkit.isXsunServer() &&
+        int ndx = XToolkit.isXsunKPBehavior() &&
                   ! XToolkit.isXKBenabled() ? 2 : 1;
         // Even if XKB is enabled, we have another problem: some symbol tables (e.g. cz) force
         // a regular comma instead of KP_comma for a decimal separator. Result is,
@@ -193,7 +193,7 @@
     private static long getKeypadKeysym( XKeyEvent ev ) {
         int ndx = 0;
         long keysym = XConstants.NoSymbol;
-        if( XToolkit.isXsunServer() &&
+        if( XToolkit.isXsunKPBehavior() &&
             ! XToolkit.isXKBenabled() ) {
             if( (ev.get_state() & XConstants.ShiftMask) != 0 ) { // shift modifier is on
                 ndx = 3;
--- a/src/solaris/classes/sun/awt/X11/XToolkit.java	Mon Jul 06 14:10:31 2009 -0400
+++ b/src/solaris/classes/sun/awt/X11/XToolkit.java	Thu Jul 09 13:53:05 2009 -0400
@@ -1177,6 +1177,7 @@
         awtLock();
         try {
             XlibWrapper.XBell(getDisplay(), 0);
+            XlibWrapper.XFlush(getDisplay());
         } finally {
             awtUnlock();
         }
@@ -1435,9 +1436,14 @@
         return timeStamp;
     }
     protected void initializeDesktopProperties() {
-        desktopProperties.put("DnD.Autoscroll.initialDelay",     Integer.valueOf(50));
-        desktopProperties.put("DnD.Autoscroll.interval",         Integer.valueOf(50));
-        desktopProperties.put("DnD.Autoscroll.cursorHysteresis", Integer.valueOf(5));
+        desktopProperties.put("DnD.Autoscroll.initialDelay",
+                              Integer.valueOf(50));
+        desktopProperties.put("DnD.Autoscroll.interval",
+                              Integer.valueOf(50));
+        desktopProperties.put("DnD.Autoscroll.cursorHysteresis",
+                              Integer.valueOf(5));
+        desktopProperties.put("Shell.shellFolderManager",
+                              "sun.awt.shell.ShellFolderManager");
         // Don't want to call getMultiClickTime() if we are headless
         if (!GraphicsEnvironment.isHeadless()) {
             desktopProperties.put("awt.multiClickInterval",
@@ -2124,39 +2130,33 @@
      */
     private static int backingStoreType;
 
-    static boolean awt_ServerInquired = false;
-    static boolean awt_IsXsunServer    = false;
+    static final int XSUN_KP_BEHAVIOR = 1;
+    static final int XORG_KP_BEHAVIOR = 2;
+
+    static int     awt_IsXsunKPBehavior = 0;
     static boolean awt_UseXKB         = false;
     static boolean awt_UseXKB_Calls   = false;
     static int     awt_XKBBaseEventCode = 0;
     static int     awt_XKBEffectiveGroup = 0; // so far, I don't use it leaving all calculations
                                               // to XkbTranslateKeyCode
     static long    awt_XKBDescPtr     = 0;
+
     /**
-       Try to understand if it is Xsun server.
-       By now (2005) Sun is vendor of Xsun and Xorg servers; we only return true if Xsun is running.
-    */
-    static boolean isXsunServer() {
+     * Check for Xsun convention regarding numpad keys.
+     * Xsun and some other servers (i.e. derived from Xsun)
+     * under certain conditions process numpad keys unlike Xorg.
+     */
+    static boolean isXsunKPBehavior() {
         awtLock();
         try {
-            if( awt_ServerInquired ) {
-                return awt_IsXsunServer;
-            }
-            if( ! XlibWrapper.ServerVendor(getDisplay()).startsWith("Sun Microsystems") ) {
-                awt_ServerInquired = true;
-                awt_IsXsunServer = false;
-                return false;
+            if( awt_IsXsunKPBehavior == 0 ) {
+                if( XlibWrapper.IsXsunKPBehavior(getDisplay()) ) {
+                    awt_IsXsunKPBehavior = XSUN_KP_BEHAVIOR;
+                }else{
+                    awt_IsXsunKPBehavior = XORG_KP_BEHAVIOR;
+                }
             }
-            // Now, it's Sun. It still may be Xorg though, eg on Solaris 10, x86.
-            // Today (2005), VendorRelease of Xorg is a Big Number unlike Xsun.
-            if( XlibWrapper.VendorRelease(getDisplay()) > 10000 ) {
-                awt_ServerInquired = true;
-                awt_IsXsunServer = false;
-                return false;
-            }
-            awt_ServerInquired = true;
-            awt_IsXsunServer = true;
-            return true;
+            return awt_IsXsunKPBehavior == XSUN_KP_BEHAVIOR ? true : false;
         } finally {
             awtUnlock();
         }
--- a/src/solaris/classes/sun/awt/X11/XlibWrapper.java	Mon Jul 06 14:10:31 2009 -0400
+++ b/src/solaris/classes/sun/awt/X11/XlibWrapper.java	Thu Jul 09 13:53:05 2009 -0400
@@ -352,6 +352,7 @@
     static native int XIconifyWindow(long display, long window, long screenNumber);
     static native String ServerVendor(long display);
     static native int VendorRelease(long display);
+    static native boolean IsXsunKPBehavior(long display);
 
     static native void XBell(long display, int percent);
 
--- a/src/solaris/classes/sun/awt/X11/keysym2ucs.h	Mon Jul 06 14:10:31 2009 -0400
+++ b/src/solaris/classes/sun/awt/X11/keysym2ucs.h	Thu Jul 09 13:53:05 2009 -0400
@@ -183,7 +183,7 @@
 tojava     {
 tojava         // Xsun without XKB uses keysymarray[2] keysym to determine if it is KP event.
 tojava         // Otherwise, it is [1].
-tojava         int ndx = XToolkit.isXsunServer() &&
+tojava         int ndx = XToolkit.isXsunKPBehavior() &&
 tojava                   ! XToolkit.isXKBenabled() ? 2 : 1;
 tojava         // Even if XKB is enabled, we have another problem: some symbol tables (e.g. cz) force
 tojava         // a regular comma instead of KP_comma for a decimal separator. Result is,
@@ -231,7 +231,7 @@
 tojava     private static long getKeypadKeysym( XKeyEvent ev ) {
 tojava         int ndx = 0;
 tojava         long keysym = XConstants.NoSymbol;
-tojava         if( XToolkit.isXsunServer() &&
+tojava         if( XToolkit.isXsunKPBehavior() &&
 tojava             ! XToolkit.isXKBenabled() ) {
 tojava             if( (ev.get_state() & XConstants.ShiftMask) != 0 ) { // shift modifier is on
 tojava                 ndx = 3;
--- a/src/solaris/native/sun/xawt/XlibWrapper.c	Mon Jul 06 14:10:31 2009 -0400
+++ b/src/solaris/native/sun/xawt/XlibWrapper.c	Thu Jul 09 13:53:05 2009 -0400
@@ -1181,6 +1181,38 @@
     AWT_CHECK_HAVE_LOCK();
     return VendorRelease((Display*)jlong_to_ptr(display));
 }
+/*
+ * Class:     sun_awt_X11_XlibWrapper
+ * Method:    IsXsunKPBehavior
+ * Signature: (J)Z;
+ */
+JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_IsXsunKPBehavior
+(JNIEnv *env, jclass clazz, jlong display)
+{
+    // Xsun without XKB uses keysymarray[2] keysym to determine if it is KP event.
+    // Otherwise, it is [1] or sometimes [0].
+    // This sniffer first tries to determine what is a keycode for XK_KP_7
+    // using XKeysymToKeycode;
+    // second, in which place in the keysymarray is XK_KP_7
+    // using XKeycodeToKeysym.
+    int kc7;
+    AWT_CHECK_HAVE_LOCK();
+    kc7 = XKeysymToKeycode((Display*)jlong_to_ptr(display), XK_KP_7);
+    if( !kc7 ) {
+        // keycode is not defined. Why, it's a reduced keyboard perhaps:
+        // report arbitrarily false.
+        return JNI_FALSE;
+    } else {
+        long ks2 = XKeycodeToKeysym((Display*)jlong_to_ptr(display), kc7, 2);
+        if( ks2 == XK_KP_7 ) {
+            //XXX If some Xorg server would put XK_KP_7 in keysymarray[2] as well,
+            //XXX for yet unknown to me reason, the sniffer would lie.
+            return JNI_TRUE;
+        }else{
+            return JNI_FALSE;
+        }
+    }
+}
 
 JavaVM* jvm = NULL;
 static int ToolkitErrorHandler(Display * dpy, XErrorEvent * event) {
--- a/src/windows/classes/sun/awt/windows/WComponentPeer.java	Mon Jul 06 14:10:31 2009 -0400
+++ b/src/windows/classes/sun/awt/windows/WComponentPeer.java	Thu Jul 09 13:53:05 2009 -0400
@@ -417,6 +417,15 @@
         replaceSurfaceData(this.numBackBuffers, this.backBufferCaps);
     }
 
+    public void createScreenSurface(boolean isResize)
+    {
+        Win32GraphicsConfig gc = (Win32GraphicsConfig)getGraphicsConfiguration();
+        ScreenUpdateManager mgr = ScreenUpdateManager.getInstance();
+
+        surfaceData = mgr.createScreenSurface(gc, this, numBackBuffers, isResize);
+    }
+
+
     /**
      * Multi-buffer version of replaceSurfaceData.  This version is called
      * by createBuffers(), which needs to acquire the same locks in the same
@@ -434,13 +443,10 @@
                     return;
                 }
                 numBackBuffers = newNumBackBuffers;
-                Win32GraphicsConfig gc =
-                        (Win32GraphicsConfig)getGraphicsConfiguration();
                 ScreenUpdateManager mgr = ScreenUpdateManager.getInstance();
                 oldData = surfaceData;
                 mgr.dropScreenSurface(oldData);
-                surfaceData =
-                    mgr.createScreenSurface(gc, this, numBackBuffers, true);
+                createScreenSurface(true);
                 if (oldData != null) {
                     oldData.invalidate();
                 }
@@ -449,6 +455,8 @@
                 if (numBackBuffers > 0) {
                     // set the caps first, they're used when creating the bb
                     backBufferCaps = caps;
+                    Win32GraphicsConfig gc =
+                        (Win32GraphicsConfig)getGraphicsConfiguration();
                     backBuffer = gc.createBackBuffer(this);
                 } else if (backBuffer != null) {
                     backBufferCaps = null;
@@ -711,11 +719,8 @@
         create(parentPeer);
         // fix for 5088782: check if window object is created successfully
         checkCreation();
-        this.winGraphicsConfig =
-            (Win32GraphicsConfig)getGraphicsConfiguration();
-        ScreenUpdateManager mgr = ScreenUpdateManager.getInstance();
-        this.surfaceData = mgr.createScreenSurface(winGraphicsConfig, this,
-                                                   numBackBuffers, false);
+
+        createScreenSurface(false);
         initialize();
         start();  // Initialize enable/disable state, turn on callbacks
     }
--- a/src/windows/classes/sun/awt/windows/WEmbeddedFrame.java	Mon Jul 06 14:10:31 2009 -0400
+++ b/src/windows/classes/sun/awt/windows/WEmbeddedFrame.java	Thu Jul 09 13:53:05 2009 -0400
@@ -211,9 +211,10 @@
      */
     public void notifyModalBlocked(Dialog blocker, boolean blocked) {
         try {
-            notifyModalBlockedImpl((WEmbeddedFramePeer)ComponentAccessor.getPeer(this),
-                                   (WWindowPeer)ComponentAccessor.getPeer(blocker),
-                                   blocked);
+            ComponentPeer thisPeer = (ComponentPeer)WToolkit.targetToPeer(this);
+            ComponentPeer blockerPeer = (ComponentPeer)WToolkit.targetToPeer(blocker);
+            notifyModalBlockedImpl((WEmbeddedFramePeer)thisPeer,
+                                   (WWindowPeer)blockerPeer, blocked);
         } catch (Exception z) {
             z.printStackTrace(System.err);
         }
--- a/src/windows/classes/sun/awt/windows/WFileDialogPeer.java	Mon Jul 06 14:10:31 2009 -0400
+++ b/src/windows/classes/sun/awt/windows/WFileDialogPeer.java	Thu Jul 09 13:53:05 2009 -0400
@@ -237,4 +237,11 @@
     public void setOpacity(float opacity) {}
     public void setOpaque(boolean isOpaque) {}
     public void updateWindow(java.awt.image.BufferedImage backBuffer) {}
+
+    // the file/print dialogs are native dialogs and
+    // the native system does their own rendering
+    @Override
+    public void createScreenSurface(boolean isResize) {}
+    @Override
+    public void replaceSurfaceData() {}
 }
--- a/src/windows/classes/sun/awt/windows/WPopupMenuPeer.java	Mon Jul 06 14:10:31 2009 -0400
+++ b/src/windows/classes/sun/awt/windows/WPopupMenuPeer.java	Thu Jul 09 13:53:05 2009 -0400
@@ -29,33 +29,25 @@
 import java.lang.reflect.Field;
 
 import sun.awt.SunToolkit;
+import sun.awt.AWTAccessor;
 
 public class WPopupMenuPeer extends WMenuPeer implements PopupMenuPeer {
     // We can't use target.getParent() for TrayIcon popup
     // because this method should return null for the TrayIcon
     // popup regardless of that whether it has parent or not.
-    private static Field f_parent;
-    private static Field f_isTrayIconPopup;
-
-    static {
-        f_parent = SunToolkit.getField(MenuComponent.class, "parent");
-        f_isTrayIconPopup = SunToolkit.getField(PopupMenu.class, "isTrayIconPopup");
-    }
 
     public WPopupMenuPeer(PopupMenu target) {
         this.target = target;
         MenuContainer parent = null;
-        boolean isTrayIconPopup = false;
-        try {
-            isTrayIconPopup = ((Boolean)f_isTrayIconPopup.get(target)).booleanValue();
-            if (isTrayIconPopup) {
-                parent = (MenuContainer)f_parent.get(target);
-            } else {
-                parent = target.getParent();
-            }
-        } catch (IllegalAccessException iae) {
-            iae.printStackTrace();
-            return;
+
+        // We can't use target.getParent() for TrayIcon popup
+        // because this method should return null for the TrayIcon
+        // popup regardless of that whether it has parent or not.
+        boolean isTrayIconPopup = AWTAccessor.getPopupMenuAccessor().isTrayIconPopup(target);
+        if (isTrayIconPopup) {
+            parent = AWTAccessor.getMenuComponentAccessor().getParent(target);
+        } else {
+            parent = target.getParent();
         }
 
         if (parent instanceof Component) {
--- a/src/windows/classes/sun/awt/windows/WPrintDialogPeer.java	Mon Jul 06 14:10:31 2009 -0400
+++ b/src/windows/classes/sun/awt/windows/WPrintDialogPeer.java	Thu Jul 09 13:53:05 2009 -0400
@@ -150,4 +150,11 @@
     public void setOpacity(float opacity) {}
     public void setOpaque(boolean isOpaque) {}
     public void updateWindow(java.awt.image.BufferedImage backBuffer) {}
+
+    // the file/print dialogs are native dialogs and
+    // the native system does their own rendering
+    @Override
+    public void createScreenSurface(boolean isResize) {}
+    @Override
+    public void replaceSurfaceData() {}
 }
--- a/src/windows/classes/sun/java2d/windows/GDIWindowSurfaceData.java	Mon Jul 06 14:10:31 2009 -0400
+++ b/src/windows/classes/sun/java2d/windows/GDIWindowSurfaceData.java	Thu Jul 09 13:53:05 2009 -0400
@@ -38,8 +38,6 @@
 import sun.awt.Win32GraphicsConfig;
 import sun.awt.Win32GraphicsDevice;
 import sun.awt.windows.WComponentPeer;
-import sun.awt.windows.WFileDialogPeer;
-import sun.awt.windows.WPrintDialogPeer;
 import sun.java2d.ScreenUpdateManager;
 import sun.java2d.SunGraphics2D;
 import sun.java2d.SurfaceData;
@@ -264,17 +262,7 @@
         this.graphicsConfig =
             (Win32GraphicsConfig) peer.getGraphicsConfiguration();
         this.solidloops = graphicsConfig.getSolidLoops(sType);
-        if (peer instanceof WFileDialogPeer ||
-            peer instanceof WPrintDialogPeer )
-        {
-            // REMIND: Awful hack.  The right fix for this problem
-            // would be for these type of Peers to not even use a
-            // GDIWindowSurfaceData object since they never do any
-            // rendering.  Or they could actually implement the
-            // functionality needed in initOps.  But this seems
-            // to work for now.  See bug 4391928 for more info.
-            return;
-        }
+
         Win32GraphicsDevice gd =
             (Win32GraphicsDevice)graphicsConfig.getDevice();
         initOps(peer, depth, rMask, gMask, bMask, gd.getScreen());
--- a/src/windows/native/sun/windows/awt_Component.cpp	Mon Jul 06 14:10:31 2009 -0400
+++ b/src/windows/native/sun/windows/awt_Component.cpp	Thu Jul 09 13:53:05 2009 -0400
@@ -5975,17 +5975,7 @@
     env->DeleteGlobalRef(self);
 
     delete cpps;
-
-    if (result != NULL)
-    {
-        jintArray resultGlobalRef = (jintArray)env->NewGlobalRef(result);
-        env->DeleteLocalRef(result);
-        return resultGlobalRef;
-    }
-    else
-    {
-        return NULL;
-    }
+    return result; // this reference is global
 }
 
 jboolean AwtComponent::_IsObscured(void *param)
--- a/src/windows/native/sun/windows/awt_Frame.cpp	Mon Jul 06 14:10:31 2009 -0400
+++ b/src/windows/native/sun/windows/awt_Frame.cpp	Thu Jul 09 13:53:05 2009 -0400
@@ -381,19 +381,29 @@
 
 void AwtFrame::CreateProxyFocusOwner()
 {
-    DASSERT(m_proxyFocusOwner == NULL);
-    DASSERT(AwtToolkit::MainThread() == ::GetCurrentThreadId());
+    if (AwtToolkit::IsMainThread()) {
+        AwtFrame::_CreateProxyFocusOwner((void *)this);
+    } else {
+        AwtToolkit::GetInstance().InvokeFunction(AwtFrame::_CreateProxyFocusOwner, (void *)this);
+    }
+}
+
+void AwtFrame::_CreateProxyFocusOwner(void *param)
+{
+    DASSERT(AwtToolkit::IsMainThread());
 
-    m_proxyFocusOwner = ::CreateWindow(TEXT("STATIC"),
-                                       TEXT("ProxyFocusOwner"),
-                                       WS_CHILD,
-                                       0, 0, 0, 0, GetHWnd(), NULL,
-                                       AwtToolkit::GetInstance().
-                                           GetModuleHandle(),
-                                       NULL);
+    AwtFrame *f = (AwtFrame *)param;
+    DASSERT(f->m_proxyFocusOwner == NULL);
 
-    m_proxyDefWindowProc = ComCtl32Util::GetInstance().SubclassHWND(m_proxyFocusOwner, ProxyWindowProc);
+    f->m_proxyFocusOwner = ::CreateWindow(TEXT("STATIC"),
+                                          TEXT("ProxyFocusOwner"),
+                                          WS_CHILD,
+                                          0, 0, 0, 0, f->GetHWnd(), NULL,
+                                          AwtToolkit::GetInstance().
+                                          GetModuleHandle(),
+                                          NULL);
 
+    f->m_proxyDefWindowProc = ComCtl32Util::GetInstance().SubclassHWND(f->m_proxyFocusOwner, ProxyWindowProc);
 }
 
 void AwtFrame::DestroyProxyFocusOwner()
--- a/src/windows/native/sun/windows/awt_Frame.h	Mon Jul 06 14:10:31 2009 -0400
+++ b/src/windows/native/sun/windows/awt_Frame.h	Thu Jul 09 13:53:05 2009 -0400
@@ -117,7 +117,6 @@
     INLINE BOOL IsUndecorated() { return m_isUndecorated; }
 
     INLINE HWND GetProxyFocusOwner() {
-        DASSERT(AwtToolkit::MainThread() == ::GetCurrentThreadId());
         if (m_proxyFocusOwner == NULL) {
             CreateProxyFocusOwner();
         }
@@ -165,6 +164,8 @@
     void CreateProxyFocusOwner();
     void DestroyProxyFocusOwner();
 
+    /* creates proxy focus owner, called on Toolkit thread */
+    static void _CreateProxyFocusOwner(void *param);
     /* destroys proxy focus owner, called on Toolkit thread */
     static void _DestroyProxyFocusOwner(void *param);
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/awt/Component/PrintAllXcheckJNI/PrintAllXcheckJNI.java	Thu Jul 09 13:53:05 2009 -0400
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/*
+  @test
+  @bug 6736247
+  @summary Component.printAll Invalid local JNI handle
+  @author Dmitry Cherepanov: area=awt.component
+  @run  main/othervm -Xcheck:jni PrintAllXcheckJNI
+*/
+
+import java.awt.*;
+import java.awt.image.BufferedImage;
+
+public class PrintAllXcheckJNI
+{
+    public static void main(String []s)
+    {
+        Frame frame = new Frame();
+        frame.setVisible(true);
+
+        BufferedImage img = new BufferedImage(frame.getWidth(),
+                                              frame.getHeight(),
+                                              BufferedImage.TYPE_INT_RGB);
+        Graphics2D g = img.createGraphics();
+
+        frame.printAll(g);
+
+        g.dispose();
+        img.flush();
+    }
+}
--- a/test/java/awt/Focus/FocusTraversalPolicy/DefaultFTPTest.java	Mon Jul 06 14:10:31 2009 -0400
+++ b/test/java/awt/Focus/FocusTraversalPolicy/DefaultFTPTest.java	Thu Jul 09 13:53:05 2009 -0400
@@ -104,7 +104,7 @@
 */
 
 public class DefaultFTPTest {
-    final int TESTS_NUMBER = 10;
+    final int TESTS_NUMBER = 11;
 
     public static void main(String[] args) {
         DefaultFTPTest app = new DefaultFTPTest();
@@ -928,3 +928,63 @@
         }
     }
 }
+
+/*
+ * frame [ container(root) [...] comp ]
+ * - getDefaultComponent(<frame>) should implicitly down-cycle into the <container>.
+ * - getFirstComponent(<frame>) should implicitly down-cycle into the <container>.
+ */
+class PolicyTest11 extends AbstractPolicyTest {
+    protected Frame createFrame() {
+        Frame frame = (Frame) registerComponent("frame", new Frame("Test Frame"));
+        frame.setLayout(new FlowLayout());
+
+        Container cont = (Container)registerComponent("panel", new Panel());
+        cont.add(registerComponent("btn-1", new Button("button")));
+        cont.add(registerComponent("btn-2", new Button("button")));
+
+        frame.add(cont);
+        frame.add(registerComponent("btn-3", new Button("button")));
+
+        return frame;
+    }
+
+    protected void customizeHierarchy() {
+        ((Container)getComponent("frame")).setFocusTraversalPolicy(new DefaultFocusTraversalPolicy());
+        ((Container)getComponent("panel")).setFocusCycleRoot(true);
+    }
+
+    protected Map<String, String> getForwardOrder() {
+        Map<String, String> order = new HashMap<String, String>();
+        order.put("frame", "btn-1");
+        order.put("btn-1", "btn-2");
+        order.put("btn-2", "btn-1");
+        order.put("btn-3", "btn-1");
+        return order;
+    }
+
+    protected Map<String, String> getBackwardOrder() {
+        Map<String, String> order = new HashMap<String, String>();
+        order.put("btn-3", "btn-1");
+        order.put("btn-2", "btn-1");
+        order.put("btn-1", "btn-2");
+        order.put("frame", "btn-3");
+        return order;
+    }
+
+    protected String[] getContainersToTest() {
+        return new String[] {"frame"};
+    }
+
+    protected String getDefaultComp(String focusCycleRoot_id) {
+        return "btn-1";
+    }
+
+    protected String getFirstComp(String focusCycleRoot_id) {
+        return "btn-1";
+    }
+
+    protected String getLastComp(String focusCycleRoot_id) {
+        return "btn-3";
+    }
+}
--- a/test/java/awt/Focus/FocusTraversalPolicy/LayoutFTPTest.java	Mon Jul 06 14:10:31 2009 -0400
+++ b/test/java/awt/Focus/FocusTraversalPolicy/LayoutFTPTest.java	Thu Jul 09 13:53:05 2009 -0400
@@ -105,7 +105,7 @@
 */
 
 public class LayoutFTPTest {
-    final int TESTS_NUMBER = 10;
+    final int TESTS_NUMBER = 11;
 
     public static void main(String[] args) {
         LayoutFTPTest app = new LayoutFTPTest();
@@ -929,3 +929,63 @@
         }
     }
 }
+
+/*
+ * frame [ container(root) [...] comp ]
+ * - getDefaultComponent(<frame>) should implicitly down-cycle into the <container>.
+ * - getFirstComponent(<frame>) should implicitly down-cycle into the <container>.
+ */
+class PolicyTest11 extends AbstractPolicyTest {
+    protected Frame createFrame() {
+        JFrame jframe = (JFrame) registerComponent("jframe", new JFrame("Test Frame"));
+        jframe.setLayout(new FlowLayout());
+
+        Container cont = (Container)registerComponent("jpanel", new JPanel());
+        cont.add(registerComponent("btn-1", new JButton("jbutton")));
+        cont.add(registerComponent("btn-2", new JButton("jbutton")));
+
+        jframe.add(cont);
+        jframe.add(registerComponent("btn-3", new JButton("jbutton")));
+
+        return jframe;
+    }
+
+    protected void customizeHierarchy() {
+        ((Container)getComponent("jframe")).setFocusTraversalPolicy(new LayoutFocusTraversalPolicy());
+        ((Container)getComponent("jpanel")).setFocusCycleRoot(true);
+    }
+
+    protected Map<String, String> getForwardOrder() {
+        Map<String, String> order = new HashMap<String, String>();
+        order.put("jframe", "btn-1");
+        order.put("btn-1", "btn-2");
+        order.put("btn-2", "btn-1");
+        order.put("btn-3", "btn-1");
+        return order;
+    }
+
+    protected Map<String, String> getBackwardOrder() {
+        Map<String, String> order = new HashMap<String, String>();
+        order.put("btn-3", "btn-1");
+        order.put("btn-2", "btn-1");
+        order.put("btn-1", "btn-2");
+        order.put("jframe", "btn-3");
+        return order;
+    }
+
+    protected String[] getContainersToTest() {
+        return new String[] {"jframe"};
+    }
+
+    protected String getDefaultComp(String focusCycleRoot_id) {
+        return "btn-1";
+    }
+
+    protected String getFirstComp(String focusCycleRoot_id) {
+        return "btn-1";
+    }
+
+    protected String getLastComp(String focusCycleRoot_id) {
+        return "btn-3";
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/awt/GridBagLayout/GridBagLayoutIpadXYTest/GridBagLayoutIpadXYTest.html	Thu Jul 09 13:53:05 2009 -0400
@@ -0,0 +1,43 @@
+<html>
+<!--  
+
+ Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ This code is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License version 2 only, as
+ published by the Free Software Foundation.
+
+ This code is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ version 2 for more details (a copy is included in the LICENSE file that
+ accompanied this code).
+
+ You should have received a copy of the GNU General Public License version
+ 2 along with this work; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+
+ Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ CA 95054 USA or visit www.sun.com if you need additional information or
+ have any questions.
+
+  @test
+  @bug 5004032
+  @summary GridBagConstraints.ipad(x|y) defined in a new way
+  @author dav@sparc.spb.su area= 
+  @run applet GridBagLayoutIpadXYTest.html
+  -->
+<head>
+<title>  </title>
+</head>
+<body>
+
+<h1>GridBagLayoutIpadXYTest<br>Bug ID: 5004032 </h1>
+
+<p> This is an AUTOMATIC test, simply wait for completion </p>
+
+<APPLET CODE="GridBagLayoutIpadXYTest.class" WIDTH=200 HEIGHT=200></APPLET>
+</body>
+</html>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/awt/GridBagLayout/GridBagLayoutIpadXYTest/GridBagLayoutIpadXYTest.java	Thu Jul 09 13:53:05 2009 -0400
@@ -0,0 +1,89 @@
+/*
+ * Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/*
+  test
+  @bug 5004032
+  @summary GridBagConstraints.ipad(x|y) defined in a new way
+  @author dav@sparc.spb.su area=
+  @run applet GridBagLayoutIpadXYTest.html
+*/
+
+import java.applet.Applet;
+import java.awt.*;
+
+public class GridBagLayoutIpadXYTest extends Applet
+{
+    Frame frame = new Frame();
+    TextField jtf = null;
+    final int customIpadx = 300;
+    final int customIpady = 40;
+
+    public void init()
+    {
+        this.setLayout (new BorderLayout ());
+
+        String[] instructions =
+        {
+            "This is an AUTOMATIC test",
+            "simply wait until it is done"
+        };
+    }//End  init()
+
+    public void start ()
+    {
+        validate();
+        frame.setLayout(new GridBagLayout());
+        GridBagConstraints gc = new GridBagConstraints();
+        Insets fieldInsets = new Insets(0,5,5,0);
+
+        gc.anchor = gc.NORTH;
+        gc.fill = gc.HORIZONTAL;
+        gc.gridx = 1;
+        gc.gridy = 0;
+        gc.weightx = 1;
+        gc.ipadx = customIpadx;
+        gc.ipady = customIpady;
+        gc.insets = fieldInsets;
+        jtf = new TextField();
+        frame.add(jtf, gc);
+
+        frame.pack();
+        frame.setVisible(true);
+
+        ((sun.awt.SunToolkit)Toolkit.getDefaultToolkit()).realSync();
+
+        Dimension minSize = jtf.getMinimumSize();
+        if ( minSize.width + customIpadx != jtf.getSize().width ||
+             minSize.height + customIpady != jtf.getSize().height ){
+            System.out.println("TextField originally has min size = " + jtf.getMinimumSize());
+            System.out.println("TextField supplied with ipadx =  300, ipady =40");
+            System.out.println("Frame size: " + frame.getSize());
+            System.out.println(" Fields's size is "+jtf.getSize());
+
+            throw new RuntimeException("Test Failed. TextField has incorrect width. ");
+        }
+        System.out.println("Test Passed.");
+
+    }// start()
+}
--- a/test/java/awt/GridLayout/LayoutExtraGaps/LayoutExtraGaps.java	Mon Jul 06 14:10:31 2009 -0400
+++ b/test/java/awt/GridLayout/LayoutExtraGaps/LayoutExtraGaps.java	Thu Jul 09 13:53:05 2009 -0400
@@ -24,7 +24,8 @@
 /*
    @test
    @bug 4370316
-   @summary GridLayout does not fill its Container
+   @summary GridLayout does not centre its component properly
+    (summary was GridLayout does not fill its Container)
    @library ../../regtesthelpers
    @build Util
    @author Andrei Dmitriev : area=awt.layout
@@ -90,25 +91,97 @@
         setVisible(true);
 
         Util.waitForIdle(Util.createRobot());
-        Rectangle r1 = yellowPanel.getComponent(0).getBounds();
-        Rectangle r2 = bluePanel.getComponent(0).getBounds();
-        Rectangle r3 = blackPanel.getComponent(0).getBounds();
-        Rectangle r4 = redPanel.getComponent(0).getBounds();
+
+        if (isComponentCentredLTR(yellowPanel) && isComponentCentredLTR(bluePanel)
+                && isComponentCentredLTR(blackPanel) && isComponentCentredRTL(redPanel))
+        {
+            System.out.println("Test passed.");
+        } else {
+            throw new RuntimeException("Test failed. GridLayout doesn't center component.");
+        }
+    }
+
+    /**
+     * Checks if the components under Panel p are properly centred (i.e.
+     * opposite borders between the Panel and component are equal). Panel p
+     * must not be affect by RTL orientation (RTL only affects horizontal
+     * positioning and components lay out from top right corner).
+     *
+     * @param      p the panel where the components exist and is not affected
+     *             by right to left orientation
+     * @return     true if components of panel p are properly centre, false
+     *             otherwise
+     */
+    public static boolean isComponentCentredLTR(Panel p) {
+        double borderLeft;
+        double borderRight;
+        double borderTop;
+        double borderBottom;
+
+        //The first component(rectangle) in panel p.
+        Rectangle firstRec = p.getComponent(0).getBounds();
+
+        //The last component(rectangle) in panel p.
+        Rectangle lastRec = p.getComponent(compCount - 1).getBounds();
+
+        System.out.println("bounds of the first rectangle in "+ p.getName() + " = " + firstRec);
+        System.out.println("bounds of the last rectangle in "+ p.getName() + " = " + lastRec);
+
+        borderLeft = firstRec.getX();
+        borderRight = p.getWidth() - lastRec.getWidth() - lastRec.getX();
+        borderTop = firstRec.getY();
+        borderBottom = p.getHeight() - lastRec.getHeight() - lastRec.getY();
+
+        return areBordersEqual(borderLeft, borderRight) &&
+                areBordersEqual(borderTop, borderBottom);
+    }
 
-        System.out.println("firstHorizLabel bounds  ="+r1);
-        System.out.println("firstVertLabel bounds ="+r2);
-        System.out.println("firstHorizLabel_RTL bounds ="+r3);
-        System.out.println("firstVertLabel_RTL bounds ="+r4);
-        if ((r1.getX() == 0 && r1.getY() == 0) ||
-            (r2.getX() == 0 && r2.getY() == 0) ||
-            (r3.getX() == 0 && r3.getY() == 0) ||
-            // RTL only affects horizontal positioning and components lays out from top right corner
-            (r4.getX() == blackPanel.getWidth() && r4.getY() == 0))
-        {
-            throw new RuntimeException("Test failed. GridLayout doesn't center component.");
-        } else {
-            System.out.println("Test passed.");
-        }
+    /**
+     * Checks if the components under Panel p are properly centred (i.e.
+     * opposite borders between the Panel and component are equal). Panel p
+     * must be affect by RTL orientation (RTL only affects horizontal positioning
+     * and components lay out from top right corner).
+     *
+     * @param      p the panel where the components exist and is affected by
+     *             right to left orientation
+     * @return     true if components of panel p are properly centre, false
+     *             otherwise
+     */
+    public static boolean isComponentCentredRTL(Panel p) {
+        double borderLeft;
+        double borderRight;
+        double borderTop;
+        double borderBottom;
+
+        //The first component(rectangle) in panel p.
+        Rectangle firstRec = p.getComponent(0).getBounds();
+
+        //The last component(rectangle) in panel p.
+        Rectangle lastRec = p.getComponent(compCount - 1).getBounds();
+
+        System.out.println("bounds of the first rectangle in "+ p.getName() + " = " + firstRec);
+        System.out.println("bounds of the last rectangle in "+ p.getName() + " = " + lastRec);
+
+        borderLeft = lastRec.getX();
+        borderRight = p.getWidth() - firstRec.getWidth() - firstRec.getX();
+        borderTop = lastRec.getY();
+        borderBottom = p.getHeight() - firstRec.getHeight() - firstRec.getY();
+
+        return areBordersEqual(borderLeft, borderRight) &&
+                areBordersEqual(borderTop, borderBottom);
+    }
+
+    /**
+     * Given two borders border1 and border2 check if they are equal.
+     *
+     * @param      border1 one of the borders being compared
+     * @param      border2 the other border being compared
+     * @return     true if border1 and border2 are equal to each other (i.e.
+     *             their width/height difference is at most 1, assuming the
+     *             smallest pixel is of size 1), false otherwise
+     */
+    public static boolean areBordersEqual(double border1, double border2) {
+        return Math.abs(border1 - border2) <= 1;
     }
 
     public static void main(String[] args) {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/beans/XMLEncoder/Test6852574.java	Thu Jul 09 13:53:05 2009 -0400
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/*
+ * @test
+ * @bug 6852574
+ * @summary Tests Enum subclass encoding
+ * @author Sergey Malenkov
+ */
+
+public final class Test6852574 extends AbstractTest {
+    public static void main(String[] args) {
+        new Test6852574().test(true);
+    }
+
+    protected Object getObject() {
+        return Data.FIRST;
+    }
+
+    protected Object getAnotherObject() {
+        return Data.SECOND;
+    }
+
+    public enum Data {
+        FIRST {
+            @Override
+            public String toString() {
+                return "1";
+            }
+        },
+        SECOND {
+            @Override
+            public String toString() {
+                return "2";
+            }
+        }
+    }
+}
--- a/test/java/text/Bidi/Bug6850113.java	Mon Jul 06 14:10:31 2009 -0400
+++ b/test/java/text/Bidi/Bug6850113.java	Thu Jul 09 13:53:05 2009 -0400
@@ -24,6 +24,7 @@
  * @test
  * @bug 6850113
  * @summary Verify the return value of digit() for some digits.
+ * @compile -XDignore.symbol.file=true Bug6850113.java
  */
 
 import sun.text.normalizer.UCharacter;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/text/Format/DateFormat/Bug6609750.java	Thu Jul 09 13:53:05 2009 -0400
@@ -0,0 +1,81 @@
+/*
+ * Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/**
+ * @test
+ * @bug 6609750
+ * @summary Make sure that SimpleDateFormat.format() formats years correctly.
+ */
+import java.text.*;
+import java.util.*;
+
+public class Bug6609750 {
+
+    public static void main(String[] args) {
+        boolean error = false;
+
+        Locale defaultLocale = Locale.getDefault();
+        Locale.setDefault(Locale.US);
+
+        Date[] dates = {
+            new Date(9-1900,     Calendar.JUNE, 12),
+            new Date(99-1900,    Calendar.JUNE, 12),
+            new Date(999-1900,   Calendar.JUNE, 12),
+            new Date(2009-1900,  Calendar.JUNE, 12),
+            new Date(30009-1900, Calendar.JUNE, 12),
+        };
+
+        String[] patterns = {
+           "y", "yy", "yyy", "yyyy", "yyyyy", "yyyyyy"
+        };
+        String[][] expectedResults = {
+           {"9",     "09", "009",   "0009",  "00009", "000009"},
+           {"99",    "99", "099",   "0099",  "00099", "000099"},
+           {"999",   "99", "999",   "0999",  "00999", "000999"},
+           {"2009",  "09", "2009",  "2009",  "02009", "002009"},
+           {"30009", "09", "30009", "30009", "30009", "030009"},
+        };
+
+        SimpleDateFormat sdf = new SimpleDateFormat();
+        for (int dateNo = 0; dateNo < dates.length; dateNo++) {
+            Date date = dates[dateNo];
+            for (int patternNo = 0; patternNo < patterns.length; patternNo++) {
+                sdf.applyPattern(patterns[patternNo]);
+                String got = sdf.format(date);
+                if (!expectedResults[dateNo][patternNo].equals(got)) {
+                    error = true;
+                    System.err.println("Failed: Unexpected format result: " +
+                        "Expected: \"" + expectedResults[dateNo][patternNo] +
+                        "\", Got: \"" + got + "\" for date " + date +
+                        " with pattern \"" + patterns[patternNo] + "\"");
+                }
+            }
+        }
+
+        Locale.setDefault(defaultLocale);
+        if (error) {
+            throw new RuntimeException("SimpleDateFormat.format() error.");
+        };
+    }
+
+}
--- a/test/javax/swing/border/Test4856008.java	Mon Jul 06 14:10:31 2009 -0400
+++ b/test/javax/swing/border/Test4856008.java	Thu Jul 09 13:53:05 2009 -0400
@@ -35,6 +35,7 @@
 import java.awt.Font;
 import java.awt.Insets;
 
+import javax.swing.ActionMap;
 import javax.swing.JComponent;
 import javax.swing.JFileChooser;
 import javax.swing.JLabel;
@@ -51,6 +52,7 @@
 import javax.swing.border.MatteBorder;
 import javax.swing.border.SoftBevelBorder;
 import javax.swing.border.TitledBorder;
+import javax.swing.plaf.ActionMapUIResource;
 import javax.swing.plaf.BorderUIResource;
 import javax.swing.plaf.synth.SynthLookAndFeel;
 import javax.swing.plaf.basic.BasicBorders;
@@ -59,7 +61,6 @@
 import javax.swing.plaf.metal.MetalComboBoxEditor;
 
 import sun.swing.plaf.synth.SynthFileChooserUI;
-import sun.tools.jconsole.BorderedComponent;
 
 public class Test4856008 {
     private static final JLabel LABEL = new JLabel();
@@ -133,11 +134,6 @@
 
             //+ SynthFileChooserUI.UIBorder:
             new SynthFileChooser().getUIBorder(),
-
-            //+ BorderedComponent.FocusBorder:
-            getBorder(false),
-            //+ BorderedComponent.LabeledBorder:
-            getBorder(true),
     };
 
     public static void main(String[] args) {
@@ -182,15 +178,6 @@
         return LABEL;
     }
 
-    // This method is used to get the border from BorderedComponent
-    private static Border getBorder(boolean labeled) {
-        JComponent component = new BorderedComponent("4856008", null, true);
-        CompoundBorder border = (CompoundBorder) component.getBorder();
-        return labeled
-                ? border.getInsideBorder()
-                : border.getOutsideBorder();
-    }
-
     // This class is used to get the instance of BasicBorders.RolloverMarginBorder
     private static class ToolBar extends BasicToolBarUI {
         private Border getRolloverMarginBorder() {
@@ -224,6 +211,11 @@
         }
 
         @Override
+        protected ActionMap createActionMap() {
+            return new ActionMapUIResource();
+        }
+
+        @Override
         public String getFileName() {
             return this.name;
         }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/javax/swing/plaf/nimbus/Test6849805.java	Thu Jul 09 13:53:05 2009 -0400
@@ -0,0 +1,73 @@
+/*
+ * Copyright 2008 Sun Microsystems, Inc.  All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/* @test
+   @bug 6849805
+   @summary Tests NimbusLookAndFeel.deriveColor()
+   @author Peter Zhelezniakov
+   @run main Test6849805
+*/
+
+import java.awt.Color;
+
+
+public class Test6849805 {
+
+    static boolean pass = true;
+
+    static class Minimbus extends javax.swing.plaf.nimbus.NimbusLookAndFeel {
+
+        public void test(Color c1, Color c2, float f) {
+            Color r = getDerivedColor(c1, c2, f);
+            Color test = (f > 0 ? c2 : c1);
+            System.out.printf("Got %s, need %s ", r, test);
+
+            if (r.getRGB() == test.getRGB() &&
+                r.getAlpha() == test.getAlpha()) {
+
+                System.out.println("Ok");
+            } else {
+                System.out.println("FAIL");
+                pass = false;
+            }
+        }
+    }
+
+    public static void main(String[] args) {
+        Minimbus laf = new Minimbus();
+        laf.test(Color.WHITE, Color.BLACK, 0f);
+        laf.test(Color.WHITE, Color.BLACK, 1f);
+        laf.test(Color.BLACK, Color.WHITE, 0f);
+        laf.test(Color.BLACK, Color.WHITE, 1f);
+        laf.test(Color.RED, Color.GREEN, 0f);
+        laf.test(Color.RED, Color.GREEN, 1f);
+        laf.test(new Color(127, 127, 127), new Color(51, 151, 212), 0f);
+        laf.test(new Color(127, 127, 127), new Color(51, 151, 212), 1f);
+        laf.test(new Color(221, 63, 189), new Color(112, 200, 89), 0f);
+        laf.test(new Color(221, 63, 189), new Color(112, 200, 89), 1f);
+
+        if (! pass) {
+            throw new RuntimeException("Some testcases failed, see above");
+        }
+    }
+}