diff --git a/project/Util.scala b/project/Util.scala index d11e8664a..bc75575a7 100644 --- a/project/Util.scala +++ b/project/Util.scala @@ -74,7 +74,7 @@ object Util { IO.delete(out) IO.createDirectory(out) - val args = "immutable" :: "xsbti.api" :: out.getAbsolutePath :: defs.map(_.getAbsolutePath).toList + val args = "xsbti.api" :: out.getAbsolutePath :: defs.map(_.getAbsolutePath).toList val mainClass = main getOrElse "No main class defined for datatype generator" toError(run.run(mainClass, cp.files, args, s.log)) (out ** "*.java").get diff --git a/util/datatype/src/main/scala/xsbt/datatype/GenerateDatatypes.scala b/util/datatype/src/main/scala/xsbt/datatype/GenerateDatatypes.scala index b41eb18e7..debc7ca6e 100644 --- a/util/datatype/src/main/scala/xsbt/datatype/GenerateDatatypes.scala +++ b/util/datatype/src/main/scala/xsbt/datatype/GenerateDatatypes.scala @@ -9,31 +9,29 @@ import java.util.Locale /** Generates a datatype hierarchy from a definition file.*/ object GenerateDatatypes { - /** Arguments: ('mutable' | 'immutable') +*/ + /** Arguments: +*/ def main(args: Array[String]) { - if(args.length < 4) + if(args.length < 3) { - System.err.println("Invalid number of arguments, expected 'mutable' or 'immutable', package, base directory, and files to process") + System.err.println("Invalid number of arguments, expected package, base directory, and files to process") System.exit(1) } else { - val immutable = args(0).trim.toLowerCase(Locale.ENGLISH) == "immutable" - - val packageName = args(1).trim + val packageName = args(0).trim require(!packageName.isEmpty) - val baseDirectory = new File(args(2)) + val baseDirectory = new File(args(1)) baseDirectory.mkdirs - val files = args.drop(3).map(new File(_)) + val files = args.drop(2).map(new File(_)) // 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 - val generator = if(immutable) new ImmutableGenerator(packageName, baseDirectory) else new MutableGenerator(packageName, baseDirectory) + val generator = new ImmutableGenerator(packageName, baseDirectory) generator.writeDefinitions(definitions) } } diff --git a/util/datatype/src/main/scala/xsbt/datatype/Generator.scala b/util/datatype/src/main/scala/xsbt/datatype/Generator.scala index 52eda5da5..551850215 100644 --- a/util/datatype/src/main/scala/xsbt/datatype/Generator.scala +++ b/util/datatype/src/main/scala/xsbt/datatype/Generator.scala @@ -11,7 +11,7 @@ import sbt.IO.write import Generator._ import java.util.Locale -abstract class GeneratorBase(val basePkgName: String, val baseDirectory: File) extends NotNull +abstract class GeneratorBase(val basePkgName: String, val baseDirectory: File) { def writeDefinitions(ds: Iterable[Definition]) = Generator.writeDefinitions(ds)(writeDefinition) def writeDefinition(d: Definition) = d match { case e: EnumDef => writeEnum(e); case c: ClassDef => writeClass(c) } @@ -39,7 +39,7 @@ abstract class GeneratorBase(val basePkgName: String, val baseDirectory: File) e * A ClassDef is written as a class with an optional parent class. The class has a single constructor with * parameters for all declared and inherited members. Declared members are listed first in the constructor. * Inherited members are passed to the super constructor. The value of each member is held in a private -* final field and.is accessed by a method of the same name. +* final field and is accessed by a method of the same name. * * A toString method is generated for debugging. * The classes implement java.io.Serializable. @@ -80,47 +80,7 @@ class ImmutableGenerator(pkgName: String, baseDir: File) extends GeneratorBase(p } } -class MutableGenerator(pkgName: String, baseDir: File) extends GeneratorBase(pkgName, baseDir) -{ - def writeClass(c: ClassDef): Unit = - { - writeSource(c.name, basePkgName, interfaceContent(c)) - writeSource(implName(c.name), basePkgName + ".mutable", implContent(c)) - } - def interfaceContent(c: ClassDef): String = - { - val normalizedMembers = c.members.map(normalize) - val getters = normalizedMembers.map(m => "public " + m.asJavaDeclaration(true) + "();") - val setters = normalizedMembers.map(m => "public void " + m.name + "(" + m.javaType(false) + " newValue);") - val extendsPhrase = c.parent.map(_.name).map(" extends " + _).getOrElse("") - ("public interface " + c.name + extendsPhrase + "\n" + - "{\n\t" + - (setters ++ getters).mkString("\n\t") + "\n" + - "}\n") - } - def implContent(c: ClassDef): String = - { - val normalizedMembers = c.members.map(normalize) - val fields = normalizedMembers.map(m => "private " + m.asJavaDeclaration(false) + ";") - val getters = normalizedMembers.map(m => "public final " + m.asJavaDeclaration(true) + "()\n\t{\n\t\treturn " + m.asGet + ";\n\t}") - val setters = normalizedMembers.map(m => "public final void " + m.name + "(" + m.javaType(false) + " newValue)\n\t{\n\t\t" + m.name + " = newValue;\n\t}") - val extendsClass = c.parent.map(p => implName(p.name)) - val serializable = if(c.parent.isDefined) Nil else "java.io.Serializable" :: Nil - val implements = c.name :: serializable - val extendsPhrase = extendsClass.map(" extends " + _).getOrElse("") + " implements " + implements.mkString(", ") - - ("import java.util.Arrays;\n" + - "import java.util.List;\n" + - "import " + pkgName + ".*;\n\n" + - "public class " + implName(c.name) + extendsPhrase + "\n" + - "{\n\t" + - (fields ++ getters ++ setters).mkString("\n\t") + "\n\t" + - toStringMethod(c) + "\n" + - "}\n") - } - -} object Generator { def methodSignature(modifiers: String, returnType: String, name: String, parameters: String) =