Repository: flex-falcon
Updated Branches:
  refs/heads/develop 11f5e2852 -> 85d6606b4


FLEX-34992 make sure interfaces are output correctly


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

Branch: refs/heads/develop
Commit: 85d6606b41ed460ffaf22e208372b65dfb0242fb
Parents: 11f5e28
Author: Alex Harui <[email protected]>
Authored: Wed Dec 23 07:52:40 2015 -0800
Committer: Alex Harui <[email protected]>
Committed: Wed Dec 23 07:52:40 2015 -0800

----------------------------------------------------------------------
 .../codegen/js/flexjs/TestFlexJSPackage.java    | 90 ++++++++++++++++++++
 .../internal/codegen/as/ASBlockWalker.java      |  1 +
 .../codegen/js/flexjs/JSFlexJSEmitter.java      |  5 ++
 3 files changed, 96 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/85d6606b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSPackage.java
----------------------------------------------------------------------
diff --git 
a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSPackage.java
 
b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSPackage.java
index 9473f19..2a8aa67 100644
--- 
a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSPackage.java
+++ 
b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSPackage.java
@@ -322,6 +322,96 @@ public class TestFlexJSPackage extends TestGoogPackage
                          
"foo.bar.baz.A.InternalClass.prototype.FLEXJS_CLASS_INFO = { names: [{ name: 
'InternalClass', qName: 'foo.bar.baz.A.InternalClass'}] };\n");
     }
     
+    @Test
+    public void testPackageQualified_ClassAndInternalFLEXJS_CLASS_INFO()
+    {
+        IFileNode node = compileAS("package foo.bar.baz {\n" + 
+                                                                 "public class 
A {\n" +
+                                                                 "public 
function A(){\n" +
+                                                                     "var 
internalClass:ITestInterface = new InternalClass() as ITestInterface;\n" +
+                                                                     
"internalClass.test();\n" +
+                                                                 "}\n" +
+                                                                 "}}\n" +
+                                                                 "interface 
ITestInterface {\n" +
+                                                                 "function 
test():void;\n" +
+                                                                 "}\n" +
+                                                                 "class 
InternalClass implements ITestInterface {\n" +
+                                                                     "public 
function InternalClass(){\n" +
+                                                                     "}\n" +
+                                                                         
"public function test():void {}\n" +
+                                                                 "}");
+        asBlockWalker.visitFile(node);
+        assertOutWithMetadata("/**\n" +
+                         " * foo.bar.baz.A\n" +
+                         " *\n" +
+                         " * @fileoverview\n" +
+                         " *\n" +
+                         " * @suppress {checkTypes|accessControls}\n" +
+                         " */\n" +
+                         "\n" +
+                         "goog.provide('foo.bar.baz.A');\n" +
+                         "\n" +
+                         "\n" +
+                         "\n" +
+                         "/**\n" +
+                         " * @constructor\n" +
+                         " */\n" +
+                         "foo.bar.baz.A = function() {\n" +
+                         "  var /** @type {foo.bar.baz.A.ITestInterface} */ 
internalClass = org.apache.flex.utils.Language.as(new 
foo.bar.baz.A.InternalClass(), foo.bar.baz.A.ITestInterface);\n" +
+                         "  internalClass.test();\n" +
+                         "};\n" +
+                         "\n" +
+                         "\n" +
+                         "/**\n" +
+                         " * Metadata\n" +
+                         " *\n" +
+                         " * @type {Object.<string, Array.<Object>>}\n" +
+                         " */\n" +
+                         "foo.bar.baz.A.prototype.FLEXJS_CLASS_INFO = { names: 
[{ name: 'A', qName: 'foo.bar.baz.A'}] };\n" +
+                         "\n" +
+                         "\n" +
+                         "\n" +
+                         "/**\n" +
+                         " * @interface\n" +
+                         " */\n" +
+                         "foo.bar.baz.A.ITestInterface = function() {\n" +
+                         "};\n" +
+                         "foo.bar.baz.A.ITestInterface.prototype.test = 
function() {\n" +
+                         "};\n" +
+                         "\n" +
+                         "\n" +
+                         "/**\n" +
+                         " * Metadata\n" +
+                         " *\n" +
+                         " * @type {Object.<string, Array.<Object>>}\n" +
+                         " */\n" +
+                         
"foo.bar.baz.A.ITestInterface.prototype.FLEXJS_CLASS_INFO = { names: [{ name: 
'ITestInterface', qName: 'foo.bar.baz.A.ITestInterface'}] };\n" +
+                         "\n" +
+                         "\n" +
+                         "\n" +
+                         "/**\n" +
+                         " * @constructor\n" +
+                         " * @implements {foo.bar.baz.A.ITestInterface}\n" +
+                         " */\n" +
+                         "foo.bar.baz.A.InternalClass = function() {\n" +
+                         "};\n" +
+                         "\n" +
+                         "\n" +
+                         "/**\n" +
+                         " * @export\n" +
+                         " */\n" +
+                         "foo.bar.baz.A.InternalClass.prototype.test = 
function() {\n" +
+                         "};\n" +
+                         "\n" +
+                         "\n" +
+                         "/**\n" +
+                         " * Metadata\n" +
+                         " *\n" +
+                         " * @type {Object.<string, Array.<Object>>}\n" +
+                         " */\n" +
+                         
"foo.bar.baz.A.InternalClass.prototype.FLEXJS_CLASS_INFO = { names: [{ name: 
'InternalClass', qName: 'foo.bar.baz.A.InternalClass'}], interfaces: 
[foo.bar.baz.A.ITestInterface] };\n");
+    }
+    
     @Override
     protected IBackend createBackend()
     {

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/85d6606b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASBlockWalker.java
----------------------------------------------------------------------
diff --git 
a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASBlockWalker.java
 
b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASBlockWalker.java
index dc1763a..a0d128d 100644
--- 
a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASBlockWalker.java
+++ 
b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASBlockWalker.java
@@ -189,6 +189,7 @@ public class ASBlockWalker implements IASBlockVisitor, 
IASBlockWalker
                //                     in mx.core.Version
                if (pnode != null && 
                        (pnode instanceof IPackageNode || 
+                        pnode instanceof IInterfaceNode ||
                         pnode instanceof IClassNode))
                {
                    walk(pnode);

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/85d6606b/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 8903c25..db485c3 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
@@ -335,6 +335,11 @@ public class JSFlexJSEmitter extends JSGoogEmitter 
implements IJSFlexJSEmitter
                        String className = 
((IClassNode)pnode).getQualifiedName();
                        getModel().getInternalClasses().put(className, 
mainClassName + "." + className);
                }
+               else if (pnode instanceof IInterfaceNode)
+               {
+                       String className = 
((IInterfaceNode)pnode).getQualifiedName();
+                       getModel().getInternalClasses().put(className, 
mainClassName + "." + className);
+               }
         }
 
         packageHeaderEmitter.emit(definition);

Reply via email to