Fix project1/extra

This commit is contained in:
Adrien Piquerez 2024-03-27 10:37:44 +01:00
parent a92b975032
commit 4a946a68cd
3 changed files with 36 additions and 41 deletions

View File

@ -81,41 +81,27 @@ public final class MetaBuildLoader extends URLClassLoader {
jnaJars);
final Pattern pattern = Pattern.compile(fullPattern);
final File[] cp = appProvider.mainClasspath();
final URL[] interfaceURLs = new URL[3];
final URL[] jlineURLs = new URL[7];
final Set<File> interfaceFiles = new LinkedHashSet<>();
final Set<File> jlineFiles = new LinkedHashSet<>();
final File[] extra =
appProvider.id().classpathExtra() == null ? new File[0] : appProvider.id().classpathExtra();
final Set<File> bottomClasspath = new LinkedHashSet<>();
{
int interfaceIndex = 0;
int jlineIndex = 0;
for (final File file : cp) {
final String name = file.getName();
if ((name.contains("test-interface")
|| name.contains("compiler-interface")
|| name.contains("util-interface"))
&& pattern.matcher(name).find()) {
interfaceURLs[interfaceIndex] = file.toURI().toURL();
interfaceIndex += 1;
} else if (pattern.matcher(name).find()) {
jlineURLs[jlineIndex] = file.toURI().toURL();
jlineIndex += 1;
} else {
bottomClasspath.add(file);
}
}
for (final File file : extra) {
for (final File file : cp) {
final String name = file.getName();
if ((name.contains("test-interface")
|| name.contains("compiler-interface")
|| name.contains("util-interface"))
&& pattern.matcher(name).find()) {
interfaceFiles.add(file);
} else if (pattern.matcher(name).find()) {
jlineFiles.add(file);
} else {
bottomClasspath.add(file);
}
}
final URL[] rest = new URL[bottomClasspath.size()];
{
int i = 0;
for (final File file : bottomClasspath) {
rest[i] = file.toURI().toURL();
i += 1;
}
for (final File file : extra) {
bottomClasspath.add(file);
}
final ScalaProvider scalaProvider = appProvider.scalaProvider();
ClassLoader topLoader = scalaProvider.launcher().topLoader();
@ -148,8 +134,9 @@ public final class MetaBuildLoader extends URLClassLoader {
}
};
final SbtInterfaceLoader interfaceLoader = new SbtInterfaceLoader(interfaceURLs, topLoader);
final JLineLoader jlineLoader = new JLineLoader(jlineURLs, interfaceLoader);
final SbtInterfaceLoader interfaceLoader =
new SbtInterfaceLoader(toURLArray(interfaceFiles), topLoader);
final JLineLoader jlineLoader = new JLineLoader(toURLArray(jlineFiles), interfaceLoader);
final File[] siJars = scalaProvider.jars();
final URL[] lib = new URL[1];
int scalaRestCount = siJars.length - 1;
@ -175,6 +162,17 @@ public final class MetaBuildLoader extends URLClassLoader {
assert lib[0] != null : "no scala-library.jar";
final ScalaLibraryClassLoader libraryLoader = new ScalaLibraryClassLoader(lib, jlineLoader);
final FullScalaLoader fullScalaLoader = new FullScalaLoader(scalaRest, libraryLoader);
return new MetaBuildLoader(rest, fullScalaLoader, libraryLoader, interfaceLoader, jlineLoader);
return new MetaBuildLoader(
toURLArray(bottomClasspath), fullScalaLoader, libraryLoader, interfaceLoader, jlineLoader);
}
private static URL[] toURLArray(Set<File> files) throws java.net.MalformedURLException {
URL[] urls = new URL[files.size()];
int i = 0;
for (final File file : files) {
urls[i] = file.toURI().toURL();
i += 1;
}
return urls;
}
}

View File

@ -24,22 +24,19 @@ def checkExtra =
s
}
def addExtra1(s: State, extra: Seq[File]): State =
{
val cs = s.configuration.provider.components()
val copied = cs.addToComponent("extra", extra.toArray)
if(copied) s.reload else s
}
def addExtra1(s: State, extra: Seq[File]): State = {
val cs = s.configuration.provider.components()
val copied = cs.addToComponent("extra", extra.toArray)
if(copied) s.reload else s
}
def addExtra2(s: State, extra: Seq[File]): State = {
val reload = State.defaultReload(s)
val currentID = reload.app
val currentExtra = currentID.classpathExtra
val newExtra = (currentExtra ++ extra).distinct
if(newExtra.length == currentExtra.length)
s
else
{
if(newExtra.length == currentExtra.length) s
else {
val newID = ApplicationID(currentID).copy(extra = extra)
s.setNext(new State.Return(reload.copy(app = newID)))
}