/*******************************************************************************
 * Copyright (c) 2000, 2004 IBM Corporation and others.
 * 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:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.jdt.internal.core.util;

import org.eclipse.jdt.core.util.ClassFormatException;
import org.eclipse.jdt.core.util.IConstantPool;
import org.eclipse.jdt.core.util.IConstantPoolConstant;
import org.eclipse.jdt.core.util.IConstantPoolEntry;
import org.eclipse.jdt.core.util.ISignatureAttribute;

/**
 * @since 3.0
 */
public class SignatureAttribute extends ClassFileAttribute implements ISignatureAttribute {
	
	private int signatureIndex;
	private char[] signature;
	
	SignatureAttribute(byte[] classFileBytes, IConstantPool constantPool, int offset) throws ClassFormatException {
		super(classFileBytes, constantPool, offset);
		final int index = u2At(classFileBytes, 6, offset);
		this.signatureIndex = index;
		IConstantPoolEntry constantPoolEntry = constantPool.decodeEntry(index);
		if (constantPoolEntry.getKind() != IConstantPoolConstant.CONSTANT_Utf8) {
			throw new ClassFormatException(ClassFormatException.INVALID_CONSTANT_POOL_ENTRY);
		}
		this.signature = constantPoolEntry.getUtf8Value();
	}
	/* (non-Javadoc)
	 * @see org.eclipse.jdt.core.util.ISignatureAttribute#getSignatureIndex()
	 */
	public int getSignatureIndex() {
		return this.signatureIndex;
	}
	/* (non-Javadoc)
	 * @see org.eclipse.jdt.core.util.ISignatureAttribute#getSignature()
	 */
	public char[] getSignature() {
		return this.signature;
	}
}
