aboutsummaryrefslogtreecommitdiff
path: root/stage1/resolver.scala
diff options
context:
space:
mode:
authorChristopher Vogt <oss.nsp@cvogt.org>2017-03-19 20:03:08 -0400
committerChristopher Vogt <oss.nsp@cvogt.org>2017-03-27 23:54:16 -0400
commit4185639097f8dc546c6474095c1fe853d43a1069 (patch)
treef69d90aac7f7fc3801f92e0511069f4239b9bf2e /stage1/resolver.scala
parentd24aa27365015d024d5b11dbbfbbe5f3fceda4fb (diff)
downloadcbt-4185639097f8dc546c6474095c1fe853d43a1069.tar.gz
cbt-4185639097f8dc546c6474095c1fe853d43a1069.tar.bz2
cbt-4185639097f8dc546c6474095c1fe853d43a1069.zip
performance tweak: cache results of parsed pom files in memory
Diffstat (limited to 'stage1/resolver.scala')
-rw-r--r--stage1/resolver.scala13
1 files changed, 10 insertions, 3 deletions
diff --git a/stage1/resolver.scala b/stage1/resolver.scala
index 6c31a98..1293a89 100644
--- a/stage1/resolver.scala
+++ b/stage1/resolver.scala
@@ -213,12 +213,19 @@ abstract class DependenciesProxy{
case class MavenDependency(
groupId: String, artifactId: String, version: String, classifier: Classifier = Classifier.none, verifyHash: Boolean = true
){
- private[cbt] def serialize = groupId ++ ":" ++ artifactId ++ ":"++ version ++ classifier.name.map(":" ++ _).getOrElse("")
+ private[cbt] def serialize = // PERFORMANCE HOTSPOT
+ groupId + ":" + artifactId + ":" + version + ( if(classifier.name.nonEmpty) ":" + classifier.name.get else "" )
+ private[cbt] def javafy: Array[String] =
+ Array(groupId,artifactId,version) ++ classifier.name
}
object MavenDependency{
private[cbt] def deserialize = (_:String).split(":") match {
case col => MavenDependency( col(0), col(1), col(2), Classifier(col.lift(3)) )
}
+ private[cbt] def dejavafy =
+ ( cols:Array[Array[String]] ) => cols.map(
+ col => MavenDependency( col(0), col(1), col(2), Classifier(col.lift(3)) )
+ ).toSeq
}
// FIXME: take MavenResolver instead of mavenCache and repositories separately
case class BoundMavenDependency(
@@ -338,8 +345,8 @@ case class BoundMavenDependency(
if(classifier == Classifier.sources) Seq()
else {
lib.cacheOnDisk(
- cbtLastModified, mavenCache ++ basePath(true) ++ ".pom.dependencies"
- )( MavenDependency.deserialize )( _.serialize ){
+ cbtLastModified, mavenCache ++ basePath(true) ++ ".pom.dependencies", classLoaderCache.hashMap
+ )( MavenDependency.deserialize )( _.serialize )( MavenDependency.dejavafy )( _.map(_.javafy).toArray ){
(pomXml \ "dependencies" \ "dependency").collect{
case xml if ( (xml \ "scope").text == "" || (xml \ "scope").text == "compile" ) && (xml \ "optional").text != "true" =>
val artifactId = lookup(xml,_ \ "artifactId").get