All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.opalj.br.analyses.OneStepAnalysis.scala Maven / Gradle / Ivy

The newest version!
/* BSD 2-Clause License - see OPAL/LICENSE for details. */
package org.opalj
package br
package analyses

/**
 * An analysis that performs all computations in one step. Only very short-running
 * analyses should use this interface as reporting progress is not supported.
 *
 * @author Michael Eichberg
 */
trait OneStepAnalysis[Source, +AnalysisResult] extends Analysis[Source, AnalysisResult] {

    /*abstract*/ def doAnalyze(
        project:       Project[Source],
        parameters:    Seq[String]     = List.empty,
        isInterrupted: () => Boolean
    ): AnalysisResult

    final override def analyze(
        project:                Project[Source],
        parameters:             Seq[String]               = List.empty,
        initProgressManagement: Int => ProgressManagement = ProgressManagement.None
    ): AnalysisResult = {

        val pm = initProgressManagement(1 /* number of steps */ )
        pm.progress(1, ProgressEvents.Start, Some(title))
        var wasKilled = false
        val result = doAnalyze(
            project, parameters, () => { wasKilled = pm.isInterrupted(); wasKilled }
        )

        if (wasKilled)
            pm.progress(-1, ProgressEvents.Killed, None)
        else
            pm.progress(1, ProgressEvents.End, None)

        result
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy