Skip to content

Commit fe0240a

Browse files
committed
Refactoring
1 parent c21832c commit fe0240a

File tree

20 files changed

+180
-147
lines changed

20 files changed

+180
-147
lines changed

annotations/src/main/java/com/javadiscord/jdi/core/processor/ClassFileUtil.java

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -18,44 +18,45 @@ public class ClassFileUtil {
1818
private ClassFileUtil() {}
1919

2020
public static List<File> getClassesInClassPath() {
21-
if (!classesInPath.isEmpty()) {
22-
return classesInPath;
23-
}
24-
String classpath = System.getProperty("java.class.path");
25-
String[] classpathEntries = classpath.split(File.pathSeparator);
21+
if (classesInPath.isEmpty()) {
22+
String classpath = System.getProperty("java.class.path");
23+
String[] classpathEntries = classpath.split(File.pathSeparator);
2624

27-
for (String entry : classpathEntries) {
28-
File file = new File(entry);
29-
try {
30-
classesInPath.addAll(getClasses(file));
31-
} catch (IOException ignore) {
32-
/* Ignore */
25+
for (String entry : classpathEntries) {
26+
File file = new File(entry);
27+
try {
28+
classesInPath.addAll(getClasses(file));
29+
} catch (IOException ignore) {
30+
/* Ignore */
31+
}
3332
}
3433
}
3534
return classesInPath;
3635
}
3736

3837
public static String getClassName(File file) throws IOException {
39-
String className = null;
4038
try (
4139
FileInputStream fis = new FileInputStream(file);
4240
DataInputStream dis = new DataInputStream(fis)
4341
) {
4442
if (isJarFile(file)) {
45-
try (ZipInputStream zip = new ZipInputStream(fis)) {
46-
ZipEntry entry;
47-
while ((entry = zip.getNextEntry()) != null) {
48-
if (!entry.isDirectory() && entry.getName().endsWith(".class")) {
49-
className = extractClassName(zip);
50-
break;
51-
}
52-
}
53-
}
43+
return getClassNameFromJar(fis);
5444
} else {
55-
className = extractClassName(dis);
45+
return extractClassName(dis);
46+
}
47+
}
48+
}
49+
50+
private static String getClassNameFromJar(FileInputStream fis) throws IOException {
51+
try (ZipInputStream zip = new ZipInputStream(fis)) {
52+
ZipEntry entry;
53+
while ((entry = zip.getNextEntry()) != null) {
54+
if (!entry.isDirectory() && entry.getName().endsWith(".class")) {
55+
return extractClassName(zip);
56+
}
5657
}
5758
}
58-
return className;
59+
return null;
5960
}
6061

6162
private static List<File> getClasses(File file) throws IOException {

annotations/src/main/java/com/javadiscord/jdi/core/processor/loader/ComponentLoader.java

Lines changed: 65 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -25,62 +25,79 @@ public ComponentLoader() {}
2525
public void loadComponents() {
2626
List<File> classes = ClassFileUtil.getClassesInClassPath();
2727
for (File classFile : classes) {
28-
try {
29-
Class<?> clazz = Class.forName(ClassFileUtil.getClassName(classFile));
30-
if (componentValidator.validate(clazz)) {
31-
for (Method method : clazz.getMethods()) {
32-
if (method.isAnnotationPresent(Component.class)) {
33-
if (!COMPONENTS.containsKey(method.getReturnType())) {
34-
COMPONENTS.put(method.getReturnType(), method.invoke(null));
35-
LOGGER
36-
.info("Loaded component {}", method.getReturnType().getName());
37-
} else {
38-
LOGGER.error(
39-
"Component {} already loaded", method.getReturnType().getName()
40-
);
41-
}
42-
}
43-
}
44-
} else {
45-
LOGGER.error("{} failed validation", clazz.getName());
46-
}
47-
} catch (Exception | Error ignore) {
48-
/* Ignore */
28+
processClassFile(classFile);
29+
}
30+
}
31+
32+
private void processClassFile(File classFile) {
33+
try {
34+
Class<?> clazz = Class.forName(ClassFileUtil.getClassName(classFile));
35+
if (componentValidator.validate(clazz)) {
36+
processClassMethods(clazz);
37+
} else {
38+
LOGGER.error("{} failed validation", clazz.getName());
4939
}
40+
} catch (Exception | Error ignore) {
41+
// Ignore
42+
}
43+
}
44+
45+
private void processClassMethods(Class<?> clazz) throws Exception {
46+
for (Method method : clazz.getMethods()) {
47+
if (method.isAnnotationPresent(Component.class)) {
48+
registerComponent(method);
49+
}
50+
}
51+
}
52+
53+
private void registerComponent(Method method) throws Exception {
54+
if (!COMPONENTS.containsKey(method.getReturnType())) {
55+
COMPONENTS.put(method.getReturnType(), method.invoke(null));
56+
LOGGER.info("Loaded component {}", method.getReturnType().getName());
57+
} else {
58+
LOGGER.error("Component {} already loaded", method.getReturnType().getName());
5059
}
5160
}
5261

5362
public static void injectComponents(Object component) {
5463
try {
55-
Class<?> clazz = component.getClass();
56-
for (Field field : clazz.getDeclaredFields()) {
57-
if (field.isAnnotationPresent(Inject.class)) {
58-
if (COMPONENTS.containsKey(field.getType())) {
59-
Object dependency = COMPONENTS.get(field.getType());
60-
if (dependency != null) {
61-
field.setAccessible(true);
62-
try {
63-
field.set(component, dependency);
64-
LOGGER.info(
65-
"Injected component {} into {}",
66-
dependency.getClass().getName(), field.getType()
67-
);
68-
} catch (IllegalAccessException e) {
69-
throw new RuntimeException(
70-
"Failed to inject dependency into field: " + field.getName(),
71-
e
72-
);
73-
}
74-
}
75-
} else {
76-
LOGGER.error(
77-
"No object {} was found in field {}", field.getType(), field.getName()
78-
);
79-
}
64+
injectFields(component);
65+
} catch (Exception e) {
66+
LOGGER.error("Failed to inject components into {}", component.getClass().getName(), e);
67+
}
68+
}
69+
70+
private static void injectFields(Object component) {
71+
Class<?> clazz = component.getClass();
72+
for (Field field : clazz.getDeclaredFields()) {
73+
if (field.isAnnotationPresent(Inject.class)) {
74+
injectField(component, field);
75+
}
76+
}
77+
}
78+
79+
private static void injectField(Object component, Field field) {
80+
if (COMPONENTS.containsKey(field.getType())) {
81+
Object dependency = COMPONENTS.get(field.getType());
82+
if (dependency != null) {
83+
try {
84+
field.setAccessible(true);
85+
field.set(component, dependency);
86+
LOGGER.info(
87+
"Injected component {} into {}",
88+
dependency.getClass().getName(), field.getType()
89+
);
90+
} catch (IllegalAccessException e) {
91+
throw new RuntimeException(
92+
"Failed to inject dependency into field: " + field.getName(),
93+
e
94+
);
8095
}
8196
}
82-
} catch (Exception | Error ignore) {
83-
/* Ignore */
97+
} else {
98+
LOGGER.error(
99+
"No object {} was found in field {}", field.getType(), field.getName()
100+
);
84101
}
85102
}
86103
}

api/src/main/java/com/javadiscord/jdi/core/api/GuildRequest.java

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,8 @@ public AsyncResponse<Channel> createGuildChannel(CreateGuildChannelBuilder build
4949
return responseParser.callAndParse(Channel.class, builder.guildId(guildId).build());
5050
}
5151

52-
public AsyncResponse<Guild> createGuild(CreateGuildBuilder builder) {
53-
return responseParser.callAndParse(Guild.class, builder.build());
52+
public AsyncResponse<GuildModel> createGuild(CreateGuildBuilder builder) {
53+
return responseParser.callAndParse(GuildModel.class, builder.build());
5454
}
5555

5656
public AsyncResponse<Role> createGuildRole(CreateGuildRoleBuilder builder) {
@@ -63,8 +63,8 @@ Void.class, new DeleteGuildIntegrationRequest(guildId, integrationId)
6363
);
6464
}
6565

66-
public AsyncResponse<Guild> deleteGuild() {
67-
return responseParser.callAndParse(Guild.class, new DeleteGuildRequest(guildId));
66+
public AsyncResponse<GuildModel> deleteGuild() {
67+
return responseParser.callAndParse(GuildModel.class, new DeleteGuildRequest(guildId));
6868
}
6969

7070
public AsyncResponse<Role> deleteGuildRole(long roleId) {
@@ -105,16 +105,16 @@ Onboarding.class, new GetGuildOnboardingRequest(guildId)
105105
);
106106
}
107107

108-
public AsyncResponse<Guild> guildPreview() {
109-
return responseParser.callAndParse(Guild.class, new GetGuildPreviewRequest(guildId));
108+
public AsyncResponse<GuildModel> guildPreview() {
109+
return responseParser.callAndParse(GuildModel.class, new GetGuildPreviewRequest(guildId));
110110
}
111111

112112
public AsyncResponse<PruneCount> guildPruneCount(GetGuildPruneCountBuilder builder) {
113113
return responseParser.callAndParse(PruneCount.class, builder.guildId(guildId).build());
114114
}
115115

116-
public AsyncResponse<Guild> guild(GetGuildBuilder builder) {
117-
return responseParser.callAndParse(Guild.class, builder.guildId(guildId).build());
116+
public AsyncResponse<GuildModel> guild(GetGuildBuilder builder) {
117+
return responseParser.callAndParse(GuildModel.class, builder.guildId(guildId).build());
118118
}
119119

120120
public AsyncResponse<List<Role>> guildRoles() {
@@ -212,8 +212,8 @@ public AsyncResponse<Onboarding> modifyGuildOnboarding(
212212
);
213213
}
214214

215-
public AsyncResponse<Guild> modifyGuild(ModifyGuildBuilder builder) {
216-
return responseParser.callAndParse(Guild.class, builder.guildId(guildId).build());
215+
public AsyncResponse<GuildModel> modifyGuild(ModifyGuildBuilder builder) {
216+
return responseParser.callAndParse(GuildModel.class, builder.guildId(guildId).build());
217217
}
218218

219219
public AsyncResponse<List<Role>> modifyGuildRolePositions(
@@ -242,8 +242,9 @@ public AsyncResponse<VoiceState> modifyUserVoiceState(ModifyUserVoiceStateBuilde
242242
return responseParser.callAndParse(VoiceState.class, builder.guildId(guildId).build());
243243
}
244244

245-
public AsyncResponse<Guild> removeGuildBan(long userId) {
246-
return responseParser.callAndParse(Guild.class, new RemoveGuildBanRequest(guildId, userId));
245+
public AsyncResponse<GuildModel> removeGuildBan(long userId) {
246+
return responseParser
247+
.callAndParse(GuildModel.class, new RemoveGuildBanRequest(guildId, userId));
247248
}
248249

249250
public AsyncResponse<GuildMember> removeGuildMemberRole(long userId, long roleId) {

api/src/main/java/com/javadiscord/jdi/core/api/GuildTemplateRequest.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import com.javadiscord.jdi.core.api.builders.CreateGuildFromTemplateBuilder;
66
import com.javadiscord.jdi.core.api.builders.CreateGuildTemplateBuilder;
77
import com.javadiscord.jdi.core.api.builders.ModifyGuildTemplateBuilder;
8-
import com.javadiscord.jdi.core.models.guild.Guild;
8+
import com.javadiscord.jdi.core.models.guild.GuildModel;
99
import com.javadiscord.jdi.core.models.guild_template.GuildTemplate;
1010
import com.javadiscord.jdi.internal.api.guild_template.*;
1111

@@ -18,9 +18,11 @@ public GuildTemplateRequest(DiscordResponseParser responseParser, long guildId)
1818
this.guildId = guildId;
1919
}
2020

21-
public AsyncResponse<Guild> createGuildFromTemplate(CreateGuildFromTemplateBuilder builder) {
21+
public AsyncResponse<GuildModel> createGuildFromTemplate(
22+
CreateGuildFromTemplateBuilder builder
23+
) {
2224
return responseParser.callAndParse(
23-
Guild.class, builder.build()
25+
GuildModel.class, builder.build()
2426
);
2527
}
2628

api/src/main/java/com/javadiscord/jdi/core/api/UserRequest.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import com.javadiscord.jdi.core.api.builders.ModifyCurrentUserBuilder;
88
import com.javadiscord.jdi.core.api.builders.UpdateCurrentUserApplicationRoleConnectionBuilder;
99
import com.javadiscord.jdi.core.models.channel.Channel;
10-
import com.javadiscord.jdi.core.models.guild.Guild;
10+
import com.javadiscord.jdi.core.models.guild.GuildModel;
1111
import com.javadiscord.jdi.core.models.user.Connection;
1212
import com.javadiscord.jdi.core.models.user.Member;
1313
import com.javadiscord.jdi.core.models.user.User;
@@ -54,8 +54,10 @@ Member.class, new GetCurrentUserGuildMemberRequest(guildId)
5454
);
5555
}
5656

57-
public AsyncResponse<List<Guild>> getCurrentUserGuilds(GetCurrentUserGuildsBuilder builder) {
58-
return responseParser.callAndParseList(Guild.class, builder.build());
57+
public AsyncResponse<List<GuildModel>> getCurrentUserGuilds(
58+
GetCurrentUserGuildsBuilder builder
59+
) {
60+
return responseParser.callAndParseList(GuildModel.class, builder.build());
5961
}
6062

6163
public AsyncResponse<User> getCurrentUser() {

cache/src/test/unit/com/javadiscord/jdi/internal/cache/CacheTest.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@
44
import static org.mockito.Mockito.mock;
55
import static org.mockito.Mockito.when;
66

7-
import com.javadiscord.jdi.core.models.guild.Guild;
7+
import com.javadiscord.jdi.core.models.guild.GuildModel;
88

99
import org.junit.jupiter.api.Test;
1010

1111
class CacheTest {
1212

1313
@Test
1414
void testFetchingGuildFromCache() {
15-
Guild guildMock = mock(Guild.class);
15+
GuildModel guildMock = mock(GuildModel.class);
1616
when(guildMock.id()).thenReturn(1L);
1717

1818
Cache cache = new Cache(CacheType.FULL);
@@ -25,7 +25,7 @@ void testFetchingGuildFromCache() {
2525

2626
@Test
2727
void testFetchingGuildFromCacheWithNoCache() {
28-
Guild guildMock = mock(Guild.class);
28+
GuildModel guildMock = mock(GuildModel.class);
2929
when(guildMock.id()).thenReturn(1L);
3030

3131
Cache cache = new Cache(CacheType.NO_CACHE);
@@ -37,7 +37,7 @@ void testFetchingGuildFromCacheWithNoCache() {
3737

3838
@Test
3939
void testFetchingGuildFromCacheWithPartialCache() {
40-
Guild guildMock = mock(Guild.class);
40+
GuildModel guildMock = mock(GuildModel.class);
4141
when(guildMock.id()).thenReturn(1L);
4242

4343
Cache cache = new Cache(CacheType.PARTIAL);
@@ -49,7 +49,7 @@ void testFetchingGuildFromCacheWithPartialCache() {
4949

5050
@Test
5151
void testFetchingFromFullCache() {
52-
Guild guildMock = mock(Guild.class);
52+
GuildModel guildMock = mock(GuildModel.class);
5353
when(guildMock.id()).thenReturn(1L);
5454

5555
Cache cache = new Cache(CacheType.FULL);
@@ -70,7 +70,7 @@ void testFetchingFromFullCache() {
7070

7171
@Test
7272
void testFetchingFromFullCacheWhenItemNotPresent() {
73-
Guild guildMock = mock(Guild.class);
73+
GuildModel guildMock = mock(GuildModel.class);
7474
when(guildMock.id()).thenReturn(1L);
7575

7676
Cache cache = new Cache(CacheType.FULL);
@@ -86,7 +86,7 @@ void testFetchingFromFullCacheWhenItemNotPresent() {
8686

8787
@Test
8888
void testRemovingGuildFromCache() {
89-
Guild guildMock = mock(Guild.class);
89+
GuildModel guildMock = mock(GuildModel.class);
9090
when(guildMock.id()).thenReturn(1L);
9191

9292
Cache cache = new Cache(CacheType.FULL);
@@ -101,7 +101,7 @@ void testRemovingGuildFromCache() {
101101

102102
@Test
103103
void testGetCacheForType() {
104-
Guild guildMock = mock(Guild.class);
104+
GuildModel guildMock = mock(GuildModel.class);
105105
when(guildMock.id()).thenReturn(1L);
106106

107107
{

0 commit comments

Comments
 (0)