Skip to content

Instantly share code, notes, and snippets.

@olafurpg
Created January 23, 2020 16:13
Show Gist options
  • Save olafurpg/6c0e816e11fc01296ef1f5e339d39c9e to your computer and use it in GitHub Desktop.
Save olafurpg/6c0e816e11fc01296ef1f5e339d39c9e to your computer and use it in GitHub Desktop.
diff --git a/metals/src/main/scala/scala/meta/internal/pantsbuild/BloopPants.scala b/metals/src/main/scala/scala/meta/internal/pantsbuild/BloopPants.scala
index 3dca37a..26ec5c5 100644
--- a/metals/src/main/scala/scala/meta/internal/pantsbuild/BloopPants.scala
+++ b/metals/src/main/scala/scala/meta/internal/pantsbuild/BloopPants.scala
@@ -30,6 +30,7 @@ import scala.sys.process.Process
import scala.meta.io.Classpath
import coursierapi.MavenRepository
import scala.meta.internal.io.PathIO
+import java.nio.file.StandardCopyOption
object BloopPants {
@@ -525,13 +526,33 @@ private class BloopPants(
private val exportClasspathDir: AbsolutePath = AbsolutePath(
workspace.resolve("dist").resolve("export-classpath")
)
+ private val exportClasspathJars = mutable.Map.empty[Path, Option[Path]]
+ private val bloopJars =
+ Files.createDirectories(bloopDir.resolve("bloop-jars"))
private def exportClasspath(target: PantsTarget): List[Path] = {
exportClasspathCache.getOrElseUpdate(
target.name, {
val classpathFile =
exportClasspathDir.resolve(target.id + "-classpath.txt")
if (classpathFile.isFile) {
- Classpath(classpathFile.readText.trim()).entries.map(_.toNIO)
+ val classpath =
+ Classpath(classpathFile.readText.trim()).entries.map(_.toNIO)
+ classpath.flatMap {
+ entry =>
+ exportClasspathJars.getOrElseUpdate(
+ entry, {
+ val out = bloopJars.resolve(target.id + ".jar")
+ if (Files.isRegularFile(entry)) {
+ Files.copy(entry, out, StandardCopyOption.REPLACE_EXISTING)
+ Some(out)
+ } else if (Files.isDirectory(entry)) {
+ Some(Jars.fromDirectory(target, entry, out))
+ } else {
+ None
+ }
+ }
+ )
+ }
} else {
Nil
}
diff --git a/metals/src/main/scala/scala/meta/internal/pantsbuild/PantsExport.scala b/metals/src/main/scala/scala/meta/internal/pantsbuild/PantsExport.scala
index d9f5c13..0f89b47 100644
--- a/metals/src/main/scala/scala/meta/internal/pantsbuild/PantsExport.scala
+++ b/metals/src/main/scala/scala/meta/internal/pantsbuild/PantsExport.scala
@@ -2,6 +2,7 @@ package scala.meta.internal.pantsbuild
import java.nio.file.Paths
import scala.collection.mutable
+import java.nio.file.Files
case class PantsExport(
targets: Map[String, PantsTarget],
@@ -63,9 +64,11 @@ object PantsExport {
val allLibraries = output.obj(PantsKeys.libraries).obj
val libraries: Map[String, PantsLibrary] = allLibraries.iterator.map {
case (name, valueObj) =>
- name -> PantsLibrary(name, valueObj.obj.map {
+ name -> PantsLibrary(name, valueObj.obj.flatMap {
case (key, value) =>
- key -> Paths.get(value.str)
+ val path = Paths.get(value.str)
+ if (Files.isRegularFile(path)) Some(key -> path)
+ else None
})
}.toMap
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment