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);
