Пример #1
0
        private static MetadataJavaMethod ReadJavaMethod(this DataInputStream stream)
        {
            var method = new MetadataJavaMethod
            {
                Name        = stream.ReadUtfAndIntern(),
                ReturnType  = stream.ReadUtfAndIntern(),
                AccessFlags = stream.ReadAccessFlagsParameter(),
                Parameters  = stream.ReadArray(stream.ReadJavaParameter)
            };

            return(method);
        }
Пример #2
0
        private static (string, MetadataJavaClass) ReadJarArchiveClass(this DataInputStream stream)
        {
            var name   = stream.ReadUtfAndIntern();
            var @class = stream.ReadJarClass();

            return(name, @class);
        }
Пример #3
0
        private static MetadataJavaField ReadJavaField(this DataInputStream stream)
        {
            var field = new MetadataJavaField
            {
                Name        = stream.ReadUtfAndIntern(), Type = stream.ReadUtfAndIntern(),
                AccessFlags = stream.ReadAccessFlagsParameter()
            };

            var hasConstantValue = stream.ReadBoolean();

            if (hasConstantValue)
            {
                field.ConstantValue = stream.ReadArray(stream.ReadByte);
            }

            return(field);
        }
Пример #4
0
        private static MetadataJavaClass ReadJarClass(this DataInputStream stream)
        {
            var @class = new MetadataJavaClass
            {
                ClassName     = stream.ReadUtfAndIntern(),
                AccessFlags   = stream.ReadAccessFlagsParameter(),
                Interfaces    = stream.ReadArray(stream.ReadUtfAndIntern),
                AllInterfaces = stream.ReadArray(stream.ReadUtfAndIntern)
            };

            @class.Interfaces      = stream.ReadArray(stream.ReadUtfAndIntern);
            @class.AllSuperClasses = stream.ReadArray(stream.ReadUtfAndIntern);
            @class.Methods         = stream.ReadArray(stream.ReadJavaMethod);
            @class.Fields          = stream.ReadArray(stream.ReadJavaField);

            return(@class);
        }
Пример #5
0
        private Constant LoadConstantValue(byte[] metaConstantValue)
        {
            if (metaConstantValue == null)
            {
                return(null);
            }

            using var memoryInputStream = new MemoryInputStream(metaConstantValue);
            using var ms = new DataInputStream(memoryInputStream);
            var constant = Constant.ReadConstant(ms);

            //Read the actual string from the data and create a constant pool for it.
            if (constant is ConstantString constantString)
            {
                var originalString = ms.ReadUtfAndIntern();

                _metaConstantPool = new ConstantPool(new Constant[] { new ConstantUtf8(originalString) });

                constantString.SetStringIndex(0);
            }

            return(constant);
        }
Пример #6
0
 private static MetadataJavaMethodParameter ReadJavaParameter(this DataInputStream stream)
 {
     return(new MetadataJavaMethodParameter {
         Name = stream.ReadUtfAndIntern(), Type = stream.ReadUtfAndIntern()
     });
 }