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:56:28 UTC

[36/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-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/MXMLBlockWalker.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/MXMLBlockWalker.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/MXMLBlockWalker.java
new file mode 100644
index 0000000..83ec265
--- /dev/null
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/MXMLBlockWalker.java
@@ -0,0 +1,436 @@
+/*
+ *
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+package org.apache.flex.compiler.internal.codegen.mxml;
+
+import java.util.List;
+
+import org.apache.flex.compiler.codegen.as.IASEmitter;
+import org.apache.flex.compiler.codegen.mxml.IMXMLEmitter;
+import org.apache.flex.compiler.problems.ICompilerProblem;
+import org.apache.flex.compiler.projects.IASProject;
+import org.apache.flex.compiler.tree.as.IASNode;
+import org.apache.flex.compiler.tree.as.IFileNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLArrayNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLBindingNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLBooleanNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLClassDefinitionNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLComponentNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLDataBindingNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLDeclarationsNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLDeferredInstanceNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLDocumentNode;
+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.IMXMLFileNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLImplementsNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLInstanceNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLIntNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLLiteralNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLMetadataNode;
+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.IMXMLScriptNode;
+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.units.ICompilationUnit;
+import org.apache.flex.compiler.visitor.IASNodeStrategy;
+import org.apache.flex.compiler.visitor.IBlockWalker;
+import org.apache.flex.compiler.visitor.mxml.IMXMLBlockVisitor;
+import org.apache.flex.compiler.visitor.mxml.IMXMLBlockWalker;
+
+/**
+ * @author Michael Schmalle
+ * @author Erik de Bruin
+ */
+public class MXMLBlockWalker implements IMXMLBlockVisitor, IMXMLBlockWalker
+{
+
+    //----------------------------------
+    // emitter
+    //----------------------------------
+
+    private IASEmitter asEmitter;
+
+    @Override
+    public IASEmitter getASEmitter()
+    {
+        return asEmitter;
+    }
+
+    private IMXMLEmitter mxmlEmitter;
+
+    @Override
+    public IMXMLEmitter getMXMLEmitter()
+    {
+        return mxmlEmitter;
+    }
+
+    //----------------------------------
+    // errors
+    //----------------------------------
+
+    protected List<ICompilerProblem> errors;
+
+    List<ICompilerProblem> getErrors()
+    {
+        return errors;
+    }
+
+    //----------------------------------
+    // project
+    //----------------------------------
+
+    protected IASProject project;
+
+    public IASProject getProject()
+    {
+        return project;
+    }
+
+    //----------------------------------
+    // strategy
+    //----------------------------------
+
+    private IASNodeStrategy mxmlStrategy;
+
+    public IASNodeStrategy getMXMLStrategy()
+    {
+        return mxmlStrategy;
+    }
+
+    public void setMXMLStrategy(IASNodeStrategy value)
+    {
+        mxmlStrategy = value;
+    }
+
+    private IASNodeStrategy asStrategy;
+
+    public IASNodeStrategy getASStrategy()
+    {
+        return asStrategy;
+    }
+
+    public void setASStrategy(IASNodeStrategy value)
+    {
+        asStrategy = value;
+    }
+
+    //----------------------------------
+    // walk
+    //----------------------------------
+
+    @Override
+    public void walk(IASNode node)
+    {
+        if (node instanceof IMXMLNode)
+            mxmlStrategy.handle(node);
+        else
+            asStrategy.handle(node);
+    }
+
+    @Override
+    public void visitCompilationUnit(ICompilationUnit unit)
+    {
+        debug("visitMXMLCompilationUnit()");
+        IFileNode node = null;
+        try
+        {
+            node = (IFileNode) unit.getSyntaxTreeRequest().get().getAST();
+        }
+        catch (InterruptedException e)
+        {
+            throw new RuntimeException(e);
+        }
+
+        walk(node);
+    }
+
+    public MXMLBlockWalker(List<ICompilerProblem> errors, IASProject project,
+            IMXMLEmitter mxmlEmitter, IASEmitter asEmitter,
+            IBlockWalker asBlockWalker)
+    {
+        this.asEmitter = asEmitter;
+        this.mxmlEmitter = mxmlEmitter;
+        this.project = project;
+        this.errors = errors;
+
+        asEmitter.setWalker(asBlockWalker);
+
+        mxmlEmitter.setMXMLWalker((IBlockWalker) this);
+    }
+
+    @Override
+    public void visitFile(IMXMLFileNode node)
+    {
+        debug("visitFile()");
+
+        walk(node.getDocumentNode());
+    }
+
+    @Override
+    public void visitDeclarations(IMXMLDeclarationsNode node)
+    {
+        debug("visitDeclarations()");
+
+        mxmlEmitter.emitDeclarations(node);
+    }
+
+    @Override
+    public void visitDocument(IMXMLDocumentNode node)
+    {
+        debug("visitDocument()");
+
+        IMXMLFileNode fnode = (IMXMLFileNode) node.getParent();
+        
+        mxmlEmitter.emitDocumentHeader(fnode);
+        visitClassDefinition(node);
+        mxmlEmitter.emitDocumentFooter(fnode);
+    }
+
+    @Override
+    public void visitClassDefinition(IMXMLClassDefinitionNode node)
+    {
+        debug("visitClassDefinition()");
+
+        mxmlEmitter.emitClass(node);
+    }
+
+    //--------------------------------------------------------------------------
+
+    @Override
+    public void visitDeferredInstance(IMXMLDeferredInstanceNode node)
+    {
+        debug("visitdeferredInstance()");
+
+        walk(node.getChild(0));
+    }
+
+    //--------------------------------------------------------------------------
+
+    @Override
+    public void visitEventSpecifier(IMXMLEventSpecifierNode node)
+    {
+        debug("visitEventSpecifier()");
+
+        mxmlEmitter.emitEventSpecifier(node);
+    }
+
+    @Override
+    public void visitInstance(IMXMLInstanceNode node)
+    {
+        debug("visitInstance()");
+
+        mxmlEmitter.emitInstance(node);
+    }
+
+    @Override
+    public void visitPropertySpecifier(IMXMLPropertySpecifierNode node)
+    {
+        debug("visitPropertySpecifier()");
+
+        mxmlEmitter.emitPropertySpecifier(node);
+    }
+
+    @Override
+    public void visitScript(IMXMLScriptNode node)
+    {
+        debug("visitScript()");
+
+        mxmlEmitter.emitScript(node);
+    }
+
+    @Override
+    public void visitStyleBlock(IMXMLStyleNode node)
+    {
+    	// don't do anything.  subclasses should.
+    }
+    
+    @Override
+    public void visitStyleSpecifier(IMXMLStyleSpecifierNode node)
+    {
+        debug("visitStyleSpecifier()");
+
+        mxmlEmitter.emitStyleSpecifier(node);
+    }
+
+    //--------------------------------------------------------------------------
+
+    @Override
+    public void visitArray(IMXMLArrayNode node)
+    {
+        debug("visitArray()");
+
+        mxmlEmitter.emitArray(node);
+    }
+
+    @Override
+    public void visitBoolean(IMXMLBooleanNode node)
+    {
+        debug("visitBoolean()");
+
+        mxmlEmitter.emitBoolean(node);
+    }
+
+    @Override
+    public void visitInt(IMXMLIntNode node)
+    {
+        debug("visitInt()");
+
+        mxmlEmitter.emitInt(node);
+    }
+
+    @Override
+    public void visitNumber(IMXMLNumberNode node)
+    {
+        debug("visitNumber()");
+
+        mxmlEmitter.emitNumber(node);
+    }
+
+    @Override
+    public void visitString(IMXMLStringNode node)
+    {
+        debug("visitString()");
+
+        mxmlEmitter.emitString(node);
+    }
+
+    @Override
+    public void visitUint(IMXMLUintNode node)
+    {
+        debug("visitUint()");
+
+        mxmlEmitter.emitUint(node);
+    }
+
+    //--------------------------------------------------------------------------
+
+    @Override
+    public void visitLiteral(IMXMLLiteralNode node)
+    {
+        debug("visitLiteral()");
+
+        mxmlEmitter.emitLiteral(node);
+    }
+
+    //--------------------------------------------------------------------------
+
+    @Override
+    public void visitFactory(IMXMLFactoryNode node)
+    {
+        debug("visitFactory()");
+
+        mxmlEmitter.emitFactory(node);
+    }
+
+    //--------------------------------------------------------------------------
+
+    @Override
+    public void visitComponent(IMXMLComponentNode node)
+    {
+        debug("visitComponent()");
+
+        mxmlEmitter.emitComponent(node);
+    }
+
+    //--------------------------------------------------------------------------
+    
+    @Override
+    public void visitMetadata(IMXMLMetadataNode node)
+    {
+        debug("visitMetadata()");
+        
+        mxmlEmitter.emitMetadata(node);
+    }
+    
+    //--------------------------------------------------------------------------
+    
+    @Override
+    public void visitEmbed(IMXMLEmbedNode node)
+    {
+        debug("visitEmbed()");
+        
+        mxmlEmitter.emitEmbed(node);
+    }
+    
+    //--------------------------------------------------------------------------
+    
+    @Override
+    public void visitImplements(IMXMLImplementsNode node)
+    {
+        debug("visitImplements()");
+        
+        mxmlEmitter.emitImplements(node);
+    }
+    
+    //--------------------------------------------------------------------------
+    
+    @Override
+    public void visitVector(IMXMLVectorNode node)
+    {
+        debug("visitVector()");
+        
+        mxmlEmitter.emitVector(node);
+    }
+    
+    //--------------------------------------------------------------------------
+    
+    @Override
+    public void visitDatabinding(IMXMLDataBindingNode node)
+    {
+        debug("visitDatabinding()");
+        
+        mxmlEmitter.emitDatabinding(node);
+    }
+    
+    //--------------------------------------------------------------------------
+    
+    @Override
+    public void visitBinding(IMXMLBindingNode node)
+    {
+        debug("visitBinding()");
+        
+        System.out.println("skipping fx:Binding in " + node.getSourcePath() + ". This node should be encoded in the binding data.");
+    }
+    
+    //--------------------------------------------------------------------------
+    
+    @Override
+    public void visitObject(IMXMLObjectNode node)
+    {
+        debug("visitObject()");
+        
+        mxmlEmitter.emitObject(node);
+    }
+    
+    //--------------------------------------------------------------------------
+
+    protected void debug(String message)
+    {
+        //System.out.println(message);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/c3dce49f/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/MXMLEmitter.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/MXMLEmitter.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/MXMLEmitter.java
new file mode 100644
index 0000000..bba7f23
--- /dev/null
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/MXMLEmitter.java
@@ -0,0 +1,425 @@
+/*
+ *
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+package org.apache.flex.compiler.internal.codegen.mxml;
+
+import java.io.FilterWriter;
+
+import org.apache.flex.compiler.codegen.mxml.IMXMLEmitter;
+import org.apache.flex.compiler.definitions.IClassDefinition;
+import org.apache.flex.compiler.internal.codegen.Emitter;
+import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
+import org.apache.flex.compiler.projects.ICompilerProject;
+import org.apache.flex.compiler.tree.as.IASNode;
+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.IMXMLComponentNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLDataBindingNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLDeclarationsNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLDocumentNode;
+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.IMXMLFileNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLImplementsNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLInstanceNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLIntNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLLiteralNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLMetadataNode;
+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.IMXMLScriptNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLStringNode;
+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.visitor.IBlockWalker;
+import org.apache.flex.compiler.visitor.mxml.IMXMLBlockWalker;
+
+/**
+ * The base implementation for an MXML emitter.
+ * 
+ * @author Erik de Bruin
+ */
+public class MXMLEmitter extends Emitter implements IMXMLEmitter
+{
+
+    @Override
+    public String postProcess(String output)
+    {
+        return output;
+    }
+
+    //--------------------------------------------------------------------------
+    //    walkers
+    //--------------------------------------------------------------------------
+
+    protected IMXMLBlockWalker walker;
+
+    @Override
+    public IBlockWalker getMXMLWalker()
+    {
+        return (IBlockWalker) walker;
+    }
+
+    @Override
+    public void setMXMLWalker(IBlockWalker value)
+    {
+        walker = (IMXMLBlockWalker) value;
+    }
+
+    public MXMLEmitter(FilterWriter out)
+    {
+        super(out);
+    }
+
+    //--------------------------------------------------------------------------
+
+    @Override
+    public void emitDeclarations(IMXMLDeclarationsNode node)
+    {
+        // visit tags
+        final int len = node.getChildCount();
+        for (int i = 0; i < len; i++)
+        {
+            getMXMLWalker().walk(node.getChild(i));
+        }    
+    }
+    
+    @Override
+    public void emitDocumentHeader(IMXMLFileNode node)
+    {
+        IMXMLDocumentNode dnode = node.getDocumentNode();
+        
+        IClassDefinition cdef = dnode
+                .getClassReference((ICompilerProject) walker.getProject());
+
+        write("<" + cdef.getBaseName());
+
+        emitPropertySpecifiers(dnode.getPropertySpecifierNodes(), true);
+
+        writeNewline(">", true);
+    }
+
+    @Override
+    public void emitDocumentFooter(IMXMLFileNode node)
+    {
+        IMXMLDocumentNode dnode = node.getDocumentNode();
+        
+        IClassDefinition cdef = dnode
+                .getClassReference((ICompilerProject) walker.getProject());
+
+        writeNewline("", false);
+        write("</" + cdef.getBaseName() + ">");
+    }
+
+    //--------------------------------------------------------------------------
+
+    @Override
+    public void emitClass(IMXMLClassDefinitionNode node)
+    {
+
+        // fx:declarations
+        IMXMLDeclarationsNode[] dnodes = node.getDeclarationsNodes();
+        if (dnodes != null)
+        {
+            for (IMXMLDeclarationsNode dnode : dnodes)
+            {
+                getMXMLWalker().walk(dnode);
+            }
+        }
+
+        // fx:script
+        IMXMLScriptNode[] snodes = node.getScriptNodes();
+        if (snodes != null)
+        {
+            for (IMXMLScriptNode snode : snodes)
+            {
+                getMXMLWalker().walk(snode);
+            }
+        }
+
+        // "regular" tags
+        emitPropertySpecifiers(node.getPropertySpecifierNodes(), false);
+    }
+
+    //--------------------------------------------------------------------------
+
+    @Override
+    public void emitEventSpecifier(IMXMLEventSpecifierNode node)
+    {
+    }
+
+    @Override
+    public void emitInstance(IMXMLInstanceNode node)
+    {
+        IClassDefinition cdef = node
+                .getClassReference((ICompilerProject) getMXMLWalker()
+                        .getProject());
+
+        String cname = cdef.getBaseName();
+
+        write("<");
+        write(cname);
+        if (node.getID() != null && node.getID() != "")
+        {
+            write(ASEmitterTokens.SPACE);
+            write("id");
+            write(ASEmitterTokens.EQUAL);
+            write("\"");
+            write(node.getID());
+            write("\"");
+        }
+
+        IMXMLPropertySpecifierNode[] pnodes = node.getPropertySpecifierNodes();
+
+        // attributes
+        emitPropertySpecifiers(pnodes, true);
+
+        write(">");
+
+        // child nodes
+        emitPropertySpecifiers(pnodes, false);
+
+        write("<");
+        write("/");
+        write(cname);
+        write(">");
+    }
+
+    @Override
+    public void emitPropertySpecifier(IMXMLPropertySpecifierNode node)
+    {
+        if (!isMXMLContentNode(node)) // only for attributes
+        {
+            write(node.getName());
+            write(ASEmitterTokens.EQUAL);
+        }
+
+        getMXMLWalker().walk(node.getInstanceNode());
+    }
+
+    @Override
+    public void emitStyleSpecifier(IMXMLStyleSpecifierNode node)
+    {
+        if (!isMXMLContentNode(node)) // only for attributes
+        {
+            write(node.getName());
+            write(ASEmitterTokens.EQUAL);
+        }
+
+        getMXMLWalker().walk(node.getInstanceNode());
+    }
+
+    @Override
+    public void emitScript(IMXMLScriptNode node)
+    {
+        write("<script><![CDATA[");
+
+        int len = node.getChildCount();
+        if (len > 0)
+        {
+            writeNewline("", true);
+
+            for (int i = 0; i < len; i++)
+            {
+                getMXMLWalker().walk(node.getChild(i));
+
+                if (i == len - 1)
+                    indentPop();
+
+                writeNewline(ASEmitterTokens.SEMICOLON);
+            }
+        }
+
+        write("]]></script>");
+    }
+
+    //--------------------------------------------------------------------------
+
+    @Override
+    public void emitObject(IMXMLObjectNode node)
+    {
+        final int len = node.getChildCount();
+        for (int i = 0; i < len; i++)
+        {
+            IASNode child = node.getChild(i);
+
+            getMXMLWalker().walk(child);
+
+            if (child instanceof IMXMLInstanceNode && i < len - 1)
+                writeNewline();
+        }
+    }
+
+    @Override
+    public void emitArray(IMXMLArrayNode node)
+    {
+        final int len = node.getChildCount();
+        for (int i = 0; i < len; i++)
+        {
+            IASNode child = node.getChild(i);
+
+            getMXMLWalker().walk(child);
+
+            if (child instanceof IMXMLInstanceNode && i < len - 1)
+                writeNewline();
+        }
+    }
+
+    @Override
+    public void emitBoolean(IMXMLBooleanNode node)
+    {
+        emitAttributeValue(node);
+    }
+
+    @Override
+    public void emitInt(IMXMLIntNode node)
+    {
+        emitAttributeValue(node);
+    }
+
+    @Override
+    public void emitNumber(IMXMLNumberNode node)
+    {
+        emitAttributeValue(node);
+    }
+
+    @Override
+    public void emitString(IMXMLStringNode node)
+    {
+        emitAttributeValue(node);
+    }
+
+    @Override
+    public void emitUint(IMXMLUintNode node)
+    {
+        emitAttributeValue(node);
+    }
+
+    //--------------------------------------------------------------------------
+
+    @Override
+    public void emitLiteral(IMXMLLiteralNode node)
+    {
+        write(node.getValue().toString());
+    }
+
+    //--------------------------------------------------------------------------
+    //  Utils
+    //--------------------------------------------------------------------------
+
+    public void emitPropertySpecifiers(IMXMLPropertySpecifierNode[] nodes,
+            boolean emitAttributes)
+    {
+        if (nodes != null)
+        {
+            for (IMXMLPropertySpecifierNode cnode : nodes)
+            {
+                if (!isMXMLContentNode(cnode) && emitAttributes)
+                {
+                    write(ASEmitterTokens.SPACE);
+                    getMXMLWalker().walk(cnode);
+                }
+                else if (isMXMLContentNode(cnode) && !emitAttributes)
+                {
+                    getMXMLWalker().walk(cnode);
+                }
+            }
+        }
+    }
+
+    protected void emitAttributeValue(IASNode node)
+    {
+        IMXMLLiteralNode cnode = (IMXMLLiteralNode) node.getChild(0);
+
+        if (cnode.getValue() != null)
+        {
+            write("\"");
+
+            getMXMLWalker().walk((IASNode) cnode); // Literal
+
+            write("\"");
+        }
+    }
+
+    protected boolean isMXMLContentNode(IMXMLNode node)
+    {
+        return node.getName().equals("mxmlContentFactory")
+                || node.getName().equals("mxmlContent");
+    }
+
+    public void emitFactory(IMXMLFactoryNode node)
+    {
+        IASNode cnode = node.getChild(0);
+
+        write("\"");
+
+        if (cnode instanceof IMXMLClassNode)
+        {
+            write(((IMXMLClassNode)cnode).getValue(getMXMLWalker().getProject()).getQualifiedName());
+        }
+
+        write("\"");
+    }
+
+    public void emitComponent(IMXMLComponentNode node)
+    {
+        IASNode cnode = node.getChild(0);
+
+        write("<fx:Component>");
+
+        if (cnode instanceof IMXMLClassNode)
+        {
+            getMXMLWalker().walk((IASNode) cnode); // Literal
+        }
+
+        write("</fx:Component>");
+    }
+
+    public void emitMetadata(IMXMLMetadataNode node)
+    {
+        // ToDo (erikdebruin): implement metadata output
+    }
+
+    public void emitEmbed(IMXMLEmbedNode node)
+    {
+        // ToDo (erikdebruin): implement embed output
+    }
+    
+    public void emitImplements(IMXMLImplementsNode node)
+    {
+        // ToDo (erikdebruin): implement implements output
+    }
+    
+    public void emitVector(IMXMLVectorNode node)
+    {
+        // ToDo (erikdebruin): implement vector output
+    }
+    
+    public void emitDatabinding(IMXMLDataBindingNode node)
+    {
+    	// ToDo (erikdebruin): implement databinding output
+    }
+    
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/c3dce49f/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/MXMLEmitterTokens.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/MXMLEmitterTokens.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/MXMLEmitterTokens.java
new file mode 100644
index 0000000..3d8a4e9
--- /dev/null
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/MXMLEmitterTokens.java
@@ -0,0 +1,42 @@
+/*
+ *
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+package org.apache.flex.compiler.internal.codegen.mxml;
+
+import org.apache.flex.compiler.codegen.IEmitterTokens;
+
+/**
+ * @author Erik de Bruin
+ */
+public enum MXMLEmitterTokens implements IEmitterTokens
+{
+    TAG_OPEN("<"), TAG_CLOSE(">");
+
+    private String token;
+
+    private MXMLEmitterTokens(String value)
+    {
+        token = value;
+    }
+
+    public String getToken()
+    {
+        return token;
+    }
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/c3dce49f/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/MXMLWriter.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/MXMLWriter.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/MXMLWriter.java
new file mode 100644
index 0000000..afb45fd
--- /dev/null
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/MXMLWriter.java
@@ -0,0 +1,84 @@
+/*
+ *
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+package org.apache.flex.compiler.internal.codegen.mxml;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.List;
+
+import org.apache.flex.compiler.codegen.js.IJSEmitter;
+import org.apache.flex.compiler.codegen.mxml.IMXMLEmitter;
+import org.apache.flex.compiler.driver.js.IJSBackend;
+import org.apache.flex.compiler.internal.codegen.js.JSFilterWriter;
+import org.apache.flex.compiler.internal.codegen.js.JSSharedData;
+import org.apache.flex.compiler.internal.codegen.js.JSWriter;
+import org.apache.flex.compiler.problems.ICompilerProblem;
+import org.apache.flex.compiler.projects.IASProject;
+import org.apache.flex.compiler.units.ICompilationUnit;
+import org.apache.flex.compiler.visitor.as.IASBlockWalker;
+import org.apache.flex.compiler.visitor.mxml.IMXMLBlockWalker;
+
+public class MXMLWriter extends JSWriter
+{
+    /**
+     * Create a JSApplication writer.
+     * 
+     * @param application the JSApplication model to be encoded
+     * @param useCompression use ZLIB compression if true
+     */
+    public MXMLWriter(IASProject project, List<ICompilerProblem> problems,
+            ICompilationUnit compilationUnit, boolean enableDebug)
+    {
+        super(project, problems, compilationUnit, enableDebug);
+    }
+
+    @Override
+    public void writeTo(OutputStream out, File sourceMapOut)
+    {
+        IJSBackend backend = (IJSBackend) JSSharedData.backend;
+        JSFilterWriter writer = (JSFilterWriter) backend.createWriterBuffer(project);
+
+        IJSEmitter asEmitter = (IJSEmitter) backend.createEmitter(writer);
+        IASBlockWalker asBlockWalker = backend.createWalker(
+                project, problems, asEmitter);
+
+        IMXMLEmitter mxmlEmitter = backend.createMXMLEmitter(writer);
+        IMXMLBlockWalker mxmlBlockWalker = backend.createMXMLWalker(
+                project, problems, mxmlEmitter, asEmitter, asBlockWalker);
+
+        mxmlBlockWalker.visitCompilationUnit(compilationUnit);
+
+        try
+        {
+            out.write(mxmlEmitter.postProcess(writer.toString()).getBytes());
+        }
+        catch (IOException e)
+        {
+            e.printStackTrace();
+        }
+
+        if (sourceMapOut != null)
+        {
+            throw new UnsupportedOperationException("Source maps not supported for MXML files");
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/c3dce49f/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLDescriptorSpecifier.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLDescriptorSpecifier.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLDescriptorSpecifier.java
new file mode 100644
index 0000000..9eac5d5
--- /dev/null
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLDescriptorSpecifier.java
@@ -0,0 +1,317 @@
+/*
+ *
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+package org.apache.flex.compiler.internal.codegen.mxml.flexjs;
+
+import java.util.ArrayList;
+
+import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
+
+/**
+ * @author Erik de Bruin
+ */
+public class MXMLDescriptorSpecifier extends MXMLNodeSpecifier
+{
+
+    //--------------------------------------------------------------------------
+    //
+    //    Constructor
+    //
+    //--------------------------------------------------------------------------
+
+    public MXMLDescriptorSpecifier()
+    {
+        super();
+        
+        eventSpecifiers = new ArrayList<MXMLEventSpecifier>();
+        propertySpecifiers = new ArrayList<MXMLDescriptorSpecifier>();
+
+        valueNeedsQuotes = false;
+    }
+
+    //--------------------------------------------------------------------------
+    //
+    //    Properties
+    //
+    //--------------------------------------------------------------------------
+
+    //---------------------------------
+    //    children
+    //---------------------------------
+
+    public MXMLDescriptorSpecifier childrenSpecifier;
+
+    //---------------------------------
+    //    properties
+    //---------------------------------
+
+    public ArrayList<MXMLDescriptorSpecifier> propertySpecifiers;
+
+    //---------------------------------
+    //    events
+    //---------------------------------
+
+    public ArrayList<MXMLEventSpecifier> eventSpecifiers;
+
+    //---------------------------------
+    //    hasArray
+    //---------------------------------
+
+    public boolean hasArray;
+
+    //---------------------------------
+    //    hasObject
+    //---------------------------------
+
+    public boolean hasObject;
+
+    //---------------------------------
+    //    id
+    //---------------------------------
+
+    public String id;
+
+    //---------------------------------
+    //    isTopNode
+    //---------------------------------
+
+    public boolean isTopNode;
+
+    //---------------------------------
+    //    isProperty
+    //---------------------------------
+    
+    public boolean isProperty;
+    
+    //---------------------------------
+    //    parent
+    //---------------------------------
+
+    public MXMLDescriptorSpecifier parent;
+
+    //--------------------------------------------------------------------------
+    //
+    //    Methods
+    //
+    //--------------------------------------------------------------------------
+
+    //---------------------------------
+    //    outputEventSpecifier
+    //---------------------------------
+
+    private void outputEventSpecifier(boolean writeNewline)
+    {
+        // number of events
+        int count = 0;
+        for (MXMLEventSpecifier me : eventSpecifiers)
+        {
+            if (me.name != null)
+                count++;
+        }
+        write(count + "");
+        
+        for (MXMLEventSpecifier me : eventSpecifiers)
+        {
+            writeDelimiter(writeNewline);
+            write(me.output(writeNewline));
+        }
+    }
+
+    //---------------------------------
+    //    outputPropertySpecifier
+    //---------------------------------
+
+    private String outputPropertySpecifier(boolean writeNewline)
+    {
+        write((isProperty) ? ASEmitterTokens.SINGLE_QUOTE.getToken() : "");
+        write(name);
+        write((isProperty) ? ASEmitterTokens.SINGLE_QUOTE.getToken() : "");
+        writeDelimiter(writeNewline);
+
+        if (isProperty)
+        {
+            if (value != null)
+            {
+                write(ASEmitterTokens.TRUE);
+                writeDelimiter(writeNewline);
+                write(value);
+            }
+            else
+            {
+                write((hasArray) ? ASEmitterTokens.NULL : ASEmitterTokens.FALSE);
+                writeDelimiter(writeNewline && !hasArray);
+
+                write(ASEmitterTokens.SQUARE_OPEN);
+                output(false);
+                write(ASEmitterTokens.SQUARE_CLOSE);
+            }
+
+            if (parent != null)
+                writeDelimiter(writeNewline);
+        }
+        else
+        {
+            for (MXMLDescriptorSpecifier md : propertySpecifiers)
+            {
+                if (md.name != null && md.name.equals("mxmlContent"))
+                {
+                    childrenSpecifier = md;
+                    propertySpecifiers.remove(md);
+                    break;
+                }
+            }
+
+            if (id != null)
+            {
+                write(propertySpecifiers.size() + 1 + "");
+                writeDelimiter(writeNewline);
+                boolean isEffectiveID = id.startsWith(MXMLFlexJSEmitterTokens.ID_PREFIX.getToken()) ||
+                						id.startsWith(MXMLFlexJSEmitterTokens.BINDING_PREFIX.getToken());
+                String idPropName = (isEffectiveID) ? "_id"
+                        : "id";
+                writeSimpleDescriptor(idPropName, ASEmitterTokens.TRUE.getToken(),
+                        ASEmitterTokens.SINGLE_QUOTE.getToken()
+                                + id + ASEmitterTokens.SINGLE_QUOTE.getToken(),
+                        writeNewline);
+    
+                writeDelimiter(writeNewline);
+            }
+            else
+            {
+                write(propertySpecifiers.size() + "");
+                writeDelimiter(writeNewline);
+            }
+            
+            output(writeNewline);
+        }
+
+        return sb.toString();
+    }
+
+    //---------------------------------
+    //    outputStyleSpecifier
+    //---------------------------------
+
+    private void outputStyleSpecifier(boolean writeNewline)
+    {
+        // TODO (erikdebruin) not yet implemented in FlexJS
+
+        write("0");
+        writeDelimiter(writeNewline);
+    }
+
+    //---------------------------------
+    //    output
+    //---------------------------------
+
+    @Override
+    public String output(boolean writeNewline)
+    {
+        if (isTopNode)
+        {
+            int count = 0;
+            for (MXMLDescriptorSpecifier md : propertySpecifiers)
+            {
+                if (md.name != null)
+                    count++;
+            }
+
+            write(count + "");
+            writeNewline(ASEmitterTokens.COMMA);
+        }
+        
+        MXMLDescriptorSpecifier model = null; // model goes first
+        MXMLDescriptorSpecifier beads = null; // beads go last
+
+        for (MXMLDescriptorSpecifier md : propertySpecifiers)
+        {
+            if (md.name != null && md.name.equals("model"))
+            {
+                model = md;
+
+                break;
+            }
+        }
+
+        if (model != null)
+            write(model.outputPropertySpecifier(true));
+
+        for (MXMLDescriptorSpecifier md : propertySpecifiers)
+        {
+            if (md.name != null)
+            {
+                if (!md.name.equals("model") && !md.name.equals("beads"))
+                    write(md.outputPropertySpecifier(writeNewline));
+                else if (md.name.equals("beads"))
+                    beads = md;
+            }
+        }
+
+        if (beads != null)
+            write(beads.outputPropertySpecifier(writeNewline));
+
+        if (!isProperty)
+        {
+            outputStyleSpecifier(writeNewline);
+
+            // TODO (erikdebruin) not yet implemented in FlexJS
+            //outputEffectSpecifier(writeNewline);
+
+            outputEventSpecifier(writeNewline);
+            
+            if (!isTopNode)
+            {
+                writeDelimiter(writeNewline);
+                
+                if (childrenSpecifier == null)
+                    write(ASEmitterTokens.NULL);
+                else
+                    outputChildren(childrenSpecifier, writeNewline);
+            }
+            
+            boolean isLastChild = parent != null
+                    && parent.propertySpecifiers.indexOf(this) == parent.propertySpecifiers
+                            .size() - 1;
+
+            if (!isLastChild && !isTopNode)
+                writeDelimiter(writeNewline);
+        }
+
+        return sb.toString();
+    }
+    
+    private void outputChildren(MXMLDescriptorSpecifier children, boolean writeNewline)
+    {
+        write(ASEmitterTokens.SQUARE_OPEN.getToken());
+        write(children.output(false));
+        write(ASEmitterTokens.SQUARE_CLOSE.getToken());
+    }
+
+    public String outputStateDescriptors()
+    {
+        for (MXMLDescriptorSpecifier md : propertySpecifiers)
+        {
+            write(ASEmitterTokens.SQUARE_OPEN);
+            write(md.output(false));
+            write(ASEmitterTokens.SQUARE_CLOSE);
+            writeNewline(ASEmitterTokens.COMMA);
+        }
+        return sb.toString();
+    }
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/c3dce49f/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLEventSpecifier.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLEventSpecifier.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLEventSpecifier.java
new file mode 100644
index 0000000..d419df6
--- /dev/null
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLEventSpecifier.java
@@ -0,0 +1,99 @@
+/*
+ *
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+package org.apache.flex.compiler.internal.codegen.mxml.flexjs;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
+
+/**
+ * @author Erik de Bruin
+ */
+public class MXMLEventSpecifier extends MXMLNodeSpecifier
+{
+
+    //--------------------------------------------------------------------------
+    //
+    //    Constructor
+    //
+    //--------------------------------------------------------------------------
+
+    public MXMLEventSpecifier()
+    {
+        super();
+    }
+
+    //--------------------------------------------------------------------------
+    //
+    //    Properties
+    //
+    //--------------------------------------------------------------------------
+
+    static List<String> nameMap = Arrays.asList(
+    		"rollOver",
+    		"rollOut",
+    		"mouseDown",
+    		"mouseMove",
+    		"mouseOver",
+    		"mouseOut",
+    		"mouseUp"
+    );
+    
+    //---------------------------------
+    //    eventHandler
+    //---------------------------------
+
+    public String eventHandler;
+
+    //---------------------------------
+    //    type
+    //---------------------------------
+
+    public String type;
+
+    //--------------------------------------------------------------------------
+    //
+    //    Methods
+    //
+    //--------------------------------------------------------------------------
+
+    //---------------------------------
+    //    output
+    //---------------------------------
+
+    public String output(boolean writeNewline)
+    {
+        String handler = ASEmitterTokens.THIS.getToken()
+                + ASEmitterTokens.MEMBER_ACCESS.getToken() + eventHandler;
+        if (nameMap.contains(name))
+        	name = name.toLowerCase();
+        writeSimpleDescriptor(name, null, handler, writeNewline);
+
+        return sb.toString();
+    }
+
+    public static String getJSEventName(String name)
+    {
+    	if (nameMap.contains(name))
+    		return name.toLowerCase();
+    	return name;
+    }
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/c3dce49f/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSBlockWalker.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSBlockWalker.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSBlockWalker.java
new file mode 100644
index 0000000..6d374b4
--- /dev/null
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSBlockWalker.java
@@ -0,0 +1,83 @@
+/*
+ *
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+package org.apache.flex.compiler.internal.codegen.mxml.flexjs;
+
+import java.util.List;
+
+import org.apache.flex.compiler.codegen.as.IASEmitter;
+import org.apache.flex.compiler.codegen.mxml.IMXMLEmitter;
+import org.apache.flex.compiler.codegen.mxml.flexjs.IMXMLFlexJSEmitter;
+import org.apache.flex.compiler.internal.codegen.mxml.MXMLBlockWalker;
+import org.apache.flex.compiler.internal.css.codegen.CSSCompilationSession;
+import org.apache.flex.compiler.problems.ICompilerProblem;
+import org.apache.flex.compiler.projects.IASProject;
+import org.apache.flex.compiler.tree.mxml.IMXMLDocumentNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLFileNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLStyleNode;
+import org.apache.flex.compiler.visitor.IBlockWalker;
+
+/**
+ * @author Michael Schmalle
+ * @author Erik de Bruin
+ */
+public class MXMLFlexJSBlockWalker extends MXMLBlockWalker
+{
+
+    private IMXMLEmitter mxmlEmitter;
+
+    public MXMLFlexJSBlockWalker(List<ICompilerProblem> errors,
+            IASProject project, IMXMLEmitter mxmlEmitter, IASEmitter asEmitter,
+            IBlockWalker asBlockWalker)
+    {
+        super(errors, project, mxmlEmitter, asEmitter, asBlockWalker);
+
+        this.mxmlEmitter = mxmlEmitter;
+    }
+
+    //--------------------------------------------------------------------------
+
+    @Override
+    public void visitFile(IMXMLFileNode node)
+    {
+        debug("visitFile()");
+
+        walk(node.getDocumentNode());
+    }
+
+    @Override
+    public void visitDocument(IMXMLDocumentNode node)
+    {
+        debug("visitDocument()");
+
+        ((IMXMLFlexJSEmitter) mxmlEmitter).emitDocument(node);
+    }
+
+    @Override
+    public void visitStyleBlock(IMXMLStyleNode node)
+    {
+        node.getCSSDocument(errors);
+                
+        final CSSCompilationSession session = node.getFileNode().getCSSCompilationSession();
+        if (session == null)
+            return;
+        
+    }
+
+}