Contents > 8 Defining Custom Design Metrics and Rules > 8.2 Definition of Sets > 8.2.1 Projection > Attribute "recurse" Attribute "recurse"

The recurse attribute known from metrics projections is also available for sets. By setting recurse="true", SDMetrics recursively calculates and takes the union of sets for compatible elements in the relation. The element is compatible if it is of the same type as the domain of the metric, or a subtype or supertype and the set is also defined for the type.

For example, we can easily change the definition of the set of children classes from above to yield the element set of descendents classes:

<set name="Descendents" domain="class"> 
  <description>The set of descendents of a class.</description>
  <projection relation="genparent" target="generalization"
              element="genchild" eltype="class" recurse="true"/>
For each child class, the set "Descendents" is evaluated, and the union of all these sets is taken. The child classes themselves also are included in the set. This effectively produces the set of descendents for a class.