Fixed, http://cr.openjdk.java.net/~jfranck/8022343/webrev.02/
cheers /Joel On Aug 23, 2013, at 2:34 AM, Joseph Darcy <joe.da...@oracle.com> wrote: > Hi Joel, > > The new version is better, but for the testing in question I would prefer to > see something even simpler like: > > public static void main(String[] args) throws Exception { > int failed = 0; > Class<?>[] testData = {/* list of class literals*/} > for (Class<?> toTest: testData) { > Object res = toTest.getAnnotatedSuperclass(); > > if (res != null) { > failed++; > System.out.println(toTest + ".getAnnotatedSuperclass() > returns: " > + res + ", was non-null"); > } > } > > if (failed != 0) > throw new RuntimeException("Test failed, check log for details"); > } > > > -Joe > > On 8/21/2013 5:04 AM, Joel Borggrén-Franck wrote: >> Hi Joe, Paul >> >> I rewrote the test in Paul's style without using testNG. >> >> http://cr.openjdk.java.net/~jfranck/8022343/webrev.01/ >> >> Please review. >> >> cheers >> /Joel >> >> On 2013-08-19, Joe Darcy wrote: >>> Hi Joel, >>> >>> I agree the code looks fine. >>> >>> However, I concur with the general sentiment of Paul test advice >>> without advocating using testng for this task. >>> >>> A loop over a Class<?>[] initialized with the kinds of values of >>> interest would seem to be better structured to me and allow for >>> better exception handing, etc. >>> >>> -Joe >>> >>> On 08/19/2013 01:34 AM, Paul Sandoz wrote: >>>> Hi Joel, >>>> >>>> The fix looks OK. >>>> >>>> Not suggesting you do the following, unless you really want to, but the >>>> test is an example of where TestNG data providers are useful, since all >>>> cases will be tested and reported for pass or failure, rather than in this >>>> case the first failure will cause other checks (if any) not to be tested >>>> and in addition will not report which check failed (one needs to look at >>>> the stack trace). >>>> >>>> Not tested: >>>> >>>> @DataProvider(name = "class") >>>> private static Object[][] getClasses() { >>>> // Using the stream API because i can :-) >>>> // Arguably simpler in this case to use new Object[][] { {} } >>>> return Stream.of( >>>> Object.class, >>>> If.class, >>>> Object[].class, >>>> void.class, >>>> int.class). >>>> map(e -> new Object[] { e }). >>>> toArray(Object[][]::new); >>>> } >>>> >>>> @Test(dataProvider = "class") >>>> public void testAnnotatedSuperClassIsNull(Class c) { >>>> assertNull(c.getAnnotatedSuperclass()) >>>> } >>>> >>>> Paul. >>>> >>>> On Aug 16, 2013, at 2:17 PM, 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 {} >>>>> +} >>>>> + >