/*
   * Generates the initializers for all values that are shared between states (e.g. all instance factories
   * shared by AddItems overrides).
   */
  private void genSharedFactories(StatesModel model, CodeFragmentList list, String indent) {
    Map<String, SharedObject> shared = model.sharedObjects;

    for (Iterator<String> iter = shared.keySet().iterator(); iter.hasNext(); ) {
      SharedObject symbol = shared.get(iter.next());
      String lval =
          indent
              + "var "
              + symbol.name
              + "_factory:"
              + NameFormatter.retrieveClassName(standardDefs.CLASS_DEFERREDINSTANCEFROMFUNCTION)
              + " = \n";
      indent += StatesGenerator.INDENT;
      String suffix = symbol.model.isDeclared() ? "_i" : "_c";
      Boolean isTransient = symbol.model.getIsTransient();
      String rval =
          indent
              + "new "
              + NameFormatter.toDot(standardDefs.CLASS_DEFERREDINSTANCEFROMFUNCTION)
              + "("
              + symbol.name
              + suffix
              + (isTransient ? ", " + symbol.name + "_r" : "")
              + ");";
      indent = indent.substring(0, indent.length() - INDENT.length());
      list.add(lval, rval, 0);
    }
  }
 /*
  * Generate all necessary binding instance initializers for any data bound overrides.
  */
 private void genBindingInitializers(CodeFragmentList list, String indent) {
   for (Iterator<StatesModel.Override> iter = bindingsQueue.iterator(); iter.hasNext(); ) {
     StatesModel.Override symbol = (StatesModel.Override) iter.next();
     list.add(
         indent,
         NameFormatter.toDot(standardDefs.CLASS_BINDINGMANAGER),
         ".executeBindings(this, \"" + symbol.declaration + "\", " + symbol.declaration + ");",
         0);
   }
 }
Example #3
0
  private void processStyle(Context context, MetaDataNode metaDataNode) {
    MetaData metaData = new MetaData(metaDataNode);
    String styleName = metaData.getValue("name");
    String typeName = metaData.getValue("type");

    if (styleName == null) {
      // preilly: we should report this earlier in the process.
      context.localizedError2(metaDataNode.pos(), new StyleHasMissingName());
    }

    if (typeName != null) {
      unit.expressions.add(NameFormatter.toMultiName(typeName));
    }

    registerStyle(context, metaDataNode, styleName, metaData);
  }
  /*
   * Generates the initializers (AST) for all values that are shared between states (e.g. all instance factories
   * shared by AddItems overrides).
   */
  private StatementListNode genSharedFactoriesAST(
      StatesModel model, NodeFactory nodeFactory, StatementListNode statementList) {
    Map<String, SharedObject> shared = model.sharedObjects;

    StatementListNode result = statementList;

    for (Iterator<String> iter = shared.keySet().iterator(); iter.hasNext(); ) {
      SharedObject symbol = shared.get(iter.next());

      String varName = ((String) symbol.name + _FACTORY).intern();
      String typeName = NameFormatter.retrieveClassName(DEFERREDINSTANCEFROMFUNCTION);
      String factory = symbol.name + (symbol.model.isDeclared() ? _I : _C);
      String resetFunc = symbol.name + _R;

      MemberExpressionNode memberExpression =
          AbstractSyntaxTreeUtil.generateGetterSelector(nodeFactory, factory, true);

      ArgumentListNode callExpressionArgumentList =
          nodeFactory.argumentList(null, memberExpression);

      if (symbol.model.getIsTransient()) {
        memberExpression =
            AbstractSyntaxTreeUtil.generateGetterSelector(nodeFactory, resetFunc, true);
        callExpressionArgumentList =
            nodeFactory.argumentList(callExpressionArgumentList, memberExpression);
      }

      QualifiedIdentifierNode qualifiedIdentifier =
          AbstractSyntaxTreeUtil.generateQualifiedIdentifier(
              nodeFactory, standardDefs.getCorePackage(), typeName, false);

      CallExpressionNode callExpression =
          (CallExpressionNode)
              nodeFactory.callExpression(qualifiedIdentifier, callExpressionArgumentList);
      callExpression.is_new = true;
      callExpression.setRValue(false);

      MemberExpressionNode ad = nodeFactory.memberExpression(null, callExpression);

      VariableDefinitionNode variableDefinition =
          AbstractSyntaxTreeUtil.generateVariable(nodeFactory, varName, typeName, false, ad);
      result = nodeFactory.statementList(result, variableDefinition);
    }
    return result;
  }