Skip to content

Commit

Permalink
Reuse MapPropertySource for DynamicValuesPropertySource implementation
Browse files Browse the repository at this point in the history
Closes gh-32110
  • Loading branch information
jhoeller committed Jan 29, 2024
1 parent 08e6df8 commit 7e5efdd
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 21 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2018 the original author or authors.
* Copyright 2002-2024 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -40,4 +40,16 @@ public static <T> T resolve(@Nullable Supplier<T> supplier) {
return (supplier != null ? supplier.get() : null);
}

/**
* Resolve a given {@code Supplier}, getting its result or immediately
* returning the given Object as-is if not a {@code Supplier}.
* @param candidate the candidate to resolve (potentially a {@code Supplier})
* @return a supplier's result or the given Object as-is
* @since 6.1.4
*/
@Nullable
public static Object resolve(@Nullable Object candidate) {
return (candidate instanceof Supplier<?> supplier ? supplier.get() : null);
}

}
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2023 the original author or authors.
* Copyright 2002-2024 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand All @@ -19,38 +19,27 @@
import java.util.Map;
import java.util.function.Supplier;

import org.springframework.core.env.EnumerablePropertySource;
import org.springframework.util.StringUtils;
import org.springframework.core.env.MapPropertySource;
import org.springframework.util.function.SupplierUtils;

/**
* {@link EnumerablePropertySource} backed by a map with dynamically supplied
* values.
* {@link MapPropertySource} backed by a map with dynamically supplied values.
*
* @author Phillip Webb
* @author Sam Brannen
* @author Juergen Hoeller
* @since 5.2.5
*/
class DynamicValuesPropertySource extends EnumerablePropertySource<Map<String, Supplier<Object>>> {
class DynamicValuesPropertySource extends MapPropertySource {

@SuppressWarnings({"rawtypes", "unchecked"})
DynamicValuesPropertySource(String name, Map<String, Supplier<Object>> valueSuppliers) {
super(name, valueSuppliers);
super(name, (Map) valueSuppliers);
}


@Override
public Object getProperty(String name) {
Supplier<Object> valueSupplier = this.source.get(name);
return (valueSupplier != null ? valueSupplier.get() : null);
}

@Override
public boolean containsProperty(String name) {
return this.source.containsKey(name);
}

@Override
public String[] getPropertyNames() {
return StringUtils.toStringArray(this.source.keySet());
return SupplierUtils.resolve(super.getProperty(name));
}

}

0 comments on commit 7e5efdd

Please sign in to comment.