You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by er...@apache.org on 2013/01/25 14:30:37 UTC

svn commit: r1438502 [1/2] - in /flex/falcon/trunk: compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/ compiler.jx.tests/test-files/ compiler.jx/src/org/apache/flex/compiler/internal/js/codegen/goog/ compiler.jx/src/org/apache/fle...

Author: erikdebruin
Date: Fri Jan 25 13:30:37 2013
New Revision: 1438502

URL: http://svn.apache.org/viewvc?rev=1438502&view=rev
Log:
Major addition: 'self' references added to output

- IJSGoogDocEmitter: removed APIs for unused annotations
- IJSGoogDocEmitter: changed signature of some APIs to match the needs of the implementation
- JSGoogDocEmitter: added annotation using fully qualified names for return values and function parameters
- JSGoogEmitter: added support for 'goog' JSs hunger for 'self' references for all class members etc.
- changed tests to reflect the need for 'self'
- added a large test file that is a mirror of the AS file used in the POC, to facilitate output verification and assure integrity of POC

Added:
    flex/falcon/trunk/compiler.jx.tests/test-files/poc.as   (with props)
    flex/falcon/trunk/compiler.jx.tests/test-files/poc_result.js   (with props)
Modified:
    flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogAccessorMembers.java
    flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogClass.java
    flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogEmiter.java
    flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogExpressions.java
    flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogFile.java
    flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogGlobalClasses.java
    flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogMethodMembers.java
    flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogPackage.java
    flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogStatements.java
    flex/falcon/trunk/compiler.jx.tests/test-files/call-super_result.js
    flex/falcon/trunk/compiler.jx.tests/test-files/get-set_result.js
    flex/falcon/trunk/compiler.jx.tests/test-files/output.js
    flex/falcon/trunk/compiler.jx.tests/test-files/qualify-new-object.as
    flex/falcon/trunk/compiler.jx.tests/test-files/qualify-new-object_result.js
    flex/falcon/trunk/compiler.jx/src/org/apache/flex/compiler/internal/js/codegen/goog/JSGoogDocEmitter.java
    flex/falcon/trunk/compiler.jx/src/org/apache/flex/compiler/internal/js/codegen/goog/JSGoogEmitter.java
    flex/falcon/trunk/compiler.jx/src/org/apache/flex/compiler/js/codegen/goog/IJSGoogDocEmitter.java

Modified: flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogAccessorMembers.java
URL: http://svn.apache.org/viewvc/flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogAccessorMembers.java?rev=1438502&r1=1438501&r2=1438502&view=diff
==============================================================================
--- flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogAccessorMembers.java (original)
+++ flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogAccessorMembers.java Fri Jan 25 13:30:37 2013
@@ -51,7 +51,7 @@ public class TestGoogAccessorMembers ext
         IGetterNode node = (IGetterNode) getAccessor("function get foo():int{return -1;}");
         visitor.visitGetter(node);
         assertOut("Object.defineProperty(\n\tA.prototype, \n\t'foo', "
-                + "\n\t{get:function() {\n\t\treturn -1;\n\t}, configurable:true}\n)");
+                + "\n\t{get:function() {\n\t\tvar self = this;\n\t\treturn -1;\n\t}, configurable:true}\n)");
     }
 
     @Override
@@ -61,7 +61,7 @@ public class TestGoogAccessorMembers ext
         IGetterNode node = (IGetterNode) getAccessor("public function get foo():int{return -1;}");
         visitor.visitGetter(node);
         assertOut("Object.defineProperty(\n\tA.prototype, \n\t'foo', "
-                + "\n\t{get:function() {\n\t\treturn -1;\n\t}, configurable:true}\n)");
+                + "\n\t{get:function() {\n\t\tvar self = this;\n\t\treturn -1;\n\t}, configurable:true}\n)");
     }
 
     @Override
@@ -69,20 +69,20 @@ public class TestGoogAccessorMembers ext
     public void testGetAccessor_withNamespaceOverride()
     {
         // TODO (erikdebruin) need to figure out how to handle calls to 
-    	//                    'super' since the JS getter is actually an 
-    	//                    anonymous function...
-    	IGetterNode node = (IGetterNode) getAccessor("public override function get foo():int{super.foo(); return -1;}");
+        //                    'super' since the JS getter is actually an 
+        //                    anonymous function...
+        IGetterNode node = (IGetterNode) getAccessor("public override function get foo():int{super.foo(); return -1;}");
         visitor.visitGetter(node);
-        assertOut("Object.defineProperty(\n\tA.prototype, \n\t'foo', \n\t{get:function() {\n\t\tgoog.base(this, 'foo');\n\t\treturn -1;\n\t}, configurable:true}\n)");
+        assertOut("Object.defineProperty(\n\tA.prototype, \n\t'foo', \n\t{get:function() {\n\t\tvar self = this;\n\t\tgoog.base(this, 'foo');\n\t\treturn -1;\n\t}, configurable:true}\n)");
     }
 
     @Override
     @Test
     public void testGetAccessor_withStatic()
     {
-    	IGetterNode node = (IGetterNode) getAccessor("public static function get foo():int{return -1;}");
+        IGetterNode node = (IGetterNode) getAccessor("public static function get foo():int{return -1;}");
         visitor.visitGetter(node);
-        assertOut("Object.defineProperty(\n\tA, \n\t'foo', \n\t{get:function() {\n\t\treturn -1;\n\t}, configurable:true}\n)");
+        assertOut("Object.defineProperty(\n\tA, \n\t'foo', \n\t{get:function() {\n\t\tvar self = this;\n\t\treturn -1;\n\t}, configurable:true}\n)");
     }
 
     @Override
@@ -101,7 +101,7 @@ public class TestGoogAccessorMembers ext
         ISetterNode node = (ISetterNode) getAccessor("function set foo(value:int):void{trace('haai');}");
         visitor.visitSetter(node);
         assertOut("Object.defineProperty(\n\tA.prototype, \n\t'foo', "
-                + "\n\t{set:function(value) {\n\t\ttrace('haai');\n\t}, configurable:true}\n)");
+                + "\n\t{set:function(value) {\n\t\tvar self = this;\n\t\ttrace('haai');\n\t}, configurable:true}\n)");
     }
 
     @Override
@@ -119,16 +119,16 @@ public class TestGoogAccessorMembers ext
     public void testSetAccessor_withNamespaceOverride()
     {
         // TODO (erikdebruin) see: testGetAccessor_withNamespaceOverride
-    	ISetterNode node = (ISetterNode) getAccessor("public override function set foo(value:int):void{super.foo();}");
+        ISetterNode node = (ISetterNode) getAccessor("public override function set foo(value:int):void{super.foo();}");
         visitor.visitSetter(node);
-        assertOut("Object.defineProperty(\n\tA.prototype, \n\t'foo', \n\t{set:function(value) {\n\t\tgoog.base(this, 'foo');\n\t}, configurable:true}\n)");
+        assertOut("Object.defineProperty(\n\tA.prototype, \n\t'foo', \n\t{set:function(value) {\n\t\tvar self = this;\n\t\tgoog.base(this, 'foo');\n\t}, configurable:true}\n)");
     }
 
     @Override
     @Test
     public void testSetAccessor_withStatic()
     {
-    	ISetterNode node = (ISetterNode) getAccessor("public static function set foo(value:int):void{}");
+        ISetterNode node = (ISetterNode) getAccessor("public static function set foo(value:int):void{}");
         visitor.visitSetter(node);
         assertOut("Object.defineProperty(\n\tA, \n\t'foo', \n\t{set:function(value) {\n\t}, configurable:true}\n)");
     }

Modified: flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogClass.java
URL: http://svn.apache.org/viewvc/flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogClass.java?rev=1438502&r1=1438501&r2=1438502&view=diff
==============================================================================
--- flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogClass.java (original)
+++ flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogClass.java Fri Jan 25 13:30:37 2013
@@ -34,8 +34,8 @@ import org.junit.Test;
  */
 public class TestGoogClass extends TestClass
 {
-	@Override
-	@Test
+    @Override
+    @Test
     public void testSimple()
     {
         IClassNode node = getClassNode("public class A{}");
@@ -43,48 +43,48 @@ public class TestGoogClass extends TestC
         assertOut("/**\n * @constructor\n */\norg.apache.flex.A = function() {\n};");
     }
 
-	@Override
+    @Override
     @Test
     public void testSimpleInternal()
     {
-		// (erikdebruin) the AS compiler will enforce 'internal' namespace, 
-		//               in JS we ignore it
+        // (erikdebruin) the AS compiler will enforce 'internal' namespace, 
+        //               in JS we ignore it
         IClassNode node = getClassNode("internal class A{}");
         visitor.visitClass(node);
         assertOut("/**\n * @constructor\n */\norg.apache.flex.A = function() {\n};");
     }
 
-	@Override
+    @Override
     @Test
     public void testSimpleFinal()
     {
-		// (erikdebruin) the AS compiler will enforce the 'final' keyword, 
-		//               in JS we ignore it
+        // (erikdebruin) the AS compiler will enforce the 'final' keyword, 
+        //               in JS we ignore it
         IClassNode node = getClassNode("public final class A{}");
         visitor.visitClass(node);
         assertOut("/**\n * @constructor\n */\norg.apache.flex.A = function() {\n};");
     }
 
-	@Override
+    @Override
     @Test
     public void testSimpleDynamic()
     {
-		// (erikdebruin) all JS objects are 'dynamic' by design
+        // (erikdebruin) all JS objects are 'dynamic' by design
         IClassNode node = getClassNode("public dynamic class A{}");
         visitor.visitClass(node);
         assertOut("/**\n * @constructor\n */\norg.apache.flex.A = function() {\n};");
     }
 
-	@Override
+    @Override
     @Test
     public void testSimpleExtends()
     {
-       IClassNode node = getClassNode("public class A extends Button {public function A() {}}");
+        IClassNode node = getClassNode("public class A extends Button {public function A() {}}");
         visitor.visitClass(node);
         assertOut("/**\n * @constructor\n * @extends {spark.components.Button}\n */\norg.apache.flex.A = function() {\n\tgoog.base(this);\n}\ngoog.inherits(org.apache.flex.A, spark.components.Button);");
     }
 
-	@Override
+    @Override
     @Test
     public void testSimpleImplements()
     {
@@ -93,7 +93,7 @@ public class TestGoogClass extends TestC
         assertOut("/**\n * @constructor\n * @implements {flash.events.IEventDispatcher}\n */\norg.apache.flex.A = function() {\n};");
     }
 
-	@Override
+    @Override
     @Test
     public void testSimpleImplementsMultiple()
     {
@@ -102,7 +102,7 @@ public class TestGoogClass extends TestC
         assertOut("/**\n * @constructor\n * @implements {flash.events.IEventDispatcher}\n * @implements {mx.logging.ILogger}\n */\norg.apache.flex.A = function() {\n};");
     }
 
-	@Override
+    @Override
     @Test
     public void testSimpleExtendsImplements()
     {
@@ -111,7 +111,7 @@ public class TestGoogClass extends TestC
         assertOut("/**\n * @constructor\n * @extends {spark.components.Button}\n * @implements {flash.events.IEventDispatcher}\n */\norg.apache.flex.A = function() {\n\tgoog.base(this);\n}\ngoog.inherits(org.apache.flex.A, spark.components.Button);");
     }
 
-	@Override
+    @Override
     @Test
     public void testSimpleExtendsImplementsMultiple()
     {
@@ -120,7 +120,7 @@ public class TestGoogClass extends TestC
         assertOut("/**\n * @constructor\n * @extends {spark.components.Button}\n * @implements {flash.events.IEventDispatcher}\n * @implements {mx.logging.ILogger}\n */\norg.apache.flex.A = function() {\n\tgoog.base(this);\n}\ngoog.inherits(org.apache.flex.A, spark.components.Button);");
     }
 
-	@Override
+    @Override
     @Test
     public void testSimpleFinalExtendsImplementsMultiple()
     {
@@ -129,7 +129,7 @@ public class TestGoogClass extends TestC
         assertOut("/**\n * @constructor\n * @extends {spark.components.Button}\n * @implements {flash.events.IEventDispatcher}\n * @implements {mx.logging.ILogger}\n */\norg.apache.flex.A = function() {\n\tgoog.base(this);\n}\ngoog.inherits(org.apache.flex.A, spark.components.Button);");
     }
 
-	@Override
+    @Override
     @Test
     public void testQualifiedExtendsImplementsMultiple()
     {
@@ -138,16 +138,16 @@ public class TestGoogClass extends TestC
         assertOut("/**\n * @constructor\n * @extends {spark.components.Button}\n * @implements {flash.events.IEventDispatcher}\n * @implements {mx.logging.ILogger}\n */\norg.apache.flex.A = function() {\n\tgoog.base(this);\n}\ngoog.inherits(org.apache.flex.A, spark.components.Button);");
     }
 
-	@Override
+    @Override
     @Test
     public void testConstructor()
     {
         IClassNode node = getClassNode("public class A {public function A() {super('foo', 42);}}");
         visitor.visitClass(node);
-        assertOut("/**\n * @constructor\n */\norg.apache.flex.A = function() {\n\tgoog.base(this, 'foo', 42);\n};");
+        assertOut("/**\n * @constructor\n */\norg.apache.flex.A = function() {\n\tvar self = this;\n\tgoog.base(this, 'foo', 42);\n};");
     }
-    
-	@Override
+
+    @Override
     @Test
     public void testFields()
     {
@@ -157,20 +157,20 @@ public class TestGoogClass extends TestC
         assertOut("/**\n * @constructor\n */\norg.apache.flex.A = function() {\n};\n\n/**\n * @type {Object}\n */\norg.apache.flex.A.prototype.a;\n\n/**\n * @protected\n * @type {string}\n */\norg.apache.flex.A.prototype.b;\n\n/**\n * @private\n * @type {number}\n */\norg.apache.flex.A.prototype.c;\n\n/**\n * @type {number}\n */\norg.apache.flex.A.prototype.d;\n\n/**\n * @type {number}\n */\norg.apache.flex.A.prototype.e;");
     }
 
-	@Override
+    @Override
     @Test
     public void testConstants()
     {
-        IClassNode node = getClassNode("public class A {" +
-        		"public static const A:int = 42;" +
-        		"protected static const B:Number = 42;" +
-                "private static const C:Number = 42;" +
-                "foo_bar static const C:String = 'me' + 'you';");
+        IClassNode node = getClassNode("public class A {"
+                + "public static const A:int = 42;"
+                + "protected static const B:Number = 42;"
+                + "private static const C:Number = 42;"
+                + "foo_bar static const C:String = 'me' + 'you';");
         visitor.visitClass(node);
         assertOut("/**\n * @constructor\n */\norg.apache.flex.A = function() {\n};\n\n/**\n * @const\n * @type {number}\n */\norg.apache.flex.A.A = 42;\n\n/**\n * @protected\n * @const\n * @type {number}\n */\norg.apache.flex.A.B = 42;\n\n/**\n * @private\n * @const\n * @type {number}\n */\norg.apache.flex.A.C = 42;\n\n/**\n * @const\n * @type {string}\n */\norg.apache.flex.A.C = 'me' + 'you';");
     }
-    
-	@Override
+
+    @Override
     @Test
     public void testAccessors()
     {
@@ -186,10 +186,10 @@ public class TestGoogClass extends TestC
                 + "foo_bar function get foo6():Object{return null;}"
                 + "foo_bar function set foo6(value:Object):void{}" + "}");
         visitor.visitClass(node);
-        assertOut("/**\n * @constructor\n */\norg.apache.flex.A = function() {\n};\n\n/**\n * @type {Object}\n */\norg.apache.flex.A.prototype.foo1;\n\nObject.defineProperty(\n\torg.apache.flex.A.prototype, \n\t'foo1', \n\t{get:function() {\n\t\treturn null;\n\t}, configurable:true}\n);\n\nObject.defineProperty(\n\torg.apache.flex.A.prototype, \n\t'foo1', \n\t{set:function(value) {\n\t}, configurable:true}\n);\n\n/**\n * @protected\n * @type {Object}\n */\norg.apache.flex.A.prototype.foo2;\n\nObject.defineProperty(\n\torg.apache.flex.A.prototype, \n\t'foo2', \n\t{get:function() {\n\t\treturn null;\n\t}, configurable:true}\n);\n\nObject.defineProperty(\n\torg.apache.flex.A.prototype, \n\t'foo2', \n\t{set:function(value) {\n\t}, configurable:true}\n);\n\n/**\n * @private\n * @type {Object}\n */\norg.apache.flex.A.prototype.foo3;\n\nObject.defineProperty(\n\torg.apache.flex.A.prototype, \n\t'foo3', \n\t{get:function() {\n\t\treturn null;\n\t}, configurable:true}\n);\n\nObject.d
 efineProperty(\n\torg.apache.flex.A.prototype, \n\t'foo3', \n\t{set:function(value) {\n\t}, configurable:true}\n);\n\n/**\n * @type {Object}\n */\norg.apache.flex.A.prototype.foo5;\n\nObject.defineProperty(\n\torg.apache.flex.A.prototype, \n\t'foo5', \n\t{get:function() {\n\t\treturn null;\n\t}, configurable:true}\n);\n\nObject.defineProperty(\n\torg.apache.flex.A.prototype, \n\t'foo5', \n\t{set:function(value) {\n\t}, configurable:true}\n);\n\n/**\n * @type {Object}\n */\norg.apache.flex.A.prototype.foo6;\n\nObject.defineProperty(\n\torg.apache.flex.A.prototype, \n\t'foo6', \n\t{get:function() {\n\t\treturn null;\n\t}, configurable:true}\n);\n\nObject.defineProperty(\n\torg.apache.flex.A.prototype, \n\t'foo6', \n\t{set:function(value) {\n\t}, configurable:true}\n);");
+        assertOut("/**\n * @constructor\n */\norg.apache.flex.A = function() {\n};\n\n/**\n * @type {Object}\n */\norg.apache.flex.A.prototype.foo1;\n\nObject.defineProperty(\n\torg.apache.flex.A.prototype, \n\t'foo1', \n\t{get:function() {\n\t\tvar self = this;\n\t\treturn null;\n\t}, configurable:true}\n);\n\nObject.defineProperty(\n\torg.apache.flex.A.prototype, \n\t'foo1', \n\t{set:function(value) {\n\t}, configurable:true}\n);\n\n/**\n * @protected\n * @type {Object}\n */\norg.apache.flex.A.prototype.foo2;\n\nObject.defineProperty(\n\torg.apache.flex.A.prototype, \n\t'foo2', \n\t{get:function() {\n\t\tvar self = this;\n\t\treturn null;\n\t}, configurable:true}\n);\n\nObject.defineProperty(\n\torg.apache.flex.A.prototype, \n\t'foo2', \n\t{set:function(value) {\n\t}, configurable:true}\n);\n\n/**\n * @private\n * @type {Object}\n */\norg.apache.flex.A.prototype.foo3;\n\nObject.defineProperty(\n\torg.apache.flex.A.prototype, \n\t'foo3', \n\t{get:function() {\n\t\tvar self 
 = this;\n\t\treturn null;\n\t}, configurable:true}\n);\n\nObject.defineProperty(\n\torg.apache.flex.A.prototype, \n\t'foo3', \n\t{set:function(value) {\n\t}, configurable:true}\n);\n\n/**\n * @type {Object}\n */\norg.apache.flex.A.prototype.foo5;\n\nObject.defineProperty(\n\torg.apache.flex.A.prototype, \n\t'foo5', \n\t{get:function() {\n\t\tvar self = this;\n\t\treturn null;\n\t}, configurable:true}\n);\n\nObject.defineProperty(\n\torg.apache.flex.A.prototype, \n\t'foo5', \n\t{set:function(value) {\n\t}, configurable:true}\n);\n\n/**\n * @type {Object}\n */\norg.apache.flex.A.prototype.foo6;\n\nObject.defineProperty(\n\torg.apache.flex.A.prototype, \n\t'foo6', \n\t{get:function() {\n\t\tvar self = this;\n\t\treturn null;\n\t}, configurable:true}\n);\n\nObject.defineProperty(\n\torg.apache.flex.A.prototype, \n\t'foo6', \n\t{set:function(value) {\n\t}, configurable:true}\n);");
     }
 
-	@Override
+    @Override
     @Test
     public void testMethods()
     {
@@ -204,18 +204,20 @@ public class TestGoogClass extends TestC
                 + "public static function foo7(value:Object):void{}"
                 + "foo_bar static function foo7(value:Object):void{}" + "}");
         visitor.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\treturn null;\n};\n\n/**\n * @return {Object}\n */\norg.apache.flex.A.prototype.foo1a = function() {\n\treturn null;\n};\n\n/**\n * @return {Object}\n * @override\n */\norg.apache.flex.A.prototype.foo1b = function() {\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 * @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};");
     }
 
-	@Override
+    @Override
     protected IClassNode getClassNode(String code)
     {
-        String source = "package org.apache.flex {import flash.events.IEventDispatcher;import mx.logging.ILogger;import spark.components.Button;" + code + "}";
+        String source = "package org.apache.flex {import flash.events.IEventDispatcher;import mx.logging.ILogger;import spark.components.Button;"
+                + code + "}";
         IFileNode node = getFileNode(source);
-        IClassNode child = (IClassNode) findFirstDescendantOfType(node, IClassNode.class);
+        IClassNode child = (IClassNode) findFirstDescendantOfType(node,
+                IClassNode.class);
         return child;
     }
-    
+
     protected IBackend createBackend()
     {
         return new GoogBackend();

Modified: flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogEmiter.java
URL: http://svn.apache.org/viewvc/flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogEmiter.java?rev=1438502&r1=1438501&r2=1438502&view=diff
==============================================================================
--- flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogEmiter.java (original)
+++ flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogEmiter.java Fri Jan 25 13:30:37 2013
@@ -49,7 +49,7 @@ public class TestGoogEmiter extends Test
                 + "return \"Don't \" + _privateVar + value; }";
         IFileNode node = getFileNode(code);
         visitor.visitFile(node);
-        assertOut("goog.provide('com.example.components.MyTextButton');\n\ngoog.require('spark.components.Button');\n\n/**\n * @constructor\n * @extends {spark.components.Button}\n */\ncom.example.components.MyTextButton = function() {\n\tgoog.base(this);\n\tif (this.foo() != 42) {\n\t\tthis.bar();\n\t}\n}\ngoog.inherits(com.example.components.MyTextButton, spark.components.Button);\n\n/**\n * @private\n * @type {string}\n */\ncom.example.components.MyTextButton.prototype._privateVar = \"do \";\n\n/**\n * @type {number}\n */\ncom.example.components.MyTextButton.prototype.publicProperty = 100;\n\n/**\n * @param {string} value\n * @return {string}\n */\ncom.example.components.MyTextButton.prototype.myFunction = function(value) {\n\treturn \"Don't \" + _privateVar + value;\n};");
+        assertOut("goog.provide('com.example.components.MyTextButton');\n\ngoog.require('spark.components.Button');\n\n/**\n * @constructor\n * @extends {spark.components.Button}\n */\ncom.example.components.MyTextButton = function() {\n\tvar self = this;\n\tgoog.base(this);\n\tif (foo() != 42) {\n\t\tbar();\n\t}\n}\ngoog.inherits(com.example.components.MyTextButton, spark.components.Button);\n\n/**\n * @private\n * @type {string}\n */\ncom.example.components.MyTextButton.prototype._privateVar = \"do \";\n\n/**\n * @type {number}\n */\ncom.example.components.MyTextButton.prototype.publicProperty = 100;\n\n/**\n * @param {string} value\n * @return {string}\n */\ncom.example.components.MyTextButton.prototype.myFunction = function(value) {\n\tvar self = this;\n\treturn \"Don't \" + self._privateVar + value;\n};");
     }
 
     @Test
@@ -66,7 +66,7 @@ public class TestGoogEmiter extends Test
         IFunctionNode node = getMethodWithPackage("function method1(bar:int):int{\n}");
         visitor.visitFunction(node);
         assertOut("/**\n * @param {number} bar\n * @return {number}\n */\n"
-        		+ "foo.bar.A.prototype.method1 = function(bar) {\n}");
+                + "foo.bar.A.prototype.method1 = function(bar) {\n}");
     }
 
     @Test
@@ -74,8 +74,8 @@ public class TestGoogEmiter extends Test
     {
         IFunctionNode node = getMethodWithPackage("function method1(bar:int, baz:String, goo:A):void{\n}");
         visitor.visitFunction(node);
-        assertOut("/**\n * @param {number} bar\n * @param {string} baz\n * @param {A} goo\n */\n"
-        		+ "foo.bar.A.prototype.method1 = function(bar, baz, goo) {\n}");
+        assertOut("/**\n * @param {number} bar\n * @param {string} baz\n * @param {foo.bar.A} goo\n */\n"
+                + "foo.bar.A.prototype.method1 = function(bar, baz, goo) {\n}");
     }
 
     @Test
@@ -83,8 +83,8 @@ public class TestGoogEmiter extends Test
     {
         IFunctionNode node = getMethodWithPackage("function method1(bar:int, baz:String, goo:A):void{\n}");
         visitor.visitFunction(node);
-        assertOut("/**\n * @param {number} bar\n * @param {string} baz\n * @param {A} goo\n */\n"
-        		+ "foo.bar.A.prototype.method1 = function(bar, baz, goo) {\n}");
+        assertOut("/**\n * @param {number} bar\n * @param {string} baz\n * @param {foo.bar.A} goo\n */\n"
+                + "foo.bar.A.prototype.method1 = function(bar, baz, goo) {\n}");
     }
 
     @Test
@@ -93,22 +93,24 @@ public class TestGoogEmiter extends Test
         IFunctionNode node = getMethodWithPackage("function method1(p1:int, p2:int, p3:int = 3, p4:int = 4):int{return p1 + p2 + p3 + p4;}");
         visitor.visitFunction(node);
         assertOut("/**\n * @param {number} p1\n * @param {number} p2\n * @param {number=} p3\n * @param {number=} p4\n * @return {number}\n */\n"
-        		+ "foo.bar.A.prototype.method1 = function(p1, p2, p3, p4) {\n"
+                + "foo.bar.A.prototype.method1 = function(p1, p2, p3, p4) {\n"
+                + "\tvar self = this;\n"
                 + "\tp3 = typeof p3 !== 'undefined' ? p3 : 3;\n"
                 + "\tp4 = typeof p4 !== 'undefined' ? p4 : 4;\n"
                 + "\treturn p1 + p2 + p3 + p4;\n}");
     }
-    
+
     @Test
     public void testDefaultParameter_Body()
     {
         IFunctionNode node = getMethodWithPackage("function method1(bar:int = 42, bax:int = 4):void{if (a) foo();}");
         visitor.visitFunction(node);
         assertOut("/**\n * @param {number=} bar\n * @param {number=} bax\n */\n"
-        		+ "foo.bar.A.prototype.method1 = function(bar, bax) {\n"
-        		+ "\tbar = typeof bar !== 'undefined' ? bar : 42;\n"
+                + "foo.bar.A.prototype.method1 = function(bar, bax) {\n"
+                + "\tvar self = this;\n"
+                + "\tbar = typeof bar !== 'undefined' ? bar : 42;\n"
                 + "\tbax = typeof bax !== 'undefined' ? bax : 4;\n"
-                + "\tif (a)\n\t\tthis.foo();\n}");
+                + "\tif (a)\n\t\tfoo();\n}");
     }
 
     @Test
@@ -117,7 +119,7 @@ public class TestGoogEmiter extends Test
         IFunctionNode node = getMethodWithPackage("function method1(p1:int, p2:int, p3:int = 3, p4:int = 4):int{}");
         visitor.visitFunction(node);
         assertOut("/**\n * @param {number} p1\n * @param {number} p2\n * @param {number=} p3\n * @param {number=} p4\n * @return {number}\n */\n"
-        		+ "foo.bar.A.prototype.method1 = function(p1, p2, p3, p4) {\n"
+                + "foo.bar.A.prototype.method1 = function(p1, p2, p3, p4) {\n"
                 + "\tp3 = typeof p3 !== 'undefined' ? p3 : 3;\n"
                 + "\tp4 = typeof p4 !== 'undefined' ? p4 : 4;\n}");
     }

Modified: flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogExpressions.java
URL: http://svn.apache.org/viewvc/flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogExpressions.java?rev=1438502&r1=1438501&r2=1438502&view=diff
==============================================================================
--- flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogExpressions.java (original)
+++ flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogExpressions.java Fri Jan 25 13:30:37 2013
@@ -35,13 +35,13 @@ import org.junit.Test;
  */
 public class TestGoogExpressions extends TestExpressions
 {
-	@Override
+    @Override
     @Test
     public void testVisitLanguageIdentifierNode_SuperMethod_1()
     {
         IFunctionNode node = getMethod("function foo(){if (a) super.foo();}");
         visitor.visitFunction(node);
-        assertOut("A.prototype.foo = function() {\n\tif (a)\n\t\tgoog.base(this, 'foo');\n}");
+        assertOut("A.prototype.foo = function() {\n\tvar self = this;\n\tif (a)\n\t\tgoog.base(this, 'foo');\n}");
     }
 
     @Override
@@ -50,9 +50,9 @@ public class TestGoogExpressions extends
     {
         IFunctionNode node = getMethod("function foo(){if (a) super.foo(a, b, c);}");
         visitor.visitFunction(node);
-        assertOut("A.prototype.foo = function() {\n\tif (a)\n\t\tgoog.base(this, 'foo', a, b, c);\n}");
+        assertOut("A.prototype.foo = function() {\n\tvar self = this;\n\tif (a)\n\t\tgoog.base(this, 'foo', a, b, c);\n}");
     }
-	
+
     //----------------------------------
     // Primary expression keywords
     //----------------------------------
@@ -62,7 +62,7 @@ public class TestGoogExpressions extends
     //----------------------------------
 
     @Override
-	@Test
+    @Test
     public void testVisitBinaryOperatorNode_LogicalAndAssignment()
     {
         IBinaryOperatorNode node = getBinaryNode("a &&= b");
@@ -101,7 +101,7 @@ public class TestGoogExpressions extends
                 "var a:Object = function(foo:int, bar:String = 'goo'):int{return -1;};",
                 IVariableNode.class);
         visitor.visitVariable(node);
-        assertOut("var /** @type {Object} */ a = function(foo, bar) {\n\tbar = typeof bar !== 'undefined' ? bar : 'goo';\n\treturn -1;\n}");
+        assertOut("var /** @type {Object} */ a = function(foo, bar) {\n\tvar self = this;\n\tbar = typeof bar !== 'undefined' ? bar : 'goo';\n\treturn -1;\n}");
     }
 
     @Override
@@ -113,14 +113,14 @@ public class TestGoogExpressions extends
                 "if (a) {addListener('foo', function(event:Object):void{doit();});}",
                 IIfNode.class);
         visitor.visitIf(node);
-        assertOut("if (a) {\n\tthis.addListener('foo', function(event) {\n\t\tthis.doit();\n\t});\n}");
+        assertOut("if (a) {\n\taddListener('foo', function(event) {\n\t\tvar self = this;\n\t\tdoit();\n\t});\n}");
     }
 
     @Override
     @Test
     public void testVisitAs()
     {
-    	// TODO (erikdebruin) the assert is a placeholder for the eventual workaround
+        // TODO (erikdebruin) the assert is a placeholder for the eventual workaround
         IBinaryOperatorNode node = getBinaryNode("a as b");
         visitor.visitBinaryOperator(node);
         assertOut("as(a, b)");
@@ -130,7 +130,7 @@ public class TestGoogExpressions extends
     @Test
     public void testVisitBinaryOperator_Instancof()
     {
-    	// TODO (erikdebruin) check if the AS and JS implementations match
+        // TODO (erikdebruin) check if the AS and JS implementations match
         IBinaryOperatorNode node = getBinaryNode("a instanceof b");
         visitor.visitBinaryOperator(node);
         assertOut("a instanceof b");
@@ -140,7 +140,7 @@ public class TestGoogExpressions extends
     @Test
     public void testVisitBinaryOperator_Is()
     {
-    	// TODO (erikdebruin) the assert is a placeholder for the eventual workaround
+        // TODO (erikdebruin) the assert is a placeholder for the eventual workaround
         IBinaryOperatorNode node = getBinaryNode("a is b");
         visitor.visitBinaryOperator(node);
         assertOut("is(a, b)");
@@ -151,8 +151,8 @@ public class TestGoogExpressions extends
     public void testVisitBinaryOperator_NamespaceAccess_1()
     {
         // TODO (mschmalle) this needs INamespaceAccessExpressionNode interface
-    	// TODO (erikdebruin) we need a 'goog.require("a")' in the header
-    	NamespaceAccessExpressionNode node = (NamespaceAccessExpressionNode) getExpressionNode(
+        // TODO (erikdebruin) we need a 'goog.require("a")' in the header
+        NamespaceAccessExpressionNode node = (NamespaceAccessExpressionNode) getExpressionNode(
                 "a::b", NamespaceAccessExpressionNode.class);
         visitor.visitNamespaceAccessExpression(node);
         assertOut("a.b");
@@ -163,7 +163,7 @@ public class TestGoogExpressions extends
     public void testVisitBinaryOperator_NamespaceAccess_2()
     {
         // TODO (mschmalle) this needs INamespaceAccessExpressionNode interface
-    	// TODO (erikdebruin) we need a 'goog.require("a.b")' in the header
+        // TODO (erikdebruin) we need a 'goog.require("a.b")' in the header
         NamespaceAccessExpressionNode node = (NamespaceAccessExpressionNode) getExpressionNode(
                 "a::b::c", NamespaceAccessExpressionNode.class);
         visitor.visitNamespaceAccessExpression(node);

Modified: flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogFile.java
URL: http://svn.apache.org/viewvc/flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogFile.java?rev=1438502&r1=1438501&r2=1438502&view=diff
==============================================================================
--- flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogFile.java (original)
+++ flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogFile.java Fri Jan 25 13:30:37 2013
@@ -27,7 +27,8 @@ import org.junit.Ignore;
 import org.junit.Test;
 
 /**
- * This class tests the production of valid 'goog' JS code from an external file.
+ * This class tests the production of valid 'goog' JS code from an external
+ * file.
  * 
  * @author Erik de Bruin
  */
@@ -41,7 +42,6 @@ public class TestGoogFile extends TestWa
         assertOut(getCodeFromFile("output", true));
     }
 
-    @Ignore
     @Test
     public void testFile_getset()
     {
@@ -54,13 +54,12 @@ public class TestGoogFile extends TestWa
     @Test
     public void testFile_callsuper()
     {
-    	// TODO (erikdebruin) handle various constructor super call edge cases first
+        // TODO (erikdebruin) handle various constructor super call edge cases first
         IFileNode node = getFileNode("call-super", true);
         visitor.visitFile(node);
         assertOut(getCodeFromFile("call-super_result", true));
     }
 
-    @Ignore
     @Test
     public void testFile_qualifynewobject()
     {
@@ -69,6 +68,14 @@ public class TestGoogFile extends TestWa
         assertOut(getCodeFromFile("qualify-new-object_result", true));
     }
 
+    @Test
+    public void testFile_poc()
+    {
+        IFileNode node = getFileNode("poc", true);
+        visitor.visitFile(node);
+        assertOut(getCodeFromFile("poc_result", true));
+    }
+
     @Override
     protected IBackend createBackend()
     {

Modified: flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogGlobalClasses.java
URL: http://svn.apache.org/viewvc/flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogGlobalClasses.java?rev=1438502&r1=1438501&r2=1438502&view=diff
==============================================================================
--- flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogGlobalClasses.java (original)
+++ flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogGlobalClasses.java Fri Jan 25 13:30:37 2013
@@ -33,7 +33,8 @@ import org.junit.Test;
 public class TestGoogGlobalClasses extends TestGlobalClasses
 {
     @Override
-    @Test    public void testArgumentError()
+    @Test
+    public void testArgumentError()
     {
         IVariableNode node = getVariable("var a:ArgumentError = new ArgumentError();");
         visitor.visitVariable(node);
@@ -46,7 +47,7 @@ public class TestGoogGlobalClasses exten
     {
         IFunctionNode node = getMethod("function a():void {\ttrace(arguments);}");
         visitor.visitFunction(node);
-        assertOut("A.prototype.a = function() {\n\ttrace(arguments);\n}");
+        assertOut("A.prototype.a = function() {\n\tvar self = this;\n\ttrace(arguments);\n}");
     }
 
     @Override
@@ -125,11 +126,11 @@ public class TestGoogGlobalClasses exten
     @Test
     public void testInt()
     {
-    	IVariableNode node = getVariable("var a:int = new int(1.8);");
-    	visitor.visitVariable(node);
-    	assertOut("var /** @type {number} */ a = new int(1.8)");
+        IVariableNode node = getVariable("var a:int = new int(1.8);");
+        visitor.visitVariable(node);
+        assertOut("var /** @type {number} */ a = new int(1.8)");
     }
-    
+
     @Override
     @Test
     public void testJSON()
@@ -197,23 +198,23 @@ public class TestGoogGlobalClasses exten
     @Test
     public void testReferenceError()
     {
-    	IVariableNode node = getVariable("var a:ReferenceError = new ReferenceError();");
-    	visitor.visitVariable(node);
-    	assertOut("var /** @type {ReferenceError} */ a = new ReferenceError()");
+        IVariableNode node = getVariable("var a:ReferenceError = new ReferenceError();");
+        visitor.visitVariable(node);
+        assertOut("var /** @type {ReferenceError} */ a = new ReferenceError()");
     }
-    
+
     @Ignore
     @Override
     @Test
     public void testRegExp()
     {
-    	// TODO (erikdebruin) how to handle the escaping of backslashes in
-    	//                    strings in the tests?
+        // TODO (erikdebruin) how to handle the escaping of backslashes in
+        //                    strings in the tests?
         IVariableNode node = getVariable("var a:RegExp = new RegExp('test-\\d', 'i');");
         visitor.visitVariable(node);
         assertOut("var a:RegExp = new RegExp('test-\\\\d', 'i')");
     }
-    
+
     @Override
     @Test
     public void testRegExp_Literal()
@@ -222,95 +223,95 @@ public class TestGoogGlobalClasses exten
         visitor.visitVariable(node);
         assertOut("var /** @type {RegExp} */ a = /test-\\d/i");
     }
-    
+
     @Override
     @Test
     public void testSecurityError()
     {
-    	IVariableNode node = getVariable("var a:SecurityError = new SecurityError();");
-    	visitor.visitVariable(node);
-    	assertOut("var /** @type {SecurityError} */ a = new SecurityError()");
+        IVariableNode node = getVariable("var a:SecurityError = new SecurityError();");
+        visitor.visitVariable(node);
+        assertOut("var /** @type {SecurityError} */ a = new SecurityError()");
     }
-    
+
     @Override
     @Test
     public void testString()
     {
-    	IVariableNode node = getVariable("var a:String = new String(\"100\");");
-    	visitor.visitVariable(node);
-    	assertOut("var /** @type {string} */ a = new String(\"100\")");
+        IVariableNode node = getVariable("var a:String = new String(\"100\");");
+        visitor.visitVariable(node);
+        assertOut("var /** @type {string} */ a = new String(\"100\")");
     }
 
     @Override
     @Test
     public void testSyntaxError()
     {
-    	IVariableNode node = getVariable("var a:SyntaxError = new SyntaxError();");
-    	visitor.visitVariable(node);
-    	assertOut("var /** @type {SyntaxError} */ a = new SyntaxError()");
+        IVariableNode node = getVariable("var a:SyntaxError = new SyntaxError();");
+        visitor.visitVariable(node);
+        assertOut("var /** @type {SyntaxError} */ a = new SyntaxError()");
     }
-    
+
     @Override
     @Test
     public void testTypeError()
     {
-    	IVariableNode node = getVariable("var a:TypeError = new TypeError();");
-    	visitor.visitVariable(node);
-    	assertOut("var /** @type {TypeError} */ a = new TypeError()");
+        IVariableNode node = getVariable("var a:TypeError = new TypeError();");
+        visitor.visitVariable(node);
+        assertOut("var /** @type {TypeError} */ a = new TypeError()");
     }
-    
+
     @Override
     @Test
     public void testUint()
     {
-    	IVariableNode node = getVariable("var a:uint = new uint(-100);");
-    	visitor.visitVariable(node);
-    	assertOut("var /** @type {number} */ a = new uint(-100)");
+        IVariableNode node = getVariable("var a:uint = new uint(-100);");
+        visitor.visitVariable(node);
+        assertOut("var /** @type {number} */ a = new uint(-100)");
     }
 
     @Override
     @Test
     public void testURIError()
     {
-    	IVariableNode node = getVariable("var a:URIError = new URIError();");
-    	visitor.visitVariable(node);
-    	assertOut("var /** @type {URIError} */ a = new URIError()");
+        IVariableNode node = getVariable("var a:URIError = new URIError();");
+        visitor.visitVariable(node);
+        assertOut("var /** @type {URIError} */ a = new URIError()");
     }
-    
+
     @Override
     @Test
     public void testVector()
     {
-    	IVariableNode node = getVariable("var a:Vector.<String> = new Vector.<String>(['Hello', 'World']);");
-    	visitor.visitVariable(node);
-    	assertOut("var /** @type {Vector.<string>} */ a = new Vector(['Hello','World'])");
+        IVariableNode node = getVariable("var a:Vector.<String> = new Vector.<String>(['Hello', 'World']);");
+        visitor.visitVariable(node);
+        assertOut("var /** @type {Vector.<string>} */ a = new Vector(['Hello','World'])");
     }
 
     @Override
     @Test
     public void testVerifyError()
     {
-    	IVariableNode node = getVariable("var a:VerifyError = new VerifyError();");
-    	visitor.visitVariable(node);
-    	assertOut("var /** @type {VerifyError} */ a = new VerifyError()");
+        IVariableNode node = getVariable("var a:VerifyError = new VerifyError();");
+        visitor.visitVariable(node);
+        assertOut("var /** @type {VerifyError} */ a = new VerifyError()");
     }
-    
+
     @Override
     @Test
     public void testXML()
     {
-    	IVariableNode node = getVariable("var a:XML = new XML('@');");
-    	visitor.visitVariable(node);
-    	assertOut("var /** @type {XML} */ a = new XML('@')");
+        IVariableNode node = getVariable("var a:XML = new XML('@');");
+        visitor.visitVariable(node);
+        assertOut("var /** @type {XML} */ a = new XML('@')");
     }
-    
+
     @Override
     @Test
     public void testXMLList()
     {
-    	IVariableNode node = getVariable("var a:XMLList = new XMLList('<!-- comment -->');");
-    	visitor.visitVariable(node);
-    	assertOut("var /** @type {XMLList} */ a = new XMLList('<!-- comment -->')");
+        IVariableNode node = getVariable("var a:XMLList = new XMLList('<!-- comment -->');");
+        visitor.visitVariable(node);
+        assertOut("var /** @type {XMLList} */ a = new XMLList('<!-- comment -->')");
     }
 
     @Override

Modified: flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogMethodMembers.java
URL: http://svn.apache.org/viewvc/flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogMethodMembers.java?rev=1438502&r1=1438501&r2=1438502&view=diff
==============================================================================
--- flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogMethodMembers.java (original)
+++ flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogMethodMembers.java Fri Jan 25 13:30:37 2013
@@ -26,7 +26,8 @@ import org.apache.flex.compiler.tree.as.
 import org.junit.Test;
 
 /**
- * This class tests the production of 'goog'-ified JS code for Class Method members.
+ * This class tests the production of 'goog'-ified JS code for Class Method
+ * members.
  * 
  * @author Michael Schmalle
  * @author Erik de Bruin
@@ -48,7 +49,7 @@ public class TestGoogMethodMembers exten
     {
         IFunctionNode node = getMethod("function foo():int{\treturn -1;}");
         visitor.visitFunction(node);
-        assertOut("/**\n * @return {number}\n */\nA.prototype.foo = function() {\n\treturn -1;\n}");
+        assertOut("/**\n * @return {number}\n */\nA.prototype.foo = function() {\n\tvar self = this;\n\treturn -1;\n}");
     }
 
     @Override
@@ -57,7 +58,7 @@ public class TestGoogMethodMembers exten
     {
         IFunctionNode node = getMethod("function foo(bar):int{\treturn -1;}");
         visitor.visitFunction(node);
-        assertOut("/**\n * @param {*} bar\n * @return {number}\n */\nA.prototype.foo = function(bar) {\n\treturn -1;\n}");
+        assertOut("/**\n * @param {*} bar\n * @return {number}\n */\nA.prototype.foo = function(bar) {\n\tvar self = this;\n\treturn -1;\n}");
     }
 
     @Override
@@ -66,7 +67,7 @@ public class TestGoogMethodMembers exten
     {
         IFunctionNode node = getMethod("function foo(bar:String):int{\treturn -1;}");
         visitor.visitFunction(node);
-        assertOut("/**\n * @param {string} bar\n * @return {number}\n */\nA.prototype.foo = function(bar) {\n\treturn -1;\n}");
+        assertOut("/**\n * @param {string} bar\n * @return {number}\n */\nA.prototype.foo = function(bar) {\n\tvar self = this;\n\treturn -1;\n}");
     }
 
     @Override
@@ -75,7 +76,7 @@ public class TestGoogMethodMembers exten
     {
         IFunctionNode node = getMethod("function foo(bar:String = \"baz\"):int{\treturn -1;}");
         visitor.visitFunction(node);
-        assertOut("/**\n * @param {string=} bar\n * @return {number}\n */\nA.prototype.foo = function(bar) {\n\tbar = typeof bar !== 'undefined' ? bar : \"baz\";\n\treturn -1;\n}");
+        assertOut("/**\n * @param {string=} bar\n * @return {number}\n */\nA.prototype.foo = function(bar) {\n\tvar self = this;\n\tbar = typeof bar !== 'undefined' ? bar : \"baz\";\n\treturn -1;\n}");
     }
 
     @Override
@@ -84,7 +85,7 @@ public class TestGoogMethodMembers exten
     {
         IFunctionNode node = getMethod("function foo(bar:String, baz:int = null):int{\treturn -1;}");
         visitor.visitFunction(node);
-        assertOut("/**\n * @param {string} bar\n * @param {number=} baz\n * @return {number}\n */\nA.prototype.foo = function(bar, baz) {\n\tbaz = typeof baz !== 'undefined' ? baz : null;\n\treturn -1;\n}");
+        assertOut("/**\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
@@ -93,7 +94,7 @@ public class TestGoogMethodMembers exten
     {
         IFunctionNode node = getMethod("function foo(bar:String, ...rest):int{\treturn -1;}");
         visitor.visitFunction(node);
-        assertOut("/**\n * @param {string} bar\n * @param {...} rest\n * @return {number}\n */\nA.prototype.foo = function(bar, rest) {\n\trest = Array.prototype.slice.call(arguments, 1);\n\treturn -1;\n}");
+        assertOut("/**\n * @param {string} bar\n * @param {...} rest\n * @return {number}\n */\nA.prototype.foo = function(bar, rest) {\n\tvar self = this;\n\trest = Array.prototype.slice.call(arguments, 1);\n\treturn -1;\n}");
     }
 
     @Override
@@ -103,7 +104,7 @@ public class TestGoogMethodMembers exten
         IFunctionNode node = getMethod("public function foo(bar:String, baz:int = null):int{\treturn -1;}");
         visitor.visitFunction(node);
         // we ignore the 'public' namespace completely
-        assertOut("/**\n * @param {string} bar\n * @param {number=} baz\n * @return {number}\n */\nA.prototype.foo = function(bar, baz) {\n\tbaz = typeof baz !== 'undefined' ? baz : null;\n\treturn -1;\n}");
+        assertOut("/**\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
@@ -112,10 +113,10 @@ public class TestGoogMethodMembers exten
     {
         IFunctionNode node = getMethod("mx_internal function foo(bar:String, baz:int = null):int{\treturn -1;}");
         visitor.visitFunction(node);
-    	// TODO (erikdebruin) can we safely ignore custom namespaces?
-        assertOut("/**\n * @param {string} bar\n * @param {number=} baz\n * @return {number}\n */\nA.prototype.foo = function(bar, baz) {\n\tbaz = typeof baz !== 'undefined' ? baz : null;\n\treturn -1;\n}");
+        // TODO (erikdebruin) can we safely ignore custom namespaces?
+        assertOut("/**\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()
@@ -125,7 +126,7 @@ public class TestGoogMethodMembers exten
         // (erikdebruin) here we actually DO want to declare the method
         //               directly on the 'class' constructor instead of the
         //               prototype!
-        assertOut("/**\n * @param {string} bar\n * @param {number=} baz\n * @return {number}\n */\nA.foo = function(bar, baz) {\n\tbaz = typeof baz !== 'undefined' ? baz : null;\n\treturn -1;\n}");
+        assertOut("/**\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
@@ -134,7 +135,7 @@ public class TestGoogMethodMembers exten
     {
         IFunctionNode node = getMethod("public override function foo(bar:String, baz:int = null):int{\treturn -1;}");
         visitor.visitFunction(node);
-        assertOut("/**\n * @param {string} bar\n * @param {number=} baz\n * @return {number}\n * @override\n */\nA.prototype.foo = function(bar, baz) {\n\tbaz = typeof baz !== 'undefined' ? baz : null;\n\treturn -1;\n}");
+        assertOut("/**\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
@@ -143,38 +144,38 @@ public class TestGoogMethodMembers exten
     {
         IFunctionNode node = getMethod("override public function foo(bar:String, baz:int = null):int{return -1;}");
         visitor.visitFunction(node);
-        assertOut("/**\n * @param {string} bar\n * @param {number=} baz\n * @return {number}\n * @override\n */\nA.prototype.foo = function(bar, baz) {\n\tbaz = typeof baz !== 'undefined' ? baz : null;\n\treturn -1;\n}");
+        assertOut("/**\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}");
     }
 
     //--------------------------------------------------------------------------
     // Doc Specific Tests 
     //--------------------------------------------------------------------------
-    
+
     @Test
     public void testConstructor_withThisInBody()
     {
         IFunctionNode node = getMethod("public function A(){this.foo;}");
         visitor.visitFunction(node);
-        assertOut("/**\n * @constructor\n */\nA = function() {\n\tthis.foo;\n}");
+        assertOut("/**\n * @constructor\n */\nA = function() {\n\tvar self = this;\n\tthis.foo;\n}");
     }
-    
+
     @Test
     public void testMethod_withThisInBody()
     {
         IFunctionNode node = getMethod("function foo(){this.foo;}");
         visitor.visitFunction(node);
-        assertOut("/**\n * @this {A}\n */\nA.prototype.foo = function() {\n\tthis.foo;\n}");
+        assertOut("/**\n * @this {A}\n */\nA.prototype.foo = function() {\n\tvar self = this;\n\tthis.foo;\n}");
     }
-    
+
     @Test
     public void testMethod_withThisInBodyComplex()
     {
         IFunctionNode node = getMethod("function foo(){if(true){while(i){this.bar(42);}}}");
         visitor.visitFunction(node);
-        assertOut("/**\n * @this {A}\n */\nA.prototype.foo = function() {\n\tif (true) " +
-        		"{\n\t\twhile (i) {\n\t\t\tthis.bar(42);\n\t\t}\n\t}\n}");
+        assertOut("/**\n * @this {A}\n */\nA.prototype.foo = function() {\n\tvar self = this;\n\tif (true) "
+                + "{\n\t\twhile (i) {\n\t\t\tthis.bar(42);\n\t\t}\n\t}\n}");
     }
-    
+
     @Override
     protected IBackend createBackend()
     {

Modified: flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogPackage.java
URL: http://svn.apache.org/viewvc/flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogPackage.java?rev=1438502&r1=1438501&r2=1438502&view=diff
==============================================================================
--- flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogPackage.java (original)
+++ flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogPackage.java Fri Jan 25 13:30:37 2013
@@ -59,11 +59,11 @@ public class TestGoogPackage extends Tes
         // All class nodes in AST get either an implicit or explicit constructor
         // this is an implicit and the way I have the before/after handler working
         // with block disallows implicit blocks from getting { }
-    	
-    	// (erikdebruin) the constuctor IS the class definition, in 'goog' JS,
-    	//               therefor we need to write out implicit constructors 
-    	//               (if I understand the term correctly)
-    	
+
+        // (erikdebruin) the constuctor IS the class definition, in 'goog' JS,
+        //               therefor we need to write out implicit constructors 
+        //               (if I understand the term correctly)
+
         IFileNode node = getFileNode("package {public class A{}}");
         visitor.visitFile(node);
         assertOut("goog.provide('A');\n\n/**\n * @constructor\n */\nA = function() {\n};");
@@ -93,7 +93,7 @@ public class TestGoogPackage extends Tes
     {
         IFileNode node = getFileNode("package foo.bar.baz {public class A{public function A(){if (a){for (var i:Object in obj){doit();}}}}}");
         visitor.visitFile(node);
-        assertOut("goog.provide('foo.bar.baz.A');\n\n/**\n * @constructor\n */\nfoo.bar.baz.A = function() {\n\tif (a) {\n\t\tfor (var /** @type {Object} */ i in obj) {\n\t\t\tthis.doit();\n\t\t}\n\t}\n};");
+        assertOut("goog.provide('foo.bar.baz.A');\n\n/**\n * @constructor\n */\nfoo.bar.baz.A = function() {\n\tvar self = this;\n\tif (a) {\n\t\tfor (var /** @type {Object} */ i in obj) {\n\t\t\tdoit();\n\t\t}\n\t}\n};");
     }
 
     @Override

Modified: flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogStatements.java
URL: http://svn.apache.org/viewvc/flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogStatements.java?rev=1438502&r1=1438501&r2=1438502&view=diff
==============================================================================
--- flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogStatements.java (original)
+++ flex/falcon/trunk/compiler.jx.tests/src/org/apache/flex/compiler/internal/js/codegen/goog/TestGoogStatements.java Fri Jan 25 13:30:37 2013
@@ -43,7 +43,8 @@ public class TestGoogStatements extends 
     @Test
     public void testVarDeclaration()
     {
-        IVariableNode node = (IVariableNode) getNode("var a;", IVariableNode.class);
+        IVariableNode node = (IVariableNode) getNode("var a;",
+                IVariableNode.class);
         visitor.visitVariable(node);
         assertOut("var /** @type {*} */ a");
     }
@@ -52,7 +53,8 @@ public class TestGoogStatements extends 
     @Test
     public void testVarDeclaration_withType()
     {
-        IVariableNode node = (IVariableNode) getNode("var a:int;", IVariableNode.class);
+        IVariableNode node = (IVariableNode) getNode("var a:int;",
+                IVariableNode.class);
         visitor.visitVariable(node);
         assertOut("var /** @type {number} */ a");
     }
@@ -170,7 +172,7 @@ public class TestGoogStatements extends 
     @Test
     public void testVisitForEach_1()
     {
-    	// TODO (erikdebruin) the assert is a placeholder for the eventual workaround
+        // TODO (erikdebruin) the assert is a placeholder for the eventual workaround
         IForLoopNode node = (IForLoopNode) getNode(
                 "for each(var i:int in obj) { break; }", IForLoopNode.class);
         visitor.visitForLoop(node);
@@ -181,7 +183,7 @@ public class TestGoogStatements extends 
     @Test
     public void testVisitForEach_1a()
     {
-    	// TODO (erikdebruin) the assert is a placeholder for the eventual workaround
+        // TODO (erikdebruin) the assert is a placeholder for the eventual workaround
         IForLoopNode node = (IForLoopNode) getNode(
                 "for each(var i:int in obj)  break; ", IForLoopNode.class);
         visitor.visitForLoop(node);
@@ -269,7 +271,7 @@ public class TestGoogStatements extends 
     @Test
     public void testVisit()
     {
-    	// TODO (erikdebruin) check if resulting 'goog' JS is valid
+        // TODO (erikdebruin) check if resulting 'goog' JS is valid
         IFileNode node = (IFileNode) getNode(
                 "try { a; } catch (e:Error) { if (a) { if (b) { if (c) b; else if (f) a; else e; }} } finally {  }"
                         + "if (d) for (var i:int = 0; i < len; i++) break;"
@@ -283,10 +285,9 @@ public class TestGoogStatements extends 
                         + "foo: for each(var i:int in obj) break foo;",
                 IFileNode.class);
         visitor.visitFile(node);
-        assertOut("goog.provide('A');\n\n/**\n * @constructor\n */\nA = function() {\n};\n\nA.prototype.a = function() {\n\ttry {\n\t\ta;\n\t} catch (e) {\n\t\tif (a) {\n\t\t\tif (b) {\n\t\t\t\tif (c)\n\t\t\t\t\tb;\n\t\t\t\telse if (f)\n\t\t\t\t\ta;\n\t\t\t\telse\n\t\t\t\t\te;\n\t\t\t}\n\t\t}\n\t} finally {\n\t}\n\tif (d)\n\t\tfor (var /** @type {number} */ i = 0; i < len; i++)\n\t\t\tbreak;\n\tif (a) {\n\t\twith (ab) {\n\t\t\tthis.c();\n\t\t}\n\t\tdo {\n\t\t\ta++;\n\t\t\tdo\n\t\t\t\ta++;\n\t\t\twhile (a > b);\n\t\t} while (c > d);\n\t}\n\tif (b) {\n\t\ttry {\n\t\t\ta;\n\t\t\tthrow new Error('foo');\n\t\t} catch (e) {\n\t\t\tswitch (i) {\n\t\t\t\tcase 1:\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\treturn;\n\t\t\t}\n\t\t} catch (f) {\n\t\t\tc;\n\t\t\teee.dd;\n\t\t} finally {\n\t\t\td;\n\t\t\tvar /** @type {Object} */ a = function(foo, bar) {\n\t\t\t\tbar = typeof bar !== 'undefined' ? bar : 'goo';\n\t\t\t\treturn -1;\n\t\t\t};\n\t\t\teee.dd;\n\t\t\teee.dd;\n\t\t\teee.dd;\n
 \t\t\teee.dd;\n\t\t}\n\t}\n\tfoo : for-each (var /** @type {number} */ i in obj)\n\t\tbreak foo;;\n};");
+        assertOut("goog.provide('A');\n\n/**\n * @constructor\n */\nA = function() {\n};\n\nA.prototype.a = function() {\n\tvar self = this;\n\ttry {\n\t\ta;\n\t} catch (e) {\n\t\tif (a) {\n\t\t\tif (b) {\n\t\t\t\tif (c)\n\t\t\t\t\tb;\n\t\t\t\telse if (f)\n\t\t\t\t\ta;\n\t\t\t\telse\n\t\t\t\t\te;\n\t\t\t}\n\t\t}\n\t} finally {\n\t}\n\tif (d)\n\t\tfor (var /** @type {number} */ i = 0; i < len; i++)\n\t\t\tbreak;\n\tif (a) {\n\t\twith (ab) {\n\t\t\tc();\n\t\t}\n\t\tdo {\n\t\t\ta++;\n\t\t\tdo\n\t\t\t\ta++;\n\t\t\twhile (a > b);\n\t\t} while (c > d);\n\t}\n\tif (b) {\n\t\ttry {\n\t\t\ta;\n\t\t\tthrow new Error('foo');\n\t\t} catch (e) {\n\t\t\tswitch (i) {\n\t\t\t\tcase 1:\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\treturn;\n\t\t\t}\n\t\t} catch (f) {\n\t\t\tc;\n\t\t\teee.dd;\n\t\t} finally {\n\t\t\td;\n\t\t\tvar /** @type {Object} */ a = function(foo, bar) {\n\t\t\t\tvar self = this;\n\t\t\t\tbar = typeof bar !== 'undefined' ? bar : 'goo';\n\t\t\t\treturn -1;\n\t\t\t};\n\t\t
 \teee.dd;\n\t\t\teee.dd;\n\t\t\teee.dd;\n\t\t\teee.dd;\n\t\t}\n\t}\n\tfoo : for-each (var /** @type {number} */ i in obj)\n\t\tbreak foo;;\n};");
     }
 
-
     protected IBackend createBackend()
     {
         return new GoogBackend();

Modified: flex/falcon/trunk/compiler.jx.tests/test-files/call-super_result.js
URL: http://svn.apache.org/viewvc/flex/falcon/trunk/compiler.jx.tests/test-files/call-super_result.js?rev=1438502&r1=1438501&r2=1438502&view=diff
==============================================================================
--- flex/falcon/trunk/compiler.jx.tests/test-files/call-super_result.js (original)
+++ flex/falcon/trunk/compiler.jx.tests/test-files/call-super_result.js Fri Jan 25 13:30:37 2013
@@ -10,6 +10,7 @@ goog.require('spark.components.Button');
  * @param {string} z
  */
 org.apache.flex.A = function(z) {
+	var self = this;
 	goog.base(this, z);
 }
 goog.inherits(org.apache.flex.A, spark.components.Button);
@@ -20,6 +21,7 @@ goog.inherits(org.apache.flex.A, spark.c
  * @return {string}
  */
 org.apache.flex.A.prototype.hasSuperCall = function(a, b) {
+	var self = this;
 	goog.base(this, 'hasSuperCall', a, b, 100);
 	var /** @type {string} */ result = myRegularFunctionCall(-1);
 	return result;

Modified: flex/falcon/trunk/compiler.jx.tests/test-files/get-set_result.js
URL: http://svn.apache.org/viewvc/flex/falcon/trunk/compiler.jx.tests/test-files/get-set_result.js?rev=1438502&r1=1438501&r2=1438502&view=diff
==============================================================================
--- flex/falcon/trunk/compiler.jx.tests/test-files/get-set_result.js (original)
+++ flex/falcon/trunk/compiler.jx.tests/test-files/get-set_result.js Fri Jan 25 13:30:37 2013
@@ -21,6 +21,7 @@ Object.defineProperty(
 	org.apache.flex.A.prototype, 
 	'a', 
 	{get:function() {
+		var self = this;
 		return -1;
 	}, configurable:true}
 );
@@ -29,6 +30,7 @@ Object.defineProperty(
 	org.apache.flex.A.prototype, 
 	'a', 
 	{set:function(value) {
-		_a = value;
+		var self = this;
+		self._a = value;
 	}, configurable:true}
 );
\ No newline at end of file

Modified: flex/falcon/trunk/compiler.jx.tests/test-files/output.js
URL: http://svn.apache.org/viewvc/flex/falcon/trunk/compiler.jx.tests/test-files/output.js?rev=1438502&r1=1438501&r2=1438502&view=diff
==============================================================================
--- flex/falcon/trunk/compiler.jx.tests/test-files/output.js (original)
+++ flex/falcon/trunk/compiler.jx.tests/test-files/output.js Fri Jan 25 13:30:37 2013
@@ -9,8 +9,9 @@ goog.require('spark.components.Button');
  * @implements {flash.events.IEventDispatcher}
  */
 org.apache.flex.A = function() {
+	var self = this;
 	goog.base(this);
-	trace(typeof("a"));
+	self.trace(typeof("a"));
 }
 goog.inherits(org.apache.flex.A, spark.components.Button);
 

Added: flex/falcon/trunk/compiler.jx.tests/test-files/poc.as
URL: http://svn.apache.org/viewvc/flex/falcon/trunk/compiler.jx.tests/test-files/poc.as?rev=1438502&view=auto
==============================================================================
--- flex/falcon/trunk/compiler.jx.tests/test-files/poc.as (added)
+++ flex/falcon/trunk/compiler.jx.tests/test-files/poc.as Fri Jan 25 13:30:37 2013
@@ -0,0 +1,88 @@
+package  
+{
+
+import flash.events.MouseEvent;
+
+import spark.components.Button;
+import spark.components.Group;
+import spark.components.Label;
+
+public class Example extends Group
+{
+	private static const BYEBYE:String = "Bye Bye";
+	private static const HELLOWORLD:String = "Hello World";
+	
+	private static var counter:int = 100;
+
+	public function Example() 
+	{
+		init();
+	}
+	
+	private var _btn1:Button;
+	private var _btn2:Button;
+	private var _btn3:Button;
+	private var _lbl1:Label;
+	private var _lbl2:Label;
+	
+	public function init():void
+	{
+		_lbl1 = new Label();
+		_lbl1.x = 100;
+		_lbl1.y = 25;
+		_lbl1.text = Example.HELLOWORLD;
+		
+		addElement(_lbl1);
+		
+		_lbl2 = new Label();
+		_lbl2.x = 200;
+		_lbl2.y = 25;
+		_lbl2.text = Example.counter + "";
+		
+		addElement(_lbl2);
+		
+		_btn1 = new Button();
+		_btn1.x = 100;
+		_btn1.y = 50;
+		_btn1.label = "Click me";
+		_btn1.addEventListener(MouseEvent.CLICK, btn1clickHandler);
+		
+		addElement(_btn1);
+
+		_btn2 = new Button();
+		_btn2.x = 200;
+		_btn2.y = 50;
+		_btn2.label = "Add it";
+		_btn2.addEventListener(MouseEvent.CLICK, btn2clickHandler);
+		
+		addElement(_btn2);
+		
+		_btn3 = new Button();
+		_btn3.x = 300;
+		_btn3.y = 50;
+		_btn3.label = "Move it";
+		_btn3.addEventListener(MouseEvent.CLICK, btn3clickHandler);
+		
+		addElement(_btn3);
+	}
+	
+	protected function btn1clickHandler(event:MouseEvent):void
+	{
+		if (_lbl1.text == Example.HELLOWORLD)
+			_lbl1.text = Example.BYEBYE;
+		else
+			_lbl1.text = Example.HELLOWORLD;
+	}
+	
+	protected function btn2clickHandler(event:MouseEvent):void
+	{
+		_lbl2.text = --Example.counter + "";
+	}
+	
+	protected function btn3clickHandler(event:MouseEvent):void
+	{
+		_btn3.x += 10;
+	}
+	
+}
+}
\ No newline at end of file

Propchange: flex/falcon/trunk/compiler.jx.tests/test-files/poc.as
------------------------------------------------------------------------------
    svn:eol-style = native

Added: flex/falcon/trunk/compiler.jx.tests/test-files/poc_result.js
URL: http://svn.apache.org/viewvc/flex/falcon/trunk/compiler.jx.tests/test-files/poc_result.js?rev=1438502&view=auto
==============================================================================
--- flex/falcon/trunk/compiler.jx.tests/test-files/poc_result.js (added)
+++ flex/falcon/trunk/compiler.jx.tests/test-files/poc_result.js Fri Jan 25 13:30:37 2013
@@ -0,0 +1,126 @@
+goog.provide('Example');
+
+goog.require('flash.events.MouseEvent');
+goog.require('spark.components.Button');
+goog.require('spark.components.Group');
+goog.require('spark.components.Label');
+
+/**
+ * @constructor
+ * @extends {spark.components.Group}
+ */
+Example = function() {
+	var self = this;
+	goog.base(this);
+	self.init();
+}
+goog.inherits(Example, spark.components.Group);
+
+/**
+ * @private
+ * @const
+ * @type {string}
+ */
+Example.BYEBYE = "Bye Bye";
+
+/**
+ * @private
+ * @const
+ * @type {string}
+ */
+Example.HELLOWORLD = "Hello World";
+
+/**
+ * @private
+ * @type {number}
+ */
+Example.counter = 100;
+
+/**
+ * @private
+ * @type {spark.components.Button}
+ */
+Example.prototype._btn1;
+
+/**
+ * @private
+ * @type {spark.components.Button}
+ */
+Example.prototype._btn2;
+
+/**
+ * @private
+ * @type {spark.components.Button}
+ */
+Example.prototype._btn3;
+
+/**
+ * @private
+ * @type {spark.components.Label}
+ */
+Example.prototype._lbl1;
+
+/**
+ * @private
+ * @type {spark.components.Label}
+ */
+Example.prototype._lbl2;
+
+Example.prototype.init = function() {
+	var self = this;
+	self._lbl1 = new spark.components.Label();
+	self._lbl1.x = 100;
+	self._lbl1.y = 25;
+	self._lbl1.text = Example.HELLOWORLD;
+	self.addElement(self._lbl1);
+	self._lbl2 = new spark.components.Label();
+	self._lbl2.x = 200;
+	self._lbl2.y = 25;
+	self._lbl2.text = Example.counter + "";
+	self.addElement(self._lbl2);
+	self._btn1 = new spark.components.Button();
+	self._btn1.x = 100;
+	self._btn1.y = 50;
+	self._btn1.label = "Click me";
+	self._btn1.addEventListener(flash.events.MouseEvent.CLICK, self.btn1clickHandler);
+	self.addElement(self._btn1);
+	self._btn2 = new spark.components.Button();
+	self._btn2.x = 200;
+	self._btn2.y = 50;
+	self._btn2.label = "Add it";
+	self._btn2.addEventListener(flash.events.MouseEvent.CLICK, self.btn2clickHandler);
+	self.addElement(self._btn2);
+	self._btn3 = new spark.components.Button();
+	self._btn3.x = 300;
+	self._btn3.y = 50;
+	self._btn3.label = "Move it";
+	self._btn3.addEventListener(flash.events.MouseEvent.CLICK, self.btn3clickHandler);
+	self.addElement(self._btn3);
+};
+
+/**
+ * @param {flash.events.MouseEvent} event
+ */
+Example.prototype.btn1clickHandler = function(event) {
+	var self = this;
+	if (self._lbl1.text == Example.HELLOWORLD)
+		self._lbl1.text = Example.BYEBYE;
+	else
+		self._lbl1.text = Example.HELLOWORLD;
+};
+
+/**
+ * @param {flash.events.MouseEvent} event
+ */
+Example.prototype.btn2clickHandler = function(event) {
+	var self = this;
+	self._lbl2.text = --Example.counter + "";
+};
+
+/**
+ * @param {flash.events.MouseEvent} event
+ */
+Example.prototype.btn3clickHandler = function(event) {
+	var self = this;
+	self._btn3.x += 10;
+};
\ No newline at end of file

Propchange: flex/falcon/trunk/compiler.jx.tests/test-files/poc_result.js
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: flex/falcon/trunk/compiler.jx.tests/test-files/qualify-new-object.as
URL: http://svn.apache.org/viewvc/flex/falcon/trunk/compiler.jx.tests/test-files/qualify-new-object.as?rev=1438502&r1=1438501&r2=1438502&view=diff
==============================================================================
--- flex/falcon/trunk/compiler.jx.tests/test-files/qualify-new-object.as (original)
+++ flex/falcon/trunk/compiler.jx.tests/test-files/qualify-new-object.as Fri Jan 25 13:30:37 2013
@@ -7,13 +7,27 @@ import spark.components.Button;
 
 public class A extends EventDispatcher
 {
-	public function A() {}
+	public function A() 
+	{
+		init();
+	}
 	
-	public function init()
+	private var _privateVar:Button;
+	
+	public function init():void
 	{
 		var btn:Button = new Button();
 		
+		_privateVar = new Button();
+		
 		addEventListener("click", function () {});
 	}
+	
+	public function start():void
+	{
+		var localVar:String = _privateVar.label;
+		init();
+		doIt();
+	}
 }
 }
\ No newline at end of file

Modified: flex/falcon/trunk/compiler.jx.tests/test-files/qualify-new-object_result.js
URL: http://svn.apache.org/viewvc/flex/falcon/trunk/compiler.jx.tests/test-files/qualify-new-object_result.js?rev=1438502&r1=1438501&r2=1438502&view=diff
==============================================================================
--- flex/falcon/trunk/compiler.jx.tests/test-files/qualify-new-object_result.js (original)
+++ flex/falcon/trunk/compiler.jx.tests/test-files/qualify-new-object_result.js Fri Jan 25 13:30:37 2013
@@ -8,12 +8,29 @@ goog.require('spark.components.Button');
  * @extends {flash.events.EventDispatcher}
  */
 org.apache.flex.A = function() {
+	var self = this;
 	goog.base(this);
+	self.init();
 }
 goog.inherits(org.apache.flex.A, flash.events.EventDispatcher);
 
+/**
+ * @private
+ * @type {spark.components.Button}
+ */
+org.apache.flex.A.prototype._privateVar;
+
 org.apache.flex.A.prototype.init = function() {
+	var self = this;
 	var /** @type {spark.components.Button} */ btn = new spark.components.Button();
-	this.addEventListener("click", function() {
+	self._privateVar = new spark.components.Button();
+	self.addEventListener("click", function() {
 	});
+};
+
+org.apache.flex.A.prototype.start = function() {
+	var self = this;
+	var /** @type {string} */ localVar = self._privateVar.label;
+	self.init();
+	doIt();
 };
\ No newline at end of file

Modified: flex/falcon/trunk/compiler.jx/src/org/apache/flex/compiler/internal/js/codegen/goog/JSGoogDocEmitter.java
URL: http://svn.apache.org/viewvc/flex/falcon/trunk/compiler.jx/src/org/apache/flex/compiler/internal/js/codegen/goog/JSGoogDocEmitter.java?rev=1438502&r1=1438501&r2=1438502&view=diff
==============================================================================
--- flex/falcon/trunk/compiler.jx/src/org/apache/flex/compiler/internal/js/codegen/goog/JSGoogDocEmitter.java (original)
+++ flex/falcon/trunk/compiler.jx/src/org/apache/flex/compiler/internal/js/codegen/goog/JSGoogDocEmitter.java Fri Jan 25 13:30:37 2013
@@ -21,9 +21,11 @@ package org.apache.flex.compiler.interna
 
 import org.apache.flex.compiler.common.ASModifier;
 import org.apache.flex.compiler.common.DependencyType;
+import org.apache.flex.compiler.constants.IASGlobalFunctionConstants;
 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.IDefinition;
 import org.apache.flex.compiler.definitions.ITypeDefinition;
 import org.apache.flex.compiler.definitions.references.IReference;
 import org.apache.flex.compiler.internal.as.codegen.ASEmitter;
@@ -37,6 +39,7 @@ import org.apache.flex.compiler.projects
 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.IExpressionNode;
 import org.apache.flex.compiler.tree.as.IFunctionNode;
 import org.apache.flex.compiler.tree.as.IInterfaceNode;
 import org.apache.flex.compiler.tree.as.IPackageNode;
@@ -56,46 +59,50 @@ public class JSGoogDocEmitter extends JS
     {
         super(emitter);
     }
-    
+
     @Override
     public void emitInterfaceDoc(IInterfaceNode node)
     {
         begin();
-        
-        emitJSDocLine(JSGoogEmitter.INTERFACE); 
-        
+
+        emitJSDocLine(JSGoogEmitter.INTERFACE);
+
         String[] inodes = node.getExtendedInterfaces();
         for (String inode : inodes)
         {
             emitJSDocLine(IASKeywordConstants.EXTENDS, inode);
         }
-        
+
         end();
     }
-    
+
     @Override
-    public void emitFieldDoc(IVariableNode node)
+    public void emitFieldDoc(IVariableNode node, IDefinition def)
     {
-    	begin();
-    	
-    	String ns = node.getNamespace();
-    	if (ns == IASKeywordConstants.PRIVATE)
-    	{
-    		emitPrivate(node);
-    	}
-    	else if (ns == IASKeywordConstants.PROTECTED)
-    	{	
-    		emitProtected(node);
-    	}
-    	
-    	if (node.isConst())
-    		emitConst(node);
-    	
-    	emitType(node, "");
-    	
-    	end();
+        begin();
+
+        String ns = node.getNamespace();
+        if (ns == IASKeywordConstants.PRIVATE)
+        {
+            emitPrivate(node);
+        }
+        else if (ns == IASKeywordConstants.PROTECTED)
+        {
+            emitProtected(node);
+        }
+
+        if (node.isConst())
+            emitConst(node);
+
+        String packageName = "";
+        if (def != null)
+            packageName = def.getPackageName();
+
+        emitType(node, packageName);
+
+        end();
     }
-    
+
     @Override
     public void emitMethodDoc(IFunctionNode node, ICompilerProject project)
     {
@@ -107,13 +114,13 @@ public class JSGoogDocEmitter extends JS
 
             if (node.isConstructor())
             {
-            	// TODO (erikdebruin) handle JSDOC for constructors with arguments
-            	
+                // TODO (erikdebruin) handle JSDOC for constructors with arguments
+
                 begin();
                 hasDoc = true;
-                
+
                 emitJSDocLine(JSGoogEmitter.CONSTRUCTOR);
-                
+
                 IClassDefinition parent = (IClassDefinition) node
                         .getDefinition().getParent();
                 IClassDefinition superClass = parent.resolveBaseClass(project);
@@ -121,15 +128,17 @@ public class JSGoogDocEmitter extends JS
 
                 if (superClass != null
                         && !qname.equals(IASLanguageConstants.Object))
-                    emitExtends(superClass);
+                    emitExtends(superClass, superClass.getPackageName());
 
                 IReference[] references = classDefinition
                         .getImplementedInterfaceReferences();
                 for (IReference iReference : references)
                 {
-                    emitImplements((ITypeDefinition) iReference.resolve(
-                            project, (ASScope) classDefinition.getContainingScope(),
-                            DependencyType.INHERITANCE, true));
+                    ITypeDefinition type = (ITypeDefinition) iReference
+                            .resolve(project, (ASScope) classDefinition
+                                    .getContainingScope(),
+                                    DependencyType.INHERITANCE, true);
+                    emitImplements(type, type.getPackageName());
                 }
 
                 //                IExpressionNode[] inodes = cnode.getImplementedInterfaceNodes();
@@ -149,7 +158,7 @@ public class JSGoogDocEmitter extends JS
                     begin();
                     hasDoc = true;
 
-                    emitThis(classDefinition);
+                    emitThis(classDefinition, classDefinition.getPackageName());
                 }
 
                 // @param
@@ -162,12 +171,16 @@ public class JSGoogDocEmitter extends JS
                         hasDoc = true;
                     }
 
-                    emitParam(pnode);
+                    IExpressionNode enode = pnode.getNameExpressionNode();
+                    emitParam(pnode, enode.resolveType(project)
+                            .getPackageName());
                 }
 
                 // @return
                 String returnType = node.getReturnType();
-                if (returnType != "" && returnType != ASTNodeID.LiteralVoidID.getParaphrase())
+                if (returnType != ""
+                        && returnType != ASTNodeID.LiteralVoidID
+                                .getParaphrase())
                 {
                     if (!hasDoc)
                     {
@@ -175,7 +188,7 @@ public class JSGoogDocEmitter extends JS
                         hasDoc = true;
                     }
 
-                    emitReturn(node);
+                    emitReturn(node, node.getPackageName());
                 }
 
                 // @override
@@ -191,33 +204,33 @@ public class JSGoogDocEmitter extends JS
                     emitOverride(node);
                 }
             }
-            
+
             if (hasDoc)
                 end();
         }
     }
 
     @Override
-    public void emitVarDoc(IVariableNode node, ITypeDefinition typedef)
+    public void emitVarDoc(IVariableNode node, IDefinition def)
     {
-    	String packageName = "";
-        if (typedef != null)
-        	packageName = typedef.getPackageName();
+        String packageName = "";
+        if (def != null)
+            packageName = def.getPackageName();
 
         if (!node.isConst())
-        {	
-        	emitTypeShort(node, packageName);
+        {
+            emitTypeShort(node, packageName);
         }
         else
         {
-        	writeNewline();
-        	begin();
-        	emitConst(node);
-        	emitType(node, packageName);
-        	end();
+            writeNewline();
+            begin();
+            emitConst(node);
+            emitType(node, packageName);
+            end();
         }
     }
-    
+
     @Override
     public void emitConst(IVariableNode node)
     {
@@ -225,50 +238,17 @@ public class JSGoogDocEmitter extends JS
     }
 
     @Override
-    public void emitDefine(IVariableNode node)
-    {
-        // TODO Auto-generated method stub
-
-    }
-
-    @Override
-    public void emitDeprecated(IASNode node)
-    {
-        // TODO Auto-generated method stub
-
-    }
-
-    @Override
-    public void emitEnum(IClassNode node)
-    {
-        // TODO Auto-generated method stub
-
-    }
-
-    @Override
-    public void emitExtends(IClassDefinition superDefinition)
+    public void emitExtends(IClassDefinition superDefinition, String packageName)
     {
-        emitJSDocLine(IASKeywordConstants.EXTENDS, superDefinition.getQualifiedName());
+        emitJSDocLine(IASKeywordConstants.EXTENDS,
+                superDefinition.getQualifiedName());
     }
 
     @Override
-    public void emitImplements(ITypeDefinition definition)
+    public void emitImplements(ITypeDefinition definition, String packageName)
     {
-        emitJSDocLine(IASKeywordConstants.IMPLEMENTS, definition.getQualifiedName());
-    }
-
-    @Override
-    public void emitInheritDoc(IClassNode node)
-    {
-        // TODO Auto-generated method stub
-
-    }
-
-    @Override
-    public void emitLicense(IClassNode node)
-    {
-        // TODO Auto-generated method stub
-
+        emitJSDocLine(IASKeywordConstants.IMPLEMENTS,
+                definition.getQualifiedName());
     }
 
     @Override
@@ -278,16 +258,17 @@ public class JSGoogDocEmitter extends JS
     }
 
     @Override
-    public void emitParam(IParameterNode node)
+    public void emitParam(IParameterNode node, String packageName)
     {
-    	String postfix = (node.getDefaultValue() == null) ? "" : ASEmitter.EQUALS;
-    	
-    	String paramType = "";
-    	if (node.isRest())
-    		paramType = IASLanguageConstants.REST;
-    	else
-    		paramType = convertASTypeToJS(node.getVariableType());
-    	
+        String postfix = (node.getDefaultValue() == null) ? ""
+                : ASEmitter.EQUALS;
+
+        String paramType = "";
+        if (node.isRest())
+            paramType = IASLanguageConstants.REST;
+        else
+            paramType = convertASTypeToJS(node.getVariableType(), packageName);
+
         emitJSDocLine(PARAM, paramType + postfix, node.getName());
     }
 
@@ -304,17 +285,18 @@ public class JSGoogDocEmitter extends JS
     }
 
     @Override
-    public void emitReturn(IFunctionNode node)
+    public void emitReturn(IFunctionNode node, String packageName)
     {
         String rtype = node.getReturnType();
         if (rtype != null)
         {
-            emitJSDocLine(IASKeywordConstants.RETURN, convertASTypeToJS(rtype));
+            emitJSDocLine(IASKeywordConstants.RETURN,
+                    convertASTypeToJS(rtype, packageName));
         }
     }
 
     @Override
-    public void emitThis(ITypeDefinition type)
+    public void emitThis(ITypeDefinition type, String packageName)
     {
         emitJSDocLine(IASKeywordConstants.THIS, type.getQualifiedName());
     }
@@ -323,37 +305,25 @@ public class JSGoogDocEmitter extends JS
     public void emitType(IASNode node, String packageName)
     {
         String type = ((IVariableNode) node).getVariableType();
-        emitJSDocLine(TYPE, convertASTypeToJS(type));
+        emitJSDocLine(TYPE, convertASTypeToJS(type, packageName));
     }
 
     public void emitTypeShort(IASNode node, String packageName)
     {
-        String type = ((IVariableNode) node).getVariableType(); 
+        String type = ((IVariableNode) node).getVariableType();
         write(JSDOC_OPEN);
         writeSpace();
         write(AT);
         write(TYPE);
-    	writeSpace();
+        writeSpace();
         writeBlockOpen();
-        if (packageName != "")
-        {
-        	write(packageName);
-        	write(ASEmitter.PERIOD);
-        }
-        write(convertASTypeToJS(type));
+        write(convertASTypeToJS(type, packageName));
         writeBlockClose();
         writeSpace();
         write(JSDOC_CLOSE);
         writeSpace();
     }
 
-    @Override
-    public void emitTypedef(IASNode node)
-    {
-        // TODO Auto-generated method stub
-
-    }
-
     //--------------------------------------------------------------------------
 
     public void emmitPackageHeader(IPackageNode node)
@@ -370,14 +340,14 @@ public class JSGoogDocEmitter extends JS
 
     private void emitJSDocLine(String name)
     {
-    	emitJSDocLine(name, "");
+        emitJSDocLine(name, "");
     }
-    
+
     private void emitJSDocLine(String name, String type)
     {
-    	emitJSDocLine(name, type, "");
+        emitJSDocLine(name, type, "");
     }
-    
+
     private void emitJSDocLine(String name, String type, String param)
     {
         writeSpace();
@@ -386,20 +356,20 @@ public class JSGoogDocEmitter extends JS
         write(AT);
         write(name);
         if (type != "")
-    	{
-	    	writeSpace();
-	        writeBlockOpen();
-	        write(type);
-	        writeBlockClose();
-    	}
+        {
+            writeSpace();
+            writeBlockOpen();
+            write(type);
+            writeBlockClose();
+        }
         if (param != "")
-    	{
-	    	writeSpace();
-	        write(param);
-    	}
+        {
+            writeSpace();
+            write(param);
+        }
         writeNewline();
     }
-    
+
     private boolean containsThisReference(IASNode node)
     {
         final int len = node.getChildCount();
@@ -420,22 +390,39 @@ public class JSGoogDocEmitter extends JS
         return false;
     }
 
-    private String convertASTypeToJS(String name)
+    private String convertASTypeToJS(String name, String pname)
     {
-    	String result = name;
-    	
-    	if (name.equals(""))
-    		result = IASLanguageConstants.ANY_TYPE;
-    	else if (name.equals(IASLanguageConstants.Boolean) || 
-    			 name.equals(IASLanguageConstants.String) || 
-    			 name.equals(IASLanguageConstants.Number))
-    		result = result.toLowerCase();
-    	else if (name.equals(IASLanguageConstants._int) || 
-    			 name.equals(IASLanguageConstants.uint))
-    		result = IASLanguageConstants.Number.toLowerCase();
-       
-    	result = result.replace(IASLanguageConstants.String, IASLanguageConstants.String.toLowerCase());
-    	
+        String result = "";
+
+        if (name.equals(""))
+            result = IASLanguageConstants.ANY_TYPE;
+        else if (name.equals(IASLanguageConstants.Boolean)
+                || name.equals(IASLanguageConstants.String)
+                || name.equals(IASLanguageConstants.Number))
+            result = name.toLowerCase();
+        else if (name.equals(IASLanguageConstants._int)
+                || name.equals(IASLanguageConstants.uint))
+            result = IASLanguageConstants.Number.toLowerCase();
+
+        boolean isBuiltinFunction = name.matches("Vector\\.<.*>");
+        IASGlobalFunctionConstants.BuiltinType[] builtinTypes = IASGlobalFunctionConstants.BuiltinType
+                .values();
+        for (IASGlobalFunctionConstants.BuiltinType builtinType : builtinTypes)
+        {
+            if (name.equalsIgnoreCase(builtinType.getName()))
+            {
+                isBuiltinFunction = true;
+                break;
+            }
+        }
+
+        if (result == "")
+            result = (pname != "" && !isBuiltinFunction) ? pname
+                    + ASEmitter.PERIOD + name : name;
+
+        result = result.replace(IASLanguageConstants.String,
+                IASLanguageConstants.String.toLowerCase());
+
         return result;
     }