Code generation
private field with getter and setterfield
via getters and settersassignment
print statement System.out.println



Java class (separate file)
for every entity
public classentity 
generated code
Code generation
“take” only entities from the input
resource contains EMF model
representation of the program
file path
file contents not needed – base type of hierarchy,
no specific features
not needed
compile – will be
invoked recursively
Xtend Multiline template expressions
// Visual Basic
Dim unit As String
// Delphi
unit:String;
// Delphi .NET
@unit:String;
// C++
// create 10 variables
// each with one tab indentation
String unit1;
String unit2;
String unit3;
...
{ and } can be omitted
if only template
expression in body
guillemets  Shift + Ctrl + < or > Alt + q or Q
conditional
IF … ELSE … ENDIF
loop
FOR … ENDFOR
any expression within
guillemets, including
method invocation
Code generator in Xtend
indentation handled in a
smart way by Xtend
private n;
public int getN() {
return n;
}
public void setN(int value) {
this.n = value;
}
Compiling entity
Code generator in Xtend
Stringtext 
intnumber 
booleantoggle 
Type names
selection will use runtime type of fieldType
polymorphic method overloading (dispatch methods)
FieldType
BasicType:
FieldType
EntityType:
FieldType
Code generator in Xtend Statements and expressions
integer value (converted to string)
string value in quotes
on  true
off  false

Xtext: code generation

  • 1.
    Code generation private fieldwith getter and setterfield via getters and settersassignment print statement System.out.println    Java class (separate file) for every entity public classentity  generated code
  • 2.
    Code generation “take” onlyentities from the input resource contains EMF model representation of the program file path file contents not needed – base type of hierarchy, no specific features not needed compile – will be invoked recursively
  • 3.
    Xtend Multiline templateexpressions // Visual Basic Dim unit As String // Delphi unit:String; // Delphi .NET @unit:String; // C++ // create 10 variables // each with one tab indentation String unit1; String unit2; String unit3; ... { and } can be omitted if only template expression in body guillemets  Shift + Ctrl + < or > Alt + q or Q conditional IF … ELSE … ENDIF loop FOR … ENDFOR any expression within guillemets, including method invocation
  • 4.
    Code generator inXtend indentation handled in a smart way by Xtend private n; public int getN() { return n; } public void setN(int value) { this.n = value; } Compiling entity
  • 5.
    Code generator inXtend Stringtext  intnumber  booleantoggle  Type names selection will use runtime type of fieldType polymorphic method overloading (dispatch methods) FieldType BasicType: FieldType EntityType: FieldType
  • 6.
    Code generator inXtend Statements and expressions integer value (converted to string) string value in quotes on  true off  false