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())
         {

Reply via email to