mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-22 20:14:43 +02:00
Initial load
This commit is contained in:
parent
686d76f772
commit
f57b87e8f6
2973 changed files with 295817 additions and 0 deletions
160
langtools/test/tools/apt/lib/Tester.java
Normal file
160
langtools/test/tools/apt/lib/Tester.java
Normal file
|
@ -0,0 +1,160 @@
|
|||
/*
|
||||
* Copyright 2004-2007 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
||||
* have any questions.
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
* A utility used to invoke and test the apt tool.
|
||||
* Tests should subclass Tester, and invoke run().
|
||||
*
|
||||
* @author Scott Seligman
|
||||
*/
|
||||
|
||||
import java.io.*;
|
||||
import java.util.*;
|
||||
import com.sun.mirror.apt.*;
|
||||
import com.sun.mirror.declaration.*;
|
||||
|
||||
|
||||
public abstract class Tester {
|
||||
|
||||
/**
|
||||
* The declaration corresponding to this tester's class. Set by
|
||||
* TestProcessorFactory after the constructor completes, and
|
||||
* before init() is invoked.
|
||||
*/
|
||||
ClassDeclaration thisClassDecl;
|
||||
|
||||
/**
|
||||
* The environment for this apt run. Set by TestProcessorFactory
|
||||
* after the constructor completes, and before init() is invoked.
|
||||
*/
|
||||
AnnotationProcessorEnvironment env;
|
||||
|
||||
|
||||
// TestProcessorFactory looks here to find the tester that's running
|
||||
// when it's invoked.
|
||||
static Tester activeTester;
|
||||
|
||||
private static final String[] DEFAULT_ARGS = {
|
||||
"-nocompile",
|
||||
"-XPrintAptRounds",
|
||||
"-XListDeclarations",
|
||||
};
|
||||
private static final String[] NO_STRINGS = {};
|
||||
|
||||
// Force processor and factory to be compiled
|
||||
private static Class dummy = TestProcessorFactory.class;
|
||||
|
||||
private final String testSrc = System.getProperty("test.src", ".");
|
||||
private final String testClasses = System.getProperty("test.classes", ".");
|
||||
|
||||
// apt command-line args
|
||||
private String[] args;
|
||||
|
||||
|
||||
static {
|
||||
// Enable assertions in the unnamed package.
|
||||
ClassLoader loader = Tester.class.getClassLoader();
|
||||
if (loader != null) {
|
||||
loader.setPackageAssertionStatus(null, true);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
protected Tester(String... additionalArgs) {
|
||||
String sourceFile = testSrc + File.separator +
|
||||
getClass().getName() + ".java";
|
||||
|
||||
ArrayList<String> as = new ArrayList<String>();
|
||||
Collections.addAll(as, DEFAULT_ARGS);
|
||||
as.add("-sourcepath"); as.add(testSrc);
|
||||
as.add("-factory"); as.add(TestProcessorFactory.class.getName());
|
||||
Collections.addAll(as, additionalArgs);
|
||||
as.add(sourceFile);
|
||||
args = as.toArray(NO_STRINGS);
|
||||
}
|
||||
|
||||
/**
|
||||
* Run apt.
|
||||
*/
|
||||
protected void run() {
|
||||
activeTester = this;
|
||||
if (com.sun.tools.apt.Main.process(args) != 0) {
|
||||
throw new Error("apt errors encountered.");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Called after thisClassDecl and env have been set, but before any
|
||||
* tests are run, to allow the tester subclass to perform any
|
||||
* needed initialization.
|
||||
*/
|
||||
protected void init() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the declaration of a named method in this class. If this
|
||||
* method name is overloaded, one method is chosen arbitrarily.
|
||||
* Returns null if no method is found.
|
||||
*/
|
||||
protected MethodDeclaration getMethod(String methodName) {
|
||||
for (MethodDeclaration m : thisClassDecl.getMethods()) {
|
||||
if (methodName.equals(m.getSimpleName())) {
|
||||
return m;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the declaration of a named field in this class.
|
||||
* Returns null if no field is found.
|
||||
*/
|
||||
protected FieldDeclaration getField(String fieldName) {
|
||||
for (FieldDeclaration f : thisClassDecl.getFields()) {
|
||||
if (fieldName.equals(f.getSimpleName())) {
|
||||
return f;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the annotation mirror of a given type on a named method
|
||||
* in this class. If this method name is overloaded, one method is
|
||||
* chosen arbitrarily. Returns null if no appropriate annotation
|
||||
* is found.
|
||||
*/
|
||||
protected AnnotationMirror getAnno(String methodName, String annoType) {
|
||||
MethodDeclaration m = getMethod(methodName);
|
||||
if (m != null) {
|
||||
TypeDeclaration at = env.getTypeDeclaration(annoType);
|
||||
for (AnnotationMirror a : m.getAnnotationMirrors()) {
|
||||
if (at == a.getAnnotationType().getDeclaration()) {
|
||||
return a;
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue