Skip to content

Commit 4eb979b

Browse files
Merge branch 'main' of https://github.com/NightTripperID/java-discord-api into update-cache-with-response
# Conflicts: # api/src/main/java/com/javadiscord/jdi/core/api/DiscordResponseParser.java # core/src/main/java/com/javadiscord/jdi/core/Guild.java
2 parents 63cf503 + 19ab3a1 commit 4eb979b

File tree

364 files changed

+4857
-3188
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

364 files changed

+4857
-3188
lines changed

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

Lines changed: 61 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
package com.javadiscord.jdi.core.processor;
22

3-
import javassist.bytecode.ClassFile;
4-
53
import java.io.DataInputStream;
64
import java.io.File;
75
import java.io.FileInputStream;
6+
import java.io.FileOutputStream;
87
import java.io.IOException;
98
import java.util.ArrayList;
109
import java.util.List;
1110
import java.util.zip.ZipEntry;
1211
import java.util.zip.ZipInputStream;
12+
import javassist.bytecode.ClassFile;
1313

1414
public class ClassFileUtil {
1515

@@ -21,15 +21,21 @@ public static List<File> getClassesInClassPath() {
2121
String[] classpathEntries = classpath.split(File.pathSeparator);
2222
for (String entry : classpathEntries) {
2323
File file = new File(entry);
24-
classes.addAll(getClasses(file));
24+
try {
25+
classes.addAll(getClasses(file));
26+
} catch (IOException ignore) {
27+
/* Ignore */
28+
}
2529
}
2630
return classes;
2731
}
2832

2933
public static String getClassName(File file) throws IOException {
3034
String className = null;
31-
try (FileInputStream fis = new FileInputStream(file);
32-
DataInputStream dis = new DataInputStream(fis)) {
35+
try (
36+
FileInputStream fis = new FileInputStream(file);
37+
DataInputStream dis = new DataInputStream(fis)
38+
) {
3339
if (isJarFile(file)) {
3440
try (ZipInputStream zip = new ZipInputStream(fis)) {
3541
ZipEntry entry;
@@ -47,21 +53,44 @@ public static String getClassName(File file) throws IOException {
4753
return className;
4854
}
4955

50-
private static List<File> getClasses(File file) {
51-
List<File> classes = new ArrayList<>();
56+
private static List<File> getClasses(File file) throws IOException {
57+
List<File> classFiles = new ArrayList<>();
5258
if (file.isDirectory()) {
53-
File[] files = file.listFiles();
54-
if (files != null) {
55-
for (File f : files) {
56-
classes.addAll(getClasses(f));
57-
}
59+
classFiles.addAll(getClassesFromDirectory(file));
60+
} else if (isJarFile(file)) {
61+
classFiles.addAll(getClassesFromJar(file));
62+
} else if (file.getName().endsWith(".class")) {
63+
classFiles.add(file);
64+
}
65+
return classFiles;
66+
}
67+
68+
private static List<File> getClassesFromDirectory(File directory) throws IOException {
69+
List<File> classFiles = new ArrayList<>();
70+
File[] files = directory.listFiles();
71+
if (files != null) {
72+
for (File file : files) {
73+
classFiles.addAll(getClasses(file));
5874
}
59-
} else {
60-
if (file.getName().endsWith(".class")) {
61-
classes.add(file);
75+
}
76+
return classFiles;
77+
}
78+
79+
private static List<File> getClassesFromJar(File jarFile) throws IOException {
80+
List<File> classFiles = new ArrayList<>();
81+
try (
82+
FileInputStream fis = new FileInputStream(jarFile);
83+
ZipInputStream zip = new ZipInputStream(fis)
84+
) {
85+
ZipEntry entry;
86+
while ((entry = zip.getNextEntry()) != null) {
87+
if (!entry.isDirectory() && entry.getName().endsWith(".class")) {
88+
File tempFile = extractClassFileFromJar(zip, entry.getName());
89+
classFiles.add(tempFile);
90+
}
6291
}
6392
}
64-
return classes;
93+
return classFiles;
6594
}
6695

6796
private static boolean isJarFile(File file) {
@@ -75,4 +104,20 @@ private static String extractClassName(DataInputStream dis) throws IOException {
75104
private static String extractClassName(ZipInputStream zip) throws IOException {
76105
return new ClassFile(new DataInputStream(zip)).getName();
77106
}
107+
108+
private static File extractClassFileFromJar(
109+
ZipInputStream zip,
110+
String entryName
111+
) throws IOException {
112+
File tempFile = File.createTempFile(entryName.replace('/', '_'), ".class");
113+
tempFile.deleteOnExit();
114+
try (FileOutputStream fos = new FileOutputStream(tempFile)) {
115+
byte[] buffer = new byte[1024];
116+
int len;
117+
while ((len = zip.read(buffer)) > 0) {
118+
fos.write(buffer, 0, len);
119+
}
120+
}
121+
return tempFile;
122+
}
78123
}

0 commit comments

Comments
 (0)