mirror of
https://github.com/openjdk/jdk.git
synced 2026-05-11 14:11:36 +00:00
Merge
This commit is contained in:
commit
a4d244c874
@ -0,0 +1,170 @@
|
||||
/*
|
||||
* Copyright (c) 2015, 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 8049238
|
||||
* @summary Checks Signature attribute for constructors.
|
||||
* @library /tools/lib /tools/javac/lib ../lib
|
||||
* @build TestBase TestResult InMemoryFileManager ToolBox
|
||||
* @build ConstructorTest Driver ExpectedSignature ExpectedSignatureContainer
|
||||
* @run main Driver ConstructorTest
|
||||
*/
|
||||
|
||||
import java.lang.ref.ReferenceQueue;
|
||||
import java.util.*;
|
||||
|
||||
@ExpectedSignature(descriptor = "ConstructorTest", signature = "<T:Ljava/lang/Object;>Ljava/lang/Object;")
|
||||
public class ConstructorTest<T> {
|
||||
|
||||
@ExpectedSignature(descriptor = "<init>(java.lang.Object, boolean)", signature = "(TT;Z)V")
|
||||
ConstructorTest(T a, boolean b) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "<init>(java.lang.Object, byte)", signature = "(TT;B)V")
|
||||
ConstructorTest(T a, byte b) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "<init>(java.lang.Object, char)", signature = "(TT;C)V")
|
||||
ConstructorTest(T a, char b) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "<init>(java.lang.Object, short)", signature = "(TT;S)V")
|
||||
ConstructorTest(T a, short b) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "<init>(java.lang.Object, int)", signature = "(TT;I)V")
|
||||
ConstructorTest(T a, int b) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "<init>(java.lang.Object, long)", signature = "(TT;J)V")
|
||||
ConstructorTest(T a, long b) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "<init>(java.lang.Object, float)", signature = "(TT;F)V")
|
||||
ConstructorTest(T a, float b) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "<init>(java.lang.Object, double)", signature = "(TT;D)V")
|
||||
ConstructorTest(T a, double b) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "<init>(java.lang.Object, java.lang.Runnable)", signature = "(TT;Ljava/lang/Runnable;)V")
|
||||
ConstructorTest(T a, Runnable r) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "<init>(java.lang.Object, boolean[])", signature = "(TT;[Z)V")
|
||||
ConstructorTest(T a, boolean[] b) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "<init>(java.lang.Object, byte[])", signature = "(TT;[B)V")
|
||||
ConstructorTest(T a, byte[] b) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "<init>(java.lang.Object, char[])", signature = "(TT;[C)V")
|
||||
ConstructorTest(T a, char[] b) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "<init>(java.lang.Object, short[])", signature = "(TT;[S)V")
|
||||
ConstructorTest(T a, short[] b) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "<init>(java.lang.Object, int[])", signature = "(TT;[I)V")
|
||||
ConstructorTest(T a, int[] b) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "<init>(java.lang.Object, long[])", signature = "(TT;[J)V")
|
||||
ConstructorTest(T a, long[] b) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "<init>(java.lang.Object, float[])", signature = "(TT;[F)V")
|
||||
ConstructorTest(T a, float[] b) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "<init>(java.lang.Object, double[])", signature = "(TT;[D)V")
|
||||
ConstructorTest(T a, double[] b) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "<init>(java.lang.Object, java.lang.Runnable[])", signature = "(TT;[Ljava/lang/Runnable;)V")
|
||||
ConstructorTest(T a, Runnable[] r) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "<init>(java.lang.Object[])", signature = "([TT;)V")
|
||||
ConstructorTest(T[] a) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "<init>(java.lang.Runnable[])",
|
||||
signature = "<T::Ljava/lang/Runnable;>([TT;)V")
|
||||
<T extends Runnable> ConstructorTest(T...a) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "<init>(java.util.Map)", signature = "(Ljava/util/Map<**>;)V")
|
||||
ConstructorTest(Map<?, ?> a) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "<init>(java.lang.Object)", signature = "(TT;)V")
|
||||
ConstructorTest(T a) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "<init>(java.util.Set, java.util.Set)",
|
||||
signature = "<E::Ljava/util/Set<+TT;>;>(TE;TE;)V")
|
||||
<E extends Set<? extends T>> ConstructorTest(E a, E b) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "<init>(java.lang.ref.ReferenceQueue, java.lang.ref.ReferenceQueue)",
|
||||
signature = "<E:Ljava/lang/ref/ReferenceQueue<-TT;>;:Ljava/util/Map<-TT;+TT;>;>(TE;TE;)V")
|
||||
<E extends ReferenceQueue<? super T> & Map<? super T, ? extends T>> ConstructorTest(E a, E b) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "<init>(java.util.List)", signature = "(Ljava/util/List<+TT;>;)V")
|
||||
ConstructorTest(List<? extends T> b) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "<init>(java.util.Set)", signature = "(Ljava/util/Set<-TT;>;)V")
|
||||
ConstructorTest(Set<? super T> b) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "<init>(java.lang.Runnable)", signature = "<E::Ljava/lang/Runnable;>(TE;)V")
|
||||
<E extends Runnable> ConstructorTest(E a) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "<init>(java.lang.Object, java.lang.Object)", signature = "<E:TT;>(TT;TE;)V")
|
||||
<E extends T> ConstructorTest(T a, E b) {
|
||||
}
|
||||
|
||||
// no Signature attribute
|
||||
ConstructorTest(boolean b) {
|
||||
}
|
||||
|
||||
// no Signature attribute
|
||||
ConstructorTest(HashMap a) {
|
||||
}
|
||||
|
||||
// no Signature attribute
|
||||
ConstructorTest(boolean[] b) {
|
||||
}
|
||||
|
||||
// no Signature attribute
|
||||
ConstructorTest(HashMap[] a) {
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,239 @@
|
||||
/*
|
||||
* Copyright (c) 2015, 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.
|
||||
*/
|
||||
|
||||
import com.sun.tools.classfile.*;
|
||||
import com.sun.tools.classfile.Field;
|
||||
import com.sun.tools.classfile.Method;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FilenameFilter;
|
||||
import java.lang.reflect.*;
|
||||
import java.util.*;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Predicate;
|
||||
import java.util.function.Supplier;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
/**
|
||||
* The main class of Signature tests.
|
||||
* Driver reads golden data of each class member that must have a Signature attribute,
|
||||
* after that the class compares expected data with actual one.
|
||||
*
|
||||
* Example of usage Driver:
|
||||
* java Driver Test
|
||||
*
|
||||
* Each member of the class Test should have @ExpectedSignature annotations
|
||||
* if it must have the Signature attribute. Anonymous class cannot be annotated.
|
||||
* So its enclosing class should be annotated and method isAnonymous
|
||||
* of ExpectedSignature must return true.
|
||||
*/
|
||||
public class Driver extends TestResult {
|
||||
|
||||
private final static String ACC_BRIDGE = "ACC_BRIDGE";
|
||||
|
||||
private final String topLevelClassName;
|
||||
private final File[] files;
|
||||
|
||||
public Driver(String topLevelClassName) {
|
||||
this.topLevelClassName = topLevelClassName;
|
||||
// Get top level class and all inner classes.
|
||||
FilenameFilter filter = (dir, file) ->
|
||||
file.equals(topLevelClassName + ".class")
|
||||
|| file.matches(topLevelClassName + "\\$.*\\.class");
|
||||
files = getClassDir().listFiles(filter);
|
||||
}
|
||||
|
||||
private boolean isAnonymous(String className) {
|
||||
return className.matches(".*\\$\\d+$");
|
||||
}
|
||||
|
||||
private Class<?> getEnclosingClass(String className) throws ClassNotFoundException {
|
||||
return Class.forName(className.replaceFirst("\\$\\d+$", ""));
|
||||
}
|
||||
|
||||
private ExpectedSignature getExpectedClassSignature(String className, Class<?> clazz)
|
||||
throws ClassNotFoundException {
|
||||
// anonymous class cannot be annotated, so information about anonymous class
|
||||
// is located in its enclosing class.
|
||||
boolean isAnonymous = isAnonymous(className);
|
||||
clazz = isAnonymous ? getEnclosingClass(className) : clazz;
|
||||
return Stream.of(clazz.getAnnotationsByType(ExpectedSignature.class))
|
||||
.filter(s -> s.isAnonymous() == isAnonymous)
|
||||
.collect(Collectors.toMap(ExpectedSignature::descriptor, Function.identity()))
|
||||
.get(className);
|
||||
}
|
||||
|
||||
// Class.getName() cannot be used here, because the method can rely on signature attribute.
|
||||
private Map<String, ExpectedSignature> getClassExpectedSignature(String className, Class<?> clazz)
|
||||
throws ClassNotFoundException {
|
||||
Map<String, ExpectedSignature> classSignatures = new HashMap<>();
|
||||
ExpectedSignature classSignature = getExpectedClassSignature(className, clazz);
|
||||
if (classSignature != null) {
|
||||
classSignatures.put(className, classSignature);
|
||||
}
|
||||
return classSignatures;
|
||||
}
|
||||
|
||||
private Map<String, ExpectedSignature> getExpectedExecutableSignatures(Executable[] executables,
|
||||
Predicate<Executable> filterBridge) {
|
||||
return Stream.of(executables)
|
||||
.filter(filterBridge)
|
||||
.map(e -> e.getAnnotation(ExpectedSignature.class))
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.toMap(ExpectedSignature::descriptor, Function.identity()));
|
||||
}
|
||||
|
||||
private Map<String, ExpectedSignature> getExpectedMethodSignatures(Class<?> clazz) {
|
||||
Map<String, ExpectedSignature> methodSignatures =
|
||||
getExpectedExecutableSignatures(clazz.getDeclaredMethods(),
|
||||
m -> !((java.lang.reflect.Method) m).isBridge());
|
||||
methodSignatures.putAll(
|
||||
getExpectedExecutableSignatures(clazz.getDeclaredConstructors(),
|
||||
m -> true));
|
||||
return methodSignatures;
|
||||
}
|
||||
|
||||
private Map<String, ExpectedSignature> getExpectedFieldSignatures(Class<?> clazz) {
|
||||
return Stream.of(clazz.getDeclaredFields())
|
||||
.map(f -> f.getAnnotation(ExpectedSignature.class))
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.toMap(ExpectedSignature::descriptor, Function.identity()));
|
||||
}
|
||||
|
||||
public void test() throws TestFailedException {
|
||||
try {
|
||||
addTestCase("Source is " + topLevelClassName + ".java");
|
||||
assertTrue(files.length > 0, "No class files found");
|
||||
for (File file : files) {
|
||||
try {
|
||||
String className = file.getName().replace(".class", "");
|
||||
Class<?> clazz = Class.forName(className);
|
||||
printf("Testing class %s\n", className);
|
||||
ClassFile classFile = readClassFile(file);
|
||||
|
||||
// test class signature
|
||||
testAttribute(
|
||||
className,
|
||||
classFile,
|
||||
() -> (Signature_attribute) classFile.getAttribute(Attribute.Signature),
|
||||
getClassExpectedSignature(className, clazz).get(className));
|
||||
|
||||
testFields(getExpectedFieldSignatures(clazz), classFile);
|
||||
|
||||
testMethods(getExpectedMethodSignatures(clazz), classFile);
|
||||
} catch (Exception e) {
|
||||
addFailure(e);
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
addFailure(e);
|
||||
} finally {
|
||||
checkStatus();
|
||||
}
|
||||
}
|
||||
|
||||
private void checkAllMembersFound(Set<String> found, Map<String, ExpectedSignature> signatures, String message) {
|
||||
if (signatures != null) {
|
||||
checkContains(found,
|
||||
signatures.values().stream()
|
||||
.map(ExpectedSignature::descriptor)
|
||||
.collect(Collectors.toSet()),
|
||||
message);
|
||||
}
|
||||
}
|
||||
|
||||
private void testMethods(Map<String, ExpectedSignature> expectedSignatures, ClassFile classFile)
|
||||
throws ConstantPoolException, Descriptor.InvalidDescriptor {
|
||||
String className = classFile.getName();
|
||||
Set<String> foundMethods = new HashSet<>();
|
||||
for (Method method : classFile.methods) {
|
||||
String methodName = getMethodName(classFile, method);
|
||||
printf("Testing method %s\n", methodName);
|
||||
if (method.access_flags.getMethodFlags().contains(ACC_BRIDGE)) {
|
||||
printf("Bridge method is skipped : %s\n", methodName);
|
||||
continue;
|
||||
}
|
||||
testAttribute(
|
||||
methodName,
|
||||
classFile,
|
||||
() -> (Signature_attribute) method.attributes.get(Attribute.Signature),
|
||||
expectedSignatures.get(methodName));
|
||||
foundMethods.add(methodName);
|
||||
}
|
||||
checkAllMembersFound(foundMethods, expectedSignatures,
|
||||
"Checking that all methods of class " + className + " with Signature attribute found");
|
||||
}
|
||||
|
||||
private String getMethodName(ClassFile classFile, Method method)
|
||||
throws ConstantPoolException, Descriptor.InvalidDescriptor {
|
||||
return String.format("%s%s",
|
||||
method.getName(classFile.constant_pool),
|
||||
method.descriptor.getParameterTypes(classFile.constant_pool));
|
||||
}
|
||||
|
||||
private void testFields(Map<String, ExpectedSignature> expectedSignatures, ClassFile classFile)
|
||||
throws ConstantPoolException {
|
||||
String className = classFile.getName();
|
||||
Set<String> foundFields = new HashSet<>();
|
||||
for (Field field : classFile.fields) {
|
||||
String fieldName = field.getName(classFile.constant_pool);
|
||||
printf("Testing field %s\n", fieldName);
|
||||
testAttribute(
|
||||
fieldName,
|
||||
classFile,
|
||||
() -> (Signature_attribute) field.attributes.get(Attribute.Signature),
|
||||
expectedSignatures.get(fieldName));
|
||||
foundFields.add(fieldName);
|
||||
}
|
||||
checkAllMembersFound(foundFields, expectedSignatures,
|
||||
"Checking that all fields of class " + className + " with Signature attribute found");
|
||||
}
|
||||
|
||||
private void testAttribute(
|
||||
String memberName,
|
||||
ClassFile classFile,
|
||||
Supplier<Signature_attribute> sup,
|
||||
ExpectedSignature expectedSignature)
|
||||
throws ConstantPoolException {
|
||||
|
||||
Signature_attribute attribute = sup.get();
|
||||
if (expectedSignature != null && checkNotNull(attribute, memberName + " must have attribute")) {
|
||||
checkEquals(classFile.constant_pool.getUTF8Value(attribute.attribute_name_index),
|
||||
"Signature", "Attribute's name : " + memberName);
|
||||
checkEquals(attribute.attribute_length, 2, "Attribute's length : " + memberName);
|
||||
checkEquals(attribute.getSignature(classFile.constant_pool),
|
||||
expectedSignature.signature(),
|
||||
"Testing signature of : " + memberName);
|
||||
} else {
|
||||
checkNull(attribute, memberName + " must not have attribute");
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws TestFailedException {
|
||||
if (args.length != 1) {
|
||||
throw new IllegalArgumentException("Usage: Driver <class-name>");
|
||||
}
|
||||
new Driver(args[0]).test();
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,39 @@
|
||||
/*
|
||||
* Copyright (c) 2015, 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 8049238
|
||||
* @summary Checks Signature attribute for enum.
|
||||
* @library /tools/lib /tools/javac/lib ../lib
|
||||
* @build TestBase TestResult InMemoryFileManager ToolBox
|
||||
* @build EnumTest Driver ExpectedSignature ExpectedSignatureContainer
|
||||
* @run main Driver EnumTest
|
||||
*/
|
||||
|
||||
@ExpectedSignature(descriptor = "EnumTest", signature = "Ljava/lang/Enum<LEnumTest;>;")
|
||||
public enum EnumTest {;
|
||||
// see 8026480
|
||||
@ExpectedSignature(descriptor = "<init>(java.lang.String, int)", signature = "()V")
|
||||
private EnumTest() {}
|
||||
}
|
||||
@ -0,0 +1,98 @@
|
||||
/*
|
||||
* Copyright (c) 2015, 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 8049238
|
||||
* @summary Checks Signature attribute for methods which throw exceptions.
|
||||
* @library /tools/lib /tools/javac/lib ../lib
|
||||
* @build TestBase TestResult InMemoryFileManager ToolBox
|
||||
* @build ExceptionTest Driver ExpectedSignature ExpectedSignatureContainer
|
||||
* @run main Driver ExceptionTest
|
||||
*/
|
||||
|
||||
import java.io.IOError;
|
||||
import java.io.IOException;
|
||||
|
||||
@ExpectedSignature(descriptor = "ExceptionTest",
|
||||
signature = "<Exc:Ljava/lang/RuntimeException;:Ljava/lang/Runnable;>Ljava/lang/Object;")
|
||||
public class ExceptionTest<Exc extends RuntimeException & Runnable> {
|
||||
|
||||
@ExpectedSignature(descriptor = "<init>()", signature = "<E:Ljava/lang/Exception;>()V^TE;")
|
||||
<E extends Exception> ExceptionTest() throws E {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "<init>(int)",
|
||||
signature = "<E:Ljava/lang/Exception;>(I)V^Ljava/io/IOException;^TE;^Ljava/io/IOError;")
|
||||
<E extends Exception> ExceptionTest(int a) throws IOException, E, IOError {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "<init>(long)", signature = "(J)V^TExc;")
|
||||
ExceptionTest(long a) throws Exc {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "<init>(byte)", signature = "(B)V^Ljava/io/IOError;^TExc;^Ljava/io/IOException;")
|
||||
ExceptionTest(byte a) throws IOError, Exc, IOException {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "<init>(java.lang.RuntimeException)", signature = "(TExc;)V")
|
||||
ExceptionTest(Exc a) throws IOException {
|
||||
}
|
||||
|
||||
// no Signature attribute
|
||||
ExceptionTest(String a) throws IOError {
|
||||
}
|
||||
|
||||
void noSignatureAttributeMethod() throws IOException {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "genericMethod(int)", signature = "(I)V^TExc;")
|
||||
void genericMethod(int a) throws Exc {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "genericMethod(long)", signature = "(J)V^TExc;^Ljava/io/IOException;")
|
||||
void genericMethod(long a) throws Exc, IOException {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "genericMethod(java.lang.RuntimeException)", signature = "(TExc;)V")
|
||||
void genericMethod(Exc a) throws IOError {
|
||||
}
|
||||
|
||||
static void staticNoSignatureAttributeMethod() throws IOException {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "staticGenericMethod(int)",
|
||||
signature = "<E:Ljava/lang/Exception;:Ljava/lang/Runnable;>(I)V^TE;")
|
||||
static <E extends Exception & Runnable> void staticGenericMethod(int a) throws E {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "staticGenericMethod(long)",
|
||||
signature = "<E:Ljava/lang/Exception;>(J)V^Ljava/io/IOError;^TE;^Ljava/io/IOException;")
|
||||
static <E extends Exception> void staticGenericMethod(long a) throws IOError, E, IOException {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "staticGenericMethod(java.lang.Exception)",
|
||||
signature = "<E:Ljava/lang/Exception;>(TE;)V")
|
||||
static <E extends Exception> void staticGenericMethod(E a) throws IOError {
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,34 @@
|
||||
/*
|
||||
* Copyright (c) 2015, 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.
|
||||
*/
|
||||
|
||||
import java.lang.annotation.Repeatable;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
|
||||
@Repeatable(ExpectedSignatureContainer.class)
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
public @interface ExpectedSignature {
|
||||
boolean isAnonymous() default false;
|
||||
String descriptor();
|
||||
String signature();
|
||||
}
|
||||
@ -0,0 +1,30 @@
|
||||
/*
|
||||
* Copyright (c) 2015, 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.
|
||||
*/
|
||||
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
public @interface ExpectedSignatureContainer {
|
||||
ExpectedSignature[] value();
|
||||
}
|
||||
@ -0,0 +1,206 @@
|
||||
/*
|
||||
* Copyright (c) 2015, 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 8049238
|
||||
* @summary Checks Signature attribute for fields.
|
||||
* @library /tools/lib /tools/javac/lib ../lib
|
||||
* @build TestBase TestResult InMemoryFileManager ToolBox
|
||||
* @build FieldTest Driver ExpectedSignature ExpectedSignatureContainer
|
||||
* @run main Driver FieldTest
|
||||
*/
|
||||
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@ExpectedSignature(descriptor = "FieldTest", signature = "<T:Ljava/lang/Object;>Ljava/lang/Object;")
|
||||
public class FieldTest<T> {
|
||||
|
||||
@ExpectedSignature(descriptor = "typeInList", signature = "Ljava/util/List<TT;>;")
|
||||
List<T> typeInList;
|
||||
|
||||
@ExpectedSignature(descriptor = "boundsType", signature = "Ljava/util/List<Ljava/util/Map<+TT;-TT;>;>;")
|
||||
List<Map<? extends T, ? super T>> boundsType;
|
||||
|
||||
@ExpectedSignature(descriptor = "type", signature = "TT;")
|
||||
T type;
|
||||
|
||||
@ExpectedSignature(descriptor = "typeInArray", signature = "[TT;")
|
||||
T[] typeInArray;
|
||||
|
||||
@ExpectedSignature(descriptor = "byteArrayInList", signature = "Ljava/util/List<[B>;")
|
||||
List<byte[]> byteArrayInList;
|
||||
|
||||
@ExpectedSignature(descriptor = "shortArrayInList", signature = "Ljava/util/List<[S>;")
|
||||
List<short[]> shortArrayInList;
|
||||
|
||||
@ExpectedSignature(descriptor = "intArrayInList", signature = "Ljava/util/List<[I>;")
|
||||
List<int[]> intArrayInList;
|
||||
|
||||
@ExpectedSignature(descriptor = "longArrayInList", signature = "Ljava/util/List<[J>;")
|
||||
List<long[]> longArrayInList;
|
||||
|
||||
@ExpectedSignature(descriptor = "charArrayInList", signature = "Ljava/util/List<[C>;")
|
||||
List<char[]> charArrayInList;
|
||||
|
||||
@ExpectedSignature(descriptor = "booleanArrayInList", signature = "Ljava/util/List<[Z>;")
|
||||
List<boolean[]> booleanArrayInList;
|
||||
|
||||
@ExpectedSignature(descriptor = "floatArrayInList", signature = "Ljava/util/List<[F>;")
|
||||
List<float[]> floatArrayInList;
|
||||
|
||||
@ExpectedSignature(descriptor = "doubleArrayInList", signature = "Ljava/util/List<[D>;")
|
||||
List<double[]> doubleArrayInList;
|
||||
|
||||
@ExpectedSignature(descriptor = "integerInList", signature = "Ljava/util/List<Ljava/lang/Integer;>;")
|
||||
List<Integer> integerInList;
|
||||
|
||||
@ExpectedSignature(descriptor = "typeInMultiArray", signature = "[[TT;")
|
||||
T[][] typeInMultiArray;
|
||||
|
||||
@ExpectedSignature(descriptor = "arrayOfClasses", signature = "[Ljava/util/List<TT;>;")
|
||||
List<T>[] arrayOfClasses;
|
||||
|
||||
@ExpectedSignature(descriptor = "extendsWildCard", signature = "Ljava/util/List<+TT;>;")
|
||||
List<? extends T> extendsWildCard;
|
||||
|
||||
@ExpectedSignature(descriptor = "superWildCard", signature = "Ljava/util/Comparator<-TT;>;")
|
||||
Comparator<? super T> superWildCard;
|
||||
|
||||
@ExpectedSignature(descriptor = "extendsSuperWildCard",
|
||||
signature = "Ljava/util/List<+Ljava/util/Comparator<-TT;>;>;")
|
||||
List<? extends Comparator<? super T>> extendsSuperWildCard;
|
||||
|
||||
@ExpectedSignature(descriptor = "wildCard", signature = "Ljava/util/Comparator<*>;")
|
||||
Comparator<?> wildCard;
|
||||
|
||||
@ExpectedSignature(descriptor = "boundsBooleanArray", signature = "Ljava/util/Map<+[Z-[Z>;")
|
||||
Map<? extends boolean[], ? super boolean[]> boundsBooleanArray;
|
||||
|
||||
@ExpectedSignature(descriptor = "boundsByteArray", signature = "Ljava/util/Map<+[B-[B>;")
|
||||
Map<? extends byte[], ? super byte[]> boundsByteArray;
|
||||
|
||||
@ExpectedSignature(descriptor = "boundsShortArray", signature = "Ljava/util/Map<+[S-[S>;")
|
||||
Map<? extends short[], ? super short[]> boundsShortArray;
|
||||
|
||||
@ExpectedSignature(descriptor = "boundsIntArray", signature = "Ljava/util/Map<+[I-[I>;")
|
||||
Map<? extends int[], ? super int[]> boundsIntArray;
|
||||
|
||||
@ExpectedSignature(descriptor = "boundsLongArray", signature = "Ljava/util/Map<+[J-[J>;")
|
||||
Map<? extends long[], ? super long[]> boundsLongArray;
|
||||
|
||||
@ExpectedSignature(descriptor = "boundsCharArray", signature = "Ljava/util/Map<+[C-[C>;")
|
||||
Map<? extends char[], ? super char[]> boundsCharArray;
|
||||
|
||||
@ExpectedSignature(descriptor = "boundsFloatArray", signature = "Ljava/util/Map<+[F-[F>;")
|
||||
Map<? extends float[], ? super float[]> boundsFloatArray;
|
||||
|
||||
@ExpectedSignature(descriptor = "boundsDoubleArray", signature = "Ljava/util/Map<+[D-[D>;")
|
||||
Map<? extends double[], ? super double[]> boundsDoubleArray;
|
||||
|
||||
@ExpectedSignature(descriptor = "boundsObjectArray",
|
||||
signature = "Ljava/util/Map<+[Ljava/lang/Object;-[Ljava/lang/Object;>;")
|
||||
Map<? extends Object[], ? super Object[]> boundsObjectArray;
|
||||
|
||||
boolean booleanNoSignatureAttribute;
|
||||
byte byteNoSignatureAttribute;
|
||||
char charNoSignatureAttribute;
|
||||
short shortNoSignatureAttribute;
|
||||
int intNoSignatureAttribute;
|
||||
long longNoSignatureAttribute;
|
||||
float floatNoSignatureAttribute;
|
||||
double doubleNoSignatureAttribute;
|
||||
|
||||
List listNoSignatureAttribute;
|
||||
|
||||
@ExpectedSignature(descriptor = "staticByteArrayInList", signature = "Ljava/util/List<[B>;")
|
||||
static List<byte[]> staticByteArrayInList;
|
||||
|
||||
@ExpectedSignature(descriptor = "staticShortArrayInList", signature = "Ljava/util/List<[S>;")
|
||||
static List<short[]> staticShortArrayInList;
|
||||
|
||||
@ExpectedSignature(descriptor = "staticIntArrayInList", signature = "Ljava/util/List<[I>;")
|
||||
static List<int[]> staticIntArrayInList;
|
||||
|
||||
@ExpectedSignature(descriptor = "staticLongArrayInList", signature = "Ljava/util/List<[J>;")
|
||||
static List<long[]> staticLongArrayInList;
|
||||
|
||||
@ExpectedSignature(descriptor = "staticCharArrayInList", signature = "Ljava/util/List<[C>;")
|
||||
static List<char[]> staticCharArrayInList;
|
||||
|
||||
@ExpectedSignature(descriptor = "staticBooleanArrayInList", signature = "Ljava/util/List<[Z>;")
|
||||
static List<boolean[]> staticBooleanArrayInList;
|
||||
|
||||
@ExpectedSignature(descriptor = "staticFloatArrayInList", signature = "Ljava/util/List<[F>;")
|
||||
static List<float[]> staticFloatArrayInList;
|
||||
|
||||
@ExpectedSignature(descriptor = "staticDoubleArrayInList", signature = "Ljava/util/List<[D>;")
|
||||
static List<double[]> staticDoubleArrayInList;
|
||||
|
||||
@ExpectedSignature(descriptor = "staticIntegerInList", signature = "Ljava/util/List<Ljava/lang/Integer;>;")
|
||||
static List<Integer> staticIntegerInList;
|
||||
|
||||
@ExpectedSignature(descriptor = "staticWildCard", signature = "Ljava/util/Comparator<*>;")
|
||||
static Comparator<?> staticWildCard;
|
||||
|
||||
@ExpectedSignature(descriptor = "staticBoundsBooleanArray", signature = "Ljava/util/Map<+[Z-[Z>;")
|
||||
static Map<? extends boolean[], ? super boolean[]> staticBoundsBooleanArray;
|
||||
|
||||
@ExpectedSignature(descriptor = "staticBoundsByteArray", signature = "Ljava/util/Map<+[B-[B>;")
|
||||
static Map<? extends byte[], ? super byte[]> staticBoundsByteArray;
|
||||
|
||||
@ExpectedSignature(descriptor = "staticBoundsShortArray", signature = "Ljava/util/Map<+[S-[S>;")
|
||||
static Map<? extends short[], ? super short[]> staticBoundsShortArray;
|
||||
|
||||
@ExpectedSignature(descriptor = "staticBoundsIntArray", signature = "Ljava/util/Map<+[I-[I>;")
|
||||
static Map<? extends int[], ? super int[]> staticBoundsIntArray;
|
||||
|
||||
@ExpectedSignature(descriptor = "staticBoundsLongArray", signature = "Ljava/util/Map<+[J-[J>;")
|
||||
static Map<? extends long[], ? super long[]> staticBoundsLongArray;
|
||||
|
||||
@ExpectedSignature(descriptor = "staticBoundsCharArray", signature = "Ljava/util/Map<+[C-[C>;")
|
||||
static Map<? extends char[], ? super char[]> staticBoundsCharArray;
|
||||
|
||||
@ExpectedSignature(descriptor = "staticBoundsFloatArray", signature = "Ljava/util/Map<+[F-[F>;")
|
||||
static Map<? extends float[], ? super float[]> staticBoundsFloatArray;
|
||||
|
||||
@ExpectedSignature(descriptor = "staticBoundsDoubleArray", signature = "Ljava/util/Map<+[D-[D>;")
|
||||
static Map<? extends double[], ? super double[]> staticBoundsDoubleArray;
|
||||
|
||||
@ExpectedSignature(descriptor = "staticBoundsObjectArray",
|
||||
signature = "Ljava/util/Map<+[Ljava/lang/Object;-[Ljava/lang/Object;>;")
|
||||
static Map<? extends Object[], ? super Object[]> staticBoundsObjectArray;
|
||||
|
||||
static boolean staticBooleanNoSignatureAttribute;
|
||||
static byte staticByteNoSignatureAttribute;
|
||||
static char staticCharNoSignatureAttribute;
|
||||
static short staticShortNoSignatureAttribute;
|
||||
static int staticIntNoSignatureAttribute;
|
||||
static long staticLongNoSignatureAttribute;
|
||||
static float staticFloatNoSignatureAttribute;
|
||||
static double staticDoubleNoSignatureAttribute;
|
||||
|
||||
static List staticListNoSignatureAttribute;
|
||||
}
|
||||
@ -0,0 +1,362 @@
|
||||
/*
|
||||
* Copyright (c) 2015, 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 8049238
|
||||
* @summary Checks Signature attribute for inner classes.
|
||||
* @library /tools/lib /tools/javac/lib ../lib
|
||||
* @build TestBase TestResult InMemoryFileManager ToolBox
|
||||
* @build InnerClassTest Driver ExpectedSignature ExpectedSignatureContainer
|
||||
* @run main Driver InnerClassTest
|
||||
*/
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.Callable;
|
||||
|
||||
@ExpectedSignature(descriptor = "InnerClassTest",
|
||||
signature = "<T:Ljava/util/ArrayList<TT;>;:Ljava/lang/Runnable;>Ljava/lang/Object;")
|
||||
@ExpectedSignature(descriptor = "InnerClassTest$1",
|
||||
signature = "LInnerClassTest$1Local1;", isAnonymous = true)
|
||||
@ExpectedSignature(descriptor = "InnerClassTest$2",
|
||||
signature = "LInnerClassTest$1Local2<Ljava/util/ArrayList<TT;>;" +
|
||||
"Ljava/util/Map<Ljava/util/ArrayList<TT;>;Ljava/util/ArrayList<TT;>;>;>;", isAnonymous = true)
|
||||
public class InnerClassTest<T extends ArrayList<T> & Runnable> {
|
||||
|
||||
{
|
||||
class Local1 {
|
||||
// no Signature attribute
|
||||
Local1() {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "genericType", signature = "TT;")
|
||||
T genericType;
|
||||
|
||||
@ExpectedSignature(descriptor = "genericTypeArray", signature = "[TT;")
|
||||
T[] genericTypeArray;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "InnerClassTest$1Local2",
|
||||
signature = "<T:Ljava/lang/Object;U::Ljava/util/Map<+TT;-TT;>;>Ljava/lang/Object;")
|
||||
class Local2<T, U extends Map<? extends T, ? super T>> {
|
||||
// no Signature attribute
|
||||
Local2() {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "<init>(InnerClassTest, java.lang.Object, java.util.Map)",
|
||||
signature = "(TT;TU;)V")
|
||||
Local2(T a, U b) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "genericMethod(java.lang.Object[])",
|
||||
signature = "([TT;)[TU;")
|
||||
U[] genericMethod(T...a) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "InnerClassTest$1Local3",
|
||||
signature = "LInnerClassTest$1Local2<Ljava/util/ArrayList<TT;>;" +
|
||||
"Ljava/util/Map<Ljava/util/ArrayList<TT;>;Ljava/util/ArrayList<TT;>;>;>;")
|
||||
class Local3 extends Local2<ArrayList<T>, Map<ArrayList<T>, ArrayList<T>>> {
|
||||
}
|
||||
|
||||
new Local1() {
|
||||
@ExpectedSignature(descriptor = "genericType", signature = "TT;")
|
||||
T genericType;
|
||||
|
||||
@ExpectedSignature(descriptor = "genericTypeArray", signature = "[TT;")
|
||||
T[] genericTypeArray;
|
||||
};
|
||||
|
||||
new Local2<ArrayList<T>, Map<ArrayList<T>, ArrayList<T>>>() {
|
||||
};
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "InnerClassTest$InnerClass1",
|
||||
signature = "<E:TT;U::Ljava/util/Set<-TE;>;>Ljava/lang/Object;")
|
||||
class InnerClass1<E extends T, U extends Set<? super E>> {
|
||||
@ExpectedSignature(descriptor = "genericTypeArray", signature = "[TT;")
|
||||
T[] genericTypeArray;
|
||||
|
||||
@ExpectedSignature(descriptor = "genericListExtendsBound", signature = "Ljava/util/List<+TT;>;")
|
||||
List<? extends T> genericListExtendsBound;
|
||||
|
||||
@ExpectedSignature(descriptor = "genericListSuperBound", signature = "Ljava/util/List<-TU;>;")
|
||||
List<? super U> genericListSuperBound;
|
||||
|
||||
@ExpectedSignature(descriptor = "genericListWildCard", signature = "Ljava/util/List<*>;")
|
||||
List<?> genericListWildCard;
|
||||
|
||||
@ExpectedSignature(descriptor = "genericListExactType", signature = "Ljava/util/List<Ljava/lang/Integer;>;")
|
||||
List<Integer> genericListExactType;
|
||||
|
||||
@ExpectedSignature(descriptor = "listWithGenericType", signature = "Ljava/util/List<TE;>;")
|
||||
List<E> listWithGenericType;
|
||||
|
||||
List listNoSignatureAttribute;
|
||||
|
||||
// no Signature attribute
|
||||
InnerClass1(List a) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "<init>(InnerClassTest, java.util.ArrayList)",
|
||||
signature = "(TT;)V")
|
||||
InnerClass1(T a) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "<init>(InnerClassTest, java.util.ArrayList, java.util.ArrayList)",
|
||||
signature = "(TT;TE;)V")
|
||||
InnerClass1(T a, E b) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "genericMethod(java.util.ArrayList)",
|
||||
signature = "(TT;)TE;")
|
||||
E genericMethod(T a) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "InnerClassTest$InnerInterface",
|
||||
signature = "<T:Ljava/lang/Object;>Ljava/lang/Object;")
|
||||
interface InnerInterface<T> {
|
||||
@ExpectedSignature(descriptor = "genericMethod(java.lang.Object)", signature = "(TT;)TT;")
|
||||
T genericMethod(T a);
|
||||
|
||||
@ExpectedSignature(descriptor = "genericListExtendsBound", signature = "Ljava/util/List<+Ljava/lang/Number;>;")
|
||||
List<? extends Number> genericListExtendsBound = null;
|
||||
|
||||
@ExpectedSignature(descriptor = "genericListSuperBound", signature = "Ljava/util/List<-Ljava/lang/Number;>;")
|
||||
List<? super Number> genericListSuperBound = null;
|
||||
|
||||
@ExpectedSignature(descriptor = "genericListWildCard", signature = "Ljava/util/List<*>;")
|
||||
List<?> genericListWildCard = null;
|
||||
|
||||
@ExpectedSignature(descriptor = "genericListExactType", signature = "Ljava/util/List<Ljava/lang/Integer;>;")
|
||||
List<Integer> genericListExactType = null;
|
||||
|
||||
List listNoSignatureAttribute = null;
|
||||
|
||||
@ExpectedSignature(descriptor = "genericBoundsMethod1(java.util.List)",
|
||||
signature = "(Ljava/util/List<-TT;>;)Ljava/util/List<+TT;>;")
|
||||
List<? extends T> genericBoundsMethod1(List<? super T> a);
|
||||
|
||||
@ExpectedSignature(descriptor = "genericBoundsMethod2(java.util.List)",
|
||||
signature = "(Ljava/util/List<+TT;>;)Ljava/util/List<-TT;>;")
|
||||
List<? super T> genericBoundsMethod2(List<? extends T> a);
|
||||
|
||||
@ExpectedSignature(descriptor = "genericWildCardMethod(java.util.Map)",
|
||||
signature = "(Ljava/util/Map<**>;)Ljava/util/Map<**>;")
|
||||
Map<?, ?> genericWildCardMethod(Map<?, ?> a);
|
||||
|
||||
@ExpectedSignature(descriptor = "defaultGenericMethod(java.util.List, java.util.List, java.util.Map)",
|
||||
signature = "(Ljava/util/List<+TT;>;Ljava/util/List<-TT;>;Ljava/util/Map<**>;)Ljava/util/List<*>;")
|
||||
default List<?> defaultGenericMethod(List<? extends T> list1, List<? super T> list2, Map<?, ?> map) { return null; }
|
||||
|
||||
|
||||
default List defaultNoSignatureAttributeMethod(List list1, List list2, Map list3) { return null; }
|
||||
|
||||
@ExpectedSignature(descriptor = "staticGenericMethod(java.util.List, java.util.List, java.util.Map)",
|
||||
signature = "<T::Ljava/lang/Runnable;>(Ljava/util/List<+TT;>;Ljava/util/List<-TT;>;Ljava/util/Map<**>;)Ljava/util/List<*>;")
|
||||
static <T extends Runnable> List<?> staticGenericMethod(List<? extends T> list1, List<? super T> list2, Map<?, ?> map) { return null; }
|
||||
|
||||
|
||||
static List staticNoSignatureAttributeMethod(List list1, List list2, Map list3) { return null; }
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "InnerClassTest$InnerClass2",
|
||||
signature = "LInnerClassTest<TT;>.InnerClass1<TT;Ljava/util/Set<TT;>;>;LInnerClassTest$InnerInterface<TT;>;")
|
||||
class InnerClass2 extends InnerClass1<T, Set<T>> implements InnerInterface<T> {
|
||||
|
||||
// no Signature attribute
|
||||
InnerClass2() {
|
||||
super(null);
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "<init>(InnerClassTest, java.util.ArrayList)",
|
||||
signature = "(TT;)V")
|
||||
InnerClass2(T a) {
|
||||
super(a);
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "<init>(InnerClassTest, java.util.ArrayList, java.util.ArrayList)",
|
||||
signature = "(TT;TT;)V")
|
||||
InnerClass2(T a, T b) {
|
||||
super(a, b);
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "genericMethod(java.util.ArrayList)", signature = "(TT;)TT;")
|
||||
@Override
|
||||
public T genericMethod(T a) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "genericBoundsMethod1(java.util.List)",
|
||||
signature = "(Ljava/util/List<-TT;>;)Ljava/util/List<+TT;>;")
|
||||
@Override
|
||||
public List<? extends T> genericBoundsMethod1(List<? super T> a) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "genericBoundsMethod2(java.util.List)",
|
||||
signature = "(Ljava/util/List<+TT;>;)Ljava/util/List<-TT;>;")
|
||||
@Override
|
||||
public List<? super T> genericBoundsMethod2(List<? extends T> a) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "genericWildCardMethod(java.util.Map)",
|
||||
signature = "(Ljava/util/Map<**>;)Ljava/util/Map<**>;")
|
||||
@Override
|
||||
public Map<?, ?> genericWildCardMethod(Map<?, ?> a) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "InnerClassTest$StaticInnerClass",
|
||||
signature = "<T:Ljava/lang/String;E::Ljava/util/Set<TT;>;>" +
|
||||
"Ljava/lang/Object;LInnerClassTest$InnerInterface<TE;>;")
|
||||
static class StaticInnerClass<T extends String, E extends Set<T>> implements InnerInterface<E> {
|
||||
// no Signature attribute
|
||||
StaticInnerClass(List a) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "<init>(java.lang.Runnable)",
|
||||
signature = "<E::Ljava/lang/Runnable;>(TE;)V")
|
||||
<E extends Runnable> StaticInnerClass(E a) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "<init>(java.lang.String)",
|
||||
signature = "(TT;)V")
|
||||
StaticInnerClass(T a) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "<init>(java.lang.String, java.util.Set)",
|
||||
signature = "(TT;TE;)V")
|
||||
StaticInnerClass(T a, E b) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "genericListExtendsBound", signature = "Ljava/util/List<+Ljava/lang/Number;>;")
|
||||
static List<? extends Number> genericListExtendsBound;
|
||||
|
||||
@ExpectedSignature(descriptor = "genericListSuperBound", signature = "Ljava/util/List<-Ljava/lang/Number;>;")
|
||||
static List<? super Number> genericListSuperBound;
|
||||
|
||||
@ExpectedSignature(descriptor = "genericListWildCard", signature = "Ljava/util/List<*>;")
|
||||
static List<?> genericListWildCard;
|
||||
|
||||
@ExpectedSignature(descriptor = "genericListExactType", signature = "Ljava/util/List<Ljava/lang/Integer;>;")
|
||||
static List<Integer> genericListExactType;
|
||||
|
||||
static List listNoSignatureAttribute;
|
||||
|
||||
@ExpectedSignature(descriptor = "genericMethod(java.util.Set)",
|
||||
signature = "(TE;)TE;")
|
||||
@Override
|
||||
public E genericMethod(E a) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "genericBoundsMethod1(java.util.List)",
|
||||
signature = "(Ljava/util/List<-TE;>;)Ljava/util/List<+TE;>;")
|
||||
@Override
|
||||
public List<? extends E> genericBoundsMethod1(List<? super E> a) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "genericBoundsMethod2(java.util.List)",
|
||||
signature = "(Ljava/util/List<+TE;>;)Ljava/util/List<-TE;>;")
|
||||
@Override
|
||||
public List<? super E> genericBoundsMethod2(List<? extends E> a) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "genericWildCardMethod(java.util.Map)",
|
||||
signature = "(Ljava/util/Map<**>;)Ljava/util/Map<**>;")
|
||||
@Override
|
||||
public Map<?, ?> genericWildCardMethod(Map<?, ?> a) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "staticGenericMethod(java.lang.Object)",
|
||||
signature = "<E:Ljava/lang/Object;>(TE;)TE;")
|
||||
public static <E> E staticGenericMethod(E a) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "staticGenericBoundsMethod1(java.util.List)",
|
||||
signature = "<E:Ljava/lang/Object;>(Ljava/util/List<-TE;>;)Ljava/util/List<+TE;>;")
|
||||
public static <E> List<? extends E> staticGenericBoundsMethod1(List<? super E> a) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "staticGenericBoundsMethod2(java.util.List)",
|
||||
signature = "<E:Ljava/lang/Object;>(Ljava/util/List<+TE;>;)Ljava/util/List<-TE;>;")
|
||||
public static <E> List<? super E> staticGenericBoundsMethod2(List<? extends E> a) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "staticGenericWildCardMethod(java.util.Map)",
|
||||
signature = "<E:Ljava/lang/Object;>(Ljava/util/Map<**>;)Ljava/util/Map<**>;")
|
||||
public static <E> Map<?, ?> staticGenericWildCardMethod(Map<?, ?> a) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "InnerClassTest$InnerClass3",
|
||||
signature = "Ljava/lang/Object;LInnerClassTest$ExceptionHolder" +
|
||||
"<Ljava/lang/RuntimeException;>;Ljava/util/concurrent/Callable<Ljava/util/Map<**>;>;")
|
||||
public static class InnerClass3 implements ExceptionHolder<RuntimeException>, Callable<Map<?, ?>> {
|
||||
@ExpectedSignature(descriptor = "call()", signature = "()Ljava/util/Map<**>;")
|
||||
@Override
|
||||
public Map<?, ?> call() throws Exception {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void Throw() throws RuntimeException {
|
||||
}
|
||||
|
||||
@Override
|
||||
public RuntimeException Return() {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Class is for checking that the Signature attribute is not generated
|
||||
* for overridden methods despite of the appropriate methods in the parent class
|
||||
* have the Signature attribute.
|
||||
*/
|
||||
@ExpectedSignature(descriptor = "InnerClassTest$ExceptionHolder",
|
||||
signature = "<E:Ljava/lang/Exception;>Ljava/lang/Object;")
|
||||
interface ExceptionHolder<E extends Exception> {
|
||||
@ExpectedSignature(descriptor = "Throw()", signature = "()V^TE;")
|
||||
void Throw() throws E;
|
||||
@ExpectedSignature(descriptor = "Return()", signature = "()TE;")
|
||||
E Return();
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,203 @@
|
||||
/*
|
||||
* Copyright (c) 2015, 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 8049238
|
||||
* @summary Checks Signature attribute for method parameters.
|
||||
* @library /tools/lib /tools/javac/lib ../lib
|
||||
* @build TestBase TestResult InMemoryFileManager ToolBox
|
||||
* @build MethodParameterTest Driver ExpectedSignature ExpectedSignatureContainer
|
||||
* @run main Driver MethodParameterTest
|
||||
*/
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
@ExpectedSignature(descriptor = "MethodParameterTest", signature = "<T:Ljava/lang/Object;>Ljava/lang/Object;")
|
||||
public class MethodParameterTest<T> {
|
||||
|
||||
@ExpectedSignature(descriptor = "<init>(java.lang.Object, java.util.Set, java.util.ArrayList)",
|
||||
signature = "<E:TT;U::Ljava/util/List<TE;>;:Ljava/lang/Runnable;>" +
|
||||
"(TT;Ljava/util/Set<-TE;>;Ljava/util/ArrayList<+Ljava/util/Set<TU;>;>;)V")
|
||||
<E extends T, U extends List<E> & Runnable>
|
||||
MethodParameterTest(T a, Set<? super E> b, ArrayList<? extends Set<U>> c) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "method(java.lang.Object, java.util.List, java.util.ArrayList)",
|
||||
signature = "<E:TT;U::Ljava/util/List<TE;>;:Ljava/lang/Runnable;>" +
|
||||
"(TT;TU;Ljava/util/ArrayList<+Ljava/util/Set<TU;>;>;)V")
|
||||
<E extends T, U extends List<E> & Runnable>
|
||||
void method(T a, U b, ArrayList<? extends Set<U>> c) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "staticMethod(java.util.Set, java.util.List[], java.util.Map)",
|
||||
signature = "<T::Ljava/util/List<*>;E::Ljava/util/Set<-TT;>;>(TE;[TT;Ljava/util/Map<*+TE;>;)TE;")
|
||||
static <T extends List<?>, E extends Set<? super T>> E staticMethod(E a, T[] b, Map<?, ? extends E> c) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "<init>(java.lang.Object, boolean[])", signature = "(TT;[Z)V")
|
||||
MethodParameterTest(T a, boolean...b) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "<init>(java.lang.Object, char[])", signature = "(TT;[C)V")
|
||||
MethodParameterTest(T a, char...b) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "<init>(java.lang.Object, byte[])", signature = "(TT;[B)V")
|
||||
MethodParameterTest(T a, byte...b) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "<init>(java.lang.Object, short[])", signature = "(TT;[S)V")
|
||||
MethodParameterTest(T a, short...b) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "<init>(java.lang.Object, int[])", signature = "(TT;[I)V")
|
||||
MethodParameterTest(T a, int...b) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "<init>(java.lang.Object, long[])", signature = "(TT;[J)V")
|
||||
MethodParameterTest(T a, long...b) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "<init>(java.lang.Object, float[])", signature = "(TT;[F)V")
|
||||
MethodParameterTest(T a, float...b) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "<init>(java.lang.Object, double[])", signature = "(TT;[D)V")
|
||||
MethodParameterTest(T a, double...b) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "<init>(java.lang.Object, java.lang.Object[])",
|
||||
signature = "(TT;[Ljava/lang/Object;)V")
|
||||
MethodParameterTest(T a, Object...b) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "<init>(java.lang.Object[])", signature = "([TT;)V")
|
||||
MethodParameterTest(T...a) {
|
||||
}
|
||||
|
||||
// no Signature attribute
|
||||
MethodParameterTest(int...a) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "genericBooleanMethod(java.lang.Object, boolean[])", signature = "(TT;[Z)V")
|
||||
void genericBooleanMethod(T a, boolean...b) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "genericCharMethod(java.lang.Object, char[])", signature = "(TT;[C)V")
|
||||
void genericCharMethod(T a, char...b) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "genericByteMethod(java.lang.Object, byte[])", signature = "(TT;[B)V")
|
||||
void genericByteMethod(T a, byte...b) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "genericShortMethod(java.lang.Object, short[])", signature = "(TT;[S)V")
|
||||
void genericShortMethod(T a, short...b) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "genericIntMethod(java.lang.Object, int[])", signature = "(TT;[I)V")
|
||||
void genericIntMethod(T a, int...b) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "genericLongMethod(java.lang.Object, long[])", signature = "(TT;[J)V")
|
||||
void genericLongMethod(T a, long...b) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "genericFloatMethod(java.lang.Object, float[])", signature = "(TT;[F)V")
|
||||
void genericFloatMethod(T a, float...b) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "genericDoubleMethod(java.lang.Object, double[])", signature = "(TT;[D)V")
|
||||
void genericDoubleMethod(T a, double...b) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "genericObjectMethod(java.lang.Object, java.lang.Object[])",
|
||||
signature = "(TT;[Ljava/lang/Object;)V")
|
||||
void genericObjectMethod(T a, Object...b) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "genericMethod(java.lang.Object[])", signature = "([TT;)V")
|
||||
void genericMethod(T...a) {
|
||||
}
|
||||
|
||||
void noSignature(int...a) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "staticGenericBooleanMethod(java.lang.Object, boolean[])",
|
||||
signature = "<T:Ljava/lang/Object;>(TT;[Z)V")
|
||||
static <T> void staticGenericBooleanMethod(T a, boolean...b) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "staticGenericCharMethod(java.lang.Object, char[])",
|
||||
signature = "<T:Ljava/lang/Object;>(TT;[C)V")
|
||||
static <T> void staticGenericCharMethod(T a, char...b) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "staticGenericByteMethod(java.lang.Object, byte[])",
|
||||
signature = "<T:Ljava/lang/Object;>(TT;[B)V")
|
||||
static <T> void staticGenericByteMethod(T a, byte...b) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "staticGenericShortMethod(java.lang.Object, short[])",
|
||||
signature = "<T:Ljava/lang/Object;>(TT;[S)V")
|
||||
static <T> void staticGenericShortMethod(T a, short...b) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "staticGenericIntMethod(java.lang.Object, int[])",
|
||||
signature = "<T:Ljava/lang/Object;>(TT;[I)V")
|
||||
static <T> void staticGenericIntMethod(T a, int...b) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "staticGenericLongMethod(java.lang.Object, long[])",
|
||||
signature = "<T:Ljava/lang/Object;>(TT;[J)V")
|
||||
static <T> void staticGenericLongMethod(T a, long...b) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "staticGenericFloatMethod(java.lang.Object, float[])",
|
||||
signature = "<T:Ljava/lang/Object;>(TT;[F)V")
|
||||
static <T> void staticGenericFloatMethod(T a, float...b) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "staticGenericDoubleMethod(java.lang.Object, double[])",
|
||||
signature = "<T:Ljava/lang/Object;>(TT;[D)V")
|
||||
static <T> void staticGenericDoubleMethod(T a, double...b) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "staticGenericObjectMethod(java.lang.Object, java.lang.Object[])",
|
||||
signature = "<T:Ljava/lang/Object;>(TT;[Ljava/lang/Object;)V")
|
||||
static <T> void staticGenericObjectMethod(T a, Object...b) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "staticGenericMethod(java.lang.Object[])",
|
||||
signature = "<T:Ljava/lang/Object;>([TT;)V")
|
||||
static <T> void staticGenericMethod(T...a) {
|
||||
}
|
||||
|
||||
static void staticNoSignatureAttribute(int...a) {
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,79 @@
|
||||
/*
|
||||
* Copyright (c) 2015, 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 8049238
|
||||
* @summary Checks Signature attribute for type bounds.
|
||||
* @library /tools/lib /tools/javac/lib ../lib
|
||||
* @build TestBase TestResult InMemoryFileManager ToolBox
|
||||
* @build MethodTypeBoundTest Driver ExpectedSignature ExpectedSignatureContainer
|
||||
* @run main Driver MethodTypeBoundTest
|
||||
*/
|
||||
|
||||
import java.util.*;
|
||||
|
||||
@ExpectedSignature(descriptor = "MethodTypeBoundTest", signature = "<T:Ljava/lang/Object;>Ljava/lang/Object;")
|
||||
public class MethodTypeBoundTest<T> {
|
||||
|
||||
@ExpectedSignature(descriptor = "method1(java.lang.String)",
|
||||
signature = "<E:Ljava/lang/String;:Ljava/lang/Runnable;:Ljava/util/Collection<+TT;>;>(TE;)TE;")
|
||||
<E extends String & Runnable & Collection<? extends T>> E method1(E a) {
|
||||
return a;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "method2(java.lang.Runnable)",
|
||||
signature = "<E::Ljava/lang/Runnable;:Ljava/util/Collection<-TT;>;>(TE;)TE;")
|
||||
<E extends Runnable & Collection<? super T>> E method2(E a) {
|
||||
return a;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "method3(java.util.ArrayList)",
|
||||
signature = "<E:Ljava/util/ArrayList<+TT;>;>(TE;)TE;")
|
||||
<E extends ArrayList<? extends T>> E method3(E a) {
|
||||
return a;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "method4(java.util.LinkedList)",
|
||||
signature = "<E:Ljava/util/LinkedList<TE;>;:Ljava/util/List<TE;>;>(TE;)TE;")
|
||||
<E extends LinkedList<E> & List<E>> E method4(E a) {
|
||||
return a;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "method5(java.util.Iterator)",
|
||||
signature = "<E:Ljava/util/LinkedList<TE;>;:Ljava/util/List<TE;>;" +
|
||||
"U::Ljava/util/Iterator<-LMethodTypeBoundTest<TT;>.InnerClass<TE;>;>;>(TU;)TE;")
|
||||
<E extends LinkedList<E> & List<E>, U extends Iterator<? super InnerClass<E>>> E method5(U a) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "method6()",
|
||||
signature = "<E:Ljava/util/LinkedList<TT;>;U:TE;>()V")
|
||||
<E extends LinkedList<T>, U extends E> void method6() {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "MethodTypeBoundTest$InnerClass",
|
||||
signature = "<T:Ljava/lang/Object;>Ljava/lang/Object;")
|
||||
class InnerClass<T> {
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,549 @@
|
||||
/*
|
||||
* Copyright (c) 2015, 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 8049238
|
||||
* @summary Checks Signature attribute for array return type of method.
|
||||
* @library /tools/lib /tools/javac/lib ../lib
|
||||
* @build TestBase TestResult InMemoryFileManager ToolBox
|
||||
* @build ReturnTypeTest Driver ExpectedSignature ExpectedSignatureContainer
|
||||
* @run main Driver ReturnTypeTest
|
||||
*/
|
||||
|
||||
import java.awt.Frame;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.Callable;
|
||||
|
||||
@ExpectedSignature(descriptor = "ReturnTypeTest",
|
||||
signature = "<T:Ljava/awt/Frame;:Ljava/lang/Runnable;:Ljava/util/concurrent/Callable<[TT;>;>Ljava/lang/Object;")
|
||||
public class ReturnTypeTest<T extends Frame & Runnable & Callable<T[]>> {
|
||||
|
||||
@ExpectedSignature(descriptor = "byteArrayReturnType(java.awt.Frame)",
|
||||
signature = "(TT;)[B")
|
||||
byte[] byteArrayReturnType(T a) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "shortArrayReturnType(java.awt.Frame)",
|
||||
signature = "(TT;)[S")
|
||||
short[] shortArrayReturnType(T a) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "charArrayReturnType(java.awt.Frame)",
|
||||
signature = "(TT;)[C")
|
||||
char[] charArrayReturnType(T a) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "intArrayReturnType(java.awt.Frame)",
|
||||
signature = "(TT;)[I")
|
||||
int[] intArrayReturnType(T a) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "longArrayReturnType(java.awt.Frame)",
|
||||
signature = "(TT;)[J")
|
||||
long[] longArrayReturnType(T a) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "booleanArrayReturnType(java.awt.Frame)",
|
||||
signature = "(TT;)[Z")
|
||||
boolean[] booleanArrayReturnType(T a) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "floatArrayReturnType(java.awt.Frame)",
|
||||
signature = "(TT;)[F")
|
||||
float[] floatArrayReturnType(T a) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "doubleArrayReturnType(java.awt.Frame)",
|
||||
signature = "(TT;)[D")
|
||||
double[] doubleArrayReturnType(T a) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "objectArrayReturnType(java.awt.Frame)",
|
||||
signature = "(TT;)[Ljava/lang/Object;")
|
||||
Object[] objectArrayReturnType(T a) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "staticByteArrayReturnType(java.lang.Object)",
|
||||
signature = "<T:Ljava/lang/Object;>(TT;)[B")
|
||||
static <T> byte[] staticByteArrayReturnType(T a) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "staticShortArrayReturnType(java.lang.Object)",
|
||||
signature = "<T:Ljava/lang/Object;>(TT;)[S")
|
||||
static <T> short[] staticShortArrayReturnType(T a) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "staticCharArrayReturnType(java.lang.Object)",
|
||||
signature = "<T:Ljava/lang/Object;>(TT;)[C")
|
||||
static <T> char[] staticCharArrayReturnType(T a) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "staticIntArrayReturnType(java.lang.Object)",
|
||||
signature = "<T:Ljava/lang/Object;>(TT;)[I")
|
||||
static <T> int[] staticIntArrayReturnType(T a) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "staticLongArrayReturnType(java.lang.Object)",
|
||||
signature = "<T:Ljava/lang/Object;>(TT;)[J")
|
||||
static <T> long[] staticLongArrayReturnType(T a) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "staticBooleanArrayReturnType(java.lang.Object)",
|
||||
signature = "<T:Ljava/lang/Object;>(TT;)[Z")
|
||||
static <T> boolean[] staticBooleanArrayReturnType(T a) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "staticFloatArrayReturnType(java.lang.Object)",
|
||||
signature = "<T:Ljava/lang/Object;>(TT;)[F")
|
||||
static <T> float[] staticFloatArrayReturnType(T a) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "staticDoubleArrayReturnType(java.lang.Object)",
|
||||
signature = "<T:Ljava/lang/Object;>(TT;)[D")
|
||||
static <T> double[] staticDoubleArrayReturnType(T a) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "staticObjectArrayReturnType(java.lang.Object)",
|
||||
signature = "<T:Ljava/lang/Object;>(TT;)[Ljava/lang/Object;")
|
||||
static <T> Object[] staticObjectArrayReturnType(T a) {
|
||||
return null;
|
||||
}
|
||||
|
||||
byte[] byteArrayReturnTypeNoSignatureAttribute() {
|
||||
return null;
|
||||
}
|
||||
|
||||
short[] shortArrayReturnTypeNoSignatureAttribute() {
|
||||
return null;
|
||||
}
|
||||
|
||||
char[] charArrayReturnTypeNoSignatureAttribute() {
|
||||
return null;
|
||||
}
|
||||
|
||||
int[] intArrayReturnTypeNoSignatureAttribute() {
|
||||
return null;
|
||||
}
|
||||
|
||||
long[] longArrayReturnTypeNoSignatureAttribute() {
|
||||
return null;
|
||||
}
|
||||
|
||||
boolean[] booleanArrayReturnTypeNoSignatureAttribute() {
|
||||
return null;
|
||||
}
|
||||
|
||||
float[] floatArrayReturnTypeNoSignatureAttribute() {
|
||||
return null;
|
||||
}
|
||||
|
||||
double[] doubleArrayReturnTypeNoSignatureAttribute() {
|
||||
return null;
|
||||
}
|
||||
|
||||
Object[] objectArrayReturnTypeNoSignatureAttribute() {
|
||||
return null;
|
||||
}
|
||||
|
||||
static byte[] staticByteArrayReturnTypeNoSignatureAttribute() {
|
||||
return null;
|
||||
}
|
||||
|
||||
static short[] staticShortArrayReturnTypeNoSignatureAttribute() {
|
||||
return null;
|
||||
}
|
||||
|
||||
static char[] staticCharArrayReturnTypeNoSignatureAttribute() {
|
||||
return null;
|
||||
}
|
||||
|
||||
static int[] staticIntArrayReturnTypeNoSignatureAttribute() {
|
||||
return null;
|
||||
}
|
||||
|
||||
static long[] staticLongArrayReturnTypeNoSignatureAttribute() {
|
||||
return null;
|
||||
}
|
||||
|
||||
static boolean[] staticBooleanArrayReturnTypeNoSignatureAttribute() {
|
||||
return null;
|
||||
}
|
||||
|
||||
static float[] staticFloatArrayReturnTypeNoSignatureAttribute() {
|
||||
return null;
|
||||
}
|
||||
|
||||
static double[] staticDoubleArrayReturnTypeNoSignatureAttribute() {
|
||||
return null;
|
||||
}
|
||||
|
||||
static Object[] staticObjectArrayReturnTypeNoSignatureAttribute() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "typeReturnType()",
|
||||
signature = "()TT;")
|
||||
T typeReturnType() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "typeArrayReturnType()",
|
||||
signature = "()[TT;")
|
||||
T[] typeArrayReturnType() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "extendsReturnType()",
|
||||
signature = "<E:TT;>()TE;")
|
||||
<E extends T> E extendsReturnType() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "extendsArrayReturnType()",
|
||||
signature = "<E:TT;>()[TE;")
|
||||
<E extends T> E[] extendsArrayReturnType() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "genericListReturnType()",
|
||||
signature = "()Ljava/util/List<TT;>;")
|
||||
List<T> genericListReturnType() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "genericListArrayReturnType()",
|
||||
signature = "()[Ljava/util/List<TT;>;")
|
||||
List<T>[] genericListArrayReturnType() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "extendsBoundReturnType()",
|
||||
signature = "()Ljava/util/List<+TT;>;")
|
||||
List<? extends T> extendsBoundReturnType() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "extendsBoundArrayReturnType()",
|
||||
signature = "()[Ljava/util/List<+TT;>;")
|
||||
List<? extends T>[] extendsBoundArrayReturnType() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "superBoundReturnType()",
|
||||
signature = "()Ljava/util/List<-TT;>;")
|
||||
List<? super T> superBoundReturnType() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "superBoundArrayReturnType()",
|
||||
signature = "()[Ljava/util/List<-TT;>;")
|
||||
List<? super T>[] superBoundArrayReturnType() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "wildcardReturnType()",
|
||||
signature = "()Ljava/util/Map<**>;")
|
||||
Map<?, ?> wildcardReturnType() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "wildcardArrayReturnType()",
|
||||
signature = "()[Ljava/util/Map<**>;")
|
||||
Map<?, ?>[] wildcardArrayReturnType() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "staticTypeReturnType()",
|
||||
signature = "<T:Ljava/lang/Object;>()TT;")
|
||||
static <T> T staticTypeReturnType() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "staticTypeArrayReturnType()",
|
||||
signature = "<T:Ljava/lang/Object;>()[TT;")
|
||||
static <T> T[] staticTypeArrayReturnType() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "staticExtendsReturnType()",
|
||||
signature = "<T:Ljava/lang/Object;E:TT;>()TE;")
|
||||
static <T, E extends T> E staticExtendsReturnType() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "staticExtendsArrayReturnType()",
|
||||
signature = "<T:Ljava/lang/Object;E:TT;>()[TE;")
|
||||
static <T, E extends T> E[] staticExtendsArrayReturnType() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "staticGenericListReturnType()",
|
||||
signature = "<T:Ljava/lang/Object;>()Ljava/util/List<TT;>;")
|
||||
static <T> List<T> staticGenericListReturnType() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "staticGenericListArrayReturnType()",
|
||||
signature = "<T:Ljava/lang/Object;>()[Ljava/util/List<TT;>;")
|
||||
static <T> List<T>[] staticGenericListArrayReturnType() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "staticExtendsBoundReturnType()",
|
||||
signature = "<T:Ljava/lang/Object;>()Ljava/util/List<+TT;>;")
|
||||
static <T> List<? extends T> staticExtendsBoundReturnType() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "staticExtendsBoundArrayReturnType()",
|
||||
signature = "<T:Ljava/lang/Object;>()[Ljava/util/List<+TT;>;")
|
||||
static <T> List<? extends T>[] staticExtendsBoundArrayReturnType() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "staticSuperBoundReturnType()",
|
||||
signature = "<T:Ljava/lang/Object;>()Ljava/util/List<-TT;>;")
|
||||
static <T> List<? super T> staticSuperBoundReturnType() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "staticSuperBoundArrayReturnType()",
|
||||
signature = "<T:Ljava/lang/Object;>()[Ljava/util/List<-TT;>;")
|
||||
static <T> List<? super T>[] staticSuperBoundArrayReturnType() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "staticWildcardReturnType()",
|
||||
signature = "()Ljava/util/Map<**>;")
|
||||
static Map<?, ?> staticWildcardReturnType() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "staticWildcardArrayReturnType()",
|
||||
signature = "()[Ljava/util/Map<**>;")
|
||||
static Map<?, ?>[] staticWildcardArrayReturnType() {
|
||||
return null;
|
||||
}
|
||||
|
||||
List noSignature() {
|
||||
return null;
|
||||
}
|
||||
|
||||
static List staticNoSignatureAttribute() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "boundsBooleanArray()",
|
||||
signature = "()Ljava/util/Map<+[Z-[Z>;")
|
||||
Map<? extends boolean[], ? super boolean[]> boundsBooleanArray() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "boundsByteArray()",
|
||||
signature = "()Ljava/util/Map<+[B-[B>;")
|
||||
Map<? extends byte[], ? super byte[]> boundsByteArray() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "boundsShortArray()",
|
||||
signature = "()Ljava/util/Map<+[S-[S>;")
|
||||
Map<? extends short[], ? super short[]> boundsShortArray() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "boundsIntArray()",
|
||||
signature = "()Ljava/util/Map<+[I-[I>;")
|
||||
Map<? extends int[], ? super int[]> boundsIntArray() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "boundsLongArray()",
|
||||
signature = "()Ljava/util/Map<+[J-[J>;")
|
||||
Map<? extends long[], ? super long[]> boundsLongArray() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "boundsCharArray()",
|
||||
signature = "()Ljava/util/Map<+[C-[C>;")
|
||||
Map<? extends char[], ? super char[]> boundsCharArray() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "boundsFloatArray()",
|
||||
signature = "()Ljava/util/Map<+[F-[F>;")
|
||||
Map<? extends float[], ? super float[]> boundsFloatArray() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "boundsDoubleArray()",
|
||||
signature = "()Ljava/util/Map<+[D-[D>;")
|
||||
Map<? extends double[], ? super double[]> boundsDoubleArray() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "boundsObjectArray()",
|
||||
signature = "()Ljava/util/Map<+[Ljava/lang/Object;-[Ljava/lang/Object;>;")
|
||||
Map<? extends Object[], ? super Object[]> boundsObjectArray() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "voidMethod(java.awt.Frame)", signature = "(TT;)V")
|
||||
void voidMethod(T a) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "byteMethod(java.awt.Frame)", signature = "(TT;)B")
|
||||
byte byteMethod(T a) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "shortMethod(java.awt.Frame)", signature = "(TT;)S")
|
||||
short shortMethod(T a) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "charMethod(java.awt.Frame)", signature = "(TT;)C")
|
||||
char charMethod(T a) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "intMethod(java.awt.Frame)", signature = "(TT;)I")
|
||||
int intMethod(T a) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "longMethod(java.awt.Frame)", signature = "(TT;)J")
|
||||
long longMethod(T a) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "booleanMethod(java.awt.Frame)", signature = "(TT;)Z")
|
||||
boolean booleanMethod(T a) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "floatMethod(java.awt.Frame)", signature = "(TT;)F")
|
||||
float floatMethod(T a) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "doubleMethod(java.awt.Frame)", signature = "(TT;)D")
|
||||
double doubleMethod(T a) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "objectMethod(java.awt.Frame)", signature = "(TT;)Ljava/lang/Object;")
|
||||
Object objectMethod(T a) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "staticVoidMethod(java.lang.Object)", signature = "<T:Ljava/lang/Object;>(TT;)V")
|
||||
static <T> void staticVoidMethod(T a) {
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "staticByteMethod(java.lang.Object)", signature = "<T:Ljava/lang/Object;>(TT;)B")
|
||||
static <T> byte staticByteMethod(T a) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "staticShortMethod(java.lang.Object)", signature = "<T:Ljava/lang/Object;>(TT;)S")
|
||||
static <T> short staticShortMethod(T a) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "staticCharMethod(java.lang.Object)", signature = "<T:Ljava/lang/Object;>(TT;)C")
|
||||
static <T> char staticCharMethod(T a) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "staticIntMethod(java.lang.Object)", signature = "<T:Ljava/lang/Object;>(TT;)I")
|
||||
static <T> int staticIntMethod(T a) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "staticLongMethod(java.lang.Object)", signature = "<T:Ljava/lang/Object;>(TT;)J")
|
||||
static <T> long staticLongMethod(T a) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "staticBooleanMethod(java.lang.Object)", signature = "<T:Ljava/lang/Object;>(TT;)Z")
|
||||
static <T> boolean staticBooleanMethod(T a) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "staticFloatMethod(java.lang.Object)", signature = "<T:Ljava/lang/Object;>(TT;)F")
|
||||
static <T> float staticFloatMethod(T a) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "staticDoubleMethod(java.lang.Object)", signature = "<T:Ljava/lang/Object;>(TT;)D")
|
||||
static <T> double staticDoubleMethod(T a) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ExpectedSignature(descriptor = "staticObjectMethod(java.lang.Object)",
|
||||
signature = "<T:Ljava/lang/Object;>(TT;)Ljava/lang/Object;")
|
||||
static <T> Object staticObjectMethod(T a) {
|
||||
return null;
|
||||
}
|
||||
|
||||
void voidReturnTypeNoSignatureAttribute() {
|
||||
}
|
||||
|
||||
byte byteReturnTypeNoSignatureAttribute() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
Object objectReturnNoSignatureAttribute() {
|
||||
return null;
|
||||
}
|
||||
|
||||
static void staticVoidReturnTypeNoSignatureAttribute() {
|
||||
}
|
||||
|
||||
static byte staticByteReturnTypeNoSignatureAttribute() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
static Object staticObjectReturnTypeNoSignatureAttribute() {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2014, 2015, 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
|
||||
@ -56,8 +56,9 @@ public class TestResult extends TestBase {
|
||||
public boolean checkEquals(Object actual, Object expected, String message) {
|
||||
echo("Testing : " + message);
|
||||
if (!Objects.equals(actual, expected)) {
|
||||
getLastTestCase().addAssert(new AssertionFailedException(
|
||||
String.format("%s%nGot: %s, Expected: %s", message, actual, expected)));
|
||||
getLastTestCase().addAssert(String.format("%s\n" +
|
||||
"Expected: %s,\n" +
|
||||
" Got: %s", message, expected, actual));
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
@ -70,8 +71,7 @@ public class TestResult extends TestBase {
|
||||
public boolean checkNotNull(Object actual, String message) {
|
||||
echo("Testing : " + message);
|
||||
if (Objects.isNull(actual)) {
|
||||
getLastTestCase().addAssert(new AssertionFailedException(
|
||||
message + " : Expected not null value"));
|
||||
getLastTestCase().addAssert(message + " : Expected not null value");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
@ -88,7 +88,11 @@ public class TestResult extends TestBase {
|
||||
public boolean checkContains(Set<?> found, Set<?> expected, String message) {
|
||||
Set<?> copy = new HashSet<>(expected);
|
||||
copy.removeAll(found);
|
||||
return checkTrue(found.containsAll(expected), message + " : " + copy);
|
||||
if (!found.containsAll(expected)) {
|
||||
return checkTrue(false, message + " FAIL : not found elements : " + copy);
|
||||
} else {
|
||||
return checkTrue(true, message + " PASS : all elements found");
|
||||
}
|
||||
}
|
||||
|
||||
public void addFailure(Throwable th) {
|
||||
@ -119,7 +123,7 @@ public class TestResult extends TestBase {
|
||||
private class Info {
|
||||
|
||||
private final String info;
|
||||
private final List<AssertionFailedException> asserts;
|
||||
private final List<String> asserts;
|
||||
private final List<Throwable> errors;
|
||||
|
||||
private Info(String info) {
|
||||
@ -141,19 +145,25 @@ public class TestResult extends TestBase {
|
||||
printf("[ERROR] : %s\n", getStackTrace(th));
|
||||
}
|
||||
|
||||
public void addAssert(AssertionFailedException e) {
|
||||
public void addAssert(String e) {
|
||||
asserts.add(e);
|
||||
printf("[ASSERT] : %s\n", getStackTrace(e));
|
||||
printf("[ASSERT] : %s\n", e);
|
||||
}
|
||||
|
||||
public String getMessage() {
|
||||
return (asserts.size() > 0 ? getErrorMessage("[ASSERT]", asserts) + "\n" : "")
|
||||
+ getErrorMessage("[ERROR]", errors);
|
||||
return (asserts.size() > 0 ? getAssertMessages(asserts) + "\n" : "")
|
||||
+ getErrorMessages(errors);
|
||||
}
|
||||
|
||||
public String getErrorMessage(String header, List<? extends Throwable> list) {
|
||||
public String getAssertMessages(List<String> list) {
|
||||
return list.stream()
|
||||
.map(throwable -> String.format("%s : %s", header, getStackTrace(throwable)))
|
||||
.map(message -> String.format("[ASSERT] : %s", message))
|
||||
.collect(Collectors.joining("\n"));
|
||||
}
|
||||
|
||||
public String getErrorMessages(List<? extends Throwable> list) {
|
||||
return list.stream()
|
||||
.map(throwable -> String.format("[ERROR] : %s", getStackTrace(throwable)))
|
||||
.collect(Collectors.joining("\n"));
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user