blob: e3771f8f95eccc2dae0a2716a93573e194cab2d1 [file] [log] [blame]
/*
* 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.
*/
/*
* @test
* @bug 4853450 4997614
* @summary ClassDeclaration tests
* @library ../../lib
* @compile -source 1.5 ClassDecl.java
* @run main ClassDecl
*/
import java.io.Serializable;
import java.util.*;
import com.sun.mirror.declaration.*;
import com.sun.mirror.type.*;
import com.sun.mirror.util.*;
/**
* Sed Quis custodiet ipsos custodes?
*/
@AT1
@AT2
public class ClassDecl extends Tester {
public static void main(String[] args) {
(new ClassDecl()).run();
}
private ClassDeclaration nested = null; // a nested type
private ClassDeclaration object = null; // java.lang.object
// A constructor to be found
private ClassDecl() {
}
// Another constructor to be found
private ClassDecl(int i) {
this();
}
// An extra field to be found
static int i;
// Static initializer isn't among this class's methods.
static {
i = 7;
}
// A nested class with some accoutrements
private static strictfp class NestedClass<T> implements Serializable {
void m1() {}
void m2() {}
void m2(int i) {}
}
protected void init() {
nested = (ClassDeclaration)
thisClassDecl.getNestedTypes().iterator().next();
object = (ClassDeclaration)
env.getTypeDeclaration("java.lang.Object");
}
// Declaration methods
@Test(result="class")
Collection<String> accept() {
final Collection<String> res = new ArrayList<String>();
thisClassDecl.accept(new SimpleDeclarationVisitor() {
public void visitTypeDeclaration(TypeDeclaration t) {
res.add("type");
}
public void visitClassDeclaration(ClassDeclaration c) {
res.add("class");
}
public void visitEnumDeclaration(EnumDeclaration e) {
res.add("enum");
}
});
return res;
}
@Test(result={"@AT1", "@AT2"})
Collection<AnnotationMirror> getAnnotationMirrors() {
return thisClassDecl.getAnnotationMirrors();
}
@Test(result=" Sed Quis custodiet ipsos custodes?\n")
String getDocComment() {
return thisClassDecl.getDocComment();
}
@Test(result={"public"})
Collection<Modifier> getModifiers1() {
return thisClassDecl.getModifiers();
}
// Check that static nested class has "static" modifier, even though
// the VM doesn't set that bit.
@Test(result={"private", "static", "strictfp"})
Collection<Modifier> getModifiers2() {
return nested.getModifiers();
}
@Test(result="ClassDecl.java")
String getPosition() {
return thisClassDecl.getPosition().file().getName();
}
@Test(result="ClassDecl")
String getSimpleName1() {
return thisClassDecl.getSimpleName();
}
@Test(result="NestedClass")
String getSimpleName2() {
return nested.getSimpleName();
}
// MemberDeclaration method
@Test(result="null")
TypeDeclaration getDeclaringType1() {
return thisClassDecl.getDeclaringType();
}
@Test(result="ClassDecl")
TypeDeclaration getDeclaringType2() {
return nested.getDeclaringType();
}
// TypeDeclaration methods
@Test(result={"nested", "object", "i"})
Collection<FieldDeclaration> getFields() {
return thisClassDecl.getFields();
}
@Test(result={})
Collection<TypeParameterDeclaration> getFormalTypeParameters1() {
return thisClassDecl.getFormalTypeParameters();
}
@Test(result="T")
Collection<TypeParameterDeclaration> getFormalTypeParameters2() {
return nested.getFormalTypeParameters();
}
@Test(result="ClassDecl.NestedClass<T>")
Collection<TypeDeclaration> getNestedTypes() {
return thisClassDecl.getNestedTypes();
}
@Test(result="")
PackageDeclaration getPackage1() {
return thisClassDecl.getPackage();
}
@Test(result="java.lang")
PackageDeclaration getPackage2() {
return object.getPackage();
}
@Test(result="ClassDecl")
String getQualifiedName1() {
return thisClassDecl.getQualifiedName();
}
@Test(result="ClassDecl.NestedClass")
String getQualifiedName2() {
return nested.getQualifiedName();
}
@Test(result="java.lang.Object")
String getQualifiedName3() {
return object.getQualifiedName();
}
@Test(result="java.io.Serializable")
Collection<InterfaceType> getSuperinterfaces() {
return nested.getSuperinterfaces();
}
// ClassDeclaration methods
@Test(result={"ClassDecl()", "ClassDecl(int)"})
Collection<ConstructorDeclaration> getConstructors1() {
return thisClassDecl.getConstructors();
}
// Check for default constructor.
// 4997614: visitConstructionDeclaration reports info when there is no ctor
@Test(result={"NestedClass()"})
Collection<ConstructorDeclaration> getConstructors2() {
return nested.getConstructors();
}
@Test(result={"m1()", "m2()", "m2(int)"})
Collection<MethodDeclaration> getMethods() {
return nested.getMethods();
}
@Test(result={"Tester"})
ClassType getSuperclass() {
return thisClassDecl.getSuperclass();
}
@Test(result={"null"})
ClassType objectHasNoSuperclass() {
return object.getSuperclass();
}
}
// Annotations used for testing.
@interface AT1 {
}
@interface AT2 {
}