trait AbstractEscapeAnalysis extends FPCFAnalysis
An abstract escape analysis for a org.opalj.tac.common.DefinitionSiteLike or a org.opalj.br.analyses.VirtualFormalParameter. The entity and all other information required by the analyses such as the defSite, uses or the code correspond to this entity are given as AbstractEscapeAnalysisContext.
It is assumed that the tac code has a flat hierarchy, i.e. it is real three address code.
The control-flow is intended to be: Client calls determineEscape. This method extracts the information for the given entity and calls doDetermineEscape.
- Alphabetic
- By Inheritance
- AbstractEscapeAnalysis
- FPCFAnalysis
- ProjectBasedAnalysis
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
Type Members
- abstract type AnalysisContext <: AbstractEscapeAnalysisContext
- abstract type AnalysisState <: AbstractEscapeAnalysisState
Abstract Value Members
- abstract def createContext(entity: (Context, Entity), defSitePC: ValueOrigin, targetMethod: Method): AnalysisContext
- Attributes
- protected[this]
- abstract def createState: AnalysisState
- Attributes
- protected[this]
- abstract def determineEscapeOfFP(fp: (Context, VirtualFormalParameter)): ProperPropertyComputationResult
- Attributes
- protected[this]
- abstract def handleArrayStore(arrayStore: ArrayStore[V])(implicit context: AnalysisContext, state: AnalysisState): Unit
Same as handlePutField.
Same as handlePutField.
- Attributes
- protected[this]
- abstract def handleInvokedynamicFunctionCall(call: InvokedynamicFunctionCall[V], hasAssignment: Boolean)(implicit context: AnalysisContext, state: AnalysisState): Unit
Passing an entity as argument to a call, will make the entity at most org.opalj.br.fpcf.properties.EscapeInCallee.
Passing an entity as argument to a call, will make the entity at most org.opalj.br.fpcf.properties.EscapeInCallee.
This analysis only uses intra-procedural knowledge and does not take the behavior of the called method(s) into consideration.
- Attributes
- protected[this]
- abstract def handleInvokedynamicMethodCall(call: InvokedynamicMethodCall[V])(implicit context: AnalysisContext, state: AnalysisState): Unit
- Attributes
- protected[this]
- abstract def handleNonVirtualAndNonConstructorCall(call: NonVirtualMethodCall[V])(implicit context: AnalysisContext, state: AnalysisState): Unit
- Attributes
- protected[this]
- abstract def handleNonVirtualFunctionCall(call: NonVirtualFunctionCall[V], hasAssignment: Boolean)(implicit context: AnalysisContext, state: AnalysisState): Unit
Passing an entity as argument to a call, will make the entity at most org.opalj.br.fpcf.properties.EscapeInCallee.
Passing an entity as argument to a call, will make the entity at most org.opalj.br.fpcf.properties.EscapeInCallee.
This analysis only uses intra-procedural knowledge and does not take the behavior of the called method(s) into consideration.
- Attributes
- protected[this]
- abstract def handleOtherKindsOfExpressions(expr: Expr[V])(implicit context: AnalysisContext, state: AnalysisState): Unit
All basic analyses only care about function calls for org.opalj.tac.Assignment or org.opalj.tac.ExprStmt, but if a future analysis requires handling other expressions, it can override this method.
All basic analyses only care about function calls for org.opalj.tac.Assignment or org.opalj.tac.ExprStmt, but if a future analysis requires handling other expressions, it can override this method.
- Attributes
- protected[this]
- abstract def handleParameterOfConstructor(call: NonVirtualMethodCall[V])(implicit context: AnalysisContext, state: AnalysisState): Unit
- Attributes
- protected[this]
- abstract def handlePutField(putField: PutField[V])(implicit context: AnalysisContext, state: AnalysisState): Unit
Putting an entity into a field can lead to an escape if the base of that field escapes or let its field escape.
Putting an entity into a field can lead to an escape if the base of that field escapes or let its field escape.
This analysis only uses intra-procedural knowledge and does not take the behavior of the called method(s) into consideration.
- Attributes
- protected[this]
- abstract def handleStaticFunctionCall(call: StaticFunctionCall[V], hasAssignment: Boolean)(implicit context: AnalysisContext, state: AnalysisState): Unit
Passing an entity as argument to a call, will make the entity at most org.opalj.br.fpcf.properties.EscapeInCallee.
Passing an entity as argument to a call, will make the entity at most org.opalj.br.fpcf.properties.EscapeInCallee.
This analysis only uses intra-procedural knowledge and does not take the behavior of the called method(s) into consideration.
- Attributes
- protected[this]
- abstract def handleStaticMethodCall(call: StaticMethodCall[V])(implicit context: AnalysisContext, state: AnalysisState): Unit
Passing an entity as argument to a call, will make the entity at most org.opalj.br.fpcf.properties.EscapeInCallee.
Passing an entity as argument to a call, will make the entity at most org.opalj.br.fpcf.properties.EscapeInCallee.
This analysis only uses intra-procedural knowledge and does not take the behavior of the called method(s) into consideration.
- Attributes
- protected[this]
- abstract def handleThisLocalOfConstructor(call: NonVirtualMethodCall[V])(implicit context: AnalysisContext, state: AnalysisState): Unit
- Attributes
- protected[this]
- abstract def handleThrow(aThrow: Throw[V])(implicit context: AnalysisContext, state: AnalysisState): Unit
Thrown exceptions that are not caught would lead to a org.opalj.br.fpcf.properties.EscapeViaAbnormalReturn.
Thrown exceptions that are not caught would lead to a org.opalj.br.fpcf.properties.EscapeViaAbnormalReturn. This analysis does not check whether the exception is caught or not.
- Attributes
- protected[this]
- See also
org.opalj.tac.fpcf.analyses.escape.ExceptionAwareEscapeAnalysis which overrides this very simple behavior.
- abstract def handleVirtualFunctionCall(call: VirtualFunctionCall[V], hasAssignment: Boolean)(implicit context: AnalysisContext, state: AnalysisState): Unit
Passing an entity as argument to a call, will make the entity at most org.opalj.br.fpcf.properties.EscapeInCallee.
Passing an entity as argument to a call, will make the entity at most org.opalj.br.fpcf.properties.EscapeInCallee.
This analysis only uses intra-procedural knowledge and does not take the behavior of the called method(s) into consideration.
- Attributes
- protected[this]
- abstract def handleVirtualMethodCall(call: VirtualMethodCall[V])(implicit context: AnalysisContext, state: AnalysisState): Unit
Passing an entity as argument to a call, will make the entity at most org.opalj.br.fpcf.properties.EscapeInCallee.
Passing an entity as argument to a call, will make the entity at most org.opalj.br.fpcf.properties.EscapeInCallee.
This analysis only uses intra-procedural knowledge and does not take the behavior of the called method(s) into consideration.
- Attributes
- protected[this]
- abstract val project: SomeProject
- Definition Classes
- ProjectBasedAnalysis
Concrete 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
- def analyzeTAC()(implicit context: AnalysisContext, state: AnalysisState): ProperPropertyComputationResult
Analyzes each TAC statement of the given method.
Analyzes each TAC statement of the given method. This methods assumes that there is at least an intermediate result for the TAC present.
- Attributes
- protected[this]
- final def asInstanceOf[T0]: T0
- Definition Classes
- Any
- def c(someEPS: SomeEPS)(implicit context: AnalysisContext, state: AnalysisState): ProperPropertyComputationResult
A continuation function, that handles the updates of property values for entity
other
.A continuation function, that handles the updates of property values for entity
other
.- Attributes
- protected[this]
- 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()
- implicit val declaredMethods: DeclaredMethods
- Attributes
- protected[this]
- def determineEscape(e: Entity): ProperPropertyComputationResult
Extracts information from the given entity and should call doDetermineEscape afterwards.
Extracts information from the given entity and should call doDetermineEscape afterwards. For some entities a result might be returned immediately.
- def determineEscapeOfDS(dsl: (Context, DefinitionSiteLike)): ProperPropertyComputationResult
- Attributes
- protected[this]
- def doDetermineEscape(implicit context: AnalysisContext, state: AnalysisState): ProperPropertyComputationResult
Retrieves the TAC and starts the analysis, if there is already a (intermediate) version of it.
Retrieves the TAC and starts the analysis, if there is already a (intermediate) version of it. Otherwise, continue when a TAC is available.
- Attributes
- protected[this]
- final def eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- def equals(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef → Any
- final def getClass(): Class[_ <: AnyRef]
- Definition Classes
- AnyRef → Any
- Annotations
- @native() @IntrinsicCandidate()
- def handleAssignment(assignment: Assignment[V])(implicit context: AnalysisContext, state: AnalysisState): Unit
org.opalj.tac.Assignments can contain function calls, so they have to handle them.
org.opalj.tac.Assignments can contain function calls, so they have to handle them.
- Attributes
- protected[this]
- def handleExprStmt(exprStmt: ExprStmt[V])(implicit context: AnalysisContext, state: AnalysisState): Unit
org.opalj.tac.ExprStmt can contain function calls, so they have to handle them.
org.opalj.tac.ExprStmt can contain function calls, so they have to handle them.
- Attributes
- protected[this]
- def handleExpression(expr: Expr[V], hasAssignment: Boolean)(implicit context: AnalysisContext, state: AnalysisState): Unit
Currently, the only expressions that can lead to an escape are the different kinds of function calls.
Currently, the only expressions that can lead to an escape are the different kinds of function calls. So this method delegates to them. In the case of another expression org.opalj.tac.fpcf.analyses.escape.AbstractEscapeAnalysis.handleOtherKindsOfExpressions will be called.
- Attributes
- protected[this]
- def handleNonVirtualMethodCall(call: NonVirtualMethodCall[V])(implicit context: AnalysisContext, state: AnalysisState): Unit
Passing an entity as argument to a call, will make the entity at most org.opalj.br.fpcf.properties.EscapeInCallee.
Passing an entity as argument to a call, will make the entity at most org.opalj.br.fpcf.properties.EscapeInCallee.
This analysis only uses intra-procedural knowledge and does not take the behavior of the called method(s) into consideration.
- Attributes
- protected[this]
- def hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native() @IntrinsicCandidate()
- final def isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- implicit final def logContext: LogContext
- Definition Classes
- ProjectBasedAnalysis
- 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
- implicit final val propertyStore: PropertyStore
- Definition Classes
- FPCFAnalysis
- final def ps: PropertyStore
- Definition Classes
- FPCFAnalysis
- def returnResult(implicit context: AnalysisContext, state: AnalysisState): ProperPropertyComputationResult
This method is called, after the entity has been analyzed.
This method is called, after the entity has been analyzed. If there is no dependee left or the entity escapes globally, the result is returned directly. Otherwise, the
maybe
version of the current escape state is returned as org.opalj.fpcf.InterimResult.- Attributes
- protected[this]
- final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
- def toString(): String
- Definition Classes
- AnyRef → Any
- implicit val typeIterator: TypeIterator
- Attributes
- protected[this]
- lazy val virtualFormalParameters: VirtualFormalParameters
- Attributes
- protected[this]
- 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