JDK 8 code review request for 6380161 (reflect) Exception from newInstance() not chained to cause.

Lance Andersen - Oracle Lance.Andersen at oracle.com
Mon Aug 8 13:41:31 UTC 2011


Looks fine to me Joe

Best
Lance
On Aug 8, 2011, at 1:24 AM, Joe Darcy wrote:

> Hello.
> 
> Please review this small fix, developed after I went through my open bug list; patch below, webrev at:
> 
>   6380161 (reflect) Exception from newInstance() not chained to cause.
>   http://cr.openjdk.java.net/~darcy/6380161.0/
> 
> Several call to initCause are added to plumb up caused-by exception chains to exception types without constructors taking a cause.  In addition, multi-catch is added in on location.
> 
> I looked for similar issues in Constructor, Method, and Executable, but there weren't any.
> 
> Thanks,
> 
> -Joe
> 
> --- old/src/share/classes/java/lang/Class.java    2011-08-07 22:21:58.000000000 -0700
> +++ new/src/share/classes/java/lang/Class.java    2011-08-07 22:21:58.000000000 -0700
> @@ -349,7 +349,8 @@
>                        });
>                cachedConstructor = c;
>            } catch (NoSuchMethodException e) {
> -                throw new InstantiationException(getName());
> +                throw (InstantiationException)
> +                    new InstantiationException(getName()).initCause(e);
>            }
>        }
>        Constructor<T> tmpConstructor = cachedConstructor;
> @@ -973,7 +974,8 @@
>                descriptor      = (String)   enclosingInfo[2];
>                assert((name != null && descriptor != null) || name == descriptor);
>            } catch (ClassCastException cce) {
> -                throw new InternalError("Invalid type in enclosing method information");
> +                throw (InternalError)
> +                    new InternalError("Invalid type in enclosing method information").initCause(cce);
>            }
>        }
> @@ -1239,7 +1241,8 @@
>        try {
>            return getName().substring(enclosingClass.getName().length());
>        } catch (IndexOutOfBoundsException ex) {
> -            throw new InternalError("Malformed class name");
> +            throw (InternalError)
> +                new InternalError("Malformed class name").initCause(ex);
>        }
>    }
> @@ -2954,9 +2957,8 @@
>            }
>            // These can happen when users concoct enum-like classes
>            // that don't comply with the enum spec.
> -            catch (InvocationTargetException ex) { return null; }
> -            catch (NoSuchMethodException ex) { return null; }
> -            catch (IllegalAccessException ex) { return null; }
> +            catch (InvocationTargetException | NoSuchMethodException |
> +                   IllegalAccessException ex) { return null; }
>        }
>        return enumConstants;
>    }
> 


Lance Andersen| Principal Member of Technical Staff | +1.781.442.2037
Oracle Java Engineering 
1 Network Drive 
Burlington, MA 01803
Lance.Andersen at oracle.com




More information about the core-libs-dev mailing list