class Specification extends AnyRef
A specification of a project's architectural constraints.
Usage
First define the ensembles, then the rules and at last specify the class files that should be analyzed. The rules will then automatically be evaluated.
The intended way to create a specification is to create a new anonymous Specification class that contains the specification of the architecture. Afterwards the specification object can be used to get the list of architectural violations.
new Specification(project) { ensemble('Number) { "mathematics.Number*" } ensemble('Rational) { "mathematics.Rational*" } ensemble('Mathematics) { "mathematics.Mathematics*" } ensemble('Example) { "mathematics.Example*" } 'Example is_only_allowed_to (USE, 'Mathematics) }
Note
One ensemble is predefined: Specification.empty
it represents an ensemble that
contains no source elements and which can, e.g., be used to specify that no "real"
ensemble is allowed to depend on a specific ensemble.
- Self Type
- Specification
- Source
- Specification.scala
- Alphabetic
- By Inheritance
- Specification
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
Instance Constructors
- new Specification(classFiles: Iterable[(ClassFile, URL)], useAnsiColors: Boolean = false)
- new Specification(project: Project[URL])
Creates a new
Specification
for the givenProject
.Creates a new
Specification
for the givenProject
. Error messages will not use ANSI colors. - new Specification(project: Project[URL], useAnsiColors: Boolean)
Type Members
- case class GlobalIncomingConstraint(targetEnsemble: Symbol, sourceEnsembles: Seq[Symbol]) extends DependencyChecker with Product with Serializable
- case class LocalOutgoingAnnotatedWithConstraint(sourceEnsemble: Symbol, annotationPredicates: Seq[AnnotationPredicate], property: String, matchAny: Boolean) extends PropertyChecker with Product with Serializable
Checks whether all elements in the source ensemble are annotated with the given annotation.
Checks whether all elements in the source ensemble are annotated with the given annotation.
Example Scenario
If every element in the ensemble
ex
should be annotated withey
and the source elementx
which belongs to ensembleex
has no annotation that matchesey
then a SpecificationViolation is generated.- sourceEnsemble
An ensemble containing elements, that should be annotated.
- annotationPredicates
The annotations that should match.
- property
A description of the property that is checked.
- matchAny
true if only one match is needed, false if all annotations should match
- case class LocalOutgoingNotAllowedConstraint(dependencyTypes: Set[DependencyType], sourceEnsemble: Symbol, targetEnsembles: Seq[Symbol]) extends DependencyChecker with Product with Serializable
Forbids the given local dependencies between a specific source ensemble and several target ensembles.
Forbids the given local dependencies between a specific source ensemble and several target ensembles.
Example Scenario
If the ensemble
ex
is not allowed to useey
and the source elementx
which belongs to ensembleex
has one if the given dependencies on a source element belonging toey
then a SpecificationViolation is generated. - case class LocalOutgoingOnlyAllowedConstraint(dependencyTypes: Set[DependencyType], sourceEnsemble: Symbol, targetEnsembles: Seq[Symbol]) extends DependencyChecker with Product with Serializable
Allows only the given local dependencies between a specific source ensemble and several target ensembles.
Allows only the given local dependencies between a specific source ensemble and several target ensembles.
Example Scenario
If the ensemble
ex
is only allowed to throw exceptionsey
and the source elementx
which belongs to ensembleex
throws an exception not belonging toey
then a SpecificationViolation is generated. - case class LocalOutgoingShouldExtendConstraint(sourceEnsemble: Symbol, targetEnsembles: Seq[Symbol]) extends PropertyChecker with Product with Serializable
Checks whether all elements in the source ensemble extends any of the given elements.
Checks whether all elements in the source ensemble extends any of the given elements. The source ensemble should contain only class elements otherwise a SpecificationError will be thrown.
- sourceEnsemble
An ensemble containing classes, that should implement the given method.
- targetEnsembles
Ensembles containing elements, that should be extended by the given classes.
- case class LocalOutgoingShouldImplementMethodConstraint(sourceEnsemble: Symbol, methodPredicate: SourceElementPredicate[Method]) extends PropertyChecker with Product with Serializable
Checks whether all elements in the source ensemble implement the given method.
Checks whether all elements in the source ensemble implement the given method. The source ensemble should contain only class elements otherwise a SpecificationError will be thrown.
- sourceEnsemble
An ensemble containing classes, that should implement the given method.
- methodPredicate
The method to match.
- case class SpecificationFactory(contextEnsembleSymbol: Symbol) extends Product with Serializable
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
- def EnsembleID(ensembleName: String): Symbol
Creates a
Symbol
with the given name.Creates a
Symbol
with the given name.This method is primarily useful if ensemble names are created programmatically and the code should communicate that the created name identifies an ensemble. E.g., instead of
for (moduleID <- 1 to 10) Symbol("module"+moduleID)
it is now possible to write
for (moduleID <- 1 to 10) EnsembleID("module"+moduleID)
which better communicates the intention.
- implicit def EnsembleSymbolToSpecificationElementFactory(ensembleSymbol: Symbol): SpecificationFactory
- Attributes
- protected
- implicit def EnsembleToSourceElementMatcher(ensembleSymbol: Symbol): SourceElementsMatcher
- Attributes
- protected
- implicit def FileToClassFileProvider(file: File): Seq[(ClassFile, URL)]
Returns the class files stored at the given location.
- implicit def StringToSourceElementMatcher(matcher: String): SourceElementsMatcher
Facilitates the definition of common source element matchers by means of common String patterns.
Facilitates the definition of common source element matchers by means of common String patterns.
- Annotations
- @throws(classOf[SpecificationError])
- final val USE: Set[DependencyType]
The set of all org.opalj.de.DependencyTypes.
- def analyze(): Set[SpecificationViolation]
- var architectureCheckers: List[ArchitectureChecker]
- final def asInstanceOf[T0]: T0
- Definition Classes
- Any
- def classes(matcher: Regex): SourceElementsMatcher
- def clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.CloneNotSupportedException]) @native() @IntrinsicCandidate()
- val empty: Symbol
Represents an ensemble that contains no source elements.
Represents an ensemble that contains no source elements. This can be used, e.g., to specify that a (set of) specific source element(s) is not allowed to depend on any other source elements (belonging to the project).
- def ensemble(ensembleSymbol: Symbol)(sourceElementsMatcher: SourceElementsMatcher): Unit
Adds a new ensemble definition to this architecture specification.
Adds a new ensemble definition to this architecture specification.
- Annotations
- @throws(classOf[SpecificationError])
- Exceptions thrown
SpecificationError
If the ensemble is already defined.
- def ensembleExtentsToString: String
Can be called after the evaluation of the extents of the ensembles to print out the current configuration.
- def ensembleToString(ensembleSymbol: Symbol): String
Returns a textual representation of an ensemble.
- def ensembles: Map[Symbol, (SourceElementsMatcher, Set[VirtualSourceElement])]
The set of defined ensembles.
The set of defined ensembles. An ensemble is identified by a symbol, a query which matches source elements and the project's source elements that are matched. The latter is available only after analyze was called.
- 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()
- def incomingDependencies: Map[VirtualSourceElement, Set[(VirtualSourceElement, DependencyType)]]
Mapping between a source element and those source elements that depend on it.
Mapping between a source element and those source elements that depend on it.
This mapping is automatically created when analyze is called.
- final def isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- 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()
- def outgoingDependencies: Map[VirtualSourceElement, Map[VirtualSourceElement, DependencyTypesSet]]
Mapping between a source element and those source elements it depends on/uses.
Mapping between a source element and those source elements it depends on/uses.
This mapping is automatically created when analyze is called.
- val project: Project[URL]
- final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
- def toString(): String
- Definition Classes
- AnyRef → Any
- val useAnsiColors: 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