From c35df626629f593b5576820dc9ed256a178d8d4e Mon Sep 17 00:00:00 2001 From: xuwei-k <6b656e6a69@gmail.com> Date: Sat, 30 Aug 2025 18:46:18 +0900 Subject: [PATCH] delete scala-reflect dependency --- build.sbt | 1 - .../scala/sbt/internal/inc/PickleJar.scala | 1 - .../scala/sbt/internal/inc/RootPath.scala | 60 +++++++++++++++++++ 3 files changed, 60 insertions(+), 2 deletions(-) create mode 100644 internal/zinc-core/src/main/scala/sbt/internal/inc/RootPath.scala diff --git a/build.sbt b/build.sbt index 69dae4d22e..ca2f06e3dc 100644 --- a/build.sbt +++ b/build.sbt @@ -292,7 +292,6 @@ lazy val zincCore = (projectMatrix in internalPath / "zinc-core") exclude[MissingClassProblem]("xsbti.*"), ), libraryDependencies ++= List( - "org.scala-lang" % "scala-reflect" % scala213, "org.scala-lang.modules" %% "scala-parallel-collections" % "1.0.4" ), ) diff --git a/internal/zinc-core/src/main/scala/sbt/internal/inc/PickleJar.scala b/internal/zinc-core/src/main/scala/sbt/internal/inc/PickleJar.scala index 1657377a1a..26829fb7fc 100644 --- a/internal/zinc-core/src/main/scala/sbt/internal/inc/PickleJar.scala +++ b/internal/zinc-core/src/main/scala/sbt/internal/inc/PickleJar.scala @@ -16,7 +16,6 @@ package inc import java.nio.file.{ FileVisitResult, Files, Path, SimpleFileVisitor } import java.nio.file.attribute.BasicFileAttributes import sbt.util.Logger -import scala.reflect.io.RootPath import sbt.internal.io.Retry object PickleJar { diff --git a/internal/zinc-core/src/main/scala/sbt/internal/inc/RootPath.scala b/internal/zinc-core/src/main/scala/sbt/internal/inc/RootPath.scala new file mode 100644 index 0000000000..cef60e870a --- /dev/null +++ b/internal/zinc-core/src/main/scala/sbt/internal/inc/RootPath.scala @@ -0,0 +1,60 @@ +/* + * Zinc - The incremental compiler for Scala. + * Copyright Scala Center, Lightbend, and Mark Harrah + * + * Licensed under Apache License 2.0 + * SPDX-License-Identifier: Apache-2.0 + * + * See the NOTICE file distributed with this work for + * additional information regarding copyright ownership. + */ + +package sbt.internal.inc + +import java.io.Closeable +import java.nio +import java.nio.file.Files +import java.nio.file.spi.FileSystemProvider + +import scala.jdk.CollectionConverters._ + +/** + * borrowed from scala-reflect + * [[https://github.com/scala/scala/blob/v2.13.16/src/reflect/scala/reflect/io/RootPath.scala]] + */ +private[inc] abstract class RootPath extends Closeable { + def root: nio.file.Path +} + +private[inc] object RootPath { + private lazy val jarFsProvider = FileSystemProvider.installedProviders().asScala.find( + _.getScheme == "jar" + ).getOrElse(throw new RuntimeException("No jar filesystem provider")) + def apply(path: nio.file.Path, writable: Boolean): RootPath = { + if (path.getFileName.toString.endsWith(".jar")) { + val env = new java.util.HashMap[String, String]() + if (!Files.exists(path.getParent)) + Files.createDirectories(path.getParent) + if (writable) { + env.put("create", "true") + if (Files.exists(path)) + Files.delete(path) + } + val zipfs = jarFsProvider.newFileSystem(path, env) + + new RootPath { + def root = zipfs.getRootDirectories.iterator().next() + def close(): Unit = { + zipfs.close() + } + override def toString: String = path.toString + } + } else { + new RootPath { + override def root: nio.file.Path = path + override def close(): Unit = () + override def toString: String = path.toString + } + } + } +}