Updated Branches: refs/heads/develop 4c3b6d0a9 -> 612357a52
update FlexJS emitter to use fully qualified names for 'new classname()'. Now it runs on older versions of Safari. Requires latest FlexJS sources Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/612357a5 Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/612357a5 Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/612357a5 Branch: refs/heads/develop Commit: 612357a520faaef1d3ae31abde8d44604d2ee28d Parents: 4c3b6d0 Author: Alex Harui <[email protected]> Authored: Tue Apr 2 21:48:24 2013 -0700 Committer: Alex Harui <[email protected]> Committed: Tue Apr 2 21:48:38 2013 -0700 ---------------------------------------------------------------------- .../codegen/js/flexjs/TestFlexJSClass.java | 2 +- .../codegen/js/flexjs/JSFlexJSEmitter.java | 14 +++++++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/612357a5/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSClass.java ---------------------------------------------------------------------- diff --git a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSClass.java b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSClass.java index 6308d27..b36d4b3 100644 --- a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSClass.java +++ b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSClass.java @@ -45,7 +45,7 @@ public class TestFlexJSClass extends TestGoogClass { IClassNode node = getClassNode("public class B {public function B() {}; public var button:Button = new Button(); public function foo():String {return button.label;};}"); asBlockWalker.visitClass(node); - String expected = "/**\n * @constructor\n */\norg.apache.flex.B = function() {\n};\n\n/**\n * @type {spark.components.Button}\n */\norg.apache.flex.B.prototype.button = new Button();\n\n/**\n * @return {string}\n */\norg.apache.flex.B.prototype.foo = function() {\n\tvar self = this;\n\treturn self.button.get_label();\n};"; + String expected = "/**\n * @constructor\n */\norg.apache.flex.B = function() {\n};\n\n/**\n * @type {spark.components.Button}\n */\norg.apache.flex.B.prototype.button = new spark.components.Button();\n\n/**\n * @return {string}\n */\norg.apache.flex.B.prototype.foo = function() {\n\tvar self = this;\n\treturn self.button.get_label();\n};"; assertOut(expected); } http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/612357a5/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 4d0b3e9..0c711ce 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 @@ -172,7 +172,19 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter && !(NativeUtils.isNative(def.getBaseName())); } - if (!isClassCast) + if (node.isNewExpression()) + { + def = node.resolveCalledExpression(getWalker().getProject()); + // all new calls to a class should be fully qualified names + if (def instanceof ClassDefinition) + write(def.getQualifiedName()); + else // I think we still need this for "new someVarOfTypeClass" + getWalker().walk(node.getNameNode()); + write(ASEmitterTokens.PAREN_OPEN); + walkArguments(node.getArgumentNodes()); + write(ASEmitterTokens.PAREN_CLOSE); + } + else if (!isClassCast) { getWalker().walk(node.getNameNode()); write(ASEmitterTokens.PAREN_OPEN);
