/* * Copyright (c) 2013, 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. */ import java.io.*; import java.lang.reflect.Constructor; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * Test driver for MethodParameters testing. *
* The intended use of this driver is to run it, giving the name of * a single class compiled with -parameters as argument. The driver * will test the specified class, and any nested classes it finds. *
* Each class is tested in two way. By refelction, and by directly * checking MethodParameters attributes in the classfile. The checking * is done using two visitor classes {@link ClassFileVisitor} and * {@link ReflectionVisitor}. *
* The {@code ReflectionVisitor} test logically belongs with library tests. * we wish to reuse the same test-cases, so both test are committed together, * under langtools. The tests, may be duplicated in the jdk repository. */ public class MethodParametersTester { final static File classesdir = new File(System.getProperty("test.classes", ".")); private String classname; private File[] files; private File refFile; private int errors; private int warnings; private int diffGolden; /** * The visitor classes that does the actual checking are referenced * statically, to force compilations, without having to reference * them in individual test cases. *
* This makes it easy to change the set of visitors, without
* complicating the design with dynamic discovery and compilation
* of visitor classes.
*/
static final Class visitors[] = {
ClassFileVisitor.class,
ReflectionVisitor.class
};
/**
* Test-driver expect a single classname as argument.
*/
public static void main(String... args) throws Exception {
if (args.length != 2) {
throw new Error("A single class name and a golden file are expected as argument");
}
String testSrc = System.getProperty("test.src");
String testName = args[0];
String testGoldenFile = args[1];
final String pattern = testName + ".*\\.class";
File refFile = new File(testSrc, testGoldenFile);
File[] files = classesdir.listFiles(new FileFilter() {
public boolean accept(File f) {
return f.getName().matches(pattern);
}
});
if (files.length == 0) {
File file = new File(classesdir, testName + ".class");
throw new Error(file.getPath() + " not found");
}
new MethodParametersTester(testName, files, refFile).run();
}
public MethodParametersTester(String name, File[] files, File refFile) {
this.classname = name;
this.files = files;
this.refFile = refFile;
}
void run() throws Exception {
// Test with each visitor
for (Class