mirror of https://github.com/sbt/sbt.git
Put compiler-interface in the Scala Instance top loader
This commit is contained in:
parent
5d1c394bb4
commit
c9ab2ee558
|
|
@ -65,11 +65,17 @@ public final class MetaBuildLoader extends URLClassLoader {
|
|||
*/
|
||||
public static MetaBuildLoader makeLoader(final AppProvider appProvider) throws IOException {
|
||||
final String jlineJars = "jline-?[0-9.]+-sbt-.*|jline-terminal(-(jna|jansi))?-[0-9.]+";
|
||||
final String testInterfaceJars = "test-interface-[0-9.]+";
|
||||
final String compilerInterfaceJars = "compiler-interface-[0-9.]+(-.*)?";
|
||||
final String jansiJars = "jansi-[0-9.]+";
|
||||
final String jnaJars = "jna-(platform-)?[0-9.]+";
|
||||
final String fullPattern =
|
||||
"^(test-interface-[0-9.]+|" + jlineJars + "|jansi-[0-9.]+|jna-(platform-)?[0-9.]+)\\.jar";
|
||||
String.format(
|
||||
"^(%s|%s|%s|%s|%s)\\.jar",
|
||||
jlineJars, testInterfaceJars, compilerInterfaceJars, jansiJars, jnaJars);
|
||||
final Pattern pattern = Pattern.compile(fullPattern);
|
||||
final File[] cp = appProvider.mainClasspath();
|
||||
final URL[] interfaceURLs = new URL[1];
|
||||
final URL[] interfaceURLs = new URL[2];
|
||||
final URL[] jlineURLs = new URL[7];
|
||||
final File[] extra =
|
||||
appProvider.id().classpathExtra() == null ? new File[0] : appProvider.id().classpathExtra();
|
||||
|
|
@ -80,7 +86,8 @@ public final class MetaBuildLoader extends URLClassLoader {
|
|||
int jlineIndex = 0;
|
||||
for (final File file : cp) {
|
||||
final String name = file.getName();
|
||||
if (name.contains("test-interface") && pattern.matcher(name).find()) {
|
||||
if ((name.contains("test-interface") || name.contains("compiler-interface"))
|
||||
&& pattern.matcher(name).find()) {
|
||||
interfaceURLs[interfaceIndex] = file.toURI().toURL();
|
||||
interfaceIndex += 1;
|
||||
} else if (pattern.matcher(name).find()) {
|
||||
|
|
@ -133,7 +140,7 @@ public final class MetaBuildLoader extends URLClassLoader {
|
|||
}
|
||||
};
|
||||
|
||||
final TestInterfaceLoader interfaceLoader = new TestInterfaceLoader(interfaceURLs, topLoader);
|
||||
final SbtInterfaceLoader interfaceLoader = new SbtInterfaceLoader(interfaceURLs, topLoader);
|
||||
final JLineLoader jlineLoader = new JLineLoader(jlineURLs, interfaceLoader);
|
||||
final File[] siJars = scalaProvider.jars();
|
||||
final URL[] lib = new URL[1];
|
||||
|
|
|
|||
|
|
@ -10,14 +10,15 @@ package sbt.internal;
|
|||
import java.net.URL;
|
||||
import java.net.URLClassLoader;
|
||||
|
||||
class TestInterfaceLoader extends URLClassLoader {
|
||||
TestInterfaceLoader(final URL[] urls, final ClassLoader parent) {
|
||||
// This ClassLoader must contain pure sbt java interfaces
|
||||
class SbtInterfaceLoader extends URLClassLoader {
|
||||
SbtInterfaceLoader(final URL[] urls, final ClassLoader parent) {
|
||||
super(urls, parent);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "SbtTestInterfaceClassLoader(" + getURLs()[0] + ")";
|
||||
return "SbtInterfaceClassLoader(" + getURLs()[0] + ")";
|
||||
}
|
||||
|
||||
static {
|
||||
|
|
@ -332,8 +332,10 @@ object Defaults extends BuildCommon {
|
|||
exportPipelining := usePipelining.value,
|
||||
useScalaReplJLine :== false,
|
||||
scalaInstanceTopLoader := {
|
||||
if (!useScalaReplJLine.value) classOf[org.jline.terminal.Terminal].getClassLoader
|
||||
else appConfiguration.value.provider.scalaProvider.launcher.topLoader.getParent
|
||||
// the JLineLoader contains the SbtInterfaceClassLoader
|
||||
if (!useScalaReplJLine.value)
|
||||
classOf[org.jline.terminal.Terminal].getClassLoader // the JLineLoader
|
||||
else classOf[Compilers].getClassLoader // the SbtInterfaceClassLoader
|
||||
},
|
||||
useSuperShell := { if (insideCI.value) false else ITerminal.console.isSupershellEnabled },
|
||||
superShellThreshold :== SysProp.supershellThreshold,
|
||||
|
|
|
|||
Loading…
Reference in New Issue