blob: 99b4211ec88087273302f510e38827f9af7bb545 [file] [log] [blame]
/* *******************************************************************
* 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();
}
}