8183518: Premature deprecation of Event/InputEvent/KeyEvent in Java 9
Reviewed-by: prr, psadhukhan
--- a/src/java.desktop/macosx/classes/sun/lwawt/macosx/LWCToolkit.java Fri Dec 01 10:35:58 2017 -0800
+++ b/src/java.desktop/macosx/classes/sun/lwawt/macosx/LWCToolkit.java Fri Dec 01 17:44:07 2017 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2017, 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
@@ -502,30 +502,18 @@
}
}
- /**
- * Determines which modifier key is the appropriate accelerator
- * key for menu shortcuts.
- * <p>
- * Menu shortcuts, which are embodied in the
- * {@code MenuShortcut} class, are handled by the
- * {@code MenuBar} class.
- * <p>
- * By default, this method returns {@code Event.CTRL_MASK}.
- * Toolkit implementations should override this method if the
- * <b>Control</b> key isn't the correct key for accelerators.
- * @return the modifier mask on the {@code Event} class
- * that is used for menu shortcuts on this toolkit.
- * @see java.awt.MenuBar
- * @see java.awt.MenuShortcut
- * @since 1.1
- */
@Override
- @SuppressWarnings("deprecation")
+ @Deprecated(since = "10")
public int getMenuShortcutKeyMask() {
return Event.META_MASK;
}
@Override
+ public int getMenuShortcutKeyMaskEx() {
+ return InputEvent.META_DOWN_MASK;
+ }
+
+ @Override
public Image getImage(final String filename) {
final Image nsImage = checkForNSImage(filename);
if (nsImage != null) {
--- a/src/java.desktop/share/classes/java/awt/MenuBar.java Fri Dec 01 10:35:58 2017 -0800
+++ b/src/java.desktop/share/classes/java/awt/MenuBar.java Fri Dec 01 17:44:07 2017 -0800
@@ -377,7 +377,6 @@
* keydown). Returns true if there is an associated
* keyboard event.
*/
- @SuppressWarnings("deprecation")
boolean handleShortcut(KeyEvent e) {
// Is it a key event?
int id = e.getID();
@@ -386,8 +385,8 @@
}
// Is the accelerator modifier key pressed?
- int accelKey = Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();
- if ((e.getModifiers() & accelKey) == 0) {
+ int accelKey = Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx();
+ if ((e.getModifiersEx() & accelKey) == 0) {
return false;
}
--- a/src/java.desktop/share/classes/java/awt/MenuShortcut.java Fri Dec 01 10:35:58 2017 -0800
+++ b/src/java.desktop/share/classes/java/awt/MenuShortcut.java Fri Dec 01 17:44:07 2017 -0800
@@ -24,6 +24,7 @@
*/
package java.awt;
+import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
/**
@@ -51,7 +52,7 @@
* only work if the current keyboard layout produces a corresponding letter.
* <p>
* The accelerator key is platform-dependent and may be obtained
- * via {@link Toolkit#getMenuShortcutKeyMask}.
+ * via {@link Toolkit#getMenuShortcutKeyMaskEx()}.
*
* @author Thomas Ball
* @since 1.1
@@ -180,16 +181,15 @@
* @return a string representation of this MenuShortcut.
* @since 1.1
*/
- @SuppressWarnings("deprecation")
public String toString() {
int modifiers = 0;
if (!GraphicsEnvironment.isHeadless()) {
- modifiers = Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();
+ modifiers = Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx();
}
if (usesShiftModifier()) {
- modifiers |= Event.SHIFT_MASK;
+ modifiers |= InputEvent.SHIFT_DOWN_MASK;
}
- return KeyEvent.getKeyModifiersText(modifiers) + "+" +
+ return InputEvent.getModifiersExText(modifiers) + "+" +
KeyEvent.getKeyText(key);
}
--- a/src/java.desktop/share/classes/java/awt/Toolkit.java Fri Dec 01 10:35:58 2017 -0800
+++ b/src/java.desktop/share/classes/java/awt/Toolkit.java Fri Dec 01 17:44:07 2017 -0800
@@ -29,7 +29,23 @@
import java.awt.dnd.DragGestureListener;
import java.awt.dnd.DragGestureRecognizer;
import java.awt.dnd.DragSource;
-import java.awt.event.*;
+import java.awt.event.AWTEventListener;
+import java.awt.event.AWTEventListenerProxy;
+import java.awt.event.ActionEvent;
+import java.awt.event.AdjustmentEvent;
+import java.awt.event.ComponentEvent;
+import java.awt.event.ContainerEvent;
+import java.awt.event.FocusEvent;
+import java.awt.event.HierarchyEvent;
+import java.awt.event.InputEvent;
+import java.awt.event.InputMethodEvent;
+import java.awt.event.InvocationEvent;
+import java.awt.event.ItemEvent;
+import java.awt.event.KeyEvent;
+import java.awt.event.MouseEvent;
+import java.awt.event.PaintEvent;
+import java.awt.event.TextEvent;
+import java.awt.event.WindowEvent;
import java.awt.im.InputMethodHighlight;
import java.awt.image.ColorModel;
import java.awt.image.ImageObserver;
@@ -40,15 +56,22 @@
import java.io.File;
import java.io.FileInputStream;
import java.net.URL;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.EventListener;
import java.util.HashMap;
import java.util.Map;
import java.util.MissingResourceException;
import java.util.Properties;
import java.util.ResourceBundle;
-import java.util.StringTokenizer;
+import java.util.ServiceLoader;
+import java.util.Set;
import java.util.WeakHashMap;
+import java.util.stream.Collectors;
+
+import javax.accessibility.AccessibilityProvider;
import sun.awt.AWTAccessor;
import sun.awt.AWTPermissions;
@@ -57,14 +80,6 @@
import sun.awt.PeerEvent;
import sun.awt.SunToolkit;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.util.Arrays;
-import java.util.ServiceLoader;
-import java.util.Set;
-import java.util.stream.Collectors;
-import javax.accessibility.AccessibilityProvider;
-
/**
* This class is the abstract superclass of all actual
* implementations of the Abstract Window Toolkit. Subclasses of
@@ -1065,9 +1080,11 @@
* @see java.awt.GraphicsEnvironment#isHeadless
* @see java.awt.MenuBar
* @see java.awt.MenuShortcut
+ * @deprecated It is recommended that extended modifier keys and
+ * {@link #getMenuShortcutKeyMaskEx()} be used instead
* @since 1.1
*/
- @SuppressWarnings("deprecation")
+ @Deprecated(since = "10")
public int getMenuShortcutKeyMask() throws HeadlessException {
GraphicsEnvironment.checkHeadless();
@@ -1075,6 +1092,32 @@
}
/**
+ * Determines which extended modifier key is the appropriate accelerator
+ * key for menu shortcuts.
+ * <p>
+ * Menu shortcuts, which are embodied in the {@code MenuShortcut} class, are
+ * handled by the {@code MenuBar} class.
+ * <p>
+ * By default, this method returns {@code InputEvent.CTRL_DOWN_MASK}.
+ * Toolkit implementations should override this method if the
+ * <b>Control</b> key isn't the correct key for accelerators.
+ *
+ * @return the modifier mask on the {@code InputEvent} class that is used
+ * for menu shortcuts on this toolkit
+ * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+ * true
+ * @see java.awt.GraphicsEnvironment#isHeadless
+ * @see java.awt.MenuBar
+ * @see java.awt.MenuShortcut
+ * @since 10
+ */
+ public int getMenuShortcutKeyMaskEx() throws HeadlessException {
+ GraphicsEnvironment.checkHeadless();
+
+ return InputEvent.CTRL_DOWN_MASK;
+ }
+
+ /**
* Returns whether the given locking key on the keyboard is currently in
* its "on" state.
* Valid key codes are
--- a/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicComboPopup.java Fri Dec 01 10:35:58 2017 -0800
+++ b/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicComboPopup.java Fri Dec 01 17:44:07 2017 -0800
@@ -530,7 +530,6 @@
*/
protected JList<Object> createList() {
return new JList<Object>( comboBox.getModel() ) {
- @SuppressWarnings("deprecation")
public void processMouseEvent(MouseEvent e) {
if (BasicGraphicsUtils.isMenuShortcutKeyDown(e)) {
// Fix for 4234053. Filter out the Control Key from the list.
@@ -538,7 +537,7 @@
Toolkit toolkit = Toolkit.getDefaultToolkit();
MouseEvent newEvent = new MouseEvent(
(Component)e.getSource(), e.getID(), e.getWhen(),
- e.getModifiers() ^ toolkit.getMenuShortcutKeyMask(),
+ e.getModifiersEx() ^ toolkit.getMenuShortcutKeyMaskEx(),
e.getX(), e.getY(),
e.getXOnScreen(), e.getYOnScreen(),
e.getClickCount(),
--- a/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicFileChooserUI.java Fri Dec 01 10:35:58 2017 -0800
+++ b/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicFileChooserUI.java Fri Dec 01 17:44:07 2017 -0800
@@ -1134,6 +1134,7 @@
boolean isTrav = (selectedFile != null && chooser.isTraversable(selectedFile));
boolean isDirSelEnabled = chooser.isDirectorySelectionEnabled();
boolean isFileSelEnabled = chooser.isFileSelectionEnabled();
+ @SuppressWarnings("deprecation")
boolean isCtrl = (e != null && (e.getModifiers() &
Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()) != 0);
--- a/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicGraphicsUtils.java Fri Dec 01 10:35:58 2017 -0800
+++ b/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicGraphicsUtils.java Fri Dec 01 17:44:07 2017 -0800
@@ -382,10 +382,9 @@
return c.getComponentOrientation().isLeftToRight();
}
- @SuppressWarnings("deprecation")
static boolean isMenuShortcutKeyDown(InputEvent event) {
- return (event.getModifiers() &
- Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()) != 0;
+ return (event.getModifiersEx() &
+ Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx()) != 0;
}
/**
--- a/src/java.desktop/share/classes/sun/awt/HToolkit.java Fri Dec 01 10:35:58 2017 -0800
+++ b/src/java.desktop/share/classes/sun/awt/HToolkit.java Fri Dec 01 17:44:07 2017 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2017, 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
@@ -130,12 +130,19 @@
}
@Override
+ @Deprecated(since = "10")
public int getMenuShortcutKeyMask()
throws HeadlessException {
throw new HeadlessException();
}
@Override
+ public int getMenuShortcutKeyMaskEx()
+ throws HeadlessException {
+ throw new HeadlessException();
+ }
+
+ @Override
public boolean getLockingKeyState(int keyCode)
throws UnsupportedOperationException {
throw new HeadlessException();
--- a/src/java.desktop/share/classes/sun/awt/HeadlessToolkit.java Fri Dec 01 10:35:58 2017 -0800
+++ b/src/java.desktop/share/classes/sun/awt/HeadlessToolkit.java Fri Dec 01 17:44:07 2017 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -31,6 +31,7 @@
import java.awt.dnd.DragGestureRecognizer;
import java.awt.dnd.DragSource;
import java.awt.event.AWTEventListener;
+import java.awt.event.InputEvent;
import java.awt.font.TextAttribute;
import java.awt.im.InputMethodHighlight;
import java.awt.image.ColorModel;
@@ -128,12 +129,19 @@
}
@Override
+ @Deprecated(since = "10")
public int getMenuShortcutKeyMask()
throws HeadlessException {
throw new HeadlessException();
}
@Override
+ public int getMenuShortcutKeyMaskEx()
+ throws HeadlessException {
+ throw new HeadlessException();
+ }
+
+ @Override
public boolean getLockingKeyState(int keyCode)
throws UnsupportedOperationException {
throw new HeadlessException();
--- a/test/jdk/java/awt/Toolkit/Headless/HeadlessToolkit.java Fri Dec 01 10:35:58 2017 -0800
+++ b/test/jdk/java/awt/Toolkit/Headless/HeadlessToolkit.java Fri Dec 01 17:44:07 2017 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2017, 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
@@ -118,6 +118,15 @@
exceptions = false;
try {
+ int km = tk.getMenuShortcutKeyMaskEx();
+ } catch (HeadlessException e) {
+ exceptions = true;
+ }
+ if (!exceptions)
+ throw new RuntimeException("HeadlessException did not occur when expected");
+
+ exceptions = false;
+ try {
boolean state = tk.getLockingKeyState(KeyEvent.VK_CAPS_LOCK);
} catch (HeadlessException e) {
exceptions = true;