/*
* 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 4993299
* @summary ConstructorDeclaration tests
* @library ../../lib
* @compile -source 1.5 ConstructorDecl.java
* @run main/othervm ConstructorDecl
*/
import java.util.*;
import com.sun.mirror.declaration.*;
import com.sun.mirror.type.*;
import com.sun.mirror.util.*;
public class ConstructorDecl extends Tester {
/**
* Sed Quis custodiet ipsos custodes?
*/
@AT1
public ConstructorDecl() {
}
public static void main(String[] args) {
(new ConstructorDecl()).run();
}
private ConstructorDeclaration ctor = null; // a constructor
private ConstructorDeclaration ctorDef = null; // a default c'tor
private ConstructorDeclaration ctorInner = null; // an inner class c'tor
protected void init() {
ctor = getAConstructor(thisClassDecl);
ctorDef = getAConstructor((ClassDeclaration)
env.getTypeDeclaration("C1"));
ctorInner = getAConstructor((ClassDeclaration)
env.getTypeDeclaration("C1.C2"));
}
// Return a constructor of a class.
private ConstructorDeclaration getAConstructor(ClassDeclaration c) {
return c.getConstructors().iterator().next();
}
// Declaration methods
@Test(result="constructor")
Collection<String> accept() {
final Collection<String> res = new ArrayList<String>();
ctor.accept(new SimpleDeclarationVisitor() {
public void visitTypeDeclaration(TypeDeclaration t) {
res.add("type");
}
public void visitExecutableDeclaration(ExecutableDeclaration e) {
res.add("executable");
}
public void visitConstructorDeclaration(ConstructorDeclaration c) {
res.add("constructor");
}
});
return res;
}
@Test(result={"@AT1"})
Collection<AnnotationMirror> getAnnotationMirrors() {
return ctor.getAnnotationMirrors();
}
@Test(result=" Sed Quis custodiet ipsos custodes?\n")
String getDocComment() {
return ctor.getDocComment();
}
@Test(result={"public"})
Collection<Modifier> getModifiers() {
return ctor.getModifiers();
}
@Test(result="ConstructorDecl.java")
String getPosition() {
return ctor.getPosition().file().getName();
}
@Test(result="ConstructorDecl.java")
String getPositionDefault() {
return ctorDef.getPosition().file().getName();
}
@Test(result="ConstructorDecl")
String getSimpleName() {
return ctor.getSimpleName();
}
@Test(result="C2")
String getSimpleNameInner() {
return ctorInner.getSimpleName();
}
// MemberDeclaration method
@Test(result="ConstructorDecl")
TypeDeclaration getDeclaringType() {
return ctor.getDeclaringType();
}
// ExecutableDeclaration methods
@Test(result={})
Collection<TypeParameterDeclaration> getFormalTypeParameters1() {
return ctor.getFormalTypeParameters();
}
@Test(result={"N extends java.lang.Number"})
Collection<TypeParameterDeclaration> getFormalTypeParameters2() {
return ctorInner.getFormalTypeParameters();
}
@Test(result={})
Collection<ParameterDeclaration> getParameters1() {
return ctor.getParameters();
}
// 4993299: verify synthetic parameters to inner class constructors
// aren't visible
@Test(result={"N n1", "N n2", "java.lang.String[] ss"},
ordered=true)
Collection<ParameterDeclaration> getParameters2() {
return ctorInner.getParameters();
}
@Test(result={"java.lang.Throwable"})
Collection<ReferenceType> getThrownTypes() {
return ctorInner.getThrownTypes();
}
@Test(result="false")
Boolean isVarArgs1() {
return ctor.isVarArgs();
}
@Test(result="true")
Boolean isVarArgs2() {
return ctorInner.isVarArgs();
}
// toString
@Test(result="<N extends java.lang.Number> C2(N, N, String...)")
@Ignore("This is what it would be nice to see.")
String toStringTest() {
return ctorInner.toString();
}
}
// Classes and interfaces used for testing.
class C1 {
class C2 {
<N extends Number> C2(N n1, N n2, String... ss) throws Throwable {
}
}
}
@interface AT1 {
}