Skip to content

Commit b22227a

Browse files
authored
Filter modules by reference type, allows launching without BSL (#25)
1 parent 41ecce0 commit b22227a

1 file changed

Lines changed: 9 additions & 6 deletions

File tree

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

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,22 +32,25 @@ public class ModuleClassLoader extends ClassLoader {
3232
public ModuleClassLoader(final String name, final Configuration configuration, final List<ModuleLayer> parentLayers) {
3333
super(name, null);
3434
this.configuration = configuration;
35-
record JarRef(ResolvedModule m, JarModuleFinder.JarModuleReference ref) {}
3635
this.resolvedRoots = configuration.modules().stream()
37-
.filter(m->m.reference() instanceof JarModuleFinder.JarModuleReference)
38-
.map(m->new JarRef(m, (JarModuleFinder.JarModuleReference)m.reference()))
39-
.collect(Collectors.toMap(r->r.m().name(), JarRef::ref));
36+
.map(ResolvedModule::reference)
37+
.filter(JarModuleFinder.JarModuleReference.class::isInstance)
38+
.collect(Collectors.toMap(r -> r.descriptor().name(), r -> (JarModuleFinder.JarModuleReference) r));
4039

4140
this.packageLookup = new HashMap<>();
4241
for (var mod : this.configuration.modules()) {
43-
mod.reference().descriptor().packages().forEach(pk->this.packageLookup.put(pk, mod));
42+
if (this.resolvedRoots.containsKey(mod.name())) {
43+
mod.reference().descriptor().packages().forEach(pk->this.packageLookup.put(pk, mod));
44+
}
4445
}
4546

4647
this.parentLoaders = new HashMap<>();
4748
for (var rm : configuration.modules()) {
4849
for (var other : rm.reads()) {
4950
Supplier<ClassLoader> findClassLoader = ()->{
50-
if (other.configuration() != configuration) {
51+
// Loading a class requires its module to be part of resolvedRoots
52+
// If it's not, we delegate loading to its module's classloader
53+
if (!this.resolvedRoots.containsKey(other.name())) {
5154
return parentLayers.stream()
5255
.filter(l -> l.configuration() == other.configuration())
5356
.flatMap(layer->Optional.ofNullable(layer.findLoader(other.name())).stream())

0 commit comments

Comments
 (0)