
org.opalj.br.fpcf.FPCFEagerAnalysisScheduler.scala Maven / Gradle / Ivy
The newest version!
/* BSD 2-Clause License - see OPAL/LICENSE for details. */
package org.opalj
package br
package fpcf
import org.opalj.fpcf.ComputationType
import org.opalj.fpcf.EagerComputation
import org.opalj.fpcf.PropertyBounds
import org.opalj.fpcf.PropertyStore
import org.opalj.br.analyses.SomeProject
/**
* Factory for FPCF analyses which should be directly started/scheduled.
*
* @author Michael Eichberg
*/
trait FPCFEagerAnalysisScheduler extends FPCFAnalysisScheduler {
final override def computationType: ComputationType = EagerComputation
final override def derivesLazily: Option[PropertyBounds] = None
final override def schedule(ps: PropertyStore, i: InitializationData): FPCFAnalysis = {
start(ps.context(classOf[SomeProject]), ps, i)
}
/**
* Starts the analysis for the given `project`. This method is typically implicitly
* called by the [[FPCFAnalysesManager]].
*/
def start(p: SomeProject, i: InitializationData): FPCFAnalysis = {
start(p, p.get(PropertyStoreKey), i)
}
/**
* Called when a schedule is executed and when this analysis shall register itself
* with the property store using
* [[org.opalj.fpcf.PropertyStore.scheduleEagerComputationForEntity]] or a variant thereof.
* This method is typically implicitly called by the [[org.opalj.br.fpcf.FPCFAnalysesManager]].
*
* @note This analysis must not call `registerTriggeredComputation` or
* `registerLazyPropertyComputation`.
*/
def start(p: SomeProject, ps: PropertyStore, i: InitializationData): FPCFAnalysis
}
/**
* A simple eager analysis scheduler for those analyses that do not perform special initialization
* steps.
*/
// TODO Rename => Simple...
trait BasicFPCFEagerAnalysisScheduler extends FPCFEagerAnalysisScheduler {
override type InitializationData = Null
override def init(p: SomeProject, ps: PropertyStore): Null = null
override def beforeSchedule(p: SomeProject, ps: PropertyStore): Unit = {}
override def afterPhaseScheduling(ps: PropertyStore, analysis: FPCFAnalysis): Unit = {}
override def afterPhaseCompletion(
p: SomeProject,
ps: PropertyStore,
analysis: FPCFAnalysis
): Unit = {}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy