class FlowRecordingIDEProblem[Fact <: IDEFact, Value <: IDEValue, Statement, Callable <: Entity] extends IDEProblem[Fact, Value, Statement, Callable]
Wrapper class for a normal IDE problem for debugging purposes. Records the flow paths the IDE solver takes for a given base problem as graph and writes it to a file in DOT format.
- Alphabetic
- By Inheritance
- FlowRecordingIDEProblem
- IDEProblem
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
Instance Constructors
- new FlowRecordingIDEProblem(baseProblem: IDEProblem[Fact, Value, Statement, Callable], icfg: ICFG[Statement, Callable], recorderMode: FlowRecorderMode = FlowRecorderModes.NODE_AS_STMT, uniqueFlowsOnly: Boolean = true, recordEdgeFunctions: Boolean = false)
- baseProblem
the base problem that defines the flows and edge functions that should be analyzed
- uniqueFlowsOnly
whether to drop or to keep duplicated flows
- recordEdgeFunctions
whether to record edge functions too or just stick with the flow
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
- val baseProblem: IDEProblem[Fact, Value, Statement, Callable]
- def clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.CloneNotSupportedException]) @native() @IntrinsicCandidate()
- implicit def edgeFunctionToFinalEdgeFunction(edgeFunction: EdgeFunction[Value]): EdgeFunctionResult[Value]
- Definition Classes
- IDEProblem
- val emptyFlowFunction: EmptyFlowFunction[Fact]
Empty flow function that can be used when implementing problems
Empty flow function that can be used when implementing problems
- Attributes
- protected
- Definition Classes
- IDEProblem
- final def eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- def equals(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef → Any
- def getAdditionalSeeds(stmt: Statement, callee: Callable)(implicit propertyStore: PropertyStore): Set[Fact]
Add additional facts that the analysis should be seeded with.
Add additional facts that the analysis should be seeded with. Traditionally, IDE starts with the null fact at the start statements of the callable. E.g. additional seeds can be used for adding facts about the parameters of the analyzed callable.
- stmt
the start statement
- callee
the analyzed callable
- Definition Classes
- FlowRecordingIDEProblem → IDEProblem
- def getAdditionalSeedsEdgeFunction(stmt: Statement, fact: Fact, callee: Callable)(implicit propertyStore: PropertyStore): EdgeFunctionResult[Value]
Generate an edge function for a flow starting with an additional seeds.
Generate an edge function for a flow starting with an additional seeds.
- stmt
the start statement
- fact
the start fact
- callee
the analyzed callable
- Definition Classes
- FlowRecordingIDEProblem → IDEProblem
- def getCallEdgeFunction(callSite: Statement, callSiteFact: Fact, calleeEntry: Statement, calleeEntryFact: Fact, callee: Callable)(implicit propertyStore: PropertyStore): EdgeFunctionResult[Value]
Generate an edge function for a call flow.
Generate an edge function for a call flow.
- callSite
where the call flow starts (always a call statement)
- callSiteFact
the fact the flow starts with
- calleeEntry
where the callable starts (the statement which the callable is started with)
- calleeEntryFact
the fact the flow ends with
- callee
the callable that is called
- Definition Classes
- FlowRecordingIDEProblem → IDEProblem
- def getCallFlowFunction(callSite: Statement, callSiteFact: Fact, calleeEntry: Statement, callee: Callable)(implicit propertyStore: PropertyStore): FlowFunction[Fact]
Generate a flow function for a call flow.
Generate a flow function for a call flow.
- callSite
where the call flow starts (always a call statement)
- callSiteFact
the fact the flow starts with
- calleeEntry
where the callable starts (the statement which the callable is started with)
- callee
the callable that is called
- Definition Classes
- FlowRecordingIDEProblem → IDEProblem
- def getCallToReturnEdgeFunction(callSite: Statement, callSiteFact: Fact, callee: Callable, returnSite: Statement, returnSiteFact: Fact)(implicit propertyStore: PropertyStore): EdgeFunctionResult[Value]
Generate an edge function for a call-to-return flow.
Generate an edge function for a call-to-return flow.
- callSite
where the call-to-return flow starts (always a call statement)
- callSiteFact
the fact the flow starts with
- callee
the callable this flow is about
- returnSite
where the call-to-return flow ends (e.g. the next statement after the call)
- returnSiteFact
the fact the flow ends with
- Definition Classes
- FlowRecordingIDEProblem → IDEProblem
- def getCallToReturnFlowFunction(callSite: Statement, callSiteFact: Fact, callee: Callable, returnSite: Statement)(implicit propertyStore: PropertyStore): FlowFunction[Fact]
Generate a flow function for a call-to-return flow.
Generate a flow function for a call-to-return flow.
- callSite
where the call-to-return flow starts (always a call statement)
- callSiteFact
the fact the flow starts with
- callee
the callable this flow is about
- returnSite
where the call-to-return flow ends (e.g. the next statement after the call)
- Definition Classes
- FlowRecordingIDEProblem → IDEProblem
- final def getClass(): Class[_ <: AnyRef]
- Definition Classes
- AnyRef → Any
- Annotations
- @native() @IntrinsicCandidate()
- def getNormalEdgeFunction(source: Statement, sourceFact: Fact, target: Statement, targetFact: Fact)(implicit propertyStore: PropertyStore): EdgeFunctionResult[Value]
Generate an edge function for a normal flow.
Generate an edge function for a normal flow.
- source
where the normal flow starts
- sourceFact
the fact the flow starts with
- target
where the normal flow ends
- targetFact
the fact the flow ends with
- Definition Classes
- FlowRecordingIDEProblem → IDEProblem
- def getNormalFlowFunction(source: Statement, sourceFact: Fact, target: Statement)(implicit propertyStore: PropertyStore): FlowFunction[Fact]
Generate a flow function for a normal flow.
Generate a flow function for a normal flow.
- source
where the normal flow starts
- sourceFact
the fact the flow starts with
- target
where the normal flow ends
- Definition Classes
- FlowRecordingIDEProblem → IDEProblem
- def getPrecomputedFlowFunction(callSite: Statement, callSiteFact: Fact, returnSite: Statement)(implicit propertyStore: PropertyStore): FlowFunction[Fact]
Generate a flow function that yields the facts that are valid when going through the unknown callable and reaching the return site.
Generate a flow function that yields the facts that are valid when going through the unknown callable and reaching the return site. Similar to a call-to-return flow (cfg. getCallToReturnFlowFunction) but capturing the effects that flow through the possible callables.
- callSite
where the flow starts (always a call statement)
- callSiteFact
the fact the flow starts with
- returnSite
where the flow ends (e.g. the next statement after the call)
- Definition Classes
- FlowRecordingIDEProblem → IDEProblem
- Note
In this type of precomputed flow the callable is unknown. Thus, the call-to-return flow is not applied and needs to be integrated into this flow.
- def getPrecomputedFlowFunction(callSite: Statement, callSiteFact: Fact, callee: Callable, returnSite: Statement)(implicit propertyStore: PropertyStore): FlowFunction[Fact]
Generate a flow function that yields the facts that are valid when going through the callable and reaching the return site.
Generate a flow function that yields the facts that are valid when going through the callable and reaching the return site. Similar to a call-to-return flow (cfg. getCallToReturnFlowFunction) but capturing the effects that flow through the callable.
- callSite
where the flow starts (always a call statement)
- callSiteFact
the fact the flow starts with
- callee
the callable this flow is about
- returnSite
where the flow ends (e.g. the next statement after the call)
- Definition Classes
- FlowRecordingIDEProblem → IDEProblem
- Note
In this type of precomputed flow the callable is known. Thus, the call-to-return flow can be applied normally and does not need to be integrated in this flow.
- def getPrecomputedSummaryFunction(callSite: Statement, callSiteFact: Fact, returnSite: Statement, returnSiteFact: Fact)(implicit propertyStore: PropertyStore): EdgeFunctionResult[Value]
Generate a summary function from a call-site node up to a return-site node (just what summary functions are in the foundation paper, but in one step and for all callables that are possible call targets).
Generate a summary function from a call-site node up to a return-site node (just what summary functions are in the foundation paper, but in one step and for all callables that are possible call targets).
- callSite
where the flow starts (always a call statement)
- callSiteFact
the fact the flow starts with
- returnSite
where the flow ends (e.g. the next statement after the call)
- returnSiteFact
the fact the flow ends with
- Definition Classes
- FlowRecordingIDEProblem → IDEProblem
- Note
In this type of precomputed flow the callable is unknown. Thus, the call-to-return flow is not applied and needs to be integrated into this flow.
- def getPrecomputedSummaryFunction(callSite: Statement, callSiteFact: Fact, callee: Callable, returnSite: Statement, returnSiteFact: Fact)(implicit propertyStore: PropertyStore): EdgeFunctionResult[Value]
Generate a summary function from a call-site node up to a return-site node (just what summary functions are in the foundation paper, but in one step).
Generate a summary function from a call-site node up to a return-site node (just what summary functions are in the foundation paper, but in one step).
- callSite
where the flow starts (always a call statement)
- callSiteFact
the fact the flow starts with
- callee
the callable the flow is about
- returnSite
where the flow ends (e.g. the next statement after the call)
- returnSiteFact
the fact the flow ends with
- Definition Classes
- FlowRecordingIDEProblem → IDEProblem
- Note
In this type of precomputed flow the callable is known. Thus, the call-to-return flow can be applied normally and does not need to be integrated in this flow.
- def getReturnEdgeFunction(calleeExit: Statement, calleeExitFact: Fact, callee: Callable, returnSite: Statement, returnSiteFact: Fact, callSite: Statement, callSiteFact: Fact)(implicit propertyStore: PropertyStore): EdgeFunctionResult[Value]
Generate an edge function for a return flow.
Generate an edge function for a return flow.
- calleeExit
where the return flow starts (the statement the callable is exited with)
- calleeExitFact
the fact the flow starts with
- callee
the callable that is returned from
- returnSite
where the return flow ends (e.g. the next statement after the call in the callers code)
- returnSiteFact
the fact the flow ends with
- callSite
corresponding to the return flow
- callSiteFact
corresponding to the return flow
- Definition Classes
- FlowRecordingIDEProblem → IDEProblem
- def getReturnFlowFunction(calleeExit: Statement, calleeExitFact: Fact, callee: Callable, returnSite: Statement, callSite: Statement, callSiteFact: Fact)(implicit propertyStore: PropertyStore): FlowFunction[Fact]
Generate a flow function for a return flow.
Generate a flow function for a return flow.
- calleeExit
where the return flow starts (the statement the callable is exited with)
- calleeExitFact
the fact the flow starts with
- callee
the callable that is returned from
- returnSite
where the return flow ends (e.g. the next statement after the call in the callers code)
- callSite
corresponding to the return flow
- callSiteFact
corresponding to the return flow
- Definition Classes
- FlowRecordingIDEProblem → IDEProblem
- def hasPrecomputedFlowAndSummaryFunction(callSite: Statement, callSiteFact: Fact, callee: Callable)(implicit propertyStore: PropertyStore): Boolean
Whether precomputed flow and summary functions for a
(callSite, callSiteFact, callee)combination exist (resp.Whether precomputed flow and summary functions for a
(callSite, callSiteFact, callee)combination exist (resp. can be generated).- callSite
where the flow starts
- callSiteFact
the fact the flow starts with
- callee
the callable this flow is about
- Definition Classes
- FlowRecordingIDEProblem → IDEProblem
- def hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native() @IntrinsicCandidate()
- val icfg: ICFG[Statement, Callable]
- final def isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- val lattice: MeetLattice[Value]
The lattice that orders the used values
The lattice that orders the used values
- Definition Classes
- FlowRecordingIDEProblem → IDEProblem
- 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()
- val nullFact: Fact
The null fact to use.
The null fact to use. Also used to bootstrap the analysis at the entry points.
- Definition Classes
- FlowRecordingIDEProblem → IDEProblem
- val recordEdgeFunctions: Boolean
- val recorderMode: FlowRecorderMode
- def startRecording(writer: Writer): Unit
Start recording
Start recording
- writer
to write the graph to
- def stopRecording(): Writer
Stop recording and finish writing
- final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
- def toString(): String
- Definition Classes
- AnyRef → Any
- val uniqueFlowsOnly: Boolean
- 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
- Deprecated