/* * 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); } }
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; }