-
Notifications
You must be signed in to change notification settings - Fork 32
Scalagen development
Vesa Marttila edited this page Nov 14, 2013
·
4 revisions
Scalagen is based on a simple AST transformation pipeline.
The main logic is defined in com.mysema.scalagen.Converter
.
The following declaration declares the conversion pipeline
private def createConverter(version: ScalaVersion) = {
new Converter("UTF-8",List[UnitTransformer](
Rethrows, // unwraps try/catch blocks with simple rethrows
VarToVal, // changes var to val if no reassignments are done
Synchronized, // converts synchronized modifier to synchronized block
RemoveAsserts, // unwraps assertion method calls
new Annotations(version), // turns Annotation type declarations into normal classes which extend StaticAnnotation
Enums, // converts Java enum type declarations into Scala enumerations
Primitives, // modifies primitive type related constants and method calls
SerialVersionUID, // turns serialVersionUID fields into annotations
ControlStatements, // transform ForStmt, SwitchEntryStmt and If statements
CompanionObject, // moves static members into companion objects
Underscores, // strips off underscore prefixes from field names with related Bean properties
BeanProperties, // turns field + accessor combinations into @BeanProperty annotated Scala properties
Properties, // turns field + accessor combinations into annotated Scala properties
Constructors, // reorders and normalizes constructors
Initializers, // normalizes initializer blocks
SimpleEquals)) // simplfies equals method implementations
}
The transformers extend UnitTransformerBase
which provides a template for conversion, the subclasses just override the visitor methods of the AST types that should be converted.
The serialization logic is defined in com.mysema.scalagen.ScalaDumpVisitor
.
For new test cases (and fixes) a new Java file can be added into src/test/scala/com/mysema/examples
. It will be automatically picked up by the tests.