169e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal/* 269e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal * Javassist, a Java-bytecode translator toolkit. 369e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal * Copyright (C) 2004 Bill Burke. All Rights Reserved. 469e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal * 569e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal * The contents of this file are subject to the Mozilla Public License Version 669e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal * 1.1 (the "License"); you may not use this file except in compliance with 769e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal * the License. Alternatively, the contents of this file may be used under 869e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal * the terms of the GNU Lesser General Public License Version 2.1 or later. 969e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal * 1069e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal * Software distributed under the License is distributed on an "AS IS" basis, 1169e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License 1269e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal * for the specific language governing rights and limitations under the 1369e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal * License. 1469e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal */ 1569e17611504376e4d4603925f8528dfc890fd2c6Luis Sigalpackage javassist.bytecode.annotation; 1669e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal 1769e17611504376e4d4603925f8528dfc890fd2c6Luis Sigalimport javassist.ClassPool; 1869e17611504376e4d4603925f8528dfc890fd2c6Luis Sigalimport javassist.bytecode.ConstPool; 1969e17611504376e4d4603925f8528dfc890fd2c6Luis Sigalimport java.io.IOException; 2069e17611504376e4d4603925f8528dfc890fd2c6Luis Sigalimport java.lang.reflect.Method; 2169e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal 2269e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal/** 2369e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal * Nested annotation. 2469e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal * 2569e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal * @author <a href="mailto:bill@jboss.org">Bill Burke</a> 2669e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal * @author Shigeru Chiba 2769e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal */ 2869e17611504376e4d4603925f8528dfc890fd2c6Luis Sigalpublic class AnnotationMemberValue extends MemberValue { 2969e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal Annotation value; 3069e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal 3169e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal /** 3269e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal * Constructs an annotation member. The initial value is not specified. 3369e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal */ 3469e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal public AnnotationMemberValue(ConstPool cp) { 3569e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal this(null, cp); 3669e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal } 3769e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal 3869e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal /** 3969e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal * Constructs an annotation member. The initial value is specified by 4069e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal * the first parameter. 4169e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal */ 4269e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal public AnnotationMemberValue(Annotation a, ConstPool cp) { 4369e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal super('@', cp); 4469e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal value = a; 4569e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal } 4669e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal 4769e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal Object getValue(ClassLoader cl, ClassPool cp, Method m) 4869e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal throws ClassNotFoundException 4969e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal { 5069e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal return AnnotationImpl.make(cl, getType(cl), cp, value); 5169e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal } 5269e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal 5369e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal Class getType(ClassLoader cl) throws ClassNotFoundException { 5469e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal if (value == null) 5569e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal throw new ClassNotFoundException("no type specified"); 5669e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal else 5769e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal return loadClass(cl, value.getTypeName()); 5869e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal } 5969e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal 6069e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal /** 6169e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal * Obtains the value. 6269e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal */ 6369e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal public Annotation getValue() { 6469e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal return value; 6569e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal } 6669e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal 6769e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal /** 6869e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal * Sets the value of this member. 6969e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal */ 7069e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal public void setValue(Annotation newValue) { 7169e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal value = newValue; 7269e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal } 7369e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal 7469e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal /** 7569e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal * Obtains the string representation of this object. 7669e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal */ 7769e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal public String toString() { 7869e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal return value.toString(); 7969e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal } 8069e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal 8169e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal /** 8269e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal * Writes the value. 8369e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal */ 8469e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal public void write(AnnotationsWriter writer) throws IOException { 8569e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal writer.annotationValue(); 8669e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal value.write(writer); 8769e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal } 8869e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal 8969e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal /** 9069e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal * Accepts a visitor. 9169e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal */ 9269e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal public void accept(MemberValueVisitor visitor) { 9369e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal visitor.visitAnnotationMemberValue(this); 9469e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal } 9569e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal} 96