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

This reverts commit db6bae974c227f7afb16be272250179f4a3ddb3f.
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;