| Safe Haskell | None |
|---|---|
| Language | Haskell98 |
JVM.ClassFile
Description
This module declares (low-level) data types for Java .class files structures, and Binary instances to read/write them.
Synopsis
- data Attribute = Attribute {}
- data FieldType
- type FieldSignature = FieldType
- data MethodSignature = MethodSignature [ArgumentSignature] ReturnSignature
- data ReturnSignature
- type ArgumentSignature = FieldType
- data File
- data Direct
- type Pool stage = Map Word16 (Constant stage)
- type family Link stage a
- data Method stage = Method {
- methodAccessFlags :: AccessFlags stage
- methodName :: Link stage ByteString
- methodSignature :: Link stage MethodSignature
- methodAttributesCount :: Word16
- methodAttributes :: Attributes stage
- data Field stage = Field {
- fieldAccessFlags :: AccessFlags stage
- fieldName :: Link stage ByteString
- fieldSignature :: Link stage FieldSignature
- fieldAttributesCount :: Word16
- fieldAttributes :: Attributes stage
- data Class stage = Class {
- magic :: Word32
- minorVersion :: Word16
- majorVersion :: Word16
- constsPoolSize :: Word16
- constsPool :: Pool stage
- accessFlags :: AccessFlags stage
- thisClass :: Link stage ByteString
- superClass :: Link stage ByteString
- interfacesCount :: Word16
- interfaces :: [Link stage ByteString]
- classFieldsCount :: Word16
- classFields :: [Field stage]
- classMethodsCount :: Word16
- classMethods :: [Method stage]
- classAttributesCount :: Word16
- classAttributes :: Attributes stage
- data Constant stage
- = CClass (Link stage ByteString)
- | CField (Link stage ByteString) (Link stage (NameType (Field stage)))
- | CMethod (Link stage ByteString) (Link stage (NameType (Method stage)))
- | CIfaceMethod (Link stage ByteString) (Link stage (NameType (Method stage)))
- | CString (Link stage ByteString)
- | CInteger Word32
- | CFloat Float
- | CLong Word64
- | CDouble Double
- | CNameType (Link stage ByteString) (Link stage ByteString)
- | CUTF8 { }
- | CUnicode { }
- data AccessFlag
- type family AccessFlags stage
- data family Attributes stage
- defaultClass :: (Default (AccessFlags stage), Default (Link stage ByteString), Default (Attributes stage)) => Class stage
- class (Binary (Signature a), Show (Signature a), Eq (Signature a)) => HasSignature a where
- type Signature a
- class HasAttributes a where
- attributes :: a stage -> Attributes stage
- data NameType a = NameType {
- ntName :: ByteString
- ntSignature :: Signature a
- fieldNameType :: Field Direct -> NameType (Field Direct)
- methodNameType :: Method Direct -> NameType (Method Direct)
- lookupField :: ByteString -> Class Direct -> Maybe (Field Direct)
- lookupMethod :: ByteString -> Class Direct -> Maybe (Method Direct)
- long :: Constant stage -> Bool
- toString :: ByteString -> String
- className :: Constant Direct -> ByteString
- apsize :: Attributes File -> Int
- arsize :: Attributes Direct -> Int
- arlist :: Attributes Direct -> [(ByteString, ByteString)]
About
Java .class file uses constants pool, which stores almost all source-code-level constants (strings, integer literals etc), and also all identifiers (class, method, field names etc). All other structures contain indexes of constants in the pool instead of constants theirself.
It's not convient to use that indexes programmatically. So, .class file is represented at two stages: File and Direct. At File stage, all data structures contain only indexes, not constants theirself. When we read a class from a file, we get structure at File stage. We only can write File stage structure to file.
At Direct stage, structures conain constants, not indexes. Convertion functions (File - Direct) are located in the JVM.Converter module.
Any (class field method/ ...) attribute format.
Some formats specify special formats for attributeValue.
Constructors
| Attribute | |
Fields | |
Field signature format
Constructors
| SignedByte | B |
| CharByte | C |
| DoubleType | D |
| FloatType | F |
| IntType | I |
| LongInt | J |
| ShortInt | S |
| BoolType | Z |
| ObjectType String | L |
| Array (Maybe Int) FieldType | [{type} |
Instances
| Eq FieldType Source # | |
| Ord FieldType Source # | |
| Show FieldType Source # | |
| Binary FieldType Source # | |
Signatures
type FieldSignature = FieldType Source #
Class field signature
data MethodSignature Source #
Class method argument signature
Constructors
| MethodSignature [ArgumentSignature] ReturnSignature |
Instances
| Eq MethodSignature Source # | |
Defined in JVM.ClassFile Methods (==) :: MethodSignature -> MethodSignature -> Bool # (/=) :: MethodSignature -> MethodSignature -> Bool # | |
| Ord MethodSignature Source # | |
Defined in JVM.ClassFile Methods compare :: MethodSignature -> MethodSignature -> Ordering # (<) :: MethodSignature -> MethodSignature -> Bool # (<=) :: MethodSignature -> MethodSignature -> Bool # (>) :: MethodSignature -> MethodSignature -> Bool # (>=) :: MethodSignature -> MethodSignature -> Bool # max :: MethodSignature -> MethodSignature -> MethodSignature # min :: MethodSignature -> MethodSignature -> MethodSignature # | |
| Show MethodSignature Source # | |
Defined in JVM.ClassFile Methods showsPrec :: Int -> MethodSignature -> ShowS # show :: MethodSignature -> String # showList :: [MethodSignature] -> ShowS # | |
| Binary MethodSignature Source # | |
Defined in JVM.ClassFile Methods put :: MethodSignature -> Put # get :: Get MethodSignature # putList :: [MethodSignature] -> Put # | |
data ReturnSignature Source #
Return value signature
Constructors
| Returns FieldType | |
| ReturnsVoid |
Instances
| Eq ReturnSignature Source # | |
Defined in JVM.ClassFile Methods (==) :: ReturnSignature -> ReturnSignature -> Bool # (/=) :: ReturnSignature -> ReturnSignature -> Bool # | |
| Ord ReturnSignature Source # | |
Defined in JVM.ClassFile Methods compare :: ReturnSignature -> ReturnSignature -> Ordering # (<) :: ReturnSignature -> ReturnSignature -> Bool # (<=) :: ReturnSignature -> ReturnSignature -> Bool # (>) :: ReturnSignature -> ReturnSignature -> Bool # (>=) :: ReturnSignature -> ReturnSignature -> Bool # max :: ReturnSignature -> ReturnSignature -> ReturnSignature # min :: ReturnSignature -> ReturnSignature -> ReturnSignature # | |
| Show ReturnSignature Source # | |
Defined in JVM.ClassFile Methods showsPrec :: Int -> ReturnSignature -> ShowS # show :: ReturnSignature -> String # showList :: [ReturnSignature] -> ShowS # | |
| Binary ReturnSignature Source # | |
Defined in JVM.ClassFile Methods put :: ReturnSignature -> Put # get :: Get ReturnSignature # putList :: [ReturnSignature] -> Put # | |
type ArgumentSignature = FieldType Source #
Method argument signature
Stage types
File stage
Instances
| Eq (Method File) Source # | |
| Eq (Field File) Source # | |
| Eq (Class File) Source # | |
| Eq (Constant File) Source # | |
| Eq (Attributes File) Source # | |
Defined in JVM.ClassFile Methods (==) :: Attributes File -> Attributes File -> Bool # (/=) :: Attributes File -> Attributes File -> Bool # | |
| Show (Method File) Source # | |
| Show (Field File) Source # | |
| Show (Class File) Source # | |
| Show (Constant File) Source # | |
| Show (Attributes File) Source # | |
Defined in JVM.ClassFile | |
| Binary (Method File) Source # | |
| Binary (Field File) Source # | |
| Binary (Class File) Source # | |
| Default (Attributes File) Source # | |
Defined in JVM.ClassFile Methods def :: Attributes File Source # | |
| data Attributes File Source # | At File stage, attributes are represented as list of Attribute structures. |
Defined in JVM.ClassFile | |
| type AccessFlags File Source # | At File stage, access flags are represented as Word16 |
Defined in JVM.ClassFile | |
| type Link File a Source # | At File stage, Link contain index of object in the constants pool. |
Defined in JVM.ClassFile | |
Direct representation stage
Instances
Staged structures
Class method format
Constructors
| Method | |
Fields
| |
Instances
| HasAttributes Method Source # | |
Defined in JVM.ClassFile Methods attributes :: Method stage -> Attributes stage Source # | |
| Eq (Method Direct) Source # | |
| Eq (Method File) Source # | |
| Show (Method Direct) Source # | |
| Show (Method File) Source # | |
| Binary (Method File) Source # | |
| HasSignature (Method Direct) Source # | |
| type Signature (Method Direct) Source # | |
Defined in JVM.ClassFile | |
Class field format
Constructors
| Field | |
Fields
| |
Instances
| HasAttributes Field Source # | |
Defined in JVM.ClassFile Methods attributes :: Field stage -> Attributes stage Source # | |
| Eq (Field Direct) Source # | |
| Eq (Field File) Source # | |
| Show (Field Direct) Source # | |
| Show (Field File) Source # | |
| Binary (Field File) Source # | |
| HasSignature (Field Direct) Source # | |
| type Signature (Field Direct) Source # | |
Defined in JVM.ClassFile | |
Generic .class file format
Constructors
| Class | |
Fields
| |
Constant pool item
Constructors
| CClass (Link stage ByteString) | |
| CField (Link stage ByteString) (Link stage (NameType (Field stage))) | |
| CMethod (Link stage ByteString) (Link stage (NameType (Method stage))) | |
| CIfaceMethod (Link stage ByteString) (Link stage (NameType (Method stage))) | |
| CString (Link stage ByteString) | |
| CInteger Word32 | |
| CFloat Float | |
| CLong Word64 | |
| CDouble Double | |
| CNameType (Link stage ByteString) (Link stage ByteString) | |
| CUTF8 | |
Fields | |
| CUnicode | |
Fields | |
data AccessFlag Source #
Access flags. Used for classess, methods, variables.
Constructors
| ACC_PUBLIC | 0x0001 Visible for all |
| ACC_PRIVATE | 0x0002 Visible only for defined class |
| ACC_PROTECTED | 0x0004 Visible only for subclasses |
| ACC_STATIC | 0x0008 Static method or variable |
| ACC_FINAL | 0x0010 No further subclassing or assignments |
| ACC_SYNCHRONIZED | 0x0020 Uses monitors |
| ACC_VOLATILE | 0x0040 Could not be cached |
| ACC_TRANSIENT | 0x0080 |
| ACC_NATIVE | 0x0100 Implemented in other language |
| ACC_INTERFACE | 0x0200 Class is interface |
| ACC_ABSTRACT | 0x0400 |
Instances
| Enum AccessFlag Source # | |
Defined in JVM.ClassFile Methods succ :: AccessFlag -> AccessFlag # pred :: AccessFlag -> AccessFlag # toEnum :: Int -> AccessFlag # fromEnum :: AccessFlag -> Int # enumFrom :: AccessFlag -> [AccessFlag] # enumFromThen :: AccessFlag -> AccessFlag -> [AccessFlag] # enumFromTo :: AccessFlag -> AccessFlag -> [AccessFlag] # enumFromThenTo :: AccessFlag -> AccessFlag -> AccessFlag -> [AccessFlag] # | |
| Eq AccessFlag Source # | |
Defined in JVM.ClassFile | |
| Ord AccessFlag Source # | |
Defined in JVM.ClassFile Methods compare :: AccessFlag -> AccessFlag -> Ordering # (<) :: AccessFlag -> AccessFlag -> Bool # (<=) :: AccessFlag -> AccessFlag -> Bool # (>) :: AccessFlag -> AccessFlag -> Bool # (>=) :: AccessFlag -> AccessFlag -> Bool # max :: AccessFlag -> AccessFlag -> AccessFlag # min :: AccessFlag -> AccessFlag -> AccessFlag # | |
| Show AccessFlag Source # | |
Defined in JVM.ClassFile Methods showsPrec :: Int -> AccessFlag -> ShowS # show :: AccessFlag -> String # showList :: [AccessFlag] -> ShowS # | |
type family AccessFlags stage Source #
Object (class, method, field …) access flags
Instances
| type AccessFlags Direct Source # | At Direct stage, access flags are represented as set of flags. |
Defined in JVM.ClassFile | |
| type AccessFlags File Source # | At File stage, access flags are represented as Word16 |
Defined in JVM.ClassFile | |
data family Attributes stage Source #
Object (class, method, field) attributes
Instances
| Eq (Attributes Direct) Source # | |
Defined in JVM.ClassFile Methods (==) :: Attributes Direct -> Attributes Direct -> Bool # (/=) :: Attributes Direct -> Attributes Direct -> Bool # | |
| Eq (Attributes File) Source # | |
Defined in JVM.ClassFile Methods (==) :: Attributes File -> Attributes File -> Bool # (/=) :: Attributes File -> Attributes File -> Bool # | |
| Show (Attributes Direct) Source # | |
Defined in JVM.ClassFile | |
| Show (Attributes File) Source # | |
Defined in JVM.ClassFile | |
| Default (Attributes Direct) Source # | |
Defined in JVM.ClassFile Methods def :: Attributes Direct Source # | |
| Default (Attributes File) Source # | |
Defined in JVM.ClassFile Methods def :: Attributes File Source # | |
| data Attributes Direct Source # | At Direct stage, attributes are represented as a Map. |
Defined in JVM.ClassFile | |
| data Attributes File Source # | At File stage, attributes are represented as list of Attribute structures. |
Defined in JVM.ClassFile | |
defaultClass :: (Default (AccessFlags stage), Default (Link stage ByteString), Default (Attributes stage)) => Class stage Source #
Default (empty) class file definition.
Misc
class (Binary (Signature a), Show (Signature a), Eq (Signature a)) => HasSignature a Source #
Fields and methods have signatures.
class HasAttributes a where Source #
Methods
attributes :: a stage -> Attributes stage Source #
Instances
| HasAttributes Method Source # | |
Defined in JVM.ClassFile Methods attributes :: Method stage -> Attributes stage Source # | |
| HasAttributes Field Source # | |
Defined in JVM.ClassFile Methods attributes :: Field stage -> Attributes stage Source # | |
| HasAttributes Class Source # | |
Defined in JVM.ClassFile Methods attributes :: Class stage -> Attributes stage Source # | |
Name and signature pair. Used for methods and fields.
Constructors
| NameType | |
Fields
| |
Instances
| HasSignature a => Eq (NameType a) Source # | |
| HasSignature a => Show (NameType a) Source # | |
| HasSignature a => Binary (NameType a) Source # | |
lookupField :: ByteString -> Class Direct -> Maybe (Field Direct) Source #
lookupMethod :: ByteString -> Class Direct -> Maybe (Method Direct) Source #
toString :: ByteString -> String Source #
arlist :: Attributes Direct -> [(ByteString, ByteString)] Source #
Associative list of attributes at Direct stage