64 OptionDescriptor get(String optionName); 65 66 /** 67 * Create a union options descriptor out of multiple given descriptors. The operation 68 * descriptors are not checked for duplicate keys. The option descriptors are iterated in 69 * declaration order. 70 * 71 * @since 1.0 72 */ 73 static OptionDescriptors createUnion(OptionDescriptors... descriptors) { 74 if (descriptors.length == 0) { 75 return EMPTY; 76 } else if (descriptors.length == 1) { 77 return descriptors[0]; 78 } else { 79 return new UnionOptionDescriptors(descriptors); 80 } 81 } 82 83 /** 84 * Create an {@link OptionDescriptors} instance from a list. The option descriptors 85 * implementation is backed by a {@link LinkedHashMap} that preserves ordering. 86 * 87 * @since 1.0 88 */ 89 static OptionDescriptors create(List<OptionDescriptor> descriptors) { 90 if (descriptors == null || descriptors.isEmpty()) { 91 return EMPTY; 92 } 93 return new OptionDescriptorsMap(descriptors); 94 } 95 } 96 97 class OptionDescriptorsMap implements OptionDescriptors { 98 99 final Map<String, OptionDescriptor> descriptors = new LinkedHashMap<>(); 100 101 OptionDescriptorsMap(List<OptionDescriptor> descriptorList) { 102 for (OptionDescriptor descriptor : descriptorList) { 103 descriptors.put(descriptor.getName(), descriptor); | 64 OptionDescriptor get(String optionName); 65 66 /** 67 * Create a union options descriptor out of multiple given descriptors. The operation 68 * descriptors are not checked for duplicate keys. The option descriptors are iterated in 69 * declaration order. 70 * 71 * @since 1.0 72 */ 73 static OptionDescriptors createUnion(OptionDescriptors... descriptors) { 74 if (descriptors.length == 0) { 75 return EMPTY; 76 } else if (descriptors.length == 1) { 77 return descriptors[0]; 78 } else { 79 return new UnionOptionDescriptors(descriptors); 80 } 81 } 82 83 /** 84 * {@inheritDoc} 85 * 86 * @since 1.0 87 */ 88 @Override 89 Iterator<OptionDescriptor> iterator(); 90 91 /** 92 * Create an {@link OptionDescriptors} instance from a list. The option descriptors 93 * implementation is backed by a {@link LinkedHashMap} that preserves ordering. 94 * 95 * @since 1.0 96 */ 97 static OptionDescriptors create(List<OptionDescriptor> descriptors) { 98 if (descriptors == null || descriptors.isEmpty()) { 99 return EMPTY; 100 } 101 return new OptionDescriptorsMap(descriptors); 102 } 103 } 104 105 class OptionDescriptorsMap implements OptionDescriptors { 106 107 final Map<String, OptionDescriptor> descriptors = new LinkedHashMap<>(); 108 109 OptionDescriptorsMap(List<OptionDescriptor> descriptorList) { 110 for (OptionDescriptor descriptor : descriptorList) { 111 descriptors.put(descriptor.getName(), descriptor); |