• DoctypeDeclaration{http://etl.sf.net/etl/doctype/0.2.1}:
    • systemId: "../grammars/EJ.g.etl"
  • TopLevelClassifier{http://etl.sf.net/2006/samples/ej/0.1}:
    • classifier:
      • ClassStatement{http://etl.sf.net/2006/samples/ej/0.1}:
        • documentation:
          • DocumentationLine{http://etl.sf.net/2006/samples/ej/0.1}:
            • text: /// Rational number
          • DocumentationLine{http://etl.sf.net/2006/samples/ej/0.1}:
            • text: /// @verion 0.0.0
        • visibilityModifier:
          • Modifier{http://etl.sf.net/2006/samples/ej/0.1}:
            • value: public
        • finalModifier:
          • Modifier{http://etl.sf.net/2006/samples/ej/0.1}:
            • value: final
        • strictfpModifier:
          • Modifier{http://etl.sf.net/2006/samples/ej/0.1}:
            • value: strictfp
        • name:
          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
            • value: Rational
        • extendedType:
          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
            • value: Number
        • implementedTypes:
          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
            • value: Comparable
        • contents:
          • FieldStatement{http://etl.sf.net/2006/samples/ej/0.1}:
            • documentation:
              • DocumentationLine{http://etl.sf.net/2006/samples/ej/0.1}:
                • text: /// a divident
            • visibilityModifier:
              • Modifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: public
            • finalModifier:
              • Modifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: final
            • classifier:
              • PrimitiveType{http://etl.sf.net/2006/samples/ej/0.1}:
                • name: int
            • variables:
              • Variable{http://etl.sf.net/2006/samples/ej/0.1}:
                • name:
                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                    • value: dividend
          • FieldStatement{http://etl.sf.net/2006/samples/ej/0.1}:
            • documentation:
              • DocumentationLine{http://etl.sf.net/2006/samples/ej/0.1}:
                • text: /// a divisor
            • visibilityModifier:
              • Modifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: public
            • finalModifier:
              • Modifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: final
            • classifier:
              • PrimitiveType{http://etl.sf.net/2006/samples/ej/0.1}:
                • name: int
            • variables:
              • Variable{http://etl.sf.net/2006/samples/ej/0.1}:
                • name:
                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                    • value: divisor
          • ConstructorStatement{http://etl.sf.net/2006/samples/ej/0.1}:
            • documentation:
              • DocumentationLine{http://etl.sf.net/2006/samples/ej/0.1}:
                • text: /// a constructor
              • DocumentationLine{http://etl.sf.net/2006/samples/ej/0.1}:
                • text: /// @param divident divident in rational number
              • DocumentationLine{http://etl.sf.net/2006/samples/ej/0.1}:
                • text: /// @param divisor divisor in rational number
            • visibilityModifier:
              • Modifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: public
            • name:
              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: Rational
            • parameters:
              • Parameter{http://etl.sf.net/2006/samples/ej/0.1}:
                • finalModifier:
                  • Modifier{http://etl.sf.net/2006/samples/ej/0.1}:
                    • value: final
                • classifier:
                  • PrimitiveType{http://etl.sf.net/2006/samples/ej/0.1}:
                    • name: int
                • name:
                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                    • value: dividend
            • parameters:
              • Parameter{http://etl.sf.net/2006/samples/ej/0.1}:
                • finalModifier:
                  • Modifier{http://etl.sf.net/2006/samples/ej/0.1}:
                    • value: final
                • classifier:
                  • PrimitiveType{http://etl.sf.net/2006/samples/ej/0.1}:
                    • name: int
                • name:
                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                    • value: divisor
            • body:
              • MethodBlock{http://etl.sf.net/2006/samples/ej/0.1}:
                • content:
                  • ExpressionStatement{http://etl.sf.net/2006/samples/ej/0.1}:
                    • expression:
                      • ApplyRoundOp{http://etl.sf.net/2006/samples/ej/0.1}:
                        • functor:
                          • SuperReference{http://etl.sf.net/2006/samples/ej/0.1}:
                            • name: super
                  • ExpressionStatement{http://etl.sf.net/2006/samples/ej/0.1}:
                    • expression:
                      • AssignmentOp{http://etl.sf.net/2006/samples/ej/0.1}:
                        • leftHandSide:
                          • AccessOp{http://etl.sf.net/2006/samples/ej/0.1}:
                            • accessed:
                              • ThisReference{http://etl.sf.net/2006/samples/ej/0.1}:
                                • name: this
                            • feature:
                              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                • value: divident
                        • value:
                          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                            • value: dividend
                  • ExpressionStatement{http://etl.sf.net/2006/samples/ej/0.1}:
                    • expression:
                      • AssignmentOp{http://etl.sf.net/2006/samples/ej/0.1}:
                        • leftHandSide:
                          • AccessOp{http://etl.sf.net/2006/samples/ej/0.1}:
                            • accessed:
                              • ThisReference{http://etl.sf.net/2006/samples/ej/0.1}:
                                • name: this
                            • feature:
                              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                • value: divisor
                        • value:
                          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                            • value: divisor
          • MethodStatement{http://etl.sf.net/2006/samples/ej/0.1}:
            • documentation:
              • DocumentationLine{http://etl.sf.net/2006/samples/ej/0.1}:
                • text: /// @see java.lang.Number#intValue()
            • visibilityModifier:
              • Modifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: public
            • returnType:
              • PrimitiveType{http://etl.sf.net/2006/samples/ej/0.1}:
                • name: int
            • name:
              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: intValue
            • body:
              • MethodBlock{http://etl.sf.net/2006/samples/ej/0.1}:
                • content:
                  • ReturnStatement{http://etl.sf.net/2006/samples/ej/0.1}:
                    • value:
                      • DivideOp{http://etl.sf.net/2006/samples/ej/0.1}:
                        • dividend:
                          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                            • value: dividend
                        • divisor:
                          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                            • value: divisor
          • MethodStatement{http://etl.sf.net/2006/samples/ej/0.1}:
            • documentation:
              • DocumentationLine{http://etl.sf.net/2006/samples/ej/0.1}:
                • text: /// @see java.lang.Number#longValue()
            • visibilityModifier:
              • Modifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: public
            • returnType:
              • PrimitiveType{http://etl.sf.net/2006/samples/ej/0.1}:
                • name: long
            • name:
              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: longValue
            • body:
              • MethodBlock{http://etl.sf.net/2006/samples/ej/0.1}:
                • content:
                  • ReturnStatement{http://etl.sf.net/2006/samples/ej/0.1}:
                    • value:
                      • DivideOp{http://etl.sf.net/2006/samples/ej/0.1}:
                        • dividend:
                          • CastOp{http://etl.sf.net/2006/samples/ej/0.1}:
                            • value:
                              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                • value: dividend
                            • classifier:
                              • PrimitiveType{http://etl.sf.net/2006/samples/ej/0.1}:
                                • name: long
                        • divisor:
                          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                            • value: divisor
          • MethodStatement{http://etl.sf.net/2006/samples/ej/0.1}:
            • documentation:
              • DocumentationLine{http://etl.sf.net/2006/samples/ej/0.1}:
                • text: /// @see java.lang.Number#floatValue()
            • visibilityModifier:
              • Modifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: public
            • returnType:
              • PrimitiveType{http://etl.sf.net/2006/samples/ej/0.1}:
                • name: float
            • name:
              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: floatValue
            • body:
              • MethodBlock{http://etl.sf.net/2006/samples/ej/0.1}:
                • content:
                  • ReturnStatement{http://etl.sf.net/2006/samples/ej/0.1}:
                    • value:
                      • DivideOp{http://etl.sf.net/2006/samples/ej/0.1}:
                        • dividend:
                          • CastOp{http://etl.sf.net/2006/samples/ej/0.1}:
                            • value:
                              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                • value: dividend
                            • classifier:
                              • PrimitiveType{http://etl.sf.net/2006/samples/ej/0.1}:
                                • name: float
                        • divisor:
                          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                            • value: divisor
          • MethodStatement{http://etl.sf.net/2006/samples/ej/0.1}:
            • documentation:
              • DocumentationLine{http://etl.sf.net/2006/samples/ej/0.1}:
                • text: /// @see java.lang.Number#doubleValue()
            • visibilityModifier:
              • Modifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: public
            • returnType:
              • PrimitiveType{http://etl.sf.net/2006/samples/ej/0.1}:
                • name: double
            • name:
              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: doubleValue
            • body:
              • MethodBlock{http://etl.sf.net/2006/samples/ej/0.1}:
                • content:
                  • ReturnStatement{http://etl.sf.net/2006/samples/ej/0.1}:
                    • value:
                      • DivideOp{http://etl.sf.net/2006/samples/ej/0.1}:
                        • dividend:
                          • CastOp{http://etl.sf.net/2006/samples/ej/0.1}:
                            • value:
                              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                • value: dividend
                            • classifier:
                              • PrimitiveType{http://etl.sf.net/2006/samples/ej/0.1}:
                                • name: double
                        • divisor:
                          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                            • value: divisor
          • MethodStatement{http://etl.sf.net/2006/samples/ej/0.1}:
            • documentation:
              • DocumentationLine{http://etl.sf.net/2006/samples/ej/0.1}:
                • text: /// @see java.lang.Comparable#compareTo(java.lang.Object)
            • visibilityModifier:
              • Modifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: public
            • returnType:
              • PrimitiveType{http://etl.sf.net/2006/samples/ej/0.1}:
                • name: int
            • name:
              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: compareTo
            • parameters:
              • Parameter{http://etl.sf.net/2006/samples/ej/0.1}:
                • finalModifier:
                  • Modifier{http://etl.sf.net/2006/samples/ej/0.1}:
                    • value: final
                • classifier:
                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                    • value: Object
                • name:
                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                    • value: o
            • body:
              • MethodBlock{http://etl.sf.net/2006/samples/ej/0.1}:
                • content:
                  • LocalVarStatement{http://etl.sf.net/2006/samples/ej/0.1}:
                    • finalModifier:
                      • Modifier{http://etl.sf.net/2006/samples/ej/0.1}:
                        • value: final
                    • classifier:
                      • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                        • value: Rational
                    • variables:
                      • Variable{http://etl.sf.net/2006/samples/ej/0.1}:
                        • name:
                          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                            • value: r
                        • initialValue:
                          • CastOp{http://etl.sf.net/2006/samples/ej/0.1}:
                            • value:
                              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                • value: o
                            • classifier:
                              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                • value: Rational
                  • LocalVarStatement{http://etl.sf.net/2006/samples/ej/0.1}:
                    • finalModifier:
                      • Modifier{http://etl.sf.net/2006/samples/ej/0.1}:
                        • value: final
                    • classifier:
                      • PrimitiveType{http://etl.sf.net/2006/samples/ej/0.1}:
                        • name: long
                    • variables:
                      • Variable{http://etl.sf.net/2006/samples/ej/0.1}:
                        • name:
                          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                            • value: v
                        • initialValue:
                          • MinusOp{http://etl.sf.net/2006/samples/ej/0.1}:
                            • minuend:
                              • MultiplyOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                • multipliers:
                                  • CastOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                    • value:
                                      • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                        • value: dividend
                                    • classifier:
                                      • PrimitiveType{http://etl.sf.net/2006/samples/ej/0.1}:
                                        • name: long
                                • multipliers:
                                  • AccessOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                    • accessed:
                                      • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                        • value: r
                                    • feature:
                                      • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                        • value: divisor
                            • subtrahend:
                              • MultiplyOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                • multipliers:
                                  • CastOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                    • value:
                                      • AccessOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                        • accessed:
                                          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                            • value: r
                                        • feature:
                                          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                            • value: dividend
                                    • classifier:
                                      • PrimitiveType{http://etl.sf.net/2006/samples/ej/0.1}:
                                        • name: long
                                • multipliers:
                                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                    • value: divisor
                  • ReturnStatement{http://etl.sf.net/2006/samples/ej/0.1}:
                    • value:
                      • ConditionalOp{http://etl.sf.net/2006/samples/ej/0.1}:
                        • condition:
                          • LessThenOp{http://etl.sf.net/2006/samples/ej/0.1}:
                            • value1:
                              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                • value: v
                            • value2:
                              • IntegerLiteral{http://etl.sf.net/2006/samples/ej/0.1}:
                                • value: 0
                        • thenPart:
                          • UnaryMinusOp{http://etl.sf.net/2006/samples/ej/0.1}:
                            • value:
                              • IntegerLiteral{http://etl.sf.net/2006/samples/ej/0.1}:
                                • value: 1
                        • elsePart:
                          • ConditionalOp{http://etl.sf.net/2006/samples/ej/0.1}:
                            • condition:
                              • GreaterThenOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                • value1:
                                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                    • value: v
                                • value2:
                                  • IntegerLiteral{http://etl.sf.net/2006/samples/ej/0.1}:
                                    • value: 0
                            • thenPart:
                              • IntegerLiteral{http://etl.sf.net/2006/samples/ej/0.1}:
                                • value: 1
                            • elsePart:
                              • IntegerLiteral{http://etl.sf.net/2006/samples/ej/0.1}:
                                • value: 0
  • TopLevelClassifier{http://etl.sf.net/2006/samples/ej/0.1}:
    • classifier:
      • ClassStatement{http://etl.sf.net/2006/samples/ej/0.1}:
        • documentation:
          • DocumentationLine{http://etl.sf.net/2006/samples/ej/0.1}:
            • text: /// This is a contrived sample class
        • abstractModifier:
          • Modifier{http://etl.sf.net/2006/samples/ej/0.1}:
            • value: abstract
        • name:
          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
            • value: AbstractTest
        • extendedType:
          • AccessOp{http://etl.sf.net/2006/samples/ej/0.1}:
            • accessed:
              • AccessOp{http://etl.sf.net/2006/samples/ej/0.1}:
                • accessed:
                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                    • value: java
                • feature:
                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                    • value: lang
            • feature:
              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: Object
        • contents:
          • FieldStatement{http://etl.sf.net/2006/samples/ej/0.1}:
            • documentation:
              • DocumentationLine{http://etl.sf.net/2006/samples/ej/0.1}:
                • text: /// constant demo
            • visibilityModifier:
              • Modifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: public
            • finalModifier:
              • Modifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: final
            • staticModifier:
              • Modifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: static
            • classifier:
              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: String
            • variables:
              • Variable{http://etl.sf.net/2006/samples/ej/0.1}:
                • name:
                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                    • value: TEST_ID
                • initialValue:
                  • StringLiteral{http://etl.sf.net/2006/samples/ej/0.1}:
                    • value: "testId"
          • FieldStatement{http://etl.sf.net/2006/samples/ej/0.1}:
            • documentation:
              • DocumentationLine{http://etl.sf.net/2006/samples/ej/0.1}:
                • text: /// private variable sample
            • visibilityModifier:
              • Modifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: private
            • classifier:
              • PrimitiveType{http://etl.sf.net/2006/samples/ej/0.1}:
                • name: boolean
            • variables:
              • Variable{http://etl.sf.net/2006/samples/ej/0.1}:
                • name:
                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                    • value: tested
                • initialValue:
                  • BooleanLiteral{http://etl.sf.net/2006/samples/ej/0.1}:
                    • value: false
          • FieldStatement{http://etl.sf.net/2006/samples/ej/0.1}:
            • visibilityModifier:
              • Modifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: private
            • classifier:
              • PrimitiveType{http://etl.sf.net/2006/samples/ej/0.1}:
                • name: int
            • variables:
              • Variable{http://etl.sf.net/2006/samples/ej/0.1}:
                • name:
                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                    • value: testCache
          • FieldStatement{http://etl.sf.net/2006/samples/ej/0.1}:
            • visibilityModifier:
              • Modifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: private
            • finalModifier:
              • Modifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: final
            • classifier:
              • PrimitiveType{http://etl.sf.net/2006/samples/ej/0.1}:
                • name: int
            • variables:
              • Variable{http://etl.sf.net/2006/samples/ej/0.1}:
                • name:
                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                    • value: xorValue
          • MethodStatement{http://etl.sf.net/2006/samples/ej/0.1}:
            • documentation:
              • DocumentationLine{http://etl.sf.net/2006/samples/ej/0.1}:
                • text: /// abstract method sample
            • abstractModifier:
              • Modifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: abstract
            • visibilityModifier:
              • Modifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: protected
            • returnType:
              • PrimitiveType{http://etl.sf.net/2006/samples/ej/0.1}:
                • name: int
            • name:
              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: test
            • parameters:
              • Parameter{http://etl.sf.net/2006/samples/ej/0.1}:
                • classifier:
                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                    • value: String
                • name:
                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                    • value: value
          • MethodStatement{http://etl.sf.net/2006/samples/ej/0.1}:
            • visibilityModifier:
              • Modifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: private
            • returnType:
              • PrimitiveType{http://etl.sf.net/2006/samples/ej/0.1}:
                • name: void
            • name:
              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: ensureTested
            • body:
              • MethodBlock{http://etl.sf.net/2006/samples/ej/0.1}:
                • content:
                  • IfStatement{http://etl.sf.net/2006/samples/ej/0.1}:
                    • ifThenPart:
                      • IfThenPart{http://etl.sf.net/2006/samples/ej/0.1}:
                        • condition:
                          • LogicalComplementOp{http://etl.sf.net/2006/samples/ej/0.1}:
                            • value:
                              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                • value: tested
                        • body:
                          • MethodBlock{http://etl.sf.net/2006/samples/ej/0.1}:
                            • content:
                              • ExpressionStatement{http://etl.sf.net/2006/samples/ej/0.1}:
                                • expression:
                                  • AssignmentOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                    • leftHandSide:
                                      • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                        • value: testCache
                                    • value:
                                      • ApplyRoundOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                        • functor:
                                          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                            • value: test
                                        • args:
                                          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                            • value: TEST_ID
                              • ExpressionStatement{http://etl.sf.net/2006/samples/ej/0.1}:
                                • expression:
                                  • AssignmentOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                    • leftHandSide:
                                      • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                        • value: tested
                                    • value:
                                      • BooleanLiteral{http://etl.sf.net/2006/samples/ej/0.1}:
                                        • value: true
          • MethodStatement{http://etl.sf.net/2006/samples/ej/0.1}:
            • finalModifier:
              • Modifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: final
            • visibilityModifier:
              • Modifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: public
            • returnType:
              • PrimitiveType{http://etl.sf.net/2006/samples/ej/0.1}:
                • name: int
            • name:
              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: test
            • body:
              • MethodBlock{http://etl.sf.net/2006/samples/ej/0.1}:
                • content:
                  • ExpressionStatement{http://etl.sf.net/2006/samples/ej/0.1}:
                    • expression:
                      • ApplyRoundOp{http://etl.sf.net/2006/samples/ej/0.1}:
                        • functor:
                          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                            • value: ensureTested
                  • ReturnStatement{http://etl.sf.net/2006/samples/ej/0.1}:
                    • value:
                      • BitwiseXorOp{http://etl.sf.net/2006/samples/ej/0.1}:
                        • value1:
                          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                            • value: testCache
                        • value2:
                          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                            • value: xorValue
          • MethodStatement{http://etl.sf.net/2006/samples/ej/0.1}:
            • templateParameters:
              • TemplateParameter{http://etl.sf.net/2006/samples/ej/0.1}:
                • name:
                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                    • value: T
                • extendedTypes:
                  • ApplySquareOp{http://etl.sf.net/2006/samples/ej/0.1}:
                    • functor:
                      • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                        • value: Comparable
                    • args:
                      • WildcardType{http://etl.sf.net/2006/samples/ej/0.1}:
                        • superToTypes:
                          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                            • value: T
            • visibilityModifier:
              • Modifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: public
            • staticModifier:
              • Modifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: static
            • returnType:
              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: T
            • name:
              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: max
            • parameters:
              • Parameter{http://etl.sf.net/2006/samples/ej/0.1}:
                • classifier:
                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                    • value: T
                • name:
                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                    • value: a
            • parameters:
              • Parameter{http://etl.sf.net/2006/samples/ej/0.1}:
                • classifier:
                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                    • value: T
                • name:
                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                    • value: b
            • body:
              • MethodBlock{http://etl.sf.net/2006/samples/ej/0.1}:
                • content:
                  • ReturnStatement{http://etl.sf.net/2006/samples/ej/0.1}:
                    • value:
                      • ConditionalOp{http://etl.sf.net/2006/samples/ej/0.1}:
                        • condition:
                          • GreaterThenOp{http://etl.sf.net/2006/samples/ej/0.1}:
                            • value1:
                              • ApplyRoundOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                • functor:
                                  • AccessOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                    • accessed:
                                      • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                        • value: a
                                    • feature:
                                      • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                        • value: compareTo
                                • args:
                                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                    • value: b
                            • value2:
                              • IntegerLiteral{http://etl.sf.net/2006/samples/ej/0.1}:
                                • value: 0
                        • thenPart:
                          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                            • value: a
                        • elsePart:
                          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                            • value: b
          • ConstructorStatement{http://etl.sf.net/2006/samples/ej/0.1}:
            • name:
              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: AbstractTest
            • parameters:
              • Parameter{http://etl.sf.net/2006/samples/ej/0.1}:
                • classifier:
                  • PrimitiveType{http://etl.sf.net/2006/samples/ej/0.1}:
                    • name: int
                • name:
                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                    • value: xorValue
            • body:
              • MethodBlock{http://etl.sf.net/2006/samples/ej/0.1}:
                • content:
                  • ExpressionStatement{http://etl.sf.net/2006/samples/ej/0.1}:
                    • expression:
                      • ApplyRoundOp{http://etl.sf.net/2006/samples/ej/0.1}:
                        • functor:
                          • SuperReference{http://etl.sf.net/2006/samples/ej/0.1}:
                            • name: super
                  • ExpressionStatement{http://etl.sf.net/2006/samples/ej/0.1}:
                    • expression:
                      • AssignmentOp{http://etl.sf.net/2006/samples/ej/0.1}:
                        • leftHandSide:
                          • AccessOp{http://etl.sf.net/2006/samples/ej/0.1}:
                            • accessed:
                              • ThisReference{http://etl.sf.net/2006/samples/ej/0.1}:
                                • name: this
                            • feature:
                              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                • value: xorValue
                        • value:
                          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                            • value: xorValue
          • MethodStatement{http://etl.sf.net/2006/samples/ej/0.1}:
            • templateParameters:
              • TemplateParameter{http://etl.sf.net/2006/samples/ej/0.1}:
                • name:
                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                    • value: T
            • visibilityModifier:
              • Modifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: public
            • staticModifier:
              • Modifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: static
            • returnType:
              • PrimitiveType{http://etl.sf.net/2006/samples/ej/0.1}:
                • name: void
            • name:
              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: copyList
            • parameters:
              • Parameter{http://etl.sf.net/2006/samples/ej/0.1}:
                • classifier:
                  • ApplySquareOp{http://etl.sf.net/2006/samples/ej/0.1}:
                    • functor:
                      • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                        • value: List
                    • args:
                      • WildcardType{http://etl.sf.net/2006/samples/ej/0.1}:
                        • superToTypes:
                          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                            • value: T
                • name:
                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                    • value: dest
            • parameters:
              • Parameter{http://etl.sf.net/2006/samples/ej/0.1}:
                • classifier:
                  • ApplySquareOp{http://etl.sf.net/2006/samples/ej/0.1}:
                    • functor:
                      • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                        • value: List
                    • args:
                      • WildcardType{http://etl.sf.net/2006/samples/ej/0.1}:
                        • extendedTypes:
                          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                            • value: T
                • name:
                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                    • value: src
            • body:
              • MethodBlock{http://etl.sf.net/2006/samples/ej/0.1}:
                • content:
                  • LocalVarStatement{http://etl.sf.net/2006/samples/ej/0.1}:
                    • classifier:
                      • PrimitiveType{http://etl.sf.net/2006/samples/ej/0.1}:
                        • name: int
                    • variables:
                      • Variable{http://etl.sf.net/2006/samples/ej/0.1}:
                        • name:
                          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                            • value: length
                        • initialValue:
                          • ApplyRoundOp{http://etl.sf.net/2006/samples/ej/0.1}:
                            • functor:
                              • AccessOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                • accessed:
                                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                    • value: src
                                • feature:
                                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                    • value: size
                  • LocalVarStatement{http://etl.sf.net/2006/samples/ej/0.1}:
                    • classifier:
                      • ApplySquareOp{http://etl.sf.net/2006/samples/ej/0.1}:
                        • functor:
                          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                            • value: ListIterator
                        • args:
                          • WildcardType{http://etl.sf.net/2006/samples/ej/0.1}:
                            • superToTypes:
                              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                • value: T
                    • variables:
                      • Variable{http://etl.sf.net/2006/samples/ej/0.1}:
                        • name:
                          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                            • value: di
                        • initialValue:
                          • ApplyRoundOp{http://etl.sf.net/2006/samples/ej/0.1}:
                            • functor:
                              • AccessOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                • accessed:
                                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                    • value: dest
                                • feature:
                                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                    • value: listIterator
                  • LocalVarStatement{http://etl.sf.net/2006/samples/ej/0.1}:
                    • classifier:
                      • ApplySquareOp{http://etl.sf.net/2006/samples/ej/0.1}:
                        • functor:
                          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                            • value: ListIterator
                        • args:
                          • WildcardType{http://etl.sf.net/2006/samples/ej/0.1}:
                            • extendedTypes:
                              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                • value: T
                    • variables:
                      • Variable{http://etl.sf.net/2006/samples/ej/0.1}:
                        • name:
                          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                            • value: si
                        • initialValue:
                          • ApplyRoundOp{http://etl.sf.net/2006/samples/ej/0.1}:
                            • functor:
                              • AccessOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                • accessed:
                                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                    • value: src
                                • feature:
                                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                    • value: listIterator
                  • ForStatement{http://etl.sf.net/2006/samples/ej/0.1}:
                    • initVariableDeclaration:
                      • LocalVarStatement{http://etl.sf.net/2006/samples/ej/0.1}:
                        • classifier:
                          • PrimitiveType{http://etl.sf.net/2006/samples/ej/0.1}:
                            • name: int
                        • variables:
                          • Variable{http://etl.sf.net/2006/samples/ej/0.1}:
                            • name:
                              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                • value: i
                            • initialValue:
                              • IntegerLiteral{http://etl.sf.net/2006/samples/ej/0.1}:
                                • value: 0
                    • condition:
                      • LessThenOp{http://etl.sf.net/2006/samples/ej/0.1}:
                        • value1:
                          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                            • value: i
                        • value2:
                          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                            • value: length
                    • updateExpressions:
                      • PostfixIncrementOp{http://etl.sf.net/2006/samples/ej/0.1}:
                        • value:
                          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                            • value: i
                    • body:
                      • MethodBlock{http://etl.sf.net/2006/samples/ej/0.1}:
                        • content:
                          • ExpressionStatement{http://etl.sf.net/2006/samples/ej/0.1}:
                            • expression:
                              • ApplyRoundOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                • functor:
                                  • AccessOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                    • accessed:
                                      • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                        • value: di
                                    • feature:
                                      • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                        • value: next
                          • ExpressionStatement{http://etl.sf.net/2006/samples/ej/0.1}:
                            • expression:
                              • ApplyRoundOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                • functor:
                                  • AccessOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                    • accessed:
                                      • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                        • value: di
                                    • feature:
                                      • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                        • value: set
                                • args:
                                  • ApplyRoundOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                    • functor:
                                      • AccessOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                        • accessed:
                                          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                            • value: si
                                        • feature:
                                          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                            • value: next
  • TopLevelClassifier{http://etl.sf.net/2006/samples/ej/0.1}:
    • classifier:
      • ClassStatement{http://etl.sf.net/2006/samples/ej/0.1}:
        • documentation:
          • DocumentationLine{http://etl.sf.net/2006/samples/ej/0.1}:
            • text: /// template class
        • name:
          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
            • value: Seq
        • templateParameters:
          • TemplateParameter{http://etl.sf.net/2006/samples/ej/0.1}:
            • name:
              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: A
        • contents:
          • FieldStatement{http://etl.sf.net/2006/samples/ej/0.1}:
            • classifier:
              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: A
            • variables:
              • Variable{http://etl.sf.net/2006/samples/ej/0.1}:
                • name:
                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                    • value: head
          • FieldStatement{http://etl.sf.net/2006/samples/ej/0.1}:
            • classifier:
              • ApplySquareOp{http://etl.sf.net/2006/samples/ej/0.1}:
                • functor:
                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                    • value: Seq
                • args:
                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                    • value: A
            • variables:
              • Variable{http://etl.sf.net/2006/samples/ej/0.1}:
                • name:
                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                    • value: tail
          • ConstructorStatement{http://etl.sf.net/2006/samples/ej/0.1}:
            • name:
              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: Seq
            • body:
              • MethodBlock{http://etl.sf.net/2006/samples/ej/0.1}:
                • content:
                  • ExpressionStatement{http://etl.sf.net/2006/samples/ej/0.1}:
                    • expression:
                      • ApplyRoundOp{http://etl.sf.net/2006/samples/ej/0.1}:
                        • functor:
                          • ThisReference{http://etl.sf.net/2006/samples/ej/0.1}:
                            • name: this
                        • args:
                          • NullReference{http://etl.sf.net/2006/samples/ej/0.1}:
                            • value: null
                          • NullReference{http://etl.sf.net/2006/samples/ej/0.1}:
                            • value: null
          • ConstructorStatement{http://etl.sf.net/2006/samples/ej/0.1}:
            • name:
              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: Seq
            • parameters:
              • Parameter{http://etl.sf.net/2006/samples/ej/0.1}:
                • classifier:
                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                    • value: A
                • name:
                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                    • value: head
            • parameters:
              • Parameter{http://etl.sf.net/2006/samples/ej/0.1}:
                • classifier:
                  • ApplySquareOp{http://etl.sf.net/2006/samples/ej/0.1}:
                    • functor:
                      • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                        • value: Seq
                    • args:
                      • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                        • value: A
                • name:
                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                    • value: tail
            • body:
              • MethodBlock{http://etl.sf.net/2006/samples/ej/0.1}:
                • content:
                  • ExpressionStatement{http://etl.sf.net/2006/samples/ej/0.1}:
                    • expression:
                      • AssignmentOp{http://etl.sf.net/2006/samples/ej/0.1}:
                        • leftHandSide:
                          • AccessOp{http://etl.sf.net/2006/samples/ej/0.1}:
                            • accessed:
                              • ThisReference{http://etl.sf.net/2006/samples/ej/0.1}:
                                • name: this
                            • feature:
                              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                • value: head
                        • value:
                          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                            • value: head
                  • ExpressionStatement{http://etl.sf.net/2006/samples/ej/0.1}:
                    • expression:
                      • AssignmentOp{http://etl.sf.net/2006/samples/ej/0.1}:
                        • leftHandSide:
                          • AccessOp{http://etl.sf.net/2006/samples/ej/0.1}:
                            • accessed:
                              • ThisReference{http://etl.sf.net/2006/samples/ej/0.1}:
                                • name: this
                            • feature:
                              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                • value: tail
                        • value:
                          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                            • value: tail
          • MethodStatement{http://etl.sf.net/2006/samples/ej/0.1}:
            • returnType:
              • PrimitiveType{http://etl.sf.net/2006/samples/ej/0.1}:
                • name: boolean
            • name:
              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                • value: isEmpty
            • body:
              • MethodBlock{http://etl.sf.net/2006/samples/ej/0.1}:
                • content:
                  • ReturnStatement{http://etl.sf.net/2006/samples/ej/0.1}:
                    • value:
                      • EqualOp{http://etl.sf.net/2006/samples/ej/0.1}:
                        • value1:
                          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                            • value: tail
                        • value2:
                          • NullReference{http://etl.sf.net/2006/samples/ej/0.1}:
                            • value: null
          • InnerClassifier{http://etl.sf.net/2006/samples/ej/0.1}:
            • classifier:
              • ClassStatement{http://etl.sf.net/2006/samples/ej/0.1}:
                • name:
                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                    • value: Zipper
                • templateParameters:
                  • TemplateParameter{http://etl.sf.net/2006/samples/ej/0.1}:
                    • name:
                      • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                        • value: B
                • contents:
                  • MethodStatement{http://etl.sf.net/2006/samples/ej/0.1}:
                    • returnType:
                      • ApplySquareOp{http://etl.sf.net/2006/samples/ej/0.1}:
                        • functor:
                          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                            • value: Seq
                        • args:
                          • ApplySquareOp{http://etl.sf.net/2006/samples/ej/0.1}:
                            • functor:
                              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                • value: Pair
                            • args:
                              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                • value: A
                              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                • value: B
                    • name:
                      • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                        • value: zip
                    • parameters:
                      • Parameter{http://etl.sf.net/2006/samples/ej/0.1}:
                        • classifier:
                          • ApplySquareOp{http://etl.sf.net/2006/samples/ej/0.1}:
                            • functor:
                              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                • value: Seq
                            • args:
                              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                • value: B
                        • name:
                          • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                            • value: that
                    • body:
                      • MethodBlock{http://etl.sf.net/2006/samples/ej/0.1}:
                        • content:
                          • IfStatement{http://etl.sf.net/2006/samples/ej/0.1}:
                            • ifThenPart:
                              • IfThenPart{http://etl.sf.net/2006/samples/ej/0.1}:
                                • condition:
                                  • ConditionalOrOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                    • value1:
                                      • ApplyRoundOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                        • functor:
                                          • AccessOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                            • accessed:
                                              • ThisReference{http://etl.sf.net/2006/samples/ej/0.1}:
                                                • name: this
                                            • feature:
                                              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                                • value: isEmpty
                                    • value2:
                                      • ApplyRoundOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                        • functor:
                                          • AccessOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                            • accessed:
                                              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                                • value: that
                                            • feature:
                                              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                                • value: isEmpty
                                • body:
                                  • MethodBlock{http://etl.sf.net/2006/samples/ej/0.1}:
                                    • content:
                                      • ReturnStatement{http://etl.sf.net/2006/samples/ej/0.1}:
                                        • value:
                                          • NewOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                            • classifier:
                                              • ApplySquareOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                                • functor:
                                                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                                    • value: Seq
                                                • args:
                                                  • ApplySquareOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                                    • functor:
                                                      • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                                        • value: Pair
                                                    • args:
                                                      • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                                        • value: A
                                                      • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                                        • value: B
                            • elsePart:
                              • MethodBlock{http://etl.sf.net/2006/samples/ej/0.1}:
                                • content:
                                  • ReturnStatement{http://etl.sf.net/2006/samples/ej/0.1}:
                                    • value:
                                      • NewOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                        • classifier:
                                          • ApplySquareOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                            • functor:
                                              • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                                • value: Seq
                                            • args:
                                              • ApplySquareOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                                • functor:
                                                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                                    • value: Pair
                                                • args:
                                                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                                    • value: A
                                                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                                    • value: B
                                        • args:
                                          • NewOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                            • classifier:
                                              • ApplySquareOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                                • functor:
                                                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                                    • value: Pair
                                                • args:
                                                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                                    • value: A
                                                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                                    • value: B
                                            • args:
                                              • AccessOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                                • accessed:
                                                  • ThisReference{http://etl.sf.net/2006/samples/ej/0.1}:
                                                    • name: this
                                                • feature:
                                                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                                    • value: head
                                              • AccessOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                                • accessed:
                                                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                                    • value: that
                                                • feature:
                                                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                                    • value: head
                                          • ApplyRoundOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                            • functor:
                                              • AccessOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                                • accessed:
                                                  • AccessOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                                    • accessed:
                                                      • ThisReference{http://etl.sf.net/2006/samples/ej/0.1}:
                                                        • name: this
                                                    • feature:
                                                      • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                                        • value: tail
                                                • feature:
                                                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                                    • value: zip
                                            • args:
                                              • AccessOp{http://etl.sf.net/2006/samples/ej/0.1}:
                                                • accessed:
                                                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                                    • value: that
                                                • feature:
                                                  • Identifier{http://etl.sf.net/2006/samples/ej/0.1}:
                                                    • value: tail
     1: doctype "../grammars/EJ.g.etl";
     2: /// Rational number
     3: /// @verion 0.0.0
     4: class public final strictfp Rational extends Number 
     5:                                      implements Comparable
     6: {
     7:   /// a divident
     8:   var public final int dividend;
     9:   /// a divisor
    10:   var public final int divisor;
    11:   /// a constructor
    12:   /// @param divident divident in rational number
    13:   /// @param divisor divisor in rational number
    14:   maker public Rational(final int dividend, final int divisor)
    15:   {
    16:     super();
    17:     this.divident = dividend;
    18:     this.divisor = divisor;
    19:   };
    20:   /// @see java.lang.Number#intValue()
    21:   to public int intValue()
    22:   {
    23:     return dividend / divisor;
    24:   };
    25:   /// @see java.lang.Number#longValue()
    26:   to public long longValue()
    27:   {
    28:     return dividend as long / divisor;
    29:   };
    30:   /// @see java.lang.Number#floatValue()
    31:   to public float floatValue()
    32:   {
    33:     return dividend as float / divisor;
    34:   };
    35:   /// @see java.lang.Number#doubleValue()
    36:   to public double doubleValue()
    37:   {
    38:     return dividend as double / divisor;
    39:   };
    40:   /// @see java.lang.Comparable#compareTo(java.lang.Object)
    41:   to public int compareTo(final Object o)
    42:   {
    43:     var final Rational r = o as Rational; 
    44:     var final long v = dividend as long * r.divisor 
    45:                      - r.dividend as long * divisor; 
    46:     return v < 0 ? -1 : v > 0 ? 1 : 0;
    47:   };
    48: 
    49: };
    50: 
    51: /// This is a contrived sample class
    52: class abstract AbstractTest extends java.lang.Object
    53: {
    54:   /// constant demo
    55:   var public final static String TEST_ID = "testId";
    56:   /// private variable sample
    57:   var private boolean tested = false;
    58:   var private int testCache;
    59:   var private final int xorValue;
    60:   /// abstract method sample
    61:   to abstract protected int test(String value);
    62:   to private void ensureTested()
    63:   {
    64:     if(!tested) 
    65:     {
    66:       testCache = test(TEST_ID);
    67:       tested = true;
    68:     };
    69:   };
    70:   to final public int test()
    71:   {
    72:     ensureTested();
    73:     return testCache ^ xorValue;
    74:   };
    75:   to [T extends Comparable[ ? super T ]] public static T max(T a, T b)
    76:   {
    77:     return a.compareTo(b) > 0 ? a : b;
    78:   };
    79:   maker AbstractTest(int xorValue)
    80:   {
    81:     super();
    82:     this.xorValue = xorValue;
    83:   };
    84: 
    85:   // test sample
    86:   to [T] public static void copyList(List[ ? super T ] dest, List[ ? extends T ] src) 
    87:   {
    88:     var int length = src.size();
    89:     var ListIterator[ ? super T ] di = dest.listIterator();
    90:     var ListIterator[ ? extends T ] si=src.listIterator();
    91:     for (var int i = 0 : i<length : i++) 
    92:     {
    93:       di.next();
    94:       di.set(si.next());
    95:     };
    96:   };
    97: 
    98: };
    99: 
   100: /// template class
   101: class Seq[A] 
   102: {
   103:   var A head;
   104:   var Seq[A] tail;
   105:   maker Seq() { this(null, null); };
   106:   maker Seq(A head, Seq[A] tail) { 
   107:     this.head = head; this.tail = tail; 
   108:   };
   109:   to boolean isEmpty() { return tail == null; };
   110:   class Zipper[B] 
   111:   {
   112:     to Seq[Pair[A,B]] zip(Seq[B] that) 
   113:     {
   114:       if (this.isEmpty() || that.isEmpty())
   115:       {
   116:           return new Seq[Pair[A,B]]();
   117:       }
   118:       else
   119:       {
   120:         return new Seq[Pair[A,B]](
   121:             new Pair[A,B](this.head, that.head),
   122:             this.tail.zip(that.tail));
   123:       };
   124:     };
   125:   };
   126: };