This is an automated email from the ASF dual-hosted git repository.

joshtynjala pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-compiler.git

commit aa3264a32a43937aae333b9d1c2f1f853d1ad293
Author: Josh Tynjala <[email protected]>
AuthorDate: Tue Mar 16 10:47:08 2021 -0700

    playerglobalc: member variables that should be typed as any
---
 .../royale/compiler/clients/PLAYERGLOBALC.java     | 42 +++++++++++++++++-----
 1 file changed, 33 insertions(+), 9 deletions(-)

diff --git 
a/compiler-playerglobalc/src/main/java/org/apache/royale/compiler/clients/PLAYERGLOBALC.java
 
b/compiler-playerglobalc/src/main/java/org/apache/royale/compiler/clients/PLAYERGLOBALC.java
index af7fdc5..dd9ae50 100644
--- 
a/compiler-playerglobalc/src/main/java/org/apache/royale/compiler/clients/PLAYERGLOBALC.java
+++ 
b/compiler-playerglobalc/src/main/java/org/apache/royale/compiler/clients/PLAYERGLOBALC.java
@@ -100,6 +100,10 @@ class PLAYERGLOBALC implements FlexTool {
                                "descendants", "elements", "insertChildAfter", 
"insertChildBefore", "namespace", "prependChild",
                                "processingInstructions", "removeNamespace", 
"replace", "setChildren", "setName", "setNamespace"));
        }
+       private static final Map<String, List<String>> ANY_VARIABLES = new 
HashMap<String, List<String>>();
+       {
+               ANY_VARIABLES.put("Object", Arrays.asList("constructor"));
+       }
        private static final Map<String, List<String>> EXTRA_MEMBERS = new 
HashMap<String, List<String>>();
        {
                EXTRA_MEMBERS.put("flash.display.Graphics", Arrays.asList(
@@ -444,7 +448,7 @@ class PLAYERGLOBALC implements FlexTool {
                        parseFunction(apiOperationElement, fullyQualifiedName, 
false, classBuilder);
                }
                for (Element apiValueElement : apiValueElements) {
-                       parseVariable(apiValueElement, false, false, 
classBuilder);
+                       parseVariable(apiValueElement, fullyQualifiedName, 
false, classBuilder);
                }
                if (EXTRA_MEMBERS.containsKey(fullyQualifiedName)) {
                        for (String member : 
EXTRA_MEMBERS.get(fullyQualifiedName)) {
@@ -549,7 +553,7 @@ class PLAYERGLOBALC implements FlexTool {
                        parseFunction(apiOperationElement, null, true, 
interfaceBuilder);
                }
                for (Element apiValueElement : apiValueElements) {
-                       parseVariable(apiValueElement, true, false, 
interfaceBuilder);
+                       parseVariable(apiValueElement, fullyQualifiedName, 
true, interfaceBuilder);
                }
                interfaceBuilder.append("\t");
                interfaceBuilder.append("}");
@@ -647,14 +651,14 @@ class PLAYERGLOBALC implements FlexTool {
                variableBuilder.append("{");
                variableBuilder.append("\n");
                writeImports(importFullyQualifiedNames, variableBuilder);
-               parseVariable(apiValueElement, false, true, variableBuilder);
+               parseVariable(apiValueElement, null, false, variableBuilder);
                variableBuilder.append("}");
                variableBuilder.append("\n");
 
                writeFileForDefinition(fullyQualifiedName, isAIROnly, 
variableBuilder.toString());
        }
 
-       private void parseVariable(Element apiValueElement, boolean 
forInterface, boolean isInPackage,
+       private void parseVariable(Element apiValueElement, String 
contextClassName, boolean forInterface,
                        StringBuilder variableBuilder) throws Exception {
                boolean isAIROnly = 
isAIROnly(apiValueElement.element("prolog"));
                if (isAIROnly && !configuration.getAir()) {
@@ -669,6 +673,7 @@ class PLAYERGLOBALC implements FlexTool {
                boolean isStatic = false;
                boolean isOverride = false;
                String variableType = "*";
+               boolean forceAnyType = isVariableTypedAsAny(contextClassName, 
variableName);
                String access = null;
 
                Element apiValueDetailElement = 
apiValueElement.element("apiValueDetail");
@@ -743,7 +748,11 @@ class PLAYERGLOBALC implements FlexTool {
                        variableBuilder.append("(");
                        variableBuilder.append(")");
                        variableBuilder.append(":");
-                       variableBuilder.append(variableType);
+                       if (forceAnyType) {
+                               variableBuilder.append("*");
+                       } else {
+                               variableBuilder.append(variableType);
+                       }
                        variableBuilder.append(";");
                        variableBuilder.append("\n");
                }
@@ -769,7 +778,11 @@ class PLAYERGLOBALC implements FlexTool {
                        variableBuilder.append("(");
                        variableBuilder.append("value");
                        variableBuilder.append(":");
-                       variableBuilder.append(variableType);
+                       if (forceAnyType) {
+                               variableBuilder.append("*");
+                       } else {
+                               variableBuilder.append(variableType);
+                       }
                        variableBuilder.append(")");
                        variableBuilder.append(":");
                        variableBuilder.append("void");
@@ -786,15 +799,19 @@ class PLAYERGLOBALC implements FlexTool {
                        if (isStatic) {
                                variableBuilder.append("static ");
                        }
-                       if (isConst || (isInPackage && 
GLOBAL_CONSTANTS.containsKey(variableName))) {
+                       if (isConst || (contextClassName == null && 
GLOBAL_CONSTANTS.containsKey(variableName))) {
                                variableBuilder.append("const ");
                        } else {
                                variableBuilder.append("var ");
                        }
                        variableBuilder.append(variableName);
                        variableBuilder.append(":");
-                       variableBuilder.append(variableType);
-                       if (isInPackage && 
GLOBAL_CONSTANTS.containsKey(variableName)) {
+                       if (forceAnyType) {
+                               variableBuilder.append("*");
+                       } else {
+                               variableBuilder.append(variableType);
+                       }
+                       if (contextClassName == null && 
GLOBAL_CONSTANTS.containsKey(variableName)) {
                                variableBuilder.append(" = ");
                                
variableBuilder.append(GLOBAL_CONSTANTS.get(variableName));
                        } else if (apiDataElement != null) {
@@ -1126,6 +1143,13 @@ class PLAYERGLOBALC implements FlexTool {
                return 
REST_METHODS.get(contextClassName).contains(contextFunctionName);
        }
 
+       private boolean isVariableTypedAsAny(String contextClassName, String 
contextVariableName) {
+               if (!ANY_VARIABLES.containsKey(contextClassName)) {
+                       return false;
+               }
+               return 
ANY_VARIABLES.get(contextClassName).contains(contextVariableName);
+       }
+
        private void parseParameters(List<Element> apiParamElements, String 
contextClassName, String contextFunctionName,
                        StringBuilder functionBuilder) throws Exception {
                boolean forceOptionalConstructor = 
isConstructorThatNeedsParamsTypedAsAny(contextClassName,

Reply via email to