/*
   * Generate all necessary binding instance AST for any data bound overrides.
   */
  private StatementListNode genBindingInitializersAST(
      NodeFactory nodeFactory, StatementListNode statementList) {
    StatementListNode result = statementList;

    for (Iterator<StatesModel.Override> iter = bindingsQueue.iterator(); iter.hasNext(); ) {
      StatesModel.Override symbol = (StatesModel.Override) iter.next();

      QualifiedIdentifierNode qualifiedIdentifier =
          AbstractSyntaxTreeUtil.generateQualifiedIdentifier(
              nodeFactory, standardDefs.getBindingPackage(), BINDINGMANAGER, false);

      GetExpressionNode bindExpression = nodeFactory.getExpression(qualifiedIdentifier);

      MemberExpressionNode lvalue = nodeFactory.memberExpression(null, bindExpression);

      ArgumentListNode execArgs = nodeFactory.argumentList(null, nodeFactory.thisExpression(0));
      String decl = symbol.declaration.intern();
      execArgs = nodeFactory.argumentList(execArgs, nodeFactory.literalString(decl, false));
      IdentifierNode rvalIdentifier = nodeFactory.identifier(decl, false);
      GetExpressionNode getExpression = nodeFactory.getExpression(rvalIdentifier);
      MemberExpressionNode rvalue = nodeFactory.memberExpression(null, getExpression);
      execArgs = nodeFactory.argumentList(execArgs, rvalue);

      IdentifierNode bindIdentifier = nodeFactory.identifier(EXECUTEBINDINGS, false);

      CallExpressionNode selector =
          (CallExpressionNode) nodeFactory.callExpression(bindIdentifier, execArgs);
      selector.setRValue(false);

      MemberExpressionNode base = nodeFactory.memberExpression(lvalue, selector);
      ListNode list = nodeFactory.list(null, base);
      ExpressionStatementNode expressionStatement = nodeFactory.expressionStatement(list);
      result = nodeFactory.statementList(result, expressionStatement);
    }
    return result;
  }