Skip to content

Latest commit

 

History

History
115 lines (104 loc) · 3.19 KB

README.md

File metadata and controls

115 lines (104 loc) · 3.19 KB

file_formats_java_class

file_formats_java_class provides the facilities for reading CLASS files defined in the Java Virtual Machine Specification, Java SE 7, CLASS major file version 51, chapter 4.

This library is not constrained by any compiler, but does depend on the 2022 specification of Ada.

Supported Elements (Java SE 7)

  • Class Access Flags (Table 4.1)
    • ACC_PUBLIC
    • ACC_FINAL
    • ACC_SUPER
    • ACC_INTERFACE
    • ACC_ABSTRACT
    • ACC_SYNTHETIC
    • ACC_ANNOTATION
    • ACC_ENUM
  • Constant Pool (Table 4.3)
    • CONSTANT_Class_info
    • CONSTANT_Fieldref_info
    • CONSTANT_Methodref_info
    • CONSTANT_InterfaceMethodref_info
    • CONSTANT_String_info
    • CONSTANT_Integer_info
    • CONSTANT_Float_info
    • CONSTANT_Long_info
    • CONSTANT_Double_info
    • CONSTANT_NameAndType_info
    • CONSTANT_Utf8_info
    • CONSTANT_MethodHandle_info
    • CONSTANT_MethodType_info
    • CONSTANT_InvokeDynamic_info
  • Field Access Flags (Table 4.4)
    • ACC_PUBLIC
    • ACC_PRIVATE
    • ACC_PROTECTED
    • ACC_STATIC
    • ACC_FINAL
    • ACC_VOLATILE
    • ACC_TRANSIENT
    • ACC_SYNTHETIC
    • ACC_ENUM
  • Method Access Flags (Table 4.5)
    • ACC_PUBLIC
    • ACC_PRIVATE
    • ACC_PROTECTED
    • ACC_STATIC
    • ACC_FINAL
    • ACC_SYNCHRONIZED
    • ACC_BRIDGE
    • ACC_VARARGS
    • ACC_NATIVE
    • ACC_ABSTRACT
    • ACC_STRICT
    • ACC_SYNTHETIC
  • Attributes (Table 4.6)
    • ConstantValue
    • Code
    • StackMapTable
    • Exceptions
    • InnerClasses
    • EnclosingMethod
    • Synthetic
    • Signature
    • SourceFile
    • SourceDebugExtension
    • LineNumberTable
    • LocalVariableTable
    • LocalVariableTypeTable
    • Deprecated
    • RuntimeVisibleAnnotations
    • RuntimeInvisibleAnnotations
    • RuntimeVisibleParameterAnnotations
    • RuntimeInvisibleParameterAnnotations
    • AnnotationDefault
    • BootstrapMethods
    • Other - Used for unrecognized/private attributes
    • NOTE: All restrictions put in place of each attribute for determining the validity of a CLASS file may not be fully implemented at the current time.

Example Use

All pertinent types and subprograms are available within the package File_Formats_Java_Class. Reading Class_File is done primarily through the Input aspect, as shown below.

with Ada.Text_IO;

with File_Formats_Java_Class;
use  File_Formats_Java_Class;

procedure Read_Class_File is
    F : File_Type;
    S : Stream_Access;
begin
    Open (F, In_File, "Example.class");
    S := Stream (F);
    Ada.Text_IO.Put_Line (Class_File'Input (S));
    Close (F);
end Read_Class_File;

Development Status

This crate does not yet define operations for writing to CLASS files, but this is a priority. After writing is complete, this crate will be updated to support CLASS files of Java SE 8+. You are free to report issues and contribue to this repository.