提交 f9c0499e 编写于 作者: L lana

Merge

...@@ -38,7 +38,7 @@ FILES_java = \ ...@@ -38,7 +38,7 @@ FILES_java = \
com/sun/nio/sctp/SctpMultiChannel.java \ com/sun/nio/sctp/SctpMultiChannel.java \
com/sun/nio/sctp/SctpServerChannel.java \ com/sun/nio/sctp/SctpServerChannel.java \
com/sun/nio/sctp/SctpSocketOption.java \ com/sun/nio/sctp/SctpSocketOption.java \
com/sun/nio/sctp/SctpStandardSocketOption.java \ com/sun/nio/sctp/SctpStandardSocketOptions.java \
com/sun/nio/sctp/SendFailedNotification.java \ com/sun/nio/sctp/SendFailedNotification.java \
com/sun/nio/sctp/ShutdownNotification.java \ com/sun/nio/sctp/ShutdownNotification.java \
\ \
......
...@@ -49,6 +49,7 @@ SUNWprivate_1.1 { ...@@ -49,6 +49,7 @@ SUNWprivate_1.1 {
Java_sun_management_Flag_setStringValue; Java_sun_management_Flag_setStringValue;
Java_sun_management_GarbageCollectorImpl_getCollectionCount; Java_sun_management_GarbageCollectorImpl_getCollectionCount;
Java_sun_management_GarbageCollectorImpl_getCollectionTime; Java_sun_management_GarbageCollectorImpl_getCollectionTime;
Java_sun_management_GarbageCollectorImpl_setNotificationEnabled;
Java_sun_management_GcInfoBuilder_fillGcAttributeInfo; Java_sun_management_GcInfoBuilder_fillGcAttributeInfo;
Java_sun_management_GcInfoBuilder_getLastGcInfo0; Java_sun_management_GcInfoBuilder_getLastGcInfo0;
Java_sun_management_GcInfoBuilder_getNumGcExtAttributes; Java_sun_management_GcInfoBuilder_getNumGcExtAttributes;
......
...@@ -71,7 +71,7 @@ FILES_src = \ ...@@ -71,7 +71,7 @@ FILES_src = \
java/nio/charset/CoderMalfunctionError.java \ java/nio/charset/CoderMalfunctionError.java \
java/nio/charset/CodingErrorAction.java \ java/nio/charset/CodingErrorAction.java \
java/nio/charset/MalformedInputException.java \ java/nio/charset/MalformedInputException.java \
java/nio/charset/StandardCharset.java \ java/nio/charset/StandardCharsets.java \
java/nio/charset/UnmappableCharacterException.java \ java/nio/charset/UnmappableCharacterException.java \
\ \
java/nio/charset/spi/CharsetProvider.java \ java/nio/charset/spi/CharsetProvider.java \
...@@ -116,7 +116,7 @@ FILES_src = \ ...@@ -116,7 +116,7 @@ FILES_src = \
java/nio/file/SimpleFileVisitor.java \ java/nio/file/SimpleFileVisitor.java \
java/nio/file/StandardCopyOption.java \ java/nio/file/StandardCopyOption.java \
java/nio/file/StandardOpenOption.java \ java/nio/file/StandardOpenOption.java \
java/nio/file/StandardWatchEventKind.java \ java/nio/file/StandardWatchEventKinds.java \
java/nio/file/TempFileHelper.java \ java/nio/file/TempFileHelper.java \
java/nio/file/WatchEvent.java \ java/nio/file/WatchEvent.java \
java/nio/file/WatchKey.java \ java/nio/file/WatchKey.java \
......
...@@ -158,7 +158,6 @@ SUNWprivate_1.1 { ...@@ -158,7 +158,6 @@ SUNWprivate_1.1 {
Java_sun_awt_X11_XRobotPeer_mouseReleaseImpl; Java_sun_awt_X11_XRobotPeer_mouseReleaseImpl;
Java_sun_awt_X11_XRobotPeer_mouseWheelImpl; Java_sun_awt_X11_XRobotPeer_mouseWheelImpl;
Java_sun_awt_X11_XRobotPeer_setup; Java_sun_awt_X11_XRobotPeer_setup;
Java_sun_awt_X11_XRobotPeer__1dispose;
Java_sun_awt_X11_XToolkit_getNumberOfButtonsImpl; Java_sun_awt_X11_XToolkit_getNumberOfButtonsImpl;
Java_java_awt_Component_initIDs; Java_java_awt_Component_initIDs;
Java_java_awt_Container_initIDs; Java_java_awt_Container_initIDs;
......
/*
* Copyright (c) 2011, 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. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package com.sun.management;
import javax.management.Notification;
import javax.management.openmbean.CompositeData;
import javax.management.openmbean.CompositeDataView;
import javax.management.openmbean.CompositeType;
import java.util.Collection;
import java.util.Collections;
import sun.management.GarbageCollectionNotifInfoCompositeData;
/**
* The information about a garbage collection
*
* <p>
* A garbage collection notification is emitted by {@link GarbageCollectorMXBean}
* when the Java virtual machine completes a garbage collection action
* The notification emitted will contain the garbage collection notification
* information about the status of the memory:
* <u1>
* <li>The name of the garbage collector used perform the collection.</li>
* <li>The action performed by the garbage collector.</li>
* <li>The cause of the garbage collection action.</li>
* <li>A {@link GcInfo} object containing some statistics about the GC cycle
(start time, end time) and the memory usage before and after
the GC cycle.</li>
* </u1>
*
* <p>
* A {@link CompositeData CompositeData} representing
* the {@code GarbageCollectionNotificationInfo} object
* is stored in the
* {@linkplain javax.management.Notification#setUserData userdata}
* of a {@linkplain javax.management.Notification notification}.
* The {@link #from from} method is provided to convert from
* a {@code CompositeData} to a {@code GarbageCollectionNotificationInfo}
* object. For example:
*
* <blockquote><pre>
* Notification notif;
*
* // receive the notification emitted by a GarbageCollectorMXBean and set to notif
* ...
*
* String notifType = notif.getType();
* if (notifType.equals(GarbageCollectionNotificationInfo.GARBAGE_COLLECTION_NOTIFICATION)) {
* // retrieve the garbage collection notification information
* CompositeData cd = (CompositeData) notif.getUserData();
* GarbageCollectionNotificationInfo info = GarbageCollectionNotificationInfo.from(cd);
* ....
* }
* </pre></blockquote>
*
* <p>
* The type of the notification emitted by a {@code GarbageCollectorMXBean} is:
* <ul>
* <li>A {@linkplain #GARBAGE_COLLECTION_NOTIFICATION garbage collection notification}.
* <br>Used by every notification emitted by the garbage collector, the details about
* the notification are provided in the {@linkplain #getGcAction action} String
* <p></li>
* </ul>
**/
public class GarbageCollectionNotificationInfo implements CompositeDataView {
private final String gcName;
private final String gcAction;
private final String gcCause;
private final GcInfo gcInfo;
private final CompositeData cdata;
/**
* Notification type denoting that
* the Java virtual machine has completed a garbage collection cycle.
* This notification is emitted by a {@link GarbageCollectorMXBean}.
* The value of this notification type is
* {@code com.sun.management.gc.notification}.
*/
public static final String GARBAGE_COLLECTION_NOTIFICATION =
"com.sun.management.gc.notification";
/**
* Constructs a {@code GarbageCollectionNotificationInfo} object.
*
* @param gcName The name of the garbage collector used to perform the collection
* @param gcAction The name of the action performed by the garbage collector
* @param gcCause The cause the garbage collection action
* @param gcInfo a GcInfo object providing statistics about the GC cycle
*/
public GarbageCollectionNotificationInfo(String gcName,
String gcAction,
String gcCause,
GcInfo gcInfo) {
if (gcName == null) {
throw new NullPointerException("Null gcName");
}
if (gcAction == null) {
throw new NullPointerException("Null gcAction");
}
if (gcCause == null) {
throw new NullPointerException("Null gcCause");
}
this.gcName = gcName;
this.gcAction = gcAction;
this.gcCause = gcCause;
this.gcInfo = gcInfo;
this.cdata = new GarbageCollectionNotifInfoCompositeData(this);
}
GarbageCollectionNotificationInfo(CompositeData cd) {
GarbageCollectionNotifInfoCompositeData.validateCompositeData(cd);
this.gcName = GarbageCollectionNotifInfoCompositeData.getGcName(cd);
this.gcAction = GarbageCollectionNotifInfoCompositeData.getGcAction(cd);
this.gcCause = GarbageCollectionNotifInfoCompositeData.getGcCause(cd);
this.gcInfo = GarbageCollectionNotifInfoCompositeData.getGcInfo(cd);
this.cdata = cd;
}
/**
* Returns the name of the garbage collector used to perform the collection
*
* @return the name of the garbage collector used to perform the collection
*/
public String getGcName() {
return gcName;
}
/**
* Returns the action of the performed by the garbage collector
*
* @return the the action of the performed by the garbage collector
*/
public String getGcAction() {
return gcAction;
}
/**
* Returns the cause the garbage collection
*
* @return the the cause the garbage collection
*/
public String getGcCause() {
return gcCause;
}
/**
* Returns the GC information related to the last garbage collection
*
* @return the GC information related to the
* last garbage collection
*/
public GcInfo getGcInfo() {
return gcInfo;
}
/**
* Returns a {@code GarbageCollectionNotificationInfo} object represented by the
* given {@code CompositeData}.
* The given {@code CompositeData} must contain
* the following attributes:
* <blockquote>
* <table border>
* <tr>
* <th align=left>Attribute Name</th>
* <th align=left>Type</th>
* </tr>
* <tr>
* <td>gcName</td>
* <td>{@code java.lang.String}</td>
* </tr>
* <tr>
* <td>gcAction</td>
* <td>{@code java.lang.String}</td>
* </tr>
* <tr>
* <td>gcCause</td>
* <td>{@code java.lang.String}</td>
* </tr>
* <tr>
* <td>gcInfo</td>
* <td>{@code javax.management.openmbean.CompositeData}</td>
* </tr>
* </table>
* </blockquote>
*
* @param cd {@code CompositeData} representing a
* {@code GarbageCollectionNotificationInfo}
*
* @throws IllegalArgumentException if {@code cd} does not
* represent a {@code GarbaageCollectionNotificationInfo} object.
*
* @return a {@code GarbageCollectionNotificationInfo} object represented
* by {@code cd} if {@code cd} is not {@code null};
* {@code null} otherwise.
*/
public static GarbageCollectionNotificationInfo from(CompositeData cd) {
if (cd == null) {
return null;
}
if (cd instanceof GarbageCollectionNotifInfoCompositeData) {
return ((GarbageCollectionNotifInfoCompositeData) cd).getGarbageCollectionNotifInfo();
} else {
return new GarbageCollectionNotificationInfo(cd);
}
}
public CompositeData toCompositeData(CompositeType ct) {
return cdata;
}
}
...@@ -179,7 +179,7 @@ public abstract class MessageInfo { ...@@ -179,7 +179,7 @@ public abstract class MessageInfo {
* completely received. For messages being sent {@code true} indicates that * completely received. For messages being sent {@code true} indicates that
* the message is complete, {@code false} indicates that the message is not * the message is complete, {@code false} indicates that the message is not
* complete. How the send channel interprets this value depends on the value * complete. How the send channel interprets this value depends on the value
* of its {@link SctpStandardSocketOption#SCTP_EXPLICIT_COMPLETE * of its {@link SctpStandardSocketOptions#SCTP_EXPLICIT_COMPLETE
* SCTP_EXPLICIT_COMPLETE} socket option. * SCTP_EXPLICIT_COMPLETE} socket option.
* *
* @return {@code true} if, and only if, the message is complete * @return {@code true} if, and only if, the message is complete
...@@ -192,7 +192,7 @@ public abstract class MessageInfo { ...@@ -192,7 +192,7 @@ public abstract class MessageInfo {
* <P> For messages being sent {@code true} indicates that * <P> For messages being sent {@code true} indicates that
* the message is complete, {@code false} indicates that the message is not * the message is complete, {@code false} indicates that the message is not
* complete. How the send channel interprets this value depends on the value * complete. How the send channel interprets this value depends on the value
* of its {@link SctpStandardSocketOption#SCTP_EXPLICIT_COMPLETE * of its {@link SctpStandardSocketOptions#SCTP_EXPLICIT_COMPLETE
* SCTP_EXPLICIT_COMPLETE} socket option. * SCTP_EXPLICIT_COMPLETE} socket option.
* *
* @param complete * @param complete
......
...@@ -65,55 +65,55 @@ import java.nio.channels.SelectionKey; ...@@ -65,55 +65,55 @@ import java.nio.channels.SelectionKey;
* <th>Description</th> * <th>Description</th>
* </tr> * </tr>
* <tr> * <tr>
* <td> {@link SctpStandardSocketOption#SCTP_DISABLE_FRAGMENTS * <td> {@link SctpStandardSocketOptions#SCTP_DISABLE_FRAGMENTS
* SCTP_DISABLE_FRAGMENTS} </td> * SCTP_DISABLE_FRAGMENTS} </td>
* <td> Enables or disables message fragmentation </td> * <td> Enables or disables message fragmentation </td>
* </tr> * </tr>
* <tr> * <tr>
* <td> {@link SctpStandardSocketOption#SCTP_EXPLICIT_COMPLETE * <td> {@link SctpStandardSocketOptions#SCTP_EXPLICIT_COMPLETE
* SCTP_EXPLICIT_COMPLETE} </td> * SCTP_EXPLICIT_COMPLETE} </td>
* <td> Enables or disables explicit message completion </td> * <td> Enables or disables explicit message completion </td>
* </tr> * </tr>
* <tr> * <tr>
* <td> {@link SctpStandardSocketOption#SCTP_FRAGMENT_INTERLEAVE * <td> {@link SctpStandardSocketOptions#SCTP_FRAGMENT_INTERLEAVE
* SCTP_FRAGMENT_INTERLEAVE} </td> * SCTP_FRAGMENT_INTERLEAVE} </td>
* <td> Controls how the presentation of messages occur for the message * <td> Controls how the presentation of messages occur for the message
* receiver </td> * receiver </td>
* </tr> * </tr>
* <tr> * <tr>
* <td> {@link SctpStandardSocketOption#SCTP_INIT_MAXSTREAMS * <td> {@link SctpStandardSocketOptions#SCTP_INIT_MAXSTREAMS
* SCTP_INIT_MAXSTREAMS} </td> * SCTP_INIT_MAXSTREAMS} </td>
* <td> The maximum number of streams requested by the local endpoint during * <td> The maximum number of streams requested by the local endpoint during
* association initialization </td> * association initialization </td>
* </tr> * </tr>
* <tr> * <tr>
* <td> {@link SctpStandardSocketOption#SCTP_NODELAY SCTP_NODELAY} </td> * <td> {@link SctpStandardSocketOptions#SCTP_NODELAY SCTP_NODELAY} </td>
* <td> Enables or disable a Nagle-like algorithm </td> * <td> Enables or disable a Nagle-like algorithm </td>
* </tr> * </tr>
* <tr> * <tr>
* <td> {@link SctpStandardSocketOption#SCTP_PRIMARY_ADDR * <td> {@link SctpStandardSocketOptions#SCTP_PRIMARY_ADDR
* SCTP_PRIMARY_ADDR} </td> * SCTP_PRIMARY_ADDR} </td>
* <td> Requests that the local SCTP stack use the given peer address as the * <td> Requests that the local SCTP stack use the given peer address as the
* association primary </td> * association primary </td>
* </tr> * </tr>
* <tr> * <tr>
* <td> {@link SctpStandardSocketOption#SCTP_SET_PEER_PRIMARY_ADDR * <td> {@link SctpStandardSocketOptions#SCTP_SET_PEER_PRIMARY_ADDR
* SCTP_SET_PEER_PRIMARY_ADDR} </td> * SCTP_SET_PEER_PRIMARY_ADDR} </td>
* <td> Requests that the peer mark the enclosed address as the association * <td> Requests that the peer mark the enclosed address as the association
* primary </td> * primary </td>
* </tr> * </tr>
* <tr> * <tr>
* <td> {@link SctpStandardSocketOption#SO_SNDBUF * <td> {@link SctpStandardSocketOptions#SO_SNDBUF
* SO_SNDBUF} </td> * SO_SNDBUF} </td>
* <td> The size of the socket send buffer </td> * <td> The size of the socket send buffer </td>
* </tr> * </tr>
* <tr> * <tr>
* <td> {@link SctpStandardSocketOption#SO_RCVBUF * <td> {@link SctpStandardSocketOptions#SO_RCVBUF
* SO_RCVBUF} </td> * SO_RCVBUF} </td>
* <td> The size of the socket receive buffer </td> * <td> The size of the socket receive buffer </td>
* </tr> * </tr>
* <tr> * <tr>
* <td> {@link SctpStandardSocketOption#SO_LINGER * <td> {@link SctpStandardSocketOptions#SO_LINGER
* SO_LINGER} </td> * SO_LINGER} </td>
* <td> Linger on close if data is present (when configured in blocking mode * <td> Linger on close if data is present (when configured in blocking mode
* only) </td> * only) </td>
...@@ -449,7 +449,7 @@ public abstract class SctpChannel ...@@ -449,7 +449,7 @@ public abstract class SctpChannel
* <P> This is a convience method and is equivalent to evaluating the * <P> This is a convience method and is equivalent to evaluating the
* following expression: * following expression:
* <blockquote><pre> * <blockquote><pre>
* setOption(SctpStandardSocketOption.SCTP_INIT_MAXSTREAMS, SctpStandardSocketOption.InitMaxStreams.create(maxInStreams, maxOutStreams)) * setOption(SctpStandardSocketOptions.SCTP_INIT_MAXSTREAMS, SctpStandardSocketOption.InitMaxStreams.create(maxInStreams, maxOutStreams))
* .connect(remote); * .connect(remote);
* </pre></blockquote> * </pre></blockquote>
* *
...@@ -651,7 +651,7 @@ public abstract class SctpChannel ...@@ -651,7 +651,7 @@ public abstract class SctpChannel
* @throws IOException * @throws IOException
* If an I/O error occurs * If an I/O error occurs
* *
* @see SctpStandardSocketOption * @see SctpStandardSocketOptions
*/ */
public abstract <T> T getOption(SctpSocketOption<T> name) public abstract <T> T getOption(SctpSocketOption<T> name)
throws IOException; throws IOException;
...@@ -680,7 +680,7 @@ public abstract class SctpChannel ...@@ -680,7 +680,7 @@ public abstract class SctpChannel
* @throws IOException * @throws IOException
* If an I/O error occurs * If an I/O error occurs
* *
* @see SctpStandardSocketOption * @see SctpStandardSocketOptions
*/ */
public abstract <T> SctpChannel setOption(SctpSocketOption<T> name, T value) public abstract <T> SctpChannel setOption(SctpSocketOption<T> name, T value)
throws IOException; throws IOException;
...@@ -731,7 +731,7 @@ public abstract class SctpChannel ...@@ -731,7 +731,7 @@ public abstract class SctpChannel
* MessageInfo} will return {@code false}, and more invocations of this * MessageInfo} will return {@code false}, and more invocations of this
* method will be necessary to completely consume the messgae. Only * method will be necessary to completely consume the messgae. Only
* one message at a time will be partially delivered in any stream. The * one message at a time will be partially delivered in any stream. The
* socket option {@link SctpStandardSocketOption#SCTP_FRAGMENT_INTERLEAVE * socket option {@link SctpStandardSocketOptions#SCTP_FRAGMENT_INTERLEAVE
* SCTP_FRAGMENT_INTERLEAVE} controls various aspects of what interlacing of * SCTP_FRAGMENT_INTERLEAVE} controls various aspects of what interlacing of
* messages occurs. * messages occurs.
* *
...@@ -804,7 +804,7 @@ public abstract class SctpChannel ...@@ -804,7 +804,7 @@ public abstract class SctpChannel
* and sufficient room becomes available, then the remaining bytes in the * and sufficient room becomes available, then the remaining bytes in the
* given byte buffer are transmitted as a single message. Sending a message * given byte buffer are transmitted as a single message. Sending a message
* is atomic unless explicit message completion {@link * is atomic unless explicit message completion {@link
* SctpStandardSocketOption#SCTP_EXPLICIT_COMPLETE SCTP_EXPLICIT_COMPLETE} * SctpStandardSocketOptions#SCTP_EXPLICIT_COMPLETE SCTP_EXPLICIT_COMPLETE}
* socket option is enabled on this channel's socket. * socket option is enabled on this channel's socket.
* *
* <P> The message is transferred from the byte buffer as if by a regular * <P> The message is transferred from the byte buffer as if by a regular
......
...@@ -69,55 +69,55 @@ import java.nio.channels.SelectionKey; ...@@ -69,55 +69,55 @@ import java.nio.channels.SelectionKey;
* <th>Description</th> * <th>Description</th>
* </tr> * </tr>
* <tr> * <tr>
* <td> {@link SctpStandardSocketOption#SCTP_DISABLE_FRAGMENTS * <td> {@link SctpStandardSocketOptions#SCTP_DISABLE_FRAGMENTS
* SCTP_DISABLE_FRAGMENTS} </td> * SCTP_DISABLE_FRAGMENTS} </td>
* <td> Enables or disables message fragmentation </td> * <td> Enables or disables message fragmentation </td>
* </tr> * </tr>
* <tr> * <tr>
* <td> {@link SctpStandardSocketOption#SCTP_EXPLICIT_COMPLETE * <td> {@link SctpStandardSocketOptions#SCTP_EXPLICIT_COMPLETE
* SCTP_EXPLICIT_COMPLETE} </td> * SCTP_EXPLICIT_COMPLETE} </td>
* <td> Enables or disables explicit message completion </td> * <td> Enables or disables explicit message completion </td>
* </tr> * </tr>
* <tr> * <tr>
* <td> {@link SctpStandardSocketOption#SCTP_FRAGMENT_INTERLEAVE * <td> {@link SctpStandardSocketOptions#SCTP_FRAGMENT_INTERLEAVE
* SCTP_FRAGMENT_INTERLEAVE} </td> * SCTP_FRAGMENT_INTERLEAVE} </td>
* <td> Controls how the presentation of messages occur for the message * <td> Controls how the presentation of messages occur for the message
* receiver </td> * receiver </td>
* </tr> * </tr>
* <tr> * <tr>
* <td> {@link SctpStandardSocketOption#SCTP_INIT_MAXSTREAMS * <td> {@link SctpStandardSocketOptions#SCTP_INIT_MAXSTREAMS
* SCTP_INIT_MAXSTREAMS} </td> * SCTP_INIT_MAXSTREAMS} </td>
* <td> The maximum number of streams requested by the local endpoint during * <td> The maximum number of streams requested by the local endpoint during
* association initialization </td> * association initialization </td>
* </tr> * </tr>
* <tr> * <tr>
* <td> {@link SctpStandardSocketOption#SCTP_NODELAY SCTP_NODELAY} </td> * <td> {@link SctpStandardSocketOptions#SCTP_NODELAY SCTP_NODELAY} </td>
* <td> Enables or disable a Nagle-like algorithm </td> * <td> Enables or disable a Nagle-like algorithm </td>
* </tr> * </tr>
* <tr> * <tr>
* <td> {@link SctpStandardSocketOption#SCTP_PRIMARY_ADDR * <td> {@link SctpStandardSocketOptions#SCTP_PRIMARY_ADDR
* SCTP_PRIMARY_ADDR} </td> * SCTP_PRIMARY_ADDR} </td>
* <td> Requests that the local SCTP stack use the given peer address as the * <td> Requests that the local SCTP stack use the given peer address as the
* association primary </td> * association primary </td>
* </tr> * </tr>
* <tr> * <tr>
* <td> {@link SctpStandardSocketOption#SCTP_SET_PEER_PRIMARY_ADDR * <td> {@link SctpStandardSocketOptions#SCTP_SET_PEER_PRIMARY_ADDR
* SCTP_SET_PEER_PRIMARY_ADDR} </td> * SCTP_SET_PEER_PRIMARY_ADDR} </td>
* <td> Requests that the peer mark the enclosed address as the association * <td> Requests that the peer mark the enclosed address as the association
* primary </td> * primary </td>
* </tr> * </tr>
* <tr> * <tr>
* <td> {@link SctpStandardSocketOption#SO_SNDBUF * <td> {@link SctpStandardSocketOptions#SO_SNDBUF
* SO_SNDBUF} </td> * SO_SNDBUF} </td>
* <td> The size of the socket send buffer </td> * <td> The size of the socket send buffer </td>
* </tr> * </tr>
* <tr> * <tr>
* <td> {@link SctpStandardSocketOption#SO_RCVBUF * <td> {@link SctpStandardSocketOptions#SO_RCVBUF
* SO_RCVBUF} </td> * SO_RCVBUF} </td>
* <td> The size of the socket receive buffer </td> * <td> The size of the socket receive buffer </td>
* </tr> * </tr>
* <tr> * <tr>
* <td> {@link SctpStandardSocketOption#SO_LINGER * <td> {@link SctpStandardSocketOptions#SO_LINGER
* SO_LINGER} </td> * SO_LINGER} </td>
* <td> Linger on close if data is present (when configured in blocking mode * <td> Linger on close if data is present (when configured in blocking mode
* only) </td> * only) </td>
...@@ -450,7 +450,7 @@ public abstract class SctpMultiChannel ...@@ -450,7 +450,7 @@ public abstract class SctpMultiChannel
* @throws IOException * @throws IOException
* If an I/O error occurs * If an I/O error occurs
* *
* @see SctpStandardSocketOption * @see SctpStandardSocketOptions
*/ */
public abstract <T> T getOption(SctpSocketOption<T> name, public abstract <T> T getOption(SctpSocketOption<T> name,
Association association) Association association)
...@@ -489,7 +489,7 @@ public abstract class SctpMultiChannel ...@@ -489,7 +489,7 @@ public abstract class SctpMultiChannel
* @throws IOException * @throws IOException
* If an I/O error occurs * If an I/O error occurs
* *
* @see SctpStandardSocketOption * @see SctpStandardSocketOptions
*/ */
public abstract <T> SctpMultiChannel setOption(SctpSocketOption<T> name, public abstract <T> SctpMultiChannel setOption(SctpSocketOption<T> name,
T value, T value,
...@@ -542,7 +542,7 @@ public abstract class SctpMultiChannel ...@@ -542,7 +542,7 @@ public abstract class SctpMultiChannel
* MessageInfo} will return {@code false}, and more invocations of this * MessageInfo} will return {@code false}, and more invocations of this
* method will be necessary to completely consume the messgae. Only * method will be necessary to completely consume the messgae. Only
* one message at a time will be partially delivered in any stream. The * one message at a time will be partially delivered in any stream. The
* socket option {@link SctpStandardSocketOption#SCTP_FRAGMENT_INTERLEAVE * socket option {@link SctpStandardSocketOptions#SCTP_FRAGMENT_INTERLEAVE
* SCTP_FRAGMENT_INTERLEAVE} controls various aspects of what interlacing of * SCTP_FRAGMENT_INTERLEAVE} controls various aspects of what interlacing of
* messages occurs. * messages occurs.
* *
...@@ -635,14 +635,14 @@ public abstract class SctpMultiChannel ...@@ -635,14 +635,14 @@ public abstract class SctpMultiChannel
* underlying output buffer, then the remaining bytes in the given byte * underlying output buffer, then the remaining bytes in the given byte
* buffer are transmitted as a single message. Sending a message * buffer are transmitted as a single message. Sending a message
* is atomic unless explicit message completion {@link * is atomic unless explicit message completion {@link
* SctpStandardSocketOption#SCTP_EXPLICIT_COMPLETE SCTP_EXPLICIT_COMPLETE} * SctpStandardSocketOptions#SCTP_EXPLICIT_COMPLETE SCTP_EXPLICIT_COMPLETE}
* socket option is enabled on this channel's socket. * socket option is enabled on this channel's socket.
* *
* <P> If this channel is in non-blocking mode, there is sufficient room * <P> If this channel is in non-blocking mode, there is sufficient room
* in the underlying output buffer, and an implicit association setup is * in the underlying output buffer, and an implicit association setup is
* required, then the remaining bytes in the given byte buffer are * required, then the remaining bytes in the given byte buffer are
* transmitted as a single message, subject to {@link * transmitted as a single message, subject to {@link
* SctpStandardSocketOption#SCTP_EXPLICIT_COMPLETE SCTP_EXPLICIT_COMPLETE}. * SctpStandardSocketOptions#SCTP_EXPLICIT_COMPLETE SCTP_EXPLICIT_COMPLETE}.
* If for any reason the message cannot * If for any reason the message cannot
* be delivered an {@link AssociationChangeNotification association * be delivered an {@link AssociationChangeNotification association
* changed} notification is put on the SCTP stack with its {@code event} parameter set * changed} notification is put on the SCTP stack with its {@code event} parameter set
......
...@@ -53,7 +53,7 @@ import java.nio.channels.spi.AbstractSelectableChannel; ...@@ -53,7 +53,7 @@ import java.nio.channels.spi.AbstractSelectableChannel;
* <th>Description</th> * <th>Description</th>
* </tr> * </tr>
* <tr> * <tr>
* <td> {@link SctpStandardSocketOption#SCTP_INIT_MAXSTREAMS * <td> {@link SctpStandardSocketOptions#SCTP_INIT_MAXSTREAMS
* SCTP_INIT_MAXSTREAMS} </td> * SCTP_INIT_MAXSTREAMS} </td>
* <td> The maximum number of streams requested by the local endpoint during * <td> The maximum number of streams requested by the local endpoint during
* association initialization </td> * association initialization </td>
...@@ -360,7 +360,7 @@ public abstract class SctpServerChannel ...@@ -360,7 +360,7 @@ public abstract class SctpServerChannel
* @throws IOException * @throws IOException
* If an I/O error occurs * If an I/O error occurs
* *
* @see SctpStandardSocketOption * @see SctpStandardSocketOptions
*/ */
public abstract <T> T getOption(SctpSocketOption<T> name) throws IOException; public abstract <T> T getOption(SctpSocketOption<T> name) throws IOException;
...@@ -388,7 +388,7 @@ public abstract class SctpServerChannel ...@@ -388,7 +388,7 @@ public abstract class SctpServerChannel
* @throws IOException * @throws IOException
* If an I/O error occurs * If an I/O error occurs
* *
* @see SctpStandardSocketOption * @see SctpStandardSocketOptions
*/ */
public abstract <T> SctpServerChannel setOption(SctpSocketOption<T> name, public abstract <T> SctpServerChannel setOption(SctpSocketOption<T> name,
T value) T value)
......
...@@ -33,6 +33,6 @@ import java.net.SocketOption; ...@@ -33,6 +33,6 @@ import java.net.SocketOption;
* *
* @since 1.7 * @since 1.7
* *
* @see SctpStandardSocketOption * @see SctpStandardSocketOptions
*/ */
public interface SctpSocketOption<T> extends SocketOption<T> { } public interface SctpSocketOption<T> extends SocketOption<T> { }
...@@ -34,8 +34,8 @@ import sun.nio.ch.SctpStdSocketOption; ...@@ -34,8 +34,8 @@ import sun.nio.ch.SctpStdSocketOption;
* *
* @since 1.7 * @since 1.7
*/ */
public class SctpStandardSocketOption { public class SctpStandardSocketOptions {
private SctpStandardSocketOption() {} private SctpStandardSocketOptions() {}
/** /**
* Enables or disables message fragmentation. * Enables or disables message fragmentation.
* *
...@@ -127,7 +127,7 @@ public class SctpStandardSocketOption { ...@@ -127,7 +127,7 @@ public class SctpStandardSocketOption {
* association initialization. * association initialization.
* *
* <P> The value of this socket option is an {@link * <P> The value of this socket option is an {@link
* SctpStandardSocketOption.InitMaxStreams InitMaxStreams}, that represents * SctpStandardSocketOptions.InitMaxStreams InitMaxStreams}, that represents
* the maximum number of inbound and outbound streams that an association * the maximum number of inbound and outbound streams that an association
* on the channel is prepared to support. * on the channel is prepared to support.
* *
...@@ -157,9 +157,9 @@ public class SctpStandardSocketOption { ...@@ -157,9 +157,9 @@ public class SctpStandardSocketOption {
* the endpoints default value. * the endpoints default value.
*/ */
public static final SctpSocketOption public static final SctpSocketOption
<SctpStandardSocketOption.InitMaxStreams> SCTP_INIT_MAXSTREAMS = <SctpStandardSocketOptions.InitMaxStreams> SCTP_INIT_MAXSTREAMS =
new SctpStdSocketOption<SctpStandardSocketOption.InitMaxStreams>( new SctpStdSocketOption<SctpStandardSocketOptions.InitMaxStreams>(
"SCTP_INIT_MAXSTREAMS", SctpStandardSocketOption.InitMaxStreams.class); "SCTP_INIT_MAXSTREAMS", SctpStandardSocketOptions.InitMaxStreams.class);
/** /**
* Enables or disables a Nagle-like algorithm. * Enables or disables a Nagle-like algorithm.
...@@ -310,7 +310,7 @@ public class SctpStandardSocketOption { ...@@ -310,7 +310,7 @@ public class SctpStandardSocketOption {
* This class is used to set the maximum number of inbound/outbound streams * This class is used to set the maximum number of inbound/outbound streams
* used by the local endpoint during association initialization. An * used by the local endpoint during association initialization. An
* instance of this class is used to set the {@link * instance of this class is used to set the {@link
* SctpStandardSocketOption#SCTP_INIT_MAXSTREAMS SCTP_INIT_MAXSTREAMS} * SctpStandardSocketOptions#SCTP_INIT_MAXSTREAMS SCTP_INIT_MAXSTREAMS}
* socket option. * socket option.
* *
* @since 1.7 * @since 1.7
......
...@@ -2887,11 +2887,12 @@ public abstract class Component implements ImageObserver, MenuContainer, ...@@ -2887,11 +2887,12 @@ public abstract class Component implements ImageObserver, MenuContainer,
/** /**
* Invalidates this component and its ancestors. * Invalidates this component and its ancestors.
* <p> * <p>
* All the ancestors of this component up to the nearest validate root are * By default, all the ancestors of the component up to the top-most
* marked invalid also. If there is no a validate root container for this * container of the hierarchy are marked invalid. If the {@code
* component, all of its ancestors up to the root of the hierarchy are * java.awt.smartInvalidate} system property is set to {@code true},
* marked invalid as well. Marking a container <i>invalid</i> indicates * invalidation stops on the nearest validate root of this component.
* that the container needs to be laid out. * Marking a container <i>invalid</i> indicates that the container needs to
* be laid out.
* <p> * <p>
* This method is called automatically when any layout-related information * This method is called automatically when any layout-related information
* changes (e.g. setting the bounds of the component, or adding the * changes (e.g. setting the bounds of the component, or adding the
......
...@@ -41,6 +41,8 @@ import java.io.ObjectStreamField; ...@@ -41,6 +41,8 @@ import java.io.ObjectStreamField;
import java.io.PrintStream; import java.io.PrintStream;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.security.AccessController;
import java.util.Arrays; import java.util.Arrays;
import java.util.EventListener; import java.util.EventListener;
import java.util.HashSet; import java.util.HashSet;
...@@ -60,6 +62,8 @@ import sun.awt.dnd.SunDropTargetEvent; ...@@ -60,6 +62,8 @@ import sun.awt.dnd.SunDropTargetEvent;
import sun.java2d.pipe.Region; import sun.java2d.pipe.Region;
import sun.security.action.GetBooleanAction;
/** /**
* A generic Abstract Window Toolkit(AWT) container object is a component * A generic Abstract Window Toolkit(AWT) container object is a component
* that can contain other AWT components. * that can contain other AWT components.
...@@ -1506,12 +1510,18 @@ public class Container extends Component { ...@@ -1506,12 +1510,18 @@ public class Container extends Component {
* Layout-related changes, such as bounds of the validate root descendants, * Layout-related changes, such as bounds of the validate root descendants,
* do not affect the layout of the validate root parent. This peculiarity * do not affect the layout of the validate root parent. This peculiarity
* enables the {@code invalidate()} method to stop invalidating the * enables the {@code invalidate()} method to stop invalidating the
* component hierarchy when the method encounters a validate root. * component hierarchy when the method encounters a validate root. However,
* to preserve backward compatibility this new optimized behavior is
* enabled only when the {@code java.awt.smartInvalidate} system property
* value is set to {@code true}.
* <p> * <p>
* If a component hierarchy contains validate roots, the {@code validate()} * If a component hierarchy contains validate roots and the new optimized
* method must be invoked on the validate root of a previously invalidated * {@code invalidate()} behavior is enabled, the {@code validate()} method
* component, rather than on the top-level container (such as a {@code * must be invoked on the validate root of a previously invalidated
* Frame} object) to restore the validity of the hierarchy later. * component to restore the validity of the hierarchy later. Otherwise,
* calling the {@code validate()} method on the top-level container (such
* as a {@code Frame} object) should be used to restore the validity of the
* component hierarchy.
* <p> * <p>
* The {@code Window} class and the {@code Applet} class are the validate * The {@code Window} class and the {@code Applet} class are the validate
* roots in AWT. Swing introduces more validate roots. * roots in AWT. Swing introduces more validate roots.
...@@ -1527,13 +1537,20 @@ public class Container extends Component { ...@@ -1527,13 +1537,20 @@ public class Container extends Component {
return false; return false;
} }
private static final boolean isJavaAwtSmartInvalidate;
static {
// Don't lazy-read because every app uses invalidate()
isJavaAwtSmartInvalidate = AccessController.doPrivileged(
new GetBooleanAction("java.awt.smartInvalidate"));
}
/** /**
* Invalidates the parent of the container unless the container * Invalidates the parent of the container unless the container
* is a validate root. * is a validate root.
*/ */
@Override @Override
void invalidateParent() { void invalidateParent() {
if (!isValidateRoot()) { if (!isJavaAwtSmartInvalidate || !isValidateRoot()) {
super.invalidateParent(); super.invalidateParent();
} }
} }
...@@ -1572,9 +1589,8 @@ public class Container extends Component { ...@@ -1572,9 +1589,8 @@ public class Container extends Component {
* automatically. Note that the ancestors of the container may be * automatically. Note that the ancestors of the container may be
* invalidated also (see {@link Component#invalidate} for details.) * invalidated also (see {@link Component#invalidate} for details.)
* Therefore, to restore the validity of the hierarchy, the {@code * Therefore, to restore the validity of the hierarchy, the {@code
* validate()} method should be invoked on a validate root of an * validate()} method should be invoked on the top-most invalid
* invalidated component, or on the top-most container if the hierarchy * container of the hierarchy.
* does not contain validate roots.
* <p> * <p>
* Validating the container may be a quite time-consuming operation. For * Validating the container may be a quite time-consuming operation. For
* performance reasons a developer may postpone the validation of the * performance reasons a developer may postpone the validation of the
......
...@@ -466,10 +466,7 @@ public abstract class Toolkit { ...@@ -466,10 +466,7 @@ public abstract class Toolkit {
*/ */
protected void loadSystemColors(int[] systemColors) protected void loadSystemColors(int[] systemColors)
throws HeadlessException { throws HeadlessException {
if (GraphicsEnvironment.isHeadless()){ GraphicsEnvironment.checkHeadless();
throw new HeadlessException();
}
} }
/** /**
...@@ -504,10 +501,7 @@ public abstract class Toolkit { ...@@ -504,10 +501,7 @@ public abstract class Toolkit {
*/ */
public void setDynamicLayout(boolean dynamic) public void setDynamicLayout(boolean dynamic)
throws HeadlessException { throws HeadlessException {
if (GraphicsEnvironment.isHeadless()){ GraphicsEnvironment.checkHeadless();
throw new HeadlessException();
}
} }
/** /**
...@@ -531,9 +525,8 @@ public abstract class Toolkit { ...@@ -531,9 +525,8 @@ public abstract class Toolkit {
*/ */
protected boolean isDynamicLayoutSet() protected boolean isDynamicLayoutSet()
throws HeadlessException { throws HeadlessException {
if (GraphicsEnvironment.isHeadless()){ GraphicsEnvironment.checkHeadless();
throw new HeadlessException();
}
if (this != Toolkit.getDefaultToolkit()) { if (this != Toolkit.getDefaultToolkit()) {
return Toolkit.getDefaultToolkit().isDynamicLayoutSet(); return Toolkit.getDefaultToolkit().isDynamicLayoutSet();
} else { } else {
...@@ -569,9 +562,8 @@ public abstract class Toolkit { ...@@ -569,9 +562,8 @@ public abstract class Toolkit {
*/ */
public boolean isDynamicLayoutActive() public boolean isDynamicLayoutActive()
throws HeadlessException { throws HeadlessException {
if (GraphicsEnvironment.isHeadless()){ GraphicsEnvironment.checkHeadless();
throw new HeadlessException();
}
if (this != Toolkit.getDefaultToolkit()) { if (this != Toolkit.getDefaultToolkit()) {
return Toolkit.getDefaultToolkit().isDynamicLayoutActive(); return Toolkit.getDefaultToolkit().isDynamicLayoutActive();
} else { } else {
...@@ -615,9 +607,7 @@ public abstract class Toolkit { ...@@ -615,9 +607,7 @@ public abstract class Toolkit {
*/ */
public Insets getScreenInsets(GraphicsConfiguration gc) public Insets getScreenInsets(GraphicsConfiguration gc)
throws HeadlessException { throws HeadlessException {
if (GraphicsEnvironment.isHeadless()){ GraphicsEnvironment.checkHeadless();
throw new HeadlessException();
}
if (this != Toolkit.getDefaultToolkit()) { if (this != Toolkit.getDefaultToolkit()) {
return Toolkit.getDefaultToolkit().getScreenInsets(gc); return Toolkit.getDefaultToolkit().getScreenInsets(gc);
} else { } else {
...@@ -1200,10 +1190,7 @@ public abstract class Toolkit { ...@@ -1200,10 +1190,7 @@ public abstract class Toolkit {
* security manager's <code>checkPermission</code> method with a <code> * security manager's <code>checkPermission</code> method with a <code>
* RuntimePermission("queuePrintJob")</code> permission. * RuntimePermission("queuePrintJob")</code> permission.
* *
* @param frame the parent of the print dialog. May be null if and only * @param frame the parent of the print dialog. May not be null.
* if jobAttributes is not null and jobAttributes.getDialog()
* returns JobAttributes.DialogType.NONE or
* JobAttributes.DialogType.COMMON.
* @param jobtitle the title of the PrintJob. A null title is equivalent * @param jobtitle the title of the PrintJob. A null title is equivalent
* to "". * to "".
* @param jobAttributes a set of job attributes which will control the * @param jobAttributes a set of job attributes which will control the
...@@ -1359,9 +1346,8 @@ public abstract class Toolkit { ...@@ -1359,9 +1346,8 @@ public abstract class Toolkit {
* @since 1.4 * @since 1.4
*/ */
public Clipboard getSystemSelection() throws HeadlessException { public Clipboard getSystemSelection() throws HeadlessException {
if (GraphicsEnvironment.isHeadless()){ GraphicsEnvironment.checkHeadless();
throw new HeadlessException();
}
if (this != Toolkit.getDefaultToolkit()) { if (this != Toolkit.getDefaultToolkit()) {
return Toolkit.getDefaultToolkit().getSystemSelection(); return Toolkit.getDefaultToolkit().getSystemSelection();
} else { } else {
...@@ -1391,9 +1377,7 @@ public abstract class Toolkit { ...@@ -1391,9 +1377,7 @@ public abstract class Toolkit {
* @since JDK1.1 * @since JDK1.1
*/ */
public int getMenuShortcutKeyMask() throws HeadlessException { public int getMenuShortcutKeyMask() throws HeadlessException {
if (GraphicsEnvironment.isHeadless()){ GraphicsEnvironment.checkHeadless();
throw new HeadlessException();
}
return Event.CTRL_MASK; return Event.CTRL_MASK;
} }
...@@ -1418,7 +1402,10 @@ public abstract class Toolkit { ...@@ -1418,7 +1402,10 @@ public abstract class Toolkit {
* @since 1.3 * @since 1.3
*/ */
public boolean getLockingKeyState(int keyCode) public boolean getLockingKeyState(int keyCode)
throws UnsupportedOperationException { throws UnsupportedOperationException
{
GraphicsEnvironment.checkHeadless();
if (! (keyCode == KeyEvent.VK_CAPS_LOCK || keyCode == KeyEvent.VK_NUM_LOCK || if (! (keyCode == KeyEvent.VK_CAPS_LOCK || keyCode == KeyEvent.VK_NUM_LOCK ||
keyCode == KeyEvent.VK_SCROLL_LOCK || keyCode == KeyEvent.VK_KANA_LOCK)) { keyCode == KeyEvent.VK_SCROLL_LOCK || keyCode == KeyEvent.VK_KANA_LOCK)) {
throw new IllegalArgumentException("invalid key for Toolkit.getLockingKeyState"); throw new IllegalArgumentException("invalid key for Toolkit.getLockingKeyState");
...@@ -1449,7 +1436,10 @@ public abstract class Toolkit { ...@@ -1449,7 +1436,10 @@ public abstract class Toolkit {
* @since 1.3 * @since 1.3
*/ */
public void setLockingKeyState(int keyCode, boolean on) public void setLockingKeyState(int keyCode, boolean on)
throws UnsupportedOperationException { throws UnsupportedOperationException
{
GraphicsEnvironment.checkHeadless();
if (! (keyCode == KeyEvent.VK_CAPS_LOCK || keyCode == KeyEvent.VK_NUM_LOCK || if (! (keyCode == KeyEvent.VK_CAPS_LOCK || keyCode == KeyEvent.VK_NUM_LOCK ||
keyCode == KeyEvent.VK_SCROLL_LOCK || keyCode == KeyEvent.VK_KANA_LOCK)) { keyCode == KeyEvent.VK_SCROLL_LOCK || keyCode == KeyEvent.VK_KANA_LOCK)) {
throw new IllegalArgumentException("invalid key for Toolkit.setLockingKeyState"); throw new IllegalArgumentException("invalid key for Toolkit.setLockingKeyState");
...@@ -1523,9 +1513,8 @@ public abstract class Toolkit { ...@@ -1523,9 +1513,8 @@ public abstract class Toolkit {
*/ */
public Dimension getBestCursorSize(int preferredWidth, public Dimension getBestCursorSize(int preferredWidth,
int preferredHeight) throws HeadlessException { int preferredHeight) throws HeadlessException {
if (GraphicsEnvironment.isHeadless()){ GraphicsEnvironment.checkHeadless();
throw new HeadlessException();
}
// Override to implement custom cursor support. // Override to implement custom cursor support.
if (this != Toolkit.getDefaultToolkit()) { if (this != Toolkit.getDefaultToolkit()) {
return Toolkit.getDefaultToolkit(). return Toolkit.getDefaultToolkit().
...@@ -1553,9 +1542,8 @@ public abstract class Toolkit { ...@@ -1553,9 +1542,8 @@ public abstract class Toolkit {
* @since 1.2 * @since 1.2
*/ */
public int getMaximumCursorColors() throws HeadlessException { public int getMaximumCursorColors() throws HeadlessException {
if (GraphicsEnvironment.isHeadless()){ GraphicsEnvironment.checkHeadless();
throw new HeadlessException();
}
// Override to implement custom cursor support. // Override to implement custom cursor support.
if (this != Toolkit.getDefaultToolkit()) { if (this != Toolkit.getDefaultToolkit()) {
return Toolkit.getDefaultToolkit().getMaximumCursorColors(); return Toolkit.getDefaultToolkit().getMaximumCursorColors();
...@@ -1605,9 +1593,8 @@ public abstract class Toolkit { ...@@ -1605,9 +1593,8 @@ public abstract class Toolkit {
public boolean isFrameStateSupported(int state) public boolean isFrameStateSupported(int state)
throws HeadlessException throws HeadlessException
{ {
if (GraphicsEnvironment.isHeadless()){ GraphicsEnvironment.checkHeadless();
throw new HeadlessException();
}
if (this != Toolkit.getDefaultToolkit()) { if (this != Toolkit.getDefaultToolkit()) {
return Toolkit.getDefaultToolkit(). return Toolkit.getDefaultToolkit().
isFrameStateSupported(state); isFrameStateSupported(state);
...@@ -2614,9 +2601,8 @@ public abstract class Toolkit { ...@@ -2614,9 +2601,8 @@ public abstract class Toolkit {
* @since 1.7 * @since 1.7
*/ */
public boolean areExtraMouseButtonsEnabled() throws HeadlessException { public boolean areExtraMouseButtonsEnabled() throws HeadlessException {
if (GraphicsEnvironment.isHeadless()){ GraphicsEnvironment.checkHeadless();
throw new HeadlessException();
}
return Toolkit.getDefaultToolkit().areExtraMouseButtonsEnabled(); return Toolkit.getDefaultToolkit().areExtraMouseButtonsEnabled();
} }
} }
/* /*
* Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -32,7 +32,7 @@ import java.lang.annotation.*; ...@@ -32,7 +32,7 @@ import java.lang.annotation.*;
* constructor does not perform potentially unsafe operations on its * constructor does not perform potentially unsafe operations on its
* varargs parameter. Applying this annotation to a method or * varargs parameter. Applying this annotation to a method or
* constructor suppresses unchecked warnings about a * constructor suppresses unchecked warnings about a
* <i>non-reifiable</i> variable-arity (vararg) type and suppresses * <i>non-reifiable</i> variable arity (vararg) type and suppresses
* unchecked warnings about parameterized array creation at call * unchecked warnings about parameterized array creation at call
* sites. * sites.
* *
...@@ -41,11 +41,10 @@ import java.lang.annotation.*; ...@@ -41,11 +41,10 @@ import java.lang.annotation.*;
* additional usage restrictions on this annotation type; it is a * additional usage restrictions on this annotation type; it is a
* compile-time error if a method or constructor declaration is * compile-time error if a method or constructor declaration is
* annotated with a {@code @SafeVarargs} annotation, and either: * annotated with a {@code @SafeVarargs} annotation, and either:
* <ul> * <ul>
* <li> the declaration is a fixed-arity method or constructor * <li> the declaration is a fixed arity method or constructor
* *
* <li> the declaration is a variable-arity method that is neither * <li> the declaration is a variable arity method that is neither
* {@code static} nor {@code final}. * {@code static} nor {@code final}.
* *
* </ul> * </ul>
...@@ -55,15 +54,28 @@ import java.lang.annotation.*; ...@@ -55,15 +54,28 @@ import java.lang.annotation.*;
* *
* <ul> * <ul>
* *
* <li> The variable-arity parameter has a reifiable element type, * <li> The variable arity parameter has a reifiable element type,
* which includes primitive types, {@code Object}, and {@code String}. * which includes primitive types, {@code Object}, and {@code String}.
* (The unchecked warnings this annotation type suppresses already do * (The unchecked warnings this annotation type suppresses already do
* not occur for a reifiable element type.) * not occur for a reifiable element type.)
* *
* <li> The body of the method or constructor declaration performs * <li> The body of the method or constructor declaration performs
* potentially unsafe operations, such as an assignment to an element * potentially unsafe operations, such as an assignment to an element
* of the variable-arity parameter's array that generates an unchecked * of the variable arity parameter's array that generates an unchecked
* warning. * warning. Some unsafe operations do not trigger an unchecked
* warning. For example, the aliasing in
*
* <blockquote><pre>
* &#64;SafeVarargs // Not actually safe!
* static void m(List&lt;String&gt;... stringLists) {
* Object[] array = stringLists;
* List&lt;Integer&gt; tmpList = Arrays.asList(42);
* array[0] = tmpList; // Semantically invalid, but compiles without warnings
* String s = stringLists[0].get(0); // Oh no, ClassCastException at runtime!
* }
* </pre></blockquote>
*
* leads to a {@code ClassCastException} at runtime.
* *
* <p>Future versions of the platform may mandate compiler errors for * <p>Future versions of the platform may mandate compiler errors for
* such unsafe operations. * such unsafe operations.
......
...@@ -336,7 +336,10 @@ public class Throwable implements Serializable { ...@@ -336,7 +336,10 @@ public class Throwable implements Serializable {
* Disabling of suppression should only occur in exceptional * Disabling of suppression should only occur in exceptional
* circumstances where special requirements exist, such as a * circumstances where special requirements exist, such as a
* virtual machine reusing exception objects under low-memory * virtual machine reusing exception objects under low-memory
* situations. * situations. Circumstances where a given exception object is
* repeatedly caught and rethrown, such as to implement control
* flow between two sub-systems, is another situation where
* immutable throwable objects would be appropriate.
* *
* @param message the detail message. * @param message the detail message.
* @param cause the cause. (A {@code null} value is permitted, * @param cause the cause. (A {@code null} value is permitted,
...@@ -423,6 +426,18 @@ public class Throwable implements Serializable { ...@@ -423,6 +426,18 @@ public class Throwable implements Serializable {
* {@link #Throwable(String,Throwable)}, this method cannot be called * {@link #Throwable(String,Throwable)}, this method cannot be called
* even once. * even once.
* *
* <p>An example of using this method on a legacy throwable type
* without other support for setting the cause is:
*
* <pre>
* try {
* lowLevelOp();
* } catch (LowLevelException le) {
* throw (HighLevelException)
* new HighLevelException().initCause(le); // Legacy constructor
* }
* </pre>
*
* @param cause the cause (which is saved for later retrieval by the * @param cause the cause (which is saved for later retrieval by the
* {@link #getCause()} method). (A {@code null} value is * {@link #getCause()} method). (A {@code null} value is
* permitted, and indicates that the cause is nonexistent or * permitted, and indicates that the cause is nonexistent or
...@@ -762,7 +777,8 @@ public class Throwable implements Serializable { ...@@ -762,7 +777,8 @@ public class Throwable implements Serializable {
* @see java.lang.Throwable#printStackTrace() * @see java.lang.Throwable#printStackTrace()
*/ */
public synchronized Throwable fillInStackTrace() { public synchronized Throwable fillInStackTrace() {
if (stackTrace != null) { if (stackTrace != null ||
backtrace != null /* Out of protocol state */ ) {
fillInStackTrace(0); fillInStackTrace(0);
stackTrace = UNASSIGNED_STACK; stackTrace = UNASSIGNED_STACK;
} }
...@@ -788,7 +804,8 @@ public class Throwable implements Serializable { ...@@ -788,7 +804,8 @@ public class Throwable implements Serializable {
* this throwable is permitted to return a zero-length array from this * this throwable is permitted to return a zero-length array from this
* method. Generally speaking, the array returned by this method will * method. Generally speaking, the array returned by this method will
* contain one element for every frame that would be printed by * contain one element for every frame that would be printed by
* {@code printStackTrace}. * {@code printStackTrace}. Writes to the returned array do not
* affect future calls to this method.
* *
* @return an array of stack trace elements representing the stack trace * @return an array of stack trace elements representing the stack trace
* pertaining to this throwable. * pertaining to this throwable.
...@@ -801,7 +818,8 @@ public class Throwable implements Serializable { ...@@ -801,7 +818,8 @@ public class Throwable implements Serializable {
private synchronized StackTraceElement[] getOurStackTrace() { private synchronized StackTraceElement[] getOurStackTrace() {
// Initialize stack trace field with information from // Initialize stack trace field with information from
// backtrace if this is the first call to this method // backtrace if this is the first call to this method
if (stackTrace == UNASSIGNED_STACK) { if (stackTrace == UNASSIGNED_STACK ||
(stackTrace == null && backtrace != null) /* Out of protocol state */) {
int depth = getStackTraceDepth(); int depth = getStackTraceDepth();
stackTrace = new StackTraceElement[depth]; stackTrace = new StackTraceElement[depth];
for (int i=0; i < depth; i++) for (int i=0; i < depth; i++)
...@@ -849,7 +867,8 @@ public class Throwable implements Serializable { ...@@ -849,7 +867,8 @@ public class Throwable implements Serializable {
} }
synchronized (this) { synchronized (this) {
if (this.stackTrace == null) // Immutable stack if (this.stackTrace == null && // Immutable stack
backtrace == null) // Test for out of protocol state
return; return;
this.stackTrace = defensiveCopy; this.stackTrace = defensiveCopy;
} }
...@@ -971,8 +990,8 @@ public class Throwable implements Serializable { ...@@ -971,8 +990,8 @@ public class Throwable implements Serializable {
/** /**
* Appends the specified exception to the exceptions that were * Appends the specified exception to the exceptions that were
* suppressed in order to deliver this exception. This method is * suppressed in order to deliver this exception. This method is
* typically called (automatically and implicitly) by the {@code * thread-safe and typically called (automatically and implicitly)
* try}-with-resources statement. * by the {@code try}-with-resources statement.
* *
* <p>The suppression behavior is enabled <em>unless</em> disabled * <p>The suppression behavior is enabled <em>unless</em> disabled
* {@linkplain #Throwable(String, Throwable, boolean, boolean) via * {@linkplain #Throwable(String, Throwable, boolean, boolean) via
...@@ -1043,7 +1062,9 @@ public class Throwable implements Serializable { ...@@ -1043,7 +1062,9 @@ public class Throwable implements Serializable {
* *
* If no exceptions were suppressed or {@linkplain * If no exceptions were suppressed or {@linkplain
* #Throwable(String, Throwable, boolean, boolean) suppression is * #Throwable(String, Throwable, boolean, boolean) suppression is
* disabled}, an empty array is returned. * disabled}, an empty array is returned. This method is
* thread-safe. Writes to the returned array do not affect future
* calls to this method.
* *
* @return an array containing all of the exceptions that were * @return an array containing all of the exceptions that were
* suppressed to deliver this exception. * suppressed to deliver this exception.
......
...@@ -38,7 +38,7 @@ package java.net; ...@@ -38,7 +38,7 @@ package java.net;
* *
* @since 1.7 * @since 1.7
* *
* @see StandardSocketOption * @see StandardSocketOptions
*/ */
public interface SocketOption<T> { public interface SocketOption<T> {
......
...@@ -38,8 +38,8 @@ package java.net; ...@@ -38,8 +38,8 @@ package java.net;
* @since 1.7 * @since 1.7
*/ */
public final class StandardSocketOption { public final class StandardSocketOptions {
private StandardSocketOption() { } private StandardSocketOptions() { }
// -- SOL_SOCKET -- // -- SOL_SOCKET --
......
...@@ -58,11 +58,11 @@ import java.io.IOException; ...@@ -58,11 +58,11 @@ import java.io.IOException;
* <th>Description</th> * <th>Description</th>
* </tr> * </tr>
* <tr> * <tr>
* <td> {@link java.net.StandardSocketOption#SO_RCVBUF SO_RCVBUF} </td> * <td> {@link java.net.StandardSocketOptions#SO_RCVBUF SO_RCVBUF} </td>
* <td> The size of the socket receive buffer </td> * <td> The size of the socket receive buffer </td>
* </tr> * </tr>
* <tr> * <tr>
* <td> {@link java.net.StandardSocketOption#SO_REUSEADDR SO_REUSEADDR} </td> * <td> {@link java.net.StandardSocketOptions#SO_REUSEADDR SO_REUSEADDR} </td>
* <td> Re-use address </td> * <td> Re-use address </td>
* </tr> * </tr>
* </table> * </table>
......
...@@ -68,23 +68,23 @@ import java.nio.ByteBuffer; ...@@ -68,23 +68,23 @@ import java.nio.ByteBuffer;
* <th>Description</th> * <th>Description</th>
* </tr> * </tr>
* <tr> * <tr>
* <td> {@link java.net.StandardSocketOption#SO_SNDBUF SO_SNDBUF} </td> * <td> {@link java.net.StandardSocketOptions#SO_SNDBUF SO_SNDBUF} </td>
* <td> The size of the socket send buffer </td> * <td> The size of the socket send buffer </td>
* </tr> * </tr>
* <tr> * <tr>
* <td> {@link java.net.StandardSocketOption#SO_RCVBUF SO_RCVBUF} </td> * <td> {@link java.net.StandardSocketOptions#SO_RCVBUF SO_RCVBUF} </td>
* <td> The size of the socket receive buffer </td> * <td> The size of the socket receive buffer </td>
* </tr> * </tr>
* <tr> * <tr>
* <td> {@link java.net.StandardSocketOption#SO_KEEPALIVE SO_KEEPALIVE} </td> * <td> {@link java.net.StandardSocketOptions#SO_KEEPALIVE SO_KEEPALIVE} </td>
* <td> Keep connection alive </td> * <td> Keep connection alive </td>
* </tr> * </tr>
* <tr> * <tr>
* <td> {@link java.net.StandardSocketOption#SO_REUSEADDR SO_REUSEADDR} </td> * <td> {@link java.net.StandardSocketOptions#SO_REUSEADDR SO_REUSEADDR} </td>
* <td> Re-use address </td> * <td> Re-use address </td>
* </tr> * </tr>
* <tr> * <tr>
* <td> {@link java.net.StandardSocketOption#TCP_NODELAY TCP_NODELAY} </td> * <td> {@link java.net.StandardSocketOptions#TCP_NODELAY TCP_NODELAY} </td>
* <td> Disable the Nagle algorithm </td> * <td> Disable the Nagle algorithm </td>
* </tr> * </tr>
* </table> * </table>
......
...@@ -63,37 +63,37 @@ import java.nio.channels.spi.SelectorProvider; ...@@ -63,37 +63,37 @@ import java.nio.channels.spi.SelectorProvider;
* <th>Description</th> * <th>Description</th>
* </tr> * </tr>
* <tr> * <tr>
* <td> {@link java.net.StandardSocketOption#SO_SNDBUF SO_SNDBUF} </td> * <td> {@link java.net.StandardSocketOptions#SO_SNDBUF SO_SNDBUF} </td>
* <td> The size of the socket send buffer </td> * <td> The size of the socket send buffer </td>
* </tr> * </tr>
* <tr> * <tr>
* <td> {@link java.net.StandardSocketOption#SO_RCVBUF SO_RCVBUF} </td> * <td> {@link java.net.StandardSocketOptions#SO_RCVBUF SO_RCVBUF} </td>
* <td> The size of the socket receive buffer </td> * <td> The size of the socket receive buffer </td>
* </tr> * </tr>
* <tr> * <tr>
* <td> {@link java.net.StandardSocketOption#SO_REUSEADDR SO_REUSEADDR} </td> * <td> {@link java.net.StandardSocketOptions#SO_REUSEADDR SO_REUSEADDR} </td>
* <td> Re-use address </td> * <td> Re-use address </td>
* </tr> * </tr>
* <tr> * <tr>
* <td> {@link java.net.StandardSocketOption#SO_BROADCAST SO_BROADCAST} </td> * <td> {@link java.net.StandardSocketOptions#SO_BROADCAST SO_BROADCAST} </td>
* <td> Allow transmission of broadcast datagrams </td> * <td> Allow transmission of broadcast datagrams </td>
* </tr> * </tr>
* <tr> * <tr>
* <td> {@link java.net.StandardSocketOption#IP_TOS IP_TOS} </td> * <td> {@link java.net.StandardSocketOptions#IP_TOS IP_TOS} </td>
* <td> The Type of Service (ToS) octet in the Internet Protocol (IP) header </td> * <td> The Type of Service (ToS) octet in the Internet Protocol (IP) header </td>
* </tr> * </tr>
* <tr> * <tr>
* <td> {@link java.net.StandardSocketOption#IP_MULTICAST_IF IP_MULTICAST_IF} </td> * <td> {@link java.net.StandardSocketOptions#IP_MULTICAST_IF IP_MULTICAST_IF} </td>
* <td> The network interface for Internet Protocol (IP) multicast datagrams </td> * <td> The network interface for Internet Protocol (IP) multicast datagrams </td>
* </tr> * </tr>
* <tr> * <tr>
* <td> {@link java.net.StandardSocketOption#IP_MULTICAST_TTL * <td> {@link java.net.StandardSocketOptions#IP_MULTICAST_TTL
* IP_MULTICAST_TTL} </td> * IP_MULTICAST_TTL} </td>
* <td> The <em>time-to-live</em> for Internet Protocol (IP) multicast * <td> The <em>time-to-live</em> for Internet Protocol (IP) multicast
* datagrams </td> * datagrams </td>
* </tr> * </tr>
* <tr> * <tr>
* <td> {@link java.net.StandardSocketOption#IP_MULTICAST_LOOP * <td> {@link java.net.StandardSocketOptions#IP_MULTICAST_LOOP
* IP_MULTICAST_LOOP} </td> * IP_MULTICAST_LOOP} </td>
* <td> Loopback for Internet Protocol (IP) multicast datagrams </td> * <td> Loopback for Internet Protocol (IP) multicast datagrams </td>
* </tr> * </tr>
......
...@@ -30,7 +30,7 @@ import java.net.NetworkInterface; ...@@ -30,7 +30,7 @@ import java.net.NetworkInterface;
import java.io.IOException; import java.io.IOException;
import java.net.ProtocolFamily; // javadoc import java.net.ProtocolFamily; // javadoc
import java.net.StandardProtocolFamily; // javadoc import java.net.StandardProtocolFamily; // javadoc
import java.net.StandardSocketOption; // javadoc import java.net.StandardSocketOptions; // javadoc
/** /**
* A network channel that supports Internet Protocol (IP) multicasting. * A network channel that supports Internet Protocol (IP) multicasting.
...@@ -93,7 +93,7 @@ import java.net.StandardSocketOption; // javadoc ...@@ -93,7 +93,7 @@ import java.net.StandardSocketOption; // javadoc
* a specific address, rather than the wildcard address then it is implementation * a specific address, rather than the wildcard address then it is implementation
* specific if multicast datagrams are received by the socket. </p></li> * specific if multicast datagrams are received by the socket. </p></li>
* *
* <li><p> The {@link StandardSocketOption#SO_REUSEADDR SO_REUSEADDR} option should be * <li><p> The {@link StandardSocketOptions#SO_REUSEADDR SO_REUSEADDR} option should be
* enabled prior to {@link NetworkChannel#bind binding} the socket. This is * enabled prior to {@link NetworkChannel#bind binding} the socket. This is
* required to allow multiple members of the group to bind to the same * required to allow multiple members of the group to bind to the same
* address. </p></li> * address. </p></li>
...@@ -107,9 +107,9 @@ import java.net.StandardSocketOption; // javadoc ...@@ -107,9 +107,9 @@ import java.net.StandardSocketOption; // javadoc
* NetworkInterface ni = NetworkInterface.getByName("hme0"); * NetworkInterface ni = NetworkInterface.getByName("hme0");
* *
* DatagramChannel dc = DatagramChannel.open(StandardProtocolFamily.INET) * DatagramChannel dc = DatagramChannel.open(StandardProtocolFamily.INET)
* .setOption(StandardSocketOption.SO_REUSEADDR, true) * .setOption(StandardSocketOptions.SO_REUSEADDR, true)
* .bind(new InetSocketAddress(5000)) * .bind(new InetSocketAddress(5000))
* .setOption(StandardSocketOption.IP_MULTICAST_IF, ni); * .setOption(StandardSocketOptions.IP_MULTICAST_IF, ni);
* *
* InetAddress group = InetAddress.getByName("225.4.5.6"); * InetAddress group = InetAddress.getByName("225.4.5.6");
* *
......
...@@ -124,7 +124,7 @@ public interface NetworkChannel ...@@ -124,7 +124,7 @@ public interface NetworkChannel
* @throws IOException * @throws IOException
* If an I/O error occurs * If an I/O error occurs
* *
* @see java.net.StandardSocketOption * @see java.net.StandardSocketOptions
*/ */
<T> NetworkChannel setOption(SocketOption<T> name, T value) throws IOException; <T> NetworkChannel setOption(SocketOption<T> name, T value) throws IOException;
...@@ -144,7 +144,7 @@ public interface NetworkChannel ...@@ -144,7 +144,7 @@ public interface NetworkChannel
* @throws IOException * @throws IOException
* If an I/O error occurs * If an I/O error occurs
* *
* @see java.net.StandardSocketOption * @see java.net.StandardSocketOptions
*/ */
<T> T getOption(SocketOption<T> name) throws IOException; <T> T getOption(SocketOption<T> name) throws IOException;
......
...@@ -52,11 +52,11 @@ import java.nio.channels.spi.SelectorProvider; ...@@ -52,11 +52,11 @@ import java.nio.channels.spi.SelectorProvider;
* <th>Description</th> * <th>Description</th>
* </tr> * </tr>
* <tr> * <tr>
* <td> {@link java.net.StandardSocketOption#SO_RCVBUF SO_RCVBUF} </td> * <td> {@link java.net.StandardSocketOptions#SO_RCVBUF SO_RCVBUF} </td>
* <td> The size of the socket receive buffer </td> * <td> The size of the socket receive buffer </td>
* </tr> * </tr>
* <tr> * <tr>
* <td> {@link java.net.StandardSocketOption#SO_REUSEADDR SO_REUSEADDR} </td> * <td> {@link java.net.StandardSocketOptions#SO_REUSEADDR SO_REUSEADDR} </td>
* <td> Re-use address </td> * <td> Re-use address </td>
* </tr> * </tr>
* </table> * </table>
......
...@@ -72,28 +72,28 @@ import java.nio.channels.spi.SelectorProvider; ...@@ -72,28 +72,28 @@ import java.nio.channels.spi.SelectorProvider;
* <th>Description</th> * <th>Description</th>
* </tr> * </tr>
* <tr> * <tr>
* <td> {@link java.net.StandardSocketOption#SO_SNDBUF SO_SNDBUF} </td> * <td> {@link java.net.StandardSocketOptions#SO_SNDBUF SO_SNDBUF} </td>
* <td> The size of the socket send buffer </td> * <td> The size of the socket send buffer </td>
* </tr> * </tr>
* <tr> * <tr>
* <td> {@link java.net.StandardSocketOption#SO_RCVBUF SO_RCVBUF} </td> * <td> {@link java.net.StandardSocketOptions#SO_RCVBUF SO_RCVBUF} </td>
* <td> The size of the socket receive buffer </td> * <td> The size of the socket receive buffer </td>
* </tr> * </tr>
* <tr> * <tr>
* <td> {@link java.net.StandardSocketOption#SO_KEEPALIVE SO_KEEPALIVE} </td> * <td> {@link java.net.StandardSocketOptions#SO_KEEPALIVE SO_KEEPALIVE} </td>
* <td> Keep connection alive </td> * <td> Keep connection alive </td>
* </tr> * </tr>
* <tr> * <tr>
* <td> {@link java.net.StandardSocketOption#SO_REUSEADDR SO_REUSEADDR} </td> * <td> {@link java.net.StandardSocketOptions#SO_REUSEADDR SO_REUSEADDR} </td>
* <td> Re-use address </td> * <td> Re-use address </td>
* </tr> * </tr>
* <tr> * <tr>
* <td> {@link java.net.StandardSocketOption#SO_LINGER SO_LINGER} </td> * <td> {@link java.net.StandardSocketOptions#SO_LINGER SO_LINGER} </td>
* <td> Linger on close if data is present (when configured in blocking mode * <td> Linger on close if data is present (when configured in blocking mode
* only) </td> * only) </td>
* </tr> * </tr>
* <tr> * <tr>
* <td> {@link java.net.StandardSocketOption#TCP_NODELAY TCP_NODELAY} </td> * <td> {@link java.net.StandardSocketOptions#TCP_NODELAY TCP_NODELAY} </td>
* <td> Disable the Nagle algorithm </td> * <td> Disable the Nagle algorithm </td>
* </tr> * </tr>
* </table> * </table>
......
...@@ -215,7 +215,7 @@ import sun.security.action.GetPropertyAction; ...@@ -215,7 +215,7 @@ import sun.security.action.GetPropertyAction;
* determined during virtual-machine startup and typically depends upon the * determined during virtual-machine startup and typically depends upon the
* locale and charset being used by the underlying operating system. </p> * locale and charset being used by the underlying operating system. </p>
* *
* <p>The {@link StandardCharset} class defines constants for each of the * <p>The {@link StandardCharsets} class defines constants for each of the
* standard charsets. * standard charsets.
* *
* <h4>Terminology</h4> * <h4>Terminology</h4>
......
...@@ -32,10 +32,10 @@ package java.nio.charset; ...@@ -32,10 +32,10 @@ package java.nio.charset;
* @see <a href="Charset#standard">Standard Charsets</a> * @see <a href="Charset#standard">Standard Charsets</a>
* @since 1.7 * @since 1.7
*/ */
public final class StandardCharset { public final class StandardCharsets {
private StandardCharset() { private StandardCharsets() {
throw new AssertionError("No java.nio.charset.StandardCharset instances for you!"); throw new AssertionError("No java.nio.charset.StandardCharsets instances for you!");
} }
/** /**
* Seven-bit ASCII, a.k.a. ISO646-US, a.k.a. the Basic Latin block of the * Seven-bit ASCII, a.k.a. ISO646-US, a.k.a. the Basic Latin block of the
......
...@@ -72,7 +72,7 @@ import java.util.Iterator; ...@@ -72,7 +72,7 @@ import java.util.Iterator;
* directory and is UTF-8 encoded. * directory and is UTF-8 encoded.
* <pre> * <pre>
* Path path = FileSystems.getDefault().getPath("logs", "access.log"); * Path path = FileSystems.getDefault().getPath("logs", "access.log");
* BufferReader reader = Files.newBufferedReader(path, StandardCharset.UTF_8); * BufferReader reader = Files.newBufferedReader(path, StandardCharsets.UTF_8);
* </pre> * </pre>
* *
* <a name="interop"><h4>Interoperability</h4></a> * <a name="interop"><h4>Interoperability</h4></a>
...@@ -609,11 +609,11 @@ public interface Path ...@@ -609,11 +609,11 @@ public interface Path
* directory can be watched. The {@code events} parameter is the events to * directory can be watched. The {@code events} parameter is the events to
* register and may contain the following events: * register and may contain the following events:
* <ul> * <ul>
* <li>{@link StandardWatchEventKind#ENTRY_CREATE ENTRY_CREATE} - * <li>{@link StandardWatchEventKinds#ENTRY_CREATE ENTRY_CREATE} -
* entry created or moved into the directory</li> * entry created or moved into the directory</li>
* <li>{@link StandardWatchEventKind#ENTRY_DELETE ENTRY_DELETE} - * <li>{@link StandardWatchEventKinds#ENTRY_DELETE ENTRY_DELETE} -
* entry deleted or moved out of the directory</li> * entry deleted or moved out of the directory</li>
* <li>{@link StandardWatchEventKind#ENTRY_MODIFY ENTRY_MODIFY} - * <li>{@link StandardWatchEventKinds#ENTRY_MODIFY ENTRY_MODIFY} -
* entry in directory was modified</li> * entry in directory was modified</li>
* </ul> * </ul>
* *
...@@ -622,7 +622,7 @@ public interface Path ...@@ -622,7 +622,7 @@ public interface Path
* that locates the directory entry that is created, deleted, or modified. * that locates the directory entry that is created, deleted, or modified.
* *
* <p> The set of events may include additional implementation specific * <p> The set of events may include additional implementation specific
* event that are not defined by the enum {@link StandardWatchEventKind} * event that are not defined by the enum {@link StandardWatchEventKinds}
* *
* <p> The {@code modifiers} parameter specifies <em>modifiers</em> that * <p> The {@code modifiers} parameter specifies <em>modifiers</em> that
* qualify how the directory is registered. This release does not define any * qualify how the directory is registered. This release does not define any
......
...@@ -31,8 +31,8 @@ package java.nio.file; ...@@ -31,8 +31,8 @@ package java.nio.file;
* @since 1.7 * @since 1.7
*/ */
public final class StandardWatchEventKind { public final class StandardWatchEventKinds {
private StandardWatchEventKind() { } private StandardWatchEventKinds() { }
/** /**
* A special event to indicate that events may have been lost or * A special event to indicate that events may have been lost or
...@@ -44,8 +44,8 @@ public final class StandardWatchEventKind { ...@@ -44,8 +44,8 @@ public final class StandardWatchEventKind {
* *
* @see WatchService * @see WatchService
*/ */
public static final WatchEvent.Kind<Void> OVERFLOW = public static final WatchEvent.Kind<Object> OVERFLOW =
new StdWatchEventKind<Void>("OVERFLOW", Void.class); new StdWatchEventKind<Object>("OVERFLOW", Object.class);
/** /**
* Directory entry created. * Directory entry created.
......
...@@ -50,7 +50,7 @@ public interface WatchEvent<T> { ...@@ -50,7 +50,7 @@ public interface WatchEvent<T> {
* An event kind, for the purposes of identification. * An event kind, for the purposes of identification.
* *
* @since 1.7 * @since 1.7
* @see StandardWatchEventKind * @see StandardWatchEventKinds
*/ */
public static interface Kind<T> { public static interface Kind<T> {
/** /**
...@@ -98,9 +98,9 @@ public interface WatchEvent<T> { ...@@ -98,9 +98,9 @@ public interface WatchEvent<T> {
/** /**
* Returns the context for the event. * Returns the context for the event.
* *
* <p> In the case of {@link StandardWatchEventKind#ENTRY_CREATE ENTRY_CREATE}, * <p> In the case of {@link StandardWatchEventKinds#ENTRY_CREATE ENTRY_CREATE},
* {@link StandardWatchEventKind#ENTRY_DELETE ENTRY_DELETE}, and {@link * {@link StandardWatchEventKinds#ENTRY_DELETE ENTRY_DELETE}, and {@link
* StandardWatchEventKind#ENTRY_MODIFY ENTRY_MODIFY} events the context is * StandardWatchEventKinds#ENTRY_MODIFY ENTRY_MODIFY} events the context is
* a {@code Path} that is the {@link Path#relativize relative} path between * a {@code Path} that is the {@link Path#relativize relative} path between
* the directory registered with the watch service, and the entry that is * the directory registered with the watch service, and the entry that is
* created, deleted, or modified. * created, deleted, or modified.
......
...@@ -68,7 +68,7 @@ import java.util.concurrent.TimeUnit; ...@@ -68,7 +68,7 @@ import java.util.concurrent.TimeUnit;
* of events that it may accumulate. Where an implementation <em>knowingly</em> * of events that it may accumulate. Where an implementation <em>knowingly</em>
* discards events then it arranges for the key's {@link WatchKey#pollEvents * discards events then it arranges for the key's {@link WatchKey#pollEvents
* pollEvents} method to return an element with an event type of {@link * pollEvents} method to return an element with an event type of {@link
* StandardWatchEventKind#OVERFLOW OVERFLOW}. This event can be used by the * StandardWatchEventKinds#OVERFLOW OVERFLOW}. This event can be used by the
* consumer as a trigger to re-examine the state of the object. * consumer as a trigger to re-examine the state of the object.
* *
* <p> When an event is reported to indicate that a file in a watched directory * <p> When an event is reported to indicate that a file in a watched directory
...@@ -87,7 +87,7 @@ import java.util.concurrent.TimeUnit; ...@@ -87,7 +87,7 @@ import java.util.concurrent.TimeUnit;
* are detected, their timeliness, and whether their ordering is preserved are * are detected, their timeliness, and whether their ordering is preserved are
* highly implementation specific. For example, when a file in a watched * highly implementation specific. For example, when a file in a watched
* directory is modified then it may result in a single {@link * directory is modified then it may result in a single {@link
* StandardWatchEventKind#ENTRY_MODIFY ENTRY_MODIFY} event in some * StandardWatchEventKinds#ENTRY_MODIFY ENTRY_MODIFY} event in some
* implementations but several events in other implementations. Short-lived * implementations but several events in other implementations. Short-lived
* files (meaning files that are deleted very quickly after they are created) * files (meaning files that are deleted very quickly after they are created)
* may not be detected by primitive implementations that periodically poll the * may not be detected by primitive implementations that periodically poll the
......
...@@ -53,7 +53,7 @@ public interface Watchable { ...@@ -53,7 +53,7 @@ public interface Watchable {
* those specified by the {@code events} and {@code modifiers} parameters. * those specified by the {@code events} and {@code modifiers} parameters.
* Changing the event set does not cause pending events for the object to be * Changing the event set does not cause pending events for the object to be
* discarded. Objects are automatically registered for the {@link * discarded. Objects are automatically registered for the {@link
* StandardWatchEventKind#OVERFLOW OVERFLOW} event. This event is not * StandardWatchEventKinds#OVERFLOW OVERFLOW} event. This event is not
* required to be present in the array of events. * required to be present in the array of events.
* *
* <p> Otherwise the file system object has not yet been registered with the * <p> Otherwise the file system object has not yet been registered with the
......
...@@ -89,7 +89,7 @@ public class BatchUpdateException extends SQLException { ...@@ -89,7 +89,7 @@ public class BatchUpdateException extends SQLException {
* The <code>cause</code> is not initialized, and may subsequently be * The <code>cause</code> is not initialized, and may subsequently be
* initialized by a call to the * initialized by a call to the
* {@link Throwable#initCause(java.lang.Throwable)} method. The vendor code * {@link Throwable#initCause(java.lang.Throwable)} method. The vendor code
* is intialized to 0. * is initialized to 0.
* <p> * <p>
* *
* @param reason a description of the exception * @param reason a description of the exception
...@@ -188,7 +188,7 @@ public class BatchUpdateException extends SQLException { ...@@ -188,7 +188,7 @@ public class BatchUpdateException extends SQLException {
* @since 1.6 * @since 1.6
*/ */
public BatchUpdateException(Throwable cause) { public BatchUpdateException(Throwable cause) {
this(null, null, 0, null, cause); this((cause == null ? null : cause.toString()), null, 0, null, cause);
} }
/** /**
...@@ -214,7 +214,7 @@ public class BatchUpdateException extends SQLException { ...@@ -214,7 +214,7 @@ public class BatchUpdateException extends SQLException {
* @since 1.6 * @since 1.6
*/ */
public BatchUpdateException(int []updateCounts , Throwable cause) { public BatchUpdateException(int []updateCounts , Throwable cause) {
this(null, null, 0, updateCounts, cause); this((cause == null ? null : cause.toString()), null, 0, updateCounts, cause);
} }
/** /**
......
...@@ -826,7 +826,7 @@ import sun.misc.FormattedFloatingDecimal; ...@@ -826,7 +826,7 @@ import sun.misc.FormattedFloatingDecimal;
* *
* <li> <a href="#dndec"><b>Float and Double</b></a> * <li> <a href="#dndec"><b>Float and Double</b></a>
* *
* <li> <a href="#dndec"><b>BigDecimal</b></a> * <li> <a href="#dnbdec"><b>BigDecimal</b></a>
* *
* </ol> * </ol>
* *
...@@ -1362,7 +1362,7 @@ import sun.misc.FormattedFloatingDecimal; ...@@ -1362,7 +1362,7 @@ import sun.misc.FormattedFloatingDecimal;
* precision is not provided, then all of the digits as returned by {@link * precision is not provided, then all of the digits as returned by {@link
* Double#toHexString(double)} will be output. * Double#toHexString(double)} will be output.
* *
* <p><a name="dndec"><b> BigDecimal </b></a> * <p><a name="dnbdec"><b> BigDecimal </b></a>
* *
* <p> The following conversions may be applied {@link java.math.BigDecimal * <p> The following conversions may be applied {@link java.math.BigDecimal
* BigDecimal}. * BigDecimal}.
...@@ -1372,7 +1372,7 @@ import sun.misc.FormattedFloatingDecimal; ...@@ -1372,7 +1372,7 @@ import sun.misc.FormattedFloatingDecimal;
* <tr><td valign="top"> {@code 'e'} * <tr><td valign="top"> {@code 'e'}
* <td valign="top"> <tt>'&#92;u0065'</tt> * <td valign="top"> <tt>'&#92;u0065'</tt>
* <td> Requires the output to be formatted using <a * <td> Requires the output to be formatted using <a
* name="scientific">computerized scientific notation</a>. The <a * name="bscientific">computerized scientific notation</a>. The <a
* href="#l10n algorithm">localization algorithm</a> is applied. * href="#l10n algorithm">localization algorithm</a> is applied.
* *
* <p> The formatting of the magnitude <i>m</i> depends upon its value. * <p> The formatting of the magnitude <i>m</i> depends upon its value.
...@@ -1427,11 +1427,11 @@ import sun.misc.FormattedFloatingDecimal; ...@@ -1427,11 +1427,11 @@ import sun.misc.FormattedFloatingDecimal;
* *
* <p> If <i>m</i> is greater than or equal to 10<sup>-4</sup> but less * <p> If <i>m</i> is greater than or equal to 10<sup>-4</sup> but less
* than 10<sup>precision</sup> then it is represented in <i><a * than 10<sup>precision</sup> then it is represented in <i><a
* href="#decimal">decimal format</a></i>. * href="#bdecimal">decimal format</a></i>.
* *
* <p> If <i>m</i> is less than 10<sup>-4</sup> or greater than or equal to * <p> If <i>m</i> is less than 10<sup>-4</sup> or greater than or equal to
* 10<sup>precision</sup>, then it is represented in <i><a * 10<sup>precision</sup>, then it is represented in <i><a
* href="#scientific">computerized scientific notation</a></i>. * href="#bscientific">computerized scientific notation</a></i>.
* *
* <p> The total number of significant digits in <i>m</i> is equal to the * <p> The total number of significant digits in <i>m</i> is equal to the
* precision. If the precision is not specified, then the default value is * precision. If the precision is not specified, then the default value is
...@@ -1447,7 +1447,7 @@ import sun.misc.FormattedFloatingDecimal; ...@@ -1447,7 +1447,7 @@ import sun.misc.FormattedFloatingDecimal;
* *
* <tr><td valign="top"> {@code 'f'} * <tr><td valign="top"> {@code 'f'}
* <td valign="top"> <tt>'&#92;u0066'</tt> * <td valign="top"> <tt>'&#92;u0066'</tt>
* <td> Requires the output to be formatted using <a name="decimal">decimal * <td> Requires the output to be formatted using <a name="bdecimal">decimal
* format</a>. The <a href="#l10n algorithm">localization algorithm</a> is * format</a>. The <a href="#l10n algorithm">localization algorithm</a> is
* applied. * applied.
* *
......
...@@ -159,7 +159,7 @@ import java.util.concurrent.locks.LockSupport; ...@@ -159,7 +159,7 @@ import java.util.concurrent.locks.LockSupport;
* void runTasks(List<Runnable> tasks) { * void runTasks(List<Runnable> tasks) {
* final Phaser phaser = new Phaser(1); // "1" to register self * final Phaser phaser = new Phaser(1); // "1" to register self
* // create and start threads * // create and start threads
* for (Runnable task : tasks) { * for (final Runnable task : tasks) {
* phaser.register(); * phaser.register();
* new Thread() { * new Thread() {
* public void run() { * public void run() {
......
...@@ -275,10 +275,14 @@ public class LockSupport { ...@@ -275,10 +275,14 @@ public class LockSupport {
* snapshot -- the thread may have since unblocked or blocked on a * snapshot -- the thread may have since unblocked or blocked on a
* different blocker object. * different blocker object.
* *
* @param t the thread
* @return the blocker * @return the blocker
* @throws NullPointerException if argument is null
* @since 1.6 * @since 1.6
*/ */
public static Object getBlocker(Thread t) { public static Object getBlocker(Thread t) {
if (t == null)
throw new NullPointerException();
return unsafe.getObjectVolatile(t, parkBlockerOffset); return unsafe.getObjectVolatile(t, parkBlockerOffset);
} }
......
/* /*
* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -342,12 +342,35 @@ public class LogManager { ...@@ -342,12 +342,35 @@ public class LogManager {
// already been created with the given name it is returned. // already been created with the given name it is returned.
// Otherwise a new logger instance is created and registered // Otherwise a new logger instance is created and registered
// in the LogManager global namespace. // in the LogManager global namespace.
// This method will always return a non-null Logger object.
// Synchronization is not required here. All synchronization for
// adding a new Logger object is handled by addLogger().
Logger demandLogger(String name) { Logger demandLogger(String name) {
Logger result = getLogger(name); Logger result = getLogger(name);
if (result == null) { if (result == null) {
result = new Logger(name, null); // only allocate the new logger once
addLogger(result); Logger newLogger = new Logger(name, null);
do {
if (addLogger(newLogger)) {
// We successfully added the new Logger that we
// created above so return it without refetching.
return newLogger;
}
// We didn't add the new Logger that we created above
// because another thread added a Logger with the same
// name after our null check above and before our call
// to addLogger(). We have to refetch the Logger because
// addLogger() returns a boolean instead of the Logger
// reference itself. However, if the thread that created
// the other Logger is not holding a strong reference to
// the other Logger, then it is possible for the other
// Logger to be GC'ed after we saw it in addLogger() and
// before we can refetch it. If it has been GC'ed then
// we'll just loop around and try again.
result = getLogger(name); result = getLogger(name);
} while (result == null);
} }
return result; return result;
} }
......
...@@ -310,7 +310,20 @@ public class Logger { ...@@ -310,7 +310,20 @@ public class Logger {
* @return a suitable Logger * @return a suitable Logger
* @throws NullPointerException if the name is null. * @throws NullPointerException if the name is null.
*/ */
public static synchronized Logger getLogger(String name) {
// Synchronization is not required here. All synchronization for
// adding a new Logger object is handled by LogManager.addLogger().
public static Logger getLogger(String name) {
// This method is intentionally not a wrapper around a call
// to getLogger(name, resourceBundleName). If it were then
// this sequence:
//
// getLogger("Foo", "resourceBundleForFoo");
// getLogger("Foo");
//
// would throw an IllegalArgumentException in the second call
// because the wrapper would result in an attempt to replace
// the existing "resourceBundleForFoo" with null.
LogManager manager = LogManager.getLogManager(); LogManager manager = LogManager.getLogManager();
return manager.demandLogger(name); return manager.demandLogger(name);
} }
...@@ -355,7 +368,10 @@ public class Logger { ...@@ -355,7 +368,10 @@ public class Logger {
* a different resource bundle name. * a different resource bundle name.
* @throws NullPointerException if the name is null. * @throws NullPointerException if the name is null.
*/ */
public static synchronized Logger getLogger(String name, String resourceBundleName) {
// Synchronization is not required here. All synchronization for
// adding a new Logger object is handled by LogManager.addLogger().
public static Logger getLogger(String name, String resourceBundleName) {
LogManager manager = LogManager.getLogManager(); LogManager manager = LogManager.getLogManager();
Logger result = manager.demandLogger(name); Logger result = manager.demandLogger(name);
if (result.resourceBundleName == null) { if (result.resourceBundleName == null) {
...@@ -417,7 +433,10 @@ public class Logger { ...@@ -417,7 +433,10 @@ public class Logger {
* @throws MissingResourceException if the resourceBundleName is non-null and * @throws MissingResourceException if the resourceBundleName is non-null and
* no corresponding resource can be found. * no corresponding resource can be found.
*/ */
public static synchronized Logger getAnonymousLogger(String resourceBundleName) {
// Synchronization is not required here. All synchronization for
// adding a new anonymous Logger object is handled by doSetParent().
public static Logger getAnonymousLogger(String resourceBundleName) {
LogManager manager = LogManager.getLogManager(); LogManager manager = LogManager.getLogManager();
// cleanup some Loggers that have been GC'ed // cleanup some Loggers that have been GC'ed
manager.drainLoggerRefQueueBounded(); manager.drainLoggerRefQueueBounded();
......
...@@ -213,7 +213,7 @@ import java.util.Arrays; ...@@ -213,7 +213,7 @@ import java.util.Arrays;
* <td headers="matches">A character in the Greek&nbsp;block (<a href="#ubc">block</a>)</td></tr> * <td headers="matches">A character in the Greek&nbsp;block (<a href="#ubc">block</a>)</td></tr>
* <tr><td valign="top" headers="construct unicode"><tt>\p{Lu}</tt></td> * <tr><td valign="top" headers="construct unicode"><tt>\p{Lu}</tt></td>
* <td headers="matches">An uppercase letter (<a href="#ucc">category</a>)</td></tr> * <td headers="matches">An uppercase letter (<a href="#ucc">category</a>)</td></tr>
* <tr><td valign="top" headers="construct unicode"><tt>\p{isAlphabetic}</tt></td> * <tr><td valign="top" headers="construct unicode"><tt>\p{IsAlphabetic}</tt></td>
* <td headers="matches">An alphabetic character (<a href="#ubpc">binary property</a>)</td></tr> * <td headers="matches">An alphabetic character (<a href="#ubpc">binary property</a>)</td></tr>
* <tr><td valign="top" headers="construct unicode"><tt>\p{Sc}</tt></td> * <tr><td valign="top" headers="construct unicode"><tt>\p{Sc}</tt></td>
* <td headers="matches">A currency symbol</td></tr> * <td headers="matches">A currency symbol</td></tr>
......
...@@ -28,7 +28,7 @@ package java.util.zip; ...@@ -28,7 +28,7 @@ package java.util.zip;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import java.nio.CharBuffer; import java.nio.CharBuffer;
import java.nio.charset.Charset; import java.nio.charset.Charset;
import java.nio.charset.StandardCharset; import java.nio.charset.StandardCharsets;
import java.nio.charset.CharsetDecoder; import java.nio.charset.CharsetDecoder;
import java.nio.charset.CharsetEncoder; import java.nio.charset.CharsetEncoder;
import java.nio.charset.CoderResult; import java.nio.charset.CoderResult;
...@@ -107,7 +107,7 @@ final class ZipCoder { ...@@ -107,7 +107,7 @@ final class ZipCoder {
if (isUTF8) if (isUTF8)
return getBytes(s); return getBytes(s);
if (utf8 == null) if (utf8 == null)
utf8 = new ZipCoder(StandardCharset.UTF_8); utf8 = new ZipCoder(StandardCharsets.UTF_8);
return utf8.getBytes(s); return utf8.getBytes(s);
} }
...@@ -116,7 +116,7 @@ final class ZipCoder { ...@@ -116,7 +116,7 @@ final class ZipCoder {
if (isUTF8) if (isUTF8)
return toString(ba, len); return toString(ba, len);
if (utf8 == null) if (utf8 == null)
utf8 = new ZipCoder(StandardCharset.UTF_8); utf8 = new ZipCoder(StandardCharsets.UTF_8);
return utf8.toString(ba, len); return utf8.toString(ba, len);
} }
...@@ -132,7 +132,7 @@ final class ZipCoder { ...@@ -132,7 +132,7 @@ final class ZipCoder {
private ZipCoder(Charset cs) { private ZipCoder(Charset cs) {
this.cs = cs; this.cs = cs;
this.isUTF8 = cs.name().equals(StandardCharset.UTF_8.name()); this.isUTF8 = cs.name().equals(StandardCharsets.UTF_8.name());
} }
static ZipCoder get(Charset charset) { static ZipCoder get(Charset charset) {
......
...@@ -31,7 +31,7 @@ import java.io.IOException; ...@@ -31,7 +31,7 @@ import java.io.IOException;
import java.io.EOFException; import java.io.EOFException;
import java.io.File; import java.io.File;
import java.nio.charset.Charset; import java.nio.charset.Charset;
import java.nio.charset.StandardCharset; import java.nio.charset.StandardCharsets;
import java.util.ArrayDeque; import java.util.ArrayDeque;
import java.util.Deque; import java.util.Deque;
import java.util.Enumeration; import java.util.Enumeration;
...@@ -141,7 +141,7 @@ class ZipFile implements ZipConstants, Closeable { ...@@ -141,7 +141,7 @@ class ZipFile implements ZipConstants, Closeable {
* @since 1.3 * @since 1.3
*/ */
public ZipFile(File file, int mode) throws IOException { public ZipFile(File file, int mode) throws IOException {
this(file, mode, StandardCharset.UTF_8); this(file, mode, StandardCharsets.UTF_8);
} }
/** /**
......
...@@ -30,7 +30,7 @@ import java.io.IOException; ...@@ -30,7 +30,7 @@ import java.io.IOException;
import java.io.EOFException; import java.io.EOFException;
import java.io.PushbackInputStream; import java.io.PushbackInputStream;
import java.nio.charset.Charset; import java.nio.charset.Charset;
import java.nio.charset.StandardCharset; import java.nio.charset.StandardCharsets;
import static java.util.zip.ZipConstants64.*; import static java.util.zip.ZipConstants64.*;
/** /**
...@@ -76,7 +76,7 @@ class ZipInputStream extends InflaterInputStream implements ZipConstants { ...@@ -76,7 +76,7 @@ class ZipInputStream extends InflaterInputStream implements ZipConstants {
* @param in the actual input stream * @param in the actual input stream
*/ */
public ZipInputStream(InputStream in) { public ZipInputStream(InputStream in) {
this(in, StandardCharset.UTF_8); this(in, StandardCharsets.UTF_8);
} }
/** /**
......
...@@ -28,7 +28,7 @@ package java.util.zip; ...@@ -28,7 +28,7 @@ package java.util.zip;
import java.io.OutputStream; import java.io.OutputStream;
import java.io.IOException; import java.io.IOException;
import java.nio.charset.Charset; import java.nio.charset.Charset;
import java.nio.charset.StandardCharset; import java.nio.charset.StandardCharsets;
import java.util.Vector; import java.util.Vector;
import java.util.HashSet; import java.util.HashSet;
import static java.util.zip.ZipConstants64.*; import static java.util.zip.ZipConstants64.*;
...@@ -101,7 +101,7 @@ class ZipOutputStream extends DeflaterOutputStream implements ZipConstants { ...@@ -101,7 +101,7 @@ class ZipOutputStream extends DeflaterOutputStream implements ZipConstants {
* @param out the actual output stream * @param out the actual output stream
*/ */
public ZipOutputStream(OutputStream out) { public ZipOutputStream(OutputStream out) {
this(out, StandardCharset.UTF_8); this(out, StandardCharsets.UTF_8);
} }
/** /**
......
...@@ -211,6 +211,20 @@ to any listeners. ...@@ -211,6 +211,20 @@ to any listeners.
<p> <p>
<a name=optcolor><b>Optional ColorSpace support:</b></a>
Handling of PhotoYCC (YCC), PhotoYCCA (YCCA), RGBA and YCbCrA color spaces
by the standard plugin, as described below, is dependent on capabilities
of the libraries used to interpret the JPEG data. Thus all consequential
behaviors are optional. If the support is not available when decoding,
the color space will be treated as unrecognized and the appropriate
default color space for the specified number of component channels
may be used.
When writing, an Exception may be thrown if no suitable conversion
can be applied before encoding.
But where the support for these color spaces is available, the behavior
must be as documented.
<p>
When reading, the contents of the stream are interpreted by the usual When reading, the contents of the stream are interpreted by the usual
JPEG conventions, as follows: JPEG conventions, as follows:
...@@ -241,8 +255,11 @@ JPEG conventions, as follows: ...@@ -241,8 +255,11 @@ JPEG conventions, as follows:
2-channel images are assumed to be grayscale with an alpha channel. 2-channel images are assumed to be grayscale with an alpha channel.
For 3- and 4-channel images, the component ids are consulted. If these For 3- and 4-channel images, the component ids are consulted. If these
values are 1-3 for a 3-channel image, then the image is assumed to be values are 1-3 for a 3-channel image, then the image is assumed to be
YCbCr. If these values are 1-4 for a 4-channel image, then the image YCbCr. Subject to the availability of the
is assumed to be YCbCrA. If these values are > 4, they are checked <a href=#optcolor>optional color space support</a>
described above, if these values are 1-4 for a 4-channel image,
then the image is assumed to be YCbCrA.
If these values are > 4, they are checked
against the ASCII codes for 'R', 'G', 'B', 'A', 'C', 'c'. These can against the ASCII codes for 'R', 'G', 'B', 'A', 'C', 'c'. These can
encode the following colorspaces: encode the following colorspaces:
<p> <p>
...@@ -346,12 +363,16 @@ If no metadata object is specified, then the following defaults apply: ...@@ -346,12 +363,16 @@ If no metadata object is specified, then the following defaults apply:
component ids in the frame and scan headers are set to 1, 2, and 3. component ids in the frame and scan headers are set to 1, 2, and 3.
<li> RGBA images are converted to YCbCrA, subsampled in the <li> Subject to the <a href=#optcolor>optional library support</a>
described above,
RGBA images are converted to YCbCrA, subsampled in the
chrominance channels by half both vertically and horizontally, and chrominance channels by half both vertically and horizontally, and
written without any special marker segments. The component ids written without any special marker segments. The component ids
in the frame and scan headers are set to 1, 2, 3, and 4. in the frame and scan headers are set to 1, 2, 3, and 4.
<li> PhotoYCC and YCCAimages are subsampled by half in the chrominance <li> Subject to the <a href=#optcolor>optional library support</a>
described above,
PhotoYCC and YCCAimages are subsampled by half in the chrominance
channels both vertically and horizontally and written with an channels both vertically and horizontally and written with an
Adobe <code>APP14</code> marker segment and 'Y','C', and 'c' (and Adobe <code>APP14</code> marker segment and 'Y','C', and 'c' (and
'A' if an alpha channel is present) as component ids in the frame 'A' if an alpha channel is present) as component ids in the frame
...@@ -433,6 +454,8 @@ in the frame header node of the metadata object, regardless of color space.) ...@@ -433,6 +454,8 @@ in the frame header node of the metadata object, regardless of color space.)
</ul> </ul>
<li> RGBA images: <li> RGBA images:
Subject to the <a href=#optcolor>optional library support</a>
described above,
<ul> <ul>
<li> If an <code>app0JFIF</code> node is present in the metadata object, <li> If an <code>app0JFIF</code> node is present in the metadata object,
it is ignored and a warning is sent to listeners, as JFIF does not it is ignored and a warning is sent to listeners, as JFIF does not
...@@ -456,6 +479,8 @@ in the frame header node of the metadata object, regardless of color space.) ...@@ -456,6 +479,8 @@ in the frame header node of the metadata object, regardless of color space.)
</ul> </ul>
<li> PhotoYCC Images: <li> PhotoYCC Images:
Subject to the <a href=#optcolor>optional library support</a>
described above,
<ul> <ul>
<li> If an <code>app0JFIF</code> node is present in the metadata object, <li> If an <code>app0JFIF</code> node is present in the metadata object,
the image is converted to sRGB, and then to YCbCr during encoding, the image is converted to sRGB, and then to YCbCr during encoding,
...@@ -471,6 +496,8 @@ in the frame header node of the metadata object, regardless of color space.) ...@@ -471,6 +496,8 @@ in the frame header node of the metadata object, regardless of color space.)
</ul> </ul>
<li> PhotoYCCA Images: <li> PhotoYCCA Images:
Subject to the <a href=#optcolor>optional library support</a>
described above,
<ul> <ul>
<li> If an <code>app0JFIF</code> node is present in the metadata object, <li> If an <code>app0JFIF</code> node is present in the metadata object,
it is ignored and a warning is sent to listeners, as JFIF does not it is ignored and a warning is sent to listeners, as JFIF does not
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<head> <head>
<title>javax.management.loading package</title> <title>javax.management.loading package</title>
<!-- <!--
Copyright (c) 1999, 2006, Oracle and/or its affiliates. All rights reserved. Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
This code is free software; you can redistribute it and/or modify it This code is free software; you can redistribute it and/or modify it
...@@ -68,7 +68,7 @@ questions. ...@@ -68,7 +68,7 @@ questions.
<p id="spec"> <p id="spec">
@see <a href="{@docRoot}/../technotes/guides/jmx/"> @see <a href="{@docRoot}/../technotes/guides/jmx/">
Java SE 6 Platform documentation on JMX technology</a>, Java Platform documentation on JMX technology</a>,
in particular the in particular the
<a href="{@docRoot}/../technotes/guides/jmx/JMX_1_4_specification.pdf"> <a href="{@docRoot}/../technotes/guides/jmx/JMX_1_4_specification.pdf">
JMX Specification, version 1.4(pdf).</a> JMX Specification, version 1.4(pdf).</a>
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<head> <head>
<title>javax.management.modelmbean package</title> <title>javax.management.modelmbean package</title>
<!-- <!--
Copyright (c) 2000, 2006, Oracle and/or its affiliates. All rights reserved. Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
This code is free software; you can redistribute it and/or modify it This code is free software; you can redistribute it and/or modify it
...@@ -116,7 +116,7 @@ mbs.invoke(mapName, "get", new Object[] {"key"}, new String[] {Object.class.getN ...@@ -116,7 +116,7 @@ mbs.invoke(mapName, "get", new Object[] {"key"}, new String[] {Object.class.getN
<li>See the <i>JMX 1.4 Specification</i> <li>See the <i>JMX 1.4 Specification</i>
PDF document available from the PDF document available from the
<a href="{@docRoot}/../technotes/guides/jmx/"> <a href="{@docRoot}/../technotes/guides/jmx/">
Java SE 6 Platform documentation on JMX</a> Java Platform documentation on JMX technology</a>
</ul> </ul>
@since 1.5 @since 1.5
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<head> <head>
<title>javax.management.monitor package</title> <title>javax.management.monitor package</title>
<!-- <!--
Copyright (c) 1999, 2006, Oracle and/or its affiliates. All rights reserved. Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
This code is free software; you can redistribute it and/or modify it This code is free software; you can redistribute it and/or modify it
...@@ -184,7 +184,7 @@ questions. ...@@ -184,7 +184,7 @@ questions.
</ul> </ul>
<p id="spec"> <p id="spec">
@see <a href="{@docRoot}/../technotes/guides/jmx/"> @see <a href="{@docRoot}/../technotes/guides/jmx/">
Java SE 6 Platform documentation on JMX technology</a>, Java Platform documentation on JMX technology</a>,
in particular the in particular the
<a href="{@docRoot}/../technotes/guides/jmx/JMX_1_4_specification.pdf"> <a href="{@docRoot}/../technotes/guides/jmx/JMX_1_4_specification.pdf">
JMX Specification, version 1.4(pdf).</a> JMX Specification, version 1.4(pdf).</a>
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<head> <head>
<title>javax.management.openmbean package</title> <title>javax.management.openmbean package</title>
<!-- <!--
Copyright (c) 2001, 2007, Oracle and/or its affiliates. All rights reserved. Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
This code is free software; you can redistribute it and/or modify it This code is free software; you can redistribute it and/or modify it
...@@ -143,7 +143,7 @@ questions. ...@@ -143,7 +143,7 @@ questions.
</ul> </ul>
@see <a href="{@docRoot}/../technotes/guides/jmx/"> @see <a href="{@docRoot}/../technotes/guides/jmx/">
Java SE 6 Platform documentation on JMX technology</a>, Java Platform documentation on JMX technology</a>,
in particular the in particular the
<a href="{@docRoot}/../technotes/guides/jmx/JMX_1_4_specification.pdf"> <a href="{@docRoot}/../technotes/guides/jmx/JMX_1_4_specification.pdf">
JMX Specification, version 1.4</a> JMX Specification, version 1.4</a>
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<head> <head>
<title>javax.management package</title> <title>javax.management package</title>
<!-- <!--
Copyright (c) 1999, 2006, Oracle and/or its affiliates. All rights reserved. Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
This code is free software; you can redistribute it and/or modify it This code is free software; you can redistribute it and/or modify it
...@@ -391,7 +391,7 @@ questions. ...@@ -391,7 +391,7 @@ questions.
<p id="spec"> <p id="spec">
@see <a href="{@docRoot}/../technotes/guides/jmx/index.html"> @see <a href="{@docRoot}/../technotes/guides/jmx/index.html">
Java SE 6 Platform documentation on JMX technology</a> Java Platform documentation on JMX technology</a>
in particular the in particular the
<a href="{@docRoot}/../technotes/guides/jmx/JMX_1_4_specification.pdf"> <a href="{@docRoot}/../technotes/guides/jmx/JMX_1_4_specification.pdf">
JMX Specification, version 1.4(pdf).</a> JMX Specification, version 1.4(pdf).</a>
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<head> <head>
<title>javax.management.relation package</title> <title>javax.management.relation package</title>
<!-- <!--
Copyright (c) 2000, 2006, Oracle and/or its affiliates. All rights reserved. Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
This code is free software; you can redistribute it and/or modify it This code is free software; you can redistribute it and/or modify it
...@@ -137,7 +137,7 @@ Set&lt;ObjectName&gt; dependentASet = dependentAMap.keySet(); ...@@ -137,7 +137,7 @@ Set&lt;ObjectName&gt; dependentASet = dependentAMap.keySet();
</pre> </pre>
@see <a href="{@docRoot}/../technotes/guides/jmx/"> @see <a href="{@docRoot}/../technotes/guides/jmx/">
Java SE 6 Platform documentation on JMX technology</a>, Java Platform documentation on JMX technology</a>,
in particular the in particular the
<a href="{@docRoot}/../technotes/guides/jmx/JMX_1_4_specification.pdf"> <a href="{@docRoot}/../technotes/guides/jmx/JMX_1_4_specification.pdf">
JMX Specification, version 1.4</a> JMX Specification, version 1.4</a>
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<head> <head>
<title>JMX<sup><font size="-2">TM</font></sup> Remote API.</title> <title>JMX<sup><font size="-2">TM</font></sup> Remote API.</title>
<!-- <!--
Copyright (c) 2002, 2006, Oracle and/or its affiliates. All rights reserved. Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
This code is free software; you can redistribute it and/or modify it This code is free software; you can redistribute it and/or modify it
...@@ -195,7 +195,7 @@ rmi://192.18.1.9 username 1 ...@@ -195,7 +195,7 @@ rmi://192.18.1.9 username 1
@see <a href="{@docRoot}/../technotes/guides/jmx/"> @see <a href="{@docRoot}/../technotes/guides/jmx/">
Java SE 6 Platform documentation on JMX technology</a>, Java Platform documentation on JMX technology</a>,
in particular the in particular the
<a href="{@docRoot}/../technotes/guides/jmx/JMX_1_4_specification.pdf"> <a href="{@docRoot}/../technotes/guides/jmx/JMX_1_4_specification.pdf">
JMX Specification, version 1.4</a> JMX Specification, version 1.4</a>
......
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
package javax.management.timer; package javax.management.timer;
import static com.sun.jmx.defaults.JmxProperties.TIMER_LOGGER; import static com.sun.jmx.defaults.JmxProperties.TIMER_LOGGER;
import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.Hashtable; import java.util.Hashtable;
import java.util.Iterator; import java.util.Iterator;
...@@ -1003,7 +1004,10 @@ public class Timer extends NotificationBroadcasterSupport ...@@ -1003,7 +1004,10 @@ public class Timer extends NotificationBroadcasterSupport
Integer notifID; Integer notifID;
Date date; Date date;
for (Object[] obj : timerTable.values()) { ArrayList<Object[]> values =
new ArrayList<Object[]>(timerTable.values());
for (Object[] obj : values) {
// Retrieve the timer notification and the date notification. // Retrieve the timer notification and the date notification.
// //
......
...@@ -33,9 +33,11 @@ package javax.swing; ...@@ -33,9 +33,11 @@ package javax.swing;
* <code>ListModel</code>. This disjoint behavior allows for the temporary * <code>ListModel</code>. This disjoint behavior allows for the temporary
* storage and retrieval of a selected item in the model. * storage and retrieval of a selected item in the model.
* *
* @param <E> the type of the elements of this model
*
* @author Arnaud Weber * @author Arnaud Weber
*/ */
public interface ComboBoxModel extends ListModel { public interface ComboBoxModel<E> extends ListModel<E> {
/** /**
* Set the selected item. The implementation of this method should notify * Set the selected item. The implementation of this method should notify
......
...@@ -24,39 +24,28 @@ ...@@ -24,39 +24,28 @@
*/ */
package javax.swing; package javax.swing;
import java.beans.*;
import java.util.*; import java.util.*;
import java.awt.*;
import java.awt.event.*;
import java.io.Serializable; import java.io.Serializable;
import java.io.ObjectOutputStream;
import java.io.ObjectInputStream;
import java.io.IOException;
import javax.swing.event.*;
import javax.swing.plaf.*;
import javax.swing.border.*;
import javax.accessibility.*;
/** /**
* The default model for combo boxes. * The default model for combo boxes.
* *
* @param <E> the type of the elements of this model
*
* @author Arnaud Weber * @author Arnaud Weber
* @author Tom Santos * @author Tom Santos
*/ */
public class DefaultComboBoxModel extends AbstractListModel implements MutableComboBoxModel, Serializable { public class DefaultComboBoxModel<E> extends AbstractListModel<E> implements MutableComboBoxModel<E>, Serializable {
Vector objects; Vector<E> objects;
Object selectedObject; Object selectedObject;
/** /**
* Constructs an empty DefaultComboBoxModel object. * Constructs an empty DefaultComboBoxModel object.
*/ */
public DefaultComboBoxModel() { public DefaultComboBoxModel() {
objects = new Vector(); objects = new Vector<E>();
} }
/** /**
...@@ -65,8 +54,8 @@ public class DefaultComboBoxModel extends AbstractListModel implements MutableCo ...@@ -65,8 +54,8 @@ public class DefaultComboBoxModel extends AbstractListModel implements MutableCo
* *
* @param items an array of Object objects * @param items an array of Object objects
*/ */
public DefaultComboBoxModel(final Object items[]) { public DefaultComboBoxModel(final E items[]) {
objects = new Vector(); objects = new Vector<E>();
objects.ensureCapacity( items.length ); objects.ensureCapacity( items.length );
int i,c; int i,c;
...@@ -84,7 +73,7 @@ public class DefaultComboBoxModel extends AbstractListModel implements MutableCo ...@@ -84,7 +73,7 @@ public class DefaultComboBoxModel extends AbstractListModel implements MutableCo
* *
* @param v a Vector object ... * @param v a Vector object ...
*/ */
public DefaultComboBoxModel(Vector<?> v) { public DefaultComboBoxModel(Vector<E> v) {
objects = v; objects = v;
if ( getSize() > 0 ) { if ( getSize() > 0 ) {
...@@ -117,7 +106,7 @@ public class DefaultComboBoxModel extends AbstractListModel implements MutableCo ...@@ -117,7 +106,7 @@ public class DefaultComboBoxModel extends AbstractListModel implements MutableCo
} }
// implements javax.swing.ListModel // implements javax.swing.ListModel
public Object getElementAt(int index) { public E getElementAt(int index) {
if ( index >= 0 && index < objects.size() ) if ( index >= 0 && index < objects.size() )
return objects.elementAt(index); return objects.elementAt(index);
else else
...@@ -136,7 +125,7 @@ public class DefaultComboBoxModel extends AbstractListModel implements MutableCo ...@@ -136,7 +125,7 @@ public class DefaultComboBoxModel extends AbstractListModel implements MutableCo
} }
// implements javax.swing.MutableComboBoxModel // implements javax.swing.MutableComboBoxModel
public void addElement(Object anObject) { public void addElement(E anObject) {
objects.addElement(anObject); objects.addElement(anObject);
fireIntervalAdded(this,objects.size()-1, objects.size()-1); fireIntervalAdded(this,objects.size()-1, objects.size()-1);
if ( objects.size() == 1 && selectedObject == null && anObject != null ) { if ( objects.size() == 1 && selectedObject == null && anObject != null ) {
...@@ -145,7 +134,7 @@ public class DefaultComboBoxModel extends AbstractListModel implements MutableCo ...@@ -145,7 +134,7 @@ public class DefaultComboBoxModel extends AbstractListModel implements MutableCo
} }
// implements javax.swing.MutableComboBoxModel // implements javax.swing.MutableComboBoxModel
public void insertElementAt(Object anObject,int index) { public void insertElementAt(E anObject,int index) {
objects.insertElementAt(anObject,index); objects.insertElementAt(anObject,index);
fireIntervalAdded(this, index, index); fireIntervalAdded(this, index, index);
} }
......
...@@ -69,6 +69,8 @@ import javax.accessibility.*; ...@@ -69,6 +69,8 @@ import javax.accessibility.*;
* @see ComboBoxModel * @see ComboBoxModel
* @see DefaultComboBoxModel * @see DefaultComboBoxModel
* *
* @param <E> the type of the elements of this combo box
*
* @beaninfo * @beaninfo
* attribute: isContainer false * attribute: isContainer false
* description: A combination of a text field and a drop-down list. * description: A combination of a text field and a drop-down list.
...@@ -76,7 +78,7 @@ import javax.accessibility.*; ...@@ -76,7 +78,7 @@ import javax.accessibility.*;
* @author Arnaud Weber * @author Arnaud Weber
* @author Mark Davidson * @author Mark Davidson
*/ */
public class JComboBox extends JComponent public class JComboBox<E> extends JComponent
implements ItemSelectable,ListDataListener,ActionListener, Accessible { implements ItemSelectable,ListDataListener,ActionListener, Accessible {
/** /**
* @see #getUIClassID * @see #getUIClassID
...@@ -91,7 +93,7 @@ implements ItemSelectable,ListDataListener,ActionListener, Accessible { ...@@ -91,7 +93,7 @@ implements ItemSelectable,ListDataListener,ActionListener, Accessible {
* @see #getModel * @see #getModel
* @see #setModel * @see #setModel
*/ */
protected ComboBoxModel dataModel; protected ComboBoxModel<E> dataModel;
/** /**
* This protected field is implementation specific. Do not access directly * This protected field is implementation specific. Do not access directly
* or override. Use the accessor methods instead. * or override. Use the accessor methods instead.
...@@ -99,7 +101,7 @@ implements ItemSelectable,ListDataListener,ActionListener, Accessible { ...@@ -99,7 +101,7 @@ implements ItemSelectable,ListDataListener,ActionListener, Accessible {
* @see #getRenderer * @see #getRenderer
* @see #setRenderer * @see #setRenderer
*/ */
protected ListCellRenderer renderer; protected ListCellRenderer<? super E> renderer;
/** /**
* This protected field is implementation specific. Do not access directly * This protected field is implementation specific. Do not access directly
* or override. Use the accessor methods instead. * or override. Use the accessor methods instead.
...@@ -156,7 +158,7 @@ implements ItemSelectable,ListDataListener,ActionListener, Accessible { ...@@ -156,7 +158,7 @@ implements ItemSelectable,ListDataListener,ActionListener, Accessible {
*/ */
protected Object selectedItemReminder = null; protected Object selectedItemReminder = null;
private Object prototypeDisplayValue; private E prototypeDisplayValue;
// Flag to ensure that infinite loops do not occur with ActionEvents. // Flag to ensure that infinite loops do not occur with ActionEvents.
private boolean firingActionEvent = false; private boolean firingActionEvent = false;
...@@ -175,7 +177,7 @@ implements ItemSelectable,ListDataListener,ActionListener, Accessible { ...@@ -175,7 +177,7 @@ implements ItemSelectable,ListDataListener,ActionListener, Accessible {
* displayed list of items * displayed list of items
* @see DefaultComboBoxModel * @see DefaultComboBoxModel
*/ */
public JComboBox(ComboBoxModel aModel) { public JComboBox(ComboBoxModel<E> aModel) {
super(); super();
setModel(aModel); setModel(aModel);
init(); init();
...@@ -189,9 +191,9 @@ implements ItemSelectable,ListDataListener,ActionListener, Accessible { ...@@ -189,9 +191,9 @@ implements ItemSelectable,ListDataListener,ActionListener, Accessible {
* @param items an array of objects to insert into the combo box * @param items an array of objects to insert into the combo box
* @see DefaultComboBoxModel * @see DefaultComboBoxModel
*/ */
public JComboBox(final Object items[]) { public JComboBox(E[] items) {
super(); super();
setModel(new DefaultComboBoxModel(items)); setModel(new DefaultComboBoxModel<E>(items));
init(); init();
} }
...@@ -203,9 +205,9 @@ implements ItemSelectable,ListDataListener,ActionListener, Accessible { ...@@ -203,9 +205,9 @@ implements ItemSelectable,ListDataListener,ActionListener, Accessible {
* @param items an array of vectors to insert into the combo box * @param items an array of vectors to insert into the combo box
* @see DefaultComboBoxModel * @see DefaultComboBoxModel
*/ */
public JComboBox(Vector<?> items) { public JComboBox(Vector<E> items) {
super(); super();
setModel(new DefaultComboBoxModel(items)); setModel(new DefaultComboBoxModel<E>(items));
init(); init();
} }
...@@ -219,7 +221,7 @@ implements ItemSelectable,ListDataListener,ActionListener, Accessible { ...@@ -219,7 +221,7 @@ implements ItemSelectable,ListDataListener,ActionListener, Accessible {
*/ */
public JComboBox() { public JComboBox() {
super(); super();
setModel(new DefaultComboBoxModel()); setModel(new DefaultComboBoxModel<E>());
init(); init();
} }
...@@ -263,7 +265,7 @@ implements ItemSelectable,ListDataListener,ActionListener, Accessible { ...@@ -263,7 +265,7 @@ implements ItemSelectable,ListDataListener,ActionListener, Accessible {
public void updateUI() { public void updateUI() {
setUI((ComboBoxUI)UIManager.getUI(this)); setUI((ComboBoxUI)UIManager.getUI(this));
ListCellRenderer renderer = getRenderer(); ListCellRenderer<? super E> renderer = getRenderer();
if (renderer instanceof Component) { if (renderer instanceof Component) {
SwingUtilities.updateComponentTreeUI((Component)renderer); SwingUtilities.updateComponentTreeUI((Component)renderer);
} }
...@@ -302,8 +304,8 @@ implements ItemSelectable,ListDataListener,ActionListener, Accessible { ...@@ -302,8 +304,8 @@ implements ItemSelectable,ListDataListener,ActionListener, Accessible {
* bound: true * bound: true
* description: Model that the combo box uses to get data to display. * description: Model that the combo box uses to get data to display.
*/ */
public void setModel(ComboBoxModel aModel) { public void setModel(ComboBoxModel<E> aModel) {
ComboBoxModel oldModel = dataModel; ComboBoxModel<E> oldModel = dataModel;
if (oldModel != null) { if (oldModel != null) {
oldModel.removeListDataListener(this); oldModel.removeListDataListener(this);
} }
...@@ -322,7 +324,7 @@ implements ItemSelectable,ListDataListener,ActionListener, Accessible { ...@@ -322,7 +324,7 @@ implements ItemSelectable,ListDataListener,ActionListener, Accessible {
* @return the <code>ComboBoxModel</code> that provides the displayed * @return the <code>ComboBoxModel</code> that provides the displayed
* list of items * list of items
*/ */
public ComboBoxModel getModel() { public ComboBoxModel<E> getModel() {
return dataModel; return dataModel;
} }
...@@ -461,8 +463,8 @@ implements ItemSelectable,ListDataListener,ActionListener, Accessible { ...@@ -461,8 +463,8 @@ implements ItemSelectable,ListDataListener,ActionListener, Accessible {
* expert: true * expert: true
* description: The renderer that paints the item selected in the list. * description: The renderer that paints the item selected in the list.
*/ */
public void setRenderer(ListCellRenderer aRenderer) { public void setRenderer(ListCellRenderer<? super E> aRenderer) {
ListCellRenderer oldRenderer = renderer; ListCellRenderer<? super E> oldRenderer = renderer;
renderer = aRenderer; renderer = aRenderer;
firePropertyChange( "renderer", oldRenderer, renderer ); firePropertyChange( "renderer", oldRenderer, renderer );
invalidate(); invalidate();
...@@ -475,7 +477,7 @@ implements ItemSelectable,ListDataListener,ActionListener, Accessible { ...@@ -475,7 +477,7 @@ implements ItemSelectable,ListDataListener,ActionListener, Accessible {
* @return the <code>ListCellRenderer</code> that displays * @return the <code>ListCellRenderer</code> that displays
* the selected item. * the selected item.
*/ */
public ListCellRenderer getRenderer() { public ListCellRenderer<? super E> getRenderer() {
return renderer; return renderer;
} }
...@@ -558,7 +560,7 @@ implements ItemSelectable,ListDataListener,ActionListener, Accessible { ...@@ -558,7 +560,7 @@ implements ItemSelectable,ListDataListener,ActionListener, Accessible {
// will be rejected. // will be rejected.
boolean found = false; boolean found = false;
for (int i = 0; i < dataModel.getSize(); i++) { for (int i = 0; i < dataModel.getSize(); i++) {
Object element = dataModel.getElementAt(i); E element = dataModel.getElementAt(i);
if (anObject.equals(element)) { if (anObject.equals(element)) {
found = true; found = true;
objectToSelect = element; objectToSelect = element;
...@@ -640,7 +642,7 @@ implements ItemSelectable,ListDataListener,ActionListener, Accessible { ...@@ -640,7 +642,7 @@ implements ItemSelectable,ListDataListener,ActionListener, Accessible {
public int getSelectedIndex() { public int getSelectedIndex() {
Object sObject = dataModel.getSelectedItem(); Object sObject = dataModel.getSelectedItem();
int i,c; int i,c;
Object obj; E obj;
for ( i=0,c=dataModel.getSize();i<c;i++ ) { for ( i=0,c=dataModel.getSize();i<c;i++ ) {
obj = dataModel.getElementAt(i); obj = dataModel.getElementAt(i);
...@@ -658,7 +660,7 @@ implements ItemSelectable,ListDataListener,ActionListener, Accessible { ...@@ -658,7 +660,7 @@ implements ItemSelectable,ListDataListener,ActionListener, Accessible {
* @see #setPrototypeDisplayValue * @see #setPrototypeDisplayValue
* @since 1.4 * @since 1.4
*/ */
public Object getPrototypeDisplayValue() { public E getPrototypeDisplayValue() {
return prototypeDisplayValue; return prototypeDisplayValue;
} }
...@@ -683,7 +685,7 @@ implements ItemSelectable,ListDataListener,ActionListener, Accessible { ...@@ -683,7 +685,7 @@ implements ItemSelectable,ListDataListener,ActionListener, Accessible {
* attribute: visualUpdate true * attribute: visualUpdate true
* description: The display prototype value, used to compute display width and height. * description: The display prototype value, used to compute display width and height.
*/ */
public void setPrototypeDisplayValue(Object prototypeDisplayValue) { public void setPrototypeDisplayValue(E prototypeDisplayValue) {
Object oldValue = this.prototypeDisplayValue; Object oldValue = this.prototypeDisplayValue;
this.prototypeDisplayValue = prototypeDisplayValue; this.prototypeDisplayValue = prototypeDisplayValue;
firePropertyChange("prototypeDisplayValue", oldValue, prototypeDisplayValue); firePropertyChange("prototypeDisplayValue", oldValue, prototypeDisplayValue);
...@@ -708,12 +710,12 @@ implements ItemSelectable,ListDataListener,ActionListener, Accessible { ...@@ -708,12 +710,12 @@ implements ItemSelectable,ListDataListener,ActionListener, Accessible {
* } * }
* </pre> * </pre>
* *
* @param anObject the Object to add to the list * @param item the item to add to the list
* @see MutableComboBoxModel * @see MutableComboBoxModel
*/ */
public void addItem(Object anObject) { public void addItem(E item) {
checkMutableComboBoxModel(); checkMutableComboBoxModel();
((MutableComboBoxModel)dataModel).addElement(anObject); ((MutableComboBoxModel<E>)dataModel).addElement(item);
} }
/** /**
...@@ -721,14 +723,14 @@ implements ItemSelectable,ListDataListener,ActionListener, Accessible { ...@@ -721,14 +723,14 @@ implements ItemSelectable,ListDataListener,ActionListener, Accessible {
* This method works only if the <code>JComboBox</code> uses a * This method works only if the <code>JComboBox</code> uses a
* mutable data model. * mutable data model.
* *
* @param anObject the <code>Object</code> to add to the list * @param item the item to add to the list
* @param index an integer specifying the position at which * @param index an integer specifying the position at which
* to add the item * to add the item
* @see MutableComboBoxModel * @see MutableComboBoxModel
*/ */
public void insertItemAt(Object anObject, int index) { public void insertItemAt(E item, int index) {
checkMutableComboBoxModel(); checkMutableComboBoxModel();
((MutableComboBoxModel)dataModel).insertElementAt(anObject,index); ((MutableComboBoxModel<E>)dataModel).insertElementAt(item,index);
} }
/** /**
...@@ -756,7 +758,7 @@ implements ItemSelectable,ListDataListener,ActionListener, Accessible { ...@@ -756,7 +758,7 @@ implements ItemSelectable,ListDataListener,ActionListener, Accessible {
*/ */
public void removeItemAt(int anIndex) { public void removeItemAt(int anIndex) {
checkMutableComboBoxModel(); checkMutableComboBoxModel();
((MutableComboBoxModel)dataModel).removeElementAt( anIndex ); ((MutableComboBoxModel<E>)dataModel).removeElementAt( anIndex );
} }
/** /**
...@@ -764,7 +766,7 @@ implements ItemSelectable,ListDataListener,ActionListener, Accessible { ...@@ -764,7 +766,7 @@ implements ItemSelectable,ListDataListener,ActionListener, Accessible {
*/ */
public void removeAllItems() { public void removeAllItems() {
checkMutableComboBoxModel(); checkMutableComboBoxModel();
MutableComboBoxModel model = (MutableComboBoxModel)dataModel; MutableComboBoxModel<E> model = (MutableComboBoxModel<E>)dataModel;
int size = model.getSize(); int size = model.getSize();
if ( model instanceof DefaultComboBoxModel ) { if ( model instanceof DefaultComboBoxModel ) {
...@@ -772,7 +774,7 @@ implements ItemSelectable,ListDataListener,ActionListener, Accessible { ...@@ -772,7 +774,7 @@ implements ItemSelectable,ListDataListener,ActionListener, Accessible {
} }
else { else {
for ( int i = 0; i < size; ++i ) { for ( int i = 0; i < size; ++i ) {
Object element = model.getElementAt( 0 ); E element = model.getElementAt( 0 );
model.removeElement( element ); model.removeElement( element );
} }
} }
...@@ -1188,11 +1190,11 @@ implements ItemSelectable,ListDataListener,ActionListener, Accessible { ...@@ -1188,11 +1190,11 @@ implements ItemSelectable,ListDataListener,ActionListener, Accessible {
private static class ComboBoxActionPropertyChangeListener private static class ComboBoxActionPropertyChangeListener
extends ActionPropertyChangeListener<JComboBox> { extends ActionPropertyChangeListener<JComboBox<?>> {
ComboBoxActionPropertyChangeListener(JComboBox b, Action a) { ComboBoxActionPropertyChangeListener(JComboBox<?> b, Action a) {
super(b, a); super(b, a);
} }
protected void actionPropertyChanged(JComboBox cb, protected void actionPropertyChanged(JComboBox<?> cb,
Action action, Action action,
PropertyChangeEvent e) { PropertyChangeEvent e) {
if (AbstractAction.shouldReconfigure(e)) { if (AbstractAction.shouldReconfigure(e)) {
...@@ -1454,10 +1456,10 @@ implements ItemSelectable,ListDataListener,ActionListener, Accessible { ...@@ -1454,10 +1456,10 @@ implements ItemSelectable,ListDataListener,ActionListener, Accessible {
* *
* @param index an integer indicating the list position, where the first * @param index an integer indicating the list position, where the first
* item starts at zero * item starts at zero
* @return the <code>Object</code> at that list position; or * @return the item at that list position; or
* <code>null</code> if out of range * <code>null</code> if out of range
*/ */
public Object getItemAt(int index) { public E getItemAt(int index) {
return dataModel.getElementAt(index); return dataModel.getElementAt(index);
} }
......
...@@ -27,19 +27,21 @@ package javax.swing; ...@@ -27,19 +27,21 @@ package javax.swing;
/** /**
* A mutable version of <code>ComboBoxModel</code>. * A mutable version of <code>ComboBoxModel</code>.
* *
* @param <E> the type of the elements of this model
*
* @author Tom Santos * @author Tom Santos
*/ */
public interface MutableComboBoxModel extends ComboBoxModel { public interface MutableComboBoxModel<E> extends ComboBoxModel<E> {
/** /**
* Adds an item at the end of the model. The implementation of this method * Adds an item at the end of the model. The implementation of this method
* should notify all registered <code>ListDataListener</code>s that the * should notify all registered <code>ListDataListener</code>s that the
* item has been added. * item has been added.
* *
* @param obj the <code>Object</code> to be added * @param item the item to be added
*/ */
public void addElement( Object obj ); public void addElement( E item );
/** /**
* Removes an item from the model. The implementation of this method should * Removes an item from the model. The implementation of this method should
...@@ -55,17 +57,17 @@ public interface MutableComboBoxModel extends ComboBoxModel { ...@@ -55,17 +57,17 @@ public interface MutableComboBoxModel extends ComboBoxModel {
* should notify all registered <code>ListDataListener</code>s that the * should notify all registered <code>ListDataListener</code>s that the
* item has been added. * item has been added.
* *
* @param obj the <code>Object</code> to be added * @param item the item to be added
* @param index location to add the object * @param index location to add the object
*/ */
public void insertElementAt( Object obj, int index ); public void insertElementAt( E item, int index );
/** /**
* Removes an item at a specific index. The implementation of this method * Removes an item at a specific index. The implementation of this method
* should notify all registered <code>ListDataListener</code>s that the * should notify all registered <code>ListDataListener</code>s that the
* item has been removed. * item has been removed.
* *
* @param index location of object to be removed * @param index location of the item to be removed
*/ */
public void removeElementAt( int index ); public void removeElementAt( int index );
} }
...@@ -40,7 +40,7 @@ import sun.awt.shell.ShellFolder; ...@@ -40,7 +40,7 @@ import sun.awt.shell.ShellFolder;
* *
* @author Jeff Dinkins * @author Jeff Dinkins
*/ */
public class BasicDirectoryModel extends AbstractListModel implements PropertyChangeListener { public class BasicDirectoryModel extends AbstractListModel<Object> implements PropertyChangeListener {
private JFileChooser filechooser = null; private JFileChooser filechooser = null;
// PENDING(jeff) pick the size more sensibly // PENDING(jeff) pick the size more sensibly
......
...@@ -906,7 +906,7 @@ public class MetalFileChooserUI extends BasicFileChooserUI { ...@@ -906,7 +906,7 @@ public class MetalFileChooserUI extends BasicFileChooserUI {
/** /**
* Data model for a type-face selection combo-box. * Data model for a type-face selection combo-box.
*/ */
protected class DirectoryComboBoxModel extends AbstractListModel implements ComboBoxModel { protected class DirectoryComboBoxModel extends AbstractListModel<Object> implements ComboBoxModel<Object> {
Vector<File> directories = new Vector<File>(); Vector<File> directories = new Vector<File>();
int[] depths = null; int[] depths = null;
File selectedDirectory = null; File selectedDirectory = null;
...@@ -1063,7 +1063,7 @@ public class MetalFileChooserUI extends BasicFileChooserUI { ...@@ -1063,7 +1063,7 @@ public class MetalFileChooserUI extends BasicFileChooserUI {
/** /**
* Data model for a type-face selection combo-box. * Data model for a type-face selection combo-box.
*/ */
protected class FilterComboBoxModel extends AbstractListModel implements ComboBoxModel, PropertyChangeListener { protected class FilterComboBoxModel extends AbstractListModel<Object> implements ComboBoxModel<Object>, PropertyChangeListener {
protected FileFilter[] filters; protected FileFilter[] filters;
protected FilterComboBoxModel() { protected FilterComboBoxModel() {
super(); super();
......
...@@ -488,6 +488,18 @@ public class SynthTabbedPaneUI extends BasicTabbedPaneUI ...@@ -488,6 +488,18 @@ public class SynthTabbedPaneUI extends BasicTabbedPaneUI
paintContentBorder(tabContentContext, g, tabPlacement, selectedIndex); paintContentBorder(tabContentContext, g, tabPlacement, selectedIndex);
} }
protected void paintTabArea(Graphics g, int tabPlacement,
int selectedIndex) {
// This can be invoked from ScrollabeTabPanel
Insets insets = tabPane.getInsets();
int x = insets.left;
int y = insets.top;
int width = tabPane.getWidth() - insets.left - insets.right;
int height = tabPane.getHeight() - insets.top - insets.bottom;
paintTabArea(tabAreaContext, g, tabPlacement, selectedIndex,
new Rectangle(x, y, width, height));
}
private void paintTabArea(SynthContext ss, Graphics g, private void paintTabArea(SynthContext ss, Graphics g,
int tabPlacement, int selectedIndex, int tabPlacement, int selectedIndex,
......
...@@ -26,7 +26,7 @@ package sun.awt; ...@@ -26,7 +26,7 @@ package sun.awt;
import java.nio.charset.Charset; import java.nio.charset.Charset;
import java.nio.charset.CharsetEncoder; import java.nio.charset.CharsetEncoder;
import java.nio.charset.StandardCharset; import java.nio.charset.StandardCharsets;
import sun.nio.cs.HistoricallyNamedCharset; import sun.nio.cs.HistoricallyNamedCharset;
public class FontDescriptor implements Cloneable { public class FontDescriptor implements Cloneable {
...@@ -105,8 +105,8 @@ public class FontDescriptor implements Cloneable { ...@@ -105,8 +105,8 @@ public class FontDescriptor implements Cloneable {
if (useUnicode && unicodeEncoder == null) { if (useUnicode && unicodeEncoder == null) {
try { try {
this.unicodeEncoder = isLE? this.unicodeEncoder = isLE?
StandardCharset.UTF_16LE.newEncoder(): StandardCharsets.UTF_16LE.newEncoder():
StandardCharset.UTF_16BE.newEncoder(); StandardCharsets.UTF_16BE.newEncoder();
} catch (IllegalArgumentException x) {} } catch (IllegalArgumentException x) {}
} }
return useUnicode; return useUnicode;
......
...@@ -102,15 +102,20 @@ class OGLRenderer extends BufferedRenderPipe { ...@@ -102,15 +102,20 @@ class OGLRenderer extends BufferedRenderPipe {
final ParallelogramPipe realpipe = oglr.getAAParallelogramPipe(); final ParallelogramPipe realpipe = oglr.getAAParallelogramPipe();
return new ParallelogramPipe() { return new ParallelogramPipe() {
public void fillParallelogram(SunGraphics2D sg2d, public void fillParallelogram(SunGraphics2D sg2d,
double ux1, double uy1,
double ux2, double uy2,
double x, double y, double x, double y,
double dx1, double dy1, double dx1, double dy1,
double dx2, double dy2) double dx2, double dy2)
{ {
GraphicsPrimitive.tracePrimitive("OGLFillAAParallelogram"); GraphicsPrimitive.tracePrimitive("OGLFillAAParallelogram");
realpipe.fillParallelogram(sg2d, realpipe.fillParallelogram(sg2d,
ux1, uy1, ux2, uy2,
x, y, dx1, dy1, dx2, dy2); x, y, dx1, dy1, dx2, dy2);
} }
public void drawParallelogram(SunGraphics2D sg2d, public void drawParallelogram(SunGraphics2D sg2d,
double ux1, double uy1,
double ux2, double uy2,
double x, double y, double x, double y,
double dx1, double dy1, double dx1, double dy1,
double dx2, double dy2, double dx2, double dy2,
...@@ -118,6 +123,7 @@ class OGLRenderer extends BufferedRenderPipe { ...@@ -118,6 +123,7 @@ class OGLRenderer extends BufferedRenderPipe {
{ {
GraphicsPrimitive.tracePrimitive("OGLDrawAAParallelogram"); GraphicsPrimitive.tracePrimitive("OGLDrawAAParallelogram");
realpipe.drawParallelogram(sg2d, realpipe.drawParallelogram(sg2d,
ux1, uy1, ux2, uy2,
x, y, dx1, dy1, dx2, dy2, x, y, dx1, dy1, dx2, dy2,
lw1, lw2); lw1, lw2);
} }
...@@ -166,21 +172,29 @@ class OGLRenderer extends BufferedRenderPipe { ...@@ -166,21 +172,29 @@ class OGLRenderer extends BufferedRenderPipe {
oglr.fillSpans(sg2d, si, transx, transy); oglr.fillSpans(sg2d, si, transx, transy);
} }
public void fillParallelogram(SunGraphics2D sg2d, public void fillParallelogram(SunGraphics2D sg2d,
double ux1, double uy1,
double ux2, double uy2,
double x, double y, double x, double y,
double dx1, double dy1, double dx1, double dy1,
double dx2, double dy2) double dx2, double dy2)
{ {
GraphicsPrimitive.tracePrimitive("OGLFillParallelogram"); GraphicsPrimitive.tracePrimitive("OGLFillParallelogram");
oglr.fillParallelogram(sg2d, x, y, dx1, dy1, dx2, dy2); oglr.fillParallelogram(sg2d,
ux1, uy1, ux2, uy2,
x, y, dx1, dy1, dx2, dy2);
} }
public void drawParallelogram(SunGraphics2D sg2d, public void drawParallelogram(SunGraphics2D sg2d,
double ux1, double uy1,
double ux2, double uy2,
double x, double y, double x, double y,
double dx1, double dy1, double dx1, double dy1,
double dx2, double dy2, double dx2, double dy2,
double lw1, double lw2) double lw1, double lw2)
{ {
GraphicsPrimitive.tracePrimitive("OGLDrawParallelogram"); GraphicsPrimitive.tracePrimitive("OGLDrawParallelogram");
oglr.drawParallelogram(sg2d, x, y, dx1, dy1, dx2, dy2, lw1, lw2); oglr.drawParallelogram(sg2d,
ux1, uy1, ux2, uy2,
x, y, dx1, dy1, dx2, dy2, lw1, lw2);
} }
public void copyArea(SunGraphics2D sg2d, public void copyArea(SunGraphics2D sg2d,
int x, int y, int w, int h, int dx, int dy) int x, int y, int w, int h, int dx, int dy)
......
...@@ -68,21 +68,23 @@ public class AAShapePipe ...@@ -68,21 +68,23 @@ public class AAShapePipe
renderPath(sg, s, null); renderPath(sg, s, null);
} }
private static Rectangle2D computeBBox(double x, double y, private static Rectangle2D computeBBox(double ux1, double uy1,
double dx1, double dy1, double ux2, double uy2)
double dx2, double dy2)
{ {
double lox, loy, hix, hiy; if ((ux2 -= ux1) < 0) {
lox = hix = x; ux1 += ux2;
loy = hiy = y; ux2 = -ux2;
if (dx1 < 0) { lox += dx1; } else { hix += dx1; } }
if (dy1 < 0) { loy += dy1; } else { hiy += dy1; } if ((uy2 -= uy1) < 0) {
if (dx2 < 0) { lox += dx2; } else { hix += dx2; } uy1 += uy2;
if (dy2 < 0) { loy += dy2; } else { hiy += dy2; } uy2 = -uy2;
return new Rectangle2D.Double(lox, loy, hix-lox, hiy-loy); }
return new Rectangle2D.Double(ux1, uy1, ux2, uy2);
} }
public void fillParallelogram(SunGraphics2D sg, public void fillParallelogram(SunGraphics2D sg,
double ux1, double uy1,
double ux2, double uy2,
double x, double y, double x, double y,
double dx1, double dy1, double dx1, double dy1,
double dx2, double dy2) double dx2, double dy2)
...@@ -97,10 +99,12 @@ public class AAShapePipe ...@@ -97,10 +99,12 @@ public class AAShapePipe
return; return;
} }
renderTiles(sg, computeBBox(x, y, dx1, dy1, dx2, dy2), aatg, abox); renderTiles(sg, computeBBox(ux1, uy1, ux2, uy2), aatg, abox);
} }
public void drawParallelogram(SunGraphics2D sg, public void drawParallelogram(SunGraphics2D sg,
double ux1, double uy1,
double ux2, double uy2,
double x, double y, double x, double y,
double dx1, double dy1, double dx1, double dy1,
double dx2, double dy2, double dx2, double dy2,
...@@ -118,7 +122,7 @@ public class AAShapePipe ...@@ -118,7 +122,7 @@ public class AAShapePipe
// Note that bbox is of the original shape, not the wide path. // Note that bbox is of the original shape, not the wide path.
// This is appropriate for handing to Paint methods... // This is appropriate for handing to Paint methods...
renderTiles(sg, computeBBox(x, y, dx1, dy1, dx2, dy2), aatg, abox); renderTiles(sg, computeBBox(ux1, uy1, ux2, uy2), aatg, abox);
} }
private static byte[] theTile; private static byte[] theTile;
......
...@@ -66,6 +66,8 @@ public class AlphaColorPipe implements CompositePipe, ParallelogramPipe { ...@@ -66,6 +66,8 @@ public class AlphaColorPipe implements CompositePipe, ParallelogramPipe {
} }
public void fillParallelogram(SunGraphics2D sg, public void fillParallelogram(SunGraphics2D sg,
double ux1, double uy1,
double ux2, double uy2,
double x, double y, double x, double y,
double dx1, double dy1, double dx1, double dy1,
double dx2, double dy2) double dx2, double dy2)
...@@ -75,6 +77,8 @@ public class AlphaColorPipe implements CompositePipe, ParallelogramPipe { ...@@ -75,6 +77,8 @@ public class AlphaColorPipe implements CompositePipe, ParallelogramPipe {
} }
public void drawParallelogram(SunGraphics2D sg, public void drawParallelogram(SunGraphics2D sg,
double ux1, double uy1,
double ux2, double uy2,
double x, double y, double x, double y,
double dx1, double dy1, double dx1, double dy1,
double dx2, double dy2, double dx2, double dy2,
......
...@@ -408,6 +408,8 @@ public abstract class BufferedRenderPipe ...@@ -408,6 +408,8 @@ public abstract class BufferedRenderPipe
} }
public void fillParallelogram(SunGraphics2D sg2d, public void fillParallelogram(SunGraphics2D sg2d,
double ux1, double uy1,
double ux2, double uy2,
double x, double y, double x, double y,
double dx1, double dy1, double dx1, double dy1,
double dx2, double dy2) double dx2, double dy2)
...@@ -429,6 +431,8 @@ public abstract class BufferedRenderPipe ...@@ -429,6 +431,8 @@ public abstract class BufferedRenderPipe
} }
public void drawParallelogram(SunGraphics2D sg2d, public void drawParallelogram(SunGraphics2D sg2d,
double ux1, double uy1,
double ux2, double uy2,
double x, double y, double x, double y,
double dx1, double dy1, double dx1, double dy1,
double dx2, double dy2, double dx2, double dy2,
...@@ -454,6 +458,8 @@ public abstract class BufferedRenderPipe ...@@ -454,6 +458,8 @@ public abstract class BufferedRenderPipe
private class AAParallelogramPipe implements ParallelogramPipe { private class AAParallelogramPipe implements ParallelogramPipe {
public void fillParallelogram(SunGraphics2D sg2d, public void fillParallelogram(SunGraphics2D sg2d,
double ux1, double uy1,
double ux2, double uy2,
double x, double y, double x, double y,
double dx1, double dy1, double dx1, double dy1,
double dx2, double dy2) double dx2, double dy2)
...@@ -475,6 +481,8 @@ public abstract class BufferedRenderPipe ...@@ -475,6 +481,8 @@ public abstract class BufferedRenderPipe
} }
public void drawParallelogram(SunGraphics2D sg2d, public void drawParallelogram(SunGraphics2D sg2d,
double ux1, double uy1,
double ux2, double uy2,
double x, double y, double x, double y,
double dx1, double dy1, double dx1, double dy1,
double dx2, double dy2, double dx2, double dy2,
......
...@@ -352,6 +352,8 @@ public class LoopPipe ...@@ -352,6 +352,8 @@ public class LoopPipe
} }
public void fillParallelogram(SunGraphics2D sg2d, public void fillParallelogram(SunGraphics2D sg2d,
double ux1, double uy1,
double ux2, double uy2,
double x, double y, double x, double y,
double dx1, double dy1, double dx1, double dy1,
double dx2, double dy2) double dx2, double dy2)
...@@ -362,6 +364,8 @@ public class LoopPipe ...@@ -362,6 +364,8 @@ public class LoopPipe
} }
public void drawParallelogram(SunGraphics2D sg2d, public void drawParallelogram(SunGraphics2D sg2d,
double ux1, double uy1,
double ux2, double uy2,
double x, double y, double x, double y,
double dx1, double dy1, double dx1, double dy1,
double dx2, double dy2, double dx2, double dy2,
......
/* /*
* Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2008, 2011 Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -40,9 +40,17 @@ import sun.java2d.SunGraphics2D; ...@@ -40,9 +40,17 @@ import sun.java2d.SunGraphics2D;
* => (x+dx2, y+dy2) * => (x+dx2, y+dy2)
* => origin * => origin
* </pre> * </pre>
* The four u[xy][12] parameters are the unsorted extreme coordinates
* of the primitive in user space. They may have been generated by a
* line or a rectangle so they could have u[xy]2 < u[xy]1 in some cases.
* They should be sorted before calculating the bounds of the original
* primitive (such as for calculating the user space bounds for the
* Paint.createContext() method).
*/ */
public interface ParallelogramPipe { public interface ParallelogramPipe {
public void fillParallelogram(SunGraphics2D sg, public void fillParallelogram(SunGraphics2D sg,
double ux1, double uy1,
double ux2, double uy2,
double x, double y, double x, double y,
double dx1, double dy1, double dx1, double dy1,
double dx2, double dy2); double dx2, double dy2);
...@@ -59,6 +67,8 @@ public interface ParallelogramPipe { ...@@ -59,6 +67,8 @@ public interface ParallelogramPipe {
* difference between the outer and inner parallelograms. * difference between the outer and inner parallelograms.
*/ */
public void drawParallelogram(SunGraphics2D sg, public void drawParallelogram(SunGraphics2D sg,
double ux1, double uy1,
double ux2, double uy2,
double x, double y, double x, double y,
double dx1, double dy1, double dx1, double dy1,
double dx2, double dy2, double dx2, double dy2,
......
...@@ -175,8 +175,8 @@ public class PixelToParallelogramConverter extends PixelToShapeConverter ...@@ -175,8 +175,8 @@ public class PixelToParallelogramConverter extends PixelToShapeConverter
} }
public boolean drawGeneralLine(SunGraphics2D sg2d, public boolean drawGeneralLine(SunGraphics2D sg2d,
double x1, double y1, double ux1, double uy1,
double x2, double y2) double ux2, double uy2)
{ {
if (sg2d.strokeState == SunGraphics2D.STROKE_CUSTOM || if (sg2d.strokeState == SunGraphics2D.STROKE_CUSTOM ||
sg2d.strokeState == SunGraphics2D.STROKE_THINDASHED) sg2d.strokeState == SunGraphics2D.STROKE_THINDASHED)
...@@ -194,13 +194,14 @@ public class PixelToParallelogramConverter extends PixelToShapeConverter ...@@ -194,13 +194,14 @@ public class PixelToParallelogramConverter extends PixelToShapeConverter
double lw = bs.getLineWidth(); double lw = bs.getLineWidth();
// Save the original dx, dy in case we need it to transform // Save the original dx, dy in case we need it to transform
// the linewidth as a perpendicular vector below // the linewidth as a perpendicular vector below
double dx = x2 - x1; double dx = ux2 - ux1;
double dy = y2 - y1; double dy = uy2 - uy1;
double x1, y1, x2, y2;
switch (sg2d.transformState) { switch (sg2d.transformState) {
case SunGraphics2D.TRANSFORM_GENERIC: case SunGraphics2D.TRANSFORM_GENERIC:
case SunGraphics2D.TRANSFORM_TRANSLATESCALE: case SunGraphics2D.TRANSFORM_TRANSLATESCALE:
{ {
double coords[] = {x1, y1, x2, y2}; double coords[] = {ux1, uy1, ux2, uy2};
sg2d.transform.transform(coords, 0, coords, 0, 2); sg2d.transform.transform(coords, 0, coords, 0, 2);
x1 = coords[0]; x1 = coords[0];
y1 = coords[1]; y1 = coords[1];
...@@ -213,13 +214,17 @@ public class PixelToParallelogramConverter extends PixelToShapeConverter ...@@ -213,13 +214,17 @@ public class PixelToParallelogramConverter extends PixelToShapeConverter
{ {
double tx = sg2d.transform.getTranslateX(); double tx = sg2d.transform.getTranslateX();
double ty = sg2d.transform.getTranslateY(); double ty = sg2d.transform.getTranslateY();
x1 += tx; x1 = ux1 + tx;
y1 += ty; y1 = uy1 + ty;
x2 += tx; x2 = ux2 + tx;
y2 += ty; y2 = uy2 + ty;
} }
break; break;
case SunGraphics2D.TRANSFORM_ISIDENT: case SunGraphics2D.TRANSFORM_ISIDENT:
x1 = ux1;
y1 = uy1;
x2 = ux2;
y2 = uy2;
break; break;
default: default:
throw new InternalError("unknown TRANSFORM state..."); throw new InternalError("unknown TRANSFORM state...");
...@@ -279,7 +284,8 @@ public class PixelToParallelogramConverter extends PixelToShapeConverter ...@@ -279,7 +284,8 @@ public class PixelToParallelogramConverter extends PixelToShapeConverter
dx += udx; dx += udx;
dy += udy; dy += udy;
} }
outrenderer.fillParallelogram(sg2d, px, py, -udy, udx, dx, dy); outrenderer.fillParallelogram(sg2d, ux1, uy1, ux2, uy2,
px, py, -udy, udx, dx, dy);
return true; return true;
} }
...@@ -313,7 +319,8 @@ public class PixelToParallelogramConverter extends PixelToShapeConverter ...@@ -313,7 +319,8 @@ public class PixelToParallelogramConverter extends PixelToShapeConverter
px = newx; px = newx;
py = newy; py = newy;
} }
outrenderer.fillParallelogram(sg2d, px, py, dx1, dy1, dx2, dy2); outrenderer.fillParallelogram(sg2d, rx, ry, rx+rw, ry+rh,
px, py, dx1, dy1, dx2, dy2);
} }
public void drawRectangle(SunGraphics2D sg2d, public void drawRectangle(SunGraphics2D sg2d,
...@@ -360,10 +367,12 @@ public class PixelToParallelogramConverter extends PixelToShapeConverter ...@@ -360,10 +367,12 @@ public class PixelToParallelogramConverter extends PixelToShapeConverter
// entire hole in the middle of the parallelogram // entire hole in the middle of the parallelogram
// so we can just fill the outer parallelogram. // so we can just fill the outer parallelogram.
fillOuterParallelogram(sg2d, fillOuterParallelogram(sg2d,
rx, ry, rx+rw, ry+rh,
px, py, dx1, dy1, dx2, dy2, px, py, dx1, dy1, dx2, dy2,
len1, len2, lw1, lw2); len1, len2, lw1, lw2);
} else { } else {
outrenderer.drawParallelogram(sg2d, outrenderer.drawParallelogram(sg2d,
rx, ry, rx+rw, ry+rh,
px, py, dx1, dy1, dx2, dy2, px, py, dx1, dy1, dx2, dy2,
lw1 / len1, lw2 / len2); lw1 / len1, lw2 / len2);
} }
...@@ -377,6 +386,8 @@ public class PixelToParallelogramConverter extends PixelToShapeConverter ...@@ -377,6 +386,8 @@ public class PixelToParallelogramConverter extends PixelToShapeConverter
* and issues a single fillParallelogram request to fill it. * and issues a single fillParallelogram request to fill it.
*/ */
public void fillOuterParallelogram(SunGraphics2D sg2d, public void fillOuterParallelogram(SunGraphics2D sg2d,
double ux1, double uy1,
double ux2, double uy2,
double px, double py, double px, double py,
double dx1, double dy1, double dx1, double dy1,
double dx2, double dy2, double dx2, double dy2,
...@@ -412,6 +423,7 @@ public class PixelToParallelogramConverter extends PixelToShapeConverter ...@@ -412,6 +423,7 @@ public class PixelToParallelogramConverter extends PixelToShapeConverter
dx2 += udx2; dx2 += udx2;
dy2 += udy2; dy2 += udy2;
outrenderer.fillParallelogram(sg2d, px, py, dx1, dy1, dx2, dy2); outrenderer.fillParallelogram(sg2d, ux1, uy1, ux2, uy2,
px, py, dx1, dy1, dx2, dy2);
} }
} }
/*
* Copyright (c) 2011, 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. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package sun.management;
import com.sun.management.GarbageCollectionNotificationInfo;
import com.sun.management.GcInfo;
import java.lang.reflect.Method;
import javax.management.openmbean.CompositeData;
import javax.management.openmbean.CompositeType;
import javax.management.openmbean.CompositeDataSupport;
import javax.management.openmbean.OpenDataException;
import javax.management.openmbean.OpenType;
import javax.management.openmbean.SimpleType;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.lang.reflect.Field;
import java.util.HashMap;
/**
* A CompositeData for GarbageCollectionNotificationInfo for the local management support.
* This class avoids the performance penalty paid to the
* construction of a CompositeData use in the local case.
*/
public class GarbageCollectionNotifInfoCompositeData extends LazyCompositeData {
private final GarbageCollectionNotificationInfo gcNotifInfo;
public GarbageCollectionNotifInfoCompositeData(GarbageCollectionNotificationInfo info) {
this.gcNotifInfo = info;
}
public GarbageCollectionNotificationInfo getGarbageCollectionNotifInfo() {
return gcNotifInfo;
}
public static CompositeData toCompositeData(GarbageCollectionNotificationInfo info) {
GarbageCollectionNotifInfoCompositeData gcnicd =
new GarbageCollectionNotifInfoCompositeData(info);
return gcnicd.getCompositeData();
}
private CompositeType getCompositeTypeByBuilder() {
final GcInfoBuilder builder = AccessController.doPrivileged (new PrivilegedAction<GcInfoBuilder>() {
public GcInfoBuilder run() {
try {
Class cl = Class.forName("com.sun.management.GcInfo");
Field f = cl.getDeclaredField("builder");
f.setAccessible(true);
return (GcInfoBuilder)f.get(gcNotifInfo.getGcInfo());
} catch(ClassNotFoundException e) {
return null;
} catch(NoSuchFieldException e) {
return null;
} catch(IllegalAccessException e) {
return null;
}
}
});
CompositeType gict = null;
synchronized(compositeTypeByBuilder) {
gict = compositeTypeByBuilder.get(builder);
if(gict == null) {
OpenType[] gcNotifInfoItemTypes = new OpenType[] {
SimpleType.STRING,
SimpleType.STRING,
SimpleType.STRING,
builder.getGcInfoCompositeType(),
};
try {
final String typeName =
"sun.management.GarbageCollectionNotifInfoCompositeType";
gict = new CompositeType(typeName,
"CompositeType for GC notification info",
gcNotifInfoItemNames,
gcNotifInfoItemNames,
gcNotifInfoItemTypes);
compositeTypeByBuilder.put(builder,gict);
} catch (OpenDataException e) {
// shouldn't reach here
throw Util.newException(e);
}
}
}
return gict;
}
protected CompositeData getCompositeData() {
// CONTENTS OF THIS ARRAY MUST BE SYNCHRONIZED WITH
// gcNotifInfoItemNames!
final Object[] gcNotifInfoItemValues;
gcNotifInfoItemValues = new Object[] {
gcNotifInfo.getGcName(),
gcNotifInfo.getGcAction(),
gcNotifInfo.getGcCause(),
GcInfoCompositeData.toCompositeData(gcNotifInfo.getGcInfo())
};
CompositeType gict = getCompositeTypeByBuilder();
try {
return new CompositeDataSupport(gict,
gcNotifInfoItemNames,
gcNotifInfoItemValues);
} catch (OpenDataException e) {
// Should never reach here
throw new AssertionError(e);
}
}
// private static MappedMXBeanType gcInfoMapType;
private static final String GC_NAME = "gcName";
private static final String GC_ACTION = "gcAction";
private static final String GC_CAUSE = "gcCause";
private static final String GC_INFO = "gcInfo";
private static final String[] gcNotifInfoItemNames = {
GC_NAME,
GC_ACTION,
GC_CAUSE,
GC_INFO
};
private static HashMap<GcInfoBuilder,CompositeType> compositeTypeByBuilder =
new HashMap<GcInfoBuilder,CompositeType>();
public static String getGcName(CompositeData cd) {
String gcname = getString(cd, GC_NAME);
if (gcname == null) {
throw new IllegalArgumentException("Invalid composite data: " +
"Attribute " + GC_NAME + " has null value");
}
return gcname;
}
public static String getGcAction(CompositeData cd) {
String gcaction = getString(cd, GC_ACTION);
if (gcaction == null) {
throw new IllegalArgumentException("Invalid composite data: " +
"Attribute " + GC_ACTION + " has null value");
}
return gcaction;
}
public static String getGcCause(CompositeData cd) {
String gccause = getString(cd, GC_CAUSE);
if (gccause == null) {
throw new IllegalArgumentException("Invalid composite data: " +
"Attribute " + GC_CAUSE + " has null value");
}
return gccause;
}
public static GcInfo getGcInfo(CompositeData cd) {
CompositeData gcInfoData = (CompositeData) cd.get(GC_INFO);
return GcInfo.from(gcInfoData);
}
/** Validate if the input CompositeData has the expected
* CompositeType (i.e. contain all attributes with expected
* names and types).
*/
public static void validateCompositeData(CompositeData cd) {
if (cd == null) {
throw new NullPointerException("Null CompositeData");
}
if (!isTypeMatched( getBaseGcNotifInfoCompositeType(), cd.getCompositeType())) {
throw new IllegalArgumentException(
"Unexpected composite type for GarbageCollectionNotificationInfo");
}
}
// This is only used for validation.
private static CompositeType baseGcNotifInfoCompositeType = null;
private static synchronized CompositeType getBaseGcNotifInfoCompositeType() {
if (baseGcNotifInfoCompositeType == null) {
try {
OpenType[] baseGcNotifInfoItemTypes = new OpenType[] {
SimpleType.STRING,
SimpleType.STRING,
SimpleType.STRING,
GcInfoCompositeData.getBaseGcInfoCompositeType()
};
baseGcNotifInfoCompositeType =
new CompositeType("sun.management.BaseGarbageCollectionNotifInfoCompositeType",
"CompositeType for Base GarbageCollectionNotificationInfo",
gcNotifInfoItemNames,
gcNotifInfoItemNames,
baseGcNotifInfoItemTypes);
} catch (OpenDataException e) {
// shouldn't reach here
throw Util.newException(e);
}
}
return baseGcNotifInfoCompositeType;
}
private static final long serialVersionUID = -1805123446483771292L;
}
/* /*
* Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
package sun.management; package sun.management;
import com.sun.management.GarbageCollectorMXBean; import com.sun.management.GarbageCollectorMXBean;
import com.sun.management.GarbageCollectionNotificationInfo;
import java.lang.management.ManagementFactory; import java.lang.management.ManagementFactory;
import java.lang.management.MemoryPoolMXBean; import java.lang.management.MemoryPoolMXBean;
import java.lang.management.MemoryUsage; import java.lang.management.MemoryUsage;
...@@ -35,9 +36,15 @@ import javax.management.openmbean.CompositeData; ...@@ -35,9 +36,15 @@ import javax.management.openmbean.CompositeData;
import javax.management.MBeanInfo; import javax.management.MBeanInfo;
import javax.management.MBeanAttributeInfo; import javax.management.MBeanAttributeInfo;
import javax.management.ObjectName; import javax.management.ObjectName;
import javax.management.MBeanNotificationInfo;
import javax.management.Notification;
import javax.management.NotificationFilter;
import javax.management.NotificationListener;
import javax.management.ListenerNotFoundException;
import java.util.List; import java.util.List;
import java.util.ListIterator; import java.util.ListIterator;
import java.util.Map;
/** /**
* Implementation class for the garbage collector. * Implementation class for the garbage collector.
...@@ -78,19 +85,111 @@ class GarbageCollectorImpl extends MemoryManagerImpl ...@@ -78,19 +85,111 @@ class GarbageCollectorImpl extends MemoryManagerImpl
// Sun JDK extension // Sun JDK extension
private GcInfoBuilder gcInfoBuilder; private GcInfoBuilder gcInfoBuilder;
public GcInfo getLastGcInfo() {
synchronized (this) { private synchronized GcInfoBuilder getGcInfoBuilder() {
if (gcInfoBuilder == null) { if(gcInfoBuilder == null) {
gcInfoBuilder = new GcInfoBuilder(this, getAllPoolNames()); gcInfoBuilder = new GcInfoBuilder(this, getAllPoolNames());
} }
return gcInfoBuilder;
} }
GcInfo info = gcInfoBuilder.getLastGcInfo(); public GcInfo getLastGcInfo() {
GcInfo info = getGcInfoBuilder().getLastGcInfo();
return info; return info;
} }
private final static String notifName =
"javax.management.Notification";
private final static String[] gcNotifTypes = {
GarbageCollectionNotificationInfo.GARBAGE_COLLECTION_NOTIFICATION
};
private MBeanNotificationInfo[] notifInfo = null;
public MBeanNotificationInfo[] getNotificationInfo() {
synchronized (this) {
if (notifInfo == null) {
notifInfo = new MBeanNotificationInfo[1];
notifInfo[0] = new MBeanNotificationInfo(gcNotifTypes,
notifName,
"GC Notification");
}
}
return notifInfo;
}
private static long seqNumber = 0;
private static long getNextSeqNumber() {
return ++seqNumber;
}
void createGCNotification(long timestamp,
String gcName,
String gcAction,
String gcCause,
GcInfo gcInfo) {
if (!hasListeners()) {
return;
}
Notification notif = new Notification(GarbageCollectionNotificationInfo.GARBAGE_COLLECTION_NOTIFICATION,
getObjectName(),
getNextSeqNumber(),
timestamp,
gcName);
GarbageCollectionNotificationInfo info =
new GarbageCollectionNotificationInfo(gcName,
gcAction,
gcCause,
gcInfo);
CompositeData cd =
GarbageCollectionNotifInfoCompositeData.toCompositeData(info);
notif.setUserData(cd);
sendNotification(notif);
}
public synchronized void addNotificationListener(NotificationListener listener,
NotificationFilter filter,
Object handback)
{
boolean before = hasListeners();
super.addNotificationListener(listener, filter, handback);
boolean after = hasListeners();
if (!before && after) {
setNotificationEnabled(this, true);
}
}
public synchronized void removeNotificationListener(NotificationListener listener)
throws ListenerNotFoundException {
boolean before = hasListeners();
super.removeNotificationListener(listener);
boolean after = hasListeners();
if (before && !after) {
setNotificationEnabled(this,false);
}
}
public synchronized void removeNotificationListener(NotificationListener listener,
NotificationFilter filter,
Object handback)
throws ListenerNotFoundException
{
boolean before = hasListeners();
super.removeNotificationListener(listener,filter,handback);
boolean after = hasListeners();
if (before && !after) {
setNotificationEnabled(this,false);
}
}
public ObjectName getObjectName() { public ObjectName getObjectName() {
return Util.newObjectName(ManagementFactory.GARBAGE_COLLECTOR_MXBEAN_DOMAIN_TYPE, getName()); return Util.newObjectName(ManagementFactory.GARBAGE_COLLECTOR_MXBEAN_DOMAIN_TYPE, getName());
} }
native void setNotificationEnabled(GarbageCollectorMXBean gc,
boolean enabled);
} }
/* /*
* Copyright (c) 2004, 2008, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -27,6 +27,7 @@ package sun.management; ...@@ -27,6 +27,7 @@ package sun.management;
import java.lang.management.MemoryUsage; import java.lang.management.MemoryUsage;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.lang.reflect.Field;
import java.util.Iterator; import java.util.Iterator;
import java.util.Map; import java.util.Map;
import java.util.HashMap; import java.util.HashMap;
...@@ -41,6 +42,9 @@ import javax.management.openmbean.SimpleType; ...@@ -41,6 +42,9 @@ import javax.management.openmbean.SimpleType;
import javax.management.openmbean.OpenType; import javax.management.openmbean.OpenType;
import javax.management.openmbean.OpenDataException; import javax.management.openmbean.OpenDataException;
import com.sun.management.GcInfo; import com.sun.management.GcInfo;
import com.sun.management.GarbageCollectionNotificationInfo;
import java.security.AccessController;
import java.security.PrivilegedAction;
/** /**
* A CompositeData for GcInfo for the local management support. * A CompositeData for GcInfo for the local management support.
...@@ -64,6 +68,44 @@ public class GcInfoCompositeData extends LazyCompositeData { ...@@ -64,6 +68,44 @@ public class GcInfoCompositeData extends LazyCompositeData {
return info; return info;
} }
public static CompositeData toCompositeData(final GcInfo info) {
final GcInfoBuilder builder = AccessController.doPrivileged (new PrivilegedAction<GcInfoBuilder>() {
public GcInfoBuilder run() {
try {
Class cl = Class.forName("com.sun.management.GcInfo");
Field f = cl.getDeclaredField("builder");
f.setAccessible(true);
return (GcInfoBuilder)f.get(info);
} catch(ClassNotFoundException e) {
return null;
} catch(NoSuchFieldException e) {
return null;
} catch(IllegalAccessException e) {
return null;
}
}
});
final Object[] extAttr = AccessController.doPrivileged (new PrivilegedAction<Object[]>() {
public Object[] run() {
try {
Class cl = Class.forName("com.sun.management.GcInfo");
Field f = cl.getDeclaredField("extAttributes");
f.setAccessible(true);
return (Object[])f.get(info);
} catch(ClassNotFoundException e) {
return null;
} catch(NoSuchFieldException e) {
return null;
} catch(IllegalAccessException e) {
return null;
}
}
});
GcInfoCompositeData gcicd =
new GcInfoCompositeData(info,builder,extAttr);
return gcicd.getCompositeData();
}
protected CompositeData getCompositeData() { protected CompositeData getCompositeData() {
// CONTENTS OF THIS ARRAY MUST BE SYNCHRONIZED WITH // CONTENTS OF THIS ARRAY MUST BE SYNCHRONIZED WITH
// baseGcInfoItemNames! // baseGcInfoItemNames!
...@@ -115,7 +157,6 @@ public class GcInfoCompositeData extends LazyCompositeData { ...@@ -115,7 +157,6 @@ public class GcInfoCompositeData extends LazyCompositeData {
} }
} }
private static final String ID = "id"; private static final String ID = "id";
private static final String START_TIME = "startTime"; private static final String START_TIME = "startTime";
private static final String END_TIME = "endTime"; private static final String END_TIME = "endTime";
...@@ -231,7 +272,7 @@ public class GcInfoCompositeData extends LazyCompositeData { ...@@ -231,7 +272,7 @@ public class GcInfoCompositeData extends LazyCompositeData {
// This is only used for validation. // This is only used for validation.
private static CompositeType baseGcInfoCompositeType = null; private static CompositeType baseGcInfoCompositeType = null;
private static synchronized CompositeType getBaseGcInfoCompositeType() { static synchronized CompositeType getBaseGcInfoCompositeType() {
if (baseGcInfoCompositeType == null) { if (baseGcInfoCompositeType == null) {
try { try {
baseGcInfoCompositeType = baseGcInfoCompositeType =
......
/* /*
* Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -29,6 +29,7 @@ import java.lang.management.ManagementFactory; ...@@ -29,6 +29,7 @@ import java.lang.management.ManagementFactory;
import java.lang.management.MemoryManagerMXBean; import java.lang.management.MemoryManagerMXBean;
import java.lang.management.MemoryPoolMXBean; import java.lang.management.MemoryPoolMXBean;
import javax.management.MBeanNotificationInfo;
import javax.management.ObjectName; import javax.management.ObjectName;
/** /**
...@@ -38,7 +39,8 @@ import javax.management.ObjectName; ...@@ -38,7 +39,8 @@ import javax.management.ObjectName;
* ManagementFactory.getMemoryManagerMXBeans() returns a list * ManagementFactory.getMemoryManagerMXBeans() returns a list
* of instances of this class. * of instances of this class.
*/ */
class MemoryManagerImpl implements MemoryManagerMXBean { class MemoryManagerImpl extends NotificationEmitterSupport
implements MemoryManagerMXBean {
private final String name; private final String name;
private final boolean isValid; private final boolean isValid;
...@@ -76,6 +78,16 @@ class MemoryManagerImpl implements MemoryManagerMXBean { ...@@ -76,6 +78,16 @@ class MemoryManagerImpl implements MemoryManagerMXBean {
} }
private native MemoryPoolMXBean[] getMemoryPools0(); private native MemoryPoolMXBean[] getMemoryPools0();
private MBeanNotificationInfo[] notifInfo = null;
public MBeanNotificationInfo[] getNotificationInfo() {
synchronized (this) {
if(notifInfo == null) {
notifInfo = new MBeanNotificationInfo[0];
}
}
return notifInfo;
}
public ObjectName getObjectName() { public ObjectName getObjectName() {
return Util.newObjectName(ManagementFactory.MEMORY_MANAGER_MXBEAN_DOMAIN_TYPE, getName()); return Util.newObjectName(ManagementFactory.MEMORY_MANAGER_MXBEAN_DOMAIN_TYPE, getName());
} }
......
...@@ -45,6 +45,7 @@ public interface VMManagement { ...@@ -45,6 +45,7 @@ public interface VMManagement {
public boolean isSynchronizerUsageSupported(); public boolean isSynchronizerUsageSupported();
public boolean isThreadAllocatedMemorySupported(); public boolean isThreadAllocatedMemorySupported();
public boolean isThreadAllocatedMemoryEnabled(); public boolean isThreadAllocatedMemoryEnabled();
public boolean isGcNotificationSupported();
// Class Loading Subsystem // Class Loading Subsystem
public long getTotalClassCount(); public long getTotalClassCount();
......
...@@ -56,6 +56,8 @@ class VMManagementImpl implements VMManagement { ...@@ -56,6 +56,8 @@ class VMManagementImpl implements VMManagement {
private static boolean objectMonitorUsageSupport; private static boolean objectMonitorUsageSupport;
private static boolean synchronizerUsageSupport; private static boolean synchronizerUsageSupport;
private static boolean threadAllocatedMemorySupport; private static boolean threadAllocatedMemorySupport;
private static boolean gcNotificationSupport;
static { static {
version = getVersion0(); version = getVersion0();
...@@ -100,6 +102,10 @@ class VMManagementImpl implements VMManagement { ...@@ -100,6 +102,10 @@ class VMManagementImpl implements VMManagement {
return threadAllocatedMemorySupport; return threadAllocatedMemorySupport;
} }
public boolean isGcNotificationSupported() {
return gcNotificationSupport;
}
public native boolean isThreadContentionMonitoringEnabled(); public native boolean isThreadContentionMonitoringEnabled();
public native boolean isThreadCpuTimeEnabled(); public native boolean isThreadCpuTimeEnabled();
public native boolean isThreadAllocatedMemoryEnabled(); public native boolean isThreadAllocatedMemoryEnabled();
......
...@@ -28,7 +28,7 @@ package sun.nio.ch; ...@@ -28,7 +28,7 @@ package sun.nio.ch;
import java.nio.channels.*; import java.nio.channels.*;
import java.net.SocketAddress; import java.net.SocketAddress;
import java.net.SocketOption; import java.net.SocketOption;
import java.net.StandardSocketOption; import java.net.StandardSocketOptions;
import java.net.InetSocketAddress; import java.net.InetSocketAddress;
import java.io.FileDescriptor; import java.io.FileDescriptor;
import java.io.IOException; import java.io.IOException;
...@@ -214,8 +214,8 @@ abstract class AsynchronousServerSocketChannelImpl ...@@ -214,8 +214,8 @@ abstract class AsynchronousServerSocketChannelImpl
private static Set<SocketOption<?>> defaultOptions() { private static Set<SocketOption<?>> defaultOptions() {
HashSet<SocketOption<?>> set = new HashSet<SocketOption<?>>(2); HashSet<SocketOption<?>> set = new HashSet<SocketOption<?>>(2);
set.add(StandardSocketOption.SO_RCVBUF); set.add(StandardSocketOptions.SO_RCVBUF);
set.add(StandardSocketOption.SO_REUSEADDR); set.add(StandardSocketOptions.SO_REUSEADDR);
return Collections.unmodifiableSet(set); return Collections.unmodifiableSet(set);
} }
} }
......
...@@ -28,7 +28,7 @@ package sun.nio.ch; ...@@ -28,7 +28,7 @@ package sun.nio.ch;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import java.nio.channels.*; import java.nio.channels.*;
import java.net.SocketOption; import java.net.SocketOption;
import java.net.StandardSocketOption; import java.net.StandardSocketOptions;
import java.net.SocketAddress; import java.net.SocketAddress;
import java.net.InetSocketAddress; import java.net.InetSocketAddress;
import java.io.IOException; import java.io.IOException;
...@@ -483,11 +483,11 @@ abstract class AsynchronousSocketChannelImpl ...@@ -483,11 +483,11 @@ abstract class AsynchronousSocketChannelImpl
private static Set<SocketOption<?>> defaultOptions() { private static Set<SocketOption<?>> defaultOptions() {
HashSet<SocketOption<?>> set = new HashSet<SocketOption<?>>(5); HashSet<SocketOption<?>> set = new HashSet<SocketOption<?>>(5);
set.add(StandardSocketOption.SO_SNDBUF); set.add(StandardSocketOptions.SO_SNDBUF);
set.add(StandardSocketOption.SO_RCVBUF); set.add(StandardSocketOptions.SO_RCVBUF);
set.add(StandardSocketOption.SO_KEEPALIVE); set.add(StandardSocketOptions.SO_KEEPALIVE);
set.add(StandardSocketOption.SO_REUSEADDR); set.add(StandardSocketOptions.SO_REUSEADDR);
set.add(StandardSocketOption.TCP_NODELAY); set.add(StandardSocketOptions.TCP_NODELAY);
return Collections.unmodifiableSet(set); return Collections.unmodifiableSet(set);
} }
} }
......
...@@ -188,7 +188,7 @@ class DatagramChannelImpl ...@@ -188,7 +188,7 @@ class DatagramChannelImpl
synchronized (stateLock) { synchronized (stateLock) {
ensureOpen(); ensureOpen();
if (name == StandardSocketOption.IP_TOS) { if (name == StandardSocketOptions.IP_TOS) {
// IPv4 only; no-op for IPv6 // IPv4 only; no-op for IPv6
if (family == StandardProtocolFamily.INET) { if (family == StandardProtocolFamily.INET) {
Net.setSocketOption(fd, family, name, value); Net.setSocketOption(fd, family, name, value);
...@@ -196,15 +196,15 @@ class DatagramChannelImpl ...@@ -196,15 +196,15 @@ class DatagramChannelImpl
return this; return this;
} }
if (name == StandardSocketOption.IP_MULTICAST_TTL || if (name == StandardSocketOptions.IP_MULTICAST_TTL ||
name == StandardSocketOption.IP_MULTICAST_LOOP) name == StandardSocketOptions.IP_MULTICAST_LOOP)
{ {
// options are protocol dependent // options are protocol dependent
Net.setSocketOption(fd, family, name, value); Net.setSocketOption(fd, family, name, value);
return this; return this;
} }
if (name == StandardSocketOption.IP_MULTICAST_IF) { if (name == StandardSocketOptions.IP_MULTICAST_IF) {
if (value == null) if (value == null)
throw new IllegalArgumentException("Cannot set IP_MULTICAST_IF to 'null'"); throw new IllegalArgumentException("Cannot set IP_MULTICAST_IF to 'null'");
NetworkInterface interf = (NetworkInterface)value; NetworkInterface interf = (NetworkInterface)value;
...@@ -243,7 +243,7 @@ class DatagramChannelImpl ...@@ -243,7 +243,7 @@ class DatagramChannelImpl
synchronized (stateLock) { synchronized (stateLock) {
ensureOpen(); ensureOpen();
if (name == StandardSocketOption.IP_TOS) { if (name == StandardSocketOptions.IP_TOS) {
// IPv4 only; always return 0 on IPv6 // IPv4 only; always return 0 on IPv6
if (family == StandardProtocolFamily.INET) { if (family == StandardProtocolFamily.INET) {
return (T) Net.getSocketOption(fd, family, name); return (T) Net.getSocketOption(fd, family, name);
...@@ -252,13 +252,13 @@ class DatagramChannelImpl ...@@ -252,13 +252,13 @@ class DatagramChannelImpl
} }
} }
if (name == StandardSocketOption.IP_MULTICAST_TTL || if (name == StandardSocketOptions.IP_MULTICAST_TTL ||
name == StandardSocketOption.IP_MULTICAST_LOOP) name == StandardSocketOptions.IP_MULTICAST_LOOP)
{ {
return (T) Net.getSocketOption(fd, family, name); return (T) Net.getSocketOption(fd, family, name);
} }
if (name == StandardSocketOption.IP_MULTICAST_IF) { if (name == StandardSocketOptions.IP_MULTICAST_IF) {
if (family == StandardProtocolFamily.INET) { if (family == StandardProtocolFamily.INET) {
int address = Net.getInterface4(fd); int address = Net.getInterface4(fd);
if (address == 0) if (address == 0)
...@@ -291,14 +291,14 @@ class DatagramChannelImpl ...@@ -291,14 +291,14 @@ class DatagramChannelImpl
private static Set<SocketOption<?>> defaultOptions() { private static Set<SocketOption<?>> defaultOptions() {
HashSet<SocketOption<?>> set = new HashSet<SocketOption<?>>(8); HashSet<SocketOption<?>> set = new HashSet<SocketOption<?>>(8);
set.add(StandardSocketOption.SO_SNDBUF); set.add(StandardSocketOptions.SO_SNDBUF);
set.add(StandardSocketOption.SO_RCVBUF); set.add(StandardSocketOptions.SO_RCVBUF);
set.add(StandardSocketOption.SO_REUSEADDR); set.add(StandardSocketOptions.SO_REUSEADDR);
set.add(StandardSocketOption.SO_BROADCAST); set.add(StandardSocketOptions.SO_BROADCAST);
set.add(StandardSocketOption.IP_TOS); set.add(StandardSocketOptions.IP_TOS);
set.add(StandardSocketOption.IP_MULTICAST_IF); set.add(StandardSocketOptions.IP_MULTICAST_IF);
set.add(StandardSocketOption.IP_MULTICAST_TTL); set.add(StandardSocketOptions.IP_MULTICAST_TTL);
set.add(StandardSocketOption.IP_MULTICAST_LOOP); set.add(StandardSocketOptions.IP_MULTICAST_LOOP);
return Collections.unmodifiableSet(set); return Collections.unmodifiableSet(set);
} }
} }
......
...@@ -312,46 +312,46 @@ public class DatagramSocketAdaptor ...@@ -312,46 +312,46 @@ public class DatagramSocketAdaptor
public void setSendBufferSize(int size) throws SocketException { public void setSendBufferSize(int size) throws SocketException {
if (size <= 0) if (size <= 0)
throw new IllegalArgumentException("Invalid send size"); throw new IllegalArgumentException("Invalid send size");
setIntOption(StandardSocketOption.SO_SNDBUF, size); setIntOption(StandardSocketOptions.SO_SNDBUF, size);
} }
public int getSendBufferSize() throws SocketException { public int getSendBufferSize() throws SocketException {
return getIntOption(StandardSocketOption.SO_SNDBUF); return getIntOption(StandardSocketOptions.SO_SNDBUF);
} }
public void setReceiveBufferSize(int size) throws SocketException { public void setReceiveBufferSize(int size) throws SocketException {
if (size <= 0) if (size <= 0)
throw new IllegalArgumentException("Invalid receive size"); throw new IllegalArgumentException("Invalid receive size");
setIntOption(StandardSocketOption.SO_RCVBUF, size); setIntOption(StandardSocketOptions.SO_RCVBUF, size);
} }
public int getReceiveBufferSize() throws SocketException { public int getReceiveBufferSize() throws SocketException {
return getIntOption(StandardSocketOption.SO_RCVBUF); return getIntOption(StandardSocketOptions.SO_RCVBUF);
} }
public void setReuseAddress(boolean on) throws SocketException { public void setReuseAddress(boolean on) throws SocketException {
setBooleanOption(StandardSocketOption.SO_REUSEADDR, on); setBooleanOption(StandardSocketOptions.SO_REUSEADDR, on);
} }
public boolean getReuseAddress() throws SocketException { public boolean getReuseAddress() throws SocketException {
return getBooleanOption(StandardSocketOption.SO_REUSEADDR); return getBooleanOption(StandardSocketOptions.SO_REUSEADDR);
} }
public void setBroadcast(boolean on) throws SocketException { public void setBroadcast(boolean on) throws SocketException {
setBooleanOption(StandardSocketOption.SO_BROADCAST, on); setBooleanOption(StandardSocketOptions.SO_BROADCAST, on);
} }
public boolean getBroadcast() throws SocketException { public boolean getBroadcast() throws SocketException {
return getBooleanOption(StandardSocketOption.SO_BROADCAST); return getBooleanOption(StandardSocketOptions.SO_BROADCAST);
} }
public void setTrafficClass(int tc) throws SocketException { public void setTrafficClass(int tc) throws SocketException {
setIntOption(StandardSocketOption.IP_TOS, tc); setIntOption(StandardSocketOptions.IP_TOS, tc);
} }
public int getTrafficClass() throws SocketException { public int getTrafficClass() throws SocketException {
return getIntOption(StandardSocketOption.IP_TOS); return getIntOption(StandardSocketOptions.IP_TOS);
} }
public void close() { public void close() {
......
...@@ -29,7 +29,7 @@ import java.net.SocketOption; ...@@ -29,7 +29,7 @@ import java.net.SocketOption;
/** /**
* Defines socket options that are supported by the implementation * Defines socket options that are supported by the implementation
* but not defined in StandardSocketOption. * but not defined in StandardSocketOptions.
*/ */
class ExtendedSocketOption { class ExtendedSocketOption {
......
...@@ -96,11 +96,16 @@ class NativeThreadSet { ...@@ -96,11 +96,16 @@ class NativeThreadSet {
break; break;
} }
waitingToEmpty = true; waitingToEmpty = true;
boolean interrupted = false;
while (used > 0) { while (used > 0) {
try { try {
wait(); wait();
} catch (InterruptedException ignore) { } } catch (InterruptedException e) {
interrupted = true;
} }
} }
if (interrupted)
Thread.currentThread().interrupt();
}
} }
} }
...@@ -237,26 +237,26 @@ class Net { // package-private ...@@ -237,26 +237,26 @@ class Net { // package-private
throw new AssertionError("Should not reach here"); throw new AssertionError("Should not reach here");
// special handling // special handling
if (name == StandardSocketOption.SO_RCVBUF || if (name == StandardSocketOptions.SO_RCVBUF ||
name == StandardSocketOption.SO_SNDBUF) name == StandardSocketOptions.SO_SNDBUF)
{ {
int i = ((Integer)value).intValue(); int i = ((Integer)value).intValue();
if (i < 0) if (i < 0)
throw new IllegalArgumentException("Invalid send/receive buffer size"); throw new IllegalArgumentException("Invalid send/receive buffer size");
} }
if (name == StandardSocketOption.SO_LINGER) { if (name == StandardSocketOptions.SO_LINGER) {
int i = ((Integer)value).intValue(); int i = ((Integer)value).intValue();
if (i < 0) if (i < 0)
value = Integer.valueOf(-1); value = Integer.valueOf(-1);
if (i > 65535) if (i > 65535)
value = Integer.valueOf(65535); value = Integer.valueOf(65535);
} }
if (name == StandardSocketOption.IP_TOS) { if (name == StandardSocketOptions.IP_TOS) {
int i = ((Integer)value).intValue(); int i = ((Integer)value).intValue();
if (i < 0 || i > 255) if (i < 0 || i > 255)
throw new IllegalArgumentException("Invalid IP_TOS value"); throw new IllegalArgumentException("Invalid IP_TOS value");
} }
if (name == StandardSocketOption.IP_MULTICAST_TTL) { if (name == StandardSocketOptions.IP_MULTICAST_TTL) {
int i = ((Integer)value).intValue(); int i = ((Integer)value).intValue();
if (i < 0 || i > 255) if (i < 0 || i > 255)
throw new IllegalArgumentException("Invalid TTL/hop value"); throw new IllegalArgumentException("Invalid TTL/hop value");
......
...@@ -169,7 +169,7 @@ public class ServerSocketAdaptor // package-private ...@@ -169,7 +169,7 @@ public class ServerSocketAdaptor // package-private
public void setReuseAddress(boolean on) throws SocketException { public void setReuseAddress(boolean on) throws SocketException {
try { try {
ssc.setOption(StandardSocketOption.SO_REUSEADDR, on); ssc.setOption(StandardSocketOptions.SO_REUSEADDR, on);
} catch (IOException x) { } catch (IOException x) {
Net.translateToSocketException(x); Net.translateToSocketException(x);
} }
...@@ -177,7 +177,7 @@ public class ServerSocketAdaptor // package-private ...@@ -177,7 +177,7 @@ public class ServerSocketAdaptor // package-private
public boolean getReuseAddress() throws SocketException { public boolean getReuseAddress() throws SocketException {
try { try {
return ssc.getOption(StandardSocketOption.SO_REUSEADDR).booleanValue(); return ssc.getOption(StandardSocketOptions.SO_REUSEADDR).booleanValue();
} catch (IOException x) { } catch (IOException x) {
Net.translateToSocketException(x); Net.translateToSocketException(x);
return false; // Never happens return false; // Never happens
...@@ -197,7 +197,7 @@ public class ServerSocketAdaptor // package-private ...@@ -197,7 +197,7 @@ public class ServerSocketAdaptor // package-private
if (size <= 0) if (size <= 0)
throw new IllegalArgumentException("size cannot be 0 or negative"); throw new IllegalArgumentException("size cannot be 0 or negative");
try { try {
ssc.setOption(StandardSocketOption.SO_RCVBUF, size); ssc.setOption(StandardSocketOptions.SO_RCVBUF, size);
} catch (IOException x) { } catch (IOException x) {
Net.translateToSocketException(x); Net.translateToSocketException(x);
} }
...@@ -205,7 +205,7 @@ public class ServerSocketAdaptor // package-private ...@@ -205,7 +205,7 @@ public class ServerSocketAdaptor // package-private
public int getReceiveBufferSize() throws SocketException { public int getReceiveBufferSize() throws SocketException {
try { try {
return ssc.getOption(StandardSocketOption.SO_RCVBUF).intValue(); return ssc.getOption(StandardSocketOptions.SO_RCVBUF).intValue();
} catch (IOException x) { } catch (IOException x) {
Net.translateToSocketException(x); Net.translateToSocketException(x);
return -1; // Never happens return -1; // Never happens
......
...@@ -160,8 +160,8 @@ class ServerSocketChannelImpl ...@@ -160,8 +160,8 @@ class ServerSocketChannelImpl
private static Set<SocketOption<?>> defaultOptions() { private static Set<SocketOption<?>> defaultOptions() {
HashSet<SocketOption<?>> set = new HashSet<SocketOption<?>>(2); HashSet<SocketOption<?>> set = new HashSet<SocketOption<?>>(2);
set.add(StandardSocketOption.SO_RCVBUF); set.add(StandardSocketOptions.SO_RCVBUF);
set.add(StandardSocketOption.SO_REUSEADDR); set.add(StandardSocketOptions.SO_REUSEADDR);
return Collections.unmodifiableSet(set); return Collections.unmodifiableSet(set);
} }
} }
......
...@@ -318,21 +318,21 @@ public class SocketAdaptor ...@@ -318,21 +318,21 @@ public class SocketAdaptor
} }
public void setTcpNoDelay(boolean on) throws SocketException { public void setTcpNoDelay(boolean on) throws SocketException {
setBooleanOption(StandardSocketOption.TCP_NODELAY, on); setBooleanOption(StandardSocketOptions.TCP_NODELAY, on);
} }
public boolean getTcpNoDelay() throws SocketException { public boolean getTcpNoDelay() throws SocketException {
return getBooleanOption(StandardSocketOption.TCP_NODELAY); return getBooleanOption(StandardSocketOptions.TCP_NODELAY);
} }
public void setSoLinger(boolean on, int linger) throws SocketException { public void setSoLinger(boolean on, int linger) throws SocketException {
if (!on) if (!on)
linger = -1; linger = -1;
setIntOption(StandardSocketOption.SO_LINGER, linger); setIntOption(StandardSocketOptions.SO_LINGER, linger);
} }
public int getSoLinger() throws SocketException { public int getSoLinger() throws SocketException {
return getIntOption(StandardSocketOption.SO_LINGER); return getIntOption(StandardSocketOptions.SO_LINGER);
} }
public void sendUrgentData(int data) throws IOException { public void sendUrgentData(int data) throws IOException {
...@@ -366,46 +366,46 @@ public class SocketAdaptor ...@@ -366,46 +366,46 @@ public class SocketAdaptor
// size 0 valid for SocketChannel, invalid for Socket // size 0 valid for SocketChannel, invalid for Socket
if (size <= 0) if (size <= 0)
throw new IllegalArgumentException("Invalid send size"); throw new IllegalArgumentException("Invalid send size");
setIntOption(StandardSocketOption.SO_SNDBUF, size); setIntOption(StandardSocketOptions.SO_SNDBUF, size);
} }
public int getSendBufferSize() throws SocketException { public int getSendBufferSize() throws SocketException {
return getIntOption(StandardSocketOption.SO_SNDBUF); return getIntOption(StandardSocketOptions.SO_SNDBUF);
} }
public void setReceiveBufferSize(int size) throws SocketException { public void setReceiveBufferSize(int size) throws SocketException {
// size 0 valid for SocketChannel, invalid for Socket // size 0 valid for SocketChannel, invalid for Socket
if (size <= 0) if (size <= 0)
throw new IllegalArgumentException("Invalid receive size"); throw new IllegalArgumentException("Invalid receive size");
setIntOption(StandardSocketOption.SO_RCVBUF, size); setIntOption(StandardSocketOptions.SO_RCVBUF, size);
} }
public int getReceiveBufferSize() throws SocketException { public int getReceiveBufferSize() throws SocketException {
return getIntOption(StandardSocketOption.SO_RCVBUF); return getIntOption(StandardSocketOptions.SO_RCVBUF);
} }
public void setKeepAlive(boolean on) throws SocketException { public void setKeepAlive(boolean on) throws SocketException {
setBooleanOption(StandardSocketOption.SO_KEEPALIVE, on); setBooleanOption(StandardSocketOptions.SO_KEEPALIVE, on);
} }
public boolean getKeepAlive() throws SocketException { public boolean getKeepAlive() throws SocketException {
return getBooleanOption(StandardSocketOption.SO_KEEPALIVE); return getBooleanOption(StandardSocketOptions.SO_KEEPALIVE);
} }
public void setTrafficClass(int tc) throws SocketException { public void setTrafficClass(int tc) throws SocketException {
setIntOption(StandardSocketOption.IP_TOS, tc); setIntOption(StandardSocketOptions.IP_TOS, tc);
} }
public int getTrafficClass() throws SocketException { public int getTrafficClass() throws SocketException {
return getIntOption(StandardSocketOption.IP_TOS); return getIntOption(StandardSocketOptions.IP_TOS);
} }
public void setReuseAddress(boolean on) throws SocketException { public void setReuseAddress(boolean on) throws SocketException {
setBooleanOption(StandardSocketOption.SO_REUSEADDR, on); setBooleanOption(StandardSocketOptions.SO_REUSEADDR, on);
} }
public boolean getReuseAddress() throws SocketException { public boolean getReuseAddress() throws SocketException {
return getBooleanOption(StandardSocketOption.SO_REUSEADDR); return getBooleanOption(StandardSocketOptions.SO_REUSEADDR);
} }
public void close() throws IOException { public void close() throws IOException {
......
...@@ -170,7 +170,7 @@ class SocketChannelImpl ...@@ -170,7 +170,7 @@ class SocketChannelImpl
throw new ClosedChannelException(); throw new ClosedChannelException();
// special handling for IP_TOS: no-op when IPv6 // special handling for IP_TOS: no-op when IPv6
if (name == StandardSocketOption.IP_TOS) { if (name == StandardSocketOptions.IP_TOS) {
if (!Net.isIPv6Available()) if (!Net.isIPv6Available())
Net.setSocketOption(fd, StandardProtocolFamily.INET, name, value); Net.setSocketOption(fd, StandardProtocolFamily.INET, name, value);
return this; return this;
...@@ -197,7 +197,7 @@ class SocketChannelImpl ...@@ -197,7 +197,7 @@ class SocketChannelImpl
throw new ClosedChannelException(); throw new ClosedChannelException();
// special handling for IP_TOS: always return 0 when IPv6 // special handling for IP_TOS: always return 0 when IPv6
if (name == StandardSocketOption.IP_TOS) { if (name == StandardSocketOptions.IP_TOS) {
return (Net.isIPv6Available()) ? (T) Integer.valueOf(0) : return (Net.isIPv6Available()) ? (T) Integer.valueOf(0) :
(T) Net.getSocketOption(fd, StandardProtocolFamily.INET, name); (T) Net.getSocketOption(fd, StandardProtocolFamily.INET, name);
} }
...@@ -212,14 +212,14 @@ class SocketChannelImpl ...@@ -212,14 +212,14 @@ class SocketChannelImpl
private static Set<SocketOption<?>> defaultOptions() { private static Set<SocketOption<?>> defaultOptions() {
HashSet<SocketOption<?>> set = new HashSet<SocketOption<?>>(8); HashSet<SocketOption<?>> set = new HashSet<SocketOption<?>>(8);
set.add(StandardSocketOption.SO_SNDBUF); set.add(StandardSocketOptions.SO_SNDBUF);
set.add(StandardSocketOption.SO_RCVBUF); set.add(StandardSocketOptions.SO_RCVBUF);
set.add(StandardSocketOption.SO_KEEPALIVE); set.add(StandardSocketOptions.SO_KEEPALIVE);
set.add(StandardSocketOption.SO_REUSEADDR); set.add(StandardSocketOptions.SO_REUSEADDR);
set.add(StandardSocketOption.SO_LINGER); set.add(StandardSocketOptions.SO_LINGER);
set.add(StandardSocketOption.TCP_NODELAY); set.add(StandardSocketOptions.TCP_NODELAY);
// additional options required by socket adaptor // additional options required by socket adaptor
set.add(StandardSocketOption.IP_TOS); set.add(StandardSocketOptions.IP_TOS);
set.add(ExtendedSocketOption.SO_OOBINLINE); set.add(ExtendedSocketOption.SO_OOBINLINE);
return Collections.unmodifiableSet(set); return Collections.unmodifiableSet(set);
} }
......
...@@ -105,16 +105,16 @@ abstract class AbstractPoller implements Runnable { ...@@ -105,16 +105,16 @@ abstract class AbstractPoller implements Runnable {
Set<WatchEvent.Kind<?>> eventSet = new HashSet<>(events.length); Set<WatchEvent.Kind<?>> eventSet = new HashSet<>(events.length);
for (WatchEvent.Kind<?> event: events) { for (WatchEvent.Kind<?> event: events) {
// standard events // standard events
if (event == StandardWatchEventKind.ENTRY_CREATE || if (event == StandardWatchEventKinds.ENTRY_CREATE ||
event == StandardWatchEventKind.ENTRY_MODIFY || event == StandardWatchEventKinds.ENTRY_MODIFY ||
event == StandardWatchEventKind.ENTRY_DELETE) event == StandardWatchEventKinds.ENTRY_DELETE)
{ {
eventSet.add(event); eventSet.add(event);
continue; continue;
} }
// OVERFLOW is ignored // OVERFLOW is ignored
if (event == StandardWatchEventKind.OVERFLOW) { if (event == StandardWatchEventKinds.OVERFLOW) {
if (events.length == 1) if (events.length == 1)
throw new IllegalArgumentException("No events to register"); throw new IllegalArgumentException("No events to register");
continue; continue;
......
...@@ -42,8 +42,8 @@ abstract class AbstractWatchKey implements WatchKey { ...@@ -42,8 +42,8 @@ abstract class AbstractWatchKey implements WatchKey {
/** /**
* Special event to signal overflow * Special event to signal overflow
*/ */
static final Event<Void> OVERFLOW_EVENT = static final Event<Object> OVERFLOW_EVENT =
new Event<Void>(StandardWatchEventKind.OVERFLOW, null); new Event<Object>(StandardWatchEventKinds.OVERFLOW, null);
/** /**
* Possible key states * Possible key states
...@@ -103,14 +103,14 @@ abstract class AbstractWatchKey implements WatchKey { ...@@ -103,14 +103,14 @@ abstract class AbstractWatchKey implements WatchKey {
*/ */
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
final void signalEvent(WatchEvent.Kind<?> kind, Object context) { final void signalEvent(WatchEvent.Kind<?> kind, Object context) {
boolean isModify = (kind == StandardWatchEventKind.ENTRY_MODIFY); boolean isModify = (kind == StandardWatchEventKinds.ENTRY_MODIFY);
synchronized (this) { synchronized (this) {
int size = events.size(); int size = events.size();
if (size > 0) { if (size > 0) {
// if the previous event is an OVERFLOW event or this is a // if the previous event is an OVERFLOW event or this is a
// repeated event then we simply increment the counter // repeated event then we simply increment the counter
WatchEvent<?> prev = events.get(size-1); WatchEvent<?> prev = events.get(size-1);
if ((prev.kind() == StandardWatchEventKind.OVERFLOW) || if ((prev.kind() == StandardWatchEventKinds.OVERFLOW) ||
((kind == prev.kind() && ((kind == prev.kind() &&
Objects.equals(context, prev.context())))) Objects.equals(context, prev.context()))))
{ {
...@@ -124,7 +124,7 @@ abstract class AbstractWatchKey implements WatchKey { ...@@ -124,7 +124,7 @@ abstract class AbstractWatchKey implements WatchKey {
if (isModify) { if (isModify) {
WatchEvent<?> ev = lastModifyEvents.get(context); WatchEvent<?> ev = lastModifyEvents.get(context);
if (ev != null) { if (ev != null) {
assert ev.kind() == StandardWatchEventKind.ENTRY_MODIFY; assert ev.kind() == StandardWatchEventKinds.ENTRY_MODIFY;
((Event<?>)ev).increment(); ((Event<?>)ev).increment();
return; return;
} }
...@@ -138,7 +138,7 @@ abstract class AbstractWatchKey implements WatchKey { ...@@ -138,7 +138,7 @@ abstract class AbstractWatchKey implements WatchKey {
// if the list has reached the limit then drop pending events // if the list has reached the limit then drop pending events
// and queue an OVERFLOW event // and queue an OVERFLOW event
if (size >= MAX_EVENT_LIST_SIZE) { if (size >= MAX_EVENT_LIST_SIZE) {
kind = StandardWatchEventKind.OVERFLOW; kind = StandardWatchEventKinds.OVERFLOW;
isModify = false; isModify = false;
context = null; context = null;
} }
...@@ -149,7 +149,7 @@ abstract class AbstractWatchKey implements WatchKey { ...@@ -149,7 +149,7 @@ abstract class AbstractWatchKey implements WatchKey {
new Event<Object>((WatchEvent.Kind<Object>)kind, context); new Event<Object>((WatchEvent.Kind<Object>)kind, context);
if (isModify) { if (isModify) {
lastModifyEvents.put(context, ev); lastModifyEvents.put(context, ev);
} else if (kind == StandardWatchEventKind.OVERFLOW) { } else if (kind == StandardWatchEventKinds.OVERFLOW) {
// drop all pending events // drop all pending events
events.clear(); events.clear();
lastModifyEvents.clear(); lastModifyEvents.clear();
......
...@@ -80,16 +80,16 @@ class PollingWatchService ...@@ -80,16 +80,16 @@ class PollingWatchService
new HashSet<WatchEvent.Kind<?>>(events.length); new HashSet<WatchEvent.Kind<?>>(events.length);
for (WatchEvent.Kind<?> event: events) { for (WatchEvent.Kind<?> event: events) {
// standard events // standard events
if (event == StandardWatchEventKind.ENTRY_CREATE || if (event == StandardWatchEventKinds.ENTRY_CREATE ||
event == StandardWatchEventKind.ENTRY_MODIFY || event == StandardWatchEventKinds.ENTRY_MODIFY ||
event == StandardWatchEventKind.ENTRY_DELETE) event == StandardWatchEventKinds.ENTRY_DELETE)
{ {
eventSet.add(event); eventSet.add(event);
continue; continue;
} }
// OVERFLOW is ignored // OVERFLOW is ignored
if (event == StandardWatchEventKind.OVERFLOW) { if (event == StandardWatchEventKinds.OVERFLOW) {
if (events.length == 1) if (events.length == 1)
throw new IllegalArgumentException("No events to register"); throw new IllegalArgumentException("No events to register");
continue; continue;
...@@ -355,16 +355,16 @@ class PollingWatchService ...@@ -355,16 +355,16 @@ class PollingWatchService
new CacheEntry(lastModified, tickCount)); new CacheEntry(lastModified, tickCount));
// queue ENTRY_CREATE if event enabled // queue ENTRY_CREATE if event enabled
if (events.contains(StandardWatchEventKind.ENTRY_CREATE)) { if (events.contains(StandardWatchEventKinds.ENTRY_CREATE)) {
signalEvent(StandardWatchEventKind.ENTRY_CREATE, entry.getFileName()); signalEvent(StandardWatchEventKinds.ENTRY_CREATE, entry.getFileName());
continue; continue;
} else { } else {
// if ENTRY_CREATE is not enabled and ENTRY_MODIFY is // if ENTRY_CREATE is not enabled and ENTRY_MODIFY is
// enabled then queue event to avoid missing out on // enabled then queue event to avoid missing out on
// modifications to the file immediately after it is // modifications to the file immediately after it is
// created. // created.
if (events.contains(StandardWatchEventKind.ENTRY_MODIFY)) { if (events.contains(StandardWatchEventKinds.ENTRY_MODIFY)) {
signalEvent(StandardWatchEventKind.ENTRY_MODIFY, entry.getFileName()); signalEvent(StandardWatchEventKinds.ENTRY_MODIFY, entry.getFileName());
} }
} }
continue; continue;
...@@ -372,8 +372,8 @@ class PollingWatchService ...@@ -372,8 +372,8 @@ class PollingWatchService
// check if file has changed // check if file has changed
if (e.lastModified != lastModified) { if (e.lastModified != lastModified) {
if (events.contains(StandardWatchEventKind.ENTRY_MODIFY)) { if (events.contains(StandardWatchEventKinds.ENTRY_MODIFY)) {
signalEvent(StandardWatchEventKind.ENTRY_MODIFY, signalEvent(StandardWatchEventKinds.ENTRY_MODIFY,
entry.getFileName()); entry.getFileName());
} }
} }
...@@ -403,8 +403,8 @@ class PollingWatchService ...@@ -403,8 +403,8 @@ class PollingWatchService
Path name = mapEntry.getKey(); Path name = mapEntry.getKey();
// remove from map and queue delete event (if enabled) // remove from map and queue delete event (if enabled)
i.remove(); i.remove();
if (events.contains(StandardWatchEventKind.ENTRY_DELETE)) { if (events.contains(StandardWatchEventKinds.ENTRY_DELETE)) {
signalEvent(StandardWatchEventKind.ENTRY_DELETE, name); signalEvent(StandardWatchEventKinds.ENTRY_DELETE, name);
} }
} }
} }
......
...@@ -24,22 +24,10 @@ ...@@ -24,22 +24,10 @@
*/ */
/* /*
* ===========================================================================
* IBM Confidential
* OCO Source Materials
* Licensed Materials - Property of IBM
* *
* (C) Copyright IBM Corp. 1999 All Rights Reserved. * (C) Copyright IBM Corp. 1999 All Rights Reserved.
*
* The source code for this program is not published or otherwise divested of
* its trade secrets, irrespective of what has been deposited with the U.S.
* Copyright Office.
*
* Copyright 1997 The Open Group Research Institute. All rights reserved. * Copyright 1997 The Open Group Research Institute. All rights reserved.
* ===========================================================================
*
*/ */
package sun.security.jgss.spi; package sun.security.jgss.spi;
import org.ietf.jgss.*; import org.ietf.jgss.*;
......
...@@ -62,7 +62,7 @@ final class JsseJce { ...@@ -62,7 +62,7 @@ final class JsseJce {
// Flag indicating whether EC crypto is available. // Flag indicating whether EC crypto is available.
// If null, then we have not checked yet. // If null, then we have not checked yet.
// If yes, then all the EC based crypto we need is available. // If yes, then all the EC based crypto we need is available.
private static volatile Boolean ecAvailable; private static Boolean ecAvailable;
// Flag indicating whether Kerberos crypto is available. // Flag indicating whether Kerberos crypto is available.
// If true, then all the Kerberos-based crypto we need is available. // If true, then all the Kerberos-based crypto we need is available.
...@@ -190,7 +190,7 @@ final class JsseJce { ...@@ -190,7 +190,7 @@ final class JsseJce {
// no instantiation of this class // no instantiation of this class
} }
static boolean isEcAvailable() { synchronized static boolean isEcAvailable() {
if (ecAvailable == null) { if (ecAvailable == null) {
try { try {
JsseJce.getSignature(SIGNATURE_ECDSA); JsseJce.getSignature(SIGNATURE_ECDSA);
...@@ -206,7 +206,7 @@ final class JsseJce { ...@@ -206,7 +206,7 @@ final class JsseJce {
return ecAvailable; return ecAvailable;
} }
static void clearEcAvailable() { synchronized static void clearEcAvailable() {
ecAvailable = null; ecAvailable = null;
} }
......
...@@ -2889,10 +2889,6 @@ public class BidiBase { ...@@ -2889,10 +2889,6 @@ public class BidiBase {
verifyValidPara(); verifyValidPara();
verifyRange(start, 0, limit); verifyRange(start, 0, limit);
verifyRange(limit, 0, length+1); verifyRange(limit, 0, length+1);
if (getParagraphIndex(start) != getParagraphIndex(limit - 1)) {
/* the line crosses a paragraph boundary */
throw new IllegalArgumentException();
}
return BidiLine.setLine(bidi, this, newBidi, newBidiBase, start, limit); return BidiLine.setLine(bidi, this, newBidi, newBidiBase, start, limit);
} }
......
...@@ -27,17 +27,7 @@ ...@@ -27,17 +27,7 @@
*/ */
/* /*
* IBM Confidential * (C) Copyright IBM Corp. 1999 All Rights Reserved.
* OCO Source Materials
*
* IBM Java(tm)2 SDK, Standard Edition, v 1.2
*
* (C) Copyright IBM Corp. 1999
*
* The source code for this program is not published or otherwise divested of
* its trade secrets, irrespective of what has been deposited with the U.S.
* Copyright office.
*
*/ */
/* /*
......
...@@ -48,7 +48,7 @@ enum { ...@@ -48,7 +48,7 @@ enum {
JMM_VERSION_1_0 = 0x20010000, JMM_VERSION_1_0 = 0x20010000,
JMM_VERSION_1_1 = 0x20010100, // JDK 6 JMM_VERSION_1_1 = 0x20010100, // JDK 6
JMM_VERSION_1_2 = 0x20010200, // JDK 7 JMM_VERSION_1_2 = 0x20010200, // JDK 7
JMM_VERSION = 0x20010200 JMM_VERSION = 0x20010201
}; };
typedef struct { typedef struct {
...@@ -293,6 +293,9 @@ typedef struct jmmInterface_1_ { ...@@ -293,6 +293,9 @@ typedef struct jmmInterface_1_ {
jlongArray ids, jlongArray ids,
jboolean lockedMonitors, jboolean lockedMonitors,
jboolean lockedSynchronizers); jboolean lockedSynchronizers);
void (JNICALL *SetGCNotificationEnabled) (JNIEnv *env,
jobject mgr,
jboolean enabled);
} JmmInterface; } JmmInterface;
#ifdef __cplusplus #ifdef __cplusplus
......
/* /*
* Copyright (c) 2003, 2004, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -36,3 +36,17 @@ JNIEXPORT jlong JNICALL Java_sun_management_GarbageCollectorImpl_getCollectionTi ...@@ -36,3 +36,17 @@ JNIEXPORT jlong JNICALL Java_sun_management_GarbageCollectorImpl_getCollectionTi
(JNIEnv *env, jobject mgr) { (JNIEnv *env, jobject mgr) {
return jmm_interface->GetLongAttribute(env, mgr, JMM_GC_TIME_MS); return jmm_interface->GetLongAttribute(env, mgr, JMM_GC_TIME_MS);
} }
JNIEXPORT void JNICALL Java_sun_management_GarbageCollectorImpl_setNotificationEnabled
(JNIEnv *env, jobject dummy, jobject gc,jboolean enabled) {
if (gc == NULL) {
JNU_ThrowNullPointerException(env, "Invalid GarbageCollectorMBean");
return;
}
if((jmm_version > JMM_VERSION_1_2)
|| (jmm_version == JMM_VERSION_1_2 && ((jmm_version&0xFF)>=1))) {
jmm_interface->SetGCNotificationEnabled(env, gc, enabled);
}
}
...@@ -95,6 +95,13 @@ Java_sun_management_VMManagementImpl_initOptionalSupportFields ...@@ -95,6 +95,13 @@ Java_sun_management_VMManagementImpl_initOptionalSupportFields
value = mos.isThreadAllocatedMemorySupported; value = mos.isThreadAllocatedMemorySupported;
setStaticBooleanField(env, cls, "threadAllocatedMemorySupport", value); setStaticBooleanField(env, cls, "threadAllocatedMemorySupport", value);
if ((jmm_version > JMM_VERSION_1_2) ||
(jmm_version == JMM_VERSION_1_2 && ((jmm_version&0xFF) >= 1))) {
setStaticBooleanField(env, cls, "gcNotificationSupport", JNI_TRUE);
} else {
setStaticBooleanField(env, cls, "gcNotificationSupport", JNI_FALSE);
}
} }
JNIEXPORT jobjectArray JNICALL JNIEXPORT jobjectArray JNICALL
......
...@@ -63,7 +63,7 @@ int main(int argc, const char* argv[]) { ...@@ -63,7 +63,7 @@ int main(int argc, const char* argv[]) {
out("// AUTOMATICALLY GENERATED FILE - DO NOT EDIT "); out("// AUTOMATICALLY GENERATED FILE - DO NOT EDIT ");
out("package sun.nio.ch; "); out("package sun.nio.ch; ");
out("import java.net.SocketOption; "); out("import java.net.SocketOption; ");
out("import java.net.StandardSocketOption; "); out("import java.net.StandardSocketOptions; ");
out("import java.net.ProtocolFamily; "); out("import java.net.ProtocolFamily; ");
out("import java.net.StandardProtocolFamily; "); out("import java.net.StandardProtocolFamily; ");
out("import java.util.Map; "); out("import java.util.Map; ");
...@@ -95,23 +95,23 @@ int main(int argc, const char* argv[]) { ...@@ -95,23 +95,23 @@ int main(int argc, const char* argv[]) {
out(" Map<RegistryKey,OptionKey> map = "); out(" Map<RegistryKey,OptionKey> map = ");
out(" new HashMap<RegistryKey,OptionKey>(); "); out(" new HashMap<RegistryKey,OptionKey>(); ");
emit_unspec("StandardSocketOption.SO_BROADCAST", SOL_SOCKET, SO_BROADCAST); emit_unspec("StandardSocketOptions.SO_BROADCAST", SOL_SOCKET, SO_BROADCAST);
emit_unspec("StandardSocketOption.SO_KEEPALIVE", SOL_SOCKET, SO_KEEPALIVE); emit_unspec("StandardSocketOptions.SO_KEEPALIVE", SOL_SOCKET, SO_KEEPALIVE);
emit_unspec("StandardSocketOption.SO_LINGER", SOL_SOCKET, SO_LINGER); emit_unspec("StandardSocketOptions.SO_LINGER", SOL_SOCKET, SO_LINGER);
emit_unspec("StandardSocketOption.SO_SNDBUF", SOL_SOCKET, SO_SNDBUF); emit_unspec("StandardSocketOptions.SO_SNDBUF", SOL_SOCKET, SO_SNDBUF);
emit_unspec("StandardSocketOption.SO_RCVBUF", SOL_SOCKET, SO_RCVBUF); emit_unspec("StandardSocketOptions.SO_RCVBUF", SOL_SOCKET, SO_RCVBUF);
emit_unspec("StandardSocketOption.SO_REUSEADDR", SOL_SOCKET, SO_REUSEADDR); emit_unspec("StandardSocketOptions.SO_REUSEADDR", SOL_SOCKET, SO_REUSEADDR);
emit_unspec("StandardSocketOption.TCP_NODELAY", IPPROTO_TCP, TCP_NODELAY); emit_unspec("StandardSocketOptions.TCP_NODELAY", IPPROTO_TCP, TCP_NODELAY);
emit_inet("StandardSocketOption.IP_TOS", IPPROTO_IP, IP_TOS); emit_inet("StandardSocketOptions.IP_TOS", IPPROTO_IP, IP_TOS);
emit_inet("StandardSocketOption.IP_MULTICAST_IF", IPPROTO_IP, IP_MULTICAST_IF); emit_inet("StandardSocketOptions.IP_MULTICAST_IF", IPPROTO_IP, IP_MULTICAST_IF);
emit_inet("StandardSocketOption.IP_MULTICAST_TTL", IPPROTO_IP, IP_MULTICAST_TTL); emit_inet("StandardSocketOptions.IP_MULTICAST_TTL", IPPROTO_IP, IP_MULTICAST_TTL);
emit_inet("StandardSocketOption.IP_MULTICAST_LOOP", IPPROTO_IP, IP_MULTICAST_LOOP); emit_inet("StandardSocketOptions.IP_MULTICAST_LOOP", IPPROTO_IP, IP_MULTICAST_LOOP);
#ifdef AF_INET6 #ifdef AF_INET6
emit_inet6("StandardSocketOption.IP_MULTICAST_IF", IPPROTO_IPV6, IPV6_MULTICAST_IF); emit_inet6("StandardSocketOptions.IP_MULTICAST_IF", IPPROTO_IPV6, IPV6_MULTICAST_IF);
emit_inet6("StandardSocketOption.IP_MULTICAST_TTL", IPPROTO_IPV6, IPV6_MULTICAST_HOPS); emit_inet6("StandardSocketOptions.IP_MULTICAST_TTL", IPPROTO_IPV6, IPV6_MULTICAST_HOPS);
emit_inet6("StandardSocketOption.IP_MULTICAST_LOOP", IPPROTO_IPV6, IPV6_MULTICAST_LOOP); emit_inet6("StandardSocketOptions.IP_MULTICAST_LOOP", IPPROTO_IPV6, IPV6_MULTICAST_LOOP);
#endif #endif
emit_unspec("ExtendedSocketOption.SO_OOBINLINE", SOL_SOCKET, SO_OOBINLINE); emit_unspec("ExtendedSocketOption.SO_OOBINLINE", SOL_SOCKET, SO_OOBINLINE);
......
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
import java.io.IOException; import java.io.IOException;
import java.net.InetSocketAddress; import java.net.InetSocketAddress;
import java.net.SocketAddress; import java.net.SocketAddress;
import java.net.StandardSocketOption; import java.net.StandardSocketOptions;
import java.nio.channels.*; import java.nio.channels.*;
import java.util.*; import java.util.*;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
...@@ -105,7 +105,7 @@ public class ChatServer implements Runnable { ...@@ -105,7 +105,7 @@ public class ChatServer implements Runnable {
*/ */
private AsynchronousServerSocketChannel createListener(AsynchronousChannelGroup channelGroup) throws IOException { private AsynchronousServerSocketChannel createListener(AsynchronousChannelGroup channelGroup) throws IOException {
final AsynchronousServerSocketChannel listener = openChannel(channelGroup); final AsynchronousServerSocketChannel listener = openChannel(channelGroup);
listener.setOption(StandardSocketOption.SO_REUSEADDR, true); listener.setOption(StandardSocketOptions.SO_REUSEADDR, true);
listener.bind(new InetSocketAddress(port)); listener.bind(new InetSocketAddress(port));
return listener; return listener;
} }
...@@ -123,7 +123,7 @@ public class ChatServer implements Runnable { ...@@ -123,7 +123,7 @@ public class ChatServer implements Runnable {
private void handleNewConnection(AsynchronousSocketChannel channel) { private void handleNewConnection(AsynchronousSocketChannel channel) {
Client client = new Client(channel, new ClientReader(this, new NameReader(this))); Client client = new Client(channel, new ClientReader(this, new NameReader(this)));
try { try {
channel.setOption(StandardSocketOption.TCP_NODELAY, true); channel.setOption(StandardSocketOptions.TCP_NODELAY, true);
} catch (IOException e) { } catch (IOException e) {
// ignore // ignore
} }
......
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
*/ */
import java.nio.file.*; import java.nio.file.*;
import static java.nio.file.StandardWatchEventKind.*; import static java.nio.file.StandardWatchEventKinds.*;
import static java.nio.file.LinkOption.*; import static java.nio.file.LinkOption.*;
import java.nio.file.attribute.*; import java.nio.file.attribute.*;
import java.io.IOException; import java.io.IOException;
......
...@@ -96,7 +96,7 @@ public class Reader { ...@@ -96,7 +96,7 @@ public class Reader {
family = StandardProtocolFamily.INET6; family = StandardProtocolFamily.INET6;
} }
DatagramChannel dc = DatagramChannel.open(family) DatagramChannel dc = DatagramChannel.open(family)
.setOption(StandardSocketOption.SO_REUSEADDR, true) .setOption(StandardSocketOptions.SO_REUSEADDR, true)
.bind(new InetSocketAddress(target.port())); .bind(new InetSocketAddress(target.port()));
if (includeList.isEmpty()) { if (includeList.isEmpty()) {
......
...@@ -59,7 +59,7 @@ public class Sender { ...@@ -59,7 +59,7 @@ public class Sender {
family = StandardProtocolFamily.INET6; family = StandardProtocolFamily.INET6;
DatagramChannel dc = DatagramChannel.open(family).bind(new InetSocketAddress(0)); DatagramChannel dc = DatagramChannel.open(family).bind(new InetSocketAddress(0));
if (target.interf() != null) { if (target.interf() != null) {
dc.setOption(StandardSocketOption.IP_MULTICAST_IF, target.interf()); dc.setOption(StandardSocketOptions.IP_MULTICAST_IF, target.interf());
} }
// send multicast packet // send multicast packet
......
...@@ -48,7 +48,7 @@ class XRobotPeer implements RobotPeer { ...@@ -48,7 +48,7 @@ class XRobotPeer implements RobotPeer {
} }
public void dispose() { public void dispose() {
_dispose(); // does nothing
} }
public void mouseMove(int x, int y) { public void mouseMove(int x, int y) {
...@@ -88,7 +88,6 @@ class XRobotPeer implements RobotPeer { ...@@ -88,7 +88,6 @@ class XRobotPeer implements RobotPeer {
} }
private static native synchronized void setup(int numberOfButtons, int[] buttonDownMasks); private static native synchronized void setup(int numberOfButtons, int[] buttonDownMasks);
private static native synchronized void _dispose();
private static native synchronized void mouseMoveImpl(X11GraphicsConfig xgc, int x, int y); private static native synchronized void mouseMoveImpl(X11GraphicsConfig xgc, int x, int y);
private static native synchronized void mousePressImpl(int buttons); private static native synchronized void mousePressImpl(int buttons);
......
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册