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 {}
> >>+}
> >>+
> 

Reply via email to