SpecifiedArgument.ceylon

"A specified named argument, that is, a [[Specification]].
 
 Examples:
 
     groupSeparators = false;
     initialCapacity = 256;"
shared class SpecifiedArgument(specification)
        extends NamedArgument() {
    
    "The specification of the argument.
     
     (Must not be qualified, i. e., [[Specification.qualifier]] must be [[null]].)"
    shared Specification specification;
    
    "Specification must not be qualified"
    assert (!specification.qualifier exists);
    
    shared actual [Specification] children = [specification];
    
    shared actual Result transform<out Result>(Transformer<Result> transformer)
            => transformer.transformSpecifiedArgument(this);
    
    shared actual void visit(Visitor visitor)
            => visitor.visitSpecifiedArgument(this);

    shared actual Boolean equals(Object that) {
        if (is SpecifiedArgument that) {
            return specification == that.specification;
        } else {
            return false;
        }
    }
    
    shared actual Integer hash
            => 31 * specification.hash;
    
    shared SpecifiedArgument copy(Specification specification = this.specification) {
        value ret = SpecifiedArgument(specification);
        copyExtraInfoTo(ret);
        return ret;
    }
}