RoyaleClosurePassConfig: restore previous prevent-rename-* behavior because the newer alternative seems to have broken some things (closes #159)
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 c332a81..dee46a3 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,6 +344,10 @@
       checks.add(angularPass);
     }
 
+    if (propertyNamesToKeep != null && propertyNamesToKeep.size() > 0) {
+      checks.add(keepPropertyNamesPass);
+    }
+
     if (extraSymbolNamesToExport != null) {
       checks.add(generateRoyaleExports);
     }
@@ -1287,6 +1291,47 @@
       }
     };
 
+    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) {
@@ -3067,7 +3112,7 @@
                       options.getPropertyReservedNamingFirstChars(),
                       options.getPropertyReservedNamingNonFirstChars(),
                       options.nameGenerator,
-                      propertyNamesToKeep);
+                      null);
               rprop.process(externs, root);
               compiler.setPropertyMap(rprop.getPropertyMap());
             }