SlideShare a Scribd company logo
1 of 47
Download to read offline
MODELING ASTS WITH FAST
       Yuriy “Uko” Tymchuk
MOOSE
FAMIX
FAMIX
FAMIX
FAMIX
FAMIX

 Access


Invocation
PROBLEM?
PROBLEM?

•   Calculating metrics

•   Rule checking

•   Detecting duplication

•   Representing (eg. visualizing)

•   Language conversions

•   And more…
FAMIX
can’t handle that!

       we need
      AST
FAST
FAST
FAST
Smalltalk          Java
                               100%



                               75%



                           50%



                          25%


                          0%
FAST
FAST IMPORTERS


     PetitParser
MODEL
GENERAL FAST DIAGRAM

                                                                                                                                0..1
                                                                                                                                parentExpression**
                                                                              FASTStatement
                                                                     0..*                                                         FASTExpression
                                                                                                 0..1
                                                               statements                        parentStatement**
0..1
parentBehaviouralEntity                                           0..1
                                                                            FASTStatementBlock
  FASTBehaviouralEntity                         parentStatementBlock
                          0..1                                    0..1
                                                                                                                 FASTVariableExpression        FASTLiteral
                          parentBehaviouralEntity      statementBlock
                                                                                                                                           signature : string
                                             0..* FASTNamedEntity 0..1                                  0..1
                                 localVariables                   variable       parentVariableExpression
                                                  name : String
                                             0..*                 0..*                                         0..1   FAMIXNamedEntity
                                   parameters                        fastNamedEntities      famixNamedEntity

FASTNamedBehaviouralEntity
                                  0..1                                                 0..1 FAMIXBehaviouralEntity
name : String                     fastNamedBehaviouralEntity      famixBehaviouralEntity
GENERAL FAST DIAGRAM

                                                                                                                                0..1
                                                                                                                                parentExpression**
                                                                              FASTStatement
                                                                     0..*                                                         FASTExpression
                                                                                                 0..1
                                                               statements                        parentStatement**
0..1
parentBehaviouralEntity                                           0..1
                                                                            FASTStatementBlock
  FASTBehaviouralEntity                         parentStatementBlock
                          0..1                                    0..1
                                                                                                                 FASTVariableExpression        FASTLiteral
                          parentBehaviouralEntity      statementBlock
                                                                                                                                           signature : string
                                             0..* FASTNamedEntity 0..1                                  0..1
                                 localVariables                   variable       parentVariableExpression
                                                  name : String
                                             0..*                 0..*                                         0..1   FAMIXNamedEntity
                                   parameters                        fastNamedEntities      famixNamedEntity

FASTNamedBehaviouralEntity
                                  0..1                                                 0..1 FAMIXBehaviouralEntity
name : String                     fastNamedBehaviouralEntity      famixBehaviouralEntity
GENERAL FAST DIAGRAM

                                                                                                                                0..1
                                                                                                                                parentExpression**
                                                                              FASTStatement
                                                                     0..*                                                         FASTExpression
                                                                                                 0..1
                                                               statements                        parentStatement**
0..1
parentBehaviouralEntity                                           0..1
                                                                            FASTStatementBlock
  FASTBehaviouralEntity                         parentStatementBlock
                          0..1                                    0..1
                                                                                                                 FASTVariableExpression        FASTLiteral
                          parentBehaviouralEntity      statementBlock
                                                                                                                                           signature : string
                                             0..* FASTNamedEntity 0..1                                  0..1
                                 localVariables                   variable       parentVariableExpression
                                                  name : String
                                             0..*                 0..*                                         0..1   FAMIXNamedEntity
                                   parameters                        fastNamedEntities      famixNamedEntity

FASTNamedBehaviouralEntity
                                  0..1                                                 0..1 FAMIXBehaviouralEntity
name : String                     fastNamedBehaviouralEntity      famixBehaviouralEntity
GENERAL FAST DIAGRAM

                                                                                                                                0..1
                                                                                                                                parentExpression**
                                                                              FASTStatement
                                                                     0..*                                                         FASTExpression
                                                                                                 0..1
                                                               statements                        parentStatement**
0..1
parentBehaviouralEntity                                           0..1
                                                                            FASTStatementBlock
  FASTBehaviouralEntity                         parentStatementBlock
                          0..1                                    0..1
                                                                                                                 FASTVariableExpression        FASTLiteral
                          parentBehaviouralEntity      statementBlock
                                                                                                                                           signature : string
                                             0..* FASTNamedEntity 0..1                                  0..1
                                 localVariables                   variable       parentVariableExpression
                                                  name : String
                                             0..*                 0..*                                         0..1   FAMIXNamedEntity
                                   parameters                        fastNamedEntities      famixNamedEntity

FASTNamedBehaviouralEntity
                                  0..1                                                 0..1 FAMIXBehaviouralEntity
name : String                     fastNamedBehaviouralEntity      famixBehaviouralEntity
GENERAL FAST DIAGRAM

                                                                                                                                0..1
                                                                                                                                parentExpression**
                                                                              FASTStatement
                                                                     0..*                                                         FASTExpression
                                                                                                 0..1
                                                               statements                        parentStatement**
0..1
parentBehaviouralEntity                                           0..1
                                                                            FASTStatementBlock
  FASTBehaviouralEntity                         parentStatementBlock
                          0..1                                    0..1
                                                                                                                 FASTVariableExpression        FASTLiteral
                          parentBehaviouralEntity      statementBlock
                                                                                                                                           signature : string
                                             0..* FASTNamedEntity 0..1                                  0..1
                                 localVariables                   variable       parentVariableExpression
                                                  name : String
                                             0..*                 0..*                                         0..1   FAMIXNamedEntity
                                   parameters                        fastNamedEntities      famixNamedEntity

FASTNamedBehaviouralEntity
                                  0..1                                                 0..1 FAMIXBehaviouralEntity
name : String                     fastNamedBehaviouralEntity      famixBehaviouralEntity
GENERAL FAST DIAGRAM

                                                                                                                                0..1
                                                                                                                                parentExpression**
                                                                              FASTStatement
                                                                     0..*                                                         FASTExpression
                                                                                                 0..1
                                                               statements                        parentStatement**
0..1
parentBehaviouralEntity                                           0..1
                                                                            FASTStatementBlock
  FASTBehaviouralEntity                         parentStatementBlock
                          0..1                                    0..1
                                                                                                                 FASTVariableExpression        FASTLiteral
                          parentBehaviouralEntity      statementBlock
                                                                                                                                           signature : string
                                             0..* FASTNamedEntity 0..1                                  0..1
                                 localVariables                   variable       parentVariableExpression
                                                  name : String
                                             0..*                 0..*                                         0..1   FAMIXNamedEntity
                                   parameters                        fastNamedEntities      famixNamedEntity

FASTNamedBehaviouralEntity
                                  0..1                                                 0..1 FAMIXBehaviouralEntity
name : String                     fastNamedBehaviouralEntity      famixBehaviouralEntity
SMALLTALK FAST
                                                                                                                  DIAGRAM
                                                                                                FASTStatement
                                                                                         0..*
                                                                                  statements

0..1
parentBehaviouralEntity
       FASTBehaviouralEntity                                              0..1
                                                                                 FASTStatementBlock
                                                     parentStatementBlock
                                 0..1                                  0..1
                                 parentBehaviouralEntity      statementBlock
                                                                                                         FASTSmalltalkReturnStatement
                                                                                                                                            0..1
                                                                                                                                           parentStatement        0..1
  FASTNamedBehaviouralEntity              FASTBlockDefinition                                                                                                                FASTExpression
                                                                  0..1                                                                                    expression
  name : String                                                                                                                          0..1
                                                                 block                            FASTSmalltalkExpressionStatement                                                                   0..1
                                                                                                                                       parentStatement            0..1                              concreteReceiver
fastNamedBehaviouralEntity        0..1                                                                                                                     expression
                                                                                                                                                                                                     0..*
                                                                                                                                                                  0..1
        famixBehaviouralEntity    0..1                                                                                                                                                               arguments
                                                                                                                                                          expression
         FAMIXBehaviouralEntity
                                                                                                                                                                 0..*                                0..1
                                                                                                                                                            contents                                 receiver



                    parentExpression      0..1                             parentExpression      0..1                     parentExpression      0..1                                     parentExpression        0..1    parentExpression   0..1
                   FASTAssignmentExpression           FASTVariableExpression            FASTBlockExpression           FASTArrayExpression                 FASTLiteral                    FASTCascade                    FASTMessageSend
                                                                                                                                                       signature : String                                           kind
                                                                                                                                                                                                                    selector
                                                                                                                                                                                                                    isUnary()                0..1
parentAssignmentExpression         0..1    parentVariableExpression      0..1                                                                   0..*                          parentCascade        0..1
                                                                                                                                                                                                                    isBinary()
                                                                                                                                          contents                                                                                          parentExpression
                                                                                                                                                                                                               0..* isKey()
                         variable 0..1                        variable   0..1
                            0..*         FASTNamedEntity                                                                                                                                                  messages cascaded()
                                                                                                                                                                                                                    receiver()
                 localVariables
                                 name : String
                            0..*                                                      FASTArrayLiteral      FASTByteArrayLiteral      FASTSymbolLiteral              FASTStringLiteral
                                                                                                                                                                                                                 messageSend 0..1
                    parameters                                                                                                       value : Object                 value : String
                                 fastNamedEntities     0..*
                                                                                                                                                                                                                    invocation 0..1
                                                                                                                                                                                                                      FAMIXInvocation
                                                                                                                   contents 0..*
                                 famixNamedEntity 0..1
                                                                                                FASTUndefinedLiteral     FASTNumberLiteral         FASTCharacterLiteral          FASTBooleanLiteral
                                       FAMIXNamedEntity
                                                                                                                        value : Number             value : Object                value : Boolean
SMALLTALK FAST
                                                                                                                  DIAGRAM
                                                                                                FASTStatement
                                                                                         0..*
                                                                                  statements

0..1
parentBehaviouralEntity
       FASTBehaviouralEntity                                              0..1
                                                                                 FASTStatementBlock
                                                     parentStatementBlock
                                 0..1                                  0..1
                                 parentBehaviouralEntity      statementBlock
                                                                                                         FASTSmalltalkReturnStatement
                                                                                                                                            0..1
                                                                                                                                           parentStatement        0..1
  FASTNamedBehaviouralEntity              FASTBlockDefinition                                                                                                                FASTExpression
                                                                  0..1                                                                                    expression
  name : String                                                                                                                          0..1
                                                                 block                            FASTSmalltalkExpressionStatement                                                                   0..1
                                                                                                                                       parentStatement            0..1                              concreteReceiver
fastNamedBehaviouralEntity        0..1                                                                                                                     expression
                                                                                                                                                                                                     0..*
                                                                                                                                                                  0..1
        famixBehaviouralEntity    0..1                                                                                                                                                               arguments
                                                                                                                                                          expression
         FAMIXBehaviouralEntity
                                                                                                                                                                 0..*                                0..1
                                                                                                                                                            contents                                 receiver



                    parentExpression      0..1                             parentExpression      0..1                     parentExpression      0..1                                     parentExpression        0..1    parentExpression   0..1
                   FASTAssignmentExpression           FASTVariableExpression            FASTBlockExpression           FASTArrayExpression                 FASTLiteral                    FASTCascade                    FASTMessageSend
                                                                                                                                                       signature : String                                           kind
                                                                                                                                                                                                                    selector
                                                                                                                                                                                                                    isUnary()                0..1
parentAssignmentExpression         0..1    parentVariableExpression      0..1                                                                   0..*                          parentCascade        0..1
                                                                                                                                                                                                                    isBinary()
                                                                                                                                          contents                                                                                          parentExpression
                                                                                                                                                                                                               0..* isKey()
                         variable 0..1                        variable   0..1
                            0..*         FASTNamedEntity                                                                                                                                                  messages cascaded()
                                                                                                                                                                                                                    receiver()
                 localVariables
                                 name : String
                            0..*                                                      FASTArrayLiteral      FASTByteArrayLiteral      FASTSymbolLiteral              FASTStringLiteral
                                                                                                                                                                                                                 messageSend 0..1
                    parameters                                                                                                       value : Object                 value : String
                                 fastNamedEntities     0..*
                                                                                                                                                                                                                    invocation 0..1
                                                                                                                                                                                                                      FAMIXInvocation
                                                                                                                   contents 0..*
                                 famixNamedEntity 0..1
                                                                                                FASTUndefinedLiteral     FASTNumberLiteral         FASTCharacterLiteral          FASTBooleanLiteral
                                       FAMIXNamedEntity
                                                                                                                        value : Number             value : Object                value : Boolean
SMALLTALK FAST
                                                                                                                  DIAGRAM
                                                                                                FASTStatement
                                                                                         0..*
                                                                                  statements

0..1
parentBehaviouralEntity
       FASTBehaviouralEntity                                              0..1
                                                                                 FASTStatementBlock
                                                     parentStatementBlock
                                 0..1                                  0..1
                                 parentBehaviouralEntity      statementBlock
                                                                                                         FASTSmalltalkReturnStatement
                                                                                                                                            0..1
                                                                                                                                           parentStatement        0..1
  FASTNamedBehaviouralEntity              FASTBlockDefinition                                                                                                                FASTExpression
                                                                  0..1                                                                                    expression
  name : String                                                                                                                          0..1
                                                                 block                            FASTSmalltalkExpressionStatement                                                                   0..1
                                                                                                                                       parentStatement            0..1                              concreteReceiver
fastNamedBehaviouralEntity        0..1                                                                                                                     expression
                                                                                                                                                                                                     0..*
                                                                                                                                                                  0..1
        famixBehaviouralEntity    0..1                                                                                                                                                               arguments
                                                                                                                                                          expression
         FAMIXBehaviouralEntity
                                                                                                                                                                 0..*                                0..1
                                                                                                                                                            contents                                 receiver



                    parentExpression      0..1                             parentExpression      0..1                     parentExpression      0..1                                     parentExpression        0..1    parentExpression   0..1
                   FASTAssignmentExpression           FASTVariableExpression            FASTBlockExpression           FASTArrayExpression                 FASTLiteral                    FASTCascade                    FASTMessageSend
                                                                                                                                                       signature : String                                           kind
                                                                                                                                                                                                                    selector
                                                                                                                                                                                                                    isUnary()                0..1
parentAssignmentExpression         0..1    parentVariableExpression      0..1                                                                   0..*                          parentCascade        0..1
                                                                                                                                                                                                                    isBinary()
                                                                                                                                          contents                                                                                          parentExpression
                                                                                                                                                                                                               0..* isKey()
                         variable 0..1                        variable   0..1
                            0..*         FASTNamedEntity                                                                                                                                                  messages cascaded()
                                                                                                                                                                                                                    receiver()
                 localVariables
                                 name : String
                            0..*                                                      FASTArrayLiteral      FASTByteArrayLiteral      FASTSymbolLiteral              FASTStringLiteral
                                                                                                                                                                                                                 messageSend 0..1
                    parameters                                                                                                       value : Object                 value : String
                                 fastNamedEntities     0..*
                                                                                                                                                                                                                    invocation 0..1
                                                                                                                                                                                                                      FAMIXInvocation
                                                                                                                   contents 0..*
                                 famixNamedEntity 0..1
                                                                                                FASTUndefinedLiteral     FASTNumberLiteral         FASTCharacterLiteral          FASTBooleanLiteral
                                       FAMIXNamedEntity
                                                                                                                        value : Number             value : Object                value : Boolean
SMALLTALK FAST
                                                                                                                  DIAGRAM
                                                                                                FASTStatement
                                                                                         0..*
                                                                                  statements

0..1
parentBehaviouralEntity
       FASTBehaviouralEntity                                              0..1
                                                                                 FASTStatementBlock
                                                     parentStatementBlock
                                 0..1                                  0..1
                                 parentBehaviouralEntity      statementBlock
                                                                                                         FASTSmalltalkReturnStatement
                                                                                                                                            0..1
                                                                                                                                           parentStatement        0..1
  FASTNamedBehaviouralEntity              FASTBlockDefinition                                                                                                                FASTExpression
                                                                  0..1                                                                                    expression
  name : String                                                                                                                          0..1
                                                                 block                            FASTSmalltalkExpressionStatement                                                                   0..1
                                                                                                                                       parentStatement            0..1                              concreteReceiver
fastNamedBehaviouralEntity        0..1                                                                                                                     expression
                                                                                                                                                                                                     0..*
                                                                                                                                                                  0..1
        famixBehaviouralEntity    0..1                                                                                                                                                               arguments
                                                                                                                                                          expression
         FAMIXBehaviouralEntity
                                                                                                                                                                 0..*                                0..1
                                                                                                                                                            contents                                 receiver



                    parentExpression      0..1                             parentExpression      0..1                     parentExpression      0..1                                     parentExpression        0..1    parentExpression   0..1
                   FASTAssignmentExpression           FASTVariableExpression            FASTBlockExpression           FASTArrayExpression                 FASTLiteral                    FASTCascade                    FASTMessageSend
                                                                                                                                                       signature : String                                           kind
                                                                                                                                                                                                                    selector
                                                                                                                                                                                                                    isUnary()                0..1
parentAssignmentExpression         0..1    parentVariableExpression      0..1                                                                   0..*                          parentCascade        0..1
                                                                                                                                                                                                                    isBinary()
                                                                                                                                          contents                                                                                          parentExpression
                                                                                                                                                                                                               0..* isKey()
                         variable 0..1                        variable   0..1
                            0..*         FASTNamedEntity                                                                                                                                                  messages cascaded()
                                                                                                                                                                                                                    receiver()
                 localVariables
                                 name : String
                            0..*                                                      FASTArrayLiteral      FASTByteArrayLiteral      FASTSymbolLiteral              FASTStringLiteral
                                                                                                                                                                                                                 messageSend 0..1
                    parameters                                                                                                       value : Object                 value : String
                                 fastNamedEntities     0..*
                                                                                                                                                                                                                    invocation 0..1
                                                                                                                                                                                                                      FAMIXInvocation
                                                                                                                   contents 0..*
                                 famixNamedEntity 0..1
                                                                                                FASTUndefinedLiteral     FASTNumberLiteral         FASTCharacterLiteral          FASTBooleanLiteral
                                       FAMIXNamedEntity
                                                                                                                        value : Number             value : Object                value : Boolean
SMALLTALK FAST
                                                                                                                  DIAGRAM
                                                                                                FASTStatement
                                                                                         0..*
                                                                                  statements

0..1
parentBehaviouralEntity
       FASTBehaviouralEntity                                              0..1
                                                                                 FASTStatementBlock
                                                     parentStatementBlock
                                 0..1                                  0..1
                                 parentBehaviouralEntity      statementBlock
                                                                                                         FASTSmalltalkReturnStatement
                                                                                                                                            0..1
                                                                                                                                           parentStatement        0..1
  FASTNamedBehaviouralEntity              FASTBlockDefinition                                                                                                                FASTExpression
                                                                  0..1                                                                                    expression
  name : String                                                                                                                          0..1
                                                                 block                            FASTSmalltalkExpressionStatement                                                                   0..1
                                                                                                                                       parentStatement            0..1                              concreteReceiver
fastNamedBehaviouralEntity        0..1                                                                                                                     expression
                                                                                                                                                                                                     0..*
                                                                                                                                                                  0..1
        famixBehaviouralEntity    0..1                                                                                                                                                               arguments
                                                                                                                                                          expression
         FAMIXBehaviouralEntity
                                                                                                                                                                 0..*                                0..1
                                                                                                                                                            contents                                 receiver



                    parentExpression      0..1                             parentExpression      0..1                     parentExpression      0..1                                     parentExpression        0..1    parentExpression   0..1
                   FASTAssignmentExpression           FASTVariableExpression            FASTBlockExpression           FASTArrayExpression                 FASTLiteral                    FASTCascade                    FASTMessageSend
                                                                                                                                                       signature : String                                           kind
                                                                                                                                                                                                                    selector
                                                                                                                                                                                                                    isUnary()                0..1
parentAssignmentExpression         0..1    parentVariableExpression      0..1                                                                   0..*                          parentCascade        0..1
                                                                                                                                                                                                                    isBinary()
                                                                                                                                          contents                                                                                          parentExpression
                                                                                                                                                                                                               0..* isKey()
                         variable 0..1                        variable   0..1
                            0..*         FASTNamedEntity                                                                                                                                                  messages cascaded()
                                                                                                                                                                                                                    receiver()
                 localVariables
                                 name : String
                            0..*                                                      FASTArrayLiteral      FASTByteArrayLiteral      FASTSymbolLiteral              FASTStringLiteral
                                                                                                                                                                                                                 messageSend 0..1
                    parameters                                                                                                       value : Object                 value : String
                                 fastNamedEntities     0..*
                                                                                                                                                                                                                    invocation 0..1
                                                                                                                                                                                                                      FAMIXInvocation
                                                                                                                   contents 0..*
                                 famixNamedEntity 0..1
                                                                                                FASTUndefinedLiteral     FASTNumberLiteral         FASTCharacterLiteral          FASTBooleanLiteral
                                       FAMIXNamedEntity
                                                                                                                        value : Number             value : Object                value : Boolean
RB CASCADE DESIGN


    RECEIVER   Message1   arguments…


 Cascade       Message2   arguments…


               Message3   arguments…
FAST CASCADE DESIGN


                     Message1   arguments…


RECEIVER   Cascade   Message2   arguments…


                     Message3   arguments…
SMALLTALK / JAVA
 COMPARISON
         Smalltalk                Java

                                              30



                                             23


                                             15


                                         8

   Statements
                                         0
                     Expression
http://uko-on-code.blogspot.com
JAVA FAST DIAGRAM
                                                                                                        FASTStatement
                                                                                                 0..*                    0..1
                                                                                           statements                      body

            0..1
           parentBehaviouralEntity                                                  0..1
                                                                                            StatementBlock
               FASTBehaviouralEntity                           parentStatementBlock
                                        0..1                                     0..1
                                        parentBehaviouralEntity           statementBlock




                                                                                                                                                                  0..1
              FASTNamedBehaviouralEntity                                                                                                                                 FASTWhileStatement
                                                                                                                                                      parentStatement
              name : String
                                                                                                                                         FASTJavaReturnStatement
                                                                                                                                                                                                    0..1                             0..1
                                                                                                                                                                                                                                            FASTExpression
                                                                                                        FASTJavaExpressionStatement                                                                 parentStatement         condition
fastNamedBehaviouralEntity      0..1                                                                                                                                     0..1                                                     0..1
     famixBehaviouralEntity 0..1                                                                                                                                         parentStatement                                  expression
                                                         FASTVariableDeclarationStatement                                                 0..1                                                                                   0..1                          0..1
               FAMIXBehaviouralEntity
                                                                                                                                         parentStatement                                                                   expression                          rightOperand

                                                                                                 0..1                      0..*                                                                                                                                0..1
                                                                                                                                  FASTVariableDeclarator                                                                            0..1
                                                                                                  parentStatement   declarators                                                                                                                                leftOperand
                                                                                                                                                                                                                           initializer
                                   0..* FASTNamedEntity 0..1
                       localVariables                   variable
                                   0..* name : String
                                                                                                                                                                           FASTVariableExpression             FASTLiteral           FASTInfixOperation     0..1
                          parameters                    0..1                                                                                                      0..1
                                                                                                                                            parentVariableExpression                                       signature : string                              parentExpression
                                                               variable
                              fastNamedEntities   0..*                                                                                                                                                                                                     0..1
                              famixNamedEntity 0..1                                                                                                                                                                                                          parentExpression
                                     FAMIXNamedEntity



                                                                                                                                                                           FASTJavaIntegerLiteral     FASTJavaBooleanLiteral             FASTJavaStringLiteral
JAVA FAST DIAGRAM
                                                                                                        FASTStatement
                                                                                                 0..*                    0..1
                                                                                           statements                      body

            0..1
           parentBehaviouralEntity                                                  0..1
                                                                                            StatementBlock
               FASTBehaviouralEntity                           parentStatementBlock
                                        0..1                                     0..1
                                        parentBehaviouralEntity           statementBlock




                                                                                                                                                                  0..1
              FASTNamedBehaviouralEntity                                                                                                                                 FASTWhileStatement
                                                                                                                                                      parentStatement
              name : String
                                                                                                                                         FASTJavaReturnStatement
                                                                                                                                                                                                    0..1                             0..1
                                                                                                                                                                                                                                            FASTExpression
                                                                                                        FASTJavaExpressionStatement                                                                 parentStatement         condition
fastNamedBehaviouralEntity      0..1                                                                                                                                     0..1                                                     0..1
     famixBehaviouralEntity 0..1                                                                                                                                         parentStatement                                  expression
                                                         FASTVariableDeclarationStatement                                                 0..1                                                                                   0..1                          0..1
               FAMIXBehaviouralEntity
                                                                                                                                         parentStatement                                                                   expression                          rightOperand

                                                                                                 0..1                      0..*                                                                                                                                0..1
                                                                                                                                  FASTVariableDeclarator                                                                            0..1
                                                                                                  parentStatement   declarators                                                                                                                                leftOperand
                                                                                                                                                                                                                           initializer
                                   0..* FASTNamedEntity 0..1
                       localVariables                   variable
                                   0..* name : String
                                                                                                                                                                           FASTVariableExpression             FASTLiteral           FASTInfixOperation     0..1
                          parameters                    0..1                                                                                                      0..1
                                                                                                                                            parentVariableExpression                                       signature : string                              parentExpression
                                                               variable
                              fastNamedEntities   0..*                                                                                                                                                                                                     0..1
                              famixNamedEntity 0..1                                                                                                                                                                                                          parentExpression
                                     FAMIXNamedEntity



                                                                                                                                                                           FASTJavaIntegerLiteral     FASTJavaBooleanLiteral             FASTJavaStringLiteral
JAVA FAST DIAGRAM
                                                                                                        FASTStatement
                                                                                                 0..*                    0..1
                                                                                           statements                      body

            0..1
           parentBehaviouralEntity                                                  0..1
                                                                                            StatementBlock
               FASTBehaviouralEntity                           parentStatementBlock
                                        0..1                                     0..1
                                        parentBehaviouralEntity           statementBlock




                                                                                                                                                                  0..1
              FASTNamedBehaviouralEntity                                                                                                                                 FASTWhileStatement
                                                                                                                                                      parentStatement
              name : String
                                                                                                                                         FASTJavaReturnStatement
                                                                                                                                                                                                    0..1                             0..1
                                                                                                                                                                                                                                            FASTExpression
                                                                                                        FASTJavaExpressionStatement                                                                 parentStatement         condition
fastNamedBehaviouralEntity      0..1                                                                                                                                     0..1                                                     0..1
     famixBehaviouralEntity 0..1                                                                                                                                         parentStatement                                  expression
                                                         FASTVariableDeclarationStatement                                                 0..1                                                                                   0..1                          0..1
               FAMIXBehaviouralEntity
                                                                                                                                         parentStatement                                                                   expression                          rightOperand

                                                                                                 0..1                      0..*                                                                                                                                0..1
                                                                                                                                  FASTVariableDeclarator                                                                            0..1
                                                                                                  parentStatement   declarators                                                                                                                                leftOperand
                                                                                                                                                                                                                           initializer
                                   0..* FASTNamedEntity 0..1
                       localVariables                   variable
                                   0..* name : String
                                                                                                                                                                           FASTVariableExpression             FASTLiteral           FASTInfixOperation     0..1
                          parameters                    0..1                                                                                                      0..1
                                                                                                                                            parentVariableExpression                                       signature : string                              parentExpression
                                                               variable
                              fastNamedEntities   0..*                                                                                                                                                                                                     0..1
                              famixNamedEntity 0..1                                                                                                                                                                                                          parentExpression
                                     FAMIXNamedEntity



                                                                                                                                                                           FASTJavaIntegerLiteral     FASTJavaBooleanLiteral             FASTJavaStringLiteral
JAVA FAST DIAGRAM
                                                                                                        FASTStatement
                                                                                                 0..*                    0..1
                                                                                           statements                      body

            0..1
           parentBehaviouralEntity                                                  0..1
                                                                                            StatementBlock
               FASTBehaviouralEntity                           parentStatementBlock
                                        0..1                                     0..1
                                        parentBehaviouralEntity           statementBlock




                                                                                                                                                                  0..1
              FASTNamedBehaviouralEntity                                                                                                                                 FASTWhileStatement
                                                                                                                                                      parentStatement
              name : String
                                                                                                                                         FASTJavaReturnStatement
                                                                                                                                                                                                    0..1                             0..1
                                                                                                                                                                                                                                            FASTExpression
                                                                                                        FASTJavaExpressionStatement                                                                 parentStatement         condition
fastNamedBehaviouralEntity      0..1                                                                                                                                     0..1                                                     0..1
     famixBehaviouralEntity 0..1                                                                                                                                         parentStatement                                  expression
                                                         FASTVariableDeclarationStatement                                                 0..1                                                                                   0..1                          0..1
               FAMIXBehaviouralEntity
                                                                                                                                         parentStatement                                                                   expression                          rightOperand

                                                                                                 0..1                      0..*                                                                                                                                0..1
                                                                                                                                  FASTVariableDeclarator                                                                            0..1
                                                                                                  parentStatement   declarators                                                                                                                                leftOperand
                                                                                                                                                                                                                           initializer
                                   0..* FASTNamedEntity 0..1
                       localVariables                   variable
                                   0..* name : String
                                                                                                                                                                           FASTVariableExpression             FASTLiteral           FASTInfixOperation     0..1
                          parameters                    0..1                                                                                                      0..1
                                                                                                                                            parentVariableExpression                                       signature : string                              parentExpression
                                                               variable
                              fastNamedEntities   0..*                                                                                                                                                                                                     0..1
                              famixNamedEntity 0..1                                                                                                                                                                                                          parentExpression
                                     FAMIXNamedEntity



                                                                                                                                                                           FASTJavaIntegerLiteral     FASTJavaBooleanLiteral             FASTJavaStringLiteral
DEMO
FAST ANALYSES
SYMBOL RESOLUTION
                                       a
                                       b
                      #middleOf:and:
middleOf: a and: b                     sum
	 | sum |              st      ^st
	 sum := a + b.
	 ^ sum / 2            :=       /

                     sum + sum 2

                        a b
SYMBOL RESOLUTION
                            a
                            b
           #middleOf:and:
                            sum
 a          st      ^st
 b
            :=       /
 sum
          sum + sum 2

             a b
RESOLVING SYMBOLS



             Scope
    • name-variable dictionary
    • parent scope
    • owner entity
RESOLVING SYMBOLS

             Scope
    • name-variable dictionary
    • parent scope
    • owner entity


             Scope
    • name-variable dictionary
    • parent scope
    • owner entity
CALCULATING METRICS


  Amount of something in code
            •   nodes of a Kind
            •   cyclomatic complexity
CALCULATING METRICS


collection inject: initial into: [block]
CollectorVisitor newWithSeed: initial andBlock: [block]
CYCLOMATIC COMPLEXITY

Each node knows it’s complexity contribution
•   Class = 0
•   ReturnStatement = 0
•   IfStatement = 1
•   WhileStatement = 1
•   MessageSend (#ifTrue:) = 1	

 	

 	

 	

 calculated at runtime
•   MessageSend (#detect:ifNone:) = 2
•   “for ... else” statement = 2	

 	

 	

 	

 	

 python
FAST CONTRIBUTION

http://smalltalkhub.com/#!/~YuriyTymchuk/FAST


        https://github.com/Uko/FAST


 https://ci.inria.fr/moose/job/FAST-On-Moose
FAST GSOC


FAST Java Model                           Tree models visualization
The goal of this project is to create a   The idea behind this project is to
Java version of FAST.                     develop an inter active tree
                                          visualization that will gradually
                                          improve analysis of the underlying
                                          model.
THANKS

Stéphane Ducasse

Nicolas Anquetil

  RMoD team
FAST

More Related Content

More from Yuriy Tymchuk

JIT Feedback — what Experienced Developers like about Static Analysis (icpc2018)
JIT Feedback — what Experienced Developers like about Static Analysis (icpc2018)JIT Feedback — what Experienced Developers like about Static Analysis (icpc2018)
JIT Feedback — what Experienced Developers like about Static Analysis (icpc2018)Yuriy Tymchuk
 
Pharo Quality Engine: The Last Strokes (esug2017)
Pharo Quality Engine: The Last Strokes (esug2017)Pharo Quality Engine: The Last Strokes (esug2017)
Pharo Quality Engine: The Last Strokes (esug2017)Yuriy Tymchuk
 
The False False Positives of Static Analysis (sattose2017)
The False False Positives of Static Analysis (sattose2017)The False False Positives of Static Analysis (sattose2017)
The False False Positives of Static Analysis (sattose2017)Yuriy Tymchuk
 
Walls, Pillars and Beams: A 3D Decomposition of Quality Anomalies (vissoft2016)
Walls, Pillars and Beams: A 3D Decomposition of Quality Anomalies (vissoft2016)Walls, Pillars and Beams: A 3D Decomposition of Quality Anomalies (vissoft2016)
Walls, Pillars and Beams: A 3D Decomposition of Quality Anomalies (vissoft2016)Yuriy Tymchuk
 
When QualityAssistant Meets Pharo [Enforced Code Critiques Motivate More Valu...
When QualityAssistant Meets Pharo [Enforced Code Critiques Motivate More Valu...When QualityAssistant Meets Pharo [Enforced Code Critiques Motivate More Valu...
When QualityAssistant Meets Pharo [Enforced Code Critiques Motivate More Valu...Yuriy Tymchuk
 
Stories About Renraku — the new Quality Model of Pharo (esug2016)
Stories About Renraku — the new Quality Model of Pharo (esug2016)Stories About Renraku — the new Quality Model of Pharo (esug2016)
Stories About Renraku — the new Quality Model of Pharo (esug2016)Yuriy Tymchuk
 
Про що не говорять програмісти, про що мовчать науковці (UCU2015)
Про що не говорять програмісти, про що мовчать науковці (UCU2015)Про що не говорять програмісти, про що мовчать науковці (UCU2015)
Про що не говорять програмісти, про що мовчать науковці (UCU2015)Yuriy Tymchuk
 
What if Clippy Would Criticize Your Code? (benevol2015)
What if Clippy Would Criticize Your Code? (benevol2015)What if Clippy Would Criticize Your Code? (benevol2015)
What if Clippy Would Criticize Your Code? (benevol2015)Yuriy Tymchuk
 
Beyond the Concept of Quality in Pharo (esug2015)
Beyond the Concept of Quality in Pharo (esug2015)Beyond the Concept of Quality in Pharo (esug2015)
Beyond the Concept of Quality in Pharo (esug2015)Yuriy Tymchuk
 
Code Review: Veni, ViDI, Vici (saner15)
Code Review: Veni, ViDI, Vici (saner15)Code Review: Veni, ViDI, Vici (saner15)
Code Review: Veni, ViDI, Vici (saner15)Yuriy Tymchuk
 
ViDI - The Visual Design Inspector (fosdem2015)
ViDI - The Visual Design Inspector (fosdem2015)ViDI - The Visual Design Inspector (fosdem2015)
ViDI - The Visual Design Inspector (fosdem2015)Yuriy Tymchuk
 
Graphics and Visualization (Pharo Days 2015)
Graphics and Visualization (Pharo Days 2015)Graphics and Visualization (Pharo Days 2015)
Graphics and Visualization (Pharo Days 2015)Yuriy Tymchuk
 
Collaboration in Open-Source Projects: Myth or Reality? (msr14)
Collaboration in Open-Source Projects: Myth or Reality? (msr14)Collaboration in Open-Source Projects: Myth or Reality? (msr14)
Collaboration in Open-Source Projects: Myth or Reality? (msr14)Yuriy Tymchuk
 
FAST Master's Defense (UA)
FAST Master's Defense (UA)FAST Master's Defense (UA)
FAST Master's Defense (UA)Yuriy Tymchuk
 
FAST Resolution (benevol13)
FAST Resolution (benevol13)FAST Resolution (benevol13)
FAST Resolution (benevol13)Yuriy Tymchuk
 

More from Yuriy Tymchuk (15)

JIT Feedback — what Experienced Developers like about Static Analysis (icpc2018)
JIT Feedback — what Experienced Developers like about Static Analysis (icpc2018)JIT Feedback — what Experienced Developers like about Static Analysis (icpc2018)
JIT Feedback — what Experienced Developers like about Static Analysis (icpc2018)
 
Pharo Quality Engine: The Last Strokes (esug2017)
Pharo Quality Engine: The Last Strokes (esug2017)Pharo Quality Engine: The Last Strokes (esug2017)
Pharo Quality Engine: The Last Strokes (esug2017)
 
The False False Positives of Static Analysis (sattose2017)
The False False Positives of Static Analysis (sattose2017)The False False Positives of Static Analysis (sattose2017)
The False False Positives of Static Analysis (sattose2017)
 
Walls, Pillars and Beams: A 3D Decomposition of Quality Anomalies (vissoft2016)
Walls, Pillars and Beams: A 3D Decomposition of Quality Anomalies (vissoft2016)Walls, Pillars and Beams: A 3D Decomposition of Quality Anomalies (vissoft2016)
Walls, Pillars and Beams: A 3D Decomposition of Quality Anomalies (vissoft2016)
 
When QualityAssistant Meets Pharo [Enforced Code Critiques Motivate More Valu...
When QualityAssistant Meets Pharo [Enforced Code Critiques Motivate More Valu...When QualityAssistant Meets Pharo [Enforced Code Critiques Motivate More Valu...
When QualityAssistant Meets Pharo [Enforced Code Critiques Motivate More Valu...
 
Stories About Renraku — the new Quality Model of Pharo (esug2016)
Stories About Renraku — the new Quality Model of Pharo (esug2016)Stories About Renraku — the new Quality Model of Pharo (esug2016)
Stories About Renraku — the new Quality Model of Pharo (esug2016)
 
Про що не говорять програмісти, про що мовчать науковці (UCU2015)
Про що не говорять програмісти, про що мовчать науковці (UCU2015)Про що не говорять програмісти, про що мовчать науковці (UCU2015)
Про що не говорять програмісти, про що мовчать науковці (UCU2015)
 
What if Clippy Would Criticize Your Code? (benevol2015)
What if Clippy Would Criticize Your Code? (benevol2015)What if Clippy Would Criticize Your Code? (benevol2015)
What if Clippy Would Criticize Your Code? (benevol2015)
 
Beyond the Concept of Quality in Pharo (esug2015)
Beyond the Concept of Quality in Pharo (esug2015)Beyond the Concept of Quality in Pharo (esug2015)
Beyond the Concept of Quality in Pharo (esug2015)
 
Code Review: Veni, ViDI, Vici (saner15)
Code Review: Veni, ViDI, Vici (saner15)Code Review: Veni, ViDI, Vici (saner15)
Code Review: Veni, ViDI, Vici (saner15)
 
ViDI - The Visual Design Inspector (fosdem2015)
ViDI - The Visual Design Inspector (fosdem2015)ViDI - The Visual Design Inspector (fosdem2015)
ViDI - The Visual Design Inspector (fosdem2015)
 
Graphics and Visualization (Pharo Days 2015)
Graphics and Visualization (Pharo Days 2015)Graphics and Visualization (Pharo Days 2015)
Graphics and Visualization (Pharo Days 2015)
 
Collaboration in Open-Source Projects: Myth or Reality? (msr14)
Collaboration in Open-Source Projects: Myth or Reality? (msr14)Collaboration in Open-Source Projects: Myth or Reality? (msr14)
Collaboration in Open-Source Projects: Myth or Reality? (msr14)
 
FAST Master's Defense (UA)
FAST Master's Defense (UA)FAST Master's Defense (UA)
FAST Master's Defense (UA)
 
FAST Resolution (benevol13)
FAST Resolution (benevol13)FAST Resolution (benevol13)
FAST Resolution (benevol13)
 

Modeling ASTs with FAST (mooseday13)

  • 1. MODELING ASTS WITH FAST Yuriy “Uko” Tymchuk
  • 9. PROBLEM? • Calculating metrics • Rule checking • Detecting duplication • Representing (eg. visualizing) • Language conversions • And more…
  • 12. FAST Smalltalk Java 100% 75% 50% 25% 0%
  • 13. FAST
  • 14. FAST IMPORTERS PetitParser
  • 15. MODEL
  • 16. GENERAL FAST DIAGRAM 0..1 parentExpression** FASTStatement 0..* FASTExpression 0..1 statements parentStatement** 0..1 parentBehaviouralEntity 0..1 FASTStatementBlock FASTBehaviouralEntity parentStatementBlock 0..1 0..1 FASTVariableExpression FASTLiteral parentBehaviouralEntity statementBlock signature : string 0..* FASTNamedEntity 0..1 0..1 localVariables variable parentVariableExpression name : String 0..* 0..* 0..1 FAMIXNamedEntity parameters fastNamedEntities famixNamedEntity FASTNamedBehaviouralEntity 0..1 0..1 FAMIXBehaviouralEntity name : String fastNamedBehaviouralEntity famixBehaviouralEntity
  • 17. GENERAL FAST DIAGRAM 0..1 parentExpression** FASTStatement 0..* FASTExpression 0..1 statements parentStatement** 0..1 parentBehaviouralEntity 0..1 FASTStatementBlock FASTBehaviouralEntity parentStatementBlock 0..1 0..1 FASTVariableExpression FASTLiteral parentBehaviouralEntity statementBlock signature : string 0..* FASTNamedEntity 0..1 0..1 localVariables variable parentVariableExpression name : String 0..* 0..* 0..1 FAMIXNamedEntity parameters fastNamedEntities famixNamedEntity FASTNamedBehaviouralEntity 0..1 0..1 FAMIXBehaviouralEntity name : String fastNamedBehaviouralEntity famixBehaviouralEntity
  • 18. GENERAL FAST DIAGRAM 0..1 parentExpression** FASTStatement 0..* FASTExpression 0..1 statements parentStatement** 0..1 parentBehaviouralEntity 0..1 FASTStatementBlock FASTBehaviouralEntity parentStatementBlock 0..1 0..1 FASTVariableExpression FASTLiteral parentBehaviouralEntity statementBlock signature : string 0..* FASTNamedEntity 0..1 0..1 localVariables variable parentVariableExpression name : String 0..* 0..* 0..1 FAMIXNamedEntity parameters fastNamedEntities famixNamedEntity FASTNamedBehaviouralEntity 0..1 0..1 FAMIXBehaviouralEntity name : String fastNamedBehaviouralEntity famixBehaviouralEntity
  • 19. GENERAL FAST DIAGRAM 0..1 parentExpression** FASTStatement 0..* FASTExpression 0..1 statements parentStatement** 0..1 parentBehaviouralEntity 0..1 FASTStatementBlock FASTBehaviouralEntity parentStatementBlock 0..1 0..1 FASTVariableExpression FASTLiteral parentBehaviouralEntity statementBlock signature : string 0..* FASTNamedEntity 0..1 0..1 localVariables variable parentVariableExpression name : String 0..* 0..* 0..1 FAMIXNamedEntity parameters fastNamedEntities famixNamedEntity FASTNamedBehaviouralEntity 0..1 0..1 FAMIXBehaviouralEntity name : String fastNamedBehaviouralEntity famixBehaviouralEntity
  • 20. GENERAL FAST DIAGRAM 0..1 parentExpression** FASTStatement 0..* FASTExpression 0..1 statements parentStatement** 0..1 parentBehaviouralEntity 0..1 FASTStatementBlock FASTBehaviouralEntity parentStatementBlock 0..1 0..1 FASTVariableExpression FASTLiteral parentBehaviouralEntity statementBlock signature : string 0..* FASTNamedEntity 0..1 0..1 localVariables variable parentVariableExpression name : String 0..* 0..* 0..1 FAMIXNamedEntity parameters fastNamedEntities famixNamedEntity FASTNamedBehaviouralEntity 0..1 0..1 FAMIXBehaviouralEntity name : String fastNamedBehaviouralEntity famixBehaviouralEntity
  • 21. GENERAL FAST DIAGRAM 0..1 parentExpression** FASTStatement 0..* FASTExpression 0..1 statements parentStatement** 0..1 parentBehaviouralEntity 0..1 FASTStatementBlock FASTBehaviouralEntity parentStatementBlock 0..1 0..1 FASTVariableExpression FASTLiteral parentBehaviouralEntity statementBlock signature : string 0..* FASTNamedEntity 0..1 0..1 localVariables variable parentVariableExpression name : String 0..* 0..* 0..1 FAMIXNamedEntity parameters fastNamedEntities famixNamedEntity FASTNamedBehaviouralEntity 0..1 0..1 FAMIXBehaviouralEntity name : String fastNamedBehaviouralEntity famixBehaviouralEntity
  • 22. SMALLTALK FAST DIAGRAM FASTStatement 0..* statements 0..1 parentBehaviouralEntity FASTBehaviouralEntity 0..1 FASTStatementBlock parentStatementBlock 0..1 0..1 parentBehaviouralEntity statementBlock FASTSmalltalkReturnStatement 0..1 parentStatement 0..1 FASTNamedBehaviouralEntity FASTBlockDefinition FASTExpression 0..1 expression name : String 0..1 block FASTSmalltalkExpressionStatement 0..1 parentStatement 0..1 concreteReceiver fastNamedBehaviouralEntity 0..1 expression 0..* 0..1 famixBehaviouralEntity 0..1 arguments expression FAMIXBehaviouralEntity 0..* 0..1 contents receiver parentExpression 0..1 parentExpression 0..1 parentExpression 0..1 parentExpression 0..1 parentExpression 0..1 FASTAssignmentExpression FASTVariableExpression FASTBlockExpression FASTArrayExpression FASTLiteral FASTCascade FASTMessageSend signature : String kind selector isUnary() 0..1 parentAssignmentExpression 0..1 parentVariableExpression 0..1 0..* parentCascade 0..1 isBinary() contents parentExpression 0..* isKey() variable 0..1 variable 0..1 0..* FASTNamedEntity messages cascaded() receiver() localVariables name : String 0..* FASTArrayLiteral FASTByteArrayLiteral FASTSymbolLiteral FASTStringLiteral messageSend 0..1 parameters value : Object value : String fastNamedEntities 0..* invocation 0..1 FAMIXInvocation contents 0..* famixNamedEntity 0..1 FASTUndefinedLiteral FASTNumberLiteral FASTCharacterLiteral FASTBooleanLiteral FAMIXNamedEntity value : Number value : Object value : Boolean
  • 23. SMALLTALK FAST DIAGRAM FASTStatement 0..* statements 0..1 parentBehaviouralEntity FASTBehaviouralEntity 0..1 FASTStatementBlock parentStatementBlock 0..1 0..1 parentBehaviouralEntity statementBlock FASTSmalltalkReturnStatement 0..1 parentStatement 0..1 FASTNamedBehaviouralEntity FASTBlockDefinition FASTExpression 0..1 expression name : String 0..1 block FASTSmalltalkExpressionStatement 0..1 parentStatement 0..1 concreteReceiver fastNamedBehaviouralEntity 0..1 expression 0..* 0..1 famixBehaviouralEntity 0..1 arguments expression FAMIXBehaviouralEntity 0..* 0..1 contents receiver parentExpression 0..1 parentExpression 0..1 parentExpression 0..1 parentExpression 0..1 parentExpression 0..1 FASTAssignmentExpression FASTVariableExpression FASTBlockExpression FASTArrayExpression FASTLiteral FASTCascade FASTMessageSend signature : String kind selector isUnary() 0..1 parentAssignmentExpression 0..1 parentVariableExpression 0..1 0..* parentCascade 0..1 isBinary() contents parentExpression 0..* isKey() variable 0..1 variable 0..1 0..* FASTNamedEntity messages cascaded() receiver() localVariables name : String 0..* FASTArrayLiteral FASTByteArrayLiteral FASTSymbolLiteral FASTStringLiteral messageSend 0..1 parameters value : Object value : String fastNamedEntities 0..* invocation 0..1 FAMIXInvocation contents 0..* famixNamedEntity 0..1 FASTUndefinedLiteral FASTNumberLiteral FASTCharacterLiteral FASTBooleanLiteral FAMIXNamedEntity value : Number value : Object value : Boolean
  • 24. SMALLTALK FAST DIAGRAM FASTStatement 0..* statements 0..1 parentBehaviouralEntity FASTBehaviouralEntity 0..1 FASTStatementBlock parentStatementBlock 0..1 0..1 parentBehaviouralEntity statementBlock FASTSmalltalkReturnStatement 0..1 parentStatement 0..1 FASTNamedBehaviouralEntity FASTBlockDefinition FASTExpression 0..1 expression name : String 0..1 block FASTSmalltalkExpressionStatement 0..1 parentStatement 0..1 concreteReceiver fastNamedBehaviouralEntity 0..1 expression 0..* 0..1 famixBehaviouralEntity 0..1 arguments expression FAMIXBehaviouralEntity 0..* 0..1 contents receiver parentExpression 0..1 parentExpression 0..1 parentExpression 0..1 parentExpression 0..1 parentExpression 0..1 FASTAssignmentExpression FASTVariableExpression FASTBlockExpression FASTArrayExpression FASTLiteral FASTCascade FASTMessageSend signature : String kind selector isUnary() 0..1 parentAssignmentExpression 0..1 parentVariableExpression 0..1 0..* parentCascade 0..1 isBinary() contents parentExpression 0..* isKey() variable 0..1 variable 0..1 0..* FASTNamedEntity messages cascaded() receiver() localVariables name : String 0..* FASTArrayLiteral FASTByteArrayLiteral FASTSymbolLiteral FASTStringLiteral messageSend 0..1 parameters value : Object value : String fastNamedEntities 0..* invocation 0..1 FAMIXInvocation contents 0..* famixNamedEntity 0..1 FASTUndefinedLiteral FASTNumberLiteral FASTCharacterLiteral FASTBooleanLiteral FAMIXNamedEntity value : Number value : Object value : Boolean
  • 25. SMALLTALK FAST DIAGRAM FASTStatement 0..* statements 0..1 parentBehaviouralEntity FASTBehaviouralEntity 0..1 FASTStatementBlock parentStatementBlock 0..1 0..1 parentBehaviouralEntity statementBlock FASTSmalltalkReturnStatement 0..1 parentStatement 0..1 FASTNamedBehaviouralEntity FASTBlockDefinition FASTExpression 0..1 expression name : String 0..1 block FASTSmalltalkExpressionStatement 0..1 parentStatement 0..1 concreteReceiver fastNamedBehaviouralEntity 0..1 expression 0..* 0..1 famixBehaviouralEntity 0..1 arguments expression FAMIXBehaviouralEntity 0..* 0..1 contents receiver parentExpression 0..1 parentExpression 0..1 parentExpression 0..1 parentExpression 0..1 parentExpression 0..1 FASTAssignmentExpression FASTVariableExpression FASTBlockExpression FASTArrayExpression FASTLiteral FASTCascade FASTMessageSend signature : String kind selector isUnary() 0..1 parentAssignmentExpression 0..1 parentVariableExpression 0..1 0..* parentCascade 0..1 isBinary() contents parentExpression 0..* isKey() variable 0..1 variable 0..1 0..* FASTNamedEntity messages cascaded() receiver() localVariables name : String 0..* FASTArrayLiteral FASTByteArrayLiteral FASTSymbolLiteral FASTStringLiteral messageSend 0..1 parameters value : Object value : String fastNamedEntities 0..* invocation 0..1 FAMIXInvocation contents 0..* famixNamedEntity 0..1 FASTUndefinedLiteral FASTNumberLiteral FASTCharacterLiteral FASTBooleanLiteral FAMIXNamedEntity value : Number value : Object value : Boolean
  • 26. SMALLTALK FAST DIAGRAM FASTStatement 0..* statements 0..1 parentBehaviouralEntity FASTBehaviouralEntity 0..1 FASTStatementBlock parentStatementBlock 0..1 0..1 parentBehaviouralEntity statementBlock FASTSmalltalkReturnStatement 0..1 parentStatement 0..1 FASTNamedBehaviouralEntity FASTBlockDefinition FASTExpression 0..1 expression name : String 0..1 block FASTSmalltalkExpressionStatement 0..1 parentStatement 0..1 concreteReceiver fastNamedBehaviouralEntity 0..1 expression 0..* 0..1 famixBehaviouralEntity 0..1 arguments expression FAMIXBehaviouralEntity 0..* 0..1 contents receiver parentExpression 0..1 parentExpression 0..1 parentExpression 0..1 parentExpression 0..1 parentExpression 0..1 FASTAssignmentExpression FASTVariableExpression FASTBlockExpression FASTArrayExpression FASTLiteral FASTCascade FASTMessageSend signature : String kind selector isUnary() 0..1 parentAssignmentExpression 0..1 parentVariableExpression 0..1 0..* parentCascade 0..1 isBinary() contents parentExpression 0..* isKey() variable 0..1 variable 0..1 0..* FASTNamedEntity messages cascaded() receiver() localVariables name : String 0..* FASTArrayLiteral FASTByteArrayLiteral FASTSymbolLiteral FASTStringLiteral messageSend 0..1 parameters value : Object value : String fastNamedEntities 0..* invocation 0..1 FAMIXInvocation contents 0..* famixNamedEntity 0..1 FASTUndefinedLiteral FASTNumberLiteral FASTCharacterLiteral FASTBooleanLiteral FAMIXNamedEntity value : Number value : Object value : Boolean
  • 27. RB CASCADE DESIGN RECEIVER Message1 arguments… Cascade Message2 arguments… Message3 arguments…
  • 28. FAST CASCADE DESIGN Message1 arguments… RECEIVER Cascade Message2 arguments… Message3 arguments…
  • 29. SMALLTALK / JAVA COMPARISON Smalltalk Java 30 23 15 8 Statements 0 Expression
  • 31. JAVA FAST DIAGRAM FASTStatement 0..* 0..1 statements body 0..1 parentBehaviouralEntity 0..1 StatementBlock FASTBehaviouralEntity parentStatementBlock 0..1 0..1 parentBehaviouralEntity statementBlock 0..1 FASTNamedBehaviouralEntity FASTWhileStatement parentStatement name : String FASTJavaReturnStatement 0..1 0..1 FASTExpression FASTJavaExpressionStatement parentStatement condition fastNamedBehaviouralEntity 0..1 0..1 0..1 famixBehaviouralEntity 0..1 parentStatement expression FASTVariableDeclarationStatement 0..1 0..1 0..1 FAMIXBehaviouralEntity parentStatement expression rightOperand 0..1 0..* 0..1 FASTVariableDeclarator 0..1 parentStatement declarators leftOperand initializer 0..* FASTNamedEntity 0..1 localVariables variable 0..* name : String FASTVariableExpression FASTLiteral FASTInfixOperation 0..1 parameters 0..1 0..1 parentVariableExpression signature : string parentExpression variable fastNamedEntities 0..* 0..1 famixNamedEntity 0..1 parentExpression FAMIXNamedEntity FASTJavaIntegerLiteral FASTJavaBooleanLiteral FASTJavaStringLiteral
  • 32. JAVA FAST DIAGRAM FASTStatement 0..* 0..1 statements body 0..1 parentBehaviouralEntity 0..1 StatementBlock FASTBehaviouralEntity parentStatementBlock 0..1 0..1 parentBehaviouralEntity statementBlock 0..1 FASTNamedBehaviouralEntity FASTWhileStatement parentStatement name : String FASTJavaReturnStatement 0..1 0..1 FASTExpression FASTJavaExpressionStatement parentStatement condition fastNamedBehaviouralEntity 0..1 0..1 0..1 famixBehaviouralEntity 0..1 parentStatement expression FASTVariableDeclarationStatement 0..1 0..1 0..1 FAMIXBehaviouralEntity parentStatement expression rightOperand 0..1 0..* 0..1 FASTVariableDeclarator 0..1 parentStatement declarators leftOperand initializer 0..* FASTNamedEntity 0..1 localVariables variable 0..* name : String FASTVariableExpression FASTLiteral FASTInfixOperation 0..1 parameters 0..1 0..1 parentVariableExpression signature : string parentExpression variable fastNamedEntities 0..* 0..1 famixNamedEntity 0..1 parentExpression FAMIXNamedEntity FASTJavaIntegerLiteral FASTJavaBooleanLiteral FASTJavaStringLiteral
  • 33. JAVA FAST DIAGRAM FASTStatement 0..* 0..1 statements body 0..1 parentBehaviouralEntity 0..1 StatementBlock FASTBehaviouralEntity parentStatementBlock 0..1 0..1 parentBehaviouralEntity statementBlock 0..1 FASTNamedBehaviouralEntity FASTWhileStatement parentStatement name : String FASTJavaReturnStatement 0..1 0..1 FASTExpression FASTJavaExpressionStatement parentStatement condition fastNamedBehaviouralEntity 0..1 0..1 0..1 famixBehaviouralEntity 0..1 parentStatement expression FASTVariableDeclarationStatement 0..1 0..1 0..1 FAMIXBehaviouralEntity parentStatement expression rightOperand 0..1 0..* 0..1 FASTVariableDeclarator 0..1 parentStatement declarators leftOperand initializer 0..* FASTNamedEntity 0..1 localVariables variable 0..* name : String FASTVariableExpression FASTLiteral FASTInfixOperation 0..1 parameters 0..1 0..1 parentVariableExpression signature : string parentExpression variable fastNamedEntities 0..* 0..1 famixNamedEntity 0..1 parentExpression FAMIXNamedEntity FASTJavaIntegerLiteral FASTJavaBooleanLiteral FASTJavaStringLiteral
  • 34. JAVA FAST DIAGRAM FASTStatement 0..* 0..1 statements body 0..1 parentBehaviouralEntity 0..1 StatementBlock FASTBehaviouralEntity parentStatementBlock 0..1 0..1 parentBehaviouralEntity statementBlock 0..1 FASTNamedBehaviouralEntity FASTWhileStatement parentStatement name : String FASTJavaReturnStatement 0..1 0..1 FASTExpression FASTJavaExpressionStatement parentStatement condition fastNamedBehaviouralEntity 0..1 0..1 0..1 famixBehaviouralEntity 0..1 parentStatement expression FASTVariableDeclarationStatement 0..1 0..1 0..1 FAMIXBehaviouralEntity parentStatement expression rightOperand 0..1 0..* 0..1 FASTVariableDeclarator 0..1 parentStatement declarators leftOperand initializer 0..* FASTNamedEntity 0..1 localVariables variable 0..* name : String FASTVariableExpression FASTLiteral FASTInfixOperation 0..1 parameters 0..1 0..1 parentVariableExpression signature : string parentExpression variable fastNamedEntities 0..* 0..1 famixNamedEntity 0..1 parentExpression FAMIXNamedEntity FASTJavaIntegerLiteral FASTJavaBooleanLiteral FASTJavaStringLiteral
  • 35. DEMO
  • 37. SYMBOL RESOLUTION a b #middleOf:and: middleOf: a and: b sum | sum | st ^st sum := a + b. ^ sum / 2 := / sum + sum 2 a b
  • 38. SYMBOL RESOLUTION a b #middleOf:and: sum a st ^st b := / sum sum + sum 2 a b
  • 39. RESOLVING SYMBOLS Scope • name-variable dictionary • parent scope • owner entity
  • 40. RESOLVING SYMBOLS Scope • name-variable dictionary • parent scope • owner entity Scope • name-variable dictionary • parent scope • owner entity
  • 41. CALCULATING METRICS Amount of something in code • nodes of a Kind • cyclomatic complexity
  • 42. CALCULATING METRICS collection inject: initial into: [block] CollectorVisitor newWithSeed: initial andBlock: [block]
  • 43. CYCLOMATIC COMPLEXITY Each node knows it’s complexity contribution • Class = 0 • ReturnStatement = 0 • IfStatement = 1 • WhileStatement = 1 • MessageSend (#ifTrue:) = 1 calculated at runtime • MessageSend (#detect:ifNone:) = 2 • “for ... else” statement = 2 python
  • 44. FAST CONTRIBUTION http://smalltalkhub.com/#!/~YuriyTymchuk/FAST https://github.com/Uko/FAST https://ci.inria.fr/moose/job/FAST-On-Moose
  • 45. FAST GSOC FAST Java Model Tree models visualization The goal of this project is to create a The idea behind this project is to Java version of FAST. develop an inter active tree visualization that will gradually improve analysis of the underlying model.
  • 47. FAST