All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.aspectj.apache.bcel.classfile.annotation.ArrayElementValue Maven / Gradle / Ivy

Go to download

AspectJ tools most notably contains the AspectJ compiler (AJC). AJC applies aspects to Java classes during compilation, fully replacing Javac for plain Java classes and also compiling native AspectJ or annotation-based @AspectJ syntax. Furthermore, AJC can weave aspects into existing class files in a post-compile binary weaving step. This library is a superset of AspectJ weaver and hence also of AspectJ runtime.

There is a newer version: 1.9.22.1
Show newest version
/* *******************************************************************
 * Copyright (c) 2004 IBM
 * All rights reserved.
 * This program and the accompanying materials are made available
 * under the terms of the Eclipse Public License v 2.0
 * which accompanies this distribution and is available at
 * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt
 *
 * Contributors:
 *     Andy Clement -     initial implementation {date}
 * ******************************************************************/

package org.aspectj.apache.bcel.classfile.annotation;

import java.io.DataOutputStream;
import java.io.IOException;

import org.aspectj.apache.bcel.classfile.ConstantPool;

public class ArrayElementValue extends ElementValue {
	private static final ElementValue[] NO_VALUES = new ElementValue[0];

	// J5TODO: Should we make this an array or a list? A list would be easier to modify ...
	private ElementValue[] evalues = NO_VALUES;

	public ElementValue[] getElementValuesArray() {
		return evalues;
	}

	public int getElementValuesArraySize() {
		return evalues.length;
	}

	public ArrayElementValue(ConstantPool cp) {
		super(ARRAY, cp);
	}

	public ArrayElementValue(int type, ElementValue[] datums, ConstantPool cpool) {
		super(type, cpool);
		if (type != ARRAY)
			throw new RuntimeException("Only element values of type array can be built with this ctor");
		this.evalues = datums;
	}

	public ArrayElementValue(ArrayElementValue value, ConstantPool cpool, boolean copyPoolEntries) {
		super(ARRAY, cpool);
		evalues = new ElementValue[value.getElementValuesArraySize()];
		ElementValue[] in = value.getElementValuesArray();
		for (int i = 0; i < in.length; i++) {
			evalues[i] = ElementValue.copy(in[i], cpool, copyPoolEntries);
		}
	}

	@Override
	public void dump(DataOutputStream dos) throws IOException {
		dos.writeByte(type); // u1 type of value (ARRAY == '[')
		dos.writeShort(evalues.length);
		for (ElementValue evalue : evalues) {
			evalue.dump(dos);
		}
	}

	@Override
	public String stringifyValue() {
		StringBuilder sb = new StringBuilder();
		sb.append("[");
		for (int i = 0; i < evalues.length; i++) {
			ElementValue element = evalues[i];
			sb.append(element.stringifyValue());
			if ((i + 1) < evalues.length)
				sb.append(",");
		}
		sb.append("]");
		return sb.toString();
	}

	public void addElement(ElementValue gen) {
		ElementValue[] old = evalues;
		evalues = new ElementValue[evalues.length + 1];
		System.arraycopy(old, 0, evalues, 0, old.length);
		evalues[old.length] = gen;
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy