<s> package org . eclipse . jdt . internal . core . util ; import org . eclipse . jdt . core . util . ClassFormatException ; import org . eclipse . jdt . core . util . IAnnotation ; import org . eclipse . jdt . core . util . IAnnotationComponent ; import org . eclipse . jdt . core . util . IConstantPool ; import org . eclipse . jdt . core . util . IConstantPoolConstant ; import org . eclipse . jdt . core . util . IConstantPoolEntry ; public class Annotation extends ClassFileStruct implements IAnnotation { private static final IAnnotationComponent [ ] NO_ENTRIES = new IAnnotationComponent [ 0 ] ; private int typeIndex ; private char [ ] typeName ; private int componentsNumber ; private IAnnotationComponent [ ] components ; private int readOffset ; public Annotation ( byte [ ] classFileBytes , IConstantPool constantPool , int offset ) throws ClassFormatException { final int index = u2At ( classFileBytes , 0 , offset ) ; this . typeIndex = index ; if ( index != 0 ) { IConstantPoolEntry constantPoolEntry = constantPool . decodeEntry ( index ) ; if ( constantPoolEntry . getKind ( ) != IConstantPoolConstant . CONSTANT_Utf8 ) { throw new ClassFormatException ( ClassFormatException . INVALID_CONSTANT_POOL_ENTRY ) ; } this . typeName = constantPoolEntry . getUtf8Value ( ) ; } else { throw new ClassFormatException ( ClassFormatException . INVALID_CONSTANT_POOL_ENTRY ) ; } final int length = u2At ( classFileBytes , 2 , offset ) ; this . componentsNumber = length ; this . readOffset = 4 ; if ( length != 0 ) { this . components = new IAnnotationComponent [ length ] ; for ( int i = 0 ; i < length ; i ++ ) { AnnotationComponent component = new AnnotationComponent ( classFileBytes , constantPool , offset + this . readOffset ) ; this . components [ i ] = component ; this . readOffset += component . sizeInBytes ( ) ; } } else { this . components = NO_ENTRIES ; } } public int getTypeIndex ( ) { return this . typeIndex ; } public int getComponentsNumber ( ) { return this . componentsNumber ; } public IAnnotationComponent [ ] getComponents ( ) { return this . components ; } int sizeInBytes ( ) { return this . readOffset ; } public char [ ] getTypeName ( ) { return this . typeName ; } } </s>