You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by ft...@apache.org on 2015/06/02 14:42:08 UTC

[01/35] git commit: [flex-falcon] [refs/heads/IDEA-FLEX_JS_COMPILER] - Removed/Fixed all warnings in falcon compiler projects (18).

Repository: flex-falcon
Updated Branches:
  refs/heads/IDEA-FLEX_JS_COMPILER a1dae4719 -> 2a9b27c02


Removed/Fixed all warnings in falcon compiler projects (18).


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

Branch: refs/heads/IDEA-FLEX_JS_COMPILER
Commit: 85e25c1567aeae731ee799b82a6f6c34f0061a3c
Parents: a1dae47
Author: Michael Schmalle <ms...@apache.org>
Authored: Tue May 26 17:52:36 2015 -0400
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:39:59 2015 +0100

----------------------------------------------------------------------
 .../codegen/js/flexjs/TestFlexJSAccessorMembers.java  |  2 --
 .../apache/flex/compiler/clients/VF2JSToolGroup.java  |  1 -
 .../internal/codegen/js/flexjs/JSFlexJSEmitter.java   |  5 +++--
 .../internal/codegen/js/goog/JSGoogPublisher.java     |  8 ++++++--
 .../codegen/mxml/flexjs/MXMLFlexJSPublisher.java      | 14 +++++++-------
 .../internal/parsing/as/FlexJSASDocDelegate.java      |  3 ++-
 .../org/apache/flex/compiler/utils/ASNodeUtils.java   |  1 -
 .../compiler/utils/VF2JSClosureCompilerWrapper.java   |  1 -
 .../internal/codegen/databinding/WatcherAnalyzer.java |  1 -
 .../internal/parsing/mxml/MXMLScopeBuilder.java       | 10 ++++------
 .../compiler/internal/tree/mxml/MXMLInstanceNode.java | 13 ++++++++++---
 11 files changed, 32 insertions(+), 27 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/85e25c15/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSAccessorMembers.java
----------------------------------------------------------------------
diff --git a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSAccessorMembers.java b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSAccessorMembers.java
index 4d31db8..d1d35a5 100644
--- a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSAccessorMembers.java
+++ b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSAccessorMembers.java
@@ -23,8 +23,6 @@ import org.apache.flex.compiler.driver.IBackend;
 import org.apache.flex.compiler.internal.codegen.js.goog.TestGoogAccessorMembers;
 import org.apache.flex.compiler.internal.driver.js.flexjs.FlexJSBackend;
 import org.apache.flex.compiler.tree.as.IClassNode;
-import org.apache.flex.compiler.tree.as.IGetterNode;
-import org.apache.flex.compiler.tree.as.ISetterNode;
 import org.junit.Test;
 
 /**

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/85e25c15/compiler.jx/src/org/apache/flex/compiler/clients/VF2JSToolGroup.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/clients/VF2JSToolGroup.java b/compiler.jx/src/org/apache/flex/compiler/clients/VF2JSToolGroup.java
index 3c72962..07cb796 100644
--- a/compiler.jx/src/org/apache/flex/compiler/clients/VF2JSToolGroup.java
+++ b/compiler.jx/src/org/apache/flex/compiler/clients/VF2JSToolGroup.java
@@ -19,7 +19,6 @@
 
 package org.apache.flex.compiler.clients;
 
-import org.apache.flex.compiler.internal.driver.mxml.vf2js.MXMLVF2JSBackend;
 import org.apache.flex.tools.AbstractFlexToolGroup;
 
 /**

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/85e25c15/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 d709929..ff44ab3 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
@@ -969,7 +969,8 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
     }
 
     //--------------------------------------------------------------------------
-    @Override
+    
+	@Override
     protected void emitSuperCall(IASNode node, String type)
     {
         IFunctionNode fnode = (node instanceof IFunctionNode) ? (IFunctionNode) node
@@ -1028,7 +1029,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
 		
 		            writeArguments = (anodes != null && anodes.length > 0);
 		        }
-		        else if (fnode == null && node instanceof BinaryOperatorAssignmentNode)
+		        else if (node instanceof IFunctionNode && node instanceof BinaryOperatorAssignmentNode)
 		        {
 		            BinaryOperatorAssignmentNode bnode = (BinaryOperatorAssignmentNode) node;
 		            

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/85e25c15/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogPublisher.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogPublisher.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogPublisher.java
index a37974e..bceda53 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogPublisher.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogPublisher.java
@@ -266,8 +266,10 @@ public class JSGoogPublisher extends JSPublisher implements IJSPublisher
     }
 
 
-    protected void dumpJar(File jarFile, File outputDir) throws IOException {
-        JarFile jar = new JarFile(jarFile);
+    protected void dumpJar(File jarFile, File outputDir) throws IOException {       
+        // TODO (mschmalle) for some reason ide thinks this has not been closed
+        @SuppressWarnings("resource")
+		JarFile jar = new JarFile(jarFile);
 
         for (Enumeration<JarEntry> jarEntries = jar.entries(); jarEntries.hasMoreElements();) {
             JarEntry jarEntry = jarEntries.nextElement();
@@ -292,6 +294,8 @@ public class JSGoogPublisher extends JSPublisher implements IJSPublisher
                 is.close();
             }
         }
+        
+        jar.close();
     }
 
     public class JSGoogErrorManager implements ErrorManager

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/85e25c15/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
index af11b15..5b1e436 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
@@ -26,11 +26,8 @@ import java.io.InputStreamReader;
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.Comparator;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Scanner;
 
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.FilenameUtils;
@@ -136,8 +133,9 @@ public class MXMLFlexJSPublisher extends JSGoogPublisher implements
     @Override
     public boolean publish(ProblemQuery problems) throws IOException
     {
-        boolean ok;
-        boolean subsetGoog = true;
+        @SuppressWarnings("unused")
+		boolean ok;
+        //boolean subsetGoog = true;
         
         final String intermediateDirPath = outputFolder.getPath();
         final File intermediateDir = new File(intermediateDirPath);
@@ -208,7 +206,8 @@ public class MXMLFlexJSPublisher extends JSGoogPublisher implements
         }
 
         // Dump FlexJS to the target directory.
-        String flexJsLibDirPath;
+        @SuppressWarnings("unused")
+		String flexJsLibDirPath;
         // Check if the "FlexJS/src/createjs_externals.js" is available in the classpath.
         URL resource = Thread.currentThread().getContextClassLoader().getResource("FlexJS/src/createjs_externals.js");
         if(resource != null) {
@@ -247,7 +246,8 @@ public class MXMLFlexJSPublisher extends JSGoogPublisher implements
                 + "/library/closure/goog";
         //final String depsSrcFilePath = intermediateDirPath
         //        + "/library/closure/goog/deps.js";
-        final String depsTgtFilePath = intermediateDirPath + "/deps.js";
+        @SuppressWarnings("unused")
+		final String depsTgtFilePath = intermediateDirPath + "/deps.js";
         final String projectIntermediateJSFilePath = intermediateDirPath
                 + File.separator + outputFileName;
         final String projectReleaseJSFilePath = releaseDirPath

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/85e25c15/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 58185f6..868e5d7 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
@@ -75,7 +75,8 @@ public final class FlexJSASDocDelegate implements IASDocDelegate
 
     private static final class ASDelegate implements IASParserASDocDelegate
     {
-        static final ASDelegate INSTANCE = new ASDelegate();
+        @SuppressWarnings("unused")
+		static final ASDelegate INSTANCE = new ASDelegate();
 
         @Override
         public void beforeVariable()

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/85e25c15/compiler.jx/src/org/apache/flex/compiler/utils/ASNodeUtils.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/utils/ASNodeUtils.java b/compiler.jx/src/org/apache/flex/compiler/utils/ASNodeUtils.java
index eb46626..b7c524e 100644
--- a/compiler.jx/src/org/apache/flex/compiler/utils/ASNodeUtils.java
+++ b/compiler.jx/src/org/apache/flex/compiler/utils/ASNodeUtils.java
@@ -23,7 +23,6 @@ import java.util.ArrayList;
 
 import org.apache.flex.compiler.tree.ASTNodeID;
 import org.apache.flex.compiler.tree.as.IASNode;
-import org.apache.flex.compiler.tree.as.IBinaryOperatorNode;
 import org.apache.flex.compiler.tree.as.IBlockNode;
 import org.apache.flex.compiler.tree.as.IConditionalNode;
 import org.apache.flex.compiler.tree.as.IExpressionNode;

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/85e25c15/compiler.jx/src/org/apache/flex/compiler/utils/VF2JSClosureCompilerWrapper.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/utils/VF2JSClosureCompilerWrapper.java b/compiler.jx/src/org/apache/flex/compiler/utils/VF2JSClosureCompilerWrapper.java
index 9b188b9..9e66b9c 100644
--- a/compiler.jx/src/org/apache/flex/compiler/utils/VF2JSClosureCompilerWrapper.java
+++ b/compiler.jx/src/org/apache/flex/compiler/utils/VF2JSClosureCompilerWrapper.java
@@ -31,7 +31,6 @@ import com.google.javascript.jscomp.CommandLineRunner;
 import com.google.javascript.jscomp.CompilationLevel;
 import com.google.javascript.jscomp.Compiler;
 import com.google.javascript.jscomp.CompilerOptions;
-import com.google.javascript.jscomp.CompilerOptions.LanguageMode;
 import com.google.javascript.jscomp.DiagnosticGroups;
 import com.google.javascript.jscomp.SourceFile;
 import com.google.javascript.jscomp.SourceMap;

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/85e25c15/compiler/src/org/apache/flex/compiler/internal/codegen/databinding/WatcherAnalyzer.java
----------------------------------------------------------------------
diff --git a/compiler/src/org/apache/flex/compiler/internal/codegen/databinding/WatcherAnalyzer.java b/compiler/src/org/apache/flex/compiler/internal/codegen/databinding/WatcherAnalyzer.java
index 35471f2..8dcdf8e 100644
--- a/compiler/src/org/apache/flex/compiler/internal/codegen/databinding/WatcherAnalyzer.java
+++ b/compiler/src/org/apache/flex/compiler/internal/codegen/databinding/WatcherAnalyzer.java
@@ -24,7 +24,6 @@ import java.util.Collections;
 import java.util.List;
 
 import org.apache.flex.compiler.constants.IASKeywordConstants;
-import org.apache.flex.compiler.constants.IASLanguageConstants;
 import org.apache.flex.compiler.definitions.IClassDefinition;
 import org.apache.flex.compiler.definitions.IConstantDefinition;
 import org.apache.flex.compiler.definitions.IDefinition;

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/85e25c15/compiler/src/org/apache/flex/compiler/internal/parsing/mxml/MXMLScopeBuilder.java
----------------------------------------------------------------------
diff --git a/compiler/src/org/apache/flex/compiler/internal/parsing/mxml/MXMLScopeBuilder.java b/compiler/src/org/apache/flex/compiler/internal/parsing/mxml/MXMLScopeBuilder.java
index 1ed54dd..79e59c2 100644
--- a/compiler/src/org/apache/flex/compiler/internal/parsing/mxml/MXMLScopeBuilder.java
+++ b/compiler/src/org/apache/flex/compiler/internal/parsing/mxml/MXMLScopeBuilder.java
@@ -19,6 +19,8 @@
 
 package org.apache.flex.compiler.internal.parsing.mxml;
 
+import static org.apache.flex.compiler.mxml.IMXMLLanguageConstants.ATTRIBUTE_NAME;
+
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.Reader;
@@ -29,7 +31,6 @@ import java.util.LinkedList;
 import java.util.List;
 
 import org.apache.commons.io.IOUtils;
-
 import org.apache.flex.compiler.common.IFileSpecificationGetter;
 import org.apache.flex.compiler.common.Multiname;
 import org.apache.flex.compiler.definitions.IDefinition;
@@ -57,13 +58,12 @@ import org.apache.flex.compiler.internal.tree.mxml.MXMLNodeBase;
 import org.apache.flex.compiler.internal.units.MXMLCompilationUnit;
 import org.apache.flex.compiler.internal.workspaces.Workspace;
 import org.apache.flex.compiler.mxml.IMXMLData;
-import org.apache.flex.compiler.mxml.IMXMLTagAttributeData;
 import org.apache.flex.compiler.mxml.IMXMLLanguageConstants;
+import org.apache.flex.compiler.mxml.IMXMLNamespaceAttributeData;
+import org.apache.flex.compiler.mxml.IMXMLTagAttributeData;
 import org.apache.flex.compiler.mxml.IMXMLTagData;
 import org.apache.flex.compiler.mxml.IMXMLTextData;
 import org.apache.flex.compiler.mxml.IMXMLTextData.TextType;
-import org.apache.flex.compiler.mxml.IMXMLTypeConstants;
-import org.apache.flex.compiler.mxml.IMXMLNamespaceAttributeData;
 import org.apache.flex.compiler.mxml.IMXMLUnitData;
 import org.apache.flex.compiler.problems.ICompilerProblem;
 import org.apache.flex.compiler.problems.MXMLLibraryTagNotTheFirstChildProblem;
@@ -72,8 +72,6 @@ import org.apache.flex.compiler.problems.MXMLUnresolvedTagProblem;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Iterables;
 
-import static org.apache.flex.compiler.mxml.IMXMLLanguageConstants.*;
-
 /**
  * This class analyzes the tags and attributes of an MXML file, as represented
  * in an MXMLData object, and builds an ASFileScope which is the

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/85e25c15/compiler/src/org/apache/flex/compiler/internal/tree/mxml/MXMLInstanceNode.java
----------------------------------------------------------------------
diff --git a/compiler/src/org/apache/flex/compiler/internal/tree/mxml/MXMLInstanceNode.java b/compiler/src/org/apache/flex/compiler/internal/tree/mxml/MXMLInstanceNode.java
index 203fdad..4d5072b 100644
--- a/compiler/src/org/apache/flex/compiler/internal/tree/mxml/MXMLInstanceNode.java
+++ b/compiler/src/org/apache/flex/compiler/internal/tree/mxml/MXMLInstanceNode.java
@@ -19,6 +19,16 @@
 
 package org.apache.flex.compiler.internal.tree.mxml;
 
+import static org.apache.flex.compiler.mxml.IMXMLLanguageConstants.ATTRIBUTE_EXCLUDE_FROM;
+import static org.apache.flex.compiler.mxml.IMXMLLanguageConstants.ATTRIBUTE_ID;
+import static org.apache.flex.compiler.mxml.IMXMLLanguageConstants.ATTRIBUTE_INCLUDE_IN;
+import static org.apache.flex.compiler.mxml.IMXMLLanguageConstants.ATTRIBUTE_ITEM_CREATION_POLICY;
+import static org.apache.flex.compiler.mxml.IMXMLLanguageConstants.ATTRIBUTE_ITEM_DESTRUCTION_POLICY;
+import static org.apache.flex.compiler.mxml.IMXMLLanguageConstants.ITEM_CREATION_POLICY_DEFERRED;
+import static org.apache.flex.compiler.mxml.IMXMLLanguageConstants.ITEM_CREATION_POLICY_IMMEDIATE;
+import static org.apache.flex.compiler.mxml.IMXMLLanguageConstants.ITEM_DESTRUCTION_POLICY_AUTO;
+import static org.apache.flex.compiler.mxml.IMXMLLanguageConstants.ITEM_DESTRUCTION_POLICY_NEVER;
+
 import org.apache.flex.compiler.common.DependencyType;
 import org.apache.flex.compiler.constants.IASLanguageConstants;
 import org.apache.flex.compiler.definitions.IClassDefinition;
@@ -30,7 +40,6 @@ import org.apache.flex.compiler.internal.scopes.ASScope;
 import org.apache.flex.compiler.internal.tree.as.NodeBase;
 import org.apache.flex.compiler.mxml.IMXMLTagAttributeData;
 import org.apache.flex.compiler.mxml.IMXMLTagData;
-import org.apache.flex.compiler.mxml.IMXMLTypeConstants;
 import org.apache.flex.compiler.problems.ICompilerProblem;
 import org.apache.flex.compiler.problems.MXMLAttributeVersionProblem;
 import org.apache.flex.compiler.problems.MXMLDuplicateIDProblem;
@@ -44,8 +53,6 @@ import org.apache.flex.compiler.tree.as.IASNode;
 import org.apache.flex.compiler.tree.mxml.IMXMLClassReferenceNode;
 import org.apache.flex.compiler.tree.mxml.IMXMLInstanceNode;
 
-import static org.apache.flex.compiler.mxml.IMXMLLanguageConstants.*;
-
 class MXMLInstanceNode extends MXMLClassReferenceNodeBase implements IMXMLInstanceNode
 {
     protected static MXMLInstanceNode createInstanceNode(MXMLTreeBuilder builder,


[18/35] git commit: [flex-falcon] [refs/heads/IDEA-FLEX_JS_COMPILER] - Quick commit to keep get everything in the repo before Mike goes wild

Posted by ft...@apache.org.
Quick commit to keep get everything in the repo before Mike goes wild

Signed-off-by: Erik de Bruin <er...@ixsoftware.nl>


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

Branch: refs/heads/IDEA-FLEX_JS_COMPILER
Commit: 36722ba5824183c8830b2aa81e4afa349f8b22f3
Parents: e5ac5e1
Author: Erik de Bruin <er...@ixsoftware.nl>
Authored: Sun May 31 19:39:40 2015 +0200
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:40:50 2015 +0100

----------------------------------------------------------------------
 .../internal/codegen/js/vf2js/TestVF2JSStatements.java      | 4 ++--
 .../org/apache/flex/compiler/internal/test/TestBase.java    | 2 +-
 .../projects/simpleMXML/src/SimpleMXML_Project_result.js    | 2 +-
 compiler.jx.tests/test-files/vf2js/projects/super/Base.as   | 2 ++
 .../compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java  | 9 ++++-----
 5 files changed, 10 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/36722ba5/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/vf2js/TestVF2JSStatements.java
----------------------------------------------------------------------
diff --git a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/vf2js/TestVF2JSStatements.java b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/vf2js/TestVF2JSStatements.java
index 3385b47..8327fcf 100644
--- a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/vf2js/TestVF2JSStatements.java
+++ b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/vf2js/TestVF2JSStatements.java
@@ -346,7 +346,7 @@ public class TestVF2JSStatements extends TestGoogStatements
         IIfNode node = (IIfNode) getNode(
                 "if (numChildren == 0) { if (!typeDescription.@dynamic) { trace(\"warning: no describeType entry for '\" + childName + \"' on non-dynamic type '\" + typeDescription.@name + \"'\"); } }", IIfNode.class);
         asBlockWalker.visitIf(node);
-        assertOut("if (numChildren == 0) {\n  if (!this.typeDescription['E4XOperator']) {\n    org_apache_flex_utils_Language.trace(\"warning: no describeType entry for '\" + childName + \"' on non-dynamic type '\" + this.typeDescription['E4XOperator'] + \"'\");\n  }\n}");
+        assertOut("if (numChildren == 0) {\n  if (!typeDescription['E4XOperator']) {\n    org_apache_flex_utils_Language.trace(\"warning: no describeType entry for '\" + childName + \"' on non-dynamic type '\" + typeDescription['E4XOperator'] + \"'\");\n  }\n}");
     }
     
     @Test
@@ -355,7 +355,7 @@ public class TestVF2JSStatements extends TestGoogStatements
     	IIfNode node = (IIfNode) getNode(
     			"if (options.includeReadOnly) { properties = classInfo..accessor.(@access != \"writeonly\") + classInfo..variable; }", IIfNode.class);
     	asBlockWalker.visitIf(node);
-    	assertOut("if (options.includeReadOnly) {\n  properties = 'E4XFilter' + this.classInfo['E4XSelector'];\n}");
+    	assertOut("if (options.includeReadOnly) {\n  properties = 'E4XFilter' + classInfo['E4XSelector'];\n}");
     }
     
     @Test

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/36722ba5/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/TestBase.java
----------------------------------------------------------------------
diff --git a/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/TestBase.java b/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/TestBase.java
index 2a2e90b..3b4f464 100644
--- a/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/TestBase.java
+++ b/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/TestBase.java
@@ -261,7 +261,7 @@ public class TestBase implements ITestBase
 
                     walker.visitCompilationUnit(cu);
 
-                    //System.out.println(writer.toString());
+                    System.out.println(writer.toString());
 
                     BufferedOutputStream out = new BufferedOutputStream(
                             new FileOutputStream(outputClassFile));

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/36722ba5/compiler.jx.tests/test-files/vf2js/projects/simpleMXML/src/SimpleMXML_Project_result.js
----------------------------------------------------------------------
diff --git a/compiler.jx.tests/test-files/vf2js/projects/simpleMXML/src/SimpleMXML_Project_result.js b/compiler.jx.tests/test-files/vf2js/projects/simpleMXML/src/SimpleMXML_Project_result.js
index e34f12d..d493d28 100644
--- a/compiler.jx.tests/test-files/vf2js/projects/simpleMXML/src/SimpleMXML_Project_result.js
+++ b/compiler.jx.tests/test-files/vf2js/projects/simpleMXML/src/SimpleMXML_Project_result.js
@@ -23,7 +23,7 @@ goog.provide('SimpleMXML_Project');
 
 goog.require('spark.components.Application');
 goog.require('example.Component');
-goog.require('org_apache_flex_utils_Language');
+goog.require('org.apache.flex.utils.Language');
 
 
 

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/36722ba5/compiler.jx.tests/test-files/vf2js/projects/super/Base.as
----------------------------------------------------------------------
diff --git a/compiler.jx.tests/test-files/vf2js/projects/super/Base.as b/compiler.jx.tests/test-files/vf2js/projects/super/Base.as
index ee69d65..7c2330c 100644
--- a/compiler.jx.tests/test-files/vf2js/projects/super/Base.as
+++ b/compiler.jx.tests/test-files/vf2js/projects/super/Base.as
@@ -52,6 +52,8 @@ public class Base extends Super
 	public function getNumber():void
 	{
 		alert(super.doStuff());
+
+		alert(Math.max(0, super.x - 1));
 		
 		var x:Number = super.x;
 	}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/36722ba5/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
index b11193b..68d0cb6 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
@@ -990,7 +990,10 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
     	if (pfnode == null)
     		return false;
     	
-    	return pfnode.getName().equals(node.getName());
+    	String parentName = pfnode.getName();
+    	String currentName = node.getName();
+    	
+    	return parentName.equals(currentName);
     }
     
     //--------------------------------------------------------------------------
@@ -1359,8 +1362,6 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
                 {
             		// ToDo (erikdebruin): properly handle E4X
             		
-                    write(ASEmitterTokens.THIS);
-                    write(ASEmitterTokens.MEMBER_ACCESS);
                     getWalker().walk(node.getLeftOperandNode());
                     write(ASEmitterTokens.SQUARE_OPEN);
                     write(ASEmitterTokens.SINGLE_QUOTE);
@@ -1373,8 +1374,6 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
             	{
             		// ToDo (erikdebruin): properly handle E4X
             		
-                    write(ASEmitterTokens.THIS);
-                    write(ASEmitterTokens.MEMBER_ACCESS);
                     getWalker().walk(node.getLeftOperandNode());
                     write(ASEmitterTokens.SQUARE_OPEN);
                     write(ASEmitterTokens.SINGLE_QUOTE);


[06/35] git commit: [flex-falcon] [refs/heads/IDEA-FLEX_JS_COMPILER] - - Refactored filed emittion into FieldEmitter.

Posted by ft...@apache.org.
- Refactored filed emittion into FieldEmitter.


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

Branch: refs/heads/IDEA-FLEX_JS_COMPILER
Commit: 1b8640271d67be12f0fff5b846e017fc69482a3a
Parents: ab1c421
Author: Michael Schmalle <ms...@apache.org>
Authored: Sat May 30 17:51:56 2015 -0400
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:40:09 2015 +0100

----------------------------------------------------------------------
 .../codegen/js/flexjs/JSFlexJSEmitter.java      |  62 +---------
 .../internal/codegen/js/goog/JSGoogEmitter.java |  10 +-
 .../internal/codegen/js/jx/FieldEmitter.java    | 112 +++++++++++++++++++
 .../internal/codegen/js/utils/EmitterUtils.java |   8 ++
 .../codegen/js/vf2js/JSVF2JSEmitter.java        |   3 +-
 5 files changed, 128 insertions(+), 67 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/1b864027/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 c6ba8d8..ec5c2db 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
@@ -49,6 +49,7 @@ import org.apache.flex.compiler.internal.codegen.js.JSSessionModel.PropertyNodes
 import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitter;
 import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitterTokens;
 import org.apache.flex.compiler.internal.codegen.js.jx.ClassEmitter;
+import org.apache.flex.compiler.internal.codegen.js.jx.FieldEmitter;
 import org.apache.flex.compiler.internal.definitions.AccessorDefinition;
 import org.apache.flex.compiler.internal.definitions.ClassDefinition;
 import org.apache.flex.compiler.internal.definitions.FunctionDefinition;
@@ -61,7 +62,6 @@ import org.apache.flex.compiler.internal.scopes.ASProjectScope;
 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;
@@ -112,6 +112,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
     private int foreachLoopCounter = 0;
     
     private ClassEmitter classEmitter;
+    private FieldEmitter fieldEmitter;
 
     public ClassEmitter getClassEmiter()
     {
@@ -123,6 +124,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
         super(out);
 
         classEmitter = new ClassEmitter(this);
+        fieldEmitter = new FieldEmitter(this);
     }
 
     @Override
@@ -155,63 +157,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
     @Override
     public void emitField(IVariableNode node)
     {
-        IDefinition definition = getClassDefinition(node);
-
-        IDefinition def = null;
-        IExpressionNode enode = node.getVariableTypeNode();//getAssignedValueNode();
-        if (enode != null)
-        {
-            if (project == null)
-                project = getWalker().getProject();
-
-            def = enode.resolveType(project);
-        }
-
-        getDoc().emitFieldDoc(node, def);
-
-        IDefinition ndef = node.getDefinition();
-
-        ModifiersSet modifierSet = ndef.getModifiers();
-        String root = "";
-        if (modifierSet != null && !modifierSet.hasModifier(ASModifier.STATIC))
-        {
-            root = JSEmitterTokens.PROTOTYPE.getToken();
-            root += ASEmitterTokens.MEMBER_ACCESS.getToken();
-        }
-
-        if (definition == null)
-            definition = ndef.getContainingScope().getDefinition();
-
-        write(formatQualifiedName(definition.getQualifiedName())
-                + ASEmitterTokens.MEMBER_ACCESS.getToken() + root
-                + node.getName());
-
-        IExpressionNode vnode = node.getAssignedValueNode();
-        if (vnode != null)
-        {
-            write(ASEmitterTokens.SPACE);
-            writeToken(ASEmitterTokens.EQUAL);
-            getWalker().walk(vnode);
-        }
-
-        if (!(node instanceof ChainedVariableNode))
-        {
-            int len = node.getChildCount();
-            for (int i = 0; i < len; i++)
-            {
-                IASNode child = node.getChild(i);
-                if (child instanceof ChainedVariableNode)
-                {
-                    writeNewline(ASEmitterTokens.SEMICOLON);
-                    writeNewline();
-                    emitField((IVariableNode) child);
-                }
-            }
-        }
-        if (node.getNodeID() == ASTNodeID.BindableVariableID)
-        {
-            getModel().getBindableVars().add(node.getName());
-        }
+        fieldEmitter.emit(node);
     }
 
     public void emitBindableVarDefineProperty(String name, IClassDefinition cdef)

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/1b864027/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
index d9ca745..db88672 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
@@ -40,6 +40,7 @@ import org.apache.flex.compiler.definitions.ITypeDefinition;
 import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
 import org.apache.flex.compiler.internal.codegen.js.JSEmitter;
 import org.apache.flex.compiler.internal.codegen.js.JSEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.utils.EmitterUtils;
 import org.apache.flex.compiler.internal.definitions.ClassDefinition;
 import org.apache.flex.compiler.internal.scopes.PackageScope;
 import org.apache.flex.compiler.internal.tree.as.ChainedVariableNode;
@@ -323,7 +324,7 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
     @Override
     public void emitField(IVariableNode node)
     {
-        IClassDefinition definition = getClassDefinition(node);
+        IClassDefinition definition = EmitterUtils.getClassDefinition(node);
 
         IDefinition def = null;
         IExpressionNode enode = node.getVariableTypeNode();//getAssignedValueNode();
@@ -939,13 +940,6 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
         return (ITypeDefinition) tnode.getDefinition();
     }
 
-    protected static IClassDefinition getClassDefinition(IDefinitionNode node)
-    {
-        IClassNode tnode = (IClassNode) node
-                .getAncestorOfType(IClassNode.class);
-        return (tnode != null) ? tnode.getDefinition() : null;
-    }
-
     private static IClassDefinition getSuperClassDefinition(
             IDefinitionNode node, ICompilerProject project)
     {

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/1b864027/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FieldEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FieldEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FieldEmitter.java
new file mode 100644
index 0000000..d63ffde
--- /dev/null
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FieldEmitter.java
@@ -0,0 +1,112 @@
+/*
+ *
+ *  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.js.jx;
+
+import org.apache.flex.compiler.codegen.ISubEmitter;
+import org.apache.flex.compiler.codegen.js.IJSEmitter;
+import org.apache.flex.compiler.codegen.js.goog.IJSGoogDocEmitter;
+import org.apache.flex.compiler.common.ASModifier;
+import org.apache.flex.compiler.common.ModifiersSet;
+import org.apache.flex.compiler.definitions.IDefinition;
+import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitter;
+import org.apache.flex.compiler.internal.codegen.js.utils.EmitterUtils;
+import org.apache.flex.compiler.internal.tree.as.ChainedVariableNode;
+import org.apache.flex.compiler.tree.ASTNodeID;
+import org.apache.flex.compiler.tree.as.IASNode;
+import org.apache.flex.compiler.tree.as.IExpressionNode;
+import org.apache.flex.compiler.tree.as.IVariableNode;
+
+public class FieldEmitter extends JSSubEmitter implements
+        ISubEmitter<IVariableNode>
+{
+    public FieldEmitter(IJSEmitter emitter)
+    {
+        super(emitter);
+    }
+
+    @Override
+    public void emit(IVariableNode node)
+    {
+        // TODO (mschmalle) will remove this cast as more things get abstracted
+        JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
+
+        IDefinition definition = EmitterUtils.getClassDefinition(node);
+
+        IDefinition def = null;
+        IExpressionNode enode = node.getVariableTypeNode();//getAssignedValueNode();
+        if (enode != null)
+        {
+            def = enode.resolveType(getProject());
+        }
+        
+        // TODO (mschmalle)
+        if (fjs.getDocEmitter() instanceof IJSGoogDocEmitter)
+        {
+            ((IJSGoogDocEmitter) fjs.getDocEmitter()).emitFieldDoc(node, def);
+        }
+
+        IDefinition ndef = node.getDefinition();
+
+        ModifiersSet modifierSet = ndef.getModifiers();
+        String root = "";
+        if (modifierSet != null && !modifierSet.hasModifier(ASModifier.STATIC))
+        {
+            root = JSEmitterTokens.PROTOTYPE.getToken();
+            root += ASEmitterTokens.MEMBER_ACCESS.getToken();
+        }
+
+        if (definition == null)
+            definition = ndef.getContainingScope().getDefinition();
+
+        write(fjs.formatQualifiedName(definition.getQualifiedName())
+                + ASEmitterTokens.MEMBER_ACCESS.getToken() + root
+                + node.getName());
+
+        IExpressionNode vnode = node.getAssignedValueNode();
+        if (vnode != null)
+        {
+            write(ASEmitterTokens.SPACE);
+            writeToken(ASEmitterTokens.EQUAL);
+            fjs.getWalker().walk(vnode);
+        }
+
+        if (!(node instanceof ChainedVariableNode))
+        {
+            int len = node.getChildCount();
+            for (int i = 0; i < len; i++)
+            {
+                IASNode child = node.getChild(i);
+                if (child instanceof ChainedVariableNode)
+                {
+                    writeNewline(ASEmitterTokens.SEMICOLON);
+                    writeNewline();
+                    fjs.emitField((IVariableNode) child);
+                }
+            }
+        }
+        if (node.getNodeID() == ASTNodeID.BindableVariableID)
+        {
+            getModel().getBindableVars().add(node.getName());
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/1b864027/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java
index 94a2120..9f6a99d 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java
@@ -30,6 +30,7 @@ import org.apache.flex.compiler.internal.definitions.ClassDefinition;
 import org.apache.flex.compiler.projects.ICompilerProject;
 import org.apache.flex.compiler.tree.ASTNodeID;
 import org.apache.flex.compiler.tree.as.IASNode;
+import org.apache.flex.compiler.tree.as.IClassNode;
 import org.apache.flex.compiler.tree.as.IDefinitionNode;
 import org.apache.flex.compiler.tree.as.IFunctionNode;
 import org.apache.flex.compiler.tree.as.IScopedNode;
@@ -118,4 +119,11 @@ public class EmitterUtils
         }
         return list;
     }
+    
+    public static IClassDefinition getClassDefinition(IDefinitionNode node)
+    {
+        IClassNode tnode = (IClassNode) node
+                .getAncestorOfType(IClassNode.class);
+        return (tnode != null) ? tnode.getDefinition() : null;
+    }
 }

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/1b864027/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
index ea68760..033215a 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
@@ -47,6 +47,7 @@ import org.apache.flex.compiler.internal.codegen.js.JSEmitterTokens;
 import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitterTokens;
 import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitter;
 import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.utils.EmitterUtils;
 import org.apache.flex.compiler.internal.definitions.AccessorDefinition;
 import org.apache.flex.compiler.internal.definitions.ClassDefinition;
 import org.apache.flex.compiler.internal.definitions.FunctionDefinition;
@@ -384,7 +385,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
     @Override
     public void emitField(IVariableNode node)
     {
-        IDefinition definition = getClassDefinition(node);
+        IDefinition definition = EmitterUtils.getClassDefinition(node);
 
         IDefinition def = null;
         IExpressionNode enode = node.getVariableTypeNode();//getAssignedValueNode();


[08/35] git commit: [flex-falcon] [refs/heads/IDEA-FLEX_JS_COMPILER] - - Refactored super calls into emitter. - Refactored binary operators into emitter. - Refactored identifier into emitter.

Posted by ft...@apache.org.
- Refactored super calls into emitter.
- Refactored binary operators into emitter.
- Refactored identifier into emitter.


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

Branch: refs/heads/IDEA-FLEX_JS_COMPILER
Commit: cca81f421eb9a3f5df3a748c5ab3ecc0f2d3d517
Parents: 62b62ec
Author: Michael Schmalle <ms...@apache.org>
Authored: Sat May 30 19:01:13 2015 -0400
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:40:16 2015 +0100

----------------------------------------------------------------------
 .../codegen/js/flexjs/JSFlexJSEmitter.java      | 475 +------------------
 .../codegen/js/jx/BinaryOperatorEmitter.java    | 271 +++++++++++
 .../codegen/js/jx/IdentifierEmitter.java        | 128 +++++
 .../codegen/js/jx/SuperCallEmitter.java         | 245 ++++++++++
 .../internal/codegen/js/utils/EmitterUtils.java | 125 ++++-
 5 files changed, 785 insertions(+), 459 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/cca81f42/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 4f5a57e..955e033 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
@@ -21,15 +21,9 @@ package org.apache.flex.compiler.internal.codegen.js.flexjs;
 
 import java.io.FilterWriter;
 import java.util.ArrayList;
-import java.util.Collection;
 import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
 
 import org.apache.flex.compiler.asdoc.flexjs.ASDocComment;
-import org.apache.flex.compiler.clients.MXMLJSC;
-import org.apache.flex.compiler.clients.MXMLJSC.JSOutputType;
 import org.apache.flex.compiler.codegen.IDocEmitter;
 import org.apache.flex.compiler.codegen.js.flexjs.IJSFlexJSEmitter;
 import org.apache.flex.compiler.common.ASModifier;
@@ -38,39 +32,29 @@ import org.apache.flex.compiler.common.ModifiersSet;
 import org.apache.flex.compiler.definitions.IClassDefinition;
 import org.apache.flex.compiler.definitions.IDefinition;
 import org.apache.flex.compiler.definitions.IFunctionDefinition;
-import org.apache.flex.compiler.definitions.IFunctionDefinition.FunctionClassification;
-import org.apache.flex.compiler.definitions.INamespaceDefinition;
 import org.apache.flex.compiler.definitions.IPackageDefinition;
 import org.apache.flex.compiler.definitions.ITypeDefinition;
 import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
 import org.apache.flex.compiler.internal.codegen.js.JSEmitterTokens;
-import org.apache.flex.compiler.internal.codegen.js.JSSessionModel;
 import org.apache.flex.compiler.internal.codegen.js.JSSessionModel.PropertyNodes;
 import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitter;
 import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.jx.BinaryOperatorEmitter;
 import org.apache.flex.compiler.internal.codegen.js.jx.ClassEmitter;
 import org.apache.flex.compiler.internal.codegen.js.jx.FieldEmitter;
 import org.apache.flex.compiler.internal.codegen.js.jx.FunctionCallEmitter;
+import org.apache.flex.compiler.internal.codegen.js.jx.IdentifierEmitter;
+import org.apache.flex.compiler.internal.codegen.js.jx.SuperCallEmitter;
 import org.apache.flex.compiler.internal.definitions.AccessorDefinition;
-import org.apache.flex.compiler.internal.definitions.ClassDefinition;
-import org.apache.flex.compiler.internal.definitions.FunctionDefinition;
-import org.apache.flex.compiler.internal.definitions.ParameterDefinition;
-import org.apache.flex.compiler.internal.definitions.VariableDefinition;
-import org.apache.flex.compiler.internal.projects.CompilerProject;
 import org.apache.flex.compiler.internal.projects.FlexJSProject;
 import org.apache.flex.compiler.internal.scopes.ASProjectScope;
 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.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.GetterNode;
-import org.apache.flex.compiler.internal.tree.as.ParameterNode;
 import org.apache.flex.compiler.internal.tree.as.RegExpLiteralNode;
 import org.apache.flex.compiler.internal.tree.as.SetterNode;
 import org.apache.flex.compiler.internal.tree.as.UnaryOperatorAtNode;
-import org.apache.flex.compiler.projects.ICompilerProject;
 import org.apache.flex.compiler.scopes.IASScope;
 import org.apache.flex.compiler.tree.ASTNodeID;
 import org.apache.flex.compiler.tree.as.IASNode;
@@ -82,7 +66,6 @@ import org.apache.flex.compiler.tree.as.IExpressionNode;
 import org.apache.flex.compiler.tree.as.IForLoopNode;
 import org.apache.flex.compiler.tree.as.IFunctionCallNode;
 import org.apache.flex.compiler.tree.as.IFunctionNode;
-import org.apache.flex.compiler.tree.as.IFunctionObjectNode;
 import org.apache.flex.compiler.tree.as.IGetterNode;
 import org.apache.flex.compiler.tree.as.IIdentifierNode;
 import org.apache.flex.compiler.tree.as.IInterfaceNode;
@@ -114,7 +97,10 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
     private ClassEmitter classEmitter;
     private FieldEmitter fieldEmitter;
     private FunctionCallEmitter functionCallEmitter;
-
+    private SuperCallEmitter superCallEmitter;
+    private BinaryOperatorEmitter binaryOperatorEmitter;
+    private IdentifierEmitter identifierEmitter;
+    
     public ClassEmitter getClassEmiter()
     {
         return classEmitter;
@@ -127,6 +113,9 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
         classEmitter = new ClassEmitter(this);
         fieldEmitter = new FieldEmitter(this);
         functionCallEmitter = new FunctionCallEmitter(this);
+        superCallEmitter = new SuperCallEmitter(this);
+        binaryOperatorEmitter = new BinaryOperatorEmitter(this);
+        identifierEmitter = new IdentifierEmitter(this);
     }
 
     @Override
@@ -244,207 +233,14 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
             super.emitSelfReference(node);
     }
 
-    private boolean writeThis(IIdentifierNode node)
-    {
-        IClassNode classNode = (IClassNode) node
-                .getAncestorOfType(IClassNode.class);
-
-        IDefinition nodeDef = ((IIdentifierNode) node).resolve(project);
-
-        IASNode parentNode = node.getParent();
-        ASTNodeID parentNodeId = parentNode.getNodeID();
-
-        IASNode firstChild = parentNode.getChild(0);
-
-        final IClassDefinition thisClass = getModel().getCurrentClass();
-
-        boolean identifierIsMemberAccess = parentNodeId == ASTNodeID.MemberAccessExpressionID;
-
-        if (classNode == null) // script in MXML and AS interface definitions
-        {
-            if (nodeDef instanceof ParameterDefinition)
-                return false;
-
-            if (nodeDef instanceof VariableDefinition)
-            {
-                IDefinition pdef = ((VariableDefinition) nodeDef).getParent();
-
-                if (thisClass == null || !isSameClass(pdef, thisClass, project))
-                    return false;
-
-                if (identifierIsMemberAccess)
-                    return node == firstChild;
-
-                return parentNodeId == ASTNodeID.ContainerID
-                        || !(parentNode instanceof ParameterNode);
-            }
-            else if (nodeDef instanceof AccessorDefinition)
-            {
-                IDefinition pdef = ((AccessorDefinition) nodeDef).getParent();
-
-                if (thisClass == null || !isSameClass(pdef, thisClass, project))
-                    return false;
-
-                if (identifierIsMemberAccess)
-                    return node == firstChild;
-
-                return true;
-            }
-            else if (parentNodeId == ASTNodeID.ContainerID
-                    && nodeDef instanceof FunctionDefinition)
-            {
-                return ((FunctionDefinition) nodeDef)
-                        .getFunctionClassification() == FunctionClassification.CLASS_MEMBER; // for 'goog.bind'
-            }
-            else
-            {
-                return parentNodeId == ASTNodeID.FunctionCallID
-                        && !(nodeDef instanceof AccessorDefinition)
-                        && !identifierIsMemberAccess;
-            }
-        }
-        else
-        {
-            if (nodeDef != null && !nodeDef.isInternal()
-                    && isClassMember(nodeDef, classNode))
-            {
-                if (identifierIsMemberAccess)
-                {
-                    return node == firstChild;
-                }
-                else
-                {
-                    boolean identifierIsLocalFunction = nodeDef instanceof FunctionDefinition
-                            && !(nodeDef instanceof AccessorDefinition)
-                            && ((FunctionDefinition) nodeDef)
-                                    .getFunctionClassification() == IFunctionDefinition.FunctionClassification.LOCAL;
-
-                    return !identifierIsLocalFunction;
-                }
-            }
-        }
-
-        return false;
-    }
-
-    private boolean isClassMember(IDefinition nodeDef, IClassNode classNode)
-    {
-        TypeScope cscope = (TypeScope) classNode.getDefinition()
-                .getContainedScope();
-
-        Set<INamespaceDefinition> nsSet = cscope.getNamespaceSet(project);
-        Collection<IDefinition> defs = new HashSet<IDefinition>();
-
-        cscope.getAllPropertiesForMemberAccess((CompilerProject) project, defs,
-                nsSet);
-
-        Iterator<IDefinition> visiblePropertiesIterator = defs.iterator();
-        while (visiblePropertiesIterator.hasNext())
-        {
-            if (nodeDef.getQualifiedName().equals(
-                    visiblePropertiesIterator.next().getQualifiedName()))
-                return true;
-        }
-
-        return false;
-    }
-
-    private boolean isSameClass(IDefinition pdef, IDefinition thisClass,
-            ICompilerProject project)
-    {
-        if (pdef == thisClass)
-            return true;
-
-        IDefinition cdef = ((ClassDefinition) thisClass)
-                .resolveBaseClass(project);
-        while (cdef != null)
-        {
-            // needs to be a loop
-            if (cdef == pdef)
-                return true;
-            cdef = ((ClassDefinition) cdef).resolveBaseClass(project);
-        }
-        return false;
-    }
-
     @Override
     public void emitIdentifier(IIdentifierNode node)
     {
-        if (project == null)
-            project = getWalker().getProject();
-
-        IDefinition nodeDef = ((IIdentifierNode) node).resolve(project);
-
-        IASNode parentNode = node.getParent();
-        ASTNodeID parentNodeId = parentNode.getNodeID();
-
-        boolean identifierIsAccessorFunction = nodeDef instanceof AccessorDefinition;
-        boolean identifierIsPlainFunction = nodeDef instanceof FunctionDefinition
-                && !identifierIsAccessorFunction;
-
-        boolean emitName = true;
-
-        if (nodeDef != null && nodeDef.isStatic())
-        {
-            String sname = nodeDef.getParent().getQualifiedName();
-            if (sname.length() > 0)
-            {
-                write(formatQualifiedName(sname));
-                write(ASEmitterTokens.MEMBER_ACCESS);
-            }
-        }
-        else if (!NativeUtils.isNative(node.getName()))
-        {
-            // an instance method as a parameter or
-            // a local function
-            boolean useGoogBind = (parentNodeId == ASTNodeID.ContainerID
-                    && identifierIsPlainFunction && ((FunctionDefinition) nodeDef)
-                    .getFunctionClassification() == FunctionClassification.CLASS_MEMBER)
-                    || (identifierIsPlainFunction && ((FunctionDefinition) nodeDef)
-                            .getFunctionClassification() == FunctionClassification.LOCAL);
-
-            if (useGoogBind)
-            {
-                write(JSGoogEmitterTokens.GOOG_BIND);
-                write(ASEmitterTokens.PAREN_OPEN);
-            }
-
-            if (writeThis(node))
-            {
-                IFunctionObjectNode functionObjectNode = (IFunctionObjectNode) node
-                        .getParent().getAncestorOfType(
-                                IFunctionObjectNode.class);
-
-                if (functionObjectNode != null)
-                    write(JSGoogEmitterTokens.SELF);
-                else
-                    write(ASEmitterTokens.THIS);
-
-                write(ASEmitterTokens.MEMBER_ACCESS);
-            }
-
-            if (useGoogBind)
-            {
-                write(node.getName());
-
-                writeToken(ASEmitterTokens.COMMA);
-                write(ASEmitterTokens.THIS);
-                write(ASEmitterTokens.PAREN_CLOSE);
-
-                emitName = false;
-            }
-        }
-
-        //IDefinition parentDef = (nodeDef != null) ? nodeDef.getParent() : null;
-        //boolean isNative = (parentDef != null)
-        //        && NativeUtils.isNative(parentDef.getBaseName());
-        if (emitName)
-        {
-            if (nodeDef != null)
-                write(formatQualifiedName(nodeDef.getQualifiedName()));
-            else
-                write(node.getName());
-        }
+        // TODO (mschmalle) remove when project field is removed
+      if (project == null)
+          project = getWalker().getProject();
+        
+        identifierEmitter.emit(node);
     }
 
     //--------------------------------------------------------------------------
@@ -452,250 +248,13 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
     @Override
     public void emitSuperCall(IASNode node, String type)
     {
-        IFunctionNode fnode = (node instanceof IFunctionNode) ? (IFunctionNode) node
-                : null;
-        IFunctionCallNode fcnode = (node instanceof IFunctionCallNode) ? (FunctionCallNode) node
-                : null;
-
-        final IClassDefinition thisClass = getModel().getCurrentClass();
-
-        if (type == JSSessionModel.SUPER_FUNCTION_CALL)
-        {
-            if (fnode == null)
-                fnode = (IFunctionNode) fcnode
-                        .getAncestorOfType(IFunctionNode.class);
-
-            if (fnode != null && fnode.isConstructor() && !hasSuperClass(fnode))
-                return;
-
-            IClassNode cnode = (IClassNode) node
-                    .getAncestorOfType(IClassNode.class);
-
-            // ToDo (erikdebruin): add VF2JS conditional -> only use check during full SDK compilation
-            if (cnode == null && MXMLJSC.jsOutputType == JSOutputType.VF2JS)
-                return;
-
-            if (fnode != null
-                    && (fnode.getNodeID() == ASTNodeID.GetterID || fnode
-                            .getNodeID() == ASTNodeID.SetterID))
-            {
-                write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
-                write(ASEmitterTokens.MEMBER_ACCESS);
-                if (fnode.getNodeID() == ASTNodeID.GetterID)
-                    write(JSFlexJSEmitterTokens.SUPERGETTER);
-                else
-                    write(JSFlexJSEmitterTokens.SUPERSETTER);
-                write(ASEmitterTokens.PAREN_OPEN);
-                if (cnode == null && thisClass != null)
-                    write(formatQualifiedName(thisClass.getQualifiedName()));
-                else
-                    write(formatQualifiedName(cnode.getQualifiedName()));
-                writeToken(ASEmitterTokens.COMMA);
-                write(ASEmitterTokens.THIS);
-                writeToken(ASEmitterTokens.COMMA);
-                write(ASEmitterTokens.SINGLE_QUOTE);
-                write(fnode.getName());
-                write(ASEmitterTokens.SINGLE_QUOTE);
-
-                IASNode[] anodes = null;
-                boolean writeArguments = false;
-                if (fcnode != null)
-                {
-                    anodes = fcnode.getArgumentNodes();
-
-                    writeArguments = anodes.length > 0;
-                }
-                else if (fnode != null && fnode.isConstructor())
-                {
-                    anodes = fnode.getParameterNodes();
-
-                    writeArguments = (anodes != null && anodes.length > 0);
-                }
-                else if (node instanceof IFunctionNode
-                        && node instanceof BinaryOperatorAssignmentNode)
-                {
-                    BinaryOperatorAssignmentNode bnode = (BinaryOperatorAssignmentNode) node;
-
-                    IFunctionNode pnode = (IFunctionNode) bnode
-                            .getAncestorOfType(IFunctionNode.class);
-
-                    if (pnode.getNodeID() == ASTNodeID.SetterID)
-                    {
-                        writeToken(ASEmitterTokens.COMMA);
-                        getWalker().walk(bnode.getRightOperandNode());
-                    }
-                }
-
-                if (writeArguments)
-                {
-                    int len = anodes.length;
-                    for (int i = 0; i < len; i++)
-                    {
-                        writeToken(ASEmitterTokens.COMMA);
-
-                        getWalker().walk(anodes[i]);
-                    }
-                }
-
-                write(ASEmitterTokens.PAREN_CLOSE);
-                return;
-            }
-        }
-        super.emitSuperCall(node, type);
+        superCallEmitter.emit(node, type);
     }
 
     @Override
     public void emitBinaryOperator(IBinaryOperatorNode node)
     {
-        ASTNodeID id = node.getNodeID();
-        /*
-        if (id == ASTNodeID.Op_InID
-                || id == ASTNodeID.Op_LogicalAndAssignID
-                || id == ASTNodeID.Op_LogicalOrAssignID)
-        {
-            super.emitBinaryOperator(node);
-        }
-        else */if (id == ASTNodeID.Op_IsID || id == ASTNodeID.Op_AsID)
-        {
-            emitIsAs(node.getLeftOperandNode(), node.getRightOperandNode(), id,
-                    false);
-        }
-        else if (id == ASTNodeID.Op_InstanceOfID)
-        {
-            getWalker().walk(node.getLeftOperandNode());
-
-            write(ASEmitterTokens.SPACE);
-            writeToken(ASEmitterTokens.INSTANCEOF);
-
-            IDefinition dnode = (node.getRightOperandNode()).resolve(project);
-            if (dnode != null)
-                write(formatQualifiedName(dnode.getQualifiedName()));
-            else
-                getWalker().walk(node.getRightOperandNode());
-        }
-        else
-        {
-            IExpressionNode leftSide = node.getLeftOperandNode();
-            if (leftSide.getNodeID() == ASTNodeID.MemberAccessExpressionID)
-            {
-                IASNode lnode = leftSide.getChild(0);
-                IASNode rnode = leftSide.getChild(1);
-                IDefinition rnodeDef = ((IIdentifierNode) rnode)
-                        .resolve(getWalker().getProject());
-                if (lnode.getNodeID() == ASTNodeID.SuperID
-                        && rnodeDef instanceof AccessorDefinition)
-                {
-                    String op = node.getOperator().getOperatorText();
-                    boolean isAssignment = op.contains("=")
-                            && !op.contains("==")
-                            && !(op.startsWith("<") || op.startsWith(">") || op
-                                    .startsWith("!"));
-                    if (isAssignment)
-                    {
-                        write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
-                        write(ASEmitterTokens.MEMBER_ACCESS);
-                        write(JSFlexJSEmitterTokens.SUPERSETTER);
-                        write(ASEmitterTokens.PAREN_OPEN);
-                        IClassNode cnode = (IClassNode) node
-                                .getAncestorOfType(IClassNode.class);
-                        write(formatQualifiedName(cnode.getQualifiedName()));
-                        writeToken(ASEmitterTokens.COMMA);
-                        write(ASEmitterTokens.THIS);
-                        writeToken(ASEmitterTokens.COMMA);
-                        write(ASEmitterTokens.SINGLE_QUOTE);
-                        write(rnodeDef.getBaseName());
-                        write(ASEmitterTokens.SINGLE_QUOTE);
-                        writeToken(ASEmitterTokens.COMMA);
-
-                        if (op.length() > 1) // += and things like that
-                        {
-                            write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
-                            write(ASEmitterTokens.MEMBER_ACCESS);
-                            write(JSFlexJSEmitterTokens.SUPERSETTER);
-                            write(ASEmitterTokens.PAREN_OPEN);
-                            write(formatQualifiedName(cnode.getQualifiedName()));
-                            writeToken(ASEmitterTokens.COMMA);
-                            write(ASEmitterTokens.THIS);
-                            writeToken(ASEmitterTokens.COMMA);
-                            write(ASEmitterTokens.SINGLE_QUOTE);
-                            write(rnodeDef.getBaseName());
-                            write(ASEmitterTokens.SINGLE_QUOTE);
-                            write(ASEmitterTokens.PAREN_CLOSE);
-                            write(op.substring(0, 1));
-                        }
-
-                        getWalker().walk(node.getRightOperandNode());
-                        write(ASEmitterTokens.PAREN_CLOSE);
-                        return;
-                    }
-                }
-            }
-
-            super.emitBinaryOperator(node);
-            /*
-            IExpressionNode leftSide = node.getLeftOperandNode();
-
-            IExpressionNode property = null;
-            int leftSideChildCount = leftSide.getChildCount();
-            if (leftSideChildCount > 0)
-            {
-                IASNode childNode = leftSide.getChild(leftSideChildCount - 1);
-                if (childNode instanceof IExpressionNode)
-                    property = (IExpressionNode) childNode;
-                else
-                    property = leftSide;
-            }
-            else
-                property = leftSide;
-
-            IDefinition def = null;
-            if (property instanceof IIdentifierNode)
-                def = ((IIdentifierNode) property).resolve(getWalker()
-                        .getProject());
-
-            boolean isSuper = false;
-            if (leftSide.getNodeID() == ASTNodeID.MemberAccessExpressionID)
-            {
-                IASNode cnode = leftSide.getChild(0);
-                ASTNodeID cId = cnode.getNodeID();
-
-                isSuper = cId == ASTNodeID.SuperID;
-            }
-
-            String op = node.getOperator().getOperatorText();
-            boolean isAssignment = op.contains("=") && !op.contains("==") && 
-            										!(op.startsWith("<") || 
-            												op.startsWith(">") || 
-            												op.startsWith("!"));
-
-            if (def instanceof AccessorDefinition && isAssignment)
-            {
-            	// this will make the set_foo call
-                getWalker().walk(leftSide);
-            }
-            else if (isSuper) 
-            {
-                emitSuperCall(node, "");
-            }
-            else
-            {
-                if (ASNodeUtils.hasParenOpen(node))
-                    write(ASEmitterTokens.PAREN_OPEN);
-
-                getWalker().walk(leftSide);
-
-                if (node.getNodeID() != ASTNodeID.Op_CommaID)
-                    write(ASEmitterTokens.SPACE);
-
-                writeToken(node.getOperator().getOperatorText());
-
-                getWalker().walk(node.getRightOperandNode());
-
-                if (ASNodeUtils.hasParenClose(node))
-                    write(ASEmitterTokens.PAREN_CLOSE);
-            }
-            */
-        }
+        binaryOperatorEmitter.emit(node);
     }
 
     public void emitIsAs(IExpressionNode left, IExpressionNode right,

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/cca81f42/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java
new file mode 100644
index 0000000..80ea2c5
--- /dev/null
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java
@@ -0,0 +1,271 @@
+/*
+ *
+ *  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.js.jx;
+
+import org.apache.flex.compiler.codegen.ISubEmitter;
+import org.apache.flex.compiler.codegen.js.IJSEmitter;
+import org.apache.flex.compiler.definitions.IDefinition;
+import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitterTokens;
+import org.apache.flex.compiler.internal.definitions.AccessorDefinition;
+import org.apache.flex.compiler.tree.ASTNodeID;
+import org.apache.flex.compiler.tree.as.IASNode;
+import org.apache.flex.compiler.tree.as.IBinaryOperatorNode;
+import org.apache.flex.compiler.tree.as.IClassNode;
+import org.apache.flex.compiler.tree.as.IExpressionNode;
+import org.apache.flex.compiler.tree.as.IIdentifierNode;
+import org.apache.flex.compiler.utils.ASNodeUtils;
+
+public class BinaryOperatorEmitter extends JSSubEmitter implements
+        ISubEmitter<IBinaryOperatorNode>
+{
+
+    public BinaryOperatorEmitter(IJSEmitter emitter)
+    {
+        super(emitter);
+    }
+
+    @Override
+    public void emit(IBinaryOperatorNode node)
+    {
+        // TODO (mschmalle) will remove this cast as more things get abstracted
+        JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
+
+        ASTNodeID id = node.getNodeID();
+        /*
+        if (id == ASTNodeID.Op_InID
+                || id == ASTNodeID.Op_LogicalAndAssignID
+                || id == ASTNodeID.Op_LogicalOrAssignID)
+        {
+            super.emitBinaryOperator(node);
+        }
+        else */if (id == ASTNodeID.Op_IsID || id == ASTNodeID.Op_AsID)
+        {
+            fjs.emitIsAs(node.getLeftOperandNode(), node.getRightOperandNode(),
+                    id, false);
+        }
+        else if (id == ASTNodeID.Op_InstanceOfID)
+        {
+            getWalker().walk(node.getLeftOperandNode());
+
+            write(ASEmitterTokens.SPACE);
+            writeToken(ASEmitterTokens.INSTANCEOF);
+
+            IDefinition dnode = (node.getRightOperandNode())
+                    .resolve(getProject());
+            if (dnode != null)
+                write(fjs.formatQualifiedName(dnode.getQualifiedName()));
+            else
+                getWalker().walk(node.getRightOperandNode());
+        }
+        else
+        {
+            IExpressionNode leftSide = node.getLeftOperandNode();
+            if (leftSide.getNodeID() == ASTNodeID.MemberAccessExpressionID)
+            {
+                IASNode lnode = leftSide.getChild(0);
+                IASNode rnode = leftSide.getChild(1);
+                IDefinition rnodeDef = ((IIdentifierNode) rnode)
+                        .resolve(getWalker().getProject());
+                if (lnode.getNodeID() == ASTNodeID.SuperID
+                        && rnodeDef instanceof AccessorDefinition)
+                {
+                    String op = node.getOperator().getOperatorText();
+                    boolean isAssignment = op.contains("=")
+                            && !op.contains("==")
+                            && !(op.startsWith("<") || op.startsWith(">") || op
+                                    .startsWith("!"));
+                    if (isAssignment)
+                    {
+                        write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
+                        write(ASEmitterTokens.MEMBER_ACCESS);
+                        write(JSFlexJSEmitterTokens.SUPERSETTER);
+                        write(ASEmitterTokens.PAREN_OPEN);
+                        IClassNode cnode = (IClassNode) node
+                                .getAncestorOfType(IClassNode.class);
+                        write(fjs.formatQualifiedName(cnode.getQualifiedName()));
+                        writeToken(ASEmitterTokens.COMMA);
+                        write(ASEmitterTokens.THIS);
+                        writeToken(ASEmitterTokens.COMMA);
+                        write(ASEmitterTokens.SINGLE_QUOTE);
+                        write(rnodeDef.getBaseName());
+                        write(ASEmitterTokens.SINGLE_QUOTE);
+                        writeToken(ASEmitterTokens.COMMA);
+
+                        if (op.length() > 1) // += and things like that
+                        {
+                            write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
+                            write(ASEmitterTokens.MEMBER_ACCESS);
+                            write(JSFlexJSEmitterTokens.SUPERSETTER);
+                            write(ASEmitterTokens.PAREN_OPEN);
+                            write(fjs.formatQualifiedName(cnode
+                                    .getQualifiedName()));
+                            writeToken(ASEmitterTokens.COMMA);
+                            write(ASEmitterTokens.THIS);
+                            writeToken(ASEmitterTokens.COMMA);
+                            write(ASEmitterTokens.SINGLE_QUOTE);
+                            write(rnodeDef.getBaseName());
+                            write(ASEmitterTokens.SINGLE_QUOTE);
+                            write(ASEmitterTokens.PAREN_CLOSE);
+                            write(op.substring(0, 1));
+                        }
+
+                        getWalker().walk(node.getRightOperandNode());
+                        write(ASEmitterTokens.PAREN_CLOSE);
+                        return;
+                    }
+                }
+            }
+
+            super_emitBinaryOperator(node);
+            /*
+            IExpressionNode leftSide = node.getLeftOperandNode();
+
+            IExpressionNode property = null;
+            int leftSideChildCount = leftSide.getChildCount();
+            if (leftSideChildCount > 0)
+            {
+                IASNode childNode = leftSide.getChild(leftSideChildCount - 1);
+                if (childNode instanceof IExpressionNode)
+                    property = (IExpressionNode) childNode;
+                else
+                    property = leftSide;
+            }
+            else
+                property = leftSide;
+
+            IDefinition def = null;
+            if (property instanceof IIdentifierNode)
+                def = ((IIdentifierNode) property).resolve(getWalker()
+                        .getProject());
+
+            boolean isSuper = false;
+            if (leftSide.getNodeID() == ASTNodeID.MemberAccessExpressionID)
+            {
+                IASNode cnode = leftSide.getChild(0);
+                ASTNodeID cId = cnode.getNodeID();
+
+                isSuper = cId == ASTNodeID.SuperID;
+            }
+
+            String op = node.getOperator().getOperatorText();
+            boolean isAssignment = op.contains("=") && !op.contains("==") && 
+                                                    !(op.startsWith("<") || 
+                                                            op.startsWith(">") || 
+                                                            op.startsWith("!"));
+
+            if (def instanceof AccessorDefinition && isAssignment)
+            {
+                // this will make the set_foo call
+                getWalker().walk(leftSide);
+            }
+            else if (isSuper) 
+            {
+                emitSuperCall(node, "");
+            }
+            else
+            {
+                if (ASNodeUtils.hasParenOpen(node))
+                    write(ASEmitterTokens.PAREN_OPEN);
+
+                getWalker().walk(leftSide);
+
+                if (node.getNodeID() != ASTNodeID.Op_CommaID)
+                    write(ASEmitterTokens.SPACE);
+
+                writeToken(node.getOperator().getOperatorText());
+
+                getWalker().walk(node.getRightOperandNode());
+
+                if (ASNodeUtils.hasParenClose(node))
+                    write(ASEmitterTokens.PAREN_CLOSE);
+            }
+            */
+        }
+    }
+
+    private void super_emitBinaryOperator(IBinaryOperatorNode node)
+    {
+        if (ASNodeUtils.hasParenOpen(node))
+            write(ASEmitterTokens.PAREN_OPEN);
+
+        ASTNodeID id = node.getNodeID();
+
+        if (id == ASTNodeID.Op_IsID)
+        {
+            write(ASEmitterTokens.IS);
+            write(ASEmitterTokens.PAREN_OPEN);
+            getWalker().walk(node.getLeftOperandNode());
+            writeToken(ASEmitterTokens.COMMA);
+            getWalker().walk(node.getRightOperandNode());
+            write(ASEmitterTokens.PAREN_CLOSE);
+        }
+        else if (id == ASTNodeID.Op_AsID)
+        {
+            // (is(a, b) ? a : null)
+            write(ASEmitterTokens.PAREN_OPEN);
+            write(ASEmitterTokens.IS);
+            write(ASEmitterTokens.PAREN_OPEN);
+            getWalker().walk(node.getLeftOperandNode());
+            writeToken(ASEmitterTokens.COMMA);
+            getWalker().walk(node.getRightOperandNode());
+            writeToken(ASEmitterTokens.PAREN_CLOSE);
+            writeToken(ASEmitterTokens.TERNARY);
+            getWalker().walk(node.getLeftOperandNode());
+            write(ASEmitterTokens.SPACE);
+            writeToken(ASEmitterTokens.COLON);
+            write(ASEmitterTokens.NULL);
+            write(ASEmitterTokens.PAREN_CLOSE);
+        }
+        else
+        {
+            getWalker().walk(node.getLeftOperandNode());
+
+            if (id != ASTNodeID.Op_CommaID)
+                write(ASEmitterTokens.SPACE);
+
+            // (erikdebruin) rewrite 'a &&= b' to 'a = a && b'
+            if (id == ASTNodeID.Op_LogicalAndAssignID
+                    || id == ASTNodeID.Op_LogicalOrAssignID)
+            {
+                IIdentifierNode lnode = (IIdentifierNode) node
+                        .getLeftOperandNode();
+
+                writeToken(ASEmitterTokens.EQUAL);
+                writeToken(lnode.getName());
+                write((id == ASTNodeID.Op_LogicalAndAssignID) ? ASEmitterTokens.LOGICAL_AND
+                        : ASEmitterTokens.LOGICAL_OR);
+            }
+            else
+            {
+                write(node.getOperator().getOperatorText());
+            }
+
+            write(ASEmitterTokens.SPACE);
+
+            getWalker().walk(node.getRightOperandNode());
+        }
+
+        if (ASNodeUtils.hasParenOpen(node))
+            write(ASEmitterTokens.PAREN_CLOSE);
+    }
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/cca81f42/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/IdentifierEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/IdentifierEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/IdentifierEmitter.java
new file mode 100644
index 0000000..3af251d
--- /dev/null
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/IdentifierEmitter.java
@@ -0,0 +1,128 @@
+/*
+ *
+ *  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.js.jx;
+
+import org.apache.flex.compiler.codegen.ISubEmitter;
+import org.apache.flex.compiler.codegen.js.IJSEmitter;
+import org.apache.flex.compiler.definitions.IDefinition;
+import org.apache.flex.compiler.definitions.IFunctionDefinition.FunctionClassification;
+import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitter;
+import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.utils.EmitterUtils;
+import org.apache.flex.compiler.internal.definitions.AccessorDefinition;
+import org.apache.flex.compiler.internal.definitions.FunctionDefinition;
+import org.apache.flex.compiler.tree.ASTNodeID;
+import org.apache.flex.compiler.tree.as.IASNode;
+import org.apache.flex.compiler.tree.as.IFunctionObjectNode;
+import org.apache.flex.compiler.tree.as.IIdentifierNode;
+import org.apache.flex.compiler.utils.NativeUtils;
+
+public class IdentifierEmitter extends JSSubEmitter implements
+        ISubEmitter<IIdentifierNode>
+{
+
+    public IdentifierEmitter(IJSEmitter emitter)
+    {
+        super(emitter);
+    }
+
+    @Override
+    public void emit(IIdentifierNode node)
+    {
+        // TODO (mschmalle) will remove this cast as more things get abstracted
+        JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
+
+        IDefinition nodeDef = ((IIdentifierNode) node).resolve(getProject());
+
+        IASNode parentNode = node.getParent();
+        ASTNodeID parentNodeId = parentNode.getNodeID();
+
+        boolean identifierIsAccessorFunction = nodeDef instanceof AccessorDefinition;
+        boolean identifierIsPlainFunction = nodeDef instanceof FunctionDefinition
+                && !identifierIsAccessorFunction;
+
+        boolean emitName = true;
+
+        if (nodeDef != null && nodeDef.isStatic())
+        {
+            String sname = nodeDef.getParent().getQualifiedName();
+            if (sname.length() > 0)
+            {
+                write(fjs.formatQualifiedName(sname));
+                write(ASEmitterTokens.MEMBER_ACCESS);
+            }
+        }
+        else if (!NativeUtils.isNative(node.getName()))
+        {
+            // an instance method as a parameter or
+            // a local function
+            boolean useGoogBind = (parentNodeId == ASTNodeID.ContainerID
+                    && identifierIsPlainFunction && ((FunctionDefinition) nodeDef)
+                    .getFunctionClassification() == FunctionClassification.CLASS_MEMBER)
+                    || (identifierIsPlainFunction && ((FunctionDefinition) nodeDef)
+                            .getFunctionClassification() == FunctionClassification.LOCAL);
+
+            if (useGoogBind)
+            {
+                write(JSGoogEmitterTokens.GOOG_BIND);
+                write(ASEmitterTokens.PAREN_OPEN);
+            }
+
+            if (EmitterUtils.writeThis(getProject(), getModel(), node))
+            {
+                IFunctionObjectNode functionObjectNode = (IFunctionObjectNode) node
+                        .getParent().getAncestorOfType(
+                                IFunctionObjectNode.class);
+
+                if (functionObjectNode != null)
+                    write(JSGoogEmitterTokens.SELF);
+                else
+                    write(ASEmitterTokens.THIS);
+
+                write(ASEmitterTokens.MEMBER_ACCESS);
+            }
+
+            if (useGoogBind)
+            {
+                write(node.getName());
+
+                writeToken(ASEmitterTokens.COMMA);
+                write(ASEmitterTokens.THIS);
+                write(ASEmitterTokens.PAREN_CLOSE);
+
+                emitName = false;
+            }
+        }
+
+        //IDefinition parentDef = (nodeDef != null) ? nodeDef.getParent() : null;
+        //boolean isNative = (parentDef != null)
+        //        && NativeUtils.isNative(parentDef.getBaseName());
+        if (emitName)
+        {
+            if (nodeDef != null)
+                write(fjs.formatQualifiedName(nodeDef.getQualifiedName()));
+            else
+                write(node.getName());
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/cca81f42/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/SuperCallEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/SuperCallEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/SuperCallEmitter.java
new file mode 100644
index 0000000..90c3bdb
--- /dev/null
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/SuperCallEmitter.java
@@ -0,0 +1,245 @@
+/*
+ *
+ *  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.js.jx;
+
+import org.apache.flex.compiler.clients.MXMLJSC;
+import org.apache.flex.compiler.clients.MXMLJSC.JSOutputType;
+import org.apache.flex.compiler.codegen.js.IJSEmitter;
+import org.apache.flex.compiler.definitions.IClassDefinition;
+import org.apache.flex.compiler.definitions.IDefinition;
+import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSSessionModel;
+import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.utils.EmitterUtils;
+import org.apache.flex.compiler.internal.tree.as.BinaryOperatorAssignmentNode;
+import org.apache.flex.compiler.internal.tree.as.FunctionCallNode;
+import org.apache.flex.compiler.tree.ASTNodeID;
+import org.apache.flex.compiler.tree.as.IASNode;
+import org.apache.flex.compiler.tree.as.IClassNode;
+import org.apache.flex.compiler.tree.as.IFunctionCallNode;
+import org.apache.flex.compiler.tree.as.IFunctionNode;
+
+public class SuperCallEmitter extends JSSubEmitter
+{
+
+    public SuperCallEmitter(IJSEmitter emitter)
+    {
+        super(emitter);
+        // TODO Auto-generated constructor stub
+    }
+
+    public void emit(IASNode node, String type)
+    {
+        // TODO (mschmalle) will remove this cast as more things get abstracted
+        JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
+
+        IFunctionNode fnode = (node instanceof IFunctionNode) ? (IFunctionNode) node
+                : null;
+        IFunctionCallNode fcnode = (node instanceof IFunctionCallNode) ? (FunctionCallNode) node
+                : null;
+
+        final IClassDefinition thisClass = getModel().getCurrentClass();
+
+        if (type == JSSessionModel.SUPER_FUNCTION_CALL)
+        {
+            if (fnode == null)
+                fnode = (IFunctionNode) fcnode
+                        .getAncestorOfType(IFunctionNode.class);
+
+            if (fnode != null && fnode.isConstructor()
+                    && !EmitterUtils.hasSuperClass(getProject(), fnode))
+                return;
+
+            IClassNode cnode = (IClassNode) node
+                    .getAncestorOfType(IClassNode.class);
+
+            // ToDo (erikdebruin): add VF2JS conditional -> only use check during full SDK compilation
+            if (cnode == null && MXMLJSC.jsOutputType == JSOutputType.VF2JS)
+                return;
+
+            if (fnode != null
+                    && (fnode.getNodeID() == ASTNodeID.GetterID || fnode
+                            .getNodeID() == ASTNodeID.SetterID))
+            {
+                write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
+                write(ASEmitterTokens.MEMBER_ACCESS);
+                if (fnode.getNodeID() == ASTNodeID.GetterID)
+                    write(JSFlexJSEmitterTokens.SUPERGETTER);
+                else
+                    write(JSFlexJSEmitterTokens.SUPERSETTER);
+                write(ASEmitterTokens.PAREN_OPEN);
+                if (cnode == null && thisClass != null)
+                    write(fjs.formatQualifiedName(thisClass.getQualifiedName()));
+                else
+                    write(fjs.formatQualifiedName(cnode.getQualifiedName()));
+                writeToken(ASEmitterTokens.COMMA);
+                write(ASEmitterTokens.THIS);
+                writeToken(ASEmitterTokens.COMMA);
+                write(ASEmitterTokens.SINGLE_QUOTE);
+                write(fnode.getName());
+                write(ASEmitterTokens.SINGLE_QUOTE);
+
+                IASNode[] anodes = null;
+                boolean writeArguments = false;
+                if (fcnode != null)
+                {
+                    anodes = fcnode.getArgumentNodes();
+
+                    writeArguments = anodes.length > 0;
+                }
+                else if (fnode != null && fnode.isConstructor())
+                {
+                    anodes = fnode.getParameterNodes();
+
+                    writeArguments = (anodes != null && anodes.length > 0);
+                }
+                else if (node instanceof IFunctionNode
+                        && node instanceof BinaryOperatorAssignmentNode)
+                {
+                    BinaryOperatorAssignmentNode bnode = (BinaryOperatorAssignmentNode) node;
+
+                    IFunctionNode pnode = (IFunctionNode) bnode
+                            .getAncestorOfType(IFunctionNode.class);
+
+                    if (pnode.getNodeID() == ASTNodeID.SetterID)
+                    {
+                        writeToken(ASEmitterTokens.COMMA);
+                        getWalker().walk(bnode.getRightOperandNode());
+                    }
+                }
+
+                if (writeArguments)
+                {
+                    int len = anodes.length;
+                    for (int i = 0; i < len; i++)
+                    {
+                        writeToken(ASEmitterTokens.COMMA);
+
+                        getWalker().walk(anodes[i]);
+                    }
+                }
+
+                write(ASEmitterTokens.PAREN_CLOSE);
+                return;
+            }
+        }
+        super_emitSuperCall(node, type);
+    }
+
+    protected void super_emitSuperCall(IASNode node, String type)
+    {
+        // TODO (mschmalle) will remove this cast as more things get abstracted
+        JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
+
+        IFunctionNode fnode = (node instanceof IFunctionNode) ? (IFunctionNode) node
+                : null;
+        IFunctionCallNode fcnode = (node instanceof IFunctionCallNode) ? (FunctionCallNode) node
+                : null;
+
+        if (type == JSSessionModel.CONSTRUCTOR_EMPTY)
+        {
+            indentPush();
+            writeNewline();
+            indentPop();
+        }
+        else if (type == JSSessionModel.SUPER_FUNCTION_CALL)
+        {
+            if (fnode == null)
+                fnode = (IFunctionNode) fcnode
+                        .getAncestorOfType(IFunctionNode.class);
+        }
+
+        if (fnode.isConstructor()
+                && !EmitterUtils.hasSuperClass(getProject(), fnode))
+            return;
+
+        IClassNode cnode = (IClassNode) node
+                .getAncestorOfType(IClassNode.class);
+
+        if (cnode == null)
+        {
+            IDefinition cdef = getModel().getCurrentClass();
+            write(fjs.formatQualifiedName(cdef.getQualifiedName()));
+        }
+        else
+            write(fjs.formatQualifiedName(cnode.getQualifiedName()));
+        write(ASEmitterTokens.MEMBER_ACCESS);
+        write(JSGoogEmitterTokens.GOOG_BASE);
+        write(ASEmitterTokens.PAREN_OPEN);
+        write(ASEmitterTokens.THIS);
+
+        if (fnode.isConstructor())
+        {
+            writeToken(ASEmitterTokens.COMMA);
+            write(ASEmitterTokens.SINGLE_QUOTE);
+            write(JSGoogEmitterTokens.GOOG_CONSTRUCTOR);
+            write(ASEmitterTokens.SINGLE_QUOTE);
+        }
+
+        if (fnode != null && !fnode.isConstructor())
+        {
+            writeToken(ASEmitterTokens.COMMA);
+            write(ASEmitterTokens.SINGLE_QUOTE);
+            write(fnode.getName());
+            write(ASEmitterTokens.SINGLE_QUOTE);
+        }
+
+        IASNode[] anodes = null;
+        boolean writeArguments = false;
+        if (fcnode != null)
+        {
+            anodes = fcnode.getArgumentNodes();
+
+            writeArguments = anodes.length > 0;
+        }
+        else if (fnode.isConstructor())
+        {
+            anodes = fnode.getParameterNodes();
+
+            writeArguments = (anodes != null && anodes.length > 0);
+        }
+
+        if (writeArguments)
+        {
+            int len = anodes.length;
+            for (int i = 0; i < len; i++)
+            {
+                writeToken(ASEmitterTokens.COMMA);
+
+                getWalker().walk(anodes[i]);
+            }
+        }
+
+        write(ASEmitterTokens.PAREN_CLOSE);
+
+        if (type == JSSessionModel.CONSTRUCTOR_FULL)
+        {
+            write(ASEmitterTokens.SEMICOLON);
+            writeNewline();
+        }
+        else if (type == JSSessionModel.CONSTRUCTOR_EMPTY)
+        {
+            write(ASEmitterTokens.SEMICOLON);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/cca81f42/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java
index 9f6a99d..69acf2d 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java
@@ -20,19 +20,35 @@
 package org.apache.flex.compiler.internal.codegen.js.utils;
 
 import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Iterator;
 import java.util.List;
+import java.util.Set;
 
 import org.apache.flex.compiler.constants.IASLanguageConstants;
 import org.apache.flex.compiler.definitions.IClassDefinition;
 import org.apache.flex.compiler.definitions.IDefinition;
+import org.apache.flex.compiler.definitions.IFunctionDefinition;
+import org.apache.flex.compiler.definitions.INamespaceDefinition;
 import org.apache.flex.compiler.definitions.ITypeDefinition;
+import org.apache.flex.compiler.definitions.IFunctionDefinition.FunctionClassification;
+import org.apache.flex.compiler.internal.codegen.js.JSSessionModel;
+import org.apache.flex.compiler.internal.definitions.AccessorDefinition;
 import org.apache.flex.compiler.internal.definitions.ClassDefinition;
+import org.apache.flex.compiler.internal.definitions.FunctionDefinition;
+import org.apache.flex.compiler.internal.definitions.ParameterDefinition;
+import org.apache.flex.compiler.internal.definitions.VariableDefinition;
+import org.apache.flex.compiler.internal.projects.CompilerProject;
+import org.apache.flex.compiler.internal.scopes.TypeScope;
+import org.apache.flex.compiler.internal.tree.as.ParameterNode;
 import org.apache.flex.compiler.projects.ICompilerProject;
 import org.apache.flex.compiler.tree.ASTNodeID;
 import org.apache.flex.compiler.tree.as.IASNode;
 import org.apache.flex.compiler.tree.as.IClassNode;
 import org.apache.flex.compiler.tree.as.IDefinitionNode;
 import org.apache.flex.compiler.tree.as.IFunctionNode;
+import org.apache.flex.compiler.tree.as.IIdentifierNode;
 import org.apache.flex.compiler.tree.as.IScopedNode;
 
 /**
@@ -119,11 +135,118 @@ public class EmitterUtils
         }
         return list;
     }
-    
+
     public static IClassDefinition getClassDefinition(IDefinitionNode node)
     {
         IClassNode tnode = (IClassNode) node
                 .getAncestorOfType(IClassNode.class);
         return (tnode != null) ? tnode.getDefinition() : null;
     }
+
+    public static boolean writeThis(ICompilerProject project,
+            JSSessionModel model, IIdentifierNode node)
+    {
+        IClassNode classNode = (IClassNode) node
+                .getAncestorOfType(IClassNode.class);
+
+        IDefinition nodeDef = ((IIdentifierNode) node).resolve(project);
+
+        IASNode parentNode = node.getParent();
+        ASTNodeID parentNodeId = parentNode.getNodeID();
+
+        IASNode firstChild = parentNode.getChild(0);
+
+        final IClassDefinition thisClass = model.getCurrentClass();
+
+        boolean identifierIsMemberAccess = parentNodeId == ASTNodeID.MemberAccessExpressionID;
+
+        if (classNode == null) // script in MXML and AS interface definitions
+        {
+            if (nodeDef instanceof ParameterDefinition)
+                return false;
+
+            if (nodeDef instanceof VariableDefinition)
+            {
+                IDefinition pdef = ((VariableDefinition) nodeDef).getParent();
+
+                if (thisClass == null || !isSameClass(pdef, thisClass, project))
+                    return false;
+
+                if (identifierIsMemberAccess)
+                    return node == firstChild;
+
+                return parentNodeId == ASTNodeID.ContainerID
+                        || !(parentNode instanceof ParameterNode);
+            }
+            else if (nodeDef instanceof AccessorDefinition)
+            {
+                IDefinition pdef = ((AccessorDefinition) nodeDef).getParent();
+
+                if (thisClass == null || !isSameClass(pdef, thisClass, project))
+                    return false;
+
+                if (identifierIsMemberAccess)
+                    return node == firstChild;
+
+                return true;
+            }
+            else if (parentNodeId == ASTNodeID.ContainerID
+                    && nodeDef instanceof FunctionDefinition)
+            {
+                return ((FunctionDefinition) nodeDef)
+                        .getFunctionClassification() == FunctionClassification.CLASS_MEMBER; // for 'goog.bind'
+            }
+            else
+            {
+                return parentNodeId == ASTNodeID.FunctionCallID
+                        && !(nodeDef instanceof AccessorDefinition)
+                        && !identifierIsMemberAccess;
+            }
+        }
+        else
+        {
+            if (nodeDef != null && !nodeDef.isInternal()
+                    && isClassMember(project, nodeDef, classNode))
+            {
+                if (identifierIsMemberAccess)
+                {
+                    return node == firstChild;
+                }
+                else
+                {
+                    boolean identifierIsLocalFunction = nodeDef instanceof FunctionDefinition
+                            && !(nodeDef instanceof AccessorDefinition)
+                            && ((FunctionDefinition) nodeDef)
+                                    .getFunctionClassification() == IFunctionDefinition.FunctionClassification.LOCAL;
+
+                    return !identifierIsLocalFunction;
+                }
+            }
+        }
+
+        return false;
+    }
+
+    public static boolean isClassMember(ICompilerProject project,
+            IDefinition nodeDef, IClassNode classNode)
+    {
+        TypeScope cscope = (TypeScope) classNode.getDefinition()
+                .getContainedScope();
+
+        Set<INamespaceDefinition> nsSet = cscope.getNamespaceSet(project);
+        Collection<IDefinition> defs = new HashSet<IDefinition>();
+
+        cscope.getAllPropertiesForMemberAccess((CompilerProject) project, defs,
+                nsSet);
+
+        Iterator<IDefinition> visiblePropertiesIterator = defs.iterator();
+        while (visiblePropertiesIterator.hasNext())
+        {
+            if (nodeDef.getQualifiedName().equals(
+                    visiblePropertiesIterator.next().getQualifiedName()))
+                return true;
+        }
+
+        return false;
+    }
 }


[26/35] git commit: [flex-falcon] [refs/heads/IDEA-FLEX_JS_COMPILER] - - Refactored more shared utility methods. - Moved writeIndent() to ASEmitter.

Posted by ft...@apache.org.
- Refactored more shared utility methods.
- Moved writeIndent() to ASEmitter.


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

Branch: refs/heads/IDEA-FLEX_JS_COMPILER
Commit: 02e5a02ff8193b7b6d623bb63d59acdd4e2b239b
Parents: 26deda9
Author: Michael Schmalle <ms...@apache.org>
Authored: Sun May 31 14:28:16 2015 -0400
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:41:18 2015 +0100

----------------------------------------------------------------------
 .../compiler/internal/codegen/as/ASEmitter.java |  26 ++--
 .../internal/codegen/js/goog/JSGoogEmitter.java | 124 ++-----------------
 .../internal/codegen/js/utils/EmitterUtils.java |  42 ++++++-
 .../codegen/js/vf2js/JSVF2JSEmitter.java        |  12 +-
 4 files changed, 78 insertions(+), 126 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/02e5a02f/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
index 26b1100..7f5f46f 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
@@ -147,12 +147,17 @@ public class ASEmitter implements IASEmitter, IEmitter
         return currentIndent;
     }
 
+    protected void writeIndent()
+    {
+        write(ASEmitterTokens.INDENT);
+    }
+
     private IASBlockWalker walker;
 
     @Override
     public IBlockWalker getWalker()
     {
-        return (IBlockWalker) walker;
+        return walker;
     }
 
     @Override
@@ -1367,7 +1372,8 @@ public class ASEmitter implements IASEmitter, IEmitter
     }
 
     @Override
-    public void emitNamespaceAccessExpression(INamespaceAccessExpressionNode node)
+    public void emitNamespaceAccessExpression(
+            INamespaceAccessExpressionNode node)
     {
         getWalker().walk(node.getLeftOperandNode());
         write(node.getOperator().getOperatorText());
@@ -1379,7 +1385,7 @@ public class ASEmitter implements IASEmitter, IEmitter
     {
         if (ASNodeUtils.hasParenOpen(node))
             write(ASEmitterTokens.PAREN_OPEN);
-        
+
         if (node.getNodeID() == ASTNodeID.Op_PreIncrID
                 || node.getNodeID() == ASTNodeID.Op_PreDecrID
                 || node.getNodeID() == ASTNodeID.Op_BitwiseNotID
@@ -1397,7 +1403,7 @@ public class ASEmitter implements IASEmitter, IEmitter
             }
             else
             {
-                getWalker().walk(node.getOperandNode());            
+                getWalker().walk(node.getOperandNode());
             }
         }
 
@@ -1420,7 +1426,7 @@ public class ASEmitter implements IASEmitter, IEmitter
             getWalker().walk(node.getOperandNode());
             write(ASEmitterTokens.PAREN_CLOSE);
         }
-        
+
         if (ASNodeUtils.hasParenClose(node))
             write(ASEmitterTokens.PAREN_CLOSE);
     }
@@ -1455,23 +1461,27 @@ public class ASEmitter implements IASEmitter, IEmitter
     {
     }
 
+    @Override
     public void emitContainer(IContainerNode node)
     {
     }
 
+    @Override
     public void emitE4XFilter(IMemberAccessExpressionNode node)
     {
-    	// ToDo (erikdebruin)
+        // ToDo (erikdebruin)
     }
 
+    @Override
     public void emitUseNamespace(IUseNamespaceNode node)
     {
-    	// ToDo (erikdebruin)
+        // ToDo (erikdebruin)
     }
 
+    @Override
     public String stringifyNode(IASNode node)
     {
-    	boolean oldBufferWrite = isBufferWrite();
+        boolean oldBufferWrite = isBufferWrite();
         StringBuilder oldBuilder = this.builder;
         this.builder = new StringBuilder();
         setBufferWrite(true);

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/02e5a02f/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
index c431553..7dd7cdb 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
@@ -21,7 +21,6 @@ package org.apache.flex.compiler.internal.codegen.js.goog;
 
 import java.io.FilterWriter;
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -41,7 +40,6 @@ import org.apache.flex.compiler.internal.codegen.js.JSEmitter;
 import org.apache.flex.compiler.internal.codegen.js.JSEmitterTokens;
 import org.apache.flex.compiler.internal.codegen.js.JSSessionModel;
 import org.apache.flex.compiler.internal.codegen.js.utils.EmitterUtils;
-import org.apache.flex.compiler.internal.definitions.ClassDefinition;
 import org.apache.flex.compiler.internal.scopes.PackageScope;
 import org.apache.flex.compiler.internal.tree.as.ChainedVariableNode;
 import org.apache.flex.compiler.internal.tree.as.FunctionCallNode;
@@ -66,7 +64,6 @@ import org.apache.flex.compiler.tree.as.IIdentifierNode;
 import org.apache.flex.compiler.tree.as.IInterfaceNode;
 import org.apache.flex.compiler.tree.as.INamespaceAccessExpressionNode;
 import org.apache.flex.compiler.tree.as.IParameterNode;
-import org.apache.flex.compiler.tree.as.IScopedNode;
 import org.apache.flex.compiler.tree.as.ISetterNode;
 import org.apache.flex.compiler.tree.as.ITypeNode;
 import org.apache.flex.compiler.tree.as.ITypedExpressionNode;
@@ -98,11 +95,6 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
         return docEmitter;
     }
 
-    protected void writeIndent()
-    {
-        write(ASEmitterTokens.INDENT);
-    }
-
     //--------------------------------------------------------------------------
     // 
     //--------------------------------------------------------------------------
@@ -142,7 +134,7 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
         if (type == null)
             return;
 
-        List<String> list = resolveImports(type);
+        List<String> list = EmitterUtils.resolveImports(type);
         for (String imp : list)
         {
             if (imp.indexOf(JSGoogEmitterTokens.AS3.getToken()) != -1)
@@ -485,7 +477,7 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
 
         emitParameters(node.getParameterNodes());
 
-        boolean hasSuperClass = hasSuperClass(node);
+        boolean hasSuperClass = EmitterUtils.hasSuperClass(project, node);
 
         if (isConstructor && node.getScopedNode().getChildCount() == 0)
         {
@@ -621,11 +613,12 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
         boolean isLocal = false;
         if (node.getFunctionClassification() == IFunctionDefinition.FunctionClassification.LOCAL)
             isLocal = true;
-        if (hasBody(node) && !isStatic && !isLocal)
+        if (EmitterUtils.hasBody(node) && !isStatic && !isLocal)
             emitSelfReference(node);
 
-        if (node.isConstructor() && hasSuperClass(node)
-                && !hasSuperCall(node.getScopedNode()))
+        if (node.isConstructor()
+                && EmitterUtils.hasSuperClass(getWalker().getProject(), node)
+                && !EmitterUtils.hasSuperCall(node.getScopedNode()))
             emitSuperCall(node, JSSessionModel.CONSTRUCTOR_FULL);
 
         emitRestParameterCodeBlock(node);
@@ -662,7 +655,8 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
                         .getAncestorOfType(IFunctionNode.class);
         }
 
-        if (fnode.isConstructor() && !hasSuperClass(fnode))
+        if (fnode.isConstructor()
+                && !EmitterUtils.hasSuperClass(getWalker().getProject(), fnode))
             return;
 
         IClassNode cnode = (IClassNode) node
@@ -741,13 +735,14 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
         if (pnodes.length == 0)
             return;
 
-        Map<Integer, IParameterNode> defaults = getDefaults(pnodes);
+        Map<Integer, IParameterNode> defaults = EmitterUtils
+                .getDefaults(pnodes);
 
         if (defaults != null)
         {
             final StringBuilder code = new StringBuilder();
 
-            if (!hasBody(node))
+            if (!EmitterUtils.hasBody(node))
             {
                 indentPush();
                 writeIndent();
@@ -790,7 +785,7 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
 
                     write(code.toString());
 
-                    if (i == n - 1 && !hasBody(node))
+                    if (i == n - 1 && !EmitterUtils.hasBody(node))
                         indentPop();
 
                     writeNewline();
@@ -803,7 +798,7 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
     {
         IParameterNode[] pnodes = node.getParameterNodes();
 
-        IParameterNode rest = getRest(pnodes);
+        IParameterNode rest = EmitterUtils.getRest(pnodes);
         if (rest != null)
         {
             final StringBuilder code = new StringBuilder();
@@ -900,42 +895,6 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
         super(out);
     }
 
-    protected Map<Integer, IParameterNode> getDefaults(IParameterNode[] nodes)
-    {
-        Map<Integer, IParameterNode> result = new HashMap<Integer, IParameterNode>();
-        int i = 0;
-        boolean hasDefaults = false;
-        for (IParameterNode node : nodes)
-        {
-            if (node.hasDefaultValue())
-            {
-                hasDefaults = true;
-                result.put(i, node);
-            }
-            else
-            {
-                result.put(i, null);
-            }
-            i++;
-        }
-
-        if (!hasDefaults)
-            return null;
-
-        return result;
-    }
-
-    private IParameterNode getRest(IParameterNode[] nodes)
-    {
-        for (IParameterNode node : nodes)
-        {
-            if (node.isRest())
-                return node;
-        }
-
-        return null;
-    }
-
     private static ITypeDefinition getTypeDefinition(IDefinitionNode node)
     {
         ITypeNode tnode = (ITypeNode) node.getAncestorOfType(ITypeNode.class);
@@ -951,38 +910,6 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
         return superClass;
     }
 
-    protected boolean hasSuperClass(IDefinitionNode node)
-    {
-        ICompilerProject project = getWalker().getProject();
-        IClassDefinition superClassDefinition = getSuperClassDefinition(node,
-                project);
-        // XXX (mschmalle) this is nulling for MXML super class, figure out why
-        if (superClassDefinition == null)
-            return false;
-        String qname = superClassDefinition.getQualifiedName();
-        return superClassDefinition != null
-                && !qname.equals(IASLanguageConstants.Object);
-    }
-
-    protected boolean hasSuperCall(IScopedNode node)
-    {
-        for (int i = node.getChildCount() - 1; i > -1; i--)
-        {
-            IASNode cnode = node.getChild(i);
-            if (cnode.getNodeID() == ASTNodeID.FunctionCallID
-                    && cnode.getChild(0).getNodeID() == ASTNodeID.SuperID)
-                return true;
-        }
-
-        return false;
-    }
-
-    protected static boolean hasBody(IFunctionNode node)
-    {
-        IScopedNode scope = node.getScopedNode();
-        return scope.getChildCount() > 0;
-    }
-
     protected void emitObjectDefineProperty(IAccessorNode node)
     {
         /*
@@ -1139,29 +1066,4 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
         if (ASNodeUtils.hasParenOpen(node))
             write(ASEmitterTokens.PAREN_CLOSE);
     }
-
-    //--------------------------------------------------------------------------
-    // 
-    //--------------------------------------------------------------------------
-
-    private List<String> resolveImports(ITypeDefinition type)
-    {
-        ArrayList<String> list = new ArrayList<String>();
-        IScopedNode scopeNode = type.getContainedScope().getScopeNode();
-        if (scopeNode != null)
-        {
-            scopeNode.getAllImports(list);
-        }
-        else
-        {
-            // MXML
-            ClassDefinition cdefinition = (ClassDefinition) type;
-            String[] implicitImports = cdefinition.getImplicitImports();
-            for (String imp : implicitImports)
-            {
-                list.add(imp);
-            }
-        }
-        return list;
-    }
 }

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/02e5a02f/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java
index 07da145..4f8482f 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java
@@ -21,9 +21,11 @@ package org.apache.flex.compiler.internal.codegen.js.utils;
 
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import org.apache.flex.compiler.constants.IASLanguageConstants;
@@ -50,6 +52,7 @@ import org.apache.flex.compiler.tree.as.IDefinitionNode;
 import org.apache.flex.compiler.tree.as.IFunctionNode;
 import org.apache.flex.compiler.tree.as.IIdentifierNode;
 import org.apache.flex.compiler.tree.as.IPackageNode;
+import org.apache.flex.compiler.tree.as.IParameterNode;
 import org.apache.flex.compiler.tree.as.IScopedNode;
 import org.apache.flex.compiler.tree.as.ITypeNode;
 
@@ -167,13 +170,50 @@ public class EmitterUtils
         return (tnode != null) ? tnode.getDefinition() : null;
     }
 
+    public static IParameterNode getRest(IParameterNode[] nodes)
+    {
+        for (IParameterNode node : nodes)
+        {
+            if (node.isRest())
+                return node;
+        }
+
+        return null;
+    }
+
+    public static Map<Integer, IParameterNode> getDefaults(
+            IParameterNode[] nodes)
+    {
+        Map<Integer, IParameterNode> result = new HashMap<Integer, IParameterNode>();
+        int i = 0;
+        boolean hasDefaults = false;
+        for (IParameterNode node : nodes)
+        {
+            if (node.hasDefaultValue())
+            {
+                hasDefaults = true;
+                result.put(i, node);
+            }
+            else
+            {
+                result.put(i, null);
+            }
+            i++;
+        }
+
+        if (!hasDefaults)
+            return null;
+
+        return result;
+    }
+
     public static boolean writeThis(ICompilerProject project,
             JSSessionModel model, IIdentifierNode node)
     {
         IClassNode classNode = (IClassNode) node
                 .getAncestorOfType(IClassNode.class);
 
-        IDefinition nodeDef = ((IIdentifierNode) node).resolve(project);
+        IDefinition nodeDef = node.resolve(project);
 
         IASNode parentNode = node.getParent();
         ASTNodeID parentNodeId = parentNode.getNodeID();

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/02e5a02f/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
index dab4472..b436b8a 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
@@ -267,7 +267,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
         boolean isLocal = false;
         if (node.getFunctionClassification() == IFunctionDefinition.FunctionClassification.LOCAL)
             isLocal = true;
-        if (hasBody(node) && !isStatic && !isLocal)
+        if (EmitterUtils.hasBody(node) && !isStatic && !isLocal)
             emitSelfReference(node);
 
         emitRestParameterCodeBlock(node);
@@ -280,7 +280,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
         }
 
         if (node.isConstructor() && hasSuperClass(node)
-                && !hasSuperCall(node.getScopedNode()))
+                && !EmitterUtils.hasSuperCall(node.getScopedNode()))
             emitSuperCall(node, JSSessionModel.CONSTRUCTOR_FULL);
     }
 
@@ -578,7 +578,6 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
         }
     }
 
-    @Override
     protected boolean hasSuperClass(IDefinitionNode node)
     {
         ICompilerProject project = getWalker().getProject();
@@ -1182,13 +1181,14 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
         if (pnodes.length == 0)
             return;
 
-        Map<Integer, IParameterNode> defaults = getDefaults(pnodes);
+        Map<Integer, IParameterNode> defaults = EmitterUtils
+                .getDefaults(pnodes);
 
         if (defaults != null)
         {
             final StringBuilder code = new StringBuilder();
 
-            if (!hasBody(node))
+            if (!EmitterUtils.hasBody(node))
             {
                 indentPush();
                 write(JSFlexJSEmitterTokens.INDENT);
@@ -1231,7 +1231,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
 
                     write(code.toString());
 
-                    if (i == n - 1 && !hasBody(node))
+                    if (i == n - 1 && !EmitterUtils.hasBody(node))
                         indentPop();
 
                     writeNewline();


[12/35] git commit: [flex-falcon] [refs/heads/IDEA-FLEX_JS_COMPILER] - - Refactored as and is to emitter. - Fixed the call placements/name of the AccessorEmitter.

Posted by ft...@apache.org.
- Refactored as and is to emitter.
- Fixed the call placements/name of the AccessorEmitter.


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

Branch: refs/heads/IDEA-FLEX_JS_COMPILER
Commit: 13a2313befc8b2651705df845da22e770c1b553b
Parents: ad488d8
Author: Michael Schmalle <ms...@apache.org>
Authored: Sun May 31 12:32:26 2015 -0400
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:40:30 2015 +0100

----------------------------------------------------------------------
 .../codegen/js/flexjs/JSFlexJSEmitter.java      | 101 ++-----
 .../internal/codegen/js/jx/AccessorEmitter.java | 303 +++++++++++++++++++
 .../internal/codegen/js/jx/AsIsEmitter.java     | 118 ++++++++
 .../internal/codegen/js/jx/ClassEmitter.java    |  23 +-
 .../internal/codegen/js/jx/GetSetEmitter.java   | 290 ------------------
 .../codegen/mxml/flexjs/MXMLFlexJSEmitter.java  |  12 +-
 6 files changed, 456 insertions(+), 391 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/13a2313b/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 f86ca5a..2460d3f 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
@@ -21,12 +21,10 @@ package org.apache.flex.compiler.internal.codegen.js.flexjs;
 
 import java.io.FilterWriter;
 
-import org.apache.flex.compiler.asdoc.flexjs.ASDocComment;
 import org.apache.flex.compiler.codegen.IDocEmitter;
 import org.apache.flex.compiler.codegen.js.flexjs.IJSFlexJSEmitter;
 import org.apache.flex.compiler.common.ASModifier;
 import org.apache.flex.compiler.common.IMetaInfo;
-import org.apache.flex.compiler.definitions.IDefinition;
 import org.apache.flex.compiler.definitions.IFunctionDefinition;
 import org.apache.flex.compiler.definitions.IPackageDefinition;
 import org.apache.flex.compiler.definitions.ITypeDefinition;
@@ -34,7 +32,10 @@ import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
 import org.apache.flex.compiler.internal.codegen.js.JSEmitterTokens;
 import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitter;
 import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.jx.AccessorEmitter;
+import org.apache.flex.compiler.internal.codegen.js.jx.AsIsEmitter;
 import org.apache.flex.compiler.internal.codegen.js.jx.BinaryOperatorEmitter;
+import org.apache.flex.compiler.internal.codegen.js.jx.BindableEmitter;
 import org.apache.flex.compiler.internal.codegen.js.jx.ClassEmitter;
 import org.apache.flex.compiler.internal.codegen.js.jx.FieldEmitter;
 import org.apache.flex.compiler.internal.codegen.js.jx.ForEachEmitter;
@@ -81,20 +82,34 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
     private PackageHeaderEmitter packageHeaderEmitter;
     private PackageFooterEmitter packageFooterEmitter;
 
+    private BindableEmitter bindableEmitter;
+
     private ClassEmitter classEmitter;
     private FieldEmitter fieldEmitter;
+    private AccessorEmitter accessorEmitter;
     private FunctionCallEmitter functionCallEmitter;
     private SuperCallEmitter superCallEmitter;
     private ForEachEmitter forEachEmitter;
     private MemberAccessEmitter memberAccessEmitter;
+    private AsIsEmitter asIsEmitter;
     private BinaryOperatorEmitter binaryOperatorEmitter;
     private IdentifierEmitter identifierEmitter;
 
+    public BindableEmitter getBindableEmitter()
+    {
+        return bindableEmitter;
+    }
+
     public ClassEmitter getClassEmiter()
     {
         return classEmitter;
     }
 
+    public AccessorEmitter getAccessorEmitter()
+    {
+        return accessorEmitter;
+    }
+
     @Override
     public IDocEmitter getDocEmitter()
     {
@@ -110,12 +125,16 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
         packageHeaderEmitter = new PackageHeaderEmitter(this);
         packageFooterEmitter = new PackageFooterEmitter(this);
 
+        bindableEmitter = new BindableEmitter(this);
+
         classEmitter = new ClassEmitter(this);
         fieldEmitter = new FieldEmitter(this);
+        accessorEmitter = new AccessorEmitter(this);
         functionCallEmitter = new FunctionCallEmitter(this);
         superCallEmitter = new SuperCallEmitter(this);
         forEachEmitter = new ForEachEmitter(this);
         memberAccessEmitter = new MemberAccessEmitter(this);
+        asIsEmitter = new AsIsEmitter(this);
         binaryOperatorEmitter = new BinaryOperatorEmitter(this);
         identifierEmitter = new IdentifierEmitter(this);
     }
@@ -156,14 +175,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
     @Override
     public void emitAccessors(IAccessorNode node)
     {
-        if (node.getNodeID() == ASTNodeID.GetterID)
-        {
-            emitGetAccessor((IGetterNode) node);
-        }
-        else if (node.getNodeID() == ASTNodeID.SetterID)
-        {
-            emitSetAccessor((ISetterNode) node);
-        }
+        accessorEmitter.emit(node);
     }
 
     @Override
@@ -210,70 +222,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
     public void emitIsAs(IExpressionNode left, IExpressionNode right,
             ASTNodeID id, boolean coercion)
     {
-        // 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
-            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)
-            write(ASEmitterTokens.IS);
-        else
-            write(ASEmitterTokens.AS);
-        write(ASEmitterTokens.PAREN_OPEN);
-        getWalker().walk(left);
-        writeToken(ASEmitterTokens.COMMA);
-
-        if (dnode != null)
-            write(formatQualifiedName(dnode.getQualifiedName()));
-        else
-            getWalker().walk(right);
-
-        if (coercion)
-        {
-            writeToken(ASEmitterTokens.COMMA);
-            write(ASEmitterTokens.TRUE);
-        }
-
-        write(ASEmitterTokens.PAREN_CLOSE);
+        asIsEmitter.emitIsAs(left, right, id, coercion);
     }
 
     @Override
@@ -289,13 +238,13 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
     @Override
     public void emitGetAccessor(IGetterNode node)
     {
-        classEmitter.getGetSetEmitter().emitGet(node);
+        accessorEmitter.emitGet(node);
     }
 
     @Override
     public void emitSetAccessor(ISetterNode node)
     {
-        classEmitter.getGetSetEmitter().emitSet(node);
+        accessorEmitter.emitSet(node);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/13a2313b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/AccessorEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/AccessorEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/AccessorEmitter.java
new file mode 100644
index 0000000..0d0bd66
--- /dev/null
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/AccessorEmitter.java
@@ -0,0 +1,303 @@
+/*
+ *
+ *  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.js.jx;
+
+import java.util.HashMap;
+import java.util.Set;
+
+import org.apache.flex.compiler.codegen.ISubEmitter;
+import org.apache.flex.compiler.codegen.js.IJSEmitter;
+import org.apache.flex.compiler.common.ASModifier;
+import org.apache.flex.compiler.common.IMetaInfo;
+import org.apache.flex.compiler.common.ModifiersSet;
+import org.apache.flex.compiler.definitions.IClassDefinition;
+import org.apache.flex.compiler.definitions.IFunctionDefinition;
+import org.apache.flex.compiler.definitions.ITypeDefinition;
+import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSDocEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSSessionModel.PropertyNodes;
+import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSDocEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitter;
+import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitterTokens;
+import org.apache.flex.compiler.internal.tree.as.FunctionNode;
+import org.apache.flex.compiler.internal.tree.as.SetterNode;
+import org.apache.flex.compiler.tree.ASTNodeID;
+import org.apache.flex.compiler.tree.as.IAccessorNode;
+import org.apache.flex.compiler.tree.as.IGetterNode;
+import org.apache.flex.compiler.tree.as.ISetterNode;
+
+public class AccessorEmitter extends JSSubEmitter implements
+        ISubEmitter<IAccessorNode>
+{
+
+    public AccessorEmitter(IJSEmitter emitter)
+    {
+        super(emitter);
+    }
+
+    @Override
+    public void emit(IAccessorNode node)
+    {
+        if (node.getNodeID() == ASTNodeID.GetterID)
+        {
+            emitGet((IGetterNode) node);
+        }
+        else if (node.getNodeID() == ASTNodeID.SetterID)
+        {
+            emitSet((ISetterNode) node);
+        }
+    }
+
+    public void emit(IClassDefinition definition)
+    {
+        // TODO (mschmalle) will remove this cast as more things get abstracted
+        JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
+
+        if (!getModel().getPropertyMap().isEmpty())
+        {
+            writeNewline();
+            writeNewline();
+            writeNewline();
+            write(JSGoogEmitterTokens.OBJECT);
+            write(ASEmitterTokens.MEMBER_ACCESS);
+            write(JSEmitterTokens.DEFINE_PROPERTIES);
+            write(ASEmitterTokens.PAREN_OPEN);
+            String qname = definition.getQualifiedName();
+            write(fjs.formatQualifiedName(qname));
+            write(ASEmitterTokens.MEMBER_ACCESS);
+            write(JSEmitterTokens.PROTOTYPE);
+            write(ASEmitterTokens.COMMA);
+            write(ASEmitterTokens.SPACE);
+            write("/** @lends {" + fjs.formatQualifiedName(qname)
+                    + ".prototype} */ ");
+            writeNewline(ASEmitterTokens.BLOCK_OPEN);
+
+            Set<String> propertyNames = getModel().getPropertyMap().keySet();
+            boolean firstTime = true;
+            for (String propName : propertyNames)
+            {
+                if (firstTime)
+                    firstTime = false;
+                else
+                    writeNewline(ASEmitterTokens.COMMA);
+
+                PropertyNodes p = getModel().getPropertyMap().get(propName);
+                writeNewline("/** @expose */");
+                write(propName);
+                write(ASEmitterTokens.COLON);
+                write(ASEmitterTokens.SPACE);
+                writeNewline(ASEmitterTokens.BLOCK_OPEN);
+                if (p.getter != null)
+                {
+                    write(ASEmitterTokens.GET);
+                    write(ASEmitterTokens.COLON);
+                    write(ASEmitterTokens.SPACE);
+                    write(JSDocEmitterTokens.JSDOC_OPEN);
+                    write(ASEmitterTokens.SPACE);
+                    write(ASEmitterTokens.ATSIGN);
+                    write(ASEmitterTokens.THIS);
+                    write(ASEmitterTokens.SPACE);
+                    write(ASEmitterTokens.BLOCK_OPEN);
+                    write(fjs.formatQualifiedName(qname));
+                    write(ASEmitterTokens.BLOCK_CLOSE);
+                    write(ASEmitterTokens.SPACE);
+                    write(JSDocEmitterTokens.JSDOC_CLOSE);
+                    write(ASEmitterTokens.SPACE);
+                    write(ASEmitterTokens.FUNCTION);
+                    fjs.emitParameters(p.getter.getParameterNodes());
+
+                    fjs.emitDefinePropertyFunction(p.getter);
+                }
+                if (p.setter != null)
+                {
+                    if (p.getter != null)
+                        writeNewline(ASEmitterTokens.COMMA);
+
+                    write(ASEmitterTokens.SET);
+                    write(ASEmitterTokens.COLON);
+                    write(ASEmitterTokens.SPACE);
+                    write(JSDocEmitterTokens.JSDOC_OPEN);
+                    write(ASEmitterTokens.SPACE);
+                    write(ASEmitterTokens.ATSIGN);
+                    write(ASEmitterTokens.THIS);
+                    write(ASEmitterTokens.SPACE);
+                    write(ASEmitterTokens.BLOCK_OPEN);
+                    write(fjs.formatQualifiedName(qname));
+                    write(ASEmitterTokens.BLOCK_CLOSE);
+                    write(ASEmitterTokens.SPACE);
+                    write(JSDocEmitterTokens.JSDOC_CLOSE);
+                    write(ASEmitterTokens.SPACE);
+                    write(ASEmitterTokens.FUNCTION);
+                    fjs.emitParameters(p.setter.getParameterNodes());
+
+                    fjs.emitDefinePropertyFunction(p.setter);
+                }
+                write(ASEmitterTokens.BLOCK_CLOSE);
+            }
+            writeNewline(ASEmitterTokens.BLOCK_CLOSE);
+            write(ASEmitterTokens.PAREN_CLOSE);
+            write(ASEmitterTokens.SEMICOLON);
+        }
+        if (!getModel().getStaticPropertyMap().isEmpty())
+        {
+            write(JSGoogEmitterTokens.OBJECT);
+            write(ASEmitterTokens.MEMBER_ACCESS);
+            write(JSEmitterTokens.DEFINE_PROPERTIES);
+            write(ASEmitterTokens.PAREN_OPEN);
+            String qname = definition.getQualifiedName();
+            write(fjs.formatQualifiedName(qname));
+            write(ASEmitterTokens.COMMA);
+            write(ASEmitterTokens.SPACE);
+            write("/** @lends {" + fjs.formatQualifiedName(qname) + "} */ ");
+            writeNewline(ASEmitterTokens.BLOCK_OPEN);
+
+            Set<String> propertyNames = getModel().getStaticPropertyMap()
+                    .keySet();
+            boolean firstTime = true;
+            for (String propName : propertyNames)
+            {
+                if (firstTime)
+                    firstTime = false;
+                else
+                    writeNewline(ASEmitterTokens.COMMA);
+
+                PropertyNodes p = getModel().getStaticPropertyMap().get(
+                        propName);
+                writeNewline("/** @expose */");
+                write(propName);
+                write(ASEmitterTokens.COLON);
+                write(ASEmitterTokens.SPACE);
+                writeNewline(ASEmitterTokens.BLOCK_OPEN);
+                if (p.getter != null)
+                {
+                    write(ASEmitterTokens.GET);
+                    write(ASEmitterTokens.COLON);
+                    write(ASEmitterTokens.SPACE);
+                    write(ASEmitterTokens.FUNCTION);
+                    fjs.emitParameters(p.getter.getParameterNodes());
+
+                    fjs.emitDefinePropertyFunction(p.getter);
+                }
+                if (p.setter != null)
+                {
+                    if (p.getter != null)
+                        writeNewline(ASEmitterTokens.COMMA);
+
+                    write(ASEmitterTokens.SET);
+                    write(ASEmitterTokens.COLON);
+                    write(ASEmitterTokens.SPACE);
+                    write(ASEmitterTokens.FUNCTION);
+                    fjs.emitParameters(p.setter.getParameterNodes());
+
+                    fjs.emitDefinePropertyFunction(p.setter);
+                }
+                write(ASEmitterTokens.BLOCK_CLOSE);
+            }
+            writeNewline(ASEmitterTokens.BLOCK_CLOSE);
+            write(ASEmitterTokens.PAREN_CLOSE);
+            write(ASEmitterTokens.SEMICOLON);
+        }
+    }
+
+    public void emitGet(IGetterNode node)
+    {
+        // TODO (mschmalle) will remove this cast as more things get abstracted
+        JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
+
+        ModifiersSet modifierSet = node.getDefinition().getModifiers();
+        boolean isStatic = (modifierSet != null && modifierSet
+                .hasModifier(ASModifier.STATIC));
+        HashMap<String, PropertyNodes> map = isStatic ? getModel()
+                .getStaticPropertyMap() : getModel().getPropertyMap();
+        String name = node.getName();
+        PropertyNodes p = map.get(name);
+        if (p == null)
+        {
+            p = new PropertyNodes();
+            map.put(name, p);
+        }
+        p.getter = node;
+        FunctionNode fn = (FunctionNode) node;
+        fn.parseFunctionBody(fjs.getProblems());
+    }
+
+    public void emitSet(ISetterNode node)
+    {
+        // TODO (mschmalle) will remove this cast as more things get abstracted
+        JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
+        JSFlexJSDocEmitter doc = (JSFlexJSDocEmitter) fjs.getDocEmitter();
+
+        ModifiersSet modifierSet = node.getDefinition().getModifiers();
+        boolean isStatic = (modifierSet != null && modifierSet
+                .hasModifier(ASModifier.STATIC));
+        HashMap<String, PropertyNodes> map = isStatic ? getModel()
+                .getStaticPropertyMap() : getModel().getPropertyMap();
+        String name = node.getName();
+        PropertyNodes p = map.get(name);
+        if (p == null)
+        {
+            p = new PropertyNodes();
+            map.put(name, p);
+        }
+        p.setter = node;
+        FunctionNode fn = (FunctionNode) node;
+        fn.parseFunctionBody(fjs.getProblems());
+
+        boolean isBindableSetter = false;
+        if (node instanceof SetterNode)
+        {
+            IMetaInfo[] metaInfos = null;
+            metaInfos = node.getMetaInfos();
+            for (IMetaInfo metaInfo : metaInfos)
+            {
+                name = metaInfo.getTagName();
+                if (name.equals("Bindable")
+                        && metaInfo.getAllAttributes().length == 0)
+                {
+                    isBindableSetter = true;
+                    break;
+                }
+            }
+        }
+        if (isBindableSetter)
+        {
+            IFunctionDefinition definition = node.getDefinition();
+            ITypeDefinition type = (ITypeDefinition) definition.getParent();
+            doc.emitMethodDoc(fn, getProject());
+            write(fjs.formatQualifiedName(type.getQualifiedName()));
+            if (!node.hasModifier(ASModifier.STATIC))
+            {
+                write(ASEmitterTokens.MEMBER_ACCESS);
+                write(JSEmitterTokens.PROTOTYPE);
+            }
+
+            write(ASEmitterTokens.MEMBER_ACCESS);
+            write("__bindingWrappedSetter__");
+            writeToken(node.getName());
+            writeToken(ASEmitterTokens.EQUAL);
+            write(ASEmitterTokens.FUNCTION);
+            fjs.emitParameters(node.getParameterNodes());
+            //writeNewline();
+            fjs.emitMethodScope(node.getScopedNode());
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/13a2313b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/AsIsEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/AsIsEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/AsIsEmitter.java
new file mode 100644
index 0000000..5d243c7
--- /dev/null
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/AsIsEmitter.java
@@ -0,0 +1,118 @@
+/*
+ *
+ *  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.js.jx;
+
+import org.apache.flex.compiler.asdoc.flexjs.ASDocComment;
+import org.apache.flex.compiler.codegen.js.IJSEmitter;
+import org.apache.flex.compiler.definitions.IDefinition;
+import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitterTokens;
+import org.apache.flex.compiler.tree.ASTNodeID;
+import org.apache.flex.compiler.tree.as.IExpressionNode;
+import org.apache.flex.compiler.tree.as.IFunctionNode;
+
+public class AsIsEmitter extends JSSubEmitter
+{
+
+    public AsIsEmitter(IJSEmitter emitter)
+    {
+        super(emitter);
+    }
+
+    public void emitIsAs(IExpressionNode left, IExpressionNode right,
+            ASTNodeID id, boolean coercion)
+    {
+        // TODO (mschmalle) will remove this cast as more things get abstracted
+        JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
+
+        // project is null in unit tests
+        //IDefinition dnode = project != null ? (right).resolve(project) : null;
+        IDefinition dnode = getProject() != null ? (right)
+                .resolve(getProject()) : null;
+        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)
+            write(ASEmitterTokens.IS);
+        else
+            write(ASEmitterTokens.AS);
+
+        write(ASEmitterTokens.PAREN_OPEN);
+        getWalker().walk(left);
+        writeToken(ASEmitterTokens.COMMA);
+
+        if (dnode != null)
+            write(fjs.formatQualifiedName(dnode.getQualifiedName()));
+        else
+            getWalker().walk(right);
+
+        if (coercion)
+        {
+            writeToken(ASEmitterTokens.COMMA);
+            write(ASEmitterTokens.TRUE);
+        }
+
+        write(ASEmitterTokens.PAREN_CLOSE);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/13a2313b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/ClassEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/ClassEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/ClassEmitter.java
index 33f6f26..516bd98 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/ClassEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/ClassEmitter.java
@@ -39,26 +39,10 @@ import org.apache.flex.compiler.tree.as.IVariableNode;
 public class ClassEmitter extends JSSubEmitter implements
         ISubEmitter<IClassNode>
 {
-    private BindableEmitter bindableEmitter;
-    private GetSetEmitter getSetEmitter;
-    
-    public BindableEmitter getBindableEmitter()
-    {
-        return bindableEmitter;
-    }
-    
-    public GetSetEmitter getGetSetEmitter()
-    {
-        return getSetEmitter;
-    }
-    
+
     public ClassEmitter(IJSEmitter emitter)
     {
         super(emitter);
-        
-        bindableEmitter = new BindableEmitter(emitter);
-        // TODO (mschnalle) this is wrong
-        getSetEmitter = new GetSetEmitter(emitter);
     }
 
     @Override
@@ -150,8 +134,7 @@ public class ClassEmitter extends JSSubEmitter implements
             }
         }
 
-        bindableEmitter.emit(definition);
-
-        getSetEmitter.emit(definition);
+        fjs.getBindableEmitter().emit(definition);
+        fjs.getAccessorEmitter().emit(definition);
     }
 }

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/13a2313b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/GetSetEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/GetSetEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/GetSetEmitter.java
deleted file mode 100644
index 0f996ce..0000000
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/GetSetEmitter.java
+++ /dev/null
@@ -1,290 +0,0 @@
-/*
- *
- *  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.js.jx;
-
-import java.util.HashMap;
-import java.util.Set;
-
-import org.apache.flex.compiler.codegen.ISubEmitter;
-import org.apache.flex.compiler.codegen.js.IJSEmitter;
-import org.apache.flex.compiler.common.ASModifier;
-import org.apache.flex.compiler.common.IMetaInfo;
-import org.apache.flex.compiler.common.ModifiersSet;
-import org.apache.flex.compiler.definitions.IClassDefinition;
-import org.apache.flex.compiler.definitions.IFunctionDefinition;
-import org.apache.flex.compiler.definitions.ITypeDefinition;
-import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
-import org.apache.flex.compiler.internal.codegen.js.JSDocEmitterTokens;
-import org.apache.flex.compiler.internal.codegen.js.JSEmitterTokens;
-import org.apache.flex.compiler.internal.codegen.js.JSSessionModel.PropertyNodes;
-import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
-import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSDocEmitter;
-import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitter;
-import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitterTokens;
-import org.apache.flex.compiler.internal.tree.as.FunctionNode;
-import org.apache.flex.compiler.internal.tree.as.SetterNode;
-import org.apache.flex.compiler.tree.as.IGetterNode;
-import org.apache.flex.compiler.tree.as.ISetterNode;
-
-public class GetSetEmitter extends JSSubEmitter implements
-        ISubEmitter<IClassDefinition>
-{
-
-    public GetSetEmitter(IJSEmitter emitter)
-    {
-        super(emitter);
-    }
-
-    @Override
-    public void emit(IClassDefinition definition)
-    {
-        // TODO (mschmalle) will remove this cast as more things get abstracted
-        JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
-
-        if (!getModel().getPropertyMap().isEmpty())
-        {
-            writeNewline();
-            writeNewline();
-            writeNewline();
-            write(JSGoogEmitterTokens.OBJECT);
-            write(ASEmitterTokens.MEMBER_ACCESS);
-            write(JSEmitterTokens.DEFINE_PROPERTIES);
-            write(ASEmitterTokens.PAREN_OPEN);
-            String qname = definition.getQualifiedName();
-            write(fjs.formatQualifiedName(qname));
-            write(ASEmitterTokens.MEMBER_ACCESS);
-            write(JSEmitterTokens.PROTOTYPE);
-            write(ASEmitterTokens.COMMA);
-            write(ASEmitterTokens.SPACE);
-            write("/** @lends {" + fjs.formatQualifiedName(qname)
-                    + ".prototype} */ ");
-            writeNewline(ASEmitterTokens.BLOCK_OPEN);
-
-            Set<String> propertyNames = getModel().getPropertyMap().keySet();
-            boolean firstTime = true;
-            for (String propName : propertyNames)
-            {
-                if (firstTime)
-                    firstTime = false;
-                else
-                    writeNewline(ASEmitterTokens.COMMA);
-
-                PropertyNodes p = getModel().getPropertyMap().get(propName);
-                writeNewline("/** @expose */");
-                write(propName);
-                write(ASEmitterTokens.COLON);
-                write(ASEmitterTokens.SPACE);
-                writeNewline(ASEmitterTokens.BLOCK_OPEN);
-                if (p.getter != null)
-                {
-                    write(ASEmitterTokens.GET);
-                    write(ASEmitterTokens.COLON);
-                    write(ASEmitterTokens.SPACE);
-                    write(JSDocEmitterTokens.JSDOC_OPEN);
-                    write(ASEmitterTokens.SPACE);
-                    write(ASEmitterTokens.ATSIGN);
-                    write(ASEmitterTokens.THIS);
-                    write(ASEmitterTokens.SPACE);
-                    write(ASEmitterTokens.BLOCK_OPEN);
-                    write(fjs.formatQualifiedName(qname));
-                    write(ASEmitterTokens.BLOCK_CLOSE);
-                    write(ASEmitterTokens.SPACE);
-                    write(JSDocEmitterTokens.JSDOC_CLOSE);
-                    write(ASEmitterTokens.SPACE);
-                    write(ASEmitterTokens.FUNCTION);
-                    fjs.emitParameters(p.getter.getParameterNodes());
-
-                    fjs.emitDefinePropertyFunction(p.getter);
-                }
-                if (p.setter != null)
-                {
-                    if (p.getter != null)
-                        writeNewline(ASEmitterTokens.COMMA);
-
-                    write(ASEmitterTokens.SET);
-                    write(ASEmitterTokens.COLON);
-                    write(ASEmitterTokens.SPACE);
-                    write(JSDocEmitterTokens.JSDOC_OPEN);
-                    write(ASEmitterTokens.SPACE);
-                    write(ASEmitterTokens.ATSIGN);
-                    write(ASEmitterTokens.THIS);
-                    write(ASEmitterTokens.SPACE);
-                    write(ASEmitterTokens.BLOCK_OPEN);
-                    write(fjs.formatQualifiedName(qname));
-                    write(ASEmitterTokens.BLOCK_CLOSE);
-                    write(ASEmitterTokens.SPACE);
-                    write(JSDocEmitterTokens.JSDOC_CLOSE);
-                    write(ASEmitterTokens.SPACE);
-                    write(ASEmitterTokens.FUNCTION);
-                    fjs.emitParameters(p.setter.getParameterNodes());
-
-                    fjs.emitDefinePropertyFunction(p.setter);
-                }
-                write(ASEmitterTokens.BLOCK_CLOSE);
-            }
-            writeNewline(ASEmitterTokens.BLOCK_CLOSE);
-            write(ASEmitterTokens.PAREN_CLOSE);
-            write(ASEmitterTokens.SEMICOLON);
-        }
-        if (!getModel().getStaticPropertyMap().isEmpty())
-        {
-            write(JSGoogEmitterTokens.OBJECT);
-            write(ASEmitterTokens.MEMBER_ACCESS);
-            write(JSEmitterTokens.DEFINE_PROPERTIES);
-            write(ASEmitterTokens.PAREN_OPEN);
-            String qname = definition.getQualifiedName();
-            write(fjs.formatQualifiedName(qname));
-            write(ASEmitterTokens.COMMA);
-            write(ASEmitterTokens.SPACE);
-            write("/** @lends {" + fjs.formatQualifiedName(qname) + "} */ ");
-            writeNewline(ASEmitterTokens.BLOCK_OPEN);
-
-            Set<String> propertyNames = getModel().getStaticPropertyMap()
-                    .keySet();
-            boolean firstTime = true;
-            for (String propName : propertyNames)
-            {
-                if (firstTime)
-                    firstTime = false;
-                else
-                    writeNewline(ASEmitterTokens.COMMA);
-
-                PropertyNodes p = getModel().getStaticPropertyMap().get(
-                        propName);
-                writeNewline("/** @expose */");
-                write(propName);
-                write(ASEmitterTokens.COLON);
-                write(ASEmitterTokens.SPACE);
-                writeNewline(ASEmitterTokens.BLOCK_OPEN);
-                if (p.getter != null)
-                {
-                    write(ASEmitterTokens.GET);
-                    write(ASEmitterTokens.COLON);
-                    write(ASEmitterTokens.SPACE);
-                    write(ASEmitterTokens.FUNCTION);
-                    fjs.emitParameters(p.getter.getParameterNodes());
-
-                    fjs.emitDefinePropertyFunction(p.getter);
-                }
-                if (p.setter != null)
-                {
-                    if (p.getter != null)
-                        writeNewline(ASEmitterTokens.COMMA);
-
-                    write(ASEmitterTokens.SET);
-                    write(ASEmitterTokens.COLON);
-                    write(ASEmitterTokens.SPACE);
-                    write(ASEmitterTokens.FUNCTION);
-                    fjs.emitParameters(p.setter.getParameterNodes());
-
-                    fjs.emitDefinePropertyFunction(p.setter);
-                }
-                write(ASEmitterTokens.BLOCK_CLOSE);
-            }
-            writeNewline(ASEmitterTokens.BLOCK_CLOSE);
-            write(ASEmitterTokens.PAREN_CLOSE);
-            write(ASEmitterTokens.SEMICOLON);
-        }
-    }
-    
-    
-    public void emitGet(IGetterNode node)
-    {
-        // TODO (mschmalle) will remove this cast as more things get abstracted
-        JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
-        
-        ModifiersSet modifierSet = node.getDefinition().getModifiers();
-        boolean isStatic = (modifierSet != null && modifierSet
-                .hasModifier(ASModifier.STATIC));
-        HashMap<String, PropertyNodes> map = isStatic ? getModel()
-                .getStaticPropertyMap() : getModel().getPropertyMap();
-        String name = node.getName();
-        PropertyNodes p = map.get(name);
-        if (p == null)
-        {
-            p = new PropertyNodes();
-            map.put(name, p);
-        }
-        p.getter = node;
-        FunctionNode fn = (FunctionNode) node;
-        fn.parseFunctionBody(fjs.getProblems());
-    }
-
-    public void emitSet(ISetterNode node)
-    {
-        // TODO (mschmalle) will remove this cast as more things get abstracted
-        JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
-        JSFlexJSDocEmitter doc = (JSFlexJSDocEmitter) fjs.getDocEmitter();
-        
-        ModifiersSet modifierSet = node.getDefinition().getModifiers();
-        boolean isStatic = (modifierSet != null && modifierSet
-                .hasModifier(ASModifier.STATIC));
-        HashMap<String, PropertyNodes> map = isStatic ? getModel()
-                .getStaticPropertyMap() : getModel().getPropertyMap();
-        String name = node.getName();
-        PropertyNodes p = map.get(name);
-        if (p == null)
-        {
-            p = new PropertyNodes();
-            map.put(name, p);
-        }
-        p.setter = node;
-        FunctionNode fn = (FunctionNode) node;
-        fn.parseFunctionBody(fjs.getProblems());
-
-        boolean isBindableSetter = false;
-        if (node instanceof SetterNode)
-        {
-            IMetaInfo[] metaInfos = null;
-            metaInfos = node.getMetaInfos();
-            for (IMetaInfo metaInfo : metaInfos)
-            {
-                name = metaInfo.getTagName();
-                if (name.equals("Bindable")
-                        && metaInfo.getAllAttributes().length == 0)
-                {
-                    isBindableSetter = true;
-                    break;
-                }
-            }
-        }
-        if (isBindableSetter)
-        {
-            IFunctionDefinition definition = node.getDefinition();
-            ITypeDefinition type = (ITypeDefinition) definition.getParent();
-            doc.emitMethodDoc(fn, getProject());
-            write(fjs.formatQualifiedName(type.getQualifiedName()));
-            if (!node.hasModifier(ASModifier.STATIC))
-            {
-                write(ASEmitterTokens.MEMBER_ACCESS);
-                write(JSEmitterTokens.PROTOTYPE);
-            }
-
-            write(ASEmitterTokens.MEMBER_ACCESS);
-            write("__bindingWrappedSetter__");
-            writeToken(node.getName());
-            writeToken(ASEmitterTokens.EQUAL);
-            write(ASEmitterTokens.FUNCTION);
-            fjs.emitParameters(node.getParameterNodes());
-            //writeNewline();
-            fjs.emitMethodScope(node.getScopedNode());
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/13a2313b/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 4efa7a6..41fd718 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
@@ -182,9 +182,12 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements
         // visit MXML
         IClassDefinition cdef = node.getClassDefinition();
         classDefinition = cdef;
-        IASEmitter asEmitter = ((IMXMLBlockWalker) getMXMLWalker())
+        
+        // TODO (mschmalle) will remove this cast as more things get abstracted
+        JSFlexJSEmitter fjs = (JSFlexJSEmitter) ((IMXMLBlockWalker) getMXMLWalker())
                 .getASEmitter();
-        ((JSFlexJSEmitter) asEmitter).getModel().setCurrentClass(cdef);
+
+        fjs.getModel().setCurrentClass(cdef);
 
         // visit tags
         final int len = node.getChildCount();
@@ -210,8 +213,8 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements
 
         emitScripts();
 
-        ((JSFlexJSEmitter)asEmitter).getClassEmiter().getBindableEmitter().emit(cdef);
-        ((JSFlexJSEmitter)asEmitter).getClassEmiter().getGetSetEmitter().emit(cdef);
+        fjs.getBindableEmitter().emit(cdef);
+        fjs.getAccessorEmitter().emit(cdef);
         
         emitEvents(cname);
 
@@ -220,7 +223,6 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements
         emitMXMLDescriptorFuncs(cname);
 
         emitBindingData(cname, cdef);
-
     }
 
     public void emitSubDocument(IMXMLComponentNode node)


[28/35] git commit: [flex-falcon] [refs/heads/IDEA-FLEX_JS_COMPILER] - Cleanup organize.

Posted by ft...@apache.org.
Cleanup organize.


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

Branch: refs/heads/IDEA-FLEX_JS_COMPILER
Commit: e11ef01c3d3262df48a812f44a76744452d4012f
Parents: 7f04314
Author: Michael Schmalle <ms...@apache.org>
Authored: Sun May 31 15:16:36 2015 -0400
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:41:25 2015 +0100

----------------------------------------------------------------------
 .../codegen/js/flexjs/JSFlexJSEmitter.java      | 161 ++++++++++---------
 .../internal/codegen/js/goog/JSGoogEmitter.java |   4 +
 2 files changed, 91 insertions(+), 74 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/e11ef01c/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 4463d0a..66a5731 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
@@ -258,35 +258,45 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
         methodEmitter.emit(node);
     }
 
+    //--------------------------------------------------------------------------
+    // Statements
+    //--------------------------------------------------------------------------
+
     @Override
     public void emitFunctionCall(IFunctionCallNode node)
     {
         functionCallEmitter.emit(node);
     }
 
+    @Override
+    public void emitForEachLoop(IForLoopNode node)
+    {
+        forEachEmitter.emit(node);
+    }
+
+    //--------------------------------------------------------------------------
+    // Expressions
     //--------------------------------------------------------------------------
 
     @Override
-    protected void emitSelfReference(IFunctionNode node)
+    public void emitSuperCall(IASNode node, String type)
     {
-        // we don't want 'var self = this;' in FlexJS
-        // unless there are anonymous functions
-        if (node.containsAnonymousFunctions())
-            super.emitSelfReference(node);
+        superCallEmitter.emit(node, type);
     }
 
     @Override
-    public void emitIdentifier(IIdentifierNode node)
+    public void emitMemberAccessExpression(IMemberAccessExpressionNode node)
     {
-        identifierEmitter.emit(node);
+        memberAccessEmitter.emit(node);
     }
 
-    //--------------------------------------------------------------------------
-
     @Override
-    public void emitSuperCall(IASNode node, String type)
+    public void emitE4XFilter(IMemberAccessExpressionNode node)
     {
-        superCallEmitter.emit(node, type);
+        // ToDo (erikdebruin): implement E4X replacement !?!
+        write(ASEmitterTokens.SINGLE_QUOTE);
+        write("E4XFilter");
+        write(ASEmitterTokens.SINGLE_QUOTE);
     }
 
     @Override
@@ -295,6 +305,61 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
         binaryOperatorEmitter.emit(node);
     }
 
+    @Override
+    public void emitTypedExpression(ITypedExpressionNode node)
+    {
+        write(JSGoogEmitterTokens.ARRAY);
+    }
+
+    @Override
+    public void emitIdentifier(IIdentifierNode node)
+    {
+        identifierEmitter.emit(node);
+    }
+
+    @Override
+    public void emitLiteral(ILiteralNode node)
+    {
+        boolean isWritten = false;
+
+        String s = node.getValue(true);
+        if (!(node instanceof RegExpLiteralNode))
+        {
+            if (node.getLiteralType() == LiteralType.XML)
+            {
+                // ToDo (erikdebruin): VF2JS -> handle XML output properly...
+
+                write("'" + s + "'");
+
+                isWritten = true;
+            }
+            s = s.replaceAll("\n", "__NEWLINE_PLACEHOLDER__");
+            s = s.replaceAll("\r", "__CR_PLACEHOLDER__");
+            s = s.replaceAll("\t", "__TAB_PLACEHOLDER__");
+            s = s.replaceAll("\f", "__FORMFEED_PLACEHOLDER__");
+            s = s.replaceAll("\b", "__BACKSPACE_PLACEHOLDER__");
+            s = s.replaceAll("\\\\\"", "__QUOTE_PLACEHOLDER__");
+            s = s.replaceAll("\\\\", "__ESCAPE_PLACEHOLDER__");
+            //s = "\'" + s.replaceAll("\'", "\\\\\'") + "\'";
+            s = s.replaceAll("__ESCAPE_PLACEHOLDER__", "\\\\\\\\");
+            s = s.replaceAll("__QUOTE_PLACEHOLDER__", "\\\\\"");
+            s = s.replaceAll("__BACKSPACE_PLACEHOLDER__", "\\\\b");
+            s = s.replaceAll("__FORMFEED_PLACEHOLDER__", "\\\\f");
+            s = s.replaceAll("__TAB_PLACEHOLDER__", "\\\\t");
+            s = s.replaceAll("__CR_PLACEHOLDER__", "\\\\r");
+            s = s.replaceAll("__NEWLINE_PLACEHOLDER__", "\\\\n");
+        }
+
+        if (!isWritten)
+        {
+            write(s);
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    // Specific
+    //--------------------------------------------------------------------------
+
     public void emitIsAs(IExpressionNode left, IExpressionNode right,
             ASTNodeID id, boolean coercion)
     {
@@ -302,9 +367,18 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
     }
 
     @Override
-    public void emitMemberAccessExpression(IMemberAccessExpressionNode node)
+    protected void emitSelfReference(IFunctionNode node)
     {
-        memberAccessEmitter.emit(node);
+        // we don't want 'var self = this;' in FlexJS
+        // unless there are anonymous functions
+        if (node.containsAnonymousFunctions())
+        {
+            writeToken(ASEmitterTokens.VAR);
+            writeToken(JSGoogEmitterTokens.SELF);
+            writeToken(ASEmitterTokens.EQUAL);
+            write(ASEmitterTokens.THIS);
+            writeNewline(ASEmitterTokens.SEMICOLON);
+        }
     }
 
     @Override
@@ -434,65 +508,4 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
         else
             super.emitDefinePropertyFunction(node);
     }
-
-    @Override
-    public void emitForEachLoop(IForLoopNode node)
-    {
-        forEachEmitter.emit(node);
-    }
-
-    @Override
-    public void emitTypedExpression(ITypedExpressionNode node)
-    {
-        write(JSGoogEmitterTokens.ARRAY);
-    }
-
-    @Override
-    public void emitLiteral(ILiteralNode node)
-    {
-        boolean isWritten = false;
-
-        String s = node.getValue(true);
-        if (!(node instanceof RegExpLiteralNode))
-        {
-            if (node.getLiteralType() == LiteralType.XML)
-            {
-                // ToDo (erikdebruin): VF2JS -> handle XML output properly...
-
-                write("'" + s + "'");
-
-                isWritten = true;
-            }
-            s = s.replaceAll("\n", "__NEWLINE_PLACEHOLDER__");
-            s = s.replaceAll("\r", "__CR_PLACEHOLDER__");
-            s = s.replaceAll("\t", "__TAB_PLACEHOLDER__");
-            s = s.replaceAll("\f", "__FORMFEED_PLACEHOLDER__");
-            s = s.replaceAll("\b", "__BACKSPACE_PLACEHOLDER__");
-            s = s.replaceAll("\\\\\"", "__QUOTE_PLACEHOLDER__");
-            s = s.replaceAll("\\\\", "__ESCAPE_PLACEHOLDER__");
-            //s = "\'" + s.replaceAll("\'", "\\\\\'") + "\'";
-            s = s.replaceAll("__ESCAPE_PLACEHOLDER__", "\\\\\\\\");
-            s = s.replaceAll("__QUOTE_PLACEHOLDER__", "\\\\\"");
-            s = s.replaceAll("__BACKSPACE_PLACEHOLDER__", "\\\\b");
-            s = s.replaceAll("__FORMFEED_PLACEHOLDER__", "\\\\f");
-            s = s.replaceAll("__TAB_PLACEHOLDER__", "\\\\t");
-            s = s.replaceAll("__CR_PLACEHOLDER__", "\\\\r");
-            s = s.replaceAll("__NEWLINE_PLACEHOLDER__", "\\\\n");
-        }
-
-        if (!isWritten)
-        {
-            write(s);
-        }
-    }
-
-    @Override
-    public void emitE4XFilter(IMemberAccessExpressionNode node)
-    {
-        // ToDo (erikdebruin): implement E4X replacement !?!
-        write(ASEmitterTokens.SINGLE_QUOTE);
-        write("E4XFilter");
-        write(ASEmitterTokens.SINGLE_QUOTE);
-    }
-
 }

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/e11ef01c/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
index 40453ec..df64740 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
@@ -640,6 +640,7 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
         emitDefaultParameterCodeBlock(node);
     }
 
+    // XXX Dead
     protected void emitSelfReference(IFunctionNode node)
     {
         writeToken(ASEmitterTokens.VAR);
@@ -649,6 +650,7 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
         writeNewline(ASEmitterTokens.SEMICOLON);
     }
 
+    // XXX Dead
     protected void emitSuperCall(IASNode node, String type)
     {
         IFunctionNode fnode = (node instanceof IFunctionNode) ? (IFunctionNode) node
@@ -874,6 +876,7 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
         getWalker().walk(node.getCollectionNode());
     }
 
+    // XXX Dead
     @Override
     public void emitForEachLoop(IForLoopNode node)
     {
@@ -999,6 +1002,7 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
         emitBinaryOperator(node);
     }
 
+    // XXX Dead
     @Override
     public void emitBinaryOperator(IBinaryOperatorNode node)
     {


[17/35] git commit: [flex-falcon] [refs/heads/IDEA-FLEX_JS_COMPILER] - Make comment more distinct

Posted by ft...@apache.org.
Make comment more distinct

Signed-off-by: Erik de Bruin <er...@ixsoftware.nl>


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

Branch: refs/heads/IDEA-FLEX_JS_COMPILER
Commit: e5ac5e12d41c315967d52857e28c023aae271c1d
Parents: fcbdf11
Author: Erik de Bruin <er...@ixsoftware.nl>
Authored: Mon Feb 16 12:53:00 2015 +0100
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:40:47 2015 +0100

----------------------------------------------------------------------
 .../org/apache/flex/compiler/internal/graph/VF2JSDepsWriter.java   | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/e5ac5e12/compiler.jx/src/org/apache/flex/compiler/internal/graph/VF2JSDepsWriter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/graph/VF2JSDepsWriter.java b/compiler.jx/src/org/apache/flex/compiler/internal/graph/VF2JSDepsWriter.java
index 4d625d4..ade44c2 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/graph/VF2JSDepsWriter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/graph/VF2JSDepsWriter.java
@@ -74,7 +74,7 @@ public class VF2JSDepsWriter {
 	    this.problems = problems;
 		buildDB();
 		ArrayList<GoogDep> dps = sort(mainName);
-		String outString = "// generated by FalconJS" + "\n";
+		String outString = "// generated by FalconJX (VF2JS)" + "\n";
 		int n = dps.size();
 		for (int i = n - 1; i >= 0; i--)
 		{


[14/35] git commit: [flex-falcon] [refs/heads/IDEA-FLEX_JS_COMPILER] - Raise visibility to allow sub class to call from @override method

Posted by ft...@apache.org.
Raise visibility to allow sub class to call from @override method

Signed-off-by: Erik de Bruin <er...@ixsoftware.nl>


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

Branch: refs/heads/IDEA-FLEX_JS_COMPILER
Commit: e7636ff33693f7a40c778d53af45eccb45ed70cd
Parents: 7308a81
Author: Erik de Bruin <er...@ixsoftware.nl>
Authored: Mon Feb 16 12:51:12 2015 +0100
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:40:37 2015 +0100

----------------------------------------------------------------------
 .../flex/compiler/internal/codegen/js/goog/JSGoogDocEmitter.java   | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/e7636ff3/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogDocEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogDocEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogDocEmitter.java
index e402ac9..b8e513d 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogDocEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogDocEmitter.java
@@ -398,7 +398,7 @@ public class JSGoogDocEmitter extends JSDocEmitter implements IJSGoogDocEmitter
         emitJSDocLine(name.getToken(), "");
     }
 
-    private void emitJSDocLine(String name)
+    protected void emitJSDocLine(String name)
     {
         emitJSDocLine(name, "");
     }


[04/35] git commit: [flex-falcon] [refs/heads/IDEA-FLEX_JS_COMPILER] - - Refactored Class emitting into shared jx package for future use. - Refactored Bindable class level emittion; - Refactored GetSet class level emition - Created a shared model for eac

Posted by ft...@apache.org.
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/ab1c421d/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 ff44ab3..c6ba8d8 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
@@ -44,10 +44,11 @@ import org.apache.flex.compiler.definitions.INamespaceDefinition;
 import org.apache.flex.compiler.definitions.IPackageDefinition;
 import org.apache.flex.compiler.definitions.ITypeDefinition;
 import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
-import org.apache.flex.compiler.internal.codegen.js.JSDocEmitterTokens;
 import org.apache.flex.compiler.internal.codegen.js.JSEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSSessionModel.PropertyNodes;
 import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitter;
 import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.jx.ClassEmitter;
 import org.apache.flex.compiler.internal.definitions.AccessorDefinition;
 import org.apache.flex.compiler.internal.definitions.ClassDefinition;
 import org.apache.flex.compiler.internal.definitions.FunctionDefinition;
@@ -108,29 +109,28 @@ import org.apache.flex.compiler.utils.NativeUtils;
 public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
 {
 
-    public JSFlexJSEmitter(FilterWriter out)
+    private int foreachLoopCounter = 0;
+    
+    private ClassEmitter classEmitter;
+
+    public ClassEmitter getClassEmiter()
     {
-        super(out);
+        return classEmitter;
     }
 
-    public IDefinition thisClass;
-
-    class PropertyNodes
+    public JSFlexJSEmitter(FilterWriter out)
     {
-    	public IGetterNode getter;
-    	public ISetterNode setter;
+        super(out);
+
+        classEmitter = new ClassEmitter(this);
     }
-    
-    HashMap<String, PropertyNodes> propertyMap = new HashMap<String, PropertyNodes>();
-    HashMap<String, PropertyNodes> staticPropertyMap = new HashMap<String, PropertyNodes>();
-    ArrayList<String> bindableVars = new ArrayList<String>();
-    
+
     @Override
     protected void writeIndent()
     {
         write(JSFlexJSEmitterTokens.INDENT);
     }
-    
+
     @Override
     protected String getIndent(int numIndent)
     {
@@ -149,318 +149,9 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
     @Override
     public void emitClass(IClassNode node)
     {
-        thisClass = node.getDefinition();
-
-        ASDocComment asDoc = (ASDocComment) node.getASDocComment();
-        if (asDoc != null && MXMLJSC.keepASDoc)
-        	loadImportIgnores(asDoc.commentNoEnd());
-        
-        project = getWalker().getProject();
-
-        IClassDefinition definition = node.getDefinition();
-
-        IFunctionDefinition ctorDefinition = definition.getConstructor();
-
-        // Static-only (Singleton) classes may not have a constructor
-        if (ctorDefinition != null)
-        {
-            IFunctionNode ctorNode = (IFunctionNode) ctorDefinition.getNode();
-            if (ctorNode != null)
-            {
-                // constructor
-                emitMethod(ctorNode);
-                write(ASEmitterTokens.SEMICOLON);
-            }
-            else
-            {
-                String qname = definition.getQualifiedName();
-                if (qname != null && !qname.equals(""))
-                {
-                    write(formatQualifiedName(qname));
-                    write(ASEmitterTokens.SPACE);
-                    writeToken(ASEmitterTokens.EQUAL);
-                    write(ASEmitterTokens.FUNCTION);
-                    write(ASEmitterTokens.PAREN_OPEN);
-                    write(ASEmitterTokens.PAREN_CLOSE);
-                    write(ASEmitterTokens.SPACE);
-                    write(ASEmitterTokens.BLOCK_OPEN);
-                    writeNewline();
-                    write(ASEmitterTokens.BLOCK_CLOSE);
-                    write(ASEmitterTokens.SEMICOLON);
-                }
-            }
-        }
-
-        IDefinitionNode[] dnodes = node.getAllMemberNodes();
-        for (IDefinitionNode dnode : dnodes)
-        {
-            if (dnode.getNodeID() == ASTNodeID.VariableID)
-            {
-                writeNewline();
-                writeNewline();
-                writeNewline();
-                emitField((IVariableNode) dnode);
-                write(ASEmitterTokens.SEMICOLON);
-            }
-            else if (dnode.getNodeID() == ASTNodeID.FunctionID)
-            {
-                if (!((IFunctionNode) dnode).isConstructor())
-                {
-                    writeNewline();
-                    writeNewline();
-                    writeNewline();
-                    emitMethod((IFunctionNode) dnode);
-                    write(ASEmitterTokens.SEMICOLON);
-                }
-            }
-            else if (dnode.getNodeID() == ASTNodeID.GetterID
-                    || dnode.getNodeID() == ASTNodeID.SetterID)
-            {
-                //writeNewline();
-                //writeNewline();
-                //writeNewline();
-                emitAccessors((IAccessorNode) dnode);
-                //this shouldn't write anything, just set up
-                //a data structure for emitASGettersAndSetters
-                //write(ASEmitterTokens.SEMICOLON);
-            }
-            else if (dnode.getNodeID() == ASTNodeID.BindableVariableID)
-            {
-                writeNewline();
-                writeNewline();
-                writeNewline();
-                emitField((IVariableNode) dnode);
-                write(ASEmitterTokens.SEMICOLON);
-            }
-        }
-        
-        emitBindableVariables(node.getDefinition());
-        
-        emitASGettersAndSetters(node.getDefinition());
+        classEmitter.emit(node);
     }
-    
-    public void emitASGettersAndSetters(IClassDefinition definition)
-    {
-        if (!propertyMap.isEmpty())
-        {
-            writeNewline();
-            writeNewline();
-            writeNewline();
-            write(JSGoogEmitterTokens.OBJECT);
-            write(ASEmitterTokens.MEMBER_ACCESS);
-            write(JSEmitterTokens.DEFINE_PROPERTIES);
-            write(ASEmitterTokens.PAREN_OPEN);
-            String qname = definition.getQualifiedName();
-            write(formatQualifiedName(qname));
-            write(ASEmitterTokens.MEMBER_ACCESS);
-            write(JSEmitterTokens.PROTOTYPE);        	
-            write(ASEmitterTokens.COMMA);
-            write(ASEmitterTokens.SPACE);
-            write("/** @lends {" + formatQualifiedName(qname) + ".prototype} */ ");
-            writeNewline(ASEmitterTokens.BLOCK_OPEN);
-            
-	        Set<String> propertyNames = propertyMap.keySet();
-	        boolean firstTime = true;
-	        for (String propName : propertyNames)
-	        {
-	        	if (firstTime)
-	        		firstTime = false;
-	        	else
-	                writeNewline(ASEmitterTokens.COMMA);
-	        		
-	        	PropertyNodes p = propertyMap.get(propName);
-	            writeNewline("/** @expose */");
-	        	write(propName);
-	        	write(ASEmitterTokens.COLON);
-	            write(ASEmitterTokens.SPACE);
-	            writeNewline(ASEmitterTokens.BLOCK_OPEN);
-	            if (p.getter != null)
-	            {
-	            	write(ASEmitterTokens.GET);
-		        	write(ASEmitterTokens.COLON);
-		            write(ASEmitterTokens.SPACE);
-		            write(JSDocEmitterTokens.JSDOC_OPEN);
-		            write(ASEmitterTokens.SPACE);
-		            write(ASEmitterTokens.ATSIGN);
-		            write(ASEmitterTokens.THIS);
-		            write(ASEmitterTokens.SPACE);
-		            write(ASEmitterTokens.BLOCK_OPEN);
-		            write(formatQualifiedName(qname));
-		            write(ASEmitterTokens.BLOCK_CLOSE);
-		            write(ASEmitterTokens.SPACE);
-		            write(JSDocEmitterTokens.JSDOC_CLOSE);
-		            write(ASEmitterTokens.SPACE);
-		            write(ASEmitterTokens.FUNCTION);
-		            emitParameters(p.getter.getParameterNodes());
-
-		            emitDefinePropertyFunction(p.getter);
-	            }
-	            if (p.setter != null)
-	            {
-	            	if (p.getter != null)
-	                    writeNewline(ASEmitterTokens.COMMA);
-	            		
-	            	write(ASEmitterTokens.SET);
-		        	write(ASEmitterTokens.COLON);
-		            write(ASEmitterTokens.SPACE);
-		            write(JSDocEmitterTokens.JSDOC_OPEN);
-		            write(ASEmitterTokens.SPACE);
-		            write(ASEmitterTokens.ATSIGN);
-		            write(ASEmitterTokens.THIS);
-		            write(ASEmitterTokens.SPACE);
-		            write(ASEmitterTokens.BLOCK_OPEN);
-		            write(formatQualifiedName(qname));
-		            write(ASEmitterTokens.BLOCK_CLOSE);
-		            write(ASEmitterTokens.SPACE);
-		            write(JSDocEmitterTokens.JSDOC_CLOSE);
-		            write(ASEmitterTokens.SPACE);
-		            write(ASEmitterTokens.FUNCTION);
-		            emitParameters(p.setter.getParameterNodes());
-
-		            emitDefinePropertyFunction(p.setter);
-	            }
-	            write(ASEmitterTokens.BLOCK_CLOSE);	            
-	        }
-            writeNewline(ASEmitterTokens.BLOCK_CLOSE);
-            write(ASEmitterTokens.PAREN_CLOSE);
-            write(ASEmitterTokens.SEMICOLON);
-        }
-        if (!staticPropertyMap.isEmpty())
-        {
-            write(JSGoogEmitterTokens.OBJECT);
-            write(ASEmitterTokens.MEMBER_ACCESS);
-            write(JSEmitterTokens.DEFINE_PROPERTIES);
-            write(ASEmitterTokens.PAREN_OPEN);
-            String qname = definition.getQualifiedName();
-            write(formatQualifiedName(qname));
-            write(ASEmitterTokens.COMMA);
-            write(ASEmitterTokens.SPACE);
-            write("/** @lends {" + formatQualifiedName(qname) + "} */ ");
-            writeNewline(ASEmitterTokens.BLOCK_OPEN);
-            
-	        Set<String> propertyNames = staticPropertyMap.keySet();
-	        boolean firstTime = true;
-	        for (String propName : propertyNames)
-	        {
-	        	if (firstTime)
-	        		firstTime = false;
-	        	else
-	                writeNewline(ASEmitterTokens.COMMA);
-	        		
-	        	PropertyNodes p = staticPropertyMap.get(propName);
-	            writeNewline("/** @expose */");
-	        	write(propName);
-	        	write(ASEmitterTokens.COLON);
-	            write(ASEmitterTokens.SPACE);
-	            writeNewline(ASEmitterTokens.BLOCK_OPEN);
-	            if (p.getter != null)
-	            {
-	            	write(ASEmitterTokens.GET);
-		        	write(ASEmitterTokens.COLON);
-		            write(ASEmitterTokens.SPACE);
-		            write(ASEmitterTokens.FUNCTION);
-		            emitParameters(p.getter.getParameterNodes());
-
-		            emitDefinePropertyFunction(p.getter);
-	            }
-	            if (p.setter != null)
-	            {
-	            	if (p.getter != null)
-	                    writeNewline(ASEmitterTokens.COMMA);
-	            		
-	            	write(ASEmitterTokens.SET);
-		        	write(ASEmitterTokens.COLON);
-		            write(ASEmitterTokens.SPACE);
-		            write(ASEmitterTokens.FUNCTION);
-		            emitParameters(p.setter.getParameterNodes());
-
-		            emitDefinePropertyFunction(p.setter);
-	            }
-	            write(ASEmitterTokens.BLOCK_CLOSE);	            
-	        }
-            writeNewline(ASEmitterTokens.BLOCK_CLOSE);
-            write(ASEmitterTokens.PAREN_CLOSE);
-            write(ASEmitterTokens.SEMICOLON);
-        }
-    }
-
-    private void loadImportIgnores(String doc) 
-    {
-    	ArrayList<String> ignoreList = new ArrayList<String>();
-    	String ignoreToken = JSFlexJSEmitterTokens.IGNORE_IMPORT.getToken();
-    	int index = doc.indexOf(ignoreToken);
-    	while (index != -1)
-    	{
-        	String ignorable = doc.substring(index + ignoreToken.length());
-        	int endIndex = ignorable.indexOf("\n");
-        	ignorable = ignorable.substring(0, endIndex);
-        	ignorable = ignorable.trim();
-    		ignoreList.add(ignorable);
-    		System.out.println("Found ignorable: " + ignorable);
-    		index = doc.indexOf(ignoreToken, index + endIndex);
-    	}
-    	this.getDocEmitter();
-    	docEmitter.classIgnoreList = ignoreList;
-	}
-
-    /*
-	@Override
-    public void emitInterface(IInterfaceNode node)
-    {
-        ICompilerProject project = getWalker().getProject();
-
-        getDoc().emitInterfaceDoc(node, project);
-
-        String qname = node.getQualifiedName();
-        if (qname != null && !qname.equals(""))
-        {
-            write(formatQualifiedName(qname));
-            write(ASEmitterTokens.SPACE);
-            writeToken(ASEmitterTokens.EQUAL);
-            write(ASEmitterTokens.FUNCTION);
-            write(ASEmitterTokens.PAREN_OPEN);
-            write(ASEmitterTokens.PAREN_CLOSE);
-            write(ASEmitterTokens.SPACE);
-            write(ASEmitterTokens.BLOCK_OPEN);
-            writeNewline();
-            write(ASEmitterTokens.BLOCK_CLOSE);
-            write(ASEmitterTokens.SEMICOLON);
-        }
 
-        
-        final IDefinitionNode[] members = node.getAllMemberDefinitionNodes();
-        for (IDefinitionNode mnode : members)
-        {
-            boolean isAccessor = mnode.getNodeID() == ASTNodeID.GetterID
-                    || mnode.getNodeID() == ASTNodeID.SetterID;
-
-            writeNewline();
-            writeNewline();
-            writeNewline();
-
-            getDoc().emitInterfaceMemberDoc((IFunctionNode) mnode, project);
-            
-            write(formatQualifiedName(qname));
-            write(ASEmitterTokens.MEMBER_ACCESS);
-            write(JSEmitterTokens.PROTOTYPE);
-            write(ASEmitterTokens.MEMBER_ACCESS);
-            if (isAccessor)
-            {
-                writeGetSetPrefix(mnode.getNodeID() == ASTNodeID.GetterID);
-            }
-            write(mnode.getQualifiedName());
-            write(ASEmitterTokens.SPACE);
-            writeToken(ASEmitterTokens.EQUAL);
-            write(ASEmitterTokens.FUNCTION);
-            emitParameters(((IFunctionNode) mnode).getParameterNodes());
-            write(ASEmitterTokens.SPACE);
-            write(ASEmitterTokens.BLOCK_OPEN);
-            write(ASEmitterTokens.BLOCK_CLOSE);
-            write(ASEmitterTokens.SEMICOLON);
-        }
-    }
-	*/
-    
     @Override
     public void emitField(IVariableNode node)
     {
@@ -519,85 +210,64 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
         }
         if (node.getNodeID() == ASTNodeID.BindableVariableID)
         {
-        	bindableVars.add(node.getName());            
+            getModel().getBindableVars().add(node.getName());
         }
     }
 
-    public void emitBindableVariables(IClassDefinition cdef)
+    public void emitBindableVarDefineProperty(String name, IClassDefinition cdef)
     {
-    	if (bindableVars.size() > 0)
-    	{
-            write(JSGoogEmitterTokens.OBJECT);
-            write(ASEmitterTokens.MEMBER_ACCESS);
-            write(JSEmitterTokens.DEFINE_PROPERTIES);
-            write(ASEmitterTokens.PAREN_OPEN);
-            String qname = cdef.getQualifiedName();
-            write(formatQualifiedName(qname));
-            write(ASEmitterTokens.MEMBER_ACCESS);
-            write(JSEmitterTokens.PROTOTYPE);        	
-            write(ASEmitterTokens.COMMA);
-            write(ASEmitterTokens.SPACE);
-            write("/** @lends {" + formatQualifiedName(qname) + ".prototype} */ ");
-            writeNewline(ASEmitterTokens.BLOCK_OPEN);
-            
-	        boolean firstTime = true;
-	        for (String varName : bindableVars)
-	        {
-	        	if (firstTime)
-	        		firstTime = false;
-	        	else
-	                write(ASEmitterTokens.COMMA);
-	            
-	        	emitBindableVarDefineProperty(varName, cdef);
-	        }
-            writeNewline(ASEmitterTokens.BLOCK_CLOSE);
-            write(ASEmitterTokens.PAREN_CLOSE);
-            write(ASEmitterTokens.SEMICOLON);
-
-    	}
-    }
-    
-    private void emitBindableVarDefineProperty(String name, IClassDefinition cdef)
-    {
-	    // 'PropName': {
-	    writeNewline("/** @expose */");
-	    writeNewline(name + 
-	    				ASEmitterTokens.COLON.getToken() +
-	    				ASEmitterTokens.SPACE.getToken() +
-	    				ASEmitterTokens.BLOCK_OPEN.getToken());
-	    indentPush();
-	    writeNewline("/** @this {" + formatQualifiedName(cdef.getQualifiedName()) + "} */");
-	    writeNewline(ASEmitterTokens.GET.getToken() + ASEmitterTokens.COLON.getToken()
-	            + ASEmitterTokens.SPACE.getToken() + ASEmitterTokens.FUNCTION.getToken()
-	            + ASEmitterTokens.PAREN_OPEN.getToken() + ASEmitterTokens.PAREN_CLOSE.getToken()
-	            + ASEmitterTokens.SPACE.getToken() + ASEmitterTokens.BLOCK_OPEN.getToken());
-	    writeNewline(ASEmitterTokens.RETURN.getToken() + ASEmitterTokens.SPACE.getToken()
-	            + ASEmitterTokens.THIS.getToken() + ASEmitterTokens.MEMBER_ACCESS.getToken()
-	            + name + "_" + ASEmitterTokens.SEMICOLON.getToken());
-	    indentPop();
-	    writeNewline(ASEmitterTokens.BLOCK_CLOSE.getToken() + ASEmitterTokens.COMMA.getToken());
-	    writeNewline();
-	    writeNewline("/** @this {" + formatQualifiedName(cdef.getQualifiedName()) + "} */");
-	    writeNewline(ASEmitterTokens.SET.getToken() + ASEmitterTokens.COLON.getToken()
-	            + ASEmitterTokens.SPACE.getToken() + ASEmitterTokens.FUNCTION.getToken()
-	            + ASEmitterTokens.PAREN_OPEN.getToken() + "value" + ASEmitterTokens.PAREN_CLOSE.getToken()
-	            + ASEmitterTokens.SPACE.getToken() + ASEmitterTokens.BLOCK_OPEN.getToken());
-	    writeNewline("if (value != " + ASEmitterTokens.THIS.getToken()
-	            + ASEmitterTokens.MEMBER_ACCESS.getToken() + name + "_) {");
-	    writeNewline("    var oldValue = "
-	            + ASEmitterTokens.THIS.getToken() + ASEmitterTokens.MEMBER_ACCESS.getToken()
-	            + name + "_" + ASEmitterTokens.SEMICOLON.getToken());
-	    writeNewline("    " + ASEmitterTokens.THIS.getToken() + ASEmitterTokens.MEMBER_ACCESS.getToken()
-	            + name + "_ = value;");
-	    writeNewline("    this.dispatchEvent(org_apache_flex_events_ValueChangeEvent.createUpdateEvent(");
-	    writeNewline("         this, \"" + name + "\", oldValue, value));");
-	    writeNewline("}");
-	    write(ASEmitterTokens.BLOCK_CLOSE.getToken());
-	    write(ASEmitterTokens.BLOCK_CLOSE.getToken());
+        // 'PropName': {
+        writeNewline("/** @expose */");
+        writeNewline(name + ASEmitterTokens.COLON.getToken()
+                + ASEmitterTokens.SPACE.getToken()
+                + ASEmitterTokens.BLOCK_OPEN.getToken());
+        indentPush();
+        writeNewline("/** @this {"
+                + formatQualifiedName(cdef.getQualifiedName()) + "} */");
+        writeNewline(ASEmitterTokens.GET.getToken()
+                + ASEmitterTokens.COLON.getToken()
+                + ASEmitterTokens.SPACE.getToken()
+                + ASEmitterTokens.FUNCTION.getToken()
+                + ASEmitterTokens.PAREN_OPEN.getToken()
+                + ASEmitterTokens.PAREN_CLOSE.getToken()
+                + ASEmitterTokens.SPACE.getToken()
+                + ASEmitterTokens.BLOCK_OPEN.getToken());
+        writeNewline(ASEmitterTokens.RETURN.getToken()
+                + ASEmitterTokens.SPACE.getToken()
+                + ASEmitterTokens.THIS.getToken()
+                + ASEmitterTokens.MEMBER_ACCESS.getToken() + name + "_"
+                + ASEmitterTokens.SEMICOLON.getToken());
+        indentPop();
+        writeNewline(ASEmitterTokens.BLOCK_CLOSE.getToken()
+                + ASEmitterTokens.COMMA.getToken());
+        writeNewline();
+        writeNewline("/** @this {"
+                + formatQualifiedName(cdef.getQualifiedName()) + "} */");
+        writeNewline(ASEmitterTokens.SET.getToken()
+                + ASEmitterTokens.COLON.getToken()
+                + ASEmitterTokens.SPACE.getToken()
+                + ASEmitterTokens.FUNCTION.getToken()
+                + ASEmitterTokens.PAREN_OPEN.getToken() + "value"
+                + ASEmitterTokens.PAREN_CLOSE.getToken()
+                + ASEmitterTokens.SPACE.getToken()
+                + ASEmitterTokens.BLOCK_OPEN.getToken());
+        writeNewline("if (value != " + ASEmitterTokens.THIS.getToken()
+                + ASEmitterTokens.MEMBER_ACCESS.getToken() + name + "_) {");
+        writeNewline("    var oldValue = " + ASEmitterTokens.THIS.getToken()
+                + ASEmitterTokens.MEMBER_ACCESS.getToken() + name + "_"
+                + ASEmitterTokens.SEMICOLON.getToken());
+        writeNewline("    " + ASEmitterTokens.THIS.getToken()
+                + ASEmitterTokens.MEMBER_ACCESS.getToken() + name
+                + "_ = value;");
+        writeNewline("    this.dispatchEvent(org_apache_flex_events_ValueChangeEvent.createUpdateEvent(");
+        writeNewline("         this, \"" + name + "\", oldValue, value));");
+        writeNewline("}");
+        write(ASEmitterTokens.BLOCK_CLOSE.getToken());
+        write(ASEmitterTokens.BLOCK_CLOSE.getToken());
     }
 
     @Override
-    protected void emitAccessors(IAccessorNode node)
+    public void emitAccessors(IAccessorNode node)
     {
         if (node.getNodeID() == ASTNodeID.GetterID)
         {
@@ -608,73 +278,6 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
             emitSetAccessor((ISetterNode) node);
         }
     }
-    
-    /*
-    @Override
-    public void emitMethod(IFunctionNode node)
-    {
-        FunctionNode fn = (FunctionNode) node;
-        fn.parseFunctionBody(getProblems());
-
-        ICompilerProject project = getWalker().getProject();
-
-        getDoc().emitMethodDoc(node, project);
-
-        boolean isConstructor = node.isConstructor();
-
-        String qname = getTypeDefinition(node).getQualifiedName();
-        if (qname != null && !qname.equals(""))
-        {
-            write(formatQualifiedName(qname));
-            if (!isConstructor)
-            {
-                write(ASEmitterTokens.MEMBER_ACCESS);
-                if (!fn.hasModifier(ASModifier.STATIC))
-                {
-                    write(JSEmitterTokens.PROTOTYPE);
-                    write(ASEmitterTokens.MEMBER_ACCESS);
-                }
-            }
-        }
-
-        if (!isConstructor)
-            emitMemberName(node);
-
-        write(ASEmitterTokens.SPACE);
-        writeToken(ASEmitterTokens.EQUAL);
-        write(ASEmitterTokens.FUNCTION);
-
-        emitParameters(node.getParameterNodes());
-
-        boolean hasSuperClass = hasSuperClass(node);
-
-        if (isConstructor && node.getScopedNode().getChildCount() == 0)
-        {
-            write(ASEmitterTokens.SPACE);
-            write(ASEmitterTokens.BLOCK_OPEN);
-            if (hasSuperClass)
-                emitSuperCall(node, CONSTRUCTOR_EMPTY);
-            writeNewline();
-            write(ASEmitterTokens.BLOCK_CLOSE);
-        }
-
-        if (!isConstructor || node.getScopedNode().getChildCount() > 0)
-            emitMethodScope(node.getScopedNode());
-
-        if (isConstructor && hasSuperClass)
-        {
-            writeNewline(ASEmitterTokens.SEMICOLON);
-            write(JSGoogEmitterTokens.GOOG_INHERITS);
-            write(ASEmitterTokens.PAREN_OPEN);
-            write(formatQualifiedName(qname));
-            writeToken(ASEmitterTokens.COMMA);
-            String sname = getSuperClassDefinition(node, project)
-                    .getQualifiedName();
-            write(formatQualifiedName(sname));
-            write(ASEmitterTokens.PAREN_CLOSE);
-        }
-    }
-    */
 
     @Override
     public void emitFunctionCall(IFunctionCallNode node)
@@ -703,9 +306,8 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
 
                 def = node.getNameNode().resolve(project);
 
-                isClassCast = (def instanceof ClassDefinition ||
-                        def instanceof InterfaceDefinition) && 
-                        !(NativeUtils.isJSNative(def.getBaseName()));
+                isClassCast = (def instanceof ClassDefinition || def instanceof InterfaceDefinition)
+                        && !(NativeUtils.isJSNative(def.getBaseName()));
             }
 
             if (node.isNewExpression())
@@ -728,15 +330,18 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
             {
                 if (def != null)
                 {
-                    boolean isInt = def.getBaseName().equals(IASGlobalFunctionConstants._int);
-                    if (isInt ||
-                        def.getBaseName().equals(IASGlobalFunctionConstants.trace) ||
-                        def.getBaseName().equals(IASGlobalFunctionConstants.uint))
+                    boolean isInt = def.getBaseName().equals(
+                            IASGlobalFunctionConstants._int);
+                    if (isInt
+                            || def.getBaseName().equals(
+                                    IASGlobalFunctionConstants.trace)
+                            || def.getBaseName().equals(
+                                    IASGlobalFunctionConstants.uint))
                     {
                         write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
                         write(ASEmitterTokens.MEMBER_ACCESS);
                         if (isInt)
-                            write(JSFlexJSEmitterTokens.UNDERSCORE);                        
+                            write(JSFlexJSEmitterTokens.UNDERSCORE);
                     }
                 }
                 getWalker().walk(node.getNameNode());
@@ -746,7 +351,8 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
             }
             else
             {
-                emitIsAs(node.getArgumentNodes()[0], node.getNameNode(), ASTNodeID.Op_AsID, true);
+                emitIsAs(node.getArgumentNodes()[0], node.getNameNode(),
+                        ASTNodeID.Op_AsID, true);
             }
         }
         else
@@ -761,9 +367,9 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
     protected void emitSelfReference(IFunctionNode node)
     {
         // we don't want 'var self = this;' in FlexJS
-    	// unless there are anonymous functions
-    	if (node.containsAnonymousFunctions())
-    		super.emitSelfReference(node);
+        // unless there are anonymous functions
+        if (node.containsAnonymousFunctions())
+            super.emitSelfReference(node);
     }
 
     private boolean writeThis(IIdentifierNode node)
@@ -778,13 +384,15 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
 
         IASNode firstChild = parentNode.getChild(0);
 
+        final IClassDefinition thisClass = getModel().getCurrentClass();
+
         boolean identifierIsMemberAccess = parentNodeId == ASTNodeID.MemberAccessExpressionID;
 
         if (classNode == null) // script in MXML and AS interface definitions
         {
             if (nodeDef instanceof ParameterDefinition)
                 return false;
-            
+
             if (nodeDef instanceof VariableDefinition)
             {
                 IDefinition pdef = ((VariableDefinition) nodeDef).getParent();
@@ -825,8 +433,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
         }
         else
         {
-            if (nodeDef != null
-                    && !nodeDef.isInternal()
+            if (nodeDef != null && !nodeDef.isInternal()
                     && isClassMember(nodeDef, classNode))
             {
                 if (identifierIsMemberAccess)
@@ -876,7 +483,8 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
         if (pdef == thisClass)
             return true;
 
-        IDefinition cdef = ((ClassDefinition) thisClass).resolveBaseClass(project);
+        IDefinition cdef = ((ClassDefinition) thisClass)
+                .resolveBaseClass(project);
         while (cdef != null)
         {
             // needs to be a loop
@@ -904,8 +512,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
 
         boolean emitName = true;
 
-        if (nodeDef != null
-                && nodeDef.isStatic())
+        if (nodeDef != null && nodeDef.isStatic())
         {
             String sname = nodeDef.getParent().getQualifiedName();
             if (sname.length() > 0)
@@ -932,13 +539,14 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
 
             if (writeThis(node))
             {
-                IFunctionObjectNode functionObjectNode = (IFunctionObjectNode) node.getParent()
-                		.getAncestorOfType(IFunctionObjectNode.class);
+                IFunctionObjectNode functionObjectNode = (IFunctionObjectNode) node
+                        .getParent().getAncestorOfType(
+                                IFunctionObjectNode.class);
 
                 if (functionObjectNode != null)
-                	write(JSGoogEmitterTokens.SELF);
+                    write(JSGoogEmitterTokens.SELF);
                 else
-                	write(ASEmitterTokens.THIS);
+                    write(ASEmitterTokens.THIS);
 
                 write(ASEmitterTokens.MEMBER_ACCESS);
             }
@@ -955,13 +563,12 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
             }
         }
 
-
         //IDefinition parentDef = (nodeDef != null) ? nodeDef.getParent() : null;
         //boolean isNative = (parentDef != null)
         //        && NativeUtils.isNative(parentDef.getBaseName());
         if (emitName)
         {
-            if (nodeDef != null)    
+            if (nodeDef != null)
                 write(formatQualifiedName(nodeDef.getQualifiedName()));
             else
                 write(node.getName());
@@ -969,8 +576,8 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
     }
 
     //--------------------------------------------------------------------------
-    
-	@Override
+
+    @Override
     protected void emitSuperCall(IASNode node, String type)
     {
         IFunctionNode fnode = (node instanceof IFunctionNode) ? (IFunctionNode) node
@@ -978,6 +585,8 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
         IFunctionCallNode fcnode = (node instanceof IFunctionCallNode) ? (FunctionCallNode) node
                 : null;
 
+        final IClassDefinition thisClass = getModel().getCurrentClass();
+
         if (type == SUPER_FUNCTION_CALL)
         {
             if (fnode == null)
@@ -987,145 +596,81 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
             if (fnode != null && fnode.isConstructor() && !hasSuperClass(fnode))
                 return;
 
-	        IClassNode cnode = (IClassNode) node
-	                .getAncestorOfType(IClassNode.class);
-	
-	        // ToDo (erikdebruin): add VF2JS conditional -> only use check during full SDK compilation
-	        if (cnode == null && MXMLJSC.jsOutputType == JSOutputType.VF2JS)
-	            return;
-	        
-	        if (fnode != null && (fnode.getNodeID() == ASTNodeID.GetterID
-	                || fnode.getNodeID() == ASTNodeID.SetterID))
-	        {
-		        write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
-		        write(ASEmitterTokens.MEMBER_ACCESS);
-		        if (fnode.getNodeID() == ASTNodeID.GetterID)
-		        	write(JSFlexJSEmitterTokens.SUPERGETTER);
-		        else
-		        	write(JSFlexJSEmitterTokens.SUPERSETTER);
-		        write(ASEmitterTokens.PAREN_OPEN);
-		        if (cnode == null && thisClass != null)
-		            write(formatQualifiedName(thisClass.getQualifiedName()));
-		        else
-		        	write(formatQualifiedName(cnode.getQualifiedName()));
-	            writeToken(ASEmitterTokens.COMMA);
-		        write(ASEmitterTokens.THIS);
-	            writeToken(ASEmitterTokens.COMMA);
-	            write(ASEmitterTokens.SINGLE_QUOTE);
-	            write(fnode.getName());
-	            write(ASEmitterTokens.SINGLE_QUOTE);
-	        	        
-		        IASNode[] anodes = null;
-		        boolean writeArguments = false;
-		        if (fcnode != null)
-		        {
-		            anodes = fcnode.getArgumentNodes();
-		
-		            writeArguments = anodes.length > 0;
-		        }
-		        else if (fnode != null && fnode.isConstructor())
-		        {
-		            anodes = fnode.getParameterNodes();
-		
-		            writeArguments = (anodes != null && anodes.length > 0);
-		        }
-		        else if (node instanceof IFunctionNode && node instanceof BinaryOperatorAssignmentNode)
-		        {
-		            BinaryOperatorAssignmentNode bnode = (BinaryOperatorAssignmentNode) node;
-		            
-		            IFunctionNode pnode = (IFunctionNode) bnode.getAncestorOfType(IFunctionNode.class);
-		            
-		            if (pnode.getNodeID() == ASTNodeID.SetterID)
-		            {
-		                writeToken(ASEmitterTokens.COMMA);
-		                getWalker().walk(bnode.getRightOperandNode());
-		            }
-		        }
-		
-		        if (writeArguments)
-		        {
-		            int len = anodes.length;
-		            for (int i = 0; i < len; i++)
-		            {
-		                writeToken(ASEmitterTokens.COMMA);
-		
-		                getWalker().walk(anodes[i]);
-		            }
-		        }
-		
-		        write(ASEmitterTokens.PAREN_CLOSE);
-		        return;
-	        }
-        }
-        super.emitSuperCall(node, type);
-    }
-    
-    /*
-    @Override
-    protected void emitDefaultParameterCodeBlock(IFunctionNode node)
-    {
-        IParameterNode[] pnodes = node.getParameterNodes();
-        if (pnodes.length == 0)
-            return;
-
-        Map<Integer, IParameterNode> defaults = getDefaults(pnodes);
+            IClassNode cnode = (IClassNode) node
+                    .getAncestorOfType(IClassNode.class);
 
-        if (defaults != null)
-        {
-            final StringBuilder code = new StringBuilder();
+            // ToDo (erikdebruin): add VF2JS conditional -> only use check during full SDK compilation
+            if (cnode == null && MXMLJSC.jsOutputType == JSOutputType.VF2JS)
+                return;
 
-            if (!hasBody(node))
+            if (fnode != null
+                    && (fnode.getNodeID() == ASTNodeID.GetterID || fnode
+                            .getNodeID() == ASTNodeID.SetterID))
             {
-                indentPush();
-                write(JSFlexJSEmitterTokens.INDENT);
-            }
+                write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
+                write(ASEmitterTokens.MEMBER_ACCESS);
+                if (fnode.getNodeID() == ASTNodeID.GetterID)
+                    write(JSFlexJSEmitterTokens.SUPERGETTER);
+                else
+                    write(JSFlexJSEmitterTokens.SUPERSETTER);
+                write(ASEmitterTokens.PAREN_OPEN);
+                if (cnode == null && thisClass != null)
+                    write(formatQualifiedName(thisClass.getQualifiedName()));
+                else
+                    write(formatQualifiedName(cnode.getQualifiedName()));
+                writeToken(ASEmitterTokens.COMMA);
+                write(ASEmitterTokens.THIS);
+                writeToken(ASEmitterTokens.COMMA);
+                write(ASEmitterTokens.SINGLE_QUOTE);
+                write(fnode.getName());
+                write(ASEmitterTokens.SINGLE_QUOTE);
+
+                IASNode[] anodes = null;
+                boolean writeArguments = false;
+                if (fcnode != null)
+                {
+                    anodes = fcnode.getArgumentNodes();
 
-            List<IParameterNode> parameters = new ArrayList<IParameterNode>(
-                    defaults.values());
+                    writeArguments = anodes.length > 0;
+                }
+                else if (fnode != null && fnode.isConstructor())
+                {
+                    anodes = fnode.getParameterNodes();
 
-            for (int i = 0, n = parameters.size(); i < n; i++)
-            {
-                IParameterNode pnode = parameters.get(i);
+                    writeArguments = (anodes != null && anodes.length > 0);
+                }
+                else if (node instanceof IFunctionNode
+                        && node instanceof BinaryOperatorAssignmentNode)
+                {
+                    BinaryOperatorAssignmentNode bnode = (BinaryOperatorAssignmentNode) node;
 
-                if (pnode != null)
+                    IFunctionNode pnode = (IFunctionNode) bnode
+                            .getAncestorOfType(IFunctionNode.class);
+
+                    if (pnode.getNodeID() == ASTNodeID.SetterID)
+                    {
+                        writeToken(ASEmitterTokens.COMMA);
+                        getWalker().walk(bnode.getRightOperandNode());
+                    }
+                }
+
+                if (writeArguments)
                 {
-                    code.setLength(0);
-
-                    // x = typeof y !== 'undefined' ? y : z;\n 
-                    code.append(pnode.getName());
-                    code.append(ASEmitterTokens.SPACE.getToken());
-                    code.append(ASEmitterTokens.EQUAL.getToken());
-                    code.append(ASEmitterTokens.SPACE.getToken());
-                    code.append(ASEmitterTokens.TYPEOF.getToken());
-                    code.append(ASEmitterTokens.SPACE.getToken());
-                    code.append(pnode.getName());
-                    code.append(ASEmitterTokens.SPACE.getToken());
-                    code.append(ASEmitterTokens.STRICT_NOT_EQUAL.getToken());
-                    code.append(ASEmitterTokens.SPACE.getToken());
-                    code.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
-                    code.append(ASEmitterTokens.UNDEFINED.getToken());
-                    code.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
-                    code.append(ASEmitterTokens.SPACE.getToken());
-                    code.append(ASEmitterTokens.TERNARY.getToken());
-                    code.append(ASEmitterTokens.SPACE.getToken());
-                    code.append(pnode.getName());
-                    code.append(ASEmitterTokens.SPACE.getToken());
-                    code.append(ASEmitterTokens.COLON.getToken());
-                    code.append(ASEmitterTokens.SPACE.getToken());
-                    code.append(pnode.getDefaultValue());
-                    code.append(ASEmitterTokens.SEMICOLON.getToken());
-
-                    write(code.toString());
-
-                    if (i == n - 1 && !hasBody(node))
-                        indentPop();
+                    int len = anodes.length;
+                    for (int i = 0; i < len; i++)
+                    {
+                        writeToken(ASEmitterTokens.COMMA);
 
-                    writeNewline();
+                        getWalker().walk(anodes[i]);
+                    }
                 }
+
+                write(ASEmitterTokens.PAREN_CLOSE);
+                return;
             }
         }
+        super.emitSuperCall(node, type);
     }
-    */
 
     @Override
     public void emitBinaryOperator(IBinaryOperatorNode node)
@@ -1138,9 +683,10 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
         {
             super.emitBinaryOperator(node);
         }
-        else */ if (id == ASTNodeID.Op_IsID || id == ASTNodeID.Op_AsID)
+        else */if (id == ASTNodeID.Op_IsID || id == ASTNodeID.Op_AsID)
         {
-            emitIsAs(node.getLeftOperandNode(), node.getRightOperandNode(), id, false);
+            emitIsAs(node.getLeftOperandNode(), node.getRightOperandNode(), id,
+                    false);
         }
         else if (id == ASTNodeID.Op_InstanceOfID)
         {
@@ -1148,7 +694,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
 
             write(ASEmitterTokens.SPACE);
             writeToken(ASEmitterTokens.INSTANCEOF);
-            
+
             IDefinition dnode = (node.getRightOperandNode()).resolve(project);
             if (dnode != null)
                 write(formatQualifiedName(dnode.getQualifiedName()));
@@ -1162,56 +708,57 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
             {
                 IASNode lnode = leftSide.getChild(0);
                 IASNode rnode = leftSide.getChild(1);
-                IDefinition rnodeDef = ((IIdentifierNode) rnode).resolve(getWalker().getProject());
-                if (lnode.getNodeID() == ASTNodeID.SuperID && 
-                		rnodeDef instanceof AccessorDefinition)
+                IDefinition rnodeDef = ((IIdentifierNode) rnode)
+                        .resolve(getWalker().getProject());
+                if (lnode.getNodeID() == ASTNodeID.SuperID
+                        && rnodeDef instanceof AccessorDefinition)
                 {
                     String op = node.getOperator().getOperatorText();
-                    boolean isAssignment = op.contains("=") && !op.contains("==") && 
-                    										!(op.startsWith("<") || 
-                    												op.startsWith(">") || 
-                    												op.startsWith("!"));
-                	if (isAssignment)
-                	{
+                    boolean isAssignment = op.contains("=")
+                            && !op.contains("==")
+                            && !(op.startsWith("<") || op.startsWith(">") || op
+                                    .startsWith("!"));
+                    if (isAssignment)
+                    {
                         write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
                         write(ASEmitterTokens.MEMBER_ACCESS);
-        		        write(JSFlexJSEmitterTokens.SUPERSETTER);
-        		        write(ASEmitterTokens.PAREN_OPEN);
-        		        IClassNode cnode = (IClassNode) node
-        		        	.getAncestorOfType(IClassNode.class);
-        		        write(formatQualifiedName(cnode.getQualifiedName()));
-        	            writeToken(ASEmitterTokens.COMMA);
-        		        write(ASEmitterTokens.THIS);
-        	            writeToken(ASEmitterTokens.COMMA);
-        	            write(ASEmitterTokens.SINGLE_QUOTE);
-        	            write(rnodeDef.getBaseName());
-        	            write(ASEmitterTokens.SINGLE_QUOTE);
-        	            writeToken(ASEmitterTokens.COMMA);
-
-                		if (op.length() > 1) // += and things like that
-                		{
+                        write(JSFlexJSEmitterTokens.SUPERSETTER);
+                        write(ASEmitterTokens.PAREN_OPEN);
+                        IClassNode cnode = (IClassNode) node
+                                .getAncestorOfType(IClassNode.class);
+                        write(formatQualifiedName(cnode.getQualifiedName()));
+                        writeToken(ASEmitterTokens.COMMA);
+                        write(ASEmitterTokens.THIS);
+                        writeToken(ASEmitterTokens.COMMA);
+                        write(ASEmitterTokens.SINGLE_QUOTE);
+                        write(rnodeDef.getBaseName());
+                        write(ASEmitterTokens.SINGLE_QUOTE);
+                        writeToken(ASEmitterTokens.COMMA);
+
+                        if (op.length() > 1) // += and things like that
+                        {
                             write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
                             write(ASEmitterTokens.MEMBER_ACCESS);
-            		        write(JSFlexJSEmitterTokens.SUPERSETTER);
-            		        write(ASEmitterTokens.PAREN_OPEN);
-            		        write(formatQualifiedName(cnode.getQualifiedName()));
-            	            writeToken(ASEmitterTokens.COMMA);
-            		        write(ASEmitterTokens.THIS);
-            	            writeToken(ASEmitterTokens.COMMA);
-            	            write(ASEmitterTokens.SINGLE_QUOTE);
-            	            write(rnodeDef.getBaseName());
-            	            write(ASEmitterTokens.SINGLE_QUOTE);
-            		        write(ASEmitterTokens.PAREN_CLOSE);
-            		        write(op.substring(0, 1));
-                		}
+                            write(JSFlexJSEmitterTokens.SUPERSETTER);
+                            write(ASEmitterTokens.PAREN_OPEN);
+                            write(formatQualifiedName(cnode.getQualifiedName()));
+                            writeToken(ASEmitterTokens.COMMA);
+                            write(ASEmitterTokens.THIS);
+                            writeToken(ASEmitterTokens.COMMA);
+                            write(ASEmitterTokens.SINGLE_QUOTE);
+                            write(rnodeDef.getBaseName());
+                            write(ASEmitterTokens.SINGLE_QUOTE);
+                            write(ASEmitterTokens.PAREN_CLOSE);
+                            write(op.substring(0, 1));
+                        }
 
                         getWalker().walk(node.getRightOperandNode());
-        		        write(ASEmitterTokens.PAREN_CLOSE);
+                        write(ASEmitterTokens.PAREN_CLOSE);
                         return;
-                	}
+                    }
                 }
             }
-        	
+
             super.emitBinaryOperator(node);
             /*
             IExpressionNode leftSide = node.getLeftOperandNode();
@@ -1279,47 +826,51 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
         }
     }
 
-    private void emitIsAs(IExpressionNode left, IExpressionNode right, 
+    private void emitIsAs(IExpressionNode left, IExpressionNode right,
             ASTNodeID id, boolean coercion)
     {
-    	// project is null in unit tests
+        // 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
+        if (id != ASTNodeID.Op_IsID && dnode != null)
+        {
+            // find the function node
             IFunctionNode functionNode = (IFunctionNode) left
-            	.getAncestorOfType(IFunctionNode.class);
+                    .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;
-		            }
-	            }
+                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)
@@ -1334,22 +885,22 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
             write(formatQualifiedName(dnode.getQualifiedName()));
         else
             getWalker().walk(right);
-        
-        if (coercion) 
+
+        if (coercion)
         {
             writeToken(ASEmitterTokens.COMMA);
             write(ASEmitterTokens.TRUE);
         }
-        
+
         write(ASEmitterTokens.PAREN_CLOSE);
     }
-    
+
     @Override
     public void emitMemberAccessExpression(IMemberAccessExpressionNode node)
     {
         if (ASNodeUtils.hasParenOpen(node))
             write(ASEmitterTokens.PAREN_OPEN);
-        
+
         IASNode leftNode = node.getLeftOperandNode();
         IASNode rightNode = node.getRightOperandNode();
 
@@ -1365,16 +916,16 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
         if (!isStatic)
         {
             if (!(leftNode instanceof ILanguageIdentifierNode && ((ILanguageIdentifierNode) leftNode)
-                        .getKind() == ILanguageIdentifierNode.LanguageIdentifierKind.THIS))
+                    .getKind() == ILanguageIdentifierNode.LanguageIdentifierKind.THIS))
             {
                 IDefinition rightDef = null;
                 if (rightNode instanceof IIdentifierNode)
-                	rightDef = ((IIdentifierNode) rightNode).resolve(project);
-                
-            	if (rightNode instanceof UnaryOperatorAtNode)
+                    rightDef = ((IIdentifierNode) rightNode).resolve(project);
+
+                if (rightNode instanceof UnaryOperatorAtNode)
                 {
-            		// ToDo (erikdebruin): properly handle E4X
-            		
+                    // ToDo (erikdebruin): properly handle E4X
+
                     write(ASEmitterTokens.THIS);
                     write(ASEmitterTokens.MEMBER_ACCESS);
                     getWalker().walk(node.getLeftOperandNode());
@@ -1385,10 +936,10 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
                     write(ASEmitterTokens.SQUARE_CLOSE);
                     continueWalk = false;
                 }
-            	else if (node.getNodeID() == ASTNodeID.Op_DescendantsID)
-            	{
-            		// ToDo (erikdebruin): properly handle E4X
-            		
+                else if (node.getNodeID() == ASTNodeID.Op_DescendantsID)
+                {
+                    // ToDo (erikdebruin): properly handle E4X
+
                     write(ASEmitterTokens.THIS);
                     write(ASEmitterTokens.MEMBER_ACCESS);
                     getWalker().walk(node.getLeftOperandNode());
@@ -1398,118 +949,105 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
                     write(ASEmitterTokens.SINGLE_QUOTE);
                     write(ASEmitterTokens.SQUARE_CLOSE);
                     continueWalk = false;
-            	}
-            	else if (leftNode.getNodeID() != ASTNodeID.SuperID)
+                }
+                else if (leftNode.getNodeID() != ASTNodeID.SuperID)
                 {
                     getWalker().walk(node.getLeftOperandNode());
                     write(node.getOperator().getOperatorText());
                 }
-            	else if (leftNode.getNodeID() == ASTNodeID.SuperID &&
-            			(rightNode.getNodeID() == ASTNodeID.GetterID ||
-            			 (rightDef != null && rightDef instanceof AccessorDefinition)))
-            	{
-            		// setter is handled in binaryOperator
+                else if (leftNode.getNodeID() == ASTNodeID.SuperID
+                        && (rightNode.getNodeID() == ASTNodeID.GetterID || (rightDef != null && rightDef instanceof AccessorDefinition)))
+                {
+                    // setter is handled in binaryOperator
                     write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
                     write(ASEmitterTokens.MEMBER_ACCESS);
-    		        write(JSFlexJSEmitterTokens.SUPERGETTER);
-    		        write(ASEmitterTokens.PAREN_OPEN);
-    		        IClassNode cnode = (IClassNode) node
-    		        	.getAncestorOfType(IClassNode.class);
-    		        write(formatQualifiedName(cnode.getQualifiedName()));
-    	            writeToken(ASEmitterTokens.COMMA);
-    		        write(ASEmitterTokens.THIS);
-    	            writeToken(ASEmitterTokens.COMMA);
-    	            write(ASEmitterTokens.SINGLE_QUOTE);
-    	            if (rightDef != null)
-    	            	write(rightDef.getBaseName());
-    	            else
-    	            	write(((GetterNode)rightNode).getName());
-    	            write(ASEmitterTokens.SINGLE_QUOTE);
-    	            write(ASEmitterTokens.PAREN_CLOSE);
-                    continueWalk = false;            		
-            	}
+                    write(JSFlexJSEmitterTokens.SUPERGETTER);
+                    write(ASEmitterTokens.PAREN_OPEN);
+                    IClassNode cnode = (IClassNode) node
+                            .getAncestorOfType(IClassNode.class);
+                    write(formatQualifiedName(cnode.getQualifiedName()));
+                    writeToken(ASEmitterTokens.COMMA);
+                    write(ASEmitterTokens.THIS);
+                    writeToken(ASEmitterTokens.COMMA);
+                    write(ASEmitterTokens.SINGLE_QUOTE);
+                    if (rightDef != null)
+                        write(rightDef.getBaseName());
+                    else
+                        write(((GetterNode) rightNode).getName());
+                    write(ASEmitterTokens.SINGLE_QUOTE);
+                    write(ASEmitterTokens.PAREN_CLOSE);
+                    continueWalk = false;
+                }
             }
             else
             {
                 write(ASEmitterTokens.THIS);
                 write(node.getOperator().getOperatorText());
             }
-        
+
         }
-        
+
         if (continueWalk)
-        	getWalker().walk(node.getRightOperandNode());
-        
+            getWalker().walk(node.getRightOperandNode());
+
         if (ASNodeUtils.hasParenClose(node))
             write(ASEmitterTokens.PAREN_CLOSE);
     }
 
-    /*
-    private static ITypeDefinition getTypeDefinition(IDefinitionNode node)
-    {
-        ITypeNode tnode = (ITypeNode) node.getAncestorOfType(ITypeNode.class);
-        return (ITypeDefinition) tnode.getDefinition();
-    }
-
-    private static IClassDefinition getSuperClassDefinition(
-            IDefinitionNode node, ICompilerProject project)
-    {
-        IClassDefinition parent = (IClassDefinition) node.getDefinition()
-                .getParent();
-        IClassDefinition superClass = parent.resolveBaseClass(project);
-        return superClass;
-    }
-	*/
-    
     @Override
     public void emitGetAccessor(IGetterNode node)
     {
         ModifiersSet modifierSet = node.getDefinition().getModifiers();
-    	boolean isStatic = (modifierSet != null && modifierSet.hasModifier(ASModifier.STATIC));
-    	HashMap<String, PropertyNodes> map = isStatic ? staticPropertyMap : propertyMap;
-    	String name = node.getName();
-    	PropertyNodes p = map.get(name);
-    	if (p == null)
-    	{
-    		p = new PropertyNodes();
-    		map.put(name, p);
-    	}
-    	p.getter = node;
+        boolean isStatic = (modifierSet != null && modifierSet
+                .hasModifier(ASModifier.STATIC));
+        HashMap<String, PropertyNodes> map = isStatic ? getModel()
+                .getStaticPropertyMap() : getModel().getPropertyMap();
+        String name = node.getName();
+        PropertyNodes p = map.get(name);
+        if (p == null)
+        {
+            p = new PropertyNodes();
+            map.put(name, p);
+        }
+        p.getter = node;
         FunctionNode fn = (FunctionNode) node;
-        fn.parseFunctionBody(getProblems());        
+        fn.parseFunctionBody(getProblems());
     }
 
     @Override
     public void emitSetAccessor(ISetterNode node)
     {
         ModifiersSet modifierSet = node.getDefinition().getModifiers();
-    	boolean isStatic = (modifierSet != null && modifierSet.hasModifier(ASModifier.STATIC));
-    	HashMap<String, PropertyNodes> map = isStatic ? staticPropertyMap : propertyMap;
-    	String name = node.getName();
-    	PropertyNodes p = map.get(name);
-    	if (p == null)
-    	{
-    		p = new PropertyNodes();
-    		map.put(name, p);
-    	}
-    	p.setter = node;
+        boolean isStatic = (modifierSet != null && modifierSet
+                .hasModifier(ASModifier.STATIC));
+        HashMap<String, PropertyNodes> map = isStatic ? getModel()
+                .getStaticPropertyMap() : getModel().getPropertyMap();
+        String name = node.getName();
+        PropertyNodes p = map.get(name);
+        if (p == null)
+        {
+            p = new PropertyNodes();
+            map.put(name, p);
+        }
+        p.setter = node;
         FunctionNode fn = (FunctionNode) node;
         fn.parseFunctionBody(getProblems());
-        
+
         boolean isBindableSetter = false;
         if (node instanceof SetterNode)
         {
-	        IMetaInfo[] metaInfos = null;
-	        metaInfos = node.getMetaInfos();
-	        for (IMetaInfo metaInfo : metaInfos)
-	        {
-	            name = metaInfo.getTagName();
-	            if (name.equals("Bindable") && metaInfo.getAllAttributes().length == 0)
-	            {
-	                isBindableSetter = true;
-	                break;
-	            }
-	        }
+            IMetaInfo[] metaInfos = null;
+            metaInfos = node.getMetaInfos();
+            for (IMetaInfo metaInfo : metaInfos)
+            {
+                name = metaInfo.getTagName();
+                if (name.equals("Bindable")
+                        && metaInfo.getAllAttributes().length == 0)
+                {
+                    isBindableSetter = true;
+                    break;
+                }
+            }
         }
         if (isBindableSetter)
         {
@@ -1533,12 +1071,12 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
             emitMethodScope(node.getScopedNode());
         }
     }
-   
+
     @Override
     protected void emitObjectDefineProperty(IAccessorNode node)
     {
-    	//TODO: ajh  is this method needed anymore?
-    	
+        //TODO: ajh  is this method needed anymore?
+
         FunctionNode fn = (FunctionNode) node;
         fn.parseFunctionBody(getProblems());
 
@@ -1548,21 +1086,22 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
         // ToDo (erikdebruin): add VF2JS conditional -> only use check during full SDK compilation
         if (type == null)
             return;
-        
+
         boolean isBindableSetter = false;
         if (node instanceof SetterNode)
         {
-	        IMetaInfo[] metaInfos = null;
-	        metaInfos = node.getMetaInfos();
-	        for (IMetaInfo metaInfo : metaInfos)
-	        {
-	            String name = metaInfo.getTagName();
-	            if (name.equals("Bindable") && metaInfo.getAllAttributes().length == 0)
-	            {
-	                isBindableSetter = true;
-	                break;
-	            }
-	        }
+            IMetaInfo[] metaInfos = null;
+            metaInfos = node.getMetaInfos();
+            for (IMetaInfo metaInfo : metaInfos)
+            {
+                String name = metaInfo.getTagName();
+                if (name.equals("Bindable")
+                        && metaInfo.getAllAttributes().length == 0)
+                {
+                    isBindableSetter = true;
+                    break;
+                }
+            }
         }
         if (isBindableSetter)
         {
@@ -1585,24 +1124,25 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
         }
         super.emitObjectDefineProperty(node);
     }
-    
+
     @Override
-    protected void emitDefinePropertyFunction(IAccessorNode node)
+    public void emitDefinePropertyFunction(IAccessorNode node)
     {
         boolean isBindableSetter = false;
         if (node instanceof SetterNode)
         {
-	        IMetaInfo[] metaInfos = null;
-	        metaInfos = node.getMetaInfos();
-	        for (IMetaInfo metaInfo : metaInfos)
-	        {
-	            String name = metaInfo.getTagName();
-	            if (name.equals("Bindable") && metaInfo.getAllAttributes().length == 0)
-	            {
-	                isBindableSetter = true;
-	                break;
-	            }
-	        }
+            IMetaInfo[] metaInfos = null;
+            metaInfos = node.getMetaInfos();
+            for (IMetaInfo metaInfo : metaInfos)
+            {
+                String name = metaInfo.getTagName();
+                if (name.equals("Bindable")
+                        && metaInfo.getAllAttributes().length == 0)
+                {
+                    isBindableSetter = true;
+                    break;
+                }
+            }
         }
         if (isBindableSetter)
         {
@@ -1623,7 +1163,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
             //write(ASEmitterTokens.PAREN_OPEN);
             //write(ASEmitterTokens.PAREN_CLOSE);
             writeNewline(ASEmitterTokens.SEMICOLON);
-            
+
             // add change check
             write(ASEmitterTokens.IF);
             write(ASEmitterTokens.SPACE);
@@ -1646,37 +1186,27 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
             write(params[0].getName());
             write(ASEmitterTokens.PAREN_CLOSE);
             writeNewline(ASEmitterTokens.SEMICOLON);
-            
-        	// add dispatch of change event
+
+            // add dispatch of change event
             writeNewline("    this.dispatchEvent(org_apache_flex_events_ValueChangeEvent.createUpdateEvent(");
-            writeNewline("         this, \"" + node.getName() + "\", oldValue, " + params[0].getName() + "));");
+            writeNewline("         this, \"" + node.getName()
+                    + "\", oldValue, " + params[0].getName() + "));");
             write(ASEmitterTokens.BLOCK_CLOSE);
             //writeNewline(ASEmitterTokens.SEMICOLON);
             writeNewline();
             writeNewline();
         }
         else
-        	super.emitDefinePropertyFunction(node);
-    }
-        
-    /*
-    private void writeGetSetPrefix(boolean isGet)
-    {
-        if (isGet)
-            write(ASEmitterTokens.GET);
-        else
-            write(ASEmitterTokens.SET);
-        write("_");
+            super.emitDefinePropertyFunction(node);
     }
-	*/
-    
+
     private JSFlexJSDocEmitter docEmitter = null;
-    
+
     @Override
     public IDocEmitter getDocEmitter()
     {
         if (docEmitter == null)
-        	docEmitter = new JSFlexJSDocEmitter(this);
+            docEmitter = new JSFlexJSDocEmitter(this);
         return docEmitter;
     }
 
@@ -1696,7 +1226,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
         writeNewline(" * @suppress {checkTypes}");
         writeNewline(" */");
         writeNewline();
-        
+
         /* goog.provide('x');\n\n */
         write(JSGoogEmitterTokens.GOOG_PROVIDE);
         write(ASEmitterTokens.PAREN_OPEN);
@@ -1713,7 +1243,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
     {
         PackageScope containedScope = (PackageScope) definition
                 .getContainedScope();
-        
+
         ArrayList<String> writtenRequires = new ArrayList<String>();
 
         ITypeDefinition type = findType(containedScope.getAllLocalDefinitions());
@@ -1723,29 +1253,32 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
         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());
-		            }
-	            }
-	        }
+            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();
 
@@ -1784,14 +1317,14 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
                     write(ASEmitterTokens.SINGLE_QUOTE);
                     write(ASEmitterTokens.PAREN_CLOSE);
                     writeNewline(ASEmitterTokens.SEMICOLON);
-                    
+
                     writtenRequires.add(imp);
-                    
+
                     emitsRequires = true;
                 }
             }
         }
-        
+
         boolean emitsInterfaces = false;
         if (interfacesList != null)
         {
@@ -1799,25 +1332,25 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
             {
                 if (writtenRequires.indexOf(imp) == -1)
                 {
-	                write(JSGoogEmitterTokens.GOOG_REQUIRE);
-	                write(ASEmitterTokens.PAREN_OPEN);
-	                write(ASEmitterTokens.SINGLE_QUOTE);
-	                write(formatQualifiedName(imp));
-	                write(ASEmitterTokens.SINGLE_QUOTE);
-	                write(ASEmitterTokens.PAREN_CLOSE);
-	                writeNewline(ASEmitterTokens.SEMICOLON);
-	                
-	                emitsInterfaces = true;
+                    write(JSGoogEmitterTokens.GOOG_REQUIRE);
+                    write(ASEmitterTokens.PAREN_OPEN);
+                    write(ASEmitterTokens.SINGLE_QUOTE);
+                    write(formatQualifiedName(imp));
+                    write(ASEmitterTokens.SINGLE_QUOTE);
+                    write(ASEmitterTokens.PAREN_CLOSE);
+                    writeNewline(ASEmitterTokens.SEMICOLON);
+
+                    emitsInterfaces = true;
                 }
             }
         }
-        
+
         // erikdebruin: Add missing language feature support, with e.g. 'is' and 
         //              'as' operators. We don't need to worry about requiring
         //              this in every project: ADVANCED_OPTIMISATIONS will NOT
         //              include any of the code if it is not used in the project.
-        boolean isMainCU = flexProject.mainCU != null && 
-                    cu.getName().equals(flexProject.mainCU.getName());
+        boolean isMainCU = flexProject.mainCU != null
+                && cu.getName().equals(flexProject.mainCU.getName());
         if (isMainCU)
         {
             write(JSGoogEmitterTokens.GOOG_REQUIRE);
@@ -1871,7 +1404,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
             writeToken(JSFlexJSEmitterTokens.FLEXJS_CLASS_INFO);
             writeToken(ASEmitterTokens.EQUAL);
             writeToken(ASEmitterTokens.BLOCK_OPEN);
-            
+
             // names: [{ name: '', qName: '' }]
             write(JSFlexJSEmitterTokens.NAMES);
             writeToken(ASEmitterTokens.COLON);
@@ -1896,7 +1429,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
                 enodes = ((IClassNode) tnode).getImplementedInterfaceNodes();
             else
                 enodes = ((IInterfaceNode) tnode).getExtendedInterfaceNodes();
-            
+
             if (enodes.length > 0)
             {
                 writeToken(ASEmitterTokens.COMMA);
@@ -1907,8 +1440,9 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
                 write(ASEmitterTokens.SQUARE_OPEN);
                 int i = 0;
                 for (IExpressionNode enode : enodes)
-                { 
-                    write(formatQualifiedName(enode.resolve(project).getQualifiedName()));
+                {
+                    write(formatQualifiedName(enode.resolve(project)
+                            .getQualifiedName()));
                     if (i < enodes.length - 1)
                         writeToken(ASEmitterTokens.COMMA);
                     i++;
@@ -1922,8 +1456,6 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
         }
     }
 
-    private int foreachLoopCounter = 0;
-
     @Override
     public void emitForEachLoop(IForLoopNode node)
     {
@@ -2068,16 +1600,16 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
     public void emitLiteral(ILiteralNode node)
     {
         boolean isWritten = false;
-        
+
         String s = node.getValue(true);
         if (!(node instanceof RegExpLiteralNode))
         {
             if (node.getLiteralType() == LiteralType.XML)
             {
                 // ToDo (erikdebruin): VF2JS -> handle XML output properly...
-            	
+
                 write("'" + s + "'");
-                
+
                 isWritten = true;
             }
             s = s.replaceAll("\n", "__NEWLINE_PLACEHOLDER__");
@@ -2096,22 +1628,22 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
             s = s.replaceAll("__CR_PLACEHOLDER__", "\\\\r");
             s = s.replaceAll("__NEWLINE_PLACEHOLDER__", "\\\\n");
         }
-        
+
         if (!isWritten)
         {
             write(s);
         }
     }
-    
+
     @Override
     public void emitE4XFilter(IMemberAccessExpressionNode node)
     {
-    	// ToDo (erikdebruin): implement E4X replacement !?!
+        // ToDo (erikdebruin): implement E4X replacement !?!
         write(ASEmitterTokens.SINGLE_QUOTE);
         write("E4XFilter");
         write(ASEmitterTokens.SINGLE_QUOTE);
     }
-    
+
     /*
     @Override
     public void emitUnaryOperator(IUnaryOperatorNode node)
@@ -2156,10 +1688,10 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
             			((MemberAccessExpressionNode)parentNode).getLeftOperandNode() == node)
             	{
             		// GCC wanted parens around foo++.toString().  As in (foo++).toString();
-	                write(ASEmitterTokens.PAREN_OPEN);
-	                super.emitUnaryOperator(node);
-	                write(ASEmitterTokens.PAREN_CLOSE);
-	                return;
+                    write(ASEmitterTokens.PAREN_OPEN);
+                    super.emitUnaryOperator(node);
+                    write(ASEmitterTokens.PAREN_CLOSE);
+                    return;
             	}
             }
 
@@ -2167,19 +1699,217 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
         super.emitUnaryOperator(node);
     }
     */
-    
+
     @Override
-    protected String formatQualifiedName(String name)
+    public String formatQualifiedName(String name)
+    {
+        if (name.contains("goog.") || name.startsWith("Vector."))
+            return name;
+        name = name.replaceAll("\\.", "_");
+        return name;
+    }
+
+}
+
+/*
+@Override
+public void emitInterface(IInterfaceNode node)
+{
+    ICompilerProject project = getWalker().getProject();
+
+    getDoc().emitInterfaceDoc(node, project);
+
+    String qname = node.getQualifiedName();
+    if (qname != null && !qname.equals(""))
     {
-    	if (name.contains("goog.") || name.startsWith("Vector."))
-    		return name;
-    	name = name.replaceAll("\\.", "_");
-    	return name;
+        write(formatQualifiedName(qname));
+        write(ASEmitterTokens.SPACE);
+        writeToken(ASEmitterTokens.EQUAL);
+        write(ASEmitterTokens.FUNCTION);
+        write(ASEmitterTokens.PAREN_OPEN);
+        write(ASEmitterTokens.PAREN_CLOSE);
+        write(ASEmitterTokens.SPACE);
+        write(ASEmitterTokens.BLOCK_OPEN);
+        writeNewline();
+        write(ASEmitterTokens.BLOCK_CLOSE);
+        write(ASEmitterTokens.SEMICOLON);
     }
+
     
-    @Override
-    protected IDefinition getClassDefinition()
+    final IDefinitionNode[] members = node.getAllMemberDefinitionNodes();
+    for (IDefinitionNode mnode : members)
+    {
+        boolean isAccessor = mnode.getNodeID() == ASTNodeID.GetterID
+                || mnode.getNodeID() == ASTNodeID.SetterID;
+
+        writeNewline();
+        writeNewline();
+        writeNewline();
+
+        getDoc().emitInterfaceMemberDoc((IFunctionNode) mnode, project);
+        
+        write(formatQualifiedName(qname));
+        write(ASEmitterTokens.MEMBER_ACCESS);
+        write(JSEmitterTokens.PROTOTYPE);
+        write(ASEmitterTokens.MEMBER_ACCESS);
+        if (isAccessor)
+        {
+            writeGetSetPrefix(mnode.getNodeID() == ASTNodeID.GetterID);
+        }
+        write(mnode.getQualifiedName());
+        write(ASEmitterTokens.SPACE);
+        writeToken(ASEmitterTokens.EQUAL);
+        write(ASEmitterTokens.FUNCTION);
+        emitParameters(((IFunctionNode) mnode).getParameterNodes());
+        write(ASEmitterTokens.SPACE);
+        write(ASEmitterTokens.BLOCK_OPEN);
+        write(ASEmitterTokens.BLOCK_CLOSE);
+        write(ASEmitterTokens.SEMICOLON);
+    }
+}
+*/
+
+/*
+@Override
+public void emitMethod(IFunctionNode node)
+{
+    FunctionNode fn = (FunctionNode) node;
+    fn.parseFunctionBody(getProblems());
+
+    ICompilerProject project = getWalker().getProject();
+
+    getDoc().emitMethodDoc(node, project);
+
+    boolean isConstructor = node.isConstructor();
+
+    String qname = getTypeDefinition(node).getQualifiedName();
+    if (qname != null && !qname.equals(""))
+    {
+        write(formatQualifiedName(qname));
+        if (!isConstructor)
+        {
+            write(ASEmitterTokens.MEMBER_ACCESS);
+            if (!fn.hasModifier(ASModifier.STATIC))
+            {
+                write(JSEmitterTokens.PROTOTYPE);
+                write(ASEmitterTokens.MEMBER_ACCESS);
+            }
+        }
+    }
+
+    if (!isConstructor)
+        emitMemberName(node);
+
+    write(ASEmitterTokens.SPACE);
+    writeToken(ASEmitterTokens.EQUAL);
+    write(ASEmitterTokens.FUNCTION);
+
+    emitParameters(node.getParameterNodes());
+
+    boolean hasSuperClass = hasSuperClass(node);
+
+    if (isConstructor && node.getScopedNode().getChildCount() == 0)
+    {
+        write(ASEmitterTokens.SPACE);
+        write(ASEmitterTokens.BLOCK_OPEN);
+        if (hasSuperClass)
+            emitSuperCall(node, CONSTRUCTOR_EMPTY);
+        writeNewline();
+        write(ASEmitterTokens.BLOCK_CLOSE);
+    }
+
+    if (!isConstructor || node.getScopedNode().getChildCount() > 0)
+        emitMethodScope(node.getScopedNode());
+
+    if (isConstructor && hasSuperClass)
     {
-    	return thisClass;
+        writeNewline(ASEmitterTokens.SEMICOLON);
+        write(JSGoogEmitterTokens.GOOG_INHERITS);
+        write(ASEmitterTokens.PAREN_OPEN);
+        write(formatQualifiedName(qname));
+        writeToken(ASEmitterTokens.COMMA);
+        String sname = getSuperClassDefinition(node, project)
+                .getQualifiedName();
+        write(formatQualifiedName(sname));
+        write(ASEmitterTokens.PAREN_CLOSE);
     }
 }
+*/
+
+/*
+@Override
+protected void emitDefaultParameterCodeBlock(IFunctionNode node)
+{
+    IParameterNode[] pnodes = node.getParameterNodes();
+    if (pnodes.length == 0)
+        return;
+
+    Map<Integer, IParameterNode> defaults = getDefaults(pnodes);
+
+    if (defaults != null)
+    {
+        final StringBuilder code = new StringBuilder();
+
+        if (!hasBody(node))
+        {
+            indentPush();
+            write(JSFlexJSEmitterTokens.INDENT);
+        }
+
+        List<IParameterNode> parameters = new ArrayList<IParameterNode>(
+                defaults.values());
+
+        for (int i = 0, n = parameters.size(); i < n; i++)
+        {
+            IParameterNode pnode = parameters.get(i);
+
+            if (pnode != null)
+            {
+                code.setLength(0);
+
+                // x = typeof y !== 'undefined' ? y : z;\n 
+                code.append(pnode.getName());
+                code.append(ASEmitterTokens.SPACE.getToken());
+                code.append(ASEmitterTokens.EQUAL.getToken());
+                code.append(ASEmitterTokens.SPACE.getToken());
+                code.append(ASEmitterTokens.TYPEOF.getToken());
+                code.append(ASEmitterTokens.SPACE.getToken());
+                code.append(pnode.getName());
+                code.append(ASEmitterTokens.SPACE.getToken());
+                code.append(ASEmitterTokens.STRICT_NOT_EQUAL.getToken());
+                code.append(ASEmitterTokens.SPACE.getToken());
+                code.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
+                code.append(ASEmitterTokens.UNDEFINED.getToken());
+                code.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
+                code.append(ASEmitterTokens.SPACE.getToken());
+                code.append(ASEmitterTokens.TERNARY.getToken());
+                code.append(ASEmitterTokens.SPACE.getToken());
+                code.append(pnode.getName());
+                code.append(ASEmitterTokens.SPACE.getToken());
+                code.append(ASEmitterTokens.COLON.getToken());
+                code.append(ASEmitterTokens.SPACE.getToken());
+                code.append(pnode.getDefaultValue());
+                code.append(ASEmitterTokens.SEMICOLON.getToken());
+
+                write(code.toString());
+
+                if (i == n - 1 && !hasBody(node))
+                    indentPop();
+
+                writeNewline();
+            }
+        }
+    }
+}
+*/
+
+/*
+private void writeGetSetPrefix(boolean isGet)
+{
+    if (isGet)
+        write(ASEmitterTokens.GET);
+    else
+        write(ASEmitterTokens.SET);
+    write("_");
+}
+*/

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/ab1c421d/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
index ebe7c4e..d9ca745 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
@@ -105,7 +105,7 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
     {
         write(ASEmitterTokens.INDENT);
     }
-    
+
     //--------------------------------------------------------------------------
     // 
     //--------------------------------------------------------------------------
@@ -193,6 +193,7 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
     public void emitClass(IClassNode node)
     {
         IClassDefinition definition = node.getDefinition();
+        getModel().setCurrentClass(definition);
 
         IFunctionDefinition ctorDefinition = definition.getConstructor();
 
@@ -392,7 +393,7 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
 
         emitDeclarationName(node);
         if (!(avnode instanceof IEmbedNode))
-        	emitAssignedValue(avnode);
+            emitAssignedValue(avnode);
 
         if (!(node instanceof ChainedVariableNode))
         {
@@ -593,8 +594,7 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
         else
         {
             String pname = (type != null) ? type.getPackageName() : "";
-            if (cnode != null
-                    && pname != ""
+            if (cnode != null && pname != ""
                     && !pname.equalsIgnoreCase(cnode.getPackageName())
                     && inode != ASTNodeID.ArgumentID
                     && inode != ASTNodeID.VariableID
@@ -621,8 +621,8 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
         if (hasBody(node) && !isStatic && !isLocal)
             emitSelfReference(node);
 
-        if (node.isConstructor()
-                && hasSuperClass(node) && !hasSuperCall(node.getScopedNode()))
+        if (node.isConstructor() && hasSuperClass(node)
+                && !hasSuperCall(node.getScopedNode()))
             emitSuperCall(node, CONSTRUCTOR_FULL);
 
         emitRestParameterCodeBlock(node);
@@ -667,11 +667,11 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
 
         if (cnode == null)
         {
-        	IDefinition cdef = getClassDefinition();
+            IDefinition cdef = getModel().getCurrentClass();
             write(formatQualifiedName(cdef.getQualifiedName()));
         }
         else
-        	write(formatQualifiedName(cnode.getQualifiedName()));
+            write(formatQualifiedName(cnode.getQualifiedName()));
         write(ASEmitterTokens.MEMBER_ACCESS);
         write(JSGoogEmitterTokens.GOOG_BASE);
         write(ASEmitterTokens.PAREN_OPEN);
@@ -1049,15 +1049,16 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
 
     protected void emitDefinePropertyFunction(IAccessorNode node)
     {
-        emitMethodScope(node.getScopedNode());    	
+        emitMethodScope(node.getScopedNode());
     }
-    
+
     //--------------------------------------------------------------------------
     // Operators
     //--------------------------------------------------------------------------
 
     @Override
-    public void emitNamespaceAccessExpression(INamespaceAccessExpressionNode node)
+    public void emitNamespaceAccessExpression(
+            INamespaceAccessExpressionNode node)
     {
         getWalker().walk(node.getLeftOperandNode());
         write(ASEmitterTokens.MEMBER_ACCESS);
@@ -1167,15 +1168,9 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
         }
         return list;
     }
-    
+
     protected String formatQualifiedName(String name)
     {
-    	return name;
+        return name;
     }
-    
-    protected IDefinition getClassDefinition()
-    {
-    	return null;
-    }
-
 }

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/ab1c421d/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/BindableEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/BindableEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/BindableEmitter.java
new file mode 100644
index 0000000..310bf6b
--- /dev/null
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/BindableEmitter.java
@@ -0,0 +1,76 @@
+/*
+ *
+ *  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.js.jx;
+
+import org.apache.flex.compiler.codegen.ISubEmitter;
+import org.apache.flex.compiler.codegen.js.IJSEmitter;
+import org.apache.flex.compiler.definitions.IClassDefinition;
+import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitter;
+import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitterTokens;
+
+public class BindableEmitter extends JSSubEmitter implements
+        ISubEmitter<IClassDefinition>
+{
+    public BindableEmitter(IJSEmitter emitter)
+    {
+        super(emitter);
+    }
+
+    @Override
+    public void emit(IClassDefinition definition)
+    {
+        // TODO (mschmalle) will remove this cast as more things get abstracted
+        JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
+
+        if (getModel().hasBindableVars())
+        {
+            write(JSGoogEmitterTokens.OBJECT);
+            write(ASEmitterTokens.MEMBER_ACCESS);
+            write(JSEmitterTokens.DEFINE_PROPERTIES);
+            write(ASEmitterTokens.PAREN_OPEN);
+            String qname = definition.getQualifiedName();
+            write(fjs.formatQualifiedName(qname));
+            write(ASEmitterTokens.MEMBER_ACCESS);
+            write(JSEmitterTokens.PROTOTYPE);
+            write(ASEmitterTokens.COMMA);
+            write(ASEmitterTokens.SPACE);
+            write("/** @lends {" + fjs.formatQualifiedName(qname)
+                    + ".prototype} */ ");
+            writeNewline(ASEmitterTokens.BLOCK_OPEN);
+
+            boolean firstTime = true;
+            for (String varName : getModel().getBindableVars())
+            {
+                if (firstTime)
+                    firstTime = false;
+                else
+                    write(ASEmitterTokens.COMMA);
+
+                fjs.emitBindableVarDefineProperty(varName, definition);
+            }
+            writeNewline(ASEmitterTokens.BLOCK_CLOSE);
+            write(ASEmitterTokens.PAREN_CLOSE);
+            write(ASEmitterTokens.SEMICOLON);
+        }
+    }
+}


[30/35] git commit: [flex-falcon] [refs/heads/IDEA-FLEX_JS_COMPILER] - - Refactored literal to emitter. - Refactored self ref to emitter.

Posted by ft...@apache.org.
- Refactored literal to emitter.
- Refactored self ref to emitter.


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

Branch: refs/heads/IDEA-FLEX_JS_COMPILER
Commit: f2b74b68cbdcbbe1822c5771ae5f8caade04e37e
Parents: 0ca46d2
Author: Michael Schmalle <ms...@apache.org>
Authored: Sun May 31 15:40:01 2015 -0400
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:41:31 2015 +0100

----------------------------------------------------------------------
 .../codegen/js/flexjs/JSFlexJSEmitter.java      | 56 +++------------
 .../internal/codegen/js/jx/LiteralEmitter.java  | 74 ++++++++++++++++++++
 .../codegen/js/jx/SelfReferenceEmitter.java     | 52 ++++++++++++++
 3 files changed, 135 insertions(+), 47 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/f2b74b68/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 78f1f0b..e1df65a 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
@@ -38,14 +38,15 @@ import org.apache.flex.compiler.internal.codegen.js.jx.ForEachEmitter;
 import org.apache.flex.compiler.internal.codegen.js.jx.FunctionCallEmitter;
 import org.apache.flex.compiler.internal.codegen.js.jx.IdentifierEmitter;
 import org.apache.flex.compiler.internal.codegen.js.jx.InterfaceEmitter;
+import org.apache.flex.compiler.internal.codegen.js.jx.LiteralEmitter;
 import org.apache.flex.compiler.internal.codegen.js.jx.MemberAccessEmitter;
 import org.apache.flex.compiler.internal.codegen.js.jx.MethodEmitter;
 import org.apache.flex.compiler.internal.codegen.js.jx.ObjectDefinePropertyEmitter;
 import org.apache.flex.compiler.internal.codegen.js.jx.PackageFooterEmitter;
 import org.apache.flex.compiler.internal.codegen.js.jx.PackageHeaderEmitter;
+import org.apache.flex.compiler.internal.codegen.js.jx.SelfReferenceEmitter;
 import org.apache.flex.compiler.internal.codegen.js.jx.SuperCallEmitter;
 import org.apache.flex.compiler.internal.codegen.js.jx.VarDeclarationEmitter;
-import org.apache.flex.compiler.internal.tree.as.RegExpLiteralNode;
 import org.apache.flex.compiler.tree.ASTNodeID;
 import org.apache.flex.compiler.tree.as.IASNode;
 import org.apache.flex.compiler.tree.as.IAccessorNode;
@@ -60,7 +61,6 @@ import org.apache.flex.compiler.tree.as.IGetterNode;
 import org.apache.flex.compiler.tree.as.IIdentifierNode;
 import org.apache.flex.compiler.tree.as.IInterfaceNode;
 import org.apache.flex.compiler.tree.as.ILiteralNode;
-import org.apache.flex.compiler.tree.as.ILiteralNode.LiteralType;
 import org.apache.flex.compiler.tree.as.IMemberAccessExpressionNode;
 import org.apache.flex.compiler.tree.as.ISetterNode;
 import org.apache.flex.compiler.tree.as.ITypedExpressionNode;
@@ -96,8 +96,10 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
     private MemberAccessEmitter memberAccessEmitter;
     private BinaryOperatorEmitter binaryOperatorEmitter;
     private IdentifierEmitter identifierEmitter;
+    private LiteralEmitter literalEmitter;
 
     private AsIsEmitter asIsEmitter;
+    private SelfReferenceEmitter selfReferenceEmitter;
     private ObjectDefinePropertyEmitter objectDefinePropertyEmitter;
     private DefinePropertyFunctionEmitter definePropertyFunctionEmitter;
 
@@ -146,10 +148,12 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
         superCallEmitter = new SuperCallEmitter(this);
         forEachEmitter = new ForEachEmitter(this);
         memberAccessEmitter = new MemberAccessEmitter(this);
-        asIsEmitter = new AsIsEmitter(this);
         binaryOperatorEmitter = new BinaryOperatorEmitter(this);
         identifierEmitter = new IdentifierEmitter(this);
+        literalEmitter = new LiteralEmitter(this);
 
+        asIsEmitter = new AsIsEmitter(this);
+        selfReferenceEmitter = new SelfReferenceEmitter(this);
         objectDefinePropertyEmitter = new ObjectDefinePropertyEmitter(this);
         definePropertyFunctionEmitter = new DefinePropertyFunctionEmitter(this);
     }
@@ -320,40 +324,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
     @Override
     public void emitLiteral(ILiteralNode node)
     {
-        boolean isWritten = false;
-
-        String s = node.getValue(true);
-        if (!(node instanceof RegExpLiteralNode))
-        {
-            if (node.getLiteralType() == LiteralType.XML)
-            {
-                // ToDo (erikdebruin): VF2JS -> handle XML output properly...
-
-                write("'" + s + "'");
-
-                isWritten = true;
-            }
-            s = s.replaceAll("\n", "__NEWLINE_PLACEHOLDER__");
-            s = s.replaceAll("\r", "__CR_PLACEHOLDER__");
-            s = s.replaceAll("\t", "__TAB_PLACEHOLDER__");
-            s = s.replaceAll("\f", "__FORMFEED_PLACEHOLDER__");
-            s = s.replaceAll("\b", "__BACKSPACE_PLACEHOLDER__");
-            s = s.replaceAll("\\\\\"", "__QUOTE_PLACEHOLDER__");
-            s = s.replaceAll("\\\\", "__ESCAPE_PLACEHOLDER__");
-            //s = "\'" + s.replaceAll("\'", "\\\\\'") + "\'";
-            s = s.replaceAll("__ESCAPE_PLACEHOLDER__", "\\\\\\\\");
-            s = s.replaceAll("__QUOTE_PLACEHOLDER__", "\\\\\"");
-            s = s.replaceAll("__BACKSPACE_PLACEHOLDER__", "\\\\b");
-            s = s.replaceAll("__FORMFEED_PLACEHOLDER__", "\\\\f");
-            s = s.replaceAll("__TAB_PLACEHOLDER__", "\\\\t");
-            s = s.replaceAll("__CR_PLACEHOLDER__", "\\\\r");
-            s = s.replaceAll("__NEWLINE_PLACEHOLDER__", "\\\\n");
-        }
-
-        if (!isWritten)
-        {
-            write(s);
-        }
+        literalEmitter.emit(node);
     }
 
     //--------------------------------------------------------------------------
@@ -369,16 +340,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
     @Override
     protected void emitSelfReference(IFunctionNode node)
     {
-        // we don't want 'var self = this;' in FlexJS
-        // unless there are anonymous functions
-        if (node.containsAnonymousFunctions())
-        {
-            writeToken(ASEmitterTokens.VAR);
-            writeToken(JSGoogEmitterTokens.SELF);
-            writeToken(ASEmitterTokens.EQUAL);
-            write(ASEmitterTokens.THIS);
-            writeNewline(ASEmitterTokens.SEMICOLON);
-        }
+        selfReferenceEmitter.emit(node);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/f2b74b68/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/LiteralEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/LiteralEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/LiteralEmitter.java
new file mode 100644
index 0000000..8f26374
--- /dev/null
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/LiteralEmitter.java
@@ -0,0 +1,74 @@
+/*
+ *
+ *  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.js.jx;
+
+import org.apache.flex.compiler.codegen.ISubEmitter;
+import org.apache.flex.compiler.codegen.js.IJSEmitter;
+import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
+import org.apache.flex.compiler.internal.tree.as.RegExpLiteralNode;
+import org.apache.flex.compiler.tree.as.ILiteralNode;
+import org.apache.flex.compiler.tree.as.ILiteralNode.LiteralType;
+
+public class LiteralEmitter extends JSSubEmitter implements
+        ISubEmitter<ILiteralNode>
+{
+
+    public LiteralEmitter(IJSEmitter emitter)
+    {
+        super(emitter);
+    }
+
+    @Override
+    public void emit(ILiteralNode node)
+    {
+        boolean isWritten = false;
+
+        String s = node.getValue(true);
+        if (!(node instanceof RegExpLiteralNode))
+        {
+            if (node.getLiteralType() == LiteralType.XML)
+            {
+                write("'" + s + "'");
+
+                isWritten = true;
+            }
+            s = s.replaceAll("\n", "__NEWLINE_PLACEHOLDER__");
+            s = s.replaceAll("\r", "__CR_PLACEHOLDER__");
+            s = s.replaceAll("\t", "__TAB_PLACEHOLDER__");
+            s = s.replaceAll("\f", "__FORMFEED_PLACEHOLDER__");
+            s = s.replaceAll("\b", "__BACKSPACE_PLACEHOLDER__");
+            s = s.replaceAll("\\\\\"", "__QUOTE_PLACEHOLDER__");
+            s = s.replaceAll("\\\\", "__ESCAPE_PLACEHOLDER__");
+            //s = "\'" + s.replaceAll("\'", "\\\\\'") + "\'";
+            s = s.replaceAll("__ESCAPE_PLACEHOLDER__", "\\\\\\\\");
+            s = s.replaceAll("__QUOTE_PLACEHOLDER__", "\\\\\"");
+            s = s.replaceAll("__BACKSPACE_PLACEHOLDER__", "\\\\b");
+            s = s.replaceAll("__FORMFEED_PLACEHOLDER__", "\\\\f");
+            s = s.replaceAll("__TAB_PLACEHOLDER__", "\\\\t");
+            s = s.replaceAll("__CR_PLACEHOLDER__", "\\\\r");
+            s = s.replaceAll("__NEWLINE_PLACEHOLDER__", "\\\\n");
+        }
+
+        if (!isWritten)
+        {
+            write(s);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/f2b74b68/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/SelfReferenceEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/SelfReferenceEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/SelfReferenceEmitter.java
new file mode 100644
index 0000000..0d7849c
--- /dev/null
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/SelfReferenceEmitter.java
@@ -0,0 +1,52 @@
+/*
+ *
+ *  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.js.jx;
+
+import org.apache.flex.compiler.codegen.ISubEmitter;
+import org.apache.flex.compiler.codegen.js.IJSEmitter;
+import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
+import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitterTokens;
+import org.apache.flex.compiler.tree.as.IFunctionNode;
+
+public class SelfReferenceEmitter extends JSSubEmitter implements
+        ISubEmitter<IFunctionNode>
+{
+
+    public SelfReferenceEmitter(IJSEmitter emitter)
+    {
+        super(emitter);
+    }
+
+    @Override
+    public void emit(IFunctionNode node)
+    {
+        // we don't want 'var self = this;' in FlexJS
+        // unless there are anonymous functions
+        if (node.containsAnonymousFunctions())
+        {
+            writeToken(ASEmitterTokens.VAR);
+            writeToken(JSGoogEmitterTokens.SELF);
+            writeToken(ASEmitterTokens.EQUAL);
+            write(ASEmitterTokens.THIS);
+            writeNewline(ASEmitterTokens.SEMICOLON);
+        }
+    }
+}


[03/35] git commit: [flex-falcon] [refs/heads/IDEA-FLEX_JS_COMPILER] - - Refactored Class emitting into shared jx package for future use. - Refactored Bindable class level emittion; - Refactored GetSet class level emition - Created a shared model for eac

Posted by ft...@apache.org.
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/ab1c421d/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/ClassEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/ClassEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/ClassEmitter.java
new file mode 100644
index 0000000..1800afa
--- /dev/null
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/ClassEmitter.java
@@ -0,0 +1,156 @@
+/*
+ *
+ *  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.js.jx;
+
+import org.apache.flex.compiler.asdoc.flexjs.ASDocComment;
+import org.apache.flex.compiler.clients.MXMLJSC;
+import org.apache.flex.compiler.codegen.ISubEmitter;
+import org.apache.flex.compiler.codegen.js.IJSEmitter;
+import org.apache.flex.compiler.definitions.IClassDefinition;
+import org.apache.flex.compiler.definitions.IFunctionDefinition;
+import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitter;
+import org.apache.flex.compiler.internal.codegen.js.utils.DocEmitterUtils;
+import org.apache.flex.compiler.tree.ASTNodeID;
+import org.apache.flex.compiler.tree.as.IAccessorNode;
+import org.apache.flex.compiler.tree.as.IClassNode;
+import org.apache.flex.compiler.tree.as.IDefinitionNode;
+import org.apache.flex.compiler.tree.as.IFunctionNode;
+import org.apache.flex.compiler.tree.as.IVariableNode;
+
+public class ClassEmitter extends JSSubEmitter implements
+        ISubEmitter<IClassNode>
+{
+    private BindableEmitter bindableEmitter;
+    private GetSetEmitter getSetEmitter;
+    
+    public BindableEmitter getBindableEmitter()
+    {
+        return bindableEmitter;
+    }
+    
+    public GetSetEmitter getGetSetEmitter()
+    {
+        return getSetEmitter;
+    }
+    
+    public ClassEmitter(IJSEmitter emitter)
+    {
+        super(emitter);
+        
+        bindableEmitter = new BindableEmitter(emitter);
+        getSetEmitter = new GetSetEmitter(emitter);
+    }
+
+    @Override
+    public void emit(IClassNode node)
+    {
+        getModel().setCurrentClass(node.getDefinition());
+
+        // TODO (mschmalle) will remove this cast as more things get abstracted
+        JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
+
+        ASDocComment asDoc = (ASDocComment) node.getASDocComment();
+        if (asDoc != null && MXMLJSC.keepASDoc)
+            DocEmitterUtils.loadImportIgnores(fjs, asDoc.commentNoEnd());
+
+        IClassDefinition definition = node.getDefinition();
+
+        IFunctionDefinition ctorDefinition = definition.getConstructor();
+
+        // Static-only (Singleton) classes may not have a constructor
+        if (ctorDefinition != null)
+        {
+            IFunctionNode ctorNode = (IFunctionNode) ctorDefinition.getNode();
+            if (ctorNode != null)
+            {
+                // constructor
+                getEmitter().emitMethod(ctorNode);
+                write(ASEmitterTokens.SEMICOLON);
+            }
+            else
+            {
+                String qname = definition.getQualifiedName();
+                if (qname != null && !qname.equals(""))
+                {
+                    write(fjs.formatQualifiedName(qname));
+                    write(ASEmitterTokens.SPACE);
+                    writeToken(ASEmitterTokens.EQUAL);
+                    write(ASEmitterTokens.FUNCTION);
+                    write(ASEmitterTokens.PAREN_OPEN);
+                    write(ASEmitterTokens.PAREN_CLOSE);
+                    write(ASEmitterTokens.SPACE);
+                    write(ASEmitterTokens.BLOCK_OPEN);
+                    writeNewline();
+                    write(ASEmitterTokens.BLOCK_CLOSE);
+                    write(ASEmitterTokens.SEMICOLON);
+                }
+            }
+        }
+
+        IDefinitionNode[] dnodes = node.getAllMemberNodes();
+        for (IDefinitionNode dnode : dnodes)
+        {
+            if (dnode.getNodeID() == ASTNodeID.VariableID)
+            {
+                writeNewline();
+                writeNewline();
+                writeNewline();
+                getEmitter().emitField((IVariableNode) dnode);
+                write(ASEmitterTokens.SEMICOLON);
+            }
+            else if (dnode.getNodeID() == ASTNodeID.FunctionID)
+            {
+                if (!((IFunctionNode) dnode).isConstructor())
+                {
+                    writeNewline();
+                    writeNewline();
+                    writeNewline();
+                    getEmitter().emitMethod((IFunctionNode) dnode);
+                    write(ASEmitterTokens.SEMICOLON);
+                }
+            }
+            else if (dnode.getNodeID() == ASTNodeID.GetterID
+                    || dnode.getNodeID() == ASTNodeID.SetterID)
+            {
+                //writeNewline();
+                //writeNewline();
+                //writeNewline();
+                fjs.emitAccessors((IAccessorNode) dnode);
+                //this shouldn't write anything, just set up
+                //a data structure for emitASGettersAndSetters
+                //write(ASEmitterTokens.SEMICOLON);
+            }
+            else if (dnode.getNodeID() == ASTNodeID.BindableVariableID)
+            {
+                writeNewline();
+                writeNewline();
+                writeNewline();
+                getEmitter().emitField((IVariableNode) dnode);
+                write(ASEmitterTokens.SEMICOLON);
+            }
+        }
+
+        bindableEmitter.emit(definition);
+
+        getSetEmitter.emit(definition);
+    }
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/ab1c421d/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/GetSetEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/GetSetEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/GetSetEmitter.java
new file mode 100644
index 0000000..c4db6fa
--- /dev/null
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/GetSetEmitter.java
@@ -0,0 +1,195 @@
+/*
+ *
+ *  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.js.jx;
+
+import java.util.Set;
+
+import org.apache.flex.compiler.codegen.ISubEmitter;
+import org.apache.flex.compiler.codegen.js.IJSEmitter;
+import org.apache.flex.compiler.definitions.IClassDefinition;
+import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSDocEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSSessionModel.PropertyNodes;
+import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitter;
+import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitterTokens;
+
+public class GetSetEmitter extends JSSubEmitter implements
+        ISubEmitter<IClassDefinition>
+{
+
+    public GetSetEmitter(IJSEmitter emitter)
+    {
+        super(emitter);
+    }
+
+    @Override
+    public void emit(IClassDefinition definition)
+    {
+        // TODO (mschmalle) will remove this cast as more things get abstracted
+        JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
+
+        if (!getModel().getPropertyMap().isEmpty())
+        {
+            writeNewline();
+            writeNewline();
+            writeNewline();
+            write(JSGoogEmitterTokens.OBJECT);
+            write(ASEmitterTokens.MEMBER_ACCESS);
+            write(JSEmitterTokens.DEFINE_PROPERTIES);
+            write(ASEmitterTokens.PAREN_OPEN);
+            String qname = definition.getQualifiedName();
+            write(fjs.formatQualifiedName(qname));
+            write(ASEmitterTokens.MEMBER_ACCESS);
+            write(JSEmitterTokens.PROTOTYPE);
+            write(ASEmitterTokens.COMMA);
+            write(ASEmitterTokens.SPACE);
+            write("/** @lends {" + fjs.formatQualifiedName(qname)
+                    + ".prototype} */ ");
+            writeNewline(ASEmitterTokens.BLOCK_OPEN);
+
+            Set<String> propertyNames = getModel().getPropertyMap().keySet();
+            boolean firstTime = true;
+            for (String propName : propertyNames)
+            {
+                if (firstTime)
+                    firstTime = false;
+                else
+                    writeNewline(ASEmitterTokens.COMMA);
+
+                PropertyNodes p = getModel().getPropertyMap().get(propName);
+                writeNewline("/** @expose */");
+                write(propName);
+                write(ASEmitterTokens.COLON);
+                write(ASEmitterTokens.SPACE);
+                writeNewline(ASEmitterTokens.BLOCK_OPEN);
+                if (p.getter != null)
+                {
+                    write(ASEmitterTokens.GET);
+                    write(ASEmitterTokens.COLON);
+                    write(ASEmitterTokens.SPACE);
+                    write(JSDocEmitterTokens.JSDOC_OPEN);
+                    write(ASEmitterTokens.SPACE);
+                    write(ASEmitterTokens.ATSIGN);
+                    write(ASEmitterTokens.THIS);
+                    write(ASEmitterTokens.SPACE);
+                    write(ASEmitterTokens.BLOCK_OPEN);
+                    write(fjs.formatQualifiedName(qname));
+                    write(ASEmitterTokens.BLOCK_CLOSE);
+                    write(ASEmitterTokens.SPACE);
+                    write(JSDocEmitterTokens.JSDOC_CLOSE);
+                    write(ASEmitterTokens.SPACE);
+                    write(ASEmitterTokens.FUNCTION);
+                    fjs.emitParameters(p.getter.getParameterNodes());
+
+                    fjs.emitDefinePropertyFunction(p.getter);
+                }
+                if (p.setter != null)
+                {
+                    if (p.getter != null)
+                        writeNewline(ASEmitterTokens.COMMA);
+
+                    write(ASEmitterTokens.SET);
+                    write(ASEmitterTokens.COLON);
+                    write(ASEmitterTokens.SPACE);
+                    write(JSDocEmitterTokens.JSDOC_OPEN);
+                    write(ASEmitterTokens.SPACE);
+                    write(ASEmitterTokens.ATSIGN);
+                    write(ASEmitterTokens.THIS);
+                    write(ASEmitterTokens.SPACE);
+                    write(ASEmitterTokens.BLOCK_OPEN);
+                    write(fjs.formatQualifiedName(qname));
+                    write(ASEmitterTokens.BLOCK_CLOSE);
+                    write(ASEmitterTokens.SPACE);
+                    write(JSDocEmitterTokens.JSDOC_CLOSE);
+                    write(ASEmitterTokens.SPACE);
+                    write(ASEmitterTokens.FUNCTION);
+                    fjs.emitParameters(p.setter.getParameterNodes());
+
+                    fjs.emitDefinePropertyFunction(p.setter);
+                }
+                write(ASEmitterTokens.BLOCK_CLOSE);
+            }
+            writeNewline(ASEmitterTokens.BLOCK_CLOSE);
+            write(ASEmitterTokens.PAREN_CLOSE);
+            write(ASEmitterTokens.SEMICOLON);
+        }
+        if (!getModel().getStaticPropertyMap().isEmpty())
+        {
+            write(JSGoogEmitterTokens.OBJECT);
+            write(ASEmitterTokens.MEMBER_ACCESS);
+            write(JSEmitterTokens.DEFINE_PROPERTIES);
+            write(ASEmitterTokens.PAREN_OPEN);
+            String qname = definition.getQualifiedName();
+            write(fjs.formatQualifiedName(qname));
+            write(ASEmitterTokens.COMMA);
+            write(ASEmitterTokens.SPACE);
+            write("/** @lends {" + fjs.formatQualifiedName(qname) + "} */ ");
+            writeNewline(ASEmitterTokens.BLOCK_OPEN);
+
+            Set<String> propertyNames = getModel().getStaticPropertyMap()
+                    .keySet();
+            boolean firstTime = true;
+            for (String propName : propertyNames)
+            {
+                if (firstTime)
+                    firstTime = false;
+                else
+                    writeNewline(ASEmitterTokens.COMMA);
+
+                PropertyNodes p = getModel().getStaticPropertyMap().get(
+                        propName);
+                writeNewline("/** @expose */");
+                write(propName);
+                write(ASEmitterTokens.COLON);
+                write(ASEmitterTokens.SPACE);
+                writeNewline(ASEmitterTokens.BLOCK_OPEN);
+                if (p.getter != null)
+                {
+                    write(ASEmitterTokens.GET);
+                    write(ASEmitterTokens.COLON);
+                    write(ASEmitterTokens.SPACE);
+                    write(ASEmitterTokens.FUNCTION);
+                    fjs.emitParameters(p.getter.getParameterNodes());
+
+                    fjs.emitDefinePropertyFunction(p.getter);
+                }
+                if (p.setter != null)
+                {
+                    if (p.getter != null)
+                        writeNewline(ASEmitterTokens.COMMA);
+
+                    write(ASEmitterTokens.SET);
+                    write(ASEmitterTokens.COLON);
+                    write(ASEmitterTokens.SPACE);
+                    write(ASEmitterTokens.FUNCTION);
+                    fjs.emitParameters(p.setter.getParameterNodes());
+
+                    fjs.emitDefinePropertyFunction(p.setter);
+                }
+                write(ASEmitterTokens.BLOCK_CLOSE);
+            }
+            writeNewline(ASEmitterTokens.BLOCK_CLOSE);
+            write(ASEmitterTokens.PAREN_CLOSE);
+            write(ASEmitterTokens.SEMICOLON);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/ab1c421d/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/DocEmitterUtils.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/DocEmitterUtils.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/DocEmitterUtils.java
new file mode 100644
index 0000000..7d7bf16
--- /dev/null
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/DocEmitterUtils.java
@@ -0,0 +1,49 @@
+/*
+ *
+ *  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.js.utils;
+
+import java.util.ArrayList;
+
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSDocEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitterTokens;
+
+public class DocEmitterUtils
+{
+    public static void loadImportIgnores(JSFlexJSEmitter emitter, String doc)
+    {
+        ArrayList<String> ignoreList = new ArrayList<String>();
+        String ignoreToken = JSFlexJSEmitterTokens.IGNORE_IMPORT.getToken();
+        int index = doc.indexOf(ignoreToken);
+        while (index != -1)
+        {
+            String ignorable = doc.substring(index + ignoreToken.length());
+            int endIndex = ignorable.indexOf("\n");
+            ignorable = ignorable.substring(0, endIndex);
+            ignorable = ignorable.trim();
+            ignoreList.add(ignorable);
+            System.out.println("Found ignorable: " + ignorable);
+            index = doc.indexOf(ignoreToken, index + endIndex);
+        }
+        
+        // TODO (mschmalle)
+        ((JSFlexJSDocEmitter)emitter.getDocEmitter()).setClassIgnoreList(ignoreList);
+    }
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/ab1c421d/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java
new file mode 100644
index 0000000..94a2120
--- /dev/null
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java
@@ -0,0 +1,121 @@
+/*
+ *
+ *  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.js.utils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.flex.compiler.constants.IASLanguageConstants;
+import org.apache.flex.compiler.definitions.IClassDefinition;
+import org.apache.flex.compiler.definitions.IDefinition;
+import org.apache.flex.compiler.definitions.ITypeDefinition;
+import org.apache.flex.compiler.internal.definitions.ClassDefinition;
+import org.apache.flex.compiler.projects.ICompilerProject;
+import org.apache.flex.compiler.tree.ASTNodeID;
+import org.apache.flex.compiler.tree.as.IASNode;
+import org.apache.flex.compiler.tree.as.IDefinitionNode;
+import org.apache.flex.compiler.tree.as.IFunctionNode;
+import org.apache.flex.compiler.tree.as.IScopedNode;
+
+/**
+ * Various static methods used in shared emitter logic.
+ */
+public class EmitterUtils
+{
+    public static boolean isSameClass(IDefinition pdef, IDefinition thisClass,
+            ICompilerProject project)
+    {
+        if (pdef == thisClass)
+            return true;
+
+        IDefinition cdef = ((ClassDefinition) thisClass)
+                .resolveBaseClass(project);
+        while (cdef != null)
+        {
+            // needs to be a loop
+            if (cdef == pdef)
+                return true;
+            cdef = ((ClassDefinition) cdef).resolveBaseClass(project);
+        }
+        return false;
+    }
+
+    public static boolean hasSuperClass(ICompilerProject project,
+            IDefinitionNode node)
+    {
+        IClassDefinition superClassDefinition = getSuperClassDefinition(node,
+                project);
+        // XXX (mschmalle) this is nulling for MXML super class, figure out why
+        if (superClassDefinition == null)
+            return false;
+        String qname = superClassDefinition.getQualifiedName();
+        return superClassDefinition != null
+                && !qname.equals(IASLanguageConstants.Object);
+    }
+
+    public static boolean hasSuperCall(IScopedNode node)
+    {
+        for (int i = node.getChildCount() - 1; i > -1; i--)
+        {
+            IASNode cnode = node.getChild(i);
+            if (cnode.getNodeID() == ASTNodeID.FunctionCallID
+                    && cnode.getChild(0).getNodeID() == ASTNodeID.SuperID)
+                return true;
+        }
+
+        return false;
+    }
+
+    public static boolean hasBody(IFunctionNode node)
+    {
+        IScopedNode scope = node.getScopedNode();
+        return scope.getChildCount() > 0;
+    }
+
+    public static IClassDefinition getSuperClassDefinition(
+            IDefinitionNode node, ICompilerProject project)
+    {
+        IClassDefinition parent = (IClassDefinition) node.getDefinition()
+                .getParent();
+        IClassDefinition superClass = parent.resolveBaseClass(project);
+        return superClass;
+    }
+
+    public static List<String> resolveImports(ITypeDefinition type)
+    {
+        ArrayList<String> list = new ArrayList<String>();
+        IScopedNode scopeNode = type.getContainedScope().getScopeNode();
+        if (scopeNode != null)
+        {
+            scopeNode.getAllImports(list);
+        }
+        else
+        {
+            // MXML
+            ClassDefinition cdefinition = (ClassDefinition) type;
+            String[] implicitImports = cdefinition.getImplicitImports();
+            for (String imp : implicitImports)
+            {
+                list.add(imp);
+            }
+        }
+        return list;
+    }
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/ab1c421d/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
index 9a9a2c5..ea68760 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
@@ -111,8 +111,6 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
         super(out);
     }
 
-    public IDefinition thisClass;
-
     @Override
     protected String getIndent(int numIndent)
     {
@@ -131,12 +129,11 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
     @Override
     public void emitClass(IClassNode node)
     {
-        thisClass = node.getDefinition();
+        IClassDefinition definition = node.getDefinition();
+        getModel().setCurrentClass(definition);
 
         project = getWalker().getProject();
 
-        IClassDefinition definition = node.getDefinition();
-
         IFunctionDefinition ctorDefinition = definition.getConstructor();
 
         // Static-only (Singleton) classes may not have a constructor
@@ -291,7 +288,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
         // (erikdebruin): If the initial value of a variable is set using
         //                a method, JS needs this initialization to be done
         //                in the constructor
-    	IClassNode cdnode = (IClassNode) thisClass.getNode();
+    	IClassNode cdnode = (IClassNode) getModel().getCurrentClass().getNode();
         IDefinitionNode[] dnodes = cdnode.getAllMemberNodes();
         for (IDefinitionNode dnode : dnodes)
         {
@@ -697,6 +694,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
         ASTNodeID parentNodeId = parentNode.getNodeID();
 
         IASNode firstChild = parentNode.getChild(0);
+        IClassDefinition thisClass = getModel().getCurrentClass();
 
         boolean identifierIsMemberAccess = parentNodeId == ASTNodeID.MemberAccessExpressionID;
 

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/ab1c421d/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 f7d9c55..4efa7a6 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
@@ -114,7 +114,7 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements
     
     private StringBuilder subDocuments = new StringBuilder();
     private ArrayList<String> subDocumentNames = new ArrayList<String>();
-
+    
     /**
      * This keeps track of the entries in our temporary array of 
      * DeferredInstanceFromFunction objects that we CG to help with
@@ -184,7 +184,7 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements
         classDefinition = cdef;
         IASEmitter asEmitter = ((IMXMLBlockWalker) getMXMLWalker())
                 .getASEmitter();
-        ((JSFlexJSEmitter) asEmitter).thisClass = cdef;
+        ((JSFlexJSEmitter) asEmitter).getModel().setCurrentClass(cdef);
 
         // visit tags
         final int len = node.getChildCount();
@@ -210,8 +210,8 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements
 
         emitScripts();
 
-        ((JSFlexJSEmitter)asEmitter).emitBindableVariables(cdef);
-        ((JSFlexJSEmitter)asEmitter).emitASGettersAndSetters(cdef);
+        ((JSFlexJSEmitter)asEmitter).getClassEmiter().getBindableEmitter().emit(cdef);
+        ((JSFlexJSEmitter)asEmitter).getClassEmiter().getGetSetEmitter().emit(cdef);
         
         emitEvents(cname);
 
@@ -267,8 +267,8 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements
         classDefinition = cdef;
         IASEmitter asEmitter = ((IMXMLBlockWalker) getMXMLWalker())
                 .getASEmitter();
-        IDefinition oldThisClass = ((JSFlexJSEmitter) asEmitter).thisClass;
-        ((JSFlexJSEmitter) asEmitter).thisClass = cdef;
+        IClassDefinition oldThisClass = ((JSFlexJSEmitter) asEmitter).getModel().getCurrentClass();
+        ((JSFlexJSEmitter) asEmitter).getModel().setCurrentClass(cdef);
 
         IASNode classNode = node.getContainedClassDefinitionNode();
         // visit tags
@@ -312,7 +312,7 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements
         idCounter = oldIdCounter;
         inMXMLContent = oldInMXMLContent;
         classDefinition = oldClassDef;
-        ((JSFlexJSEmitter) asEmitter).thisClass = oldThisClass;
+        ((JSFlexJSEmitter) asEmitter).getModel().setCurrentClass(oldThisClass);
 
     }
 

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/ab1c421d/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSEmitter.java
index 60702a8..5c2aae0 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSEmitter.java
@@ -144,7 +144,7 @@ public class MXMLVF2JSEmitter extends MXMLEmitter implements
         IClassDefinition cdef = node.getClassDefinition();
         IASEmitter asEmitter = ((IMXMLBlockWalker) getMXMLWalker())
                 .getASEmitter();
-        ((JSVF2JSEmitter) asEmitter).thisClass = cdef;
+        ((JSVF2JSEmitter) asEmitter).getModel().setCurrentClass(cdef);
 
         // visit tags
         final int len = node.getChildCount();
@@ -218,7 +218,7 @@ public class MXMLVF2JSEmitter extends MXMLEmitter implements
         IClassDefinition cdef = node.getContainedClassDefinition();
         IASEmitter asEmitter = ((IMXMLBlockWalker) getMXMLWalker())
                 .getASEmitter();
-        ((JSVF2JSEmitter) asEmitter).thisClass = cdef;
+        ((JSVF2JSEmitter) asEmitter).getModel().setCurrentClass(cdef);
 
         IASNode classNode = node.getContainedClassDefinitionNode();
         // visit tags


[31/35] git commit: [flex-falcon] [refs/heads/IDEA-FLEX_JS_COMPILER] - Add ProblemQuery to getListOfFiles

Posted by ft...@apache.org.
Add ProblemQuery to getListOfFiles


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

Branch: refs/heads/IDEA-FLEX_JS_COMPILER
Commit: 7127eee5e3e04861ea02bf35ff314fcddcd59da7
Parents: f2b74b6
Author: Frédéric THOMAS <we...@gmail.com>
Authored: Mon Jun 1 19:18:52 2015 +0100
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:41:35 2015 +0100

----------------------------------------------------------------------
 .../internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java   | 2 +-
 .../apache/flex/compiler/internal/graph/GoogDepsWriter.java | 9 ++++++---
 2 files changed, 7 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/7127eee5/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
index 5b1e436..53a6181 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
@@ -271,7 +271,7 @@ public class MXMLFlexJSPublisher extends JSGoogPublisher implements
         StringBuilder depsFileData = new StringBuilder();
         try
         {
-        	ArrayList<String> fileList = gdw.getListOfFiles();
+        	ArrayList<String> fileList = gdw.getListOfFiles(problems);
         	for (String file : fileList)
         	{
                 compilerWrapper.addJSSourceFile(file);	

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/7127eee5/compiler.jx/src/org/apache/flex/compiler/internal/graph/GoogDepsWriter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/graph/GoogDepsWriter.java b/compiler.jx/src/org/apache/flex/compiler/internal/graph/GoogDepsWriter.java
index 7dd7065..f3d77fe 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/graph/GoogDepsWriter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/graph/GoogDepsWriter.java
@@ -46,7 +46,7 @@ import com.google.common.io.Files;
 
 public class GoogDepsWriter {
 
-	public GoogDepsWriter(File outputFolder, String mainClassName, JSGoogConfiguration config, List<ISWC> swcs)
+    public GoogDepsWriter(File outputFolder, String mainClassName, JSGoogConfiguration config, List<ISWC> swcs)
 	{
 		this.outputFolderPath = outputFolder.getAbsolutePath();
 		this.mainName = mainClassName;
@@ -69,8 +69,11 @@ public class GoogDepsWriter {
 	
 	private HashMap<String,GoogDep> depMap = new HashMap<String,GoogDep>();
 	
-	public ArrayList<String> getListOfFiles() throws InterruptedException
+	public ArrayList<String> getListOfFiles(ProblemQuery problems) throws InterruptedException
 	{
+		problemsFound = false;
+		this.problems = problems;
+
 		if (dps == null)
 		{
 			buildDB();
@@ -436,7 +439,7 @@ public class GoogDepsWriter {
     			return fn;
     		}
         }
-        
+
 		String fwdClassPath = className.replace("_", "/");
 		String bckClassPath = className.replace("_", "\\");
         for (ISWC swc : swcs)


[15/35] git commit: [flex-falcon] [refs/heads/IDEA-FLEX_JS_COMPILER] - Bypass FlexJS' new underscored namespace convention

Posted by ft...@apache.org.
Bypass FlexJS' new underscored namespace convention

Signed-off-by: Erik de Bruin <er...@ixsoftware.nl>


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

Branch: refs/heads/IDEA-FLEX_JS_COMPILER
Commit: cfc1a3367ba0ade2d3159e01b62503dfcbbd40ad
Parents: e7636ff
Author: Erik de Bruin <er...@ixsoftware.nl>
Authored: Mon Feb 16 12:52:23 2015 +0100
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:40:40 2015 +0100

----------------------------------------------------------------------
 .../codegen/js/vf2js/JSVF2JSDocEmitter.java     | 48 ++++++++++++++++++++
 .../codegen/mxml/vf2js/MXMLVF2JSEmitter.java    |  2 +-
 .../codegen/mxml/vf2js/MXMLVF2JSPublisher.java  |  2 +-
 3 files changed, 50 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/cfc1a336/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSDocEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSDocEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSDocEmitter.java
index c0a1241..f731c2b 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSDocEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSDocEmitter.java
@@ -40,6 +40,7 @@ import org.apache.flex.compiler.projects.ICompilerProject;
 import org.apache.flex.compiler.tree.as.IDefinitionNode;
 import org.apache.flex.compiler.tree.as.IExpressionNode;
 import org.apache.flex.compiler.tree.as.IFunctionNode;
+import org.apache.flex.compiler.tree.as.IInterfaceNode;
 import org.apache.flex.compiler.tree.as.IParameterNode;
 import org.apache.flex.compiler.tree.as.IVariableNode;
 
@@ -52,6 +53,41 @@ public class JSVF2JSDocEmitter extends JSGoogDocEmitter
     }
 
     @Override
+    public void emitInterfaceDoc(IInterfaceNode node, ICompilerProject project)
+    {
+        begin();
+
+        emitJSDocLine(JSEmitterTokens.INTERFACE.getToken());
+
+        boolean hasQualifiedNames = true;
+        IExpressionNode[] inodes = node.getExtendedInterfaceNodes();
+        for (IExpressionNode inode : inodes)
+        {
+            IDefinition dnode = inode.resolve(project);
+            if (dnode != null)
+            {
+                emitJSDocLine(ASEmitterTokens.EXTENDS, dnode.getQualifiedName());
+            }
+            else
+            {
+                hasQualifiedNames = false;
+                break;
+            }
+        }
+        
+        if (!hasQualifiedNames)
+        {
+            String[] inames = node.getExtendedInterfaces();
+            for (String iname : inames)
+            {
+                emitJSDocLine(ASEmitterTokens.EXTENDS, iname);
+            }
+        }
+
+        end();
+    }
+
+    @Override
     public void emitMethodDoc(IFunctionNode node, ICompilerProject project)
     {
         IClassDefinition classDefinition = resolveClassDefinition(node);
@@ -268,4 +304,16 @@ public class JSVF2JSDocEmitter extends JSGoogDocEmitter
             emitPublic(node);
         }
     }
+
+    @Override
+    public void emitExtends(IClassDefinition superDefinition, String packageName)
+    {
+        emitJSDocLine(ASEmitterTokens.EXTENDS, superDefinition.getQualifiedName());
+    }
+
+    @Override
+    public void emitImplements(ITypeDefinition definition, String packageName)
+    {
+        emitJSDocLine(ASEmitterTokens.IMPLEMENTS, definition.getQualifiedName());
+    }
 }

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/cfc1a336/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSEmitter.java
index 5c2aae0..d18f626 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSEmitter.java
@@ -1492,7 +1492,7 @@ public class MXMLVF2JSEmitter extends MXMLEmitter implements
         if (project.mainCU != null &&
                 cu.getName().equals(project.mainCU.getName()))
         {
-            emitHeaderLine(JSFlexJSEmitterTokens.LANGUAGE_QNAME.getToken());
+            emitHeaderLine("org.apache.flex.utils.Language");
         }
 
         writeNewline();

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/cfc1a336/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSPublisher.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSPublisher.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSPublisher.java
index 164806c..5adbc90 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSPublisher.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSPublisher.java
@@ -205,7 +205,7 @@ public class MXMLVF2JSPublisher extends JSGoogPublisher implements
                 + File.separator + outputFileName;
 
         appendExportSymbol(projectIntermediateJSFilePath, projectName);
-        appendEncodedCSS(projectIntermediateJSFilePath, projectName);
+        //appendEncodedCSS(projectIntermediateJSFilePath, projectName);
 
         if (!subsetGoog)
         {


[23/35] git commit: [flex-falcon] [refs/heads/IDEA-FLEX_JS_COMPILER] - Revert "Quick commit to keep get everything in the repo before Mike goes wild"

Posted by ft...@apache.org.
Revert "Quick commit to keep get everything in the repo before Mike goes wild"

This reverts commit 2b06e1e9f743366aa8333e1b6ab10405b220b76f.


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

Branch: refs/heads/IDEA-FLEX_JS_COMPILER
Commit: 1422546c5212149574fe92eb10077c9c62986f57
Parents: 4fa27ae
Author: Erik de Bruin <er...@ixsoftware.nl>
Authored: Sun May 31 19:47:38 2015 +0200
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:41:07 2015 +0100

----------------------------------------------------------------------
 .../internal/codegen/js/vf2js/TestVF2JSStatements.java      | 4 ++--
 .../org/apache/flex/compiler/internal/test/TestBase.java    | 2 +-
 .../projects/simpleMXML/src/SimpleMXML_Project_result.js    | 2 +-
 compiler.jx.tests/test-files/vf2js/projects/super/Base.as   | 2 --
 .../compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java  | 9 +++++----
 5 files changed, 9 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/1422546c/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/vf2js/TestVF2JSStatements.java
----------------------------------------------------------------------
diff --git a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/vf2js/TestVF2JSStatements.java b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/vf2js/TestVF2JSStatements.java
index 8327fcf..3385b47 100644
--- a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/vf2js/TestVF2JSStatements.java
+++ b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/vf2js/TestVF2JSStatements.java
@@ -346,7 +346,7 @@ public class TestVF2JSStatements extends TestGoogStatements
         IIfNode node = (IIfNode) getNode(
                 "if (numChildren == 0) { if (!typeDescription.@dynamic) { trace(\"warning: no describeType entry for '\" + childName + \"' on non-dynamic type '\" + typeDescription.@name + \"'\"); } }", IIfNode.class);
         asBlockWalker.visitIf(node);
-        assertOut("if (numChildren == 0) {\n  if (!typeDescription['E4XOperator']) {\n    org_apache_flex_utils_Language.trace(\"warning: no describeType entry for '\" + childName + \"' on non-dynamic type '\" + typeDescription['E4XOperator'] + \"'\");\n  }\n}");
+        assertOut("if (numChildren == 0) {\n  if (!this.typeDescription['E4XOperator']) {\n    org_apache_flex_utils_Language.trace(\"warning: no describeType entry for '\" + childName + \"' on non-dynamic type '\" + this.typeDescription['E4XOperator'] + \"'\");\n  }\n}");
     }
     
     @Test
@@ -355,7 +355,7 @@ public class TestVF2JSStatements extends TestGoogStatements
     	IIfNode node = (IIfNode) getNode(
     			"if (options.includeReadOnly) { properties = classInfo..accessor.(@access != \"writeonly\") + classInfo..variable; }", IIfNode.class);
     	asBlockWalker.visitIf(node);
-    	assertOut("if (options.includeReadOnly) {\n  properties = 'E4XFilter' + classInfo['E4XSelector'];\n}");
+    	assertOut("if (options.includeReadOnly) {\n  properties = 'E4XFilter' + this.classInfo['E4XSelector'];\n}");
     }
     
     @Test

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/1422546c/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/TestBase.java
----------------------------------------------------------------------
diff --git a/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/TestBase.java b/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/TestBase.java
index 3b4f464..2a2e90b 100644
--- a/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/TestBase.java
+++ b/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/TestBase.java
@@ -261,7 +261,7 @@ public class TestBase implements ITestBase
 
                     walker.visitCompilationUnit(cu);
 
-                    System.out.println(writer.toString());
+                    //System.out.println(writer.toString());
 
                     BufferedOutputStream out = new BufferedOutputStream(
                             new FileOutputStream(outputClassFile));

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/1422546c/compiler.jx.tests/test-files/vf2js/projects/simpleMXML/src/SimpleMXML_Project_result.js
----------------------------------------------------------------------
diff --git a/compiler.jx.tests/test-files/vf2js/projects/simpleMXML/src/SimpleMXML_Project_result.js b/compiler.jx.tests/test-files/vf2js/projects/simpleMXML/src/SimpleMXML_Project_result.js
index d493d28..e34f12d 100644
--- a/compiler.jx.tests/test-files/vf2js/projects/simpleMXML/src/SimpleMXML_Project_result.js
+++ b/compiler.jx.tests/test-files/vf2js/projects/simpleMXML/src/SimpleMXML_Project_result.js
@@ -23,7 +23,7 @@ goog.provide('SimpleMXML_Project');
 
 goog.require('spark.components.Application');
 goog.require('example.Component');
-goog.require('org.apache.flex.utils.Language');
+goog.require('org_apache_flex_utils_Language');
 
 
 

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/1422546c/compiler.jx.tests/test-files/vf2js/projects/super/Base.as
----------------------------------------------------------------------
diff --git a/compiler.jx.tests/test-files/vf2js/projects/super/Base.as b/compiler.jx.tests/test-files/vf2js/projects/super/Base.as
index 7c2330c..ee69d65 100644
--- a/compiler.jx.tests/test-files/vf2js/projects/super/Base.as
+++ b/compiler.jx.tests/test-files/vf2js/projects/super/Base.as
@@ -52,8 +52,6 @@ public class Base extends Super
 	public function getNumber():void
 	{
 		alert(super.doStuff());
-
-		alert(Math.max(0, super.x - 1));
 		
 		var x:Number = super.x;
 	}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/1422546c/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
index 68d0cb6..b11193b 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
@@ -990,10 +990,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
     	if (pfnode == null)
     		return false;
     	
-    	String parentName = pfnode.getName();
-    	String currentName = node.getName();
-    	
-    	return parentName.equals(currentName);
+    	return pfnode.getName().equals(node.getName());
     }
     
     //--------------------------------------------------------------------------
@@ -1362,6 +1359,8 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
                 {
             		// ToDo (erikdebruin): properly handle E4X
             		
+                    write(ASEmitterTokens.THIS);
+                    write(ASEmitterTokens.MEMBER_ACCESS);
                     getWalker().walk(node.getLeftOperandNode());
                     write(ASEmitterTokens.SQUARE_OPEN);
                     write(ASEmitterTokens.SINGLE_QUOTE);
@@ -1374,6 +1373,8 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
             	{
             		// ToDo (erikdebruin): properly handle E4X
             		
+                    write(ASEmitterTokens.THIS);
+                    write(ASEmitterTokens.MEMBER_ACCESS);
                     getWalker().walk(node.getLeftOperandNode());
                     write(ASEmitterTokens.SQUARE_OPEN);
                     write(ASEmitterTokens.SINGLE_QUOTE);


[21/35] git commit: [flex-falcon] [refs/heads/IDEA-FLEX_JS_COMPILER] - Revert "Add null check"

Posted by ft...@apache.org.
Revert "Add null check"

This reverts commit 06cbaf4a4b6a953c34f253fedcb97f64fc7f23ee.


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

Branch: refs/heads/IDEA-FLEX_JS_COMPILER
Commit: f67b246aa31523d93ab969797f4c4b02e1eadd4a
Parents: da5a714
Author: Erik de Bruin <er...@ixsoftware.nl>
Authored: Sun May 31 19:47:38 2015 +0200
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:41:00 2015 +0100

----------------------------------------------------------------------
 .../internal/codegen/mxml/vf2js/MXMLVF2JSEmitter.java       | 9 +++------
 1 file changed, 3 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/f67b246a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSEmitter.java
index e56a654..5c2aae0 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSEmitter.java
@@ -1391,13 +1391,10 @@ public class MXMLVF2JSEmitter extends MXMLEmitter implements
     public void emitComponent(IMXMLComponentNode node)
     {
         MXMLVF2JSDescriptorSpecifier ps = getCurrentDescriptor("ps");
-        if (ps != null) 
-        {
-        	ps.value = "new mx.core.ClassFactory(";
+        ps.value = "new mx.core.ClassFactory(";
 
-	        ps.value += node.getName();
-	        ps.value += ")";
-        }
+        ps.value += node.getName();
+        ps.value += ")";
         
         setBufferWrite(true);
         emitSubDocument(node);


[09/35] git commit: [flex-falcon] [refs/heads/IDEA-FLEX_JS_COMPILER] - - Refactored member access expression to emitter. - Refactored Package header to emitter. - Refactored Package footer to emitter.

Posted by ft...@apache.org.
- Refactored member access expression to emitter.
- Refactored Package header to emitter.
- Refactored Package footer to emitter.


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

Branch: refs/heads/IDEA-FLEX_JS_COMPILER
Commit: cea0796cb2a24c07161ce0cfb8284737c97bfcbd
Parents: cca81f4
Author: Michael Schmalle <ms...@apache.org>
Authored: Sat May 30 19:23:46 2015 -0400
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:40:20 2015 +0100

----------------------------------------------------------------------
 .../compiler/internal/codegen/as/ASEmitter.java |   2 +-
 .../codegen/js/flexjs/JSFlexJSEmitter.java      | 567 +++----------------
 .../internal/codegen/js/jx/ClassEmitter.java    |   1 +
 .../internal/codegen/js/jx/GetSetEmitter.java   |  95 ++++
 .../codegen/js/jx/MemberAccessEmitter.java      | 148 +++++
 .../codegen/js/jx/PackageFooterEmitter.java     | 138 +++++
 .../codegen/js/jx/PackageHeaderEmitter.java     | 221 ++++++++
 .../internal/codegen/js/utils/EmitterUtils.java |  26 +-
 8 files changed, 718 insertions(+), 480 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/cea0796c/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
index 84d1ac5..26b1100 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
@@ -783,7 +783,7 @@ public class ASEmitter implements IASEmitter, IEmitter
         // nothing to do in AS
     }
 
-    protected void emitMethodScope(IScopedNode node)
+    public void emitMethodScope(IScopedNode node)
     {
         write(ASEmitterTokens.SPACE);
         getWalker().walk(node);

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/cea0796c/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 955e033..7aa4e2a 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
@@ -20,15 +20,12 @@
 package org.apache.flex.compiler.internal.codegen.js.flexjs;
 
 import java.io.FilterWriter;
-import java.util.ArrayList;
-import java.util.HashMap;
 
 import org.apache.flex.compiler.asdoc.flexjs.ASDocComment;
 import org.apache.flex.compiler.codegen.IDocEmitter;
 import org.apache.flex.compiler.codegen.js.flexjs.IJSFlexJSEmitter;
 import org.apache.flex.compiler.common.ASModifier;
 import org.apache.flex.compiler.common.IMetaInfo;
-import org.apache.flex.compiler.common.ModifiersSet;
 import org.apache.flex.compiler.definitions.IClassDefinition;
 import org.apache.flex.compiler.definitions.IDefinition;
 import org.apache.flex.compiler.definitions.IFunctionDefinition;
@@ -36,7 +33,6 @@ import org.apache.flex.compiler.definitions.IPackageDefinition;
 import org.apache.flex.compiler.definitions.ITypeDefinition;
 import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
 import org.apache.flex.compiler.internal.codegen.js.JSEmitterTokens;
-import org.apache.flex.compiler.internal.codegen.js.JSSessionModel.PropertyNodes;
 import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitter;
 import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitterTokens;
 import org.apache.flex.compiler.internal.codegen.js.jx.BinaryOperatorEmitter;
@@ -44,18 +40,13 @@ import org.apache.flex.compiler.internal.codegen.js.jx.ClassEmitter;
 import org.apache.flex.compiler.internal.codegen.js.jx.FieldEmitter;
 import org.apache.flex.compiler.internal.codegen.js.jx.FunctionCallEmitter;
 import org.apache.flex.compiler.internal.codegen.js.jx.IdentifierEmitter;
+import org.apache.flex.compiler.internal.codegen.js.jx.MemberAccessEmitter;
+import org.apache.flex.compiler.internal.codegen.js.jx.PackageFooterEmitter;
+import org.apache.flex.compiler.internal.codegen.js.jx.PackageHeaderEmitter;
 import org.apache.flex.compiler.internal.codegen.js.jx.SuperCallEmitter;
-import org.apache.flex.compiler.internal.definitions.AccessorDefinition;
-import org.apache.flex.compiler.internal.projects.FlexJSProject;
-import org.apache.flex.compiler.internal.scopes.ASProjectScope;
-import org.apache.flex.compiler.internal.scopes.PackageScope;
-import org.apache.flex.compiler.internal.tree.as.ClassNode;
 import org.apache.flex.compiler.internal.tree.as.FunctionNode;
-import org.apache.flex.compiler.internal.tree.as.GetterNode;
 import org.apache.flex.compiler.internal.tree.as.RegExpLiteralNode;
 import org.apache.flex.compiler.internal.tree.as.SetterNode;
-import org.apache.flex.compiler.internal.tree.as.UnaryOperatorAtNode;
-import org.apache.flex.compiler.scopes.IASScope;
 import org.apache.flex.compiler.tree.ASTNodeID;
 import org.apache.flex.compiler.tree.as.IASNode;
 import org.apache.flex.compiler.tree.as.IAccessorNode;
@@ -68,20 +59,14 @@ import org.apache.flex.compiler.tree.as.IFunctionCallNode;
 import org.apache.flex.compiler.tree.as.IFunctionNode;
 import org.apache.flex.compiler.tree.as.IGetterNode;
 import org.apache.flex.compiler.tree.as.IIdentifierNode;
-import org.apache.flex.compiler.tree.as.IInterfaceNode;
-import org.apache.flex.compiler.tree.as.ILanguageIdentifierNode;
 import org.apache.flex.compiler.tree.as.ILiteralNode;
 import org.apache.flex.compiler.tree.as.ILiteralNode.LiteralType;
 import org.apache.flex.compiler.tree.as.IMemberAccessExpressionNode;
 import org.apache.flex.compiler.tree.as.IParameterNode;
 import org.apache.flex.compiler.tree.as.ISetterNode;
-import org.apache.flex.compiler.tree.as.ITypeNode;
 import org.apache.flex.compiler.tree.as.ITypedExpressionNode;
 import org.apache.flex.compiler.tree.as.IVariableExpressionNode;
 import org.apache.flex.compiler.tree.as.IVariableNode;
-import org.apache.flex.compiler.units.ICompilationUnit;
-import org.apache.flex.compiler.utils.ASNodeUtils;
-import org.apache.flex.compiler.utils.NativeUtils;
 
 /**
  * Concrete implementation of the 'goog' JavaScript production.
@@ -93,27 +78,45 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
 {
 
     private int foreachLoopCounter = 0;
-    
+
+    private JSFlexJSDocEmitter docEmitter = null;
+
+    private PackageHeaderEmitter packageHeaderEmitter;
+    private PackageFooterEmitter packageFooterEmitter;
+
     private ClassEmitter classEmitter;
     private FieldEmitter fieldEmitter;
     private FunctionCallEmitter functionCallEmitter;
     private SuperCallEmitter superCallEmitter;
+    private MemberAccessEmitter memberAccessEmitter;
     private BinaryOperatorEmitter binaryOperatorEmitter;
     private IdentifierEmitter identifierEmitter;
-    
+
     public ClassEmitter getClassEmiter()
     {
         return classEmitter;
     }
 
+    @Override
+    public IDocEmitter getDocEmitter()
+    {
+        if (docEmitter == null)
+            docEmitter = new JSFlexJSDocEmitter(this);
+        return docEmitter;
+    }
+
     public JSFlexJSEmitter(FilterWriter out)
     {
         super(out);
 
+        packageHeaderEmitter = new PackageHeaderEmitter(this);
+        packageFooterEmitter = new PackageFooterEmitter(this);
+
         classEmitter = new ClassEmitter(this);
         fieldEmitter = new FieldEmitter(this);
         functionCallEmitter = new FunctionCallEmitter(this);
         superCallEmitter = new SuperCallEmitter(this);
+        memberAccessEmitter = new MemberAccessEmitter(this);
         binaryOperatorEmitter = new BinaryOperatorEmitter(this);
         identifierEmitter = new IdentifierEmitter(this);
     }
@@ -237,9 +240,9 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
     public void emitIdentifier(IIdentifierNode node)
     {
         // TODO (mschmalle) remove when project field is removed
-      if (project == null)
-          project = getWalker().getProject();
-        
+        if (project == null)
+            project = getWalker().getProject();
+
         identifierEmitter.emit(node);
     }
 
@@ -329,178 +332,23 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
     @Override
     public void emitMemberAccessExpression(IMemberAccessExpressionNode node)
     {
-        if (ASNodeUtils.hasParenOpen(node))
-            write(ASEmitterTokens.PAREN_OPEN);
-
-        IASNode leftNode = node.getLeftOperandNode();
-        IASNode rightNode = node.getRightOperandNode();
-
+        // TODO (mschmalle) remove when project field is removed
         if (project == null)
             project = getWalker().getProject();
 
-        IDefinition def = node.resolve(project);
-        boolean isStatic = false;
-        if (def != null && def.isStatic())
-            isStatic = true;
-
-        boolean continueWalk = true;
-        if (!isStatic)
-        {
-            if (!(leftNode instanceof ILanguageIdentifierNode && ((ILanguageIdentifierNode) leftNode)
-                    .getKind() == ILanguageIdentifierNode.LanguageIdentifierKind.THIS))
-            {
-                IDefinition rightDef = null;
-                if (rightNode instanceof IIdentifierNode)
-                    rightDef = ((IIdentifierNode) rightNode).resolve(project);
-
-                if (rightNode instanceof UnaryOperatorAtNode)
-                {
-                    // ToDo (erikdebruin): properly handle E4X
-
-                    write(ASEmitterTokens.THIS);
-                    write(ASEmitterTokens.MEMBER_ACCESS);
-                    getWalker().walk(node.getLeftOperandNode());
-                    write(ASEmitterTokens.SQUARE_OPEN);
-                    write(ASEmitterTokens.SINGLE_QUOTE);
-                    write("E4XOperator");
-                    write(ASEmitterTokens.SINGLE_QUOTE);
-                    write(ASEmitterTokens.SQUARE_CLOSE);
-                    continueWalk = false;
-                }
-                else if (node.getNodeID() == ASTNodeID.Op_DescendantsID)
-                {
-                    // ToDo (erikdebruin): properly handle E4X
-
-                    write(ASEmitterTokens.THIS);
-                    write(ASEmitterTokens.MEMBER_ACCESS);
-                    getWalker().walk(node.getLeftOperandNode());
-                    write(ASEmitterTokens.SQUARE_OPEN);
-                    write(ASEmitterTokens.SINGLE_QUOTE);
-                    write("E4XSelector");
-                    write(ASEmitterTokens.SINGLE_QUOTE);
-                    write(ASEmitterTokens.SQUARE_CLOSE);
-                    continueWalk = false;
-                }
-                else if (leftNode.getNodeID() != ASTNodeID.SuperID)
-                {
-                    getWalker().walk(node.getLeftOperandNode());
-                    write(node.getOperator().getOperatorText());
-                }
-                else if (leftNode.getNodeID() == ASTNodeID.SuperID
-                        && (rightNode.getNodeID() == ASTNodeID.GetterID || (rightDef != null && rightDef instanceof AccessorDefinition)))
-                {
-                    // setter is handled in binaryOperator
-                    write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
-                    write(ASEmitterTokens.MEMBER_ACCESS);
-                    write(JSFlexJSEmitterTokens.SUPERGETTER);
-                    write(ASEmitterTokens.PAREN_OPEN);
-                    IClassNode cnode = (IClassNode) node
-                            .getAncestorOfType(IClassNode.class);
-                    write(formatQualifiedName(cnode.getQualifiedName()));
-                    writeToken(ASEmitterTokens.COMMA);
-                    write(ASEmitterTokens.THIS);
-                    writeToken(ASEmitterTokens.COMMA);
-                    write(ASEmitterTokens.SINGLE_QUOTE);
-                    if (rightDef != null)
-                        write(rightDef.getBaseName());
-                    else
-                        write(((GetterNode) rightNode).getName());
-                    write(ASEmitterTokens.SINGLE_QUOTE);
-                    write(ASEmitterTokens.PAREN_CLOSE);
-                    continueWalk = false;
-                }
-            }
-            else
-            {
-                write(ASEmitterTokens.THIS);
-                write(node.getOperator().getOperatorText());
-            }
-
-        }
-
-        if (continueWalk)
-            getWalker().walk(node.getRightOperandNode());
-
-        if (ASNodeUtils.hasParenClose(node))
-            write(ASEmitterTokens.PAREN_CLOSE);
+        memberAccessEmitter.emit(node);
     }
 
     @Override
     public void emitGetAccessor(IGetterNode node)
     {
-        ModifiersSet modifierSet = node.getDefinition().getModifiers();
-        boolean isStatic = (modifierSet != null && modifierSet
-                .hasModifier(ASModifier.STATIC));
-        HashMap<String, PropertyNodes> map = isStatic ? getModel()
-                .getStaticPropertyMap() : getModel().getPropertyMap();
-        String name = node.getName();
-        PropertyNodes p = map.get(name);
-        if (p == null)
-        {
-            p = new PropertyNodes();
-            map.put(name, p);
-        }
-        p.getter = node;
-        FunctionNode fn = (FunctionNode) node;
-        fn.parseFunctionBody(getProblems());
+       classEmitter.getGetSetEmitter().emitGet(node);
     }
 
     @Override
     public void emitSetAccessor(ISetterNode node)
     {
-        ModifiersSet modifierSet = node.getDefinition().getModifiers();
-        boolean isStatic = (modifierSet != null && modifierSet
-                .hasModifier(ASModifier.STATIC));
-        HashMap<String, PropertyNodes> map = isStatic ? getModel()
-                .getStaticPropertyMap() : getModel().getPropertyMap();
-        String name = node.getName();
-        PropertyNodes p = map.get(name);
-        if (p == null)
-        {
-            p = new PropertyNodes();
-            map.put(name, p);
-        }
-        p.setter = node;
-        FunctionNode fn = (FunctionNode) node;
-        fn.parseFunctionBody(getProblems());
-
-        boolean isBindableSetter = false;
-        if (node instanceof SetterNode)
-        {
-            IMetaInfo[] metaInfos = null;
-            metaInfos = node.getMetaInfos();
-            for (IMetaInfo metaInfo : metaInfos)
-            {
-                name = metaInfo.getTagName();
-                if (name.equals("Bindable")
-                        && metaInfo.getAllAttributes().length == 0)
-                {
-                    isBindableSetter = true;
-                    break;
-                }
-            }
-        }
-        if (isBindableSetter)
-        {
-            IFunctionDefinition definition = node.getDefinition();
-            ITypeDefinition type = (ITypeDefinition) definition.getParent();
-            getDoc().emitMethodDoc(fn, project);
-            write(formatQualifiedName(type.getQualifiedName()));
-            if (!node.hasModifier(ASModifier.STATIC))
-            {
-                write(ASEmitterTokens.MEMBER_ACCESS);
-                write(JSEmitterTokens.PROTOTYPE);
-            }
-
-            write(ASEmitterTokens.MEMBER_ACCESS);
-            write("__bindingWrappedSetter__");
-            writeToken(node.getName());
-            writeToken(ASEmitterTokens.EQUAL);
-            write(ASEmitterTokens.FUNCTION);
-            emitParameters(node.getParameterNodes());
-            //writeNewline();
-            emitMethodScope(node.getScopedNode());
-        }
+        classEmitter.getGetSetEmitter().emitSet(node);
     }
 
     @Override
@@ -631,260 +479,22 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
             super.emitDefinePropertyFunction(node);
     }
 
-    private JSFlexJSDocEmitter docEmitter = null;
-
-    @Override
-    public IDocEmitter getDocEmitter()
-    {
-        if (docEmitter == null)
-            docEmitter = new JSFlexJSDocEmitter(this);
-        return docEmitter;
-    }
-
     @Override
     public void emitPackageHeader(IPackageDefinition definition)
     {
-        IASScope containedScope = definition.getContainedScope();
-        ITypeDefinition type = findType(containedScope.getAllLocalDefinitions());
-        if (type == null)
-            return;
-
-        writeNewline("/**");
-        writeNewline(" * " + type.getQualifiedName());
-        writeNewline(" *");
-        writeNewline(" * @fileoverview");
-        writeNewline(" *");
-        writeNewline(" * @suppress {checkTypes}");
-        writeNewline(" */");
-        writeNewline();
-
-        /* goog.provide('x');\n\n */
-        write(JSGoogEmitterTokens.GOOG_PROVIDE);
-        write(ASEmitterTokens.PAREN_OPEN);
-        write(ASEmitterTokens.SINGLE_QUOTE);
-        write(formatQualifiedName(type.getQualifiedName()));
-        write(ASEmitterTokens.SINGLE_QUOTE);
-        write(ASEmitterTokens.PAREN_CLOSE);
-        writeNewline(ASEmitterTokens.SEMICOLON);
-        writeNewline();
+        packageHeaderEmitter.emit(definition);
     }
 
     @Override
     public void emitPackageHeaderContents(IPackageDefinition definition)
     {
-        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();
-
-        FlexJSProject flexProject = (FlexJSProject) project;
-        ASProjectScope projectScope = (ASProjectScope) flexProject.getScope();
-        ICompilationUnit cu = projectScope
-                .getCompilationUnitForDefinition(type);
-        ArrayList<String> requiresList = flexProject.getRequires(cu);
-        ArrayList<String> interfacesList = flexProject.getInterfaces(cu);
-
-        String cname = type.getQualifiedName();
-        writtenRequires.add(cname); // make sure we don't add ourselves
-
-        boolean emitsRequires = false;
-        if (requiresList != null)
-        {
-            for (String imp : requiresList)
-            {
-                if (imp.indexOf(JSGoogEmitterTokens.AS3.getToken()) != -1)
-                    continue;
-
-                if (imp.equals(cname))
-                    continue;
-
-                if (NativeUtils.isNative(imp))
-                    continue;
-
-                if (writtenRequires.indexOf(imp) == -1)
-                {
-
-                    /* goog.require('x');\n */
-                    write(JSGoogEmitterTokens.GOOG_REQUIRE);
-                    write(ASEmitterTokens.PAREN_OPEN);
-                    write(ASEmitterTokens.SINGLE_QUOTE);
-                    write(formatQualifiedName(imp));
-                    write(ASEmitterTokens.SINGLE_QUOTE);
-                    write(ASEmitterTokens.PAREN_CLOSE);
-                    writeNewline(ASEmitterTokens.SEMICOLON);
-
-                    writtenRequires.add(imp);
-
-                    emitsRequires = true;
-                }
-            }
-        }
-
-        boolean emitsInterfaces = false;
-        if (interfacesList != null)
-        {
-            for (String imp : interfacesList)
-            {
-                if (writtenRequires.indexOf(imp) == -1)
-                {
-                    write(JSGoogEmitterTokens.GOOG_REQUIRE);
-                    write(ASEmitterTokens.PAREN_OPEN);
-                    write(ASEmitterTokens.SINGLE_QUOTE);
-                    write(formatQualifiedName(imp));
-                    write(ASEmitterTokens.SINGLE_QUOTE);
-                    write(ASEmitterTokens.PAREN_CLOSE);
-                    writeNewline(ASEmitterTokens.SEMICOLON);
-
-                    emitsInterfaces = true;
-                }
-            }
-        }
-
-        // erikdebruin: Add missing language feature support, with e.g. 'is' and 
-        //              'as' operators. We don't need to worry about requiring
-        //              this in every project: ADVANCED_OPTIMISATIONS will NOT
-        //              include any of the code if it is not used in the project.
-        boolean isMainCU = flexProject.mainCU != null
-                && cu.getName().equals(flexProject.mainCU.getName());
-        if (isMainCU)
-        {
-            write(JSGoogEmitterTokens.GOOG_REQUIRE);
-            write(ASEmitterTokens.PAREN_OPEN);
-            write(ASEmitterTokens.SINGLE_QUOTE);
-            write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
-            write(ASEmitterTokens.SINGLE_QUOTE);
-            write(ASEmitterTokens.PAREN_CLOSE);
-            writeNewline(ASEmitterTokens.SEMICOLON);
-        }
-
-        if (emitsRequires || emitsInterfaces || isMainCU)
-        {
-            writeNewline();
-        }
-
-        writeNewline();
-        writeNewline();
+        packageHeaderEmitter.emitContents(definition);
     }
 
     @Override
     public void emitPackageFooter(IPackageDefinition definition)
     {
-        IASScope containedScope = definition.getContainedScope();
-        ITypeDefinition type = findType(containedScope.getAllLocalDefinitions());
-        if (type == null)
-            return;
-
-        ITypeNode tnode = findTypeNode(definition.getNode());
-        if (tnode != null)
-        {
-            /*
-             * Metadata
-             * 
-             * @type {Object.<string, Array.<Object>>}
-             */
-            writeNewline();
-            writeNewline();
-            writeNewline();
-            getDoc().begin();
-            writeNewline(" * Metadata");
-            writeNewline(" *");
-            writeNewline(" * @type {Object.<string, Array.<Object>>}");
-            getDoc().end();
-
-            // a.B.prototype.AFJS_CLASS_INFO = {  };
-            write(formatQualifiedName(type.getQualifiedName()));
-            write(ASEmitterTokens.MEMBER_ACCESS);
-            write(JSEmitterTokens.PROTOTYPE);
-            write(ASEmitterTokens.MEMBER_ACCESS);
-            writeToken(JSFlexJSEmitterTokens.FLEXJS_CLASS_INFO);
-            writeToken(ASEmitterTokens.EQUAL);
-            writeToken(ASEmitterTokens.BLOCK_OPEN);
-
-            // names: [{ name: '', qName: '' }]
-            write(JSFlexJSEmitterTokens.NAMES);
-            writeToken(ASEmitterTokens.COLON);
-            write(ASEmitterTokens.SQUARE_OPEN);
-            writeToken(ASEmitterTokens.BLOCK_OPEN);
-            write(JSFlexJSEmitterTokens.NAME);
-            writeToken(ASEmitterTokens.COLON);
-            write(ASEmitterTokens.SINGLE_QUOTE);
-            write(tnode.getName());
-            write(ASEmitterTokens.SINGLE_QUOTE);
-            writeToken(ASEmitterTokens.COMMA);
-            write(JSFlexJSEmitterTokens.QNAME);
-            writeToken(ASEmitterTokens.COLON);
-            write(ASEmitterTokens.SINGLE_QUOTE);
-            write(formatQualifiedName(tnode.getQualifiedName()));
-            write(ASEmitterTokens.SINGLE_QUOTE);
-            write(ASEmitterTokens.BLOCK_CLOSE);
-            write(ASEmitterTokens.SQUARE_CLOSE);
-
-            IExpressionNode[] enodes;
-            if (tnode instanceof IClassNode)
-                enodes = ((IClassNode) tnode).getImplementedInterfaceNodes();
-            else
-                enodes = ((IInterfaceNode) tnode).getExtendedInterfaceNodes();
-
-            if (enodes.length > 0)
-            {
-                writeToken(ASEmitterTokens.COMMA);
-
-                // interfaces: [a.IC, a.ID]
-                write(JSFlexJSEmitterTokens.INTERFACES);
-                writeToken(ASEmitterTokens.COLON);
-                write(ASEmitterTokens.SQUARE_OPEN);
-                int i = 0;
-                for (IExpressionNode enode : enodes)
-                {
-                    write(formatQualifiedName(enode.resolve(project)
-                            .getQualifiedName()));
-                    if (i < enodes.length - 1)
-                        writeToken(ASEmitterTokens.COMMA);
-                    i++;
-                }
-                write(ASEmitterTokens.SQUARE_CLOSE);
-            }
-
-            write(ASEmitterTokens.SPACE);
-            write(ASEmitterTokens.BLOCK_CLOSE);
-            writeNewline(ASEmitterTokens.SEMICOLON);
-        }
+        packageFooterEmitter.emit(definition);
     }
 
     @Override
@@ -1075,61 +685,6 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
         write(ASEmitterTokens.SINGLE_QUOTE);
     }
 
-    /*
-    @Override
-    public void emitUnaryOperator(IUnaryOperatorNode node)
-    {
-        if (node.getNodeID() == ASTNodeID.Op_PreIncrID
-                || node.getNodeID() == ASTNodeID.Op_PreDecrID
-                || node.getNodeID() == ASTNodeID.Op_PostIncrID
-                || node.getNodeID() == ASTNodeID.Op_PostDecrID)
-        {
-            IExpressionNode opNode = node.getOperandNode();
-            String getString = stringifyNode(opNode);
-            int index = getString.lastIndexOf("get_");
-            if (index != -1)
-            {
-                write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
-                write(ASEmitterTokens.MEMBER_ACCESS);
-            	if (node.getNodeID() == ASTNodeID.Op_PreIncrID)
-            		write(JSFlexJSEmitterTokens.PREINCREMENT);
-            	else if (node.getNodeID() == ASTNodeID.Op_PostIncrID)
-            		write(JSFlexJSEmitterTokens.POSTINCREMENT);
-            	else if (node.getNodeID() == ASTNodeID.Op_PreDecrID)
-            		write(JSFlexJSEmitterTokens.PREDECREMENT);
-            	else
-            		write(JSFlexJSEmitterTokens.POSTDECREMENT);
-                write(ASEmitterTokens.PAREN_OPEN);
-                String obj = getString.substring(0, index - 1);
-                write(obj);
-                write(ASEmitterTokens.COMMA);
-            	String prop = getString.substring(index + 4);            	
-            	int endIndex = prop.indexOf(ASEmitterTokens.PAREN_OPEN.getToken());
-            	prop = prop.substring(0, endIndex);
-                write(ASEmitterTokens.DOUBLE_QUOTE);
-            	write(prop);
-                write(ASEmitterTokens.DOUBLE_QUOTE);
-                write(ASEmitterTokens.PAREN_CLOSE);
-                return;
-            }
-            else
-            {
-            	IASNode parentNode = node.getParent();
-            	if (parentNode.getNodeID() == ASTNodeID.MemberAccessExpressionID &&
-            			((MemberAccessExpressionNode)parentNode).getLeftOperandNode() == node)
-            	{
-            		// GCC wanted parens around foo++.toString().  As in (foo++).toString();
-                    write(ASEmitterTokens.PAREN_OPEN);
-                    super.emitUnaryOperator(node);
-                    write(ASEmitterTokens.PAREN_CLOSE);
-                    return;
-            	}
-            }
-
-        }
-        super.emitUnaryOperator(node);
-    }
-    */
 
     @Override
     public String formatQualifiedName(String name)
@@ -1344,3 +899,59 @@ private void writeGetSetPrefix(boolean isGet)
     write("_");
 }
 */
+
+/*
+@Override
+public void emitUnaryOperator(IUnaryOperatorNode node)
+{
+    if (node.getNodeID() == ASTNodeID.Op_PreIncrID
+            || node.getNodeID() == ASTNodeID.Op_PreDecrID
+            || node.getNodeID() == ASTNodeID.Op_PostIncrID
+            || node.getNodeID() == ASTNodeID.Op_PostDecrID)
+    {
+        IExpressionNode opNode = node.getOperandNode();
+        String getString = stringifyNode(opNode);
+        int index = getString.lastIndexOf("get_");
+        if (index != -1)
+        {
+            write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
+            write(ASEmitterTokens.MEMBER_ACCESS);
+            if (node.getNodeID() == ASTNodeID.Op_PreIncrID)
+                write(JSFlexJSEmitterTokens.PREINCREMENT);
+            else if (node.getNodeID() == ASTNodeID.Op_PostIncrID)
+                write(JSFlexJSEmitterTokens.POSTINCREMENT);
+            else if (node.getNodeID() == ASTNodeID.Op_PreDecrID)
+                write(JSFlexJSEmitterTokens.PREDECREMENT);
+            else
+                write(JSFlexJSEmitterTokens.POSTDECREMENT);
+            write(ASEmitterTokens.PAREN_OPEN);
+            String obj = getString.substring(0, index - 1);
+            write(obj);
+            write(ASEmitterTokens.COMMA);
+            String prop = getString.substring(index + 4);               
+            int endIndex = prop.indexOf(ASEmitterTokens.PAREN_OPEN.getToken());
+            prop = prop.substring(0, endIndex);
+            write(ASEmitterTokens.DOUBLE_QUOTE);
+            write(prop);
+            write(ASEmitterTokens.DOUBLE_QUOTE);
+            write(ASEmitterTokens.PAREN_CLOSE);
+            return;
+        }
+        else
+        {
+            IASNode parentNode = node.getParent();
+            if (parentNode.getNodeID() == ASTNodeID.MemberAccessExpressionID &&
+                    ((MemberAccessExpressionNode)parentNode).getLeftOperandNode() == node)
+            {
+                // GCC wanted parens around foo++.toString().  As in (foo++).toString();
+                write(ASEmitterTokens.PAREN_OPEN);
+                super.emitUnaryOperator(node);
+                write(ASEmitterTokens.PAREN_CLOSE);
+                return;
+            }
+        }
+
+    }
+    super.emitUnaryOperator(node);
+}
+*/
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/cea0796c/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/ClassEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/ClassEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/ClassEmitter.java
index 1800afa..33f6f26 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/ClassEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/ClassEmitter.java
@@ -57,6 +57,7 @@ public class ClassEmitter extends JSSubEmitter implements
         super(emitter);
         
         bindableEmitter = new BindableEmitter(emitter);
+        // TODO (mschnalle) this is wrong
         getSetEmitter = new GetSetEmitter(emitter);
     }
 

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/cea0796c/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/GetSetEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/GetSetEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/GetSetEmitter.java
index c4db6fa..0f996ce 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/GetSetEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/GetSetEmitter.java
@@ -19,18 +19,29 @@
 
 package org.apache.flex.compiler.internal.codegen.js.jx;
 
+import java.util.HashMap;
 import java.util.Set;
 
 import org.apache.flex.compiler.codegen.ISubEmitter;
 import org.apache.flex.compiler.codegen.js.IJSEmitter;
+import org.apache.flex.compiler.common.ASModifier;
+import org.apache.flex.compiler.common.IMetaInfo;
+import org.apache.flex.compiler.common.ModifiersSet;
 import org.apache.flex.compiler.definitions.IClassDefinition;
+import org.apache.flex.compiler.definitions.IFunctionDefinition;
+import org.apache.flex.compiler.definitions.ITypeDefinition;
 import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
 import org.apache.flex.compiler.internal.codegen.js.JSDocEmitterTokens;
 import org.apache.flex.compiler.internal.codegen.js.JSEmitterTokens;
 import org.apache.flex.compiler.internal.codegen.js.JSSessionModel.PropertyNodes;
 import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSDocEmitter;
 import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitter;
 import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitterTokens;
+import org.apache.flex.compiler.internal.tree.as.FunctionNode;
+import org.apache.flex.compiler.internal.tree.as.SetterNode;
+import org.apache.flex.compiler.tree.as.IGetterNode;
+import org.apache.flex.compiler.tree.as.ISetterNode;
 
 public class GetSetEmitter extends JSSubEmitter implements
         ISubEmitter<IClassDefinition>
@@ -192,4 +203,88 @@ public class GetSetEmitter extends JSSubEmitter implements
             write(ASEmitterTokens.SEMICOLON);
         }
     }
+    
+    
+    public void emitGet(IGetterNode node)
+    {
+        // TODO (mschmalle) will remove this cast as more things get abstracted
+        JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
+        
+        ModifiersSet modifierSet = node.getDefinition().getModifiers();
+        boolean isStatic = (modifierSet != null && modifierSet
+                .hasModifier(ASModifier.STATIC));
+        HashMap<String, PropertyNodes> map = isStatic ? getModel()
+                .getStaticPropertyMap() : getModel().getPropertyMap();
+        String name = node.getName();
+        PropertyNodes p = map.get(name);
+        if (p == null)
+        {
+            p = new PropertyNodes();
+            map.put(name, p);
+        }
+        p.getter = node;
+        FunctionNode fn = (FunctionNode) node;
+        fn.parseFunctionBody(fjs.getProblems());
+    }
+
+    public void emitSet(ISetterNode node)
+    {
+        // TODO (mschmalle) will remove this cast as more things get abstracted
+        JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
+        JSFlexJSDocEmitter doc = (JSFlexJSDocEmitter) fjs.getDocEmitter();
+        
+        ModifiersSet modifierSet = node.getDefinition().getModifiers();
+        boolean isStatic = (modifierSet != null && modifierSet
+                .hasModifier(ASModifier.STATIC));
+        HashMap<String, PropertyNodes> map = isStatic ? getModel()
+                .getStaticPropertyMap() : getModel().getPropertyMap();
+        String name = node.getName();
+        PropertyNodes p = map.get(name);
+        if (p == null)
+        {
+            p = new PropertyNodes();
+            map.put(name, p);
+        }
+        p.setter = node;
+        FunctionNode fn = (FunctionNode) node;
+        fn.parseFunctionBody(fjs.getProblems());
+
+        boolean isBindableSetter = false;
+        if (node instanceof SetterNode)
+        {
+            IMetaInfo[] metaInfos = null;
+            metaInfos = node.getMetaInfos();
+            for (IMetaInfo metaInfo : metaInfos)
+            {
+                name = metaInfo.getTagName();
+                if (name.equals("Bindable")
+                        && metaInfo.getAllAttributes().length == 0)
+                {
+                    isBindableSetter = true;
+                    break;
+                }
+            }
+        }
+        if (isBindableSetter)
+        {
+            IFunctionDefinition definition = node.getDefinition();
+            ITypeDefinition type = (ITypeDefinition) definition.getParent();
+            doc.emitMethodDoc(fn, getProject());
+            write(fjs.formatQualifiedName(type.getQualifiedName()));
+            if (!node.hasModifier(ASModifier.STATIC))
+            {
+                write(ASEmitterTokens.MEMBER_ACCESS);
+                write(JSEmitterTokens.PROTOTYPE);
+            }
+
+            write(ASEmitterTokens.MEMBER_ACCESS);
+            write("__bindingWrappedSetter__");
+            writeToken(node.getName());
+            writeToken(ASEmitterTokens.EQUAL);
+            write(ASEmitterTokens.FUNCTION);
+            fjs.emitParameters(node.getParameterNodes());
+            //writeNewline();
+            fjs.emitMethodScope(node.getScopedNode());
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/cea0796c/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/MemberAccessEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/MemberAccessEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/MemberAccessEmitter.java
new file mode 100644
index 0000000..b582915
--- /dev/null
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/MemberAccessEmitter.java
@@ -0,0 +1,148 @@
+/*
+ *
+ *  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.js.jx;
+
+import org.apache.flex.compiler.codegen.ISubEmitter;
+import org.apache.flex.compiler.codegen.js.IJSEmitter;
+import org.apache.flex.compiler.definitions.IDefinition;
+import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitterTokens;
+import org.apache.flex.compiler.internal.definitions.AccessorDefinition;
+import org.apache.flex.compiler.internal.tree.as.GetterNode;
+import org.apache.flex.compiler.internal.tree.as.UnaryOperatorAtNode;
+import org.apache.flex.compiler.tree.ASTNodeID;
+import org.apache.flex.compiler.tree.as.IASNode;
+import org.apache.flex.compiler.tree.as.IClassNode;
+import org.apache.flex.compiler.tree.as.IIdentifierNode;
+import org.apache.flex.compiler.tree.as.ILanguageIdentifierNode;
+import org.apache.flex.compiler.tree.as.IMemberAccessExpressionNode;
+import org.apache.flex.compiler.utils.ASNodeUtils;
+
+public class MemberAccessEmitter extends JSSubEmitter implements
+        ISubEmitter<IMemberAccessExpressionNode>
+{
+
+    public MemberAccessEmitter(IJSEmitter emitter)
+    {
+        super(emitter);
+    }
+
+    @Override
+    public void emit(IMemberAccessExpressionNode node)
+    {
+        // TODO (mschmalle) will remove this cast as more things get abstracted
+        JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
+
+        if (ASNodeUtils.hasParenOpen(node))
+            write(ASEmitterTokens.PAREN_OPEN);
+
+        IASNode leftNode = node.getLeftOperandNode();
+        IASNode rightNode = node.getRightOperandNode();
+
+        IDefinition def = node.resolve(getProject());
+        boolean isStatic = false;
+        if (def != null && def.isStatic())
+            isStatic = true;
+
+        boolean continueWalk = true;
+        if (!isStatic)
+        {
+            if (!(leftNode instanceof ILanguageIdentifierNode && ((ILanguageIdentifierNode) leftNode)
+                    .getKind() == ILanguageIdentifierNode.LanguageIdentifierKind.THIS))
+            {
+                IDefinition rightDef = null;
+                if (rightNode instanceof IIdentifierNode)
+                    rightDef = ((IIdentifierNode) rightNode)
+                            .resolve(getProject());
+
+                if (rightNode instanceof UnaryOperatorAtNode)
+                {
+                    // ToDo (erikdebruin): properly handle E4X
+
+                    write(ASEmitterTokens.THIS);
+                    write(ASEmitterTokens.MEMBER_ACCESS);
+                    getWalker().walk(node.getLeftOperandNode());
+                    write(ASEmitterTokens.SQUARE_OPEN);
+                    write(ASEmitterTokens.SINGLE_QUOTE);
+                    write("E4XOperator");
+                    write(ASEmitterTokens.SINGLE_QUOTE);
+                    write(ASEmitterTokens.SQUARE_CLOSE);
+                    continueWalk = false;
+                }
+                else if (node.getNodeID() == ASTNodeID.Op_DescendantsID)
+                {
+                    // ToDo (erikdebruin): properly handle E4X
+
+                    write(ASEmitterTokens.THIS);
+                    write(ASEmitterTokens.MEMBER_ACCESS);
+                    getWalker().walk(node.getLeftOperandNode());
+                    write(ASEmitterTokens.SQUARE_OPEN);
+                    write(ASEmitterTokens.SINGLE_QUOTE);
+                    write("E4XSelector");
+                    write(ASEmitterTokens.SINGLE_QUOTE);
+                    write(ASEmitterTokens.SQUARE_CLOSE);
+                    continueWalk = false;
+                }
+                else if (leftNode.getNodeID() != ASTNodeID.SuperID)
+                {
+                    getWalker().walk(node.getLeftOperandNode());
+                    write(node.getOperator().getOperatorText());
+                }
+                else if (leftNode.getNodeID() == ASTNodeID.SuperID
+                        && (rightNode.getNodeID() == ASTNodeID.GetterID || (rightDef != null && rightDef instanceof AccessorDefinition)))
+                {
+                    // setter is handled in binaryOperator
+                    write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
+                    write(ASEmitterTokens.MEMBER_ACCESS);
+                    write(JSFlexJSEmitterTokens.SUPERGETTER);
+                    write(ASEmitterTokens.PAREN_OPEN);
+                    IClassNode cnode = (IClassNode) node
+                            .getAncestorOfType(IClassNode.class);
+                    write(fjs.formatQualifiedName(cnode.getQualifiedName()));
+                    writeToken(ASEmitterTokens.COMMA);
+                    write(ASEmitterTokens.THIS);
+                    writeToken(ASEmitterTokens.COMMA);
+                    write(ASEmitterTokens.SINGLE_QUOTE);
+                    if (rightDef != null)
+                        write(rightDef.getBaseName());
+                    else
+                        write(((GetterNode) rightNode).getName());
+                    write(ASEmitterTokens.SINGLE_QUOTE);
+                    write(ASEmitterTokens.PAREN_CLOSE);
+                    continueWalk = false;
+                }
+            }
+            else
+            {
+                write(ASEmitterTokens.THIS);
+                write(node.getOperator().getOperatorText());
+            }
+        }
+
+        if (continueWalk)
+            getWalker().walk(node.getRightOperandNode());
+
+        if (ASNodeUtils.hasParenClose(node))
+            write(ASEmitterTokens.PAREN_CLOSE);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/cea0796c/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageFooterEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageFooterEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageFooterEmitter.java
new file mode 100644
index 0000000..86ac18d
--- /dev/null
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageFooterEmitter.java
@@ -0,0 +1,138 @@
+/*
+ *
+ *  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.js.jx;
+
+import org.apache.flex.compiler.codegen.ISubEmitter;
+import org.apache.flex.compiler.codegen.js.IJSEmitter;
+import org.apache.flex.compiler.definitions.IPackageDefinition;
+import org.apache.flex.compiler.definitions.ITypeDefinition;
+import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSDocEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.utils.EmitterUtils;
+import org.apache.flex.compiler.scopes.IASScope;
+import org.apache.flex.compiler.tree.as.IClassNode;
+import org.apache.flex.compiler.tree.as.IExpressionNode;
+import org.apache.flex.compiler.tree.as.IInterfaceNode;
+import org.apache.flex.compiler.tree.as.ITypeNode;
+
+public class PackageFooterEmitter extends JSSubEmitter implements
+        ISubEmitter<IPackageDefinition>
+{
+
+    public PackageFooterEmitter(IJSEmitter emitter)
+    {
+        super(emitter);
+    }
+
+    @Override
+    public void emit(IPackageDefinition definition)
+    {
+        IASScope containedScope = definition.getContainedScope();
+        ITypeDefinition type = EmitterUtils.findType(containedScope
+                .getAllLocalDefinitions());
+        if (type == null)
+            return;
+
+        // TODO (mschmalle) will remove this cast as more things get abstracted
+        JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
+        JSFlexJSDocEmitter doc = (JSFlexJSDocEmitter) fjs.getDocEmitter();
+
+        ITypeNode tnode = EmitterUtils.findTypeNode(definition.getNode());
+        if (tnode != null)
+        {
+            /*
+             * Metadata
+             * 
+             * @type {Object.<string, Array.<Object>>}
+             */
+            writeNewline();
+            writeNewline();
+            writeNewline();
+            doc.begin();
+            writeNewline(" * Metadata");
+            writeNewline(" *");
+            writeNewline(" * @type {Object.<string, Array.<Object>>}");
+            doc.end();
+
+            // a.B.prototype.AFJS_CLASS_INFO = {  };
+            write(fjs.formatQualifiedName(type.getQualifiedName()));
+            write(ASEmitterTokens.MEMBER_ACCESS);
+            write(JSEmitterTokens.PROTOTYPE);
+            write(ASEmitterTokens.MEMBER_ACCESS);
+            writeToken(JSFlexJSEmitterTokens.FLEXJS_CLASS_INFO);
+            writeToken(ASEmitterTokens.EQUAL);
+            writeToken(ASEmitterTokens.BLOCK_OPEN);
+
+            // names: [{ name: '', qName: '' }]
+            write(JSFlexJSEmitterTokens.NAMES);
+            writeToken(ASEmitterTokens.COLON);
+            write(ASEmitterTokens.SQUARE_OPEN);
+            writeToken(ASEmitterTokens.BLOCK_OPEN);
+            write(JSFlexJSEmitterTokens.NAME);
+            writeToken(ASEmitterTokens.COLON);
+            write(ASEmitterTokens.SINGLE_QUOTE);
+            write(tnode.getName());
+            write(ASEmitterTokens.SINGLE_QUOTE);
+            writeToken(ASEmitterTokens.COMMA);
+            write(JSFlexJSEmitterTokens.QNAME);
+            writeToken(ASEmitterTokens.COLON);
+            write(ASEmitterTokens.SINGLE_QUOTE);
+            write(fjs.formatQualifiedName(tnode.getQualifiedName()));
+            write(ASEmitterTokens.SINGLE_QUOTE);
+            write(ASEmitterTokens.BLOCK_CLOSE);
+            write(ASEmitterTokens.SQUARE_CLOSE);
+
+            IExpressionNode[] enodes;
+            if (tnode instanceof IClassNode)
+                enodes = ((IClassNode) tnode).getImplementedInterfaceNodes();
+            else
+                enodes = ((IInterfaceNode) tnode).getExtendedInterfaceNodes();
+
+            if (enodes.length > 0)
+            {
+                writeToken(ASEmitterTokens.COMMA);
+
+                // interfaces: [a.IC, a.ID]
+                write(JSFlexJSEmitterTokens.INTERFACES);
+                writeToken(ASEmitterTokens.COLON);
+                write(ASEmitterTokens.SQUARE_OPEN);
+                int i = 0;
+                for (IExpressionNode enode : enodes)
+                {
+                    write(fjs.formatQualifiedName(enode.resolve(getProject())
+                            .getQualifiedName()));
+                    if (i < enodes.length - 1)
+                        writeToken(ASEmitterTokens.COMMA);
+                    i++;
+                }
+                write(ASEmitterTokens.SQUARE_CLOSE);
+            }
+
+            write(ASEmitterTokens.SPACE);
+            write(ASEmitterTokens.BLOCK_CLOSE);
+            writeNewline(ASEmitterTokens.SEMICOLON);
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/cea0796c/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
new file mode 100644
index 0000000..cd82cf2
--- /dev/null
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
@@ -0,0 +1,221 @@
+/*
+ *
+ *  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.js.jx;
+
+import java.util.ArrayList;
+
+import org.apache.flex.compiler.asdoc.flexjs.ASDocComment;
+import org.apache.flex.compiler.codegen.ISubEmitter;
+import org.apache.flex.compiler.codegen.js.IJSEmitter;
+import org.apache.flex.compiler.definitions.IPackageDefinition;
+import org.apache.flex.compiler.definitions.ITypeDefinition;
+import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.utils.EmitterUtils;
+import org.apache.flex.compiler.internal.projects.FlexJSProject;
+import org.apache.flex.compiler.internal.scopes.ASProjectScope;
+import org.apache.flex.compiler.internal.scopes.PackageScope;
+import org.apache.flex.compiler.internal.tree.as.ClassNode;
+import org.apache.flex.compiler.scopes.IASScope;
+import org.apache.flex.compiler.tree.as.ITypeNode;
+import org.apache.flex.compiler.units.ICompilationUnit;
+import org.apache.flex.compiler.utils.NativeUtils;
+
+public class PackageHeaderEmitter extends JSSubEmitter implements
+        ISubEmitter<IPackageDefinition>
+{
+
+    public PackageHeaderEmitter(IJSEmitter emitter)
+    {
+        super(emitter);
+    }
+
+    @Override
+    public void emit(IPackageDefinition definition)
+    {
+        // TODO (mschmalle) will remove this cast as more things get abstracted
+        JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
+
+        IASScope containedScope = definition.getContainedScope();
+        ITypeDefinition type = EmitterUtils.findType(containedScope
+                .getAllLocalDefinitions());
+        if (type == null)
+            return;
+
+        writeNewline("/**");
+        writeNewline(" * " + type.getQualifiedName());
+        writeNewline(" *");
+        writeNewline(" * @fileoverview");
+        writeNewline(" *");
+        writeNewline(" * @suppress {checkTypes}");
+        writeNewline(" */");
+        writeNewline();
+
+        /* goog.provide('x');\n\n */
+        write(JSGoogEmitterTokens.GOOG_PROVIDE);
+        write(ASEmitterTokens.PAREN_OPEN);
+        write(ASEmitterTokens.SINGLE_QUOTE);
+        write(fjs.formatQualifiedName(type.getQualifiedName()));
+        write(ASEmitterTokens.SINGLE_QUOTE);
+        write(ASEmitterTokens.PAREN_CLOSE);
+        writeNewline(ASEmitterTokens.SEMICOLON);
+        writeNewline();
+    }
+
+    public void emitContents(IPackageDefinition definition)
+    {
+        // TODO (mschmalle) will remove this cast as more things get abstracted
+        JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
+
+        PackageScope containedScope = (PackageScope) definition
+                .getContainedScope();
+
+        ArrayList<String> writtenRequires = new ArrayList<String>();
+
+        ITypeDefinition type = EmitterUtils.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();
+
+        FlexJSProject flexProject = (FlexJSProject) getProject();
+        ASProjectScope projectScope = (ASProjectScope) flexProject.getScope();
+        ICompilationUnit cu = projectScope
+                .getCompilationUnitForDefinition(type);
+        ArrayList<String> requiresList = flexProject.getRequires(cu);
+        ArrayList<String> interfacesList = flexProject.getInterfaces(cu);
+
+        String cname = type.getQualifiedName();
+        writtenRequires.add(cname); // make sure we don't add ourselves
+
+        boolean emitsRequires = false;
+        if (requiresList != null)
+        {
+            for (String imp : requiresList)
+            {
+                if (imp.indexOf(JSGoogEmitterTokens.AS3.getToken()) != -1)
+                    continue;
+
+                if (imp.equals(cname))
+                    continue;
+
+                if (NativeUtils.isNative(imp))
+                    continue;
+
+                if (writtenRequires.indexOf(imp) == -1)
+                {
+
+                    /* goog.require('x');\n */
+                    write(JSGoogEmitterTokens.GOOG_REQUIRE);
+                    write(ASEmitterTokens.PAREN_OPEN);
+                    write(ASEmitterTokens.SINGLE_QUOTE);
+                    write(fjs.formatQualifiedName(imp));
+                    write(ASEmitterTokens.SINGLE_QUOTE);
+                    write(ASEmitterTokens.PAREN_CLOSE);
+                    writeNewline(ASEmitterTokens.SEMICOLON);
+
+                    writtenRequires.add(imp);
+
+                    emitsRequires = true;
+                }
+            }
+        }
+
+        boolean emitsInterfaces = false;
+        if (interfacesList != null)
+        {
+            for (String imp : interfacesList)
+            {
+                if (writtenRequires.indexOf(imp) == -1)
+                {
+                    write(JSGoogEmitterTokens.GOOG_REQUIRE);
+                    write(ASEmitterTokens.PAREN_OPEN);
+                    write(ASEmitterTokens.SINGLE_QUOTE);
+                    write(fjs.formatQualifiedName(imp));
+                    write(ASEmitterTokens.SINGLE_QUOTE);
+                    write(ASEmitterTokens.PAREN_CLOSE);
+                    writeNewline(ASEmitterTokens.SEMICOLON);
+
+                    emitsInterfaces = true;
+                }
+            }
+        }
+
+        // erikdebruin: Add missing language feature support, with e.g. 'is' and 
+        //              'as' operators. We don't need to worry about requiring
+        //              this in every project: ADVANCED_OPTIMISATIONS will NOT
+        //              include any of the code if it is not used in the project.
+        boolean isMainCU = flexProject.mainCU != null
+                && cu.getName().equals(flexProject.mainCU.getName());
+        if (isMainCU)
+        {
+            write(JSGoogEmitterTokens.GOOG_REQUIRE);
+            write(ASEmitterTokens.PAREN_OPEN);
+            write(ASEmitterTokens.SINGLE_QUOTE);
+            write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
+            write(ASEmitterTokens.SINGLE_QUOTE);
+            write(ASEmitterTokens.PAREN_CLOSE);
+            writeNewline(ASEmitterTokens.SEMICOLON);
+        }
+
+        if (emitsRequires || emitsInterfaces || isMainCU)
+        {
+            writeNewline();
+        }
+
+        writeNewline();
+        writeNewline();
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/cea0796c/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java
index 69acf2d..07da145 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java
@@ -30,9 +30,9 @@ import org.apache.flex.compiler.constants.IASLanguageConstants;
 import org.apache.flex.compiler.definitions.IClassDefinition;
 import org.apache.flex.compiler.definitions.IDefinition;
 import org.apache.flex.compiler.definitions.IFunctionDefinition;
+import org.apache.flex.compiler.definitions.IFunctionDefinition.FunctionClassification;
 import org.apache.flex.compiler.definitions.INamespaceDefinition;
 import org.apache.flex.compiler.definitions.ITypeDefinition;
-import org.apache.flex.compiler.definitions.IFunctionDefinition.FunctionClassification;
 import org.apache.flex.compiler.internal.codegen.js.JSSessionModel;
 import org.apache.flex.compiler.internal.definitions.AccessorDefinition;
 import org.apache.flex.compiler.internal.definitions.ClassDefinition;
@@ -49,13 +49,37 @@ import org.apache.flex.compiler.tree.as.IClassNode;
 import org.apache.flex.compiler.tree.as.IDefinitionNode;
 import org.apache.flex.compiler.tree.as.IFunctionNode;
 import org.apache.flex.compiler.tree.as.IIdentifierNode;
+import org.apache.flex.compiler.tree.as.IPackageNode;
 import org.apache.flex.compiler.tree.as.IScopedNode;
+import org.apache.flex.compiler.tree.as.ITypeNode;
 
 /**
  * Various static methods used in shared emitter logic.
  */
 public class EmitterUtils
 {
+    public static ITypeNode findTypeNode(IPackageNode node)
+    {
+        IScopedNode scope = node.getScopedNode();
+        for (int i = 0; i < scope.getChildCount(); i++)
+        {
+            IASNode child = scope.getChild(i);
+            if (child instanceof ITypeNode)
+                return (ITypeNode) child;
+        }
+        return null;
+    }
+
+    public static ITypeDefinition findType(Collection<IDefinition> definitions)
+    {
+        for (IDefinition definition : definitions)
+        {
+            if (definition instanceof ITypeDefinition)
+                return (ITypeDefinition) definition;
+        }
+        return null;
+    }
+
     public static boolean isSameClass(IDefinition pdef, IDefinition thisClass,
             ICompilerProject project)
     {


[13/35] git commit: [flex-falcon] [refs/heads/IDEA-FLEX_JS_COMPILER] - - Fixed a bug in JSGoogDocEmitter where the project was not resolved and thus the test was faulty not showing it's qualified name. * The bug was responsible for 2 tests failing, whe

Posted by ft...@apache.org.
- Fixed a bug in JSGoogDocEmitter where the project was not resolved
and thus the test was faulty not showing it's qualified name.
  * The bug was responsible for 2 tests failing, when there is no type
    the visitor test failt, just put an if() in to fix it.
- Removed the project reference from JSFlexJSEmitter.


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

Branch: refs/heads/IDEA-FLEX_JS_COMPILER
Commit: 7308a81aeb83c1addeb390414cb3eeb04f1945a8
Parents: 13a2313
Author: Michael Schmalle <ms...@apache.org>
Authored: Sun May 31 13:06:43 2015 -0400
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:40:33 2015 +0100

----------------------------------------------------------------------
 .../flexjs/files/wildcard_import_result.js      |  2 +-
 .../codegen/js/flexjs/JSFlexJSEmitter.java      |  8 +---
 .../codegen/js/goog/JSGoogDocEmitter.java       | 39 +++++++++++---------
 .../internal/codegen/js/goog/JSGoogEmitter.java |  3 +-
 4 files changed, 26 insertions(+), 26 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/7308a81a/compiler.jx.tests/test-files/flexjs/files/wildcard_import_result.js
----------------------------------------------------------------------
diff --git a/compiler.jx.tests/test-files/flexjs/files/wildcard_import_result.js b/compiler.jx.tests/test-files/flexjs/files/wildcard_import_result.js
index 72981e3..1ee8469 100644
--- a/compiler.jx.tests/test-files/flexjs/files/wildcard_import_result.js
+++ b/compiler.jx.tests/test-files/flexjs/files/wildcard_import_result.js
@@ -61,7 +61,7 @@ wildcard_import.prototype.FLEXJS_CLASS_INFO = { names: [{ name: 'wildcard_import
  * @private
  */
 wildcard_import.prototype.tmp = function() {
-  var /** @type {Button} */ myButton;
+  var /** @type {org_apache_flex_html_Button} */ myButton;
   myButton = new org_apache_flex_html_Button();
 };
 

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/7308a81a/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 2460d3f..ec1f3db 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
@@ -199,9 +199,6 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
     public void emitIdentifier(IIdentifierNode node)
     {
         // TODO (mschmalle) remove when project field is removed
-        if (project == null)
-            project = getWalker().getProject();
-
         identifierEmitter.emit(node);
     }
 
@@ -229,9 +226,6 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
     public void emitMemberAccessExpression(IMemberAccessExpressionNode node)
     {
         // TODO (mschmalle) remove when project field is removed
-        if (project == null)
-            project = getWalker().getProject();
-
         memberAccessEmitter.emit(node);
     }
 
@@ -280,7 +274,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
         }
         if (isBindableSetter)
         {
-            getDoc().emitMethodDoc(fn, project);
+            getDoc().emitMethodDoc(fn, getWalker().getProject());
             write(formatQualifiedName(type.getQualifiedName()));
             if (!node.hasModifier(ASModifier.STATIC))
             {

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/7308a81a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogDocEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogDocEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogDocEmitter.java
index 0f8f960..e402ac9 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogDocEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogDocEmitter.java
@@ -74,7 +74,8 @@ public class JSGoogDocEmitter extends JSDocEmitter implements IJSGoogDocEmitter
             IDefinition dnode = inode.resolve(project);
             if (dnode != null)
             {
-                emitJSDocLine(ASEmitterTokens.EXTENDS, formatQualifiedName(dnode.getQualifiedName()));
+                emitJSDocLine(ASEmitterTokens.EXTENDS,
+                        formatQualifiedName(dnode.getQualifiedName()));
             }
             else
             {
@@ -82,7 +83,7 @@ public class JSGoogDocEmitter extends JSDocEmitter implements IJSGoogDocEmitter
                 break;
             }
         }
-        
+
         if (!hasQualifiedNames)
         {
             String[] inames = node.getExtendedInterfaces();
@@ -95,7 +96,8 @@ public class JSGoogDocEmitter extends JSDocEmitter implements IJSGoogDocEmitter
         end();
     }
 
-    public void emitInterfaceMemberDoc(IDefinitionNode node, ICompilerProject project)
+    public void emitInterfaceMemberDoc(IDefinitionNode node,
+            ICompilerProject project)
     {
         // (erikdebruin) placeholder method, so we don't have to further complicate
         //               the interface structure
@@ -172,7 +174,7 @@ public class JSGoogDocEmitter extends JSDocEmitter implements IJSGoogDocEmitter
                     begin();
                     emitMethodAccess(node);
                     hasDoc = true;
-                    
+
                     emitThis(classDefinition, classDefinition.getPackageName());
                 }
             }
@@ -231,9 +233,9 @@ public class JSGoogDocEmitter extends JSDocEmitter implements IJSGoogDocEmitter
 
     public void emitMethodAccess(IFunctionNode node)
     {
-    	// do nothing
+        // do nothing
     }
-    
+
     @Override
     public void emitVarDoc(IVariableNode node, IDefinition def)
     {
@@ -246,14 +248,15 @@ public class JSGoogDocEmitter extends JSDocEmitter implements IJSGoogDocEmitter
             IDefinition ndef = node.getDefinition();
             if (emitter != null && emitter instanceof JSFlexJSEmitter)
             {
-                ICompilerProject project = ((JSFlexJSEmitter)emitter).project;
-                if (project != null)
+                ICompilerProject project = ((JSFlexJSEmitter) emitter)
+                        .getWalker().getProject();
+                ITypeDefinition type = ndef.resolveType(project);
+                if (type != null)
                 {
-                    packageName = ((ITypeDefinition)ndef.resolveType(project))
-                            .getPackageName();
+                    packageName = ((ITypeDefinition) type).getPackageName();
                 }
             }
-            
+
             emitTypeShort(node, packageName);
         }
         else
@@ -282,7 +285,8 @@ public class JSGoogDocEmitter extends JSDocEmitter implements IJSGoogDocEmitter
     @Override
     public void emitImplements(ITypeDefinition definition, String packageName)
     {
-        emitJSDocLine(ASEmitterTokens.IMPLEMENTS, formatQualifiedName(definition.getQualifiedName()));
+        emitJSDocLine(ASEmitterTokens.IMPLEMENTS,
+                formatQualifiedName(definition.getQualifiedName()));
     }
 
     @Override
@@ -485,7 +489,8 @@ public class JSGoogDocEmitter extends JSDocEmitter implements IJSGoogDocEmitter
 
         if (result == "")
             result = (pname != "" && !isBuiltinFunction && name.indexOf(".") < 0) ? pname
-                    + ASEmitterTokens.MEMBER_ACCESS.getToken() + name : name;
+                    + ASEmitterTokens.MEMBER_ACCESS.getToken() + name
+                    : name;
 
         result = result.replace(IASLanguageConstants.String,
                 IASLanguageConstants.String.toLowerCase());
@@ -501,17 +506,17 @@ public class JSGoogDocEmitter extends JSDocEmitter implements IJSGoogDocEmitter
 
         IClassNode cnode = (IClassNode) node
                 .getAncestorOfType(IClassNode.class);
-        
+
         // ToDo (erikdebruin): add VF2JS conditional -> only use check during full SDK compilation
         if (cnode == null)
             return null;
-        
+
         return cnode.getDefinition();
     }
-    
+
     protected String formatQualifiedName(String name)
     {
-    	return name;
+        return name;
     }
 
 }

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/7308a81a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
index 530a381..77c9094 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
@@ -84,7 +84,8 @@ import org.apache.flex.compiler.utils.ASNodeUtils;
 public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
 {
     protected List<String> propertyNames = new ArrayList<String>();
-
+    
+    // TODO (mschmalle) Remove this (not used in JSFlexJSEmitter and JSGoogEmitter anymore)
     public ICompilerProject project;
 
     protected IJSGoogDocEmitter getDoc()


[22/35] git commit: [flex-falcon] [refs/heads/IDEA-FLEX_JS_COMPILER] - Revert "Make comment more distinct"

Posted by ft...@apache.org.
Revert "Make comment more distinct"

This reverts commit 9b95414ba99eca4bb0401a906414635e240fc2aa.


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

Branch: refs/heads/IDEA-FLEX_JS_COMPILER
Commit: 4fa27aec93d3edc84f8ef39a86784a61ce77187b
Parents: f67b246
Author: Erik de Bruin <er...@ixsoftware.nl>
Authored: Sun May 31 19:47:38 2015 +0200
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:41:04 2015 +0100

----------------------------------------------------------------------
 .../org/apache/flex/compiler/internal/graph/VF2JSDepsWriter.java   | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/4fa27aec/compiler.jx/src/org/apache/flex/compiler/internal/graph/VF2JSDepsWriter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/graph/VF2JSDepsWriter.java b/compiler.jx/src/org/apache/flex/compiler/internal/graph/VF2JSDepsWriter.java
index ade44c2..4d625d4 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/graph/VF2JSDepsWriter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/graph/VF2JSDepsWriter.java
@@ -74,7 +74,7 @@ public class VF2JSDepsWriter {
 	    this.problems = problems;
 		buildDB();
 		ArrayList<GoogDep> dps = sort(mainName);
-		String outString = "// generated by FalconJX (VF2JS)" + "\n";
+		String outString = "// generated by FalconJS" + "\n";
 		int n = dps.size();
 		for (int i = n - 1; i >= 0; i--)
 		{


[19/35] git commit: [flex-falcon] [refs/heads/IDEA-FLEX_JS_COMPILER] - Revert "Raise visibility to allow sub class to call from @override method"

Posted by ft...@apache.org.
Revert "Raise visibility to allow sub class to call from @override method"

This reverts commit 33961df15ff123b4af57883069b6124f3acbb02d.


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

Branch: refs/heads/IDEA-FLEX_JS_COMPILER
Commit: 11fe07b8d3c8b0c406b0ffd961cb10031ddcfe6d
Parents: 36722ba
Author: Erik de Bruin <er...@ixsoftware.nl>
Authored: Sun May 31 19:47:38 2015 +0200
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:40:54 2015 +0100

----------------------------------------------------------------------
 .../flex/compiler/internal/codegen/js/goog/JSGoogDocEmitter.java   | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/11fe07b8/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogDocEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogDocEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogDocEmitter.java
index b8e513d..e402ac9 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogDocEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogDocEmitter.java
@@ -398,7 +398,7 @@ public class JSGoogDocEmitter extends JSDocEmitter implements IJSGoogDocEmitter
         emitJSDocLine(name.getToken(), "");
     }
 
-    protected void emitJSDocLine(String name)
+    private void emitJSDocLine(String name)
     {
         emitJSDocLine(name, "");
     }


[32/35] git commit: [flex-falcon] [refs/heads/IDEA-FLEX_JS_COMPILER] - Check windows file separator too

Posted by ft...@apache.org.
Check windows file separator too


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

Branch: refs/heads/IDEA-FLEX_JS_COMPILER
Commit: e0f06557aec6122c775708561bd3e882ac2fe32e
Parents: 7127eee
Author: Frédéric THOMAS <we...@gmail.com>
Authored: Mon Jun 1 19:19:56 2015 +0100
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:41:38 2015 +0100

----------------------------------------------------------------------
 .../org/apache/flex/compiler/internal/graph/GoogDepsWriter.java  | 4 ++++
 1 file changed, 4 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/e0f06557/compiler.jx/src/org/apache/flex/compiler/internal/graph/GoogDepsWriter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/graph/GoogDepsWriter.java b/compiler.jx/src/org/apache/flex/compiler/internal/graph/GoogDepsWriter.java
index f3d77fe..b53e126 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/graph/GoogDepsWriter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/graph/GoogDepsWriter.java
@@ -451,6 +451,10 @@ public class GoogDepsWriter {
         		fileEntry = swc.getFile("js/src/" + bckClassPath + ".js");
         	if (fileEntry == null)
         		fileEntry = swc.getFile("js/out/" + bckClassPath + ".js");
+            if (fileEntry == null)
+                fileEntry = swc.getFile("js\\src\\" + bckClassPath + ".js");
+            if (fileEntry == null)
+                fileEntry = swc.getFile("js\\out\\" + bckClassPath + ".js");
     		if (fileEntry != null)
     		{
     			fn = outputFolderPath + File.separator + classPath + ".js";


[34/35] git commit: [flex-falcon] [refs/heads/IDEA-FLEX_JS_COMPILER] - Chain the compilation in case -js-output-type=FLEXJS_DUAL on the command line. Note: At the moment, -output needs to be passed to the command line too.

Posted by ft...@apache.org.
Chain the compilation in case -js-output-type=FLEXJS_DUAL on the command line.
Note: At the moment, -output needs to be passed to the command line too.


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

Branch: refs/heads/IDEA-FLEX_JS_COMPILER
Commit: 55443ff9b6488f8f7a5e0293f49b97e753389ac4
Parents: 6675bd0
Author: Frédéric THOMAS <we...@gmail.com>
Authored: Tue Jun 2 13:32:33 2015 +0100
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:41:45 2015 +0100

----------------------------------------------------------------------
 .../apache/flex/compiler/clients/MXMLJSC.java   |   4 +-
 .../apache/flex/compiler/clients/COMPJSC.java   |   1 +
 .../apache/flex/compiler/clients/MXMLJSC.java   |   7 +-
 .../src/org/apache/flex/utils/ArgumentUtil.java | 122 ++++++++++++++
 .../apache/flex/utils/ConfigurationUtil.java    |  42 -----
 flex-compiler-oem/src/flex2/tools/Compc.java    |   3 -
 flex-compiler-oem/src/flex2/tools/MxmlJSC.java  |   1 +
 flex-compiler-oem/src/flex2/tools/Tool.java     | 168 +++++++++++--------
 8 files changed, 226 insertions(+), 122 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/55443ff9/compiler.js/src/org/apache/flex/compiler/clients/MXMLJSC.java
----------------------------------------------------------------------
diff --git a/compiler.js/src/org/apache/flex/compiler/clients/MXMLJSC.java b/compiler.js/src/org/apache/flex/compiler/clients/MXMLJSC.java
index b4f5718..1f8f070 100644
--- a/compiler.js/src/org/apache/flex/compiler/clients/MXMLJSC.java
+++ b/compiler.js/src/org/apache/flex/compiler/clients/MXMLJSC.java
@@ -75,7 +75,7 @@ import org.apache.flex.swc.ISWC;
 import org.apache.flex.swf.ISWF;
 import org.apache.flex.swf.io.ISWFWriter;
 import org.apache.flex.swf.types.Rect;
-import org.apache.flex.utils.ConfigurationUtil;
+import org.apache.flex.utils.ArgumentUtil;
 import org.apache.flex.utils.FilenameNormalization;
 
 import java.io.*;
@@ -145,7 +145,7 @@ public class MXMLJSC
         int exitCode = -1;
         try
         {
-            exitCode = _mainNoExit(ConfigurationUtil.fixArgs(args), problems);
+            exitCode = _mainNoExit(ArgumentUtil.fixArgs(args), problems);
         }
         catch (Exception e)
         {

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/55443ff9/compiler.jx/src/org/apache/flex/compiler/clients/COMPJSC.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/clients/COMPJSC.java b/compiler.jx/src/org/apache/flex/compiler/clients/COMPJSC.java
index 7c205a8..c288f33 100644
--- a/compiler.jx/src/org/apache/flex/compiler/clients/COMPJSC.java
+++ b/compiler.jx/src/org/apache/flex/compiler/clients/COMPJSC.java
@@ -115,6 +115,7 @@ public class COMPJSC extends MXMLJSC
                     break;
                 
                 case FLEXJS:
+                case FLEXJS_DUAL:
                     backend = new MXMLFlexJSSWCBackend();
                     break;
                 

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/55443ff9/compiler.jx/src/org/apache/flex/compiler/clients/MXMLJSC.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/clients/MXMLJSC.java b/compiler.jx/src/org/apache/flex/compiler/clients/MXMLJSC.java
index 759da96..ae9e76a 100644
--- a/compiler.jx/src/org/apache/flex/compiler/clients/MXMLJSC.java
+++ b/compiler.jx/src/org/apache/flex/compiler/clients/MXMLJSC.java
@@ -66,7 +66,7 @@ import org.apache.flex.compiler.targets.ITarget.TargetType;
 import org.apache.flex.compiler.targets.ITargetSettings;
 import org.apache.flex.compiler.units.ICompilationUnit;
 import org.apache.flex.tools.FlexTool;
-import org.apache.flex.utils.ConfigurationUtil;
+import org.apache.flex.utils.ArgumentUtil;
 import org.apache.flex.utils.FilenameNormalization;
 
 import java.io.*;
@@ -87,7 +87,7 @@ public class MXMLJSC implements JSCompilerEntryPoint, ProblemQueryProvider, Flex
 		 */
     public enum JSOutputType
     {
-        AMD("amd"), FLEXJS("flexjs"), GOOG("goog"), VF2JS("vf2js");
+        AMD("amd"), FLEXJS("flexjs"), GOOG("goog"), VF2JS("vf2js"), FLEXJS_DUAL("flexjs_dual");
 
         private String text;
 
@@ -191,6 +191,7 @@ public class MXMLJSC implements JSCompilerEntryPoint, ProblemQueryProvider, Flex
             backend = new AMDBackend();
             break;
         case FLEXJS:
+        case FLEXJS_DUAL:
             backend = new MXMLFlexJSBackend();
             break;
         case GOOG:
@@ -243,7 +244,7 @@ public class MXMLJSC implements JSCompilerEntryPoint, ProblemQueryProvider, Flex
         int exitCode = -1;
         try
         {
-            exitCode = _mainNoExit(ConfigurationUtil.fixArgs(args), problems);
+            exitCode = _mainNoExit(ArgumentUtil.fixArgs(args), problems);
         }
         catch (Exception e)
         {

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/55443ff9/compiler/src/org/apache/flex/utils/ArgumentUtil.java
----------------------------------------------------------------------
diff --git a/compiler/src/org/apache/flex/utils/ArgumentUtil.java b/compiler/src/org/apache/flex/utils/ArgumentUtil.java
new file mode 100644
index 0000000..8b5fe7a
--- /dev/null
+++ b/compiler/src/org/apache/flex/utils/ArgumentUtil.java
@@ -0,0 +1,122 @@
+/*
+ *
+ *  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.utils;
+
+import java.io.File;
+import java.lang.reflect.Array;
+
+public class ArgumentUtil {
+
+    // workaround for Falcon bug.
+    // Input files with relative paths confuse the algorithm that extracts the root class name.
+    public static String[] fixArgs(final String[] args) {
+        String[] newArgs = args;
+        if (args.length > 1) {
+            String targetPath = args[args.length - 1];
+            if (targetPath.startsWith(".")) {
+                targetPath = FileUtils.getTheRealPathBecauseCanonicalizeDoesNotFixCase(new File(targetPath));
+                newArgs = new String[args.length];
+                System.arraycopy(args, 0, newArgs, 0, args.length - 1);
+                newArgs[args.length - 1] = targetPath;
+            }
+        }
+        return newArgs;
+    }
+
+    public static String[] removeElement(String[] args, String element) {
+
+        int length = Array.getLength(args);
+        int index = -1;
+
+        for (int i = 0; i < length; i++) {
+            final String[] kvp = args[i].split("=");
+            if (element.equals(kvp[0])) {
+                index = i;
+                break;
+            }
+        }
+
+        if (index < 0 || index >= length) {
+            throw new IndexOutOfBoundsException("Index: " + index + ", Length: " + length);
+        }
+
+        String[] newArgs = new String[args.length - 1];
+        System.arraycopy(args, 0, newArgs, 0, index);
+        if (index < length - 1) {
+            System.arraycopy(args, index + 1, newArgs, index, length - index - 1);
+        }
+
+        return newArgs;
+    }
+
+    public static String getValue(String[] args, String element) {
+
+        boolean found = false;
+        String[] kvp = new String[0];
+
+        for (String s : args) {
+            kvp = s.split("=");
+
+            if (kvp[0].equals(element)) {
+                found = true;
+                break;
+            }
+        }
+
+        return found ? kvp[1] : null;
+    }
+
+    public static void setValue(String[] args, String element, String value) {
+        String[] kvp;
+
+        for (int i = 0, argsLength = args.length; i < argsLength; i++) {
+            kvp = args[i].split("=");
+
+            if (kvp[0].equals(element)) {
+                args[i] = kvp[0] + "=" + value;
+                break;
+            }
+        }
+    }
+
+    public static String[] addValueAt(String[] args, String elemrnt, String value, int index) {
+
+        int length = Array.getLength(args);
+
+        if (index < 0 || index >= length) {
+            throw new IndexOutOfBoundsException("Index: " + index + ", Length: " + length);
+        }
+
+        String[] newArgs = new String[args.length + 1];
+
+        for (int i = 0; i < newArgs.length; i++) {
+            if (i < index) {
+                newArgs[i] = args[i];
+            } else if (i == index) {
+                newArgs[i] = elemrnt + "=" + value;
+            } else {
+                newArgs[i] = args[i - 1];
+            }
+
+        }
+
+        return newArgs;
+    }
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/55443ff9/compiler/src/org/apache/flex/utils/ConfigurationUtil.java
----------------------------------------------------------------------
diff --git a/compiler/src/org/apache/flex/utils/ConfigurationUtil.java b/compiler/src/org/apache/flex/utils/ConfigurationUtil.java
deleted file mode 100644
index ea1bc10..0000000
--- a/compiler/src/org/apache/flex/utils/ConfigurationUtil.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- *
- *  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.utils;
-
-import java.io.File;
-
-public class ConfigurationUtil {
-
-    // workaround for Falcon bug.
-    // Input files with relative paths confuse the algorithm that extracts the root class name.
-    public static String[] fixArgs(final String[] args) {
-        String[] newArgs = args;
-        if (args.length > 1) {
-            String targetPath = args[args.length - 1];
-            if (targetPath.startsWith(".")) {
-                targetPath = FileUtils.getTheRealPathBecauseCanonicalizeDoesNotFixCase(new File(targetPath));
-                newArgs = new String[args.length];
-                for (int i = 0; i < args.length - 1; ++i)
-                    newArgs[i] = args[i];
-                newArgs[args.length - 1] = targetPath;
-            }
-        }
-        return newArgs;
-    }
-}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/55443ff9/flex-compiler-oem/src/flex2/tools/Compc.java
----------------------------------------------------------------------
diff --git a/flex-compiler-oem/src/flex2/tools/Compc.java b/flex-compiler-oem/src/flex2/tools/Compc.java
index 38848fa..6580e9a 100644
--- a/flex-compiler-oem/src/flex2/tools/Compc.java
+++ b/flex-compiler-oem/src/flex2/tools/Compc.java
@@ -27,9 +27,6 @@ import java.lang.reflect.InvocationTargetException;
  * Entry-point for compc, the command-line tool for compiling components.
  */
 public class Compc extends Tool {
-
-    public static final String FILE_SPECS = "include-classes";
-
     /**
      * The entry-point for Mxmlc.
      * Note that if you change anything in this method, make sure to check Compc, Shell, and

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/55443ff9/flex-compiler-oem/src/flex2/tools/MxmlJSC.java
----------------------------------------------------------------------
diff --git a/flex-compiler-oem/src/flex2/tools/MxmlJSC.java b/flex-compiler-oem/src/flex2/tools/MxmlJSC.java
index f71633a..9ff8381 100644
--- a/flex-compiler-oem/src/flex2/tools/MxmlJSC.java
+++ b/flex-compiler-oem/src/flex2/tools/MxmlJSC.java
@@ -70,6 +70,7 @@ public class MxmlJSC implements ProblemQueryProvider {
                 backend = new AMDBackend();
                 break;
             case FLEXJS:
+            case FLEXJS_DUAL:
                 backend = new MXMLFlexJSBackend();
                 break;
             case GOOG:

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/55443ff9/flex-compiler-oem/src/flex2/tools/Tool.java
----------------------------------------------------------------------
diff --git a/flex-compiler-oem/src/flex2/tools/Tool.java b/flex-compiler-oem/src/flex2/tools/Tool.java
index b61fa43..a41c1f4 100644
--- a/flex-compiler-oem/src/flex2/tools/Tool.java
+++ b/flex-compiler-oem/src/flex2/tools/Tool.java
@@ -26,13 +26,17 @@ import flex2.compiler.util.CompilerMessage;
 import flex2.compiler.util.CompilerMessage.CompilerError;
 import flex2.compiler.util.ThreadLocalToolkit;
 import flex2.tools.oem.Message;
-import org.apache.flex.compiler.clients.problems.ProblemQueryProvider;
+import org.apache.flex.compiler.clients.COMPC;
 import org.apache.flex.compiler.clients.MXMLC;
+import org.apache.flex.compiler.clients.MXMLJSC.JSOutputType;
 import org.apache.flex.compiler.clients.problems.ProblemQuery;
+import org.apache.flex.compiler.clients.problems.ProblemQueryProvider;
 import org.apache.flex.compiler.problems.CompilerProblemSeverity;
 import org.apache.flex.compiler.problems.ICompilerProblem;
 import org.apache.flex.compiler.problems.annotations.DefaultSeverity;
+import org.apache.flex.utils.ArgumentUtil;
 
+import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.lang.annotation.Annotation;
@@ -42,83 +46,117 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.Properties;
 
+import static org.apache.flex.compiler.clients.MXMLJSC.JSOutputType.FLEXJS_DUAL;
+
 /**
  * Common base class for most flex tools.
  */
-public class Tool
-{
+public class Tool {
     protected static Class<? extends MXMLC> COMPILER;
     protected static Class<? extends MxmlJSC> JS_COMPILER;
 
     protected static int compile(String[] args) throws NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException {
         int exitCode;
 
-        if (hasJsOutputType(args)) {
+        final JSOutputType jsOutputType = JSOutputType.fromString(ArgumentUtil.getValue(args, "-js-output-type"));
+
+        if (jsOutputType != null) {
+            ArgumentBag bag = preparePhase1(new ArgumentBag(args));
+
             MxmlJSC mxmlJSC = JS_COMPILER.newInstance();
-            exitCode = mxmlJSC.execute(args);
-            processProblemReport(mxmlJSC);
+            exitCode = mxmlJSC.execute(bag.args);
+
+            if (!mxmlJSC.getProblemQuery().hasErrors()) {
+                if (jsOutputType.equals(FLEXJS_DUAL)) {
+                    preparePhase2(bag);
+                    exitCode = flexCompile(bag.args);
+                }
+            } else {
+                processProblemReport(mxmlJSC);
+            }
         } else {
-            MXMLC mxmlc = COMPILER.newInstance();
-            exitCode = mxmlc.execute(args);
-            processProblemReport(new CompilerRequestableProblems(mxmlc));
+            exitCode = flexCompile(args);
         }
 
         return exitCode;
     }
 
-    protected static boolean hasJsOutputType(String[] args) {
-        boolean found = false;
+    protected static class ArgumentBag {
+        public String[] args;
 
-        for (String s : args) {
-            String[] kvp = s.split("=");
+        public String oldOutputPath;
+        public String newOutputPath;
 
-            if (s.contains("-js-output-type")) {
-                found = true;
-                break;
+        public ArgumentBag(String[] args) {
+            this.args = args;
+        }
+    }
+
+    protected static ArgumentBag preparePhase1(ArgumentBag bag) {
+        bag.oldOutputPath = ArgumentUtil.getValue(bag.args, "-output");
+
+        if (bag.oldOutputPath != null) {
+            final int lastIndexOf = Math.max(bag.oldOutputPath.lastIndexOf("/"), bag.oldOutputPath.lastIndexOf("\\"));
+
+            if (lastIndexOf > -1) {
+                bag.newOutputPath = bag.oldOutputPath.substring(0, lastIndexOf) + File.separator + "js" + File.separator + "out";
+                ArgumentUtil.setValue(bag.args, "-output", bag.newOutputPath);
             }
         }
 
-        return found;
+        return bag;
     }
 
-    public static Map<String, String> getLicenseMapFromFile(String fileName) throws ConfigurationException
-    {
+    protected static ArgumentBag preparePhase2(ArgumentBag bag) {
+        bag.args = ArgumentUtil.removeElement(bag.args, "-js-output-type");
+
+        if (bag.oldOutputPath != null) {
+            ArgumentUtil.setValue(bag.args, "-output", bag.oldOutputPath);
+        }
+
+        if (COMPILER.getName().equals(COMPC.class.getName())) {
+            bag.args = ArgumentUtil.addValueAt(bag.args, "-include-file", "js" + File.separator + "out" + File.separator + "*," + bag.newOutputPath, bag.args.length - 1);
+        }
+
+        return bag;
+    }
+
+    protected static int flexCompile(String[] args) throws NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException {
+        int exitCode;
+
+        MXMLC mxmlc = COMPILER.newInstance();
+        exitCode = mxmlc.execute(args);
+        processProblemReport(new CompilerRequestableProblems(mxmlc));
+
+        return exitCode;
+    }
+
+    public static Map<String, String> getLicenseMapFromFile(String fileName) throws ConfigurationException {
         Map<String, String> result = null;
         FileInputStream in = null;
 
-        try
-        {
+        try {
             in = new FileInputStream(fileName);
             Properties properties = new Properties();
             properties.load(in);
             Enumeration enumeration = properties.propertyNames();
 
-            if ( enumeration.hasMoreElements() )
-            {
+            if (enumeration.hasMoreElements()) {
                 result = new HashMap<String, String>();
 
-                while ( enumeration.hasMoreElements() )
-                {
+                while (enumeration.hasMoreElements()) {
                     String propertyName = (String) enumeration.nextElement();
                     result.put(propertyName, properties.getProperty(propertyName));
                 }
             }
-        }
-        catch (IOException ioException)
-        {
-        	LocalizationManager l10n = ThreadLocalToolkit.getLocalizationManager();
+        } catch (IOException ioException) {
+            LocalizationManager l10n = ThreadLocalToolkit.getLocalizationManager();
             throw new ConfigurationException(l10n.getLocalizedTextString(new FailedToLoadLicenseFile(fileName)));
-        }
-        finally
-        {
-            if (in != null)
-            {
-                try
-                {
+        } finally {
+            if (in != null) {
+                try {
                     in.close();
-                }
-                catch (IOException ioe)
-                {
+                } catch (IOException ioe) {
                 }
             }
         }
@@ -126,28 +164,24 @@ public class Tool
         return result;
     }
 
-	public static class FailedToLoadLicenseFile extends CompilerError
-	{
-		private static final long serialVersionUID = -2980033917773108328L;
-        
+    public static class FailedToLoadLicenseFile extends CompilerError {
+        private static final long serialVersionUID = -2980033917773108328L;
+
         public String fileName;
 
-		public FailedToLoadLicenseFile(String fileName)
-		{
-			super();
-			this.fileName = fileName;
-		}
-	}
-
-    public static void processProblemReport(ProblemQueryProvider requestableProblems)
-    {
-        for (ICompilerProblem problem : requestableProblems.getProblemQuery().getProblems())
-        {
+        public FailedToLoadLicenseFile(String fileName) {
+            super();
+            this.fileName = fileName;
+        }
+    }
+
+    public static void processProblemReport(ProblemQueryProvider requestableProblems) {
+        for (ICompilerProblem problem : requestableProblems.getProblemQuery().getProblems()) {
             Class aClass = problem.getClass();
             Annotation[] annotations = aClass.getAnnotations();
 
-            for(Annotation annotation : annotations){
-                if(annotation instanceof DefaultSeverity){
+            for (Annotation annotation : annotations) {
+                if (annotation instanceof DefaultSeverity) {
                     DefaultSeverity myAnnotation = (DefaultSeverity) annotation;
                     CompilerProblemSeverity cps = myAnnotation.value();
                     String level;
@@ -161,11 +195,9 @@ public class Tool
                             problem.getSourcePath(),
                             problem.getLine() + 1,
                             problem.getColumn());
-                    try
-                    {
+                    try {
                         String errText = (String) aClass.getField("DESCRIPTION").get(aClass);
-                        while (errText.contains("${"))
-                        {
+                        while (errText.contains("${")) {
                             int start = errText.indexOf("${");
                             int end = errText.indexOf("}", start);
                             String token = errText.substring(start + 2, end);
@@ -176,24 +208,16 @@ public class Tool
 
                         msg.setMessage(errText);
                         logMessage(msg);
-                    }
-                    catch (IllegalArgumentException e)
-                    {
+                    } catch (IllegalArgumentException e) {
                         // TODO Auto-generated catch block
                         e.printStackTrace();
-                    }
-                    catch (SecurityException e)
-                    {
+                    } catch (SecurityException e) {
                         // TODO Auto-generated catch block
                         e.printStackTrace();
-                    }
-                    catch (IllegalAccessException e)
-                    {
+                    } catch (IllegalAccessException e) {
                         // TODO Auto-generated catch block
                         e.printStackTrace();
-                    }
-                    catch (NoSuchFieldException e)
-                    {
+                    } catch (NoSuchFieldException e) {
                         // TODO Auto-generated catch block
                         e.printStackTrace();
                     }


[24/35] git commit: [flex-falcon] [refs/heads/IDEA-FLEX_JS_COMPILER] - - Added formatQualifiedName() to IJSEmitter. - Removed all casts dealing with formatQualifiedName() addition.

Posted by ft...@apache.org.
- Added formatQualifiedName() to IJSEmitter.
- Removed all casts dealing with formatQualifiedName() addition.


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

Branch: refs/heads/IDEA-FLEX_JS_COMPILER
Commit: 83932907f1e6341766a2a4988953e697a601404c
Parents: 1422546
Author: Michael Schmalle <ms...@apache.org>
Authored: Sun May 31 14:13:03 2015 -0400
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:41:11 2015 +0100

----------------------------------------------------------------------
 .../flex/compiler/codegen/js/IJSEmitter.java       |  2 ++
 .../compiler/internal/codegen/js/JSEmitter.java    |  8 ++++++++
 .../codegen/js/flexjs/JSFlexJSEmitter.java         | 17 +++++++++--------
 .../internal/codegen/js/goog/JSGoogEmitter.java    | 17 +++++++++--------
 .../internal/codegen/js/jx/AccessorEmitter.java    | 13 +++++++------
 .../internal/codegen/js/jx/AsIsEmitter.java        |  6 +-----
 .../codegen/js/jx/BinaryOperatorEmitter.java       | 10 ++++++----
 .../internal/codegen/js/jx/BindableEmitter.java    |  7 ++-----
 .../internal/codegen/js/jx/ClassEmitter.java       |  2 +-
 .../internal/codegen/js/jx/FieldEmitter.java       | 14 +++++---------
 .../codegen/js/jx/FunctionCallEmitter.java         |  5 +++--
 .../internal/codegen/js/jx/IdentifierEmitter.java  |  8 ++------
 .../codegen/js/jx/MemberAccessEmitter.java         |  7 ++-----
 .../codegen/js/jx/PackageFooterEmitter.java        | 14 ++++++--------
 .../codegen/js/jx/PackageHeaderEmitter.java        |  5 +----
 .../internal/codegen/js/jx/SuperCallEmitter.java   | 10 ++++------
 16 files changed, 68 insertions(+), 77 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/83932907/compiler.jx/src/org/apache/flex/compiler/codegen/js/IJSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/codegen/js/IJSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/codegen/js/IJSEmitter.java
index 01444e7..5a83ec6 100644
--- a/compiler.jx/src/org/apache/flex/compiler/codegen/js/IJSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/codegen/js/IJSEmitter.java
@@ -34,4 +34,6 @@ import org.apache.flex.compiler.visitor.IASNodeStrategy;
 public interface IJSEmitter extends IASEmitter
 {
     JSSessionModel getModel();
+    
+    String formatQualifiedName(String name);
 }

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/83932907/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSEmitter.java
index 4eb6ccb..1c55dcd 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSEmitter.java
@@ -49,6 +49,12 @@ public class JSEmitter extends ASEmitter implements IJSEmitter
     }
 
     @Override
+    public String formatQualifiedName(String name)
+    {
+        return name;
+    }
+    
+    @Override
     public void emitLocalNamedFunction(IFunctionNode node)
     {
         FunctionNode fnode = (FunctionNode)node;
@@ -68,4 +74,6 @@ public class JSEmitter extends ASEmitter implements IJSEmitter
         emitFunctionScope(fnode.getScopedNode());
     }
 
+
+
 }

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/83932907/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 ec1f3db..5b8b1fe 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
@@ -161,6 +161,15 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
     }
 
     @Override
+    public String formatQualifiedName(String name)
+    {
+        if (name.contains("goog.") || name.startsWith("Vector."))
+            return name;
+        name = name.replaceAll("\\.", "_");
+        return name;
+    }
+
+    @Override
     public void emitClass(IClassNode node)
     {
         classEmitter.emit(node);
@@ -447,12 +456,4 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
         write(ASEmitterTokens.SINGLE_QUOTE);
     }
 
-    @Override
-    public String formatQualifiedName(String name)
-    {
-        if (name.contains("goog.") || name.startsWith("Vector."))
-            return name;
-        name = name.replaceAll("\\.", "_");
-        return name;
-    }
 }

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/83932907/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
index 77c9094..b685fe0 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
@@ -84,7 +84,7 @@ import org.apache.flex.compiler.utils.ASNodeUtils;
 public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
 {
     protected List<String> propertyNames = new ArrayList<String>();
-    
+
     // TODO (mschmalle) Remove this (not used in JSFlexJSEmitter and JSGoogEmitter anymore)
     public ICompilerProject project;
 
@@ -109,6 +109,12 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
     //--------------------------------------------------------------------------
 
     @Override
+    public String formatQualifiedName(String name)
+    {
+        return name;
+    }
+
+    @Override
     public void emitPackageHeader(IPackageDefinition definition)
     {
         IASScope containedScope = definition.getContainedScope();
@@ -545,9 +551,9 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
         IClassNode cnode = (IClassNode) node
                 .getAncestorOfType(IClassNode.class);
 
-        IDefinition def = ((IIdentifierNode) node).resolve(project);
+        IDefinition def = node.resolve(project);
 
-        ITypeDefinition type = ((IIdentifierNode) node).resolveType(project);
+        ITypeDefinition type = node.resolveType(project);
 
         IASNode pnode = node.getParent();
         ASTNodeID inode = pnode.getNodeID();
@@ -1159,9 +1165,4 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
         }
         return list;
     }
-
-    protected String formatQualifiedName(String name)
-    {
-        return name;
-    }
 }

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/83932907/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/AccessorEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/AccessorEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/AccessorEmitter.java
index 0d0bd66..d6311f0 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/AccessorEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/AccessorEmitter.java
@@ -82,12 +82,12 @@ public class AccessorEmitter extends JSSubEmitter implements
             write(JSEmitterTokens.DEFINE_PROPERTIES);
             write(ASEmitterTokens.PAREN_OPEN);
             String qname = definition.getQualifiedName();
-            write(fjs.formatQualifiedName(qname));
+            write(getEmitter().formatQualifiedName(qname));
             write(ASEmitterTokens.MEMBER_ACCESS);
             write(JSEmitterTokens.PROTOTYPE);
             write(ASEmitterTokens.COMMA);
             write(ASEmitterTokens.SPACE);
-            write("/** @lends {" + fjs.formatQualifiedName(qname)
+            write("/** @lends {" + getEmitter().formatQualifiedName(qname)
                     + ".prototype} */ ");
             writeNewline(ASEmitterTokens.BLOCK_OPEN);
 
@@ -117,7 +117,7 @@ public class AccessorEmitter extends JSSubEmitter implements
                     write(ASEmitterTokens.THIS);
                     write(ASEmitterTokens.SPACE);
                     write(ASEmitterTokens.BLOCK_OPEN);
-                    write(fjs.formatQualifiedName(qname));
+                    write(getEmitter().formatQualifiedName(qname));
                     write(ASEmitterTokens.BLOCK_CLOSE);
                     write(ASEmitterTokens.SPACE);
                     write(JSDocEmitterTokens.JSDOC_CLOSE);
@@ -141,7 +141,7 @@ public class AccessorEmitter extends JSSubEmitter implements
                     write(ASEmitterTokens.THIS);
                     write(ASEmitterTokens.SPACE);
                     write(ASEmitterTokens.BLOCK_OPEN);
-                    write(fjs.formatQualifiedName(qname));
+                    write(getEmitter().formatQualifiedName(qname));
                     write(ASEmitterTokens.BLOCK_CLOSE);
                     write(ASEmitterTokens.SPACE);
                     write(JSDocEmitterTokens.JSDOC_CLOSE);
@@ -164,10 +164,11 @@ public class AccessorEmitter extends JSSubEmitter implements
             write(JSEmitterTokens.DEFINE_PROPERTIES);
             write(ASEmitterTokens.PAREN_OPEN);
             String qname = definition.getQualifiedName();
-            write(fjs.formatQualifiedName(qname));
+            write(getEmitter().formatQualifiedName(qname));
             write(ASEmitterTokens.COMMA);
             write(ASEmitterTokens.SPACE);
-            write("/** @lends {" + fjs.formatQualifiedName(qname) + "} */ ");
+            write("/** @lends {" + getEmitter().formatQualifiedName(qname)
+                    + "} */ ");
             writeNewline(ASEmitterTokens.BLOCK_OPEN);
 
             Set<String> propertyNames = getModel().getStaticPropertyMap()

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/83932907/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/AsIsEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/AsIsEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/AsIsEmitter.java
index 5d243c7..ac45b88 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/AsIsEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/AsIsEmitter.java
@@ -24,7 +24,6 @@ import org.apache.flex.compiler.codegen.js.IJSEmitter;
 import org.apache.flex.compiler.definitions.IDefinition;
 import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
 import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
-import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitter;
 import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitterTokens;
 import org.apache.flex.compiler.tree.ASTNodeID;
 import org.apache.flex.compiler.tree.as.IExpressionNode;
@@ -41,9 +40,6 @@ public class AsIsEmitter extends JSSubEmitter
     public void emitIsAs(IExpressionNode left, IExpressionNode right,
             ASTNodeID id, boolean coercion)
     {
-        // TODO (mschmalle) will remove this cast as more things get abstracted
-        JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
-
         // project is null in unit tests
         //IDefinition dnode = project != null ? (right).resolve(project) : null;
         IDefinition dnode = getProject() != null ? (right)
@@ -102,7 +98,7 @@ public class AsIsEmitter extends JSSubEmitter
         writeToken(ASEmitterTokens.COMMA);
 
         if (dnode != null)
-            write(fjs.formatQualifiedName(dnode.getQualifiedName()));
+            write(getEmitter().formatQualifiedName(dnode.getQualifiedName()));
         else
             getWalker().walk(right);
 

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/83932907/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java
index 80ea2c5..e3d151c 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java
@@ -73,7 +73,8 @@ public class BinaryOperatorEmitter extends JSSubEmitter implements
             IDefinition dnode = (node.getRightOperandNode())
                     .resolve(getProject());
             if (dnode != null)
-                write(fjs.formatQualifiedName(dnode.getQualifiedName()));
+                write(getEmitter()
+                        .formatQualifiedName(dnode.getQualifiedName()));
             else
                 getWalker().walk(node.getRightOperandNode());
         }
@@ -102,7 +103,8 @@ public class BinaryOperatorEmitter extends JSSubEmitter implements
                         write(ASEmitterTokens.PAREN_OPEN);
                         IClassNode cnode = (IClassNode) node
                                 .getAncestorOfType(IClassNode.class);
-                        write(fjs.formatQualifiedName(cnode.getQualifiedName()));
+                        write(getEmitter().formatQualifiedName(
+                                cnode.getQualifiedName()));
                         writeToken(ASEmitterTokens.COMMA);
                         write(ASEmitterTokens.THIS);
                         writeToken(ASEmitterTokens.COMMA);
@@ -117,8 +119,8 @@ public class BinaryOperatorEmitter extends JSSubEmitter implements
                             write(ASEmitterTokens.MEMBER_ACCESS);
                             write(JSFlexJSEmitterTokens.SUPERSETTER);
                             write(ASEmitterTokens.PAREN_OPEN);
-                            write(fjs.formatQualifiedName(cnode
-                                    .getQualifiedName()));
+                            write(getEmitter().formatQualifiedName(
+                                    cnode.getQualifiedName()));
                             writeToken(ASEmitterTokens.COMMA);
                             write(ASEmitterTokens.THIS);
                             writeToken(ASEmitterTokens.COMMA);

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/83932907/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/BindableEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/BindableEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/BindableEmitter.java
index 0ec3fd2..d2cd20c 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/BindableEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/BindableEmitter.java
@@ -39,9 +39,6 @@ public class BindableEmitter extends JSSubEmitter implements
     @Override
     public void emit(IClassDefinition definition)
     {
-        // TODO (mschmalle) will remove this cast as more things get abstracted
-        JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
-
         if (getModel().hasBindableVars())
         {
             write(JSGoogEmitterTokens.OBJECT);
@@ -49,12 +46,12 @@ public class BindableEmitter extends JSSubEmitter implements
             write(JSEmitterTokens.DEFINE_PROPERTIES);
             write(ASEmitterTokens.PAREN_OPEN);
             String qname = definition.getQualifiedName();
-            write(fjs.formatQualifiedName(qname));
+            write(getEmitter().formatQualifiedName(qname));
             write(ASEmitterTokens.MEMBER_ACCESS);
             write(JSEmitterTokens.PROTOTYPE);
             write(ASEmitterTokens.COMMA);
             write(ASEmitterTokens.SPACE);
-            write("/** @lends {" + fjs.formatQualifiedName(qname)
+            write("/** @lends {" + getEmitter().formatQualifiedName(qname)
                     + ".prototype} */ ");
             writeNewline(ASEmitterTokens.BLOCK_OPEN);
 

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/83932907/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/ClassEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/ClassEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/ClassEmitter.java
index 516bd98..ff83a52 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/ClassEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/ClassEmitter.java
@@ -76,7 +76,7 @@ public class ClassEmitter extends JSSubEmitter implements
                 String qname = definition.getQualifiedName();
                 if (qname != null && !qname.equals(""))
                 {
-                    write(fjs.formatQualifiedName(qname));
+                    write(getEmitter().formatQualifiedName(qname));
                     write(ASEmitterTokens.SPACE);
                     writeToken(ASEmitterTokens.EQUAL);
                     write(ASEmitterTokens.FUNCTION);

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/83932907/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FieldEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FieldEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FieldEmitter.java
index d63ffde..957751f 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FieldEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FieldEmitter.java
@@ -28,7 +28,6 @@ import org.apache.flex.compiler.definitions.IDefinition;
 import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
 import org.apache.flex.compiler.internal.codegen.js.JSEmitterTokens;
 import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
-import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitter;
 import org.apache.flex.compiler.internal.codegen.js.utils.EmitterUtils;
 import org.apache.flex.compiler.internal.tree.as.ChainedVariableNode;
 import org.apache.flex.compiler.tree.ASTNodeID;
@@ -47,9 +46,6 @@ public class FieldEmitter extends JSSubEmitter implements
     @Override
     public void emit(IVariableNode node)
     {
-        // TODO (mschmalle) will remove this cast as more things get abstracted
-        JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
-
         IDefinition definition = EmitterUtils.getClassDefinition(node);
 
         IDefinition def = null;
@@ -60,9 +56,9 @@ public class FieldEmitter extends JSSubEmitter implements
         }
         
         // TODO (mschmalle)
-        if (fjs.getDocEmitter() instanceof IJSGoogDocEmitter)
+        if (getEmitter().getDocEmitter() instanceof IJSGoogDocEmitter)
         {
-            ((IJSGoogDocEmitter) fjs.getDocEmitter()).emitFieldDoc(node, def);
+            ((IJSGoogDocEmitter) getEmitter().getDocEmitter()).emitFieldDoc(node, def);
         }
 
         IDefinition ndef = node.getDefinition();
@@ -78,7 +74,7 @@ public class FieldEmitter extends JSSubEmitter implements
         if (definition == null)
             definition = ndef.getContainingScope().getDefinition();
 
-        write(fjs.formatQualifiedName(definition.getQualifiedName())
+        write(getEmitter().formatQualifiedName(definition.getQualifiedName())
                 + ASEmitterTokens.MEMBER_ACCESS.getToken() + root
                 + node.getName());
 
@@ -87,7 +83,7 @@ public class FieldEmitter extends JSSubEmitter implements
         {
             write(ASEmitterTokens.SPACE);
             writeToken(ASEmitterTokens.EQUAL);
-            fjs.getWalker().walk(vnode);
+            getEmitter().getWalker().walk(vnode);
         }
 
         if (!(node instanceof ChainedVariableNode))
@@ -100,7 +96,7 @@ public class FieldEmitter extends JSSubEmitter implements
                 {
                     writeNewline(ASEmitterTokens.SEMICOLON);
                     writeNewline();
-                    fjs.emitField((IVariableNode) child);
+                    getEmitter().emitField((IVariableNode) child);
                 }
             }
         }

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/83932907/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FunctionCallEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FunctionCallEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FunctionCallEmitter.java
index 00bdf18..788cd75 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FunctionCallEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FunctionCallEmitter.java
@@ -79,10 +79,11 @@ public class FunctionCallEmitter extends JSSubEmitter implements
                 def = node.resolveCalledExpression(getProject());
                 // all new calls to a class should be fully qualified names
                 if (def instanceof ClassDefinition)
-                    write(fjs.formatQualifiedName(def.getQualifiedName()));
+                    write(getEmitter().formatQualifiedName(
+                            def.getQualifiedName()));
                 else
                     // I think we still need this for "new someVarOfTypeClass"
-                    fjs.getWalker().walk(node.getNameNode());
+                    getEmitter().getWalker().walk(node.getNameNode());
                 write(ASEmitterTokens.PAREN_OPEN);
                 fjs.walkArguments(node.getArgumentNodes());
                 write(ASEmitterTokens.PAREN_CLOSE);

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/83932907/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/IdentifierEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/IdentifierEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/IdentifierEmitter.java
index 3af251d..9c5dcd9 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/IdentifierEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/IdentifierEmitter.java
@@ -25,7 +25,6 @@ import org.apache.flex.compiler.definitions.IDefinition;
 import org.apache.flex.compiler.definitions.IFunctionDefinition.FunctionClassification;
 import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
 import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
-import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitter;
 import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitterTokens;
 import org.apache.flex.compiler.internal.codegen.js.utils.EmitterUtils;
 import org.apache.flex.compiler.internal.definitions.AccessorDefinition;
@@ -48,9 +47,6 @@ public class IdentifierEmitter extends JSSubEmitter implements
     @Override
     public void emit(IIdentifierNode node)
     {
-        // TODO (mschmalle) will remove this cast as more things get abstracted
-        JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
-
         IDefinition nodeDef = ((IIdentifierNode) node).resolve(getProject());
 
         IASNode parentNode = node.getParent();
@@ -67,7 +63,7 @@ public class IdentifierEmitter extends JSSubEmitter implements
             String sname = nodeDef.getParent().getQualifiedName();
             if (sname.length() > 0)
             {
-                write(fjs.formatQualifiedName(sname));
+                write(getEmitter().formatQualifiedName(sname));
                 write(ASEmitterTokens.MEMBER_ACCESS);
             }
         }
@@ -119,7 +115,7 @@ public class IdentifierEmitter extends JSSubEmitter implements
         if (emitName)
         {
             if (nodeDef != null)
-                write(fjs.formatQualifiedName(nodeDef.getQualifiedName()));
+                write(getEmitter().formatQualifiedName(nodeDef.getQualifiedName()));
             else
                 write(node.getName());
         }

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/83932907/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/MemberAccessEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/MemberAccessEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/MemberAccessEmitter.java
index b582915..9bce1ae 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/MemberAccessEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/MemberAccessEmitter.java
@@ -24,7 +24,6 @@ import org.apache.flex.compiler.codegen.js.IJSEmitter;
 import org.apache.flex.compiler.definitions.IDefinition;
 import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
 import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
-import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitter;
 import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitterTokens;
 import org.apache.flex.compiler.internal.definitions.AccessorDefinition;
 import org.apache.flex.compiler.internal.tree.as.GetterNode;
@@ -49,9 +48,6 @@ public class MemberAccessEmitter extends JSSubEmitter implements
     @Override
     public void emit(IMemberAccessExpressionNode node)
     {
-        // TODO (mschmalle) will remove this cast as more things get abstracted
-        JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
-
         if (ASNodeUtils.hasParenOpen(node))
             write(ASEmitterTokens.PAREN_OPEN);
 
@@ -117,7 +113,8 @@ public class MemberAccessEmitter extends JSSubEmitter implements
                     write(ASEmitterTokens.PAREN_OPEN);
                     IClassNode cnode = (IClassNode) node
                             .getAncestorOfType(IClassNode.class);
-                    write(fjs.formatQualifiedName(cnode.getQualifiedName()));
+                    write(getEmitter().formatQualifiedName(
+                            cnode.getQualifiedName()));
                     writeToken(ASEmitterTokens.COMMA);
                     write(ASEmitterTokens.THIS);
                     writeToken(ASEmitterTokens.COMMA);

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/83932907/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageFooterEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageFooterEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageFooterEmitter.java
index 86ac18d..1b4b729 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageFooterEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageFooterEmitter.java
@@ -27,7 +27,6 @@ import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
 import org.apache.flex.compiler.internal.codegen.js.JSEmitterTokens;
 import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
 import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSDocEmitter;
-import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitter;
 import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitterTokens;
 import org.apache.flex.compiler.internal.codegen.js.utils.EmitterUtils;
 import org.apache.flex.compiler.scopes.IASScope;
@@ -54,9 +53,8 @@ public class PackageFooterEmitter extends JSSubEmitter implements
         if (type == null)
             return;
 
-        // TODO (mschmalle) will remove this cast as more things get abstracted
-        JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
-        JSFlexJSDocEmitter doc = (JSFlexJSDocEmitter) fjs.getDocEmitter();
+        JSFlexJSDocEmitter doc = (JSFlexJSDocEmitter) getEmitter()
+                .getDocEmitter();
 
         ITypeNode tnode = EmitterUtils.findTypeNode(definition.getNode());
         if (tnode != null)
@@ -76,7 +74,7 @@ public class PackageFooterEmitter extends JSSubEmitter implements
             doc.end();
 
             // a.B.prototype.AFJS_CLASS_INFO = {  };
-            write(fjs.formatQualifiedName(type.getQualifiedName()));
+            write(getEmitter().formatQualifiedName(type.getQualifiedName()));
             write(ASEmitterTokens.MEMBER_ACCESS);
             write(JSEmitterTokens.PROTOTYPE);
             write(ASEmitterTokens.MEMBER_ACCESS);
@@ -98,7 +96,7 @@ public class PackageFooterEmitter extends JSSubEmitter implements
             write(JSFlexJSEmitterTokens.QNAME);
             writeToken(ASEmitterTokens.COLON);
             write(ASEmitterTokens.SINGLE_QUOTE);
-            write(fjs.formatQualifiedName(tnode.getQualifiedName()));
+            write(getEmitter().formatQualifiedName(tnode.getQualifiedName()));
             write(ASEmitterTokens.SINGLE_QUOTE);
             write(ASEmitterTokens.BLOCK_CLOSE);
             write(ASEmitterTokens.SQUARE_CLOSE);
@@ -120,8 +118,8 @@ public class PackageFooterEmitter extends JSSubEmitter implements
                 int i = 0;
                 for (IExpressionNode enode : enodes)
                 {
-                    write(fjs.formatQualifiedName(enode.resolve(getProject())
-                            .getQualifiedName()));
+                    write(getEmitter().formatQualifiedName(
+                            enode.resolve(getProject()).getQualifiedName()));
                     if (i < enodes.length - 1)
                         writeToken(ASEmitterTokens.COMMA);
                     i++;

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/83932907/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
index cd82cf2..da13f75 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
@@ -53,9 +53,6 @@ public class PackageHeaderEmitter extends JSSubEmitter implements
     @Override
     public void emit(IPackageDefinition definition)
     {
-        // TODO (mschmalle) will remove this cast as more things get abstracted
-        JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
-
         IASScope containedScope = definition.getContainedScope();
         ITypeDefinition type = EmitterUtils.findType(containedScope
                 .getAllLocalDefinitions());
@@ -75,7 +72,7 @@ public class PackageHeaderEmitter extends JSSubEmitter implements
         write(JSGoogEmitterTokens.GOOG_PROVIDE);
         write(ASEmitterTokens.PAREN_OPEN);
         write(ASEmitterTokens.SINGLE_QUOTE);
-        write(fjs.formatQualifiedName(type.getQualifiedName()));
+        write(getEmitter().formatQualifiedName(type.getQualifiedName()));
         write(ASEmitterTokens.SINGLE_QUOTE);
         write(ASEmitterTokens.PAREN_CLOSE);
         writeNewline(ASEmitterTokens.SEMICOLON);

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/83932907/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/SuperCallEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/SuperCallEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/SuperCallEmitter.java
index 90c3bdb..8e48678 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/SuperCallEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/SuperCallEmitter.java
@@ -45,14 +45,10 @@ public class SuperCallEmitter extends JSSubEmitter
     public SuperCallEmitter(IJSEmitter emitter)
     {
         super(emitter);
-        // TODO Auto-generated constructor stub
     }
 
     public void emit(IASNode node, String type)
     {
-        // TODO (mschmalle) will remove this cast as more things get abstracted
-        JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
-
         IFunctionNode fnode = (node instanceof IFunctionNode) ? (IFunctionNode) node
                 : null;
         IFunctionCallNode fcnode = (node instanceof IFunctionCallNode) ? (FunctionCallNode) node
@@ -89,9 +85,11 @@ public class SuperCallEmitter extends JSSubEmitter
                     write(JSFlexJSEmitterTokens.SUPERSETTER);
                 write(ASEmitterTokens.PAREN_OPEN);
                 if (cnode == null && thisClass != null)
-                    write(fjs.formatQualifiedName(thisClass.getQualifiedName()));
+                    write(getEmitter().formatQualifiedName(
+                            thisClass.getQualifiedName()));
                 else
-                    write(fjs.formatQualifiedName(cnode.getQualifiedName()));
+                    write(getEmitter().formatQualifiedName(
+                            cnode.getQualifiedName()));
                 writeToken(ASEmitterTokens.COMMA);
                 write(ASEmitterTokens.THIS);
                 writeToken(ASEmitterTokens.COMMA);


[10/35] git commit: [flex-falcon] [refs/heads/IDEA-FLEX_JS_COMPILER] - Removed commented out methods from JSFlexJSEmitter.java and placed them in Notes text file (not sure if the might still be used).

Posted by ft...@apache.org.
Removed commented out methods from JSFlexJSEmitter.java and placed them in Notes text file
(not sure if the might still be used).


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

Branch: refs/heads/IDEA-FLEX_JS_COMPILER
Commit: 32e1dbf616ee0c26a85e064dae6bded2b3b9fafb
Parents: cea0796
Author: Michael Schmalle <ms...@apache.org>
Authored: Sun May 31 11:39:50 2015 -0400
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:40:23 2015 +0100

----------------------------------------------------------------------
 .../codegen/js/flexjs/JSFlexJSEmitter.java      | 349 +-----------------
 .../codegen/js/flexjs/Notes_JSFlexJSEmitter.txt | 367 +++++++++++++++++++
 2 files changed, 368 insertions(+), 348 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/32e1dbf6/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 7aa4e2a..5562e31 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
@@ -342,7 +342,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
     @Override
     public void emitGetAccessor(IGetterNode node)
     {
-       classEmitter.getGetSetEmitter().emitGet(node);
+        classEmitter.getGetSetEmitter().emitGet(node);
     }
 
     @Override
@@ -545,92 +545,6 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
 
     }
 
-    /*
-    @Override
-    public void emitForEachLoop(IForLoopNode node)
-    {
-        IContainerNode xnode = (IContainerNode) node.getChild(1);
-        IBinaryOperatorNode bnode = (IBinaryOperatorNode) node
-                .getConditionalsContainerNode().getChild(0);
-        IASNode childNode = bnode.getChild(0);
-
-        write(ASEmitterTokens.TRY);
-        write(ASEmitterTokens.BLOCK_OPEN);
-        writeNewline();
-        
-        write(JSGoogEmitterTokens.GOOG_ARRAY_FOREACH);
-        write(ASEmitterTokens.PAREN_OPEN);
-        getWalker().walk(bnode.getChild(1));
-        writeToken(ASEmitterTokens.COMMA);
-        writeToken(ASEmitterTokens.FUNCTION);
-        write(ASEmitterTokens.PAREN_OPEN);
-        if (childNode instanceof IVariableExpressionNode)
-        	write(((IVariableNode) childNode.getChild(0)).getName());
-        else
-        	write(((IIdentifierNode) childNode).getName());
-        writeToken(ASEmitterTokens.PAREN_CLOSE);
-        if (isImplicit(xnode))
-            write(ASEmitterTokens.BLOCK_OPEN);
-        getWalker().walk(node.getStatementContentsNode());
-        if (isImplicit(xnode))
-        {
-            writeNewline();
-            write(ASEmitterTokens.BLOCK_CLOSE);
-        }
-        write(ASEmitterTokens.PAREN_CLOSE);
-        writeNewline();
-        write(ASEmitterTokens.BLOCK_CLOSE);
-        writeNewline();
-        write(ASEmitterTokens.CATCH);
-        write(ASEmitterTokens.PAREN_OPEN);
-        write("foreachbreakerror");
-        write(ASEmitterTokens.PAREN_CLOSE);
-        write(ASEmitterTokens.SPACE);
-        write(ASEmitterTokens.BLOCK_OPEN);
-        write(ASEmitterTokens.BLOCK_CLOSE);
-        writeNewline();
-        
-    }
-
-    @Override
-    public void emitIterationFlow(IIterationFlowNode node)
-    {
-    	// look for break in foreach and throw error instead
-    	if (node.getKind() == IIterationFlowNode.IterationFlowKind.BREAK)
-    	{
-    		IASNode pNode = node.getParent();
-    		while (pNode != null)
-    		{
-    			ASTNodeID id = pNode.getNodeID();
-    			if (id == ASTNodeID.ForEachLoopID)
-    			{
-    				write(ASEmitterTokens.THROW);
-    				write(ASEmitterTokens.SPACE);
-    				write(ASEmitterTokens.NEW);
-    				write(ASEmitterTokens.SPACE);
-    				write(JSGoogEmitterTokens.ERROR);
-    				write(ASEmitterTokens.PAREN_OPEN);
-    				write(ASEmitterTokens.PAREN_CLOSE);
-    				write(ASEmitterTokens.SEMICOLON);
-    				return;
-    			}
-    			else if (id == ASTNodeID.ForLoopID ||
-    					id == ASTNodeID.DoWhileLoopID ||
-    					id == ASTNodeID.WhileLoopID)
-    				break;
-    			pNode = pNode.getParent();
-    		}
-    	}
-        write(node.getKind().toString().toLowerCase());
-        IIdentifierNode lnode = node.getLabelNode();
-        if (lnode != null)
-        {
-            write(ASEmitterTokens.SPACE);
-            getWalker().walk(lnode);
-        }
-    }
-    */
-
     @Override
     public void emitTypedExpression(ITypedExpressionNode node)
     {
@@ -685,7 +599,6 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
         write(ASEmitterTokens.SINGLE_QUOTE);
     }
 
-
     @Override
     public String formatQualifiedName(String name)
     {
@@ -694,264 +607,4 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
         name = name.replaceAll("\\.", "_");
         return name;
     }
-
-}
-
-/*
-@Override
-public void emitInterface(IInterfaceNode node)
-{
-    ICompilerProject project = getWalker().getProject();
-
-    getDoc().emitInterfaceDoc(node, project);
-
-    String qname = node.getQualifiedName();
-    if (qname != null && !qname.equals(""))
-    {
-        write(formatQualifiedName(qname));
-        write(ASEmitterTokens.SPACE);
-        writeToken(ASEmitterTokens.EQUAL);
-        write(ASEmitterTokens.FUNCTION);
-        write(ASEmitterTokens.PAREN_OPEN);
-        write(ASEmitterTokens.PAREN_CLOSE);
-        write(ASEmitterTokens.SPACE);
-        write(ASEmitterTokens.BLOCK_OPEN);
-        writeNewline();
-        write(ASEmitterTokens.BLOCK_CLOSE);
-        write(ASEmitterTokens.SEMICOLON);
-    }
-
-    
-    final IDefinitionNode[] members = node.getAllMemberDefinitionNodes();
-    for (IDefinitionNode mnode : members)
-    {
-        boolean isAccessor = mnode.getNodeID() == ASTNodeID.GetterID
-                || mnode.getNodeID() == ASTNodeID.SetterID;
-
-        writeNewline();
-        writeNewline();
-        writeNewline();
-
-        getDoc().emitInterfaceMemberDoc((IFunctionNode) mnode, project);
-        
-        write(formatQualifiedName(qname));
-        write(ASEmitterTokens.MEMBER_ACCESS);
-        write(JSEmitterTokens.PROTOTYPE);
-        write(ASEmitterTokens.MEMBER_ACCESS);
-        if (isAccessor)
-        {
-            writeGetSetPrefix(mnode.getNodeID() == ASTNodeID.GetterID);
-        }
-        write(mnode.getQualifiedName());
-        write(ASEmitterTokens.SPACE);
-        writeToken(ASEmitterTokens.EQUAL);
-        write(ASEmitterTokens.FUNCTION);
-        emitParameters(((IFunctionNode) mnode).getParameterNodes());
-        write(ASEmitterTokens.SPACE);
-        write(ASEmitterTokens.BLOCK_OPEN);
-        write(ASEmitterTokens.BLOCK_CLOSE);
-        write(ASEmitterTokens.SEMICOLON);
-    }
-}
-*/
-
-/*
-@Override
-public void emitMethod(IFunctionNode node)
-{
-    FunctionNode fn = (FunctionNode) node;
-    fn.parseFunctionBody(getProblems());
-
-    ICompilerProject project = getWalker().getProject();
-
-    getDoc().emitMethodDoc(node, project);
-
-    boolean isConstructor = node.isConstructor();
-
-    String qname = getTypeDefinition(node).getQualifiedName();
-    if (qname != null && !qname.equals(""))
-    {
-        write(formatQualifiedName(qname));
-        if (!isConstructor)
-        {
-            write(ASEmitterTokens.MEMBER_ACCESS);
-            if (!fn.hasModifier(ASModifier.STATIC))
-            {
-                write(JSEmitterTokens.PROTOTYPE);
-                write(ASEmitterTokens.MEMBER_ACCESS);
-            }
-        }
-    }
-
-    if (!isConstructor)
-        emitMemberName(node);
-
-    write(ASEmitterTokens.SPACE);
-    writeToken(ASEmitterTokens.EQUAL);
-    write(ASEmitterTokens.FUNCTION);
-
-    emitParameters(node.getParameterNodes());
-
-    boolean hasSuperClass = hasSuperClass(node);
-
-    if (isConstructor && node.getScopedNode().getChildCount() == 0)
-    {
-        write(ASEmitterTokens.SPACE);
-        write(ASEmitterTokens.BLOCK_OPEN);
-        if (hasSuperClass)
-            emitSuperCall(node, CONSTRUCTOR_EMPTY);
-        writeNewline();
-        write(ASEmitterTokens.BLOCK_CLOSE);
-    }
-
-    if (!isConstructor || node.getScopedNode().getChildCount() > 0)
-        emitMethodScope(node.getScopedNode());
-
-    if (isConstructor && hasSuperClass)
-    {
-        writeNewline(ASEmitterTokens.SEMICOLON);
-        write(JSGoogEmitterTokens.GOOG_INHERITS);
-        write(ASEmitterTokens.PAREN_OPEN);
-        write(formatQualifiedName(qname));
-        writeToken(ASEmitterTokens.COMMA);
-        String sname = getSuperClassDefinition(node, project)
-                .getQualifiedName();
-        write(formatQualifiedName(sname));
-        write(ASEmitterTokens.PAREN_CLOSE);
-    }
-}
-*/
-
-/*
-@Override
-protected void emitDefaultParameterCodeBlock(IFunctionNode node)
-{
-    IParameterNode[] pnodes = node.getParameterNodes();
-    if (pnodes.length == 0)
-        return;
-
-    Map<Integer, IParameterNode> defaults = getDefaults(pnodes);
-
-    if (defaults != null)
-    {
-        final StringBuilder code = new StringBuilder();
-
-        if (!hasBody(node))
-        {
-            indentPush();
-            write(JSFlexJSEmitterTokens.INDENT);
-        }
-
-        List<IParameterNode> parameters = new ArrayList<IParameterNode>(
-                defaults.values());
-
-        for (int i = 0, n = parameters.size(); i < n; i++)
-        {
-            IParameterNode pnode = parameters.get(i);
-
-            if (pnode != null)
-            {
-                code.setLength(0);
-
-                // x = typeof y !== 'undefined' ? y : z;\n 
-                code.append(pnode.getName());
-                code.append(ASEmitterTokens.SPACE.getToken());
-                code.append(ASEmitterTokens.EQUAL.getToken());
-                code.append(ASEmitterTokens.SPACE.getToken());
-                code.append(ASEmitterTokens.TYPEOF.getToken());
-                code.append(ASEmitterTokens.SPACE.getToken());
-                code.append(pnode.getName());
-                code.append(ASEmitterTokens.SPACE.getToken());
-                code.append(ASEmitterTokens.STRICT_NOT_EQUAL.getToken());
-                code.append(ASEmitterTokens.SPACE.getToken());
-                code.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
-                code.append(ASEmitterTokens.UNDEFINED.getToken());
-                code.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
-                code.append(ASEmitterTokens.SPACE.getToken());
-                code.append(ASEmitterTokens.TERNARY.getToken());
-                code.append(ASEmitterTokens.SPACE.getToken());
-                code.append(pnode.getName());
-                code.append(ASEmitterTokens.SPACE.getToken());
-                code.append(ASEmitterTokens.COLON.getToken());
-                code.append(ASEmitterTokens.SPACE.getToken());
-                code.append(pnode.getDefaultValue());
-                code.append(ASEmitterTokens.SEMICOLON.getToken());
-
-                write(code.toString());
-
-                if (i == n - 1 && !hasBody(node))
-                    indentPop();
-
-                writeNewline();
-            }
-        }
-    }
-}
-*/
-
-/*
-private void writeGetSetPrefix(boolean isGet)
-{
-    if (isGet)
-        write(ASEmitterTokens.GET);
-    else
-        write(ASEmitterTokens.SET);
-    write("_");
-}
-*/
-
-/*
-@Override
-public void emitUnaryOperator(IUnaryOperatorNode node)
-{
-    if (node.getNodeID() == ASTNodeID.Op_PreIncrID
-            || node.getNodeID() == ASTNodeID.Op_PreDecrID
-            || node.getNodeID() == ASTNodeID.Op_PostIncrID
-            || node.getNodeID() == ASTNodeID.Op_PostDecrID)
-    {
-        IExpressionNode opNode = node.getOperandNode();
-        String getString = stringifyNode(opNode);
-        int index = getString.lastIndexOf("get_");
-        if (index != -1)
-        {
-            write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
-            write(ASEmitterTokens.MEMBER_ACCESS);
-            if (node.getNodeID() == ASTNodeID.Op_PreIncrID)
-                write(JSFlexJSEmitterTokens.PREINCREMENT);
-            else if (node.getNodeID() == ASTNodeID.Op_PostIncrID)
-                write(JSFlexJSEmitterTokens.POSTINCREMENT);
-            else if (node.getNodeID() == ASTNodeID.Op_PreDecrID)
-                write(JSFlexJSEmitterTokens.PREDECREMENT);
-            else
-                write(JSFlexJSEmitterTokens.POSTDECREMENT);
-            write(ASEmitterTokens.PAREN_OPEN);
-            String obj = getString.substring(0, index - 1);
-            write(obj);
-            write(ASEmitterTokens.COMMA);
-            String prop = getString.substring(index + 4);               
-            int endIndex = prop.indexOf(ASEmitterTokens.PAREN_OPEN.getToken());
-            prop = prop.substring(0, endIndex);
-            write(ASEmitterTokens.DOUBLE_QUOTE);
-            write(prop);
-            write(ASEmitterTokens.DOUBLE_QUOTE);
-            write(ASEmitterTokens.PAREN_CLOSE);
-            return;
-        }
-        else
-        {
-            IASNode parentNode = node.getParent();
-            if (parentNode.getNodeID() == ASTNodeID.MemberAccessExpressionID &&
-                    ((MemberAccessExpressionNode)parentNode).getLeftOperandNode() == node)
-            {
-                // GCC wanted parens around foo++.toString().  As in (foo++).toString();
-                write(ASEmitterTokens.PAREN_OPEN);
-                super.emitUnaryOperator(node);
-                write(ASEmitterTokens.PAREN_CLOSE);
-                return;
-            }
-        }
-
-    }
-    super.emitUnaryOperator(node);
 }
-*/
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/32e1dbf6/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/Notes_JSFlexJSEmitter.txt
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/Notes_JSFlexJSEmitter.txt b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/Notes_JSFlexJSEmitter.txt
new file mode 100644
index 0000000..97e2ffa
--- /dev/null
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/Notes_JSFlexJSEmitter.txt
@@ -0,0 +1,367 @@
+/*
+ *
+ *  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.
+ *
+ */
+
+//-------------------------------------
+// Removed from JSFlexJSEmitter.java 05-31-2015
+//-------------------------------------
+
+/*
+    @Override
+    public void emitForEachLoop(IForLoopNode node)
+    {
+        IContainerNode xnode = (IContainerNode) node.getChild(1);
+        IBinaryOperatorNode bnode = (IBinaryOperatorNode) node
+                .getConditionalsContainerNode().getChild(0);
+        IASNode childNode = bnode.getChild(0);
+
+        write(ASEmitterTokens.TRY);
+        write(ASEmitterTokens.BLOCK_OPEN);
+        writeNewline();
+        
+        write(JSGoogEmitterTokens.GOOG_ARRAY_FOREACH);
+        write(ASEmitterTokens.PAREN_OPEN);
+        getWalker().walk(bnode.getChild(1));
+        writeToken(ASEmitterTokens.COMMA);
+        writeToken(ASEmitterTokens.FUNCTION);
+        write(ASEmitterTokens.PAREN_OPEN);
+        if (childNode instanceof IVariableExpressionNode)
+        	write(((IVariableNode) childNode.getChild(0)).getName());
+        else
+        	write(((IIdentifierNode) childNode).getName());
+        writeToken(ASEmitterTokens.PAREN_CLOSE);
+        if (isImplicit(xnode))
+            write(ASEmitterTokens.BLOCK_OPEN);
+        getWalker().walk(node.getStatementContentsNode());
+        if (isImplicit(xnode))
+        {
+            writeNewline();
+            write(ASEmitterTokens.BLOCK_CLOSE);
+        }
+        write(ASEmitterTokens.PAREN_CLOSE);
+        writeNewline();
+        write(ASEmitterTokens.BLOCK_CLOSE);
+        writeNewline();
+        write(ASEmitterTokens.CATCH);
+        write(ASEmitterTokens.PAREN_OPEN);
+        write("foreachbreakerror");
+        write(ASEmitterTokens.PAREN_CLOSE);
+        write(ASEmitterTokens.SPACE);
+        write(ASEmitterTokens.BLOCK_OPEN);
+        write(ASEmitterTokens.BLOCK_CLOSE);
+        writeNewline();
+        
+    }
+
+    @Override
+    public void emitIterationFlow(IIterationFlowNode node)
+    {
+    	// look for break in foreach and throw error instead
+    	if (node.getKind() == IIterationFlowNode.IterationFlowKind.BREAK)
+    	{
+    		IASNode pNode = node.getParent();
+    		while (pNode != null)
+    		{
+    			ASTNodeID id = pNode.getNodeID();
+    			if (id == ASTNodeID.ForEachLoopID)
+    			{
+    				write(ASEmitterTokens.THROW);
+    				write(ASEmitterTokens.SPACE);
+    				write(ASEmitterTokens.NEW);
+    				write(ASEmitterTokens.SPACE);
+    				write(JSGoogEmitterTokens.ERROR);
+    				write(ASEmitterTokens.PAREN_OPEN);
+    				write(ASEmitterTokens.PAREN_CLOSE);
+    				write(ASEmitterTokens.SEMICOLON);
+    				return;
+    			}
+    			else if (id == ASTNodeID.ForLoopID ||
+    					id == ASTNodeID.DoWhileLoopID ||
+    					id == ASTNodeID.WhileLoopID)
+    				break;
+    			pNode = pNode.getParent();
+    		}
+    	}
+        write(node.getKind().toString().toLowerCase());
+        IIdentifierNode lnode = node.getLabelNode();
+        if (lnode != null)
+        {
+            write(ASEmitterTokens.SPACE);
+            getWalker().walk(lnode);
+        }
+    }
+*/
+
+/*
+@Override
+public void emitInterface(IInterfaceNode node)
+{
+    ICompilerProject project = getWalker().getProject();
+
+    getDoc().emitInterfaceDoc(node, project);
+
+    String qname = node.getQualifiedName();
+    if (qname != null && !qname.equals(""))
+    {
+        write(formatQualifiedName(qname));
+        write(ASEmitterTokens.SPACE);
+        writeToken(ASEmitterTokens.EQUAL);
+        write(ASEmitterTokens.FUNCTION);
+        write(ASEmitterTokens.PAREN_OPEN);
+        write(ASEmitterTokens.PAREN_CLOSE);
+        write(ASEmitterTokens.SPACE);
+        write(ASEmitterTokens.BLOCK_OPEN);
+        writeNewline();
+        write(ASEmitterTokens.BLOCK_CLOSE);
+        write(ASEmitterTokens.SEMICOLON);
+    }
+
+    
+    final IDefinitionNode[] members = node.getAllMemberDefinitionNodes();
+    for (IDefinitionNode mnode : members)
+    {
+        boolean isAccessor = mnode.getNodeID() == ASTNodeID.GetterID
+                || mnode.getNodeID() == ASTNodeID.SetterID;
+
+        writeNewline();
+        writeNewline();
+        writeNewline();
+
+        getDoc().emitInterfaceMemberDoc((IFunctionNode) mnode, project);
+        
+        write(formatQualifiedName(qname));
+        write(ASEmitterTokens.MEMBER_ACCESS);
+        write(JSEmitterTokens.PROTOTYPE);
+        write(ASEmitterTokens.MEMBER_ACCESS);
+        if (isAccessor)
+        {
+            writeGetSetPrefix(mnode.getNodeID() == ASTNodeID.GetterID);
+        }
+        write(mnode.getQualifiedName());
+        write(ASEmitterTokens.SPACE);
+        writeToken(ASEmitterTokens.EQUAL);
+        write(ASEmitterTokens.FUNCTION);
+        emitParameters(((IFunctionNode) mnode).getParameterNodes());
+        write(ASEmitterTokens.SPACE);
+        write(ASEmitterTokens.BLOCK_OPEN);
+        write(ASEmitterTokens.BLOCK_CLOSE);
+        write(ASEmitterTokens.SEMICOLON);
+    }
+}
+*/
+
+/*
+@Override
+public void emitMethod(IFunctionNode node)
+{
+    FunctionNode fn = (FunctionNode) node;
+    fn.parseFunctionBody(getProblems());
+
+    ICompilerProject project = getWalker().getProject();
+
+    getDoc().emitMethodDoc(node, project);
+
+    boolean isConstructor = node.isConstructor();
+
+    String qname = getTypeDefinition(node).getQualifiedName();
+    if (qname != null && !qname.equals(""))
+    {
+        write(formatQualifiedName(qname));
+        if (!isConstructor)
+        {
+            write(ASEmitterTokens.MEMBER_ACCESS);
+            if (!fn.hasModifier(ASModifier.STATIC))
+            {
+                write(JSEmitterTokens.PROTOTYPE);
+                write(ASEmitterTokens.MEMBER_ACCESS);
+            }
+        }
+    }
+
+    if (!isConstructor)
+        emitMemberName(node);
+
+    write(ASEmitterTokens.SPACE);
+    writeToken(ASEmitterTokens.EQUAL);
+    write(ASEmitterTokens.FUNCTION);
+
+    emitParameters(node.getParameterNodes());
+
+    boolean hasSuperClass = hasSuperClass(node);
+
+    if (isConstructor && node.getScopedNode().getChildCount() == 0)
+    {
+        write(ASEmitterTokens.SPACE);
+        write(ASEmitterTokens.BLOCK_OPEN);
+        if (hasSuperClass)
+            emitSuperCall(node, CONSTRUCTOR_EMPTY);
+        writeNewline();
+        write(ASEmitterTokens.BLOCK_CLOSE);
+    }
+
+    if (!isConstructor || node.getScopedNode().getChildCount() > 0)
+        emitMethodScope(node.getScopedNode());
+
+    if (isConstructor && hasSuperClass)
+    {
+        writeNewline(ASEmitterTokens.SEMICOLON);
+        write(JSGoogEmitterTokens.GOOG_INHERITS);
+        write(ASEmitterTokens.PAREN_OPEN);
+        write(formatQualifiedName(qname));
+        writeToken(ASEmitterTokens.COMMA);
+        String sname = getSuperClassDefinition(node, project)
+                .getQualifiedName();
+        write(formatQualifiedName(sname));
+        write(ASEmitterTokens.PAREN_CLOSE);
+    }
+}
+*/
+
+/*
+@Override
+protected void emitDefaultParameterCodeBlock(IFunctionNode node)
+{
+    IParameterNode[] pnodes = node.getParameterNodes();
+    if (pnodes.length == 0)
+        return;
+
+    Map<Integer, IParameterNode> defaults = getDefaults(pnodes);
+
+    if (defaults != null)
+    {
+        final StringBuilder code = new StringBuilder();
+
+        if (!hasBody(node))
+        {
+            indentPush();
+            write(JSFlexJSEmitterTokens.INDENT);
+        }
+
+        List<IParameterNode> parameters = new ArrayList<IParameterNode>(
+                defaults.values());
+
+        for (int i = 0, n = parameters.size(); i < n; i++)
+        {
+            IParameterNode pnode = parameters.get(i);
+
+            if (pnode != null)
+            {
+                code.setLength(0);
+
+                // x = typeof y !== 'undefined' ? y : z;\n 
+                code.append(pnode.getName());
+                code.append(ASEmitterTokens.SPACE.getToken());
+                code.append(ASEmitterTokens.EQUAL.getToken());
+                code.append(ASEmitterTokens.SPACE.getToken());
+                code.append(ASEmitterTokens.TYPEOF.getToken());
+                code.append(ASEmitterTokens.SPACE.getToken());
+                code.append(pnode.getName());
+                code.append(ASEmitterTokens.SPACE.getToken());
+                code.append(ASEmitterTokens.STRICT_NOT_EQUAL.getToken());
+                code.append(ASEmitterTokens.SPACE.getToken());
+                code.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
+                code.append(ASEmitterTokens.UNDEFINED.getToken());
+                code.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
+                code.append(ASEmitterTokens.SPACE.getToken());
+                code.append(ASEmitterTokens.TERNARY.getToken());
+                code.append(ASEmitterTokens.SPACE.getToken());
+                code.append(pnode.getName());
+                code.append(ASEmitterTokens.SPACE.getToken());
+                code.append(ASEmitterTokens.COLON.getToken());
+                code.append(ASEmitterTokens.SPACE.getToken());
+                code.append(pnode.getDefaultValue());
+                code.append(ASEmitterTokens.SEMICOLON.getToken());
+
+                write(code.toString());
+
+                if (i == n - 1 && !hasBody(node))
+                    indentPop();
+
+                writeNewline();
+            }
+        }
+    }
+}
+*/
+
+/*
+private void writeGetSetPrefix(boolean isGet)
+{
+    if (isGet)
+        write(ASEmitterTokens.GET);
+    else
+        write(ASEmitterTokens.SET);
+    write("_");
+}
+*/
+
+/*
+@Override
+public void emitUnaryOperator(IUnaryOperatorNode node)
+{
+    if (node.getNodeID() == ASTNodeID.Op_PreIncrID
+            || node.getNodeID() == ASTNodeID.Op_PreDecrID
+            || node.getNodeID() == ASTNodeID.Op_PostIncrID
+            || node.getNodeID() == ASTNodeID.Op_PostDecrID)
+    {
+        IExpressionNode opNode = node.getOperandNode();
+        String getString = stringifyNode(opNode);
+        int index = getString.lastIndexOf("get_");
+        if (index != -1)
+        {
+            write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
+            write(ASEmitterTokens.MEMBER_ACCESS);
+            if (node.getNodeID() == ASTNodeID.Op_PreIncrID)
+                write(JSFlexJSEmitterTokens.PREINCREMENT);
+            else if (node.getNodeID() == ASTNodeID.Op_PostIncrID)
+                write(JSFlexJSEmitterTokens.POSTINCREMENT);
+            else if (node.getNodeID() == ASTNodeID.Op_PreDecrID)
+                write(JSFlexJSEmitterTokens.PREDECREMENT);
+            else
+                write(JSFlexJSEmitterTokens.POSTDECREMENT);
+            write(ASEmitterTokens.PAREN_OPEN);
+            String obj = getString.substring(0, index - 1);
+            write(obj);
+            write(ASEmitterTokens.COMMA);
+            String prop = getString.substring(index + 4);               
+            int endIndex = prop.indexOf(ASEmitterTokens.PAREN_OPEN.getToken());
+            prop = prop.substring(0, endIndex);
+            write(ASEmitterTokens.DOUBLE_QUOTE);
+            write(prop);
+            write(ASEmitterTokens.DOUBLE_QUOTE);
+            write(ASEmitterTokens.PAREN_CLOSE);
+            return;
+        }
+        else
+        {
+            IASNode parentNode = node.getParent();
+            if (parentNode.getNodeID() == ASTNodeID.MemberAccessExpressionID &&
+                    ((MemberAccessExpressionNode)parentNode).getLeftOperandNode() == node)
+            {
+                // GCC wanted parens around foo++.toString().  As in (foo++).toString();
+                write(ASEmitterTokens.PAREN_OPEN);
+                super.emitUnaryOperator(node);
+                write(ASEmitterTokens.PAREN_CLOSE);
+                return;
+            }
+        }
+
+    }
+    super.emitUnaryOperator(node);
+}
+*/
\ No newline at end of file


[07/35] git commit: [flex-falcon] [refs/heads/IDEA-FLEX_JS_COMPILER] - - Refactored function calls to FunctionCallEmitter.

Posted by ft...@apache.org.
- Refactored function calls to FunctionCallEmitter.


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

Branch: refs/heads/IDEA-FLEX_JS_COMPILER
Commit: 62b62ec2f342de90cbacb81af58266fd5b7bc734
Parents: 1b86402
Author: Michael Schmalle <ms...@apache.org>
Authored: Sat May 30 18:07:05 2015 -0400
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:40:13 2015 +0100

----------------------------------------------------------------------
 .../compiler/internal/codegen/as/ASEmitter.java |   2 +-
 .../internal/codegen/js/JSSessionModel.java     |  12 +-
 .../internal/codegen/js/JSSubEmitter.java       |   6 +
 .../internal/codegen/js/amd/JSAMDEmitter.java   |   2 +-
 .../codegen/js/flexjs/JSFlexJSEmitter.java      |  90 ++-----------
 .../internal/codegen/js/goog/JSGoogEmitter.java |  20 ++-
 .../codegen/js/jx/FunctionCallEmitter.java      | 125 +++++++++++++++++++
 .../codegen/js/vf2js/JSVF2JSEmitter.java        |  15 +--
 8 files changed, 165 insertions(+), 107 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/62b62ec2/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
index 423571b..84d1ac5 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
@@ -1144,7 +1144,7 @@ public class ASEmitter implements IASEmitter, IEmitter
         return null;
     }
 
-    protected void walkArguments(IExpressionNode[] nodes)
+    public void walkArguments(IExpressionNode[] nodes)
     {
         int len = nodes.length;
         for (int i = 0; i < len; i++)

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/62b62ec2/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSSessionModel.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSSessionModel.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSSessionModel.java
index 97cc52b..ba8df11 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSSessionModel.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSSessionModel.java
@@ -32,6 +32,10 @@ import org.apache.flex.compiler.tree.as.ISetterNode;
  */
 public class JSSessionModel
 {
+    public static final String CONSTRUCTOR_EMPTY = "emptyConstructor";
+    public static final String CONSTRUCTOR_FULL = "fullConstructor";
+    public static final String SUPER_FUNCTION_CALL = "replaceSuperFunction";
+
     private IClassDefinition currentClass;
 
     public static class PropertyNodes
@@ -41,9 +45,9 @@ public class JSSessionModel
     }
 
     private HashMap<String, PropertyNodes> propertyMap = new HashMap<String, PropertyNodes>();
-    
+
     private HashMap<String, PropertyNodes> staticPropertyMap = new HashMap<String, PropertyNodes>();
-    
+
     private ArrayList<String> bindableVars = new ArrayList<String>();
 
     public IClassDefinition getCurrentClass()
@@ -60,12 +64,12 @@ public class JSSessionModel
     {
         return propertyMap;
     }
-    
+
     public HashMap<String, PropertyNodes> getStaticPropertyMap()
     {
         return staticPropertyMap;
     }
-    
+
     public boolean hasBindableVars()
     {
         return bindableVars.size() > 0;

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/62b62ec2/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSSubEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSSubEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSSubEmitter.java
index 00ed207..e4a413f 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSSubEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSSubEmitter.java
@@ -22,6 +22,7 @@ package org.apache.flex.compiler.internal.codegen.js;
 import org.apache.flex.compiler.codegen.IEmitterTokens;
 import org.apache.flex.compiler.codegen.js.IJSEmitter;
 import org.apache.flex.compiler.projects.ICompilerProject;
+import org.apache.flex.compiler.visitor.IBlockWalker;
 
 public class JSSubEmitter
 {
@@ -32,6 +33,11 @@ public class JSSubEmitter
         return emitter; 
     }
 
+    protected IBlockWalker getWalker()
+    {
+        return emitter.getWalker();
+    }
+    
     protected ICompilerProject getProject()
     {
         return emitter.getWalker().getProject();

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/62b62ec2/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/amd/JSAMDEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/amd/JSAMDEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/amd/JSAMDEmitter.java
index 8dcbb2c..3f77efc 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/amd/JSAMDEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/amd/JSAMDEmitter.java
@@ -783,7 +783,7 @@ public class JSAMDEmitter extends JSEmitter implements IJSAMDEmitter
     }
 
     @Override
-    protected void walkArguments(IExpressionNode[] nodes)
+    public void walkArguments(IExpressionNode[] nodes)
     {
     }
 

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/62b62ec2/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 ec5c2db..4f5a57e 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
@@ -30,7 +30,6 @@ import java.util.Set;
 import org.apache.flex.compiler.asdoc.flexjs.ASDocComment;
 import org.apache.flex.compiler.clients.MXMLJSC;
 import org.apache.flex.compiler.clients.MXMLJSC.JSOutputType;
-import org.apache.flex.compiler.codegen.IASGlobalFunctionConstants;
 import org.apache.flex.compiler.codegen.IDocEmitter;
 import org.apache.flex.compiler.codegen.js.flexjs.IJSFlexJSEmitter;
 import org.apache.flex.compiler.common.ASModifier;
@@ -45,15 +44,16 @@ import org.apache.flex.compiler.definitions.IPackageDefinition;
 import org.apache.flex.compiler.definitions.ITypeDefinition;
 import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
 import org.apache.flex.compiler.internal.codegen.js.JSEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSSessionModel;
 import org.apache.flex.compiler.internal.codegen.js.JSSessionModel.PropertyNodes;
 import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitter;
 import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitterTokens;
 import org.apache.flex.compiler.internal.codegen.js.jx.ClassEmitter;
 import org.apache.flex.compiler.internal.codegen.js.jx.FieldEmitter;
+import org.apache.flex.compiler.internal.codegen.js.jx.FunctionCallEmitter;
 import org.apache.flex.compiler.internal.definitions.AccessorDefinition;
 import org.apache.flex.compiler.internal.definitions.ClassDefinition;
 import org.apache.flex.compiler.internal.definitions.FunctionDefinition;
-import org.apache.flex.compiler.internal.definitions.InterfaceDefinition;
 import org.apache.flex.compiler.internal.definitions.ParameterDefinition;
 import org.apache.flex.compiler.internal.definitions.VariableDefinition;
 import org.apache.flex.compiler.internal.projects.CompilerProject;
@@ -113,6 +113,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
     
     private ClassEmitter classEmitter;
     private FieldEmitter fieldEmitter;
+    private FunctionCallEmitter functionCallEmitter;
 
     public ClassEmitter getClassEmiter()
     {
@@ -125,6 +126,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
 
         classEmitter = new ClassEmitter(this);
         fieldEmitter = new FieldEmitter(this);
+        functionCallEmitter = new FunctionCallEmitter(this);
     }
 
     @Override
@@ -228,83 +230,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
     @Override
     public void emitFunctionCall(IFunctionCallNode node)
     {
-        IASNode cnode = node.getChild(0);
-
-        if (cnode.getNodeID() == ASTNodeID.MemberAccessExpressionID)
-            cnode = cnode.getChild(0);
-
-        ASTNodeID id = cnode.getNodeID();
-        if (id != ASTNodeID.SuperID)
-        {
-            ICompilerProject project = null;
-            IDefinition def = null;
-
-            boolean isClassCast = false;
-
-            if (node.isNewExpression())
-            {
-                writeToken(ASEmitterTokens.NEW);
-            }
-            else
-            {
-                if (project == null)
-                    project = getWalker().getProject();
-
-                def = node.getNameNode().resolve(project);
-
-                isClassCast = (def instanceof ClassDefinition || def instanceof InterfaceDefinition)
-                        && !(NativeUtils.isJSNative(def.getBaseName()));
-            }
-
-            if (node.isNewExpression())
-            {
-                if (project == null)
-                    project = getWalker().getProject();
-
-                def = node.resolveCalledExpression(project);
-                // all new calls to a class should be fully qualified names
-                if (def instanceof ClassDefinition)
-                    write(formatQualifiedName(def.getQualifiedName()));
-                else
-                    // I think we still need this for "new someVarOfTypeClass"
-                    getWalker().walk(node.getNameNode());
-                write(ASEmitterTokens.PAREN_OPEN);
-                walkArguments(node.getArgumentNodes());
-                write(ASEmitterTokens.PAREN_CLOSE);
-            }
-            else if (!isClassCast)
-            {
-                if (def != null)
-                {
-                    boolean isInt = def.getBaseName().equals(
-                            IASGlobalFunctionConstants._int);
-                    if (isInt
-                            || def.getBaseName().equals(
-                                    IASGlobalFunctionConstants.trace)
-                            || def.getBaseName().equals(
-                                    IASGlobalFunctionConstants.uint))
-                    {
-                        write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
-                        write(ASEmitterTokens.MEMBER_ACCESS);
-                        if (isInt)
-                            write(JSFlexJSEmitterTokens.UNDERSCORE);
-                    }
-                }
-                getWalker().walk(node.getNameNode());
-                write(ASEmitterTokens.PAREN_OPEN);
-                walkArguments(node.getArgumentNodes());
-                write(ASEmitterTokens.PAREN_CLOSE);
-            }
-            else
-            {
-                emitIsAs(node.getArgumentNodes()[0], node.getNameNode(),
-                        ASTNodeID.Op_AsID, true);
-            }
-        }
-        else
-        {
-            emitSuperCall(node, SUPER_FUNCTION_CALL);
-        }
+        functionCallEmitter.emit(node);
     }
 
     //--------------------------------------------------------------------------
@@ -524,7 +450,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
     //--------------------------------------------------------------------------
 
     @Override
-    protected void emitSuperCall(IASNode node, String type)
+    public void emitSuperCall(IASNode node, String type)
     {
         IFunctionNode fnode = (node instanceof IFunctionNode) ? (IFunctionNode) node
                 : null;
@@ -533,7 +459,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
 
         final IClassDefinition thisClass = getModel().getCurrentClass();
 
-        if (type == SUPER_FUNCTION_CALL)
+        if (type == JSSessionModel.SUPER_FUNCTION_CALL)
         {
             if (fnode == null)
                 fnode = (IFunctionNode) fcnode
@@ -772,7 +698,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
         }
     }
 
-    private void emitIsAs(IExpressionNode left, IExpressionNode right,
+    public void emitIsAs(IExpressionNode left, IExpressionNode right,
             ASTNodeID id, boolean coercion)
     {
         // project is null in unit tests

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/62b62ec2/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
index db88672..530a381 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
@@ -40,6 +40,7 @@ import org.apache.flex.compiler.definitions.ITypeDefinition;
 import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
 import org.apache.flex.compiler.internal.codegen.js.JSEmitter;
 import org.apache.flex.compiler.internal.codegen.js.JSEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSSessionModel;
 import org.apache.flex.compiler.internal.codegen.js.utils.EmitterUtils;
 import org.apache.flex.compiler.internal.definitions.ClassDefinition;
 import org.apache.flex.compiler.internal.scopes.PackageScope;
@@ -82,11 +83,6 @@ import org.apache.flex.compiler.utils.ASNodeUtils;
  */
 public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
 {
-
-    protected static final String CONSTRUCTOR_EMPTY = "emptyConstructor";
-    protected static final String CONSTRUCTOR_FULL = "fullConstructor";
-    protected static final String SUPER_FUNCTION_CALL = "replaceSuperFunction";
-
     protected List<String> propertyNames = new ArrayList<String>();
 
     public ICompilerProject project;
@@ -490,7 +486,7 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
             write(ASEmitterTokens.SPACE);
             write(ASEmitterTokens.BLOCK_OPEN);
             if (hasSuperClass)
-                emitSuperCall(node, CONSTRUCTOR_EMPTY);
+                emitSuperCall(node, JSSessionModel.CONSTRUCTOR_EMPTY);
             writeNewline();
             write(ASEmitterTokens.BLOCK_CLOSE);
         }
@@ -536,7 +532,7 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
         }
         else
         {
-            emitSuperCall(node, SUPER_FUNCTION_CALL);
+            emitSuperCall(node, JSSessionModel.SUPER_FUNCTION_CALL);
         }
     }
 
@@ -624,7 +620,7 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
 
         if (node.isConstructor() && hasSuperClass(node)
                 && !hasSuperCall(node.getScopedNode()))
-            emitSuperCall(node, CONSTRUCTOR_FULL);
+            emitSuperCall(node, JSSessionModel.CONSTRUCTOR_FULL);
 
         emitRestParameterCodeBlock(node);
 
@@ -647,13 +643,13 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
         IFunctionCallNode fcnode = (node instanceof IFunctionCallNode) ? (FunctionCallNode) node
                 : null;
 
-        if (type == CONSTRUCTOR_EMPTY)
+        if (type == JSSessionModel.CONSTRUCTOR_EMPTY)
         {
             indentPush();
             writeNewline();
             indentPop();
         }
-        else if (type == SUPER_FUNCTION_CALL)
+        else if (type == JSSessionModel.SUPER_FUNCTION_CALL)
         {
             if (fnode == null)
                 fnode = (IFunctionNode) fcnode
@@ -722,12 +718,12 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
 
         write(ASEmitterTokens.PAREN_CLOSE);
 
-        if (type == CONSTRUCTOR_FULL)
+        if (type == JSSessionModel.CONSTRUCTOR_FULL)
         {
             write(ASEmitterTokens.SEMICOLON);
             writeNewline();
         }
-        else if (type == CONSTRUCTOR_EMPTY)
+        else if (type == JSSessionModel.CONSTRUCTOR_EMPTY)
         {
             write(ASEmitterTokens.SEMICOLON);
         }

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/62b62ec2/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FunctionCallEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FunctionCallEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FunctionCallEmitter.java
new file mode 100644
index 0000000..00bdf18
--- /dev/null
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FunctionCallEmitter.java
@@ -0,0 +1,125 @@
+/*
+ *
+ *  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.js.jx;
+
+import org.apache.flex.compiler.codegen.IASGlobalFunctionConstants;
+import org.apache.flex.compiler.codegen.ISubEmitter;
+import org.apache.flex.compiler.codegen.js.IJSEmitter;
+import org.apache.flex.compiler.definitions.IDefinition;
+import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSSessionModel;
+import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitterTokens;
+import org.apache.flex.compiler.internal.definitions.ClassDefinition;
+import org.apache.flex.compiler.internal.definitions.InterfaceDefinition;
+import org.apache.flex.compiler.tree.ASTNodeID;
+import org.apache.flex.compiler.tree.as.IASNode;
+import org.apache.flex.compiler.tree.as.IFunctionCallNode;
+import org.apache.flex.compiler.utils.NativeUtils;
+
+public class FunctionCallEmitter extends JSSubEmitter implements
+        ISubEmitter<IFunctionCallNode>
+{
+
+    public FunctionCallEmitter(IJSEmitter emitter)
+    {
+        super(emitter);
+    }
+
+    @Override
+    public void emit(IFunctionCallNode node)
+    {
+        // TODO (mschmalle) will remove this cast as more things get abstracted
+        JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
+
+        IASNode cnode = node.getChild(0);
+
+        if (cnode.getNodeID() == ASTNodeID.MemberAccessExpressionID)
+            cnode = cnode.getChild(0);
+
+        ASTNodeID id = cnode.getNodeID();
+        if (id != ASTNodeID.SuperID)
+        {
+            IDefinition def = null;
+
+            boolean isClassCast = false;
+
+            if (node.isNewExpression())
+            {
+                writeToken(ASEmitterTokens.NEW);
+            }
+            else
+            {
+                def = node.getNameNode().resolve(getProject());
+
+                isClassCast = (def instanceof ClassDefinition || def instanceof InterfaceDefinition)
+                        && !(NativeUtils.isJSNative(def.getBaseName()));
+            }
+
+            if (node.isNewExpression())
+            {
+                def = node.resolveCalledExpression(getProject());
+                // all new calls to a class should be fully qualified names
+                if (def instanceof ClassDefinition)
+                    write(fjs.formatQualifiedName(def.getQualifiedName()));
+                else
+                    // I think we still need this for "new someVarOfTypeClass"
+                    fjs.getWalker().walk(node.getNameNode());
+                write(ASEmitterTokens.PAREN_OPEN);
+                fjs.walkArguments(node.getArgumentNodes());
+                write(ASEmitterTokens.PAREN_CLOSE);
+            }
+            else if (!isClassCast)
+            {
+                if (def != null)
+                {
+                    boolean isInt = def.getBaseName().equals(
+                            IASGlobalFunctionConstants._int);
+                    if (isInt
+                            || def.getBaseName().equals(
+                                    IASGlobalFunctionConstants.trace)
+                            || def.getBaseName().equals(
+                                    IASGlobalFunctionConstants.uint))
+                    {
+                        write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
+                        write(ASEmitterTokens.MEMBER_ACCESS);
+                        if (isInt)
+                            write(JSFlexJSEmitterTokens.UNDERSCORE);
+                    }
+                }
+                getWalker().walk(node.getNameNode());
+                write(ASEmitterTokens.PAREN_OPEN);
+                fjs.walkArguments(node.getArgumentNodes());
+                write(ASEmitterTokens.PAREN_CLOSE);
+            }
+            else
+            {
+                fjs.emitIsAs(node.getArgumentNodes()[0], node.getNameNode(),
+                        ASTNodeID.Op_AsID, true);
+            }
+        }
+        else
+        {
+            fjs.emitSuperCall(node, JSSessionModel.SUPER_FUNCTION_CALL);
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/62b62ec2/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
index 033215a..b11193b 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
@@ -44,6 +44,7 @@ import org.apache.flex.compiler.definitions.IParameterDefinition;
 import org.apache.flex.compiler.definitions.ITypeDefinition;
 import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
 import org.apache.flex.compiler.internal.codegen.js.JSEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSSessionModel;
 import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitterTokens;
 import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitter;
 import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitterTokens;
@@ -281,7 +282,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
         
         if (node.isConstructor()
                 && hasSuperClass(node) && !hasSuperCall(node.getScopedNode()))
-            emitSuperCall(node, CONSTRUCTOR_FULL);
+            emitSuperCall(node, JSSessionModel.CONSTRUCTOR_FULL);
     }
 
     private void emitVarNonLiteralAssignments()
@@ -542,7 +543,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
             emitVarNonLiteralAssignments();
             if (hasSuperClass)
             {
-                emitSuperCall(node, CONSTRUCTOR_EMPTY);
+                emitSuperCall(node, JSSessionModel.CONSTRUCTOR_EMPTY);
                 writeNewline();
             }
             write(ASEmitterTokens.BLOCK_CLOSE);
@@ -669,7 +670,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
         }
         else
         {
-            emitSuperCall(node, SUPER_FUNCTION_CALL);
+            emitSuperCall(node, JSSessionModel.SUPER_FUNCTION_CALL);
         }
     }
 
@@ -1002,13 +1003,13 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
         IFunctionCallNode fcnode = (node instanceof IFunctionCallNode) ? (FunctionCallNode) node
                 : null;
 
-        if (type == CONSTRUCTOR_EMPTY)
+        if (type == JSSessionModel.CONSTRUCTOR_EMPTY)
         {
             indentPush();
             writeNewline();
             indentPop();
         }
-        else if (type == SUPER_FUNCTION_CALL)
+        else if (type == JSSessionModel.SUPER_FUNCTION_CALL)
         {
             if (fnode == null)
                 fnode = (IFunctionNode) fcnode
@@ -1141,12 +1142,12 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
 
         write(ASEmitterTokens.PAREN_CLOSE);
 
-        if (type == CONSTRUCTOR_FULL)
+        if (type == JSSessionModel.CONSTRUCTOR_FULL)
         {
             write(ASEmitterTokens.SEMICOLON);
             writeNewline();
         }
-        else if (type == CONSTRUCTOR_EMPTY)
+        else if (type == JSSessionModel.CONSTRUCTOR_EMPTY)
         {
             write(ASEmitterTokens.SEMICOLON);
         }


[11/35] git commit: [flex-falcon] [refs/heads/IDEA-FLEX_JS_COMPILER] - - Moved emitBindableVarDefineProperty() to Bindable emitter. - Refactored foreach into emitter.

Posted by ft...@apache.org.
- Moved emitBindableVarDefineProperty() to Bindable emitter.
- Refactored foreach into emitter.


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

Branch: refs/heads/IDEA-FLEX_JS_COMPILER
Commit: ad488d8a75ebc426b66527d37185b746c521c8fa
Parents: 32e1dbf
Author: Michael Schmalle <ms...@apache.org>
Authored: Sun May 31 12:00:44 2015 -0400
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:40:26 2015 +0100

----------------------------------------------------------------------
 .../internal/codegen/js/JSSessionModel.java     |  12 +++
 .../codegen/js/flexjs/JSFlexJSEmitter.java      | 105 +------------------
 .../internal/codegen/js/jx/BindableEmitter.java |  58 +++++++++-
 .../internal/codegen/js/jx/ForEachEmitter.java  |  88 ++++++++++++++++
 4 files changed, 162 insertions(+), 101 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/ad488d8a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSSessionModel.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSSessionModel.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSSessionModel.java
index ba8df11..48079fa 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSSessionModel.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSSessionModel.java
@@ -50,6 +50,8 @@ public class JSSessionModel
 
     private ArrayList<String> bindableVars = new ArrayList<String>();
 
+    private int foreachLoopCount = 0;
+
     public IClassDefinition getCurrentClass()
     {
         return currentClass;
@@ -80,4 +82,14 @@ public class JSSessionModel
         return bindableVars;
     }
 
+    public final void incForeachLoopCount()
+    {
+        foreachLoopCount++;
+    }
+
+    public String getCurrentForeachName()
+    {
+        return "foreachiter" + Integer.toString(foreachLoopCount);
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/ad488d8a/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 5562e31..f86ca5a 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
@@ -26,7 +26,6 @@ import org.apache.flex.compiler.codegen.IDocEmitter;
 import org.apache.flex.compiler.codegen.js.flexjs.IJSFlexJSEmitter;
 import org.apache.flex.compiler.common.ASModifier;
 import org.apache.flex.compiler.common.IMetaInfo;
-import org.apache.flex.compiler.definitions.IClassDefinition;
 import org.apache.flex.compiler.definitions.IDefinition;
 import org.apache.flex.compiler.definitions.IFunctionDefinition;
 import org.apache.flex.compiler.definitions.IPackageDefinition;
@@ -38,6 +37,7 @@ import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitterTokens;
 import org.apache.flex.compiler.internal.codegen.js.jx.BinaryOperatorEmitter;
 import org.apache.flex.compiler.internal.codegen.js.jx.ClassEmitter;
 import org.apache.flex.compiler.internal.codegen.js.jx.FieldEmitter;
+import org.apache.flex.compiler.internal.codegen.js.jx.ForEachEmitter;
 import org.apache.flex.compiler.internal.codegen.js.jx.FunctionCallEmitter;
 import org.apache.flex.compiler.internal.codegen.js.jx.IdentifierEmitter;
 import org.apache.flex.compiler.internal.codegen.js.jx.MemberAccessEmitter;
@@ -65,11 +65,10 @@ import org.apache.flex.compiler.tree.as.IMemberAccessExpressionNode;
 import org.apache.flex.compiler.tree.as.IParameterNode;
 import org.apache.flex.compiler.tree.as.ISetterNode;
 import org.apache.flex.compiler.tree.as.ITypedExpressionNode;
-import org.apache.flex.compiler.tree.as.IVariableExpressionNode;
 import org.apache.flex.compiler.tree.as.IVariableNode;
 
 /**
- * Concrete implementation of the 'goog' JavaScript production.
+ * Concrete implementation of the 'FlexJS' JavaScript production.
  * 
  * @author Michael Schmalle
  * @author Erik de Bruin
@@ -77,8 +76,6 @@ import org.apache.flex.compiler.tree.as.IVariableNode;
 public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
 {
 
-    private int foreachLoopCounter = 0;
-
     private JSFlexJSDocEmitter docEmitter = null;
 
     private PackageHeaderEmitter packageHeaderEmitter;
@@ -88,6 +85,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
     private FieldEmitter fieldEmitter;
     private FunctionCallEmitter functionCallEmitter;
     private SuperCallEmitter superCallEmitter;
+    private ForEachEmitter forEachEmitter;
     private MemberAccessEmitter memberAccessEmitter;
     private BinaryOperatorEmitter binaryOperatorEmitter;
     private IdentifierEmitter identifierEmitter;
@@ -116,6 +114,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
         fieldEmitter = new FieldEmitter(this);
         functionCallEmitter = new FunctionCallEmitter(this);
         superCallEmitter = new SuperCallEmitter(this);
+        forEachEmitter = new ForEachEmitter(this);
         memberAccessEmitter = new MemberAccessEmitter(this);
         binaryOperatorEmitter = new BinaryOperatorEmitter(this);
         identifierEmitter = new IdentifierEmitter(this);
@@ -154,58 +153,6 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
         fieldEmitter.emit(node);
     }
 
-    public void emitBindableVarDefineProperty(String name, IClassDefinition cdef)
-    {
-        // 'PropName': {
-        writeNewline("/** @expose */");
-        writeNewline(name + ASEmitterTokens.COLON.getToken()
-                + ASEmitterTokens.SPACE.getToken()
-                + ASEmitterTokens.BLOCK_OPEN.getToken());
-        indentPush();
-        writeNewline("/** @this {"
-                + formatQualifiedName(cdef.getQualifiedName()) + "} */");
-        writeNewline(ASEmitterTokens.GET.getToken()
-                + ASEmitterTokens.COLON.getToken()
-                + ASEmitterTokens.SPACE.getToken()
-                + ASEmitterTokens.FUNCTION.getToken()
-                + ASEmitterTokens.PAREN_OPEN.getToken()
-                + ASEmitterTokens.PAREN_CLOSE.getToken()
-                + ASEmitterTokens.SPACE.getToken()
-                + ASEmitterTokens.BLOCK_OPEN.getToken());
-        writeNewline(ASEmitterTokens.RETURN.getToken()
-                + ASEmitterTokens.SPACE.getToken()
-                + ASEmitterTokens.THIS.getToken()
-                + ASEmitterTokens.MEMBER_ACCESS.getToken() + name + "_"
-                + ASEmitterTokens.SEMICOLON.getToken());
-        indentPop();
-        writeNewline(ASEmitterTokens.BLOCK_CLOSE.getToken()
-                + ASEmitterTokens.COMMA.getToken());
-        writeNewline();
-        writeNewline("/** @this {"
-                + formatQualifiedName(cdef.getQualifiedName()) + "} */");
-        writeNewline(ASEmitterTokens.SET.getToken()
-                + ASEmitterTokens.COLON.getToken()
-                + ASEmitterTokens.SPACE.getToken()
-                + ASEmitterTokens.FUNCTION.getToken()
-                + ASEmitterTokens.PAREN_OPEN.getToken() + "value"
-                + ASEmitterTokens.PAREN_CLOSE.getToken()
-                + ASEmitterTokens.SPACE.getToken()
-                + ASEmitterTokens.BLOCK_OPEN.getToken());
-        writeNewline("if (value != " + ASEmitterTokens.THIS.getToken()
-                + ASEmitterTokens.MEMBER_ACCESS.getToken() + name + "_) {");
-        writeNewline("    var oldValue = " + ASEmitterTokens.THIS.getToken()
-                + ASEmitterTokens.MEMBER_ACCESS.getToken() + name + "_"
-                + ASEmitterTokens.SEMICOLON.getToken());
-        writeNewline("    " + ASEmitterTokens.THIS.getToken()
-                + ASEmitterTokens.MEMBER_ACCESS.getToken() + name
-                + "_ = value;");
-        writeNewline("    this.dispatchEvent(org_apache_flex_events_ValueChangeEvent.createUpdateEvent(");
-        writeNewline("         this, \"" + name + "\", oldValue, value));");
-        writeNewline("}");
-        write(ASEmitterTokens.BLOCK_CLOSE.getToken());
-        write(ASEmitterTokens.BLOCK_CLOSE.getToken());
-    }
-
     @Override
     public void emitAccessors(IAccessorNode node)
     {
@@ -500,49 +447,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
     @Override
     public void emitForEachLoop(IForLoopNode node)
     {
-        IBinaryOperatorNode bnode = (IBinaryOperatorNode) node
-                .getConditionalsContainerNode().getChild(0);
-        IASNode childNode = bnode.getChild(0);
-
-        String iterName = "foreachiter"
-                + new Integer(foreachLoopCounter).toString();
-        foreachLoopCounter++;
-
-        write(ASEmitterTokens.FOR);
-        write(ASEmitterTokens.SPACE);
-        write(ASEmitterTokens.PAREN_OPEN);
-        write(ASEmitterTokens.VAR);
-        write(ASEmitterTokens.SPACE);
-        write(iterName);
-        write(ASEmitterTokens.SPACE);
-        write(ASEmitterTokens.IN);
-        write(ASEmitterTokens.SPACE);
-        getWalker().walk(bnode.getChild(1));
-        writeToken(ASEmitterTokens.PAREN_CLOSE);
-        writeNewline();
-        write(ASEmitterTokens.BLOCK_OPEN);
-        writeNewline();
-        if (childNode instanceof IVariableExpressionNode)
-        {
-            write(ASEmitterTokens.VAR);
-            write(ASEmitterTokens.SPACE);
-            write(((IVariableNode) childNode.getChild(0)).getName());
-        }
-        else
-            write(((IIdentifierNode) childNode).getName());
-        write(ASEmitterTokens.SPACE);
-        write(ASEmitterTokens.EQUAL);
-        write(ASEmitterTokens.SPACE);
-        getWalker().walk(bnode.getChild(1));
-        write(ASEmitterTokens.SQUARE_OPEN);
-        write(iterName);
-        write(ASEmitterTokens.SQUARE_CLOSE);
-        write(ASEmitterTokens.SEMICOLON);
-        writeNewline();
-        getWalker().walk(node.getStatementContentsNode());
-        write(ASEmitterTokens.BLOCK_CLOSE);
-        writeNewline();
-
+        forEachEmitter.emit(node);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/ad488d8a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/BindableEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/BindableEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/BindableEmitter.java
index 310bf6b..0ec3fd2 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/BindableEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/BindableEmitter.java
@@ -66,11 +66,67 @@ public class BindableEmitter extends JSSubEmitter implements
                 else
                     write(ASEmitterTokens.COMMA);
 
-                fjs.emitBindableVarDefineProperty(varName, definition);
+                emitBindableVarDefineProperty(varName, definition);
             }
             writeNewline(ASEmitterTokens.BLOCK_CLOSE);
             write(ASEmitterTokens.PAREN_CLOSE);
             write(ASEmitterTokens.SEMICOLON);
         }
     }
+
+    private void emitBindableVarDefineProperty(String name,
+            IClassDefinition cdef)
+    {
+        // TODO (mschmalle) will remove this cast as more things get abstracted
+        JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
+
+        // 'PropName': {
+        writeNewline("/** @expose */");
+        writeNewline(name + ASEmitterTokens.COLON.getToken()
+                + ASEmitterTokens.SPACE.getToken()
+                + ASEmitterTokens.BLOCK_OPEN.getToken());
+        indentPush();
+        writeNewline("/** @this {"
+                + fjs.formatQualifiedName(cdef.getQualifiedName()) + "} */");
+        writeNewline(ASEmitterTokens.GET.getToken()
+                + ASEmitterTokens.COLON.getToken()
+                + ASEmitterTokens.SPACE.getToken()
+                + ASEmitterTokens.FUNCTION.getToken()
+                + ASEmitterTokens.PAREN_OPEN.getToken()
+                + ASEmitterTokens.PAREN_CLOSE.getToken()
+                + ASEmitterTokens.SPACE.getToken()
+                + ASEmitterTokens.BLOCK_OPEN.getToken());
+        writeNewline(ASEmitterTokens.RETURN.getToken()
+                + ASEmitterTokens.SPACE.getToken()
+                + ASEmitterTokens.THIS.getToken()
+                + ASEmitterTokens.MEMBER_ACCESS.getToken() + name + "_"
+                + ASEmitterTokens.SEMICOLON.getToken());
+        indentPop();
+        writeNewline(ASEmitterTokens.BLOCK_CLOSE.getToken()
+                + ASEmitterTokens.COMMA.getToken());
+        writeNewline();
+        writeNewline("/** @this {"
+                + fjs.formatQualifiedName(cdef.getQualifiedName()) + "} */");
+        writeNewline(ASEmitterTokens.SET.getToken()
+                + ASEmitterTokens.COLON.getToken()
+                + ASEmitterTokens.SPACE.getToken()
+                + ASEmitterTokens.FUNCTION.getToken()
+                + ASEmitterTokens.PAREN_OPEN.getToken() + "value"
+                + ASEmitterTokens.PAREN_CLOSE.getToken()
+                + ASEmitterTokens.SPACE.getToken()
+                + ASEmitterTokens.BLOCK_OPEN.getToken());
+        writeNewline("if (value != " + ASEmitterTokens.THIS.getToken()
+                + ASEmitterTokens.MEMBER_ACCESS.getToken() + name + "_) {");
+        writeNewline("    var oldValue = " + ASEmitterTokens.THIS.getToken()
+                + ASEmitterTokens.MEMBER_ACCESS.getToken() + name + "_"
+                + ASEmitterTokens.SEMICOLON.getToken());
+        writeNewline("    " + ASEmitterTokens.THIS.getToken()
+                + ASEmitterTokens.MEMBER_ACCESS.getToken() + name
+                + "_ = value;");
+        writeNewline("    this.dispatchEvent(org_apache_flex_events_ValueChangeEvent.createUpdateEvent(");
+        writeNewline("         this, \"" + name + "\", oldValue, value));");
+        writeNewline("}");
+        write(ASEmitterTokens.BLOCK_CLOSE.getToken());
+        write(ASEmitterTokens.BLOCK_CLOSE.getToken());
+    }
 }

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/ad488d8a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/ForEachEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/ForEachEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/ForEachEmitter.java
new file mode 100644
index 0000000..1b33061
--- /dev/null
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/ForEachEmitter.java
@@ -0,0 +1,88 @@
+/*
+ *
+ *  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.js.jx;
+
+import org.apache.flex.compiler.codegen.ISubEmitter;
+import org.apache.flex.compiler.codegen.js.IJSEmitter;
+import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
+import org.apache.flex.compiler.tree.as.IASNode;
+import org.apache.flex.compiler.tree.as.IBinaryOperatorNode;
+import org.apache.flex.compiler.tree.as.IForLoopNode;
+import org.apache.flex.compiler.tree.as.IIdentifierNode;
+import org.apache.flex.compiler.tree.as.IVariableExpressionNode;
+import org.apache.flex.compiler.tree.as.IVariableNode;
+
+public class ForEachEmitter extends JSSubEmitter implements
+        ISubEmitter<IForLoopNode>
+{
+
+    public ForEachEmitter(IJSEmitter emitter)
+    {
+        super(emitter);
+    }
+
+    @Override
+    public void emit(IForLoopNode node)
+    {
+        IBinaryOperatorNode bnode = (IBinaryOperatorNode) node
+                .getConditionalsContainerNode().getChild(0);
+        IASNode childNode = bnode.getChild(0);
+
+        final String iterName = getModel().getCurrentForeachName();
+        getModel().incForeachLoopCount();
+
+        write(ASEmitterTokens.FOR);
+        write(ASEmitterTokens.SPACE);
+        write(ASEmitterTokens.PAREN_OPEN);
+        write(ASEmitterTokens.VAR);
+        write(ASEmitterTokens.SPACE);
+        write(iterName);
+        write(ASEmitterTokens.SPACE);
+        write(ASEmitterTokens.IN);
+        write(ASEmitterTokens.SPACE);
+        getWalker().walk(bnode.getChild(1));
+        writeToken(ASEmitterTokens.PAREN_CLOSE);
+        writeNewline();
+        write(ASEmitterTokens.BLOCK_OPEN);
+        writeNewline();
+        if (childNode instanceof IVariableExpressionNode)
+        {
+            write(ASEmitterTokens.VAR);
+            write(ASEmitterTokens.SPACE);
+            write(((IVariableNode) childNode.getChild(0)).getName());
+        }
+        else
+            write(((IIdentifierNode) childNode).getName());
+        write(ASEmitterTokens.SPACE);
+        write(ASEmitterTokens.EQUAL);
+        write(ASEmitterTokens.SPACE);
+        getWalker().walk(bnode.getChild(1));
+        write(ASEmitterTokens.SQUARE_OPEN);
+        write(iterName);
+        write(ASEmitterTokens.SQUARE_CLOSE);
+        write(ASEmitterTokens.SEMICOLON);
+        writeNewline();
+        getWalker().walk(node.getStatementContentsNode());
+        write(ASEmitterTokens.BLOCK_CLOSE);
+        writeNewline();
+    }
+
+}


[29/35] git commit: [flex-falcon] [refs/heads/IDEA-FLEX_JS_COMPILER] - - Refactored define property function into emitter. - Refactored object define property into emitter.

Posted by ft...@apache.org.
- Refactored define property function into emitter.
- Refactored object define property into emitter.


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

Branch: refs/heads/IDEA-FLEX_JS_COMPILER
Commit: 0ca46d2aac7fe728c455e3cd1ee561cbd71d18af
Parents: e11ef01
Author: Michael Schmalle <ms...@apache.org>
Authored: Sun May 31 15:29:52 2015 -0400
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:41:28 2015 +0100

----------------------------------------------------------------------
 .../codegen/js/flexjs/JSFlexJSEmitter.java      | 138 ++-------------
 .../internal/codegen/js/goog/JSGoogEmitter.java |   2 +
 .../js/jx/DefinePropertyFunctionEmitter.java    | 120 ++++++++++++++
 .../js/jx/ObjectDefinePropertyEmitter.java      | 166 +++++++++++++++++++
 4 files changed, 299 insertions(+), 127 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/0ca46d2a/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 66a5731..78f1f0b 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
@@ -23,13 +23,8 @@ import java.io.FilterWriter;
 
 import org.apache.flex.compiler.codegen.js.flexjs.IJSFlexJSEmitter;
 import org.apache.flex.compiler.codegen.js.goog.IJSGoogDocEmitter;
-import org.apache.flex.compiler.common.ASModifier;
-import org.apache.flex.compiler.common.IMetaInfo;
-import org.apache.flex.compiler.definitions.IFunctionDefinition;
 import org.apache.flex.compiler.definitions.IPackageDefinition;
-import org.apache.flex.compiler.definitions.ITypeDefinition;
 import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
-import org.apache.flex.compiler.internal.codegen.js.JSEmitterTokens;
 import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitter;
 import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitterTokens;
 import org.apache.flex.compiler.internal.codegen.js.jx.AccessorEmitter;
@@ -37,6 +32,7 @@ import org.apache.flex.compiler.internal.codegen.js.jx.AsIsEmitter;
 import org.apache.flex.compiler.internal.codegen.js.jx.BinaryOperatorEmitter;
 import org.apache.flex.compiler.internal.codegen.js.jx.BindableEmitter;
 import org.apache.flex.compiler.internal.codegen.js.jx.ClassEmitter;
+import org.apache.flex.compiler.internal.codegen.js.jx.DefinePropertyFunctionEmitter;
 import org.apache.flex.compiler.internal.codegen.js.jx.FieldEmitter;
 import org.apache.flex.compiler.internal.codegen.js.jx.ForEachEmitter;
 import org.apache.flex.compiler.internal.codegen.js.jx.FunctionCallEmitter;
@@ -44,13 +40,12 @@ import org.apache.flex.compiler.internal.codegen.js.jx.IdentifierEmitter;
 import org.apache.flex.compiler.internal.codegen.js.jx.InterfaceEmitter;
 import org.apache.flex.compiler.internal.codegen.js.jx.MemberAccessEmitter;
 import org.apache.flex.compiler.internal.codegen.js.jx.MethodEmitter;
+import org.apache.flex.compiler.internal.codegen.js.jx.ObjectDefinePropertyEmitter;
 import org.apache.flex.compiler.internal.codegen.js.jx.PackageFooterEmitter;
 import org.apache.flex.compiler.internal.codegen.js.jx.PackageHeaderEmitter;
 import org.apache.flex.compiler.internal.codegen.js.jx.SuperCallEmitter;
 import org.apache.flex.compiler.internal.codegen.js.jx.VarDeclarationEmitter;
-import org.apache.flex.compiler.internal.tree.as.FunctionNode;
 import org.apache.flex.compiler.internal.tree.as.RegExpLiteralNode;
-import org.apache.flex.compiler.internal.tree.as.SetterNode;
 import org.apache.flex.compiler.tree.ASTNodeID;
 import org.apache.flex.compiler.tree.as.IASNode;
 import org.apache.flex.compiler.tree.as.IAccessorNode;
@@ -67,7 +62,6 @@ import org.apache.flex.compiler.tree.as.IInterfaceNode;
 import org.apache.flex.compiler.tree.as.ILiteralNode;
 import org.apache.flex.compiler.tree.as.ILiteralNode.LiteralType;
 import org.apache.flex.compiler.tree.as.IMemberAccessExpressionNode;
-import org.apache.flex.compiler.tree.as.IParameterNode;
 import org.apache.flex.compiler.tree.as.ISetterNode;
 import org.apache.flex.compiler.tree.as.ITypedExpressionNode;
 import org.apache.flex.compiler.tree.as.IVariableNode;
@@ -100,10 +94,13 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
     private SuperCallEmitter superCallEmitter;
     private ForEachEmitter forEachEmitter;
     private MemberAccessEmitter memberAccessEmitter;
-    private AsIsEmitter asIsEmitter;
     private BinaryOperatorEmitter binaryOperatorEmitter;
     private IdentifierEmitter identifierEmitter;
 
+    private AsIsEmitter asIsEmitter;
+    private ObjectDefinePropertyEmitter objectDefinePropertyEmitter;
+    private DefinePropertyFunctionEmitter definePropertyFunctionEmitter;
+
     public BindableEmitter getBindableEmitter()
     {
         return bindableEmitter;
@@ -152,6 +149,9 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
         asIsEmitter = new AsIsEmitter(this);
         binaryOperatorEmitter = new BinaryOperatorEmitter(this);
         identifierEmitter = new IdentifierEmitter(this);
+
+        objectDefinePropertyEmitter = new ObjectDefinePropertyEmitter(this);
+        definePropertyFunctionEmitter = new DefinePropertyFunctionEmitter(this);
     }
 
     @Override
@@ -384,128 +384,12 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
     @Override
     protected void emitObjectDefineProperty(IAccessorNode node)
     {
-        //TODO: ajh  is this method needed anymore?
-
-        FunctionNode fn = (FunctionNode) node;
-        fn.parseFunctionBody(getProblems());
-
-        IFunctionDefinition definition = node.getDefinition();
-        ITypeDefinition type = (ITypeDefinition) definition.getParent();
-
-        // ToDo (erikdebruin): add VF2JS conditional -> only use check during full SDK compilation
-        if (type == null)
-            return;
-
-        boolean isBindableSetter = false;
-        if (node instanceof SetterNode)
-        {
-            IMetaInfo[] metaInfos = null;
-            metaInfos = node.getMetaInfos();
-            for (IMetaInfo metaInfo : metaInfos)
-            {
-                String name = metaInfo.getTagName();
-                if (name.equals("Bindable")
-                        && metaInfo.getAllAttributes().length == 0)
-                {
-                    isBindableSetter = true;
-                    break;
-                }
-            }
-        }
-        if (isBindableSetter)
-        {
-            getDocEmitter().emitMethodDoc(fn, getWalker().getProject());
-            write(formatQualifiedName(type.getQualifiedName()));
-            if (!node.hasModifier(ASModifier.STATIC))
-            {
-                write(ASEmitterTokens.MEMBER_ACCESS);
-                write(JSEmitterTokens.PROTOTYPE);
-            }
-
-            write(ASEmitterTokens.MEMBER_ACCESS);
-            write("__bindingWrappedSetter__");
-            writeToken(node.getName());
-            writeToken(ASEmitterTokens.EQUAL);
-            write(ASEmitterTokens.FUNCTION);
-            emitParameters(node.getParameterNodes());
-            //writeNewline();
-            emitMethodScope(node.getScopedNode());
-        }
-        super.emitObjectDefineProperty(node);
+        objectDefinePropertyEmitter.emit(node);
     }
 
     @Override
     public void emitDefinePropertyFunction(IAccessorNode node)
     {
-        boolean isBindableSetter = false;
-        if (node instanceof SetterNode)
-        {
-            IMetaInfo[] metaInfos = null;
-            metaInfos = node.getMetaInfos();
-            for (IMetaInfo metaInfo : metaInfos)
-            {
-                String name = metaInfo.getTagName();
-                if (name.equals("Bindable")
-                        && metaInfo.getAllAttributes().length == 0)
-                {
-                    isBindableSetter = true;
-                    break;
-                }
-            }
-        }
-        if (isBindableSetter)
-        {
-            //write(ASEmitterTokens.FUNCTION);
-            //emitParameters(node.getParameterNodes());
-            write(ASEmitterTokens.SPACE);
-            writeNewline(ASEmitterTokens.BLOCK_OPEN);
-
-            write(ASEmitterTokens.VAR);
-            write(ASEmitterTokens.SPACE);
-            write("oldValue");
-            write(ASEmitterTokens.SPACE);
-            write(ASEmitterTokens.EQUAL);
-            write(ASEmitterTokens.SPACE);
-            write(ASEmitterTokens.THIS);
-            write(ASEmitterTokens.MEMBER_ACCESS);
-            write(node.getName());
-            //write(ASEmitterTokens.PAREN_OPEN);
-            //write(ASEmitterTokens.PAREN_CLOSE);
-            writeNewline(ASEmitterTokens.SEMICOLON);
-
-            // add change check
-            write(ASEmitterTokens.IF);
-            write(ASEmitterTokens.SPACE);
-            write(ASEmitterTokens.PAREN_OPEN);
-            write("oldValue");
-            write(ASEmitterTokens.SPACE);
-            write(ASEmitterTokens.STRICT_EQUAL);
-            write(ASEmitterTokens.SPACE);
-            IParameterNode[] params = node.getParameterNodes();
-            write(params[0].getName());
-            write(ASEmitterTokens.PAREN_CLOSE);
-            write(ASEmitterTokens.SPACE);
-            write(ASEmitterTokens.RETURN);
-            writeNewline(ASEmitterTokens.SEMICOLON);
-
-            write(ASEmitterTokens.THIS);
-            write(ASEmitterTokens.MEMBER_ACCESS);
-            write("__bindingWrappedSetter__" + node.getName());
-            write(ASEmitterTokens.PAREN_OPEN);
-            write(params[0].getName());
-            write(ASEmitterTokens.PAREN_CLOSE);
-            writeNewline(ASEmitterTokens.SEMICOLON);
-
-            // add dispatch of change event
-            writeNewline("    this.dispatchEvent(org_apache_flex_events_ValueChangeEvent.createUpdateEvent(");
-            writeNewline("         this, \"" + node.getName()
-                    + "\", oldValue, " + params[0].getName() + "));");
-            write(ASEmitterTokens.BLOCK_CLOSE);
-            //writeNewline(ASEmitterTokens.SEMICOLON);
-            writeNewline();
-            writeNewline();
-        }
-        else
-            super.emitDefinePropertyFunction(node);
+        definePropertyFunctionEmitter.emit(node);
     }
 }

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/0ca46d2a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
index df64740..12bfb7e 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
@@ -912,6 +912,7 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
         super(out);
     }
 
+    // XXX Dead
     protected void emitObjectDefineProperty(IAccessorNode node)
     {
         /*
@@ -972,6 +973,7 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
         write(ASEmitterTokens.PAREN_CLOSE);
     }
 
+    // XXX Dead
     protected void emitDefinePropertyFunction(IAccessorNode node)
     {
         emitMethodScope(node.getScopedNode());

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/0ca46d2a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/DefinePropertyFunctionEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/DefinePropertyFunctionEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/DefinePropertyFunctionEmitter.java
new file mode 100644
index 0000000..2d61ed8
--- /dev/null
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/DefinePropertyFunctionEmitter.java
@@ -0,0 +1,120 @@
+/*
+ *
+ *  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.js.jx;
+
+import org.apache.flex.compiler.codegen.ISubEmitter;
+import org.apache.flex.compiler.codegen.js.IJSEmitter;
+import org.apache.flex.compiler.common.IMetaInfo;
+import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitter;
+import org.apache.flex.compiler.internal.tree.as.SetterNode;
+import org.apache.flex.compiler.tree.as.IAccessorNode;
+import org.apache.flex.compiler.tree.as.IParameterNode;
+
+public class DefinePropertyFunctionEmitter extends JSSubEmitter implements
+        ISubEmitter<IAccessorNode>
+{
+
+    public DefinePropertyFunctionEmitter(IJSEmitter emitter)
+    {
+        super(emitter);
+    }
+
+    @Override
+    public void emit(IAccessorNode node)
+    {
+        // TODO (mschmalle) will remove this cast as more things get abstracted
+        JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
+
+        boolean isBindableSetter = false;
+        if (node instanceof SetterNode)
+        {
+            IMetaInfo[] metaInfos = null;
+            metaInfos = node.getMetaInfos();
+            for (IMetaInfo metaInfo : metaInfos)
+            {
+                String name = metaInfo.getTagName();
+                if (name.equals("Bindable")
+                        && metaInfo.getAllAttributes().length == 0)
+                {
+                    isBindableSetter = true;
+                    break;
+                }
+            }
+        }
+        if (isBindableSetter)
+        {
+            //write(ASEmitterTokens.FUNCTION);
+            //emitParameters(node.getParameterNodes());
+            write(ASEmitterTokens.SPACE);
+            writeNewline(ASEmitterTokens.BLOCK_OPEN);
+
+            write(ASEmitterTokens.VAR);
+            write(ASEmitterTokens.SPACE);
+            write("oldValue");
+            write(ASEmitterTokens.SPACE);
+            write(ASEmitterTokens.EQUAL);
+            write(ASEmitterTokens.SPACE);
+            write(ASEmitterTokens.THIS);
+            write(ASEmitterTokens.MEMBER_ACCESS);
+            write(node.getName());
+            //write(ASEmitterTokens.PAREN_OPEN);
+            //write(ASEmitterTokens.PAREN_CLOSE);
+            writeNewline(ASEmitterTokens.SEMICOLON);
+
+            // add change check
+            write(ASEmitterTokens.IF);
+            write(ASEmitterTokens.SPACE);
+            write(ASEmitterTokens.PAREN_OPEN);
+            write("oldValue");
+            write(ASEmitterTokens.SPACE);
+            write(ASEmitterTokens.STRICT_EQUAL);
+            write(ASEmitterTokens.SPACE);
+            IParameterNode[] params = node.getParameterNodes();
+            write(params[0].getName());
+            write(ASEmitterTokens.PAREN_CLOSE);
+            write(ASEmitterTokens.SPACE);
+            write(ASEmitterTokens.RETURN);
+            writeNewline(ASEmitterTokens.SEMICOLON);
+
+            write(ASEmitterTokens.THIS);
+            write(ASEmitterTokens.MEMBER_ACCESS);
+            write("__bindingWrappedSetter__" + node.getName());
+            write(ASEmitterTokens.PAREN_OPEN);
+            write(params[0].getName());
+            write(ASEmitterTokens.PAREN_CLOSE);
+            writeNewline(ASEmitterTokens.SEMICOLON);
+
+            // add dispatch of change event
+            writeNewline("    this.dispatchEvent(org_apache_flex_events_ValueChangeEvent.createUpdateEvent(");
+            writeNewline("         this, \"" + node.getName()
+                    + "\", oldValue, " + params[0].getName() + "));");
+            write(ASEmitterTokens.BLOCK_CLOSE);
+            //writeNewline(ASEmitterTokens.SEMICOLON);
+            writeNewline();
+            writeNewline();
+        }
+        else
+        {
+            fjs.emitMethodScope(node.getScopedNode());
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/0ca46d2a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/ObjectDefinePropertyEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/ObjectDefinePropertyEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/ObjectDefinePropertyEmitter.java
new file mode 100644
index 0000000..2a20f6a
--- /dev/null
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/ObjectDefinePropertyEmitter.java
@@ -0,0 +1,166 @@
+/*
+ *
+ *  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.js.jx;
+
+import org.apache.flex.compiler.codegen.ISubEmitter;
+import org.apache.flex.compiler.codegen.js.IJSEmitter;
+import org.apache.flex.compiler.common.ASModifier;
+import org.apache.flex.compiler.common.IMetaInfo;
+import org.apache.flex.compiler.definitions.IFunctionDefinition;
+import org.apache.flex.compiler.definitions.ITypeDefinition;
+import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitter;
+import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitterTokens;
+import org.apache.flex.compiler.internal.tree.as.FunctionNode;
+import org.apache.flex.compiler.internal.tree.as.SetterNode;
+import org.apache.flex.compiler.tree.ASTNodeID;
+import org.apache.flex.compiler.tree.as.IAccessorNode;
+
+public class ObjectDefinePropertyEmitter extends JSSubEmitter implements
+        ISubEmitter<IAccessorNode>
+{
+
+    public ObjectDefinePropertyEmitter(IJSEmitter emitter)
+    {
+        super(emitter);
+    }
+
+    @Override
+    public void emit(IAccessorNode node)
+    {
+        // TODO (mschmalle) will remove this cast as more things get abstracted
+        JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
+
+        //TODO: ajh  is this method needed anymore?
+
+        FunctionNode fn = (FunctionNode) node;
+        fn.parseFunctionBody(fjs.getProblems());
+
+        IFunctionDefinition definition = node.getDefinition();
+        ITypeDefinition type = (ITypeDefinition) definition.getParent();
+
+        // ToDo (erikdebruin): add VF2JS conditional -> only use check during full SDK compilation
+        if (type == null)
+            return;
+
+        boolean isBindableSetter = false;
+        if (node instanceof SetterNode)
+        {
+            IMetaInfo[] metaInfos = null;
+            metaInfos = node.getMetaInfos();
+            for (IMetaInfo metaInfo : metaInfos)
+            {
+                String name = metaInfo.getTagName();
+                if (name.equals("Bindable")
+                        && metaInfo.getAllAttributes().length == 0)
+                {
+                    isBindableSetter = true;
+                    break;
+                }
+            }
+        }
+        if (isBindableSetter)
+        {
+            fjs.getDocEmitter().emitMethodDoc(fn, getWalker().getProject());
+            write(fjs.formatQualifiedName(type.getQualifiedName()));
+            if (!node.hasModifier(ASModifier.STATIC))
+            {
+                write(ASEmitterTokens.MEMBER_ACCESS);
+                write(JSEmitterTokens.PROTOTYPE);
+            }
+
+            write(ASEmitterTokens.MEMBER_ACCESS);
+            write("__bindingWrappedSetter__");
+            writeToken(node.getName());
+            writeToken(ASEmitterTokens.EQUAL);
+            write(ASEmitterTokens.FUNCTION);
+            fjs.emitParameters(node.getParameterNodes());
+            //writeNewline();
+            fjs.emitMethodScope(node.getScopedNode());
+        }
+
+        super_emitObjectDefineProperty(node);
+    }
+
+    protected void super_emitObjectDefineProperty(IAccessorNode node)
+    {
+        // TODO (mschmalle) will remove this cast as more things get abstracted
+        JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
+
+        /*
+        Object.defineProperty(
+            A.prototype, 
+            'foo', 
+            {get: function() {return -1;}, 
+            configurable: true}
+         );
+        */
+
+        FunctionNode fn = (FunctionNode) node;
+        fn.parseFunctionBody(fjs.getProblems());
+
+        // head
+        write(JSGoogEmitterTokens.OBJECT);
+        write(ASEmitterTokens.MEMBER_ACCESS);
+        write(JSEmitterTokens.DEFINE_PROPERTY);
+        fjs.writeNewline(ASEmitterTokens.PAREN_OPEN, true);
+
+        // Type
+        IFunctionDefinition definition = node.getDefinition();
+        ITypeDefinition type = (ITypeDefinition) definition.getParent();
+        write(type.getQualifiedName());
+        if (!node.hasModifier(ASModifier.STATIC))
+        {
+            write(ASEmitterTokens.MEMBER_ACCESS);
+            write(JSEmitterTokens.PROTOTYPE);
+        }
+        writeToken(ASEmitterTokens.COMMA);
+        writeNewline();
+
+        // name
+        write(ASEmitterTokens.SINGLE_QUOTE);
+        write(definition.getBaseName());
+        write(ASEmitterTokens.SINGLE_QUOTE);
+        writeToken(ASEmitterTokens.COMMA);
+        writeNewline();
+
+        // info object
+        // declaration
+        write(ASEmitterTokens.BLOCK_OPEN);
+        write(node.getNodeID() == ASTNodeID.GetterID ? ASEmitterTokens.GET
+                : ASEmitterTokens.SET);
+        write(ASEmitterTokens.COLON);
+        write(ASEmitterTokens.FUNCTION);
+        fjs.emitParameters(node.getParameterNodes());
+
+        fjs.emitDefinePropertyFunction(node);
+
+        writeToken(ASEmitterTokens.COMMA);
+        write(JSEmitterTokens.CONFIGURABLE);
+        write(ASEmitterTokens.COLON);
+        write(ASEmitterTokens.TRUE);
+        fjs.writeNewline(ASEmitterTokens.BLOCK_CLOSE, false);
+
+        // tail, no colon; parent container will add it
+        write(ASEmitterTokens.PAREN_CLOSE);
+    }
+}


[05/35] git commit: [flex-falcon] [refs/heads/IDEA-FLEX_JS_COMPILER] - - Refactored Class emitting into shared jx package for future use. - Refactored Bindable class level emittion; - Refactored GetSet class level emition - Created a shared model for eac

Posted by ft...@apache.org.
- Refactored Class emitting into shared jx package for future use.
- Refactored Bindable class level emittion;
- Refactored GetSet class level emition
- Created a shared model for each emitter session.


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

Branch: refs/heads/IDEA-FLEX_JS_COMPILER
Commit: ab1c421dcd7b60dcef6f118db2379bb5f4bfe8e5
Parents: dca1ad1
Author: Michael Schmalle <ms...@apache.org>
Authored: Sat May 30 17:40:46 2015 -0400
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:40:06 2015 +0100

----------------------------------------------------------------------
 .../js/flexjs/TestFlexJSExpressions.java        |   18 +-
 .../mxml/flexjs/TestFlexJSMXMLScript.java       |    2 +-
 .../flex/compiler/codegen/ISubEmitter.java      |   45 +
 .../flex/compiler/codegen/js/IJSEmitter.java    |    3 +-
 .../compiler/internal/codegen/as/ASEmitter.java |    2 +-
 .../compiler/internal/codegen/js/JSEmitter.java |    9 +
 .../internal/codegen/js/JSSessionModel.java     |   79 +
 .../internal/codegen/js/JSSubEmitter.java       |   99 ++
 .../internal/codegen/js/amd/JSAMDEmitter.java   |    2 +
 .../codegen/js/flexjs/JSFlexJSDocEmitter.java   |  134 +-
 .../codegen/js/flexjs/JSFlexJSEmitter.java      | 1524 +++++++-----------
 .../internal/codegen/js/goog/JSGoogEmitter.java |   33 +-
 .../internal/codegen/js/jx/BindableEmitter.java |   76 +
 .../internal/codegen/js/jx/ClassEmitter.java    |  156 ++
 .../internal/codegen/js/jx/GetSetEmitter.java   |  195 +++
 .../codegen/js/utils/DocEmitterUtils.java       |   49 +
 .../internal/codegen/js/utils/EmitterUtils.java |  121 ++
 .../codegen/js/vf2js/JSVF2JSEmitter.java        |   10 +-
 .../codegen/mxml/flexjs/MXMLFlexJSEmitter.java  |   14 +-
 .../codegen/mxml/vf2js/MXMLVF2JSEmitter.java    |    4 +-
 20 files changed, 1573 insertions(+), 1002 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/ab1c421d/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSExpressions.java
----------------------------------------------------------------------
diff --git a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSExpressions.java b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSExpressions.java
index 9691b70..99fc70f 100644
--- a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSExpressions.java
+++ b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSExpressions.java
@@ -19,7 +19,7 @@
 
 package org.apache.flex.compiler.internal.codegen.js.flexjs;
 
-import org.apache.flex.compiler.definitions.IDefinition;
+import org.apache.flex.compiler.definitions.IClassDefinition;
 import org.apache.flex.compiler.driver.IBackend;
 import org.apache.flex.compiler.internal.codegen.js.goog.TestGoogExpressions;
 import org.apache.flex.compiler.internal.driver.js.flexjs.FlexJSBackend;
@@ -164,9 +164,9 @@ public class TestFlexJSExpressions extends TestGoogExpressions
         IBinaryOperatorNode bnode = (IBinaryOperatorNode) findFirstDescendantOfType(
                 fnode, IBinaryOperatorNode.class);
         ((NodeBase)fnode).setParent(null);
-        IDefinition def = classnode.getDefinition();
+        IClassDefinition def = classnode.getDefinition();
 
-        ((JSFlexJSEmitter)asEmitter).thisClass = def;
+        ((JSFlexJSEmitter)asEmitter).getModel().setCurrentClass(def);
         asBlockWalker.visitBinaryOperator(bnode);
         assertOut("this.b = 1");
     }
@@ -188,9 +188,9 @@ public class TestFlexJSExpressions extends TestGoogExpressions
         IBinaryOperatorNode bnode = (IBinaryOperatorNode) findFirstDescendantOfType(
                 fnode, IBinaryOperatorNode.class);
         ((NodeBase)fnode).setParent(null);
-        IDefinition def = classnode.getDefinition();
+        IClassDefinition def = classnode.getDefinition();
 
-        ((JSFlexJSEmitter)asEmitter).thisClass = def;
+        ((JSFlexJSEmitter)asEmitter).getModel().setCurrentClass(def);
         asBlockWalker.visitBinaryOperator(bnode);
         assertOut("this.b = 1");
     }
@@ -478,9 +478,9 @@ public class TestFlexJSExpressions extends TestGoogExpressions
         IBinaryOperatorNode bnode = (IBinaryOperatorNode) findFirstDescendantOfType(
                 fnode, IBinaryOperatorNode.class);
         ((NodeBase)fnode).setParent(null);
-        IDefinition def = classnode.getDefinition();
+        IClassDefinition def = classnode.getDefinition();
 
-        ((JSFlexJSEmitter)asEmitter).thisClass = def;
+        ((JSFlexJSEmitter)asEmitter).getModel().setCurrentClass(def);
         asBlockWalker.visitBinaryOperator(bnode);
         assertOut("foo_bar_B.d.b = 1");
     }
@@ -538,9 +538,9 @@ public class TestFlexJSExpressions extends TestGoogExpressions
         IBinaryOperatorNode bnode = (IBinaryOperatorNode) findFirstDescendantOfType(
                 fnode, IBinaryOperatorNode.class);
         ((NodeBase)fnode).setParent(null);
-        IDefinition def = classnode.getDefinition();
+        IClassDefinition def = classnode.getDefinition();
 
-        ((JSFlexJSEmitter)asEmitter).thisClass = def;
+        ((JSFlexJSEmitter)asEmitter).getModel().setCurrentClass(def);
         asBlockWalker.visitBinaryOperator(bnode);
         assertOut("org_apache_flex_utils_Language.as(this.model, foo_bar_E, true).labelText = null");
     }

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/ab1c421d/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/TestFlexJSMXMLScript.java
----------------------------------------------------------------------
diff --git a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/TestFlexJSMXMLScript.java b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/TestFlexJSMXMLScript.java
index 8984cd4..6d79603 100644
--- a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/TestFlexJSMXMLScript.java
+++ b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/TestFlexJSMXMLScript.java
@@ -40,7 +40,7 @@ public class TestFlexJSMXMLScript extends FlexJSTestBase
 
         IMXMLDocumentNode dnode = (IMXMLDocumentNode) node
         	.getAncestorOfType(IMXMLDocumentNode.class);
-        ((JSFlexJSEmitter)(mxmlBlockWalker.getASEmitter())).thisClass = dnode.getDefinition();
+        ((JSFlexJSEmitter)(mxmlBlockWalker.getASEmitter())).getModel().setCurrentClass(dnode.getDefinition());
         mxmlBlockWalker.visitDocument(dnode);
         String appName = dnode.getQualifiedName();
         String outTemplate = "/**\n * AppName\n *\n * @fileoverview\n *\n * @suppress {checkTypes}\n */\n\ngoog.provide('AppName');\n\ngoog.require('org_apache_flex_core_Application');\n\n\n\n\n/**\n * @constructor\n * @extends {org_apache_flex_core_Application}\n */\nAppName = function() {\n  AppName.base(this, 'constructor');\n  \n  /**\n   * @private\n   * @type {Array}\n   */\n  this.mxmldd;\n  \n  /**\n   * @private\n   * @type {Array}\n   */\n  this.mxmldp;\n};\ngoog.inherits(AppName, org_apache_flex_core_Application);\n\n\n/**\n * Metadata\n *\n * @type {Object.<string, Array.<Object>>}\n */\nAppName.prototype.FLEXJS_CLASS_INFO = { names: [{ name: 'AppName', qName: 'AppName' }] };\n\n\n/**\n * @expose\n * @override\n */\nAppName.prototype.addedToParent = function() {\n  AppName.base(this, 'addedToParent');\n};\n\n\n";

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/ab1c421d/compiler.jx/src/org/apache/flex/compiler/codegen/ISubEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/codegen/ISubEmitter.java b/compiler.jx/src/org/apache/flex/compiler/codegen/ISubEmitter.java
new file mode 100644
index 0000000..1431c4b
--- /dev/null
+++ b/compiler.jx/src/org/apache/flex/compiler/codegen/ISubEmitter.java
@@ -0,0 +1,45 @@
+/*
+ *
+ *  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.codegen;
+
+import org.apache.flex.compiler.tree.as.IASNode;
+
+/**
+ * The {@link IEmitter} emitter can use composition for it's more
+ * complicated production sequences with member, dynamic, binary expressions and
+ * identifiers etc.
+ * 
+ * @author Michael Schmalle
+ */
+public interface ISubEmitter<T>
+{
+    /**
+     * The main emitter will call this method of the sub emitter with the
+     * correct generic type implemented.
+     * <p>
+     * The main idea here is abstraction. Producing JavaScript can get
+     * complicated, the best way to avoid bugs is to avoid as much state and
+     * interdependence between emit() calls of the main emitter.
+     * 
+     * @param node The current {@link IASNode} being emitted by the
+     * {@link IEmitter}.
+     */
+    void emit(T node);
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/ab1c421d/compiler.jx/src/org/apache/flex/compiler/codegen/js/IJSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/codegen/js/IJSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/codegen/js/IJSEmitter.java
index 09bb858..01444e7 100644
--- a/compiler.jx/src/org/apache/flex/compiler/codegen/js/IJSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/codegen/js/IJSEmitter.java
@@ -22,6 +22,7 @@ package org.apache.flex.compiler.codegen.js;
 import java.io.Writer;
 
 import org.apache.flex.compiler.codegen.as.IASEmitter;
+import org.apache.flex.compiler.internal.codegen.js.JSSessionModel;
 import org.apache.flex.compiler.visitor.IASNodeStrategy;
 
 /**
@@ -32,5 +33,5 @@ import org.apache.flex.compiler.visitor.IASNodeStrategy;
  */
 public interface IJSEmitter extends IASEmitter
 {
-
+    JSSessionModel getModel();
 }

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/ab1c421d/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
index b7db495..423571b 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
@@ -717,7 +717,7 @@ public class ASEmitter implements IASEmitter, IEmitter
         getWalker().walk(node.getNameExpressionNode());
     }
 
-    protected void emitParameters(IParameterNode[] nodes)
+    public void emitParameters(IParameterNode[] nodes)
     {
         write(ASEmitterTokens.PAREN_OPEN);
         int len = nodes.length;

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/ab1c421d/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSEmitter.java
index 6fb5576..4eb6ccb 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSEmitter.java
@@ -33,10 +33,19 @@ import org.apache.flex.compiler.tree.as.IFunctionObjectNode;
  */
 public class JSEmitter extends ASEmitter implements IJSEmitter
 {
+    private JSSessionModel model;
+    
+    @Override
+    public JSSessionModel getModel()
+    {
+        return model;
+    }
 
     public JSEmitter(FilterWriter out)
     {
         super(out);
+        
+        model = new JSSessionModel();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/ab1c421d/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSSessionModel.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSSessionModel.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSSessionModel.java
new file mode 100644
index 0000000..97cc52b
--- /dev/null
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSSessionModel.java
@@ -0,0 +1,79 @@
+/*
+ *
+ *  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.js;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+import org.apache.flex.compiler.definitions.IClassDefinition;
+import org.apache.flex.compiler.tree.as.IGetterNode;
+import org.apache.flex.compiler.tree.as.ISetterNode;
+
+/**
+ * @author Michael Schmalle
+ */
+public class JSSessionModel
+{
+    private IClassDefinition currentClass;
+
+    public static class PropertyNodes
+    {
+        public IGetterNode getter;
+        public ISetterNode setter;
+    }
+
+    private HashMap<String, PropertyNodes> propertyMap = new HashMap<String, PropertyNodes>();
+    
+    private HashMap<String, PropertyNodes> staticPropertyMap = new HashMap<String, PropertyNodes>();
+    
+    private ArrayList<String> bindableVars = new ArrayList<String>();
+
+    public IClassDefinition getCurrentClass()
+    {
+        return currentClass;
+    }
+
+    public void setCurrentClass(IClassDefinition currentClass)
+    {
+        this.currentClass = currentClass;
+    }
+
+    public HashMap<String, PropertyNodes> getPropertyMap()
+    {
+        return propertyMap;
+    }
+    
+    public HashMap<String, PropertyNodes> getStaticPropertyMap()
+    {
+        return staticPropertyMap;
+    }
+    
+    public boolean hasBindableVars()
+    {
+        return bindableVars.size() > 0;
+    }
+
+    public List<String> getBindableVars()
+    {
+        return bindableVars;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/ab1c421d/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSSubEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSSubEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSSubEmitter.java
new file mode 100644
index 0000000..00ed207
--- /dev/null
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSSubEmitter.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.js;
+
+import org.apache.flex.compiler.codegen.IEmitterTokens;
+import org.apache.flex.compiler.codegen.js.IJSEmitter;
+import org.apache.flex.compiler.projects.ICompilerProject;
+
+public class JSSubEmitter
+{
+    private IJSEmitter emitter;
+
+    protected IJSEmitter getEmitter()
+    {
+        return emitter; 
+    }
+
+    protected ICompilerProject getProject()
+    {
+        return emitter.getWalker().getProject();
+    }
+
+    protected JSSessionModel getModel()
+    {
+        return emitter.getModel();
+    }
+
+    public JSSubEmitter(IJSEmitter emitter)
+    {
+        this.emitter = emitter;
+    }
+
+    protected void write(IEmitterTokens value)
+    {
+        emitter.write(value);
+    }
+
+    protected void write(String value)
+    {
+        emitter.write(value);
+    }
+
+    protected void writeToken(IEmitterTokens value)
+    {
+        emitter.writeToken(value);
+    }
+
+    protected void writeToken(String value)
+    {
+        emitter.writeToken(value);
+    }
+
+    protected void writeNewline()
+    {
+        emitter.writeNewline();
+    }
+
+    protected void writeNewline(IEmitterTokens value)
+    {
+        emitter.writeNewline(value);
+    }
+
+    protected void writeNewline(String value)
+    {
+        emitter.writeNewline(value);
+    }
+
+    protected void writeNewline(String value, boolean pushIndent)
+    {
+        emitter.writeNewline(value, pushIndent);
+    }
+
+    protected void indentPush()
+    {
+        emitter.indentPush();
+    }
+
+    protected void indentPop()
+    {
+        emitter.indentPop();
+    }
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/ab1c421d/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/amd/JSAMDEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/amd/JSAMDEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/amd/JSAMDEmitter.java
index bc45058..8dcbb2c 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/amd/JSAMDEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/amd/JSAMDEmitter.java
@@ -251,6 +251,8 @@ public class JSAMDEmitter extends JSEmitter implements IJSAMDEmitter
         //ICompilerProject project = getWalker().getProject();
 
         IClassDefinition definition = node.getDefinition();
+        getModel().setCurrentClass(definition);
+
         final String className = definition.getBaseName();
 
         write("AS3.compilationUnit($exports, function($primaryDeclaration){");

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/ab1c421d/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 701bb99..b7ba9bd 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
@@ -20,6 +20,7 @@
 package org.apache.flex.compiler.internal.codegen.js.flexjs;
 
 import java.util.ArrayList;
+import java.util.List;
 
 import org.apache.flex.compiler.asdoc.flexjs.ASDocComment;
 import org.apache.flex.compiler.clients.MXMLJSC;
@@ -46,50 +47,59 @@ import org.apache.flex.compiler.tree.as.IVariableNode;
 
 public class JSFlexJSDocEmitter extends JSGoogDocEmitter
 {
+    private List<String> classIgnoreList;
+    private List<String> ignoreList;
 
     public JSFlexJSDocEmitter(IJSEmitter emitter)
     {
         super(emitter);
     }
 
-    public ArrayList<String> classIgnoreList;
-    private ArrayList<String> ignoreList;
+    public List<String> getClassIgnoreList()
+    {
+        return classIgnoreList;
+    }
     
+    public void setClassIgnoreList(List<String> value)
+    {
+        this.classIgnoreList = value;
+    }
+
     @Override
     protected String convertASTypeToJS(String name, String pname)
     {
-    	if (ignoreList != null)
-    	{
-    		if (ignoreList.contains(pname + "." + name))
-    			return IASLanguageConstants.Object;
-    	}
-    	if (classIgnoreList != null)
-    	{
-    		if (classIgnoreList.contains(pname + "." + name))
-    			return IASLanguageConstants.Object;
-    	}
-    	name = super.convertASTypeToJS(name, pname);
-    	return formatQualifiedName(name);
+        if (ignoreList != null)
+        {
+            if (ignoreList.contains(pname + "." + name))
+                return IASLanguageConstants.Object;
+        }
+        if (classIgnoreList != null)
+        {
+            if (classIgnoreList.contains(pname + "." + name))
+                return IASLanguageConstants.Object;
+        }
+        name = super.convertASTypeToJS(name, pname);
+        return formatQualifiedName(name);
     }
-    
+
     @Override
     protected String formatQualifiedName(String name)
     {
-    	if (name.contains("goog.") || name.startsWith("Vector."))
-    		return name;
-    	name = name.replaceAll("\\.", "_");
-    	return name;
+        if (name.contains("goog.") || name.startsWith("Vector."))
+            return name;
+        name = name.replaceAll("\\.", "_");
+        return name;
     }
 
     @Override
     public void emitMethodDoc(IFunctionNode node, ICompilerProject project)
     {
         ignoreList = null;
-        
+
         IClassDefinition classDefinition = resolveClassDefinition(node);
 
         ASDocComment asDoc = (ASDocComment) node.getASDocComment();
-        
+
         if (node instanceof IFunctionNode)
         {
             boolean hasDoc = false;
@@ -122,7 +132,9 @@ public class JSFlexJSDocEmitter extends JSGoogDocEmitter
                                     .getContainingScope(),
                                     DependencyType.INHERITANCE, true);
                     if (type == null)
-                    	System.out.println(iReference.getDisplayString() + " not resolved in " + classDefinition.getQualifiedName());
+                        System.out.println(iReference.getDisplayString()
+                                + " not resolved in "
+                                + classDefinition.getQualifiedName());
                     emitImplements(type, type.getPackageName());
                 }
             }
@@ -133,10 +145,11 @@ public class JSFlexJSDocEmitter extends JSGoogDocEmitter
                 {
                     if (asDoc != null && MXMLJSC.keepASDoc)
                     {
-                    	String docText = asDoc.commentNoEnd();
-    		            String ignoreToken = JSFlexJSEmitterTokens.IGNORE_COERCION.getToken();
-                    	if (docText.contains(ignoreToken))
-                    		loadIgnores(docText);
+                        String docText = asDoc.commentNoEnd();
+                        String ignoreToken = JSFlexJSEmitterTokens.IGNORE_COERCION
+                                .getToken();
+                        if (docText.contains(ignoreToken))
+                            loadIgnores(docText);
                         write(changeAnnotations(asDoc.commentNoEnd()));
                     }
                     else
@@ -166,7 +179,7 @@ public class JSFlexJSDocEmitter extends JSGoogDocEmitter
                 ITypeDefinition tdef = enode.resolveType(project);
                 if (tdef == null)
                     continue;
-                
+
                 emitParam(pnode, tdef.getPackageName());
             }
 
@@ -187,12 +200,12 @@ public class JSFlexJSDocEmitter extends JSGoogDocEmitter
                         hasDoc = true;
                     }
 
-                    ITypeDefinition tdef = ((IFunctionDefinition)node.getDefinition())
-                            .resolveReturnType(project);
+                    ITypeDefinition tdef = ((IFunctionDefinition) node
+                            .getDefinition()).resolveReturnType(project);
 
                     String packageName = "";
                     packageName = tdef.getPackageName();
-                    
+
                     emitReturn(node, packageName);
                 }
 
@@ -221,38 +234,40 @@ public class JSFlexJSDocEmitter extends JSGoogDocEmitter
 
     private void loadIgnores(String doc)
     {
-    	ignoreList = new ArrayList<String>();
-    	String ignoreToken = JSFlexJSEmitterTokens.IGNORE_COERCION.getToken();
-    	int index = doc.indexOf(ignoreToken);
-    	while (index != -1)
-    	{
-        	String ignorable = doc.substring(index + ignoreToken.length());
-        	int endIndex = ignorable.indexOf("\n");
-        	ignorable = ignorable.substring(0, endIndex);
-        	ignorable = ignorable.trim();
-    		ignoreList.add(ignorable);
-    		index = doc.indexOf(ignoreToken, index + endIndex);
-    	}
+        ignoreList = new ArrayList<String>();
+        String ignoreToken = JSFlexJSEmitterTokens.IGNORE_COERCION.getToken();
+        int index = doc.indexOf(ignoreToken);
+        while (index != -1)
+        {
+            String ignorable = doc.substring(index + ignoreToken.length());
+            int endIndex = ignorable.indexOf("\n");
+            ignorable = ignorable.substring(0, endIndex);
+            ignorable = ignorable.trim();
+            ignoreList.add(ignorable);
+            index = doc.indexOf(ignoreToken, index + endIndex);
+        }
     }
+
     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;
+        // 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)
+
+    public void emitInterfaceMemberDoc(IDefinitionNode node,
+            ICompilerProject project)
     {
         boolean hasDoc = false;
-        
-        ASDocComment asDoc = (ASDocComment) ((IFunctionNode) node).getASDocComment();
-        
+
+        ASDocComment asDoc = (ASDocComment) ((IFunctionNode) node)
+                .getASDocComment();
+
         String returnType = ((IFunctionNode) node).getReturnType();
-        if (returnType != ""
-                && returnType != ASEmitterTokens.VOID.getToken()) // has return
+        if (returnType != "" && returnType != ASEmitterTokens.VOID.getToken()) // has return
         {
             if (asDoc != null && MXMLJSC.keepASDoc)
                 write(changeAnnotations(asDoc.commentNoEnd()));
@@ -260,13 +275,14 @@ public class JSFlexJSDocEmitter extends JSGoogDocEmitter
                 begin();
             hasDoc = true;
 
-            ITypeDefinition tdef = ((IFunctionDefinition)node.getDefinition())
+            ITypeDefinition tdef = ((IFunctionDefinition) node.getDefinition())
                     .resolveReturnType(project);
 
             emitReturn((IFunctionNode) node, tdef.getPackageName());
         }
 
-        IParameterNode[] parameters = ((IFunctionNode) node).getParameterNodes();
+        IParameterNode[] parameters = ((IFunctionNode) node)
+                .getParameterNodes();
         for (IParameterNode pnode : parameters)
         {
             if (!hasDoc)
@@ -303,7 +319,7 @@ public class JSFlexJSDocEmitter extends JSGoogDocEmitter
             emitPublic(node);
         }
     }
-    
+
     @Override
     public void emitFieldDoc(IVariableNode node, IDefinition def)
     {
@@ -320,7 +336,7 @@ public class JSFlexJSDocEmitter extends JSGoogDocEmitter
         }
         else
         {
-        	emitPublic(node);
+            emitPublic(node);
         }
 
         if (node.isConst())


[02/35] git commit: [flex-falcon] [refs/heads/IDEA-FLEX_JS_COMPILER] - Update README to make it more consistent when referring to repo/directory names

Posted by ft...@apache.org.
Update README to make it more consistent when referring to repo/directory names


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

Branch: refs/heads/IDEA-FLEX_JS_COMPILER
Commit: dca1ad1f0826e7c9aca5dfde5178d2bce475b3b0
Parents: 85e25c1
Author: Om Muppirala <om...@machinezone.com>
Authored: Wed May 27 12:59:27 2015 -0700
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:40:03 2015 +0100

----------------------------------------------------------------------
 README | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/dca1ad1f/README
----------------------------------------------------------------------
diff --git a/README b/README
index 4958d43..dd520e8 100644
--- a/README
+++ b/README
@@ -28,23 +28,23 @@ Getting the latest sources via git
     You can always checkout the latest source via git using the following
     command:
 
-	 git clone https://git-wip-us.apache.org/repos/asf/flex-falcon.git falcon
-	 cd falcon
+	 git clone https://git-wip-us.apache.org/repos/asf/flex-falcon.git flex-falcon
+	 cd flex-falcon
 	 git checkout develop
 
     The Apache Flex Compiler also requires code from other Apache Flex git
     repositories or an Apache Flex SDK.  To get the latest source via git 
     for the Apache Flex SDK use the following command:
 
-	 git clone https://git-wip-us.apache.org/repos/asf/flex-sdk.git sdk
-	 cd sdk
+	 git clone https://git-wip-us.apache.org/repos/asf/flex-sdk.git flex-sdk
+	 cd flex-sdk
 	 git checkout develop
 
     The Apache Flex SDK requires the Text Layout Framework repository which
     you can get as follows:
 
-	 git clone https://git-wip-us.apache.org/repos/asf/flex-tlf.git tlf
-	 cd tlf
+	 git clone https://git-wip-us.apache.org/repos/asf/flex-tlf.git flex-tlf
+	 cd flex-tlf
 	 git checkout develop
 
     To use an Apache Flex SDK, install an Apache Flex SDK on your computer and


[35/35] git commit: [flex-falcon] [refs/heads/IDEA-FLEX_JS_COMPILER] - Added a TODO because I don't know the ICompilerProblem to use or create at the moment.

Posted by ft...@apache.org.
Added a TODO because I don't know the ICompilerProblem to use or create at the moment.


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

Branch: refs/heads/IDEA-FLEX_JS_COMPILER
Commit: 2a9b27c02fc5547040eaab2228c164cb42848d21
Parents: 55443ff
Author: Frédéric THOMAS <we...@gmail.com>
Authored: Tue Jun 2 13:35:18 2015 +0100
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:41:48 2015 +0100

----------------------------------------------------------------------
 .../src/org/apache/flex/compiler/internal/graph/GoogDepsWriter.java | 1 +
 1 file changed, 1 insertion(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/2a9b27c0/compiler.jx/src/org/apache/flex/compiler/internal/graph/GoogDepsWriter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/graph/GoogDepsWriter.java b/compiler.jx/src/org/apache/flex/compiler/internal/graph/GoogDepsWriter.java
index b53e126..bac500a 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/graph/GoogDepsWriter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/graph/GoogDepsWriter.java
@@ -170,6 +170,7 @@ public class GoogDepsWriter {
 		gd.className = className;
 		gd.filePath = getFilePath(className);
 		if(gd.filePath.isEmpty()) {
+			// TODO Send a ICompilerProblem instead.
 			throw new RuntimeException("Unable to find JavaScript filePath for class: " + className);
 		}
 		depMap.put(gd.className, gd);


[25/35] git commit: [flex-falcon] [refs/heads/IDEA-FLEX_JS_COMPILER] - Removed getDoc() with getDocEmitter(), override with interface.

Posted by ft...@apache.org.
Removed getDoc() with getDocEmitter(), override with interface.


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

Branch: refs/heads/IDEA-FLEX_JS_COMPILER
Commit: 26deda9b18b9045a41fd9f1efd50576ce6832df1
Parents: 8393290
Author: Michael Schmalle <ms...@apache.org>
Authored: Sun May 31 14:20:04 2015 -0400
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:41:14 2015 +0100

----------------------------------------------------------------------
 .../codegen/js/flexjs/JSFlexJSEmitter.java      |   7 +-
 .../internal/codegen/js/goog/JSGoogEmitter.java |  23 +-
 .../codegen/js/vf2js/JSVF2JSEmitter.java        | 449 ++++++++++---------
 3 files changed, 251 insertions(+), 228 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/26deda9b/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 5b8b1fe..d9b1c4e 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
@@ -21,8 +21,8 @@ package org.apache.flex.compiler.internal.codegen.js.flexjs;
 
 import java.io.FilterWriter;
 
-import org.apache.flex.compiler.codegen.IDocEmitter;
 import org.apache.flex.compiler.codegen.js.flexjs.IJSFlexJSEmitter;
+import org.apache.flex.compiler.codegen.js.goog.IJSGoogDocEmitter;
 import org.apache.flex.compiler.common.ASModifier;
 import org.apache.flex.compiler.common.IMetaInfo;
 import org.apache.flex.compiler.definitions.IFunctionDefinition;
@@ -110,8 +110,9 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
         return accessorEmitter;
     }
 
+    // TODO (mschmalle) Fix; this is not using the backend doc strategy for replacement
     @Override
-    public IDocEmitter getDocEmitter()
+    public IJSGoogDocEmitter getDocEmitter()
     {
         if (docEmitter == null)
             docEmitter = new JSFlexJSDocEmitter(this);
@@ -283,7 +284,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
         }
         if (isBindableSetter)
         {
-            getDoc().emitMethodDoc(fn, getWalker().getProject());
+            getDocEmitter().emitMethodDoc(fn, getWalker().getProject());
             write(formatQualifiedName(type.getQualifiedName()));
             if (!node.hasModifier(ASModifier.STATIC))
             {

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/26deda9b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
index b685fe0..c431553 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
@@ -26,7 +26,6 @@ import java.util.List;
 import java.util.Map;
 
 import org.apache.flex.compiler.codegen.IASGlobalFunctionConstants.BuiltinType;
-import org.apache.flex.compiler.codegen.IDocEmitter;
 import org.apache.flex.compiler.codegen.js.goog.IJSGoogDocEmitter;
 import org.apache.flex.compiler.codegen.js.goog.IJSGoogEmitter;
 import org.apache.flex.compiler.common.ASModifier;
@@ -88,15 +87,15 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
     // TODO (mschmalle) Remove this (not used in JSFlexJSEmitter and JSGoogEmitter anymore)
     public ICompilerProject project;
 
-    protected IJSGoogDocEmitter getDoc()
-    {
-        return (IJSGoogDocEmitter) getDocEmitter();
-    }
+    private JSGoogDocEmitter docEmitter;
 
+    // TODO (mschmalle) Fix; this is not using the backend doc strategy for replacement
     @Override
-    public IDocEmitter getDocEmitter()
+    public IJSGoogDocEmitter getDocEmitter()
     {
-        return new JSGoogDocEmitter(this);
+        if (docEmitter == null)
+            docEmitter = new JSGoogDocEmitter(this);
+        return docEmitter;
     }
 
     protected void writeIndent()
@@ -267,7 +266,7 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
     {
         ICompilerProject project = getWalker().getProject();
 
-        getDoc().emitInterfaceDoc(node, project);
+        getDocEmitter().emitInterfaceDoc(node, project);
 
         String qname = node.getQualifiedName();
         if (qname != null && !qname.equals(""))
@@ -334,7 +333,7 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
         if (enode != null)
             def = enode.resolveType(getWalker().getProject());
 
-        getDoc().emitFieldDoc(node, def);
+        getDocEmitter().emitFieldDoc(node, def);
 
         /* x.prototype.y = z */
 
@@ -388,11 +387,11 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
 
             String opcode = avnode.getNodeID().getParaphrase();
             if (opcode != "AnonymousFunction")
-                getDoc().emitVarDoc(node, def);
+                getDocEmitter().emitVarDoc(node, def);
         }
         else
         {
-            getDoc().emitVarDoc(node, null);
+            getDocEmitter().emitVarDoc(node, null);
         }
 
         emitDeclarationName(node);
@@ -458,7 +457,7 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
 
         ICompilerProject project = getWalker().getProject();
 
-        getDoc().emitMethodDoc(node, project);
+        getDocEmitter().emitMethodDoc(node, project);
 
         boolean isConstructor = node.isConstructor();
 

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/26deda9b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
index b11193b..dab4472 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
@@ -29,7 +29,7 @@ import java.util.Map;
 import java.util.Set;
 
 import org.apache.flex.compiler.codegen.IASGlobalFunctionConstants;
-import org.apache.flex.compiler.codegen.IDocEmitter;
+import org.apache.flex.compiler.codegen.js.goog.IJSGoogDocEmitter;
 import org.apache.flex.compiler.codegen.js.vf2js.IJSVF2JSEmitter;
 import org.apache.flex.compiler.common.ASModifier;
 import org.apache.flex.compiler.common.ModifiersSet;
@@ -207,7 +207,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
     {
         ICompilerProject project = getWalker().getProject();
 
-        getDoc().emitInterfaceDoc(node, project);
+        getDocEmitter().emitInterfaceDoc(node, project);
 
         String qname = parseQualifiedName(node);
         if (qname != null && !qname.equals(""))
@@ -225,7 +225,6 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
             write(ASEmitterTokens.SEMICOLON);
         }
 
-        
         final IDefinitionNode[] members = node.getAllMemberDefinitionNodes();
         for (IDefinitionNode mnode : members)
         {
@@ -236,8 +235,8 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
             writeNewline();
             writeNewline();
 
-            getDoc().emitInterfaceMemberDoc((IFunctionNode) mnode, project);
-            
+            getDocEmitter().emitInterfaceMemberDoc(mnode, project);
+
             write(qname);
             write(ASEmitterTokens.MEMBER_ACCESS);
             write(JSEmitterTokens.PROTOTYPE);
@@ -277,11 +276,11 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
 
         if (node.isConstructor())
         {
-        	emitVarNonLiteralAssignments();
+            emitVarNonLiteralAssignments();
         }
-        
-        if (node.isConstructor()
-                && hasSuperClass(node) && !hasSuperCall(node.getScopedNode()))
+
+        if (node.isConstructor() && hasSuperClass(node)
+                && !hasSuperCall(node.getScopedNode()))
             emitSuperCall(node, JSSessionModel.CONSTRUCTOR_FULL);
     }
 
@@ -290,50 +289,49 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
         // (erikdebruin): If the initial value of a variable is set using
         //                a method, JS needs this initialization to be done
         //                in the constructor
-    	IClassNode cdnode = (IClassNode) getModel().getCurrentClass().getNode();
+        IClassNode cdnode = (IClassNode) getModel().getCurrentClass().getNode();
         IDefinitionNode[] dnodes = cdnode.getAllMemberNodes();
         for (IDefinitionNode dnode : dnodes)
         {
             if (dnode.getNodeID() == ASTNodeID.VariableID)
             {
-            	IVariableNode vnode = (IVariableNode) dnode;
-            	IExpressionNode avnode = vnode.getAssignedValueNode();
-                if (avnode != null && 
-            		!(avnode instanceof ILiteralNode) && 
-            		!(avnode instanceof IEmbedNode))
+                IVariableNode vnode = (IVariableNode) dnode;
+                IExpressionNode avnode = vnode.getAssignedValueNode();
+                if (avnode != null && !(avnode instanceof ILiteralNode)
+                        && !(avnode instanceof IEmbedNode))
                 {
-                	writeNewline("", true);
-                	if (vnode.hasModifier(ASModifier.STATIC))
-                	{
-                		write(parseQualifiedName(cdnode));
-                	}
-                	else
-                	{
-                		write(ASEmitterTokens.THIS);
-                	}
-                	write(ASEmitterTokens.MEMBER_ACCESS);
-                	writeToken(vnode.getName());
-                	writeToken(ASEmitterTokens.EQUAL);
-                	getWalker().walk(avnode);
-                	indentPop();
-                	writeNewline(ASEmitterTokens.SEMICOLON);
+                    writeNewline("", true);
+                    if (vnode.hasModifier(ASModifier.STATIC))
+                    {
+                        write(parseQualifiedName(cdnode));
+                    }
+                    else
+                    {
+                        write(ASEmitterTokens.THIS);
+                    }
+                    write(ASEmitterTokens.MEMBER_ACCESS);
+                    writeToken(vnode.getName());
+                    writeToken(ASEmitterTokens.EQUAL);
+                    getWalker().walk(avnode);
+                    indentPop();
+                    writeNewline(ASEmitterTokens.SEMICOLON);
                 }
             }
         }
     }
-    
+
     @Override
     public void emitVarDeclaration(IVariableNode node)
     {
         if (!(node instanceof ChainedVariableNode))
         {
-        	// (erikdebruin): check for 'var i:int = 0, j:int = 0' containers
-        	IASNode pnode = node.getParent();
-        	if (!(pnode instanceof IVariableExpressionNode) || 
-        			node.getChild(0) instanceof IKeywordNode)
-        	{
-        		emitMemberKeyword(node);
-        	}
+            // (erikdebruin): check for 'var i:int = 0, j:int = 0' containers
+            IASNode pnode = node.getParent();
+            if (!(pnode instanceof IVariableExpressionNode)
+                    || node.getChild(0) instanceof IKeywordNode)
+            {
+                emitMemberKeyword(node);
+            }
         }
 
         IExpressionNode avnode = node.getAssignedValueNode();
@@ -343,16 +341,16 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
 
             String opcode = avnode.getNodeID().getParaphrase();
             if (opcode != "AnonymousFunction")
-                getDoc().emitVarDoc(node, def);
+                getDocEmitter().emitVarDoc(node, def);
         }
         else
         {
-            getDoc().emitVarDoc(node, null);
+            getDocEmitter().emitVarDoc(node, null);
         }
 
         emitDeclarationName(node);
         if (!(avnode instanceof IEmbedNode))
-        	emitAssignedValue(avnode);
+            emitAssignedValue(avnode);
 
         if (!(node instanceof ChainedVariableNode))
         {
@@ -398,7 +396,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
             def = enode.resolveType(project);
         }
 
-        getDoc().emitFieldDoc(node, def);
+        getDocEmitter().emitFieldDoc(node, def);
 
         IDefinition ndef = node.getDefinition();
 
@@ -448,40 +446,52 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
             writeNewline("@expose");
             writeNewline(" */");
             writeNewline(parseQualifiedName(definition)
-                    + ASEmitterTokens.MEMBER_ACCESS.getToken() + root
-                    + "get_" + node.getName()
-                    + ASEmitterTokens.SPACE.getToken() + ASEmitterTokens.EQUAL.getToken()
-                    + ASEmitterTokens.SPACE.getToken() + ASEmitterTokens.FUNCTION.getToken()
-                    + ASEmitterTokens.PAREN_OPEN.getToken() + ASEmitterTokens.PAREN_CLOSE.getToken()
-                    + ASEmitterTokens.SPACE.getToken() + ASEmitterTokens.BLOCK_OPEN.getToken());
-            writeNewline(ASEmitterTokens.RETURN.getToken() + ASEmitterTokens.SPACE.getToken()
-                    + ASEmitterTokens.THIS.getToken() + ASEmitterTokens.MEMBER_ACCESS.getToken()
-                    + node.getName() + ASEmitterTokens.SEMICOLON.getToken());
-            writeNewline(ASEmitterTokens.BLOCK_CLOSE.getToken() + ASEmitterTokens.SEMICOLON.getToken());
+                    + ASEmitterTokens.MEMBER_ACCESS.getToken() + root + "get_"
+                    + node.getName() + ASEmitterTokens.SPACE.getToken()
+                    + ASEmitterTokens.EQUAL.getToken()
+                    + ASEmitterTokens.SPACE.getToken()
+                    + ASEmitterTokens.FUNCTION.getToken()
+                    + ASEmitterTokens.PAREN_OPEN.getToken()
+                    + ASEmitterTokens.PAREN_CLOSE.getToken()
+                    + ASEmitterTokens.SPACE.getToken()
+                    + ASEmitterTokens.BLOCK_OPEN.getToken());
+            writeNewline(ASEmitterTokens.RETURN.getToken()
+                    + ASEmitterTokens.SPACE.getToken()
+                    + ASEmitterTokens.THIS.getToken()
+                    + ASEmitterTokens.MEMBER_ACCESS.getToken() + node.getName()
+                    + ASEmitterTokens.SEMICOLON.getToken());
+            writeNewline(ASEmitterTokens.BLOCK_CLOSE.getToken()
+                    + ASEmitterTokens.SEMICOLON.getToken());
             writeNewline();
             writeNewline("/**");
             writeNewline("@expose");
             writeNewline(" */");
             writeNewline(parseQualifiedName(definition)
-                    + ASEmitterTokens.MEMBER_ACCESS.getToken() + root
-                    + "set_" + node.getName()
-                    + ASEmitterTokens.SPACE.getToken() + ASEmitterTokens.EQUAL.getToken()
-                    + ASEmitterTokens.SPACE.getToken() + ASEmitterTokens.FUNCTION.getToken()
-                    + ASEmitterTokens.PAREN_OPEN.getToken() + "value" + ASEmitterTokens.PAREN_CLOSE.getToken()
-                    + ASEmitterTokens.SPACE.getToken() + ASEmitterTokens.BLOCK_OPEN.getToken());
+                    + ASEmitterTokens.MEMBER_ACCESS.getToken() + root + "set_"
+                    + node.getName() + ASEmitterTokens.SPACE.getToken()
+                    + ASEmitterTokens.EQUAL.getToken()
+                    + ASEmitterTokens.SPACE.getToken()
+                    + ASEmitterTokens.FUNCTION.getToken()
+                    + ASEmitterTokens.PAREN_OPEN.getToken() + "value"
+                    + ASEmitterTokens.PAREN_CLOSE.getToken()
+                    + ASEmitterTokens.SPACE.getToken()
+                    + ASEmitterTokens.BLOCK_OPEN.getToken());
             writeNewline("if (value != " + ASEmitterTokens.THIS.getToken()
-                    + ASEmitterTokens.MEMBER_ACCESS.getToken() + node.getName() + ") {");
+                    + ASEmitterTokens.MEMBER_ACCESS.getToken() + node.getName()
+                    + ") {");
             writeNewline("    var oldValue = "
-                    + ASEmitterTokens.THIS.getToken() + ASEmitterTokens.MEMBER_ACCESS.getToken()
-                    + node.getName() + ASEmitterTokens.SEMICOLON.getToken());
-            writeNewline("    " + ASEmitterTokens.THIS.getToken() + ASEmitterTokens.MEMBER_ACCESS.getToken()
-                    + node.getName() + " = value;");
+                    + ASEmitterTokens.THIS.getToken()
+                    + ASEmitterTokens.MEMBER_ACCESS.getToken() + node.getName()
+                    + ASEmitterTokens.SEMICOLON.getToken());
+            writeNewline("    " + ASEmitterTokens.THIS.getToken()
+                    + ASEmitterTokens.MEMBER_ACCESS.getToken() + node.getName()
+                    + " = value;");
             writeNewline("    this.dispatchEvent(org.apache.flex.events.ValueChangeEvent.createUpdateEvent(");
-            writeNewline("         this, \"" + node.getName() + "\", oldValue, value));");
+            writeNewline("         this, \"" + node.getName()
+                    + "\", oldValue, value));");
             writeNewline("}");
             write(ASEmitterTokens.BLOCK_CLOSE.getToken());
-            
-            
+
         }
     }
 
@@ -506,7 +516,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
 
         ICompilerProject project = getWalker().getProject();
 
-        getDoc().emitMethodDoc(node, project);
+        getDocEmitter().emitMethodDoc(node, project);
 
         boolean isConstructor = node.isConstructor();
 
@@ -559,39 +569,43 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
             write(ASEmitterTokens.PAREN_OPEN);
             write(qname);
             writeToken(ASEmitterTokens.COMMA);
-            String sname = parseQualifiedName(getSuperClassDefinition(node, project));
+            String sname = parseQualifiedName(getSuperClassDefinition(node,
+                    project));
             if (sname.equals(IASLanguageConstants.Object))
-            	sname = IASLanguageConstants.Class;
+                sname = IASLanguageConstants.Class;
             write(sname);
             write(ASEmitterTokens.PAREN_CLOSE);
         }
     }
-    
+
     @Override
     protected boolean hasSuperClass(IDefinitionNode node)
     {
         ICompilerProject project = getWalker().getProject();
         IClassDefinition superClassDefinition = getSuperClassDefinition(node,
                 project);
-        
+
         if (superClassDefinition == null)
             return false;
-        
+
         String qname = parseQualifiedName(superClassDefinition);
 
         // ToDo (erikdebruin): need this to get the JS version of the SDK in 
         //                     shape?
-        boolean useClassAsSuperClass = !qname.equals(IASLanguageConstants.Object);
+        boolean useClassAsSuperClass = !qname
+                .equals(IASLanguageConstants.Object);
         if (!useClassAsSuperClass)
         {
-        	if (parseQualifiedName(node).equals("mx.core.EmbeddedFontRegistry") ||
-        		parseQualifiedName(node).equals("mx.managers.HistoryManagerImpl") ||
-        		parseQualifiedName(node).equals("mx.core.TextFieldFactory"))
-        	{
-        		useClassAsSuperClass = true;
-        	}
+            if (parseQualifiedName(node).equals("mx.core.EmbeddedFontRegistry")
+                    || parseQualifiedName(node).equals(
+                            "mx.managers.HistoryManagerImpl")
+                    || parseQualifiedName(node).equals(
+                            "mx.core.TextFieldFactory"))
+            {
+                useClassAsSuperClass = true;
+            }
         }
-        
+
         return superClassDefinition != null && useClassAsSuperClass;
     }
 
@@ -622,9 +636,8 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
 
                 def = node.getNameNode().resolve(project);
 
-                isClassCast = (def instanceof ClassDefinition ||
-                        def instanceof InterfaceDefinition) && 
-                        !(NativeUtils.isJSNative(def.getBaseName()));
+                isClassCast = (def instanceof ClassDefinition || def instanceof InterfaceDefinition)
+                        && !(NativeUtils.isJSNative(def.getBaseName()));
             }
 
             if (node.isNewExpression())
@@ -647,15 +660,18 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
             {
                 if (def != null)
                 {
-                    boolean isInt = def.getBaseName().equals(IASGlobalFunctionConstants._int);
-                    if (isInt ||
-                        def.getBaseName().equals(IASGlobalFunctionConstants.trace) ||
-                        def.getBaseName().equals(IASGlobalFunctionConstants.uint))
+                    boolean isInt = def.getBaseName().equals(
+                            IASGlobalFunctionConstants._int);
+                    if (isInt
+                            || def.getBaseName().equals(
+                                    IASGlobalFunctionConstants.trace)
+                            || def.getBaseName().equals(
+                                    IASGlobalFunctionConstants.uint))
                     {
                         write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
                         write(ASEmitterTokens.MEMBER_ACCESS);
                         if (isInt)
-                            write(JSFlexJSEmitterTokens.UNDERSCORE);                        
+                            write(JSFlexJSEmitterTokens.UNDERSCORE);
                     }
                 }
                 getWalker().walk(node.getNameNode());
@@ -665,7 +681,8 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
             }
             else
             {
-                emitIsAs(node.getArgumentNodes()[0], node.getNameNode(), ASTNodeID.Op_AsID, true);
+                emitIsAs(node.getArgumentNodes()[0], node.getNameNode(),
+                        ASTNodeID.Op_AsID, true);
             }
         }
         else
@@ -686,11 +703,11 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
     {
         if (node instanceof NonResolvingIdentifierNode)
             return false;
-        
+
         IClassNode classNode = (IClassNode) node
                 .getAncestorOfType(IClassNode.class);
 
-        IDefinition nodeDef = ((IIdentifierNode) node).resolve(project);
+        IDefinition nodeDef = node.resolve(project);
 
         IASNode parentNode = node.getParent();
         ASTNodeID parentNodeId = parentNode.getNodeID();
@@ -704,7 +721,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
         {
             if (nodeDef instanceof ParameterDefinition)
                 return false;
-            
+
             if (nodeDef instanceof VariableDefinition)
             {
                 IDefinition pdef = ((VariableDefinition) nodeDef).getParent();
@@ -745,19 +762,18 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
         }
         else
         {
-            if (nodeDef != null
-                    && !nodeDef.isInternal()
+            if (nodeDef != null && !nodeDef.isInternal()
                     && isClassMember(nodeDef, classNode))
             {
                 if (identifierIsMemberAccess)
                 {
-                	if (parentNode.getNodeID() == ASTNodeID.MemberAccessExpressionID
+                    if (parentNode.getNodeID() == ASTNodeID.MemberAccessExpressionID
                             && parentNode.getChild(0).getNodeID() == ASTNodeID.SuperID
                             && !isSuperCallForOverride(node))
-                	{
-                		return true;
-                	}
-                	
+                    {
+                        return true;
+                    }
+
                     return node == firstChild;
                 }
                 else
@@ -768,8 +784,8 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
                                     .getFunctionClassification() == IFunctionDefinition.FunctionClassification.LOCAL;
 
                     if (nodeDef instanceof IParameterDefinition)
-                    	return false;
-                    
+                        return false;
+
                     return !identifierIsLocalFunction;
                 }
             }
@@ -793,7 +809,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
         while (visiblePropertiesIterator.hasNext())
         {
             if (parseQualifiedName(nodeDef).equals(
-            		parseQualifiedName(visiblePropertiesIterator.next())))
+                    parseQualifiedName(visiblePropertiesIterator.next())))
                 return true;
         }
 
@@ -806,7 +822,8 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
         if (pdef == thisClass)
             return true;
 
-        IDefinition cdef = ((ClassDefinition) thisClass).resolveBaseClass(project);
+        IDefinition cdef = ((ClassDefinition) thisClass)
+                .resolveBaseClass(project);
         while (cdef != null)
         {
             // needs to be a loop
@@ -823,7 +840,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
         if (project == null)
             project = getWalker().getProject();
 
-        IDefinition nodeDef = ((IIdentifierNode) node).resolve(project);
+        IDefinition nodeDef = node.resolve(project);
 
         IASNode parentNode = node.getParent();
         ASTNodeID parentNodeId = parentNode.getNodeID();
@@ -834,8 +851,8 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
 
         boolean emitName = true;
 
-        if (nodeDef != null
-                && nodeDef.isStatic() && nodeDef.getParent() != null)
+        if (nodeDef != null && nodeDef.isStatic()
+                && nodeDef.getParent() != null)
         {
             String sname = parseQualifiedName(nodeDef.getParent());
             if (sname.length() > 0)
@@ -937,7 +954,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
                 // ToDo (erikdebruin): add VF2JS conditional -> only use check during full SDK compilation
                 if (cnode == null)
                     return;
-                
+
                 write(parseQualifiedName(cnode));
                 write(ASEmitterTokens.MEMBER_ACCESS);
                 write(JSGoogEmitterTokens.GOOG_BASE);
@@ -966,16 +983,17 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
 
             if (anode != null && isAssignment)
             {
-                getWalker().walk(((BinaryOperatorAssignmentNode) anode)
-                        .getRightOperandNode());
+                getWalker().walk(
+                        ((BinaryOperatorAssignmentNode) anode)
+                                .getRightOperandNode());
             }
 
             if (!(node instanceof NonResolvingIdentifierNode))
-            	write(ASEmitterTokens.PAREN_CLOSE);
+                write(ASEmitterTokens.PAREN_CLOSE);
         }
         else if (emitName)
         {
-            if (nodeDef != null)    
+            if (nodeDef != null)
                 write(parseQualifiedName(nodeDef));
             else
                 write(node.getName());
@@ -984,15 +1002,15 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
 
     private boolean isSuperCallForOverride(IIdentifierNode node)
     {
-    	IFunctionNode pfnode = (IFunctionNode) node.
-    			getAncestorOfType(FunctionNode.class);
+        IFunctionNode pfnode = (IFunctionNode) node
+                .getAncestorOfType(FunctionNode.class);
 
-    	if (pfnode == null)
-    		return false;
-    	
-    	return pfnode.getName().equals(node.getName());
+        if (pfnode == null)
+            return false;
+
+        return pfnode.getName().equals(node.getName());
     }
-    
+
     //--------------------------------------------------------------------------
 
     @Override
@@ -1024,7 +1042,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
 
         if (cnode == null)
             return;
-        
+
         // (erikdebruin): Catch when a 'super' call does NOT match the enclosing
         //                function call. The GCC only allows '.base()' calls
         //                to matching super methods, so we need to use 
@@ -1032,20 +1050,23 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
         boolean isCallToOtherSuperMethod = false;
         try
         {
-        	IExpressionNode d = fcnode.getNameNode();
-		    if (d != null && d instanceof IMemberAccessExpressionNode)
-		    {
-		    	IIdentifierNode b = (IIdentifierNode) ((IMemberAccessExpressionNode) d).getRightOperandNode();
-		    	
-		    	isCallToOtherSuperMethod = 
-		    			b != null && !b.getName().equals(fnode.getName());
-		    }
+            IExpressionNode d = fcnode.getNameNode();
+            if (d != null && d instanceof IMemberAccessExpressionNode)
+            {
+                IIdentifierNode b = (IIdentifierNode) ((IMemberAccessExpressionNode) d)
+                        .getRightOperandNode();
+
+                isCallToOtherSuperMethod = b != null
+                        && !b.getName().equals(fnode.getName());
+            }
         }
-		catch (Exception e) { /* Eat it! */ }
-        
+        catch (Exception e)
+        { /* Eat it! */
+        }
+
         if (isCallToOtherSuperMethod)
         {
-        	write(ASEmitterTokens.THIS);
+            write(ASEmitterTokens.THIS);
             write(ASEmitterTokens.MEMBER_ACCESS);
             write(JSGoogEmitterTokens.SUPERCLASS);
             write(ASEmitterTokens.MEMBER_ACCESS);
@@ -1071,22 +1092,22 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
         {
             if (!isCallToOtherSuperMethod)
             {
-            	writeToken(ASEmitterTokens.COMMA);
-            	write(ASEmitterTokens.SINGLE_QUOTE);
+                writeToken(ASEmitterTokens.COMMA);
+                write(ASEmitterTokens.SINGLE_QUOTE);
             }
-            
+
             if (fnode.getNodeID() == ASTNodeID.GetterID
                     || fnode.getNodeID() == ASTNodeID.SetterID)
                 writeGetSetPrefix(fnode.getNodeID() == ASTNodeID.GetterID);
-            
+
             // (erikdebruin): write(fnode.getName());
-            IMemberAccessExpressionNode aenode = 
-            		(IMemberAccessExpressionNode) fcnode.getNameNode();
+            IMemberAccessExpressionNode aenode = (IMemberAccessExpressionNode) fcnode
+                    .getNameNode();
             write(((IIdentifierNode) aenode.getRightOperandNode()).getName());
-            
+
             if (!isCallToOtherSuperMethod)
             {
-            	write(ASEmitterTokens.SINGLE_QUOTE);
+                write(ASEmitterTokens.SINGLE_QUOTE);
             }
             else
             {
@@ -1114,9 +1135,10 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
         else if (fnode == null && node instanceof BinaryOperatorAssignmentNode)
         {
             BinaryOperatorAssignmentNode bnode = (BinaryOperatorAssignmentNode) node;
-            
-            IFunctionNode pnode = (IFunctionNode) bnode.getAncestorOfType(IFunctionNode.class);
-            
+
+            IFunctionNode pnode = (IFunctionNode) bnode
+                    .getAncestorOfType(IFunctionNode.class);
+
             if (pnode.getNodeID() == ASTNodeID.SetterID)
             {
                 writeToken(ASEmitterTokens.COMMA);
@@ -1222,15 +1244,15 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
     public void emitBinaryOperator(IBinaryOperatorNode node)
     {
         ASTNodeID id = node.getNodeID();
-        if (id == ASTNodeID.Op_InID
-                || id == ASTNodeID.Op_LogicalAndAssignID
+        if (id == ASTNodeID.Op_InID || id == ASTNodeID.Op_LogicalAndAssignID
                 || id == ASTNodeID.Op_LogicalOrAssignID)
         {
             super.emitBinaryOperator(node);
         }
         else if (id == ASTNodeID.Op_IsID || id == ASTNodeID.Op_AsID)
         {
-            emitIsAs(node.getLeftOperandNode(), node.getRightOperandNode(), id, false);
+            emitIsAs(node.getLeftOperandNode(), node.getRightOperandNode(), id,
+                    false);
         }
         else if (id == ASTNodeID.Op_InstanceOfID)
         {
@@ -1238,7 +1260,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
 
             write(ASEmitterTokens.SPACE);
             writeToken(ASEmitterTokens.INSTANCEOF);
-            
+
             IDefinition dnode = (node.getRightOperandNode()).resolve(project);
             if (dnode != null)
                 write(parseQualifiedName(dnode));
@@ -1283,7 +1305,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
             {
                 getWalker().walk(leftSide);
             }
-            else if (isSuper) 
+            else if (isSuper)
             {
                 emitSuperCall(node, "");
             }
@@ -1307,7 +1329,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
         }
     }
 
-    private void emitIsAs(IExpressionNode left, IExpressionNode right, 
+    private void emitIsAs(IExpressionNode left, IExpressionNode right,
             ASTNodeID id, boolean coercion)
     {
         write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
@@ -1325,16 +1347,16 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
             write(parseQualifiedName(dnode));
         else
             getWalker().walk(right);
-        
-        if (coercion) 
+
+        if (coercion)
         {
             writeToken(ASEmitterTokens.COMMA);
             write(ASEmitterTokens.TRUE);
         }
-        
+
         write(ASEmitterTokens.PAREN_CLOSE);
     }
-    
+
     @Override
     public void emitMemberAccessExpression(IMemberAccessExpressionNode node)
     {
@@ -1353,12 +1375,12 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
         if (!isStatic)
         {
             if (!(leftNode instanceof ILanguageIdentifierNode && ((ILanguageIdentifierNode) leftNode)
-                        .getKind() == ILanguageIdentifierNode.LanguageIdentifierKind.THIS))
+                    .getKind() == ILanguageIdentifierNode.LanguageIdentifierKind.THIS))
             {
-            	if (rightNode instanceof UnaryOperatorAtNode)
+                if (rightNode instanceof UnaryOperatorAtNode)
                 {
-            		// ToDo (erikdebruin): properly handle E4X
-            		
+                    // ToDo (erikdebruin): properly handle E4X
+
                     write(ASEmitterTokens.THIS);
                     write(ASEmitterTokens.MEMBER_ACCESS);
                     getWalker().walk(node.getLeftOperandNode());
@@ -1369,10 +1391,10 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
                     write(ASEmitterTokens.SQUARE_CLOSE);
                     continueWalk = false;
                 }
-            	else if (node.getNodeID() == ASTNodeID.Op_DescendantsID)
-            	{
-            		// ToDo (erikdebruin): properly handle E4X
-            		
+                else if (node.getNodeID() == ASTNodeID.Op_DescendantsID)
+                {
+                    // ToDo (erikdebruin): properly handle E4X
+
                     write(ASEmitterTokens.THIS);
                     write(ASEmitterTokens.MEMBER_ACCESS);
                     getWalker().walk(node.getLeftOperandNode());
@@ -1382,8 +1404,8 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
                     write(ASEmitterTokens.SINGLE_QUOTE);
                     write(ASEmitterTokens.SQUARE_CLOSE);
                     continueWalk = false;
-            	}
-            	else if (leftNode.getNodeID() != ASTNodeID.SuperID)
+                }
+                else if (leftNode.getNodeID() != ASTNodeID.SuperID)
                 {
                     getWalker().walk(node.getLeftOperandNode());
                     write(node.getOperator().getOperatorText());
@@ -1394,11 +1416,11 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
                 write(ASEmitterTokens.THIS);
                 write(node.getOperator().getOperatorText());
             }
-        
+
         }
-        
+
         if (continueWalk)
-        	getWalker().walk(node.getRightOperandNode());
+            getWalker().walk(node.getRightOperandNode());
     }
 
     private static ITypeDefinition getTypeDefinition(IDefinitionNode node)
@@ -1428,11 +1450,11 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
         // ToDo (erikdebruin): add VF2JS conditional -> only use check during full SDK compilation
         if (type == null)
             return;
-        
+
         if (project == null)
             project = getWalker().getProject();
 
-        getDoc().emitMethodDoc(fn, project);
+        getDocEmitter().emitMethodDoc(fn, project);
         write(parseQualifiedName(type));
         if (!node.hasModifier(ASModifier.STATIC))
         {
@@ -1460,7 +1482,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
     }
 
     @Override
-    public IDocEmitter getDocEmitter()
+    public IJSGoogDocEmitter getDocEmitter()
     {
         return new JSVF2JSDocEmitter(this);
     }
@@ -1481,7 +1503,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
         writeNewline(" * @suppress {checkTypes}");
         writeNewline(" */");
         writeNewline();
-        
+
         /* goog.provide('x');\n\n */
         write(JSGoogEmitterTokens.GOOG_PROVIDE);
         write(ASEmitterTokens.PAREN_OPEN);
@@ -1507,7 +1529,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
             project = getWalker().getProject();
 
         FlexJSProject flexProject = (FlexJSProject) project;
-        ASProjectScope projectScope = (ASProjectScope) flexProject.getScope();
+        ASProjectScope projectScope = flexProject.getScope();
         ICompilationUnit cu = projectScope
                 .getCompilationUnitForDefinition(type);
         ArrayList<String> requiresList = flexProject.getRequires(cu);
@@ -1542,14 +1564,14 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
                     write(ASEmitterTokens.SINGLE_QUOTE);
                     write(ASEmitterTokens.PAREN_CLOSE);
                     writeNewline(ASEmitterTokens.SEMICOLON);
-                    
+
                     writtenInstances.add(imp);
-                    
+
                     emitsRequires = true;
                 }
             }
         }
-        
+
         boolean emitsInterfaces = false;
         if (interfacesList != null)
         {
@@ -1562,17 +1584,17 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
                 write(ASEmitterTokens.SINGLE_QUOTE);
                 write(ASEmitterTokens.PAREN_CLOSE);
                 writeNewline(ASEmitterTokens.SEMICOLON);
-                
+
                 emitsInterfaces = true;
             }
         }
-        
+
         // erikdebruin: Add missing language feature support, with e.g. 'is' and 
         //              'as' operators. We don't need to worry about requiring
         //              this in every project: ADVANCED_OPTIMISATIONS will NOT
         //              include any of the code if it is not used in the project.
-        boolean isMainCU = flexProject.mainCU != null && 
-                    cu.getName().equals(flexProject.mainCU.getName());
+        boolean isMainCU = flexProject.mainCU != null
+                && cu.getName().equals(flexProject.mainCU.getName());
         if (isMainCU)
         {
             write(JSGoogEmitterTokens.GOOG_REQUIRE);
@@ -1612,11 +1634,11 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
             writeNewline();
             writeNewline();
             writeNewline();
-            getDoc().begin();
+            getDocEmitter().begin();
             writeNewline(" * Metadata");
             writeNewline(" *");
             writeNewline(" * @type {Object.<string, Array.<Object>>}");
-            getDoc().end();
+            getDocEmitter().end();
 
             // a.B.prototype.AFJS_CLASS_INFO = {  };
             write(parseQualifiedName(type));
@@ -1626,7 +1648,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
             writeToken(JSFlexJSEmitterTokens.FLEXJS_CLASS_INFO);
             writeToken(ASEmitterTokens.EQUAL);
             writeToken(ASEmitterTokens.BLOCK_OPEN);
-            
+
             // names: [{ name: '', qName: '' }]
             write(JSFlexJSEmitterTokens.NAMES);
             writeToken(ASEmitterTokens.COLON);
@@ -1651,7 +1673,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
                 enodes = ((IClassNode) tnode).getImplementedInterfaceNodes();
             else
                 enodes = ((IInterfaceNode) tnode).getExtendedInterfaceNodes();
-            
+
             if (enodes.length > 0)
             {
                 writeToken(ASEmitterTokens.COMMA);
@@ -1662,7 +1684,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
                 write(ASEmitterTokens.SQUARE_OPEN);
                 int i = 0;
                 for (IExpressionNode enode : enodes)
-                { 
+                {
                     write(parseQualifiedName(enode.resolve(project)));
                     if (i < enodes.length - 1)
                         writeToken(ASEmitterTokens.COMMA);
@@ -1823,16 +1845,16 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
     public void emitLiteral(ILiteralNode node)
     {
         boolean isWritten = false;
-        
+
         String s = node.getValue(true);
         if (!(node instanceof RegExpLiteralNode))
         {
             if (node.getLiteralType() == LiteralType.XML)
             {
                 // ToDo (erikdebruin): VF2JS -> handle XML output properly...
-            	
+
                 write("'" + s + "'");
-                
+
                 isWritten = true;
             }
             s = s.replaceAll("\n", "__NEWLINE_PLACEHOLDER__");
@@ -1850,33 +1872,34 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
             s = s.replaceAll("__TAB_PLACEHOLDER__", "\\\\t");
             s = s.replaceAll("__CR_PLACEHOLDER__", "\\\\r");
             s = s.replaceAll("__NEWLINE_PLACEHOLDER__", "\\\\n");
-            
+
             Character c = s.charAt(0);
             if (c.equals('"'))
             {
-            	s = s.substring(1, s.length() - 1);
-            	s = s.replaceAll("\"", "\\\\\"");
-            	s = "\"" + s + "\"";
+                s = s.substring(1, s.length() - 1);
+                s = s.replaceAll("\"", "\\\\\"");
+                s = "\"" + s + "\"";
             }
             if (s.length() == 3)
             {
-            	c = s.charAt(1);
-	            if (c.equals('\\')) {
-	            	s = "\"\\\\\"";
-	            }
+                c = s.charAt(1);
+                if (c.equals('\\'))
+                {
+                    s = "\"\\\\\"";
+                }
             }
         }
-        
+
         if (!isWritten)
         {
             write(s);
         }
     }
-    
+
     @Override
     public void emitE4XFilter(IMemberAccessExpressionNode node)
     {
-    	// ToDo (erikdebruin): implement E4X replacement !?!
+        // ToDo (erikdebruin): implement E4X replacement !?!
         write(ASEmitterTokens.SINGLE_QUOTE);
         write("E4XFilter");
         write(ASEmitterTokens.SINGLE_QUOTE);
@@ -1889,36 +1912,36 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
         for (int i = 0; i < nodeCount; i++)
         {
             getWalker().walk(node.getChild(i));
-            
+
             if (i < nodeCount - 1)
-            	writeToken(ASEmitterTokens.COMMA);
+                writeToken(ASEmitterTokens.COMMA);
         }
     }
-    
+
     private String parseQualifiedName(IDefinitionNode def)
     {
-    	return parseQualifiedNameString(def.getQualifiedName());
+        return parseQualifiedNameString(def.getQualifiedName());
     }
-    
+
     private String parseQualifiedName(IDefinition def)
     {
-    	return parseQualifiedNameString(def.getQualifiedName());
+        return parseQualifiedNameString(def.getQualifiedName());
     }
 
     private String parseQualifiedNameString(String qNameString)
     {
-    	// ToDo (erikdebruin): Ugly hacks for VF2JS ...
-    	if (qNameString.equals(IASLanguageConstants._int))
-    	{
-    		qNameString = qNameString.toUpperCase();
-    	}
-    	
-    	if (qNameString.equals("byte"))
-    	{
-    		qNameString = "$" + qNameString;
-    	}
-    	
-    	return qNameString;
+        // ToDo (erikdebruin): Ugly hacks for VF2JS ...
+        if (qNameString.equals(IASLanguageConstants._int))
+        {
+            qNameString = qNameString.toUpperCase();
+        }
+
+        if (qNameString.equals("byte"))
+        {
+            qNameString = "$" + qNameString;
+        }
+
+        return qNameString;
     }
 
 }


[20/35] git commit: [flex-falcon] [refs/heads/IDEA-FLEX_JS_COMPILER] - Revert "Bypass FlexJS' new underscored namespace convention"

Posted by ft...@apache.org.
Revert "Bypass FlexJS' new underscored namespace convention"

This reverts commit a388b191544e7fee7d999b0301d2e4a0b8f1f939.


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

Branch: refs/heads/IDEA-FLEX_JS_COMPILER
Commit: da5a71483c68e954cf15d8b5101e7ded4627cb96
Parents: 11fe07b
Author: Erik de Bruin <er...@ixsoftware.nl>
Authored: Sun May 31 19:47:38 2015 +0200
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:40:57 2015 +0100

----------------------------------------------------------------------
 .../codegen/js/vf2js/JSVF2JSDocEmitter.java     | 48 --------------------
 .../codegen/mxml/vf2js/MXMLVF2JSEmitter.java    |  2 +-
 .../codegen/mxml/vf2js/MXMLVF2JSPublisher.java  |  2 +-
 3 files changed, 2 insertions(+), 50 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/da5a7148/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSDocEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSDocEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSDocEmitter.java
index f731c2b..c0a1241 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSDocEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSDocEmitter.java
@@ -40,7 +40,6 @@ import org.apache.flex.compiler.projects.ICompilerProject;
 import org.apache.flex.compiler.tree.as.IDefinitionNode;
 import org.apache.flex.compiler.tree.as.IExpressionNode;
 import org.apache.flex.compiler.tree.as.IFunctionNode;
-import org.apache.flex.compiler.tree.as.IInterfaceNode;
 import org.apache.flex.compiler.tree.as.IParameterNode;
 import org.apache.flex.compiler.tree.as.IVariableNode;
 
@@ -53,41 +52,6 @@ public class JSVF2JSDocEmitter extends JSGoogDocEmitter
     }
 
     @Override
-    public void emitInterfaceDoc(IInterfaceNode node, ICompilerProject project)
-    {
-        begin();
-
-        emitJSDocLine(JSEmitterTokens.INTERFACE.getToken());
-
-        boolean hasQualifiedNames = true;
-        IExpressionNode[] inodes = node.getExtendedInterfaceNodes();
-        for (IExpressionNode inode : inodes)
-        {
-            IDefinition dnode = inode.resolve(project);
-            if (dnode != null)
-            {
-                emitJSDocLine(ASEmitterTokens.EXTENDS, dnode.getQualifiedName());
-            }
-            else
-            {
-                hasQualifiedNames = false;
-                break;
-            }
-        }
-        
-        if (!hasQualifiedNames)
-        {
-            String[] inames = node.getExtendedInterfaces();
-            for (String iname : inames)
-            {
-                emitJSDocLine(ASEmitterTokens.EXTENDS, iname);
-            }
-        }
-
-        end();
-    }
-
-    @Override
     public void emitMethodDoc(IFunctionNode node, ICompilerProject project)
     {
         IClassDefinition classDefinition = resolveClassDefinition(node);
@@ -304,16 +268,4 @@ public class JSVF2JSDocEmitter extends JSGoogDocEmitter
             emitPublic(node);
         }
     }
-
-    @Override
-    public void emitExtends(IClassDefinition superDefinition, String packageName)
-    {
-        emitJSDocLine(ASEmitterTokens.EXTENDS, superDefinition.getQualifiedName());
-    }
-
-    @Override
-    public void emitImplements(ITypeDefinition definition, String packageName)
-    {
-        emitJSDocLine(ASEmitterTokens.IMPLEMENTS, definition.getQualifiedName());
-    }
 }

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/da5a7148/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSEmitter.java
index 209916a..e56a654 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSEmitter.java
@@ -1495,7 +1495,7 @@ public class MXMLVF2JSEmitter extends MXMLEmitter implements
         if (project.mainCU != null &&
                 cu.getName().equals(project.mainCU.getName()))
         {
-            emitHeaderLine("org.apache.flex.utils.Language");
+            emitHeaderLine(JSFlexJSEmitterTokens.LANGUAGE_QNAME.getToken());
         }
 
         writeNewline();

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/da5a7148/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSPublisher.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSPublisher.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSPublisher.java
index 5adbc90..164806c 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSPublisher.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSPublisher.java
@@ -205,7 +205,7 @@ public class MXMLVF2JSPublisher extends JSGoogPublisher implements
                 + File.separator + outputFileName;
 
         appendExportSymbol(projectIntermediateJSFilePath, projectName);
-        //appendEncodedCSS(projectIntermediateJSFilePath, projectName);
+        appendEncodedCSS(projectIntermediateJSFilePath, projectName);
 
         if (!subsetGoog)
         {


[27/35] git commit: [flex-falcon] [refs/heads/IDEA-FLEX_JS_COMPILER] - - Refactored interface to emitter. - Refactored var dec to emitter. - Refactored method to emitter.

Posted by ft...@apache.org.
- Refactored interface to emitter.
- Refactored var dec to emitter.
- Refactored method to emitter.


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

Branch: refs/heads/IDEA-FLEX_JS_COMPILER
Commit: 7f04314348326e966494548d5120fe5f0cbd48ca
Parents: 02e5a02
Author: Michael Schmalle <ms...@apache.org>
Authored: Sun May 31 15:08:04 2015 -0400
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:41:21 2015 +0100

----------------------------------------------------------------------
 .../compiler/internal/codegen/as/ASEmitter.java |   4 +-
 .../internal/codegen/js/JSSessionModel.java     |   7 ++
 .../codegen/js/flexjs/JSFlexJSEmitter.java      | 104 +++++++++++------
 .../internal/codegen/js/goog/JSGoogEmitter.java |  71 ++++++------
 .../codegen/js/jx/InterfaceEmitter.java         | 112 ++++++++++++++++++
 .../internal/codegen/js/jx/MethodEmitter.java   | 114 +++++++++++++++++++
 .../codegen/js/jx/VarDeclarationEmitter.java    |  88 ++++++++++++++
 .../internal/codegen/js/utils/EmitterUtils.java |   6 +
 .../codegen/js/vf2js/JSVF2JSEmitter.java        |   4 +-
 9 files changed, 437 insertions(+), 73 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/7f043143/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
index 7f5f46f..d16081d 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
@@ -699,7 +699,7 @@ public class ASEmitter implements IASEmitter, IEmitter
         }
     }
 
-    protected void emitMemberKeyword(IDefinitionNode node)
+    public void emitMemberKeyword(IDefinitionNode node)
     {
         if (node instanceof IFunctionNode)
         {
@@ -717,7 +717,7 @@ public class ASEmitter implements IASEmitter, IEmitter
         getWalker().walk(node.getNameExpressionNode());
     }
 
-    protected void emitDeclarationName(IDefinitionNode node)
+    public void emitDeclarationName(IDefinitionNode node)
     {
         getWalker().walk(node.getNameExpressionNode());
     }

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/7f043143/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSSessionModel.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSSessionModel.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSSessionModel.java
index 48079fa..8bb30b4 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSSessionModel.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSSessionModel.java
@@ -46,6 +46,8 @@ public class JSSessionModel
 
     private HashMap<String, PropertyNodes> propertyMap = new HashMap<String, PropertyNodes>();
 
+    private List<String> interfacePropertyMap = new ArrayList<String>();
+
     private HashMap<String, PropertyNodes> staticPropertyMap = new HashMap<String, PropertyNodes>();
 
     private ArrayList<String> bindableVars = new ArrayList<String>();
@@ -67,6 +69,11 @@ public class JSSessionModel
         return propertyMap;
     }
 
+    public List<String> getInterfacePropertyMap()
+    {
+        return interfacePropertyMap;
+    }
+
     public HashMap<String, PropertyNodes> getStaticPropertyMap()
     {
         return staticPropertyMap;

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/7f043143/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 d9b1c4e..4463d0a 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
@@ -41,10 +41,13 @@ import org.apache.flex.compiler.internal.codegen.js.jx.FieldEmitter;
 import org.apache.flex.compiler.internal.codegen.js.jx.ForEachEmitter;
 import org.apache.flex.compiler.internal.codegen.js.jx.FunctionCallEmitter;
 import org.apache.flex.compiler.internal.codegen.js.jx.IdentifierEmitter;
+import org.apache.flex.compiler.internal.codegen.js.jx.InterfaceEmitter;
 import org.apache.flex.compiler.internal.codegen.js.jx.MemberAccessEmitter;
+import org.apache.flex.compiler.internal.codegen.js.jx.MethodEmitter;
 import org.apache.flex.compiler.internal.codegen.js.jx.PackageFooterEmitter;
 import org.apache.flex.compiler.internal.codegen.js.jx.PackageHeaderEmitter;
 import org.apache.flex.compiler.internal.codegen.js.jx.SuperCallEmitter;
+import org.apache.flex.compiler.internal.codegen.js.jx.VarDeclarationEmitter;
 import org.apache.flex.compiler.internal.tree.as.FunctionNode;
 import org.apache.flex.compiler.internal.tree.as.RegExpLiteralNode;
 import org.apache.flex.compiler.internal.tree.as.SetterNode;
@@ -60,6 +63,7 @@ import org.apache.flex.compiler.tree.as.IFunctionCallNode;
 import org.apache.flex.compiler.tree.as.IFunctionNode;
 import org.apache.flex.compiler.tree.as.IGetterNode;
 import org.apache.flex.compiler.tree.as.IIdentifierNode;
+import org.apache.flex.compiler.tree.as.IInterfaceNode;
 import org.apache.flex.compiler.tree.as.ILiteralNode;
 import org.apache.flex.compiler.tree.as.ILiteralNode.LiteralType;
 import org.apache.flex.compiler.tree.as.IMemberAccessExpressionNode;
@@ -85,8 +89,13 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
     private BindableEmitter bindableEmitter;
 
     private ClassEmitter classEmitter;
+    private InterfaceEmitter interfaceEmitter;
+
     private FieldEmitter fieldEmitter;
+    private VarDeclarationEmitter varDeclarationEmitter;
     private AccessorEmitter accessorEmitter;
+    private MethodEmitter methodEmitter;
+
     private FunctionCallEmitter functionCallEmitter;
     private SuperCallEmitter superCallEmitter;
     private ForEachEmitter forEachEmitter;
@@ -129,8 +138,13 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
         bindableEmitter = new BindableEmitter(this);
 
         classEmitter = new ClassEmitter(this);
+        interfaceEmitter = new InterfaceEmitter(this);
+
         fieldEmitter = new FieldEmitter(this);
+        varDeclarationEmitter = new VarDeclarationEmitter(this);
         accessorEmitter = new AccessorEmitter(this);
+        methodEmitter = new MethodEmitter(this);
+
         functionCallEmitter = new FunctionCallEmitter(this);
         superCallEmitter = new SuperCallEmitter(this);
         forEachEmitter = new ForEachEmitter(this);
@@ -156,7 +170,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
     }
 
     @Override
-    protected void emitMemberName(IDefinitionNode node)
+    public void emitMemberName(IDefinitionNode node)
     {
         write(node.getName());
     }
@@ -170,6 +184,32 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
         return name;
     }
 
+    //--------------------------------------------------------------------------
+    // Package Level
+    //--------------------------------------------------------------------------
+
+    @Override
+    public void emitPackageHeader(IPackageDefinition definition)
+    {
+        packageHeaderEmitter.emit(definition);
+    }
+
+    @Override
+    public void emitPackageHeaderContents(IPackageDefinition definition)
+    {
+        packageHeaderEmitter.emitContents(definition);
+    }
+
+    @Override
+    public void emitPackageFooter(IPackageDefinition definition)
+    {
+        packageFooterEmitter.emit(definition);
+    }
+
+    //--------------------------------------------------------------------------
+    // Class
+    //--------------------------------------------------------------------------
+
     @Override
     public void emitClass(IClassNode node)
     {
@@ -177,18 +217,48 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
     }
 
     @Override
+    public void emitInterface(IInterfaceNode node)
+    {
+        interfaceEmitter.emit(node);
+    }
+
+    @Override
     public void emitField(IVariableNode node)
     {
         fieldEmitter.emit(node);
     }
 
     @Override
+    public void emitVarDeclaration(IVariableNode node)
+    {
+        varDeclarationEmitter.emit(node);
+    }
+
+    @Override
     public void emitAccessors(IAccessorNode node)
     {
         accessorEmitter.emit(node);
     }
 
     @Override
+    public void emitGetAccessor(IGetterNode node)
+    {
+        accessorEmitter.emitGet(node);
+    }
+
+    @Override
+    public void emitSetAccessor(ISetterNode node)
+    {
+        accessorEmitter.emitSet(node);
+    }
+
+    @Override
+    public void emitMethod(IFunctionNode node)
+    {
+        methodEmitter.emit(node);
+    }
+
+    @Override
     public void emitFunctionCall(IFunctionCallNode node)
     {
         functionCallEmitter.emit(node);
@@ -208,7 +278,6 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
     @Override
     public void emitIdentifier(IIdentifierNode node)
     {
-        // TODO (mschmalle) remove when project field is removed
         identifierEmitter.emit(node);
     }
 
@@ -235,23 +304,10 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
     @Override
     public void emitMemberAccessExpression(IMemberAccessExpressionNode node)
     {
-        // TODO (mschmalle) remove when project field is removed
         memberAccessEmitter.emit(node);
     }
 
     @Override
-    public void emitGetAccessor(IGetterNode node)
-    {
-        accessorEmitter.emitGet(node);
-    }
-
-    @Override
-    public void emitSetAccessor(ISetterNode node)
-    {
-        accessorEmitter.emitSet(node);
-    }
-
-    @Override
     protected void emitObjectDefineProperty(IAccessorNode node)
     {
         //TODO: ajh  is this method needed anymore?
@@ -380,24 +436,6 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
     }
 
     @Override
-    public void emitPackageHeader(IPackageDefinition definition)
-    {
-        packageHeaderEmitter.emit(definition);
-    }
-
-    @Override
-    public void emitPackageHeaderContents(IPackageDefinition definition)
-    {
-        packageHeaderEmitter.emitContents(definition);
-    }
-
-    @Override
-    public void emitPackageFooter(IPackageDefinition definition)
-    {
-        packageFooterEmitter.emit(definition);
-    }
-
-    @Override
     public void emitForEachLoop(IForLoopNode node)
     {
         forEachEmitter.emit(node);

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/7f043143/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
index 7dd7cdb..40453ec 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
@@ -95,16 +95,17 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
         return docEmitter;
     }
 
-    //--------------------------------------------------------------------------
-    // 
-    //--------------------------------------------------------------------------
-
     @Override
     public String formatQualifiedName(String name)
     {
         return name;
     }
 
+    //--------------------------------------------------------------------------
+    // Package Level
+    //--------------------------------------------------------------------------
+
+    // XXX DEAD
     @Override
     public void emitPackageHeader(IPackageDefinition definition)
     {
@@ -124,6 +125,7 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
         writeNewline();
     }
 
+    // XXX DEAD
     @Override
     public void emitPackageHeaderContents(IPackageDefinition definition)
     {
@@ -160,6 +162,7 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
         }
     }
 
+    // XXX DEAD
     @Override
     public void emitPackageContents(IPackageDefinition definition)
     {
@@ -175,15 +178,17 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
         }
     }
 
+    // XXX DEAD
     @Override
     public void emitPackageFooter(IPackageDefinition definition)
     {
     }
 
     //--------------------------------------------------------------------------
-    // 
+    // Class
     //--------------------------------------------------------------------------
 
+    // XXX DEAD
     @Override
     public void emitClass(IClassNode node)
     {
@@ -253,6 +258,7 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
         }
     }
 
+    // XXX Dead [InterfaceEmitter]
     @Override
     public void emitInterface(IInterfaceNode node)
     {
@@ -315,6 +321,7 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
         }
     }
 
+    // XXX Dead
     @Override
     public void emitField(IVariableNode node)
     {
@@ -364,6 +371,7 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
         }
     }
 
+    // XXX Dead [VarDeclarationEmitter]
     @Override
     public void emitVarDeclaration(IVariableNode node)
     {
@@ -406,19 +414,8 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
         }
     }
 
-    @Override
-    public void emitGetAccessor(IGetterNode node)
-    {
-        emitObjectDefineProperty(node);
-    }
-
-    @Override
-    public void emitSetAccessor(ISetterNode node)
-    {
-        emitObjectDefineProperty(node);
-    }
-
-    protected void emitAccessors(IAccessorNode node)
+    // XXX Dead 
+    public void emitAccessors(IAccessorNode node)
     {
         String qname = node.getQualifiedName();
         if (!propertyNames.contains(qname))
@@ -441,6 +438,21 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
         }
     }
 
+    // XXX Dead 
+    @Override
+    public void emitGetAccessor(IGetterNode node)
+    {
+        emitObjectDefineProperty(node);
+    }
+
+    // XXX Dead 
+    @Override
+    public void emitSetAccessor(ISetterNode node)
+    {
+        emitObjectDefineProperty(node);
+    }
+
+    // XXX Dead [MethodEmitter]
     @Override
     public void emitMethod(IFunctionNode node)
     {
@@ -453,7 +465,7 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
 
         boolean isConstructor = node.isConstructor();
 
-        String qname = getTypeDefinition(node).getQualifiedName();
+        String qname = EmitterUtils.getTypeDefinition(node).getQualifiedName();
         if (qname != null && !qname.equals(""))
         {
             write(formatQualifiedName(qname));
@@ -499,13 +511,14 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
             write(ASEmitterTokens.PAREN_OPEN);
             write(formatQualifiedName(qname));
             writeToken(ASEmitterTokens.COMMA);
-            String sname = getSuperClassDefinition(node, project)
+            String sname = EmitterUtils.getSuperClassDefinition(node, project)
                     .getQualifiedName();
             write(formatQualifiedName(sname));
             write(ASEmitterTokens.PAREN_CLOSE);
         }
     }
 
+    // XXX Dead
     @Override
     public void emitFunctionCall(IFunctionCallNode node)
     {
@@ -534,6 +547,7 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
         }
     }
 
+    // XXX Dead
     @Override
     public void emitIdentifier(IIdentifierNode node)
     {
@@ -836,7 +850,7 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
     }
 
     @Override
-    protected void emitAssignedValue(IExpressionNode node)
+    public void emitAssignedValue(IExpressionNode node)
     {
         if (node != null)
         {
@@ -895,21 +909,6 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
         super(out);
     }
 
-    private static ITypeDefinition getTypeDefinition(IDefinitionNode node)
-    {
-        ITypeNode tnode = (ITypeNode) node.getAncestorOfType(ITypeNode.class);
-        return (ITypeDefinition) tnode.getDefinition();
-    }
-
-    private static IClassDefinition getSuperClassDefinition(
-            IDefinitionNode node, ICompilerProject project)
-    {
-        IClassDefinition parent = (IClassDefinition) node.getDefinition()
-                .getParent();
-        IClassDefinition superClass = parent.resolveBaseClass(project);
-        return superClass;
-    }
-
     protected void emitObjectDefineProperty(IAccessorNode node)
     {
         /*

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/7f043143/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/InterfaceEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/InterfaceEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/InterfaceEmitter.java
new file mode 100644
index 0000000..d12a3ba
--- /dev/null
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/InterfaceEmitter.java
@@ -0,0 +1,112 @@
+/*
+ *
+ *  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.js.jx;
+
+import org.apache.flex.compiler.codegen.ISubEmitter;
+import org.apache.flex.compiler.codegen.js.IJSEmitter;
+import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitter;
+import org.apache.flex.compiler.projects.ICompilerProject;
+import org.apache.flex.compiler.tree.ASTNodeID;
+import org.apache.flex.compiler.tree.as.IDefinitionNode;
+import org.apache.flex.compiler.tree.as.IFunctionNode;
+import org.apache.flex.compiler.tree.as.IInterfaceNode;
+
+public class InterfaceEmitter extends JSSubEmitter implements
+        ISubEmitter<IInterfaceNode>
+{
+
+    public InterfaceEmitter(IJSEmitter emitter)
+    {
+        super(emitter);
+    }
+
+    @Override
+    public void emit(IInterfaceNode node)
+    {
+        // TODO (mschmalle) will remove this cast as more things get abstracted
+        JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
+
+        ICompilerProject project = getWalker().getProject();
+
+        fjs.getDocEmitter().emitInterfaceDoc(node, project);
+
+        String qname = node.getQualifiedName();
+        if (qname != null && !qname.equals(""))
+        {
+            write(getEmitter().formatQualifiedName(qname));
+            write(ASEmitterTokens.SPACE);
+            writeToken(ASEmitterTokens.EQUAL);
+            write(ASEmitterTokens.FUNCTION);
+            write(ASEmitterTokens.PAREN_OPEN);
+            write(ASEmitterTokens.PAREN_CLOSE);
+            write(ASEmitterTokens.SPACE);
+            write(ASEmitterTokens.BLOCK_OPEN);
+            writeNewline();
+            write(ASEmitterTokens.BLOCK_CLOSE);
+            write(ASEmitterTokens.SEMICOLON);
+        }
+
+        final IDefinitionNode[] members = node.getAllMemberDefinitionNodes();
+        for (IDefinitionNode mnode : members)
+        {
+            boolean isAccessor = mnode.getNodeID() == ASTNodeID.GetterID
+                    || mnode.getNodeID() == ASTNodeID.SetterID;
+
+            if (!isAccessor
+                    || !getModel().getInterfacePropertyMap().contains(qname))
+            {
+                writeNewline();
+
+                write(getEmitter().formatQualifiedName(qname));
+                write(ASEmitterTokens.MEMBER_ACCESS);
+                write(JSEmitterTokens.PROTOTYPE);
+                write(ASEmitterTokens.MEMBER_ACCESS);
+                write(mnode.getQualifiedName());
+
+                if (isAccessor
+                        && !getModel().getInterfacePropertyMap()
+                                .contains(qname))
+                {
+                    getModel().getInterfacePropertyMap().add(qname);
+                }
+                else
+                {
+                    write(ASEmitterTokens.SPACE);
+                    writeToken(ASEmitterTokens.EQUAL);
+                    write(ASEmitterTokens.FUNCTION);
+
+                    fjs.emitParameters(((IFunctionNode) mnode)
+                            .getParameterNodes());
+
+                    write(ASEmitterTokens.SPACE);
+                    write(ASEmitterTokens.BLOCK_OPEN);
+                    writeNewline();
+                    write(ASEmitterTokens.BLOCK_CLOSE);
+                }
+
+                write(ASEmitterTokens.SEMICOLON);
+            }
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/7f043143/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/MethodEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/MethodEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/MethodEmitter.java
new file mode 100644
index 0000000..5caa357
--- /dev/null
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/MethodEmitter.java
@@ -0,0 +1,114 @@
+/*
+ *
+ *  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.js.jx;
+
+import java.util.ArrayList;
+
+import org.apache.flex.compiler.codegen.ISubEmitter;
+import org.apache.flex.compiler.codegen.js.IJSEmitter;
+import org.apache.flex.compiler.common.ASModifier;
+import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSSessionModel;
+import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitter;
+import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.utils.EmitterUtils;
+import org.apache.flex.compiler.internal.tree.as.FunctionNode;
+import org.apache.flex.compiler.problems.ICompilerProblem;
+import org.apache.flex.compiler.projects.ICompilerProject;
+import org.apache.flex.compiler.tree.as.IFunctionNode;
+
+public class MethodEmitter extends JSSubEmitter implements
+        ISubEmitter<IFunctionNode>
+{
+    public MethodEmitter(IJSEmitter emitter)
+    {
+        super(emitter);
+    }
+
+    @Override
+    public void emit(IFunctionNode node)
+    {
+        // TODO (mschmalle) will remove this cast as more things get abstracted
+        JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
+
+        FunctionNode fn = (FunctionNode) node;
+        fn.parseFunctionBody(new ArrayList<ICompilerProblem>());
+
+        ICompilerProject project = getWalker().getProject();
+
+        fjs.getDocEmitter().emitMethodDoc(node, project);
+
+        boolean isConstructor = node.isConstructor();
+
+        String qname = EmitterUtils.getTypeDefinition(node).getQualifiedName();
+        if (qname != null && !qname.equals(""))
+        {
+            write(fjs.formatQualifiedName(qname));
+            if (!isConstructor)
+            {
+                write(ASEmitterTokens.MEMBER_ACCESS);
+                if (!fn.hasModifier(ASModifier.STATIC))
+                {
+                    write(JSEmitterTokens.PROTOTYPE);
+                    write(ASEmitterTokens.MEMBER_ACCESS);
+                }
+            }
+        }
+
+        if (!isConstructor)
+            fjs.emitMemberName(node);
+
+        write(ASEmitterTokens.SPACE);
+        writeToken(ASEmitterTokens.EQUAL);
+        write(ASEmitterTokens.FUNCTION);
+
+        fjs.emitParameters(node.getParameterNodes());
+
+        boolean hasSuperClass = EmitterUtils.hasSuperClass(project, node);
+
+        if (isConstructor && node.getScopedNode().getChildCount() == 0)
+        {
+            write(ASEmitterTokens.SPACE);
+            write(ASEmitterTokens.BLOCK_OPEN);
+            if (hasSuperClass)
+                fjs.emitSuperCall(node, JSSessionModel.CONSTRUCTOR_EMPTY);
+            writeNewline();
+            write(ASEmitterTokens.BLOCK_CLOSE);
+        }
+
+        if (!isConstructor || node.getScopedNode().getChildCount() > 0)
+            fjs.emitMethodScope(node.getScopedNode());
+
+        if (isConstructor && hasSuperClass)
+        {
+            writeNewline(ASEmitterTokens.SEMICOLON);
+            write(JSGoogEmitterTokens.GOOG_INHERITS);
+            write(ASEmitterTokens.PAREN_OPEN);
+            write(fjs.formatQualifiedName(qname));
+            writeToken(ASEmitterTokens.COMMA);
+            String sname = EmitterUtils.getSuperClassDefinition(node, project)
+                    .getQualifiedName();
+            write(fjs.formatQualifiedName(sname));
+            write(ASEmitterTokens.PAREN_CLOSE);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/7f043143/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/VarDeclarationEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/VarDeclarationEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/VarDeclarationEmitter.java
new file mode 100644
index 0000000..8b57ea9
--- /dev/null
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/VarDeclarationEmitter.java
@@ -0,0 +1,88 @@
+/*
+ *
+ *  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.js.jx;
+
+import org.apache.flex.compiler.codegen.ISubEmitter;
+import org.apache.flex.compiler.codegen.js.IJSEmitter;
+import org.apache.flex.compiler.definitions.IDefinition;
+import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitter;
+import org.apache.flex.compiler.internal.tree.as.ChainedVariableNode;
+import org.apache.flex.compiler.tree.as.IASNode;
+import org.apache.flex.compiler.tree.as.IEmbedNode;
+import org.apache.flex.compiler.tree.as.IExpressionNode;
+import org.apache.flex.compiler.tree.as.IVariableNode;
+
+public class VarDeclarationEmitter extends JSSubEmitter implements
+        ISubEmitter<IVariableNode>
+{
+
+    public VarDeclarationEmitter(IJSEmitter emitter)
+    {
+        super(emitter);
+    }
+
+    @Override
+    public void emit(IVariableNode node)
+    {
+        // TODO (mschmalle) will remove this cast as more things get abstracted
+        JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
+
+        if (!(node instanceof ChainedVariableNode) && !node.isConst())
+        {
+            fjs.emitMemberKeyword(node);
+        }
+
+        IExpressionNode avnode = node.getAssignedValueNode();
+        if (avnode != null)
+        {
+            IDefinition def = avnode.resolveType(getWalker().getProject());
+
+            String opcode = avnode.getNodeID().getParaphrase();
+            if (opcode != "AnonymousFunction")
+                fjs.getDocEmitter().emitVarDoc(node, def);
+        }
+        else
+        {
+            fjs.getDocEmitter().emitVarDoc(node, null);
+        }
+
+        fjs.emitDeclarationName(node);
+        if (!(avnode instanceof IEmbedNode))
+            fjs.emitAssignedValue(avnode);
+
+        if (!(node instanceof ChainedVariableNode))
+        {
+            // check for chained variables
+            int len = node.getChildCount();
+            for (int i = 0; i < len; i++)
+            {
+                IASNode child = node.getChild(i);
+                if (child instanceof ChainedVariableNode)
+                {
+                    writeToken(ASEmitterTokens.COMMA);
+                    fjs.emitVarDeclaration((IVariableNode) child);
+                }
+            }
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/7f043143/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java
index 4f8482f..8a97565 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java
@@ -83,6 +83,12 @@ public class EmitterUtils
         return null;
     }
 
+    public static ITypeDefinition getTypeDefinition(IDefinitionNode node)
+    {
+        ITypeNode tnode = (ITypeNode) node.getAncestorOfType(ITypeNode.class);
+        return (ITypeDefinition) tnode.getDefinition();
+    }
+
     public static boolean isSameClass(IDefinition pdef, IDefinition thisClass,
             ICompilerProject project)
     {

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/7f043143/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
index b436b8a..a25f98e 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
@@ -369,7 +369,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
     }
 
     @Override
-    protected void emitMemberKeyword(IDefinitionNode node)
+    public void emitMemberKeyword(IDefinitionNode node)
     {
         if (node instanceof IFunctionNode)
         {
@@ -496,7 +496,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
     }
 
     @Override
-    protected void emitAccessors(IAccessorNode node)
+    public void emitAccessors(IAccessorNode node)
     {
         if (node.getNodeID() == ASTNodeID.GetterID)
         {


[33/35] git commit: [flex-falcon] [refs/heads/IDEA-FLEX_JS_COMPILER] - Set the compiler at right time

Posted by ft...@apache.org.
Set the compiler at right time


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

Branch: refs/heads/IDEA-FLEX_JS_COMPILER
Commit: 6675bd049f30f440ea06663d852cfa6301e28fbc
Parents: e0f0655
Author: Frédéric THOMAS <we...@gmail.com>
Authored: Mon Jun 1 19:23:03 2015 +0100
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:41:41 2015 +0100

----------------------------------------------------------------------
 flex-compiler-oem/src/flex2/tools/CompJSC.java | 10 +++++++++-
 flex-compiler-oem/src/flex2/tools/Compc.java   |  9 ++++-----
 flex-compiler-oem/src/flex2/tools/MxmlJSC.java |  3 ++-
 flex-compiler-oem/src/flex2/tools/Mxmlc.java   |  9 ++++-----
 4 files changed, 19 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6675bd04/flex-compiler-oem/src/flex2/tools/CompJSC.java
----------------------------------------------------------------------
diff --git a/flex-compiler-oem/src/flex2/tools/CompJSC.java b/flex-compiler-oem/src/flex2/tools/CompJSC.java
index cb2106c..c81f180 100644
--- a/flex-compiler-oem/src/flex2/tools/CompJSC.java
+++ b/flex-compiler-oem/src/flex2/tools/CompJSC.java
@@ -20,10 +20,18 @@
 package flex2.tools;
 
 import org.apache.flex.compiler.clients.COMPJSC;
+import org.apache.flex.compiler.clients.JSCompilerEntryPoint;
+import org.apache.flex.compiler.driver.IBackend;
+
+import java.lang.reflect.InvocationTargetException;
 
 public class CompJSC extends MxmlJSC {
 
-    static {
+    protected JSCompilerEntryPoint getCompilerInstance(IBackend backend) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
         COMPILER = COMPJSC.class;
+        if (compiler == null) {
+            compiler = COMPILER.getDeclaredConstructor(IBackend.class).newInstance(backend);
+        }
+        return compiler;
     }
 }

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6675bd04/flex-compiler-oem/src/flex2/tools/Compc.java
----------------------------------------------------------------------
diff --git a/flex-compiler-oem/src/flex2/tools/Compc.java b/flex-compiler-oem/src/flex2/tools/Compc.java
index a502217..38848fa 100644
--- a/flex-compiler-oem/src/flex2/tools/Compc.java
+++ b/flex-compiler-oem/src/flex2/tools/Compc.java
@@ -30,11 +30,6 @@ public class Compc extends Tool {
 
     public static final String FILE_SPECS = "include-classes";
 
-    static {
-        COMPILER = COMPC.class;
-        JS_COMPILER = CompJSC.class;
-    }
-
     /**
      * The entry-point for Mxmlc.
      * Note that if you change anything in this method, make sure to check Compc, Shell, and
@@ -52,6 +47,10 @@ public class Compc extends Tool {
     }
 
     public static void compc(String[] args) throws InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException {
+
+        COMPILER = COMPC.class;
+        JS_COMPILER = CompJSC.class;
+
         compile(args);
     }
 }

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6675bd04/flex-compiler-oem/src/flex2/tools/MxmlJSC.java
----------------------------------------------------------------------
diff --git a/flex-compiler-oem/src/flex2/tools/MxmlJSC.java b/flex-compiler-oem/src/flex2/tools/MxmlJSC.java
index c2923a1..f71633a 100644
--- a/flex-compiler-oem/src/flex2/tools/MxmlJSC.java
+++ b/flex-compiler-oem/src/flex2/tools/MxmlJSC.java
@@ -37,11 +37,12 @@ import java.util.Set;
 
 public class MxmlJSC implements ProblemQueryProvider {
 
-    protected static Class<? extends MXMLJSC> COMPILER = MXMLJSC.class;
+    protected static Class<? extends MXMLJSC> COMPILER;
 
     protected JSCompilerEntryPoint compiler;
 
     protected JSCompilerEntryPoint getCompilerInstance(IBackend backend) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
+        COMPILER = MXMLJSC.class;
         if (compiler == null) {
             compiler = COMPILER.getDeclaredConstructor(IBackend.class).newInstance(backend);
         }

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6675bd04/flex-compiler-oem/src/flex2/tools/Mxmlc.java
----------------------------------------------------------------------
diff --git a/flex-compiler-oem/src/flex2/tools/Mxmlc.java b/flex-compiler-oem/src/flex2/tools/Mxmlc.java
index abed94f..ed908f9 100644
--- a/flex-compiler-oem/src/flex2/tools/Mxmlc.java
+++ b/flex-compiler-oem/src/flex2/tools/Mxmlc.java
@@ -47,11 +47,6 @@ public final class Mxmlc extends Tool {
 
     public static final String FILE_SPECS = "file-specs";
 
-    static {
-        COMPILER = MXMLC.class;
-        JS_COMPILER = MxmlJSC.class;
-    }
-
     /**
      * The entry-point for Mxmlc.
      * Note that if you change anything in this method, make sure to check Compc, Shell, and
@@ -69,6 +64,10 @@ public final class Mxmlc extends Tool {
     }
 
     public static void mxmlc(String[] args) throws InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException {
+
+        COMPILER = MXMLC.class;
+        JS_COMPILER = MxmlJSC.class;
+
         compile(args);
     }
 


[16/35] git commit: [flex-falcon] [refs/heads/IDEA-FLEX_JS_COMPILER] - Add null check

Posted by ft...@apache.org.
Add null check

Signed-off-by: Erik de Bruin <er...@ixsoftware.nl>


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

Branch: refs/heads/IDEA-FLEX_JS_COMPILER
Commit: fcbdf11dd75b8cfc14ce337efa4c89ea1883a4b7
Parents: cfc1a33
Author: Erik de Bruin <er...@ixsoftware.nl>
Authored: Mon Feb 16 12:52:44 2015 +0100
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:40:43 2015 +0100

----------------------------------------------------------------------
 .../internal/codegen/mxml/vf2js/MXMLVF2JSEmitter.java       | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/fcbdf11d/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSEmitter.java
index d18f626..209916a 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSEmitter.java
@@ -1391,10 +1391,13 @@ public class MXMLVF2JSEmitter extends MXMLEmitter implements
     public void emitComponent(IMXMLComponentNode node)
     {
         MXMLVF2JSDescriptorSpecifier ps = getCurrentDescriptor("ps");
-        ps.value = "new mx.core.ClassFactory(";
+        if (ps != null) 
+        {
+        	ps.value = "new mx.core.ClassFactory(";
 
-        ps.value += node.getName();
-        ps.value += ")";
+	        ps.value += node.getName();
+	        ps.value += ")";
+        }
         
         setBufferWrite(true);
         emitSubDocument(node);