private void readSecondPart() throws IOException
private void readSecondPart(DataInputStream in) throws IOException
    private void readSecondPart() throws IOException    {	int interfaces_count = in.readUnsignedShort();	interfaces = new String[interfaces_count];	for(int i = 0; i < interfaces_count; i++)	{	    interfaces[i] = getClassConstantName(in.readUnsignedShort());	}	int fields_count = in.readUnsignedShort();	fields = new FieldInfoItem[fields_count];	for(int i = 0; i < fields_count; i++)	{	    fields[i] = new FieldInfoItem(in);	}	int methods_count = in.readUnsignedShort();	methods = new MethodInfoItem[methods_count];	for(int i = 0; i < methods_count; i++)	{	    methods[i] = new MethodInfoItem(in);	}	int attributes_count = in.readUnsignedShort();	for(int i = 0; i < attributes_count; i++)	{	    int attribute_name_index = in.readUnsignedShort();	    int attribute_length = in.readInt();	    String attributeName = getUtf8String(attribute_name_index);	    if(attributeName.equals("InnerClasses"))	    {		int count = in.readUnsignedShort();		for(int j = 0; j < count; j++)		{		    int inner_class = in.readUnsignedShort();		    int outer_class = in.readUnsignedShort();		    int inner_name = in.readUnsignedShort();;		    int access_flags = in.readUnsignedShort();		    if(getClassConstantName(inner_class).equals(name))		    {                        int mask = Modifier.PUBLIC | Modifier.PROTECTED | Modifier.PRIVATE | Modifier.STATIC;			this.access_flags &= ~mask;                        this.access_flags |= access_flags & mask;                        if(outer_class != 0 && !Modifier.isStatic(access_flags))                        {                            containingWrapper = ClassFile.forName(getClassConstantName(outer_class));                        }		    }		}	    }	    else if(attributeName.equals("Deprecated"))	    {		deprecated = true;	    }            else if(attributeName.equals("Signature"))            {                int signature_index = in.readUnsignedShort();                String signature = getUtf8String(signature_index);                //System.out.println(signature);                ClassSignatureParser p = new ClassSignatureParser(this, signature);                typeParameters = p.getTypeParameters();                superclassType = p.getSuperclassType();                interfaceTypes = p.getInterfaceTypes();            }            else if(attributeName.equals("EnclosingMethod"))            {                int class_index = in.readUnsignedShort();                int method_index = in.readUnsignedShort();                ClassFile containingClass = ClassFile.forName(getClassConstantName(class_index));                if(method_index == 0)                {                    containingWrapper = containingClass;                }                else                {                    NameAndTypeConstantPoolItem cpi = (NameAndTypeConstantPoolItem)constant_pool[method_index];                    String name = getUtf8String(cpi.name_index);                    String descriptor = getUtf8String(cpi.descriptor_index);                    containingWrapper = containingClass.findMethod(name, descriptor);                }            }	    else	    {		skip(in, attribute_length);	    }	}        if (superclassType == null)        {            superclassType = new ClassType(superClass);        }        if (interfaceTypes == null)        {            interfaceTypes = new ClassType[interfaces.length];            for(int i = 0; i < interfaces.length; i++)            {                interfaceTypes[i] = new ClassType(interfaces[i]);            }        }        if(typeParameters != null)        {            for(int i = 0; i < typeParameters.length; i++)            {                typeParameters[i].resolveTypeParameters();            }        }        superclassType.resolveTypeParameters();        for(int i = 0; i < interfaceTypes.length; i++)        {            interfaceTypes[i].resolveTypeParameters();        }        for(int i = 0; i < fields.length; i++)        {            fields[i].resolve();        }        for(int i = 0; i < methods.length; i++)        {            methods[i].resolve();        }    }