private void readAttribute( int index, Annotation[][] annotations, ConstantPool cp, ClassInputStream in )
			throws IOException {
		String name = cp.utf( in.uint16bit() );
		int length = in.int32bit();
		if ( "Code".equals( name ) ) {
			CodeAttribute code = CodeAttribute.read( cp, in );
			codes[index] = code.code();
			methodReferences[index] = code.references();
			readAttributes( index, annotations, in, cp );
		} else {
			if ( "Deprecated".equals( name ) ) {
				//TODO reflect somehow
			} else if ( "Signature".equals( name ) ) {
				String signature = cp.utf( in.uint16bit() );
				//TODO reflect somehow
			} else if ( "RuntimeVisibleAnnotations".equals( name )
					|| "RuntimeInvisibleAnnotations".equals( name ) ) {
				Annotation[] annotations2 = AnnotationAttribute.readAnnotations( cp, in );
				if ( index < 0 ) {
					classAnnotations = annotations2;
				} else {
					annotations[index] = annotations2;
				}
			} else if ( "RuntimeVisibleParameterAnnotations".equals( name )
					|| "RuntimeVisibleParameterAnnotations".equals( name ) ) {
				int num = in.uint8bit();
				for ( int i = 0; i < num; i++ ) {
					AnnotationAttribute.readAnnotations( cp, in );
				}
			} else {
				in.skipBytes( length );
			}
		}
	}