class L2FieldAssignabilityAnalysis extends AbstractFieldAssignabilityAnalysis with FPCFAnalysis
Determines the assignability of a field.
- Source
- L2FieldAssignabilityAnalysis.scala
- Note
Requires that the 3-address code's expressions are not deeply nested.
- Alphabetic
- By Inheritance
- L2FieldAssignabilityAnalysis
- AbstractFieldAssignabilityAnalysis
- FPCFAnalysis
- ProjectBasedAnalysis
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
Type Members
- trait AbstractFieldAssignabilityAnalysisState extends AnyRef
- Definition Classes
- AbstractFieldAssignabilityAnalysis
- type AnalysisState = State
- Definition Classes
- L2FieldAssignabilityAnalysis → AbstractFieldAssignabilityAnalysis
- case class State(field: Field) extends AbstractFieldAssignabilityAnalysisState with Product with Serializable
- type V = DUVar[ValueInformation]
- Definition Classes
- AbstractFieldAssignabilityAnalysis
Value Members
- final def !=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def ##: Int
- Definition Classes
- AnyRef → Any
- final def ==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def asInstanceOf[T0]: T0
- Definition Classes
- Any
- def c(eps: SomeEPS)(implicit state: AnalysisState): ProperPropertyComputationResult
Continuation function handling updates to the FieldPrematurelyRead property or to the purity property of the method that initializes a (potentially) lazy initialized field.
Continuation function handling updates to the FieldPrematurelyRead property or to the purity property of the method that initializes a (potentially) lazy initialized field.
- Definition Classes
- AbstractFieldAssignabilityAnalysis
- final def ch: ClassHierarchy
- Definition Classes
- ProjectBasedAnalysis
- implicit final def classHierarchy: ClassHierarchy
- Definition Classes
- ProjectBasedAnalysis
- def clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.CloneNotSupportedException]) @native() @IntrinsicCandidate()
- final val closedPackages: ClosedPackages
- Definition Classes
- AbstractFieldAssignabilityAnalysis
- val considerLazyInitialization: Boolean
- def createResult()(implicit state: AnalysisState): ProperPropertyComputationResult
- Definition Classes
- AbstractFieldAssignabilityAnalysis
- def createState(field: Field): AnalysisState
- Definition Classes
- L2FieldAssignabilityAnalysis → AbstractFieldAssignabilityAnalysis
- implicit final val declaredMethods: DeclaredMethods
- Definition Classes
- AbstractFieldAssignabilityAnalysis
- final val definitionSites: DefinitionSites
- Definition Classes
- AbstractFieldAssignabilityAnalysis
- def determineLazyInitialization(writeIndex: Int, defaultValues: Set[Any], method: Method, taCode: TACode[TACMethodParameter, V])(implicit state: AnalysisState): FieldAssignability
Determines the kind of lazy initialization of a given field in the given method through a given field write.
- def doDetermineFieldAssignability(entity: Entity): ProperPropertyComputationResult
- Definition Classes
- AbstractFieldAssignabilityAnalysis
- def dominates(potentiallyDominatorIndex: Int, potentiallyDominatedIndex: Int, taCode: TACode[TACMethodParameter, V]): Boolean
Determines whether the basic block of a given index dominates the basic block of the other index or is executed before the other index in the case of both indexes belonging to the same basic block.
- final def eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- def equals(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef → Any
- final val fieldAccessInformation: FieldAccessInformation
- Definition Classes
- AbstractFieldAssignabilityAnalysis
- def findCatchesAndThrows(tacCode: TACode[TACMethodParameter, V]): (List[(Int, IntTrieSet)], List[(Int, IntTrieSet)])
This method returns the information about catch blocks, throw statements and return nodes
This method returns the information about catch blocks, throw statements and return nodes
- returns
The second element of the tuple returns: The throw statements: (the pc, the definitionSites, the bb of the throw statement)
- Note
It requires still determined taCode
- def findGuards(fieldWrite: Int, defaultValues: Set[Any], taCode: TACode[TACMethodParameter, V])(implicit state: State): List[(Int, Int, Int, Int)]
Finds the indexes of the guarding if-Statements for a lazy initialization, the index of the first statement executed if the field does not have its default value and the index of the field read used for the guard and the index of the field-read.
- def findMonitors(fieldWrite: Int, tacCode: TACode[TACMethodParameter, V])(implicit state: State): (Option[Int], Option[Int])
Searches the closest monitor enter and exit to the field write.
Searches the closest monitor enter and exit to the field write.
- returns
the index of the monitor enter and exit
- final def getClass(): Class[_ <: AnyRef]
- Definition Classes
- AnyRef → Any
- Annotations
- @native() @IntrinsicCandidate()
- def getDefaultValues()(implicit state: AnalysisState): Set[Any]
Returns the initialization value of a given type.
Returns the initialization value of a given type.
- Definition Classes
- AbstractFieldAssignabilityAnalysis
- def getPredecessors(node: CFGNode, visited: Set[CFGNode]): List[BasicBlock]
Returns all predecessor BasicBlocks of a CFGNode.
- def getSuccessors(node: CFGNode, visited: Set[CFGNode]): List[BasicBlock]
Returns all successors BasicBlocks of a CFGNode
- def getTACAIAndCallers(method: Method, pcs: PCs)(implicit state: AnalysisState): Option[(TACode[TACMethodParameter, V], Callers)]
Returns TACode and Callers for a method if available, registering dependencies as necessary.
Returns TACode and Callers for a method if available, registering dependencies as necessary.
- Definition Classes
- AbstractFieldAssignabilityAnalysis
- def handleEscapeProperty(ep: EOptionP[(Context, DefinitionSite), EscapeProperty])(implicit state: AnalysisState): Boolean
Handles the influence of an escape property on the field immutability.
Handles the influence of an escape property on the field immutability.
- returns
true if the object - on which a field write occurred - escapes, false otherwise.
- Definition Classes
- AbstractFieldAssignabilityAnalysis
- Note
(Re-)Adds dependees as necessary.
- def hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native() @IntrinsicCandidate()
- def isAssignable(writeIndex: Int, defaultValues: Set[Any], method: Method, taCode: TACode[TACMethodParameter, V])(implicit state: AnalysisState): Boolean
Handles the lazy initialization determination for a field write in a given method
Handles the lazy initialization determination for a field write in a given method
- returns
true if no lazy initialization was recognized
- def isFieldValueReturned(write: FieldWriteAccessStmt[V], writeIndex: Int, readIndex: Int, taCode: TACode[TACMethodParameter, V], guardIndexes: List[(Int, Int, Int, Int)])(implicit state: State): Boolean
Checks that the returned value is definitely read from the field.
- def isGuard(ifStmt: If[V], defaultValues: Set[Any], code: Array[Stmt[V]], tacCode: TACode[TACMethodParameter, V])(implicit state: State): Boolean
Determines if an if-Statement is actually a guard for the current field, i.e.
Determines if an if-Statement is actually a guard for the current field, i.e. it compares the current field to the default value.
- final def isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- def isReadOfCurrentField(expr: Expr[V], tacCode: TACode[TACMethodParameter, V], index: Int)(implicit state: State): Boolean
Checks if an expression is a field read of the currently analyzed field.
Checks if an expression is a field read of the currently analyzed field. For instance fields, the read must be on the
this
reference. - def isTransitivePredecessor(possiblePredecessor: CFGNode, node: CFGNode): Boolean
Determines whether a node is a transitive predecessor of another node.
- implicit final def logContext: LogContext
- Definition Classes
- ProjectBasedAnalysis
- def methodUpdatesField(method: Method, taCode: TACode[TACMethodParameter, V], callers: Callers, pcs: PCs)(implicit state: AnalysisState): Boolean
Analyzes field writes for a single method, returning false if the field may still be effectively final and true otherwise.
Analyzes field writes for a single method, returning false if the field may still be effectively final and true otherwise.
- Definition Classes
- L2FieldAssignabilityAnalysis → AbstractFieldAssignabilityAnalysis
- final def ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- final def notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @IntrinsicCandidate()
- final def notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @IntrinsicCandidate()
- implicit final def p: SomeProject
- Definition Classes
- ProjectBasedAnalysis
- val project: SomeProject
- Definition Classes
- L2FieldAssignabilityAnalysis → ProjectBasedAnalysis
- implicit final val propertyStore: PropertyStore
- Definition Classes
- FPCFAnalysis
- final def ps: PropertyStore
- Definition Classes
- FPCFAnalysis
- def referenceHasNotEscaped(ref: V, stmts: Array[Stmt[V]], method: Method, callers: Callers)(implicit state: AnalysisState): Boolean
Checks whether the object reference of a PutField does not escape (except for being returned).
Checks whether the object reference of a PutField does not escape (except for being returned).
- Definition Classes
- AbstractFieldAssignabilityAnalysis
- final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
- def toString(): String
- Definition Classes
- AnyRef → Any
- final val typeExtensibility: (ObjectType) => Answer
- Definition Classes
- AbstractFieldAssignabilityAnalysis
- implicit final val typeIterator: TypeIterator
- Definition Classes
- AbstractFieldAssignabilityAnalysis
- final def wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
Deprecated Value Members
- def finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.Throwable]) @Deprecated
- Deprecated