test/tools/apt/mirror/declaration/AnnoVal.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 5014539 5034991
duke@1 28 * @summary Tests AnnotationValue methods.
duke@1 29 * @library ../../lib
duke@1 30 * @compile -source 1.5 AnnoVal.java
duke@1 31 * @run main AnnoVal
duke@1 32 */
duke@1 33
duke@1 34
duke@1 35 import java.util.*;
duke@1 36 import com.sun.mirror.declaration.*;
duke@1 37 import com.sun.mirror.type.*;
duke@1 38
duke@1 39
duke@1 40 public class AnnoVal extends Tester {
duke@1 41
duke@1 42 public static void main(String[] args) {
duke@1 43 (new AnnoVal()).run();
duke@1 44 }
duke@1 45
duke@1 46 @Test(result={
duke@1 47 "i Integer 2",
duke@1 48 "l Long 4294967296",
duke@1 49 "d Double 3.14",
duke@1 50 "b Boolean true",
duke@1 51 "c Character @",
duke@1 52 "s String sigh",
duke@1 53 // The following results reflect some implementation details.
duke@1 54 "k ClassTypeImpl java.lang.Boolean",
duke@1 55 "kb PrimitiveTypeImpl boolean",
duke@1 56 "ka ArrayTypeImpl java.lang.Boolean[]",
duke@1 57 "kab ArrayTypeImpl int[][]",
duke@1 58 "w ClassTypeImpl java.lang.Long",
duke@1 59 "e EnumConstantDeclarationImpl TYPE",
duke@1 60 "sa ArrayList [\"up\", \"down\"]",
duke@1 61 "a AnnotationMirrorImpl @AT1"})
duke@1 62 @AT2(i = 1 + 1,
duke@1 63 l = 1024 * 1024 * 1024 * 4L,
duke@1 64 d = 3.14,
duke@1 65 b = true,
duke@1 66 c = '@',
duke@1 67 s = "sigh",
duke@1 68 k = Boolean.class,
duke@1 69 kb = boolean.class,
duke@1 70 ka = Boolean[].class, // bugid 5020899
duke@1 71 kab = int[][].class, // "
duke@1 72 w = Long.class,
duke@1 73 e = java.lang.annotation.ElementType.TYPE,
duke@1 74 sa = {"up", "down"},
duke@1 75 a = @AT1)
duke@1 76 Collection<String> getValue() {
duke@1 77 Collection<String> res = new ArrayList<String>();
duke@1 78 AnnotationMirror anno = getAnno("getValue", "AT2");
duke@1 79
duke@1 80 for (Map.Entry<AnnotationTypeElementDeclaration, AnnotationValue> e :
duke@1 81 anno.getElementValues().entrySet()) {
duke@1 82 Object val = e.getValue().getValue();
duke@1 83 res.add(String.format("%s %s %s",
duke@1 84 e.getKey().getSimpleName(),
duke@1 85 simpleClassName(val),
duke@1 86 val));
duke@1 87 }
duke@1 88 return res;
duke@1 89 }
duke@1 90
duke@1 91 @Test(result={
duke@1 92 "int i 2",
duke@1 93 "long l 4294967296L",
duke@1 94 "double d 3.14",
duke@1 95 "boolean b true",
duke@1 96 "char c '@'",
duke@1 97 "java.lang.String s \"sigh\"",
duke@1 98 "java.lang.Class k java.lang.Boolean.class",
duke@1 99 "java.lang.Class kb boolean.class",
duke@1 100 "java.lang.Class ka java.lang.Boolean[].class",
duke@1 101 "java.lang.Class kab int[][].class",
duke@1 102 "java.lang.Class<? extends java.lang.Number> w java.lang.Long.class",
duke@1 103 "java.lang.annotation.ElementType e java.lang.annotation.ElementType.TYPE",
duke@1 104 "java.lang.String[] sa {\"up\", \"down\"}",
duke@1 105 "AT1 a @AT1"})
duke@1 106 Collection<String> toStringTests() {
duke@1 107 Collection<String> res = new ArrayList<String>();
duke@1 108 AnnotationMirror anno = getAnno("getValue", "AT2");
duke@1 109
duke@1 110 for (Map.Entry<AnnotationTypeElementDeclaration,AnnotationValue> e :
duke@1 111 anno.getElementValues().entrySet()) {
duke@1 112 res.add(String.format("%s %s %s",
duke@1 113 e.getKey().getReturnType(),
duke@1 114 e.getKey().getSimpleName(),
duke@1 115 e.getValue().toString()));
duke@1 116 }
duke@1 117 return res;
duke@1 118 }
duke@1 119
duke@1 120 @Test(result={
duke@1 121 "byte b 0x0b",
duke@1 122 "float f 3.0f",
duke@1 123 "double nan 0.0/0.0",
duke@1 124 "double hi 1.0/0.0",
duke@1 125 "float lo -1.0f/0.0f",
duke@1 126 "char newline '\\n'",
duke@1 127 "char ff '\\u00ff'",
duke@1 128 "java.lang.String s \"\\\"high\\tlow\\\"\"",
duke@1 129 "java.lang.String smiley \"\\u263a\""})
duke@1 130 @AT3(b = 11,
duke@1 131 f = 3,
duke@1 132 nan = 0.0/0.0,
duke@1 133 hi = 1.0/0.0,
duke@1 134 lo = -1.0f/0.0f,
duke@1 135 newline = '\n',
duke@1 136 ff = '\u00FF',
duke@1 137 s = "\"high\tlow\"",
duke@1 138 smiley = "\u263A")
duke@1 139 Collection<String> toStringFancy() {
duke@1 140 Collection<String> res = new ArrayList<String>();
duke@1 141 AnnotationMirror anno = getAnno("toStringFancy", "AT3");
duke@1 142
duke@1 143 for (Map.Entry<AnnotationTypeElementDeclaration,AnnotationValue> e :
duke@1 144 anno.getElementValues().entrySet()) {
duke@1 145 res.add(String.format("%s %s %s",
duke@1 146 e.getKey().getReturnType(),
duke@1 147 e.getKey().getSimpleName(),
duke@1 148 e.getValue().toString()));
duke@1 149 }
duke@1 150 return res;
duke@1 151 }
duke@1 152
duke@1 153
duke@1 154 /**
duke@1 155 * Returns the simple name of an object's class.
duke@1 156 */
duke@1 157 private String simpleClassName(Object o) {
duke@1 158 return (o == null)
duke@1 159 ? "null"
duke@1 160 : o.getClass().getName().replaceFirst(".*\\.", "");
duke@1 161 }
duke@1 162 }
duke@1 163
duke@1 164
duke@1 165 /*
duke@1 166 * Annotations used for testing.
duke@1 167 */
duke@1 168
duke@1 169 @interface AT1 {
duke@1 170 String value() default "";
duke@1 171 }
duke@1 172
duke@1 173 @interface AT2 {
duke@1 174 int i();
duke@1 175 long l();
duke@1 176 double d();
duke@1 177 boolean b();
duke@1 178 char c();
duke@1 179 String s();
duke@1 180 Class k();
duke@1 181 Class kb();
duke@1 182 Class ka();
duke@1 183 Class kab();
duke@1 184 Class<? extends Number> w();
duke@1 185 java.lang.annotation.ElementType e();
duke@1 186 String[] sa();
duke@1 187 AT1 a();
duke@1 188 }
duke@1 189
duke@1 190 @interface AT3 {
duke@1 191 byte b();
duke@1 192 float f();
duke@1 193 double nan();
duke@1 194 double hi();
duke@1 195 float lo();
duke@1 196 char newline();
duke@1 197 char ff();
duke@1 198 String s();
duke@1 199 String smiley();
duke@1 200 }

mercurial