Skip to content

Commit

Permalink
Correct check of ConfigValue having a value with indexed APIs (#1320)
Browse files Browse the repository at this point in the history
  • Loading branch information
radcortez authored Feb 18, 2025
1 parent e15af82 commit 3d92d86
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,7 @@ public <T, C extends Collection<T>> C getValues(String name, Converter<T> conver

// Use indexed if comma separated empty or higher in ordinality
ConfigValue commaSeparated = getConfigValue(name);
if (commaSeparated == null || indexedOrdinality >= commaSeparated.getConfigSourceOrdinal()) {
if (commaSeparated.getValue() == null || indexedOrdinality >= commaSeparated.getConfigSourceOrdinal()) {
return collection;
} else {
return getValue(name, newCollectionConverter(converter, collectionFactory));
Expand Down Expand Up @@ -397,7 +397,7 @@ public <T> T getValue(String name, Class<T> propertyType) {

// Use indexed if comma separated empty or higher in ordinality
ConfigValue commaSeparated = getConfigValue(name);
if (commaSeparated == null || indexedOrdinality >= commaSeparated.getConfigSourceOrdinal()) {
if (commaSeparated.getValue() == null || indexedOrdinality >= commaSeparated.getConfigSourceOrdinal()) {
return (T) array;
} else {
return convertValue(commaSeparated, requireConverter(propertyType));
Expand Down Expand Up @@ -531,7 +531,7 @@ public <T> Optional<T> getOptionalValue(String name, Class<T> propertyType) {

// Use indexed if comma separated empty or higher in ordinality
ConfigValue commaSeparated = getConfigValue(name);
if (commaSeparated == null || indexedOrdinality >= commaSeparated.getConfigSourceOrdinal()) {
if (commaSeparated.getValue() == null || indexedOrdinality >= commaSeparated.getConfigSourceOrdinal()) {
return (Optional<T>) Optional.of(array);
} else {
return getValue(name, getOptionalConverter(propertyType));
Expand Down Expand Up @@ -574,7 +574,7 @@ public <T, C extends Collection<T>> Optional<C> getOptionalValues(String name, C

// Use indexed if comma separated empty or higher in ordinality
ConfigValue commaSeparated = getConfigValue(name);
if (commaSeparated == null || indexedOrdinality >= commaSeparated.getConfigSourceOrdinal()) {
if (commaSeparated.getValue() == null || indexedOrdinality >= commaSeparated.getConfigSourceOrdinal()) {
return collection.isEmpty() ? Optional.empty() : Optional.of(collection);
} else {
return getOptionalValue(name, newCollectionConverter(converter, collectionFactory));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,49 @@ void getValueArray() {
assertArrayEquals(new String[] { "one", "two", "three" }, strings);
}

@Test
void indexedNegativeOrdinal() {
SmallRyeConfig config = new SmallRyeConfigBuilder()
.withSources(config("config_ordinal", "-1000", "indexed[0]", "one", "indexed[1]", "two", "indexed[2]", "three"))
.build();

List<String> indexed = config.getValues("indexed", String.class);
assertEquals(3, indexed.size());
assertEquals("one", indexed.get(0));
assertEquals("two", indexed.get(1));
assertEquals("three", indexed.get(2));

Optional<List<String>> indexedOptional = config.getOptionalValues("indexed", String.class);
assertTrue(indexedOptional.isPresent());
indexedOptional.ifPresent(new Consumer<List<String>>() {
@Override
public void accept(final List<String> indexed) {
assertEquals(3, indexed.size());
assertEquals("one", indexed.get(0));
assertEquals("two", indexed.get(1));
assertEquals("three", indexed.get(2));
}
});

String[] array = config.getValue("indexed", String[].class);
assertEquals(3, array.length);
assertEquals("one", array[0]);
assertEquals("two", array[1]);
assertEquals("three", array[2]);

Optional<String[]> arrayOptional = config.getOptionalValue("indexed", String[].class);
assertTrue(arrayOptional.isPresent());
arrayOptional.ifPresent(new Consumer<String[]>() {
@Override
public void accept(final String[] array) {
assertEquals(3, array.length);
assertEquals("one", array[0]);
assertEquals("two", array[1]);
assertEquals("three", array[2]);
}
});
}

@Test
void getIndexedValues() {
SmallRyeConfig config = new SmallRyeConfigBuilder()
Expand Down

0 comments on commit 3d92d86

Please sign in to comment.