Skip to content

Commit

Permalink
Merge pull request #17 from ELDEpendenci/develop
Browse files Browse the repository at this point in the history
  • Loading branch information
eric2788 authored May 14, 2022
2 parents 874bd0d + 4edc912 commit a8a47b0
Show file tree
Hide file tree
Showing 13 changed files with 123 additions and 12 deletions.
8 changes: 8 additions & 0 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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 }}
3 changes: 3 additions & 0 deletions .github/workflows/verify.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
name: Verify Process

env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

on:
pull_request:
branches: [ master ]
Expand Down
2 changes: 1 addition & 1 deletion ELDependenci-plugin/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<parent>
<artifactId>eldependenci</artifactId>
<groupId>org.eldependenci</groupId>
<version>0.1.7</version>
<version>0.1.8-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 <I> void hear(TypeLiteral<I> typeLiteral, TypeEncounter<I> 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) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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)));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ class FileControllerImpl implements FileController {
private final Field[] fields;

public FileControllerImpl() {
this.fields = config.getDeclaredFields();
this.fields = config.getFields();
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -12,16 +14,19 @@
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
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));
}
}
Original file line number Diff line number Diff line change
@@ -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<Field> getDeclaredFieldsUpTo(@NotNull Class<?> startClass, @Nullable Class<?> exclusiveParent) {
return getDeclaredFieldsUpToStatic(startClass, exclusiveParent);
}

@Override
public List<Method> getDeclaredMethodsUpTo(@NotNull Class<?> startClass, @Nullable Class<?> exclusiveParent) {
return getDeclaredMethodsUpToStatic(startClass, exclusiveParent);
}

public static List<Field> getDeclaredFieldsUpToStatic(@NotNull Class<?> startClass, @Nullable Class<?> exclusiveParent) {
List<Field> currentClassFields = Lists.newArrayList(startClass.getDeclaredFields());
Class<?> parentClass = startClass.getSuperclass();

if (parentClass != null && !(parentClass.equals(exclusiveParent))) {
List<Field> parentClassFields =
(List<Field>) getDeclaredFieldsUpToStatic(parentClass, exclusiveParent);
currentClassFields.addAll(parentClassFields);
}

return currentClassFields;
}

public List<Method> getDeclaredMethodsUpToStatic(@NotNull Class<?> startClass, @Nullable Class<?> exclusiveParent) {
List<Method> currentClassMethods = Lists.newArrayList(startClass.getDeclaredMethods());
Class<?> parentClass = startClass.getSuperclass();

if (parentClass != null && !(parentClass.equals(exclusiveParent))) {
List<Method> parentClassFields =
(List<Method>) getDeclaredMethodsUpToStatic(parentClass, exclusiveParent);
currentClassMethods.addAll(parentClassFields);
}

return currentClassMethods;
}

}
2 changes: 1 addition & 1 deletion eldependenci-addon/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<parent>
<artifactId>eldependenci</artifactId>
<groupId>org.eldependenci</groupId>
<version>0.1.7</version>
<version>0.1.8-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

Expand Down
Original file line number Diff line number Diff line change
@@ -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<Field> getDeclaredFieldsUpTo(@Nonnull Class<?> startClass, @Nullable Class<?> exclusiveParent);

/**
* 取得整個 class 上下關係的 declared methods
*
* @param startClass 開始類別
* @param exclusiveParent 到此父類別停止
* @return 整個 class 上下關係的 declared methods
*/
List<Method> getDeclaredMethodsUpTo(@Nonnull Class<?> startClass, @Nullable Class<?> exclusiveParent);

}
2 changes: 1 addition & 1 deletion eldependenci-framework/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<parent>
<artifactId>eldependenci</artifactId>
<groupId>org.eldependenci</groupId>
<version>0.1.7</version>
<version>0.1.8-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

Expand Down
9 changes: 7 additions & 2 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<groupId>org.eldependenci</groupId>
<artifactId>eldependenci</artifactId>
<packaging>pom</packaging>
<version>0.1.7</version>
<version>0.1.8-SNAPSHOT</version>
<modules>
<module>eldependenci-framework</module>
<module>eldependenci-addon</module>
Expand Down Expand Up @@ -243,8 +243,13 @@
<id>github</id>
<name>Github ELDependenci Apache Maven Packages</name>
<url>https://maven.pkg.github.com/ELDependenci/eldependenci</url>
<uniqueVersion>false</uniqueVersion>
</repository>
<snapshotRepository>
<id>github</id>
<name>Github ELDependenci Apache Maven Packages</name>
<url>https://maven.pkg.github.com/ELDependenci/eldependenci</url>
<uniqueVersion>true</uniqueVersion>
</snapshotRepository>
</distributionManagement>

</project>

0 comments on commit a8a47b0

Please sign in to comment.