test/tools/apt/mirror/declaration/ClassDecl.java

Sat, 01 Dec 2007 00:00:00 +0000

author
duke
date
Sat, 01 Dec 2007 00:00:00 +0000
changeset 1
9a66ca7c79fa
child 132
a54ef8459576
permissions
-rw-r--r--

Initial load

duke@1 1 /*
duke@1 2 * Copyright 2004-2007 Sun Microsystems, Inc. All Rights Reserved.
duke@1 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
duke@1 4 *
duke@1 5 * This code is free software; you can redistribute it and/or modify it
duke@1 6 * under the terms of the GNU General Public License version 2 only, as
duke@1 7 * published by the Free Software Foundation.
duke@1 8 *
duke@1 9 * This code is distributed in the hope that it will be useful, but WITHOUT
duke@1 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
duke@1 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
duke@1 12 * version 2 for more details (a copy is included in the LICENSE file that
duke@1 13 * accompanied this code).
duke@1 14 *
duke@1 15 * You should have received a copy of the GNU General Public License version
duke@1 16 * 2 along with this work; if not, write to the Free Software Foundation,
duke@1 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
duke@1 18 *
duke@1 19 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
duke@1 20 * CA 95054 USA or visit www.sun.com if you need additional information or
duke@1 21 * have any questions.
duke@1 22 */
duke@1 23
duke@1 24
duke@1 25 /*
duke@1 26 * @test
duke@1 27 * @bug 4853450 4997614
duke@1 28 * @summary ClassDeclaration tests
duke@1 29 * @library ../../lib
duke@1 30 * @compile -source 1.5 ClassDecl.java
duke@1 31 * @run main ClassDecl
duke@1 32 */
duke@1 33
duke@1 34
duke@1 35 import java.io.Serializable;
duke@1 36 import java.util.*;
duke@1 37 import com.sun.mirror.declaration.*;
duke@1 38 import com.sun.mirror.type.*;
duke@1 39 import com.sun.mirror.util.*;
duke@1 40
duke@1 41
duke@1 42 /**
duke@1 43 * Sed Quis custodiet ipsos custodes?
duke@1 44 */
duke@1 45 @AT1
duke@1 46 @AT2
duke@1 47 public class ClassDecl extends Tester {
duke@1 48
duke@1 49 public static void main(String[] args) {
duke@1 50 (new ClassDecl()).run();
duke@1 51 }
duke@1 52
duke@1 53
duke@1 54 private ClassDeclaration nested = null; // a nested type
duke@1 55 private ClassDeclaration object = null; // java.lang.object
duke@1 56
duke@1 57 // A constructor to be found
duke@1 58 private ClassDecl() {
duke@1 59 }
duke@1 60
duke@1 61 // Another constructor to be found
duke@1 62 private ClassDecl(int i) {
duke@1 63 this();
duke@1 64 }
duke@1 65
duke@1 66 // An extra field to be found
duke@1 67 static int i;
duke@1 68
duke@1 69 // Static initializer isn't among this class's methods.
duke@1 70 static {
duke@1 71 i = 7;
duke@1 72 }
duke@1 73
duke@1 74 // A nested class with some accoutrements
duke@1 75 private static strictfp class NestedClass<T> implements Serializable {
duke@1 76 void m1() {}
duke@1 77 void m2() {}
duke@1 78 void m2(int i) {}
duke@1 79 }
duke@1 80
duke@1 81 protected void init() {
duke@1 82 nested = (ClassDeclaration)
duke@1 83 thisClassDecl.getNestedTypes().iterator().next();
duke@1 84 object = (ClassDeclaration)
duke@1 85 env.getTypeDeclaration("java.lang.Object");
duke@1 86 }
duke@1 87
duke@1 88
duke@1 89 // Declaration methods
duke@1 90
duke@1 91 @Test(result="class")
duke@1 92 Collection<String> accept() {
duke@1 93 final Collection<String> res = new ArrayList<String>();
duke@1 94
duke@1 95 thisClassDecl.accept(new SimpleDeclarationVisitor() {
duke@1 96 public void visitTypeDeclaration(TypeDeclaration t) {
duke@1 97 res.add("type");
duke@1 98 }
duke@1 99 public void visitClassDeclaration(ClassDeclaration c) {
duke@1 100 res.add("class");
duke@1 101 }
duke@1 102 public void visitEnumDeclaration(EnumDeclaration e) {
duke@1 103 res.add("enum");
duke@1 104 }
duke@1 105 });
duke@1 106 return res;
duke@1 107 }
duke@1 108
duke@1 109 @Test(result={"@AT1", "@AT2"})
duke@1 110 Collection<AnnotationMirror> getAnnotationMirrors() {
duke@1 111 return thisClassDecl.getAnnotationMirrors();
duke@1 112 }
duke@1 113
duke@1 114 @Test(result=" Sed Quis custodiet ipsos custodes?\n")
duke@1 115 String getDocComment() {
duke@1 116 return thisClassDecl.getDocComment();
duke@1 117 }
duke@1 118
duke@1 119 @Test(result={"public"})
duke@1 120 Collection<Modifier> getModifiers1() {
duke@1 121 return thisClassDecl.getModifiers();
duke@1 122 }
duke@1 123
duke@1 124 // Check that static nested class has "static" modifier, even though
duke@1 125 // the VM doesn't set that bit.
duke@1 126 @Test(result={"private", "static", "strictfp"})
duke@1 127 Collection<Modifier> getModifiers2() {
duke@1 128 return nested.getModifiers();
duke@1 129 }
duke@1 130
duke@1 131 @Test(result="ClassDecl.java")
duke@1 132 String getPosition() {
duke@1 133 return thisClassDecl.getPosition().file().getName();
duke@1 134 }
duke@1 135
duke@1 136 @Test(result="ClassDecl")
duke@1 137 String getSimpleName1() {
duke@1 138 return thisClassDecl.getSimpleName();
duke@1 139 }
duke@1 140
duke@1 141 @Test(result="NestedClass")
duke@1 142 String getSimpleName2() {
duke@1 143 return nested.getSimpleName();
duke@1 144 }
duke@1 145
duke@1 146
duke@1 147 // MemberDeclaration method
duke@1 148
duke@1 149 @Test(result="null")
duke@1 150 TypeDeclaration getDeclaringType1() {
duke@1 151 return thisClassDecl.getDeclaringType();
duke@1 152 }
duke@1 153
duke@1 154 @Test(result="ClassDecl")
duke@1 155 TypeDeclaration getDeclaringType2() {
duke@1 156 return nested.getDeclaringType();
duke@1 157 }
duke@1 158
duke@1 159
duke@1 160 // TypeDeclaration methods
duke@1 161
duke@1 162 @Test(result={"nested", "object", "i"})
duke@1 163 Collection<FieldDeclaration> getFields() {
duke@1 164 return thisClassDecl.getFields();
duke@1 165 }
duke@1 166
duke@1 167 @Test(result={})
duke@1 168 Collection<TypeParameterDeclaration> getFormalTypeParameters1() {
duke@1 169 return thisClassDecl.getFormalTypeParameters();
duke@1 170 }
duke@1 171
duke@1 172 @Test(result="T")
duke@1 173 Collection<TypeParameterDeclaration> getFormalTypeParameters2() {
duke@1 174 return nested.getFormalTypeParameters();
duke@1 175 }
duke@1 176
duke@1 177 @Test(result="ClassDecl.NestedClass<T>")
duke@1 178 Collection<TypeDeclaration> getNestedTypes() {
duke@1 179 return thisClassDecl.getNestedTypes();
duke@1 180 }
duke@1 181
duke@1 182 @Test(result="")
duke@1 183 PackageDeclaration getPackage1() {
duke@1 184 return thisClassDecl.getPackage();
duke@1 185 }
duke@1 186
duke@1 187 @Test(result="java.lang")
duke@1 188 PackageDeclaration getPackage2() {
duke@1 189 return object.getPackage();
duke@1 190 }
duke@1 191
duke@1 192 @Test(result="ClassDecl")
duke@1 193 String getQualifiedName1() {
duke@1 194 return thisClassDecl.getQualifiedName();
duke@1 195 }
duke@1 196
duke@1 197 @Test(result="ClassDecl.NestedClass")
duke@1 198 String getQualifiedName2() {
duke@1 199 return nested.getQualifiedName();
duke@1 200 }
duke@1 201
duke@1 202 @Test(result="java.lang.Object")
duke@1 203 String getQualifiedName3() {
duke@1 204 return object.getQualifiedName();
duke@1 205 }
duke@1 206
duke@1 207 @Test(result="java.io.Serializable")
duke@1 208 Collection<InterfaceType> getSuperinterfaces() {
duke@1 209 return nested.getSuperinterfaces();
duke@1 210 }
duke@1 211
duke@1 212
duke@1 213 // ClassDeclaration methods
duke@1 214
duke@1 215 @Test(result={"ClassDecl()", "ClassDecl(int)"})
duke@1 216 Collection<ConstructorDeclaration> getConstructors1() {
duke@1 217 return thisClassDecl.getConstructors();
duke@1 218 }
duke@1 219
duke@1 220 // Check for default constructor.
duke@1 221 // 4997614: visitConstructionDeclaration reports info when there is no ctor
duke@1 222 @Test(result={"NestedClass()"})
duke@1 223 Collection<ConstructorDeclaration> getConstructors2() {
duke@1 224 return nested.getConstructors();
duke@1 225 }
duke@1 226
duke@1 227 @Test(result={"m1()", "m2()", "m2(int)"})
duke@1 228 Collection<MethodDeclaration> getMethods() {
duke@1 229 return nested.getMethods();
duke@1 230 }
duke@1 231
duke@1 232 @Test(result={"Tester"})
duke@1 233 ClassType getSuperclass() {
duke@1 234 return thisClassDecl.getSuperclass();
duke@1 235 }
duke@1 236
duke@1 237 @Test(result={"null"})
duke@1 238 ClassType objectHasNoSuperclass() {
duke@1 239 return object.getSuperclass();
duke@1 240 }
duke@1 241 }
duke@1 242
duke@1 243
duke@1 244 // Annotations used for testing.
duke@1 245
duke@1 246 @interface AT1 {
duke@1 247 }
duke@1 248
duke@1 249 @interface AT2 {
duke@1 250 }

mercurial