Skip to content

Commit 88e0e27

Browse files
authored
Fix hierarchy computation of boot layer classes (#28)
* Use system classloader as fallback for transformable class bytes fixes #27 * Handle missing transformable class bytes Throw ClassNotFoundException if they're not found, remove fallback classloader * Move empty bytes check behind transformation
1 parent b22227a commit 88e0e27

1 file changed

Lines changed: 13 additions & 5 deletions

File tree

src/main/java/cpw/mods/cl/ModuleClassLoader.java

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -230,22 +230,30 @@ protected <T> T loadFromModule(final String moduleName, BiFunction<ModuleReader,
230230
}
231231
}
232232

233-
protected byte[] getMaybeTransformedClassBytes(final String name, final String context) {
233+
protected byte[] getMaybeTransformedClassBytes(final String name, final String context) throws ClassNotFoundException {
234234
byte[] bytes = new byte[0];
235+
Throwable suppressed = null;
235236
try {
236237
final var pname = name.substring(0, name.lastIndexOf('.'));
237238
if (this.packageLookup.containsKey(pname)) {
238239
bytes = loadFromModule(classNameToModuleName(name), (reader, ref)->this.getClassBytes(reader, ref, name));
239-
} else {
240+
} else if (this.parentLoaders.containsKey(pname)) {
240241
var cname = name.replace('.','/')+".class";
241-
try (var is = this.parentLoaders.getOrDefault(pname, ClassLoader.getPlatformClassLoader()).getResourceAsStream(cname)) {
242+
try (var is = this.parentLoaders.get(pname).getResourceAsStream(cname)) {
242243
if (is != null)
243244
bytes = is.readAllBytes();
244245
}
245246
}
246-
} catch (IOException ignored) {
247+
} catch (IOException e) {
248+
suppressed = e;
249+
}
250+
byte[] maybeTransformedBytes = maybeTransformClassBytes(bytes, name, context);
251+
if (maybeTransformedBytes.length == 0) {
252+
ClassNotFoundException e = new ClassNotFoundException(name);
253+
if (suppressed != null) e.addSuppressed(suppressed);
254+
throw e;
247255
}
248-
return maybeTransformClassBytes(bytes, name, context);
256+
return maybeTransformedBytes;
249257
}
250258

251259
public void setFallbackClassLoader(final ClassLoader fallbackClassLoader) {

0 commit comments

Comments
 (0)