
org.opalj.av.checking.SpecificationViolation.scala Maven / Gradle / Ivy
The newest version!
/* BSD 2-Clause License - see OPAL/LICENSE for details. */
package org.opalj
package av
package checking
import scala.Console.{RED, BLUE, RESET, BOLD}
import org.opalj.br._
import org.opalj.de._
import org.opalj.br.analyses.SomeProject
/**
* Used to report deviations between the specified and the implemented architecture.
*
* @author Michael Eichberg
* @author Marco Torsello
*/
sealed trait SpecificationViolation {
final override def toString(): String = toString(useAnsiColors = false)
def toString(useAnsiColors: Boolean): String
}
/**
* Used to report deviations between the specified/expected and the implemented dependencies.
*
* @author Michael Eichberg
* @author Marco Torsello
*/
case class DependencyViolation(
project: SomeProject,
dependencyChecker: DependencyChecker,
source: VirtualSourceElement,
target: VirtualSourceElement,
dependencyType: DependencyType,
description: String
) extends SpecificationViolation {
override def toString(useAnsiColors: Boolean): String = {
val sourceLineNumber = source.getLineNumber(project).getOrElse(1)
val javaSource = s"(${source.classType.toJava}.java:${sourceLineNumber})"
val targetLineNumber = target.getLineNumber(project).getOrElse(1)
val javaTarget = s"(${target.classType.toJava}.java:${targetLineNumber})"
if (useAnsiColors)
RED + description+
" between "+BLUE + dependencyChecker.sourceEnsembles.mkString(", ") + RED+
" and "+BLUE + dependencyChecker.targetEnsembles.mkString(", ") + RESET+": "+
javaSource+" "+BOLD + dependencyType + RESET+" "+javaTarget
else
description+
" between "+dependencyChecker.sourceEnsembles.mkString(", ")+
" and "+dependencyChecker.targetEnsembles.mkString(", ")+": "+
javaSource+" "+dependencyType+" "+javaTarget
}
}
/**
* Used to report source elements that have properties that deviate from the expected ones.
*
* @author Marco Torsello
*/
case class PropertyViolation(
project: SomeProject,
propertyChecker: PropertyChecker,
source: VirtualSourceElement,
propertyType: String,
description: String
) extends SpecificationViolation {
override def toString(useAnsiColors: Boolean): String = {
val sourceLineNumber = source.getLineNumber(project).getOrElse(1)
val javaSourceClass = s"(${source.classType.toJava}.java:$sourceLineNumber)"
val javaSource =
source match {
case VirtualField(_, name, fieldType) =>
javaSourceClass + s" {${fieldType.toJava} $name}"
case VirtualMethod(_, name, descriptor) =>
if (sourceLineNumber == 1)
javaSourceClass + s" {${descriptor.toJava(name)}}"
else
javaSourceClass
case _ =>
javaSourceClass
}
if (useAnsiColors)
RED + description+
" between "+BLUE + propertyChecker.ensembles.mkString(", ") + RED+
" and "+BLUE + propertyChecker.property + RESET+": "+
javaSource+" "+BOLD + propertyType + RESET+" "+propertyChecker.property
else
description+
" between "+propertyChecker.ensembles.mkString(", ")+
" and "+propertyChecker.property+": "+
javaSource+" "+propertyType+" "+propertyChecker.property
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy