blob: 463301696e18dff1c58ee2f501357c27e43b06d8 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
/*
* Copyright (c) 2014 Contributor. All rights reserved.
*/
package scala.tools.nsc.classpath
import scala.reflect.io.VirtualDirectory
import scala.tools.nsc.Settings
import scala.tools.nsc.io.AbstractFile
import FileUtils.AbstractFileOps
/**
* Provides factory methods for flat classpath. When creating classpath instances for a given path,
* it uses proper type of classpath depending on a types of particular files containing sources or classes.
*/
class FlatClassPathFactory(settings: Settings) extends ClassPathFactory[FlatClassPath] {
def newClassPath(file: AbstractFile): FlatClassPath = FlatClassPathFactory.newClassPath(file, settings)
def sourcesInPath(path: String): List[FlatClassPath] =
for {
file <- expandPath(path, expandStar = false)
dir <- Option(AbstractFile getDirectory file)
} yield createSourcePath(dir)
private def createSourcePath(file: AbstractFile): FlatClassPath =
if (file.isJarOrZip)
ZipAndJarFlatSourcePathFactory.create(file, settings)
else if (file.isDirectory)
new DirectoryFlatSourcePath(file.file)
else
sys.error(s"Unsupported sourcepath element: $file")
}
object FlatClassPathFactory {
def newClassPath(file: AbstractFile, settings: Settings): FlatClassPath = file match {
case vd: VirtualDirectory => VirtualDirectoryFlatClassPath(vd)
case _ =>
if (file.isJarOrZip)
ZipAndJarFlatClassPathFactory.create(file, settings)
else if (file.isDirectory)
new DirectoryFlatClassPath(file.file)
else
sys.error(s"Unsupported classpath element: $file")
}
}
|