{-# LANGUAGE OverloadedStrings #-}
-- | This module exports definitions for some most used classes and methods from standard Java java.io package.
module Java.IO where

import Data.String

import JVM.Common ()  -- import instances only
import JVM.ClassFile

import qualified Java.Lang

-- | java.io.PrintStream class name
printStream :: IsString s => s
printStream = "java/io/PrintStream"

-- | java.io.PrintStream class as field type
printStreamClass ::  FieldType
printStreamClass = ObjectType printStream

println :: NameType (Method Direct)
println = NameType "println" $ MethodSignature [Java.Lang.stringClass] ReturnsVoid

out :: NameType (Field Direct)
out = NameType "out" printStreamClass

printf :: NameType (Method Direct)
printf =
  NameType "printf" $ MethodSignature [Java.Lang.stringClass,
                                       Array Nothing Java.Lang.objectClass] (Returns printStreamClass)