RoyaleClosurePassConfig: better behavior for prevent-rename-*-symbols compiler options by skipping renaming of those symbols during RenamePropertiesWithModuleSupport

Previously, we generated an extra call to Object.defineProperties() with all of the names to keep. That prevented renaming in release builds, but it also unnecessarily increased the final output file size. Now, renaming is prevented without generating new code.
diff --git a/compiler-jx/src/main/java/com/google/javascript/jscomp/RenamePropertiesWithModuleSupport.java b/compiler-jx/src/main/java/com/google/javascript/jscomp/RenamePropertiesWithModuleSupport.java
index 89ba74a..44f1b26 100644
--- a/compiler-jx/src/main/java/com/google/javascript/jscomp/RenamePropertiesWithModuleSupport.java
+++ b/compiler-jx/src/main/java/com/google/javascript/jscomp/RenamePropertiesWithModuleSupport.java
@@ -138,7 +138,7 @@
    */
   RenamePropertiesWithModuleSupport(AbstractCompiler compiler, boolean generatePseudoNames,
       NameGenerator nameGenerator) {
-    this(compiler, generatePseudoNames, null, null, null, nameGenerator);
+    this(compiler, generatePseudoNames, null, null, null, nameGenerator, null);
   }
 
   /**
@@ -156,9 +156,11 @@
   RenamePropertiesWithModuleSupport(AbstractCompiler compiler,
       boolean generatePseudoNames, VariableMap prevUsedPropertyMap,
       NameGenerator nameGenerator) {
-    this(compiler, generatePseudoNames, prevUsedPropertyMap, null, null, nameGenerator);
+    this(compiler, generatePseudoNames, prevUsedPropertyMap, null, null, nameGenerator, null);
   }
 
+  private Set<String> propertyNamesToKeep;
+
   /**
    * Creates an instance.
    *
@@ -179,13 +181,15 @@
       VariableMap prevUsedPropertyMap,
       @Nullable char[] reservedFirstCharacters,
       @Nullable char[] reservedNonFirstCharacters,
-      NameGenerator nameGenerator) {
+      NameGenerator nameGenerator,
+      Set<String> propertyNamesToKeep) {
     this.compiler = compiler;
     this.generatePseudoNames = generatePseudoNames;
     this.prevUsedPropertyMap = prevUsedPropertyMap;
     this.reservedFirstCharacters = reservedFirstCharacters;
     this.reservedNonFirstCharacters = reservedNonFirstCharacters;
     this.nameGenerator = nameGenerator;
+    this.propertyNamesToKeep = propertyNamesToKeep;
     externedNames.addAll(compiler.getExternProperties());
   }
 
@@ -226,6 +230,9 @@
      */
     reservedNames.addAll(externedNames);
     reservedNames.addAll(quotedNames);
+    if (propertyNamesToKeep != null) {
+      reservedNames.addAll(propertyNamesToKeep);
+    }
     
     generateNames(propsByFreq, reservedNames);
 
@@ -364,6 +371,8 @@
                 propNode.getString())) {
               externedNames.add(propNode.getString());
               break;
+            } else if(propertyNamesToKeep.contains(propNode.getString())) {
+              break;
             }
             maybeMarkCandidate(propNode);
           }
@@ -378,7 +387,9 @@
               // that could conflict with this quoted key.
               quotedNames.add(key.getString());
             } else if (compiler.getCodingConvention().blockRenamingForProperty(key.getString())) {
-              externedNames.add(key.getString());
+              externedNames.add(key.getString()); 
+            } else if(propertyNamesToKeep.contains(key.getString())) {
+                continue;
             } else {
               maybeMarkCandidate(key);
             }
@@ -396,6 +407,8 @@
               quotedNames.add(key.getString());
             } else if (compiler.getCodingConvention().blockRenamingForProperty(key.getString())) {
               externedNames.add(key.getString());
+            } else if(propertyNamesToKeep.contains(key.getString())) {
+                continue;
             } else {
               maybeMarkCandidate(key);
             }
@@ -437,6 +450,8 @@
                   Node fnName = member.getFirstChild();
                   if (compiler.getCodingConvention().blockRenamingForProperty(memberDefName)) {
                     externedNames.add(fnName.getString());
+                  } else if(propertyNamesToKeep.contains(memberDefName)) {
+                      break;
                   } else if (memberDefName.equals("constructor")
                       || memberDefName.equals("superClass_")) {
                     // TODO (simarora) is there a better way to identify these externs?
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 a8665a1..92f3cc8 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
@@ -344,10 +344,6 @@
       checks.add(angularPass);
     }
 
-    if (propertyNamesToKeep != null && propertyNamesToKeep.size() > 0) {
-      checks.add(keepPropertyNamesPass);
-    }
-
     if (!options.generateExportsAfterTypeChecking && options.generateExports) {
       checks.add(generateExports);
     }
@@ -1307,47 +1303,6 @@
       }
     };
 
-    private final PassFactory keepPropertyNamesPass = 
-        new PassFactory("keep-property-names", true) {
-          @Override
-          protected CompilerPass create(final AbstractCompiler compiler) {
-            return new CompilerPass() {
-              @Override
-              public void process(Node externs, Node root) {
-
-                Node propsObj = new Node(Token.OBJECTLIT);
-                for(String nameToKeep : propertyNamesToKeep)
-                {
-                  Node nameStringKey = IR.stringKey(nameToKeep);
-                  JSDocInfoBuilder builder = new JSDocInfoBuilder(true);
-                  builder.recordExport();
-                  JSDocInfo jsDocInfo = builder.build();
-                  nameStringKey.setJSDocInfo(jsDocInfo);
-
-                  Node propertyDescriptor = new Node(Token.OBJECTLIT);
-                  propertyDescriptor.addChildToBack(IR.propdef(IR.stringKey("get"), NodeUtil.emptyFunction()));
-
-                  Node prop = IR.propdef(nameStringKey, propertyDescriptor);
-                  propsObj.addChildToBack(prop);
-                }
-
-                Node definePropertiesTarget = NodeUtil.newQName(compiler, "Object.defineProperties");
-                Node definePropertiesCall = IR.call(definePropertiesTarget, IR.objectlit(), propsObj);
-                Node expression = IR.exprResult(definePropertiesCall);
-                
-                Node scriptNode = compiler.getScriptNode(sourceFileName);
-                scriptNode.addChildToBack(expression);
-                compiler.reportChangeToEnclosingScope(expression);
-              }
-            };
-          }
-    
-          @Override
-          protected FeatureSet featureSet() {
-            return ES_NEXT;
-          }
-        };
-
   /** Raw exports processing pass. */
   private final PassFactory gatherRawExports =
       new PassFactory(PassNames.GATHER_RAW_EXPORTS, true) {
@@ -3127,7 +3082,8 @@
                       prevPropertyMap,
                       options.getPropertyReservedNamingFirstChars(),
                       options.getPropertyReservedNamingNonFirstChars(),
-                      options.nameGenerator);
+                      options.nameGenerator,
+                      propertyNamesToKeep);
               rprop.process(externs, root);
               compiler.setPropertyMap(rprop.getPropertyMap());
             }
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 89d364f..944003d 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
@@ -411,8 +411,6 @@
             for (SourceFile closureSourceFile : closureSourceFiles) {
                 compilerWrapper.addJSSourceFile(closureSourceFile);
             }
-
-            writeExportedNames(compilerWrapper);
         }
 
         /////////////////////////////////////////////////////////////////////////////////
@@ -1115,41 +1113,6 @@
         return true;
     }
     
-    private void writeExportedNames(JSClosureCompilerWrapper compilerWrapper)
-    {
-    	if (!googConfiguration.getExportPublicSymbols())
-    	{
-    		// if not generating exports for every public symbol
-    		// generate an externs file that blocks renaming
-    		// of properties used by MXML and dataBinding.
-	        Set<String> exportedNames = project.getExportedNames();
-	        if (exportedNames.size() > 0)
-	        {
-	        	StringBuilder sb = new StringBuilder();
-	        	sb.append("/**\n");
-	        	sb.append(" * generated by Apache Royale compiler\n");
-	        	sb.append(" * @externs\n");
-	        	sb.append(" */\n");
-	        	for (String name : exportedNames)
-	        	{
-	        		sb.append("\n\n");
-		        	sb.append("/**\n");
-		        	sb.append(" * @export\n");
-		        	sb.append(" */\n");
-		        	sb.append("Object.prototype." + name + ";\n");
-	        	}
-	        	File exportsFile = new File(outputFolder, "dontrename.js");
-	        	try {
-					writeFile(exportsFile, sb.toString(), false);
-				} catch (IOException e) {
-					// TODO Auto-generated catch block
-					e.printStackTrace();
-				}
-	        	compilerWrapper.addJSExternsFile(exportsFile.getAbsolutePath());
-	        }
-    	}
-    }
-    
     private String getFactoryClass(IMetaTag node)
     {
     	if (node == null) return null;