Constant[] constantPool = new Constant[constant_pool_count];
constantPool = new Constant[constant_pool_count];
	public ClassInfo parse() throws InvalidClassFileFormatException {				try {			int magic = in.readInt();			int major_version = in.readUnsignedShort();			int minor_version = in.readUnsignedShort();			int constant_pool_count = in.readUnsignedShort();			Constant[] constantPool = new Constant[constant_pool_count];			for (int i = 1; i < constantPool.length; i++) {				constantPool[i] = readConstant();				if (constantPool[i].tag == IClassConstants.CONSTANT_Double ||						constantPool[i].tag == IClassConstants.CONSTANT_Long) {					// Double and Long constants take up two constant pool entries					++i;				}			}						int access_flags = in.readUnsignedShort();			int this_class = in.readUnsignedShort();			ClassDescriptor thisClassDescriptor =				getClassDescriptor(this_class);			int super_class = in.readUnsignedShort();			ClassDescriptor superClassDescriptor =				getClassDescriptor(super_class);			int interfaces_count = in.readUnsignedShort();			if (interfaces_count < 0) {				throw new InvalidClassFileFormatException(expectedClassDescriptor, codeBaseEntry);			}			ClassDescriptor[] interfaceDescriptorList = new ClassDescriptor[interfaces_count];			for (int i = 0; i < interfaceDescriptorList.length; i++) {				interfaceDescriptorList[i] = getClassDescriptor(in.readUnsignedShort());			}						int fields_count = in.readUnsignedShort();			if (fields_count < 0 ) {				throw new InvalidClassFileFormatException(expectedClassDescriptor, codeBaseEntry);			}			FieldDescriptor[] fieldDescriptorList = new FieldDescriptor[fields_count];			for (int i = 0; i < fields_count; i++) {				fieldDescriptorList[i] = readField(thisClassDescriptor);			}						return new ClassInfo(					thisClassDescriptor,					superClassDescriptor,					interfaceDescriptorList,					codeBaseEntry,					access_flags);					} catch (IOException e) {			throw new InvalidClassFileFormatException(expectedClassDescriptor, codeBaseEntry, e);		}			}