2010-02-08 05:45:19 +01:00
|
|
|
/* sbt -- Simple Build Tool
|
|
|
|
|
* Copyright 2009, 2010 Mark Harrah
|
|
|
|
|
*/
|
2009-11-14 20:53:17 +01:00
|
|
|
package xsbt.api
|
|
|
|
|
|
|
|
|
|
import java.io.File
|
|
|
|
|
|
|
|
|
|
/** Generates a datatype hierarchy from a definition file.*/
|
|
|
|
|
object GenerateDatatypes
|
|
|
|
|
{
|
2010-01-23 02:17:49 +01:00
|
|
|
/** Arguments: ('mutable' | 'immutable') <base package name> <base directory> <input file>+*/
|
2009-11-14 20:53:17 +01:00
|
|
|
def main(args: Array[String])
|
|
|
|
|
{
|
2010-01-23 02:17:49 +01:00
|
|
|
if(args.length < 4)
|
2009-11-14 20:53:17 +01:00
|
|
|
{
|
2010-01-23 02:17:49 +01:00
|
|
|
System.err.println("Invalid number of arguments, expected 'mutable' or 'immutable', package, base directory, and files to process")
|
2009-11-14 20:53:17 +01:00
|
|
|
System.exit(1)
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2010-01-23 02:17:49 +01:00
|
|
|
val immutable = args(0).trim.toLowerCase == "immutable"
|
|
|
|
|
|
|
|
|
|
val packageName = args(1).trim
|
2009-11-14 20:53:17 +01:00
|
|
|
require(!packageName.isEmpty)
|
|
|
|
|
|
2010-01-23 02:17:49 +01:00
|
|
|
val baseDirectory = new File(args(2))
|
2009-11-14 20:53:17 +01:00
|
|
|
baseDirectory.mkdirs
|
|
|
|
|
|
2010-01-23 02:17:49 +01:00
|
|
|
val files = args.drop(3).map(new File(_))
|
2009-11-14 20:53:17 +01:00
|
|
|
// parse the files, getting all interface and enums
|
|
|
|
|
val parser = new DatatypeParser
|
|
|
|
|
val definitions = files.flatMap(parser.parseFile)
|
|
|
|
|
|
|
|
|
|
// create the interfaces, enums, and class implementations
|
2010-01-23 02:17:49 +01:00
|
|
|
val generator = if(immutable) new ImmutableGenerator(packageName, baseDirectory) else new MutableGenerator(packageName, baseDirectory)
|
2009-11-14 20:53:17 +01:00
|
|
|
generator.writeDefinitions(definitions)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|