public void ReadTest() { var reader = new MemoryBigEndianReader(Bytes); Assert.Equal(8, reader.ReadByte()); Assert.Equal(8, reader.ReadInt16()); Assert.Equal(8, reader.ReadInt32()); Assert.Equal(8, reader.ReadInt64()); Assert.Throws <EndOfStreamException>(() => reader.ReadByte()); }
public void NoChange() { var reader = new MemoryBigEndianReader(Resources.HelloWorld); var classFile = JavaClassFile.FromReader(reader); using (var stream = new MemoryStream()) { var writer = new BigEndianStreamWriter(stream); classFile.Write(new WritingContext(writer)); Assert.Equal(Resources.HelloWorld, stream.ToArray()); } }
internal MethodDefinition(JavaClassImage classImage, MethodInfo methodInfo) { // Name _name = new LazyValue <string>(() => classImage.ClassFile.ConstantPool.ResolveString(methodInfo.NameIndex) ?? $"<<<INVALID({methodInfo.NameIndex})>>>"); // Flags AccessFlags = methodInfo.AccessFlags; //Descriptor _descriptor = new LazyValue <MethodDescriptor>(() => classImage.ResolveMethodDescriptor(methodInfo.DescriptorIndex)); // Attributes foreach (var attribute in methodInfo.Attributes) { string name = classImage.ClassFile.ConstantPool.ResolveString(attribute.NameIndex); switch (name) { // Code case CodeAttribute.AttributeName: _body = new LazyValue <ByteCodeMethodBody>(() => { var reader = new MemoryBigEndianReader(attribute.Contents); return(new ByteCodeMethodBody(classImage, CodeAttribute.FromReader(reader))); }); break; // Exceptions case ExceptionsAttribute.AttributeName: _exceptions = new LazyValue <IList <ClassReference> >(() => { var reader = new MemoryBigEndianReader(attribute.Contents); var attr = ExceptionsAttribute.FromReader(reader); return(attr.Exceptions .Select(index => classImage.ResolveClass(index)) .ToList()); }); break; default: ExtraAttributes.Add(name, attribute.Clone()); break; } } }
public static JavaClassFile FromFile(string path) { var reader = new MemoryBigEndianReader(File.ReadAllBytes(path)); return(FromReader(reader)); }