Skip to content

Commit

Permalink
Fix main: revert "Regression: fix compilation performance on Windows" (
Browse files Browse the repository at this point in the history
…scala#20355)

Reverts scala#20193
Cartoonishly failed right after I checked every other project for the
existence of `create` and `delete` methods... except the compiler
itself, where I personally added those a few weeks ago.
I will remove those for the next release, so we can re-merge this
performance PR.
  • Loading branch information
jchyb committed May 7, 2024
2 parents 44c1e3a + c565993 commit dffeda7
Show file tree
Hide file tree
Showing 6 changed files with 33 additions and 2 deletions.
6 changes: 6 additions & 0 deletions compiler/src/dotty/tools/io/AbstractFile.scala
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,12 @@ abstract class AbstractFile extends Iterable[AbstractFile] {
/** Does this abstract file represent something which can contain classfiles? */
def isClassContainer: Boolean = isDirectory || (jpath != null && ext.isJarOrZip)

/** Create a file on disk, if one does not exist already. */
def create(): Unit

/** Delete the underlying file or directory (recursively). */
def delete(): Unit

/** Is this abstract file a directory? */
def isDirectory: Boolean

Expand Down
2 changes: 2 additions & 0 deletions compiler/src/dotty/tools/io/NoAbstractFile.scala
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ import java.io.InputStream
object NoAbstractFile extends AbstractFile {
def absolute: AbstractFile = this
def container: AbstractFile = this
def create(): Unit = ???
def delete(): Unit = ???
def jpath: JPath = null
def input: InputStream = null
def isDirectory: Boolean = false
Expand Down
13 changes: 11 additions & 2 deletions compiler/src/dotty/tools/io/PlainFile.scala
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,9 @@ import java.nio.file.{InvalidPathException, Paths}

/** ''Note: This library is considered experimental and should not be used unless you know what you are doing.'' */
class PlainDirectory(givenPath: Directory) extends PlainFile(givenPath) {
override val isDirectory: Boolean = true
override def isDirectory: Boolean = true
override def iterator(): Iterator[PlainFile] = givenPath.list.filter(_.exists).map(new PlainFile(_))
override def delete(): Unit = givenPath.deleteRecursively()
}

/** This class implements an abstract file backed by a File.
Expand Down Expand Up @@ -77,7 +78,7 @@ class PlainFile(val givenPath: Path) extends AbstractFile {
}

/** Is this abstract file a directory? */
val isDirectory: Boolean = givenPath.isDirectory // cached for performance on Windows
def isDirectory: Boolean = givenPath.isDirectory

/** Returns the time that this abstract file was last modified. */
def lastModified: Long = givenPath.lastModified.toMillis
Expand Down Expand Up @@ -112,6 +113,14 @@ class PlainFile(val givenPath: Path) extends AbstractFile {
null
}

/** Does this abstract file denote an existing file? */
def create(): Unit = if (!exists) givenPath.createFile()

/** Delete the underlying file or directory (recursively). */
def delete(): Unit =
if (givenPath.isFile) givenPath.delete()
else if (givenPath.isDirectory) givenPath.toDirectory.deleteRecursively()

/** Returns a plain file with the given name. It does not
* check that it exists.
*/
Expand Down
6 changes: 6 additions & 0 deletions compiler/src/dotty/tools/io/VirtualDirectory.scala
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,12 @@ extends AbstractFile {
override def input: InputStream = sys.error("directories cannot be read")
override def output: OutputStream = sys.error("directories cannot be written")

/** Does this abstract file denote an existing file? */
def create(): Unit = { unsupported() }

/** Delete the underlying file or directory (recursively). */
def delete(): Unit = { unsupported() }

/** Returns an abstract file with the given name. It does not
* check that it exists.
*/
Expand Down
6 changes: 6 additions & 0 deletions compiler/src/dotty/tools/io/VirtualFile.scala
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,12 @@ class VirtualFile(val name: String, override val path: String) extends AbstractF
Iterator.empty
}

/** Does this abstract file denote an existing file? */
def create(): Unit = unsupported()

/** Delete the underlying file or directory (recursively). */
def delete(): Unit = unsupported()

/**
* Returns the abstract file in this abstract directory with the
* specified name. If there is no such file, returns null. The
Expand Down
2 changes: 2 additions & 0 deletions compiler/src/dotty/tools/io/ZipArchive.scala
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,8 @@ abstract class ZipArchive(override val jpath: JPath, release: Option[String]) ex
def isDirectory: Boolean = true
def lookupName(name: String, directory: Boolean): AbstractFile = unsupported()
def lookupNameUnchecked(name: String, directory: Boolean): AbstractFile = unsupported()
def create(): Unit = unsupported()
def delete(): Unit = unsupported()
def output: OutputStream = unsupported()
def container: AbstractFile = unsupported()
def absolute: AbstractFile = unsupported()
Expand Down

0 comments on commit dffeda7

Please sign in to comment.