|
30 | 30 | import java.nio.file.Path;
|
31 | 31 | import java.util.ArrayList;
|
32 | 32 | import java.util.Arrays;
|
33 |
| -import java.util.HashMap; |
34 | 33 | import java.util.HashSet;
|
35 |
| -import java.util.Map; |
36 | 34 | import java.util.Optional;
|
37 | 35 | import java.util.Set;
|
38 | 36 | import java.util.UUID;
|
@@ -84,7 +82,7 @@ public final class EnsoContext {
|
84 | 82 |
|
85 | 83 | private final EnsoLanguage language;
|
86 | 84 | private final Env environment;
|
87 |
| - private final Map<LibraryName, HostClassLoader> hostClassLoaders = new HashMap<>(); |
| 85 | + private final HostClassLoader hostClassLoader = new HostClassLoader(); |
88 | 86 | private final boolean assertionsEnabled;
|
89 | 87 | private final boolean isPrivateCheckDisabled;
|
90 | 88 | private final boolean isStaticTypeAnalysisEnabled;
|
@@ -299,7 +297,7 @@ public void shutdown() {
|
299 | 297 | packageRepository.shutdown();
|
300 | 298 | guestJava = null;
|
301 | 299 | topScope = null;
|
302 |
| - hostClassLoaders.values().forEach(HostClassLoader::close); |
| 300 | + hostClassLoader.close(); |
303 | 301 | EnsoParser.freeAll();
|
304 | 302 | }
|
305 | 303 |
|
@@ -468,16 +466,10 @@ public Optional<Module> findModuleByExpressionId(UUID expressionId) {
|
468 | 466 | * Modifies the classpath to use to lookup {@code polyglot java} imports.
|
469 | 467 | *
|
470 | 468 | * @param file the file to register
|
471 |
| - * @param pkg Package the file belongs to |
472 | 469 | */
|
473 | 470 | @TruffleBoundary
|
474 |
| - public void addToClassPath(TruffleFile file, Package<TruffleFile> pkg) { |
| 471 | + public void addToClassPath(TruffleFile file) { |
475 | 472 | 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 |
| - } |
481 | 473 | try {
|
482 | 474 | var url = file.toUri().toURL();
|
483 | 475 | hostClassLoader.add(url);
|
@@ -597,32 +589,16 @@ public TruffleObject lookupJavaClass(String className) {
|
597 | 589 | return getBuiltins().error().makeMissingPolyglotImportError(className);
|
598 | 590 | }
|
599 | 591 |
|
600 |
| - /** |
601 |
| - * Tries to find a Java class by its fully qualified name in all the {@link HostClassLoader host |
602 |
| - * class loaders}. |
603 |
| - */ |
604 | 592 | private Object lookupHostSymbol(String fqn)
|
605 | 593 | 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); |
622 | 599 | }
|
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); |
626 | 602 | }
|
627 | 603 | }
|
628 | 604 |
|
|
0 commit comments