trait ConstructorSensitiveEscapeAnalysis extends AbstractEscapeAnalysis
Special handling for constructor calls, as the receiver of an constructor is always an allocation site. The constructor of Object does not escape the self reference by definition. For other constructors, the inter-procedural chain will be processed until it reaches the Object constructor or escapes. Is this the case, leastRestrictiveProperty will be set to the lower bound of the current value and the calculated escape state.
For non constructor calls, org.opalj.br.fpcf.properties.AtMost
(org.opalj.br.fpcf.properties.EscapeInCallee) of e will be
returned whenever the receiver or
a parameter is a use of defSite.
- Alphabetic
- By Inheritance
- ConstructorSensitiveEscapeAnalysis
- AbstractEscapeAnalysis
- FPCFAnalysis
- ProjectBasedAnalysis
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
Type Members
- abstract type AnalysisContext <: AbstractEscapeAnalysisContext with PropertyStoreContainer with VirtualFormalParametersContainer with DeclaredMethodsContainer
- Definition Classes
- ConstructorSensitiveEscapeAnalysis → AbstractEscapeAnalysis
- abstract type AnalysisState <: AbstractEscapeAnalysisState
- Definition Classes
- AbstractEscapeAnalysis
Abstract Value Members
- abstract def createContext(entity: (Context, Entity), defSitePC: ValueOrigin, targetMethod: Method): AnalysisContext
- Attributes
- protected[this]
- Definition Classes
- AbstractEscapeAnalysis
- abstract def createState: AnalysisState
- Attributes
- protected[this]
- Definition Classes
- AbstractEscapeAnalysis
- abstract def determineEscapeOfFP(fp: (Context, VirtualFormalParameter)): ProperPropertyComputationResult
- Attributes
- protected[this]
- Definition Classes
- AbstractEscapeAnalysis
- abstract def handleArrayStore(arrayStore: ArrayStore[V])(implicit context: AnalysisContext, state: AnalysisState): Unit
Same as handlePutField.
Same as handlePutField.
- Attributes
- protected[this]
- Definition Classes
- AbstractEscapeAnalysis
- 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]
- Definition Classes
- AbstractEscapeAnalysis
- abstract def handleInvokedynamicMethodCall(call: InvokedynamicMethodCall[V])(implicit context: AnalysisContext, state: AnalysisState): Unit
- Attributes
- protected[this]
- Definition Classes
- AbstractEscapeAnalysis
- abstract def handleNonVirtualAndNonConstructorCall(call: NonVirtualMethodCall[V])(implicit context: AnalysisContext, state: AnalysisState): Unit
- Attributes
- protected[this]
- Definition Classes
- AbstractEscapeAnalysis
- 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]
- Definition Classes
- AbstractEscapeAnalysis
- 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]
- Definition Classes
- AbstractEscapeAnalysis
- abstract def handleParameterOfConstructor(call: NonVirtualMethodCall[V])(implicit context: AnalysisContext, state: AnalysisState): Unit
- Attributes
- protected[this]
- Definition Classes
- AbstractEscapeAnalysis
- 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]
- Definition Classes
- AbstractEscapeAnalysis
- 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]
- Definition Classes
- AbstractEscapeAnalysis
- 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]
- Definition Classes
- AbstractEscapeAnalysis
- 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]
- Definition Classes
- AbstractEscapeAnalysis
- 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]
- Definition Classes
- AbstractEscapeAnalysis
- 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]
- Definition Classes
- AbstractEscapeAnalysis
- 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]
- Definition Classes
- AbstractEscapeAnalysis
- 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]
- Definition Classes
- ConstructorSensitiveEscapeAnalysis → AbstractEscapeAnalysis
- 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]
- Definition Classes
- AbstractEscapeAnalysis
- 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.
- Definition Classes
- AbstractEscapeAnalysis
- def determineEscapeOfDS(dsl: (Context, DefinitionSiteLike)): ProperPropertyComputationResult
- Attributes
- protected[this]
- Definition Classes
- AbstractEscapeAnalysis
- 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]
- Definition Classes
- AbstractEscapeAnalysis
- 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]
- Definition Classes
- AbstractEscapeAnalysis
- 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]
- Definition Classes
- AbstractEscapeAnalysis
- 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]
- Definition Classes
- AbstractEscapeAnalysis
- 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]
- Definition Classes
- AbstractEscapeAnalysis
- def handleThisLocalOfConstructor(call: NonVirtualMethodCall[V])(implicit context: AnalysisContext, state: AnalysisState): Unit
- Attributes
- protected[this]
- Definition Classes
- ConstructorSensitiveEscapeAnalysis → AbstractEscapeAnalysis
- 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]
- Definition Classes
- AbstractEscapeAnalysis
- final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
- def toString(): String
- Definition Classes
- AnyRef → Any
- implicit val typeIterator: TypeIterator
- Attributes
- protected[this]
- Definition Classes
- AbstractEscapeAnalysis
- lazy val virtualFormalParameters: VirtualFormalParameters
- Attributes
- protected[this]
- Definition Classes
- AbstractEscapeAnalysis
- 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