packages feed

hydra-0.8.0: src/gen-main/haskell/Hydra/Ext/Java/Syntax.hs

-- | A Java syntax module. Based on the Oracle Java SE 12 BNF:
-- |   https://docs.oracle.com/javase/specs/jls/se12/html/jls-19.html
-- | Note: all *WithComments types were added manually, rather than derived from the BNF, which does not allow for comments.

module Hydra.Ext.Java.Syntax where

import qualified Hydra.Core as Core
import Data.Int
import Data.List as L
import Data.Map as M
import Data.Set as S

newtype Identifier = 
  Identifier {
    unIdentifier :: String}
  deriving (Eq, Ord, Read, Show)

_Identifier = (Core.Name "hydra/ext/java/syntax.Identifier")

newtype TypeIdentifier = 
  TypeIdentifier {
    unTypeIdentifier :: Identifier}
  deriving (Eq, Ord, Read, Show)

_TypeIdentifier = (Core.Name "hydra/ext/java/syntax.TypeIdentifier")

data Literal = 
  LiteralNull  |
  LiteralInteger IntegerLiteral |
  LiteralFloatingPoint FloatingPointLiteral |
  LiteralBoolean Bool |
  LiteralCharacter Int |
  LiteralString StringLiteral
  deriving (Eq, Ord, Read, Show)

_Literal = (Core.Name "hydra/ext/java/syntax.Literal")

_Literal_null = (Core.Name "null")

_Literal_integer = (Core.Name "integer")

_Literal_floatingPoint = (Core.Name "floatingPoint")

_Literal_boolean = (Core.Name "boolean")

_Literal_character = (Core.Name "character")

_Literal_string = (Core.Name "string")

-- | Note: this is an approximation which ignores encoding
newtype IntegerLiteral = 
  IntegerLiteral {
    unIntegerLiteral :: Integer}
  deriving (Eq, Ord, Read, Show)

_IntegerLiteral = (Core.Name "hydra/ext/java/syntax.IntegerLiteral")

-- | Note: this is an approximation which ignores encoding
newtype FloatingPointLiteral = 
  FloatingPointLiteral {
    unFloatingPointLiteral :: Double}
  deriving (Eq, Ord, Read, Show)

_FloatingPointLiteral = (Core.Name "hydra/ext/java/syntax.FloatingPointLiteral")

-- | Note: this is an approximation which ignores encoding
newtype StringLiteral = 
  StringLiteral {
    unStringLiteral :: String}
  deriving (Eq, Ord, Read, Show)

_StringLiteral = (Core.Name "hydra/ext/java/syntax.StringLiteral")

data Type = 
  TypePrimitive PrimitiveTypeWithAnnotations |
  TypeReference ReferenceType
  deriving (Eq, Ord, Read, Show)

_Type = (Core.Name "hydra/ext/java/syntax.Type")

_Type_primitive = (Core.Name "primitive")

_Type_reference = (Core.Name "reference")

data PrimitiveTypeWithAnnotations = 
  PrimitiveTypeWithAnnotations {
    primitiveTypeWithAnnotationsType :: PrimitiveType,
    primitiveTypeWithAnnotationsAnnotations :: [Annotation]}
  deriving (Eq, Ord, Read, Show)

_PrimitiveTypeWithAnnotations = (Core.Name "hydra/ext/java/syntax.PrimitiveTypeWithAnnotations")

_PrimitiveTypeWithAnnotations_type = (Core.Name "type")

_PrimitiveTypeWithAnnotations_annotations = (Core.Name "annotations")

data PrimitiveType = 
  PrimitiveTypeNumeric NumericType |
  PrimitiveTypeBoolean 
  deriving (Eq, Ord, Read, Show)

_PrimitiveType = (Core.Name "hydra/ext/java/syntax.PrimitiveType")

_PrimitiveType_numeric = (Core.Name "numeric")

_PrimitiveType_boolean = (Core.Name "boolean")

data NumericType = 
  NumericTypeIntegral IntegralType |
  NumericTypeFloatingPoint FloatingPointType
  deriving (Eq, Ord, Read, Show)

_NumericType = (Core.Name "hydra/ext/java/syntax.NumericType")

_NumericType_integral = (Core.Name "integral")

_NumericType_floatingPoint = (Core.Name "floatingPoint")

data IntegralType = 
  IntegralTypeByte  |
  IntegralTypeShort  |
  IntegralTypeInt  |
  IntegralTypeLong  |
  IntegralTypeChar 
  deriving (Eq, Ord, Read, Show)

_IntegralType = (Core.Name "hydra/ext/java/syntax.IntegralType")

_IntegralType_byte = (Core.Name "byte")

_IntegralType_short = (Core.Name "short")

_IntegralType_int = (Core.Name "int")

_IntegralType_long = (Core.Name "long")

_IntegralType_char = (Core.Name "char")

data FloatingPointType = 
  FloatingPointTypeFloat  |
  FloatingPointTypeDouble 
  deriving (Eq, Ord, Read, Show)

_FloatingPointType = (Core.Name "hydra/ext/java/syntax.FloatingPointType")

_FloatingPointType_float = (Core.Name "float")

_FloatingPointType_double = (Core.Name "double")

data ReferenceType = 
  ReferenceTypeClassOrInterface ClassOrInterfaceType |
  ReferenceTypeVariable TypeVariable |
  ReferenceTypeArray ArrayType
  deriving (Eq, Ord, Read, Show)

_ReferenceType = (Core.Name "hydra/ext/java/syntax.ReferenceType")

_ReferenceType_classOrInterface = (Core.Name "classOrInterface")

_ReferenceType_variable = (Core.Name "variable")

_ReferenceType_array = (Core.Name "array")

data ClassOrInterfaceType = 
  ClassOrInterfaceTypeClass ClassType |
  ClassOrInterfaceTypeInterface InterfaceType
  deriving (Eq, Ord, Read, Show)

_ClassOrInterfaceType = (Core.Name "hydra/ext/java/syntax.ClassOrInterfaceType")

_ClassOrInterfaceType_class = (Core.Name "class")

_ClassOrInterfaceType_interface = (Core.Name "interface")

data ClassType = 
  ClassType {
    classTypeAnnotations :: [Annotation],
    classTypeQualifier :: ClassTypeQualifier,
    classTypeIdentifier :: TypeIdentifier,
    classTypeArguments :: [TypeArgument]}
  deriving (Eq, Ord, Read, Show)

_ClassType = (Core.Name "hydra/ext/java/syntax.ClassType")

_ClassType_annotations = (Core.Name "annotations")

_ClassType_qualifier = (Core.Name "qualifier")

_ClassType_identifier = (Core.Name "identifier")

_ClassType_arguments = (Core.Name "arguments")

data ClassTypeQualifier = 
  ClassTypeQualifierNone  |
  ClassTypeQualifierPackage PackageName |
  ClassTypeQualifierParent ClassOrInterfaceType
  deriving (Eq, Ord, Read, Show)

_ClassTypeQualifier = (Core.Name "hydra/ext/java/syntax.ClassTypeQualifier")

_ClassTypeQualifier_none = (Core.Name "none")

_ClassTypeQualifier_package = (Core.Name "package")

_ClassTypeQualifier_parent = (Core.Name "parent")

newtype InterfaceType = 
  InterfaceType {
    unInterfaceType :: ClassType}
  deriving (Eq, Ord, Read, Show)

_InterfaceType = (Core.Name "hydra/ext/java/syntax.InterfaceType")

data TypeVariable = 
  TypeVariable {
    typeVariableAnnotations :: [Annotation],
    typeVariableIdentifier :: TypeIdentifier}
  deriving (Eq, Ord, Read, Show)

_TypeVariable = (Core.Name "hydra/ext/java/syntax.TypeVariable")

_TypeVariable_annotations = (Core.Name "annotations")

_TypeVariable_identifier = (Core.Name "identifier")

data ArrayType = 
  ArrayType {
    arrayTypeDims :: Dims,
    arrayTypeVariant :: ArrayType_Variant}
  deriving (Eq, Ord, Read, Show)

_ArrayType = (Core.Name "hydra/ext/java/syntax.ArrayType")

_ArrayType_dims = (Core.Name "dims")

_ArrayType_variant = (Core.Name "variant")

data ArrayType_Variant = 
  ArrayType_VariantPrimitive PrimitiveTypeWithAnnotations |
  ArrayType_VariantClassOrInterface ClassOrInterfaceType |
  ArrayType_VariantVariable TypeVariable
  deriving (Eq, Ord, Read, Show)

_ArrayType_Variant = (Core.Name "hydra/ext/java/syntax.ArrayType.Variant")

_ArrayType_Variant_primitive = (Core.Name "primitive")

_ArrayType_Variant_classOrInterface = (Core.Name "classOrInterface")

_ArrayType_Variant_variable = (Core.Name "variable")

newtype Dims = 
  Dims {
    unDims :: [[Annotation]]}
  deriving (Eq, Ord, Read, Show)

_Dims = (Core.Name "hydra/ext/java/syntax.Dims")

data TypeParameter = 
  TypeParameter {
    typeParameterModifiers :: [TypeParameterModifier],
    typeParameterIdentifier :: TypeIdentifier,
    typeParameterBound :: (Maybe TypeBound)}
  deriving (Eq, Ord, Read, Show)

_TypeParameter = (Core.Name "hydra/ext/java/syntax.TypeParameter")

_TypeParameter_modifiers = (Core.Name "modifiers")

_TypeParameter_identifier = (Core.Name "identifier")

_TypeParameter_bound = (Core.Name "bound")

newtype TypeParameterModifier = 
  TypeParameterModifier {
    unTypeParameterModifier :: Annotation}
  deriving (Eq, Ord, Read, Show)

_TypeParameterModifier = (Core.Name "hydra/ext/java/syntax.TypeParameterModifier")

data TypeBound = 
  TypeBoundVariable TypeVariable |
  TypeBoundClassOrInterface TypeBound_ClassOrInterface
  deriving (Eq, Ord, Read, Show)

_TypeBound = (Core.Name "hydra/ext/java/syntax.TypeBound")

_TypeBound_variable = (Core.Name "variable")

_TypeBound_classOrInterface = (Core.Name "classOrInterface")

data TypeBound_ClassOrInterface = 
  TypeBound_ClassOrInterface {
    typeBound_ClassOrInterfaceType :: ClassOrInterfaceType,
    typeBound_ClassOrInterfaceAdditional :: [AdditionalBound]}
  deriving (Eq, Ord, Read, Show)

_TypeBound_ClassOrInterface = (Core.Name "hydra/ext/java/syntax.TypeBound.ClassOrInterface")

_TypeBound_ClassOrInterface_type = (Core.Name "type")

_TypeBound_ClassOrInterface_additional = (Core.Name "additional")

newtype AdditionalBound = 
  AdditionalBound {
    unAdditionalBound :: InterfaceType}
  deriving (Eq, Ord, Read, Show)

_AdditionalBound = (Core.Name "hydra/ext/java/syntax.AdditionalBound")

data TypeArgument = 
  TypeArgumentReference ReferenceType |
  TypeArgumentWildcard Wildcard
  deriving (Eq, Ord, Read, Show)

_TypeArgument = (Core.Name "hydra/ext/java/syntax.TypeArgument")

_TypeArgument_reference = (Core.Name "reference")

_TypeArgument_wildcard = (Core.Name "wildcard")

data Wildcard = 
  Wildcard {
    wildcardAnnotations :: [Annotation],
    wildcardWildcard :: (Maybe WildcardBounds)}
  deriving (Eq, Ord, Read, Show)

_Wildcard = (Core.Name "hydra/ext/java/syntax.Wildcard")

_Wildcard_annotations = (Core.Name "annotations")

_Wildcard_wildcard = (Core.Name "wildcard")

data WildcardBounds = 
  WildcardBoundsExtends ReferenceType |
  WildcardBoundsSuper ReferenceType
  deriving (Eq, Ord, Read, Show)

_WildcardBounds = (Core.Name "hydra/ext/java/syntax.WildcardBounds")

_WildcardBounds_extends = (Core.Name "extends")

_WildcardBounds_super = (Core.Name "super")

data ModuleName = 
  ModuleName {
    moduleNameIdentifier :: Identifier,
    moduleNameName :: (Maybe ModuleName)}
  deriving (Eq, Ord, Read, Show)

_ModuleName = (Core.Name "hydra/ext/java/syntax.ModuleName")

_ModuleName_identifier = (Core.Name "identifier")

_ModuleName_name = (Core.Name "name")

newtype PackageName = 
  PackageName {
    unPackageName :: [Identifier]}
  deriving (Eq, Ord, Read, Show)

_PackageName = (Core.Name "hydra/ext/java/syntax.PackageName")

data TypeName = 
  TypeName {
    typeNameIdentifier :: TypeIdentifier,
    typeNameQualifier :: (Maybe PackageOrTypeName)}
  deriving (Eq, Ord, Read, Show)

_TypeName = (Core.Name "hydra/ext/java/syntax.TypeName")

_TypeName_identifier = (Core.Name "identifier")

_TypeName_qualifier = (Core.Name "qualifier")

data ExpressionName = 
  ExpressionName {
    expressionNameQualifier :: (Maybe AmbiguousName),
    expressionNameIdentifier :: Identifier}
  deriving (Eq, Ord, Read, Show)

_ExpressionName = (Core.Name "hydra/ext/java/syntax.ExpressionName")

_ExpressionName_qualifier = (Core.Name "qualifier")

_ExpressionName_identifier = (Core.Name "identifier")

newtype MethodName = 
  MethodName {
    unMethodName :: Identifier}
  deriving (Eq, Ord, Read, Show)

_MethodName = (Core.Name "hydra/ext/java/syntax.MethodName")

newtype PackageOrTypeName = 
  PackageOrTypeName {
    unPackageOrTypeName :: [Identifier]}
  deriving (Eq, Ord, Read, Show)

_PackageOrTypeName = (Core.Name "hydra/ext/java/syntax.PackageOrTypeName")

newtype AmbiguousName = 
  AmbiguousName {
    unAmbiguousName :: [Identifier]}
  deriving (Eq, Ord, Read, Show)

_AmbiguousName = (Core.Name "hydra/ext/java/syntax.AmbiguousName")

data CompilationUnit = 
  CompilationUnitOrdinary OrdinaryCompilationUnit |
  CompilationUnitModular ModularCompilationUnit
  deriving (Eq, Ord, Read, Show)

_CompilationUnit = (Core.Name "hydra/ext/java/syntax.CompilationUnit")

_CompilationUnit_ordinary = (Core.Name "ordinary")

_CompilationUnit_modular = (Core.Name "modular")

data OrdinaryCompilationUnit = 
  OrdinaryCompilationUnit {
    ordinaryCompilationUnitPackage :: (Maybe PackageDeclaration),
    ordinaryCompilationUnitImports :: [ImportDeclaration],
    ordinaryCompilationUnitTypes :: [TypeDeclarationWithComments]}
  deriving (Eq, Ord, Read, Show)

_OrdinaryCompilationUnit = (Core.Name "hydra/ext/java/syntax.OrdinaryCompilationUnit")

_OrdinaryCompilationUnit_package = (Core.Name "package")

_OrdinaryCompilationUnit_imports = (Core.Name "imports")

_OrdinaryCompilationUnit_types = (Core.Name "types")

data ModularCompilationUnit = 
  ModularCompilationUnit {
    modularCompilationUnitImports :: [ImportDeclaration],
    modularCompilationUnitModule :: ModuleDeclaration}
  deriving (Eq, Ord, Read, Show)

_ModularCompilationUnit = (Core.Name "hydra/ext/java/syntax.ModularCompilationUnit")

_ModularCompilationUnit_imports = (Core.Name "imports")

_ModularCompilationUnit_module = (Core.Name "module")

data PackageDeclaration = 
  PackageDeclaration {
    packageDeclarationModifiers :: [PackageModifier],
    packageDeclarationIdentifiers :: [Identifier]}
  deriving (Eq, Ord, Read, Show)

_PackageDeclaration = (Core.Name "hydra/ext/java/syntax.PackageDeclaration")

_PackageDeclaration_modifiers = (Core.Name "modifiers")

_PackageDeclaration_identifiers = (Core.Name "identifiers")

newtype PackageModifier = 
  PackageModifier {
    unPackageModifier :: Annotation}
  deriving (Eq, Ord, Read, Show)

_PackageModifier = (Core.Name "hydra/ext/java/syntax.PackageModifier")

data ImportDeclaration = 
  ImportDeclarationSingleType SingleTypeImportDeclaration |
  ImportDeclarationTypeImportOnDemand TypeImportOnDemandDeclaration |
  ImportDeclarationSingleStaticImport SingleStaticImportDeclaration |
  ImportDeclarationStaticImportOnDemand StaticImportOnDemandDeclaration
  deriving (Eq, Ord, Read, Show)

_ImportDeclaration = (Core.Name "hydra/ext/java/syntax.ImportDeclaration")

_ImportDeclaration_singleType = (Core.Name "singleType")

_ImportDeclaration_typeImportOnDemand = (Core.Name "typeImportOnDemand")

_ImportDeclaration_singleStaticImport = (Core.Name "singleStaticImport")

_ImportDeclaration_staticImportOnDemand = (Core.Name "staticImportOnDemand")

newtype SingleTypeImportDeclaration = 
  SingleTypeImportDeclaration {
    unSingleTypeImportDeclaration :: TypeName}
  deriving (Eq, Ord, Read, Show)

_SingleTypeImportDeclaration = (Core.Name "hydra/ext/java/syntax.SingleTypeImportDeclaration")

newtype TypeImportOnDemandDeclaration = 
  TypeImportOnDemandDeclaration {
    unTypeImportOnDemandDeclaration :: PackageOrTypeName}
  deriving (Eq, Ord, Read, Show)

_TypeImportOnDemandDeclaration = (Core.Name "hydra/ext/java/syntax.TypeImportOnDemandDeclaration")

data SingleStaticImportDeclaration = 
  SingleStaticImportDeclaration {
    singleStaticImportDeclarationTypeName :: TypeName,
    singleStaticImportDeclarationIdentifier :: Identifier}
  deriving (Eq, Ord, Read, Show)

_SingleStaticImportDeclaration = (Core.Name "hydra/ext/java/syntax.SingleStaticImportDeclaration")

_SingleStaticImportDeclaration_typeName = (Core.Name "typeName")

_SingleStaticImportDeclaration_identifier = (Core.Name "identifier")

newtype StaticImportOnDemandDeclaration = 
  StaticImportOnDemandDeclaration {
    unStaticImportOnDemandDeclaration :: TypeName}
  deriving (Eq, Ord, Read, Show)

_StaticImportOnDemandDeclaration = (Core.Name "hydra/ext/java/syntax.StaticImportOnDemandDeclaration")

data TypeDeclaration = 
  TypeDeclarationClass ClassDeclaration |
  TypeDeclarationInterface InterfaceDeclaration |
  TypeDeclarationNone 
  deriving (Eq, Ord, Read, Show)

_TypeDeclaration = (Core.Name "hydra/ext/java/syntax.TypeDeclaration")

_TypeDeclaration_class = (Core.Name "class")

_TypeDeclaration_interface = (Core.Name "interface")

_TypeDeclaration_none = (Core.Name "none")

data TypeDeclarationWithComments = 
  TypeDeclarationWithComments {
    typeDeclarationWithCommentsValue :: TypeDeclaration,
    typeDeclarationWithCommentsComments :: (Maybe String)}
  deriving (Eq, Ord, Read, Show)

_TypeDeclarationWithComments = (Core.Name "hydra/ext/java/syntax.TypeDeclarationWithComments")

_TypeDeclarationWithComments_value = (Core.Name "value")

_TypeDeclarationWithComments_comments = (Core.Name "comments")

data ModuleDeclaration = 
  ModuleDeclaration {
    moduleDeclarationAnnotations :: [Annotation],
    moduleDeclarationOpen :: Bool,
    moduleDeclarationIdentifiers :: [Identifier],
    moduleDeclarationDirectives :: [[ModuleDirective]]}
  deriving (Eq, Ord, Read, Show)

_ModuleDeclaration = (Core.Name "hydra/ext/java/syntax.ModuleDeclaration")

_ModuleDeclaration_annotations = (Core.Name "annotations")

_ModuleDeclaration_open = (Core.Name "open")

_ModuleDeclaration_identifiers = (Core.Name "identifiers")

_ModuleDeclaration_directives = (Core.Name "directives")

data ModuleDirective = 
  ModuleDirectiveRequires ModuleDirective_Requires |
  ModuleDirectiveExports ModuleDirective_ExportsOrOpens |
  ModuleDirectiveOpens ModuleDirective_ExportsOrOpens |
  ModuleDirectiveUses TypeName |
  ModuleDirectiveProvides ModuleDirective_Provides
  deriving (Eq, Ord, Read, Show)

_ModuleDirective = (Core.Name "hydra/ext/java/syntax.ModuleDirective")

_ModuleDirective_requires = (Core.Name "requires")

_ModuleDirective_exports = (Core.Name "exports")

_ModuleDirective_opens = (Core.Name "opens")

_ModuleDirective_uses = (Core.Name "uses")

_ModuleDirective_provides = (Core.Name "provides")

data ModuleDirective_Requires = 
  ModuleDirective_Requires {
    moduleDirective_RequiresModifiers :: [RequiresModifier],
    moduleDirective_RequiresModule :: ModuleName}
  deriving (Eq, Ord, Read, Show)

_ModuleDirective_Requires = (Core.Name "hydra/ext/java/syntax.ModuleDirective.Requires")

_ModuleDirective_Requires_modifiers = (Core.Name "modifiers")

_ModuleDirective_Requires_module = (Core.Name "module")

data ModuleDirective_ExportsOrOpens = 
  ModuleDirective_ExportsOrOpens {
    moduleDirective_ExportsOrOpensPackage :: PackageName,
    -- | At least one module
    moduleDirective_ExportsOrOpensModules :: [ModuleName]}
  deriving (Eq, Ord, Read, Show)

_ModuleDirective_ExportsOrOpens = (Core.Name "hydra/ext/java/syntax.ModuleDirective.ExportsOrOpens")

_ModuleDirective_ExportsOrOpens_package = (Core.Name "package")

_ModuleDirective_ExportsOrOpens_modules = (Core.Name "modules")

data ModuleDirective_Provides = 
  ModuleDirective_Provides {
    moduleDirective_ProvidesTo :: TypeName,
    -- | At least one type
    moduleDirective_ProvidesWith :: [TypeName]}
  deriving (Eq, Ord, Read, Show)

_ModuleDirective_Provides = (Core.Name "hydra/ext/java/syntax.ModuleDirective.Provides")

_ModuleDirective_Provides_to = (Core.Name "to")

_ModuleDirective_Provides_with = (Core.Name "with")

data RequiresModifier = 
  RequiresModifierTransitive  |
  RequiresModifierStatic 
  deriving (Eq, Ord, Read, Show)

_RequiresModifier = (Core.Name "hydra/ext/java/syntax.RequiresModifier")

_RequiresModifier_transitive = (Core.Name "transitive")

_RequiresModifier_static = (Core.Name "static")

data ClassDeclaration = 
  ClassDeclarationNormal NormalClassDeclaration |
  ClassDeclarationEnum EnumDeclaration
  deriving (Eq, Ord, Read, Show)

_ClassDeclaration = (Core.Name "hydra/ext/java/syntax.ClassDeclaration")

_ClassDeclaration_normal = (Core.Name "normal")

_ClassDeclaration_enum = (Core.Name "enum")

data NormalClassDeclaration = 
  NormalClassDeclaration {
    normalClassDeclarationModifiers :: [ClassModifier],
    normalClassDeclarationIdentifier :: TypeIdentifier,
    normalClassDeclarationParameters :: [TypeParameter],
    normalClassDeclarationExtends :: (Maybe ClassType),
    normalClassDeclarationImplements :: [InterfaceType],
    normalClassDeclarationBody :: ClassBody}
  deriving (Eq, Ord, Read, Show)

_NormalClassDeclaration = (Core.Name "hydra/ext/java/syntax.NormalClassDeclaration")

_NormalClassDeclaration_modifiers = (Core.Name "modifiers")

_NormalClassDeclaration_identifier = (Core.Name "identifier")

_NormalClassDeclaration_parameters = (Core.Name "parameters")

_NormalClassDeclaration_extends = (Core.Name "extends")

_NormalClassDeclaration_implements = (Core.Name "implements")

_NormalClassDeclaration_body = (Core.Name "body")

data ClassModifier = 
  ClassModifierAnnotation Annotation |
  ClassModifierPublic  |
  ClassModifierProtected  |
  ClassModifierPrivate  |
  ClassModifierAbstract  |
  ClassModifierStatic  |
  ClassModifierFinal  |
  ClassModifierStrictfp 
  deriving (Eq, Ord, Read, Show)

_ClassModifier = (Core.Name "hydra/ext/java/syntax.ClassModifier")

_ClassModifier_annotation = (Core.Name "annotation")

_ClassModifier_public = (Core.Name "public")

_ClassModifier_protected = (Core.Name "protected")

_ClassModifier_private = (Core.Name "private")

_ClassModifier_abstract = (Core.Name "abstract")

_ClassModifier_static = (Core.Name "static")

_ClassModifier_final = (Core.Name "final")

_ClassModifier_strictfp = (Core.Name "strictfp")

newtype ClassBody = 
  ClassBody {
    unClassBody :: [ClassBodyDeclarationWithComments]}
  deriving (Eq, Ord, Read, Show)

_ClassBody = (Core.Name "hydra/ext/java/syntax.ClassBody")

data ClassBodyDeclaration = 
  ClassBodyDeclarationClassMember ClassMemberDeclaration |
  ClassBodyDeclarationInstanceInitializer InstanceInitializer |
  ClassBodyDeclarationStaticInitializer StaticInitializer |
  ClassBodyDeclarationConstructorDeclaration ConstructorDeclaration
  deriving (Eq, Ord, Read, Show)

_ClassBodyDeclaration = (Core.Name "hydra/ext/java/syntax.ClassBodyDeclaration")

_ClassBodyDeclaration_classMember = (Core.Name "classMember")

_ClassBodyDeclaration_instanceInitializer = (Core.Name "instanceInitializer")

_ClassBodyDeclaration_staticInitializer = (Core.Name "staticInitializer")

_ClassBodyDeclaration_constructorDeclaration = (Core.Name "constructorDeclaration")

data ClassBodyDeclarationWithComments = 
  ClassBodyDeclarationWithComments {
    classBodyDeclarationWithCommentsValue :: ClassBodyDeclaration,
    classBodyDeclarationWithCommentsComments :: (Maybe String)}
  deriving (Eq, Ord, Read, Show)

_ClassBodyDeclarationWithComments = (Core.Name "hydra/ext/java/syntax.ClassBodyDeclarationWithComments")

_ClassBodyDeclarationWithComments_value = (Core.Name "value")

_ClassBodyDeclarationWithComments_comments = (Core.Name "comments")

data ClassMemberDeclaration = 
  ClassMemberDeclarationField FieldDeclaration |
  ClassMemberDeclarationMethod MethodDeclaration |
  ClassMemberDeclarationClass ClassDeclaration |
  ClassMemberDeclarationInterface InterfaceDeclaration |
  ClassMemberDeclarationNone 
  deriving (Eq, Ord, Read, Show)

_ClassMemberDeclaration = (Core.Name "hydra/ext/java/syntax.ClassMemberDeclaration")

_ClassMemberDeclaration_field = (Core.Name "field")

_ClassMemberDeclaration_method = (Core.Name "method")

_ClassMemberDeclaration_class = (Core.Name "class")

_ClassMemberDeclaration_interface = (Core.Name "interface")

_ClassMemberDeclaration_none = (Core.Name "none")

data FieldDeclaration = 
  FieldDeclaration {
    fieldDeclarationModifiers :: [FieldModifier],
    fieldDeclarationUnannType :: UnannType,
    fieldDeclarationVariableDeclarators :: [VariableDeclarator]}
  deriving (Eq, Ord, Read, Show)

_FieldDeclaration = (Core.Name "hydra/ext/java/syntax.FieldDeclaration")

_FieldDeclaration_modifiers = (Core.Name "modifiers")

_FieldDeclaration_unannType = (Core.Name "unannType")

_FieldDeclaration_variableDeclarators = (Core.Name "variableDeclarators")

data FieldModifier = 
  FieldModifierAnnotation Annotation |
  FieldModifierPublic  |
  FieldModifierProtected  |
  FieldModifierPrivate  |
  FieldModifierStatic  |
  FieldModifierFinal  |
  FieldModifierTransient  |
  FieldModifierVolatile 
  deriving (Eq, Ord, Read, Show)

_FieldModifier = (Core.Name "hydra/ext/java/syntax.FieldModifier")

_FieldModifier_annotation = (Core.Name "annotation")

_FieldModifier_public = (Core.Name "public")

_FieldModifier_protected = (Core.Name "protected")

_FieldModifier_private = (Core.Name "private")

_FieldModifier_static = (Core.Name "static")

_FieldModifier_final = (Core.Name "final")

_FieldModifier_transient = (Core.Name "transient")

_FieldModifier_volatile = (Core.Name "volatile")

data VariableDeclarator = 
  VariableDeclarator {
    variableDeclaratorId :: VariableDeclaratorId,
    variableDeclaratorInitializer :: (Maybe VariableInitializer)}
  deriving (Eq, Ord, Read, Show)

_VariableDeclarator = (Core.Name "hydra/ext/java/syntax.VariableDeclarator")

_VariableDeclarator_id = (Core.Name "id")

_VariableDeclarator_initializer = (Core.Name "initializer")

data VariableDeclaratorId = 
  VariableDeclaratorId {
    variableDeclaratorIdIdentifier :: Identifier,
    variableDeclaratorIdDims :: (Maybe Dims)}
  deriving (Eq, Ord, Read, Show)

_VariableDeclaratorId = (Core.Name "hydra/ext/java/syntax.VariableDeclaratorId")

_VariableDeclaratorId_identifier = (Core.Name "identifier")

_VariableDeclaratorId_dims = (Core.Name "dims")

data VariableInitializer = 
  VariableInitializerExpression Expression |
  VariableInitializerArrayInitializer ArrayInitializer
  deriving (Eq, Ord, Read, Show)

_VariableInitializer = (Core.Name "hydra/ext/java/syntax.VariableInitializer")

_VariableInitializer_expression = (Core.Name "expression")

_VariableInitializer_arrayInitializer = (Core.Name "arrayInitializer")

-- | A Type which does not allow annotations
newtype UnannType = 
  UnannType {
    unUnannType :: Type}
  deriving (Eq, Ord, Read, Show)

_UnannType = (Core.Name "hydra/ext/java/syntax.UnannType")

-- | A ClassType which does not allow annotations
newtype UnannClassType = 
  UnannClassType {
    unUnannClassType :: ClassType}
  deriving (Eq, Ord, Read, Show)

_UnannClassType = (Core.Name "hydra/ext/java/syntax.UnannClassType")

data MethodDeclaration = 
  MethodDeclaration {
    -- | Note: simple methods cannot have annotations
    methodDeclarationAnnotations :: [Annotation],
    methodDeclarationModifiers :: [MethodModifier],
    methodDeclarationHeader :: MethodHeader,
    methodDeclarationBody :: MethodBody}
  deriving (Eq, Ord, Read, Show)

_MethodDeclaration = (Core.Name "hydra/ext/java/syntax.MethodDeclaration")

_MethodDeclaration_annotations = (Core.Name "annotations")

_MethodDeclaration_modifiers = (Core.Name "modifiers")

_MethodDeclaration_header = (Core.Name "header")

_MethodDeclaration_body = (Core.Name "body")

data MethodModifier = 
  MethodModifierAnnotation Annotation |
  MethodModifierPublic  |
  MethodModifierProtected  |
  MethodModifierPrivate  |
  MethodModifierAbstract  |
  MethodModifierStatic  |
  MethodModifierFinal  |
  MethodModifierSynchronized  |
  MethodModifierNative  |
  MethodModifierStrictfb 
  deriving (Eq, Ord, Read, Show)

_MethodModifier = (Core.Name "hydra/ext/java/syntax.MethodModifier")

_MethodModifier_annotation = (Core.Name "annotation")

_MethodModifier_public = (Core.Name "public")

_MethodModifier_protected = (Core.Name "protected")

_MethodModifier_private = (Core.Name "private")

_MethodModifier_abstract = (Core.Name "abstract")

_MethodModifier_static = (Core.Name "static")

_MethodModifier_final = (Core.Name "final")

_MethodModifier_synchronized = (Core.Name "synchronized")

_MethodModifier_native = (Core.Name "native")

_MethodModifier_strictfb = (Core.Name "strictfb")

data MethodHeader = 
  MethodHeader {
    methodHeaderParameters :: [TypeParameter],
    methodHeaderResult :: Result,
    methodHeaderDeclarator :: MethodDeclarator,
    methodHeaderThrows :: (Maybe Throws)}
  deriving (Eq, Ord, Read, Show)

_MethodHeader = (Core.Name "hydra/ext/java/syntax.MethodHeader")

_MethodHeader_parameters = (Core.Name "parameters")

_MethodHeader_result = (Core.Name "result")

_MethodHeader_declarator = (Core.Name "declarator")

_MethodHeader_throws = (Core.Name "throws")

data Result = 
  ResultType UnannType |
  ResultVoid 
  deriving (Eq, Ord, Read, Show)

_Result = (Core.Name "hydra/ext/java/syntax.Result")

_Result_type = (Core.Name "type")

_Result_void = (Core.Name "void")

data MethodDeclarator = 
  MethodDeclarator {
    methodDeclaratorIdentifier :: Identifier,
    methodDeclaratorReceiverParameter :: (Maybe ReceiverParameter),
    methodDeclaratorFormalParameters :: [FormalParameter]}
  deriving (Eq, Ord, Read, Show)

_MethodDeclarator = (Core.Name "hydra/ext/java/syntax.MethodDeclarator")

_MethodDeclarator_identifier = (Core.Name "identifier")

_MethodDeclarator_receiverParameter = (Core.Name "receiverParameter")

_MethodDeclarator_formalParameters = (Core.Name "formalParameters")

data ReceiverParameter = 
  ReceiverParameter {
    receiverParameterAnnotations :: [Annotation],
    receiverParameterUnannType :: UnannType,
    receiverParameterIdentifier :: (Maybe Identifier)}
  deriving (Eq, Ord, Read, Show)

_ReceiverParameter = (Core.Name "hydra/ext/java/syntax.ReceiverParameter")

_ReceiverParameter_annotations = (Core.Name "annotations")

_ReceiverParameter_unannType = (Core.Name "unannType")

_ReceiverParameter_identifier = (Core.Name "identifier")

data FormalParameter = 
  FormalParameterSimple FormalParameter_Simple |
  FormalParameterVariableArity VariableArityParameter
  deriving (Eq, Ord, Read, Show)

_FormalParameter = (Core.Name "hydra/ext/java/syntax.FormalParameter")

_FormalParameter_simple = (Core.Name "simple")

_FormalParameter_variableArity = (Core.Name "variableArity")

data FormalParameter_Simple = 
  FormalParameter_Simple {
    formalParameter_SimpleModifiers :: [VariableModifier],
    formalParameter_SimpleType :: UnannType,
    formalParameter_SimpleId :: VariableDeclaratorId}
  deriving (Eq, Ord, Read, Show)

_FormalParameter_Simple = (Core.Name "hydra/ext/java/syntax.FormalParameter.Simple")

_FormalParameter_Simple_modifiers = (Core.Name "modifiers")

_FormalParameter_Simple_type = (Core.Name "type")

_FormalParameter_Simple_id = (Core.Name "id")

data VariableArityParameter = 
  VariableArityParameter {
    variableArityParameterModifiers :: VariableModifier,
    variableArityParameterType :: UnannType,
    variableArityParameterAnnotations :: [Annotation],
    variableArityParameterIdentifier :: Identifier}
  deriving (Eq, Ord, Read, Show)

_VariableArityParameter = (Core.Name "hydra/ext/java/syntax.VariableArityParameter")

_VariableArityParameter_modifiers = (Core.Name "modifiers")

_VariableArityParameter_type = (Core.Name "type")

_VariableArityParameter_annotations = (Core.Name "annotations")

_VariableArityParameter_identifier = (Core.Name "identifier")

data VariableModifier = 
  VariableModifierAnnotation Annotation |
  VariableModifierFinal 
  deriving (Eq, Ord, Read, Show)

_VariableModifier = (Core.Name "hydra/ext/java/syntax.VariableModifier")

_VariableModifier_annotation = (Core.Name "annotation")

_VariableModifier_final = (Core.Name "final")

newtype Throws = 
  Throws {
    unThrows :: [ExceptionType]}
  deriving (Eq, Ord, Read, Show)

_Throws = (Core.Name "hydra/ext/java/syntax.Throws")

data ExceptionType = 
  ExceptionTypeClass ClassType |
  ExceptionTypeVariable TypeVariable
  deriving (Eq, Ord, Read, Show)

_ExceptionType = (Core.Name "hydra/ext/java/syntax.ExceptionType")

_ExceptionType_class = (Core.Name "class")

_ExceptionType_variable = (Core.Name "variable")

data MethodBody = 
  MethodBodyBlock Block |
  MethodBodyNone 
  deriving (Eq, Ord, Read, Show)

_MethodBody = (Core.Name "hydra/ext/java/syntax.MethodBody")

_MethodBody_block = (Core.Name "block")

_MethodBody_none = (Core.Name "none")

newtype InstanceInitializer = 
  InstanceInitializer {
    unInstanceInitializer :: Block}
  deriving (Eq, Ord, Read, Show)

_InstanceInitializer = (Core.Name "hydra/ext/java/syntax.InstanceInitializer")

newtype StaticInitializer = 
  StaticInitializer {
    unStaticInitializer :: Block}
  deriving (Eq, Ord, Read, Show)

_StaticInitializer = (Core.Name "hydra/ext/java/syntax.StaticInitializer")

data ConstructorDeclaration = 
  ConstructorDeclaration {
    constructorDeclarationModifiers :: [ConstructorModifier],
    constructorDeclarationConstructor :: ConstructorDeclarator,
    constructorDeclarationThrows :: (Maybe Throws),
    constructorDeclarationBody :: ConstructorBody}
  deriving (Eq, Ord, Read, Show)

_ConstructorDeclaration = (Core.Name "hydra/ext/java/syntax.ConstructorDeclaration")

_ConstructorDeclaration_modifiers = (Core.Name "modifiers")

_ConstructorDeclaration_constructor = (Core.Name "constructor")

_ConstructorDeclaration_throws = (Core.Name "throws")

_ConstructorDeclaration_body = (Core.Name "body")

data ConstructorModifier = 
  ConstructorModifierAnnotation Annotation |
  ConstructorModifierPublic  |
  ConstructorModifierProtected  |
  ConstructorModifierPrivate 
  deriving (Eq, Ord, Read, Show)

_ConstructorModifier = (Core.Name "hydra/ext/java/syntax.ConstructorModifier")

_ConstructorModifier_annotation = (Core.Name "annotation")

_ConstructorModifier_public = (Core.Name "public")

_ConstructorModifier_protected = (Core.Name "protected")

_ConstructorModifier_private = (Core.Name "private")

data ConstructorDeclarator = 
  ConstructorDeclarator {
    constructorDeclaratorParameters :: [TypeParameter],
    constructorDeclaratorName :: SimpleTypeName,
    constructorDeclaratorReceiverParameter :: (Maybe ReceiverParameter),
    constructorDeclaratorFormalParameters :: [FormalParameter]}
  deriving (Eq, Ord, Read, Show)

_ConstructorDeclarator = (Core.Name "hydra/ext/java/syntax.ConstructorDeclarator")

_ConstructorDeclarator_parameters = (Core.Name "parameters")

_ConstructorDeclarator_name = (Core.Name "name")

_ConstructorDeclarator_receiverParameter = (Core.Name "receiverParameter")

_ConstructorDeclarator_formalParameters = (Core.Name "formalParameters")

newtype SimpleTypeName = 
  SimpleTypeName {
    unSimpleTypeName :: TypeIdentifier}
  deriving (Eq, Ord, Read, Show)

_SimpleTypeName = (Core.Name "hydra/ext/java/syntax.SimpleTypeName")

data ConstructorBody = 
  ConstructorBody {
    constructorBodyInvocation :: (Maybe ExplicitConstructorInvocation),
    constructorBodyStatements :: [BlockStatement]}
  deriving (Eq, Ord, Read, Show)

_ConstructorBody = (Core.Name "hydra/ext/java/syntax.ConstructorBody")

_ConstructorBody_invocation = (Core.Name "invocation")

_ConstructorBody_statements = (Core.Name "statements")

data ExplicitConstructorInvocation = 
  ExplicitConstructorInvocation {
    explicitConstructorInvocationTypeArguments :: [TypeArgument],
    explicitConstructorInvocationArguments :: [Expression],
    explicitConstructorInvocationVariant :: ExplicitConstructorInvocation_Variant}
  deriving (Eq, Ord, Read, Show)

_ExplicitConstructorInvocation = (Core.Name "hydra/ext/java/syntax.ExplicitConstructorInvocation")

_ExplicitConstructorInvocation_typeArguments = (Core.Name "typeArguments")

_ExplicitConstructorInvocation_arguments = (Core.Name "arguments")

_ExplicitConstructorInvocation_variant = (Core.Name "variant")

data ExplicitConstructorInvocation_Variant = 
  ExplicitConstructorInvocation_VariantThis  |
  ExplicitConstructorInvocation_VariantSuper (Maybe ExpressionName) |
  ExplicitConstructorInvocation_VariantPrimary Primary
  deriving (Eq, Ord, Read, Show)

_ExplicitConstructorInvocation_Variant = (Core.Name "hydra/ext/java/syntax.ExplicitConstructorInvocation.Variant")

_ExplicitConstructorInvocation_Variant_this = (Core.Name "this")

_ExplicitConstructorInvocation_Variant_super = (Core.Name "super")

_ExplicitConstructorInvocation_Variant_primary = (Core.Name "primary")

data EnumDeclaration = 
  EnumDeclaration {
    enumDeclarationModifiers :: [ClassModifier],
    enumDeclarationIdentifier :: TypeIdentifier,
    enumDeclarationImplements :: [InterfaceType],
    enumDeclarationBody :: EnumBody}
  deriving (Eq, Ord, Read, Show)

_EnumDeclaration = (Core.Name "hydra/ext/java/syntax.EnumDeclaration")

_EnumDeclaration_modifiers = (Core.Name "modifiers")

_EnumDeclaration_identifier = (Core.Name "identifier")

_EnumDeclaration_implements = (Core.Name "implements")

_EnumDeclaration_body = (Core.Name "body")

newtype EnumBody = 
  EnumBody {
    unEnumBody :: [EnumBody_Element]}
  deriving (Eq, Ord, Read, Show)

_EnumBody = (Core.Name "hydra/ext/java/syntax.EnumBody")

data EnumBody_Element = 
  EnumBody_Element {
    enumBody_ElementConstants :: [EnumConstant],
    enumBody_ElementBodyDeclarations :: [ClassBodyDeclaration]}
  deriving (Eq, Ord, Read, Show)

_EnumBody_Element = (Core.Name "hydra/ext/java/syntax.EnumBody.Element")

_EnumBody_Element_constants = (Core.Name "constants")

_EnumBody_Element_bodyDeclarations = (Core.Name "bodyDeclarations")

data EnumConstant = 
  EnumConstant {
    enumConstantModifiers :: [EnumConstantModifier],
    enumConstantIdentifier :: Identifier,
    enumConstantArguments :: [[Expression]],
    enumConstantBody :: (Maybe ClassBody)}
  deriving (Eq, Ord, Read, Show)

_EnumConstant = (Core.Name "hydra/ext/java/syntax.EnumConstant")

_EnumConstant_modifiers = (Core.Name "modifiers")

_EnumConstant_identifier = (Core.Name "identifier")

_EnumConstant_arguments = (Core.Name "arguments")

_EnumConstant_body = (Core.Name "body")

newtype EnumConstantModifier = 
  EnumConstantModifier {
    unEnumConstantModifier :: Annotation}
  deriving (Eq, Ord, Read, Show)

_EnumConstantModifier = (Core.Name "hydra/ext/java/syntax.EnumConstantModifier")

data InterfaceDeclaration = 
  InterfaceDeclarationNormalInterface NormalInterfaceDeclaration |
  InterfaceDeclarationAnnotationType AnnotationTypeDeclaration
  deriving (Eq, Ord, Read, Show)

_InterfaceDeclaration = (Core.Name "hydra/ext/java/syntax.InterfaceDeclaration")

_InterfaceDeclaration_normalInterface = (Core.Name "normalInterface")

_InterfaceDeclaration_annotationType = (Core.Name "annotationType")

data NormalInterfaceDeclaration = 
  NormalInterfaceDeclaration {
    normalInterfaceDeclarationModifiers :: [InterfaceModifier],
    normalInterfaceDeclarationIdentifier :: TypeIdentifier,
    normalInterfaceDeclarationParameters :: [TypeParameter],
    normalInterfaceDeclarationExtends :: [InterfaceType],
    normalInterfaceDeclarationBody :: InterfaceBody}
  deriving (Eq, Ord, Read, Show)

_NormalInterfaceDeclaration = (Core.Name "hydra/ext/java/syntax.NormalInterfaceDeclaration")

_NormalInterfaceDeclaration_modifiers = (Core.Name "modifiers")

_NormalInterfaceDeclaration_identifier = (Core.Name "identifier")

_NormalInterfaceDeclaration_parameters = (Core.Name "parameters")

_NormalInterfaceDeclaration_extends = (Core.Name "extends")

_NormalInterfaceDeclaration_body = (Core.Name "body")

data InterfaceModifier = 
  InterfaceModifierAnnotation Annotation |
  InterfaceModifierPublic  |
  InterfaceModifierProtected  |
  InterfaceModifierPrivate  |
  InterfaceModifierAbstract  |
  InterfaceModifierStatic  |
  InterfaceModifierStrictfb 
  deriving (Eq, Ord, Read, Show)

_InterfaceModifier = (Core.Name "hydra/ext/java/syntax.InterfaceModifier")

_InterfaceModifier_annotation = (Core.Name "annotation")

_InterfaceModifier_public = (Core.Name "public")

_InterfaceModifier_protected = (Core.Name "protected")

_InterfaceModifier_private = (Core.Name "private")

_InterfaceModifier_abstract = (Core.Name "abstract")

_InterfaceModifier_static = (Core.Name "static")

_InterfaceModifier_strictfb = (Core.Name "strictfb")

newtype InterfaceBody = 
  InterfaceBody {
    unInterfaceBody :: [InterfaceMemberDeclaration]}
  deriving (Eq, Ord, Read, Show)

_InterfaceBody = (Core.Name "hydra/ext/java/syntax.InterfaceBody")

data InterfaceMemberDeclaration = 
  InterfaceMemberDeclarationConstant ConstantDeclaration |
  InterfaceMemberDeclarationInterfaceMethod InterfaceMethodDeclaration |
  InterfaceMemberDeclarationClass ClassDeclaration |
  InterfaceMemberDeclarationInterface InterfaceDeclaration
  deriving (Eq, Ord, Read, Show)

_InterfaceMemberDeclaration = (Core.Name "hydra/ext/java/syntax.InterfaceMemberDeclaration")

_InterfaceMemberDeclaration_constant = (Core.Name "constant")

_InterfaceMemberDeclaration_interfaceMethod = (Core.Name "interfaceMethod")

_InterfaceMemberDeclaration_class = (Core.Name "class")

_InterfaceMemberDeclaration_interface = (Core.Name "interface")

data ConstantDeclaration = 
  ConstantDeclaration {
    constantDeclarationModifiers :: [ConstantModifier],
    constantDeclarationType :: UnannType,
    constantDeclarationVariables :: [VariableDeclarator]}
  deriving (Eq, Ord, Read, Show)

_ConstantDeclaration = (Core.Name "hydra/ext/java/syntax.ConstantDeclaration")

_ConstantDeclaration_modifiers = (Core.Name "modifiers")

_ConstantDeclaration_type = (Core.Name "type")

_ConstantDeclaration_variables = (Core.Name "variables")

data ConstantModifier = 
  ConstantModifierAnnotation Annotation |
  ConstantModifierPublic  |
  ConstantModifierStatic  |
  ConstantModifierFinal 
  deriving (Eq, Ord, Read, Show)

_ConstantModifier = (Core.Name "hydra/ext/java/syntax.ConstantModifier")

_ConstantModifier_annotation = (Core.Name "annotation")

_ConstantModifier_public = (Core.Name "public")

_ConstantModifier_static = (Core.Name "static")

_ConstantModifier_final = (Core.Name "final")

data InterfaceMethodDeclaration = 
  InterfaceMethodDeclaration {
    interfaceMethodDeclarationModifiers :: [InterfaceMethodModifier],
    interfaceMethodDeclarationHeader :: MethodHeader,
    interfaceMethodDeclarationBody :: MethodBody}
  deriving (Eq, Ord, Read, Show)

_InterfaceMethodDeclaration = (Core.Name "hydra/ext/java/syntax.InterfaceMethodDeclaration")

_InterfaceMethodDeclaration_modifiers = (Core.Name "modifiers")

_InterfaceMethodDeclaration_header = (Core.Name "header")

_InterfaceMethodDeclaration_body = (Core.Name "body")

data InterfaceMethodModifier = 
  InterfaceMethodModifierAnnotation Annotation |
  InterfaceMethodModifierPublic  |
  InterfaceMethodModifierPrivate  |
  InterfaceMethodModifierAbstract  |
  InterfaceMethodModifierDefault  |
  InterfaceMethodModifierStatic  |
  InterfaceMethodModifierStrictfp 
  deriving (Eq, Ord, Read, Show)

_InterfaceMethodModifier = (Core.Name "hydra/ext/java/syntax.InterfaceMethodModifier")

_InterfaceMethodModifier_annotation = (Core.Name "annotation")

_InterfaceMethodModifier_public = (Core.Name "public")

_InterfaceMethodModifier_private = (Core.Name "private")

_InterfaceMethodModifier_abstract = (Core.Name "abstract")

_InterfaceMethodModifier_default = (Core.Name "default")

_InterfaceMethodModifier_static = (Core.Name "static")

_InterfaceMethodModifier_strictfp = (Core.Name "strictfp")

data AnnotationTypeDeclaration = 
  AnnotationTypeDeclaration {
    annotationTypeDeclarationModifiers :: [InterfaceModifier],
    annotationTypeDeclarationIdentifier :: TypeIdentifier,
    annotationTypeDeclarationBody :: AnnotationTypeBody}
  deriving (Eq, Ord, Read, Show)

_AnnotationTypeDeclaration = (Core.Name "hydra/ext/java/syntax.AnnotationTypeDeclaration")

_AnnotationTypeDeclaration_modifiers = (Core.Name "modifiers")

_AnnotationTypeDeclaration_identifier = (Core.Name "identifier")

_AnnotationTypeDeclaration_body = (Core.Name "body")

newtype AnnotationTypeBody = 
  AnnotationTypeBody {
    unAnnotationTypeBody :: [[AnnotationTypeMemberDeclaration]]}
  deriving (Eq, Ord, Read, Show)

_AnnotationTypeBody = (Core.Name "hydra/ext/java/syntax.AnnotationTypeBody")

data AnnotationTypeMemberDeclaration = 
  AnnotationTypeMemberDeclarationAnnotationType AnnotationTypeElementDeclaration |
  AnnotationTypeMemberDeclarationConstant ConstantDeclaration |
  AnnotationTypeMemberDeclarationClass ClassDeclaration |
  AnnotationTypeMemberDeclarationInterface InterfaceDeclaration
  deriving (Eq, Ord, Read, Show)

_AnnotationTypeMemberDeclaration = (Core.Name "hydra/ext/java/syntax.AnnotationTypeMemberDeclaration")

_AnnotationTypeMemberDeclaration_annotationType = (Core.Name "annotationType")

_AnnotationTypeMemberDeclaration_constant = (Core.Name "constant")

_AnnotationTypeMemberDeclaration_class = (Core.Name "class")

_AnnotationTypeMemberDeclaration_interface = (Core.Name "interface")

data AnnotationTypeElementDeclaration = 
  AnnotationTypeElementDeclaration {
    annotationTypeElementDeclarationModifiers :: [AnnotationTypeElementModifier],
    annotationTypeElementDeclarationType :: UnannType,
    annotationTypeElementDeclarationIdentifier :: Identifier,
    annotationTypeElementDeclarationDims :: (Maybe Dims),
    annotationTypeElementDeclarationDefault :: (Maybe DefaultValue)}
  deriving (Eq, Ord, Read, Show)

_AnnotationTypeElementDeclaration = (Core.Name "hydra/ext/java/syntax.AnnotationTypeElementDeclaration")

_AnnotationTypeElementDeclaration_modifiers = (Core.Name "modifiers")

_AnnotationTypeElementDeclaration_type = (Core.Name "type")

_AnnotationTypeElementDeclaration_identifier = (Core.Name "identifier")

_AnnotationTypeElementDeclaration_dims = (Core.Name "dims")

_AnnotationTypeElementDeclaration_default = (Core.Name "default")

data AnnotationTypeElementModifier = 
  AnnotationTypeElementModifierPublic Annotation |
  AnnotationTypeElementModifierAbstract 
  deriving (Eq, Ord, Read, Show)

_AnnotationTypeElementModifier = (Core.Name "hydra/ext/java/syntax.AnnotationTypeElementModifier")

_AnnotationTypeElementModifier_public = (Core.Name "public")

_AnnotationTypeElementModifier_abstract = (Core.Name "abstract")

newtype DefaultValue = 
  DefaultValue {
    unDefaultValue :: ElementValue}
  deriving (Eq, Ord, Read, Show)

_DefaultValue = (Core.Name "hydra/ext/java/syntax.DefaultValue")

data Annotation = 
  AnnotationNormal NormalAnnotation |
  AnnotationMarker MarkerAnnotation |
  AnnotationSingleElement SingleElementAnnotation
  deriving (Eq, Ord, Read, Show)

_Annotation = (Core.Name "hydra/ext/java/syntax.Annotation")

_Annotation_normal = (Core.Name "normal")

_Annotation_marker = (Core.Name "marker")

_Annotation_singleElement = (Core.Name "singleElement")

data NormalAnnotation = 
  NormalAnnotation {
    normalAnnotationTypeName :: TypeName,
    normalAnnotationPairs :: [ElementValuePair]}
  deriving (Eq, Ord, Read, Show)

_NormalAnnotation = (Core.Name "hydra/ext/java/syntax.NormalAnnotation")

_NormalAnnotation_typeName = (Core.Name "typeName")

_NormalAnnotation_pairs = (Core.Name "pairs")

data ElementValuePair = 
  ElementValuePair {
    elementValuePairKey :: Identifier,
    elementValuePairValue :: ElementValue}
  deriving (Eq, Ord, Read, Show)

_ElementValuePair = (Core.Name "hydra/ext/java/syntax.ElementValuePair")

_ElementValuePair_key = (Core.Name "key")

_ElementValuePair_value = (Core.Name "value")

data ElementValue = 
  ElementValueConditionalExpression ConditionalExpression |
  ElementValueElementValueArrayInitializer ElementValueArrayInitializer |
  ElementValueAnnotation Annotation
  deriving (Eq, Ord, Read, Show)

_ElementValue = (Core.Name "hydra/ext/java/syntax.ElementValue")

_ElementValue_conditionalExpression = (Core.Name "conditionalExpression")

_ElementValue_elementValueArrayInitializer = (Core.Name "elementValueArrayInitializer")

_ElementValue_annotation = (Core.Name "annotation")

newtype ElementValueArrayInitializer = 
  ElementValueArrayInitializer {
    unElementValueArrayInitializer :: [ElementValue]}
  deriving (Eq, Ord, Read, Show)

_ElementValueArrayInitializer = (Core.Name "hydra/ext/java/syntax.ElementValueArrayInitializer")

newtype MarkerAnnotation = 
  MarkerAnnotation {
    unMarkerAnnotation :: TypeName}
  deriving (Eq, Ord, Read, Show)

_MarkerAnnotation = (Core.Name "hydra/ext/java/syntax.MarkerAnnotation")

data SingleElementAnnotation = 
  SingleElementAnnotation {
    singleElementAnnotationName :: TypeName,
    singleElementAnnotationValue :: (Maybe ElementValue)}
  deriving (Eq, Ord, Read, Show)

_SingleElementAnnotation = (Core.Name "hydra/ext/java/syntax.SingleElementAnnotation")

_SingleElementAnnotation_name = (Core.Name "name")

_SingleElementAnnotation_value = (Core.Name "value")

newtype ArrayInitializer = 
  ArrayInitializer {
    unArrayInitializer :: [[VariableInitializer]]}
  deriving (Eq, Ord, Read, Show)

_ArrayInitializer = (Core.Name "hydra/ext/java/syntax.ArrayInitializer")

newtype Block = 
  Block {
    unBlock :: [BlockStatement]}
  deriving (Eq, Ord, Read, Show)

_Block = (Core.Name "hydra/ext/java/syntax.Block")

data BlockStatement = 
  BlockStatementLocalVariableDeclaration LocalVariableDeclarationStatement |
  BlockStatementClass ClassDeclaration |
  BlockStatementStatement Statement
  deriving (Eq, Ord, Read, Show)

_BlockStatement = (Core.Name "hydra/ext/java/syntax.BlockStatement")

_BlockStatement_localVariableDeclaration = (Core.Name "localVariableDeclaration")

_BlockStatement_class = (Core.Name "class")

_BlockStatement_statement = (Core.Name "statement")

newtype LocalVariableDeclarationStatement = 
  LocalVariableDeclarationStatement {
    unLocalVariableDeclarationStatement :: LocalVariableDeclaration}
  deriving (Eq, Ord, Read, Show)

_LocalVariableDeclarationStatement = (Core.Name "hydra/ext/java/syntax.LocalVariableDeclarationStatement")

data LocalVariableDeclaration = 
  LocalVariableDeclaration {
    localVariableDeclarationModifiers :: [VariableModifier],
    localVariableDeclarationType :: LocalVariableType,
    localVariableDeclarationDeclarators :: [VariableDeclarator]}
  deriving (Eq, Ord, Read, Show)

_LocalVariableDeclaration = (Core.Name "hydra/ext/java/syntax.LocalVariableDeclaration")

_LocalVariableDeclaration_modifiers = (Core.Name "modifiers")

_LocalVariableDeclaration_type = (Core.Name "type")

_LocalVariableDeclaration_declarators = (Core.Name "declarators")

data LocalVariableType = 
  LocalVariableTypeType UnannType |
  LocalVariableTypeVar 
  deriving (Eq, Ord, Read, Show)

_LocalVariableType = (Core.Name "hydra/ext/java/syntax.LocalVariableType")

_LocalVariableType_type = (Core.Name "type")

_LocalVariableType_var = (Core.Name "var")

data Statement = 
  StatementWithoutTrailing StatementWithoutTrailingSubstatement |
  StatementLabeled LabeledStatement |
  StatementIfThen IfThenStatement |
  StatementIfThenElse IfThenElseStatement |
  StatementWhile WhileStatement |
  StatementFor ForStatement
  deriving (Eq, Ord, Read, Show)

_Statement = (Core.Name "hydra/ext/java/syntax.Statement")

_Statement_withoutTrailing = (Core.Name "withoutTrailing")

_Statement_labeled = (Core.Name "labeled")

_Statement_ifThen = (Core.Name "ifThen")

_Statement_ifThenElse = (Core.Name "ifThenElse")

_Statement_while = (Core.Name "while")

_Statement_for = (Core.Name "for")

data StatementNoShortIf = 
  StatementNoShortIfWithoutTrailing StatementWithoutTrailingSubstatement |
  StatementNoShortIfLabeled LabeledStatementNoShortIf |
  StatementNoShortIfIfThenElse IfThenElseStatementNoShortIf |
  StatementNoShortIfWhile WhileStatementNoShortIf |
  StatementNoShortIfFor ForStatementNoShortIf
  deriving (Eq, Ord, Read, Show)

_StatementNoShortIf = (Core.Name "hydra/ext/java/syntax.StatementNoShortIf")

_StatementNoShortIf_withoutTrailing = (Core.Name "withoutTrailing")

_StatementNoShortIf_labeled = (Core.Name "labeled")

_StatementNoShortIf_ifThenElse = (Core.Name "ifThenElse")

_StatementNoShortIf_while = (Core.Name "while")

_StatementNoShortIf_for = (Core.Name "for")

data StatementWithoutTrailingSubstatement = 
  StatementWithoutTrailingSubstatementBlock Block |
  StatementWithoutTrailingSubstatementEmpty EmptyStatement |
  StatementWithoutTrailingSubstatementExpression ExpressionStatement |
  StatementWithoutTrailingSubstatementAssert AssertStatement |
  StatementWithoutTrailingSubstatementSwitch SwitchStatement |
  StatementWithoutTrailingSubstatementDo DoStatement |
  StatementWithoutTrailingSubstatementBreak BreakStatement |
  StatementWithoutTrailingSubstatementContinue ContinueStatement |
  StatementWithoutTrailingSubstatementReturn ReturnStatement |
  StatementWithoutTrailingSubstatementSynchronized SynchronizedStatement |
  StatementWithoutTrailingSubstatementThrow ThrowStatement |
  StatementWithoutTrailingSubstatementTry TryStatement
  deriving (Eq, Ord, Read, Show)

_StatementWithoutTrailingSubstatement = (Core.Name "hydra/ext/java/syntax.StatementWithoutTrailingSubstatement")

_StatementWithoutTrailingSubstatement_block = (Core.Name "block")

_StatementWithoutTrailingSubstatement_empty = (Core.Name "empty")

_StatementWithoutTrailingSubstatement_expression = (Core.Name "expression")

_StatementWithoutTrailingSubstatement_assert = (Core.Name "assert")

_StatementWithoutTrailingSubstatement_switch = (Core.Name "switch")

_StatementWithoutTrailingSubstatement_do = (Core.Name "do")

_StatementWithoutTrailingSubstatement_break = (Core.Name "break")

_StatementWithoutTrailingSubstatement_continue = (Core.Name "continue")

_StatementWithoutTrailingSubstatement_return = (Core.Name "return")

_StatementWithoutTrailingSubstatement_synchronized = (Core.Name "synchronized")

_StatementWithoutTrailingSubstatement_throw = (Core.Name "throw")

_StatementWithoutTrailingSubstatement_try = (Core.Name "try")

data EmptyStatement = 
  EmptyStatement {}
  deriving (Eq, Ord, Read, Show)

_EmptyStatement = (Core.Name "hydra/ext/java/syntax.EmptyStatement")

data LabeledStatement = 
  LabeledStatement {
    labeledStatementIdentifier :: Identifier,
    labeledStatementStatement :: Statement}
  deriving (Eq, Ord, Read, Show)

_LabeledStatement = (Core.Name "hydra/ext/java/syntax.LabeledStatement")

_LabeledStatement_identifier = (Core.Name "identifier")

_LabeledStatement_statement = (Core.Name "statement")

data LabeledStatementNoShortIf = 
  LabeledStatementNoShortIf {
    labeledStatementNoShortIfIdentifier :: Identifier,
    labeledStatementNoShortIfStatement :: StatementNoShortIf}
  deriving (Eq, Ord, Read, Show)

_LabeledStatementNoShortIf = (Core.Name "hydra/ext/java/syntax.LabeledStatementNoShortIf")

_LabeledStatementNoShortIf_identifier = (Core.Name "identifier")

_LabeledStatementNoShortIf_statement = (Core.Name "statement")

newtype ExpressionStatement = 
  ExpressionStatement {
    unExpressionStatement :: StatementExpression}
  deriving (Eq, Ord, Read, Show)

_ExpressionStatement = (Core.Name "hydra/ext/java/syntax.ExpressionStatement")

data StatementExpression = 
  StatementExpressionAssignment Assignment |
  StatementExpressionPreIncrement PreIncrementExpression |
  StatementExpressionPreDecrement PreDecrementExpression |
  StatementExpressionPostIncrement PostIncrementExpression |
  StatementExpressionPostDecrement PostDecrementExpression |
  StatementExpressionMethodInvocation MethodInvocation |
  StatementExpressionClassInstanceCreation ClassInstanceCreationExpression
  deriving (Eq, Ord, Read, Show)

_StatementExpression = (Core.Name "hydra/ext/java/syntax.StatementExpression")

_StatementExpression_assignment = (Core.Name "assignment")

_StatementExpression_preIncrement = (Core.Name "preIncrement")

_StatementExpression_preDecrement = (Core.Name "preDecrement")

_StatementExpression_postIncrement = (Core.Name "postIncrement")

_StatementExpression_postDecrement = (Core.Name "postDecrement")

_StatementExpression_methodInvocation = (Core.Name "methodInvocation")

_StatementExpression_classInstanceCreation = (Core.Name "classInstanceCreation")

data IfThenStatement = 
  IfThenStatement {
    ifThenStatementExpression :: Expression,
    ifThenStatementStatement :: Statement}
  deriving (Eq, Ord, Read, Show)

_IfThenStatement = (Core.Name "hydra/ext/java/syntax.IfThenStatement")

_IfThenStatement_expression = (Core.Name "expression")

_IfThenStatement_statement = (Core.Name "statement")

data IfThenElseStatement = 
  IfThenElseStatement {
    ifThenElseStatementCond :: (Maybe Expression),
    ifThenElseStatementThen :: StatementNoShortIf,
    ifThenElseStatementElse :: Statement}
  deriving (Eq, Ord, Read, Show)

_IfThenElseStatement = (Core.Name "hydra/ext/java/syntax.IfThenElseStatement")

_IfThenElseStatement_cond = (Core.Name "cond")

_IfThenElseStatement_then = (Core.Name "then")

_IfThenElseStatement_else = (Core.Name "else")

data IfThenElseStatementNoShortIf = 
  IfThenElseStatementNoShortIf {
    ifThenElseStatementNoShortIfCond :: (Maybe Expression),
    ifThenElseStatementNoShortIfThen :: StatementNoShortIf,
    ifThenElseStatementNoShortIfElse :: StatementNoShortIf}
  deriving (Eq, Ord, Read, Show)

_IfThenElseStatementNoShortIf = (Core.Name "hydra/ext/java/syntax.IfThenElseStatementNoShortIf")

_IfThenElseStatementNoShortIf_cond = (Core.Name "cond")

_IfThenElseStatementNoShortIf_then = (Core.Name "then")

_IfThenElseStatementNoShortIf_else = (Core.Name "else")

data AssertStatement = 
  AssertStatementSingle Expression |
  AssertStatementPair AssertStatement_Pair
  deriving (Eq, Ord, Read, Show)

_AssertStatement = (Core.Name "hydra/ext/java/syntax.AssertStatement")

_AssertStatement_single = (Core.Name "single")

_AssertStatement_pair = (Core.Name "pair")

data AssertStatement_Pair = 
  AssertStatement_Pair {
    assertStatement_PairFirst :: Expression,
    assertStatement_PairSecond :: Expression}
  deriving (Eq, Ord, Read, Show)

_AssertStatement_Pair = (Core.Name "hydra/ext/java/syntax.AssertStatement.Pair")

_AssertStatement_Pair_first = (Core.Name "first")

_AssertStatement_Pair_second = (Core.Name "second")

data SwitchStatement = 
  SwitchStatement {
    switchStatementCond :: Expression,
    switchStatementBlock :: SwitchBlock}
  deriving (Eq, Ord, Read, Show)

_SwitchStatement = (Core.Name "hydra/ext/java/syntax.SwitchStatement")

_SwitchStatement_cond = (Core.Name "cond")

_SwitchStatement_block = (Core.Name "block")

newtype SwitchBlock = 
  SwitchBlock {
    unSwitchBlock :: [SwitchBlock_Pair]}
  deriving (Eq, Ord, Read, Show)

_SwitchBlock = (Core.Name "hydra/ext/java/syntax.SwitchBlock")

data SwitchBlock_Pair = 
  SwitchBlock_Pair {
    switchBlock_PairStatements :: [SwitchBlockStatementGroup],
    switchBlock_PairLabels :: [SwitchLabel]}
  deriving (Eq, Ord, Read, Show)

_SwitchBlock_Pair = (Core.Name "hydra/ext/java/syntax.SwitchBlock.Pair")

_SwitchBlock_Pair_statements = (Core.Name "statements")

_SwitchBlock_Pair_labels = (Core.Name "labels")

data SwitchBlockStatementGroup = 
  SwitchBlockStatementGroup {
    switchBlockStatementGroupLabels :: [SwitchLabel],
    switchBlockStatementGroupStatements :: [BlockStatement]}
  deriving (Eq, Ord, Read, Show)

_SwitchBlockStatementGroup = (Core.Name "hydra/ext/java/syntax.SwitchBlockStatementGroup")

_SwitchBlockStatementGroup_labels = (Core.Name "labels")

_SwitchBlockStatementGroup_statements = (Core.Name "statements")

data SwitchLabel = 
  SwitchLabelConstant ConstantExpression |
  SwitchLabelEnumConstant EnumConstantName |
  SwitchLabelDefault 
  deriving (Eq, Ord, Read, Show)

_SwitchLabel = (Core.Name "hydra/ext/java/syntax.SwitchLabel")

_SwitchLabel_constant = (Core.Name "constant")

_SwitchLabel_enumConstant = (Core.Name "enumConstant")

_SwitchLabel_default = (Core.Name "default")

newtype EnumConstantName = 
  EnumConstantName {
    unEnumConstantName :: Identifier}
  deriving (Eq, Ord, Read, Show)

_EnumConstantName = (Core.Name "hydra/ext/java/syntax.EnumConstantName")

data WhileStatement = 
  WhileStatement {
    whileStatementCond :: (Maybe Expression),
    whileStatementBody :: Statement}
  deriving (Eq, Ord, Read, Show)

_WhileStatement = (Core.Name "hydra/ext/java/syntax.WhileStatement")

_WhileStatement_cond = (Core.Name "cond")

_WhileStatement_body = (Core.Name "body")

data WhileStatementNoShortIf = 
  WhileStatementNoShortIf {
    whileStatementNoShortIfCond :: (Maybe Expression),
    whileStatementNoShortIfBody :: StatementNoShortIf}
  deriving (Eq, Ord, Read, Show)

_WhileStatementNoShortIf = (Core.Name "hydra/ext/java/syntax.WhileStatementNoShortIf")

_WhileStatementNoShortIf_cond = (Core.Name "cond")

_WhileStatementNoShortIf_body = (Core.Name "body")

data DoStatement = 
  DoStatement {
    doStatementBody :: Statement,
    doStatementConde :: (Maybe Expression)}
  deriving (Eq, Ord, Read, Show)

_DoStatement = (Core.Name "hydra/ext/java/syntax.DoStatement")

_DoStatement_body = (Core.Name "body")

_DoStatement_conde = (Core.Name "conde")

data ForStatement = 
  ForStatementBasic BasicForStatement |
  ForStatementEnhanced EnhancedForStatement
  deriving (Eq, Ord, Read, Show)

_ForStatement = (Core.Name "hydra/ext/java/syntax.ForStatement")

_ForStatement_basic = (Core.Name "basic")

_ForStatement_enhanced = (Core.Name "enhanced")

data ForStatementNoShortIf = 
  ForStatementNoShortIfBasic BasicForStatementNoShortIf |
  ForStatementNoShortIfEnhanced EnhancedForStatementNoShortIf
  deriving (Eq, Ord, Read, Show)

_ForStatementNoShortIf = (Core.Name "hydra/ext/java/syntax.ForStatementNoShortIf")

_ForStatementNoShortIf_basic = (Core.Name "basic")

_ForStatementNoShortIf_enhanced = (Core.Name "enhanced")

data BasicForStatement = 
  BasicForStatement {
    basicForStatementCond :: ForCond,
    basicForStatementBody :: Statement}
  deriving (Eq, Ord, Read, Show)

_BasicForStatement = (Core.Name "hydra/ext/java/syntax.BasicForStatement")

_BasicForStatement_cond = (Core.Name "cond")

_BasicForStatement_body = (Core.Name "body")

data ForCond = 
  ForCond {
    forCondInit :: (Maybe ForInit),
    forCondCond :: (Maybe Expression),
    forCondUpdate :: (Maybe ForUpdate)}
  deriving (Eq, Ord, Read, Show)

_ForCond = (Core.Name "hydra/ext/java/syntax.ForCond")

_ForCond_init = (Core.Name "init")

_ForCond_cond = (Core.Name "cond")

_ForCond_update = (Core.Name "update")

data BasicForStatementNoShortIf = 
  BasicForStatementNoShortIf {
    basicForStatementNoShortIfCond :: ForCond,
    basicForStatementNoShortIfBody :: StatementNoShortIf}
  deriving (Eq, Ord, Read, Show)

_BasicForStatementNoShortIf = (Core.Name "hydra/ext/java/syntax.BasicForStatementNoShortIf")

_BasicForStatementNoShortIf_cond = (Core.Name "cond")

_BasicForStatementNoShortIf_body = (Core.Name "body")

data ForInit = 
  ForInitStatements [StatementExpression] |
  ForInitLocalVariable LocalVariableDeclaration
  deriving (Eq, Ord, Read, Show)

_ForInit = (Core.Name "hydra/ext/java/syntax.ForInit")

_ForInit_statements = (Core.Name "statements")

_ForInit_localVariable = (Core.Name "localVariable")

newtype ForUpdate = 
  ForUpdate {
    unForUpdate :: [StatementExpression]}
  deriving (Eq, Ord, Read, Show)

_ForUpdate = (Core.Name "hydra/ext/java/syntax.ForUpdate")

data EnhancedForStatement = 
  EnhancedForStatement {
    enhancedForStatementCond :: EnhancedForCond,
    enhancedForStatementBody :: Statement}
  deriving (Eq, Ord, Read, Show)

_EnhancedForStatement = (Core.Name "hydra/ext/java/syntax.EnhancedForStatement")

_EnhancedForStatement_cond = (Core.Name "cond")

_EnhancedForStatement_body = (Core.Name "body")

data EnhancedForCond = 
  EnhancedForCond {
    enhancedForCondModifiers :: [VariableModifier],
    enhancedForCondType :: LocalVariableType,
    enhancedForCondId :: VariableDeclaratorId,
    enhancedForCondExpression :: Expression}
  deriving (Eq, Ord, Read, Show)

_EnhancedForCond = (Core.Name "hydra/ext/java/syntax.EnhancedForCond")

_EnhancedForCond_modifiers = (Core.Name "modifiers")

_EnhancedForCond_type = (Core.Name "type")

_EnhancedForCond_id = (Core.Name "id")

_EnhancedForCond_expression = (Core.Name "expression")

data EnhancedForStatementNoShortIf = 
  EnhancedForStatementNoShortIf {
    enhancedForStatementNoShortIfCond :: EnhancedForCond,
    enhancedForStatementNoShortIfBody :: StatementNoShortIf}
  deriving (Eq, Ord, Read, Show)

_EnhancedForStatementNoShortIf = (Core.Name "hydra/ext/java/syntax.EnhancedForStatementNoShortIf")

_EnhancedForStatementNoShortIf_cond = (Core.Name "cond")

_EnhancedForStatementNoShortIf_body = (Core.Name "body")

newtype BreakStatement = 
  BreakStatement {
    unBreakStatement :: (Maybe Identifier)}
  deriving (Eq, Ord, Read, Show)

_BreakStatement = (Core.Name "hydra/ext/java/syntax.BreakStatement")

newtype ContinueStatement = 
  ContinueStatement {
    unContinueStatement :: (Maybe Identifier)}
  deriving (Eq, Ord, Read, Show)

_ContinueStatement = (Core.Name "hydra/ext/java/syntax.ContinueStatement")

newtype ReturnStatement = 
  ReturnStatement {
    unReturnStatement :: (Maybe Expression)}
  deriving (Eq, Ord, Read, Show)

_ReturnStatement = (Core.Name "hydra/ext/java/syntax.ReturnStatement")

newtype ThrowStatement = 
  ThrowStatement {
    unThrowStatement :: Expression}
  deriving (Eq, Ord, Read, Show)

_ThrowStatement = (Core.Name "hydra/ext/java/syntax.ThrowStatement")

data SynchronizedStatement = 
  SynchronizedStatement {
    synchronizedStatementExpression :: Expression,
    synchronizedStatementBlock :: Block}
  deriving (Eq, Ord, Read, Show)

_SynchronizedStatement = (Core.Name "hydra/ext/java/syntax.SynchronizedStatement")

_SynchronizedStatement_expression = (Core.Name "expression")

_SynchronizedStatement_block = (Core.Name "block")

data TryStatement = 
  TryStatementSimple TryStatement_Simple |
  TryStatementWithFinally TryStatement_WithFinally |
  TryStatementWithResources TryWithResourcesStatement
  deriving (Eq, Ord, Read, Show)

_TryStatement = (Core.Name "hydra/ext/java/syntax.TryStatement")

_TryStatement_simple = (Core.Name "simple")

_TryStatement_withFinally = (Core.Name "withFinally")

_TryStatement_withResources = (Core.Name "withResources")

data TryStatement_Simple = 
  TryStatement_Simple {
    tryStatement_SimpleBlock :: Block,
    tryStatement_SimpleCatches :: Catches}
  deriving (Eq, Ord, Read, Show)

_TryStatement_Simple = (Core.Name "hydra/ext/java/syntax.TryStatement.Simple")

_TryStatement_Simple_block = (Core.Name "block")

_TryStatement_Simple_catches = (Core.Name "catches")

data TryStatement_WithFinally = 
  TryStatement_WithFinally {
    tryStatement_WithFinallyBlock :: Block,
    tryStatement_WithFinallyCatches :: (Maybe Catches),
    tryStatement_WithFinallyFinally :: Finally}
  deriving (Eq, Ord, Read, Show)

_TryStatement_WithFinally = (Core.Name "hydra/ext/java/syntax.TryStatement.WithFinally")

_TryStatement_WithFinally_block = (Core.Name "block")

_TryStatement_WithFinally_catches = (Core.Name "catches")

_TryStatement_WithFinally_finally = (Core.Name "finally")

newtype Catches = 
  Catches {
    unCatches :: [CatchClause]}
  deriving (Eq, Ord, Read, Show)

_Catches = (Core.Name "hydra/ext/java/syntax.Catches")

data CatchClause = 
  CatchClause {
    catchClauseParameter :: (Maybe CatchFormalParameter),
    catchClauseBlock :: Block}
  deriving (Eq, Ord, Read, Show)

_CatchClause = (Core.Name "hydra/ext/java/syntax.CatchClause")

_CatchClause_parameter = (Core.Name "parameter")

_CatchClause_block = (Core.Name "block")

data CatchFormalParameter = 
  CatchFormalParameter {
    catchFormalParameterModifiers :: [VariableModifier],
    catchFormalParameterType :: CatchType,
    catchFormalParameterId :: VariableDeclaratorId}
  deriving (Eq, Ord, Read, Show)

_CatchFormalParameter = (Core.Name "hydra/ext/java/syntax.CatchFormalParameter")

_CatchFormalParameter_modifiers = (Core.Name "modifiers")

_CatchFormalParameter_type = (Core.Name "type")

_CatchFormalParameter_id = (Core.Name "id")

data CatchType = 
  CatchType {
    catchTypeType :: UnannClassType,
    catchTypeTypes :: [ClassType]}
  deriving (Eq, Ord, Read, Show)

_CatchType = (Core.Name "hydra/ext/java/syntax.CatchType")

_CatchType_type = (Core.Name "type")

_CatchType_types = (Core.Name "types")

newtype Finally = 
  Finally {
    unFinally :: Block}
  deriving (Eq, Ord, Read, Show)

_Finally = (Core.Name "hydra/ext/java/syntax.Finally")

data TryWithResourcesStatement = 
  TryWithResourcesStatement {
    tryWithResourcesStatementResourceSpecification :: ResourceSpecification,
    tryWithResourcesStatementBlock :: Block,
    tryWithResourcesStatementCatches :: (Maybe Catches),
    tryWithResourcesStatementFinally :: (Maybe Finally)}
  deriving (Eq, Ord, Read, Show)

_TryWithResourcesStatement = (Core.Name "hydra/ext/java/syntax.TryWithResourcesStatement")

_TryWithResourcesStatement_resourceSpecification = (Core.Name "resourceSpecification")

_TryWithResourcesStatement_block = (Core.Name "block")

_TryWithResourcesStatement_catches = (Core.Name "catches")

_TryWithResourcesStatement_finally = (Core.Name "finally")

newtype ResourceSpecification = 
  ResourceSpecification {
    unResourceSpecification :: [Resource]}
  deriving (Eq, Ord, Read, Show)

_ResourceSpecification = (Core.Name "hydra/ext/java/syntax.ResourceSpecification")

data Resource = 
  ResourceLocal Resource_Local |
  ResourceVariable VariableAccess
  deriving (Eq, Ord, Read, Show)

_Resource = (Core.Name "hydra/ext/java/syntax.Resource")

_Resource_local = (Core.Name "local")

_Resource_variable = (Core.Name "variable")

data Resource_Local = 
  Resource_Local {
    resource_LocalModifiers :: [VariableModifier],
    resource_LocalType :: LocalVariableType,
    resource_LocalIdentifier :: Identifier,
    resource_LocalExpression :: Expression}
  deriving (Eq, Ord, Read, Show)

_Resource_Local = (Core.Name "hydra/ext/java/syntax.Resource.Local")

_Resource_Local_modifiers = (Core.Name "modifiers")

_Resource_Local_type = (Core.Name "type")

_Resource_Local_identifier = (Core.Name "identifier")

_Resource_Local_expression = (Core.Name "expression")

data VariableAccess = 
  VariableAccessExpressionName ExpressionName |
  VariableAccessFieldAccess FieldAccess
  deriving (Eq, Ord, Read, Show)

_VariableAccess = (Core.Name "hydra/ext/java/syntax.VariableAccess")

_VariableAccess_expressionName = (Core.Name "expressionName")

_VariableAccess_fieldAccess = (Core.Name "fieldAccess")

data Primary = 
  PrimaryNoNewArray PrimaryNoNewArray |
  PrimaryArrayCreation ArrayCreationExpression
  deriving (Eq, Ord, Read, Show)

_Primary = (Core.Name "hydra/ext/java/syntax.Primary")

_Primary_noNewArray = (Core.Name "noNewArray")

_Primary_arrayCreation = (Core.Name "arrayCreation")

data PrimaryNoNewArray = 
  PrimaryNoNewArrayLiteral Literal |
  PrimaryNoNewArrayClassLiteral ClassLiteral |
  PrimaryNoNewArrayThis  |
  PrimaryNoNewArrayDotThis TypeName |
  PrimaryNoNewArrayParens Expression |
  PrimaryNoNewArrayClassInstance ClassInstanceCreationExpression |
  PrimaryNoNewArrayFieldAccess FieldAccess |
  PrimaryNoNewArrayArrayAccess ArrayAccess |
  PrimaryNoNewArrayMethodInvocation MethodInvocation |
  PrimaryNoNewArrayMethodReference MethodReference
  deriving (Eq, Ord, Read, Show)

_PrimaryNoNewArray = (Core.Name "hydra/ext/java/syntax.PrimaryNoNewArray")

_PrimaryNoNewArray_literal = (Core.Name "literal")

_PrimaryNoNewArray_classLiteral = (Core.Name "classLiteral")

_PrimaryNoNewArray_this = (Core.Name "this")

_PrimaryNoNewArray_dotThis = (Core.Name "dotThis")

_PrimaryNoNewArray_parens = (Core.Name "parens")

_PrimaryNoNewArray_classInstance = (Core.Name "classInstance")

_PrimaryNoNewArray_fieldAccess = (Core.Name "fieldAccess")

_PrimaryNoNewArray_arrayAccess = (Core.Name "arrayAccess")

_PrimaryNoNewArray_methodInvocation = (Core.Name "methodInvocation")

_PrimaryNoNewArray_methodReference = (Core.Name "methodReference")

data ClassLiteral = 
  ClassLiteralType TypeNameArray |
  ClassLiteralNumericType NumericTypeArray |
  ClassLiteralBoolean BooleanArray |
  ClassLiteralVoid 
  deriving (Eq, Ord, Read, Show)

_ClassLiteral = (Core.Name "hydra/ext/java/syntax.ClassLiteral")

_ClassLiteral_type = (Core.Name "type")

_ClassLiteral_numericType = (Core.Name "numericType")

_ClassLiteral_boolean = (Core.Name "boolean")

_ClassLiteral_void = (Core.Name "void")

data TypeNameArray = 
  TypeNameArraySimple TypeName |
  TypeNameArrayArray TypeNameArray
  deriving (Eq, Ord, Read, Show)

_TypeNameArray = (Core.Name "hydra/ext/java/syntax.TypeNameArray")

_TypeNameArray_simple = (Core.Name "simple")

_TypeNameArray_array = (Core.Name "array")

data NumericTypeArray = 
  NumericTypeArraySimple NumericType |
  NumericTypeArrayArray NumericTypeArray
  deriving (Eq, Ord, Read, Show)

_NumericTypeArray = (Core.Name "hydra/ext/java/syntax.NumericTypeArray")

_NumericTypeArray_simple = (Core.Name "simple")

_NumericTypeArray_array = (Core.Name "array")

data BooleanArray = 
  BooleanArraySimple  |
  BooleanArrayArray BooleanArray
  deriving (Eq, Ord, Read, Show)

_BooleanArray = (Core.Name "hydra/ext/java/syntax.BooleanArray")

_BooleanArray_simple = (Core.Name "simple")

_BooleanArray_array = (Core.Name "array")

data ClassInstanceCreationExpression = 
  ClassInstanceCreationExpression {
    classInstanceCreationExpressionQualifier :: (Maybe ClassInstanceCreationExpression_Qualifier),
    classInstanceCreationExpressionExpression :: UnqualifiedClassInstanceCreationExpression}
  deriving (Eq, Ord, Read, Show)

_ClassInstanceCreationExpression = (Core.Name "hydra/ext/java/syntax.ClassInstanceCreationExpression")

_ClassInstanceCreationExpression_qualifier = (Core.Name "qualifier")

_ClassInstanceCreationExpression_expression = (Core.Name "expression")

data ClassInstanceCreationExpression_Qualifier = 
  ClassInstanceCreationExpression_QualifierExpression ExpressionName |
  ClassInstanceCreationExpression_QualifierPrimary Primary
  deriving (Eq, Ord, Read, Show)

_ClassInstanceCreationExpression_Qualifier = (Core.Name "hydra/ext/java/syntax.ClassInstanceCreationExpression.Qualifier")

_ClassInstanceCreationExpression_Qualifier_expression = (Core.Name "expression")

_ClassInstanceCreationExpression_Qualifier_primary = (Core.Name "primary")

data UnqualifiedClassInstanceCreationExpression = 
  UnqualifiedClassInstanceCreationExpression {
    unqualifiedClassInstanceCreationExpressionTypeArguments :: [TypeArgument],
    unqualifiedClassInstanceCreationExpressionClassOrInterface :: ClassOrInterfaceTypeToInstantiate,
    unqualifiedClassInstanceCreationExpressionArguments :: [Expression],
    unqualifiedClassInstanceCreationExpressionBody :: (Maybe ClassBody)}
  deriving (Eq, Ord, Read, Show)

_UnqualifiedClassInstanceCreationExpression = (Core.Name "hydra/ext/java/syntax.UnqualifiedClassInstanceCreationExpression")

_UnqualifiedClassInstanceCreationExpression_typeArguments = (Core.Name "typeArguments")

_UnqualifiedClassInstanceCreationExpression_classOrInterface = (Core.Name "classOrInterface")

_UnqualifiedClassInstanceCreationExpression_arguments = (Core.Name "arguments")

_UnqualifiedClassInstanceCreationExpression_body = (Core.Name "body")

data ClassOrInterfaceTypeToInstantiate = 
  ClassOrInterfaceTypeToInstantiate {
    classOrInterfaceTypeToInstantiateIdentifiers :: [AnnotatedIdentifier],
    classOrInterfaceTypeToInstantiateTypeArguments :: (Maybe TypeArgumentsOrDiamond)}
  deriving (Eq, Ord, Read, Show)

_ClassOrInterfaceTypeToInstantiate = (Core.Name "hydra/ext/java/syntax.ClassOrInterfaceTypeToInstantiate")

_ClassOrInterfaceTypeToInstantiate_identifiers = (Core.Name "identifiers")

_ClassOrInterfaceTypeToInstantiate_typeArguments = (Core.Name "typeArguments")

data AnnotatedIdentifier = 
  AnnotatedIdentifier {
    annotatedIdentifierAnnotations :: [Annotation],
    annotatedIdentifierIdentifier :: Identifier}
  deriving (Eq, Ord, Read, Show)

_AnnotatedIdentifier = (Core.Name "hydra/ext/java/syntax.AnnotatedIdentifier")

_AnnotatedIdentifier_annotations = (Core.Name "annotations")

_AnnotatedIdentifier_identifier = (Core.Name "identifier")

data TypeArgumentsOrDiamond = 
  TypeArgumentsOrDiamondArguments [TypeArgument] |
  TypeArgumentsOrDiamondDiamond 
  deriving (Eq, Ord, Read, Show)

_TypeArgumentsOrDiamond = (Core.Name "hydra/ext/java/syntax.TypeArgumentsOrDiamond")

_TypeArgumentsOrDiamond_arguments = (Core.Name "arguments")

_TypeArgumentsOrDiamond_diamond = (Core.Name "diamond")

data FieldAccess = 
  FieldAccess {
    fieldAccessQualifier :: FieldAccess_Qualifier,
    fieldAccessIdentifier :: Identifier}
  deriving (Eq, Ord, Read, Show)

_FieldAccess = (Core.Name "hydra/ext/java/syntax.FieldAccess")

_FieldAccess_qualifier = (Core.Name "qualifier")

_FieldAccess_identifier = (Core.Name "identifier")

data FieldAccess_Qualifier = 
  FieldAccess_QualifierPrimary Primary |
  FieldAccess_QualifierSuper  |
  FieldAccess_QualifierTyped TypeName
  deriving (Eq, Ord, Read, Show)

_FieldAccess_Qualifier = (Core.Name "hydra/ext/java/syntax.FieldAccess.Qualifier")

_FieldAccess_Qualifier_primary = (Core.Name "primary")

_FieldAccess_Qualifier_super = (Core.Name "super")

_FieldAccess_Qualifier_typed = (Core.Name "typed")

data ArrayAccess = 
  ArrayAccess {
    arrayAccessExpression :: (Maybe Expression),
    arrayAccessVariant :: ArrayAccess_Variant}
  deriving (Eq, Ord, Read, Show)

_ArrayAccess = (Core.Name "hydra/ext/java/syntax.ArrayAccess")

_ArrayAccess_expression = (Core.Name "expression")

_ArrayAccess_variant = (Core.Name "variant")

data ArrayAccess_Variant = 
  ArrayAccess_VariantName ExpressionName |
  ArrayAccess_VariantPrimary PrimaryNoNewArray
  deriving (Eq, Ord, Read, Show)

_ArrayAccess_Variant = (Core.Name "hydra/ext/java/syntax.ArrayAccess.Variant")

_ArrayAccess_Variant_name = (Core.Name "name")

_ArrayAccess_Variant_primary = (Core.Name "primary")

data MethodInvocation = 
  MethodInvocation {
    methodInvocationHeader :: MethodInvocation_Header,
    methodInvocationArguments :: [Expression]}
  deriving (Eq, Ord, Read, Show)

_MethodInvocation = (Core.Name "hydra/ext/java/syntax.MethodInvocation")

_MethodInvocation_header = (Core.Name "header")

_MethodInvocation_arguments = (Core.Name "arguments")

data MethodInvocation_Header = 
  MethodInvocation_HeaderSimple MethodName |
  MethodInvocation_HeaderComplex MethodInvocation_Complex
  deriving (Eq, Ord, Read, Show)

_MethodInvocation_Header = (Core.Name "hydra/ext/java/syntax.MethodInvocation.Header")

_MethodInvocation_Header_simple = (Core.Name "simple")

_MethodInvocation_Header_complex = (Core.Name "complex")

data MethodInvocation_Complex = 
  MethodInvocation_Complex {
    methodInvocation_ComplexVariant :: MethodInvocation_Variant,
    methodInvocation_ComplexTypeArguments :: [TypeArgument],
    methodInvocation_ComplexIdentifier :: Identifier}
  deriving (Eq, Ord, Read, Show)

_MethodInvocation_Complex = (Core.Name "hydra/ext/java/syntax.MethodInvocation.Complex")

_MethodInvocation_Complex_variant = (Core.Name "variant")

_MethodInvocation_Complex_typeArguments = (Core.Name "typeArguments")

_MethodInvocation_Complex_identifier = (Core.Name "identifier")

data MethodInvocation_Variant = 
  MethodInvocation_VariantType TypeName |
  MethodInvocation_VariantExpression ExpressionName |
  MethodInvocation_VariantPrimary Primary |
  MethodInvocation_VariantSuper  |
  MethodInvocation_VariantTypeSuper TypeName
  deriving (Eq, Ord, Read, Show)

_MethodInvocation_Variant = (Core.Name "hydra/ext/java/syntax.MethodInvocation.Variant")

_MethodInvocation_Variant_type = (Core.Name "type")

_MethodInvocation_Variant_expression = (Core.Name "expression")

_MethodInvocation_Variant_primary = (Core.Name "primary")

_MethodInvocation_Variant_super = (Core.Name "super")

_MethodInvocation_Variant_typeSuper = (Core.Name "typeSuper")

data MethodReference = 
  MethodReferenceExpression MethodReference_Expression |
  MethodReferencePrimary MethodReference_Primary |
  MethodReferenceReferenceType MethodReference_ReferenceType |
  MethodReferenceSuper MethodReference_Super |
  MethodReferenceNew MethodReference_New |
  MethodReferenceArray MethodReference_Array
  deriving (Eq, Ord, Read, Show)

_MethodReference = (Core.Name "hydra/ext/java/syntax.MethodReference")

_MethodReference_expression = (Core.Name "expression")

_MethodReference_primary = (Core.Name "primary")

_MethodReference_referenceType = (Core.Name "referenceType")

_MethodReference_super = (Core.Name "super")

_MethodReference_new = (Core.Name "new")

_MethodReference_array = (Core.Name "array")

data MethodReference_Expression = 
  MethodReference_Expression {
    methodReference_ExpressionName :: ExpressionName,
    methodReference_ExpressionTypeArguments :: [TypeArgument],
    methodReference_ExpressionIdentifier :: Identifier}
  deriving (Eq, Ord, Read, Show)

_MethodReference_Expression = (Core.Name "hydra/ext/java/syntax.MethodReference.Expression")

_MethodReference_Expression_name = (Core.Name "name")

_MethodReference_Expression_typeArguments = (Core.Name "typeArguments")

_MethodReference_Expression_identifier = (Core.Name "identifier")

data MethodReference_Primary = 
  MethodReference_Primary {
    methodReference_PrimaryPrimary :: Primary,
    methodReference_PrimaryTypeArguments :: [TypeArgument],
    methodReference_PrimaryIdentifier :: Identifier}
  deriving (Eq, Ord, Read, Show)

_MethodReference_Primary = (Core.Name "hydra/ext/java/syntax.MethodReference.Primary")

_MethodReference_Primary_primary = (Core.Name "primary")

_MethodReference_Primary_typeArguments = (Core.Name "typeArguments")

_MethodReference_Primary_identifier = (Core.Name "identifier")

data MethodReference_ReferenceType = 
  MethodReference_ReferenceType {
    methodReference_ReferenceTypeReferenceType :: ReferenceType,
    methodReference_ReferenceTypeTypeArguments :: [TypeArgument],
    methodReference_ReferenceTypeIdentifier :: Identifier}
  deriving (Eq, Ord, Read, Show)

_MethodReference_ReferenceType = (Core.Name "hydra/ext/java/syntax.MethodReference.ReferenceType")

_MethodReference_ReferenceType_referenceType = (Core.Name "referenceType")

_MethodReference_ReferenceType_typeArguments = (Core.Name "typeArguments")

_MethodReference_ReferenceType_identifier = (Core.Name "identifier")

data MethodReference_Super = 
  MethodReference_Super {
    methodReference_SuperTypeArguments :: [TypeArgument],
    methodReference_SuperIdentifier :: Identifier,
    methodReference_SuperSuper :: Bool}
  deriving (Eq, Ord, Read, Show)

_MethodReference_Super = (Core.Name "hydra/ext/java/syntax.MethodReference.Super")

_MethodReference_Super_typeArguments = (Core.Name "typeArguments")

_MethodReference_Super_identifier = (Core.Name "identifier")

_MethodReference_Super_super = (Core.Name "super")

data MethodReference_New = 
  MethodReference_New {
    methodReference_NewClassType :: ClassType,
    methodReference_NewTypeArguments :: [TypeArgument]}
  deriving (Eq, Ord, Read, Show)

_MethodReference_New = (Core.Name "hydra/ext/java/syntax.MethodReference.New")

_MethodReference_New_classType = (Core.Name "classType")

_MethodReference_New_typeArguments = (Core.Name "typeArguments")

newtype MethodReference_Array = 
  MethodReference_Array {
    unMethodReference_Array :: ArrayType}
  deriving (Eq, Ord, Read, Show)

_MethodReference_Array = (Core.Name "hydra/ext/java/syntax.MethodReference.Array")

data ArrayCreationExpression = 
  ArrayCreationExpressionPrimitive ArrayCreationExpression_Primitive |
  ArrayCreationExpressionClassOrInterface ArrayCreationExpression_ClassOrInterface |
  ArrayCreationExpressionPrimitiveArray ArrayCreationExpression_PrimitiveArray |
  ArrayCreationExpressionClassOrInterfaceArray ArrayCreationExpression_ClassOrInterfaceArray
  deriving (Eq, Ord, Read, Show)

_ArrayCreationExpression = (Core.Name "hydra/ext/java/syntax.ArrayCreationExpression")

_ArrayCreationExpression_primitive = (Core.Name "primitive")

_ArrayCreationExpression_classOrInterface = (Core.Name "classOrInterface")

_ArrayCreationExpression_primitiveArray = (Core.Name "primitiveArray")

_ArrayCreationExpression_classOrInterfaceArray = (Core.Name "classOrInterfaceArray")

data ArrayCreationExpression_Primitive = 
  ArrayCreationExpression_Primitive {
    arrayCreationExpression_PrimitiveType :: PrimitiveTypeWithAnnotations,
    arrayCreationExpression_PrimitiveDimExprs :: [DimExpr],
    arrayCreationExpression_PrimitiveDims :: (Maybe Dims)}
  deriving (Eq, Ord, Read, Show)

_ArrayCreationExpression_Primitive = (Core.Name "hydra/ext/java/syntax.ArrayCreationExpression.Primitive")

_ArrayCreationExpression_Primitive_type = (Core.Name "type")

_ArrayCreationExpression_Primitive_dimExprs = (Core.Name "dimExprs")

_ArrayCreationExpression_Primitive_dims = (Core.Name "dims")

data ArrayCreationExpression_ClassOrInterface = 
  ArrayCreationExpression_ClassOrInterface {
    arrayCreationExpression_ClassOrInterfaceType :: ClassOrInterfaceType,
    arrayCreationExpression_ClassOrInterfaceDimExprs :: [DimExpr],
    arrayCreationExpression_ClassOrInterfaceDims :: (Maybe Dims)}
  deriving (Eq, Ord, Read, Show)

_ArrayCreationExpression_ClassOrInterface = (Core.Name "hydra/ext/java/syntax.ArrayCreationExpression.ClassOrInterface")

_ArrayCreationExpression_ClassOrInterface_type = (Core.Name "type")

_ArrayCreationExpression_ClassOrInterface_dimExprs = (Core.Name "dimExprs")

_ArrayCreationExpression_ClassOrInterface_dims = (Core.Name "dims")

data ArrayCreationExpression_PrimitiveArray = 
  ArrayCreationExpression_PrimitiveArray {
    arrayCreationExpression_PrimitiveArrayType :: PrimitiveTypeWithAnnotations,
    arrayCreationExpression_PrimitiveArrayDims :: [Dims],
    arrayCreationExpression_PrimitiveArrayArray :: ArrayInitializer}
  deriving (Eq, Ord, Read, Show)

_ArrayCreationExpression_PrimitiveArray = (Core.Name "hydra/ext/java/syntax.ArrayCreationExpression.PrimitiveArray")

_ArrayCreationExpression_PrimitiveArray_type = (Core.Name "type")

_ArrayCreationExpression_PrimitiveArray_dims = (Core.Name "dims")

_ArrayCreationExpression_PrimitiveArray_array = (Core.Name "array")

data ArrayCreationExpression_ClassOrInterfaceArray = 
  ArrayCreationExpression_ClassOrInterfaceArray {
    arrayCreationExpression_ClassOrInterfaceArrayType :: ClassOrInterfaceType,
    arrayCreationExpression_ClassOrInterfaceArrayDims :: [Dims],
    arrayCreationExpression_ClassOrInterfaceArrayArray :: ArrayInitializer}
  deriving (Eq, Ord, Read, Show)

_ArrayCreationExpression_ClassOrInterfaceArray = (Core.Name "hydra/ext/java/syntax.ArrayCreationExpression.ClassOrInterfaceArray")

_ArrayCreationExpression_ClassOrInterfaceArray_type = (Core.Name "type")

_ArrayCreationExpression_ClassOrInterfaceArray_dims = (Core.Name "dims")

_ArrayCreationExpression_ClassOrInterfaceArray_array = (Core.Name "array")

data DimExpr = 
  DimExpr {
    dimExprAnnotations :: [Annotation],
    dimExprExpression :: (Maybe Expression)}
  deriving (Eq, Ord, Read, Show)

_DimExpr = (Core.Name "hydra/ext/java/syntax.DimExpr")

_DimExpr_annotations = (Core.Name "annotations")

_DimExpr_expression = (Core.Name "expression")

data Expression = 
  ExpressionLambda LambdaExpression |
  ExpressionAssignment AssignmentExpression
  deriving (Eq, Ord, Read, Show)

_Expression = (Core.Name "hydra/ext/java/syntax.Expression")

_Expression_lambda = (Core.Name "lambda")

_Expression_assignment = (Core.Name "assignment")

data LambdaExpression = 
  LambdaExpression {
    lambdaExpressionParameters :: LambdaParameters,
    lambdaExpressionBody :: LambdaBody}
  deriving (Eq, Ord, Read, Show)

_LambdaExpression = (Core.Name "hydra/ext/java/syntax.LambdaExpression")

_LambdaExpression_parameters = (Core.Name "parameters")

_LambdaExpression_body = (Core.Name "body")

data LambdaParameters = 
  LambdaParametersTuple [LambdaParameters] |
  LambdaParametersSingle Identifier
  deriving (Eq, Ord, Read, Show)

_LambdaParameters = (Core.Name "hydra/ext/java/syntax.LambdaParameters")

_LambdaParameters_tuple = (Core.Name "tuple")

_LambdaParameters_single = (Core.Name "single")

data LambdaParameter = 
  LambdaParameterNormal LambdaParameter_Normal |
  LambdaParameterVariableArity VariableArityParameter
  deriving (Eq, Ord, Read, Show)

_LambdaParameter = (Core.Name "hydra/ext/java/syntax.LambdaParameter")

_LambdaParameter_normal = (Core.Name "normal")

_LambdaParameter_variableArity = (Core.Name "variableArity")

data LambdaParameter_Normal = 
  LambdaParameter_Normal {
    lambdaParameter_NormalModifiers :: [VariableModifier],
    lambdaParameter_NormalType :: LambdaParameterType,
    lambdaParameter_NormalId :: VariableDeclaratorId}
  deriving (Eq, Ord, Read, Show)

_LambdaParameter_Normal = (Core.Name "hydra/ext/java/syntax.LambdaParameter.Normal")

_LambdaParameter_Normal_modifiers = (Core.Name "modifiers")

_LambdaParameter_Normal_type = (Core.Name "type")

_LambdaParameter_Normal_id = (Core.Name "id")

data LambdaParameterType = 
  LambdaParameterTypeType UnannType |
  LambdaParameterTypeVar 
  deriving (Eq, Ord, Read, Show)

_LambdaParameterType = (Core.Name "hydra/ext/java/syntax.LambdaParameterType")

_LambdaParameterType_type = (Core.Name "type")

_LambdaParameterType_var = (Core.Name "var")

data LambdaBody = 
  LambdaBodyExpression Expression |
  LambdaBodyBlock Block
  deriving (Eq, Ord, Read, Show)

_LambdaBody = (Core.Name "hydra/ext/java/syntax.LambdaBody")

_LambdaBody_expression = (Core.Name "expression")

_LambdaBody_block = (Core.Name "block")

data AssignmentExpression = 
  AssignmentExpressionConditional ConditionalExpression |
  AssignmentExpressionAssignment Assignment
  deriving (Eq, Ord, Read, Show)

_AssignmentExpression = (Core.Name "hydra/ext/java/syntax.AssignmentExpression")

_AssignmentExpression_conditional = (Core.Name "conditional")

_AssignmentExpression_assignment = (Core.Name "assignment")

data Assignment = 
  Assignment {
    assignmentLhs :: LeftHandSide,
    assignmentOp :: AssignmentOperator,
    assignmentExpression :: Expression}
  deriving (Eq, Ord, Read, Show)

_Assignment = (Core.Name "hydra/ext/java/syntax.Assignment")

_Assignment_lhs = (Core.Name "lhs")

_Assignment_op = (Core.Name "op")

_Assignment_expression = (Core.Name "expression")

data LeftHandSide = 
  LeftHandSideExpressionName ExpressionName |
  LeftHandSideFieldAccess FieldAccess |
  LeftHandSideArrayAccess ArrayAccess
  deriving (Eq, Ord, Read, Show)

_LeftHandSide = (Core.Name "hydra/ext/java/syntax.LeftHandSide")

_LeftHandSide_expressionName = (Core.Name "expressionName")

_LeftHandSide_fieldAccess = (Core.Name "fieldAccess")

_LeftHandSide_arrayAccess = (Core.Name "arrayAccess")

data AssignmentOperator = 
  AssignmentOperatorSimple  |
  AssignmentOperatorTimes  |
  AssignmentOperatorDiv  |
  AssignmentOperatorMod  |
  AssignmentOperatorPlus  |
  AssignmentOperatorMinus  |
  AssignmentOperatorShiftLeft  |
  AssignmentOperatorShiftRight  |
  AssignmentOperatorShiftRightZeroFill  |
  AssignmentOperatorAnd  |
  AssignmentOperatorXor  |
  AssignmentOperatorOr 
  deriving (Eq, Ord, Read, Show)

_AssignmentOperator = (Core.Name "hydra/ext/java/syntax.AssignmentOperator")

_AssignmentOperator_simple = (Core.Name "simple")

_AssignmentOperator_times = (Core.Name "times")

_AssignmentOperator_div = (Core.Name "div")

_AssignmentOperator_mod = (Core.Name "mod")

_AssignmentOperator_plus = (Core.Name "plus")

_AssignmentOperator_minus = (Core.Name "minus")

_AssignmentOperator_shiftLeft = (Core.Name "shiftLeft")

_AssignmentOperator_shiftRight = (Core.Name "shiftRight")

_AssignmentOperator_shiftRightZeroFill = (Core.Name "shiftRightZeroFill")

_AssignmentOperator_and = (Core.Name "and")

_AssignmentOperator_xor = (Core.Name "xor")

_AssignmentOperator_or = (Core.Name "or")

data ConditionalExpression = 
  ConditionalExpressionSimple ConditionalOrExpression |
  ConditionalExpressionTernaryCond ConditionalExpression_TernaryCond |
  ConditionalExpressionTernaryLambda ConditionalExpression_TernaryLambda
  deriving (Eq, Ord, Read, Show)

_ConditionalExpression = (Core.Name "hydra/ext/java/syntax.ConditionalExpression")

_ConditionalExpression_simple = (Core.Name "simple")

_ConditionalExpression_ternaryCond = (Core.Name "ternaryCond")

_ConditionalExpression_ternaryLambda = (Core.Name "ternaryLambda")

data ConditionalExpression_TernaryCond = 
  ConditionalExpression_TernaryCond {
    conditionalExpression_TernaryCondCond :: ConditionalOrExpression,
    conditionalExpression_TernaryCondIfTrue :: Expression,
    conditionalExpression_TernaryCondIfFalse :: ConditionalExpression}
  deriving (Eq, Ord, Read, Show)

_ConditionalExpression_TernaryCond = (Core.Name "hydra/ext/java/syntax.ConditionalExpression.TernaryCond")

_ConditionalExpression_TernaryCond_cond = (Core.Name "cond")

_ConditionalExpression_TernaryCond_ifTrue = (Core.Name "ifTrue")

_ConditionalExpression_TernaryCond_ifFalse = (Core.Name "ifFalse")

data ConditionalExpression_TernaryLambda = 
  ConditionalExpression_TernaryLambda {
    conditionalExpression_TernaryLambdaCond :: ConditionalOrExpression,
    conditionalExpression_TernaryLambdaIfTrue :: Expression,
    conditionalExpression_TernaryLambdaIfFalse :: LambdaExpression}
  deriving (Eq, Ord, Read, Show)

_ConditionalExpression_TernaryLambda = (Core.Name "hydra/ext/java/syntax.ConditionalExpression.TernaryLambda")

_ConditionalExpression_TernaryLambda_cond = (Core.Name "cond")

_ConditionalExpression_TernaryLambda_ifTrue = (Core.Name "ifTrue")

_ConditionalExpression_TernaryLambda_ifFalse = (Core.Name "ifFalse")

newtype ConditionalOrExpression = 
  ConditionalOrExpression {
    unConditionalOrExpression :: [ConditionalAndExpression]}
  deriving (Eq, Ord, Read, Show)

_ConditionalOrExpression = (Core.Name "hydra/ext/java/syntax.ConditionalOrExpression")

newtype ConditionalAndExpression = 
  ConditionalAndExpression {
    unConditionalAndExpression :: [InclusiveOrExpression]}
  deriving (Eq, Ord, Read, Show)

_ConditionalAndExpression = (Core.Name "hydra/ext/java/syntax.ConditionalAndExpression")

newtype InclusiveOrExpression = 
  InclusiveOrExpression {
    unInclusiveOrExpression :: [ExclusiveOrExpression]}
  deriving (Eq, Ord, Read, Show)

_InclusiveOrExpression = (Core.Name "hydra/ext/java/syntax.InclusiveOrExpression")

newtype ExclusiveOrExpression = 
  ExclusiveOrExpression {
    unExclusiveOrExpression :: [AndExpression]}
  deriving (Eq, Ord, Read, Show)

_ExclusiveOrExpression = (Core.Name "hydra/ext/java/syntax.ExclusiveOrExpression")

newtype AndExpression = 
  AndExpression {
    unAndExpression :: [EqualityExpression]}
  deriving (Eq, Ord, Read, Show)

_AndExpression = (Core.Name "hydra/ext/java/syntax.AndExpression")

data EqualityExpression = 
  EqualityExpressionUnary RelationalExpression |
  EqualityExpressionEqual EqualityExpression_Binary |
  EqualityExpressionNotEqual EqualityExpression_Binary
  deriving (Eq, Ord, Read, Show)

_EqualityExpression = (Core.Name "hydra/ext/java/syntax.EqualityExpression")

_EqualityExpression_unary = (Core.Name "unary")

_EqualityExpression_equal = (Core.Name "equal")

_EqualityExpression_notEqual = (Core.Name "notEqual")

data EqualityExpression_Binary = 
  EqualityExpression_Binary {
    equalityExpression_BinaryLhs :: EqualityExpression,
    equalityExpression_BinaryRhs :: RelationalExpression}
  deriving (Eq, Ord, Read, Show)

_EqualityExpression_Binary = (Core.Name "hydra/ext/java/syntax.EqualityExpression.Binary")

_EqualityExpression_Binary_lhs = (Core.Name "lhs")

_EqualityExpression_Binary_rhs = (Core.Name "rhs")

data RelationalExpression = 
  RelationalExpressionSimple ShiftExpression |
  RelationalExpressionLessThan RelationalExpression_LessThan |
  RelationalExpressionGreaterThan RelationalExpression_GreaterThan |
  RelationalExpressionLessThanEqual RelationalExpression_LessThanEqual |
  RelationalExpressionGreaterThanEqual RelationalExpression_GreaterThanEqual |
  RelationalExpressionInstanceof RelationalExpression_InstanceOf
  deriving (Eq, Ord, Read, Show)

_RelationalExpression = (Core.Name "hydra/ext/java/syntax.RelationalExpression")

_RelationalExpression_simple = (Core.Name "simple")

_RelationalExpression_lessThan = (Core.Name "lessThan")

_RelationalExpression_greaterThan = (Core.Name "greaterThan")

_RelationalExpression_lessThanEqual = (Core.Name "lessThanEqual")

_RelationalExpression_greaterThanEqual = (Core.Name "greaterThanEqual")

_RelationalExpression_instanceof = (Core.Name "instanceof")

data RelationalExpression_LessThan = 
  RelationalExpression_LessThan {
    relationalExpression_LessThanLhs :: RelationalExpression,
    relationalExpression_LessThanRhs :: ShiftExpression}
  deriving (Eq, Ord, Read, Show)

_RelationalExpression_LessThan = (Core.Name "hydra/ext/java/syntax.RelationalExpression.LessThan")

_RelationalExpression_LessThan_lhs = (Core.Name "lhs")

_RelationalExpression_LessThan_rhs = (Core.Name "rhs")

data RelationalExpression_GreaterThan = 
  RelationalExpression_GreaterThan {
    relationalExpression_GreaterThanLhs :: RelationalExpression,
    relationalExpression_GreaterThanRhs :: ShiftExpression}
  deriving (Eq, Ord, Read, Show)

_RelationalExpression_GreaterThan = (Core.Name "hydra/ext/java/syntax.RelationalExpression.GreaterThan")

_RelationalExpression_GreaterThan_lhs = (Core.Name "lhs")

_RelationalExpression_GreaterThan_rhs = (Core.Name "rhs")

data RelationalExpression_LessThanEqual = 
  RelationalExpression_LessThanEqual {
    relationalExpression_LessThanEqualLhs :: RelationalExpression,
    relationalExpression_LessThanEqualRhs :: ShiftExpression}
  deriving (Eq, Ord, Read, Show)

_RelationalExpression_LessThanEqual = (Core.Name "hydra/ext/java/syntax.RelationalExpression.LessThanEqual")

_RelationalExpression_LessThanEqual_lhs = (Core.Name "lhs")

_RelationalExpression_LessThanEqual_rhs = (Core.Name "rhs")

data RelationalExpression_GreaterThanEqual = 
  RelationalExpression_GreaterThanEqual {
    relationalExpression_GreaterThanEqualLhs :: RelationalExpression,
    relationalExpression_GreaterThanEqualRhs :: ShiftExpression}
  deriving (Eq, Ord, Read, Show)

_RelationalExpression_GreaterThanEqual = (Core.Name "hydra/ext/java/syntax.RelationalExpression.GreaterThanEqual")

_RelationalExpression_GreaterThanEqual_lhs = (Core.Name "lhs")

_RelationalExpression_GreaterThanEqual_rhs = (Core.Name "rhs")

data RelationalExpression_InstanceOf = 
  RelationalExpression_InstanceOf {
    relationalExpression_InstanceOfLhs :: RelationalExpression,
    relationalExpression_InstanceOfRhs :: ReferenceType}
  deriving (Eq, Ord, Read, Show)

_RelationalExpression_InstanceOf = (Core.Name "hydra/ext/java/syntax.RelationalExpression.InstanceOf")

_RelationalExpression_InstanceOf_lhs = (Core.Name "lhs")

_RelationalExpression_InstanceOf_rhs = (Core.Name "rhs")

data ShiftExpression = 
  ShiftExpressionUnary AdditiveExpression |
  ShiftExpressionShiftLeft ShiftExpression_Binary |
  ShiftExpressionShiftRight ShiftExpression_Binary |
  ShiftExpressionShiftRightZeroFill ShiftExpression_Binary
  deriving (Eq, Ord, Read, Show)

_ShiftExpression = (Core.Name "hydra/ext/java/syntax.ShiftExpression")

_ShiftExpression_unary = (Core.Name "unary")

_ShiftExpression_shiftLeft = (Core.Name "shiftLeft")

_ShiftExpression_shiftRight = (Core.Name "shiftRight")

_ShiftExpression_shiftRightZeroFill = (Core.Name "shiftRightZeroFill")

data ShiftExpression_Binary = 
  ShiftExpression_Binary {
    shiftExpression_BinaryLhs :: ShiftExpression,
    shiftExpression_BinaryRhs :: AdditiveExpression}
  deriving (Eq, Ord, Read, Show)

_ShiftExpression_Binary = (Core.Name "hydra/ext/java/syntax.ShiftExpression.Binary")

_ShiftExpression_Binary_lhs = (Core.Name "lhs")

_ShiftExpression_Binary_rhs = (Core.Name "rhs")

data AdditiveExpression = 
  AdditiveExpressionUnary MultiplicativeExpression |
  AdditiveExpressionPlus AdditiveExpression_Binary |
  AdditiveExpressionMinus AdditiveExpression_Binary
  deriving (Eq, Ord, Read, Show)

_AdditiveExpression = (Core.Name "hydra/ext/java/syntax.AdditiveExpression")

_AdditiveExpression_unary = (Core.Name "unary")

_AdditiveExpression_plus = (Core.Name "plus")

_AdditiveExpression_minus = (Core.Name "minus")

data AdditiveExpression_Binary = 
  AdditiveExpression_Binary {
    additiveExpression_BinaryLhs :: AdditiveExpression,
    additiveExpression_BinaryRhs :: MultiplicativeExpression}
  deriving (Eq, Ord, Read, Show)

_AdditiveExpression_Binary = (Core.Name "hydra/ext/java/syntax.AdditiveExpression.Binary")

_AdditiveExpression_Binary_lhs = (Core.Name "lhs")

_AdditiveExpression_Binary_rhs = (Core.Name "rhs")

data MultiplicativeExpression = 
  MultiplicativeExpressionUnary UnaryExpression |
  MultiplicativeExpressionTimes MultiplicativeExpression_Binary |
  MultiplicativeExpressionDivide MultiplicativeExpression_Binary |
  MultiplicativeExpressionMod MultiplicativeExpression_Binary
  deriving (Eq, Ord, Read, Show)

_MultiplicativeExpression = (Core.Name "hydra/ext/java/syntax.MultiplicativeExpression")

_MultiplicativeExpression_unary = (Core.Name "unary")

_MultiplicativeExpression_times = (Core.Name "times")

_MultiplicativeExpression_divide = (Core.Name "divide")

_MultiplicativeExpression_mod = (Core.Name "mod")

data MultiplicativeExpression_Binary = 
  MultiplicativeExpression_Binary {
    multiplicativeExpression_BinaryLhs :: MultiplicativeExpression,
    multiplicativeExpression_BinaryRhs :: UnaryExpression}
  deriving (Eq, Ord, Read, Show)

_MultiplicativeExpression_Binary = (Core.Name "hydra/ext/java/syntax.MultiplicativeExpression.Binary")

_MultiplicativeExpression_Binary_lhs = (Core.Name "lhs")

_MultiplicativeExpression_Binary_rhs = (Core.Name "rhs")

data UnaryExpression = 
  UnaryExpressionPreIncrement PreIncrementExpression |
  UnaryExpressionPreDecrement PreDecrementExpression |
  UnaryExpressionPlus UnaryExpression |
  UnaryExpressionMinus UnaryExpression |
  UnaryExpressionOther UnaryExpressionNotPlusMinus
  deriving (Eq, Ord, Read, Show)

_UnaryExpression = (Core.Name "hydra/ext/java/syntax.UnaryExpression")

_UnaryExpression_preIncrement = (Core.Name "preIncrement")

_UnaryExpression_preDecrement = (Core.Name "preDecrement")

_UnaryExpression_plus = (Core.Name "plus")

_UnaryExpression_minus = (Core.Name "minus")

_UnaryExpression_other = (Core.Name "other")

newtype PreIncrementExpression = 
  PreIncrementExpression {
    unPreIncrementExpression :: UnaryExpression}
  deriving (Eq, Ord, Read, Show)

_PreIncrementExpression = (Core.Name "hydra/ext/java/syntax.PreIncrementExpression")

newtype PreDecrementExpression = 
  PreDecrementExpression {
    unPreDecrementExpression :: UnaryExpression}
  deriving (Eq, Ord, Read, Show)

_PreDecrementExpression = (Core.Name "hydra/ext/java/syntax.PreDecrementExpression")

data UnaryExpressionNotPlusMinus = 
  UnaryExpressionNotPlusMinusPostfix PostfixExpression |
  UnaryExpressionNotPlusMinusTilde UnaryExpression |
  UnaryExpressionNotPlusMinusNot UnaryExpression |
  UnaryExpressionNotPlusMinusCast CastExpression
  deriving (Eq, Ord, Read, Show)

_UnaryExpressionNotPlusMinus = (Core.Name "hydra/ext/java/syntax.UnaryExpressionNotPlusMinus")

_UnaryExpressionNotPlusMinus_postfix = (Core.Name "postfix")

_UnaryExpressionNotPlusMinus_tilde = (Core.Name "tilde")

_UnaryExpressionNotPlusMinus_not = (Core.Name "not")

_UnaryExpressionNotPlusMinus_cast = (Core.Name "cast")

data PostfixExpression = 
  PostfixExpressionPrimary Primary |
  PostfixExpressionName ExpressionName |
  PostfixExpressionPostIncrement PostIncrementExpression |
  PostfixExpressionPostDecrement PostDecrementExpression
  deriving (Eq, Ord, Read, Show)

_PostfixExpression = (Core.Name "hydra/ext/java/syntax.PostfixExpression")

_PostfixExpression_primary = (Core.Name "primary")

_PostfixExpression_name = (Core.Name "name")

_PostfixExpression_postIncrement = (Core.Name "postIncrement")

_PostfixExpression_postDecrement = (Core.Name "postDecrement")

newtype PostIncrementExpression = 
  PostIncrementExpression {
    unPostIncrementExpression :: PostfixExpression}
  deriving (Eq, Ord, Read, Show)

_PostIncrementExpression = (Core.Name "hydra/ext/java/syntax.PostIncrementExpression")

newtype PostDecrementExpression = 
  PostDecrementExpression {
    unPostDecrementExpression :: PostfixExpression}
  deriving (Eq, Ord, Read, Show)

_PostDecrementExpression = (Core.Name "hydra/ext/java/syntax.PostDecrementExpression")

data CastExpression = 
  CastExpressionPrimitive CastExpression_Primitive |
  CastExpressionNotPlusMinus CastExpression_NotPlusMinus |
  CastExpressionLambda CastExpression_Lambda
  deriving (Eq, Ord, Read, Show)

_CastExpression = (Core.Name "hydra/ext/java/syntax.CastExpression")

_CastExpression_primitive = (Core.Name "primitive")

_CastExpression_notPlusMinus = (Core.Name "notPlusMinus")

_CastExpression_lambda = (Core.Name "lambda")

data CastExpression_Primitive = 
  CastExpression_Primitive {
    castExpression_PrimitiveType :: PrimitiveTypeWithAnnotations,
    castExpression_PrimitiveExpression :: UnaryExpression}
  deriving (Eq, Ord, Read, Show)

_CastExpression_Primitive = (Core.Name "hydra/ext/java/syntax.CastExpression.Primitive")

_CastExpression_Primitive_type = (Core.Name "type")

_CastExpression_Primitive_expression = (Core.Name "expression")

data CastExpression_NotPlusMinus = 
  CastExpression_NotPlusMinus {
    castExpression_NotPlusMinusRefAndBounds :: CastExpression_RefAndBounds,
    castExpression_NotPlusMinusExpression :: UnaryExpression}
  deriving (Eq, Ord, Read, Show)

_CastExpression_NotPlusMinus = (Core.Name "hydra/ext/java/syntax.CastExpression.NotPlusMinus")

_CastExpression_NotPlusMinus_refAndBounds = (Core.Name "refAndBounds")

_CastExpression_NotPlusMinus_expression = (Core.Name "expression")

data CastExpression_Lambda = 
  CastExpression_Lambda {
    castExpression_LambdaRefAndBounds :: CastExpression_RefAndBounds,
    castExpression_LambdaExpression :: LambdaExpression}
  deriving (Eq, Ord, Read, Show)

_CastExpression_Lambda = (Core.Name "hydra/ext/java/syntax.CastExpression.Lambda")

_CastExpression_Lambda_refAndBounds = (Core.Name "refAndBounds")

_CastExpression_Lambda_expression = (Core.Name "expression")

data CastExpression_RefAndBounds = 
  CastExpression_RefAndBounds {
    castExpression_RefAndBoundsType :: ReferenceType,
    castExpression_RefAndBoundsBounds :: [AdditionalBound]}
  deriving (Eq, Ord, Read, Show)

_CastExpression_RefAndBounds = (Core.Name "hydra/ext/java/syntax.CastExpression.RefAndBounds")

_CastExpression_RefAndBounds_type = (Core.Name "type")

_CastExpression_RefAndBounds_bounds = (Core.Name "bounds")

newtype ConstantExpression = 
  ConstantExpression {
    unConstantExpression :: Expression}
  deriving (Eq, Ord, Read, Show)

_ConstantExpression = (Core.Name "hydra/ext/java/syntax.ConstantExpression")