blob: 77f8509a8facb50f8f71e03b2f5b0c0bb5fd4f31 (
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
45
46
47
48
49
50
51
52
53
|
/* __ *\
** ________ ___ / / ___ __ ____ Scala.js tools **
** / __/ __// _ | / / / _ | __ / // __/ (c) 2013-2014, LAMP/EPFL **
** __\ \/ /__/ __ |/ /__/ __ |/_// /_\ \ http://scala-js.org/ **
** /____/\___/_/ |_/____/_/ | |__/ /____/ **
** |/____/ **
\* */
package scala.scalajs.tools.classpath.builder
import scala.collection.mutable
import scala.scalajs.tools.io._
import scala.scalajs.tools.jsdep.JSDependencyManifest
import scala.scalajs.tools.classpath._
/** reads a ScalaJS library JAR into a CP
* - IR files go to scalaJSCode
* - JS files go to availableLibs
* - Reads a potential top-level JS_DEPENDENCIES file
*/
trait AbstractJarLibClasspathBuilder extends JarTraverser {
private val irFiles = mutable.ListBuffer.empty[VirtualScalaJSIRFile]
private val jsFiles = mutable.Map.empty[String, VirtualJSFile]
private var dependency: Option[JSDependencyManifest] = None
def build(jar: File): PartialClasspath = {
val v = traverseJar(jar)
new PartialClasspath(dependency.toList,
jsFiles.toMap, irFiles.toList, Some(v))
}
override protected def handleIR(relPath: String,
ir: => VirtualScalaJSIRFile): Unit = {
// We don't need to implement shadowing here: We have only a single JAR
irFiles += ir
}
override protected def handleJS(js: => VirtualJSFile): Unit = {
val file = js
if (!jsFiles.contains(file.name))
jsFiles += file.name -> file
}
override protected def handleDepManifest(m: => JSDependencyManifest): Unit = {
if (dependency.isDefined)
sys.error("A JAR cannot have multiple JS dependency manifests")
dependency = Some(m)
}
}
|