You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by ah...@apache.org on 2017/08/12 03:55:16 UTC
[2/2] git commit: [flex-falcon] [refs/heads/develop] - control which
getter/setters get renamed by GCC by faking a set of externs. AFAICT that is
what @export on the Object.defineProperties object did. It didn't actually
create an export alias like exp
control which getter/setters get renamed by GCC by faking a set of externs. AFAICT that is what @export on the Object.defineProperties object did. It didn't actually create an export alias like exportSymbol per class, it just prevented renaming of the object keys with that name
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/207a9587
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/207a9587
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/207a9587
Branch: refs/heads/develop
Commit: 207a95872e4928a5af40209a6f436c51e7c14ace
Parents: 6331b80
Author: Alex Harui <ah...@apache.org>
Authored: Fri Aug 11 20:55:06 2017 -0700
Committer: Alex Harui <ah...@apache.org>
Committed: Fri Aug 11 20:55:06 2017 -0700
----------------------------------------------------------------------
.../codegen/mxml/flexjs/MXMLFlexJSEmitter.java | 45 ++++++++++++++++++++
.../mxml/flexjs/MXMLFlexJSPublisher.java | 36 ++++++++++++++++
.../internal/projects/FlexJSProject.java | 12 ++++++
3 files changed, 93 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/207a9587/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSEmitter.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSEmitter.java
index c79bfea..5d29850 100644
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSEmitter.java
@@ -43,6 +43,7 @@ import org.apache.flex.compiler.constants.IASKeywordConstants;
import org.apache.flex.compiler.constants.IASLanguageConstants;
import org.apache.flex.compiler.definitions.IClassDefinition;
import org.apache.flex.compiler.definitions.IDefinition;
+import org.apache.flex.compiler.definitions.ITypeDefinition;
import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
import org.apache.flex.compiler.internal.codegen.databinding.BindingDatabase;
import org.apache.flex.compiler.internal.codegen.databinding.BindingInfo;
@@ -753,6 +754,8 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements
MXMLDescriptorSpecifier root = currentStateOverrides;
root.isTopNode = true;
+ collectExportedNames(root);
+
writeNewline("/**");
if (emitExports)
writeNewline(" * @export");
@@ -788,6 +791,8 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements
MXMLDescriptorSpecifier root = propertiesTree;
root.isTopNode = true;
writeNewline(root.output(true));
+
+ collectExportedNames(root);
write(ASEmitterTokens.SQUARE_CLOSE);
write(ASEmitterTokens.PAREN_CLOSE);
@@ -1152,6 +1157,15 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements
for (BindingInfo bi : bindingInfo)
{
String s;
+ IMXMLNode node = bi.node;
+ if (node instanceof IMXMLSingleDataBindingNode)
+ {
+ IMXMLSingleDataBindingNode sbdn = (IMXMLSingleDataBindingNode)node;
+ FlexJSProject project = (FlexJSProject)getMXMLWalker().getProject();
+ IDefinition bdef = sbdn.getExpressionNode().resolve(project);
+ IDefinition cdef = bdef.getParent();
+ project.addExportedName(/*cdef.getQualifiedName() + "." + */bdef.getBaseName());
+ }
s = bi.getSourceString();
if (s == null && bi.isSourceSimplePublicProperty())
s = getSourceStringFromGetter(bi.getExpressionNodesForGetter());
@@ -1652,6 +1666,8 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements
MXMLDescriptorSpecifier root = descriptorTree.get(0);
root.isTopNode = false;
+ collectExportedNames(root);
+
indentPush();
writeNewline("'MXMLDescriptor': {");
writeNewline("/** @this {" + formatQualifiedName(cname) + "} */");
@@ -1697,6 +1713,35 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements
}
+ private void collectExportedNames(MXMLDescriptorSpecifier descriptor)
+ {
+ ICompilerProject project = getMXMLWalker().getProject();
+ FlexJSProject flexJSProject = null;
+ if (project instanceof FlexJSProject)
+ {
+ flexJSProject = (FlexJSProject) project;
+ String name = descriptor.name;
+ if (name == null)
+ name = this.classDefinition.getQualifiedName();
+ for (MXMLDescriptorSpecifier prop : descriptor.propertySpecifiers)
+ {
+ String propName = prop.name;
+ flexJSProject.addExportedName(/*name + "." + */propName);
+ if (prop.propertySpecifiers.size() > 0)
+ {
+ collectExportedNames(prop.propertySpecifiers.get(0));
+ }
+ }
+ if (descriptor.childrenSpecifier != null)
+ {
+ for (MXMLDescriptorSpecifier prop : descriptor.childrenSpecifier.propertySpecifiers)
+ {
+ collectExportedNames(prop);
+ }
+ }
+ }
+ }
+
//--------------------------------------------------------------------------
private HashMap<IMXMLEventSpecifierNode, String> eventHandlerNameMap = new HashMap<IMXMLEventSpecifierNode, String>();
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/207a9587/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
index c0c382f..a46c9ba 100644
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
@@ -266,6 +266,7 @@ public class MXMLFlexJSPublisher extends JSGoogPublisher implements IJSPublisher
compilerWrapper.addJSSourceFile(closureSourceFile);
}
+ writeExportedNames(compilerWrapper);
/////////////////////////////////////////////////////////////////////////////////
// Add all the externs to the compilation
@@ -766,5 +767,40 @@ public class MXMLFlexJSPublisher extends JSGoogPublisher implements IJSPublisher
}
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 FlexJS 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());
+ }
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/207a9587/compiler-jx/src/main/java/org/apache/flex/compiler/internal/projects/FlexJSProject.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/projects/FlexJSProject.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/projects/FlexJSProject.java
index 8dc88b0..8c2b232 100644
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/projects/FlexJSProject.java
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/projects/FlexJSProject.java
@@ -21,6 +21,7 @@ package org.apache.flex.compiler.internal.projects;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -431,4 +432,15 @@ public class FlexJSProject extends FlexProject
return true;
}
+ private HashSet<String> exportedNames = new HashSet<String>();
+
+ public void addExportedName(String name)
+ {
+ exportedNames.add(name);
+ }
+
+ public Set<String> getExportedNames()
+ {
+ return exportedNames;
+ }
}