jdk/src/java.desktop/share/classes/sun/awt/ComponentFactory.java
changeset 30471 c1568a2416a8
parent 26037 508779ce6619
child 36903 addc2e9d4bd4
--- a/jdk/src/java.desktop/share/classes/sun/awt/ComponentFactory.java	Fri Apr 17 16:57:30 2015 +0300
+++ b/jdk/src/java.desktop/share/classes/sun/awt/ComponentFactory.java	Fri Apr 17 17:01:24 2015 +0300
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,76 +25,421 @@
 
 package sun.awt;
 
-import sun.awt.datatransfer.DataTransferer;
-
 import java.awt.*;
-import java.awt.dnd.*;
+import java.awt.dnd.DragGestureEvent;
+import java.awt.dnd.InvalidDnDOperationException;
 import java.awt.dnd.peer.DragSourceContextPeer;
 import java.awt.peer.*;
 
+import sun.awt.datatransfer.DataTransferer;
+
+final class LightweightPeerHolder {
+    static final LightweightPeer lightweightMarker = new NullComponentPeer();
+
+    private LightweightPeerHolder() {
+    }
+}
+
 /**
- * Interface for component creation support in toolkits
+ * Interface for component creation support in toolkits.
  */
 public interface ComponentFactory {
 
-    CanvasPeer createCanvas(Canvas target) throws HeadlessException;
+    /**
+     * Creates a peer for a component or container. This peer is windowless and
+     * allows the Component and Container classes to be extended directly to
+     * create windowless components that are defined entirely in java.
+     *
+     * @param  target The Component to be created
+     * @return the peer for the specified component
+     */
+    default LightweightPeer createComponent(Component target) {
+        return LightweightPeerHolder.lightweightMarker;
+    }
 
-    PanelPeer createPanel(Panel target) throws HeadlessException;
+    /**
+     * Creates this toolkit's implementation of the {@code Desktop} using the
+     * specified peer interface.
+     *
+     * @param  target the desktop to be implemented
+     * @return this toolkit's implementation of the {@code Desktop}
+     * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+     *         true
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see java.awt.Desktop
+     * @see java.awt.peer.DesktopPeer
+     * @since 1.6
+     */
+    default DesktopPeer createDesktopPeer(Desktop target) {
+        throw new HeadlessException();
+    }
 
-    WindowPeer createWindow(Window target) throws HeadlessException;
+    /**
+     * Creates this toolkit's implementation of {@code Button} using the
+     * specified peer interface.
+     *
+     * @param  target the button to be implemented
+     * @return this toolkit's implementation of {@code Button}
+     * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+     *         true
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see java.awt.Button
+     * @see java.awt.peer.ButtonPeer
+     */
+    default ButtonPeer createButton(Button target) {
+        throw new HeadlessException();
+    }
 
-    FramePeer createFrame(Frame target) throws HeadlessException;
-
-    DialogPeer createDialog(Dialog target) throws HeadlessException;
+    /**
+     * Creates this toolkit's implementation of {@code TextField} using the
+     * specified peer interface.
+     *
+     * @param  target the text field to be implemented
+     * @return this toolkit's implementation of {@code TextField}
+     * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+     *         true
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see java.awt.TextField
+     * @see java.awt.peer.TextFieldPeer
+     */
+    default TextFieldPeer createTextField(TextField target) {
+        throw new HeadlessException();
+    }
 
-    ButtonPeer createButton(Button target) throws HeadlessException;
+    /**
+     * Creates this toolkit's implementation of {@code Label} using the
+     * specified peer interface.
+     *
+     * @param  target the label to be implemented
+     * @return this toolkit's implementation of {@code Label}
+     * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+     *         true
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see java.awt.Label
+     * @see java.awt.peer.LabelPeer
+     */
+    default LabelPeer createLabel(Label target) {
+        throw new HeadlessException();
+    }
 
-    TextFieldPeer createTextField(TextField target)
-        throws HeadlessException;
+    /**
+     * Creates this toolkit's implementation of {@code List} using the specified
+     * peer interface.
+     *
+     * @param  target the list to be implemented
+     * @return this toolkit's implementation of {@code List}
+     * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+     *         true
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see java.awt.List
+     * @see java.awt.peer.ListPeer
+     */
+    default ListPeer createList(java.awt.List target) {
+        throw new HeadlessException();
+    }
 
-    ChoicePeer createChoice(Choice target) throws HeadlessException;
+    /**
+     * Creates this toolkit's implementation of {@code Checkbox} using the
+     * specified peer interface.
+     *
+     * @param  target the check box to be implemented
+     * @return this toolkit's implementation of {@code Checkbox}
+     * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+     *         true
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see java.awt.Checkbox
+     * @see java.awt.peer.CheckboxPeer
+     */
+    default CheckboxPeer createCheckbox(Checkbox target) {
+        throw new HeadlessException();
+    }
 
-    LabelPeer createLabel(Label target) throws HeadlessException;
-
-    ListPeer createList(List target) throws HeadlessException;
+    /**
+     * Creates this toolkit's implementation of {@code Scrollbar} using the
+     * specified peer interface.
+     *
+     * @param  target the scroll bar to be implemented
+     * @return this toolkit's implementation of {@code Scrollbar}
+     * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+     *         true
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see java.awt.Scrollbar
+     * @see java.awt.peer.ScrollbarPeer
+     */
+    default ScrollbarPeer createScrollbar(Scrollbar target) {
+        throw new HeadlessException();
+    }
 
-    CheckboxPeer createCheckbox(Checkbox target)
-        throws HeadlessException;
+    /**
+     * Creates this toolkit's implementation of {@code ScrollPane} using the
+     * specified peer interface.
+     *
+     * @param  target the scroll pane to be implemented
+     * @return this toolkit's implementation of {@code ScrollPane}
+     * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+     *         true
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see java.awt.ScrollPane
+     * @see java.awt.peer.ScrollPanePeer
+     * @since 1.1
+     */
+    default ScrollPanePeer createScrollPane(ScrollPane target) {
+        throw new HeadlessException();
+    }
 
-    ScrollbarPeer createScrollbar(Scrollbar target)
-        throws HeadlessException;
+    /**
+     * Creates this toolkit's implementation of {@code TextArea} using the
+     * specified peer interface.
+     *
+     * @param  target the text area to be implemented
+     * @return this toolkit's implementation of {@code TextArea}
+     * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+     *         true
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see java.awt.TextArea
+     * @see java.awt.peer.TextAreaPeer
+     */
+    default TextAreaPeer createTextArea(TextArea target) {
+        throw new HeadlessException();
+    }
 
-    ScrollPanePeer createScrollPane(ScrollPane target)
-        throws HeadlessException;
+    /**
+     * Creates this toolkit's implementation of {@code Choice} using the
+     * specified peer interface.
+     *
+     * @param  target the choice to be implemented
+     * @return this toolkit's implementation of {@code Choice}
+     * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+     *         true
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see java.awt.Choice
+     * @see java.awt.peer.ChoicePeer
+     */
+    default ChoicePeer createChoice(Choice target) {
+        throw new HeadlessException();
+    }
+
+    /**
+     * Creates this toolkit's implementation of {@code Frame} using the
+     * specified peer interface.
+     *
+     * @param  target the frame to be implemented
+     * @return this toolkit's implementation of {@code Frame}
+     * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+     *         true
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see java.awt.Frame
+     * @see java.awt.peer.FramePeer
+     */
+    default FramePeer createFrame(Frame target) {
+        throw new HeadlessException();
+    }
 
-    TextAreaPeer createTextArea(TextArea target)
-        throws HeadlessException;
+    /**
+     * Creates this toolkit's implementation of {@code Canvas} using the
+     * specified peer interface.
+     *
+     * @param  target the canvas to be implemented
+     * @return this toolkit's implementation of {@code Canvas}
+     * @see java.awt.Canvas
+     * @see java.awt.peer.CanvasPeer
+     */
+    default CanvasPeer createCanvas(Canvas target) {
+        return (CanvasPeer) createComponent(target);
+    }
 
-    FileDialogPeer createFileDialog(FileDialog target)
-        throws HeadlessException;
+    /**
+     * Creates this toolkit's implementation of {@code Panel} using the
+     * specified peer interface.
+     *
+     * @param  target the panel to be implemented
+     * @return this toolkit's implementation of {@code Panel}
+     * @see java.awt.Panel
+     * @see java.awt.peer.PanelPeer
+     */
+    default PanelPeer createPanel(Panel target) {
+        return (PanelPeer) createComponent(target);
+    }
 
-    MenuBarPeer createMenuBar(MenuBar target) throws HeadlessException;
+    /**
+     * Creates this toolkit's implementation of {@code Window} using the
+     * specified peer interface.
+     *
+     * @param  target the window to be implemented
+     * @return this toolkit's implementation of {@code Window}
+     * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+     *         true
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see java.awt.Window
+     * @see java.awt.peer.WindowPeer
+     */
+    default WindowPeer createWindow(Window target) {
+        throw new HeadlessException();
+    }
 
-    MenuPeer createMenu(Menu target) throws HeadlessException;
+    /**
+     * Creates this toolkit's implementation of {@code Dialog} using the
+     * specified peer interface.
+     *
+     * @param  target the dialog to be implemented
+     * @return this toolkit's implementation of {@code Dialog}
+     * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+     *         true
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see java.awt.Dialog
+     * @see java.awt.peer.DialogPeer
+     */
+    default DialogPeer createDialog(Dialog target) {
+        throw new HeadlessException();
+    }
 
-    PopupMenuPeer createPopupMenu(PopupMenu target)
-        throws HeadlessException;
+    /**
+     * Creates this toolkit's implementation of {@code MenuBar} using the
+     * specified peer interface.
+     *
+     * @param  target the menu bar to be implemented
+     * @return this toolkit's implementation of {@code MenuBar}
+     * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+     *         true
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see java.awt.MenuBar
+     * @see java.awt.peer.MenuBarPeer
+     */
+    default MenuBarPeer createMenuBar(MenuBar target) {
+        throw new HeadlessException();
+    }
 
-    MenuItemPeer createMenuItem(MenuItem target)
-        throws HeadlessException;
+    /**
+     * Creates this toolkit's implementation of {@code Menu} using the specified
+     * peer interface.
+     *
+     * @param  target the menu to be implemented
+     * @return this toolkit's implementation of {@code Menu}
+     * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+     *         true
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see java.awt.Menu
+     * @see java.awt.peer.MenuPeer
+     */
+    default MenuPeer createMenu(Menu target) {
+        throw new HeadlessException();
+    }
 
-    CheckboxMenuItemPeer createCheckboxMenuItem(CheckboxMenuItem target)
-        throws HeadlessException;
+    /**
+     * Creates this toolkit's implementation of {@code PopupMenu} using the
+     * specified peer interface.
+     *
+     * @param  target the popup menu to be implemented
+     * @return this toolkit's implementation of {@code PopupMenu}
+     * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+     *         true
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see java.awt.PopupMenu
+     * @see java.awt.peer.PopupMenuPeer
+     * @since 1.1
+     */
+    default PopupMenuPeer createPopupMenu(PopupMenu target) {
+        throw new HeadlessException();
+    }
 
-    DragSourceContextPeer createDragSourceContextPeer(
-        DragGestureEvent dge)
-        throws InvalidDnDOperationException, HeadlessException;
+    /**
+     * Creates this toolkit's implementation of {@code MenuItem} using the
+     * specified peer interface.
+     *
+     * @param  target the menu item to be implemented
+     * @return this toolkit's implementation of {@code MenuItem}
+     * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+     *         true
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see java.awt.MenuItem
+     * @see java.awt.peer.MenuItemPeer
+     */
+    default MenuItemPeer createMenuItem(MenuItem target) {
+        throw new HeadlessException();
+    }
+
+    /**
+     * Creates this toolkit's implementation of {@code FileDialog} using the
+     * specified peer interface.
+     *
+     * @param  target the file dialog to be implemented
+     * @return this toolkit's implementation of {@code FileDialog}
+     * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+     *         true
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see java.awt.FileDialog
+     * @see java.awt.peer.FileDialogPeer
+     */
+    default FileDialogPeer createFileDialog(FileDialog target) {
+        throw new HeadlessException();
+    }
 
-    FontPeer getFontPeer(String name, int style);
+    /**
+     * Creates this toolkit's implementation of {@code CheckboxMenuItem} using
+     * the specified peer interface.
+     *
+     * @param  target the checkbox menu item to be implemented
+     * @return this toolkit's implementation of {@code CheckboxMenuItem}
+     * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+     *         true
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see java.awt.CheckboxMenuItem
+     * @see java.awt.peer.CheckboxMenuItemPeer
+     */
+    default CheckboxMenuItemPeer createCheckboxMenuItem(CheckboxMenuItem target) {
+        throw new HeadlessException();
+    }
+
+    /**
+     * Creates the peer for a DragSourceContext. Always throws
+     * InvalidDndOperationException if GraphicsEnvironment.isHeadless() returns
+     * true.
+     *
+     * @param  dge the {@code DragGestureEvent}
+     * @return the peer created
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     */
+    default DragSourceContextPeer createDragSourceContextPeer(DragGestureEvent dge) {
+        throw new InvalidDnDOperationException("Headless environment");
+    }
 
-    RobotPeer createRobot(Robot target, GraphicsDevice screen)
-        throws AWTException, HeadlessException;
+    /**
+     * Creates this toolkit's implementation of {@code Font} using the specified
+     * peer interface.
+     *
+     * @param name the font to be implemented
+     * @param style the style of the font, such as {@code PLAIN}, {@code BOLD},
+     *        {@code ITALIC}, or a combination
+     * @return this toolkit's implementation of {@code Font}
+     * @see java.awt.Font
+     * @see java.awt.peer.FontPeer
+     * @see java.awt.GraphicsEnvironment#getAllFonts
+     */
+    default FontPeer getFontPeer(String name, int style) {
+        return null;
+    }
 
-    DataTransferer getDataTransferer();
+    default RobotPeer createRobot(Robot target, GraphicsDevice screen)
+            throws AWTException {
+        throw new HeadlessException();
+    }
+
+    default DataTransferer getDataTransferer() {
+        return null;
+    }
 
+    /**
+     * Obtains this toolkit's implementation of helper class for {@code
+     * MouseInfo} operations.
+     *
+     * @return this toolkit's implementation of helper for {@code MouseInfo}
+     * @throws UnsupportedOperationException if this operation is not
+     *         implemented
+     * @see java.awt.peer.MouseInfoPeer
+     * @see java.awt.MouseInfo
+     * @since 1.5
+     */
+    default MouseInfoPeer getMouseInfoPeer() {
+        throw new UnsupportedOperationException("Not implemented");
+    }
 }