From 22905deb199e9b88b7e2157828219dcfe33a4877 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93lafur=20P=C3=A1ll=20Geirsson?= Date: Wed, 25 Apr 2018 12:17:38 +0200 Subject: [PATCH 1/2] Remove scala.meta.io.{Multipath,Sourcepath,Fragment} These classes are no longer used. --- .../scala/meta/internal/io/package.scala | 33 +++++ .../src/main/scala/scala/meta/io/Api.scala | 9 -- .../main/scala/scala/meta/io/Classpath.scala | 23 ++++ .../main/scala/scala/meta/io/Fragment.scala | 19 --- .../main/scala/scala/meta/io/Multipath.scala | 116 ------------------ .../main/scala/scala/meta/cli/Metacp.scala | 2 +- .../scala/meta/internal/metacp/Main.scala | 4 +- .../scala/meta/tests/api/SurfaceSuite.scala | 3 - .../scala/meta/tests/io/FragmentSuite.scala | 22 ---- .../scala/meta/tests/io/MultipathSuite.scala | 26 ---- .../meta/tests/metacp/SignatureSuite.scala | 3 +- .../tests/prettyprinters/PublicSuite.scala | 12 -- 12 files changed, 60 insertions(+), 212 deletions(-) create mode 100644 scalameta/io/shared/src/main/scala/scala/meta/internal/io/package.scala create mode 100644 scalameta/io/shared/src/main/scala/scala/meta/io/Classpath.scala delete mode 100644 scalameta/io/shared/src/main/scala/scala/meta/io/Fragment.scala delete mode 100644 scalameta/io/shared/src/main/scala/scala/meta/io/Multipath.scala delete mode 100644 tests/jvm/src/test/scala/scala/meta/tests/io/FragmentSuite.scala diff --git a/scalameta/io/shared/src/main/scala/scala/meta/internal/io/package.scala b/scalameta/io/shared/src/main/scala/scala/meta/internal/io/package.scala new file mode 100644 index 0000000000..c3b02185fd --- /dev/null +++ b/scalameta/io/shared/src/main/scala/scala/meta/internal/io/package.scala @@ -0,0 +1,33 @@ +package scala.meta.internal + +import java.nio.file.FileVisitor +import java.nio.file.Files +import java.nio.file.Path +import scala.meta.io.AbsolutePath +import scala.meta.io.Classpath + +package object io { + + implicit class XtensionClasspath(cp: Classpath) { + def visit(getVisitor: AbsolutePath => FileVisitor[Path]): Unit = { + cp.entries.foreach { base => + if (base.isDirectory) { + val visitor = getVisitor(base) + Files.walkFileTree(base.toNIO, visitor) + } else if (base.isFile) { + PathIO.extension(base.toNIO) match { + case "jar" => + val root = FileIO.jarRootPath(base) + val visitor = getVisitor(root) + Files.walkFileTree(root.toNIO, visitor) + case _ => + sys.error(s"Expected jar file, obtained $base") + } + } else { + () + } + } + } + } + +} diff --git a/scalameta/io/shared/src/main/scala/scala/meta/io/Api.scala b/scalameta/io/shared/src/main/scala/scala/meta/io/Api.scala index 024a835516..b5c9b98864 100644 --- a/scalameta/io/shared/src/main/scala/scala/meta/io/Api.scala +++ b/scalameta/io/shared/src/main/scala/scala/meta/io/Api.scala @@ -10,15 +10,6 @@ private[meta] trait Aliases { type RelativePath = scala.meta.io.RelativePath lazy val RelativePath = scala.meta.io.RelativePath - type Multipath = scala.meta.io.Multipath - // there's no term Multipath, so we don't have a term alias here - - type Fragment = scala.meta.io.Fragment - val Fragment = scala.meta.io.Fragment - type Classpath = scala.meta.io.Classpath lazy val Classpath = scala.meta.io.Classpath - - type Sourcepath = scala.meta.io.Sourcepath - lazy val Sourcepath = scala.meta.io.Sourcepath } diff --git a/scalameta/io/shared/src/main/scala/scala/meta/io/Classpath.scala b/scalameta/io/shared/src/main/scala/scala/meta/io/Classpath.scala new file mode 100644 index 0000000000..63842d5677 --- /dev/null +++ b/scalameta/io/shared/src/main/scala/scala/meta/io/Classpath.scala @@ -0,0 +1,23 @@ +package scala.meta.io + +import java.io.File.pathSeparator + +final case class Classpath(entries: List[AbsolutePath]) { + + @deprecated("Use .entries instead", "v4.0.0") + def shallow: List[AbsolutePath] = entries + + def syntax: String = entries.mkString(pathSeparator) + def structure: String = s"""Classpath("$syntax")""" + override def toString: String = syntax +} + +object Classpath { + def apply(entry: AbsolutePath): Classpath = { + new Classpath(List(entry)) + } + + def apply(value: String): Classpath = { + new Classpath(value.split(pathSeparator).map(AbsolutePath(_)).toList) + } +} diff --git a/scalameta/io/shared/src/main/scala/scala/meta/io/Fragment.scala b/scalameta/io/shared/src/main/scala/scala/meta/io/Fragment.scala deleted file mode 100644 index 6022357edb..0000000000 --- a/scalameta/io/shared/src/main/scala/scala/meta/io/Fragment.scala +++ /dev/null @@ -1,19 +0,0 @@ -package scala.meta.io - -import java.net._ -import scala.meta.internal.io.PathIO - -final case class Fragment(base: AbsolutePath, name: RelativePath) { - def uri: URI = { - val baseuri = base.toURI.normalize - if (baseuri.toString.endsWith(".jar")) { - val reluri = PathIO.toUnix(name.toString) - new URI(s"jar:$baseuri!/$reluri") - } else { - base.resolve(name).toURI.normalize - } - } - def syntax: String = uri.toString - def structure: String = s"""Fragment(${base.structure}, ${name.structure})""" - override def toString = syntax -} diff --git a/scalameta/io/shared/src/main/scala/scala/meta/io/Multipath.scala b/scalameta/io/shared/src/main/scala/scala/meta/io/Multipath.scala deleted file mode 100644 index 7ec24aab2d..0000000000 --- a/scalameta/io/shared/src/main/scala/scala/meta/io/Multipath.scala +++ /dev/null @@ -1,116 +0,0 @@ -package scala.meta.io - -import java.net._ -import java.io._ -import java.io.File.pathSeparator -import java.nio.file.FileVisitor -import java.nio.file.Files -import java.nio.file.Path -import java.util.zip._ -import scala.collection.mutable -import scala.meta.internal.io.FileIO -import scala.meta.internal.io.PathIO - -sealed trait Multipath { - def shallow: List[AbsolutePath] - def syntax: String = shallow.mkString(pathSeparator) - def deep: List[Fragment] = { - var buf = mutable.LinkedHashSet[Fragment]() - shallow.foreach { base => - def exploreJar(base: AbsolutePath): Unit = { - if (scala.meta.internal.platform.isJS) { - throw new UnsupportedEncodingException("Unzipping jars is not yet supported in JS.") - } else { - val stream = new FileInputStream(base.toFile) - try { - val zip = new ZipInputStream(stream) - var entry = zip.getNextEntry - while (entry != null) { - if (!entry.getName.endsWith("/")) { - val name = RelativePath(entry.getName.stripPrefix("/")) - buf += new Fragment(base, name) - } - entry = zip.getNextEntry - } - } catch { - case ex: IOException => - // NOTE: If we fail to read the zip file, this shouldn't crash exploration. - // We may want to revisit this decision later. - } finally { - stream.close() - } - } - } - if (base.isDirectory) { - FileIO - .listAllFilesRecursively(base) - .files - .foreach(relpath => buf += new Fragment(base, relpath)) - } else if (base.isFile) { - if (base.toString.endsWith(".jar")) { - exploreJar(base) - } else { - sys.error(s"Obtained non-jar file $base. Expected directory or *.jar file.") - } - } else { - // Skip - } - } - buf.toList - } - - def relativize(uri: URI): Option[RelativePath] = { - deep.find(_.uri == uri).map(_.name) - } - - def find(name: RelativePath): Option[URI] = { - deep.find(_.name == name).map(_.uri) - } - - def visit(getVisitor: AbsolutePath => FileVisitor[Path]): Unit = { - shallow.foreach { base => - if (base.isDirectory) { - val visitor = getVisitor(base) - Files.walkFileTree(base.toNIO, visitor) - } else if (base.isFile) { - PathIO.extension(base.toNIO) match { - case "jar" => - val root = FileIO.jarRootPath(base) - val visitor = getVisitor(root) - Files.walkFileTree(root.toNIO, visitor) - case _ => - sys.error(s"Expected jar file, obtained $base") - } - } else { - () - } - } - } - -} - -final case class Classpath(shallow: List[AbsolutePath]) extends Multipath { - def structure: String = s"""Classpath("$syntax")""" - override def toString: String = syntax -} -object Classpath { - def apply(path: AbsolutePath): Classpath = - new Classpath(List(path)) - // NOTE: This constructor is inherently unsafe and escapes the entire safety - // provided by Absolute vs. Relative paths. This constructor will crash if the - // argument is not an absolute path. - def apply(value: String): Classpath = { - new Classpath(value.split(pathSeparator).map(AbsolutePath(_)).toList) - } -} - -final case class Sourcepath(shallow: List[AbsolutePath]) extends Multipath { - def structure: String = s"""Sourcepath("$syntax")""" - override def toString: String = syntax -} -object Sourcepath { - def apply(path: AbsolutePath): Sourcepath = - new Sourcepath(List(path)) - def apply(value: String): Sourcepath = - new Sourcepath(value.split(pathSeparator).map(AbsolutePath(_)).toList) -} diff --git a/semanticdb/metacp/src/main/scala/scala/meta/cli/Metacp.scala b/semanticdb/metacp/src/main/scala/scala/meta/cli/Metacp.scala index 519b57fa02..0c94c57904 100644 --- a/semanticdb/metacp/src/main/scala/scala/meta/cli/Metacp.scala +++ b/semanticdb/metacp/src/main/scala/scala/meta/cli/Metacp.scala @@ -25,7 +25,7 @@ object Metacp { case Some(settings) => process(settings, reporter) match { case Some(mclasspath) => - reporter.out.println(mclasspath.shallow.mkString(File.pathSeparator)) + reporter.out.println(mclasspath.entries.mkString(File.pathSeparator)) 0 case None => 1 diff --git a/semanticdb/metacp/src/main/scala/scala/meta/internal/metacp/Main.scala b/semanticdb/metacp/src/main/scala/scala/meta/internal/metacp/Main.scala index 3a08b69cd5..412c40ea6d 100644 --- a/semanticdb/metacp/src/main/scala/scala/meta/internal/metacp/Main.scala +++ b/semanticdb/metacp/src/main/scala/scala/meta/internal/metacp/Main.scala @@ -19,8 +19,8 @@ class Main(settings: Settings, reporter: Reporter) { val success = new AtomicBoolean(true) val classpath: GenSeq[AbsolutePath] = - if (settings.par) settings.classpath.shallow.par - else settings.classpath.shallow + if (settings.par) settings.classpath.entries.par + else settings.classpath.entries val buffer = new ConcurrentLinkedQueue[AbsolutePath]() diff --git a/tests/jvm/src/test/scala/scala/meta/tests/api/SurfaceSuite.scala b/tests/jvm/src/test/scala/scala/meta/tests/api/SurfaceSuite.scala index b6926f3b4b..f5cc463166 100644 --- a/tests/jvm/src/test/scala/scala/meta/tests/api/SurfaceSuite.scala +++ b/tests/jvm/src/test/scala/scala/meta/tests/api/SurfaceSuite.scala @@ -81,10 +81,7 @@ class SurfaceSuite extends FunSuite { |scala.meta.io |scala.meta.io.AbsolutePath |scala.meta.io.Classpath - |scala.meta.io.Fragment - |scala.meta.io.Multipath |scala.meta.io.RelativePath - |scala.meta.io.Sourcepath |scala.meta.metac |scala.meta.metac.Reporter * |scala.meta.metac.Settings * diff --git a/tests/jvm/src/test/scala/scala/meta/tests/io/FragmentSuite.scala b/tests/jvm/src/test/scala/scala/meta/tests/io/FragmentSuite.scala deleted file mode 100644 index 85703c5872..0000000000 --- a/tests/jvm/src/test/scala/scala/meta/tests/io/FragmentSuite.scala +++ /dev/null @@ -1,22 +0,0 @@ -package scala.meta.tests.io - -import scala.meta._ - -import java.io.File - -import org.scalatest.FunSuite - -class FragmentSuite extends FunSuite { - test("Fragment.normalize") { - val obtained = - Fragment(AbsolutePath(new File(".", "a")), RelativePath(new File(".."))).uri.toString - val expected = new File(".").getAbsoluteFile.toURI.normalize().toString - assert(obtained == expected) - } - - test("Fragment.normalize jar") { - val obtained = - Fragment(AbsolutePath(new File(".", "foo.jar")), RelativePath(new File("MANIFEST"))).uri.toString - assert(obtained.contains("!/")) - } -} diff --git a/tests/jvm/src/test/scala/scala/meta/tests/io/MultipathSuite.scala b/tests/jvm/src/test/scala/scala/meta/tests/io/MultipathSuite.scala index 75e26f9ded..3db50b4e24 100644 --- a/tests/jvm/src/test/scala/scala/meta/tests/io/MultipathSuite.scala +++ b/tests/jvm/src/test/scala/scala/meta/tests/io/MultipathSuite.scala @@ -2,7 +2,6 @@ package scala.meta.tests package io import java.io.File -import java.net.URI import org.scalatest.FunSuite import scala.meta._ @@ -14,31 +13,6 @@ class MultipathSuite extends FunSuite { files.foreach(file => { assert(new File(tmp, file).createNewFile()) }) - val multipath = Sourcepath(tmp.getAbsolutePath) - - test("Multipath.deep") { - val obtained = multipath.deep.map(_.syntax) - val expected = files.map(file => Fragment(AbsolutePath(tmp), RelativePath(file))).map(_.syntax) - assert(obtained.sorted == expected.sorted) - } - - test("Multipath.find") { - assert(multipath.find(RelativePath("a")).nonEmpty) - } - - test("Multipath.relativize") { - assert(multipath.relativize(new URI("blah")).isEmpty) - files.foreach { file => - assert(multipath.relativize(new File(tmp, file).toURI).get.toString == file) - } - } - - test("Sourcepath.syntax") { - val fromPath = Sourcepath(List(AbsolutePath(tmp))) - val fromSyntax = Sourcepath(tmp.getAbsolutePath) - assert(fromPath == fromSyntax) - assert(fromPath.syntax == fromSyntax.syntax) - } test("Classpath.syntax") { val fromPath = Classpath(List(AbsolutePath(tmp))) diff --git a/tests/jvm/src/test/scala/scala/meta/tests/metacp/SignatureSuite.scala b/tests/jvm/src/test/scala/scala/meta/tests/metacp/SignatureSuite.scala index 155f8a7427..6769c4ffc5 100644 --- a/tests/jvm/src/test/scala/scala/meta/tests/metacp/SignatureSuite.scala +++ b/tests/jvm/src/test/scala/scala/meta/tests/metacp/SignatureSuite.scala @@ -7,12 +7,11 @@ import java.nio.file.Path import java.nio.file.attribute.BasicFileAttributes import scala.collection.JavaConverters._ import scala.collection.mutable.ArrayBuffer -import scala.meta.internal.io.PathIO +import scala.meta.internal.io._ import scala.meta.internal.javacp._ import scala.meta.internal.javacp.asm._ import scala.meta.internal.metacp._ import scala.meta.io.AbsolutePath -import scala.meta.io.Classpath import scala.tools.asm.tree.ClassNode import scala.tools.asm.tree.FieldNode import scala.tools.asm.tree.MethodNode diff --git a/tests/shared/src/test/scala/scala/meta/tests/prettyprinters/PublicSuite.scala b/tests/shared/src/test/scala/scala/meta/tests/prettyprinters/PublicSuite.scala index 0c62112f3a..7a5477f985 100644 --- a/tests/shared/src/test/scala/scala/meta/tests/prettyprinters/PublicSuite.scala +++ b/tests/shared/src/test/scala/scala/meta/tests/prettyprinters/PublicSuite.scala @@ -220,22 +220,10 @@ class PublicSuite extends FunSuite { // TODO: come up with a platform-independent test } - test("scala.meta.io.Fragment.toString") { - // TODO: come up with a platform-independent test - } - - test("scala.meta.io.Multipath.toString") { - // TODO: come up with a platform-independent test - } - test("scala.meta.io.RelativePath.toString") { // TODO: come up with a platform-independent test } - test("scala.meta.io.Sourcepath.toString") { - // TODO: come up with a platform-independent test - } - test("scala.meta.metac.Settings.toString") { // n/a } From fb681986b9840bcd9ed836d9e841c6a9f488914b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93lafur=20P=C3=A1ll=20Geirsson?= Date: Sat, 28 Apr 2018 13:17:37 +0000 Subject: [PATCH 2/2] Address review --- .../io/shared/src/main/scala/scala/meta/io/Classpath.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scalameta/io/shared/src/main/scala/scala/meta/io/Classpath.scala b/scalameta/io/shared/src/main/scala/scala/meta/io/Classpath.scala index 63842d5677..5a66f2d90a 100644 --- a/scalameta/io/shared/src/main/scala/scala/meta/io/Classpath.scala +++ b/scalameta/io/shared/src/main/scala/scala/meta/io/Classpath.scala @@ -4,7 +4,7 @@ import java.io.File.pathSeparator final case class Classpath(entries: List[AbsolutePath]) { - @deprecated("Use .entries instead", "v4.0.0") + @deprecated("Use .entries instead", "4.0.0") def shallow: List[AbsolutePath] = entries def syntax: String = entries.mkString(pathSeparator)