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 2020/07/31 21:04:17 UTC

[royale-compiler] branch develop updated: Revert "RoyaleClosurePassConfig: better behavior for prevent-rename-*-symbols compiler options by skipping renaming of those symbols during RenamePropertiesWithModuleSupport"

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 db6bae9  Revert "RoyaleClosurePassConfig: better behavior for prevent-rename-*-symbols compiler options by skipping renaming of those symbols during RenamePropertiesWithModuleSupport"
db6bae9 is described below

commit db6bae974c227f7afb16be272250179f4a3ddb3f
Author: Josh Tynjala <jo...@apache.org>
AuthorDate: Fri Jul 31 14:04:01 2020 -0700

    Revert "RoyaleClosurePassConfig: better behavior for prevent-rename-*-symbols compiler options by skipping renaming of those symbols during RenamePropertiesWithModuleSupport"
    
    This reverts commit 337375ccd7ef072b9ed5599dbf8e123e219bf7d9.
---
 .../jscomp/RenamePropertiesWithModuleSupport.java  | 23 ++---------
 .../javascript/jscomp/RoyaleClosurePassConfig.java | 48 +++++++++++++++++++++-
 .../codegen/mxml/royale/MXMLRoyalePublisher.java   | 37 +++++++++++++++++
 3 files changed, 87 insertions(+), 21 deletions(-)

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 44f1b26..89ba74a 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 @@ class RenamePropertiesWithModuleSupport implements CompilerPass {
    */
   RenamePropertiesWithModuleSupport(AbstractCompiler compiler, boolean generatePseudoNames,
       NameGenerator nameGenerator) {
-    this(compiler, generatePseudoNames, null, null, null, nameGenerator, null);
+    this(compiler, generatePseudoNames, null, null, null, nameGenerator);
   }
 
   /**
@@ -156,11 +156,9 @@ class RenamePropertiesWithModuleSupport implements CompilerPass {
   RenamePropertiesWithModuleSupport(AbstractCompiler compiler,
       boolean generatePseudoNames, VariableMap prevUsedPropertyMap,
       NameGenerator nameGenerator) {
-    this(compiler, generatePseudoNames, prevUsedPropertyMap, null, null, nameGenerator, null);
+    this(compiler, generatePseudoNames, prevUsedPropertyMap, null, null, nameGenerator);
   }
 
-  private Set<String> propertyNamesToKeep;
-
   /**
    * Creates an instance.
    *
@@ -181,15 +179,13 @@ class RenamePropertiesWithModuleSupport implements CompilerPass {
       VariableMap prevUsedPropertyMap,
       @Nullable char[] reservedFirstCharacters,
       @Nullable char[] reservedNonFirstCharacters,
-      NameGenerator nameGenerator,
-      Set<String> propertyNamesToKeep) {
+      NameGenerator nameGenerator) {
     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());
   }
 
@@ -230,9 +226,6 @@ class RenamePropertiesWithModuleSupport implements CompilerPass {
      */
     reservedNames.addAll(externedNames);
     reservedNames.addAll(quotedNames);
-    if (propertyNamesToKeep != null) {
-      reservedNames.addAll(propertyNamesToKeep);
-    }
     
     generateNames(propsByFreq, reservedNames);
 
@@ -371,8 +364,6 @@ class RenamePropertiesWithModuleSupport implements CompilerPass {
                 propNode.getString())) {
               externedNames.add(propNode.getString());
               break;
-            } else if(propertyNamesToKeep.contains(propNode.getString())) {
-              break;
             }
             maybeMarkCandidate(propNode);
           }
@@ -387,9 +378,7 @@ class RenamePropertiesWithModuleSupport implements CompilerPass {
               // that could conflict with this quoted key.
               quotedNames.add(key.getString());
             } else if (compiler.getCodingConvention().blockRenamingForProperty(key.getString())) {
-              externedNames.add(key.getString()); 
-            } else if(propertyNamesToKeep.contains(key.getString())) {
-                continue;
+              externedNames.add(key.getString());
             } else {
               maybeMarkCandidate(key);
             }
@@ -407,8 +396,6 @@ class RenamePropertiesWithModuleSupport implements CompilerPass {
               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);
             }
@@ -450,8 +437,6 @@ class RenamePropertiesWithModuleSupport implements CompilerPass {
                   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 92f3cc8..a8665a1 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 @@ public final class RoyaleClosurePassConfig extends PassConfig {
       checks.add(angularPass);
     }
 
+    if (propertyNamesToKeep != null && propertyNamesToKeep.size() > 0) {
+      checks.add(keepPropertyNamesPass);
+    }
+
     if (!options.generateExportsAfterTypeChecking && options.generateExports) {
       checks.add(generateExports);
     }
@@ -1303,6 +1307,47 @@ public final class RoyaleClosurePassConfig extends PassConfig {
       }
     };
 
+    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) {
@@ -3082,8 +3127,7 @@ public final class RoyaleClosurePassConfig extends PassConfig {
                       prevPropertyMap,
                       options.getPropertyReservedNamingFirstChars(),
                       options.getPropertyReservedNamingNonFirstChars(),
-                      options.nameGenerator,
-                      propertyNamesToKeep);
+                      options.nameGenerator);
               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 944003d..89d364f 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,6 +411,8 @@ public class MXMLRoyalePublisher extends JSGoogPublisher implements IJSGoogPubli
             for (SourceFile closureSourceFile : closureSourceFiles) {
                 compilerWrapper.addJSSourceFile(closureSourceFile);
             }
+
+            writeExportedNames(compilerWrapper);
         }
 
         /////////////////////////////////////////////////////////////////////////////////
@@ -1113,6 +1115,41 @@ public class MXMLRoyalePublisher extends JSGoogPublisher implements IJSGoogPubli
         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;