From ff15ba118b4fa288cf64d869b51ed048adef3654 Mon Sep 17 00:00:00 2001 From: hsgamer Date: Sat, 13 Apr 2024 19:54:28 +0700 Subject: [PATCH] remove DefaultArrayConverterProvider Array is too complex for reflections --- .../impl/DefaultArrayConverterProvider.java | 53 ------------------- .../manager/DefaultConverterManager.java | 24 +++++---- .../config/proxy/ConfigInvocationHandler.java | 3 +- 3 files changed, 15 insertions(+), 65 deletions(-) delete mode 100644 config/config-annotation/src/main/java/me/hsgamer/hscore/config/annotation/converter/impl/DefaultArrayConverterProvider.java diff --git a/config/config-annotation/src/main/java/me/hsgamer/hscore/config/annotation/converter/impl/DefaultArrayConverterProvider.java b/config/config-annotation/src/main/java/me/hsgamer/hscore/config/annotation/converter/impl/DefaultArrayConverterProvider.java deleted file mode 100644 index 02e6945c4..000000000 --- a/config/config-annotation/src/main/java/me/hsgamer/hscore/config/annotation/converter/impl/DefaultArrayConverterProvider.java +++ /dev/null @@ -1,53 +0,0 @@ -package me.hsgamer.hscore.config.annotation.converter.impl; - -import me.hsgamer.hscore.config.annotation.converter.Converter; -import me.hsgamer.hscore.config.annotation.converter.ConverterProvider; -import me.hsgamer.hscore.config.annotation.converter.manager.DefaultConverterManager; - -import java.util.Arrays; -import java.util.Collection; -import java.util.Optional; - -/** - * A {@link Converter} to convert an array - */ -public class DefaultArrayConverterProvider implements ConverterProvider { - @Override - public Optional getConverter(Class type) { - return Optional.ofNullable(type.getComponentType()) - .map(DefaultConverterManager::getConverter) - .map(converter -> new Converter() { - @Override - public Object convert(Object raw) { - if (raw == null) { - return null; - } - if (raw instanceof Object[]) { - return Arrays.stream((Object[]) raw) - .map(converter::convert) - .toArray(); - } else if (raw instanceof Collection) { - return ((Collection) raw).stream() - .map(converter::convert) - .toArray(); - } else { - return null; - } - } - - @Override - public Object convertToRaw(Object value) { - if (value == null) { - return null; - } - if (value instanceof Object[]) { - return Arrays.stream((Object[]) value) - .map(converter::convertToRaw) - .toArray(); - } else { - return null; - } - } - }); - } -} diff --git a/config/config-annotation/src/main/java/me/hsgamer/hscore/config/annotation/converter/manager/DefaultConverterManager.java b/config/config-annotation/src/main/java/me/hsgamer/hscore/config/annotation/converter/manager/DefaultConverterManager.java index e4408ed33..6f5d1a997 100644 --- a/config/config-annotation/src/main/java/me/hsgamer/hscore/config/annotation/converter/manager/DefaultConverterManager.java +++ b/config/config-annotation/src/main/java/me/hsgamer/hscore/config/annotation/converter/manager/DefaultConverterManager.java @@ -21,7 +21,6 @@ public final class DefaultConverterManager { static { registerProvider(new PrimitiveConverterProvider()); - registerProvider(new DefaultArrayConverterProvider()); registerConverter(String.class, new SimpleConverter(Objects::toString)); registerConverter(URI.class, StringConverter.of(URI::create, URI::toString)); registerConverter(URL.class, StringConverter.of(s -> { @@ -78,18 +77,21 @@ public static void unregisterConverter(Type type) { */ public static Converter getConverterIfDefault(Type type, Converter converter) { if (converter instanceof DefaultConverter) { - return CONVERTER_MAP.computeIfAbsent(type, key -> { - if (key instanceof Class) { - Class clazz = (Class) key; - for (ConverterProvider provider : PROVIDERS) { - Optional optionalConverter = provider.getConverter(clazz); - if (optionalConverter.isPresent()) { - return optionalConverter.get(); - } + if (CONVERTER_MAP.containsKey(type)) { + return CONVERTER_MAP.get(type); + } + + if (type instanceof Class) { + Class clazz = (Class) type; + for (ConverterProvider provider : PROVIDERS) { + Optional optionalConverter = provider.getConverter(clazz); + if (optionalConverter.isPresent()) { + Converter finalConverter = optionalConverter.get(); + CONVERTER_MAP.put(type, finalConverter); + return finalConverter; } } - return converter; - }); + } } return converter; } diff --git a/config/config-proxy/src/main/java/me/hsgamer/hscore/config/proxy/ConfigInvocationHandler.java b/config/config-proxy/src/main/java/me/hsgamer/hscore/config/proxy/ConfigInvocationHandler.java index 11d0cc597..beab2cdb9 100644 --- a/config/config-proxy/src/main/java/me/hsgamer/hscore/config/proxy/ConfigInvocationHandler.java +++ b/config/config-proxy/src/main/java/me/hsgamer/hscore/config/proxy/ConfigInvocationHandler.java @@ -173,7 +173,8 @@ public Object invoke(Object proxy, Method method, Object[] args) throws Throwabl } if (nodes.containsKey(methodName)) { Object value = nodes.get(methodName).getValue(); - if ((isPrimitiveOrWrapper(method.getReturnType()) && isPrimitiveOrWrapper(value.getClass())) || method.getReturnType().isInstance(value)) { + if ((isPrimitiveOrWrapper(method.getReturnType()) && isPrimitiveOrWrapper(value.getClass())) || method.getReturnType().isInstance(value) + ) { return value; } }