From 50138f47e078a89901e4e623239e55d60167abed Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Sun, 18 Feb 2024 23:59:01 +0100 Subject: refactor(language): classpath based library context --- .../refinery/language/library/BuiltinLibrary.java | 7 ++++++- .../language/library/ClasspathBasedLibrary.java | 22 ++++++++-------------- 2 files changed, 14 insertions(+), 15 deletions(-) (limited to 'subprojects/language/src/main') diff --git a/subprojects/language/src/main/java/tools/refinery/language/library/BuiltinLibrary.java b/subprojects/language/src/main/java/tools/refinery/language/library/BuiltinLibrary.java index d88d0299..ce80504e 100644 --- a/subprojects/language/src/main/java/tools/refinery/language/library/BuiltinLibrary.java +++ b/subprojects/language/src/main/java/tools/refinery/language/library/BuiltinLibrary.java @@ -17,6 +17,11 @@ public class BuiltinLibrary extends ClasspathBasedLibrary { () -> new IllegalStateException("Builtin library was not found")); public BuiltinLibrary() { - super(BUILTIN_LIBRARY_NAME, List.of(BUILTIN_LIBRARY_NAME)); + super(BUILTIN_LIBRARY_NAME); + } + + @Override + public List getAutomaticImports() { + return List.of(BUILTIN_LIBRARY_NAME); } } diff --git a/subprojects/language/src/main/java/tools/refinery/language/library/ClasspathBasedLibrary.java b/subprojects/language/src/main/java/tools/refinery/language/library/ClasspathBasedLibrary.java index 3a9bb920..56bb8b96 100644 --- a/subprojects/language/src/main/java/tools/refinery/language/library/ClasspathBasedLibrary.java +++ b/subprojects/language/src/main/java/tools/refinery/language/library/ClasspathBasedLibrary.java @@ -12,16 +12,15 @@ import java.nio.file.Path; import java.util.*; public abstract class ClasspathBasedLibrary implements RefineryLibrary { + private final Class context; private final QualifiedName prefix; - private final List automaticImports; private final URI rootUri; - protected ClasspathBasedLibrary(QualifiedName prefix, List automaticImports) { - this.prefix = prefix; - this.automaticImports = List.copyOf(automaticImports); - var context = this.getClass(); - var contextPath = context.getCanonicalName().replace('.', '/') + ".class"; - var contextResource = context.getClassLoader().getResource(contextPath); + protected ClasspathBasedLibrary(Class context, QualifiedName prefix) { + this.context = context == null ? getClass() : context; + this.prefix = prefix; + var contextPath = this.context.getCanonicalName().replace('.', '/') + ".class"; + var contextResource = this.context.getClassLoader().getResource(contextPath); if (contextResource == null) { throw new IllegalStateException("Failed to find library context"); } @@ -32,18 +31,13 @@ public abstract class ClasspathBasedLibrary implements RefineryLibrary { } protected ClasspathBasedLibrary(QualifiedName prefix) { - this(prefix, List.of()); - } - - @Override - public List getAutomaticImports() { - return automaticImports; + this(null, prefix); } @Override public Optional resolveQualifiedName(QualifiedName qualifiedName, List libraryPaths) { if (qualifiedName.startsWith(prefix)) { - return getLibraryUri(this.getClass(), qualifiedName); + return getLibraryUri(context, qualifiedName); } return Optional.empty(); } -- cgit v1.2.3-54-g00ecf