h2jvm
Safe HaskellNone
LanguageGHC2021

H2JVM.Name

Description

Types and utilities for representing JVM class and package names.

Synopsis

Documentation

newtype PackageName Source #

A JVM package name. This is defined as a potentially empty list of identifiers, which would be separated by dots in the source code, e.g. "java.lang" would be represented as PackageName ["java","lang"].

Constructors

PackageName [Text] 

Instances

Instances details
Data PackageName Source # 
Instance details

Defined in H2JVM.Name

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> PackageName -> c PackageName #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c PackageName #

toConstr :: PackageName -> Constr #

dataTypeOf :: PackageName -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c PackageName) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c PackageName) #

gmapT :: (forall b. Data b => b -> b) -> PackageName -> PackageName #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> PackageName -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> PackageName -> r #

gmapQ :: (forall d. Data d => d -> u) -> PackageName -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> PackageName -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> PackageName -> m PackageName #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> PackageName -> m PackageName #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> PackageName -> m PackageName #

Show PackageName Source # 
Instance details

Defined in H2JVM.Name

Eq PackageName Source # 
Instance details

Defined in H2JVM.Name

Ord PackageName Source # 
Instance details

Defined in H2JVM.Name

newtype ClassName Source #

A JVM class name, in its public, simple form, e.g. Object or ArrayList.

Constructors

ClassName Text 

Instances

Instances details
Data ClassName Source # 
Instance details

Defined in H2JVM.Name

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> ClassName -> c ClassName #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c ClassName #

toConstr :: ClassName -> Constr #

dataTypeOf :: ClassName -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c ClassName) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c ClassName) #

gmapT :: (forall b. Data b => b -> b) -> ClassName -> ClassName #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> ClassName -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> ClassName -> r #

gmapQ :: (forall d. Data d => d -> u) -> ClassName -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> ClassName -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> ClassName -> m ClassName #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> ClassName -> m ClassName #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> ClassName -> m ClassName #

Show ClassName Source # 
Instance details

Defined in H2JVM.Name

Eq ClassName Source # 
Instance details

Defined in H2JVM.Name

Ord ClassName Source # 
Instance details

Defined in H2JVM.Name

data QualifiedClassName Source #

A fully qualified JVM class name, consisting of a PackageName and a ClassName. For example, "java.lang.Object" would be represented as QualifiedClassName (PackageName ["java","lang"]) (ClassName "Object").

Instances

Instances details
Data QualifiedClassName Source # 
Instance details

Defined in H2JVM.Name

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> QualifiedClassName -> c QualifiedClassName #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c QualifiedClassName #

toConstr :: QualifiedClassName -> Constr #

dataTypeOf :: QualifiedClassName -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c QualifiedClassName) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c QualifiedClassName) #

gmapT :: (forall b. Data b => b -> b) -> QualifiedClassName -> QualifiedClassName #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> QualifiedClassName -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> QualifiedClassName -> r #

gmapQ :: (forall d. Data d => d -> u) -> QualifiedClassName -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> QualifiedClassName -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> QualifiedClassName -> m QualifiedClassName #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> QualifiedClassName -> m QualifiedClassName #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> QualifiedClassName -> m QualifiedClassName #

IsString QualifiedClassName Source # 
Instance details

Defined in H2JVM.Name

Show QualifiedClassName Source # 
Instance details

Defined in H2JVM.Name

Eq QualifiedClassName Source # 
Instance details

Defined in H2JVM.Name

Ord QualifiedClassName Source # 
Instance details

Defined in H2JVM.Name

Pretty QualifiedClassName Source # 
Instance details

Defined in H2JVM.Name

parsePackageName :: Text -> PackageName Source #

Parse a PackageName from a Text

>>> parsePackageName "java.lang"
PackageName ["java","lang"]
>>> parsePackageName ""
PackageName []

parseClassName :: Text -> ClassName Source #

Parse a ClassName from a Text. This function is lenient, but this behaviour should not be relied on, and in future this may throw an error if the input is not a valid class name.

parseQualifiedClassName :: Text -> QualifiedClassName Source #

Parse a QualifiedClassName from a Text

>>> parseQualifiedClassName "java.lang.Object"
QualifiedClassName (PackageName ["java","lang"]) (ClassName "Object")
>>> parseQualifiedClassName "Object"
QualifiedClassName (PackageName []) (ClassName "Object")

This function is lenient and will accept invalid class names: >>> parseQualifiedClassName "123invalid" QualifiedClassName (PackageName []) (ClassName "123invalid")

toInternalName :: QualifiedClassName -> Text Source #

Convert a QualifiedClassName to a Text that can be used as an internal JVM name

>>> toInternalName (QualifiedClassName (PackageName ["java","lang"]) (ClassName "Object"))
"java/lang/Object"

suitableFilePath :: QualifiedClassName -> FilePath Source #

Convert a QualifiedClassName to a FilePath that one would expect the class file to be in >>> suitableFilePath "java.lang.Object" "javalangObject.class"

>>> suitableFilePath "Object"
"Object.class"