You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by ah...@apache.org on 2016/09/21 22:22:39 UTC

[3/5] git commit: [flex-falcon] [refs/heads/develop] - more scenarios for custom namespaces

more scenarios for custom namespaces


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

Branch: refs/heads/develop
Commit: 0b52f615f3c53f120605029888a6f57e5db12ab3
Parents: 15aef85
Author: Alex Harui <ah...@apache.org>
Authored: Tue Sep 20 11:58:34 2016 -0700
Committer: Alex Harui <ah...@apache.org>
Committed: Wed Sep 21 15:22:30 2016 -0700

----------------------------------------------------------------------
 .../codegen/js/flexjs/JSFlexJSEmitter.java        |  6 ++++++
 .../internal/codegen/js/jx/IdentifierEmitter.java | 18 ++++++++++++++++--
 .../codegen/js/flexjs/TestFlexJSAccessors.java    | 11 +++++++++++
 .../codegen/js/flexjs/TestFlexJSFieldMembers.java |  9 +++++++++
 4 files changed, 42 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/0b52f615/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
index 827d2c0..d9c7bb9 100644
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
@@ -61,6 +61,7 @@ import org.apache.flex.compiler.internal.codegen.js.jx.VarDeclarationEmitter;
 import org.apache.flex.compiler.internal.codegen.js.utils.EmitterUtils;
 import org.apache.flex.compiler.internal.codegen.mxml.flexjs.MXMLFlexJSEmitter;
 import org.apache.flex.compiler.internal.definitions.AccessorDefinition;
+import org.apache.flex.compiler.internal.definitions.FunctionDefinition;
 import org.apache.flex.compiler.internal.projects.FlexJSProject;
 import org.apache.flex.compiler.internal.projects.FlexProject;
 import org.apache.flex.compiler.internal.tree.as.BinaryOperatorAsNode;
@@ -435,6 +436,11 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
 		return false;
     }
     
+    public boolean isCustomNamespace(FunctionDefinition def)
+    {
+		return !def.getNamespaceReference().isLanguageNamespace();
+    }
+    
     @Override
     public void emitMemberName(IDefinitionNode node)
     {

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/0b52f615/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/IdentifierEmitter.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/IdentifierEmitter.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/IdentifierEmitter.java
index 4d14bad..04a673e 100644
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/IdentifierEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/IdentifierEmitter.java
@@ -28,11 +28,13 @@ import org.apache.flex.compiler.definitions.IVariableDefinition;
 import org.apache.flex.compiler.definitions.IVariableDefinition.VariableClassification;
 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.internal.definitions.TypeDefinitionBase;
+import org.apache.flex.compiler.internal.tree.as.FunctionNode;
 import org.apache.flex.compiler.internal.tree.as.NonResolvingIdentifierNode;
 import org.apache.flex.compiler.tree.ASTNodeID;
 import org.apache.flex.compiler.tree.as.IASNode;
@@ -72,6 +74,11 @@ public class IdentifierEmitter extends JSSubEmitter implements
         boolean identifierIsPlainFunction = nodeDef instanceof FunctionDefinition
                 && !identifierIsAccessorFunction;
         boolean emitName = true;
+    	JSFlexJSEmitter fjs = (JSFlexJSEmitter)getEmitter();
+    	boolean isCustomNamespace = false;
+        if (nodeDef instanceof FunctionDefinition &&
+          	  fjs.isCustomNamespace((FunctionDefinition)nodeDef))
+          	isCustomNamespace = true;
 
         if (nodeDef != null && nodeDef.isStatic())
         {
@@ -168,7 +175,8 @@ public class IdentifierEmitter extends JSSubEmitter implements
                     endMapping(prevSibling);
                     startMapping(parentNode, prevSibling);
                 }
-                write(ASEmitterTokens.MEMBER_ACCESS);
+                if (!isCustomNamespace)
+                	write(ASEmitterTokens.MEMBER_ACCESS);
                 endMapping(parentNode);
             }
         }
@@ -208,7 +216,8 @@ public class IdentifierEmitter extends JSSubEmitter implements
                 else
                     write(ASEmitterTokens.THIS);
 
-                write(ASEmitterTokens.MEMBER_ACCESS);
+                if (!isCustomNamespace)
+                	write(ASEmitterTokens.MEMBER_ACCESS);
                 endMapping(node);
             }
 
@@ -279,6 +288,11 @@ public class IdentifierEmitter extends JSSubEmitter implements
                     write(getEmitter().formatQualifiedName(qname));
                 else if (nodeDef instanceof TypeDefinitionBase)
                     write(getEmitter().formatQualifiedName(qname));
+                else if (isCustomNamespace)
+                {
+                	String ns = ((FunctionDefinition)nodeDef).getNamespaceReference().resolveAETNamespace(getProject()).getName();
+                	write("[\"" + ns + "::" + qname + "\"]");
+                }
                 else
                     write(qname);
                 endMapping(node);

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/0b52f615/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSAccessors.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSAccessors.java b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSAccessors.java
index 7083e3a..eeec770 100644
--- a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSAccessors.java
+++ b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSAccessors.java
@@ -75,6 +75,17 @@ public class TestFlexJSAccessors extends ASTestBase
         assertOut(expected);
     }
 
+    @Test
+    public void testGetSetCustomNamespaceAccessor()
+    {
+        IClassNode node = (IClassNode) getNode(
+                "import flash.utils.flash_proxy;use namespace flash_proxy;public class B { public function B() {}; public function doStuff():void {var theLabel:String = label; label = theLabel;}; private var _label:String; flash_proxy function get label():String {return _label}; flash_proxy function set label(value:String):void {_label = value};}",
+                IClassNode.class, WRAP_LEVEL_PACKAGE);
+        asBlockWalker.visitClass(node);
+        String expected = "/**\n * @constructor\n */\nB = function() {\n};\n\n\n/**\n * @export\n */\nB.prototype.doStuff = function() {\n  var /** @type {string} */ theLabel = this[\"http://www.adobe.com/2006/actionscript/flash/proxy::label\"];\n  this[\"http://www.adobe.com/2006/actionscript/flash/proxy::label\"] = theLabel;\n};\n\n\n/**\n * @private\n * @type {string}\n */\nB.prototype._label;\n\n\nObject.defineProperties(B.prototype, /** @lends {B.prototype} */ {\n/** @export */\n\"http://www.adobe.com/2006/actionscript/flash/proxy::label\": {\nget: /** @this {B} */ function() {\n  return this._label;\n},\nset: /** @this {B} */ function(value) {\n  this._label = value;\n}}}\n);";
+        assertOut(expected);
+    }
+
     @Override
     protected IBackend createBackend()
     {

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/0b52f615/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSFieldMembers.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSFieldMembers.java b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSFieldMembers.java
index 76edcd1..16a1f9f 100644
--- a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSFieldMembers.java
+++ b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSFieldMembers.java
@@ -171,6 +171,15 @@ public class TestFlexJSFieldMembers extends TestGoogFieldMembers
     }
     
     @Test
+    public void testField_withTypeValueCustomNamespaceStaticMethodCall()
+    {
+    	IClassNode node = (IClassNode) getNode("import flash.utils.flash_proxy;use namespace flash_proxy;public static var foo:Object = initFoo(); flash_proxy static function initFoo():Object { return null; }",
+        		IClassNode.class, WRAP_LEVEL_CLASS);
+        asBlockWalker.visitClass(node);
+        assertOut("/**\n * @constructor\n */\nFalconTest_A = function() {\n};\n\n\n/**\n * @export\n * @type {Object}\n */\nFalconTest_A.foo = FalconTest_A[\"http://www.adobe.com/2006/actionscript/flash/proxy::initFoo\"]();\n\n\n/**\n * @export\n * @return {Object}\n */\nFalconTest_A[\"http://www.adobe.com/2006/actionscript/flash/proxy::initFoo\"] = function() {\n  return null;\n};");
+    }
+    
+    @Test
     public void testStaticField_withTypeValueObjectLiteral()
     {
     	IClassNode node = (IClassNode) getNode("static public var foo:Object = { 'foo': 'bar' }",