Joe, Paul, Vicente, Thanks for the reviews!
cheers /Joel On 16 aug 2013, at 14:17, Joel Borggren-Franck <joel.fra...@oracle.com> wrote: > Hi > > Please review this small fix for a type annotation reflection issue. > > The javadoc spec for Class.getAnnotatedSuperclass says: > > * If this Class represents either the Object class, an interface type, an > * array type, a primitive type, or void, the return value is null. > > The patch fixes this. > > Webrev at: http://cr.openjdk.java.net/~jfranck/8022343/webrew.00/ > > Patch also included it at the end of this mail. > > cheers > /Joel > > > > diff -r b07b19182e40 src/share/classes/java/lang/Class.java > --- a/src/share/classes/java/lang/Class.java Thu Aug 15 15:04:59 2013 +0100 > +++ b/src/share/classes/java/lang/Class.java Fri Aug 16 13:20:31 2013 +0200 > @@ -3338,8 +3338,16 @@ > * @since 1.8 > */ > public AnnotatedType getAnnotatedSuperclass() { > - return > TypeAnnotationParser.buildAnnotatedSuperclass(getRawTypeAnnotations(), > getConstantPool(), this); > -} > + if(this == Object.class || > + isInterface() || > + isArray() || > + isPrimitive() || > + this == Void.TYPE) { > + return null; > + } > + > + return > TypeAnnotationParser.buildAnnotatedSuperclass(getRawTypeAnnotations(), > getConstantPool(), this); > + } > > /** > * Returns an array of AnnotatedType objects that represent the use of > types to > diff -r b07b19182e40 test/java/lang/annotation/TypeAnnotationReflection.java > --- a/test/java/lang/annotation/TypeAnnotationReflection.java Thu Aug 15 > 15:04:59 2013 +0100 > +++ b/test/java/lang/annotation/TypeAnnotationReflection.java Fri Aug 16 > 13:20:31 2013 +0200 > @@ -23,7 +23,7 @@ > > /* > * @test > - * @bug 8004698 8007073 > + * @bug 8004698 8007073 8022343 > * @summary Unit test for type annotations > */ > > @@ -58,7 +58,7 @@ > } > > private static void testSuper() throws Exception { > - check(Object.class.getAnnotatedSuperclass().getAnnotations().length > == 0); > + check(Object.class.getAnnotatedSuperclass() == null); > check(Class.class.getAnnotatedSuperclass().getAnnotations().length == > 0); > > AnnotatedType a; > diff -r b07b19182e40 > test/java/lang/annotation/typeAnnotations/GetAnnotatedSuperclass.java > --- /dev/null Thu Jan 01 00:00:00 1970 +0000 > +++ b/test/java/lang/annotation/typeAnnotations/GetAnnotatedSuperclass.java > Fri Aug 16 13:20:31 2013 +0200 > @@ -0,0 +1,50 @@ > +/* > + * Copyright (c) 2013, 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. > + * > + * 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. > + */ > + > +/* > + * @test > + * @bug 8022343 > + * @summary make sure Class.getAnnotatedSuperclass() returns null when > specified to do so > + */ > + > +import java.util.*; > +import java.lang.annotation.*; > +import java.lang.reflect.*; > +import java.io.Serializable; > + > +public class GetAnnotatedSuperclass { > + public static void main(String[] args) throws Exception { > + check(Object.class.getAnnotatedSuperclass() == null); > + check(If.class.getAnnotatedSuperclass() == null); > + check(Object[].class.getAnnotatedSuperclass() == null); > + check(void.class.getAnnotatedSuperclass() == null); > + check(int.class.getAnnotatedSuperclass() == null); > + } > + > + private static void check(boolean b) { > + if (!b) > + throw new RuntimeException(); > + } > + interface If {} > +} > +