packages feed

hydra-java-0.18.0: src/main/haskell/Hydra/Java/Environment.hs

-- Note: this is an automatically generated file. Do not edit.

-- | Environment types for Java code generation

module Hydra.Java.Environment where

import qualified Hydra.Core.Graph as Graph
import qualified Hydra.Core.Model as Model
import qualified Hydra.Core.Packaging as Packaging
import qualified Hydra.Core.Typing as Typing
import qualified Hydra.Java.Syntax as Syntax
import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, lines, map, pure, sum, unlines)
import qualified Data.Scientific as Sci
import Data.Void
import qualified Data.Map as M
import qualified Data.Set as S

-- | Classification of a Java symbol for code generation
data JavaSymbolClass =
  -- | A constant value
  JavaSymbolClassConstant |
  -- | A nullary function (no arguments)
  JavaSymbolClassNullaryFunction |
  -- | A hoisted lambda wrapped in type lambdas. The Int is the number of curried lambda parameters.
  JavaSymbolClassHoistedLambda Int |
  -- | A unary function (single argument)
  JavaSymbolClassUnaryFunction |
  -- | A local variable
  JavaSymbolClassLocalVariable
  deriving (Eq, Ord, Read, Show)

_JavaSymbolClass = Model.Name "hydra.java.environment.JavaSymbolClass"

_JavaSymbolClass_constant = Model.Name "constant"

_JavaSymbolClass_nullaryFunction = Model.Name "nullaryFunction"

_JavaSymbolClass_hoistedLambda = Model.Name "hoistedLambda"

_JavaSymbolClass_unaryFunction = Model.Name "unaryFunction"

_JavaSymbolClass_localVariable = Model.Name "localVariable"

-- | Feature flags for the target Java version
data JavaFeatures =
  JavaFeatures {
    -- | Whether the diamond operator (<>) is supported (Java 7+)
    javaFeaturesSupportsDiamondOperator :: Bool}
  deriving (Eq, Ord, Read, Show)

_JavaFeatures = Model.Name "hydra.java.environment.JavaFeatures"

_JavaFeatures_supportsDiamondOperator = Model.Name "supportsDiamondOperator"

-- | Aliases and context for Java code generation
data Aliases =
  Aliases {
    -- | Current module name context
    aliasesCurrentNamespace :: Packaging.ModuleName,
    -- | Maps module names to Java package names
    aliasesPackages :: (M.Map Packaging.ModuleName Syntax.PackageName),
    -- | Variables bound in pattern matching branches
    aliasesBranchVars :: (S.Set Model.Name),
    -- | Variables that are self-recursive
    aliasesRecursiveVars :: (S.Set Model.Name),
    -- | Type parameters that are in scope (from method-level type parameters)
    aliasesInScopeTypeParams :: (S.Set Model.Name),
    -- | Local variables that have polymorphic types (declared with raw types)
    aliasesPolymorphicLocals :: (S.Set Model.Name),
    -- | All in-scope Java variable names (for avoiding lambda parameter shadowing)
    aliasesInScopeJavaVars :: (S.Set Model.Name),
    -- | Variable renames for avoiding shadowing (maps Hydra name to Java name)
    aliasesVarRenames :: (M.Map Model.Name Model.Name),
    -- | Lambda-bound variables (including hoisted captures with qualified names)
    aliasesLambdaVars :: (S.Set Model.Name),
    -- | Type variable substitution: maps fresh inference variable names to canonical scheme variable names
    aliasesTypeVarSubst :: (M.Map Model.Name Model.Name),
    -- | Type variables that actually appear in the method's formal parameter types
    aliasesTrustedTypeVars :: (S.Set Model.Name),
    -- | The enclosing method's codomain (return type), used for casting pair expressions
    aliasesMethodCodomain :: (Maybe Model.Type),
    -- | Variables that have been thunked (wrapped in Supplier) for lazy evaluation
    aliasesThunkedVars :: (S.Set Model.Name)}
  deriving (Eq, Ord, Read, Show)

_Aliases = Model.Name "hydra.java.environment.Aliases"

_Aliases_currentNamespace = Model.Name "currentNamespace"

_Aliases_packages = Model.Name "packages"

_Aliases_branchVars = Model.Name "branchVars"

_Aliases_recursiveVars = Model.Name "recursiveVars"

_Aliases_inScopeTypeParams = Model.Name "inScopeTypeParams"

_Aliases_polymorphicLocals = Model.Name "polymorphicLocals"

_Aliases_inScopeJavaVars = Model.Name "inScopeJavaVars"

_Aliases_varRenames = Model.Name "varRenames"

_Aliases_lambdaVars = Model.Name "lambdaVars"

_Aliases_typeVarSubst = Model.Name "typeVarSubst"

_Aliases_trustedTypeVars = Model.Name "trustedTypeVars"

_Aliases_methodCodomain = Model.Name "methodCodomain"

_Aliases_thunkedVars = Model.Name "thunkedVars"

-- | Environment for Java code generation
data JavaEnvironment =
  JavaEnvironment {
    -- | Aliases and context state
    javaEnvironmentAliases :: Aliases,
    -- | Graph context for type inference
    javaEnvironmentGraph :: Graph.Graph}

_JavaEnvironment = Model.Name "hydra.java.environment.JavaEnvironment"

_JavaEnvironment_aliases = Model.Name "aliases"

_JavaEnvironment_graph = Model.Name "graph"