Repository: flex-falcon Updated Branches: refs/heads/develop 4606617a4 -> 2c827a2a0
Initial tests and impl of packages (js namespaces). Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/2c827a2a Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/2c827a2a Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/2c827a2a Branch: refs/heads/develop Commit: 2c827a2a04159f6ab006a931a236709f20e17f3e Parents: 4606617 Author: Michael Schmalle <[email protected]> Authored: Sat Jun 13 14:04:10 2015 -0400 Committer: Michael Schmalle <[email protected]> Committed: Sat Jun 13 14:09:44 2015 -0400 ---------------------------------------------------------------------- .../codegen/externals/TestConstructor.java | 2 +- .../codegen/externals/TestExternChrome.java | 51 +++++++ .../codegen/externals/pass/AddMemberPass.java | 99 +++++++++----- .../externals/pass/NamespaceResolutionPass.java | 132 +++++++++++++++++++ .../externals/pass/ReferenceCompiler.java | 5 + .../externals/pass/ResolvePackagesPass.java | 105 +++++++++++++++ .../externals/reference/ClassReference.java | 84 ++++++++++-- .../externals/reference/FieldReference.java | 27 +++- .../externals/reference/MethodReference.java | 8 +- 9 files changed, 458 insertions(+), 55 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/2c827a2a/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 175c803..10b47e9 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 @@ -39,7 +39,7 @@ public class TestConstructor extends ExternalsTestBase compile("constructor_params.js"); assertTrue(model.hasClass("FinalClass")); - assertTrue(model.getClassReference("FinalClass").isFinal()); + //assertTrue(model.getClassReference("FinalClass").isFinal()); assertTrue(model.getClassReference("FinalClass").hasMethod("bar")); assertTrue(model.getClassReference("FinalClass").getMethod("bar").isStatic()); } http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/2c827a2a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/externals/TestExternChrome.java ---------------------------------------------------------------------- diff --git a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/externals/TestExternChrome.java b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/externals/TestExternChrome.java new file mode 100644 index 0000000..edc9d1e --- /dev/null +++ b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/externals/TestExternChrome.java @@ -0,0 +1,51 @@ +/* + * + * 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.assertTrue; + +import java.io.IOException; + +import org.apache.flex.compiler.clients.ExternCConfiguration; +import org.junit.Test; + +import com.google.javascript.jscomp.Result; + +public class TestExternChrome extends ExternalsTestBase +{ + @Test + public void test_classes() throws IOException + { + client.cleanOutput(); + Result result = compile(); + assertTrue(result.success); + client.emit(); + } + + @Override + protected void configure(ExternCConfiguration config) throws IOException + { + config.setASRoot(ExternalsTestUtils.AS_ROOT_DIR); + + String coreRoot = ExternalsTestUtils.EXTERNAL_JS_DIR.getAbsolutePath(); + config.addExternal(coreRoot + "/chrome.js"); + } + +} http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/2c827a2a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/pass/AddMemberPass.java ---------------------------------------------------------------------- diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/pass/AddMemberPass.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/pass/AddMemberPass.java index 303a80e..46b2377 100644 --- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/pass/AddMemberPass.java +++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/pass/AddMemberPass.java @@ -75,45 +75,73 @@ public class AddMemberPass extends AbstractCompilerPass } else if (n.isGetProp()) { - if (n.getFirstChild().isName()) + //System.err.println(n.toStringTree()); + System.err.println(n.getQualifiedName()); + + String qName = n.getQualifiedName(); + // Port.prototype.name + + // chrome.runtime.lastError.message + int protoType = qName.indexOf(".prototype"); + if (protoType != -1) { - visitStaticField(t, n); - //System.err.println(n.toStringTree()); + String className = qName.substring(0, protoType); + String memberName = qName.substring(protoType + 11, + qName.length()); + System.err.println("Prototype:: className [" + className + + "] memberName [" + memberName + "]"); + model.addField(n, className, memberName); } - else if (n.getFirstChild().isGetProp()) + else { - try - { - if (n.getFirstChild().getFirstChild().isGetProp()) - { - // XXX TODO qualified class names 'chrome.runtime.lastError ' - } - else - { - visitInstanceField(t, n); - } - - } - catch (Exception e) - { - - /* - * - GETPROP 438 [jsdoc_info: JSDocInfo] [source_file: [chrome]] [length: 32] - GETPROP 438 [source_file: [chrome]] [length: 24] - GETPROP 438 [source_file: [chrome]] [length: 14] - NAME chrome 438 [source_file: [chrome]] [length: 6] - STRING runtime 438 [source_file: [chrome]] [length: 7] - STRING lastError 438 [source_file: [chrome]] [length: 9] - STRING message 438 [source_file: [chrome]] [length: 7] - * - */ - // TODO Auto-generated catch block - System.err.println(n.toStringTree()); - e.printStackTrace(); - } + String className = qName.substring(0, + qName.lastIndexOf(".")); + String memberName = qName.substring( + qName.lastIndexOf(".") + 1, qName.length()); + System.err.println("className [" + className + + "] memberName [" + memberName + "]"); + model.addStaticField(n, className, memberName); } + // if (n.getFirstChild().isName()) + // { + // visitStaticField(t, n); + // //System.err.println(n.toStringTree()); + // } + // else if (n.getFirstChild().isGetProp()) + // { + // try + // { + // if (n.getFirstChild().getFirstChild().isGetProp()) + // { + // // XXX TODO qualified class names 'chrome.runtime.lastError ' + // } + // else + // { + // visitInstanceField(t, n); + // } + // + // } + // catch (Exception e) + // { + // + // /* + // * + // GETPROP 438 [jsdoc_info: JSDocInfo] [source_file: [chrome]] [length: 32] + // GETPROP 438 [source_file: [chrome]] [length: 24] + // GETPROP 438 [source_file: [chrome]] [length: 14] + // NAME chrome 438 [source_file: [chrome]] [length: 6] + // STRING runtime 438 [source_file: [chrome]] [length: 7] + // STRING lastError 438 [source_file: [chrome]] [length: 9] + // STRING message 438 [source_file: [chrome]] [length: 7] + // * + // */ + // // TODO Auto-generated catch block + // System.err.println(n.toStringTree()); + // e.printStackTrace(); + // } + // } + // System.err.println(n.toStringTree()); } } @@ -135,6 +163,7 @@ public class AddMemberPass extends AbstractCompilerPass // STRING prototype 2026 [source_file: [es3]] [length: 9] // STRING ignoreCase 2026 [source_file: [es3]] [length: 10] + @SuppressWarnings("unused") private void visitInstanceField(NodeTraversal t, Node n) { Node className = n.getFirstChild().getFirstChild(); @@ -147,11 +176,13 @@ public class AddMemberPass extends AbstractCompilerPass // NAME RegExp 1994 [source_file: [es3]] [length: 6] // STRING $6 1994 [source_file: [es3]] [length: 2] + @SuppressWarnings("unused") private void visitStaticField(NodeTraversal t, Node n) { Node className = n.getFirstChild(); Node name = n.getLastChild(); model.addStaticField(n, className.getString(), name.getString()); + } /* http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/2c827a2a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/pass/NamespaceResolutionPass.java ---------------------------------------------------------------------- diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/pass/NamespaceResolutionPass.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/pass/NamespaceResolutionPass.java new file mode 100644 index 0000000..00f44fd --- /dev/null +++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/pass/NamespaceResolutionPass.java @@ -0,0 +1,132 @@ +/* + * + * 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.pass; + +import org.apache.flex.compiler.internal.codegen.externals.reference.ReferenceModel; + +import com.google.javascript.jscomp.AbstractCompiler; +import com.google.javascript.jscomp.NodeTraversal; +import com.google.javascript.rhino.JSDocInfo; +import com.google.javascript.rhino.Node; + +public class NamespaceResolutionPass extends AbstractCompilerPass +{ + + public NamespaceResolutionPass(ReferenceModel model, + AbstractCompiler compiler) + { + super(model, compiler); + } + + @Override + public boolean shouldTraverse(NodeTraversal nodeTraversal, Node n, + Node parent) + { + return n.isBlock() || n.isScript(); + } + + private void print(Node n) + { + System.out.println("-------------------------------------"); + System.out.println(n.toStringTree()); + } + + private void print(String qualifiedName) + { + // TODO Auto-generated method stub + System.out.println(qualifiedName); + } + + @Override + public void visit(NodeTraversal t, Node n, Node parent) + { + for (Node child : n.children()) + { + //System.out.println("-------------------------------------"); + //System.out.println(child.toStringTree()); + JSDocInfo comment = null; + + if (child.isVar()) + { + Node name = child.getFirstChild(); + comment = child.getJSDocInfo(); + if (comment != null && comment.isConstant()) + { + if (name.getFirstChild() != null + && name.getFirstChild().isObjectLit()) + { + // * @const + // var chrome = {}: + // print(child); + model.addClass(child, name.getQualifiedName()); + } + } + } + else if (child.isExprResult()) + { + Node first = child.getFirstChild(); + comment = first.getJSDocInfo(); + if (first.isQualifiedName()) + { + //print(name.getQualifiedName()); + } + else if (first.isAssign()) + { + comment = first.getJSDocInfo(); + + Node firstAssignChild = first.getFirstChild(); + Node lastAssignChild = first.getLastChild(); + if (lastAssignChild.isObjectLit()) + { + if (comment.getType() != null) + { + //print("Class " + // + firstAssignChild.getQualifiedName()); + model.addClass(first, + firstAssignChild.getQualifiedName()); + } + else if (comment.isConstant()) + { + //print("Package " + // + firstAssignChild.getQualifiedName()); + model.addClass(first, + firstAssignChild.getQualifiedName()); + } + else + { + print("Unhandled expression result:"); + print(child); + } + } + + } + } + + // look for @constructor + // look for @const + + // var foo = function () {} + // var bar = {}; + // bar.goo = {}; + // bar.go.beep = {}; + } + } + +} http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/2c827a2a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/pass/ReferenceCompiler.java ---------------------------------------------------------------------- diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/pass/ReferenceCompiler.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/pass/ReferenceCompiler.java index 28e36fe..39b74b5 100644 --- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/pass/ReferenceCompiler.java +++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/pass/ReferenceCompiler.java @@ -73,6 +73,11 @@ public class ReferenceCompiler options.setExternExports(false); options.addCustomPass(CustomPassExecutionTime.BEFORE_OPTIMIZATIONS, + new NamespaceResolutionPass(model, jscompiler)); + options.addCustomPass(CustomPassExecutionTime.BEFORE_OPTIMIZATIONS, + new ResolvePackagesPass(model, jscompiler)); + + options.addCustomPass(CustomPassExecutionTime.BEFORE_OPTIMIZATIONS, new CollectTypesPass(model, jscompiler)); options.addCustomPass(CustomPassExecutionTime.BEFORE_OPTIMIZATIONS, new AddMemberPass(model, jscompiler)); http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/2c827a2a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/pass/ResolvePackagesPass.java ---------------------------------------------------------------------- diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/pass/ResolvePackagesPass.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/pass/ResolvePackagesPass.java new file mode 100644 index 0000000..b337adf --- /dev/null +++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/pass/ResolvePackagesPass.java @@ -0,0 +1,105 @@ +/* + * + * 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.pass; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.flex.compiler.internal.codegen.externals.reference.ClassReference; +import org.apache.flex.compiler.internal.codegen.externals.reference.FieldReference; +import org.apache.flex.compiler.internal.codegen.externals.reference.ReferenceModel; + +import com.google.javascript.jscomp.AbstractCompiler; +import com.google.javascript.jscomp.NodeTraversal; +import com.google.javascript.rhino.Node; + +public class ResolvePackagesPass extends AbstractCompilerPass +{ + + public ResolvePackagesPass(ReferenceModel model, AbstractCompiler compiler) + { + super(model, compiler); + } + + @SuppressWarnings("unused") + @Override + public void process(Node externs, Node root) + { + log(">>>-----------------------------"); + for (ClassReference reference : model.getClasses()) + { + if (reference.isQualifiedName()) + { + reference.setIsNamespace(true); + } + log(reference.getQualifiedName()); + List<ClassReference> children = getFirstChildren(reference); + + } + log("<<<-----------------------------"); + } + + @SuppressWarnings("unused") + private List<ClassReference> getFirstChildren(ClassReference reference) + { + ArrayList<ClassReference> result = new ArrayList<ClassReference>(); + String qualifiedName = reference.getQualifiedName(); + String[] split = qualifiedName.split("\\."); + + for (ClassReference child : model.getClasses()) + { + String baseName = child.getBaseName(); + String testName = qualifiedName + "." + baseName; + if (testName.equals(child.getQualifiedName())) + { + FieldReference field = null; + if (!reference.isQualifiedName()) + { + log(" Add field: public static var " + baseName); + field = reference.addField(child.getNode(), baseName, + child.getNode().getJSDocInfo(), true); + } + else + { + log(" Add field: public var " + baseName); + field = reference.addField(child.getNode(), baseName, + child.getNode().getJSDocInfo(), false); + } + + field.setOverrideStringType(child.getQualifiedName()); + reference.addImport(child.getQualifiedName()); + } + } + + return result; + } + + @Override + public boolean shouldTraverse(NodeTraversal arg0, Node arg1, Node arg2) + { + return false; + } + + @Override + public void visit(NodeTraversal arg0, Node arg1, Node arg2) + { + } + +} http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/2c827a2a/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 04deede..9aa4255 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 @@ -38,6 +38,7 @@ public class ClassReference extends BaseReference private boolean isFinal; + private List<String> imports = new ArrayList<String>(); private MethodReference constructor; private Map<String, FieldReference> fields = new HashMap<String, FieldReference>(); private Map<String, MethodReference> methods = new HashMap<String, MethodReference>(); @@ -49,6 +50,18 @@ public class ClassReference extends BaseReference @SuppressWarnings("unused") private Node paramListNode; + private boolean isNamespace; + + public void setIsNamespace(boolean isNamespace) + { + this.isNamespace = isNamespace; + } + + public boolean isNamespace() + { + return isNamespace; + } + public MethodReference getConstructor() { return constructor; @@ -154,7 +167,7 @@ public class ClassReference extends BaseReference e.printStackTrace(); } } - else if (node.isAssign()) + else if (node.isAssign() && node.getChildAtIndex(1).isFunction()) { /* ASSIGN 60 [jsdoc_info: JSDocInfo] @@ -188,6 +201,9 @@ public class ClassReference extends BaseReference return null; } + if (isNamespace) + isStatic = false; + FieldReference field = new FieldReference(getModel(), this, node, fieldName, comment, isStatic); @@ -242,6 +258,9 @@ public class ClassReference extends BaseReference public MethodReference addMethod(Node node, String functionName, JSDocInfo comment, boolean isStatic) { + if (isNamespace) + isStatic = false; + MethodReference method = new MethodReference(getModel(), this, node, functionName, comment, isStatic); methods.put(functionName, method); @@ -251,14 +270,15 @@ public class ClassReference extends BaseReference @Override public void emit(StringBuilder sb) { - String packageName = ""; + String packageName = getPackageName(); sb.append("package "); - sb.append(packageName + " "); + if (!packageName.equals("")) + sb.append(packageName + " "); sb.append("{\n"); sb.append("\n"); - printImports(); + printImports(sb); boolean isInterface = isInterface(); @@ -274,6 +294,8 @@ public class ClassReference extends BaseReference sb.append("{\n"); sb.append("\n"); + printPackageAccess(sb); + if (!isInterface) { printConstructor(sb); @@ -308,6 +330,19 @@ public class ClassReference extends BaseReference //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) { boolean isDynamic = false; @@ -324,7 +359,7 @@ public class ClassReference extends BaseReference } sb.append("class "); - sb.append(getQualifiedName() + " "); + sb.append(getBaseName() + " "); if (getComment().hasBaseType()) { @@ -386,18 +421,40 @@ public class ClassReference extends BaseReference } } - private void printImports() + private void printImports(StringBuilder sb) { - // TODO Auto-generated method stub - + sb.append("\n"); + for (String imp : imports) + { + sb.append("import " + imp + ";\n"); + } + sb.append("\n"); } public File getFile(File asSourceRoot) { - String packageName = ""; + String packagePath = toPackagePath(); + return new File(asSourceRoot, packagePath + File.separator + + getBaseName() + ".as"); + } + + private String toPackagePath() + { + String packageName = getPackageName(); + + String[] cname = packageName.split("\\."); + String sdirPath = ""; + if (cname.length > 0) + { + for (int i = 0; i < cname.length; i++) + { + sdirPath += cname[i] + File.separator; + } + + return sdirPath; + } - return new File(asSourceRoot, packageName + File.separator - + getQualifiedName() + ".as"); + return ""; } public boolean isMethodOverrideFromInterface(MethodReference reference) @@ -523,4 +580,9 @@ public class ClassReference extends BaseReference return getFields().containsKey(reference.getQualifiedName()); } + public void addImport(String qualifiedName) + { + imports.add(qualifiedName); + } + } http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/2c827a2a/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 5a77e7b..cd2804a 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 @@ -31,6 +31,7 @@ public class FieldReference extends MemberReference { private boolean isStatic; + private String overrideStringType; public boolean isStatic() { @@ -42,7 +43,8 @@ public class FieldReference extends MemberReference this.isStatic = isStatic; } - public FieldReference(ReferenceModel model, ClassReference classReference, Node node, String name, JSDocInfo comment, boolean isStatic) + public FieldReference(ReferenceModel model, ClassReference classReference, + Node node, String name, JSDocInfo comment, boolean isStatic) { super(model, classReference, node, name, comment); this.isStatic = isStatic; @@ -84,8 +86,11 @@ public class FieldReference extends MemberReference String isPublic = getClassReference().isInterface() ? "" : "public "; - sb.append(" " + isPublic + staticValue + "function get " + getQualifiedName() + "():" + toReturnString() + ";\n"); - sb.append(" " + isPublic + staticValue + "function set " + getQualifiedName() + "(" + toPrameterString() + "):void" + ";\n"); + sb.append(" " + isPublic + staticValue + "function get " + + getQualifiedName() + "():" + toReturnString() + ";\n"); + sb.append(" " + isPublic + staticValue + "function set " + + getQualifiedName() + "(" + toPrameterString() + "):void" + + ";\n"); } private void printVar(StringBuilder sb) @@ -96,11 +101,14 @@ public class FieldReference extends MemberReference if (type.indexOf("|") != -1 || type.indexOf("?") != -1) type = "*"; - sb.append(" public " + staticValue + "var " + getQualifiedName() + ":" + type + ";\n"); + sb.append(" public " + staticValue + "var " + getQualifiedName() + + ":" + type + ";\n"); } private String toTypeString() { + if (overrideStringType != null) + return overrideStringType; return JSTypeUtils.toFieldString(this); } @@ -111,7 +119,8 @@ public class FieldReference extends MemberReference private String toPrameterString() { - return FunctionUtils.toParameter(this, getComment(), "value", getComment().getType()); + return FunctionUtils.toParameter(this, getComment(), "value", + getComment().getType()); } @Override @@ -130,7 +139,8 @@ public class FieldReference extends MemberReference { sb.append(" * @see JSType - "); sb.append("["); - sb.append(type.evaluate(null, getModel().getCompiler().getTypeRegistry()).toAnnotationString()); + sb.append(type.evaluate(null, + getModel().getCompiler().getTypeRegistry()).toAnnotationString()); sb.append("] "); String description = getComment().getReturnDescription(); if (description != null) @@ -139,4 +149,9 @@ public class FieldReference extends MemberReference } } + + public void setOverrideStringType(String overrideStringType) + { + this.overrideStringType = overrideStringType; + } } http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/2c827a2a/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 155bb45..0103a31 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 @@ -54,7 +54,8 @@ public class MethodReference extends MemberReference this.isStatic = isStatic; } - public MethodReference(ReferenceModel model, ClassReference classReference, Node node, String name, JSDocInfo comment, boolean isStatic) + public MethodReference(ReferenceModel model, ClassReference classReference, + Node node, String name, JSDocInfo comment, boolean isStatic) { super(model, classReference, node, name, comment); this.isStatic = isStatic; @@ -63,7 +64,7 @@ public class MethodReference extends MemberReference { this.paramNode = node.getChildAtIndex(1); } - else + else if (node.getLastChild().isFunction()) { this.paramNode = node.getLastChild().getChildAtIndex(1); } @@ -162,7 +163,8 @@ public class MethodReference extends MemberReference private String toPrameterString() { - return FunctionUtils.toPrameterString(getContext(), getComment(), paramNode); + return FunctionUtils.toPrameterString(getContext(), getComment(), + paramNode); } public boolean isOverride()
