/* ******************************************************************* * Copyright (c) 2004 IBM * All rights reserved. * This program and the accompanying materials are made available * under the terms of the Eclipse Public License v1.0 * which accompanies this distribution and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Andy Clement - initial implementation * ******************************************************************/ package org.aspectj.apache.bcel.classfile.annotation; import java.io.DataOutputStream; import java.io.IOException; import org.aspectj.apache.bcel.classfile.ConstantPool; public class NameValuePair { private int nameIdx; private ElementValue value; private ConstantPool cpool; public NameValuePair(NameValuePair pair, ConstantPool cpool, boolean copyPoolEntries) { this.cpool = cpool; // J5ASSERT: // Could assert nvp.getNameString() points to the same thing as cpool.getConstant(nvp.getNameIndex()) // if (!nvp.getNameString().equals(((ConstantUtf8)cpool.getConstant(nvp.getNameIndex())).getBytes())) { // throw new RuntimeException("envp buggered"); // } if (copyPoolEntries) { nameIdx = cpool.addUtf8(pair.getNameString()); } else { nameIdx = pair.getNameIndex(); } value = ElementValue.copy(pair.getValue(), cpool, copyPoolEntries); } protected NameValuePair(int idx, ElementValue value, ConstantPool cpool) { this.nameIdx = idx; this.value = value; this.cpool = cpool; } public NameValuePair(String name, ElementValue value, ConstantPool cpool) { this.nameIdx = cpool.addUtf8(name); this.value = value; this.cpool = cpool; } protected void dump(DataOutputStream dos) throws IOException { dos.writeShort(nameIdx); // u2 name of the element value.dump(dos); } public int getNameIndex() { return nameIdx; } public final String getNameString() { return cpool.getConstantUtf8(nameIdx).getValue(); } public final ElementValue getValue() { return value; } @Override public String toString() { StringBuffer sb = new StringBuffer(); sb.append(getNameString()).append("=").append(value.stringifyValue()); return sb.toString(); } }