trait VirtualFile extends VirtualFileRef
VirtualFile is an abstraction for file-like objects.
Unlike java.io.File or java.nio.file.Path
that are tied to filesystem-related capabilities, VirtualFile
is designed to be a less-capable object with identity, content reading,
and content hashing.
See also VirtualFileRef
One of the goals of this virtual file (as opposed to a concrete file)
is to abstract from the machine and user specifics.
Previous Zinc's Analysis metadata files
stored file paths using java.io.File.
This impeded them from being shared across machines
without pre- and post-processing them appropriately.
To create a VirtualFile you may use a FileConverter,
such as MappedFileConverter.
MappedFileConverter internally stores the root paths to the working directory,
Coursier's cache, etc..., and it will create a VirtualFile with an id
that looks like ${BASE}/src/main/example/A.scala.
A VirtualFile can also be created with plain Strings
to represent the content, without any "real" files.
OK, but how does the compiler compile these?
See IncrementalCompiler.java.
At the top layer of Zinc, we are passing in the source files as a
sequence of VirtualFiles.
The files then gets wrapped by a datatype called AbstractZincFile,
which extends scala.reflect.io.AbstractFile,
which the compiler is able to compile.
- Alphabetic
- By Inheritance
- VirtualFile
- VirtualFileRef
- AnyRef
- Any
- Hide All
- Show All
- Public
- All
Abstract Value Members
- abstract def contentHash(): Long
-
abstract
def
id(): String
Returns unique identifier for the file.
Returns unique identifier for the file. For Java compilation it needs to contain the path structure matching the package name for example com/acme/Foo.java.
It also must end with the same value as name(), Java files must end with ".java", and Scala files must end with ".scala".
- Definition Classes
- VirtualFileRef
- abstract def input(): InputStream
-
abstract
def
name(): String
Returns "file name" for the file.
Returns "file name" for the file. Java files must end with ".java", and Scala files must end with ".scala".
- Definition Classes
- VirtualFileRef
-
abstract
def
names(): Array[String]
- Definition Classes
- VirtualFileRef
Concrete Value Members
-
final
def
!=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
final
def
##(): Int
- Definition Classes
- AnyRef → Any
-
final
def
==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
final
def
asInstanceOf[T0]: T0
- Definition Classes
- Any
-
def
clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( ... ) @native()
-
final
def
eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
def
equals(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
def
finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( classOf[java.lang.Throwable] )
-
final
def
getClass(): Class[_]
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
-
def
hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
-
final
def
isInstanceOf[T0]: Boolean
- Definition Classes
- Any
-
final
def
ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
final
def
notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
-
final
def
notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
-
final
def
synchronized[T0](arg0: ⇒ T0): T0
- Definition Classes
- AnyRef
-
def
toString(): String
- Definition Classes
- AnyRef → Any
-
final
def
wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... ) @native()