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;