Class Slices
- All Implemented Interfaces:
DescribedIterable<Slice>
,HasDescription
,CanOverrideDescription<Slices>
,Iterable<Slice>
Slice
for tests of dependencies between different domain packages, e.g. to avoid cycles.
Refer to SlicesRuleDefinition
for further info on how to form an ArchRule
to test slices.-
Nested Class Summary
Modifier and TypeClassDescriptionstatic class
Nested classes/interfaces inherited from interface com.tngtech.archunit.base.DescribedIterable
DescribedIterable.From
-
Method Summary
Modifier and TypeMethodDescriptionAllows to adjust the description of this object.static Slices.Transformer
assignedFrom
(SliceAssignment sliceAssignment) iterator()
static Slices.Transformer
Supports partitioning a set ofJavaClasses
into different slices by matching the supplied package identifier.namingSlices
(String pattern) Allows the naming of single slices, where back references to the matching pattern can be denoted by '$' followed by capturing group number.stream()
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface java.lang.Iterable
forEach, spliterator
-
Method Details
-
iterator
-
stream
-
as
Description copied from interface:CanOverrideDescription
Allows to adjust the description of this object. Note that this method will not modify the current object, but instead return a new object with adjusted description.- Specified by:
as
in interfaceCanOverrideDescription<Slices>
- Parameters:
description
- The description the result of this method will hold- Returns:
- A new equivalent object with adjusted description
-
getDescription
- Specified by:
getDescription
in interfaceHasDescription
-
namingSlices
Allows the naming of single slices, where back references to the matching pattern can be denoted by '$' followed by capturing group number.
E.g.namingSlices("Slice $1")
would name a slice matching'*..service.(*)..*'
against'com.some.company.service.hello.something'
as 'Slice hello'.
Likewise, if the slices were created by aSliceAssignment
(compareassignedFrom(SliceAssignment)
), then the back reference refers to the n-th element of the identifier.- Parameters:
pattern
- The naming pattern, e.g. 'Slice $1'- Returns:
- New (equivalent) slices with adjusted description for each single slice
-
matching
Supports partitioning a set ofJavaClasses
into different slices by matching the supplied package identifier. For identifier syntax, seePackageMatcher
.
The slicing is done according to capturing groups (thus if none are contained in the identifier, no more than a single slice will be the result). For exampleSuppose there are three classes:
com.example.slice.one.SomeClass
com.example.slice.one.AnotherClass
com.example.slice.two.YetAnotherClass
If slices are created by specifying
Slices.of(classes).byMatching("..slice.(*)..")
then the result will be two slices, the slice where the capturing group is 'one' and the slice where the capturing group is 'two'.- Parameters:
packageIdentifier
- The identifier to match against- Returns:
- Slices partitioned according the supplied package identifier
-
assignedFrom
@PublicAPI(usage=ACCESS) public static Slices.Transformer assignedFrom(SliceAssignment sliceAssignment) Supports partitioning a set ofJavaClasses
into differentSlices
by the suppliedSliceAssignment
. This is basically a mappingJavaClass
->SliceIdentifier
, i.e. if theSliceAssignment
returns the sameSliceIdentifier
for two classes they will end up in the same slice. AJavaClass
will be ignored within the slices, if itsSliceIdentifier
isSliceIdentifier.ignore()
. For exampleSuppose there are four classes:
com.somewhere.SomeClass
com.somewhere.AnotherClass
com.other.elsewhere.YetAnotherClass
com.randomly.anywhere.AndYetAnotherClass
If slices are created by specifying
Slices.of(classes).assignedFrom(customAssignment)
and thecustomAssignment
maps
com.somewhere -> SliceIdentifier.of("somewhere")
com.other.elsewhere -> SliceIdentifier.of("elsewhere")
com.randomly -> SliceIdentifier.ignore()
then the result will be two slices, identified by the single strings 'somewhere' (containingSomeClass
andAnotherClass
) and 'elsewhere' (containingYetAnotherClass
). The classAndYetAnotherClass
will be missing from all slices.- Parameters:
sliceAssignment
- The assignment ofJavaClass
toSliceIdentifier
- Returns:
- Slices partitioned according the supplied assignment
-