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