playerglobal-source-gen: special case for d...rest that isn't in docs
diff --git a/playerglobal-source-gen/src/main/java/org/apache/royale/playerglobal/PlayerglobalSourceGen.java b/playerglobal-source-gen/src/main/java/org/apache/royale/playerglobal/PlayerglobalSourceGen.java
index b24a11d..0dca4f1 100644
--- a/playerglobal-source-gen/src/main/java/org/apache/royale/playerglobal/PlayerglobalSourceGen.java
+++ b/playerglobal-source-gen/src/main/java/org/apache/royale/playerglobal/PlayerglobalSourceGen.java
@@ -25,8 +25,10 @@
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import org.apache.commons.io.FileUtils;
@@ -72,10 +74,24 @@
"propertyIsEnumerable", "setPropertyIsEnumerable", "toString", "toLocaleString", "valueOf");
private static final List<String> ANY_CONSTRUCTORS = Arrays.asList("Boolean", "Date", "int", "Number", "RegExp",
"String", "uint", "XML", "XMLList");
- private static final List<String> XML_ANY_METHODS = Arrays.asList("addNamespace", "appendChild", "attribute",
+ private static final Map<String, List<String>> REST_METHODS = new HashMap<String, List<String>>();
+ {
+ REST_METHODS.put("Vector$object", Arrays.asList("sort"));
+ REST_METHODS.put("Vector$double", Arrays.asList("sort"));
+ REST_METHODS.put("Vector$int", Arrays.asList("sort"));
+ REST_METHODS.put("Vector$uint", Arrays.asList("sort"));
+ }
+ private static final Map<String, List<String>> ANY_METHODS = new HashMap<String, List<String>>();
+ {
+ REST_METHODS.put("XML", Arrays.asList("addNamespace", "appendChild", "attribute",
"child", "contains", "descendants", "elements", "insertChildAfter", "insertChildBefore", "namespace",
"prependChild", "processingInstructions", "removeNamespace", "replace", "setChildren", "setName",
- "setNamespace");
+ "setNamespace"));
+ REST_METHODS.put("XMLList", Arrays.asList("addNamespace", "appendChild", "attribute",
+ "child", "contains", "descendants", "elements", "insertChildAfter", "insertChildBefore", "namespace",
+ "prependChild", "processingInstructions", "removeNamespace", "replace", "setChildren", "setName",
+ "setNamespace"));
+ }
private File sourceFolder;
private File targetFolder;
@@ -975,18 +991,26 @@
return ANY_CONSTRUCTORS.contains(contextFunctionName);
}
- private boolean isXMLMethodThatNeedsParamsTypedAsAny(String contextClassName, String contextFunctionName) {
- if (!"XML".equals(contextClassName) && !"XMLList".equals(contextClassName)) {
+ private boolean isMethodThatNeedsParamsTypedAsAny(String contextClassName, String contextFunctionName) {
+ if(!ANY_METHODS.containsKey(contextClassName)) {
return false;
}
- return XML_ANY_METHODS.contains(contextFunctionName);
+ return ANY_METHODS.get(contextClassName).contains(contextFunctionName);
+ }
+
+ private boolean isMethodThatNeedsRestParamOnly(String contextClassName, String contextFunctionName) {
+ if(!REST_METHODS.containsKey(contextClassName)) {
+ return false;
+ }
+ return REST_METHODS.get(contextClassName).contains(contextFunctionName);
}
private void parseParameters(List<Element> apiParamElements, String contextClassName, String contextFunctionName,
StringBuilder functionBuilder) throws Exception {
boolean forceOptionalConstructor = isConstructorThatNeedsParamsTypedAsAny(contextClassName,
contextFunctionName);
- boolean forceAnyType = isXMLMethodThatNeedsParamsTypedAsAny(contextClassName, contextFunctionName);
+ boolean forceRest = isMethodThatNeedsRestParamOnly(contextClassName, contextFunctionName);
+ boolean forceAnyType = isMethodThatNeedsParamsTypedAsAny(contextClassName, contextFunctionName);
for (int i = 0; i < apiParamElements.size(); i++) {
if (i > 0) {
functionBuilder.append(", ");
@@ -994,37 +1018,43 @@
Element apiParamElement = apiParamElements.get(i);
Element apiTypeElement = apiParamElement.element("apiType");
String paramType = null;
- if (apiTypeElement != null) {
- String apiTypeValue = apiTypeElement.attributeValue("value");
- if ("restParam".equals(apiTypeValue)) {
- functionBuilder.append("...");
- }
- paramType = parseReturnOrParamType(apiTypeElement, contextClassName);
+ if(forceRest) {
+ functionBuilder.append("...args");
+ break;
}
- Element apiItemNameElement = apiParamElement.element("apiItemName");
- if (apiItemNameElement == null) {
- throw new Exception("apiItemName not found");
- }
- functionBuilder.append(apiItemNameElement.getTextTrim());
- if (forceOptionalConstructor) {
- //workaround for missing data in asdoc dita
- functionBuilder.append(":* = null");
- } else {
- Element apiOperationClassifierElement = apiParamElement.element("apiOperationClassifier");
- if (apiOperationClassifierElement != null) {
- paramType = apiOperationClassifierElement.getTextTrim();
- paramType = paramType.replace(":", ".");
+ else {
+ if (apiTypeElement != null) {
+ String apiTypeValue = apiTypeElement.attributeValue("value");
+ if ("restParam".equals(apiTypeValue)) {
+ functionBuilder.append("...");
+ }
+ paramType = parseReturnOrParamType(apiTypeElement, contextClassName);
}
- if (forceAnyType) {
- paramType = "*";
+ Element apiItemNameElement = apiParamElement.element("apiItemName");
+ if (apiItemNameElement == null) {
+ throw new Exception("apiItemName not found");
}
- if (paramType != null) {
- functionBuilder.append(":");
- functionBuilder.append(paramType);
- }
- Element apiDataElement = apiParamElement.element("apiData");
- if (apiDataElement != null) {
- writeVariableOrParameterValue(apiDataElement, paramType, functionBuilder);
+ functionBuilder.append(apiItemNameElement.getTextTrim());
+ if (forceOptionalConstructor) {
+ //workaround for missing data in asdoc dita
+ functionBuilder.append(":* = null");
+ } else {
+ Element apiOperationClassifierElement = apiParamElement.element("apiOperationClassifier");
+ if (apiOperationClassifierElement != null) {
+ paramType = apiOperationClassifierElement.getTextTrim();
+ paramType = paramType.replace(":", ".");
+ }
+ if (forceAnyType) {
+ paramType = "*";
+ }
+ if (paramType != null) {
+ functionBuilder.append(":");
+ functionBuilder.append(paramType);
+ }
+ Element apiDataElement = apiParamElement.element("apiData");
+ if (apiDataElement != null) {
+ writeVariableOrParameterValue(apiDataElement, paramType, functionBuilder);
+ }
}
}
}