Repository: flex-falcon Updated Branches: refs/heads/develop 323326191 -> dd122c7ce
Fixed bug with optional constructor args not included. - For some reason using the native keyword disallows optional parameters in method definitions. - Changed emitted code for constructor to be non native, also had to then emit a default super() call if the class has a super class. Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/dd122c7c Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/dd122c7c Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/dd122c7c Branch: refs/heads/develop Commit: dd122c7cec532cfdfa67e08a37850420055a9437 Parents: 3233261 Author: Michael Schmalle <[email protected]> Authored: Mon Jun 15 15:23:52 2015 -0400 Committer: Michael Schmalle <[email protected]> Committed: Mon Jun 15 15:23:52 2015 -0400 ---------------------------------------------------------------------- .../codegen/externals/TestConstructor.java | 9 +++- .../test-files/externals/app1/as_src/Main.as | 4 +- .../externals/reference/MethodReference.java | 43 ++++++++++++++++++-- 3 files changed, 48 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/dd122c7c/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/externals/TestConstructor.java ---------------------------------------------------------------------- diff --git a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/externals/TestConstructor.java b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/externals/TestConstructor.java index 10b47e9..8b95585 100644 --- a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/externals/TestConstructor.java +++ b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/externals/TestConstructor.java @@ -102,8 +102,13 @@ public class TestConstructor extends ExternalsTestBase FooOptVarArgs.getConstructor().emit(sb); String string = sb.toString(); assertEquals( - " /**\n * A constructor with arg, opt arg and var args.\n *\n * @param arg1 [number] The arg 1.\n * @param opt_arg2 [*] The arg that is wrapped by another line in the comment.\n * @param var_args [*] A var agr param.\n * @see http://foo.bar.com \n * @see [constructor_params]\n * @returns {(FooVarArgs|null)} Another instance.\n */\n native public function FooOptVarArgs(arg1:Number, opt_arg2:* = null, ...rest);\n", - string); + " /**\n * A constructor with arg, opt arg and var args.\n *\n " + + "* @param arg1 [number] The arg 1.\n * @param opt_arg2 [*] The arg " + + "that is wrapped by another line in the comment.\n * @param var_args " + + "[*] A var agr param.\n * @see http://foo.bar.com \n * @see " + + "[constructor_params]\n * @returns {(FooVarArgs|null)} Another instance.\n" + + " */\n public function FooOptVarArgs(arg1:Number, opt_arg2:* = null, ...rest) " + + "{\n super();\n }\n", string); } @Override http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/dd122c7c/compiler.jx.tests/test-files/externals/app1/as_src/Main.as ---------------------------------------------------------------------- diff --git a/compiler.jx.tests/test-files/externals/app1/as_src/Main.as b/compiler.jx.tests/test-files/externals/app1/as_src/Main.as index b57d9d7..3c5095a 100644 --- a/compiler.jx.tests/test-files/externals/app1/as_src/Main.as +++ b/compiler.jx.tests/test-files/externals/app1/as_src/Main.as @@ -23,8 +23,8 @@ public class Main { public function start():void { - var element:Element = document.createElement("button"); - element.onclick = function ():void { + var button:Element = document.createElement("button"); + button.onclick = function ():void { alert("Hello browser from FalconJX!"); }; button.textContent = "Say Hello"; http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/dd122c7c/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/reference/MethodReference.java ---------------------------------------------------------------------- diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/reference/MethodReference.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/reference/MethodReference.java index db4b2f7..3508b03 100644 --- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/reference/MethodReference.java +++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/reference/MethodReference.java @@ -160,13 +160,48 @@ public class MethodReference extends MemberReference emitComment(sb); sb.append(indent); - sb.append("native public function "); - sb.append(getQualifiedName()); - sb.append(toPrameterString()); - sb.append(";"); + sb.append("public function "); + sb.append(getBaseName()); + if (!getBaseName().equals("Object")) + { + sb.append(toPrameterString()); + sb.append(" {\n"); + sb.append(indent); + emitSuperCall(sb); + sb.append(indent); + sb.append("}"); + } + else + { + sb.append("() {}"); + } + sb.append("\n"); } + private void emitSuperCall(StringBuilder sb) + { + + sb.append(indent); + sb.append("super("); + + ClassReference superClass = getClassReference().getSuperClass(); + if (superClass != null && !superClass.getBaseName().equals("Object")) + { + MethodReference constructor = superClass.getConstructor(); + Set<String> parameterNames = constructor.getParameterNames(); + int len = parameterNames.size(); + for (int i = 0; i < len; i++) + { + sb.append("null"); + if (i < len - 1) + sb.append(", "); + } + } + + sb.append(");\n"); + } + public boolean isConstructor() { return getComment().isConstructor();
