jvm-binary-0.0.2: src/Language/JVM/Field.hs
{-|
Module : Language.JVM.Field
Copyright : (c) Christian Gram Kalhauge, 2017
License : MIT
Maintainer : kalhuage@cs.ucla.edu
-}
{-# LANGUAGE DeriveGeneric #-}
module Language.JVM.Field
( Field (..)
-- * Attributes
, fConstantValue
) where
import Data.Binary
import Data.Monoid
import GHC.Generics (Generic)
import Language.JVM.AccessFlag
import Language.JVM.Attribute (Attribute, ConstantValue, fromAttribute')
import Language.JVM.Constant (ConstantRef, ConstantPool)
import Language.JVM.Utils
-- | A Field in the class-file, as described
-- [here](http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.5).
data Field = Field
{ fAccessFlags :: BitSet16 FAccessFlag
, fNameIndex :: ! ConstantRef
, fDescriptorIndex :: ! ConstantRef
, fAttributes :: SizedList16 Attribute
} deriving (Show, Eq, Generic)
instance Binary Field where
-- | Fetch the 'ConstantValue' attribute.
-- There can only one be one exceptions attribute on a field.
fConstantValue :: ConstantPool -> Field -> Maybe (Either String ConstantValue)
fConstantValue cp =
getFirst . foldMap (First . fromAttribute' cp) . fAttributes