don't create a new Function every time Configurable#getConfig is called

This commit is contained in:
PiggyPiglet
2026-02-27 20:29:17 +08:00
parent d6adb4bd1b
commit 18190c8b38
2 changed files with 17 additions and 5 deletions

View File

@@ -98,7 +98,7 @@ public final class PlaceholderAPIConfig {
} }
@NotNull @NotNull
public Map<String, Object> expansions() { public ConcurrentHashMap<String, Object> expansions() {
return expansions; return expansions;
} }

View File

@@ -24,6 +24,7 @@ import at.helpch.placeholderapi.PlaceholderAPIPlugin;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/** /**
* Implementing this interface allows {@link at.helpch.placeholderapi.expansion.PlaceholderExpansion PlaceholderExpansions} * Implementing this interface allows {@link at.helpch.placeholderapi.expansion.PlaceholderExpansion PlaceholderExpansions}
@@ -43,20 +44,31 @@ import java.util.Map;
* @author Ryan McCarthy * @author Ryan McCarthy
*/ */
public interface Configurable<T> { public interface Configurable<T> {
@NotNull @NotNull
Class<T> provideConfigType(); Class<T> provideConfigType();
@NotNull @NotNull
T provideDefault(); T provideDefault();
@SuppressWarnings("unchecked")
@NotNull @NotNull
default T getConfig() { default T getConfig() {
if (this instanceof PlaceholderExpansion exp) { if (!(this instanceof PlaceholderExpansion exp)) {
return (T) PlaceholderAPIPlugin.instance().configManager().config().expansions().computeIfAbsent(exp.getIdentifier(), s -> provideDefault()); return provideDefault();
} }
return provideDefault(); final ConcurrentHashMap<String, Object> expansionConfigs = PlaceholderAPIPlugin.instance().configManager().config().expansions();
final String key = exp.getIdentifier();
final Object existing = expansionConfigs.get(key);
if (existing != null) {
return (T) existing;
}
final T def = provideDefault();
final Object conf = expansionConfigs.putIfAbsent(key, def);
return (T) (conf != null ? conf : def);
} }
// /** // /**