You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by cd...@apache.org on 2016/04/13 20:55:57 UTC

[05/51] [partial] git commit: [flex-falcon] [refs/heads/feature/maven-migration-test] - - Check-In of the migrated project to make error analysis easier

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/c3dce49f/compiler.js/src/org/apache/flex/compiler/internal/as/codegen/JSMXMLClassDirectiveProcessor.java
----------------------------------------------------------------------
diff --git a/compiler.js/src/org/apache/flex/compiler/internal/as/codegen/JSMXMLClassDirectiveProcessor.java b/compiler.js/src/org/apache/flex/compiler/internal/as/codegen/JSMXMLClassDirectiveProcessor.java
deleted file mode 100644
index 0f098cc..0000000
--- a/compiler.js/src/org/apache/flex/compiler/internal/as/codegen/JSMXMLClassDirectiveProcessor.java
+++ /dev/null
@@ -1,1616 +0,0 @@
-package org.apache.flex.compiler.internal.as.codegen;
-
-import static org.apache.flex.abc.ABCConstants.CONSTANT_PrivateNs;
-import static org.apache.flex.abc.ABCConstants.OP_applytype;
-import static org.apache.flex.abc.ABCConstants.OP_callproperty;
-import static org.apache.flex.abc.ABCConstants.OP_callpropvoid;
-import static org.apache.flex.abc.ABCConstants.OP_construct;
-import static org.apache.flex.abc.ABCConstants.OP_constructprop;
-import static org.apache.flex.abc.ABCConstants.OP_dup;
-import static org.apache.flex.abc.ABCConstants.OP_finddef;
-import static org.apache.flex.abc.ABCConstants.OP_findpropstrict;
-import static org.apache.flex.abc.ABCConstants.OP_getlex;
-import static org.apache.flex.abc.ABCConstants.OP_getlocal0;
-import static org.apache.flex.abc.ABCConstants.OP_getlocal3;
-import static org.apache.flex.abc.ABCConstants.OP_getproperty;
-import static org.apache.flex.abc.ABCConstants.OP_newarray;
-import static org.apache.flex.abc.ABCConstants.OP_newobject;
-import static org.apache.flex.abc.ABCConstants.OP_pushdouble;
-import static org.apache.flex.abc.ABCConstants.OP_pushfalse;
-import static org.apache.flex.abc.ABCConstants.OP_pushnull;
-import static org.apache.flex.abc.ABCConstants.OP_pushstring;
-import static org.apache.flex.abc.ABCConstants.OP_pushtrue;
-import static org.apache.flex.abc.ABCConstants.OP_pushuint;
-import static org.apache.flex.abc.ABCConstants.OP_setproperty;
-import static org.apache.flex.abc.ABCConstants.TRAIT_Const;
-import static org.apache.flex.abc.ABCConstants.TRAIT_Method;
-import static org.apache.flex.abc.ABCConstants.TRAIT_Var;
-import static org.apache.flex.compiler.mxml.IMXMLTypeConstants.ADD_EVENT_LISTENER_CALL_OPERANDS;
-import static org.apache.flex.compiler.mxml.IMXMLTypeConstants.CREATE_XML_DOCUMENT_CALL_OPERANDS;
-import static org.apache.flex.compiler.mxml.IMXMLTypeConstants.GET_INSTANCE_CALL_OPERANDS;
-import static org.apache.flex.compiler.mxml.IMXMLTypeConstants.NAME_HANDLER_FUNCTION;
-import static org.apache.flex.compiler.mxml.IMXMLTypeConstants.NAME_ID;
-import static org.apache.flex.compiler.mxml.IMXMLTypeConstants.NAME_NAME;
-import static org.apache.flex.compiler.mxml.IMXMLTypeConstants.NAME_OVERRIDES;
-import static org.apache.flex.compiler.mxml.IMXMLTypeConstants.NAME_TARGET;
-import static org.apache.flex.compiler.mxml.IMXMLTypeConstants.NAME_VALUE;
-import static org.apache.flex.compiler.mxml.IMXMLTypeConstants.SET_STYLE_CALL_OPERANDS;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.flex.abc.ABCConstants;
-import org.apache.flex.abc.instructionlist.InstructionList;
-import org.apache.flex.abc.semantics.MethodInfo;
-import org.apache.flex.abc.semantics.Name;
-import org.apache.flex.abc.semantics.Namespace;
-import org.apache.flex.abc.semantics.Nsset;
-import org.apache.flex.abc.semantics.Trait;
-import org.apache.flex.abc.visitors.IABCVisitor;
-import org.apache.flex.abc.visitors.ITraitVisitor;
-import org.apache.flex.abc.visitors.ITraitsVisitor;
-import org.apache.flex.compiler.common.ASModifier;
-import org.apache.flex.compiler.constants.IASLanguageConstants;
-import org.apache.flex.compiler.constants.IASLanguageConstants.BuiltinType;
-import org.apache.flex.compiler.css.ICSSDocument;
-import org.apache.flex.compiler.definitions.IDefinition;
-import org.apache.flex.compiler.definitions.ITypeDefinition;
-import org.apache.flex.compiler.exceptions.CodegenInterruptedException;
-import org.apache.flex.compiler.internal.as.codegen.ICodeGenerator.IConstantValue;
-import org.apache.flex.compiler.internal.as.codegen.MXMLClassDirectiveProcessor.Context;
-import org.apache.flex.compiler.internal.as.codegen.MXMLClassDirectiveProcessor.IL;
-import org.apache.flex.compiler.internal.caches.CSSDocumentCache;
-import org.apache.flex.compiler.internal.css.codegen.CSSCompilationSession;
-import org.apache.flex.compiler.internal.css.codegen.CSSEmitter;
-import org.apache.flex.compiler.internal.css.codegen.CSSReducer;
-import org.apache.flex.compiler.internal.definitions.ClassDefinition;
-import org.apache.flex.compiler.internal.definitions.DefinitionBase;
-import org.apache.flex.compiler.internal.definitions.FunctionDefinition;
-import org.apache.flex.compiler.internal.definitions.NamespaceDefinition;
-import org.apache.flex.compiler.internal.definitions.TypeDefinitionBase;
-import org.apache.flex.compiler.internal.projects.FlexProject;
-import org.apache.flex.compiler.internal.resourcebundles.ResourceBundleUtils;
-import org.apache.flex.compiler.internal.scopes.ASProjectScope;
-import org.apache.flex.compiler.internal.scopes.ASScope;
-import org.apache.flex.compiler.internal.semantics.SemanticUtils;
-import org.apache.flex.compiler.internal.tree.as.FunctionNode;
-import org.apache.flex.compiler.internal.tree.as.NodeBase;
-import org.apache.flex.compiler.internal.tree.as.VariableNode;
-import org.apache.flex.compiler.mxml.IMXMLLanguageConstants;
-import org.apache.flex.compiler.mxml.IMXMLTypeConstants;
-import org.apache.flex.compiler.problems.CSSCodeGenProblem;
-import org.apache.flex.compiler.problems.ICompilerProblem;
-import org.apache.flex.compiler.problems.MXMLNotImplementedProblem;
-import org.apache.flex.compiler.problems.MXMLOuterDocumentAlreadyDeclaredProblem;
-import org.apache.flex.compiler.projects.ICompilerProject;
-import org.apache.flex.compiler.projects.IFlexProject;
-import org.apache.flex.compiler.tree.ASTNodeID;
-import org.apache.flex.compiler.tree.as.IASNode;
-import org.apache.flex.compiler.tree.as.IExpressionNode;
-import org.apache.flex.compiler.tree.mxml.IMXMLArrayNode;
-import org.apache.flex.compiler.tree.mxml.IMXMLBooleanNode;
-import org.apache.flex.compiler.tree.mxml.IMXMLClassDefinitionNode;
-import org.apache.flex.compiler.tree.mxml.IMXMLClassNode;
-import org.apache.flex.compiler.tree.mxml.IMXMLClassReferenceNode;
-import org.apache.flex.compiler.tree.mxml.IMXMLComponentNode;
-import org.apache.flex.compiler.tree.mxml.IMXMLConcatenatedDataBindingNode;
-import org.apache.flex.compiler.tree.mxml.IMXMLDeferredInstanceNode;
-import org.apache.flex.compiler.tree.mxml.IMXMLDesignLayerNode;
-import org.apache.flex.compiler.tree.mxml.IMXMLEffectSpecifierNode;
-import org.apache.flex.compiler.tree.mxml.IMXMLEmbedNode;
-import org.apache.flex.compiler.tree.mxml.IMXMLEventSpecifierNode;
-import org.apache.flex.compiler.tree.mxml.IMXMLFactoryNode;
-import org.apache.flex.compiler.tree.mxml.IMXMLFunctionNode;
-import org.apache.flex.compiler.tree.mxml.IMXMLInstanceNode;
-import org.apache.flex.compiler.tree.mxml.IMXMLIntNode;
-import org.apache.flex.compiler.tree.mxml.IMXMLNode;
-import org.apache.flex.compiler.tree.mxml.IMXMLNumberNode;
-import org.apache.flex.compiler.tree.mxml.IMXMLObjectNode;
-import org.apache.flex.compiler.tree.mxml.IMXMLPropertySpecifierNode;
-import org.apache.flex.compiler.tree.mxml.IMXMLRegExpNode;
-import org.apache.flex.compiler.tree.mxml.IMXMLRemoteObjectMethodNode;
-import org.apache.flex.compiler.tree.mxml.IMXMLResourceNode;
-import org.apache.flex.compiler.tree.mxml.IMXMLSingleDataBindingNode;
-import org.apache.flex.compiler.tree.mxml.IMXMLStateNode;
-import org.apache.flex.compiler.tree.mxml.IMXMLStringNode;
-import org.apache.flex.compiler.tree.mxml.IMXMLStyleNode;
-import org.apache.flex.compiler.tree.mxml.IMXMLStyleSpecifierNode;
-import org.apache.flex.compiler.tree.mxml.IMXMLUintNode;
-import org.apache.flex.compiler.tree.mxml.IMXMLVectorNode;
-import org.apache.flex.compiler.tree.mxml.IMXMLWebServiceOperationNode;
-import org.apache.flex.compiler.tree.mxml.IMXMLXMLListNode;
-import org.apache.flex.compiler.tree.mxml.IMXMLXMLNode;
-import org.apache.flex.compiler.units.ICompilationUnit;
-
-import com.google.common.base.Strings;
-
-/**
- * {@link MXMLClassDirectiveProcessor} is a subclass of
- * {@code ClassDirectiveProcessor} that generates an ABC class
- * from an {@link IMXMLClassDefinitionNode} and its contents.
- * 
- * Here are some register usage conventions for Code Generation:
- *      local3: during parts of the constructor, local3 is used for a 
- *          lookup array of DeferredInstanceFromFunction.
- *      local1 and 2: Used during the constructor as temporaries
- *          for some data-binding init.
- */
-public class JSMXMLClassDirectiveProcessor extends MXMLClassDirectiveProcessor
-{
-    /**
-     * Initialize the {@link MXMLClassDirectiveProcessor} and its
-     * associated AET data structures.
-     * @param d - the MXML document's AST.
-     * @param enclosingScope - the immediately enclosing lexical scope.
-     * @param emitter - the active ABC emitter.
-     */
-    JSMXMLClassDirectiveProcessor(IMXMLClassDefinitionNode classDefinitionNode,
-                                LexicalScope enclosingScope, IABCVisitor emitter)
-    {
-        super(classDefinitionNode, 
-              enclosingScope, emitter);  
-        
-        JSMXMLEmitter jsMXMLEmitter = (JSMXMLEmitter)emitter;
-        jsMXMLEmitter.register(this);
-    }
-    
-    /**
-     * A Map mapping an event node to the Name of the event handler
-     * method (>0, >1, etc.) associated with that node.
-     * <p>
-     * The handler method may or may not exist at the time
-     * that the handler name is assigned to the event node.
-     * For example, when a State tag appears before
-     * an instance tag with a state-dependent event,
-     * the name will get assigned and the code generated later.
-     * <p>
-     * This map is managed ONLY by getEventHandlerName().
-     */
-    private final Map<IMXMLEventSpecifierNode, Name> eventHandlerMap =
-        new HashMap<IMXMLEventSpecifierNode, Name>();
-
-    /**
-     * An incrementing counter used to create the names of the
-     * auto-generated event handler methods.
-     */
-    private int eventHandlerCounter = 0;
-
-    /**
-     * Autogenerated event handler methods are named $EH0, $EH1, etc.
-     * Using short names, and using the same names in each MXML document,
-     * decreases SWF size.
-     * Using a character that is not legal in ActionScript identifiers
-     * means that even if the event handler must be public
-     * (because it is referenced in a descriptor)
-     * the name will not collide with the name of a developer-written
-     * method and cannot be accessed from developer code.
-     */
-    private static final String EVENT_HANDLER_NAME_BASE = "$EH";
-
-    private String NEWLINE = "\n";
-    public ArrayList<Name> variableTraits;
-    private ArrayList<String> instanceData = new ArrayList<String>();
-    public ArrayList<String> fragments = new ArrayList<String>();
-    private FragmentList properties = new FragmentList();
-    private FragmentList styles = new FragmentList();
-    private FragmentList events = new FragmentList();
-    private FragmentList children = new FragmentList();
-    private FragmentList model = new FragmentList();
-    private FragmentList beads = new FragmentList();
-    private FragmentList currentList;
-    private boolean inContentFactory;
-    private String className;
-    
-    @Override
-    public void processMainClassDefinitionNode(IMXMLClassDefinitionNode node)
-    {
-        // Leave a reference to the class on the stack.
-        ClassDefinition classDefinition =
-            (ClassDefinition)((IMXMLClassDefinitionNode)node).getClassDefinition();
-        className = classDefinition.getQualifiedName();
-    	currentList = properties;
-    	super.processMainClassDefinitionNode(node);
-    }
-
-    @Override
-    public void addVariableTrait(Name varName, Name varType)
-    {
-    	if (variableTraits == null)
-    		variableTraits = new ArrayList<Name>();
-    	variableTraits.add(varName);
-    	variableTraits.add(varType);
-    }
-
-    @Override
-    public void addBindableVariableTrait(Name varName, Name varType, IDefinition def)
-    {
-    	String var = /*"_" + */varName.getBaseName();
-    	Name backingVar = new Name(new Namespace(JSSharedData.CONSTANT_PrivateNs), var);
-    	variableTraits.add(backingVar);
-    	variableTraits.add(varType);
-
-    	fragments.add("/**"
-    	    	 + NEWLINE +  " * @this {" + className + "}"
-    	    	 + NEWLINE +  " * @return {" + varType.getBaseName() + "}"
-    	    	 + NEWLINE +  " */"
-    	    	 + NEWLINE +  className + ".prototype.get_" + varName.getBaseName() + " = function()"
-    	    	 + NEWLINE +  "{"
-    	    	 + NEWLINE +  "    return this." + var + ";"
-    	    	 + NEWLINE +  "};");
-    	
-    	fragments.add("/**"
-   	    	 + NEWLINE +  " * @this {" + className + "}"
-   	    	 + NEWLINE +  " * @param {" + varType.getBaseName() + "} value"
-   	    	 + NEWLINE +  " */"
-   	    	 + NEWLINE +  className + ".prototype.set_" + varName.getBaseName() + " = function(value)"
-   	    	 + NEWLINE +  "{"
-   	    	 + NEWLINE +  "    if (value != this." + var + ")"
-   	    	 + NEWLINE +  "        this." + var + " = value;"
-   	    	 + NEWLINE +  "};");
-    }
-    
-    @Override
-    protected void processMXMLClassDefinition(IMXMLClassDefinitionNode node, Context context)
-    {
-        // Create the <Component> or <Definition> class.
-        MXMLClassDirectiveProcessor dp = new MXMLClassDirectiveProcessor(node, globalScope, emitter);
-        dp.processMainClassDefinitionNode(node);
-        dp.finishClassDefinition();
-    }
-    
-    @Override
-    void setDocument(IMXMLClassReferenceNode node, boolean conditionally, Context context)
-    {
-        if (node.isVisualElementContainer() || node.isContainer())
-        {
-        	currentList.add("document");
-        	currentList.add(true);
-        	currentList.addExplicit("this");
-        }	
-    }
-    
-    /**
-     * Adds the current set of childEvents, childStyles, and childProperties to currentList;
-     * @param context
-     * @param addCounters
-     * @param skipContentFactory
-     * @return
-     */
-    @Override
-    int setSpecifiers(Context context, Boolean addCounters, Boolean skipContentFactory)
-    {
-    	if (skipContentFactory)
-    		return 0;
-    	
-    	int numProperties = properties.size() / 3;
-    	if (context.hasBeads)
-    		numProperties++;
-    	if (context.hasModel)
-    		numProperties++;
-		currentList.add(numProperties);
-		if (context.hasModel)
-		{
-			currentList.add("model");
-			currentList.addObjectTypeMarker();
-			currentList.addExplicit("[" + model.toString() + "]");
-		}
-		currentList.addAll(properties);
-		if (context.hasBeads)
-		{
-			currentList.add("beads");
-			currentList.addExplicit(beads.toString());
-		}
-    	currentList.add(styles.size() / 3);
-    	currentList.addAll(styles);
-    	currentList.add(events.size() / 2);
-    	currentList.addAll(events);
-    	if (children.size() == 0)
-    		currentList.addNull();
-    	else
-    		currentList.addExplicit("[" + children.toString() + "]");
-    	return (properties.size() + styles.size() + events.size()) / 3;
-    }
-
-    @Override
-    void overrideMXMLDescriptorGetter(IMXMLClassDefinitionNode node, Context context)
-    {
-        // Leave a reference to the class on the stack.
-        ClassDefinition classDefinition =
-            (ClassDefinition)((IMXMLClassDefinitionNode)node).getClassDefinition();
-        String className = classDefinition.getQualifiedName();
-
-    	fragments.add("/**"
-    	 + NEWLINE +  " * @override"
-    	 + NEWLINE +  " * @this {" + className + "}"
-    	 + NEWLINE +  " * @return {Array} the Array of UI element descriptors."
-    	 + NEWLINE +  " */"
-    	 + NEWLINE +  className + ".prototype.get_MXMLDescriptor = function()"
-    	 + NEWLINE +  "{"
-    	 + NEWLINE +  "    if (this.mxmldd == undefined)"
-    	 + NEWLINE +  "    {"
-    	 + NEWLINE +  "         /** @type {Array} */"
-    	 + NEWLINE +  "         var arr = goog.base(this, 'get_MXMLDescriptor');"
-    	 + NEWLINE +  "         /** @type {Array} */"
-    	 + NEWLINE +  "         var data = " + addInstanceData()
-    	 + NEWLINE +  "         if (arr)"
-    	 + NEWLINE +  "             this.mxmldd = arr.concat(data);"
-    	 + NEWLINE +  "         else"
-    	 + NEWLINE +  "             this.mxmldd = data;"
-    	 + NEWLINE +  "    }"
-    	 + NEWLINE +  "    return this.mxmldd;"
-    	 + NEWLINE +  "};");
-    	 
-    }
-
-    private String addInstanceData()
-    {
-    	StringBuilder sb = new StringBuilder();
-    	sb.append("[" + NEWLINE);
-    	int n = children.size();
-    	for (int i = 0; i < n; i++)
-    	{
-    		String s = children.get(i);
-    		sb.append(s);
-    		if (i < n - 1)
-    			sb.append("," + NEWLINE);
-    		else
-    			sb.append(NEWLINE);
-    	}
-        sb.append("];" + NEWLINE);
-    	return sb.toString();
-    }
-
-    void overrideMXMLPropertiesGetter(IMXMLClassDefinitionNode node, Context context, int numElements)
-    {
-        // Leave a reference to the class on the stack.
-        ClassDefinition classDefinition =
-            (ClassDefinition)((IMXMLClassDefinitionNode)node).getClassDefinition();
-        String className = classDefinition.getQualifiedName();
-
-        fragments.add("/**"
-    	    	 + NEWLINE +  " * @override"
-    	    	 + NEWLINE +  " * @this {" + className + "}"
-    	    	 + NEWLINE +  " * @return {Array} the Array of UI element descriptors."
-    	    	 + NEWLINE +  " */"
-    	    	 + NEWLINE +  className + ".prototype.get_MXMLProperties = function()"
-    	    	 + NEWLINE +  "{"
-    	    	 + NEWLINE +  "    if (this.mxmldp == undefined)"
-    	    	 + NEWLINE +  "    {"
-    	    	 + NEWLINE +  "         /** @type {Array} */"
-    	    	 + NEWLINE +  "         var arr = goog.base(this, 'get_MXMLProperties');"
-    	    	 + NEWLINE +  "         /** @type {Array} */"
-    	    	 + NEWLINE +  "         var data = " + addPropertiesData(context)
-    	    	 + NEWLINE +  "         if (arr)"
-    	    	 + NEWLINE +  "             this.mxmldp = arr.concat(data);"
-    	    	 + NEWLINE +  "         else"
-    	    	 + NEWLINE +  "             this.mxmldp = data;"
-    	    	 + NEWLINE +  "    }"
-    	    	 + NEWLINE +  "    return this.mxmldp;"
-    	    	 + NEWLINE +  "};");
-    	    	 
-    }
-    
-    private String addPropertiesData(Context context)
-    {
-    	StringBuilder sb = new StringBuilder();
-    	sb.append("[" + NEWLINE);
-    	int n = properties.size();
-    	int numProperties = n / 3;
-    	if (context.hasModel)
-    		numProperties++;
-    	if (context.hasBeads)
-    		numProperties++;
-    	sb.append(new Integer(numProperties).toString() + ',' + NEWLINE);
-    	if (context.hasModel)
-    	{
-    		sb.append("'model'");
-    		sb.append("," + NEWLINE);
-    		sb.append(model.toString());
-    		sb.append("," + NEWLINE);
-    	}
-    	for (int i = 0; i < n; i++)
-    	{
-    		String s = properties.get(i);
-    		sb.append(s);
-    		sb.append("," + NEWLINE);
-    	}
-    	if (context.hasBeads)
-    	{
-    		sb.append("'beads'");
-    		sb.append("," + NEWLINE);
-    		sb.append(beads.toString());
-    		sb.append("," + NEWLINE);
-    	}
-    	n = styles.size();
-    	sb.append(new Integer(n / 3).toString() + ',' + NEWLINE);
-    	for (int i = 0; i < n; i++)
-    	{
-    		String s = styles.get(i);
-    		sb.append(s);
-    		sb.append("," + NEWLINE);
-    	}
-    	n = events.size();
-    	if (n == 0)
-        	sb.append("0" + NEWLINE);
-    	else
-    		sb.append(new Integer(n / 2).toString() + ',' + NEWLINE);
-    	for (int i = 0; i < n; i++)
-    	{
-    		String s = events.get(i);
-    		sb.append(s);
-    		if (i < n - 1)
-    			sb.append("," + NEWLINE);
-    		else
-    			sb.append(NEWLINE);
-    	}
-        sb.append("];" + NEWLINE);
-    	return sb.toString();
-    }
-
-    @Override
-    void processMXMLBoolean(IMXMLBooleanNode booleanNode, Context context)
-    {
-        if (booleanNode.getParent().getNodeID() == ASTNodeID.MXMLPropertySpecifierID)
-            currentList.addSimpleTypeMarker(); // simple type
-
-        boolean value = isDataBound(booleanNode) ? false : booleanNode.getValue();       
-        currentList.add(value);
-        traverse(booleanNode, context);
-    }
-    
-    @Override
-    void processMXMLInt(IMXMLIntNode intNode, Context context)
-    {
-        if (intNode.getParent().getNodeID() == ASTNodeID.MXMLPropertySpecifierID)
-            currentList.addSimpleTypeMarker(); // simple type
-
-        int value = isDataBound(intNode) ? 0 : intNode.getValue();
-        currentList.add(value);
-        traverse(intNode, context);
-     }
-    
-    @Override
-    void processMXMLUint(IMXMLUintNode uintNode, Context context)
-    {
-        if (uintNode.getParent().getNodeID() == ASTNodeID.MXMLPropertySpecifierID)
-            currentList.addSimpleTypeMarker(); // simple type
-
-        long value = isDataBound(uintNode) ? 0 : uintNode.getValue();
-        currentList.add(value);
-        traverse(uintNode, context);
-     }
-
-    @Override
-    void processMXMLNumber(IMXMLNumberNode numberNode, Context context)
-    {
-        if (numberNode.getParent().getNodeID() == ASTNodeID.MXMLPropertySpecifierID)
-            currentList.addSimpleTypeMarker(); // simple type
-
-        double value = isDataBound(numberNode) ? Double.NaN : numberNode.getValue();
-        currentList.add(value);
-        traverse(numberNode, context);
-    }
-    
-    @Override
-    void processMXMLString(IMXMLStringNode stringNode, Context context)
-    {
-        if (stringNode.getParent().getNodeID() == ASTNodeID.MXMLPropertySpecifierID)
-            currentList.addSimpleTypeMarker(); // simple type
-
-        String value = isDataBound(stringNode) ? null : stringNode.getValue();
-        if (value != null)
-            currentList.add(value);
-        else
-            currentList.addNull();
-        
-        traverse(stringNode, context);
-    }
-
-    @Override
-    void processMXMLClass(IMXMLClassNode classNode, Context context)
-    {        
-    	MXMLNotImplementedProblem problem = new MXMLNotImplementedProblem(classNode, "MXML Class");
-        getProblems().add(problem);
-        /*
-    	// Don't call skipCodegen() because a null Class is represented
-        // by the expression node being null.
-        if (isDataBindingNode(classNode))
-            return;
-        
-        IExpressionNode expressionNode = (IExpressionNode)classNode.getExpressionNode();
-        if (expressionNode != null)
-        {
-            InstructionList init_expression = classScope.getGenerator().generateInstructions(
-                expressionNode, CmcEmitter.__expression_NT, this.classScope);
-            context.addAll(init_expression);
-        }
-        else
-        {
-            context.addInstruction(OP_pushnull);
-        }
-        */
-    }
-
-    /**
-     * Generates an instruction in the current context
-     * to push the value of an {@code IMXMLFunctionNode}.
-     *
-     * Will also generate the function, if the FunctionNode specifies a function expression.
-     *
-     * If no expression is provided in the function node, this will push null
-     */
-    void processMXMLFunction(IMXMLFunctionNode functionNode, Context context)
-    {
-    	MXMLNotImplementedProblem problem = new MXMLNotImplementedProblem(functionNode, "MXML Function");
-        getProblems().add(problem);
-        /*
-        // Don't call skipCodegen() because a null Function is represented
-        // by the expression node being null.
-        if (isDataBindingNode(functionNode))
-            return;
-        
-        IExpressionNode expressionNode = (IExpressionNode)functionNode.getExpressionNode();
-        if (expressionNode != null)
-        {
-            InstructionList init_expression = classScope.getGenerator().generateInstructions(
-                expressionNode, CmcEmitter.__expression_NT, this.classScope);
-            context.addAll(init_expression);
-        }
-        else
-        {
-            context.addInstruction(OP_pushnull);
-        }
-        */
-    }
-
-    @Override
-    void processMXMLRegExp(IMXMLRegExpNode regexpNode, Context context)
-    {
-    	MXMLNotImplementedProblem problem = new MXMLNotImplementedProblem(regexpNode, "MXML RegExp");
-        getProblems().add(problem);
-        /*
-        // Don't call skipCodegen() because a parameterless RegExp is represented
-        // by the expression node being null.
-        if (isDataBindingNode(regexpNode))
-            return;
-        
-        IExpressionNode expressionNode = (IExpressionNode)regexpNode.getExpressionNode();
-        if (expressionNode != null )
-        {
-            InstructionList init_expression = classScope.getGenerator().generateInstructions(
-                expressionNode, CmcEmitter.__expression_NT, this.classScope);
-            context.addAll(init_expression);
-        }
-        else
-        {
-            context.addInstruction(OP_findpropstrict, ABCGeneratingReducer.regexType);
-            context.addInstruction(OP_constructprop, new Object[] {ABCGeneratingReducer.regexType, 0});
-        }
-        */
-    }
-
-    @Override
-    void processMXMLDesignLayer(IMXMLDesignLayerNode node, Context context)
-    {
-    	MXMLNotImplementedProblem problem = new MXMLNotImplementedProblem(node, "MXML DesignLayer");
-        getProblems().add(problem);
-    }
-    
-    @Override
-    void processMXMLWebServiceOperation(IMXMLWebServiceOperationNode node, Context context)
-    {
-    	MXMLNotImplementedProblem problem = new MXMLNotImplementedProblem(node, "MXML WebServices");
-        getProblems().add(problem);
-    }
-    
-    @Override
-    void processMXMLRemoteObjectMethod(IMXMLRemoteObjectMethodNode node, Context context)
-    {
-    	MXMLNotImplementedProblem problem = new MXMLNotImplementedProblem(node, "MXML Remote Object");
-        getProblems().add(problem);
-    }
-    
-    @Override
-    void processMXMLObject(IMXMLObjectNode objectNode, Context context)
-    {
-    	FragmentList savedCurrentList = currentList;
-    	currentList = new FragmentList();
-    	
-        traverse(objectNode, context);
-        
-        StringBuilder sb = new StringBuilder();
-        sb.append("{");
-        int n = currentList.size();
-        for (int i = 0; i < n; i++)
-        {
-        	String s = currentList.get(i++);
-        	sb.append(s + ":");
-        	sb.append(currentList.get(i));
-        	if (i < n - 1)
-        		sb.append(",");
-        }
-        sb.append("}");        
-        currentList = savedCurrentList;
-        currentList.addExplicit(sb.toString());
-    }
-    
-    @Override
-    void processMXMLArray(IMXMLArrayNode arrayNode, Context context)
-    {
-        boolean savedMakingArrayValues = context.makingArrayValues;
-        
-    	if (!inContentFactory)
-        {
-            if (context.parentContext.isStateDescriptor)
-                currentList.addArrayTypeMarker(); // array of descriptors
-            else
-            {
-                boolean isSimple = true;
-                
-                for (int i = 0; i < arrayNode.getChildCount(); i++)
-                {
-                    final IASNode child = arrayNode.getChild(i);
-                    ASTNodeID nodeID = child.getNodeID();
-                    if (nodeID == ASTNodeID.MXMLArrayID || nodeID == ASTNodeID.MXMLInstanceID)
-                    {
-                        isSimple = false;
-                        break;
-                    }
-                }
-                context.makingArrayValues = true;
-                if (isSimple)
-                    currentList.addSimpleTypeMarker(); // arrays are simple values      
-                else
-                	currentList.addArrayTypeMarker();
-            }
-        }
-
-    	FragmentList savedCurrentList = currentList;
-    	currentList = new FragmentList();
-
-    	traverse(arrayNode, context);
-        
-    	FragmentList childList = currentList;
-    	currentList = savedCurrentList;
-    	
-        // TODO: can we do better?
-        // Now that stack will have the array children on it.
-        // But we may not have created one for every child of arrayNode.
-        // It would be best if we could remember how many we created, but
-        // we can't easily do that. So we use our "knowledge" that children
-        // are always created unless they are state dependent instances.
-        int nMax = arrayNode.getChildCount();
-        int numStateDependentChildren=0;
-        for (int i=0; i<nMax; ++i)
-        {
-            IASNode ch = arrayNode.getChild(i);
-            if (isStateDependentInstance(ch))
-            {
-                ++numStateDependentChildren;
-            }
-        }
-        
-        if (inContentFactory)
-        {
-            // pass the number of things we found up to the parent context. In spark controls
-            // the array of children is buried by a layer or two
-            currentList.addAll(childList);
-        }
-        else if (context.parentContext.isStateDescriptor)
-        {
-            StringBuilder sb = new StringBuilder();
-            sb.append("[");
-            sb.append(childList.toString());
-            sb.append("]");        
-            currentList.addExplicit(sb.toString());     
-        }
-        else if (context.makingArrayValues)
-        {
-        	currentList.addAll(childList);
-        }
-        context.makingArrayValues = savedMakingArrayValues;
-    }
-    
-    @Override
-    void processMXMLVector(IMXMLVectorNode vectorNode, Context context)
-    {
-    	MXMLNotImplementedProblem problem = new MXMLNotImplementedProblem(vectorNode, "MXML Vector");
-        getProblems().add(problem);
-    }
-    
-    void processMXMLInstance(IMXMLInstanceNode instanceNode, Context context)
-    {       
-        FragmentList savedList = currentList;
-        FragmentList savedProperties = properties;
-        FragmentList savedStyles = styles;
-        FragmentList savedEvents = events;
-        FragmentList savedChildren = children;
-        FragmentList savedBeads = beads;
-        FragmentList savedModel = model;
-        boolean savedHasBeads = context.hasBeads;
-        boolean savedHasModel = context.hasModel;
-        
-        properties = new FragmentList();
-        styles = new FragmentList();
-        events = new FragmentList();
-        children = new FragmentList();
-        beads = new FragmentList();
-        model = new FragmentList();
-        context.hasBeads = false;
-        context.hasModel = false;
-        
-        if (!context.isStateDescriptor && !inContentFactory && !context.parentContext.makingArrayValues)
-            currentList.addObjectTypeMarker(); // complex type
-
-        traverse(instanceNode, context);        
-
-        int numElements = 0;
-
-        currentList = properties;
-        
-        setDocument(instanceNode, false, context);
-        
-        // Sets the id property if the instance
-        // implements IDeferredInstantiationUIComponent.
-        String id = instanceNode.getID();
-        if (id != null)
-        {
-            currentList.add("id");
-            currentList.addSimpleTypeMarker();
-            currentList.add(id);
-        }
-        else
-        {
-            id = instanceNode.getEffectiveID();
-            if (id != null)
-            {
-                currentList.add("_id");
-                currentList.addSimpleTypeMarker();
-                currentList.add(id);
-            }
-        }
-        // bail out now.  Other properties will be added in processMXMLState
-        if (context.isStateDescriptor)
-            return;
-        
-        
-        if (!inContentFactory)
-        	currentList = new FragmentList();
-        else
-        	currentList = savedList;
-        
-    	currentList.add(context.instanceClassName);
-        numElements += setSpecifiers(context, true, false);
-        
-        if (!inContentFactory)
-        {
-        	StringBuilder sb = new StringBuilder();
-        	sb.append("[");
-        	sb.append(currentList.toString());
-        	sb.append("]");
-            currentList = savedList;
-        	currentList.addExplicit(sb.toString());
-        }
-        
-        currentList = savedList;
-        properties = savedProperties;
-        styles = savedStyles;
-        events = savedEvents;
-        children = savedChildren;
-        beads = savedBeads;
-        model = savedModel;
-        context.hasBeads = savedHasBeads;
-        context.hasModel = savedHasModel;
-    }
-
-    @Override
-    void processMXMLFactory(IMXMLFactoryNode factoryNode, Context context)
-    {
-        // Get the Name for the mx.core.ClassFactory class.
-        ICompilerProject project = getProject();
-        ClassDefinition classReference = (ClassDefinition)factoryNode.getClassReference(project);
-        Name factoryClassName = classReference.getMName(project);
-        
-        // Push this class.
-        currentList.add(factoryClassName);
-        
-        // Push the class to be used as the generator,
-        // by traversing the child MXMLClassNode.
-        traverse(factoryNode, context);
-        
-        // Call new ClassFactory(generator), leaving the new instance on the stack.
-        currentList.addExplicit("new " + factoryClassName.toString());
-    }
-    
-    @Override
-    void processMXMLDeferredInstance(IMXMLDeferredInstanceNode deferredInstanceNode, Context context)
-    {
-        // Push the class or function to be used as the generator,
-        // by traversing the child MXMLClassNode or MXMLInstanceNode.
-        traverse(deferredInstanceNode, context);
-    }
-    
-    @Override
-    void processMXMLPropertySpecifier(IMXMLPropertySpecifierNode propertyNode, Context context)
-    {
-        // State-dependent nodes are handled by processMXMLState().
-        if (isStateDependent(propertyNode))
-            return;
-                
-        String propertyName = propertyNode.getName();
-        
-        if (propertyName.equals("mxmlContentFactory") || propertyName.equals("mxmlContent"))
-        {
-        	FragmentList savedList = currentList;
-            currentList = children;
-            inContentFactory = true;
-            
-            traverse(propertyNode, context);
-            
-            inContentFactory = false;
-            currentList = savedList;
-        }
-        else if (propertyName.equals("states"))
-        {
-            context.isStateDescriptor = true;
-            
-        	FragmentList savedList = currentList;
-            currentList = properties;
-            
-            currentList.add(propertyName);
-            
-            traverse(propertyNode, context);
-                            
-            currentList = savedList;
-        }
-        else if (propertyName.equals("model"))
-        {
-            context.hasModel = true;
-            
-        	FragmentList savedList = currentList;
-            currentList = model;
-            
-            traverse(propertyNode, context);
-                            
-            currentList = savedList;
-        }
-        else if (propertyName.equals("beads"))
-        {
-            context.hasBeads = true;
-            
-        	FragmentList savedList = currentList;
-            currentList = beads;
-            boolean savedInContentFactory = inContentFactory;
-            inContentFactory = false;
-            
-            traverse(propertyNode, context);
-            
-            inContentFactory = savedInContentFactory;
-            currentList = savedList;
-        }
-        else
-        {
-        	FragmentList savedList = currentList;
-            currentList = properties;
-
-        	currentList.add(propertyName);
-            
-            traverse(propertyNode, context);
-            
-            currentList = savedList;
-        }
-    }
-    
-    @Override
-    void processMXMLStyleSpecifier(IMXMLStyleSpecifierNode styleNode, Context context)
-    {        
-        // State-dependent nodes are handled by processMXMLState().
-        if (isStateDependent(styleNode))
-            return;
-        
-        // Data bound styles don't need this processing either
-        IMXMLInstanceNode value = styleNode.getInstanceNode();
-        if (isDataBindingNode(value))
-        {
-            return;
-        }
-        
-        // Style specifiers on the class definition node
-        // generate code in the moduleFactory setter.
-        if (styleNode.getParent() instanceof IMXMLClassDefinitionNode)
-        {
-        	FragmentList savedList = currentList;
-        	currentList = styles;
-        	
-            // Push the second argument: the value of the style.
-            // Do this by codegen'ing sole child, which is an IMXMLInstanceNode.
-            traverse(styleNode, context);
-
-            currentList = savedList;
-            
-        }
-        
-        else
-        {
-        	FragmentList savedList = currentList;
-        	currentList = styles;
-
-        	String styleName = styleNode.getName();
-            
-            // Push the first argument: the name of the style.
-            currentList.add(styleName);
-            
-            // Push the second argument: the value of the style.
-            // Do this by codegen'ing sole child, which is an IMXMLInstanceNode.
-            traverse(styleNode, context);
-            
-            currentList = savedList;
-        }
-    }
-    
-    @Override
-    void processMXMLEffectSpecifier(IMXMLEffectSpecifierNode effectNode, Context context)
-    {
-    	MXMLNotImplementedProblem problem = new MXMLNotImplementedProblem(effectNode, "MXML Effect");
-        getProblems().add(problem);
-    }
-    
-    @Override
-    void processMXMLEventSpecifier(IMXMLEventSpecifierNode eventNode, Context context)
-    {  
-        // Event nodes (including state-dependent ones)
-        // generate a new event handler method.
-        // Create a MethodInfo and a method trait for the handler.
-        Name name = getEventHandlerName(eventNode);
-        MethodInfo methodInfo = createEventHandlerMethodInfo(
-            getProject(), eventNode, name.getBaseName());
-        ITraitVisitor traitVisitor =
-            itraits.visitMethodTrait(TRAIT_Method, name, 0, methodInfo);
-        
-        // Use ABCGenerator to codegen the handler body from the
-        // ActionScript nodes that are the children of the event node.
-        classScope.getGenerator().generateMethodBodyForFunction(
-            methodInfo, eventNode, classScope, null);
-
-        // Otherwise, state-dependent nodes are handled by processMXMLState().
-        if (isStateDependent(eventNode))
-            return;
-        
-        String eventName = eventNode.getName();
-        Name eventHandler = getEventHandlerName(eventNode);
-
-    	FragmentList savedList = currentList;
-    	currentList = events;
-    	
-        currentList.add(eventName);
-        
-        currentList.addExplicit("this." + eventHandler.getBaseName());
-
-        currentList = savedList;
-    }
-    
-    @Override
-    void processMXMLResource(IMXMLResourceNode node, Context context)
-    {
-    	MXMLNotImplementedProblem problem = new MXMLNotImplementedProblem(node, "MXML Resources");
-        getProblems().add(problem);
-    }
-    
-    @Override
-    void processMXMLState(IMXMLStateNode stateNode, Context context)
-    {
-        int numElements = 1;
-        
-        context.isStateDescriptor = true;
-        
-        // First process the State node as an instance node,
-        // so that properties (name, stateGroups, basedOn) get set
-        // and event handlers (enterState, etc.) get set.
-        processMXMLInstance(stateNode, context);
-        
-        // Init the name property of the state (it's not a normal property specifier nodes
-        // TODO: should we make this a property node?
-        String name = stateNode.getStateName();
-        if (name != null)
-        {
-            currentList.add("name");
-            currentList.addSimpleTypeMarker();
-            currentList.add(name);
-        }
-        
-        // In MXML 2009 and later, a state's 'overrides' property is implicitly
-        // determined by the nodes that are dependent on this state.
-        // We use these nodes to autogenerate runtime IOverride objects
-        // and set them as the value of the 'overrides' property.
-        IMXMLClassDefinitionNode classDefinitionNode = stateNode.getClassDefinitionNode();
-        List<IMXMLNode> nodes = classDefinitionNode.getNodesDependentOnState(stateNode.getStateName());
-        if (nodes != null)
-        {
-            currentList.add("overrides");
-            currentList.addArrayTypeMarker();  // complex array
-           
-            // First step: process all instance overrides before any other overrides.
-            //  why: because a) ensure instances exists before trying to apply property overrides
-            //               b) because the old compiler did
-            // Do it in reverse order
-            //              a) because the way old compiler generated destination and relativeTo
-            //              properties relies on doing it backwards.
-            //
-            // Each one will generate code to push an IOverride instance.
-            for (int i=nodes.size()-1; i>=0; --i)
-            {
-                IMXMLNode node = nodes.get(i);
-                if (node.getNodeID() == ASTNodeID.MXMLInstanceID)
-                {
-                    processInstanceOverride((IMXMLInstanceNode)node, context);
-                }
-            }
-            // Next process the non-instance overrides dependent on this state.
-            // Each one will generate code to push an IOverride instance.
-            for (IMXMLNode node : nodes)
-            {
-                switch (node.getNodeID())
-                {
-                    case MXMLPropertySpecifierID:
-                    {
-                        processPropertyOverride((IMXMLPropertySpecifierNode)node, context);
-                        break;
-                    }
-                    case MXMLStyleSpecifierID:
-                    {
-                        processStyleOverride((IMXMLStyleSpecifierNode)node, context);
-                        break;
-                    }
-                    case MXMLEventSpecifierID:
-                    {
-                        processEventOverride((IMXMLEventSpecifierNode)node, context);
-                        break;
-                    }
-                }
-            }
-            
-            numElements += setSpecifiers(context, true, false);
-        }
-    }
-    
-    @Override
-    void processPropertyOrStyleOverride(Name overrideName, IMXMLPropertySpecifierNode propertyOrStyleNode, Context context)
-    {
-        IASNode parentNode = propertyOrStyleNode.getParent();
-        String id = parentNode instanceof IMXMLInstanceNode ?
-                    ((IMXMLInstanceNode)parentNode).getEffectiveID() :
-                    "";
-        
-        String name = propertyOrStyleNode.getName();        
-        
-        IMXMLInstanceNode propertyOrStyleValueNode = propertyOrStyleNode.getInstanceNode();
-        
-        // Construct the SetProperty or SetStyle object.
-        currentList.add(overrideName);
-        
-        currentList.add(3);
-        // Set its 'target' property to the id of the object
-        // whose property or style this override will set.
-        currentList.add("target");
-        currentList.addSimpleTypeMarker();
-        currentList.add(id);
-
-        // Set its 'name' property to the name of the property or style.
-        currentList.add("name");
-        currentList.addSimpleTypeMarker();
-        currentList.add(name);
-
-        // Set its 'value' property to the value of the property or style.
-        currentList.add("value");
-        processNode(propertyOrStyleValueNode, context); // push value
-
-        currentList.add(0); // styles
-        currentList.add(0); // effects
-        currentList.add(0); // events
-        currentList.addNull(); // children
-    }
-    
-    /**
-     * Generates instructions in the current context
-     * to create an instance of mx.states.SetEventHandler
-     * with its <code>target</code>, <code>name</code>,
-     * and <code>handlerFunction</code> properties set.
-     */
-    void processEventOverride(IMXMLEventSpecifierNode eventNode, Context context)
-    {
-        FlexProject project = getProject();
-        Name eventOverride = project.getEventOverrideClassName();
-        
-        IASNode parentNode = eventNode.getParent();
-        String id = parentNode instanceof IMXMLInstanceNode ?
-                    ((IMXMLInstanceNode)parentNode).getEffectiveID() :
-                    "";
-        
-        String name = eventNode.getName();
-        
-        Name eventHandler = getEventHandlerName(eventNode);
-
-        // Construct the SetEventHandler object.
-        currentList.add(eventOverride);
-        currentList.add(3);
-        
-        // Set its 'target' property to the id of the object
-        // whose event this override will set.
-        currentList.add(NAME_TARGET);
-        currentList.addSimpleTypeMarker();
-        currentList.add(id);
-
-        // Set its 'name' property to the name of the event.
-        currentList.add(NAME_NAME);
-        currentList.addSimpleTypeMarker();
-        currentList.add(name);
-
-        // Set its 'handlerFunction' property to the autogenerated event handler.
-        currentList.add(NAME_HANDLER_FUNCTION);
-        currentList.addSimpleTypeMarker();
-        currentList.add(eventHandler);
-    }
-    
-    /**
-     * Generates instructions in the current context
-     * to create an instance of mx.states.AddItems...
-     * 
-     * Assumes lookup table is still in local3
-     */
-
-    void processInstanceOverride(IMXMLInstanceNode instanceNode, Context context)
-    {
-        FlexProject project = getProject();
-        Name instanceOverrideName = project.getInstanceOverrideClassName();
-        
-        currentList.add(instanceOverrideName);
-
-        // Now set properties on it!
-        
-        //----------------------------------------------------------------------
-        // First property: set itemsFactory to the deferredInstanceFunction we created earlier
-        Integer index = nodeToIndexMap.get(instanceNode);
-        assert index != null;
-
-        FragmentList addItemsList = new FragmentList();
-        addItemsList.add("itemsDescriptor");
-        addItemsList.addSimpleTypeMarker();  // the value is an array of descriptor data that will be parsed later
-        FragmentList savedList = currentList;
-        currentList = new FragmentList();
-        InstructionList il = nodeToInstanceDescriptorMap.get(instanceNode);
-        addItemsList.addExplicit("[" + currentList.toString() + "]");
-        currentList = savedList;
-
-        //-----------------------------------------------------------------------------
-        // Second property set: maybe set destination and propertyName
-        
-        // get the property specifier node for the property the instanceNode represents
-        IMXMLPropertySpecifierNode propertySpecifier = (IMXMLPropertySpecifierNode) 
-            instanceNode.getAncestorOfType( IMXMLPropertySpecifierNode.class);
-    
-        if (propertySpecifier == null)
-        {
-           assert false;        // I think this indicates an invalid tree...
-        }
-        else
-        {
-            // Check the parent - if it's an instance then we want to use these
-            // nodes to get our property values from. If not, then it's the root
-            // and we don't need to specify destination
-            
-            IASNode parent = propertySpecifier.getParent();
-            if (parent instanceof IMXMLInstanceNode)
-            {
-               IMXMLInstanceNode parentInstance = (IMXMLInstanceNode)parent;
-               String parentId = parentInstance.getEffectiveID();
-               assert parentId != null;
-               String propName = propertySpecifier.getName();
-               
-               
-               addItemsList.add("destination");
-               addItemsList.addSimpleTypeMarker(); // simple type
-               addItemsList.add(parentId); 
-               addItemsList.add("propertyName");
-               addItemsList.addSimpleTypeMarker(); // simple type
-               addItemsList.add(propName); 
-            }
-        }  
-        
-        //---------------------------------------------------------------
-        // Third property set: position and relativeTo
-        String positionPropertyValue = null;
-        String relativeToPropertyValue = null;
-       
-        // look to see if we have any sibling nodes that are not state dependent
-        // that come BEFORE us
-        IASNode instanceParent = instanceNode.getParent();
-        IASNode prevStatelessSibling=null;
-        for (int i=0; i< instanceParent.getChildCount(); ++i)
-        {
-            IASNode sib = instanceParent.getChild(i);
-            assert sib instanceof IMXMLInstanceNode;    // surely our siblings are also instances?
-           
-            // stop looking for previous nodes when we find ourself
-            if (sib == instanceNode)
-                break;
-
-            if (!isStateDependent(sib))
-            {
-                prevStatelessSibling = sib;
-            }
-        }
-        
-        if (prevStatelessSibling == null) {
-            positionPropertyValue = "first";        // TODO: these should be named constants
-        }
-        else {
-            positionPropertyValue = "after";
-            relativeToPropertyValue = ((IMXMLInstanceNode)prevStatelessSibling).getEffectiveID();
-        }
-       
-        addItemsList.add("position");
-        addItemsList.addSimpleTypeMarker(); // simple type
-        addItemsList.add(positionPropertyValue); 
-        
-        // relativeTo
-        if (relativeToPropertyValue != null)
-        {
-        	addItemsList.add("relativeTo");
-            addItemsList.addSimpleTypeMarker(); // simple type
-        	addItemsList.add(relativeToPropertyValue); 
-        }
-        
-        currentList.add(addItemsList.size() / 3);
-        currentList.addAll(addItemsList);
-        currentList.add(0); // styles
-        currentList.add(0); // effects
-        currentList.add(0); // events
-        currentList.addNull(); // children
-    }
-    
-    void processMXMLComponent(IMXMLComponentNode node, Context context)
-    {
-        // Resolve the outer document, and if it doesn't resolve to the contingent
-        // definition, that means there is already an existing definition declared
-        // which is an error.
-        ClassDefinition componentClass = (ClassDefinition)node.getContainedClassDefinition();
-        ASScope classScope = componentClass.getContainedScope();
-        IDefinition outerDocument = classScope.getPropertyFromDef(
-            getProject(), componentClass, IMXMLLanguageConstants.PROPERTY_OUTER_DOCUMENT, false);
-        assert (outerDocument != null) : "outerDocument should never be null, as always added";
-        if (!outerDocument.isContingent())
-        {
-            ICompilerProblem problem = new MXMLOuterDocumentAlreadyDeclaredProblem(outerDocument);
-             getProblems().add(problem);
-        }
-
-        // Process the MXMLComponentNode as an MXMLFactoryNode, which it extends.
-        // This leaves a ClassFactory on the stack.
-        processMXMLFactory(node, context);
-        
-        // factory.properties = { outerDocument: this }
-        currentList.add(IMXMLTypeConstants.NAME_PROPERTIES);
-        currentList.addSimpleTypeMarker();
-        currentList.addExplicit("{" + IMXMLLanguageConstants.PROPERTY_OUTER_DOCUMENT + ": this}");
-    }
-    
-    void processMXMLEmbed(IMXMLEmbedNode node, Context context)
-    {
-    	MXMLNotImplementedProblem problem = new MXMLNotImplementedProblem(node, "MXML Embedding");
-        getProblems().add(problem);
-    }
-
-    void processMXMLXML(IMXMLXMLNode node, Context context)
-    {
-    	MXMLNotImplementedProblem problem = new MXMLNotImplementedProblem(node, "MXML XML");
-        getProblems().add(problem);
-    }
-    
-    void processMXMLXMLList(IMXMLXMLListNode node, Context context)
-    {
-    	MXMLNotImplementedProblem problem = new MXMLNotImplementedProblem(node, "MXML XMLList");
-        getProblems().add(problem);
-    }
-
-    /**
-     * Copied from JSClassDirectiveProcessor
-     * Declare a function. TODO: static vs. instance.
-     */
-    @Override
-    void declareFunction(FunctionNode func)
-    {
-        func.parseFunctionBody(classScope.getProblems());
-
-        boolean is_constructor = func.isConstructor();
-
-        functionSemanticChecks(func);
-
-        //  Save the constructor function until
-        //  we've seen all the instance variables
-        //  that might need initialization.
-        if (is_constructor)
-        {
-            this.ctorFunction = func;
-        }
-        else
-        {
-            MethodInfo mi = classScope.getGenerator().generateFunction(func, classScope, null);
-            ITraitVisitor tv;
-
-            if (mi != null)
-            {
-                FunctionDefinition funcDef = func.getDefinition();
-                Name funcName = funcDef.getMName(classScope.getProject());
-
-                if (func.hasModifier(ASModifier.STATIC))
-                    tv = ctraits.visitMethodTrait(functionTraitKind(func, TRAIT_Method), funcName, 0, mi);
-                else
-                {
-                    tv = itraits.visitMethodTrait(functionTraitKind(func, TRAIT_Method), funcName, 0, mi);
-                    if (funcDef.getNamespaceReference() instanceof NamespaceDefinition.IProtectedNamespaceDefinition)
-                        this.iinfo.flags |= ABCConstants.CLASS_FLAG_protected;
-                }
-
-                this.classScope.processMetadata(tv, funcDef.getAllMetaTags());
-
-                if (func.hasModifier(ASModifier.FINAL))
-                    tv.visitAttribute(Trait.TRAIT_FINAL, Boolean.TRUE);
-                if (func.hasModifier(ASModifier.OVERRIDE))
-                    tv.visitAttribute(Trait.TRAIT_OVERRIDE, Boolean.TRUE);
-            }
-        }
-    }
-
-    /**
-     * Copied from JSClassDirectiveProcessor
-     * Declare a variable. TODO: static vs. instance.
-     */
-    @Override
-    void declareVariable(VariableNode var)
-    {
-        verifyVariableModifiers(var);
-
-        DefinitionBase varDef = var.getDefinition();
-        JSGenerator jsGenerator = (JSGenerator)classScope.getGenerator();
-        jsGenerator.getReducer().startDeclareVariable(varDef);
-
-        boolean is_static = var.hasModifier(ASModifier.STATIC);
-        boolean is_const = SemanticUtils.isConst(var, classScope.getProject());
-        // simple initializers for public/protected vars go right on prototype.
-        // the rest (all private vars), all "complex" initializers (like array) get
-        // initialized in the constructor
-        boolean needs_constructor_init = true;
-        
-        //  generateConstantValue() returns null if no constant value
-        //  can be generated, and null is the correct value for "no value."
-        IConstantValue constantValue =  jsGenerator.generateConstantValue(var.getAssignedValueNode(), this.classScope.getProject());
-
-        //  initializer is null if no constant value
-        //  can be generated, and null is the correct value for "no value."
-        Object initializer = constantValue != null ? constantValue.getValue() : null;
-
-        ITraitVisitor tv = declareVariable(var, varDef, is_static, is_const, initializer);
-
-        this.classScope.processMetadata(tv, varDef.getAllMetaTags());
-
-        //  Generate variable initializers and append them to the 
-        //  proper initialization list.
-        if (var.getChildCount() > 1)
-        {
-            //  We need to put the correct traits visitor on the class'
-            //  LexicalScope; the BURM may encounter variable declarations
-            //  chained onto this one, and it will need the traits visitor to declare them.
-
-            //  Save the scope's current traits visitor (which should be null)
-            //  and restore it 
-            ITraitsVisitor saved_traits_visitor = this.classScope.traitsVisitor;
-            assert (saved_traits_visitor == null);
-            try
-            {
-                // the following line causes duplicate Traits.
-                // JSEmitter::emitTraits works around duplicate Traits by checking against
-                // a visitedTraits set.
-                this.classScope.traitsVisitor = (is_static) ? ctraits : itraits;
-                this.classScope.resetDebugInfo();
-                InstructionList init_expression = jsGenerator.generateInstructions(var, CmcJSEmitter.__statement_NT, this.classScope);
-                if (init_expression != null && !init_expression.isEmpty())
-                {
-                    // final JSEmitter emitter = (JSEmitter)this.classScope.getEmitter();
-                    final String str = JSGeneratingReducer.instructionListToString(init_expression, true);
-
-                    if (str.contains(" = "))
-                    {
-                        final String varInit = jsGenerator.getReducer().getVariableInitializer(varDef);
-                        if (varInit != null && !varInit.isEmpty())
-                        {
-                            // set the value of the slot trait.
-                            final String varName = varDef.getBaseName();
-                            for (Trait t : this.classScope.traitsVisitor.getTraits())
-                            {
-                                final byte kind = t.getKind();
-                                if (kind == TRAIT_Const || kind == TRAIT_Var)
-                                {
-                                	boolean is_private = false;
-                                    final Name name = t.getNameAttr(Trait.TRAIT_NAME);
-                                    Namespace ns = name.getSingleQualifier();
-                                    if (ns.getKind() == CONSTANT_PrivateNs)
-                                    	is_private = true;
-                                    if (name.getBaseName().equals(varName))
-                                    {
-                                        t.setAttr(Trait.SLOT_VALUE, varInit);
-                                        if (!is_private)
-                                        	needs_constructor_init = false;
-                                        break;
-                                    }
-                                }
-                            }
-
-                        }
-
-                        if (is_static)
-                        {
-                            // see finishClassDefinition.
-                            // We clear cinitInsns only if there are no side effects
-                            // by initializing the static members directly.
-                            // If varInit is null, or varInit is isEmpty() 
-                            // then we have side effects. 
-                            if (!init_expression.isEmpty())
-                                registerClassInit(var);
-
-                            cinitInsns.addAll(init_expression);
-                        }
-                        else if (needs_constructor_init)
-                            iinitInsns.addAll(init_expression);
-                    }
-                }
-            }
-            finally
-            {
-                this.classScope.traitsVisitor = saved_traits_visitor;
-            }
-        }
-
-        jsGenerator.getReducer().endDeclareVariable(varDef);
-    }
-    
-    private void registerClassInit(IASNode node)
-    {
-        final String fullName = JSGeneratingReducer.createFullNameFromDefinition(classScope.getProject(), classDefinition);
-        if (!fullName.equals(JSSharedData.JS_FRAMEWORK_NAME))
-        {
-            JSGenerator jsGenerator = (JSGenerator)classScope.getGenerator();
-            JSSharedData.instance.registerClassInit(fullName);
-            jsGenerator.getReducer().warnClassInitPerformance(node);
-            jsGenerator.getReducer().setNeedsSecondPass();
-        }
-    }
-
-    /**
-     * Determines the Name of the event handler method for an event node.
-     * This can get called to preassign the name before the method gets generated.
-     */
-    protected Name getEventHandlerName(IMXMLEventSpecifierNode eventNode)
-    {
-        // Check the map to see if a handler name
-        // has already been assigned to this event node.
-        Name name = eventHandlerMap.get(eventNode);
-        
-        // If so, return it.
-        if (name != null)
-            return name;
-        
-        // Otherwise, generate the next one in the sequence "$EH0", "$EH1", etc.
-        String baseName = EVENT_HANDLER_NAME_BASE + eventHandlerCounter++;
-        
-        name = new Name(baseName);
-        
-        // Remember it in the map.
-        eventHandlerMap.put(eventNode, name);
-        
-        return name;
-    }
-
-    static class FragmentList
-    {
-    	ArrayList<String> list = new ArrayList<String>();
-    	
-    	void add(boolean value)
-    	{
-    		if (value)	
-    			list.add("true");
-    		else
-    			list.add("false");
-    	}
-
-    	void add(int value)
-    	{
-    		list.add(new Integer(value).toString());
-    	}
-    	
-    	void add(long value)
-    	{
-    		list.add(new Long(value).toString());
-    	}
-    	
-    	void add(double value)
-    	{
-    		list.add(new Double(value).toString());
-    	}
-
-    	void add(Name name)
-    	{
-    		StringBuilder sb = new StringBuilder();
-    		String s = name.getSingleQualifier().getName();
-    		if (s.length() > 0)
-    		{
-        		sb.append(s);
-        		sb.append(".");    			
-    		}
-    		sb.append(name.getBaseName());
-    		list.add(sb.toString());
-    	}
-    	
-    	void add(String string)
-    	{
-    		list.add("'" + string + "'");
-    	}
-    	
-    	void addExplicit(String string)
-    	{
-    		list.add(string);
-    	}
-
-    	void addAll(FragmentList addlist)
-    	{
-    		list.addAll(addlist.list);
-    	}
-    	
-    	void addSimpleTypeMarker()
-    	{
-    		list.add("true");
-    	}
-    	
-    	void addObjectTypeMarker()
-    	{
-    		list.add("false");
-    	}
-    	
-    	void addArrayTypeMarker()
-    	{
-    		list.add("null");
-    	}
-    	
-    	void addNull()
-    	{
-    		list.add("null");
-    	}
-    	
-    	int size()
-    	{
-    		return list.size();
-    	}
-    	
-    	String get(int i)
-    	{
-    		return list.get(i);
-    	}
-
-    	public String toString()
-    	{
-    		StringBuilder sb = new StringBuilder();
-    		int n = list.size();
-    		for (int i = 0; i < n; i++)
-    		{
-    			sb.append(list.get(i));
-    			if (i < n - 1)
-    				sb.append(", ");
-    		}
-    		return sb.toString();
-    	}
-    	
-    }
-}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/c3dce49f/compiler.js/src/org/apache/flex/compiler/internal/as/codegen/JSMXMLEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.js/src/org/apache/flex/compiler/internal/as/codegen/JSMXMLEmitter.java b/compiler.js/src/org/apache/flex/compiler/internal/as/codegen/JSMXMLEmitter.java
deleted file mode 100644
index 54e4cc8..0000000
--- a/compiler.js/src/org/apache/flex/compiler/internal/as/codegen/JSMXMLEmitter.java
+++ /dev/null
@@ -1,157 +0,0 @@
-package org.apache.flex.compiler.internal.as.codegen;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-
-import org.apache.flex.abc.semantics.InstanceInfo;
-import org.apache.flex.abc.semantics.MethodInfo;
-import org.apache.flex.abc.semantics.Name;
-import org.apache.flex.compiler.definitions.IClassDefinition;
-import org.apache.flex.compiler.definitions.IDefinition;
-import org.apache.flex.compiler.definitions.IPackageDefinition;
-import org.apache.flex.compiler.internal.as.codegen.JSEmitter.EmitterClassVisitor;
-import org.apache.flex.compiler.internal.definitions.ClassDefinition;
-import org.apache.flex.compiler.internal.projects.FlexJSProject;
-import org.apache.flex.compiler.internal.scopes.ASProjectScope;
-import org.apache.flex.compiler.projects.ICompilerProject;
-import org.apache.flex.compiler.scopes.IASScope;
-import org.apache.flex.compiler.units.ICompilationUnit;
-import org.apache.flex.compiler.units.ICompilationUnit.Operation;
-
-class JSMXMLEmitter extends JSEmitter
-{
-
-	public JSMXMLEmitter(JSSharedData sharedData, Operation buildPhase,
-			ICompilerProject project, JSGenerator generator) {
-		super(sharedData, buildPhase, project, generator);
-		// TODO Auto-generated constructor stub
-	}
-	
-	private JSMXMLClassDirectiveProcessor cdp;
-    private String NEWLINE = "\n";
-	
-	public void register(JSMXMLClassDirectiveProcessor cdp)
-	{
-		this.cdp = cdp;
-	}
-	
-	@Override
-	public byte[] emit()
-	{
-		try {
-			generateClass();
-		} catch (Exception e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
-		return w.toByteArray();
-	}
-	
-	private void generateClass() throws Exception
-	{
-		ClassDefinition definition = cdp.classDefinition;
-        IClassDefinition superClass = (ClassDefinition)definition.resolveBaseClass(cdp.getProject());
-        String classQName = definition.getQualifiedName();
-		writeString("goog.provide('" + classQName + "');" + NEWLINE);
-        writeString(NEWLINE);
-        /*
-		String[] list = definition.getImplicitImports();
-		ArrayList<String> imps = new ArrayList<String>(Arrays.asList(list));
-		imps.add(superClass.getQualifiedName());
-		Collections.sort(imps);
-        for (String imp : imps)
-        {
-            if (imp.indexOf("__AS3__") != -1)
-                continue;
-            writeString("goog.require('" + imp + "');");
-            writeString(NEWLINE);
-        }
-        writeString(NEWLINE);
-        */
-        FlexJSProject project = (FlexJSProject)m_project;
-        ASProjectScope projectScope = (ASProjectScope) m_project.getScope();
-        ICompilationUnit cu = projectScope.getCompilationUnitForDefinition(definition);
-        ArrayList<String> deps = project.getRequires(cu);
-        emitRequires(deps, classQName);
-
-        writeString("/**" + NEWLINE);
-        writeString(" * @constructor" + NEWLINE);
-        if (superClass != null)
-        	writeString(" * @extends {" + superClass.getQualifiedName() + "}" + NEWLINE);
-        writeString(" */" + NEWLINE);
-        writeString(definition.getQualifiedName() + " = function() {" + NEWLINE);
-        if (superClass != null)
-        	writeString("    " + superClass.getQualifiedName() + ".call(this);" + NEWLINE);
-        
-        for (int i = 0; i < cdp.variableTraits.size(); i += 2)
-        {
-            writeString(NEWLINE);
-        	Name name = cdp.variableTraits.get(i);
-        	Name type = cdp.variableTraits.get(i + 1);
-        	writeString("    /**" + NEWLINE);
-        	writeString("     * @private" + NEWLINE);
-        	writeString("     * @type {");
-        		String ns = type.getSingleQualifier().getName();
-        		if (ns.length() > 0)
-        		{
-        			writeString(ns);
-        			writeString(".");
-        		}
-        		writeString(type.getBaseName());
-        		writeString("}" + NEWLINE);
-        	writeString("     */" + NEWLINE);
-        	writeString("    this." + name.getBaseName() + ";");
-        	writeString(NEWLINE);
-        }
-        writeString("};" + NEWLINE);
-        
-        if (superClass != null)
-        {
-            writeString("goog.inherits(" + definition.getQualifiedName() + ", "
-                    + superClass.getQualifiedName() + ");" + NEWLINE);
-            writeString(NEWLINE);
-        }
-        
-        // write out instance traits for script block
-        for (EmitterClassVisitor clz : this.definedClasses)
-        {
-            InstanceInfo ii = clz.instanceInfo;
-
-            // Skipping classes that are "marked" as IExtern.
-            final Boolean isExtern = isExtern(ii);
-            if (isExtern)
-                return;
-
-            final Boolean isInterface = ii.isInterface();
-            final Boolean isPackageFunction = ii.name == null;
-
-            String packageName;
-            String className;
-            if (ii.name != null)
-            {
-                final IDefinition def = getDefinition(ii.name);
-                packageName = def.getPackageName();
-                className = JSGeneratingReducer.getBasenameFromName(ii.name);
-            }
-            else
-            {
-                packageName = m_packageName;
-                className = "";
-            }
-            // register class with super class
-            final IDefinition superClassDef = getDefinition(ii.superName);
-            final String superClassName = superClassDef == null ? "Object" : superClassDef.getQualifiedName();
-        	emitTraits(clz.instanceTraits, true, isExtern, isInterface, isPackageFunction, (MethodInfo)null, packageName, className, superClassName, "this.", "", ",", "\t");
-        }
-        writeString(NEWLINE);
-        writeString(NEWLINE);
-        
-		for (String s : cdp.fragments)
-		{
-			writeString(s);
-            writeString(NEWLINE);
-            writeString(NEWLINE);
-		}
-	}
-}
\ No newline at end of file