class IDEAnalysis[Fact <: IDEFact, Value <: IDEValue, Statement, Callable <: Entity] extends FPCFAnalysis
This is a solver for IDE problems. It is based on the exhaustive algorithm that was presented in the original IDE paper from 1996 as base. The paper can be found here. Naming of methods and variables follows the naming used in the original paper as far as possible. The original solver is enhanced with several extensions/features as part of the master thesis of Robin Körkemeier. The most important enhancements are:
- The possibility to specify additional analysis seeds (allowing for more precise analysis results).
- The possibility to provide custom summaries for arbitrary call statements (allowing to retain precision in presence of unavailable code as well as to improve performance).
- On-demand solver execution, to fully integrate into OPAL as a lazy analysis (improves performance especially in interacting analysis scenarios; does not affect how IDE problems are specified).
- The possibility to define interacting IDE analysis (resp. IDE problems that make use of analysis interaction) using the blackboard architecture provided by OPAL.
For a simple example IDE problem definition have a look at LinearConstantPropagationProblem in the TAC module of
this project. It implements a basic linear constant propagation as described in the original IDE paper.
For an example of interacting IDE problems have a look at LCPOnFieldsProblem and
LinearConstantPropagationProblemExtended. These are an extension of the basic linear constant propagation and
capable of detecting and tracking constants in fields. They also are an example for cyclic analysis interaction.
- Source
- IDEAnalysis.scala
- Alphabetic
- By Inheritance
- IDEAnalysis
- FPCFAnalysis
- ProjectBasedAnalysis
- FPCFAnalysis
- ProjectBasedAnalysis
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
Instance Constructors
- new IDEAnalysis(project: SomeProject, problem: IDEProblem[Fact, Value, Statement, Callable], icfg: ICFG[Statement, Callable], propertyMetaInformation: IDEPropertyMetaInformation[Fact, Value, Statement, Callable])
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
- 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 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 hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native() @IntrinsicCandidate()
- val icfg: ICFG[Statement, Callable]
- 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 def p: SomeProject
- Definition Classes
- ProjectBasedAnalysis → ProjectBasedAnalysis
- def performAnalysis(entity: Entity): ProperPropertyComputationResult
Run the IDE solver and calculate (and return) the result.
Run the IDE solver and calculate (and return) the result. This method should only be triggered in combination with the IDE proxy!
- entity
Expected to be
None. Other values do not cause errors but will only return empty (temporary) results.- returns
a result for each statement of the target callables plus one result for each target callable itself (combining the results of all exit statements)
- val problem: IDEProblem[Fact, Value, Statement, Callable]
- val project: SomeProject
- Definition Classes
- IDEAnalysis → ProjectBasedAnalysis → ProjectBasedAnalysis
- val propertyMetaInformation: IDEPropertyMetaInformation[Fact, Value, Statement, Callable]
- implicit final val propertyStore: PropertyStore
- Definition Classes
- FPCFAnalysis
- final def ps: PropertyStore
- Definition Classes
- FPCFAnalysis
- final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
- def toString(): String
- Definition Classes
- AnyRef → Any
- 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