From 7ee113962134e3c9c4659d6de9de3c7015174d3f Mon Sep 17 00:00:00 2001 From: Christopher Vogt Date: Wed, 15 Feb 2017 01:37:53 -0500 Subject: add package to generated Main.scala to avoid classpath weirdnesses caused by multiple root package Main classes from different subproject or test projects ending up on the same classpath --- stage2/Scaffold.scala | 70 ++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 66 insertions(+), 4 deletions(-) (limited to 'stage2/Scaffold.scala') diff --git a/stage2/Scaffold.scala b/stage2/Scaffold.scala index 866e5da..b110258 100644 --- a/stage2/Scaffold.scala +++ b/stage2/Scaffold.scala @@ -2,8 +2,8 @@ package cbt import java.io._ import java.nio.file._ import java.net._ -trait Scaffold{ - def logger: Logger +class Scaffold( logger: Logger ){ + val lib = new Lib(logger) private def createFile( projectDirectory: File, fileName: String, code: String ){ val outputFile = projectDirectory ++ ("/" ++ fileName) @@ -12,10 +12,42 @@ trait Scaffold{ println( GREEN ++ "Created " ++ fileName ++ RESET ) } + private[cbt] def packageName(name: String) = { + def stripNonAlPrefix = (_:String).dropWhile( + !(('a' to 'z') ++ ('A' to 'Z') ++ Seq('_')).contains(_) + ) + def removeNonAlNumPlusSelected = "([^-a-zA-Z0-9_\\.\\\\/])".r.replaceAllIn(_:String, "") + def replaceSpecialWithUnderscore = "([-\\. ])".r.replaceAllIn(_:String, "_") + def removeRepeatedDots = "\\.+".r.replaceAllIn(_:String, ".") + val transform = ( + ( + stripNonAlPrefix + andThen + removeNonAlNumPlusSelected + andThen + replaceSpecialWithUnderscore + ).andThen( + (_:String).replace("/",".").replace("\\",".").toLowerCase + ) andThen removeRepeatedDots + + ) + + transform( name ) + } + + private[cbt] def packageFromDirectory(directory: File) = { + packageName( + directory.getAbsolutePath.stripPrefix( + lib.findOuterMostModuleDirectory( directory ).getParentFile.getAbsolutePath + ) + ) + } + def createMain( projectDirectory: File - ): Unit = { - createFile(projectDirectory, "Main.scala", s"""object Main{ + ): Unit = { + createFile(projectDirectory, "Main.scala", s"""package ${packageFromDirectory(projectDirectory)} +object Main{ def main( args: Array[String] ): Unit = { println( Console.GREEN ++ "Hello World" ++ Console.RESET ) } @@ -50,3 +82,33 @@ class Build(val context: Context) extends BaseBuild{ ) } } +object ScaffoldTest{ + val scaffold = new Scaffold(new Logger(None,System.currentTimeMillis)) + import scaffold._ + def main(args: Array[String]): Unit = { + def assertEquals[T](left: T, right: T) = { + assert( left == right, left + " == " + right ) + } + assertEquals( + packageName( "AsdfAsdfAsdf" ), "asdfasdfasdf" + ) + assertEquals( + packageName( "_AsdfA4sdf" ), "_asdfa4sdf" + ) + assertEquals( + packageName( "-AsdfAsdf" ), "asdfasdf" + ) + assertEquals( + packageName( "asdf 4aSdf" ), "asdf4asdf" + ) + assertEquals( + packageName( "&/(&%$&&/(asdf" ), "asdf" + ) + assertEquals( + packageName( "AAA" ), "aaa" + ) + assertEquals( + packageName( "/AAA/a_a/a.a" ), "aaa.a_a.a_a" + ) + } +} -- cgit v1.2.3