- private static final class ImmutableChoiceNode
- extends AbstractImmutableDataContainerNode<NodeIdentifier, ChoiceNode> implements ChoiceNode {
- ImmutableChoiceNode(final NodeIdentifier nodeIdentifier, final Map<NodeIdentifier, Object> children) {
- super(children, nodeIdentifier);
+ private static final class ImmutableChoiceNode extends AbstractChoiceNode {
+ private final @NonNull NodeIdentifier name;
+ private final @NonNull Map<NodeIdentifier, Object> children;
+
+ ImmutableChoiceNode(final NodeIdentifier name, final Map<NodeIdentifier, Object> children) {
+ this.name = requireNonNull(name);
+ // FIXME: move this to caller
+ this.children = ImmutableOffsetMap.unorderedCopyOf(children);
+ }
+
+ @Override
+ public NodeIdentifier name() {
+ return name;
+ }
+
+ @Override
+ public DataContainerChild childByArg(final NodeIdentifier child) {
+ return LazyLeafOperations.getChild(children, child);
+ }
+
+ @Override
+ public Collection<DataContainerChild> body() {
+ return new LazyValues(children);
+ }
+
+ @Override
+ public int size() {
+ return children.size();
+ }
+
+ @Override
+ protected int valueHashCode() {
+ return children.hashCode();