Repository: flex-falcon Updated Branches: refs/heads/develop 53ed68ef7 -> 631f43ec0
Type inheritence test for supers and interface override replacements. - In JS you can overload methods, as ou can't. For now, all overriden/overloaded methods need to search for the top most definition and use it's signature. This is far from optimal but hackish works right now. Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/631f43ec Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/631f43ec Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/631f43ec Branch: refs/heads/develop Commit: 631f43ec00e1b3a911d190208b9dd6b870a5c9b9 Parents: 53ed68e Author: Michael Schmalle <[email protected]> Authored: Sun Jun 14 10:29:49 2015 -0400 Committer: Michael Schmalle <[email protected]> Committed: Sun Jun 14 10:30:30 2015 -0400 ---------------------------------------------------------------------- .../codegen/externals/ExternalsTestUtils.java | 6 + .../codegen/externals/TestTypeInheritence.java | 87 +++++++ .../externals_unit_tests/type_inheritence.js | 62 +++++ .../externals/emit/ReferenceEmitter.java | 11 - .../externals/reference/ClassReference.java | 239 ++++++++++++------- .../externals/reference/FieldReference.java | 1 + .../externals/reference/MethodReference.java | 25 +- .../externals/reference/ReferenceModel.java | 15 +- .../codegen/externals/utils/FunctionUtils.java | 25 +- 9 files changed, 357 insertions(+), 114 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/631f43ec/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/externals/ExternalsTestUtils.java ---------------------------------------------------------------------- diff --git a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/externals/ExternalsTestUtils.java b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/externals/ExternalsTestUtils.java index 5caccc3..4f3092f 100644 --- a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/externals/ExternalsTestUtils.java +++ b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/externals/ExternalsTestUtils.java @@ -68,6 +68,12 @@ public class ExternalsTestUtils config.addExclude("IDBCursor", "continue"); config.addExclude("IDBCursor", "delete"); config.addExclude("IDBObjectStore", "delete"); + + // TODO method treated like field + config.addFieldExclude("Iterator", "next"); + config.addExclude("Generator", "next"); + config.addExclude("LinkStyle", "sheet"); + } public static void addTestExternalsFull(ExternCConfiguration config) http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/631f43ec/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/externals/TestTypeInheritence.java ---------------------------------------------------------------------- diff --git a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/externals/TestTypeInheritence.java b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/externals/TestTypeInheritence.java new file mode 100644 index 0000000..0f71102 --- /dev/null +++ b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/externals/TestTypeInheritence.java @@ -0,0 +1,87 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.flex.compiler.internal.codegen.externals; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertSame; +import static org.junit.Assert.assertTrue; + +import java.io.IOException; +import java.util.List; + +import org.apache.flex.compiler.clients.ExternCConfiguration; +import org.apache.flex.compiler.internal.codegen.externals.reference.ClassReference; +import org.junit.Test; + +public class TestTypeInheritence extends ExternalsTestBase +{ + + @Test + public void test_superclasses() throws Exception + { + compile("type_inheritence.js"); + + ClassReference EventTarget = model.getInterfaceReference("EventTarget"); + + ClassReference Object = model.getClassReference("Object"); + ClassReference Foo = model.getClassReference("Foo"); + ClassReference Bar = model.getClassReference("Bar"); + ClassReference Baz = model.getClassReference("Baz"); + + assertNotNull(Object); + assertNotNull(EventTarget); + assertNotNull(Foo); + assertNotNull(Bar); + assertNotNull(Baz); + + assertSame(EventTarget, Foo.getImplementedInterfaces().get(0)); + assertSame(Object, Foo.getSuperClass()); + assertSame(Foo, Bar.getSuperClass()); + assertSame(Bar, Baz.getSuperClass()); + + List<ClassReference> superClasses = Baz.getSuperClasses(); + assertEquals(3, superClasses.size()); + assertSame(Bar, superClasses.get(0)); + assertSame(Foo, superClasses.get(1)); + assertSame(Object, superClasses.get(2)); + + assertTrue(Foo.hasMethod("addEventListener")); + + // TODO (mschmalle) need to revisit interface method overload + // XXX Since Foo implements EventTarget BUT changes it's signature, we have to + // use EventTargt.addEventListener()'s signature + String result = client.getEmitter().emit( + Foo.getMethod("addEventListener")); + assertEquals( + " /**\n " + + "* @param opt_useCapture [(boolean|undefined)] \n " + + "* @see [type_inheritence]\n */\n" + + " public function addEventListener(type:String, listener:Object, useCapture:Boolean):Object /* undefined */ " + + "{ return null; }\n", result); + } + + @Override + protected void configure(ExternCConfiguration config) throws IOException + { + config.setASRoot(ExternalsTestUtils.AS_ROOT_DIR); + } + +} http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/631f43ec/compiler.jx.tests/test-files/externals_unit_tests/type_inheritence.js ---------------------------------------------------------------------- diff --git a/compiler.jx.tests/test-files/externals_unit_tests/type_inheritence.js b/compiler.jx.tests/test-files/externals_unit_tests/type_inheritence.js new file mode 100644 index 0000000..f9ebe8e --- /dev/null +++ b/compiler.jx.tests/test-files/externals_unit_tests/type_inheritence.js @@ -0,0 +1,62 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// type logic uses Object as the top of the tree +/** + * @constructor + */ +function Object() {} + +/** + * @interface + */ +function EventTarget() {} + +/** + * @param {string} type + * @param {EventListener|function(!Event):(boolean|undefined)} listener + * @param {boolean} useCapture + * @return {undefined} + */ +EventTarget.prototype.addEventListener = function(type, listener, useCapture) {}; + +/** + * @constructor + * @implements {EventTarget} + */ +function Foo () {} + +/** + * @param {boolean=} opt_useCapture + * @override + */ +Foo.prototype.addEventListener = function(type, listener, opt_useCapture) {}; + +/** + * @constructor + * @extends {Foo} + */ +function Bar () {} + + +/** + * @constructor + * @extends {Bar} + */ +function Baz () {} http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/631f43ec/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/emit/ReferenceEmitter.java ---------------------------------------------------------------------- diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/emit/ReferenceEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/emit/ReferenceEmitter.java index de531dd..d4046cc 100644 --- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/emit/ReferenceEmitter.java +++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/emit/ReferenceEmitter.java @@ -108,17 +108,6 @@ public class ReferenceEmitter File sourceFile = reference.getFile(model.getConfiguration().getAsConstantRoot()); FileUtils.write(sourceFile, sb.toString()); } - - // StringBuilder sb = new StringBuilder(); - // sb.append("package {\n"); - // for (Entry<String, ConstantReference2> set : constants.entrySet()) - // { - // ConstantReference2 reference = set.getValue(); - // emit(reference, sb); - // } - // sb.append("\n}"); - // File sourceFile = new File(asRoot, "constants.as"); - // FileUtils.write(sourceFile, sb.toString()); } public void emit(BaseReference reference, StringBuilder sb) http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/631f43ec/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/reference/ClassReference.java ---------------------------------------------------------------------- diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/reference/ClassReference.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/reference/ClassReference.java index 27947bf..df381c0 100644 --- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/reference/ClassReference.java +++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/reference/ClassReference.java @@ -21,6 +21,7 @@ package org.apache.flex.compiler.internal.codegen.externals.reference; import java.io.File; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -221,6 +222,25 @@ public class ClassReference extends BaseReference return false; } + public MethodReference getSuperMethod(String methodName) + { + List<ClassReference> list = getSuperClasses(); + for (ClassReference reference : list) + { + if (reference.hasMethod(methodName)) + return reference.getMethod(methodName); + } + + list = getAllImplInterfaces(); // return all our interfaces and all superclass + for (ClassReference reference : list) + { + if (reference.hasMethod(methodName)) + return reference.getMethod(methodName); + } + + return null; + } + public List<ClassReference> getSuperClasses() { ArrayList<ClassReference> result = new ArrayList<ClassReference>(); @@ -230,6 +250,54 @@ public class ClassReference extends BaseReference result.add(superClass); superClass = superClass.getSuperClass(); } + // ClassReference objectReference = getModel().getClassReference("Object"); + // // TODO tests + // if (objectReference != null) + // result.add(objectReference); + return result; + } + + public List<ClassReference> getAllImplInterfaces() + { + ArrayList<ClassReference> result = new ArrayList<ClassReference>(); + for (JSTypeExpression jsTypeExpression : getComment().getImplementedInterfaces()) + { + String interfaceName = jsTypeExpression.evaluate(null, + getModel().getJSCompiler().getTypeRegistry()).getDisplayName(); + ClassReference classReference = getModel().getClassReference( + interfaceName); + if (classReference != null) + result.add(classReference); + } + + return result; + } + + public List<ClassReference> getImplementedInterfaces() + { + ArrayList<ClassReference> result = new ArrayList<ClassReference>(); + for (JSTypeExpression jsTypeExpression : getComment().getImplementedInterfaces()) + { + String interfaceName = jsTypeExpression.evaluate(null, + getModel().getJSCompiler().getTypeRegistry()).toAnnotationString(); + //System.out.println(" !!!!!!!! [" + interfaceName + "]"); + ClassReference reference = getModel().getClassReference( + interfaceName); + if (reference != null) + result.add(reference); + } + return result; + } + + public List<ClassReference> getSuperInterfaces() + { + ArrayList<ClassReference> result = new ArrayList<ClassReference>(); + ClassReference superClass = getSuperClass(); + while (superClass != null) + { + result.add(superClass); + superClass = superClass.getSuperClass(); + } return result; } @@ -353,20 +421,12 @@ public class ClassReference extends BaseReference sb.append("{\n"); sb.append("\n"); - printPackageAccess(sb); - if (!isInterface) { printConstructor(sb); sb.append("\n"); } - // for (Entry<String, FieldReference> fieldSet : getStaticFields().entrySet()) - // { - // fieldSet.getValue().emit(sb); - // sb.append("\n"); - // } - for (Entry<String, FieldReference> fieldSet : getFields().entrySet()) { fieldSet.getValue().emit(sb); @@ -385,21 +445,6 @@ public class ClassReference extends BaseReference sb.append("}\n"); sb.append("}\n"); // package - - //System.out.println(sb.toString()); - } - - private void printPackageAccess(StringBuilder sb) - { - if (!isQualifiedName()) - return; - - // get all classes that are @const AND object literal - - // chrome.runtime - // String packageName = getPackageName(); - // String[] split = packageName.split("\\."); - // sb.append(" public static var " + split[split.length - 1] + ";\n"); } private void printClass(StringBuilder sb) @@ -425,12 +470,16 @@ public class ClassReference extends BaseReference printSuperClass(sb); sb.append(" "); } - // - // if (TagUtils.hasTags(this, "implements")) - // { - // printImplements(sb); - // sb.append(" "); - // } + else + { + // XXX JSObject extends + //sb.append("extends JSObject "); + } + + if (!isInterface()) + { + printImplements(sb); + } } private void printInterface(StringBuilder sb) @@ -439,11 +488,22 @@ public class ClassReference extends BaseReference sb.append(getQualifiedName() + " "); - // if (TagUtils.hasTags(this, "extends")) - // { - // printSuperClass(sb); - // sb.append(" "); - // } + List<JSTypeExpression> extendedInterfaces = getComment().getExtendedInterfaces(); + int len = extendedInterfaces.size(); + int i = 0; + if (len > 0) + { + sb.append("extends "); + for (JSTypeExpression jsTypeExpression : extendedInterfaces) + { + String value = jsTypeExpression.evaluate(null, + getModel().getJSCompiler().getTypeRegistry()).toAnnotationString(); + sb.append(value); + if (i < len - 1) + sb.append(", "); + } + sb.append(" "); + } } private void printSuperClass(StringBuilder sb) @@ -454,22 +514,25 @@ public class ClassReference extends BaseReference sb.append(value); } - @SuppressWarnings("unused") private void printImplements(StringBuilder sb) { - // if (TagUtils.hasTags(this, "implements")) - // { - // sb.append("implements "); - // List<DocletTag> impls = TagUtils.getTags(this, "implements"); - // int len = impls.size(); - // for (int i = 0; i < len; i++) - // { - // String value = impls.get(0).getValue(); - // sb.append(value.substring(1, value.length() - 1)); - // if (i < len - 1) - // sb.append(", "); - // } - // } + List<JSTypeExpression> implementedInterfaces = getComment().getImplementedInterfaces(); + if (implementedInterfaces.size() == 0) + return; + + sb.append("implements "); + + int len = implementedInterfaces.size(); + for (int i = 0; i < len; i++) + { + String value = implementedInterfaces.get(i).evaluate(null, + getModel().getJSCompiler().getTypeRegistry()).getDisplayName(); + sb.append(value); + if (i < len - 1) + sb.append(", "); + } + + sb.append(" "); } private void printConstructor(StringBuilder sb) @@ -518,18 +581,18 @@ public class ClassReference extends BaseReference public boolean isMethodOverrideFromInterface(MethodReference reference) { - // if (!hasImplementations()) - // return false; - // - // List<DocletTag> impls = TagUtils.getTags(this, "implements"); - // for (DocletTag docletTag : impls) - // { - // String interfaceName = docletTag.getValue().trim(); - // interfaceName = interfaceName.substring(1, - // interfaceName.length() - 1); - // ClassReference2 classReference = model.getClassReference(interfaceName); - // return classReference.hasMethod(reference.getName()); - // } + if (!hasImplementations()) + return false; + + List<JSTypeExpression> implementedInterfaces = getComment().getImplementedInterfaces(); + for (JSTypeExpression jsTypeExpression : implementedInterfaces) + { + String interfaceName = jsTypeExpression.evaluate(null, + getModel().getJSCompiler().getTypeRegistry()).getDisplayName(); + ClassReference classReference = getModel().getClassReference( + interfaceName); + return classReference.hasSuperMethod(reference.getQualifiedName()); + } return false; } @@ -537,29 +600,33 @@ public class ClassReference extends BaseReference public MethodReference getMethodOverrideFromInterface( MethodReference reference) { - // if (!hasImplementations()) - // return null; - // - // List<DocletTag> impls = TagUtils.getTags(this, "implements"); - // for (DocletTag docletTag : impls) - // { - // String interfaceName = docletTag.getValue().trim(); - // interfaceName = interfaceName.substring(1, - // interfaceName.length() - 1); - // ClassReference2 classReference = model.getClassReference(interfaceName); - // return classReference.getMethods().get(reference.getName()); - // } + // get all super classes, reverse and search top down + List<ClassReference> superClasses = getSuperClasses(); + superClasses.add(0, this); + Collections.reverse(superClasses); + + // for each superclass, get all implemented interfaces + for (ClassReference classReference : superClasses) + { + List<ClassReference> interfaces = classReference.getImplementedInterfaces(); + for (ClassReference interfaceReference : interfaces) + { + // check for the method on the interface + MethodReference method = interfaceReference.getMethod(reference.getBaseName()); + if (method != null) + return method; + } + } return null; } - @SuppressWarnings("unused") private boolean hasImplementations() { return getComment().getImplementedInterfaceCount() > 0; } - public boolean hasImplements(String interfaceName) + public boolean _hasImplements(String interfaceName) { // boolean hasImplements = TagUtils.hasTags(this, "implements"); // if (hasImplements) @@ -577,6 +644,9 @@ public class ClassReference extends BaseReference public ClassReference getSuperClass() { + if (getBaseName().equals("Object")) + return null; + JSTypeExpression baseType = getComment().getBaseType(); if (baseType != null) { @@ -585,6 +655,11 @@ public class ClassReference extends BaseReference if (jsType != null) return getModel().getClassReference(jsType.getDisplayName()); } + else + { + return getModel().getObjectReference(); + } + return null; } @@ -613,22 +688,6 @@ public class ClassReference extends BaseReference return false; } - @SuppressWarnings("unused") - private List<ClassReference> getSuperInterfaces() - { - ArrayList<ClassReference> result = new ArrayList<ClassReference>(); - // if (!TagUtils.hasTags(this, "implements")) - // return result; - // - // List<DocletTag> impls = TagUtils.getTags(this, "implements"); - // for (DocletTag tag : impls) - // { - // String type = TagUtils.getType(tag); - // result.add(model.getClassReference(type)); - // } - return result; - } - public boolean hasLocalMethodConflict(String functionName) { return methods.containsKey(functionName); http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/631f43ec/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/reference/FieldReference.java ---------------------------------------------------------------------- diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/reference/FieldReference.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/reference/FieldReference.java index 1a85ff4..e6e92cf 100644 --- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/reference/FieldReference.java +++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/reference/FieldReference.java @@ -79,6 +79,7 @@ public class FieldReference extends MemberReference if (excluded != null) { excluded.print(sb); + return; // XXX (mschmalle) accessors are not treated right, need to exclude get/set } if (!getClassReference().isInterface() && !getComment().isOverride()) http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/631f43ec/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 3c98137..fba7caf 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 @@ -87,9 +87,6 @@ public class MethodReference extends MemberReference return; } - if (isOverride()) - return; - if (getClassReference().hasSuperMethod(getQualifiedName())) return; @@ -106,9 +103,20 @@ public class MethodReference extends MemberReference staticValue = ""; String isOverride = ""; - // if (TagUtils.hasTags(this, "override")) + + if (!getClassReference().isInterface()) + { + MethodReference overrideFromInterface = getClassReference().getMethodOverrideFromInterface( + this); + if (/*isOverride() && */overrideFromInterface != null) + { + override = overrideFromInterface; + } + } + + // if (isOverride()) // { - // isOverride = "override "; + // //isOverride = "override "; // if (getClassReference().isMethodOverrideFromInterface(this)) // { // override = getClassReference().getMethodOverrideFromInterface( @@ -166,13 +174,14 @@ public class MethodReference extends MemberReference private String transformReturnString() { - return FunctionUtils.transformReturnString(getContext(), getComment()); + return FunctionUtils.transformReturnString(getContext(), + getContext().getComment()); } private String toPrameterString() { - return FunctionUtils.toPrameterString(getContext(), getComment(), - paramNode); + return FunctionUtils.toPrameterString(getContext(), + getContext().getComment(), paramNode); } public boolean isOverride() http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/631f43ec/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/reference/ReferenceModel.java ---------------------------------------------------------------------- diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/reference/ReferenceModel.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/reference/ReferenceModel.java index b4ea9dd..229953f 100644 --- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/reference/ReferenceModel.java +++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/reference/ReferenceModel.java @@ -61,6 +61,11 @@ public class ReferenceModel return configuration; } + public ClassReference getObjectReference() + { + return classes.get("Object"); + } + public Collection<String> getNamespaces() { return namespaces; @@ -96,6 +101,14 @@ public class ReferenceModel return classes.get(qualifiedName); } + public ClassReference getInterfaceReference(String qualifiedName) + { + ClassReference reference = classes.get(qualifiedName); + if (reference != null && reference.isInterface()) + return reference; + return null; + } + public void addNamespace(Node node, String qualifiedName) { if (namespaces.contains(qualifiedName)) @@ -118,7 +131,6 @@ public class ReferenceModel } log("Model.addClass(" + qualifiedName + ")"); - ClassReference reference = new ClassReference(this, node, qualifiedName); classes.put(qualifiedName, reference); } @@ -306,4 +318,5 @@ public class ReferenceModel { DebugLogUtils.err(message); } + } http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/631f43ec/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/utils/FunctionUtils.java ---------------------------------------------------------------------- diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/utils/FunctionUtils.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/utils/FunctionUtils.java index e6a8a39..6a21cd4 100644 --- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/utils/FunctionUtils.java +++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/utils/FunctionUtils.java @@ -63,7 +63,7 @@ public class FunctionUtils { int index = 0; int len = comment.getParameterCount(); - + //int childCount = paramNode.getChildCount(); if (len == 0) { len = paramNode.getChildCount(); @@ -79,6 +79,20 @@ public class FunctionUtils } } } + // else if (len != childCount) + // { + // // XXX Match up existing @param tags with parameters + // if (childCount > 0) + // { + // for (Node param : paramNode.children()) + // { + // sb.append(param.getString() + ":Object"); + // if (index < childCount - 1) + // sb.append(", "); + // index++; + // } + // } + // } else { for (String paramName : comment.getParameterNames()) @@ -101,13 +115,16 @@ public class FunctionUtils public static String toParameter(BaseReference reference, JSDocInfo comment, String paramName, JSTypeExpression parameterType) { + StringBuilder sb = new StringBuilder(); + if (parameterType == null) { - return "Object /* TODO is this correct? */"; + sb.append(paramName); + sb.append(":"); + sb.append("Object /* TODO is this correct? */"); + return sb.toString(); } - StringBuilder sb = new StringBuilder(); - //JSTypeExpression parameterType = comment.getParameterType(paramName); ImmutableList<String> names = comment.getTemplateTypeNames();
