6981576: TitledBorder.getBorder() returns null in java build 1.7.0-ea-b107

Reviewed-by: alexp
diff --git a/jdk/src/share/classes/javax/swing/border/TitledBorder.java b/jdk/src/share/classes/javax/swing/border/TitledBorder.java
index 3bf385e..929fbd0 100644
--- a/jdk/src/share/classes/javax/swing/border/TitledBorder.java
+++ b/jdk/src/share/classes/javax/swing/border/TitledBorder.java
@@ -165,11 +165,11 @@
      * @param titlePosition the position for the title
      */
     public TitledBorder(Border border,
-                         String title,
-                         int titleJustification,
-                         int titlePosition) {
+                        String title,
+                        int titleJustification,
+                        int titlePosition) {
         this(border, title, titleJustification,
-                        titlePosition, null, null);
+             titlePosition, null, null);
     }
 
     /**
@@ -183,12 +183,12 @@
      * @param titleFont the font for rendering the title
      */
     public TitledBorder(Border border,
-                         String title,
-                         int titleJustification,
-                         int titlePosition,
-                         Font titleFont) {
+                        String title,
+                        int titleJustification,
+                        int titlePosition,
+                        Font titleFont) {
         this(border, title, titleJustification,
-                        titlePosition, titleFont, null);
+             titlePosition, titleFont, null);
     }
 
     /**
@@ -205,11 +205,11 @@
      */
     @ConstructorProperties({"border", "title", "titleJustification", "titlePosition", "titleFont", "titleColor"})
     public TitledBorder(Border border,
-                         String title,
-                         int titleJustification,
-                         int titlePosition,
-                         Font titleFont,
-                         Color titleColor) {
+                        String title,
+                        int titleJustification,
+                        int titlePosition,
+                        Font titleFont,
+                        Color titleColor) {
         this.title = title;
         this.border = border;
         this.titleFont = titleFont;
@@ -234,7 +234,7 @@
      * @param height the height of the painted border
      */
     public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
-        Border border = getBorderUI();
+        Border border = getBorder();
         String title = getTitle();
         if ((title != null) && !title.isEmpty()) {
             int edge = (border instanceof TitledBorder) ? 0 : EDGE_SPACING;
@@ -347,7 +347,7 @@
      * @param insets the object to be reinitialized
      */
     public Insets getBorderInsets(Component c, Insets insets) {
-        Border border = getBorderUI();
+        Border border = getBorder();
         if (border == null) {
             insets.set(0, 0, 0, 0);
         }
@@ -402,22 +402,34 @@
     /**
      * Returns whether or not the border is opaque.
      */
-    public boolean isBorderOpaque() { return false; }
+    public boolean isBorderOpaque() {
+        return false;
+    }
 
     /**
      * Returns the title of the titled border.
+     *
+     * @return the title of the titled border
      */
-    public String getTitle()        {       return title;   }
+    public String getTitle() {
+        return title;
+    }
 
     /**
      * Returns the border of the titled border.
+     *
+     * @return the border of the titled border
      */
     public Border getBorder() {
-        return border;
+        return border != null
+                ? border
+                : UIManager.getBorder("TitledBorder.border");
     }
 
     /**
      * Returns the title-position of the titled border.
+     *
+     * @return the title-position of the titled border
      */
     public int getTitlePosition() {
         return titlePosition;
@@ -425,20 +437,28 @@
 
     /**
      * Returns the title-justification of the titled border.
+     *
+     * @return the title-justification of the titled border
      */
-    public int getTitleJustification()      {       return titleJustification;      }
+    public int getTitleJustification() {
+        return titleJustification;
+    }
 
     /**
      * Returns the title-font of the titled border.
+     *
+     * @return the title-font of the titled border
      */
-    public Font getTitleFont()      {
+    public Font getTitleFont() {
         return titleFont;
     }
 
     /**
      * Returns the title-color of the titled border.
+     *
+     * @return the title-color of the titled border
      */
-    public Color getTitleColor()    {
+    public Color getTitleColor() {
         return titleColor;
     }
 
@@ -447,15 +467,19 @@
 
     /**
      * Sets the title of the titled border.
-     * param title the title for the border
+     * @param title  the title for the border
      */
-    public void setTitle(String title)      {       this.title = title;     }
+    public void setTitle(String title) {
+        this.title = title;
+    }
 
     /**
      * Sets the border of the titled border.
      * @param border the border
      */
-    public void setBorder(Border border)    {       this.border = border;   }
+    public void setBorder(Border border) {
+        this.border = border;
+    }
 
     /**
      * Sets the title-position of the titled border.
@@ -482,19 +506,19 @@
      * Sets the title-justification of the titled border.
      * @param titleJustification the justification for the border
      */
-    public void setTitleJustification(int titleJustification)       {
+    public void setTitleJustification(int titleJustification) {
         switch (titleJustification) {
-          case DEFAULT_JUSTIFICATION:
-          case LEFT:
-          case CENTER:
-          case RIGHT:
-          case LEADING:
-          case TRAILING:
-            this.titleJustification = titleJustification;
-            break;
-          default:
-            throw new IllegalArgumentException(titleJustification +
-                                        " is not a valid title justification.");
+            case DEFAULT_JUSTIFICATION:
+            case LEFT:
+            case CENTER:
+            case RIGHT:
+            case LEADING:
+            case TRAILING:
+                this.titleJustification = titleJustification;
+                break;
+            default:
+                throw new IllegalArgumentException(titleJustification +
+                        " is not a valid title justification.");
         }
     }
 
@@ -518,6 +542,7 @@
      * Returns the minimum dimensions this border requires
      * in order to fully display the border and title.
      * @param c the component where this border will be drawn
+     * @return the {@code Dimension} object
      */
     public Dimension getMinimumSize(Component c) {
         Insets insets = getBorderInsets(c);
@@ -557,7 +582,7 @@
         if (height < 0) {
             throw new IllegalArgumentException("Height must be >= 0");
         }
-        Border border = getBorderUI();
+        Border border = getBorder();
         String title = getTitle();
         if ((title != null) && !title.isEmpty()) {
             int edge = (border instanceof TitledBorder) ? 0 : EDGE_SPACING;
@@ -616,13 +641,6 @@
         return Component.BaselineResizeBehavior.OTHER;
     }
 
-    private Border getBorderUI() {
-        Border border = getBorder();
-        return border != null
-                ? border
-                : UIManager.getBorder("TitledBorder.border");
-    }
-
     private int getPosition() {
         int position = getTitlePosition();
         if (position != DEFAULT_POSITION) {
diff --git a/jdk/test/javax/swing/border/Test6981576.java b/jdk/test/javax/swing/border/Test6981576.java
new file mode 100644
index 0000000..479118f
--- /dev/null
+++ b/jdk/test/javax/swing/border/Test6981576.java
@@ -0,0 +1,91 @@
+/*
+ * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 6981576
+ * @summary Tests that default border for the titled border is not null
+ * @author Sergey Malenkov
+ */
+
+import java.awt.Component;
+import java.awt.Graphics;
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+import javax.swing.SwingUtilities;
+import javax.swing.UIManager;
+import javax.swing.UIManager.LookAndFeelInfo;
+import javax.swing.border.TitledBorder;
+
+public class Test6981576 extends TitledBorder implements Runnable, Thread.UncaughtExceptionHandler {
+    public static void main(String[] args) {
+        SwingUtilities.invokeLater(new Test6981576());
+    }
+
+    private int index;
+    private LookAndFeelInfo[] infos;
+    private JFrame frame;
+
+    private Test6981576() {
+        super("");
+    }
+
+    @Override
+    public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
+        getBorder().paintBorder(c, g, x, y, width, height);
+    }
+
+    public void run() {
+        if (this.infos == null) {
+            this.infos = UIManager.getInstalledLookAndFeels();
+            Thread.currentThread().setUncaughtExceptionHandler(this);
+            JPanel panel = new JPanel();
+            panel.setBorder(this);
+            this.frame = new JFrame(getClass().getSimpleName());
+            this.frame.add(panel);
+            this.frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
+            this.frame.setVisible(true);
+        }
+        if (this.index == this.infos.length) {
+            this.frame.dispose();
+        }
+        else {
+            LookAndFeelInfo info = this.infos[this.index % this.infos.length];
+            try {
+                UIManager.setLookAndFeel(info.getClassName());
+            }
+            catch (Exception exception) {
+                System.err.println("could not change look and feel");
+            }
+            SwingUtilities.updateComponentTreeUI(this.frame);
+            this.frame.pack();
+            this.frame.setLocationRelativeTo(null);
+            this.index++;
+            SwingUtilities.invokeLater(this);
+        }
+    }
+
+    public void uncaughtException(Thread thread, Throwable throwable) {
+        System.exit(1);
+    }
+}