diff --git a/brook-common/pom.xml b/brook-common/pom.xml
index e531221..949def8 100644
--- a/brook-common/pom.xml
+++ b/brook-common/pom.xml
@@ -50,5 +50,10 @@
com.fasterxml.jackson.core
jackson-databind
+
+
+ com.fasterxml.jackson.datatype
+ jackson-datatype-jsr310
+
\ No newline at end of file
diff --git a/brook-common/src/main/java/xyz/mytang0/brook/common/extension/ExtensionLoader.java b/brook-common/src/main/java/xyz/mytang0/brook/common/extension/ExtensionLoader.java
index a1daafe..8b9bcd3 100644
--- a/brook-common/src/main/java/xyz/mytang0/brook/common/extension/ExtensionLoader.java
+++ b/brook-common/src/main/java/xyz/mytang0/brook/common/extension/ExtensionLoader.java
@@ -1,13 +1,13 @@
package xyz.mytang0.brook.common.extension;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import xyz.mytang0.brook.common.annotation.OrderComparator;
import xyz.mytang0.brook.common.extension.injector.ExtensionInjector;
import xyz.mytang0.brook.common.extension.loading.LoadingStrategy;
import xyz.mytang0.brook.common.utils.Holder;
import xyz.mytang0.brook.common.utils.ReflectUtils;
import xyz.mytang0.brook.common.utils.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.io.InputStream;
@@ -15,13 +15,11 @@
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.net.URL;
-import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
import java.util.List;
import java.util.Map;
import java.util.Objects;
-import java.util.Optional;
import java.util.Properties;
import java.util.Set;
import java.util.TreeSet;
@@ -229,15 +227,15 @@ public List getExtensionInstances() {
return (List) this.cachedInstances.values()
.stream()
.map(Holder::get)
+ .sorted(OrderComparator.INSTANCE)
.collect(Collectors.toList());
}
// Dynamic Loading
- List instances = new ArrayList<>();
- extensionClasses.keySet().forEach(name ->
- Optional.ofNullable(this.getExtension(name))
- .ifPresent(instances::add)
- );
- return instances;
+ return extensionClasses.keySet()
+ .stream()
+ .map(this::getExtension)
+ .sorted(OrderComparator.INSTANCE)
+ .collect(Collectors.toList());
}
@SuppressWarnings("unchecked")
diff --git a/brook-common/src/main/java/xyz/mytang0/brook/common/utils/FieldUtils.java b/brook-common/src/main/java/xyz/mytang0/brook/common/utils/FieldUtils.java
index 77c79c4..81fa8d1 100644
--- a/brook-common/src/main/java/xyz/mytang0/brook/common/utils/FieldUtils.java
+++ b/brook-common/src/main/java/xyz/mytang0/brook/common/utils/FieldUtils.java
@@ -4,6 +4,7 @@
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.Map;
@@ -179,17 +180,38 @@ public static Object getValueByName(Object obj, String fieldName)
public static Field getFieldByName(Object obj, String fieldName) {
Class> superClass = obj.getClass();
+ return getFieldByName(superClass, fieldName);
+ }
- while (superClass != Object.class) {
+ public static Field getFieldByName(Class> clazz, String fieldName) {
+ while (clazz != Object.class) {
try {
- return superClass.getDeclaredField(fieldName);
+ return clazz.getDeclaredField(fieldName);
} catch (NoSuchFieldException var4) {
- superClass = superClass.getSuperclass();
+ clazz = clazz.getSuperclass();
}
}
return null;
}
+ public static void setFieldValue(Method method, Object instance, Object value) {
+ boolean isInaccessible = !method.isAccessible();
+ if (isInaccessible) {
+ method.setAccessible(true);
+ }
+ try {
+ method.invoke(instance, value);
+ } catch (IllegalAccessException
+ | IllegalArgumentException
+ | InvocationTargetException e) {
+ throw new RuntimeException(method.getName(), e);
+ } finally {
+ if (isInaccessible) {
+ method.setAccessible(false);
+ }
+ }
+ }
+
public static Map objectToMap(Object fromValue) {
return JsonUtils.convertValue(fromValue, new TypeReference