changeset 3667:90dd93e668a5 jdk-9+138

8164519: Rendering of supertype_target for annotated extends clause Summary: Eliminate inconsistencies in handling annotated super class. Reviewed-by: jlahoda
author sadayapalam
date Tue, 27 Sep 2016 04:34:09 +0530
parents 9b0df83fb78c
children e4d1e485cc6e abfa6353574c
files src/jdk.compiler/share/classes/com/sun/tools/javac/code/TypeAnnotationPosition.java src/jdk.jdeps/share/classes/com/sun/tools/classfile/TypeAnnotation.java test/tools/javac/annotations/typeAnnotations/classfile/AnnotatedExtendsTest.java test/tools/javac/annotations/typeAnnotations/referenceinfos/ClassExtends.java
diffstat 4 files changed, 77 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/TypeAnnotationPosition.java	Mon Sep 26 13:39:50 2016 -0700
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/TypeAnnotationPosition.java	Tue Sep 27 04:34:09 2016 +0530
@@ -789,7 +789,7 @@
         classExtends(final List<TypePathEntry> location,
                      final JCLambda onLambda,
                      final int pos) {
-        return classExtends(location, onLambda, -1, pos);
+        return classExtends(location, onLambda, 65535, pos);
     }
 
     /**
@@ -821,7 +821,7 @@
      * @param pos The position from the associated tree node.
      */
     public static TypeAnnotationPosition classExtends(final int pos) {
-        return classExtends(-1, pos);
+        return classExtends(65535, pos);
     }
 
     /**
--- a/src/jdk.jdeps/share/classes/com/sun/tools/classfile/TypeAnnotation.java	Mon Sep 26 13:39:50 2016 -0700
+++ b/src/jdk.jdeps/share/classes/com/sun/tools/classfile/TypeAnnotation.java	Tue Sep 27 04:34:09 2016 +0530
@@ -130,10 +130,7 @@
             break;
         // class extends or implements clause
         case CLASS_EXTENDS:
-            int in = cr.readUnsignedShort();
-            if (in == 0xFFFF)
-                in = -1;
-            position.type_index = in;
+            position.type_index = cr.readUnsignedShort();;
             break;
         // throws
         case THROWS:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/tools/javac/annotations/typeAnnotations/classfile/AnnotatedExtendsTest.java	Tue Sep 27 04:34:09 2016 +0530
@@ -0,0 +1,65 @@
+/*
+ * Copyright (c) 2016, 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 8164519
+ * @summary Verify that javac emits proper super type index (65535) for an annotated extends
+ * @library /tools/lib
+ * @modules jdk.compiler/com.sun.tools.javac.api
+ *          jdk.compiler/com.sun.tools.javac.main
+ *          jdk.jdeps/com.sun.tools.javap
+ * @build toolbox.ToolBox toolbox.JavapTask
+ * @run compile -g AnnotatedExtendsTest.java
+ * @run main AnnotatedExtendsTest
+ */
+
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Target;
+
+import toolbox.JavapTask;
+import toolbox.Task;
+import toolbox.ToolBox;
+
+public class AnnotatedExtendsTest {
+
+    @Target(ElementType.TYPE_USE)
+    public @interface TA {
+    };
+
+    public class Inner extends @TA Object {}
+
+    public static strictfp void main(String args[]) throws Exception {
+        ToolBox tb = new ToolBox();
+        Path classPath = Paths.get(ToolBox.testClasses, "AnnotatedExtendsTest$Inner.class");
+        String javapOut = new JavapTask(tb)
+                .options("-v", "-p")
+                .classes(classPath.toString())
+                .run()
+                .getOutput(Task.OutputKind.DIRECT);
+        if (!javapOut.contains("0: #21(): CLASS_EXTENDS, type_index=65535"))
+            throw new AssertionError("Expected output missing: " + javapOut);
+    }
+}
\ No newline at end of file
--- a/test/tools/javac/annotations/typeAnnotations/referenceinfos/ClassExtends.java	Mon Sep 26 13:39:50 2016 -0700
+++ b/test/tools/javac/annotations/typeAnnotations/referenceinfos/ClassExtends.java	Tue Sep 27 04:34:09 2016 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2016, 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
@@ -25,7 +25,7 @@
 
 /*
  * @test
- * @bug 8042451
+ * @bug 8042451 8164519
  * @summary Test population of reference info for class extends clauses
  * @modules jdk.jdeps/com.sun.tools.classfile
  * @compile -g Driver.java ReferenceInfoUtil.java ClassExtends.java
@@ -33,21 +33,21 @@
  */
 public class ClassExtends {
 
-    @TADescription(annotation = "TA", type = CLASS_EXTENDS, typeIndex = -1)
+    @TADescription(annotation = "TA", type = CLASS_EXTENDS, typeIndex = 65535)
     @TADescription(annotation = "TB", type = CLASS_EXTENDS, typeIndex = 1)
     public String regularClass() {
         return "class %TEST_CLASS_NAME% extends @TA Object implements Cloneable, @TB Runnable {"
                + "  public void run() { } }";
     }
 
-    @TADescription(annotation = "RTAs", type = CLASS_EXTENDS, typeIndex = -1)
+    @TADescription(annotation = "RTAs", type = CLASS_EXTENDS, typeIndex = 65535)
     @TADescription(annotation = "RTBs", type = CLASS_EXTENDS, typeIndex = 1)
     public String regularClassRepeatableAnnotation() {
         return "class %TEST_CLASS_NAME% extends @RTA @RTA Object implements Cloneable, @RTB @RTB Runnable {"
                 + "  public void run() { } }";
     }
 
-    @TADescription(annotation = "TA", type = CLASS_EXTENDS, typeIndex = -1,
+    @TADescription(annotation = "TA", type = CLASS_EXTENDS, typeIndex = 65535,
             genericLocation = { 3, 0 })
     @TADescription(annotation = "TB", type = CLASS_EXTENDS, typeIndex = 1,
             genericLocation  = { 3, 1 })
@@ -55,7 +55,7 @@
         return "class %TEST_CLASS_NAME% extends HashMap<@TA String, String> implements Cloneable, Map<String, @TB String>{ } ";
     }
 
-    @TADescription(annotation = "RTAs", type = CLASS_EXTENDS, typeIndex = -1,
+    @TADescription(annotation = "RTAs", type = CLASS_EXTENDS, typeIndex = 65535,
             genericLocation = { 3, 0 })
     @TADescription(annotation = "RTBs", type = CLASS_EXTENDS, typeIndex = 1,
             genericLocation  = { 3, 1 })
@@ -63,21 +63,21 @@
         return "class %TEST_CLASS_NAME% extends HashMap<@RTA @RTA String, String> implements Cloneable, Map<String, @RTB @RTB String>{ } ";
     }
 
-    @TADescription(annotation = "TA", type = CLASS_EXTENDS, typeIndex = -1)
+    @TADescription(annotation = "TA", type = CLASS_EXTENDS, typeIndex = 65535)
     @TADescription(annotation = "TB", type = CLASS_EXTENDS, typeIndex = 1)
     public String abstractClass() {
         return "abstract class %TEST_CLASS_NAME% extends @TA Date implements Cloneable, @TB Runnable {"
                + "  public void run() { } }";
     }
 
-    @TADescription(annotation = "RTAs", type = CLASS_EXTENDS, typeIndex = -1)
+    @TADescription(annotation = "RTAs", type = CLASS_EXTENDS, typeIndex = 65535)
     @TADescription(annotation = "RTBs", type = CLASS_EXTENDS, typeIndex = 1)
     public String abstractClassRepeatableAnnotation() {
         return "abstract class %TEST_CLASS_NAME% extends @RTA @RTA Date implements Cloneable, @RTB @RTB Runnable {"
                 + "  public void run() { } }";
     }
 
-    @TADescription(annotation = "RTAs", type = CLASS_EXTENDS, typeIndex = -1,
+    @TADescription(annotation = "RTAs", type = CLASS_EXTENDS, typeIndex = 65535,
             genericLocation = { 3, 0 })
     @TADescription(annotation = "RTBs", type = CLASS_EXTENDS, typeIndex = 1,
             genericLocation  = { 3, 1 })