looks fine Stuart Best Lance > On Oct 30, 2017, at 8:29 PM, Stuart Marks <stuart.ma...@oracle.com> wrote: > > Hi all, > > Please review the patch below. I'm sending this for review because it's > expanded considerably beyond the original patch that Christoph had submitted. > I ran a full-text search over the java.base source files looking for "the > the" and "a a" and it found a bunch of additional occurrences that were split > across line breaks. I also fixed up a few other places that I happened to > notice. > > Christoph wrote: >> I wasn't sure about the capitalization change on EventObject. What's the >> rule of thumb in cases where the class does not follow the guidelines for >> docs[1]? Sticking to the overall class scheme or aligning everything? > > Good question. The first rule of styling is to stick with the prevailing > style in the file. In this case, changing just the text of that one @return > tag would have conflicted with the style in use in the rest of the file, even > though that style is arguably incorrect; the rest of the file uses an initial > capital and ends the description with a period (full stop), whereas the > recommended style is to use a noun phrase (a sentence fragment), without an > initial capital, and without a trailing period (since there is no sentence > following). > > However, the file is small, and there were only three or four other places > that needed to be changed in order to bring the file into compliance with the > preferred style, so I just fixed them all. > > > Thanks, > > s'marks > > > > # HG changeset patch > # User smarks > # Date 1509409127 25200 > # Mon Oct 30 17:18:47 2017 -0700 > # Node ID d2823a0c8dfab9e95e5c482794a96864b2592aad > # Parent d87f89c74f54873f273c4fbd8e6d49d7cbf3930b > 8190382: fix small typographic errors in comments > Reviewed-by: XXX > Contributed-by: christoph.dr...@freenet.de > > diff -r d87f89c74f54 -r d2823a0c8dfa > src/java.base/share/classes/java/io/FilePermission.java > --- a/src/java.base/share/classes/java/io/FilePermission.java Mon Oct 30 > 07:06:49 2017 -0700 > +++ b/src/java.base/share/classes/java/io/FilePermission.java Mon Oct 30 > 17:18:47 2017 -0700 > @@ -698,7 +698,7 @@ > if (p2.equals(EMPTY_PATH)) { > return 0; > } else if (p2.getName(0).equals(DOTDOT_PATH)) { > - // "." contains p2 iif p2 has no "..". Since a > + // "." contains p2 iff p2 has no "..". Since > // a normalized path can only have 0 or more > // ".." at the beginning. We only need to look > // at the head. > @@ -711,7 +711,7 @@ > } else if (p2.equals(EMPTY_PATH)) { > int c1 = p1.getNameCount(); > if (!p1.getName(c1 - 1).equals(DOTDOT_PATH)) { > - // "." is inside p1 iif p1 is 1 or more "..". > + // "." is inside p1 iff p1 is 1 or more "..". > // For the same reason above, we only need to > // look at the tail. > return -1; > diff -r d87f89c74f54 -r d2823a0c8dfa > src/java.base/share/classes/java/lang/invoke/MethodHandle.java > --- a/src/java.base/share/classes/java/lang/invoke/MethodHandle.java Mon Oct > 30 07:06:49 2017 -0700 > +++ b/src/java.base/share/classes/java/lang/invoke/MethodHandle.java Mon Oct > 30 17:18:47 2017 -0700 > @@ -765,7 +765,7 @@ > * In every other case, all conversions are applied <em>pairwise</em>, > * which means that each argument or return value is converted to > * exactly one argument or return value (or no return value). > - * The applied conversions are defined by consulting the > + * The applied conversions are defined by consulting > * the corresponding component types of the old and new > * method handle types. > * <p> > diff -r d87f89c74f54 -r d2823a0c8dfa > src/java.base/share/classes/java/lang/invoke/StringConcatFactory.java > --- a/src/java.base/share/classes/java/lang/invoke/StringConcatFactory.java > Mon Oct 30 07:06:49 2017 -0700 > +++ b/src/java.base/share/classes/java/lang/invoke/StringConcatFactory.java > Mon Oct 30 17:18:47 2017 -0700 > @@ -194,7 +194,7 @@ > static { > // In case we need to double-back onto the StringConcatFactory during > this > // static initialization, make sure we have the reasonable defaults > to complete > - // the static initialization properly. After that, actual users > would use the > + // the static initialization properly. After that, actual users > would use > // the proper values we have read from the properties. > STRATEGY = DEFAULT_STRATEGY; > // CACHE_ENABLE = false; // implied > diff -r d87f89c74f54 -r d2823a0c8dfa > src/java.base/share/classes/java/lang/invoke/VarHandle.java > --- a/src/java.base/share/classes/java/lang/invoke/VarHandle.java Mon Oct > 30 07:06:49 2017 -0700 > +++ b/src/java.base/share/classes/java/lang/invoke/VarHandle.java Mon Oct > 30 17:18:47 2017 -0700 > @@ -205,7 +205,7 @@ > * and {@code double} on 32-bit platforms. > * > * <p>Access modes will override any memory ordering effects specified at > - * the declaration site of a variable. For example, a VarHandle accessing a > + * the declaration site of a variable. For example, a VarHandle accessing > * a field using the {@code get} access mode will access the field as > * specified <em>by its access mode</em> even if that field is declared > * {@code volatile}. When mixed access is performed extreme care should be > @@ -423,7 +423,7 @@ > * {@link java.lang.invoke.MethodHandles#varHandleInvoker}. > * > * <h1>Interoperation between VarHandles and Java generics</h1> > - * A VarHandle can be obtained for a variable, such as a a field, which is > + * A VarHandle can be obtained for a variable, such as a field, which is > * declared with Java generic types. As with the Core Reflection API, the > * VarHandle's variable type will be constructed from the erasure of the > * source-level type. When a VarHandle access mode method is invoked, the > diff -r d87f89c74f54 -r d2823a0c8dfa > src/java.base/share/classes/java/net/DatagramSocket.java > --- a/src/java.base/share/classes/java/net/DatagramSocket.java Mon Oct > 30 07:06:49 2017 -0700 > +++ b/src/java.base/share/classes/java/net/DatagramSocket.java Mon Oct > 30 17:18:47 2017 -0700 > @@ -988,7 +988,7 @@ > > /** > * Sets the SO_RCVBUF option to the specified value for this > - * {@code DatagramSocket}. The SO_RCVBUF option is used by the > + * {@code DatagramSocket}. The SO_RCVBUF option is used by > * the network implementation as a hint to size the underlying > * network I/O buffers. The SO_RCVBUF setting may also be used > * by the network implementation to determine the maximum size > diff -r d87f89c74f54 -r d2823a0c8dfa > src/java.base/share/classes/java/net/Inet4Address.java > --- a/src/java.base/share/classes/java/net/Inet4Address.java Mon Oct 30 > 07:06:49 2017 -0700 > +++ b/src/java.base/share/classes/java/net/Inet4Address.java Mon Oct 30 > 17:18:47 2017 -0700 > @@ -143,7 +143,7 @@ > /** > * Prior to 1.4 an InetAddress was created with a family > * based on the platform AF_INET value (usually 2). > - * For compatibility reasons we must therefore write the > + * For compatibility reasons we must therefore write > * the InetAddress with this family. > */ > inet.holder().family = 2; > diff -r d87f89c74f54 -r d2823a0c8dfa > src/java.base/share/classes/java/net/SocketImpl.java > --- a/src/java.base/share/classes/java/net/SocketImpl.java Mon Oct 30 > 07:06:49 2017 -0700 > +++ b/src/java.base/share/classes/java/net/SocketImpl.java Mon Oct 30 > 17:18:47 2017 -0700 > @@ -333,7 +333,7 @@ > * latency, and low latency above short connection time, then it could > * invoke this method with the values {@code (0, 1, 2)}. > * > - * By default, this method does nothing, unless it is overridden in a > + * By default, this method does nothing, unless it is overridden in > * a sub-class. > * > * @param connectionTime > diff -r d87f89c74f54 -r d2823a0c8dfa > src/java.base/share/classes/java/net/SocksSocketImpl.java > --- a/src/java.base/share/classes/java/net/SocksSocketImpl.java Mon Oct > 30 07:06:49 2017 -0700 > +++ b/src/java.base/share/classes/java/net/SocksSocketImpl.java Mon Oct > 30 17:18:47 2017 -0700 > @@ -657,7 +657,7 @@ > > /** > * Sends the Bind request to the SOCKS proxy. In the SOCKS protocol, bind > - * means "accept incoming connection from", so the SocketAddress is the > + * means "accept incoming connection from", so the SocketAddress is > * the one of the host we do accept connection from. > * > * @param saddr the Socket address of the remote host. > diff -r d87f89c74f54 -r d2823a0c8dfa > src/java.base/share/classes/java/net/URLConnection.java > --- a/src/java.base/share/classes/java/net/URLConnection.java Mon Oct 30 > 07:06:49 2017 -0700 > +++ b/src/java.base/share/classes/java/net/URLConnection.java Mon Oct 30 > 17:18:47 2017 -0700 > @@ -785,7 +785,7 @@ > * required to make the connection. By default, this method > * returns {@code java.security.AllPermission}. Subclasses > * should override this method and return the permission > - * that best represents the permission required to make a > + * that best represents the permission required to make > * a connection to the URL. For example, a {@code URLConnection} > * representing a {@code file:} URL would return a > * {@code java.io.FilePermission} object. > diff -r d87f89c74f54 -r d2823a0c8dfa > src/java.base/share/classes/java/nio/channels/AsynchronousFileChannel.java > --- > a/src/java.base/share/classes/java/nio/channels/AsynchronousFileChannel.java > Mon Oct 30 07:06:49 2017 -0700 > +++ > b/src/java.base/share/classes/java/nio/channels/AsynchronousFileChannel.java > Mon Oct 30 17:18:47 2017 -0700 > @@ -165,7 +165,7 @@ > * <tr> > * <th scope="row" > {@link StandardOpenOption#DELETE_ON_CLOSE > DELETE_ON_CLOSE} </th> > * <td> When this option is present then the implementation makes a > - * <em>best effort</em> attempt to delete the file when closed by the > + * <em>best effort</em> attempt to delete the file when closed by > * the {@link #close close} method. If the {@code close} method is not > * invoked then a <em>best effort</em> attempt is made to delete the > file > * when the Java virtual machine terminates. </td> > diff -r d87f89c74f54 -r d2823a0c8dfa > src/java.base/share/classes/java/nio/channels/FileChannel.java > --- a/src/java.base/share/classes/java/nio/channels/FileChannel.java Mon Oct > 30 07:06:49 2017 -0700 > +++ b/src/java.base/share/classes/java/nio/channels/FileChannel.java Mon Oct > 30 17:18:47 2017 -0700 > @@ -216,7 +216,7 @@ > * <tr> > * <th scope="row" > {@link StandardOpenOption#DELETE_ON_CLOSE > DELETE_ON_CLOSE} </th> > * <td> When this option is present then the implementation makes a > - * <em>best effort</em> attempt to delete the file when closed by the > + * <em>best effort</em> attempt to delete the file when closed by > * the {@link #close close} method. If the {@code close} method is not > * invoked then a <em>best effort</em> attempt is made to delete the > file > * when the Java virtual machine terminates. </td> > diff -r d87f89c74f54 -r d2823a0c8dfa > src/java.base/share/classes/java/nio/file/Files.java > --- a/src/java.base/share/classes/java/nio/file/Files.java Mon Oct 30 > 07:06:49 2017 -0700 > +++ b/src/java.base/share/classes/java/nio/file/Files.java Mon Oct 30 > 17:18:47 2017 -0700 > @@ -3301,7 +3301,7 @@ > } > > /** > - * Writes bytes to a file. The {@code options} parameter specifies how > the > + * Writes bytes to a file. The {@code options} parameter specifies how > * the file is created or opened. If no options are present then this > method > * works as if the {@link StandardOpenOption#CREATE CREATE}, {@link > * StandardOpenOption#TRUNCATE_EXISTING TRUNCATE_EXISTING}, and {@link > diff -r d87f89c74f54 -r d2823a0c8dfa > src/java.base/share/classes/java/security/KeyPairGenerator.java > --- a/src/java.base/share/classes/java/security/KeyPairGenerator.java Mon Oct > 30 07:06:49 2017 -0700 > +++ b/src/java.base/share/classes/java/security/KeyPairGenerator.java Mon Oct > 30 17:18:47 2017 -0700 > @@ -84,7 +84,7 @@ > * exists (e.g., so-called <i>community parameters</i> in DSA), there are two > * {@link #initialize(java.security.spec.AlgorithmParameterSpec) > * initialize} methods that have an {@code AlgorithmParameterSpec} > - * argument. One also has a {@code SecureRandom} argument, while the > + * argument. One also has a {@code SecureRandom} argument, while > * the other uses the {@code SecureRandom} > * implementation of the highest-priority installed provider as the source > * of randomness. (If none of the installed providers supply an implementation > diff -r d87f89c74f54 -r d2823a0c8dfa > src/java.base/share/classes/java/time/format/DateTimeFormatterBuilder.java > --- > a/src/java.base/share/classes/java/time/format/DateTimeFormatterBuilder.java > Mon Oct 30 07:06:49 2017 -0700 > +++ > b/src/java.base/share/classes/java/time/format/DateTimeFormatterBuilder.java > Mon Oct 30 17:18:47 2017 -0700 > @@ -4775,7 +4775,7 @@ > //----------------------------------------------------------------------- > /** > * Prints or parses a localized pattern from a localized field. > - * The specific formatter and parameters is not selected until the > + * The specific formatter and parameters is not selected until > * the field is to be printed or parsed. > * The locale is needed to select the proper WeekFields from which > * the field for day-of-week, week-of-month, or week-of-year is selected. > diff -r d87f89c74f54 -r d2823a0c8dfa > src/java.base/share/classes/java/time/temporal/WeekFields.java > --- a/src/java.base/share/classes/java/time/temporal/WeekFields.java Mon Oct > 30 07:06:49 2017 -0700 > +++ b/src/java.base/share/classes/java/time/temporal/WeekFields.java Mon Oct > 30 17:18:47 2017 -0700 > @@ -311,7 +311,7 @@ > * the new month or year. > * <p> > * WeekFields instances are singletons; for each unique combination > - * of {@code firstDayOfWeek} and {@code minimalDaysInFirstWeek} the > + * of {@code firstDayOfWeek} and {@code minimalDaysInFirstWeek} > * the same instance will be returned. > * > * @param firstDayOfWeek the first day of the week, not null > diff -r d87f89c74f54 -r d2823a0c8dfa > src/java.base/share/classes/java/util/Base64.java > --- a/src/java.base/share/classes/java/util/Base64.java Mon Oct 30 > 07:06:49 2017 -0700 > +++ b/src/java.base/share/classes/java/util/Base64.java Mon Oct 30 > 17:18:47 2017 -0700 > @@ -56,7 +56,7 @@ > * base64 alphabet.</p></li> > * > * <li><a id="mime"><b>MIME</b></a> > - * <p> Uses the "The Base64 Alphabet" as specified in Table 1 of > + * <p> Uses "The Base64 Alphabet" as specified in Table 1 of > * RFC 2045 for encoding and decoding operation. The encoded output > * must be represented in lines of no more than 76 characters each > * and uses a carriage return {@code '\r'} followed immediately by > diff -r d87f89c74f54 -r d2823a0c8dfa > src/java.base/share/classes/java/util/EventObject.java > --- a/src/java.base/share/classes/java/util/EventObject.java Mon Oct 30 > 07:06:49 2017 -0700 > +++ b/src/java.base/share/classes/java/util/EventObject.java Mon Oct 30 > 17:18:47 2017 -0700 > @@ -43,13 +43,13 @@ > /** > * The object on which the Event initially occurred. > */ > - protected transient Object source; > + protected transient Object source; > > /** > * Constructs a prototypical Event. > * > - * @param source The object on which the Event initially occurred. > - * @exception IllegalArgumentException if source is null. > + * @param source the object on which the Event initially occurred > + * @throws IllegalArgumentException if source is null > */ > public EventObject(Object source) { > if (source == null) > @@ -61,7 +61,7 @@ > /** > * The object on which the Event initially occurred. > * > - * @return The object on which the Event initially occurred. > + * @return the object on which the Event initially occurred > */ > public Object getSource() { > return source; > @@ -70,7 +70,7 @@ > /** > * Returns a String representation of this EventObject. > * > - * @return A a String representation of this EventObject. > + * @return a String representation of this EventObject > */ > public String toString() { > return getClass().getName() + "[source=" + source + "]"; > diff -r d87f89c74f54 -r d2823a0c8dfa > src/java.base/share/classes/java/util/FormattableFlags.java > --- a/src/java.base/share/classes/java/util/FormattableFlags.java Mon Oct > 30 07:06:49 2017 -0700 > +++ b/src/java.base/share/classes/java/util/FormattableFlags.java Mon Oct > 30 17:18:47 2017 -0700 > @@ -26,7 +26,7 @@ > package java.util; > > /** > - * FomattableFlags are passed to the {@link Formattable#formatTo > + * FormattableFlags are passed to the {@link Formattable#formatTo > * Formattable.formatTo()} method and modify the output format for {@linkplain > * Formattable Formattables}. Implementations of {@link Formattable} are > * responsible for interpreting and validating any flags. > diff -r d87f89c74f54 -r d2823a0c8dfa > src/java.base/share/classes/java/util/ResourceBundle.java > --- a/src/java.base/share/classes/java/util/ResourceBundle.java Mon Oct > 30 07:06:49 2017 -0700 > +++ b/src/java.base/share/classes/java/util/ResourceBundle.java Mon Oct > 30 17:18:47 2017 -0700 > @@ -2743,7 +2743,7 @@ > * of multiple subtags separated by underscore, generate candidate > * <code>Locale</code>s by omitting the variant subtags one by one, > then > * insert them after every occurrence of <code> Locale</code>s with > the > - * full variant value in the original list. For example, if the > + * full variant value in the original list. For example, if > * the variant consists of two subtags <em>V1</em> and <em>V2</em>: > * > * <ul> > diff -r d87f89c74f54 -r d2823a0c8dfa > src/java.base/share/classes/jdk/internal/logger/BootstrapLogger.java > --- a/src/java.base/share/classes/jdk/internal/logger/BootstrapLogger.java > Mon Oct 30 07:06:49 2017 -0700 > +++ b/src/java.base/share/classes/jdk/internal/logger/BootstrapLogger.java > Mon Oct 30 17:18:47 2017 -0700 > @@ -238,7 +238,7 @@ > // This way we could simply do things like: > // push((logger) -> logger.log(level, msg)); > // Unfortunately, if we come to here it means we are in the bootsraping > - // phase where using lambdas is not safe yet - so we have to use a > + // phase where using lambdas is not safe yet - so we have to use > // a data object instead... > // > static final class LogEvent { > diff -r d87f89c74f54 -r d2823a0c8dfa > src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java > --- > a/src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java > Mon Oct 30 07:06:49 2017 -0700 > +++ > b/src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java > Mon Oct 30 17:18:47 2017 -0700 > @@ -2888,7 +2888,7 @@ > /* > * If we have an input stream this means we received a response > * from the server. That stream may have been read to EOF and > - * dependening on the stream type may already be closed or the > + * depending on the stream type may already be closed or > * the http client may be returned to the keep-alive cache. > * If the http client has been returned to the keep-alive cache > * it may be closed (idle timeout) or may be allocated to > diff -r d87f89c74f54 -r d2823a0c8dfa > src/java.base/share/classes/sun/reflect/generics/reflectiveObjects/ParameterizedTypeImpl.java > --- > a/src/java.base/share/classes/sun/reflect/generics/reflectiveObjects/ParameterizedTypeImpl.java > Mon Oct 30 07:06:49 2017 -0700 > +++ > b/src/java.base/share/classes/sun/reflect/generics/reflectiveObjects/ParameterizedTypeImpl.java > Mon Oct 30 17:18:47 2017 -0700 > @@ -66,7 +66,7 @@ > /** > * Static factory. Given a (generic) class, actual type arguments > * and an owner type, creates a parameterized type. > - * This class can be instantiated with a a raw type that does not > + * This class can be instantiated with a raw type that does not > * represent a generic type, provided the list of actual type > * arguments is empty. > * If the ownerType argument is null, the declaring class of the > diff -r d87f89c74f54 -r d2823a0c8dfa > src/java.base/share/classes/sun/security/provider/AuthPolicyFile.java > --- a/src/java.base/share/classes/sun/security/provider/AuthPolicyFile.java > Mon Oct 30 07:06:49 2017 -0700 > +++ b/src/java.base/share/classes/sun/security/provider/AuthPolicyFile.java > Mon Oct 30 17:18:47 2017 -0700 > @@ -411,7 +411,7 @@ > certs = null; > } > > - // only add if we had no signer or we had a > + // only add if we had no signer or we had > // a signer and found the keys for it. > if (certs != null || pe.signedBy == null) { > Permission perm = new UnresolvedPermission( > diff -r d87f89c74f54 -r d2823a0c8dfa > src/java.base/share/classes/sun/security/provider/PolicyFile.java > --- a/src/java.base/share/classes/sun/security/provider/PolicyFile.java > Mon Oct 30 07:06:49 2017 -0700 > +++ b/src/java.base/share/classes/sun/security/provider/PolicyFile.java > Mon Oct 30 17:18:47 2017 -0700 > @@ -789,7 +789,7 @@ > certs = null; > } > > - // only add if we had no signer or we had a > + // only add if we had no signer or we had > // a signer and found the keys for it. > if (certs != null || pe.signedBy == null) { > Permission perm = new UnresolvedPermission( > diff -r d87f89c74f54 -r d2823a0c8dfa > src/java.base/share/classes/sun/security/provider/SubjectCodeSource.java > --- > a/src/java.base/share/classes/sun/security/provider/SubjectCodeSource.java > Mon Oct 30 07:06:49 2017 -0700 > +++ > b/src/java.base/share/classes/sun/security/provider/SubjectCodeSource.java > Mon Oct 30 17:18:47 2017 -0700 > @@ -154,7 +154,7 @@ > * > * @param codesource the <code>CodeSource</code> to compare against. > * > - * @return true if this <code>SubjectCodeSource</code> implies the > + * @return true if this <code>SubjectCodeSource</code> implies > * the specified <code>CodeSource</code>. > */ > public boolean implies(CodeSource codesource) { > diff -r d87f89c74f54 -r d2823a0c8dfa > src/java.base/share/classes/sun/security/ssl/DTLSInputRecord.java > --- a/src/java.base/share/classes/sun/security/ssl/DTLSInputRecord.java > Mon Oct 30 07:06:49 2017 -0700 > +++ b/src/java.base/share/classes/sun/security/ssl/DTLSInputRecord.java > Mon Oct 30 17:18:47 2017 -0700 > @@ -539,7 +539,7 @@ > > // Should be repacked for suitable fragment length. > // > - // Note that the acquiring processes will reassemble the > + // Note that the acquiring processes will reassemble > // the fragments later. > return compareToSequence(o.recordEpoch, o.recordSeq); > } > diff -r d87f89c74f54 -r d2823a0c8dfa > src/java.base/share/classes/sun/security/x509/X509CertImpl.java > --- a/src/java.base/share/classes/sun/security/x509/X509CertImpl.java Mon Oct > 30 07:06:49 2017 -0700 > +++ b/src/java.base/share/classes/sun/security/x509/X509CertImpl.java Mon Oct > 30 17:18:47 2017 -0700 > @@ -1485,7 +1485,7 @@ > } > > /** > - * Get the certificate constraints path length from the > + * Get the certificate constraints path length from > * the critical BasicConstraints extension, (oid = 2.5.29.19). > * @return the length of the constraint. > */ > diff -r d87f89c74f54 -r d2823a0c8dfa > src/java.base/share/classes/sun/util/logging/PlatformLogger.java > --- a/src/java.base/share/classes/sun/util/logging/PlatformLogger.java > Mon Oct 30 07:06:49 2017 -0700 > +++ b/src/java.base/share/classes/sun/util/logging/PlatformLogger.java > Mon Oct 30 17:18:47 2017 -0700 > @@ -45,7 +45,7 @@ > * > * If the logging facility is not enabled, the platform loggers > * will output log messages per the default logging configuration > - * (see below). In this implementation, it does not log the > + * (see below). In this implementation, it does not log > * the stack frame information issuing the log message. > * > * When the logging facility is enabled (at startup or runtime), >
<http://oracle.com/us/design/oracle-email-sig-198324.gif> <http://oracle.com/us/design/oracle-email-sig-198324.gif> <http://oracle.com/us/design/oracle-email-sig-198324.gif> <http://oracle.com/us/design/oracle-email-sig-198324.gif>Lance Andersen| Principal Member of Technical Staff | +1.781.442.2037 Oracle Java Engineering 1 Network Drive Burlington, MA 01803 lance.ander...@oracle.com <mailto:lance.ander...@oracle.com>