mutableAPINoOverride(fileName, type, name) ::= <<
<fileName> with(<type> element);

<fileName> without(<type> element);

<fileName> withAll(<name>Iterable elements);

<fileName> withoutAll(<name>Iterable elements);
>>

mutableAPI(fileName, type, name) ::= <<
@Override
<fileName> with(<type> element);

@Override
<fileName> without(<type> element);

@Override
<fileName> withAll(<name>Iterable elements);

@Override
<fileName> withoutAll(<name>Iterable elements);
>>

immutableAPI(fileName, type, name) ::= <<
@Override
<fileName> newWith(<type> element);

@Override
<fileName> newWithout(<type> element);

@Override
<fileName> newWithAll(<name>Iterable elements);

@Override
<fileName> newWithoutAll(<name>Iterable elements);
>>

immutableAPINoOverride(fileName, type, name) ::= <<
<fileName> newWith(<type> element);

<fileName> newWithout(<type> element);

<fileName> newWithAll(<name>Iterable elements);

<fileName> newWithoutAll(<name>Iterable elements);
>>

sharedAPI(fileName, name) ::= <<
@Override
<fileName> select(<name>Predicate predicate);

@Override
<fileName> reject(<name>Predicate predicate);
>>
