module JVM.Data.Convert.Descriptor where

import Data.Text (Text)
import JVM.Data.Abstract.Descriptor (MethodDescriptor (..), ReturnDescriptor (..))
import JVM.Data.Convert.Type (fieldTypeDescriptor)

convertMethodDescriptor :: MethodDescriptor -> Text
convertMethodDescriptor :: MethodDescriptor -> Text
convertMethodDescriptor (MethodDescriptor [FieldType]
params ReturnDescriptor
ret) =
    let params' :: [Text]
params' = (FieldType -> Text) -> [FieldType] -> [Text]
forall a b. (a -> b) -> [a] -> [b]
map FieldType -> Text
fieldTypeDescriptor [FieldType]
params
        ret' :: Text
ret' = case ReturnDescriptor
ret of
            ReturnDescriptor
VoidReturn -> Text
"V"
            TypeReturn FieldType
t -> FieldType -> Text
fieldTypeDescriptor FieldType
t
     in Text
"(" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> [Text] -> Text
forall a. Monoid a => [a] -> a
mconcat [Text]
params' Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
")" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
ret'