private void SetupProperties(MetadataJavaField meta) { _metaName = meta.Name; _metaFlags = (AccessFlags)meta.AccessFlags; _metaType = Type.GetReturnType(meta.Type); _metaConstantValue = LoadConstantValue(meta.ConstantValue); }
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); }
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)); } }
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); }
public static DataJavaField ToDataClass(this MetadataJavaField field) { return(new DataJavaField(field)); }
public DataJavaField(MetadataJavaField meta) { CanLoad += (_, __) => SetupProperties(meta); }