fix up externs output
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/808fd160 Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/808fd160 Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/808fd160 Branch: refs/heads/develop Commit: 808fd1601a0228883b06d061d0f6bd101888284e Parents: a3f2b1f Author: Alex Harui <[email protected]> Authored: Wed Dec 9 13:34:47 2015 -0800 Committer: Alex Harui <[email protected]> Committed: Wed Dec 9 13:34:47 2015 -0800 ---------------------------------------------------------------------- .../externals/reference/BaseReference.java | 16 +++++++- .../externals/reference/ClassReference.java | 40 ++++++++++++-------- .../externals/reference/FieldReference.java | 2 +- .../codegen/externals/utils/FunctionUtils.java | 4 +- 4 files changed, 43 insertions(+), 19 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/808fd160/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/reference/BaseReference.java ---------------------------------------------------------------------- diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/reference/BaseReference.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/reference/BaseReference.java index 60191ff..aaf5479 100644 --- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/reference/BaseReference.java +++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/reference/BaseReference.java @@ -198,6 +198,15 @@ public abstract class BaseReference emitReturns(sb); } + protected String mapBackToJS(String t) + { + if (t.contains("String")) return t.replace("String", "string"); + if (t.contains("Number")) return t.replace("Number", "number"); + if (t.contains("Boolean")) return t.replace("Boolean", "boolean"); + if (t.contains("object")) return t.replace("object", "Object"); + return t; + } + protected void emitParams(StringBuilder sb) { Set<String> parameterNames = getComment().getParameterNames(); @@ -212,7 +221,7 @@ public abstract class BaseReference if (outputJS && parameterType != null) { sb.append("{"); - sb.append(getModel().evaluate(parameterType).toAnnotationString()); + sb.append(mapBackToJS(getModel().evaluate(parameterType).toAnnotationString())); sb.append("}"); sb.append(" "); } @@ -243,7 +252,10 @@ public abstract class BaseReference sb.append(indent); sb.append(" * @returns "); sb.append("{"); - sb.append(getModel().evaluate(returnType).toAnnotationString()); + if (outputJS) + sb.append(mapBackToJS(getModel().evaluate(returnType).toAnnotationString())); + else + sb.append(getModel().evaluate(returnType).toAnnotationString()); sb.append("} "); String description = getComment().getReturnDescription(); if (description != null) http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/808fd160/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 659180d..b3aa35b 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 @@ -288,6 +288,8 @@ public class ClassReference extends BaseReference } + private static List<String> definedPackages = new ArrayList<String>(); + @Override public void emit(StringBuilder sb) { @@ -300,21 +302,25 @@ public class ClassReference extends BaseReference sb.append("/** @fileoverview Auto-generated Externs files\n * @externs\n */\n"); if (!packageName.isEmpty()) { - String[] pieces = packageName.split("\\."); - String chain = ""; - int n = pieces.length; - for (int i = 0; i < n - 1; i++) - { - String piece = pieces[i]; - sb.append("\n"); - sb.append("\n"); - sb.append("/** @const */\n"); - if (chain.isEmpty()) - sb.append("var " + piece + " = {};\n"); - else - sb.append(chain + "." + piece + " = {}\n"); - chain = chain + "." + piece; - } + if (!definedPackages.contains(packageName)) + { + definedPackages.add(packageName); + String[] pieces = packageName.split("\\."); + String chain = ""; + int n = pieces.length; + for (int i = 0; i < n; i++) + { + String piece = pieces[i]; + sb.append("\n"); + sb.append("\n"); + sb.append("/**\n * @const\n * @suppress {duplicate|const} */\n"); + if (chain.isEmpty()) + sb.append("var " + piece + " = {};\n\n\n"); + else + sb.append(chain + "." + piece + " = {}\n\n\n"); + chain = chain + "." + piece; + } + } } } else @@ -698,6 +704,10 @@ public class ClassReference extends BaseReference protected void emitCommentBody(StringBuilder sb) { super.emitCommentBody(sb); + if (isInterface()) + sb.append(" * @interface\n"); + else + sb.append(" * @constructor "); if (getComment().hasBaseType()) { emitSuperClass(sb); http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/808fd160/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 4ded9de..226cb19 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 @@ -242,7 +242,7 @@ public class FieldReference extends MemberReference sb.append(indent); sb.append(" * @type "); sb.append("{"); - sb.append(getModel().evaluate(type).toAnnotationString()); + sb.append(mapBackToJS(getModel().evaluate(type).toAnnotationString())); sb.append("} "); sb.append("\n"); } http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/808fd160/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 4b2885b..d516b1c 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 @@ -164,7 +164,9 @@ public class FunctionUtils if (parameterType == null) { System.out.println("no parameter type for " + paramName + " " + reference.getQualifiedName()); - paramType = "Object"; + paramType = "Object"; + if (outputJS) + sb.append(paramName); } else if (parameterType.isVarArgs()) {
