You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by jo...@apache.org on 2019/08/06 19:02:57 UTC

[royale-compiler] branch develop updated: FieldEmitter: in addition to analyzing function calls for static dependencies, also analyzes constructors that are called

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


The following commit(s) were added to refs/heads/develop by this push:
     new fd9e237  FieldEmitter: in addition to analyzing function calls for static dependencies, also analyzes constructors that are called
fd9e237 is described below

commit fd9e23730b4b6db512dc781b9dbbf644dc123e79
Author: Josh Tynjala <jo...@apache.org>
AuthorDate: Tue Aug 6 12:02:48 2019 -0700

    FieldEmitter: in addition to analyzing function calls for static dependencies, also analyzes constructors that are called
---
 .../internal/codegen/js/jx/FieldEmitter.java       | 23 +++++++++++++++++++---
 1 file changed, 20 insertions(+), 3 deletions(-)

diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/FieldEmitter.java b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/FieldEmitter.java
index 85a9c06..784c9c5 100644
--- a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/FieldEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/FieldEmitter.java
@@ -25,7 +25,9 @@ import org.apache.royale.compiler.codegen.js.goog.IJSGoogDocEmitter;
 import org.apache.royale.compiler.common.ASModifier;
 import org.apache.royale.compiler.common.ModifiersSet;
 import org.apache.royale.compiler.constants.IASKeywordConstants;
+import org.apache.royale.compiler.definitions.IClassDefinition;
 import org.apache.royale.compiler.definitions.IDefinition;
+import org.apache.royale.compiler.definitions.IFunctionDefinition;
 import org.apache.royale.compiler.definitions.IVariableDefinition;
 import org.apache.royale.compiler.internal.codegen.as.ASEmitterTokens;
 import org.apache.royale.compiler.internal.codegen.js.JSEmitterTokens;
@@ -126,12 +128,12 @@ public class FieldEmitter extends JSSubEmitter implements
             String vnodeString = getEmitter().stringifyNode(vnode);
             if (ndef.isStatic() && vnode instanceof FunctionCallNode)
             {
-            	FunctionCallNode fcn = (FunctionCallNode)vnode;
+                FunctionCallNode fcn = (FunctionCallNode)vnode;
             	if (fcn.getNameNode() instanceof IdentifierNode)
             	{
+            		IDefinition d = fcn.getNameNode().resolve(getProject());
             		// assume this is a call to static method in the class
             		// otherwise it would be a memberaccessexpression?
-            		IDefinition d = (IDefinition)fcn.getNameNode().resolve(getProject());
             		if (d instanceof FunctionDefinition)
             		{
             			FunctionDefinition fd = (FunctionDefinition)d;
@@ -141,7 +143,22 @@ public class FieldEmitter extends JSSubEmitter implements
     	            		// re-emit it to collect static initializer class references in usedNames
     	            		getEmitter().stringifyNode(m);
                 		}
-            		}
+                    }
+                    //it could also be a constructor
+                    else if (d instanceof IClassDefinition)
+                    {
+                        IClassDefinition classDef = (IClassDefinition) d;
+                        IFunctionDefinition constructorDef = classDef.getConstructor();
+                        if (constructorDef != null)
+                        {
+                            IASNode m = constructorDef.getNode();
+                            if (m != null)
+                            {
+                                // re-emit it to collect static initializer class references in usedNames
+                                getEmitter().stringifyNode(m);
+                            }
+                        }
+                    }
             	}
             }
         	getModel().inStaticInitializer = false;