You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by ah...@apache.org on 2014/11/10 19:05:47 UTC

[1/7] git commit: [flex-falcon] [refs/heads/develop] - fix asdoc handling. It was being replicated to nodes without asdoc

Repository: flex-falcon
Updated Branches:
  refs/heads/develop 3011d6373 -> f612a79f0


fix asdoc handling.  It was being replicated to nodes without asdoc


Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/3cb2ae17
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/3cb2ae17
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/3cb2ae17

Branch: refs/heads/develop
Commit: 3cb2ae17e26ac0e86bbed0796aa2f1ef14f9d5c2
Parents: 3011d63
Author: Alex Harui <ah...@apache.org>
Authored: Wed Nov 5 08:29:18 2014 -0800
Committer: Alex Harui <ah...@apache.org>
Committed: Wed Nov 5 08:31:56 2014 -0800

----------------------------------------------------------------------
 .../flex/compiler/internal/parsing/as/FlexJSASDocDelegate.java   | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/3cb2ae17/compiler.jx/src/org/apache/flex/compiler/internal/parsing/as/FlexJSASDocDelegate.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/parsing/as/FlexJSASDocDelegate.java b/compiler.jx/src/org/apache/flex/compiler/internal/parsing/as/FlexJSASDocDelegate.java
index 9c45fa0..2558977 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/parsing/as/FlexJSASDocDelegate.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/parsing/as/FlexJSASDocDelegate.java
@@ -83,7 +83,9 @@ public final class FlexJSASDocDelegate implements IASDocDelegate
             if (currentToken == null)
                 return null;
             
-            return new ASDocComment(currentToken);
+            ASDocComment comment = new ASDocComment(currentToken);
+            currentToken = null;
+            return comment;
         }
 
         @Override


[3/7] git commit: [flex-falcon] [refs/heads/develop] - experiment with not generating code for coercions in some cases

Posted by ah...@apache.org.
experiment with not generating code for coercions in some cases


Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/36c9111b
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/36c9111b
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/36c9111b

Branch: refs/heads/develop
Commit: 36c9111ba14f851d8a3176cbc202ebda6161f0fe
Parents: 3cb2ae1
Author: Alex Harui <ah...@apache.org>
Authored: Wed Nov 5 08:30:31 2014 -0800
Committer: Alex Harui <ah...@apache.org>
Committed: Wed Nov 5 08:31:57 2014 -0800

----------------------------------------------------------------------
 .../codegen/js/flexjs/JSFlexJSEmitter.java      | 40 +++++++++++++++++++-
 .../js/flexjs/JSFlexJSEmitterTokens.java        |  1 +
 2 files changed, 40 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/36c9111b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
index d1bc8b0..8ffd837 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
@@ -28,6 +28,8 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import org.apache.flex.compiler.asdoc.IASDocComment;
+import org.apache.flex.compiler.asdoc.flexjs.ASDocComment;
 import org.apache.flex.compiler.codegen.IASGlobalFunctionConstants;
 import org.apache.flex.compiler.codegen.IDocEmitter;
 import org.apache.flex.compiler.codegen.js.flexjs.IJSFlexJSEmitter;
@@ -1071,6 +1073,43 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
     private void emitIsAs(IExpressionNode left, IExpressionNode right, 
             ASTNodeID id, boolean coercion)
     {
+        IDefinition dnode = (right).resolve(project);
+    	if (id != ASTNodeID.Op_IsID && dnode != null)
+    	{
+    		// find the function node
+            IFunctionNode functionNode = (IFunctionNode) left
+            	.getAncestorOfType(IFunctionNode.class);
+            if (functionNode != null) // can be null in synthesized binding code
+            {
+	            ASDocComment asDoc = (ASDocComment) functionNode.getASDocComment();
+	            if (asDoc != null)
+	            {
+		            String asDocString = asDoc.commentNoEnd();
+		            String ignoreToken = JSFlexJSEmitterTokens.IGNORE_COERCION.getToken();
+		            boolean ignore = false;
+		            int ignoreIndex = asDocString.indexOf(ignoreToken);
+		            while (ignoreIndex != -1)
+		            {
+		            	String ignorable = asDocString.substring(ignoreIndex + ignoreToken.length());
+		            	int endIndex = ignorable.indexOf("\n");
+		            	ignorable = ignorable.substring(0, endIndex);
+		            	ignorable = ignorable.trim();
+		            	String rightSide = dnode.getQualifiedName();
+		            	if (ignorable.equals(rightSide))
+		            	{
+		                    ignore = true;
+		            		break;
+		            	}
+		            	ignoreIndex = asDocString.indexOf(ignoreToken, ignoreIndex + ignoreToken.length());
+		            }
+		            if (ignore)
+		            {
+		                getWalker().walk(left);
+		                return;
+		            }
+	            }
+            }
+    	}
         write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
         write(ASEmitterTokens.MEMBER_ACCESS);
         if (id == ASTNodeID.Op_IsID)
@@ -1081,7 +1120,6 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
         getWalker().walk(left);
         writeToken(ASEmitterTokens.COMMA);
 
-        IDefinition dnode = (right).resolve(project);
         if (dnode != null)
             write(dnode.getQualifiedName());
         else

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/36c9111b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitterTokens.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitterTokens.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitterTokens.java
index 77fd33e..4a28e74 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitterTokens.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitterTokens.java
@@ -34,6 +34,7 @@ public enum JSFlexJSEmitterTokens implements IEmitterTokens
     NAMES("names"),
     QNAME("qName"),
     UNDERSCORE("_"),
+    IGNORE_COERCION("@flexjsignorecoercion"),
     ;
 
     private String token;


[2/7] git commit: [flex-falcon] [refs/heads/develop] - handle binding and object nodes

Posted by ah...@apache.org.
handle binding and object nodes


Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/5d2765d6
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/5d2765d6
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/5d2765d6

Branch: refs/heads/develop
Commit: 5d2765d6289042cb5f11555f612ee553c8ae3926
Parents: 36c9111
Author: Alex Harui <ah...@apache.org>
Authored: Wed Nov 5 08:31:19 2014 -0800
Committer: Alex Harui <ah...@apache.org>
Committed: Wed Nov 5 08:31:57 2014 -0800

----------------------------------------------------------------------
 .../compiler/codegen/mxml/IMXMLEmitter.java     |  3 +
 .../internal/codegen/mxml/MXMLBlockWalker.java  | 22 ++++++
 .../internal/codegen/mxml/MXMLEmitter.java      | 16 +++++
 .../mxml/flexjs/MXMLDescriptorSpecifier.java    |  6 ++
 .../codegen/mxml/flexjs/MXMLFlexJSEmitter.java  | 72 +++++++++++++++++---
 .../internal/visitor/mxml/MXMLNodeSwitch.java   | 11 ++-
 .../visitor/mxml/IMXMLBlockVisitor.java         |  9 +++
 7 files changed, 127 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/5d2765d6/compiler.jx/src/org/apache/flex/compiler/codegen/mxml/IMXMLEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/codegen/mxml/IMXMLEmitter.java b/compiler.jx/src/org/apache/flex/compiler/codegen/mxml/IMXMLEmitter.java
index fe4c771..3d6b288 100644
--- a/compiler.jx/src/org/apache/flex/compiler/codegen/mxml/IMXMLEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/codegen/mxml/IMXMLEmitter.java
@@ -37,6 +37,7 @@ 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.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;
@@ -92,6 +93,8 @@ public interface IMXMLEmitter extends IEmitter
 
     void emitNumber(IMXMLNumberNode node);
 
+    void emitObject(IMXMLObjectNode node);
+
     void emitString(IMXMLStringNode node);
 
     void emitUint(IMXMLUintNode node);

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/5d2765d6/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/MXMLBlockWalker.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/MXMLBlockWalker.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/MXMLBlockWalker.java
index a6cbb95..ed518de 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/MXMLBlockWalker.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/MXMLBlockWalker.java
@@ -31,6 +31,7 @@ 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;
@@ -49,6 +50,7 @@ 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;
@@ -418,6 +420,26 @@ public class MXMLBlockWalker implements IMXMLBlockVisitor, IMXMLBlockWalker
     }
     
     //--------------------------------------------------------------------------
+    
+    @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)
     {

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/5d2765d6/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/MXMLEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/MXMLEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/MXMLEmitter.java
index ea4f4d0..fcf2597 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/MXMLEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/MXMLEmitter.java
@@ -46,6 +46,7 @@ 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;
@@ -240,6 +241,21 @@ public class MXMLEmitter extends Emitter implements IMXMLEmitter
     //--------------------------------------------------------------------------
 
     @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();

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/5d2765d6/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLDescriptorSpecifier.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLDescriptorSpecifier.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLDescriptorSpecifier.java
index d70ac27..ca24ac9 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLDescriptorSpecifier.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLDescriptorSpecifier.java
@@ -76,6 +76,12 @@ public class MXMLDescriptorSpecifier extends MXMLNodeSpecifier
     public boolean hasArray;
 
     //---------------------------------
+    //    hasObject
+    //---------------------------------
+
+    public boolean hasObject;
+
+    //---------------------------------
     //    id
     //---------------------------------
 

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/5d2765d6/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSEmitter.java
index 5956a7b..e76e0c1 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSEmitter.java
@@ -70,6 +70,7 @@ import org.apache.flex.compiler.tree.mxml.IMXMLFactoryNode;
 import org.apache.flex.compiler.tree.mxml.IMXMLInstanceNode;
 import org.apache.flex.compiler.tree.mxml.IMXMLLiteralNode;
 import org.apache.flex.compiler.tree.mxml.IMXMLNode;
+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.IMXMLSpecifierNode;
@@ -101,6 +102,7 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements
 
     private boolean inMXMLContent;
     private boolean inStatesOverride;
+    private boolean makingSimpleArray;
     
     private StringBuilder subDocuments = new StringBuilder();
     private ArrayList<String> subDocumentNames = new ArrayList<String>();
@@ -462,7 +464,11 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements
                 writeNewline(ASEmitterTokens.NULL.getToken() + ASEmitterTokens.COMMA.getToken());
             
             s = bi.getDestinationString();
-            if (s.contains("."))
+            if (s == null)
+            {
+                writeNewline(ASEmitterTokens.NULL.getToken() + ASEmitterTokens.COMMA.getToken());            	
+            }
+            else if (s.contains("."))
             {
                 String[] parts = s.split("\\.");
                 write(ASEmitterTokens.SQUARE_OPEN.getToken() + ASEmitterTokens.DOUBLE_QUOTE.getToken() + 
@@ -480,10 +486,13 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements
                         ASEmitterTokens.DOUBLE_QUOTE.getToken() + ASEmitterTokens.COMMA.getToken());
         }
         Set<Entry<Object, WatcherInfoBase>> watcherChains = bindingDataBase.getWatcherChains();
-        for (Entry<Object, WatcherInfoBase> entry : watcherChains)
+        if (watcherChains != null)
         {
-            WatcherInfoBase watcherInfoBase = entry.getValue();
-            encodeWatcher(watcherInfoBase);
+            for (Entry<Object, WatcherInfoBase> entry : watcherChains)
+            {
+                WatcherInfoBase watcherInfoBase = entry.getValue();
+                encodeWatcher(watcherInfoBase);
+            }
         }
         // add a trailing null for now so I don't have to have logic where the watcher figures out not to add
         // a comma
@@ -1322,15 +1331,17 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements
             propertiesTree.propertySpecifiers.add(currentPropertySpecifier);
         }
 
-        boolean bypass = cnode != null && cnode instanceof IMXMLArrayNode;
+        boolean valueIsArray = cnode != null && cnode instanceof IMXMLArrayNode;
+        boolean valueIsObject = cnode != null && cnode instanceof IMXMLObjectNode;
 
-        currentPropertySpecifier.hasArray = bypass;
+        currentPropertySpecifier.hasArray = valueIsArray;
+        currentPropertySpecifier.hasObject = valueIsObject;
 
-        moveDown(bypass, null, currentPropertySpecifier);
+        moveDown(valueIsArray || valueIsObject, null, currentPropertySpecifier);
 
         getMXMLWalker().walk(cnode); // Array or Instance
 
-        moveUp(bypass, false);
+        moveUp(valueIsArray || valueIsObject, false);
         
         inMXMLContent = oldInMXMLContent;
     }
@@ -1384,15 +1395,57 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements
     //--------------------------------------------------------------------------
 
     @Override
+    public void emitObject(IMXMLObjectNode node)
+    {
+        final int len = node.getChildCount();
+    	if (!makingSimpleArray)
+    	{
+            for (int i = 0; i < len; i++)
+            {
+                getMXMLWalker().walk(node.getChild(i)); // props in object
+            }    		
+    	}
+    	else
+    	{
+            MXMLDescriptorSpecifier ps = getCurrentDescriptor("ps");
+            ps.value = "{";	
+            for (int i = 0; i < len; i++)
+            {
+                IMXMLPropertySpecifierNode propName = (IMXMLPropertySpecifierNode)node.getChild(i);
+                ps.value += propName.getName() + ": ";	                
+                getMXMLWalker().walk(propName.getChild(0));
+                if (i < len - 1)
+                    ps.value += ", ";	                                	
+            }    		
+            ps.value += "}";	
+    	}
+    }
+    
+    @Override
     public void emitArray(IMXMLArrayNode node)
     {
         moveDown(false, null, null);
 
+        boolean isSimple = true;
         final int len = node.getChildCount();
         for (int i = 0; i < len; i++)
         {
+            final IASNode child = node.getChild(i);
+            ASTNodeID nodeID = child.getNodeID();
+            if (nodeID == ASTNodeID.MXMLArrayID || nodeID == ASTNodeID.MXMLInstanceID)
+            {
+                isSimple = false;
+                break;
+            }
+        }
+        boolean oldMakingSimpleArray = makingSimpleArray;
+        if (isSimple)
+        	makingSimpleArray = true;
+        for (int i = 0; i < len; i++)
+        {
             getMXMLWalker().walk(node.getChild(i)); // Instance
         }
+        makingSimpleArray = oldMakingSimpleArray;
 
         moveUp(false, false);
     }
@@ -1411,7 +1464,8 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements
     public void emitLiteral(IMXMLLiteralNode node)
     {
         MXMLDescriptorSpecifier ps = getCurrentDescriptor("ps");
-        ps.value = "";
+        if (ps.value == null) // might be non-null if makingSimpleArray
+        	ps.value = "";
 
         if (ps.valueNeedsQuotes)
             ps.value += ASEmitterTokens.SINGLE_QUOTE.getToken();

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/5d2765d6/compiler.jx/src/org/apache/flex/compiler/internal/visitor/mxml/MXMLNodeSwitch.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/visitor/mxml/MXMLNodeSwitch.java b/compiler.jx/src/org/apache/flex/compiler/internal/visitor/mxml/MXMLNodeSwitch.java
index 1c17717..9576e24 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/visitor/mxml/MXMLNodeSwitch.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/visitor/mxml/MXMLNodeSwitch.java
@@ -21,6 +21,7 @@ package org.apache.flex.compiler.internal.visitor.mxml;
 
 import org.apache.flex.compiler.tree.as.IASNode;
 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.IMXMLComponentNode;
 import org.apache.flex.compiler.tree.mxml.IMXMLDataBindingNode;
@@ -37,6 +38,7 @@ 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.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;
@@ -141,9 +143,13 @@ public class MXMLNodeSwitch implements IASNodeStrategy
         case MXMLDataBindingID:
             visitor.visitDatabinding((IMXMLDataBindingNode) node);
             break;
-            
-        case MXMLApplicationID:
         case MXMLBindingID:
+            visitor.visitBinding((IMXMLBindingNode) node);
+        	break;
+        case MXMLObjectID:
+            visitor.visitObject((IMXMLObjectNode) node);
+        	break;
+        case MXMLApplicationID:
         case MXMLBindingAttributeID:
         case MXMLClassID:
         case MXMLClassDefinitionID:
@@ -160,7 +166,6 @@ public class MXMLNodeSwitch implements IASNodeStrategy
         case MXMLModelID:
         case MXMLModelPropertyID:
         case MXMLModelRootID:
-        case MXMLObjectID:
         case MXMLPrivateID:
         case MXMLRegExpID:
         case MXMLRemoteObjectID:

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/5d2765d6/compiler.jx/src/org/apache/flex/compiler/visitor/mxml/IMXMLBlockVisitor.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/visitor/mxml/IMXMLBlockVisitor.java b/compiler.jx/src/org/apache/flex/compiler/visitor/mxml/IMXMLBlockVisitor.java
index ab2b537..d6c45a8 100644
--- a/compiler.jx/src/org/apache/flex/compiler/visitor/mxml/IMXMLBlockVisitor.java
+++ b/compiler.jx/src/org/apache/flex/compiler/visitor/mxml/IMXMLBlockVisitor.java
@@ -20,6 +20,7 @@
 package org.apache.flex.compiler.visitor.mxml;
 
 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;
@@ -37,6 +38,7 @@ 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.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;
@@ -126,4 +128,11 @@ public interface IMXMLBlockVisitor extends IBlockVisitor
     
     void visitDatabinding(IMXMLDataBindingNode node);
     
+    //--------------------------------------------------------------------------
+    
+    void visitBinding(IMXMLBindingNode node);
+    
+    //--------------------------------------------------------------------------
+    
+    void visitObject(IMXMLObjectNode node);
 }


[4/7] git commit: [flex-falcon] [refs/heads/develop] - don't generate code for 'as' and coercions or some imports that are only used for satisfying the AS compiler and not needed in JS

Posted by ah...@apache.org.
don't generate code for 'as' and coercions or some imports that are only used for satisfying the AS compiler and not needed in JS


Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/f3713dde
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/f3713dde
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/f3713dde

Branch: refs/heads/develop
Commit: f3713dde8881abb0de30be3f2f6810fcbc457a1a
Parents: 5d2765d
Author: Alex Harui <ah...@apache.org>
Authored: Thu Nov 6 13:40:15 2014 -0800
Committer: Alex Harui <ah...@apache.org>
Committed: Thu Nov 6 13:40:15 2014 -0800

----------------------------------------------------------------------
 .../codegen/js/flexjs/JSFlexJSEmitter.java      | 57 +++++++++++++++-----
 .../js/flexjs/JSFlexJSEmitterTokens.java        |  1 +
 2 files changed, 45 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/f3713dde/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
index 8ffd837..758bacd 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
@@ -59,6 +59,7 @@ import org.apache.flex.compiler.internal.scopes.PackageScope;
 import org.apache.flex.compiler.internal.scopes.TypeScope;
 import org.apache.flex.compiler.internal.tree.as.BinaryOperatorAssignmentNode;
 import org.apache.flex.compiler.internal.tree.as.ChainedVariableNode;
+import org.apache.flex.compiler.internal.tree.as.ClassNode;
 import org.apache.flex.compiler.internal.tree.as.FunctionCallNode;
 import org.apache.flex.compiler.internal.tree.as.FunctionNode;
 import org.apache.flex.compiler.internal.tree.as.ParameterNode;
@@ -1297,11 +1298,39 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
     {
         PackageScope containedScope = (PackageScope) definition
                 .getContainedScope();
+        
+        ArrayList<String> writtenRequires = new ArrayList<String>();
 
         ITypeDefinition type = findType(containedScope.getAllLocalDefinitions());
         if (type == null)
             return;
 
+        ITypeNode typeNode = type.getNode();
+        if (typeNode instanceof ClassNode)
+        {
+	        ClassNode classNode = (ClassNode) typeNode;
+	        if (classNode != null)
+	        {
+	            ASDocComment asDoc = (ASDocComment) classNode.getASDocComment();
+	            if (asDoc != null)
+	            {
+		            String asDocString = asDoc.commentNoEnd();
+		            String ignoreToken = JSFlexJSEmitterTokens.IGNORE_IMPORT.getToken();
+		            int ignoreIndex = asDocString.indexOf(ignoreToken);
+		            while (ignoreIndex != -1)
+		            {
+		            	String ignorable = asDocString.substring(ignoreIndex + ignoreToken.length());
+		            	int endIndex = ignorable.indexOf("\n");
+		            	ignorable = ignorable.substring(0, endIndex);
+		            	ignorable = ignorable.trim();
+		            	// pretend we've already written the goog.requires for this
+		            	writtenRequires.add(ignorable);
+		            	ignoreIndex = asDocString.indexOf(ignoreToken, ignoreIndex + ignoreToken.length());
+		            }
+	            }
+	        }
+        }
+        
         if (project == null)
             project = getWalker().getProject();
 
@@ -1313,8 +1342,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
         ArrayList<String> interfacesList = flexProject.getInterfaces(cu);
 
         String cname = type.getQualifiedName();
-        ArrayList<String> writtenInstances = new ArrayList<String>();
-        writtenInstances.add(cname); // make sure we don't add ourselves
+        writtenRequires.add(cname); // make sure we don't add ourselves
 
         boolean emitsRequires = false;
         if (requiresList != null)
@@ -1330,7 +1358,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
                 if (NativeUtils.isNative(imp))
                     continue;
 
-                if (writtenInstances.indexOf(imp) == -1)
+                if (writtenRequires.indexOf(imp) == -1)
                 {
 
                     /* goog.require('x');\n */
@@ -1342,7 +1370,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
                     write(ASEmitterTokens.PAREN_CLOSE);
                     writeNewline(ASEmitterTokens.SEMICOLON);
                     
-                    writtenInstances.add(imp);
+                    writtenRequires.add(imp);
                     
                     emitsRequires = true;
                 }
@@ -1354,15 +1382,18 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
         {
             for (String imp : interfacesList)
             {
-                write(JSGoogEmitterTokens.GOOG_REQUIRE);
-                write(ASEmitterTokens.PAREN_OPEN);
-                write(ASEmitterTokens.SINGLE_QUOTE);
-                write(imp);
-                write(ASEmitterTokens.SINGLE_QUOTE);
-                write(ASEmitterTokens.PAREN_CLOSE);
-                writeNewline(ASEmitterTokens.SEMICOLON);
-                
-                emitsInterfaces = true;
+                if (writtenRequires.indexOf(imp) == -1)
+                {
+	                write(JSGoogEmitterTokens.GOOG_REQUIRE);
+	                write(ASEmitterTokens.PAREN_OPEN);
+	                write(ASEmitterTokens.SINGLE_QUOTE);
+	                write(imp);
+	                write(ASEmitterTokens.SINGLE_QUOTE);
+	                write(ASEmitterTokens.PAREN_CLOSE);
+	                writeNewline(ASEmitterTokens.SEMICOLON);
+	                
+	                emitsInterfaces = true;
+                }
             }
         }
         

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/f3713dde/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitterTokens.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitterTokens.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitterTokens.java
index 4a28e74..62a6919 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitterTokens.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitterTokens.java
@@ -35,6 +35,7 @@ public enum JSFlexJSEmitterTokens implements IEmitterTokens
     QNAME("qName"),
     UNDERSCORE("_"),
     IGNORE_COERCION("@flexjsignorecoercion"),
+    IGNORE_IMPORT("@flexjsignoreimport"),
     ;
 
     private String token;


[6/7] git commit: [flex-falcon] [refs/heads/develop] - suppress more as-only asdoc annotations and rename param and return to avoid duplicates

Posted by ah...@apache.org.
suppress more as-only asdoc annotations and rename param and return to avoid duplicates


Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/edb8bcb2
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/edb8bcb2
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/edb8bcb2

Branch: refs/heads/develop
Commit: edb8bcb2c989fbaed3dceffe4fc5503eae757e34
Parents: 2d9e423
Author: Alex Harui <ah...@apache.org>
Authored: Mon Nov 10 09:06:50 2014 -0800
Committer: Alex Harui <ah...@apache.org>
Committed: Mon Nov 10 09:06:50 2014 -0800

----------------------------------------------------------------------
 .../codegen/js/flexjs/JSFlexJSDocEmitter.java   | 24 ++++++++++++++------
 .../utils/JSClosureCompilerWrapper.java         |  4 +++-
 2 files changed, 20 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/edb8bcb2/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSDocEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSDocEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSDocEmitter.java
index 6e3524b..044c2f7 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSDocEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSDocEmitter.java
@@ -63,7 +63,7 @@ public class JSFlexJSDocEmitter extends JSGoogDocEmitter
             if (node.isConstructor())
             {
                 if (asDoc != null && MXMLJSC.keepASDoc)
-                    write(asDoc.commentNoEnd());
+                    write(changeAnnotations(asDoc.commentNoEnd()));
                 else
                     begin();
                 hasDoc = true;
@@ -98,7 +98,7 @@ public class JSFlexJSDocEmitter extends JSGoogDocEmitter
                 if (ns != null)
                 {
                     if (asDoc != null && MXMLJSC.keepASDoc)
-                        write(asDoc.commentNoEnd());
+                        write(changeAnnotations(asDoc.commentNoEnd()));
                     else
                         begin();
                     emitMethodAccess(node);
@@ -113,7 +113,7 @@ public class JSFlexJSDocEmitter extends JSGoogDocEmitter
                 if (!hasDoc)
                 {
                     if (asDoc != null && MXMLJSC.keepASDoc)
-                        write(asDoc.commentNoEnd());
+                        write(changeAnnotations(asDoc.commentNoEnd()));
                     else
                         begin();
                     emitMethodAccess(node);
@@ -140,7 +140,7 @@ public class JSFlexJSDocEmitter extends JSGoogDocEmitter
                     if (!hasDoc)
                     {
                         if (asDoc != null && MXMLJSC.keepASDoc)
-                            write(asDoc.commentNoEnd());
+                            write(changeAnnotations(asDoc.commentNoEnd()));
                         else
                             begin();
                         emitMethodAccess(node);
@@ -166,7 +166,7 @@ public class JSFlexJSDocEmitter extends JSGoogDocEmitter
                     if (!hasDoc)
                     {
                         if (asDoc != null && MXMLJSC.keepASDoc)
-                            write(asDoc.commentNoEnd());
+                            write(changeAnnotations(asDoc.commentNoEnd()));
                         else
                             begin();
                         emitMethodAccess(node);
@@ -182,6 +182,16 @@ public class JSFlexJSDocEmitter extends JSGoogDocEmitter
         }
     }
     
+    private String changeAnnotations(String doc)
+    {
+    	// rename these tags so they don't conflict with generated
+    	// jsdoc tags
+    	String pass1 = doc.replaceAll("@param", "@asparam");
+    	String pass2 = pass1.replaceAll("@return", "@asreturn");
+    	String pass3 = pass2.replaceAll("@private", "@asprivate");
+    	return pass3;
+    }
+    
     public void emitInterfaceMemberDoc(IDefinitionNode node, ICompilerProject project)
     {
         boolean hasDoc = false;
@@ -193,7 +203,7 @@ public class JSFlexJSDocEmitter extends JSGoogDocEmitter
                 && returnType != ASEmitterTokens.VOID.getToken()) // has return
         {
             if (asDoc != null && MXMLJSC.keepASDoc)
-                write(asDoc.commentNoEnd());
+                write(changeAnnotations(asDoc.commentNoEnd()));
             else
                 begin();
             hasDoc = true;
@@ -210,7 +220,7 @@ public class JSFlexJSDocEmitter extends JSGoogDocEmitter
             if (!hasDoc)
             {
                 if (asDoc != null && MXMLJSC.keepASDoc)
-                    write(asDoc.commentNoEnd());
+                    write(changeAnnotations(asDoc.commentNoEnd()));
                 else
                     begin();
                 hasDoc = true;

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/edb8bcb2/compiler.jx/src/org/apache/flex/compiler/utils/JSClosureCompilerWrapper.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/utils/JSClosureCompilerWrapper.java b/compiler.jx/src/org/apache/flex/compiler/utils/JSClosureCompilerWrapper.java
index 5c5907e..6f3543d 100644
--- a/compiler.jx/src/org/apache/flex/compiler/utils/JSClosureCompilerWrapper.java
+++ b/compiler.jx/src/org/apache/flex/compiler/utils/JSClosureCompilerWrapper.java
@@ -134,7 +134,9 @@ public class JSClosureCompilerWrapper
         WarningLevel.VERBOSE.setOptionsForWarningLevel(options_);
         
         String[] asdocTags = new String[] {"productversion", 
-        		"playerversion", "langversion", "copy"};
+        		"playerversion", "langversion", "copy", 
+        		"asparam", "asreturn", "asprivate",
+        		"flexjsignoreimport", "flexjsignorecoercion"};
         options_.setExtraAnnotationNames(Arrays.asList(asdocTags));
     }
     


[7/7] git commit: [flex-falcon] [refs/heads/develop] - fix unit tests

Posted by ah...@apache.org.
fix unit tests


Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/f612a79f
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/f612a79f
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/f612a79f

Branch: refs/heads/develop
Commit: f612a79f08eb63c8eb7fe182124a4f970beb1264
Parents: edb8bcb
Author: Alex Harui <ah...@apache.org>
Authored: Mon Nov 10 10:05:34 2014 -0800
Committer: Alex Harui <ah...@apache.org>
Committed: Mon Nov 10 10:05:34 2014 -0800

----------------------------------------------------------------------
 .../flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/f612a79f/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
index 758bacd..efaae41 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
@@ -1074,7 +1074,8 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
     private void emitIsAs(IExpressionNode left, IExpressionNode right, 
             ASTNodeID id, boolean coercion)
     {
-        IDefinition dnode = (right).resolve(project);
+    	// project is null in unit tests
+        IDefinition dnode = project != null ? (right).resolve(project) : null;
     	if (id != ASTNodeID.Op_IsID && dnode != null)
     	{
     		// find the function node


[5/7] git commit: [flex-falcon] [refs/heads/develop] - override a few more assumed types so FlexJS can use non-flash packages

Posted by ah...@apache.org.
override a few more assumed types so FlexJS can use non-flash packages


Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/2d9e4234
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/2d9e4234
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/2d9e4234

Branch: refs/heads/develop
Commit: 2d9e423432c43e3fa9ef2d954ef7120651cd7924
Parents: f3713dd
Author: Alex Harui <ah...@apache.org>
Authored: Thu Nov 6 22:17:10 2014 -0800
Committer: Alex Harui <ah...@apache.org>
Committed: Thu Nov 6 22:17:10 2014 -0800

----------------------------------------------------------------------
 .../internal/as/codegen/BindableHelper.java     |  2 ++
 .../internal/definitions/ClassDefinition.java   |  5 +++-
 .../projects/FlexProjectConfigurator.java       |  6 +++-
 .../internal/units/ASCompilationUnit.java       | 31 ++++++++++++++------
 4 files changed, 33 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/2d9e4234/compiler/src/org/apache/flex/compiler/internal/as/codegen/BindableHelper.java
----------------------------------------------------------------------
diff --git a/compiler/src/org/apache/flex/compiler/internal/as/codegen/BindableHelper.java b/compiler/src/org/apache/flex/compiler/internal/as/codegen/BindableHelper.java
index 203a804..d88a105 100644
--- a/compiler/src/org/apache/flex/compiler/internal/as/codegen/BindableHelper.java
+++ b/compiler/src/org/apache/flex/compiler/internal/as/codegen/BindableHelper.java
@@ -576,5 +576,7 @@ public class BindableHelper
 
     public static String PROPERTY_CHANGE = "propertyChange";
     public static String BINDABLE = "Bindable";
+    public static String STRING_EVENT = "flash.events.Event";
+    public static String STRING_EVENT_DISPATCHER = "flash.events.EventDispatcher";
 
 }

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/2d9e4234/compiler/src/org/apache/flex/compiler/internal/definitions/ClassDefinition.java
----------------------------------------------------------------------
diff --git a/compiler/src/org/apache/flex/compiler/internal/definitions/ClassDefinition.java b/compiler/src/org/apache/flex/compiler/internal/definitions/ClassDefinition.java
index 8f5ba4f..4b78e47 100644
--- a/compiler/src/org/apache/flex/compiler/internal/definitions/ClassDefinition.java
+++ b/compiler/src/org/apache/flex/compiler/internal/definitions/ClassDefinition.java
@@ -110,6 +110,9 @@ public class ClassDefinition extends ClassDefinitionBase implements IClassDefini
     private static final String NO_REMOTE_CLASS_ALIAS = "";
 
     private static final String HOST_COMPONENT = "hostComponent";
+    
+    // this gets replaced in some projects
+    public static String Event = IASLanguageConstants.Event;
 
     private static ClassDefinition makeImplicitClassDefinition(String name)
     {
@@ -470,7 +473,7 @@ public class ClassDefinition extends ClassDefinitionBase implements IClassDefini
                         }
                     }
                     if (type == null)
-                        type = IASLanguageConstants.Event;
+                        type = ClassDefinition.Event;
 
                     if (name != null)
                     {

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/2d9e4234/compiler/src/org/apache/flex/compiler/internal/projects/FlexProjectConfigurator.java
----------------------------------------------------------------------
diff --git a/compiler/src/org/apache/flex/compiler/internal/projects/FlexProjectConfigurator.java b/compiler/src/org/apache/flex/compiler/internal/projects/FlexProjectConfigurator.java
index 14b98cf..64e5ba5 100644
--- a/compiler/src/org/apache/flex/compiler/internal/projects/FlexProjectConfigurator.java
+++ b/compiler/src/org/apache/flex/compiler/internal/projects/FlexProjectConfigurator.java
@@ -30,6 +30,7 @@ import org.apache.flex.abc.semantics.Namespace;
 import org.apache.flex.abc.semantics.Nsset;
 import org.apache.flex.compiler.config.Configuration;
 import org.apache.flex.compiler.internal.as.codegen.BindableHelper;
+import org.apache.flex.compiler.internal.definitions.ClassDefinition;
 import org.apache.flex.compiler.mxml.IMXMLTypeConstants;
 
 /**
@@ -180,18 +181,21 @@ public class FlexProjectConfigurator
         if (configuration != null)
         {
             String configValue = configuration.getBindingEventHandlerEvent();
+            ClassDefinition.Event = configValue;
             int dotIndex;
             dotIndex = configValue.lastIndexOf(".");
             String packageName = configValue.substring(0, dotIndex);
             String className = configValue.substring(dotIndex + 1);
             BindableHelper.NAME_EVENT = new Name(CONSTANT_Qname, new Nsset(new Namespace(CONSTANT_PackageNs, packageName)), className);
+            BindableHelper.STRING_EVENT = configValue;
             
             configValue = configuration.getBindingEventHandlerClass();
             dotIndex = configValue.lastIndexOf(".");
             packageName = configValue.substring(0, dotIndex);
             className = configValue.substring(dotIndex + 1);
             BindableHelper.NAME_EVENT_DISPATCHER = new Name(CONSTANT_Qname, new Nsset(new Namespace(CONSTANT_PackageNs, packageName)), className);
-    
+            BindableHelper.STRING_EVENT_DISPATCHER = configValue;
+            
             configValue = configuration.getBindingEventHandlerInterface();
             dotIndex = configValue.lastIndexOf(".");
             packageName = configValue.substring(0, dotIndex);

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/2d9e4234/compiler/src/org/apache/flex/compiler/internal/units/ASCompilationUnit.java
----------------------------------------------------------------------
diff --git a/compiler/src/org/apache/flex/compiler/internal/units/ASCompilationUnit.java b/compiler/src/org/apache/flex/compiler/internal/units/ASCompilationUnit.java
index 54cd6e0..090e714 100644
--- a/compiler/src/org/apache/flex/compiler/internal/units/ASCompilationUnit.java
+++ b/compiler/src/org/apache/flex/compiler/internal/units/ASCompilationUnit.java
@@ -33,6 +33,7 @@ import org.apache.flex.compiler.common.IMetaInfo;
 import org.apache.flex.compiler.definitions.IDefinition;
 import org.apache.flex.compiler.filespecs.FileSpecification;
 import org.apache.flex.compiler.filespecs.IFileSpecification;
+import org.apache.flex.compiler.internal.as.codegen.BindableHelper;
 import org.apache.flex.compiler.internal.as.codegen.CodeGeneratorManager;
 import org.apache.flex.compiler.internal.parsing.as.ASParser;
 import org.apache.flex.compiler.internal.parsing.as.ASToken;
@@ -44,6 +45,7 @@ import org.apache.flex.compiler.internal.scopes.ASFileScope;
 import org.apache.flex.compiler.internal.semantics.PostProcessStep;
 import org.apache.flex.compiler.internal.tree.as.BaseDefinitionNode;
 import org.apache.flex.compiler.internal.tree.as.ClassNode;
+import org.apache.flex.compiler.internal.tree.as.ExpressionNodeBase;
 import org.apache.flex.compiler.internal.tree.as.FileNode;
 import org.apache.flex.compiler.internal.tree.as.FullNameNode;
 import org.apache.flex.compiler.internal.tree.as.IdentifierNode;
@@ -387,16 +389,27 @@ public class ASCompilationUnit extends CompilationUnitBase
                         {
                             // bindable class extends Object, must switch to
                             // extend EventDispatcher
-                            IdentifierNode baseClassNode = new IdentifierNode("EventDispatcher");
+                            String bindableBaseClassName = BindableHelper.STRING_EVENT_DISPATCHER;
+                            String[] pieces = bindableBaseClassName.split("\\.");
+                            int n = pieces.length;
+                            IdentifierNode baseClassNode = new IdentifierNode(pieces[n - 1]); // "EventDispatcher"
                             baseClassNode.setParent(classNode);
                             classNode.setBaseClass(baseClassNode);
-                            IdentifierNode flash = new IdentifierNode("flash");
-                            IdentifierNode events = new IdentifierNode("events");
-                            FullNameNode flashDotEvents = new FullNameNode(flash, 
-                                    new ASToken(ASToken.TOKEN_OPERATOR_MEMBER_ACCESS, 0, 0, 0, 0, "."), events);
-                            FullNameNode fullNameNode = new FullNameNode(flashDotEvents,
-                                    new ASToken(ASToken.TOKEN_OPERATOR_MEMBER_ACCESS, 0, 0, 0, 0, "."), 
-                                    baseClassNode);
+                            ExpressionNodeBase lastNode = null;
+                            for (int i = 0; i < n - 1; i++)
+                            {
+                                IdentifierNode part = new IdentifierNode(pieces[i]);
+                                if (i > 0)
+                                {
+                                    FullNameNode packageNode = new FullNameNode(lastNode,
+                                            new ASToken(ASToken.TOKEN_OPERATOR_MEMBER_ACCESS, 0, 0, 0, 0, "."), part);
+                                    lastNode = packageNode;
+                                }
+                                else
+                                    lastNode = part;
+                            }
+                            FullNameNode fullNameNode = new FullNameNode(lastNode,
+                                    new ASToken(ASToken.TOKEN_OPERATOR_MEMBER_ACCESS, 0, 0, 0, 0, "."), baseClassNode);
                             ImportNode importNode = new ImportNode(fullNameNode);
                             ScopedBlockNode sbn = (ScopedBlockNode)pkg.getChild(1);
                             sbn.addChild(importNode, 0);
@@ -416,7 +429,7 @@ public class ASCompilationUnit extends CompilationUnitBase
                 getProject().clearScopeCacheForCompilationUnit(this);
                 ast.runPostProcess(EnumSet.of(PostProcessStep.POPULATE_SCOPE));
                 if (isBindable)
-                    pkg.getASScope().addImport("flash.events.EventDispatcher");
+                    pkg.getASScope().addImport(BindableHelper.STRING_EVENT_DISPATCHER);
             }
             final ImmutableSet<String> includedFiles = ast.getIncludeHandler().getIncludedFiles();
             addScopeToProjectScope(new ASFileScope[] { ast.getFileScope() });