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 {
|
public static MetaBuildLoader makeLoader(final AppProvider appProvider) throws IOException {
|
||||||
final String jlineJars = "jline-?[0-9.]+-sbt-.*|jline-terminal(-(jna|jansi))?-[0-9.]+";
|
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 =
|
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 Pattern pattern = Pattern.compile(fullPattern);
|
||||||
final File[] cp = appProvider.mainClasspath();
|
final File[] cp = appProvider.mainClasspath();
|
||||||
final URL[] interfaceURLs = new URL[1];
|
final URL[] interfaceURLs = new URL[2];
|
||||||
final URL[] jlineURLs = new URL[7];
|
final URL[] jlineURLs = new URL[7];
|
||||||
final File[] extra =
|
final File[] extra =
|
||||||
appProvider.id().classpathExtra() == null ? new File[0] : appProvider.id().classpathExtra();
|
appProvider.id().classpathExtra() == null ? new File[0] : appProvider.id().classpathExtra();
|
||||||
|
|
@ -80,7 +86,8 @@ public final class MetaBuildLoader extends URLClassLoader {
|
||||||
int jlineIndex = 0;
|
int jlineIndex = 0;
|
||||||
for (final File file : cp) {
|
for (final File file : cp) {
|
||||||
final String name = file.getName();
|
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();
|
interfaceURLs[interfaceIndex] = file.toURI().toURL();
|
||||||
interfaceIndex += 1;
|
interfaceIndex += 1;
|
||||||
} else if (pattern.matcher(name).find()) {
|
} 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 JLineLoader jlineLoader = new JLineLoader(jlineURLs, interfaceLoader);
|
||||||
final File[] siJars = scalaProvider.jars();
|
final File[] siJars = scalaProvider.jars();
|
||||||
final URL[] lib = new URL[1];
|
final URL[] lib = new URL[1];
|
||||||
|
|
|
||||||
|
|
@ -10,14 +10,15 @@ package sbt.internal;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.net.URLClassLoader;
|
import java.net.URLClassLoader;
|
||||||
|
|
||||||
class TestInterfaceLoader extends URLClassLoader {
|
// This ClassLoader must contain pure sbt java interfaces
|
||||||
TestInterfaceLoader(final URL[] urls, final ClassLoader parent) {
|
class SbtInterfaceLoader extends URLClassLoader {
|
||||||
|
SbtInterfaceLoader(final URL[] urls, final ClassLoader parent) {
|
||||||
super(urls, parent);
|
super(urls, parent);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "SbtTestInterfaceClassLoader(" + getURLs()[0] + ")";
|
return "SbtInterfaceClassLoader(" + getURLs()[0] + ")";
|
||||||
}
|
}
|
||||||
|
|
||||||
static {
|
static {
|
||||||
|
|
@ -332,8 +332,10 @@ object Defaults extends BuildCommon {
|
||||||
exportPipelining := usePipelining.value,
|
exportPipelining := usePipelining.value,
|
||||||
useScalaReplJLine :== false,
|
useScalaReplJLine :== false,
|
||||||
scalaInstanceTopLoader := {
|
scalaInstanceTopLoader := {
|
||||||
if (!useScalaReplJLine.value) classOf[org.jline.terminal.Terminal].getClassLoader
|
// the JLineLoader contains the SbtInterfaceClassLoader
|
||||||
else appConfiguration.value.provider.scalaProvider.launcher.topLoader.getParent
|
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 },
|
useSuperShell := { if (insideCI.value) false else ITerminal.console.isSupershellEnabled },
|
||||||
superShellThreshold :== SysProp.supershellThreshold,
|
superShellThreshold :== SysProp.supershellThreshold,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue