コード例 #1
0
 private void SetupProperties(MetadataJavaField meta)
 {
     _metaName          = meta.Name;
     _metaFlags         = (AccessFlags)meta.AccessFlags;
     _metaType          = Type.GetReturnType(meta.Type);
     _metaConstantValue = LoadConstantValue(meta.ConstantValue);
 }
コード例 #2
0
        public static MetadataJavaField ToMetadata(this JavaField field)
        {
            var javaField = new MetadataJavaField
            {
                Name = field.Name,
                Type = field.Type.GetSignature()
            };

            if (field.ConstantValue != null)
            {
                using var stream = new MemoryStream();
                using var ms     = new MemoryOutputStream(stream);
                using var dos    = new DataOutputStream(ms);

                field.ConstantValue.Dump(dos);

                //Write the original string there to be able to create a new constantpool from metadata
                if (field.ConstantValue is ConstantString constantString)
                {
                    dos.WriteUTF(constantString.GetBytes(field.ConstantPool));
                }

                javaField.ConstantValue = stream.ToArray();
            }

            return(javaField);
        }
コード例 #3
0
 private static void WriteJavaField(this DataOutputStream stream, MetadataJavaField field)
 {
     stream.WriteUTF(field.Name);
     stream.WriteUTF(field.Type);
     stream.WriteAccessFlagsParameter(field.AccessFlags);
     stream.WriteBoolean(field.ConstantValue != null);
     if (field.ConstantValue != null)
     {
         stream.WriteArray(field.ConstantValue, b => stream.WriteByte(b));
     }
 }
コード例 #4
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);
        }
コード例 #5
0
 public static DataJavaField ToDataClass(this MetadataJavaField field)
 {
     return(new DataJavaField(field));
 }
コード例 #6
0
 public DataJavaField(MetadataJavaField meta)
 {
     CanLoad += (_, __) => SetupProperties(meta);
 }