8164519: Rendering of supertype_target for annotated extends clause
Eliminate inconsistencies in handling annotated super class. Reviewed-by: jlahoda
This commit is contained in:
parent
18b1c7cd8b
commit
e179ac0384
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:
|
||||
|
65
langtools/test/tools/javac/annotations/typeAnnotations/classfile/AnnotatedExtendsTest.java
Normal file
65
langtools/test/tools/javac/annotations/typeAnnotations/classfile/AnnotatedExtendsTest.java
Normal file
@ -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 })
|
||||
|
Loading…
x
Reference in New Issue
Block a user