packages feed

hydra-0.15.0: src/main/haskell/Hydra/Dsl/Java/Helpers.hs

-- | Convenience layer over the generated Java syntax DSL.
-- Re-exports all generated DSL functions and adds custom helpers
-- for common Java AST construction patterns.

module Hydra.Dsl.Java.Helpers (
  module Hydra.Dsl.Java.Helpers,
  module Hydra.Dsl.Java.Syntax,
) where

import Hydra.Kernel
import Hydra.Dsl.Meta.Phantoms as Phantoms
import Hydra.Dsl.Java.Syntax hiding (
  -- Hide functions whose types have changed since the hand-written DSL was created.
  -- The hand-written versions are kept below for backward compatibility.
  arrayInitializer,
  classInstanceCreationExpression,
  lambdaParametersTuple,
  variableDeclaratorId)
import qualified Hydra.Java.Syntax as Java

import Prelude hiding (map)


-- Functions with signatures that differ from the generated versions.
-- These use the original types for backward compatibility with existing call sites.

arrayInitializer :: TTerm [Java.VariableInitializer] -> TTerm Java.ArrayInitializer
arrayInitializer = wrap Java._ArrayInitializer

classInstanceCreationExpression :: TTerm (Maybe Java.Expression) -> TTerm Java.UnqualifiedClassInstanceCreationExpression -> TTerm Java.ClassInstanceCreationExpression
classInstanceCreationExpression qual unqual = record Java._ClassInstanceCreationExpression [
  Java._ClassInstanceCreationExpression_qualifier>>: qual,
  Java._ClassInstanceCreationExpression_expression>>: unqual]

lambdaParametersTuple :: TTerm [Java.FormalParameter] -> TTerm Java.LambdaParameters
lambdaParametersTuple = inject Java._LambdaParameters Java._LambdaParameters_tuple

variableDeclaratorId :: TTerm Java.Identifier -> TTerm (Maybe Java.Dims) -> TTerm Java.VariableDeclaratorId
variableDeclaratorId ident dims_ = record Java._VariableDeclaratorId [
  Java._VariableDeclaratorId_identifier>>: ident,
  Java._VariableDeclaratorId_dims>>: dims_]


-- Custom helpers: expression type conversions

literalToPrimary :: TTerm Java.Literal -> TTerm Java.Primary
literalToPrimary lit = primaryNoNewArray (primaryLiteral lit)

literalToExpression :: TTerm Java.Literal -> TTerm Java.Expression
literalToExpression lit = primaryToExpression (literalToPrimary lit)

literalToRelationalExpression :: TTerm Java.Literal -> TTerm Java.RelationalExpression
literalToRelationalExpression lit =
  relationalExpressionSimple
    (shiftExpressionUnary
      (additiveExpressionUnary
        (multiplicativeExpressionUnary
          (unaryExpressionOther
            (unaryExpressionNotPlusMinusPostfix
              (postfixExpressionPrimary (literalToPrimary lit)))))))

literalToMultiplicativeExpression :: TTerm Java.Literal -> TTerm Java.MultiplicativeExpression
literalToMultiplicativeExpression lit =
  multiplicativeExpressionUnary
    (unaryExpressionOther
      (unaryExpressionNotPlusMinusPostfix
        (postfixExpressionPrimary (literalToPrimary lit))))

primaryToExpression :: TTerm Java.Primary -> TTerm Java.Expression
primaryToExpression p = expressionAssignment
  (assignmentExpressionConditional
    (conditionalExpressionSimple
      (conditionalOrExpression (list [
        conditionalAndExpression (list [
          inclusiveOrExpression (list [
            exclusiveOrExpression (list [
              andExpression (list [
                equalityExpressionUnary
                  (relationalExpressionSimple
                    (shiftExpressionUnary
                      (additiveExpressionUnary
                        (multiplicativeExpressionUnary
                          (unaryExpressionOther
                            (unaryExpressionNotPlusMinusPostfix
                              (postfixExpressionPrimary p)))))))])])])])]))))

postfixToExpression :: TTerm Java.PostfixExpression -> TTerm Java.Expression
postfixToExpression pe = expressionAssignment
  (assignmentExpressionConditional
    (conditionalExpressionSimple
      (conditionalOrExpression (list [
        conditionalAndExpression (list [
          inclusiveOrExpression (list [
            exclusiveOrExpression (list [
              andExpression (list [
                equalityExpressionUnary
                  (relationalExpressionSimple
                    (shiftExpressionUnary
                      (additiveExpressionUnary
                        (multiplicativeExpressionUnary
                          (unaryExpressionOther
                            (unaryExpressionNotPlusMinusPostfix pe))))))])])])])]))))

postfixToInclusiveOr :: TTerm Java.PostfixExpression -> TTerm Java.InclusiveOrExpression
postfixToInclusiveOr pe = inclusiveOrExpression (list [
  exclusiveOrExpression (list [
    andExpression (list [
      equalityExpressionUnary
        (relationalExpressionSimple
          (shiftExpressionUnary
            (additiveExpressionUnary
              (multiplicativeExpressionUnary
                (unaryExpressionOther
                  (unaryExpressionNotPlusMinusPostfix pe))))))])])])

postfixToRelationalExpression :: TTerm Java.PostfixExpression -> TTerm Java.RelationalExpression
postfixToRelationalExpression pe =
  relationalExpressionSimple
    (shiftExpressionUnary
      (additiveExpressionUnary
        (multiplicativeExpressionUnary
          (unaryExpressionOther
            (unaryExpressionNotPlusMinusPostfix pe)))))

unaryToExpression :: TTerm Java.UnaryExpression -> TTerm Java.Expression
unaryToExpression ue = expressionAssignment
  (assignmentExpressionConditional
    (conditionalExpressionSimple
      (conditionalOrExpression (list [
        conditionalAndExpression (list [
          inclusiveOrExpression (list [
            exclusiveOrExpression (list [
              andExpression (list [
                equalityExpressionUnary
                  (relationalExpressionSimple
                    (shiftExpressionUnary
                      (additiveExpressionUnary
                        (multiplicativeExpressionUnary ue))))])])])])]))))

additiveToExpression :: TTerm Java.AdditiveExpression -> TTerm Java.Expression
additiveToExpression ae = expressionAssignment
  (assignmentExpressionConditional
    (conditionalExpressionSimple
      (conditionalOrExpression (list [
        conditionalAndExpression (list [
          inclusiveOrExpression (list [
            exclusiveOrExpression (list [
              andExpression (list [
                equalityExpressionUnary
                  (relationalExpressionSimple
                    (shiftExpressionUnary ae))])])])])]))))

equalityToExpression :: TTerm Java.EqualityExpression -> TTerm Java.Expression
equalityToExpression ee = expressionAssignment
  (assignmentExpressionConditional
    (conditionalExpressionSimple
      (conditionalOrExpression (list [
        conditionalAndExpression (list [
          equalityToInclusiveOr ee])]))))

equalityToInclusiveOr :: TTerm Java.EqualityExpression -> TTerm Java.InclusiveOrExpression
equalityToInclusiveOr ee = inclusiveOrExpression (list [
  exclusiveOrExpression (list [
    andExpression (list [ee])])])

conditionalAndToExpression :: TTerm Java.ConditionalAndExpression -> TTerm Java.Expression
conditionalAndToExpression cae = expressionAssignment
  (assignmentExpressionConditional
    (conditionalExpressionSimple
      (conditionalOrExpression (list [cae]))))

castExpressionToExpression :: TTerm Java.CastExpression -> TTerm Java.Expression
castExpressionToExpression ce = expressionAssignment
  (assignmentExpressionConditional
    (conditionalExpressionSimple
      (conditionalOrExpression (list [
        conditionalAndExpression (list [
          inclusiveOrExpression (list [
            exclusiveOrExpression (list [
              andExpression (list [
                equalityExpressionUnary
                  (relationalExpressionSimple
                    (shiftExpressionUnary
                      (additiveExpressionUnary
                        (multiplicativeExpressionUnary
                          (unaryExpressionOther
                            (unaryExpressionNotPlusMinusCast ce))))))])])])])]))))

expressionNameToExpression :: TTerm Java.ExpressionName -> TTerm Java.Expression
expressionNameToExpression en = postfixToExpression (postfixExpressionName en)

identifierToExpression :: TTerm Java.Identifier -> TTerm Java.Expression
identifierToExpression id_ = expressionNameToExpression (expressionName nothing id_)

identifierToRelationalExpression :: TTerm Java.Identifier -> TTerm Java.RelationalExpression
identifierToRelationalExpression id_ =
  postfixToRelationalExpression (postfixExpressionName (expressionName nothing id_))

identifierToUnary :: TTerm Java.Identifier -> TTerm Java.UnaryExpression
identifierToUnary id_ = unaryExpressionOther
  (unaryExpressionNotPlusMinusPostfix
    (postfixExpressionName (expressionName nothing id_)))

fieldAccessToExpression :: TTerm Java.FieldAccess -> TTerm Java.Expression
fieldAccessToExpression fa = primaryToExpression (primaryNoNewArray (primaryFieldAccess fa))

methodInvocationToExpression :: TTerm Java.MethodInvocation -> TTerm Java.Expression
methodInvocationToExpression mi = primaryToExpression (primaryNoNewArray (primaryMethodInvocation mi))

methodInvocationToPrimary :: TTerm Java.MethodInvocation -> TTerm Java.Primary
methodInvocationToPrimary mi = primaryNoNewArray (primaryMethodInvocation mi)

methodInvocationToPostfix :: TTerm Java.MethodInvocation -> TTerm Java.PostfixExpression
methodInvocationToPostfix mi = postfixExpressionPrimary (primaryNoNewArray (primaryMethodInvocation mi))

methodInvocationToStatement :: TTerm Java.MethodInvocation -> TTerm Java.Statement
methodInvocationToStatement mi = statementWithoutTrailing
  (stmtExpression (expressionStatement (stmtExprMethodInvocation mi)))

expressionToPrimary :: TTerm Java.Expression -> TTerm Java.Primary
expressionToPrimary e = primaryNoNewArray (primaryParens e)

expressionToUnary :: TTerm Java.Expression -> TTerm Java.UnaryExpression
expressionToUnary e = unaryExpressionOther
  (unaryExpressionNotPlusMinusPostfix
    (postfixExpressionPrimary (expressionToPrimary e)))

primaryToUnary :: TTerm Java.UnaryExpression -> TTerm Java.Primary
primaryToUnary ue = primaryNoNewArray (primaryParens (unaryToExpression ue))

relationalToUnary :: TTerm Java.RelationalExpression -> TTerm Java.UnaryExpression
relationalToUnary re = unaryExpressionOther
  (unaryExpressionNotPlusMinusPostfix
    (postfixExpressionPrimary
      (primaryNoNewArray
        (primaryParens
          (expressionAssignment
            (assignmentExpressionConditional
              (conditionalExpressionSimple
                (conditionalOrExpression (list [
                  conditionalAndExpression (list [
                    inclusiveOrExpression (list [
                      exclusiveOrExpression (list [
                        andExpression (list [
                          equalityExpressionUnary re])])])])])))))))))


-- Custom helpers: binary expression constructors

additiveExpressionBinary :: TTerm Java.AdditiveExpression -> TTerm Java.MultiplicativeExpression -> TTerm Java.AdditiveExpression_Binary
additiveExpressionBinary lhs rhs = record Java._AdditiveExpression_Binary [
  Java._AdditiveExpression_Binary_lhs>>: lhs,
  Java._AdditiveExpression_Binary_rhs>>: rhs]

equalityExpressionBinary :: TTerm Java.EqualityExpression -> TTerm Java.RelationalExpression -> TTerm Java.EqualityExpression_Binary
equalityExpressionBinary lhs rhs = record Java._EqualityExpression_Binary [
  Java._EqualityExpression_Binary_lhs>>: lhs,
  Java._EqualityExpression_Binary_rhs>>: rhs]

multiplicativeExpressionBinary :: TTerm Java.MultiplicativeExpression -> TTerm Java.UnaryExpression -> TTerm Java.MultiplicativeExpression_Binary
multiplicativeExpressionBinary lhs rhs = record Java._MultiplicativeExpression_Binary [
  Java._MultiplicativeExpression_Binary_lhs>>: lhs,
  Java._MultiplicativeExpression_Binary_rhs>>: rhs]


-- Custom helpers: primary constructors

primaryLiteral :: TTerm Java.Literal -> TTerm Java.PrimaryNoNewArrayExpression
primaryLiteral = inject Java._PrimaryNoNewArrayExpression Java._PrimaryNoNewArrayExpression_literal

primaryParens :: TTerm Java.Expression -> TTerm Java.PrimaryNoNewArrayExpression
primaryParens = inject Java._PrimaryNoNewArrayExpression Java._PrimaryNoNewArrayExpression_parens

primaryFieldAccess :: TTerm Java.FieldAccess -> TTerm Java.PrimaryNoNewArrayExpression
primaryFieldAccess = inject Java._PrimaryNoNewArrayExpression Java._PrimaryNoNewArrayExpression_fieldAccess

primaryMethodInvocation :: TTerm Java.MethodInvocation -> TTerm Java.PrimaryNoNewArrayExpression
primaryMethodInvocation = inject Java._PrimaryNoNewArrayExpression Java._PrimaryNoNewArrayExpression_methodInvocation

primaryThis :: TTerm Java.PrimaryNoNewArrayExpression
primaryThis = injectUnit Java._PrimaryNoNewArrayExpression Java._PrimaryNoNewArrayExpression_this

primaryClassInstance :: TTerm Java.ClassInstanceCreationExpression -> TTerm Java.PrimaryNoNewArrayExpression
primaryClassInstance = inject Java._PrimaryNoNewArrayExpression Java._PrimaryNoNewArrayExpression_classInstance

primaryArrayAccess :: TTerm Java.ArrayAccess -> TTerm Java.PrimaryNoNewArrayExpression
primaryArrayAccess = inject Java._PrimaryNoNewArrayExpression Java._PrimaryNoNewArrayExpression_arrayAccess


-- Custom helpers: statement constructors

stmtExpression :: TTerm Java.ExpressionStatement -> TTerm Java.StatementWithoutTrailingSubstatement
stmtExpression = inject Java._StatementWithoutTrailingSubstatement Java._StatementWithoutTrailingSubstatement_expression

stmtReturn :: TTerm Java.ReturnStatement -> TTerm Java.StatementWithoutTrailingSubstatement
stmtReturn = inject Java._StatementWithoutTrailingSubstatement Java._StatementWithoutTrailingSubstatement_return

stmtThrow :: TTerm Java.ThrowStatement -> TTerm Java.StatementWithoutTrailingSubstatement
stmtThrow = inject Java._StatementWithoutTrailingSubstatement Java._StatementWithoutTrailingSubstatement_throw

stmtEmpty :: TTerm Java.StatementWithoutTrailingSubstatement
stmtEmpty = injectUnit Java._StatementWithoutTrailingSubstatement Java._StatementWithoutTrailingSubstatement_empty

stmtBlock :: TTerm Java.Block -> TTerm Java.StatementWithoutTrailingSubstatement
stmtBlock = inject Java._StatementWithoutTrailingSubstatement Java._StatementWithoutTrailingSubstatement_block

stmtExprAssignment :: TTerm Java.Assignment -> TTerm Java.StatementExpression
stmtExprAssignment = inject Java._StatementExpression Java._StatementExpression_assignment

stmtExprMethodInvocation :: TTerm Java.MethodInvocation -> TTerm Java.StatementExpression
stmtExprMethodInvocation = inject Java._StatementExpression Java._StatementExpression_methodInvocation

stmtExprClassInstance :: TTerm Java.ClassInstanceCreationExpression -> TTerm Java.StatementExpression
stmtExprClassInstance = inject Java._StatementExpression Java._StatementExpression_classInstanceCreation


-- Custom helpers: other constructors

arrayCreationExpressionPrimitiveArray_ :: TTerm Java.PrimitiveTypeWithAnnotations -> TTerm Java.Dims -> TTerm Java.ArrayInitializer -> TTerm Java.ArrayCreationExpression_PrimitiveArray
arrayCreationExpressionPrimitiveArray_ pt dims_ arr = record Java._ArrayCreationExpression_PrimitiveArray [
  Java._ArrayCreationExpression_PrimitiveArray_type>>: pt,
  Java._ArrayCreationExpression_PrimitiveArray_dims>>: dims_,
  Java._ArrayCreationExpression_PrimitiveArray_array>>: arr]

arrayTypeVariantPrimitive :: TTerm Java.PrimitiveTypeWithAnnotations -> TTerm Java.ArrayType_Variant
arrayTypeVariantPrimitive = inject Java._ArrayType_Variant Java._ArrayType_Variant_primitive

castExpressionNotPlusMinus_ :: TTerm Java.CastExpression_RefAndBounds -> TTerm Java.UnaryExpressionNotPlusMinus -> TTerm Java.CastExpression_NotPlusMinus
castExpressionNotPlusMinus_ rb expr = record Java._CastExpression_NotPlusMinus [
  Java._CastExpression_NotPlusMinus_refAndBounds>>: rb,
  Java._CastExpression_NotPlusMinus_expression>>: expr]

castExpressionPrimitive_ :: TTerm Java.PrimitiveTypeWithAnnotations -> TTerm Java.UnaryExpression -> TTerm Java.CastExpression_Primitive
castExpressionPrimitive_ pt expr = record Java._CastExpression_Primitive [
  Java._CastExpression_Primitive_type>>: pt,
  Java._CastExpression_Primitive_expression>>: expr]

castExpressionRefAndBounds :: TTerm Java.ReferenceType -> TTerm [Java.AdditionalBound] -> TTerm Java.CastExpression_RefAndBounds
castExpressionRefAndBounds rt bounds = record Java._CastExpression_RefAndBounds [
  Java._CastExpression_RefAndBounds_type>>: rt,
  Java._CastExpression_RefAndBounds_bounds>>: bounds]

fieldAccessQualifierPrimary :: TTerm Java.Primary -> TTerm Java.FieldAccess_Qualifier
fieldAccessQualifierPrimary = inject Java._FieldAccess_Qualifier Java._FieldAccess_Qualifier_primary

relationalExpressionInstanceOf :: TTerm Java.RelationalExpression_InstanceOf -> TTerm Java.RelationalExpression
relationalExpressionInstanceOf = inject Java._RelationalExpression Java._RelationalExpression_instanceof

relationalExpressionInstanceOf_ :: TTerm Java.RelationalExpression -> TTerm Java.ReferenceType -> TTerm Java.RelationalExpression_InstanceOf
relationalExpressionInstanceOf_ expr rt = record Java._RelationalExpression_InstanceOf [
  Java._RelationalExpression_InstanceOf_lhs>>: expr,
  Java._RelationalExpression_InstanceOf_rhs>>: rt]

methodInvocation_ :: TTerm Java.MethodInvocation_Header -> TTerm [Java.Expression] -> TTerm Java.MethodInvocation
methodInvocation_ header args = record Java._MethodInvocation [
  Java._MethodInvocation_header>>: header,
  Java._MethodInvocation_arguments>>: args]

methodInvocationHeaderSimple :: TTerm Java.MethodName -> TTerm Java.MethodInvocation_Header
methodInvocationHeaderSimple = inject Java._MethodInvocation_Header Java._MethodInvocation_Header_simple

methodInvocationHeaderComplex :: TTerm Java.MethodInvocation_Complex -> TTerm Java.MethodInvocation_Header
methodInvocationHeaderComplex = inject Java._MethodInvocation_Header Java._MethodInvocation_Header_complex

methodInvocationComplex :: TTerm Java.MethodInvocation_Variant -> TTerm [Java.TypeArgument] -> TTerm Java.Identifier -> TTerm Java.MethodInvocation_Complex
methodInvocationComplex variant targs ident = record Java._MethodInvocation_Complex [
  Java._MethodInvocation_Complex_variant>>: variant,
  Java._MethodInvocation_Complex_typeArguments>>: targs,
  Java._MethodInvocation_Complex_identifier>>: ident]

methodInvocationVariantExpression :: TTerm Java.ExpressionName -> TTerm Java.MethodInvocation_Variant
methodInvocationVariantExpression = inject Java._MethodInvocation_Variant Java._MethodInvocation_Variant_expression

methodInvocationVariantPrimary :: TTerm Java.Primary -> TTerm Java.MethodInvocation_Variant
methodInvocationVariantPrimary = inject Java._MethodInvocation_Variant Java._MethodInvocation_Variant_primary

methodInvocationVariantType :: TTerm Java.TypeName -> TTerm Java.MethodInvocation_Variant
methodInvocationVariantType = inject Java._MethodInvocation_Variant Java._MethodInvocation_Variant_type

methodDeclaration_ :: TTerm [Java.Annotation] -> TTerm [Java.MethodModifier] -> TTerm Java.MethodHeader -> TTerm Java.MethodBody -> TTerm Java.MethodDeclaration
methodDeclaration_ anns mods header body = record Java._MethodDeclaration [
  Java._MethodDeclaration_annotations>>: anns,
  Java._MethodDeclaration_modifiers>>: mods,
  Java._MethodDeclaration_header>>: header,
  Java._MethodDeclaration_body>>: body]

interfaceMethodDeclaration_ :: TTerm [Java.InterfaceMethodModifier] -> TTerm Java.MethodHeader -> TTerm Java.MethodBody -> TTerm Java.InterfaceMethodDeclaration
interfaceMethodDeclaration_ mods header body = record Java._InterfaceMethodDeclaration [
  Java._InterfaceMethodDeclaration_modifiers>>: mods,
  Java._InterfaceMethodDeclaration_header>>: header,
  Java._InterfaceMethodDeclaration_body>>: body]

formalParameterSimple_ :: TTerm [Java.VariableModifier] -> TTerm Java.UnannType -> TTerm Java.VariableDeclaratorId -> TTerm Java.FormalParameter_Simple
formalParameterSimple_ mods ut vid = record Java._FormalParameter_Simple [
  Java._FormalParameter_Simple_modifiers>>: mods,
  Java._FormalParameter_Simple_type>>: ut,
  Java._FormalParameter_Simple_id>>: vid]

classBodyDeclClassMember :: TTerm Java.ClassMemberDeclaration -> TTerm Java.ClassBodyDeclaration
classBodyDeclClassMember = inject Java._ClassBodyDeclaration Java._ClassBodyDeclaration_classMember

classBodyDeclConstructor :: TTerm Java.ConstructorDeclaration -> TTerm Java.ClassBodyDeclaration
classBodyDeclConstructor = inject Java._ClassBodyDeclaration Java._ClassBodyDeclaration_constructorDeclaration

classMemberDeclField :: TTerm Java.FieldDeclaration -> TTerm Java.ClassMemberDeclaration
classMemberDeclField = inject Java._ClassMemberDeclaration Java._ClassMemberDeclaration_field

classMemberDeclMethod :: TTerm Java.MethodDeclaration -> TTerm Java.ClassMemberDeclaration
classMemberDeclMethod = inject Java._ClassMemberDeclaration Java._ClassMemberDeclaration_method

classMemberDeclClass :: TTerm Java.ClassDeclaration -> TTerm Java.ClassMemberDeclaration
classMemberDeclClass = inject Java._ClassMemberDeclaration Java._ClassMemberDeclaration_class

classMemberDeclInterface :: TTerm Java.InterfaceDeclaration -> TTerm Java.ClassMemberDeclaration
classMemberDeclInterface = inject Java._ClassMemberDeclaration Java._ClassMemberDeclaration_interface

interfaceMemberDeclConstant :: TTerm Java.ConstantDeclaration -> TTerm Java.InterfaceMemberDeclaration
interfaceMemberDeclConstant = inject Java._InterfaceMemberDeclaration Java._InterfaceMemberDeclaration_constant

interfaceMemberDeclInterfaceMethod :: TTerm Java.InterfaceMethodDeclaration -> TTerm Java.InterfaceMemberDeclaration
interfaceMemberDeclInterfaceMethod = inject Java._InterfaceMemberDeclaration Java._InterfaceMemberDeclaration_interfaceMethod

interfaceMemberDeclClass :: TTerm Java.ClassDeclaration -> TTerm Java.InterfaceMemberDeclaration
interfaceMemberDeclClass = inject Java._InterfaceMemberDeclaration Java._InterfaceMemberDeclaration_class

elementValueConditional :: TTerm Java.ConditionalExpression -> TTerm Java.ElementValue
elementValueConditional = inject Java._ElementValue Java._ElementValue_conditionalExpression

elementValueArray :: TTerm Java.ElementValueArrayInitializer -> TTerm Java.ElementValue
elementValueArray = inject Java._ElementValue Java._ElementValue_elementValueArrayInitializer

variableInitializerArray :: TTerm Java.ArrayInitializer -> TTerm Java.VariableInitializer
variableInitializerArray = inject Java._VariableInitializer Java._VariableInitializer_arrayInitializer