/*
 * Javassist, a Java-bytecode translator toolkit.
 * Copyright (C) 2004 Bill Burke. All Rights Reserved.
 *
 * The contents of this file are subject to the Mozilla Public License Version
 * 1.1 (the "License"); you may not use this file except in compliance with
 * the License.  Alternatively, the contents of this file may be used under
 * the terms of the GNU Lesser General Public License Version 2.1 or later,
 * or the Apache License Version 2.0.
 *
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
 * for the specific language governing rights and limitations under the
 * License.
 */
package javassist.bytecode.annotation;

import java.io.IOException;
import java.lang.reflect.Array;
import java.lang.reflect.Method;

import javassist.ClassPool;
import javassist.bytecode.ConstPool;

Array member.
Author:Bill Burke, Shigeru Chiba
/** * Array member. * * @author <a href="mailto:bill@jboss.org">Bill Burke</a> * @author Shigeru Chiba */
public class ArrayMemberValue extends MemberValue { MemberValue type; MemberValue[] values;
Constructs an array. The initial value or type are not specified.
/** * Constructs an array. The initial value or type are not specified. */
public ArrayMemberValue(ConstPool cp) { super('[', cp); type = null; values = null; }
Constructs an array. The initial value is not specified.
Params:
  • t – the type of the array elements.
/** * Constructs an array. The initial value is not specified. * * @param t the type of the array elements. */
public ArrayMemberValue(MemberValue t, ConstPool cp) { super('[', cp); type = t; values = null; } @Override Object getValue(ClassLoader cl, ClassPool cp, Method method) throws ClassNotFoundException { if (values == null) throw new ClassNotFoundException( "no array elements found: " + method.getName()); int size = values.length; Class<?> clazz; if (type == null) { clazz = method.getReturnType().getComponentType(); if (clazz == null || size > 0) throw new ClassNotFoundException("broken array type: " + method.getName()); } else clazz = type.getType(cl); Object a = Array.newInstance(clazz, size); for (int i = 0; i < size; i++) Array.set(a, i, values[i].getValue(cl, cp, method)); return a; } @Override Class<?> getType(ClassLoader cl) throws ClassNotFoundException { if (type == null) throw new ClassNotFoundException("no array type specified"); Object a = Array.newInstance(type.getType(cl), 0); return a.getClass(); }
Obtains the type of the elements.
Returns:null if the type is not specified.
/** * Obtains the type of the elements. * * @return null if the type is not specified. */
public MemberValue getType() { return type; }
Obtains the elements of the array.
/** * Obtains the elements of the array. */
public MemberValue[] getValue() { return values; }
Sets the elements of the array.
/** * Sets the elements of the array. */
public void setValue(MemberValue[] elements) { values = elements; if (elements != null && elements.length > 0) type = elements[0]; }
Obtains the string representation of this object.
/** * Obtains the string representation of this object. */
@Override public String toString() { StringBuffer buf = new StringBuffer("{"); if (values != null) { for (int i = 0; i < values.length; i++) { buf.append(values[i].toString()); if (i + 1 < values.length) buf.append(", "); } } buf.append("}"); return buf.toString(); }
Writes the value.
/** * Writes the value. */
@Override public void write(AnnotationsWriter writer) throws IOException { int num = values == null ? 0 : values.length; writer.arrayValue(num); for (int i = 0; i < num; ++i) values[i].write(writer); }
Accepts a visitor.
/** * Accepts a visitor. */
@Override public void accept(MemberValueVisitor visitor) { visitor.visitArrayMemberValue(this); } }