1   /*
2    * SPDX-FileCopyrightText: none
3    * SPDX-License-Identifier: CC0-1.0
4    */
5   
6   package dev.metaschema.core.metapath.function;
7   
8   import java.util.Objects;
9   
10  import dev.metaschema.core.metapath.type.ISequenceType;
11  import dev.metaschema.core.qname.IEnhancedQName;
12  import edu.umd.cs.findbugs.annotations.NonNull;
13  
14  class ArgumentImpl implements IArgument {
15    @NonNull
16    private final IEnhancedQName name;
17    @NonNull
18    private final ISequenceType sequenceType;
19  
20    protected ArgumentImpl(@NonNull IEnhancedQName name, @NonNull ISequenceType sequenceType) {
21      this.name = name;
22      this.sequenceType = sequenceType;
23    }
24  
25    @Override
26    public IEnhancedQName getName() {
27      return name;
28    }
29  
30    @Override
31    public ISequenceType getSequenceType() {
32      return sequenceType;
33    }
34  
35    @Override
36    public String toSignature() {
37      StringBuilder builder = new StringBuilder();
38  
39      // name
40      builder.append(getName().toEQName())
41          .append(" as ")
42          .append(getSequenceType().toSignature());
43  
44      return builder.toString();
45    }
46  
47    @Override
48    public int hashCode() {
49      return Objects.hash(name, sequenceType);
50    }
51  
52    @Override
53    public boolean equals(Object obj) {
54      if (this == obj) {
55        return true;
56      }
57      if (obj == null || getClass() != obj.getClass()) {
58        return false;
59      }
60      ArgumentImpl other = (ArgumentImpl) obj;
61      return Objects.equals(name, other.name) && Objects.equals(sequenceType, other.sequenceType);
62    }
63  }