Class ConditionalFlowInfo

java.lang.Object
org.aspectj.org.eclipse.jdt.internal.compiler.flow.FlowInfo
org.aspectj.org.eclipse.jdt.internal.compiler.flow.ConditionalFlowInfo

public class ConditionalFlowInfo extends FlowInfo
Record conditional initialization status during definite assignment analysis
  • Field Details

    • initsWhenTrue

      public FlowInfo initsWhenTrue
    • initsWhenFalse

      public FlowInfo initsWhenFalse
  • Method Details

    • addInitializationsFrom

      public FlowInfo addInitializationsFrom(FlowInfo otherInits)
      Description copied from class: FlowInfo
      Add other inits to this flow info, then return this. The operation semantics are to match as closely as possible the application to this flow info of all the operations that resulted into otherInits.
      Specified by:
      addInitializationsFrom in class FlowInfo
      Parameters:
      otherInits - other inits to add to this
      Returns:
      this, modified according to otherInits information
    • addNullInfoFrom

      public FlowInfo addNullInfoFrom(FlowInfo otherInits)
      Description copied from class: FlowInfo
      Add all null information from otherInits to this flow info and return this. The operation models the effect of an unconditional sequence of this flow info and otherInits.
      Specified by:
      addNullInfoFrom in class FlowInfo
    • addPotentialInitializationsFrom

      public FlowInfo addPotentialInitializationsFrom(FlowInfo otherInits)
      Description copied from class: FlowInfo
      Compose other inits over this flow info, then return this. The operation semantics are to wave into this flow info the consequences of a possible path into the operations that resulted into otherInits. The fact that this path may be left unexecuted under peculiar conditions results into less specific results than addInitializationsFrom.
      Specified by:
      addPotentialInitializationsFrom in class FlowInfo
      Parameters:
      otherInits - other inits to compose over this
      Returns:
      this, modified according to otherInits information
    • asNegatedCondition

      public FlowInfo asNegatedCondition()
      Overrides:
      asNegatedCondition in class FlowInfo
    • copy

      public FlowInfo copy()
      Description copied from class: FlowInfo
      Return a deep copy of the current instance.
      Specified by:
      copy in class FlowInfo
      Returns:
      a deep copy of this flow info
    • initsWhenFalse

      public FlowInfo initsWhenFalse()
      Description copied from class: FlowInfo
      Return the flow info that would result from the path associated to the value false for the condition expression that generated this flow info. May be this flow info if it is not an instance of ConditionalFlowInfo. May have a side effect on subparts of this flow info (subtrees get merged).
      Specified by:
      initsWhenFalse in class FlowInfo
      Returns:
      the flow info associated to the false branch of the condition that generated this flow info
    • initsWhenTrue

      public FlowInfo initsWhenTrue()
      Description copied from class: FlowInfo
      Return the flow info that would result from the path associated to the value true for the condition expression that generated this flow info. May be this flow info if it is not an instance of ConditionalFlowInfo. May have a side effect on subparts of this flow info (subtrees get merged).
      Specified by:
      initsWhenTrue in class FlowInfo
      Returns:
      the flow info associated to the true branch of the condition that generated this flow info
    • isDefinitelyAssigned

      public boolean isDefinitelyAssigned(FieldBinding field)
      Description copied from class: FlowInfo
      Check status of definite assignment for a field.
      Specified by:
      isDefinitelyAssigned in class FlowInfo
    • isDefinitelyAssigned

      public boolean isDefinitelyAssigned(LocalVariableBinding local)
      Description copied from class: FlowInfo
      Check status of definite assignment for a local.
      Specified by:
      isDefinitelyAssigned in class FlowInfo
    • isDefinitelyNonNull

      public boolean isDefinitelyNonNull(LocalVariableBinding local)
      Description copied from class: FlowInfo
      Check status of definite non-null value for a given local variable.
      Specified by:
      isDefinitelyNonNull in class FlowInfo
      Parameters:
      local - the variable to ckeck
      Returns:
      true iff local is definitely non null for this flow info
    • isDefinitelyNull

      public boolean isDefinitelyNull(LocalVariableBinding local)
      Description copied from class: FlowInfo
      Check status of definite null value for a given local variable.
      Specified by:
      isDefinitelyNull in class FlowInfo
      Parameters:
      local - the variable to ckeck
      Returns:
      true iff local is definitely null for this flow info
    • isDefinitelyUnknown

      public boolean isDefinitelyUnknown(LocalVariableBinding local)
      Description copied from class: FlowInfo
      Check status of definite unknown value for a given local variable.
      Specified by:
      isDefinitelyUnknown in class FlowInfo
      Parameters:
      local - the variable to ckeck
      Returns:
      true iff local is definitely unknown for this flow info
    • hasNullInfoFor

      public boolean hasNullInfoFor(LocalVariableBinding local)
      Description copied from class: FlowInfo
      Check if any null info has been recorded for a given local variable. Here even recording of 'UNKNOWN' is considered as null info.
      Specified by:
      hasNullInfoFor in class FlowInfo
    • isPotentiallyAssigned

      public boolean isPotentiallyAssigned(FieldBinding field)
      Description copied from class: FlowInfo
      Check status of potential assignment for a field.
      Specified by:
      isPotentiallyAssigned in class FlowInfo
    • isPotentiallyAssigned

      public boolean isPotentiallyAssigned(LocalVariableBinding local)
      Description copied from class: FlowInfo
      Check status of potential assignment for a local variable.
      Specified by:
      isPotentiallyAssigned in class FlowInfo
    • isPotentiallyNonNull

      public boolean isPotentiallyNonNull(LocalVariableBinding local)
      Description copied from class: FlowInfo
      Check status of potential null assignment for a local. Return true if there is a reasonable expectation that the variable be non null at this point.
      Specified by:
      isPotentiallyNonNull in class FlowInfo
      Parameters:
      local - LocalVariableBinding - the binding for the checked local
      Returns:
      true if there is a reasonable expectation that local be non null at this point
    • isPotentiallyNull

      public boolean isPotentiallyNull(LocalVariableBinding local)
      Description copied from class: FlowInfo
      Check status of potential null assignment for a local. Return true if there is a reasonable expectation that the variable be null at this point. This includes the protected null case, so as to augment diagnostics, but does not really check that someone deliberately assigned to null on any specific path
      Specified by:
      isPotentiallyNull in class FlowInfo
      Parameters:
      local - LocalVariableBinding - the binding for the checked local
      Returns:
      true if there is a reasonable expectation that local be null at this point
    • isPotentiallyUnknown

      public boolean isPotentiallyUnknown(LocalVariableBinding local)
      Description copied from class: FlowInfo
      Return true if the given local may have been assigned to an unknown value.
      Specified by:
      isPotentiallyUnknown in class FlowInfo
      Parameters:
      local - the local to check
      Returns:
      true if the given local may have been assigned to an unknown value
    • isProtectedNonNull

      public boolean isProtectedNonNull(LocalVariableBinding local)
      Description copied from class: FlowInfo
      Return true if the given local is protected by a test against a non null value.
      Specified by:
      isProtectedNonNull in class FlowInfo
      Parameters:
      local - the local to check
      Returns:
      true if the given local is protected by a test against a non null
    • isProtectedNull

      public boolean isProtectedNull(LocalVariableBinding local)
      Description copied from class: FlowInfo
      Return true if the given local is protected by a test against null.
      Specified by:
      isProtectedNull in class FlowInfo
      Parameters:
      local - the local to check
      Returns:
      true if the given local is protected by a test against null
    • markAsComparedEqualToNonNull

      public void markAsComparedEqualToNonNull(LocalVariableBinding local)
      Description copied from class: FlowInfo
      Record that a local variable got checked to be non null.
      Specified by:
      markAsComparedEqualToNonNull in class FlowInfo
      Parameters:
      local - the checked local variable
    • markAsComparedEqualToNull

      public void markAsComparedEqualToNull(LocalVariableBinding local)
      Description copied from class: FlowInfo
      Record that a local variable got checked to be null.
      Specified by:
      markAsComparedEqualToNull in class FlowInfo
      Parameters:
      local - the checked local variable
    • markAsDefinitelyAssigned

      public void markAsDefinitelyAssigned(FieldBinding field)
      Description copied from class: FlowInfo
      Record a field got definitely assigned.
      Specified by:
      markAsDefinitelyAssigned in class FlowInfo
    • markAsDefinitelyAssigned

      public void markAsDefinitelyAssigned(LocalVariableBinding local)
      Description copied from class: FlowInfo
      Record a local got definitely assigned.
      Specified by:
      markAsDefinitelyAssigned in class FlowInfo
    • markAsDefinitelyNonNull

      public void markAsDefinitelyNonNull(LocalVariableBinding local)
      Description copied from class: FlowInfo
      Record a local got definitely assigned to a non-null value.
      Specified by:
      markAsDefinitelyNonNull in class FlowInfo
    • markAsDefinitelyNull

      public void markAsDefinitelyNull(LocalVariableBinding local)
      Description copied from class: FlowInfo
      Record a local got definitely assigned to null.
      Specified by:
      markAsDefinitelyNull in class FlowInfo
    • resetNullInfo

      public void resetNullInfo(LocalVariableBinding local)
      Description copied from class: FlowInfo
      Reset all null-information about a given local.
      Specified by:
      resetNullInfo in class FlowInfo
    • markPotentiallyNullBit

      public void markPotentiallyNullBit(LocalVariableBinding local)
      Description copied from class: FlowInfo
      Record a local may have got assigned to null (set the bit on existing info).
      Specified by:
      markPotentiallyNullBit in class FlowInfo
    • markPotentiallyNonNullBit

      public void markPotentiallyNonNullBit(LocalVariableBinding local)
      Description copied from class: FlowInfo
      Record a local may have got assigned to non-null (set the bit on existing info).
      Specified by:
      markPotentiallyNonNullBit in class FlowInfo
    • markAsDefinitelyUnknown

      public void markAsDefinitelyUnknown(LocalVariableBinding local)
      Description copied from class: FlowInfo
      Record a local got definitely assigned to an unknown value.
      Specified by:
      markAsDefinitelyUnknown in class FlowInfo
    • markPotentiallyUnknownBit

      public void markPotentiallyUnknownBit(LocalVariableBinding local)
      Description copied from class: FlowInfo
      Record a local may have got assigned to unknown (set the bit on existing info).
      Specified by:
      markPotentiallyUnknownBit in class FlowInfo
    • setReachMode

      public FlowInfo setReachMode(int reachMode)
      Description copied from class: FlowInfo
      Set this flow info reach mode and return this.
      Specified by:
      setReachMode in class FlowInfo
      Parameters:
      reachMode - one of REACHABLE, UNREACHABLE_OR_DEAD, UNREACHABLE_BY_NULLANALYSIS or UNREACHABLE
      Returns:
      this, with the reach mode set to reachMode
    • mergedWith

      public UnconditionalFlowInfo mergedWith(UnconditionalFlowInfo otherInits)
      Description copied from class: FlowInfo
      Return the intersection of this and otherInits, that is one of:
      • the receiver updated in the following way:
        • intersection of definitely assigned variables,
        • union of potentially assigned variables,
        • similar operations for null,
      • or the receiver or otherInits if the other one is non reachable.
      otherInits is not affected, and is not returned either (no need to protect the result).
      Specified by:
      mergedWith in class FlowInfo
      Parameters:
      otherInits - the flow info to merge with this
      Returns:
      the intersection of this and otherInits.
    • mergeDefiniteInitsWith

      public UnconditionalFlowInfo mergeDefiniteInitsWith(UnconditionalFlowInfo otherInits)
      Specified by:
      mergeDefiniteInitsWith in class FlowInfo
    • nullInfoLessUnconditionalCopy

      public UnconditionalFlowInfo nullInfoLessUnconditionalCopy()
      Description copied from class: FlowInfo
      Return a copy of this unconditional flow info, deprived from its null info. DEAD_END is returned unmodified.
      Specified by:
      nullInfoLessUnconditionalCopy in class FlowInfo
      Returns:
      a copy of this unconditional flow info deprived from its null info
    • toString

      public String toString()
      Overrides:
      toString in class FlowInfo
    • safeInitsWhenTrue

      public FlowInfo safeInitsWhenTrue()
      Description copied from class: FlowInfo
      Return a flow info that carries the same information as the result of initsWhenTrue, but warrantied to be different from this.
      Caveat: side effects on the result may affect components of this.
      Specified by:
      safeInitsWhenTrue in class FlowInfo
      Returns:
      the result of initsWhenTrue or a copy of it
    • unconditionalCopy

      public UnconditionalFlowInfo unconditionalCopy()
      Description copied from class: FlowInfo
      Return a new flow info that holds the same information as this would after a call to unconditionalInits, but leaving this info unaffected. Moreover, the result can be modified without affecting this.
      Specified by:
      unconditionalCopy in class FlowInfo
      Returns:
      a new flow info carrying this unconditional flow info
    • unconditionalFieldLessCopy

      public UnconditionalFlowInfo unconditionalFieldLessCopy()
      Description copied from class: FlowInfo
      Return a new flow info that holds the same information as this would after a call to unconditionalInits followed by the erasure of fields specific information, but leaving this flow info unaffected.
      Specified by:
      unconditionalFieldLessCopy in class FlowInfo
      Returns:
      a new flow info carrying the unconditional flow info for local variables
    • unconditionalInits

      public UnconditionalFlowInfo unconditionalInits()
      Description copied from class: FlowInfo
      Return a flow info that merges the possible paths of execution described by this flow info. In case of an unconditional flow info, return this. In case of a conditional flow info, merge branches recursively. Caveat: this may be affected, and modifying the result may affect this.
      Specified by:
      unconditionalInits in class FlowInfo
      Returns:
      a flow info that merges the possible paths of execution described by this
    • unconditionalInitsWithoutSideEffect

      public UnconditionalFlowInfo unconditionalInitsWithoutSideEffect()
      Description copied from class: FlowInfo
      Return a new flow info that holds the same information as this would after a call to unconditionalInits, but leaving this info unaffected. Side effects on the result might affect this though (consider it as read only).
      Specified by:
      unconditionalInitsWithoutSideEffect in class FlowInfo
      Returns:
      a flow info carrying this unconditional flow info
    • resetAssignmentInfo

      public void resetAssignmentInfo(LocalVariableBinding local)
      Description copied from class: FlowInfo
      Resets the definite and potential initialization info for the given local variable
      Specified by:
      resetAssignmentInfo in class FlowInfo