@@ -10,8 +10,8 @@ val crossScalaVer = Seq(scalaVer, "2.10.6", "2.12.0")
10
10
lazy val commonSettings = Seq (
11
11
name := " scala-java-time" ,
12
12
description := " java.time API implementation in Scala and Scala.js" ,
13
- version := " 2.0.0-M5 " ,
14
- organization := " com .github.cquiroz" ,
13
+ version := " 2.0.0-M6 " ,
14
+ organization := " io .github.cquiroz" ,
15
15
homepage := Some (url(" https://github.com/cquiroz/scala-java-time" )),
16
16
licenses := Seq (" BSD 3-Clause License" -> url(" https://opensource.org/licenses/BSD-3-Clause" )),
17
17
@@ -47,13 +47,49 @@ lazy val root = project.in(file("."))
47
47
publishArtifact := false ,
48
48
Keys .`package` := file(" " ))
49
49
50
+ /**
51
+ * Copy source files and translate them to the java.time package
52
+ */
53
+ def copyAndReplace (srcDirs : Seq [File ], destinationDir : File ): Seq [File ] = {
54
+ // Copy a directory and return the list of files
55
+ def copyDirectory (source : File , target : File , overwrite : Boolean = false , preserveLastModified : Boolean = false ): Set [File ] =
56
+ IO .copy(PathFinder (source).*** .pair(Path .rebase(source, target)), overwrite, preserveLastModified)
57
+
58
+ val onlyScalaDirs = srcDirs.filter(_.getName.endsWith(" scala" ))
59
+ // Copy the source files from the base project, exclude classes on java.util and dirs
60
+ val generatedFiles : List [java.io.File ] = onlyScalaDirs.foldLeft(Set .empty[File ]) { (files, sourceDir) =>
61
+ files ++ copyDirectory(sourceDir, destinationDir, overwrite = true )
62
+ }.filterNot(_.isDirectory).filterNot(_.getParentFile.getName == " util" ).toList
63
+
64
+ // These replacements will in practice rename all the classes from
65
+ // org.threeten to java.time
66
+ def replacements (line : String ): String = {
67
+ line
68
+ .replaceAll(" package org.threeten$" , " package java" )
69
+ .replaceAll(" package object bp" , " package object time" )
70
+ .replaceAll(" package org.threeten.bp" , " package java.time" )
71
+ .replaceAll(" import org.threeten.bp" , " import java.time" )
72
+ .replaceAll(" private\\ s*\\ [bp\\ ]" , " private[time]" )
73
+ }
74
+
75
+ // Visit each file and read the content replacing key strings
76
+ generatedFiles.foreach { f =>
77
+ val replacedLines = IO .readLines(f).map(replacements)
78
+ IO .writeLines(f, replacedLines)
79
+ }
80
+ generatedFiles
81
+ }
82
+
50
83
lazy val scalajavatime = crossProject.crossType(CrossType .Full ).in(file(" ." ))
51
84
.jvmConfigure(_.enablePlugins(TestNGPlugin ))
52
85
.jsConfigure(_.enablePlugins(TestNGScalaJSPlugin ))
53
86
.settings(commonSettings : _* )
54
87
.jvmSettings(
55
- micrositeExtraMdFiles := Map (file(" README.md" ) -> " index.md" ),
56
-
88
+ sourceGenerators in Compile += Def .task {
89
+ val srcDirs = (sourceDirectories in Compile ).value
90
+ val destinationDir = (sourceManaged in Compile ).value
91
+ copyAndReplace(srcDirs, destinationDir)
92
+ }.taskValue,
57
93
resolvers += Resolver .sbtPluginRepo(" releases" ),
58
94
// Fork the JVM test to ensure that the custom flags are set
59
95
fork in Test := true ,
@@ -63,6 +99,11 @@ lazy val scalajavatime = crossProject.crossType(CrossType.Full).in(file("."))
63
99
javaOptions in Test ++= Seq (" -Djava.locale.providers=CLDR" ),
64
100
TestNGPlugin .testNGSuites := Seq (((resourceDirectory in Test ).value / " testng.xml" ).absolutePath)
65
101
).jsSettings(
102
+ sourceGenerators in Compile += Def .task {
103
+ val srcDirs = (sourceDirectories in Compile ).value
104
+ val destinationDir = (sourceManaged in Compile ).value
105
+ copyAndReplace(srcDirs, destinationDir)
106
+ }.taskValue,
66
107
libraryDependencies ++= Seq (
67
108
" com.github.cquiroz" %%% " scala-java-locales" % " 0.4.0-cldr30"
68
109
)
0 commit comments