Code review request for 6857789: (reflect) Create common superclass of reflective exceptions
Martin Buchholz
martinrb at google.com
Thu Jul 9 23:16:59 UTC 2009
Thanks for this; I had a chance to use it in the past week,
if it had been there.
-----
typo
+ * Conqstructs a new exception with {@code null} as its detail
-----
Start paragraphs on new lines.
+ * and cause. <p>Note that the detail message associated with
-----
Otherwise, looks good!
Martin
On Thu, Jul 9, 2009 at 15:47, Joseph D. Darcy <Joe.Darcy at sun.com> wrote:
> Hello.
>
> Please review the patch below to fix
>
> 6857789: (reflect) Create common superclass of reflective exceptions
>
> Half a dozen checked exceptions thrown by methods in core reflection don't
> have a superclass more specific than Exception, requiring multiple catch
> blocks around code using core reflection operations. The fix is to change
> the direct superclass of the checked exceptions in question to a new shared
> checked exception, java.lang.ReflectiveOperationException. This is useful
> whether or not multi-catch is added as a language change in JDK 7.
>
> Inserting a new level into the superclass hierarchy is a binary compatible
> change (JLSv3 Chapter 13); the change should be transparent other than to
> reflective operations that specifically queried the superclass. All the
> exception classes in question already have explicit serialVersionUID fields
> so changing the superclass will be compatible from a serialization
> perspective too.
>
> (A ccc request for this change is in progress too.)
>
> Thanks,
>
> -Joe
>
>
> --- old/src/share/classes/java/lang/ClassNotFoundException.java
> 2009-07-09 14:38:05.000000000 -0700
> +++ new/src/share/classes/java/lang/ClassNotFoundException.java
> 2009-07-09 14:38:05.000000000 -0700
> @@ -50,7 +50,7 @@
> * @see java.lang.ClassLoader#loadClass(java.lang.String, boolean)
> * @since JDK1.0
> */
> -public class ClassNotFoundException extends Exception {
> +public class ClassNotFoundException extends ReflectiveOperationException {
> /**
> * use serialVersionUID from JDK 1.1.X for interoperability
> */
> --- old/src/share/classes/java/lang/IllegalAccessException.java
> 2009-07-09 14:38:06.000000000 -0700
> +++ new/src/share/classes/java/lang/IllegalAccessException.java
> 2009-07-09 14:38:06.000000000 -0700
> @@ -56,7 +56,7 @@
> * @see java.lang.reflect.Constructor#newInstance(Object[])
> * @since JDK1.0
> */
> -public class IllegalAccessException extends Exception {
> +public class IllegalAccessException extends ReflectiveOperationException {
> private static final long serialVersionUID = 6616958222490762034L;
>
> /**
> --- old/src/share/classes/java/lang/InstantiationException.java
> 2009-07-09 14:38:06.000000000 -0700
> +++ new/src/share/classes/java/lang/InstantiationException.java
> 2009-07-09 14:38:06.000000000 -0700
> @@ -43,7 +43,7 @@
> * @since JDK1.0
> */
> public
> -class InstantiationException extends Exception {
> +class InstantiationException extends ReflectiveOperationException {
> private static final long serialVersionUID = -8441929162975509110L;
>
> /**
> --- old/src/share/classes/java/lang/NoSuchFieldException.java 2009-07-09
> 14:38:07.000000000 -0700
> +++ new/src/share/classes/java/lang/NoSuchFieldException.java 2009-07-09
> 14:38:07.000000000 -0700
> @@ -31,7 +31,7 @@
> * @author unascribed
> * @since JDK1.1
> */
> -public class NoSuchFieldException extends Exception {
> +public class NoSuchFieldException extends ReflectiveOperationException {
> private static final long serialVersionUID = -6143714805279938260L;
>
> /**
> --- old/src/share/classes/java/lang/NoSuchMethodException.java
> 2009-07-09 14:38:08.000000000 -0700
> +++ new/src/share/classes/java/lang/NoSuchMethodException.java
> 2009-07-09 14:38:07.000000000 -0700
> @@ -32,7 +32,7 @@
> * @since JDK1.0
> */
> public
> -class NoSuchMethodException extends Exception {
> +class NoSuchMethodException extends ReflectiveOperationException {
> private static final long serialVersionUID = 5034388446362600923L;
>
> /**
> --- old/src/share/classes/java/lang/reflect/InvocationTargetException.java
> 2009-07-09 14:38:08.000000000 -0700
> +++ new/src/share/classes/java/lang/reflect/InvocationTargetException.java
> 2009-07-09 14:38:08.000000000 -0700
> @@ -39,7 +39,7 @@
> * @see Method
> * @see Constructor
> */
> -public class InvocationTargetException extends Exception {
> +public class InvocationTargetException extends
> ReflectiveOperationException {
> /**
> * Use serialVersionUID from JDK 1.1.X for interoperability
> */
> --- /dev/null 2009-07-06 20:02:10.000000000 -0700
> +++ new/src/share/classes/java/lang/ReflectiveOperationException.java
> 2009-07-09 14:38:09.000000000 -0700
> @@ -0,0 +1,88 @@
> +/*
> + * Copyright 2009 Sun Microsystems, Inc. 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. Sun designates this
> + * particular file as subject to the "Classpath" exception as provided
> + * by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa
> Clara,
> + * CA 95054 USA or visit www.sun.com if you need additional information
> or
> + * have any questions.
> + */
> +
> +package java.lang;
> +
> +/**
> + * Common superclass of exceptions thrown by reflective operations in
> + * core reflection.
> + *
> + * @since 1.7
> + */
> +public class ReflectiveOperationException extends Exception {
> + static final long serialVersionUID = 123456789L;
> +
> + /**
> + * Conqstructs a new exception with {@code null} as its detail
> + * message. The cause is not initialized, and may subsequently be
> + * initialized by a call to {@link #initCause}.
> + */
> + public ReflectiveOperationException() {
> + super();
> + }
> +
> + /**
> + * Constructs a new exception with the specified detail message.
> + * The cause is not initialized, and may subsequently be
> + * initialized by a call to {@link #initCause}.
> + *
> + * @param message the detail message. The detail message is saved
> for
> + * later retrieval by the {@link #getMessage()} method.
> + */
> + public ReflectiveOperationException(String message) {
> + super(message);
> + }
> +
> + /**
> + * Constructs a new exception with the specified detail message
> + * and cause. <p>Note that the detail message associated with
> + * {@code cause} is <em>not</em> automatically incorporated in
> + * this exception's detail message.
> + *
> + * @param message the detail message (which is saved for later
> retrieval
> + * by the {@link #getMessage()} method).
> + * @param cause the cause (which is saved for later retrieval by the
> + * {@link #getCause()} method). (A {@code null} value is
> + * permitted, and indicates that the cause is nonexistent or
> + * unknown.)
> + */
> + public ReflectiveOperationException(String message, Throwable cause) {
> + super(message, cause);
> + }
> +
> + /**
> + * Constructs a new exception with the specified cause and a detail
> + * message of {@code (cause==null ? null : cause.toString())} (which
> + * typically contains the class and detail message of {@code cause}).
> + *
> + * @param cause the cause (which is saved for later retrieval by the
> + * {@link #getCause()} method). (A {@code null} value is
> + * permitted, and indicates that the cause is nonexistent or
> + * unknown.)
> + */
> + public ReflectiveOperationException(Throwable cause) {
> + super(cause);
> + }
> +}
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/core-libs-dev/attachments/20090709/9184ff61/attachment.html>
More information about the core-libs-dev
mailing list