diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
index 01a8d92..b51eb70 100644
--- a/.github/workflows/publish.yml
+++ b/.github/workflows/publish.yml
@@ -36,11 +36,19 @@ jobs:
packages: write
steps:
- uses: actions/checkout@v2
+ - uses: actions-ecosystem/action-get-latest-tag@v1
+ id: latest-tag
+ - uses: jungwinter/split@v2
+ id: version
+ with:
+ msg: ${{ steps.latest-tag.outputs.tag }}
+ separator: '.'
- uses: actions/setup-java@v2
with:
java-version: '18'
distribution: 'adopt'
- name: Publish package
run: mvn --batch-mode deploy
+ if: ${{ steps.version.outputs.length == 3 }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.github/workflows/verify.yml b/.github/workflows/verify.yml
index 0c06eaf..6ff1331 100644
--- a/.github/workflows/verify.yml
+++ b/.github/workflows/verify.yml
@@ -1,5 +1,8 @@
name: Verify Process
+env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
on:
pull_request:
branches: [ master ]
diff --git a/ELDependenci-plugin/pom.xml b/ELDependenci-plugin/pom.xml
index 672e6e0..e6e5bb1 100644
--- a/ELDependenci-plugin/pom.xml
+++ b/ELDependenci-plugin/pom.xml
@@ -5,7 +5,7 @@
eldependenci
org.eldependenci
- 0.1.7
+ 0.1.8-SNAPSHOT
4.0.0
diff --git a/ELDependenci-plugin/src/main/java/com/ericlam/mc/eld/ELDTypeListener.java b/ELDependenci-plugin/src/main/java/com/ericlam/mc/eld/ELDTypeListener.java
index ca0068c..c38f40b 100644
--- a/ELDependenci-plugin/src/main/java/com/ericlam/mc/eld/ELDTypeListener.java
+++ b/ELDependenci-plugin/src/main/java/com/ericlam/mc/eld/ELDTypeListener.java
@@ -6,26 +6,32 @@
import com.ericlam.mc.eld.configurations.GroupConfig;
import com.ericlam.mc.eld.configurations.GroupLang;
import com.ericlam.mc.eld.services.ConfigPoolService;
+import com.google.common.collect.Lists;
import com.google.inject.MembersInjector;
import com.google.inject.TypeLiteral;
import com.google.inject.spi.TypeEncounter;
import com.google.inject.spi.TypeListener;
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
+import java.util.List;
@SuppressWarnings("unchecked")
public final class ELDTypeListener implements TypeListener {
private final ConfigPoolService configPoolService;
+ private final ReflectionService reflectionService;
- public ELDTypeListener(ConfigPoolService configPoolService) {
+ public ELDTypeListener(ConfigPoolService configPoolService, ReflectionService reflectionService) {
this.configPoolService = configPoolService;
+ this.reflectionService = reflectionService;
}
@Override
public void hear(TypeLiteral typeLiteral, TypeEncounter typeEncounter) {
- for (Field field : typeLiteral.getRawType().getDeclaredFields()) {
+ for (Field field : reflectionService.getDeclaredFieldsUpTo(typeLiteral.getRawType(), null)) {
if (!field.isAnnotationPresent(InjectPool.class)) continue;
if (!(field.getGenericType() instanceof ParameterizedType)) continue;
if (field.getType() == GroupConfig.class) {
diff --git a/ELDependenci-plugin/src/main/java/com/ericlam/mc/eld/ELDependenci.java b/ELDependenci-plugin/src/main/java/com/ericlam/mc/eld/ELDependenci.java
index a21e95f..bd7eae0 100644
--- a/ELDependenci-plugin/src/main/java/com/ericlam/mc/eld/ELDependenci.java
+++ b/ELDependenci-plugin/src/main/java/com/ericlam/mc/eld/ELDependenci.java
@@ -15,6 +15,7 @@
import com.ericlam.mc.eld.module.ELDLoggingModule;
import com.ericlam.mc.eld.services.ArgParserService;
import com.ericlam.mc.eld.services.ELDConfigPoolService;
+import com.ericlam.mc.eld.services.ELDReflectionService;
import com.ericlam.mc.eld.services.logging.ELDLoggingService;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.inject.Guice;
@@ -70,7 +71,7 @@ public void onLoad() {
groupConfigService = new ELDConfigPoolService(eldConfig);
this.module.setDefaultSingleton(eldConfig.defaultSingleton);
this.sharePluginInstance = eldConfig.sharePluginInstance;
- this.module.addModule(new ELDConfigModule(groupConfigService));
+ this.module.addModule(new ELDConfigModule(groupConfigService, new ELDReflectionService()));
this.module.addModule(new ELDLoggingModule(new ELDLoggingService(eldConfig)));
}
diff --git a/ELDependenci-plugin/src/main/java/com/ericlam/mc/eld/commands/ELDCommandHandler.java b/ELDependenci-plugin/src/main/java/com/ericlam/mc/eld/commands/ELDCommandHandler.java
index 910d28d..30099e7 100644
--- a/ELDependenci-plugin/src/main/java/com/ericlam/mc/eld/commands/ELDCommandHandler.java
+++ b/ELDependenci-plugin/src/main/java/com/ericlam/mc/eld/commands/ELDCommandHandler.java
@@ -8,6 +8,7 @@
import com.ericlam.mc.eld.bukkit.ELDMessageConfig;
import com.ericlam.mc.eld.components.CommandNode;
import com.ericlam.mc.eld.exceptions.ArgumentParseException;
+import com.ericlam.mc.eld.services.ELDReflectionService;
import com.google.inject.Injector;
import org.bukkit.command.*;
import org.bukkit.entity.Player;
@@ -29,7 +30,7 @@ public final class ELDCommandHandler implements CommandExecutor, TabCompleter {
private static Field[] getDeclaredFieldsForNodes(Class extends CommandNode> node){
if (nodePlaceholders.containsKey(node)) return nodePlaceholders.get(node);
- var fields = node.getDeclaredFields();
+ var fields = ELDReflectionService.getDeclaredFieldsUpToStatic(node, null).toArray(Field[]::new);
nodePlaceholders.put(node, fields);
return fields;
}
diff --git a/ELDependenci-plugin/src/main/java/com/ericlam/mc/eld/configurations/ELDConfigManager.java b/ELDependenci-plugin/src/main/java/com/ericlam/mc/eld/configurations/ELDConfigManager.java
index cb7e2ee..f9d94a6 100644
--- a/ELDependenci-plugin/src/main/java/com/ericlam/mc/eld/configurations/ELDConfigManager.java
+++ b/ELDependenci-plugin/src/main/java/com/ericlam/mc/eld/configurations/ELDConfigManager.java
@@ -148,7 +148,7 @@ class FileControllerImpl implements FileController {
private final Field[] fields;
public FileControllerImpl() {
- this.fields = config.getDeclaredFields();
+ this.fields = config.getFields();
}
@Override
diff --git a/ELDependenci-plugin/src/main/java/com/ericlam/mc/eld/module/ELDConfigModule.java b/ELDependenci-plugin/src/main/java/com/ericlam/mc/eld/module/ELDConfigModule.java
index 4abe719..5275230 100644
--- a/ELDependenci-plugin/src/main/java/com/ericlam/mc/eld/module/ELDConfigModule.java
+++ b/ELDependenci-plugin/src/main/java/com/ericlam/mc/eld/module/ELDConfigModule.java
@@ -1,9 +1,11 @@
package com.ericlam.mc.eld.module;
import com.ericlam.mc.eld.ELDTypeListener;
+import com.ericlam.mc.eld.ReflectionService;
import com.ericlam.mc.eld.configurations.ELDConfigManager;
import com.ericlam.mc.eld.services.ConfigPoolService;
import com.ericlam.mc.eld.services.ELDConfigPoolService;
+import com.ericlam.mc.eld.services.ELDReflectionService;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.inject.AbstractModule;
import com.google.inject.matcher.Matchers;
@@ -12,9 +14,11 @@
public final class ELDConfigModule extends AbstractModule {
private final ELDConfigPoolService groupConfigService;
+ private final ELDReflectionService reflectionService;
- public ELDConfigModule(ELDConfigPoolService groupConfigService) {
+ public ELDConfigModule(ELDConfigPoolService groupConfigService, ELDReflectionService reflectionService) {
this.groupConfigService = groupConfigService;
+ this.reflectionService = reflectionService;
}
@Override
@@ -22,6 +26,7 @@ protected void configure() {
bind(ObjectMapper.class).annotatedWith(Names.named("eld-yaml")).toInstance(ELDConfigManager.YAML_MAPPER);
bind(ObjectMapper.class).annotatedWith(Names.named("eld-json")).toInstance(ELDConfigManager.JSON_MAPPER);
bind(ConfigPoolService.class).toInstance(groupConfigService);
- bindListener(Matchers.any(), new ELDTypeListener(groupConfigService));
+ bind(ReflectionService.class).toInstance(reflectionService);
+ bindListener(Matchers.any(), new ELDTypeListener(groupConfigService, reflectionService));
}
}
diff --git a/ELDependenci-plugin/src/main/java/com/ericlam/mc/eld/services/ELDReflectionService.java b/ELDependenci-plugin/src/main/java/com/ericlam/mc/eld/services/ELDReflectionService.java
new file mode 100644
index 0000000..9c4ca00
--- /dev/null
+++ b/ELDependenci-plugin/src/main/java/com/ericlam/mc/eld/services/ELDReflectionService.java
@@ -0,0 +1,50 @@
+package com.ericlam.mc.eld.services;
+
+import com.ericlam.mc.eld.ReflectionService;
+import com.google.common.collect.Lists;
+import org.jetbrains.annotations.NotNull;
+
+import javax.annotation.Nullable;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.List;
+
+public class ELDReflectionService implements ReflectionService {
+
+ @Override
+ public List getDeclaredFieldsUpTo(@NotNull Class> startClass, @Nullable Class> exclusiveParent) {
+ return getDeclaredFieldsUpToStatic(startClass, exclusiveParent);
+ }
+
+ @Override
+ public List getDeclaredMethodsUpTo(@NotNull Class> startClass, @Nullable Class> exclusiveParent) {
+ return getDeclaredMethodsUpToStatic(startClass, exclusiveParent);
+ }
+
+ public static List getDeclaredFieldsUpToStatic(@NotNull Class> startClass, @Nullable Class> exclusiveParent) {
+ List currentClassFields = Lists.newArrayList(startClass.getDeclaredFields());
+ Class> parentClass = startClass.getSuperclass();
+
+ if (parentClass != null && !(parentClass.equals(exclusiveParent))) {
+ List parentClassFields =
+ (List) getDeclaredFieldsUpToStatic(parentClass, exclusiveParent);
+ currentClassFields.addAll(parentClassFields);
+ }
+
+ return currentClassFields;
+ }
+
+ public List getDeclaredMethodsUpToStatic(@NotNull Class> startClass, @Nullable Class> exclusiveParent) {
+ List currentClassMethods = Lists.newArrayList(startClass.getDeclaredMethods());
+ Class> parentClass = startClass.getSuperclass();
+
+ if (parentClass != null && !(parentClass.equals(exclusiveParent))) {
+ List parentClassFields =
+ (List) getDeclaredMethodsUpToStatic(parentClass, exclusiveParent);
+ currentClassMethods.addAll(parentClassFields);
+ }
+
+ return currentClassMethods;
+ }
+
+}
diff --git a/eldependenci-addon/pom.xml b/eldependenci-addon/pom.xml
index fbfa929..2d85725 100644
--- a/eldependenci-addon/pom.xml
+++ b/eldependenci-addon/pom.xml
@@ -5,7 +5,7 @@
eldependenci
org.eldependenci
- 0.1.7
+ 0.1.8-SNAPSHOT
4.0.0
diff --git a/eldependenci-addon/src/main/java/com/ericlam/mc/eld/ReflectionService.java b/eldependenci-addon/src/main/java/com/ericlam/mc/eld/ReflectionService.java
new file mode 100644
index 0000000..040cb05
--- /dev/null
+++ b/eldependenci-addon/src/main/java/com/ericlam/mc/eld/ReflectionService.java
@@ -0,0 +1,32 @@
+package com.ericlam.mc.eld;
+
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.List;
+
+/**
+ * 反射工具服務
+ */
+public interface ReflectionService {
+
+ /**
+ * 取得整個 class 上下關係的 declared fields
+ *
+ * @param startClass 開始類別
+ * @param exclusiveParent 到此父類別停止
+ * @return 整個 class 上下關係的 declared fields
+ */
+ List getDeclaredFieldsUpTo(@Nonnull Class> startClass, @Nullable Class> exclusiveParent);
+
+ /**
+ * 取得整個 class 上下關係的 declared methods
+ *
+ * @param startClass 開始類別
+ * @param exclusiveParent 到此父類別停止
+ * @return 整個 class 上下關係的 declared methods
+ */
+ List getDeclaredMethodsUpTo(@Nonnull Class> startClass, @Nullable Class> exclusiveParent);
+
+}
diff --git a/eldependenci-framework/pom.xml b/eldependenci-framework/pom.xml
index 1bf1df0..912cf2f 100644
--- a/eldependenci-framework/pom.xml
+++ b/eldependenci-framework/pom.xml
@@ -5,7 +5,7 @@
eldependenci
org.eldependenci
- 0.1.7
+ 0.1.8-SNAPSHOT
4.0.0
diff --git a/pom.xml b/pom.xml
index 83b7608..273bcaf 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,7 +7,7 @@
org.eldependenci
eldependenci
pom
- 0.1.7
+ 0.1.8-SNAPSHOT
eldependenci-framework
eldependenci-addon
@@ -243,8 +243,13 @@
github
Github ELDependenci Apache Maven Packages
https://maven.pkg.github.com/ELDependenci/eldependenci
- false
+
+ github
+ Github ELDependenci Apache Maven Packages
+ https://maven.pkg.github.com/ELDependenci/eldependenci
+ true
+
\ No newline at end of file