package com.sun.org.apache.bcel.internal.generic;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import com.sun.org.apache.bcel.internal.classfile.ArrayElementValue;
import com.sun.org.apache.bcel.internal.classfile.ElementValue;
public class ArrayElementValueGen extends ElementValueGen
{
private final List<ElementValueGen> evalues;
public ArrayElementValueGen(final ConstantPoolGen cp)
{
super(ARRAY, cp);
evalues = new ArrayList<>();
}
public ArrayElementValueGen(final int type, final ElementValue[] datums,
final ConstantPoolGen cpool)
{
super(type, cpool);
if (type != ARRAY) {
throw new RuntimeException(
"Only element values of type array can be built with this ctor - type specified: " + type);
}
this.evalues = new ArrayList<>();
for (final ElementValue datum : datums) {
evalues.add(ElementValueGen.copy(datum, cpool, true));
}
}
@Override
public ElementValue getElementValue()
{
final ElementValue[] immutableData = new ElementValue[evalues.size()];
int i = 0;
for (final ElementValueGen element : evalues) {
immutableData[i++] = element.getElementValue();
}
return new ArrayElementValue(super.getElementValueType(),
immutableData,
getConstantPool().getConstantPool());
}
public ArrayElementValueGen(final ArrayElementValue value, final ConstantPoolGen cpool,
final boolean copyPoolEntries)
{
super(ARRAY, cpool);
evalues = new ArrayList<>();
final ElementValue[] in = value.getElementValuesArray();
for (final ElementValue element : in) {
evalues.add(ElementValueGen.copy(element, cpool, copyPoolEntries));
}
}
@Override
public void dump(final DataOutputStream dos) throws IOException
{
dos.writeByte(super.getElementValueType());
dos.writeShort(evalues.size());
for (final ElementValueGen element : evalues) {
element.dump(dos);
}
}
@Override
public String stringifyValue()
{
final StringBuilder sb = new StringBuilder();
sb.append("[");
String comma = "";
for (final ElementValueGen element : evalues) {
sb.append(comma);
comma = ",";
sb.append(element.stringifyValue());
}
sb.append("]");
return sb.toString();
}
public List<ElementValueGen> getElementValues()
{
return evalues;
}
public int getElementValuesSize()
{
return evalues.size();
}
public void addElement(final ElementValueGen gen)
{
evalues.add(gen);
}
}