8164519: Rendering of supertype_target for annotated extends clause

Eliminate inconsistencies in handling annotated super class.

Reviewed-by: jlahoda
This commit is contained in:
Srikanth Adayapalam 2016-09-27 04:34:09 +05:30
parent 18b1c7cd8b
commit e179ac0384
4 changed files with 77 additions and 15 deletions
langtools
src
jdk.compiler/share/classes/com/sun/tools/javac/code
jdk.jdeps/share/classes/com/sun/tools/classfile
test/tools/javac/annotations/typeAnnotations

@ -789,7 +789,7 @@ public class TypeAnnotationPosition {
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 @@ public class TypeAnnotationPosition {
* @param pos The position from the associated tree node.
*/
public static TypeAnnotationPosition classExtends(final int pos) {
return classExtends(-1, pos);
return classExtends(65535, pos);
}
/**

@ -130,10 +130,7 @@ public class TypeAnnotation {
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:

@ -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);
}
}

@ -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 @@ import static com.sun.tools.classfile.TypeAnnotation.TargetType.*;
/*
* @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 @@ import static com.sun.tools.classfile.TypeAnnotation.TargetType.*;
*/
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 @@ public class ClassExtends {
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 @@ public class ClassExtends {
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 })