Repository: flex-falcon Updated Branches: refs/heads/develop 966cc7e03 -> 9c5dc8e21
FLEX-35012 handle internal classes for non-classes like functions Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/9c5dc8e2 Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/9c5dc8e2 Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/9c5dc8e2 Branch: refs/heads/develop Commit: 9c5dc8e217e4cea25f9e46c3bfdc799e531a9096 Parents: 966cc7e Author: Alex Harui <aha...@apache.org> Authored: Wed Nov 16 23:30:44 2016 -0800 Committer: Alex Harui <aha...@apache.org> Committed: Wed Nov 16 23:30:44 2016 -0800 ---------------------------------------------------------------------- .../codegen/js/flexjs/JSFlexJSEmitter.java | 16 +++++ .../codegen/js/flexjs/TestFlexJSPackage.java | 76 ++++++++++++++++++++ 2 files changed, 92 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/9c5dc8e2/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java ---------------------------------------------------------------------- diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java index 61b41e3..6d6cb8c 100644 --- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java +++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java @@ -590,6 +590,22 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter mainClassName = ((IClassNode)cnode).getQualifiedName(); break; } + else if (j == 0) + { + if (cnode instanceof IFunctionNode) + { + mainClassName = ((IFunctionNode)cnode).getQualifiedName(); + } + else if (cnode instanceof INamespaceNode) + { + mainClassName = ((INamespaceNode)cnode).getQualifiedName(); + } + else if (cnode instanceof IVariableNode) + { + mainClassName = ((IVariableNode)cnode).getQualifiedName(); + } + + } } } else if (pnode instanceof IClassNode) http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/9c5dc8e2/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSPackage.java ---------------------------------------------------------------------- diff --git a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSPackage.java b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSPackage.java index 7230646..4a0bbeb 100644 --- a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSPackage.java +++ b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSPackage.java @@ -1133,6 +1133,82 @@ public class TestFlexJSPackage extends TestGoogPackage } @Test + public void testPackageQualified_ClassAndInternalStaticConst() + { + IFileNode node = compileAS("package foo.bar {\n" + + "public function A():Number {\n" + + " return Internal.x;\n" + + "}}\n" + + "internal class Internal {" + + "public static const x:Number = 3;}"); + + asBlockWalker.visitFile(node); + assertOutWithMetadata("/**\n" + + " * foo.bar.A\n" + + " *\n" + + " * @fileoverview\n" + + " *\n" + + " * @suppress {checkTypes|accessControls}\n" + + " */\n" + + "\n" + + "goog.provide('foo.bar.A');\n" + + "\n" + + "\n" + + "\n" + + "/**\n" + + " * @export\n" + + " * @return {number}\n" + + " */\n" + + "foo.bar.A = function() {\n" + + " return foo.bar.A.Internal.x;\n" + + "}\n" + + "\n" + + "\n" + + "/**\n" + + " * @constructor\n" + + " */\n" + + "foo.bar.A.Internal = function() {\n" + + "};\n" + + "\n" + + "\n" + + "/**\n" + + " * @export\n" + + " * @const\n" + + " * @type {number}\n" + + " */\n" + + "foo.bar.A.Internal.x = 3;\n" + + "\n" + + "\n" + + "/**\n" + + " * Metadata\n" + + " *\n" + + " * @type {Object.<string, Array.<Object>>}\n" + + " */\n" + + "foo.bar.A.Internal.prototype.FLEXJS_CLASS_INFO = { names: [{ name: 'Internal', qName: 'foo.bar.A.Internal', kind: 'class' }] };\n" + + "\n" + + "\n" + + "/**\n" + + " * Prevent renaming of class. Needed for reflection.\n" + + " */\n" + + "goog.exportSymbol('foo.bar.A.Internal', foo.bar.A.Internal);\n" + + "\n" + + "\n" + + "\n" + + "/**\n" + + " * Reflection\n" + + " *\n" + + " * @return {Object.<string, Function>}\n" + + " */\n" + + "foo.bar.A.Internal.prototype.FLEXJS_REFLECTION_INFO = function () {\n" + + " return {\n" + + " variables: function () {return {};},\n" + + " accessors: function () {return {};},\n" + + " methods: function () {return {};}\n" + + " };\n" + + "};\n"); + } + + @Test public void testPackageSimple_Function() { IFileNode node = compileAS("package {public function A(){}}");