private void Read()
        {
            // CA FE BA BE (U4)
            if (!this.VerifyMagicCode())
            {
                throw new Exception();
            }

            // VERSION MINOR (U2)
            this.Reader.Skip(2);
            // VERSION MAJOR (U2)
            this.Reader.Skip(2);

            // CONSTANT POOL
            this.Constants = JavaConstant.ReadAll(this.Reader);

            // ACCESS FLAGS (U2)
            this.Reader.Skip(2);
            // THIS CLASS (U2)
            this.Reader.Skip(2);
            // SUPER CLASS (U2)
            this.Reader.Skip(2);

            // INTERFACES
            this.ReadInterfaces();
            // FIELDS
            this.ReadFields();
            // METHODS
            this.ReadMethods();

            // ATTRIBUTES POOL
            this.Attributes = JavaAttribute.ReadAll(this.Reader, this.Constants);
        }
示例#2
0
        public static IConstantHolder Read(ByteReader reader)
        {
            // CONSTANT TAG (U1)
            int tag = reader.ReadByte();

            switch (tag)
            {
            case 1:
                return(JavaConstant.ReadUTF8(reader));

            case 3:
                return(JavaConstant.ReadInteger(reader));

            case 4:
                return(JavaConstant.ReadFloat(reader));

            case 5:
                return(JavaConstant.ReadLong(reader));

            case 6:
                return(JavaConstant.ReadDouble(reader));

            case 7:
                return(JavaConstant.ReadClass(reader));

            case 8:
                return(JavaConstant.ReadString(reader));

            case 9:
                return(JavaConstant.ReadFieldRef(reader));

            case 10:
                return(JavaConstant.ReadMethodRef(reader));

            case 11:
                return(JavaConstant.ReadInterfaceMethodRef(reader));

            case 12:
                return(JavaConstant.ReadNameAndType(reader));

            case 15:
                return(JavaConstant.ReadMethodHandle(reader));

            case 16:
                return(JavaConstant.ReadMethodType(reader));

            case 18:
                return(JavaConstant.ReadInvokeDynamic(reader));

            default:
                return(null);
            }
        }
示例#3
0
        public static JavaConstant[] ReadAll(ByteReader reader)
        {
            // CONSTANT POOL LENGTH (U2)
            int length = reader.ReadShort() - 1;

            IConstantHolder[] holders = new IConstantHolder[length];
            for (int i = 0; i < length; i++)
            {
                holders[i] = JavaConstant.Read(reader);
            }

            JavaConstant[] array = new JavaConstant[length];
            for (int i = 0; i < length; i++)
            {
                array[i] = holders[i].GetConstant(holders);
            }
            return(array);
        }
示例#4
0
 public StaticConstantHolder(JavaConstant constant)
 {
     this.Constant = constant;
 }