You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by cd...@apache.org on 2016/04/21 13:35:36 UTC

[06/19] git commit: [flex-falcon] [refs/heads/feature/maven-migration-test] - externc: add ability to handle methods declared without = function() by detecting if param or returns JSDoc is present

externc: add ability to handle methods declared without = function() by detecting if param or returns JSDoc is present


Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/4ed67a8f
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/4ed67a8f
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/4ed67a8f

Branch: refs/heads/feature/maven-migration-test
Commit: 4ed67a8fed775a92d0d7dcd998aabbb2f7fd10fd
Parents: e6409b2
Author: Josh Tynjala <jo...@apache.org>
Authored: Tue Apr 19 16:06:22 2016 -0700
Committer: Josh Tynjala <jo...@apache.org>
Committed: Tue Apr 19 16:06:22 2016 -0700

----------------------------------------------------------------------
 .../codegen/externals/pass/AddMemberPass.java   | 43 +++++++++++++++++++-
 .../externals/reference/MethodReference.java    | 33 ++++++++++++++-
 .../externals/reference/ParameterReference.java |  6 +++
 .../codegen/externals/utils/FunctionUtils.java  |  2 +-
 4 files changed, 81 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/4ed67a8f/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 8379af9..9308ff0 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
@@ -23,6 +23,7 @@ import org.apache.flex.compiler.internal.codegen.externals.reference.ReferenceMo
 
 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 AddMemberPass extends AbstractCompilerPass
@@ -80,7 +81,19 @@ public class AddMemberPass extends AbstractCompilerPass
                 }
                 else if (first.isGetProp())
                 {
-                    visitGetProp(t, first);
+                    JSDocInfo jsDocInfo = first.getJSDocInfo();
+                    if (jsDocInfo != null
+                        && (jsDocInfo.getParameterCount() > 0
+                            || jsDocInfo.getReturnType() != null))
+                    {
+                        // instance or static method that isn't declared as a
+                        // function, but has @param or @returns
+                        visitMethodFromJSDoc(t, first);
+                    }
+                    else
+                    {
+                        visitGetProp(t, first);
+                    }
                 }
             }
         }
@@ -119,6 +132,34 @@ public class AddMemberPass extends AbstractCompilerPass
             log(n);
         }
     }
+    private void visitMethodFromJSDoc(NodeTraversal t, Node n)
+    {
+        String qName = n.getQualifiedName();
+
+        if (n.isGetProp())
+        {
+            int protoType = qName.indexOf(".prototype.");
+            if (protoType != -1)
+            {
+                String className = qName.substring(0, protoType);
+                String memberName = qName.substring(protoType + 11,
+                        qName.length());
+                model.addMethod(n, className, memberName);
+            }
+            else
+            {
+                String className = qName.substring(0, qName.lastIndexOf("."));
+                String memberName = qName.substring(qName.lastIndexOf(".") + 1,
+                        qName.length());
+                model.addStaticMethod(n, className, memberName);
+            }
+        }
+        else if (n.isName())
+        {
+            err("visitMethod() non impl");
+            log(n);
+        }
+    }
 
     private void visitGetProp(NodeTraversal t, Node n)
     {

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/4ed67a8f/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 96aa9f2..6cfbadf 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
@@ -28,6 +28,7 @@ import org.apache.flex.compiler.internal.codegen.externals.utils.FunctionUtils;
 
 import com.google.common.collect.Lists;
 import com.google.javascript.rhino.JSDocInfo;
+import com.google.javascript.rhino.JSTypeExpression;
 import com.google.javascript.rhino.Node;
 import com.google.javascript.rhino.jstype.JSType;
 
@@ -122,6 +123,20 @@ public class MethodReference extends MemberReference
                 parameters.add(parameterReference);
             }
         }
+        else if(comment.getParameterCount() > 0 || comment.getReturnType() != null)
+        {
+            for (int i = 0; i < comment.getParameterCount(); i++)
+            {
+                String parameterName = comment.getParameterNameAt(i);
+                String qualifiedName = FunctionUtils.toParameterType(this, parameterName);
+                ParameterReference parameterReference = new ParameterReference(getModel(), parameterName, qualifiedName);
+                parameters.add(parameterReference);
+            }
+        }
+        else
+        {
+            System.out.println(getQualifiedName() + " parameters not found! " + " " + comment.getParameterCount());
+        }
     }
 
     @Override
@@ -300,7 +315,23 @@ public class MethodReference extends MemberReference
 
     private String toParameterString()
     {
-        return FunctionUtils.toParameterString(getContext(), getContext().getComment(), paramNode, outputJS);
+        if (paramNode != null)
+        {
+            return FunctionUtils.toParameterString(getContext(), getContext().getComment(), paramNode, outputJS);
+        }
+        StringBuilder sb = new StringBuilder();
+        sb.append("(");
+        int len = comment.getParameterCount();
+        for (int i = 0; i < len; i++)
+        {
+            String parameterName = comment.getParameterNameAt(i);
+            JSTypeExpression parameterType = comment.getParameterType(i);
+            sb.append(FunctionUtils.toParameter(getContext(), comment, parameterName, parameterType, outputJS));
+            if (i < len - 1)
+                sb.append(", ");
+        }
+        sb.append(")");
+        return sb.toString();
     }
 
     public boolean isOverride()

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/4ed67a8f/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/reference/ParameterReference.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/reference/ParameterReference.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/reference/ParameterReference.java
index 4823873..30d7c15 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/reference/ParameterReference.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/externals/reference/ParameterReference.java
@@ -35,6 +35,12 @@ public class ParameterReference extends BaseReference
         name = node.getString();
     }
 
+    public ParameterReference(final ReferenceModel model, final String name, final String qualifiedName)
+    {
+        super(model, null, qualifiedName, null);
+        this.name = name;
+    }
+
     public ParameterReference(final ReferenceModel model, final Node parameterNode)
     {
         this(model, parameterNode, "Object");

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/4ed67a8f/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 473e42c..f384689 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
@@ -154,7 +154,7 @@ public class FunctionUtils
         return canImport;
     }
 
-    private static String toParameter(BaseReference reference, JSDocInfo comment, String paramName,
+    public static String toParameter(BaseReference reference, JSDocInfo comment, String paramName,
             JSTypeExpression parameterType, boolean outputJS)
     {
         final StringBuilder sb = new StringBuilder();