Skip to content

Commit 05851f5

Browse files
committed
Revert "Separate instance of HostClassLoader per project"
This reverts commit c98bdaf.
1 parent 1649ddf commit 05851f5

File tree

4 files changed

+14
-55
lines changed

4 files changed

+14
-55
lines changed

engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/interop/java/AddToClassPathNode.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,7 @@ static AddToClassPathNode build() {
2727
Object doExecute(Object path, @Cached ExpectStringNode expectStringNode) {
2828
var ctx = EnsoContext.get(this);
2929
var file = ctx.getTruffleFile(new File(expectStringNode.execute(path)));
30-
var pkg = ctx.getPackageOf(file);
31-
if (pkg.isEmpty()) {
32-
throw ctx.raiseAssertionPanic(this, "File " + file + "should be in a package", null);
33-
} else {
34-
ctx.addToClassPath(file, pkg.get());
35-
return ctx.getBuiltins().nothing();
36-
}
30+
ctx.addToClassPath(file);
31+
return ctx.getBuiltins().nothing();
3732
}
3833
}

engine/runtime/src/main/java/org/enso/interpreter/runtime/EnsoContext.java

Lines changed: 10 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,7 @@
3030
import java.nio.file.Path;
3131
import java.util.ArrayList;
3232
import java.util.Arrays;
33-
import java.util.HashMap;
3433
import java.util.HashSet;
35-
import java.util.Map;
3634
import java.util.Optional;
3735
import java.util.Set;
3836
import java.util.UUID;
@@ -84,7 +82,7 @@ public final class EnsoContext {
8482

8583
private final EnsoLanguage language;
8684
private final Env environment;
87-
private final Map<LibraryName, HostClassLoader> hostClassLoaders = new HashMap<>();
85+
private final HostClassLoader hostClassLoader = new HostClassLoader();
8886
private final boolean assertionsEnabled;
8987
private final boolean isPrivateCheckDisabled;
9088
private final boolean isStaticTypeAnalysisEnabled;
@@ -299,7 +297,7 @@ public void shutdown() {
299297
packageRepository.shutdown();
300298
guestJava = null;
301299
topScope = null;
302-
hostClassLoaders.values().forEach(HostClassLoader::close);
300+
hostClassLoader.close();
303301
EnsoParser.freeAll();
304302
}
305303

@@ -468,16 +466,10 @@ public Optional<Module> findModuleByExpressionId(UUID expressionId) {
468466
* Modifies the classpath to use to lookup {@code polyglot java} imports.
469467
*
470468
* @param file the file to register
471-
* @param pkg Package the file belongs to
472469
*/
473470
@TruffleBoundary
474-
public void addToClassPath(TruffleFile file, Package<TruffleFile> pkg) {
471+
public void addToClassPath(TruffleFile file) {
475472
if (findGuestJava() == null) {
476-
var hostClassLoader = hostClassLoaders.get(pkg.libraryName());
477-
if (hostClassLoader == null) {
478-
hostClassLoader = new HostClassLoader(pkg);
479-
hostClassLoaders.put(pkg.libraryName(), hostClassLoader);
480-
}
481473
try {
482474
var url = file.toUri().toURL();
483475
hostClassLoader.add(url);
@@ -597,32 +589,16 @@ public TruffleObject lookupJavaClass(String className) {
597589
return getBuiltins().error().makeMissingPolyglotImportError(className);
598590
}
599591

600-
/**
601-
* Tries to find a Java class by its fully qualified name in all the {@link HostClassLoader host
602-
* class loaders}.
603-
*/
604592
private Object lookupHostSymbol(String fqn)
605593
throws ClassNotFoundException, UnknownIdentifierException, UnsupportedMessageException {
606-
if (findGuestJava() == null) {
607-
Class<?> clazz = null;
608-
ClassNotFoundException lastEx = null;
609-
for (var hostClassLoader : hostClassLoaders.values()) {
610-
try {
611-
clazz = hostClassLoader.loadClass(fqn);
612-
if (clazz != null) {
613-
break;
614-
}
615-
} catch (ClassNotFoundException e) {
616-
lastEx = e;
617-
continue;
618-
}
619-
}
620-
if (clazz == null) {
621-
throw new ClassNotFoundException("Error loading host symbol " + fqn, lastEx);
594+
try {
595+
if (findGuestJava() == null) {
596+
return environment.asHostSymbol(hostClassLoader.loadClass(fqn));
597+
} else {
598+
return InteropLibrary.getUncached().readMember(findGuestJava(), fqn);
622599
}
623-
return environment.asHostSymbol(clazz);
624-
} else {
625-
return InteropLibrary.getUncached().readMember(findGuestJava(), fqn);
600+
} catch (Error e) {
601+
throw new ClassNotFoundException("Error loading " + fqn, e);
626602
}
627603
}
628604

engine/runtime/src/main/java/org/enso/interpreter/runtime/HostClassLoader.java

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,9 @@
11
package org.enso.interpreter.runtime;
22

3-
import com.oracle.truffle.api.TruffleFile;
43
import java.net.URL;
54
import java.net.URLClassLoader;
6-
import java.util.Locale;
75
import java.util.Map;
86
import java.util.concurrent.ConcurrentHashMap;
9-
import org.enso.pkg.Package;
107
import org.graalvm.polyglot.Context;
118
import org.slf4j.Logger;
129
import org.slf4j.LoggerFactory;
@@ -28,16 +25,12 @@ final class HostClassLoader extends URLClassLoader implements AutoCloseable {
2825
// module layer's class loader.
2926
private static final ClassLoader polyglotClassLoader = Context.class.getClassLoader();
3027

31-
private final Package<TruffleFile> pkg;
32-
3328
// polyglotClassLoader will be used only iff `org.enso.runtime` module is not in the
3429
// boot module layer.
3530
private static final boolean isRuntimeModInBootLayer;
3631

37-
public HostClassLoader(Package<TruffleFile> pkg) {
32+
public HostClassLoader() {
3833
super(new URL[0]);
39-
this.pkg = pkg;
40-
assert pkg.polyglotDir().exists();
4134
}
4235

4336
static {
@@ -92,9 +85,4 @@ protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundE
9285
public void close() {
9386
loadedClasses.clear();
9487
}
95-
96-
@Override
97-
public String toString() {
98-
return "HostClassLoader(" + pkg.libraryName() + ")";
99-
}
10088
}

engine/runtime/src/main/scala/org/enso/interpreter/runtime/DefaultPackageRepository.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ private class DefaultPackageRepository(
197197
isLibrary: Boolean
198198
): Unit = {
199199
val extensions = pkg.listPolyglotExtensions("java")
200-
extensions.foreach(ext => context.addToClassPath(ext, pkg))
200+
extensions.foreach(context.addToClassPath)
201201

202202
val (regularModules, syntheticModulesMetadata) = pkg
203203
.listSources()

0 commit comments

Comments
 (0)