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 1711895  prevent-rename-mxml-symbol-references
1711895 is described below

commit 1711895d0ac9f863230c323af165e43bd630c1d4
Author: Josh Tynjala <[email protected]>
AuthorDate: Wed May 5 13:38:04 2021 -0700

    prevent-rename-mxml-symbol-references
---
 .../jscomp/FindRoyaleMXMLPropertyNamesToKeep.java  | 384 +++++++++++++++++++++
 .../javascript/jscomp/RoyaleClosurePassConfig.java |  34 +-
 .../codegen/mxml/royale/MXMLRoyaleEmitter.java     |   6 +-
 .../codegen/mxml/royale/MXMLRoyalePublisher.java   |   1 +
 .../driver/js/goog/JSGoogConfiguration.java        |  19 +
 .../compiler/utils/JSClosureCompilerWrapper.java   |   9 +-
 .../junitvmwatcher4026980527665481323.properties   |   1 +
 .../resources/royale/files/MyInitialView_result.js |   6 +-
 8 files changed, 449 insertions(+), 11 deletions(-)

diff --git 
a/compiler-jx/src/main/java/com/google/javascript/jscomp/FindRoyaleMXMLPropertyNamesToKeep.java
 
b/compiler-jx/src/main/java/com/google/javascript/jscomp/FindRoyaleMXMLPropertyNamesToKeep.java
new file mode 100644
index 0000000..6b1a63d
--- /dev/null
+++ 
b/compiler-jx/src/main/java/com/google/javascript/jscomp/FindRoyaleMXMLPropertyNamesToKeep.java
@@ -0,0 +1,384 @@
+/*
+ * Copyright 2008 The Closure Compiler Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.google.javascript.jscomp;
+
+import java.util.Set;
+
+import com.google.javascript.jscomp.NodeTraversal.AbstractPostOrderCallback;
+import com.google.javascript.rhino.Node;
+
+import org.apache.royale.compiler.mxml.IMXMLLanguageConstants;
+
+public class FindRoyaleMXMLPropertyNamesToKeep extends 
AbstractPostOrderCallback {
+
+       private final AbstractCompiler compiler;
+       private Set<String> propertyNamesToKeep;
+
+       public FindRoyaleMXMLPropertyNamesToKeep(AbstractCompiler compiler) {
+         this.compiler = compiler;
+       }
+
+       public void process(Node externs, Node root, Set<String> 
propertyNamesToKeep) {
+               this.propertyNamesToKeep = propertyNamesToKeep;
+               NodeTraversal.traverse(compiler, root, this);
+       }
+
+       @Override
+       public void visit(NodeTraversal t, Node n, Node parent) {
+               checkForGenerateMXMLAttributes(t, n, parent);
+               checkForMXMLDescriptor(t, n, parent);
+               checkForBindings(t, n, parent);
+       }
+
+       private void checkForMXMLDescriptor(NodeTraversal t, Node n, Node 
parent) {
+               if(!n.isArrayLit()) {
+                       return;
+               }
+
+               if(parent == null || !parent.isName()) {
+                       return;
+               }
+
+               if(!"mxmldd".equals(parent.getQualifiedName())) {
+                       return;
+               }
+
+               Node mxmlDescriptorNode = null;
+               if(parent.getGrandparent() != null
+                               && parent.getGrandparent().getGrandparent() != 
null
+                               && 
parent.getGrandparent().getGrandparent().getGrandparent() != null) {
+                       mxmlDescriptorNode = 
parent.getGrandparent().getGrandparent().getGrandparent().getGrandparent();
+               }
+               if(mxmlDescriptorNode == null || 
!mxmlDescriptorNode.isStringKey() || mxmlDescriptorNode.getChildCount() == 0) {
+                       return;
+               }
+               if(!"MXMLDescriptor".equals(mxmlDescriptorNode.getString())) {
+                       return;
+               }
+               Node descriptorParent = mxmlDescriptorNode.getParent();
+               if(descriptorParent == null || !descriptorParent.isObjectLit()) 
{
+                       return;
+               }
+               Node descriptorGP = mxmlDescriptorNode.getGrandparent();
+               if(descriptorGP == null) {
+                       return;
+               }
+               if(descriptorGP.getIndexOfChild(descriptorParent) != 2) {
+                       return;
+               }
+               Node prototype = descriptorGP.getChildBefore(descriptorParent);
+               String qualifiedName = prototype.getQualifiedName();
+               if(!qualifiedName.endsWith(".prototype")) {
+                       return;
+               }
+               qualifiedName = qualifiedName.substring(0, 
qualifiedName.length() - 10);
+               Node defineProps = descriptorGP.getChildBefore(prototype);
+               
if(!"Object.defineProperties".equals(defineProps.getQualifiedName())) {
+                       return;
+               }
+               traverseMXMLAttributes(n, null);
+       }
+
+       private void checkForGenerateMXMLAttributes(NodeTraversal t, Node n, 
Node parent) {
+               if(!n.isGetProp()) {
+                       return;
+               }
+               if(parent == null || !parent.isCall()) {
+                       return;
+               }
+               if(!"this.generateMXMLAttributes".equals(n.getQualifiedName())) 
{
+                       return;
+               }
+               if(parent.getChildCount() != 2) {
+                       return;
+               }
+               Node arrayArg = parent.getChildAtIndex(1);
+               if(!arrayArg.isArrayLit()) {
+                       return;
+               }
+               if(arrayArg.getChildCount() == 0) {
+                       return;
+               }
+
+               Node functionNode = null;
+               if(parent.getGrandparent() != null) {
+                       functionNode = parent.getGrandparent().getParent();
+               }
+               if(functionNode == null) {
+                       return;
+               }
+               if(!functionNode.isFunction()) {
+                       return;
+               }
+               String constructorName = functionNode.getOriginalName();
+               traverseMXMLAttributes(arrayArg, constructorName);
+       }
+
+       private void traverseMXMLAttributes(Node arrayArg, String 
qualifiedName) {
+               if(arrayArg.getChildCount() == 0) {
+                       return;
+               }
+               boolean alreadyHadQualifiedName = qualifiedName != null;
+               int i = 0;
+               while(i < arrayArg.getChildCount()) {
+                       if(qualifiedName == null) {
+                               Node nameChild = arrayArg.getChildAtIndex(i);
+                               i++;
+                               if(!nameChild.isGetProp() && 
!nameChild.isName()) {
+                                       throwParseException(nameChild);
+                               }
+                               qualifiedName = nameChild.getQualifiedName();
+                       }
+                       Node numPropsChild = arrayArg.getChildAtIndex(i);
+                       i++;
+                       if(!numPropsChild.isNumber()) {
+                               throwParseException(numPropsChild);
+                       }
+                       int numProps = (int) numPropsChild.getDouble();
+                       int minNumPropsChildren = i + numProps * 3;
+                       if(arrayArg.getChildCount() < minNumPropsChildren) {
+                               throwParseException(arrayArg);
+                       }
+                       while(i < minNumPropsChildren) {
+                               Node nameNode = arrayArg.getChildAtIndex(i);
+                               i++;
+                               if (!nameNode.isString()) {
+                                       throwParseException(nameNode);
+                               }
+                               String propName = nameNode.getString();
+                               propertyNamesToKeep.add(propName);
+                               Node propTypeNode = arrayArg.getChildAtIndex(i);
+                               i++;
+                               
if((IMXMLLanguageConstants.ATTRIBUTE_ID.equals(propName) || 
"_id".equals(propName)) && propTypeNode.isTrue()) {
+                                       Node valueNode = 
arrayArg.getChildAtIndex(i);
+                                       if(valueNode.isString()) {
+                                               
propertyNamesToKeep.add(valueNode.getString());
+                                       }
+                               }
+                               if(!propTypeNode.isTrue()) {
+                                       Node valueNode = 
arrayArg.getChildAtIndex(i);
+                                       i++;
+                                       if(valueNode.isArrayLit()) {
+                                               
traverseMXMLAttributes(valueNode, null);
+                                       }
+                               }
+                               else {
+                                       i++; //skip value
+                               }
+                       }
+                       if(i >= arrayArg.getChildCount()) {
+                               throwParseException(arrayArg);
+                       }
+                       Node numStylesChild = arrayArg.getChildAtIndex(i);
+                       i++;
+                       if(!numStylesChild.isNumber()) {
+                               throwParseException(numStylesChild);
+                       }
+                       int numStyles = (int) numStylesChild.getDouble();
+                       if(numStyles != 0) {
+                               throwParseException(numStylesChild);
+                       }
+                       if(i >= arrayArg.getChildCount()) {
+                               throwParseException(arrayArg);
+                       }
+                       Node numEventsChild = arrayArg.getChildAtIndex(i);
+                       i++;
+                       if(!numEventsChild.isNumber()) {
+                               throwParseException(numEventsChild);
+                       }
+                       int numEvents = (int) numEventsChild.getDouble();
+                       i += numEvents * 2;
+                       if(!alreadyHadQualifiedName) {
+                               if(i >= arrayArg.getChildCount()) {
+                                       throwParseException(arrayArg);
+                               }
+                               Node childrenChild = 
arrayArg.getChildAtIndex(i);
+                               i++;
+                               if(!childrenChild.isNull() && 
!childrenChild.isArrayLit()) {
+                                       throwParseException(childrenChild);
+                               }
+                               if(childrenChild.isArrayLit()) {
+                                       traverseMXMLAttributes(childrenChild, 
null);
+                               }
+                               qualifiedName = null;
+                       }
+               }
+       }
+
+       private void traverseWatchers(Node n, int startIndex) {
+               if(n.isNull()) {
+                       //this is fine, just skip it
+                       return;
+               }
+               if(!n.isArrayLit()) {
+                       throwParseException(n);
+               }
+
+               int i = startIndex;
+               while(i < n.getChildCount()) {
+                       Node indexNode = n.getChildAtIndex(i);
+                       i++;
+                       if(indexNode.isNull()) {
+                               //this is the last child watcher
+                               return;
+                       }
+                       if(!indexNode.isNumber()) {
+                               throwParseException(indexNode);
+                       }
+                       Node watcherTypeNode = n.getChildAtIndex(i);
+                       i++;
+                       if(!watcherTypeNode.isNumber()) {
+                               throwParseException(watcherTypeNode);
+                       }
+                       int watcherType = (int) watcherTypeNode.getDouble();
+                       switch(watcherType) {
+                               case 0: { //function
+                                       Node nameNode = n.getChildAtIndex(i);
+                                       i++;
+                                       if(!nameNode.isString()) {
+                                               throwParseException(nameNode);
+                                       }
+                                       String propName = nameNode.getString();
+                                       propertyNamesToKeep.add(propName);
+                                       i++; //skip function
+                                       i++; //skip event names
+                                       i++; //skip binding indices
+                                       break;
+                               }
+                               case 1: { //static property
+                                       Node nameNode = n.getChildAtIndex(i);
+                                       i++;
+                                       if(!nameNode.isString()) {
+                                               throwParseException(nameNode);
+                                       }
+                                       String propName = nameNode.getString();
+                                       propertyNamesToKeep.add(propName);
+                                       i++; //skip event names
+                                       i++; //skip binding indices
+                                       i++; //skip property getter function
+                                       i++; //skip mname
+                                       break;
+                               }
+                               case 2: { //property
+                                       Node nameNode = n.getChildAtIndex(i);
+                                       i++;
+                                       if(!nameNode.isString()) {
+                                               throwParseException(nameNode);
+                                       }
+                                       String propName = nameNode.getString();
+                                       propertyNamesToKeep.add(propName);
+                                       i++; //skip event names
+                                       i++; //skip binding indices
+                                       i++; //skip property getter function
+                                       break;
+                               }
+                               case 3: { //xml
+                                       Node nameNode = n.getChildAtIndex(i);
+                                       i++;
+                                       if(!nameNode.isString()) {
+                                               throwParseException(nameNode);
+                                       }
+                                       String propName = nameNode.getString();
+                                       propertyNamesToKeep.add(propName);
+                                       i++; //skip binding indices\
+                               }
+                               default: { //unknown!
+                                       throwParseException(watcherTypeNode);
+                               }
+                       }
+                       Node watcherChildren = n.getChildAtIndex(i);
+                       i++;
+                       traverseWatchers(watcherChildren, 0);
+               }
+       }
+
+       private void throwParseException(Node unexpectedNode) {
+               throw new RuntimeException("Find MXML property names to keep 
parse failure: " + unexpectedNode);
+       }
+
+       private void checkForBindings(NodeTraversal t, Node n, Node parent) {
+               if(!n.isGetProp()) {
+                       return;
+               }
+               if(parent == null || !parent.isAssign() || 
parent.getChildCount() < 2) {
+                       return;
+               }
+               String qualifiedName = n.getQualifiedName();
+               if(qualifiedName == null) {
+                       return;
+               }
+               if(!qualifiedName.endsWith(".prototype._bindings")) {
+                       return;
+               }
+               Node bindingsNode = parent.getChildAtIndex(1);
+               if(!bindingsNode.isArrayLit()) {
+                       throwParseException(bindingsNode);
+               }
+               int i = 0;
+               Node firstChild = bindingsNode.getChildAtIndex(i);
+               if(firstChild.isGetProp()) {
+                       i++; //skip inherited bindings
+               }
+               Node numBindingsChild = bindingsNode.getChildAtIndex(i);
+               i++;
+               if(!numBindingsChild.isNumber()) {
+                       throwParseException(numBindingsChild);
+               }
+               int numBindings = (int) numBindingsChild.getDouble();
+               int minNumBindingsChildren = i + numBindings * 3;
+               if(bindingsNode.getChildCount() < minNumBindingsChildren) {
+                       throwParseException(bindingsNode);
+               }
+               while(i < minNumBindingsChildren) {
+                       Node sourceNode = bindingsNode.getChildAtIndex(i);
+                       i++;
+                       if(sourceNode.isString()) {
+                               String propName = sourceNode.getString();
+                               propertyNamesToKeep.add(propName);
+                       }
+                       else if(sourceNode.isArrayLit()) {
+                               for(int j = 0; j < sourceNode.getChildCount(); 
j++) {
+                                       Node child = 
sourceNode.getChildAtIndex(j);
+                                       if(child.isString()) {
+                                               String propName = 
child.getString();
+                                               if(!propName.contains(".")) {
+                                                       
propertyNamesToKeep.add(propName);
+                                               }
+                                       }
+                               }
+                       }
+                       i++; //skip event
+                       Node targetNode = bindingsNode.getChildAtIndex(i);
+                       i++;
+                       if(targetNode.isString()) {
+                               String propName = targetNode.getString();
+                               propertyNamesToKeep.add(propName);
+                       }
+                       else if(targetNode.isArrayLit()) {
+                               for(int j = 0; j < sourceNode.getChildCount(); 
j++) {
+                                       Node child = 
sourceNode.getChildAtIndex(j);
+                                       if(child.isString()) {
+                                               String propName = 
child.getString();
+                                               if(!propName.contains(".")) {
+                                                       
propertyNamesToKeep.add(propName);
+                                               }
+                                       }
+                               }
+                       }
+               }
+               traverseWatchers(bindingsNode, i);
+       }
+}
\ No newline at end of file
diff --git 
a/compiler-jx/src/main/java/com/google/javascript/jscomp/RoyaleClosurePassConfig.java
 
b/compiler-jx/src/main/java/com/google/javascript/jscomp/RoyaleClosurePassConfig.java
index 28281cb..fef8ed8 100644
--- 
a/compiler-jx/src/main/java/com/google/javascript/jscomp/RoyaleClosurePassConfig.java
+++ 
b/compiler-jx/src/main/java/com/google/javascript/jscomp/RoyaleClosurePassConfig.java
@@ -134,8 +134,12 @@ public final class RoyaleClosurePassConfig extends 
PassConfig {
   private Set<String> propertyNamesToKeep;
 
   private Set<String> extraSymbolNamesToExport;
+
+  private boolean preventRenameMxmlSymbolReferences;
   
-  public RoyaleClosurePassConfig(CompilerOptions options, String 
sourceFileName, File varRenameMapFile, Set<String> propertyNamesToKeep, 
Set<String> extraSymbolNamesToExport) {
+  public RoyaleClosurePassConfig(CompilerOptions options, String 
sourceFileName,
+      File varRenameMapFile, Set<String> propertyNamesToKeep,
+      Set<String> extraSymbolNamesToExport, boolean 
preventRenameMxmlSymbolReferences) {
     super(options);
 
     // The current approach to protecting "hidden" side-effects is to
@@ -145,8 +149,9 @@ public final class RoyaleClosurePassConfig extends 
PassConfig {
     preprocessorSymbolTableFactory = new 
PreprocessorSymbolTable.CachedInstanceFactory();
     this.varRenameMapFile = varRenameMapFile;
     this.sourceFileName = sourceFileName;
-    this.propertyNamesToKeep = propertyNamesToKeep;
+    this.propertyNamesToKeep = propertyNamesToKeep != null ? 
propertyNamesToKeep : new HashSet<String>();
     this.extraSymbolNamesToExport = extraSymbolNamesToExport;
+    this.preventRenameMxmlSymbolReferences = preventRenameMxmlSymbolReferences;
   }
 
   GlobalNamespace getGlobalNamespace() {
@@ -341,10 +346,12 @@ public final class RoyaleClosurePassConfig extends 
PassConfig {
       checks.add(angularPass);
     }
 
-    if (propertyNamesToKeep != null && propertyNamesToKeep.size() > 0) {
-      checks.add(keepRoyalePropertyNamesPass);
+    if (preventRenameMxmlSymbolReferences) {
+      checks.add(findRoyaleMxmlPropertiesToKeep);
     }
 
+    checks.add(keepRoyalePropertyNamesPass);
+
     if (extraSymbolNamesToExport != null) {
       checks.add(generateRoyaleExports);
     }
@@ -1287,6 +1294,25 @@ public final class RoyaleClosurePassConfig extends 
PassConfig {
         return ES_NEXT;
       }
     };
+  
+    private final PassFactory findRoyaleMxmlPropertiesToKeep = 
+      new PassFactory("find-royale-mxml-properties", true) {
+        @Override
+        protected CompilerPass create(final AbstractCompiler compiler) {
+          final FindRoyaleMXMLPropertyNamesToKeep pass = new 
FindRoyaleMXMLPropertyNamesToKeep(compiler);
+          return new CompilerPass() {
+            @Override
+            public void process(Node externs, Node root) {
+              pass.process(externs, root, propertyNamesToKeep);
+            }
+          };
+        }
+  
+        @Override
+        protected FeatureSet featureSet() {
+          return ES_NEXT;
+        }
+      };
 
     private final PassFactory keepRoyalePropertyNamesPass = 
         new PassFactory("keep-royale-property-names", true) {
diff --git 
a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/royale/MXMLRoyaleEmitter.java
 
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/royale/MXMLRoyaleEmitter.java
index 462c3c8..33382ef 100644
--- 
a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/royale/MXMLRoyaleEmitter.java
+++ 
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/royale/MXMLRoyaleEmitter.java
@@ -2342,7 +2342,7 @@ public class MXMLRoyaleEmitter extends MXMLEmitter 
implements
             writeNewline("var arr = " + formatQualifiedName(cname) + 
".superClass_.get__MXMLDescriptor.apply(this);");
             writeNewline("/** @type {Array} */");
             indentPush();
-            writeNewline("var data = [");
+            writeNewline("var mxmldd = [");
 
             mxmlDescriptorEmitter.emit(root);
             indentPop();
@@ -2352,12 +2352,12 @@ public class MXMLRoyaleEmitter extends MXMLEmitter 
implements
             indentPush();
             writeNewline("if (arr)");
             indentPop();
-            writeNewline("this.mxmldd = arr.concat(data);");
+            writeNewline("this.mxmldd = arr.concat(mxmldd);");
             indentPush();
             writeNewline("else");
             indentPop();
             indentPop();
-            writeNewline("this.mxmldd = data;");
+            writeNewline("this.mxmldd = mxmldd;");
             writeNewline("}");
             indentPop();
             writeNewline("return this.mxmldd;");
diff --git 
a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/royale/MXMLRoyalePublisher.java
 
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/royale/MXMLRoyalePublisher.java
index 63b3680..3c93e7d 100644
--- 
a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/royale/MXMLRoyalePublisher.java
+++ 
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/mxml/royale/MXMLRoyalePublisher.java
@@ -586,6 +586,7 @@ public class MXMLRoyalePublisher extends JSGoogPublisher 
implements IJSGoogPubli
             compilerWrapper.targetFilePath = 
projectReleaseMainFile.getCanonicalPath();
             compilerWrapper.setSourceMap(googConfiguration.getSourceMap());
             compilerWrapper.setVerbose(googConfiguration.isVerbose());
+            
compilerWrapper.setPreventRenameMxmlSymbolReferences(googConfiguration.getPreventRenameMxmlSymbolReferences());
 
             ok = compilerWrapper.compile();
 
diff --git 
a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/driver/js/goog/JSGoogConfiguration.java
 
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/driver/js/goog/JSGoogConfiguration.java
index 1f54cbc..5c00370 100644
--- 
a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/driver/js/goog/JSGoogConfiguration.java
+++ 
b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/driver/js/goog/JSGoogConfiguration.java
@@ -465,6 +465,25 @@ public class JSGoogConfiguration extends JSConfiguration
     }
 
     //
+    // 'prevent-rename-mxml-symbol-references'
+    //
+
+    private boolean preventRenameMxmlSymbolReferences = true;
+
+    public boolean getPreventRenameMxmlSymbolReferences()
+    {
+        return preventRenameMxmlSymbolReferences;
+    }
+
+    @Config
+    @Mapping("prevent-rename-mxml-symbol-references")
+    public void setPreventRenameMxmlSymbolReferences(ConfigurationValue cv, 
boolean value)
+            throws ConfigurationException
+    {
+       preventRenameMxmlSymbolReferences = value;
+    }
+
+    //
     // 'prevent-rename-public-symbols'
     //
 
diff --git 
a/compiler-jx/src/main/java/org/apache/royale/compiler/utils/JSClosureCompilerWrapper.java
 
b/compiler-jx/src/main/java/org/apache/royale/compiler/utils/JSClosureCompilerWrapper.java
index 638317e..b93f276 100644
--- 
a/compiler-jx/src/main/java/org/apache/royale/compiler/utils/JSClosureCompilerWrapper.java
+++ 
b/compiler-jx/src/main/java/org/apache/royale/compiler/utils/JSClosureCompilerWrapper.java
@@ -94,6 +94,7 @@ public class JSClosureCompilerWrapper
     private boolean skipTypeInference;
     private boolean sourceMap = false;
     private boolean verbose = false;
+    private boolean preventRenameMxmlSymbolReferences = true;
     
     public String targetFilePath;
     
@@ -127,6 +128,11 @@ public class JSClosureCompilerWrapper
         verbose = enabled;
     }
 
+    public void setPreventRenameMxmlSymbolReferences(boolean enabled)
+    {
+        preventRenameMxmlSymbolReferences = enabled;
+    }
+
     public void setPropertyNamesToKeep(Set<String> propertyNames)
     {
         propertyNamesToKeep = propertyNames;
@@ -173,7 +179,8 @@ public class JSClosureCompilerWrapper
 
         compiler_.setPassConfig(new RoyaleClosurePassConfig(options_, 
                        jsSourceFiles_.get(jsSourceFiles_.size() - 
1).getName(), 
-                       variableMapInputPath == null ? null : new 
File(outputFolder, variableMapInputPath), propertyNamesToKeep, 
extraSymbolNamesToExport));
+                       variableMapInputPath == null ? null : new 
File(outputFolder, variableMapInputPath),
+                propertyNamesToKeep, extraSymbolNamesToExport, 
preventRenameMxmlSymbolReferences));
         Result result = compiler_.compile(jsExternsFiles_, jsSourceFiles_, 
options_);
         
         try
diff --git a/compiler-jx/src/test/junitvmwatcher4026980527665481323.properties 
b/compiler-jx/src/test/junitvmwatcher4026980527665481323.properties
new file mode 100644
index 0000000..f3a5a15
--- /dev/null
+++ b/compiler-jx/src/test/junitvmwatcher4026980527665481323.properties
@@ -0,0 +1 @@
+terminated successfully
diff --git 
a/compiler-jx/src/test/resources/royale/files/MyInitialView_result.js 
b/compiler-jx/src/test/resources/royale/files/MyInitialView_result.js
index 5afeced..95dba6f 100644
--- a/compiler-jx/src/test/resources/royale/files/MyInitialView_result.js
+++ b/compiler-jx/src/test/resources/royale/files/MyInitialView_result.js
@@ -485,7 +485,7 @@ Object.defineProperties(MyInitialView.prototype, /** @lends 
{MyInitialView.proto
         /** @type {Array} */
         var arr = MyInitialView.superClass_.get__MXMLDescriptor.apply(this);
         /** @type {Array} */
-        var data = [
+        var mxmldd = [
           org.apache.royale.html.Label,
           4,
           'id',
@@ -961,9 +961,9 @@ Object.defineProperties(MyInitialView.prototype, /** @lends 
{MyInitialView.proto
           null
         ];
         if (arr)
-          this.mxmldd = arr.concat(data);
+          this.mxmldd = arr.concat(mxmldd);
         else
-          this.mxmldd = data;
+          this.mxmldd = mxmldd;
       }
       return this.mxmldd;
     }

Reply via email to