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 2013/04/12 09:02:29 UTC

[3/8] git commit: resolve against refactor

resolve against refactor


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

Branch: refs/heads/develop
Commit: f71e1a5a04cc400af59e1c17c42aa067605bcfe3
Parents: af9a6f1
Author: Alex Harui <ah...@apache.org>
Authored: Thu Apr 11 17:48:41 2013 -0700
Committer: Alex Harui <ah...@apache.org>
Committed: Thu Apr 11 17:48:41 2013 -0700

----------------------------------------------------------------------
 .../js/flexjs/TestFlexJSAccessorMembers.java       |   20 ++++----
 .../codegen/js/flexjs/TestFlexJSAccessors.java     |    8 ++--
 .../codegen/js/flexjs/TestFlexJSClass.java         |    6 +-
 .../codegen/js/flexjs/TestFlexJSMethodMembers.java |   40 +++++++++++++++
 .../codegen/js/goog/IJSGoogDocEmitter.java         |    2 +
 .../codegen/js/flexjs/JSFlexJSEmitter.java         |   11 ++++-
 .../codegen/js/flexjs/JSFlexJSGoogDocEmitter.java  |   32 ++++++++++++
 .../internal/codegen/js/goog/JSGoogDocEmitter.java |   17 ++++++-
 .../codegen/js/goog/JSGoogDocEmitterTokens.java    |    2 +-
 9 files changed, 118 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/f71e1a5a/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 5f23314..1035101 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
@@ -37,7 +37,7 @@ public class TestFlexJSAccessorMembers extends TestGoogAccessorMembers
     {
         IGetterNode node = (IGetterNode) getAccessor("function get foo():int{}");
         asBlockWalker.visitGetter(node);
-        assertOut("A.prototype.get_foo = function() {\n}");
+        assertOut("/**\n * @return {number}\n */\nA.prototype.get_foo = function() {\n}");
     }
 
     @Override
@@ -46,7 +46,7 @@ public class TestFlexJSAccessorMembers extends TestGoogAccessorMembers
     {
         IGetterNode node = (IGetterNode) getAccessor("function get foo():int{return -1;}");
         asBlockWalker.visitGetter(node);
-        assertOut("A.prototype.get_foo = function() {\n\tvar self = this;\n\treturn -1;\n}");
+        assertOut("/**\n * @return {number}\n */\nA.prototype.get_foo = function() {\n\tvar self = this;\n\treturn -1;\n}");
     }
 
     @Override
@@ -55,7 +55,7 @@ public class TestFlexJSAccessorMembers extends TestGoogAccessorMembers
     {
         IGetterNode node = (IGetterNode) getAccessor("public function get foo():int{return -1;}");
         asBlockWalker.visitGetter(node);
-        assertOut("A.prototype.get_foo = function() {\n\tvar self = this;\n\treturn -1;\n}");
+        assertOut("/**\n * @expose\n * @return {number}\n */\nA.prototype.get_foo = function() {\n\tvar self = this;\n\treturn -1;\n}");
     }
 
     @Override
@@ -64,7 +64,7 @@ public class TestFlexJSAccessorMembers extends TestGoogAccessorMembers
     {
         IGetterNode node = (IGetterNode) getAccessor("public override function get foo():int{super.foo(); return -1;}");
         asBlockWalker.visitGetter(node);
-        assertOut("A.prototype.get_foo = function() {\n\tvar self = this;\n\tgoog.base(this, 'get_foo');\n\treturn -1;\n}");
+        assertOut("/**\n * @expose\n * @return {number}\n * @override\n */\nA.prototype.get_foo = function() {\n\tvar self = this;\n\tgoog.base(this, 'get_foo');\n\treturn -1;\n}");
     }
 
     @Override
@@ -73,7 +73,7 @@ public class TestFlexJSAccessorMembers extends TestGoogAccessorMembers
     {
         IGetterNode node = (IGetterNode) getAccessor("public static function get foo():int{return -1;}");
         asBlockWalker.visitGetter(node);
-        assertOut("A.get_foo = function() {\n\tvar self = this;\n\treturn -1;\n}");
+        assertOut("/**\n * @expose\n * @return {number}\n */\nA.get_foo = function() {\n\tvar self = this;\n\treturn -1;\n}");
     }
 
     @Override
@@ -82,7 +82,7 @@ public class TestFlexJSAccessorMembers extends TestGoogAccessorMembers
     {
         ISetterNode node = (ISetterNode) getAccessor("function set foo(value:int):void{}");
         asBlockWalker.visitSetter(node);
-        assertOut("A.prototype.set_foo = function(value) {\n}");
+        assertOut("/**\n * @param {number} value\n */\nA.prototype.set_foo = function(value) {\n}");
     }
 
     @Override
@@ -91,7 +91,7 @@ public class TestFlexJSAccessorMembers extends TestGoogAccessorMembers
     {
         ISetterNode node = (ISetterNode) getAccessor("function set foo(value:int):void{fetch('haai');}");
         asBlockWalker.visitSetter(node);
-        assertOut("A.prototype.set_foo = function(value) {\n\tvar self = this;\n\tfetch('haai');\n}");
+        assertOut("/**\n * @param {number} value\n */\nA.prototype.set_foo = function(value) {\n\tvar self = this;\n\tfetch('haai');\n}");
     }
 
     @Override
@@ -100,7 +100,7 @@ public class TestFlexJSAccessorMembers extends TestGoogAccessorMembers
     {
         ISetterNode node = (ISetterNode) getAccessor("public function set foo(value:int):void{}");
         asBlockWalker.visitSetter(node);
-        assertOut("A.prototype.set_foo = function(value) {\n}");
+        assertOut("/**\n * @expose\n * @param {number} value\n */\nA.prototype.set_foo = function(value) {\n}");
     }
 
     @Override
@@ -109,7 +109,7 @@ public class TestFlexJSAccessorMembers extends TestGoogAccessorMembers
     {
         ISetterNode node = (ISetterNode) getAccessor("public override function set foo(value:int):void{super.foo();}");
         asBlockWalker.visitSetter(node);
-        assertOut("A.prototype.set_foo = function(value) {\n\tvar self = this;\n\tgoog.base(this, 'set_foo');\n}");
+        assertOut("/**\n * @expose\n * @param {number} value\n * @override\n */\nA.prototype.set_foo = function(value) {\n\tvar self = this;\n\tgoog.base(this, 'set_foo');\n}");
     }
 
     @Override
@@ -118,7 +118,7 @@ public class TestFlexJSAccessorMembers extends TestGoogAccessorMembers
     {
         ISetterNode node = (ISetterNode) getAccessor("public static function set foo(value:int):void{}");
         asBlockWalker.visitSetter(node);
-        assertOut("A.set_foo = function(value) {\n}");
+        assertOut("/**\n * @expose\n * @param {number} value\n */\nA.set_foo = function(value) {\n}");
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/f71e1a5a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSAccessors.java
----------------------------------------------------------------------
diff --git a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSAccessors.java b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSAccessors.java
index 6e3e842..fb13a9e 100644
--- a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSAccessors.java
+++ b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSAccessors.java
@@ -38,7 +38,7 @@ public class TestFlexJSAccessors extends ASTestBase
                 "public function A() {}; public function doStuff():void {label = 'hello, bye'; var theLabel:String = label;}; private var _label:String; public function get label():String {return _label}; public function set label(value:String):void {_label = value}; ",
                 IClassNode.class, WRAP_LEVEL_CLASS);
         asBlockWalker.visitClass(node);
-        String expected = "/**\n * @constructor\n */\nA = function() {\n};\n\nA.prototype.doStuff = function() {\n\tvar self = this;\n\tset_label('hello, bye');\n\tvar /** @type {string} */ theLabel = get_label();\n};\n\n/**\n * @private\n * @type {string}\n */\nA.prototype._label;\n\nA.prototype.get_label = function() {\n\tvar self = this;\n\treturn _label;\n};\n\nA.prototype.set_label = function(value) {\n\tvar self = this;\n\t_label = value;\n};";
+        String expected = "/**\n * @constructor\n */\nA = function() {\n};\n\nA.prototype.doStuff = function() {\n\tvar self = this;\n\tset_label('hello, bye');\n\tvar /** @type {string} */ theLabel = get_label();\n};\n\n/**\n * @private\n * @type {string}\n */\nA.prototype._label;\n\n/**\n * @expose\n * @return {string}\n */\nA.prototype.get_label = function() {\n\tvar self = this;\n\treturn _label;\n};\n\n/**\n * @expose\n * @param {string} value\n */\nA.prototype.set_label = function(value) {\n\tvar self = this;\n\t_label = value;\n};";
         assertOut(expected);
     }
 
@@ -49,7 +49,7 @@ public class TestFlexJSAccessors extends ASTestBase
                 "public class B { public function B() {}; public function doStuff():void {this.label = label + 'bye'; var theLabel:String = label;}; private var _label:String; public function get label():String {return _label}; public 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 * @this {B}\n */\nB.prototype.doStuff = function() {\n\tvar self = this;\n\tself.set_label(self.get_label() + 'bye');\n\tvar /** @type {string} */ theLabel = self.get_label();\n};\n\n/**\n * @private\n * @type {string}\n */\nB.prototype._label;\n\nB.prototype.get_label = function() {\n\tvar self = this;\n\treturn self._label;\n};\n\nB.prototype.set_label = function(value) {\n\tvar self = this;\n\tself._label = value;\n};"; 
+        String expected = "/**\n * @constructor\n */\nB = function() {\n};\n\n/**\n * @expose\n * @this {B}\n */\nB.prototype.doStuff = function() {\n\tvar self = this;\n\tself.set_label(self.get_label() + 'bye');\n\tvar /** @type {string} */ theLabel = self.get_label();\n};\n\n/**\n * @private\n * @type {string}\n */\nB.prototype._label;\n\n/**\n * @expose\n * @return {string}\n */\nB.prototype.get_label = function() {\n\tvar self = this;\n\treturn self._label;\n};\n\n/**\n * @expose\n * @param {string} value\n */\nB.prototype.set_label = function(value) {\n\tvar self = this;\n\tself._label = value;\n};"; 
         assertOut(expected);
     }
 
@@ -60,7 +60,7 @@ public class TestFlexJSAccessors extends ASTestBase
                 "public function A() {}; public function doStuff():void {label = label + 'bye'; var theLabel:String = label;}; private var _label:String; public function get label():String {return _label}; public function set label(value:String):void {_label = value}; ",
                 IClassNode.class, WRAP_LEVEL_CLASS);
         asBlockWalker.visitClass(node);
-        String expected = "/**\n * @constructor\n */\nA = function() {\n};\n\nA.prototype.doStuff = function() {\n\tvar self = this;\n\tset_label(get_label() + 'bye');\n\tvar /** @type {string} */ theLabel = get_label();\n};\n\n/**\n * @private\n * @type {string}\n */\nA.prototype._label;\n\nA.prototype.get_label = function() {\n\tvar self = this;\n\treturn _label;\n};\n\nA.prototype.set_label = function(value) {\n\tvar self = this;\n\t_label = value;\n};";
+        String expected = "/**\n * @constructor\n */\nA = function() {\n};\n\nA.prototype.doStuff = function() {\n\tvar self = this;\n\tset_label(get_label() + 'bye');\n\tvar /** @type {string} */ theLabel = get_label();\n};\n\n/**\n * @private\n * @type {string}\n */\nA.prototype._label;\n\n/**\n * @expose\n * @return {string}\n */\nA.prototype.get_label = function() {\n\tvar self = this;\n\treturn _label;\n};\n\n/**\n * @expose\n * @param {string} value\n */\nA.prototype.set_label = function(value) {\n\tvar self = this;\n\t_label = value;\n};";
         assertOut(expected);
     }
     
@@ -71,7 +71,7 @@ public class TestFlexJSAccessors extends ASTestBase
                 "public class B { public function B() {}; public function doStuff():void {label = this.label; var theLabel:String = label;}; private var _label:String; public function get label():String {return _label}; public 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 * @this {B}\n */\nB.prototype.doStuff = function() {\n\tvar self = this;\n\tself.set_label(self.get_label());\n\tvar /** @type {string} */ theLabel = self.get_label();\n};\n\n/**\n * @private\n * @type {string}\n */\nB.prototype._label;\n\nB.prototype.get_label = function() {\n\tvar self = this;\n\treturn self._label;\n};\n\nB.prototype.set_label = function(value) {\n\tvar self = this;\n\tself._label = value;\n};";
+        String expected = "/**\n * @constructor\n */\nB = function() {\n};\n\n/**\n * @expose\n * @this {B}\n */\nB.prototype.doStuff = function() {\n\tvar self = this;\n\tself.set_label(self.get_label());\n\tvar /** @type {string} */ theLabel = self.get_label();\n};\n\n/**\n * @private\n * @type {string}\n */\nB.prototype._label;\n\n/**\n * @expose\n * @return {string}\n */\nB.prototype.get_label = function() {\n\tvar self = this;\n\treturn self._label;\n};\n\n/**\n * @expose\n * @param {string} value\n */\nB.prototype.set_label = function(value) {\n\tvar self = this;\n\tself._label = value;\n};";
         assertOut(expected);
     }
 

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/f71e1a5a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSClass.java
----------------------------------------------------------------------
diff --git a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSClass.java b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSClass.java
index b36d4b3..c30f9b9 100644
--- a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSClass.java
+++ b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSClass.java
@@ -45,7 +45,7 @@ public class TestFlexJSClass extends TestGoogClass
     {
         IClassNode node = getClassNode("public class B {public function B() {}; public var button:Button = new Button(); public function foo():String {return button.label;};}");
         asBlockWalker.visitClass(node);
-        String expected = "/**\n * @constructor\n */\norg.apache.flex.B = function() {\n};\n\n/**\n * @type {spark.components.Button}\n */\norg.apache.flex.B.prototype.button = new spark.components.Button();\n\n/**\n * @return {string}\n */\norg.apache.flex.B.prototype.foo = function() {\n\tvar self = this;\n\treturn self.button.get_label();\n};";
+        String expected = "/**\n * @constructor\n */\norg.apache.flex.B = function() {\n};\n\n/**\n * @type {spark.components.Button}\n */\norg.apache.flex.B.prototype.button = new spark.components.Button();\n\n/**\n * @expose\n * @return {string}\n */\norg.apache.flex.B.prototype.foo = function() {\n\tvar self = this;\n\treturn self.button.get_label();\n};";
         assertOut(expected);
     }
 
@@ -65,7 +65,7 @@ public class TestFlexJSClass extends TestGoogClass
                 + "foo_bar function get foo6():Object{return null;}"
                 + "foo_bar function set foo6(value:Object):void{}" + "}");
         asBlockWalker.visitClass(node);
-        assertOut("/**\n * @constructor\n */\norg.apache.flex.A = function() {\n};\n\norg.apache.flex.A.prototype.get_foo1 = function() {\n\tvar self = this;\n\treturn null;\n};\n\norg.apache.flex.A.prototype.set_foo1 = function(value) {\n};\n\norg.apache.flex.A.prototype.get_foo2 = function() {\n\tvar self = this;\n\treturn null;\n};\n\norg.apache.flex.A.prototype.set_foo2 = function(value) {\n};\n\norg.apache.flex.A.prototype.get_foo3 = function() {\n\tvar self = this;\n\treturn null;\n};\n\norg.apache.flex.A.prototype.set_foo3 = function(value) {\n};\n\norg.apache.flex.A.prototype.get_foo5 = function() {\n\tvar self = this;\n\treturn null;\n};\n\norg.apache.flex.A.prototype.set_foo5 = function(value) {\n};\n\norg.apache.flex.A.prototype.get_foo6 = function() {\n\tvar self = this;\n\treturn null;\n};\n\norg.apache.flex.A.prototype.set_foo6 = function(value) {\n};");
+        assertOut("/**\n * @constructor\n */\norg.apache.flex.A = function() {\n};\n\n/**\n * @expose\n * @return {Object}\n */\norg.apache.flex.A.prototype.get_foo1 = function() {\n\tvar self = this;\n\treturn null;\n};\n\n/**\n * @expose\n * @param {Object} value\n */\norg.apache.flex.A.prototype.set_foo1 = function(value) {\n};\n\n/**\n * @protected\n * @return {Object}\n */\norg.apache.flex.A.prototype.get_foo2 = function() {\n\tvar self = this;\n\treturn null;\n};\n\n/**\n * @protected\n * @param {Object} value\n */\norg.apache.flex.A.prototype.set_foo2 = function(value) {\n};\n\n/**\n * @private\n * @return {Object}\n */\norg.apache.flex.A.prototype.get_foo3 = function() {\n\tvar self = this;\n\treturn null;\n};\n\n/**\n * @private\n * @param {Object} value\n */\norg.apache.flex.A.prototype.set_foo3 = function(value) {\n};\n\n/**\n * @return {Object}\n */\norg.apache.flex.A.prototype.get_foo5 = function() {\n\tvar self = this;\n\treturn null;\n};\n\n/**\n * @param {Object} val
 ue\n */\norg.apache.flex.A.prototype.set_foo5 = function(value) {\n};\n\n/**\n * @return {Object}\n */\norg.apache.flex.A.prototype.get_foo6 = function() {\n\tvar self = this;\n\treturn null;\n};\n\n/**\n * @param {Object} value\n */\norg.apache.flex.A.prototype.set_foo6 = function(value) {\n};");
     }
 
     @Override
@@ -83,7 +83,7 @@ public class TestFlexJSClass extends TestGoogClass
                 + "public static function foo7(value:Object):void{}"
                 + "foo_bar static function foo7(value:Object):void{}" + "}");
         asBlockWalker.visitClass(node);
-        assertOut("/**\n * @constructor\n */\norg.apache.flex.A = function() {\n};\n\n/**\n * @return {Object}\n */\norg.apache.flex.A.prototype.foo1 = function() {\n\tvar self = this;\n\treturn null;\n};\n\n/**\n * @return {Object}\n */\norg.apache.flex.A.prototype.foo1a = function() {\n\tvar self = this;\n\treturn null;\n};\n\n/**\n * @return {Object}\n * @override\n */\norg.apache.flex.A.prototype.foo1b = function() {\n\tvar self = this;\n\treturn goog.base(this, 'foo1b');\n};\n\n/**\n * @param {Object} value\n */\norg.apache.flex.A.prototype.foo2 = function(value) {\n};\n\n/**\n * @param {Object} value\n */\norg.apache.flex.A.prototype.foo3 = function(value) {\n};\n\n/**\n * @param {Object} value\n */\norg.apache.flex.A.prototype.foo5 = function(value) {\n};\n\n/**\n * @param {Object} value\n */\norg.apache.flex.A.prototype.foo6 = function(value) {\n};\n\n/**\n * @param {Object} value\n */\norg.apache.flex.A.foo7 = function(value) {\n};\n\n/**\n * @param {Object} value\n */\norg
 .apache.flex.A.foo7 = function(value) {\n};");
+        assertOut("/**\n * @constructor\n */\norg.apache.flex.A = function() {\n};\n\n/**\n * @expose\n * @return {Object}\n */\norg.apache.flex.A.prototype.foo1 = function() {\n\tvar self = this;\n\treturn null;\n};\n\n/**\n * @expose\n * @return {Object}\n */\norg.apache.flex.A.prototype.foo1a = function() {\n\tvar self = this;\n\treturn null;\n};\n\n/**\n * @expose\n * @return {Object}\n * @override\n */\norg.apache.flex.A.prototype.foo1b = function() {\n\tvar self = this;\n\treturn goog.base(this, 'foo1b');\n};\n\n/**\n * @protected\n * @param {Object} value\n */\norg.apache.flex.A.prototype.foo2 = function(value) {\n};\n\n/**\n * @private\n * @param {Object} value\n */\norg.apache.flex.A.prototype.foo3 = function(value) {\n};\n\n/**\n * @param {Object} value\n */\norg.apache.flex.A.prototype.foo5 = function(value) {\n};\n\n/**\n * @param {Object} value\n */\norg.apache.flex.A.prototype.foo6 = function(value) {\n};\n\n/**\n * @expose\n * @param {Object} value\n */\norg.apache.fl
 ex.A.foo7 = function(value) {\n};\n\n/**\n * @param {Object} value\n */\norg.apache.flex.A.foo7 = function(value) {\n};");
     }
 
     protected IBackend createBackend()

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/f71e1a5a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSMethodMembers.java
----------------------------------------------------------------------
diff --git a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSMethodMembers.java b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSMethodMembers.java
index 1df4b71..8ac1a71 100644
--- a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSMethodMembers.java
+++ b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSMethodMembers.java
@@ -64,6 +64,46 @@ public class TestFlexJSMethodMembers extends TestGoogMethodMembers
     }
 
     @Override
+    @Test
+    public void testMethod_withNamespace()
+    {
+        IFunctionNode node = getMethod("public function foo(bar:String, baz:int = null):int{\treturn -1;}");
+        asBlockWalker.visitFunction(node);
+        // we ignore the 'public' namespace completely
+        assertOut("/**\n * @expose\n * @param {string} bar\n * @param {number=} baz\n * @return {number}\n */\nA.prototype.foo = function(bar, baz) {\n\tvar self = this;\n\tbaz = typeof baz !== 'undefined' ? baz : null;\n\treturn -1;\n}");
+    }
+
+    @Override
+    @Test
+    public void testMethod_withNamespaceModifiers()
+    {
+        IFunctionNode node = getMethod("public static function foo(bar:String, baz:int = null):int{\treturn -1;}");
+        asBlockWalker.visitFunction(node);
+        // (erikdebruin) here we actually DO want to declare the method
+        //               directly on the 'class' constructor instead of the
+        //               prototype!
+        assertOut("/**\n * @expose\n * @param {string} bar\n * @param {number=} baz\n * @return {number}\n */\nA.foo = function(bar, baz) {\n\tvar self = this;\n\tbaz = typeof baz !== 'undefined' ? baz : null;\n\treturn -1;\n}");
+    }
+
+    @Override
+    @Test
+    public void testMethod_withNamespaceModifierOverride()
+    {
+        IFunctionNode node = getMethod("public override function foo(bar:String, baz:int = null):int{\treturn -1;}");
+        asBlockWalker.visitFunction(node);
+        assertOut("/**\n * @expose\n * @param {string} bar\n * @param {number=} baz\n * @return {number}\n * @override\n */\nA.prototype.foo = function(bar, baz) {\n\tvar self = this;\n\tbaz = typeof baz !== 'undefined' ? baz : null;\n\treturn -1;\n}");
+    }
+
+    @Override
+    @Test
+    public void testMethod_withNamespaceModifierOverrideBackwards()
+    {
+        IFunctionNode node = getMethod("override public function foo(bar:String, baz:int = null):int{return -1;}");
+        asBlockWalker.visitFunction(node);
+        assertOut("/**\n * @expose\n * @param {string} bar\n * @param {number=} baz\n * @return {number}\n * @override\n */\nA.prototype.foo = function(bar, baz) {\n\tvar self = this;\n\tbaz = typeof baz !== 'undefined' ? baz : null;\n\treturn -1;\n}");
+    }
+
+    @Override
     protected IBackend createBackend()
     {
         return new FlexJSBackend();

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/f71e1a5a/compiler.jx/src/org/apache/flex/compiler/codegen/js/goog/IJSGoogDocEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/codegen/js/goog/IJSGoogDocEmitter.java b/compiler.jx/src/org/apache/flex/compiler/codegen/js/goog/IJSGoogDocEmitter.java
index 9171687..540f97f 100644
--- a/compiler.jx/src/org/apache/flex/compiler/codegen/js/goog/IJSGoogDocEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/codegen/js/goog/IJSGoogDocEmitter.java
@@ -121,6 +121,8 @@ public interface IJSGoogDocEmitter extends IJSDocEmitter
 
     void emitParam(IParameterNode node, String packageName);
 
+    void emitPublic(IASNode node);
+
     void emitPrivate(IASNode node);
 
     void emitProtected(IASNode node);

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/f71e1a5a/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 a3914f2..20f169c 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,6 +21,7 @@ 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.common.ASModifier;
 import org.apache.flex.compiler.common.ModifiersSet;
@@ -30,6 +31,7 @@ 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.goog.JSGoogDocEmitter;
 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.definitions.AccessorDefinition;
@@ -524,12 +526,14 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
             // body;
         };
         */
+        ICompilerProject project = getWalker().getProject();
 
         FunctionNode fn = (FunctionNode) node;
         fn.parseFunctionBody(problems);
 
         IFunctionDefinition definition = node.getDefinition();
         ITypeDefinition type = (ITypeDefinition) definition.getParent();
+        getDoc().emitMethodDoc(fn, project);
         write(type.getQualifiedName());
         if (!node.hasModifier(ASModifier.STATIC))
         {
@@ -546,7 +550,6 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
         //writeNewline();
         emitMethodScope(node.getScopedNode());
     }
-
     private void writeGetSetPrefix(boolean isGet)
     {
         if (isGet)
@@ -555,5 +558,11 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
             write(ASEmitterTokens.SET);
         write("_");
     }
+    
+    @Override
+    public IDocEmitter getDocEmitter()
+    {
+        return new JSFlexJSGoogDocEmitter(this);
+    }
 
 }

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/f71e1a5a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSGoogDocEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSGoogDocEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSGoogDocEmitter.java
new file mode 100644
index 0000000..7a86fd2
--- /dev/null
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSGoogDocEmitter.java
@@ -0,0 +1,32 @@
+package org.apache.flex.compiler.internal.codegen.js.flexjs;
+
+import org.apache.flex.compiler.codegen.js.IJSEmitter;
+import org.apache.flex.compiler.constants.IASKeywordConstants;
+import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogDocEmitter;
+import org.apache.flex.compiler.tree.as.IFunctionNode;
+
+public class JSFlexJSGoogDocEmitter extends JSGoogDocEmitter {
+
+	public JSFlexJSGoogDocEmitter(IJSEmitter emitter) {
+		super(emitter);
+		// TODO Auto-generated constructor stub
+	}
+
+	@Override
+	public void emitMethodAccess(IFunctionNode node)
+	{
+        String ns = node.getNamespace();
+        if (ns == IASKeywordConstants.PRIVATE)
+        {
+            emitPrivate(node);
+        }
+        else if (ns == IASKeywordConstants.PROTECTED)
+        {
+            emitProtected(node);
+        }
+        else if (ns == IASKeywordConstants.PUBLIC)
+        {
+        	emitPublic(node);
+        }
+	}
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/f71e1a5a/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 0863416..5f8323b 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
@@ -143,8 +143,9 @@ public class JSGoogDocEmitter extends JSDocEmitter implements IJSGoogDocEmitter
                 if (containsThisReference(node))
                 {
                     begin();
+                    emitMethodAccess(node);
                     hasDoc = true;
-
+                    
                     emitThis(classDefinition, classDefinition.getPackageName());
                 }
             }
@@ -156,6 +157,7 @@ public class JSGoogDocEmitter extends JSDocEmitter implements IJSGoogDocEmitter
                 if (!hasDoc)
                 {
                     begin();
+                    emitMethodAccess(node);
                     hasDoc = true;
                 }
 
@@ -173,6 +175,7 @@ public class JSGoogDocEmitter extends JSDocEmitter implements IJSGoogDocEmitter
                     if (!hasDoc)
                     {
                         begin();
+                        emitMethodAccess(node);
                         hasDoc = true;
                     }
 
@@ -186,6 +189,7 @@ public class JSGoogDocEmitter extends JSDocEmitter implements IJSGoogDocEmitter
                     if (!hasDoc)
                     {
                         begin();
+                        emitMethodAccess(node);
                         hasDoc = true;
                     }
 
@@ -198,6 +202,11 @@ public class JSGoogDocEmitter extends JSDocEmitter implements IJSGoogDocEmitter
         }
     }
 
+    public void emitMethodAccess(IFunctionNode node)
+    {
+    	// do nothing
+    }
+    
     @Override
     public void emitVarDoc(IVariableNode node, IDefinition def)
     {
@@ -273,6 +282,12 @@ public class JSGoogDocEmitter extends JSDocEmitter implements IJSGoogDocEmitter
     }
 
     @Override
+    public void emitPublic(IASNode node)
+    {
+        emitJSDocLine(JSGoogDocEmitterTokens.EXPOSE);
+    }
+
+    @Override
     public void emitReturn(IFunctionNode node, String packageName)
     {
         String rtype = node.getReturnType();

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/f71e1a5a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogDocEmitterTokens.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogDocEmitterTokens.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogDocEmitterTokens.java
index 743a57b..17e3bdb 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogDocEmitterTokens.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogDocEmitterTokens.java
@@ -4,7 +4,7 @@ import org.apache.flex.compiler.codegen.IEmitterTokens;
 
 public enum JSGoogDocEmitterTokens implements IEmitterTokens
 {
-    PARAM("param"), STAR("*"), TYPE("type");
+    PARAM("param"), STAR("*"), TYPE("type"), EXPOSE("expose");
 
     private String token;