mirror of https://github.com/sbt/sbt.git
Fix project1/extra
This commit is contained in:
parent
a92b975032
commit
4a946a68cd
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)))
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue