Repository: flex-falcon Updated Branches: refs/heads/develop d51eb8a48 -> 9827b9f90
fix a call to super Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/9827b9f9 Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/9827b9f9 Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/9827b9f9 Branch: refs/heads/develop Commit: 9827b9f9090cb533cf017bbdf3dbc4b0f2bddb66 Parents: d51eb8a Author: Alex Harui <aha...@apache.org> Authored: Fri Aug 4 00:03:17 2017 -0700 Committer: Alex Harui <aha...@apache.org> Committed: Fri Aug 4 00:03:17 2017 -0700 ---------------------------------------------------------------------- .../codegen/js/jx/SuperCallEmitter.java | 9 ++++-- .../js/flexjs/TestFlexJSExpressions.java | 32 ++++++++++++++++++++ 2 files changed, 39 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/9827b9f9/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/SuperCallEmitter.java ---------------------------------------------------------------------- diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/SuperCallEmitter.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/SuperCallEmitter.java index ad3c6c4..f1b8bed 100644 --- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/SuperCallEmitter.java +++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/SuperCallEmitter.java @@ -73,8 +73,13 @@ public class SuperCallEmitter extends JSSubEmitter IClassNode cnode = (IClassNode) node .getAncestorOfType(IClassNode.class); - if (fnode != null - && (fnode.getNodeID() == ASTNodeID.GetterID || fnode + IExpressionNode fcNameNode = fcnode.getNameNode(); + // assume it is memberaccess of the form super.somefunction + MemberAccessExpressionNode mae = null; + if (fcNameNode.getNodeID() == ASTNodeID.MemberAccessExpressionID) + mae = (MemberAccessExpressionNode)fcNameNode; + if (mae != null + && (mae.getRightOperandNode().getNodeID() == ASTNodeID.GetterID || mae.getRightOperandNode() .getNodeID() == ASTNodeID.SetterID)) { if (cnode == null && thisClass != null) http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/9827b9f9/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSExpressions.java ---------------------------------------------------------------------- diff --git a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSExpressions.java b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSExpressions.java index b5a7de5..dc28b6b 100644 --- a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSExpressions.java +++ b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSExpressions.java @@ -35,6 +35,7 @@ import org.apache.flex.compiler.tree.as.IClassNode; import org.apache.flex.compiler.tree.as.IFileNode; import org.apache.flex.compiler.tree.as.IFunctionCallNode; import org.apache.flex.compiler.tree.as.IFunctionNode; +import org.apache.flex.compiler.tree.as.IGetterNode; import org.apache.flex.compiler.tree.as.IMemberAccessExpressionNode; import org.apache.flex.compiler.tree.as.IVariableNode; import org.junit.Ignore; @@ -74,6 +75,37 @@ public class TestFlexJSExpressions extends TestGoogExpressions assertOut("super.foo"); } + @Test + public void testVisitLanguageIdentifierNode_SuperGetter() + { + IClassNode node = (IClassNode)getNode("public function get defaultPrevented():Boolean " + + "{ return super.isDefaultPrevented(); }" + + "override public function isDefaultPrevented():Boolean" + + "{ return defaultPrevented; }", IClassNode.class); + // getters and setters don't get output until the class is output so you can't just visit the accessorNode + asBlockWalker.visitClass(node); + assertOut("/**\n * @constructor\n */\n" + + "FalconTest_A = function() {\n" + + "};\n\n\n" + + "/**\n" + + " * Prevent renaming of class. Needed for reflection.\n" + + " */\n" + + "goog.exportSymbol('FalconTest_A', FalconTest_A);\n\n\n" + + "FalconTest_A.prototype.falconTest_a = function() {\n" + + " var self = this;\n" + + " ;\n" + + " function isDefaultPrevented() {\n" + + " return defaultPrevented;\n };\n" + + " ;\n \n" + + "};\n\n\n" + + "FalconTest_A.prototype.get__defaultPrevented = function() {\n" + + " return FalconTest_A.superClass_.isDefaultPrevented.apply(this);\n" + + "};\n\n\n" + + "Object.defineProperties(FalconTest_A.prototype, /** @lends {FalconTest_A.prototype} */ {\n" + + "/** @export */\n" + + "defaultPrevented: {\nget: FalconTest_A.prototype.get__defaultPrevented}}\n);"); + } + @Override @Test public void testVisitLanguageIdentifierNode_SuperMethod_1()