jif.extension

## Class JifDowngradeExprExt

- java.lang.Object
- - polyglot.ast.Ext_c
  - - jif.ast.JifExt_c
    - - jif.extension.JifExprExt
      - - jif.extension.JifDowngradeExprExt

- All Implemented Interfaces:
    java.io.Serializable, java.lang.Cloneable, JifExt, polyglot.ast.Ext, polyglot.ast.NodeOps, polyglot.util.Copy<polyglot.ast.Ext>
  Direct Known Subclasses:
    JifDeclassifyExprExt, JifEndorseExprExt

      public abstract class JifDowngradeExprExt
      extends JifExprExt

  The Jif extension of the `DowngradeExpr` node.
  See Also:
    `DowngradeExpr`, Serialized Form

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from interface polyglot.util.Copy

      `polyglot.util.Copy.Util`

  - ### Field Summary

    - ### Fields inherited from class jif.ast.JifExt_c

      `toJava, X`

    - ### Fields inherited from class polyglot.ast.Ext_c

      `ext, node, pred`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `JifDowngradeExprExt(ToJavaExt toJava)`

  - ### Method Summary

    All Methods Instance Methods Abstract Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected abstract void` | `checkAuthority(LabelChecker lc, JifContext A, Label labelFrom, Label labelTo, polyglot.util.Position pos)` Check the authority condition
    `protected void` | `checkDowngradeFromBound(LabelChecker lc, JifContext A, PathMap Xe, DowngradeExpr d, Label downgradeFrom, Label downgradeTo, boolean boundSpecified)`
    `protected abstract void` | `checkOneDimenOnly(LabelChecker lc, JifContext A, Label labelFrom, Label labelTo, polyglot.util.Position pos)` Check that only the integrity/confidentiality is downgraded, and not the other dimension.
    `protected abstract void` | `checkRobustness(LabelChecker lc, JifContext A, Label labelFrom, Label labelTo, polyglot.util.Position pos)` Check the robustness condition
    `protected JifContext` | `declassifyConstraintContext(LabelChecker lc, JifContext A, Label downgradeFrom, Label downgradeTo)` TODO: document me!
    `protected PathMap` | `downgradeExprPathMap(LabelChecker lc, PathMap Xe)` TODO: document me!
    `polyglot.ast.Node` | `labelCheck(LabelChecker lc)` Label check the node to which this extension is attached.
    `void` | `updateContextAfterExpr(LabelChecker lc, JifContext A, PathMap Xe)` Utility method for updating the context after checking the expression.

    - ### Methods inherited from class jif.extension.JifExprExt

      `getNumericBounds, setNumericBounds`

    - ### Methods inherited from class jif.ast.JifExt_c

      `checkAndRemoveThrowType, checkThrowTypes, copy, dump, getPathMap, init, integerBoundsCalculated, toJava, toJava, updatePathMap, X, X`

    - ### Methods inherited from class polyglot.ast.Ext_c

      `addDecls, buildTypes, buildTypesEnter, checkConstants, childExpectedType, copy, copy, disambiguate, disambiguateEnter, disambiguateOverride, dump, dump, dump, dump, enterChildScope, enterScope, exceptionCheck, exceptionCheckEnter, ext, ext, extRewrite, extRewriteEnter, extRewriteOverride, initPred, lang, node, pred, prettyPrint, prettyPrint, prettyPrint, prettyPrint, prettyPrint, print, printBlock, printSubStmt, superLang, throwTypes, toString, translate, typeCheck, typeCheckEnter, typeCheckOverride, visitChild, visitChildren, visitList`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

    - ### Methods inherited from interface polyglot.ast.Ext

      `ext, ext, initPred, node, pred`

    - ### Methods inherited from interface polyglot.ast.NodeOps

      `addDecls, buildTypes, buildTypesEnter, checkConstants, childExpectedType, copy, copy, disambiguate, disambiguateEnter, disambiguateOverride, dump, dump, dump, dump, enterChildScope, enterScope, exceptionCheck, exceptionCheckEnter, extRewrite, extRewriteEnter, extRewriteOverride, lang, prettyPrint, prettyPrint, prettyPrint, prettyPrint, prettyPrint, throwTypes, translate, typeCheck, typeCheckEnter, typeCheckOverride, visitChild, visitChildren, visitList`

- - ### Constructor Detail

    - #### JifDowngradeExprExt

          public JifDowngradeExprExt(ToJavaExt toJava)

  - ### Method Detail

    - #### declassifyConstraintContext

          protected JifContext declassifyConstraintContext(LabelChecker lc,
                                                           JifContext A,
                                                           Label downgradeFrom,
                                                           Label downgradeTo)
                                                    throws polyglot.types.SemanticException

      TODO: document me!
      Throws:
        `polyglot.types.SemanticException`

    - #### labelCheck

          public polyglot.ast.Node labelCheck(LabelChecker lc)
                                       throws polyglot.types.SemanticException

      Description copied from interface: `JifExt`
      Label check the node to which this extension is attached.
      Specified by:
        `labelCheck` in interface `JifExt`
      Overrides:
        `labelCheck` in class `JifExt_c`
      Throws:
        `polyglot.types.SemanticException`

    - #### updateContextAfterExpr

          public void updateContextAfterExpr(LabelChecker lc,
                                             JifContext A,
                                             PathMap Xe)

      Utility method for updating the context after checking the expression. Useful for overriding in projects like fabric.

    - #### checkDowngradeFromBound

          protected void checkDowngradeFromBound(LabelChecker lc,
                                                 JifContext A,
                                                 PathMap Xe,
                                                 DowngradeExpr d,
                                                 Label downgradeFrom,
                                                 Label downgradeTo,
                                                 boolean boundSpecified)
                                          throws polyglot.types.SemanticException

      Throws:
        `polyglot.types.SemanticException`

    - #### downgradeExprPathMap

          protected PathMap downgradeExprPathMap(LabelChecker lc,
                                                 PathMap Xe)
                                          throws polyglot.types.SemanticException

      TODO: document me!
      Throws:
        `polyglot.types.SemanticException`

    - #### checkOneDimenOnly

          protected abstract void checkOneDimenOnly(LabelChecker lc,
                                                    JifContext A,
                                                    Label labelFrom,
                                                    Label labelTo,
                                                    polyglot.util.Position pos)
                                             throws polyglot.types.SemanticException

      Check that only the integrity/confidentiality is downgraded, and not the other dimension.
      Parameters:
        `lc` -
        `labelFrom` -
        `labelTo` -
      Throws:
        `polyglot.types.SemanticException`

    - #### checkAuthority

          protected abstract void checkAuthority(LabelChecker lc,
                                                 JifContext A,
                                                 Label labelFrom,
                                                 Label labelTo,
                                                 polyglot.util.Position pos)
                                          throws polyglot.types.SemanticException

      Check the authority condition
      Parameters:
        `lc` -
        `labelFrom` -
        `labelTo` -
      Throws:
        `polyglot.types.SemanticException`

    - #### checkRobustness

          protected abstract void checkRobustness(LabelChecker lc,
                                                  JifContext A,
                                                  Label labelFrom,
                                                  Label labelTo,
                                                  polyglot.util.Position pos)
                                           throws polyglot.types.SemanticException

      Check the robustness condition
      Parameters:
        `lc` -
        `labelFrom` -
        `labelTo` -
      Throws:
        `polyglot.types.SemanticException`