duke@1: /* duke@1: * Copyright 2004-2007 Sun Microsystems, Inc. All Rights Reserved. duke@1: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. duke@1: * duke@1: * This code is free software; you can redistribute it and/or modify it duke@1: * under the terms of the GNU General Public License version 2 only, as duke@1: * published by the Free Software Foundation. duke@1: * duke@1: * This code is distributed in the hope that it will be useful, but WITHOUT duke@1: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or duke@1: * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License duke@1: * version 2 for more details (a copy is included in the LICENSE file that duke@1: * accompanied this code). duke@1: * duke@1: * You should have received a copy of the GNU General Public License version duke@1: * 2 along with this work; if not, write to the Free Software Foundation, duke@1: * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. duke@1: * duke@1: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, duke@1: * CA 95054 USA or visit www.sun.com if you need additional information or duke@1: * have any questions. duke@1: */ duke@1: duke@1: duke@1: /* duke@1: * @test duke@1: * @bug 4853450 5014539 5034991 duke@1: * @summary Tests AnnotationValue methods. duke@1: * @library ../../lib duke@1: * @compile -source 1.5 AnnoVal.java duke@1: * @run main AnnoVal duke@1: */ duke@1: duke@1: duke@1: import java.util.*; duke@1: import com.sun.mirror.declaration.*; duke@1: import com.sun.mirror.type.*; duke@1: duke@1: duke@1: public class AnnoVal extends Tester { duke@1: duke@1: public static void main(String[] args) { duke@1: (new AnnoVal()).run(); duke@1: } duke@1: duke@1: @Test(result={ duke@1: "i Integer 2", duke@1: "l Long 4294967296", duke@1: "d Double 3.14", duke@1: "b Boolean true", duke@1: "c Character @", duke@1: "s String sigh", duke@1: // The following results reflect some implementation details. duke@1: "k ClassTypeImpl java.lang.Boolean", duke@1: "kb PrimitiveTypeImpl boolean", duke@1: "ka ArrayTypeImpl java.lang.Boolean[]", duke@1: "kab ArrayTypeImpl int[][]", duke@1: "w ClassTypeImpl java.lang.Long", duke@1: "e EnumConstantDeclarationImpl TYPE", duke@1: "sa ArrayList [\"up\", \"down\"]", duke@1: "a AnnotationMirrorImpl @AT1"}) duke@1: @AT2(i = 1 + 1, duke@1: l = 1024 * 1024 * 1024 * 4L, duke@1: d = 3.14, duke@1: b = true, duke@1: c = '@', duke@1: s = "sigh", duke@1: k = Boolean.class, duke@1: kb = boolean.class, duke@1: ka = Boolean[].class, // bugid 5020899 duke@1: kab = int[][].class, // " duke@1: w = Long.class, duke@1: e = java.lang.annotation.ElementType.TYPE, duke@1: sa = {"up", "down"}, duke@1: a = @AT1) duke@1: Collection getValue() { duke@1: Collection res = new ArrayList(); duke@1: AnnotationMirror anno = getAnno("getValue", "AT2"); duke@1: duke@1: for (Map.Entry e : duke@1: anno.getElementValues().entrySet()) { duke@1: Object val = e.getValue().getValue(); duke@1: res.add(String.format("%s %s %s", duke@1: e.getKey().getSimpleName(), duke@1: simpleClassName(val), duke@1: val)); duke@1: } duke@1: return res; duke@1: } duke@1: duke@1: @Test(result={ duke@1: "int i 2", duke@1: "long l 4294967296L", duke@1: "double d 3.14", duke@1: "boolean b true", duke@1: "char c '@'", duke@1: "java.lang.String s \"sigh\"", duke@1: "java.lang.Class k java.lang.Boolean.class", duke@1: "java.lang.Class kb boolean.class", duke@1: "java.lang.Class ka java.lang.Boolean[].class", duke@1: "java.lang.Class kab int[][].class", duke@1: "java.lang.Class w java.lang.Long.class", duke@1: "java.lang.annotation.ElementType e java.lang.annotation.ElementType.TYPE", duke@1: "java.lang.String[] sa {\"up\", \"down\"}", duke@1: "AT1 a @AT1"}) duke@1: Collection toStringTests() { duke@1: Collection res = new ArrayList(); duke@1: AnnotationMirror anno = getAnno("getValue", "AT2"); duke@1: duke@1: for (Map.Entry e : duke@1: anno.getElementValues().entrySet()) { duke@1: res.add(String.format("%s %s %s", duke@1: e.getKey().getReturnType(), duke@1: e.getKey().getSimpleName(), duke@1: e.getValue().toString())); duke@1: } duke@1: return res; duke@1: } duke@1: duke@1: @Test(result={ duke@1: "byte b 0x0b", duke@1: "float f 3.0f", duke@1: "double nan 0.0/0.0", duke@1: "double hi 1.0/0.0", duke@1: "float lo -1.0f/0.0f", duke@1: "char newline '\\n'", duke@1: "char ff '\\u00ff'", duke@1: "java.lang.String s \"\\\"high\\tlow\\\"\"", duke@1: "java.lang.String smiley \"\\u263a\""}) duke@1: @AT3(b = 11, duke@1: f = 3, duke@1: nan = 0.0/0.0, duke@1: hi = 1.0/0.0, duke@1: lo = -1.0f/0.0f, duke@1: newline = '\n', duke@1: ff = '\u00FF', duke@1: s = "\"high\tlow\"", duke@1: smiley = "\u263A") duke@1: Collection toStringFancy() { duke@1: Collection res = new ArrayList(); duke@1: AnnotationMirror anno = getAnno("toStringFancy", "AT3"); duke@1: duke@1: for (Map.Entry e : duke@1: anno.getElementValues().entrySet()) { duke@1: res.add(String.format("%s %s %s", duke@1: e.getKey().getReturnType(), duke@1: e.getKey().getSimpleName(), duke@1: e.getValue().toString())); duke@1: } duke@1: return res; duke@1: } duke@1: duke@1: duke@1: /** duke@1: * Returns the simple name of an object's class. duke@1: */ duke@1: private String simpleClassName(Object o) { duke@1: return (o == null) duke@1: ? "null" duke@1: : o.getClass().getName().replaceFirst(".*\\.", ""); duke@1: } duke@1: } duke@1: duke@1: duke@1: /* duke@1: * Annotations used for testing. duke@1: */ duke@1: duke@1: @interface AT1 { duke@1: String value() default ""; duke@1: } duke@1: duke@1: @interface AT2 { duke@1: int i(); duke@1: long l(); duke@1: double d(); duke@1: boolean b(); duke@1: char c(); duke@1: String s(); duke@1: Class k(); duke@1: Class kb(); duke@1: Class ka(); duke@1: Class kab(); duke@1: Class w(); duke@1: java.lang.annotation.ElementType e(); duke@1: String[] sa(); duke@1: AT1 a(); duke@1: } duke@1: duke@1: @interface AT3 { duke@1: byte b(); duke@1: float f(); duke@1: double nan(); duke@1: double hi(); duke@1: float lo(); duke@1: char newline(); duke@1: char ff(); duke@1: String s(); duke@1: String smiley(); duke@1: }